fpdb/packaging/windows/fpdbEnvInstaller2.au3
2009-10-25 00:13:35 +02:00

182 lines
10 KiB
AutoIt

;"%programfiles%\MySQL\MySQL Server 5.0\bin\mysqld" --remove
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Includes
#include <GUIConstantsEx.au3>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Variables
Dim $rootPwd = ""
Dim $fpdbUserPwd = ""
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Welcome message and option to abort. Change of working dir to \fpdbEnv
Dim $welcomeBox = MsgBox(4100, "fpdb environment installation", "This installer will automatically create the environment which is needed to run fpdb." & @CRLF & @CRLF & _
"This means installing and configuring MySQL and Python including some special modules," & @CRLF & "creating a directory for your fpdb user profile and adding gtk to your path." & @CRLF & @CRLF & _
"You are advised to close all aplications before you proceed." & @CRLF & @CRLF & _
"DON'T use the keyboard or the mouse during installation unless you are asked to! Just WAIT until the message box 'End of Installation' pops up!" & @CRLF & @CRLF & _
"If you want to continue the installation click 'Yes'." & @CRLF & "If you want to abort the installation click 'No'.")
If $welcomeBox == 7 Then
Exit ;Exit Installation if 'No' button is clicked in message box
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Ask user for mysql root password
GUICreate("FPDB Environment Installation", 600, 400)
GUICtrlCreateLabel("For the installation of the FPDB Environment the MySQL root password and your poker database password are needed.", 20, 25)
GUICtrlCreateLabel("In case MySQL and/or your fpdb poker database aren't installed on your computer, just pick a password.", 20, 50)
GUICtrlCreateLabel("MySQL Root Password:", 20, 100)
$rootPw = GUICtrlCreateInput("your password here", 150, 100, 100, 20)
GUICtrlCreateLabel("Retype password:", 290, 100)
$rootPwR = GUICtrlCreateInput("", 420, 100, 100, 20)
GUICtrlCreateLabel("Poker DB User Password:", 20, 150)
$userPw = GUICtrlCreateInput("your password here", 150, 150, 100, 20)
GUICtrlCreateLabel("Retype password:", 290, 150)
$userPwR = GUICtrlCreateInput("", 420, 150, 100, 20)
$okbutton = GUICtrlCreateButton("OK", 270, 200, 60, 20)
$status = GUICtrlCreateLabel("This is the status line. It describes what the installer is doing at the moment.", 20, 250, 560)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $okbutton
If Not(GUICtrlRead($rootPw) == GUICtrlRead($rootPwR)) OR GUICtrlRead($rootPw) == "" Then
MsgBox(16, "", "The passwords don't macht! Try again!", 20, 250)
ElseIf Not(GUICtrlRead($userPw) == GUICtrlRead($userPwR)) OR GUICtrlRead($userPw) == "" Then
MsgBox(16, "", "The passwords don't macht! Try again!", 20, 250)
Else
$rootPwd = GUICtrlRead($rootPw)
$fpdbUserPwd = GUICtrlRead($userPw)
GUICtrlSetState($okbutton, $GUI_DISABLE)
ExitLoop
EndIf
EndSelect
WEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Files Needed
FileInstall("fpdb\7za.exe", "7za.exe")
FileInstall("fpdb\MySQL Server 5.0.7z", "MySQL Server 5.0.7z")
FileInstall("fpdb\gtk.7z", "gtk.7z")
FileInstall("fpdb\python-2.5.2.msi", "python-2.5.2.msi")
FileInstall("fpdb\pymysql.7z", "pymysql.7z")
FileInstall("fpdb\pycairo.7z", "pycairo.7z")
FileInstall("fpdb\pygobject.7z", "pygobject.7z")
FileInstall("fpdb\pygtk.7z", "pygtk.7z")
FileInstall("fpdb\psykopg2.7z", "psykopg2.7z")
FileInstall("fpdb\pywin32.7z", "pywin32.7z")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; MySQL Install and configuration
If NOT FileExists(EnvGet("programfiles") & "\MySQL\MySQL Server 5.0\bin\mysql.exe") Then
GUICtrlSetData($status, "Installing MySQL Database Management System and creating MySQL windows service.")
RunWait('7za.exe x "MySQL Server 5.0.7z" -o"' & EnvGet("programfiles") & '\MySQL\" -aoa', "", @SW_HIDE)
RunWait('"' & EnvGet("programfiles") & '\MySQL\MySQL Server 5.0\bin\mysqld" --install', "", @SW_HIDE)
RunWait("net start mysql", "", @SW_HIDE)
ProcessWait("mysqld.exe")
GUICtrlSetData($status, "Securing important MySQL user accounts.")
Sleep(5000)
FileWrite(EnvGet("programfiles") & "\MySQL\MySQL Server 5.0\bin\mysql1.txt", "DELETE FROM mysql.user WHERE User = '';" & @CRLF)
FileWrite(EnvGet("programfiles") & "\MySQL\MySQL Server 5.0\bin\mysql1.txt", "UPDATE mysql.user SET Password = PASSWORD('" & $rootPwd & "') WHERE User = 'root';" & @CRLF)
FileWrite(EnvGet("programfiles") & "\MySQL\MySQL Server 5.0\bin\mysql1.txt", "FLUSH PRIVILEGES;" & @CRLF)
RunWait(@ComSpec & ' /c mysql --user=root -e "source mysql1.txt"', EnvGet("programfiles") & '\MySQL\MySQL Server 5.0\bin\', @SW_HIDE)
EndIf
If NOT FileExists(EnvGet("programfiles") & "\MySQL\MySQL Server 5.0\data\fpdb") Then
GUICtrlSetData($status, "Creating fpdb database.")
FileWrite(EnvGet("programfiles") & "\MySQL\MySQL Server 5.0\bin\mysql2.txt", "create database fpdb;" & @CRLF)
RunWait(@ComSpec & ' /c mysql --user=root --password=' & $rootPwd & ' -e "source mysql2.txt"', EnvGet("programfiles") & '\MySQL\MySQL Server 5.0\bin\', @SW_HIDE)
EndIf
GUICtrlSetData($status, "Creating MySQL user 'fpdb' and granting privileges.")
FileWrite(EnvGet("programfiles") & "\MySQL\MySQL Server 5.0\bin\mysql3.txt", "GRANT ALL PRIVILEGES ON fpdb.* TO 'fpdb'@'localhost' IDENTIFIED BY '" & $fpdbUserPwd & "' WITH GRANT OPTION;" & @CRLF)
RunWait(@ComSpec & ' /c mysql --user=root --password=' & $rootPwd & ' -e "source mysql3.txt"', EnvGet("programfiles") & '\MySQL\MySQL Server 5.0\bin\', @SW_HIDE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; GTK
GUICtrlSetData($status, "Installing GTK.")
RunWait('7za.exe x "gtk.7z" -oc:\ -aoa', "", @SW_HIDE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Python 2.5 Installation
GUICtrlSetData($status, "Installing Python 2.5.2")
RunWait("msiexec /quiet /i python-2.5.2.msi", "", @SW_HIDE) ;Install Python without user interaction
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; pymysql
GUICtrlSetData($status, "Installing pymysql")
RunWait('7za.exe x "pymysql.7z" -oC:\Python25\Lib\site-packages -aoa', "", @SW_HIDE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; pycairo
GUICtrlSetData($status, "Installing pycairo")
RunWait('7za.exe x "pycairo.7z" -oC:\ -aoa', "", @SW_HIDE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; pygobject
GUICtrlSetData($status, "Installing pygobject")
RunWait('7za.exe x "pygobject.7z" -oC:\ -aoa', "", @SW_HIDE)
RunWait(@ComSpec & ' /c C:\Python25\python.exe pygobject_postinstall.py -install', "C:\Python25\SCRIPTS", @SW_HIDE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; pygtk
GUICtrlSetData($status, "Installing pygtk")
RunWait('7za.exe x "pygtk.7z" -oC:\ -aoa', "", @SW_HIDE)
RunWait(@ComSpec & ' /c C:\Python25\python.exe pygtk_postinstall.py -install', "C:\Python25\SCRIPTS", @SW_HIDE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; psykopg2
GUICtrlSetData($status, "Installing psykopg2")
RunWait('7za.exe x "psykopg2.7z" -oC:\ -aoa', "", @SW_HIDE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; pywin32
GUICtrlSetData($status, "Installing pywin32 for Python 2.5")
RunWait('7za.exe x "pywin32.7z" -oC:\ -aoa', "", @SW_HIDE)
RunWait(@ComSpec & ' /c C:\Python25\python.exe pywin32_postinstall.py -install', "C:\Python25\SCRIPTS", @SW_HIDE)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Creating directory for default.conf and coping the file into it
GUICtrlSetData($status, "Creating and installing default.conf file.")
$file = FileOpen("default.conf", 1)
FileWriteLine($file, "db-backend=2" & @CRLF)
FileWriteLine($file, "db-host=localhost" & @CRLF)
FileWriteLine($file, "db-databaseName=fpdb" & @CRLF)
FileWriteLine($file, "db-user=fpdb" & @CRLF)
FileWriteLine($file, "db-password=" & $fpdbUserPwd & @CRLF)
FileWriteLine($file, "tv-combinedStealFold=True" & @CRLF)
FileWriteLine($file, "tv-combined2B3B=True" & @CRLF)
FileWriteLine($file, "tv-combinedPostflop=True" & @CRLF)
FileWriteLine($file, "bulkImport-defaultPath=default" & @CRLF)
FileWriteLine($file, "hud-defaultPath=default" & @CRLF)
FileWriteLine($file, "imp-callFpdbHud=True" & @CRLF)
FileClose($file)
FileCopy("default.conf", EnvGet("appdata") & "\fpdb\", 9)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Registry
GUICtrlSetData($status, "Creating backup of path variable and adding GTK and Python to path variable.")
RegWrite("HKEY_CURRENT_USER\Environment", "PathBackup", "REG_SZ", RegRead("HKEY_CURRENT_USER\Environment", "path"))
RegWrite("HKEY_CURRENT_USER\Environment", "path", "REG_SZ", RegRead("HKEY_CURRENT_USER\Environment", "path") & ';C:\gtk\bin;C:\Python25')
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Delete installation files
GUICtrlSetData($status, "Deleting temporary installation files.")
FileDelete("7za.exe")
FileDelete("MySQL Server 5.0.7z")
FileDelete("gtk.7z")
FileDelete("python-2.5.2.msi")
FileDelete("pymysql.7z")
FileDelete("pycairo.7z")
FileDelete("pygobject.7z")
FileDelete("pygtk.7z")
FileDelete("psykopg2.7z")
FileDelete("pywin32.7z")
FileDelete("default.conf")
$goodbyeBox = MsgBox(4100, "End of Installation", "The Computer needs to be restarted for the installation to be complete." & @CRLF & _
"After that you can start fpdb by double clicking the file fpdb.py which is located in the folder pyfpdb of the fpdb build you downloaded." & @CRLF & _
"If you haven't downloaded fpdb yet you can do it here: http://ovh.dl.sourceforge.net/sourceforge/fpdb/fpdb-alpha2-p68.zip" & @CRLF & @CRLF & _
"If you want to restart the computer now click 'Yes'." & @CRLF & _
"If you want to restart the computer later click 'No'.")
If $goodbyeBox == 7 Then
Exit ;Exit Installation if 'No' button is clicked in message box
EndIf
Run("shutdown.exe -r -t 0")