]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/win32/winbacula.nsi.in
added VSS toggling by enable_vss
[bacula/bacula] / bacula / src / win32 / winbacula.nsi.in
index ab50bb552fca53472b222191f091c2667506d6fe..cc83244df6ecae1dc321094bd13beca6bbadaa09 100755 (executable)
 ; winbacula.nsi
 ;
-; written by Michel Meyers (michel@tcnnet.dyndns.org)
+; Began as a version written by Michel Meyers (michel@tcnnet.dyndns.org)
 ;
-; ChangeLog
-; v0.1 - initial release (still a lot to do)
+; Adapted by Kern Sibbald for native Win32 Bacula
+;    added a number of elements from Christopher Hull's installer
+;
+; D. Scott Barninger Nov 13 2004
+; added configuration editing for bconsole.conf and wx-console.conf
+; better explanation in dialog boxes for editing config files
+; added Start Menu items
+; fix uninstall of config files to do all not just bacula-fd.conf
+;
+; D. Scott Barninger Dec 05 2004
+; added specification of default permissions for bacula-fd.conf
+;   - thanks to Jamie Ffolliott for pointing me at cacls
+; added removal of working-dir files if user selects to remove config
+; uninstall is now 100% clean
+;
+; D. Scott Barninger Apr 17 2005
+; 1.36.3 release docs update
+; add pdf manual and menu shortcut
+;
+; Command line options:
+;
+; /cygwin     -  do cygwin install into c:\cygwin\bacula
+; /service    - 
+; /start
 
-;!define TEMP1 $R0 ;Temp variable
-!define VERSION '@VERSION@-@LSMDATE@'
+!define PRODUCT "Bacula"
+!define VERSION "@VERSION@"
 
-SetCompressor lzma
-SetCompressorDictSize 32
+;                           
+; Include the Modern UI
+;
+!include "MUI.nsh"
+!include "params.nsh"
+!include "util.nsh"
 
-; The name of the installer
-Name "Bacula Client"
+;
+; Basics
+;
+  Name "Bacula Client"
+  OutFile "winbacula-${VERSION}.exe"
+  SetCompressor lzma
+  InstallDir "c:\bacula"
 
-; The file to write
-OutFile "winbacula-${VERSION}.exe"
+;
+; Pull in pages
+;
+ !insertmacro MUI_PAGE_WELCOME
+;  !insertmacro MUI_PAGE_LICENSE "License.txt"
+ !insertmacro MUI_PAGE_COMPONENTS
+ !insertmacro MUI_PAGE_DIRECTORY
+ !insertmacro MUI_PAGE_INSTFILES
+ !insertmacro MUI_PAGE_FINISH
 
-; The default installation directory
-InstallDir "c:\bacula"
+ !insertmacro MUI_UNPAGE_WELCOME
+ !insertmacro MUI_UNPAGE_CONFIRM
+ !insertmacro MUI_UNPAGE_INSTFILES
+ !insertmacro MUI_UNPAGE_FINISH
 
-DirText "Setup will install the Bacula Client v${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder.$\n$\nNote to CYGWIN users: please choose your CYGWIN root directory."
-Page directory
-Page instfiles
-UninstPage uninstConfirm
-UninstPage instfiles
-
-;Icon "${NSISDIR}\Contrib\Icons\modern-install.ico"
-;UninstallIcon "${NSISDIR}\Contrib\Icons\modern-uninstall.ico"
-;CheckBitmap "${NSISDIR}\Contrib\Icons\modern.bmp"
-
-; The text to prompt the user to enter a directory
-;ComponentText "This will extract the temporary files needed for controlling your PC remotely."
-; The stuff to install
-
-; -- written by Alexis de Valence --
-; GetONEParameter
-
-; Usage:
-;   Push 3                 ; to get the 3rd parameter of the command line
-;   Call GetONEParameter
-;   Pop $R0                ; saves the result in $R0
-; returns an empty string if not found
-
-Function GetONEParameter
-   Exch $R0
-   Push $R1
-   Push $R2
-   Push $R3
-   Push $R4
-   Push $R5
-   Push $R6
-
-; init variables
-   IntOp $R5 $R0 + 1
-   StrCpy $R2 0
-   StrCpy $R4 1
-   StrCpy $R6 0
-
-   loop3: ; looking for a char that's not a space
-     IntOp $R2 $R2 + 1
-     StrCpy $R0 $CMDLINE 1 $R2
-     StrCmp $R0 " " loop3
-     StrCpy $R3 $R2   ; found the begining of the current parameter
-
-
-   loop:          ; scanning for the end of the current parameter
-
-     StrCpy $R0 $CMDLINE 1 $R2
-     StrCmp $R0 " " loop2
-     StrCmp $R0 "" last
-     IntOp $R2 $R2 + 1
-     Goto loop
-
-   last: ; there will be no other parameter to extract
-   StrCpy $R6 1
-
-   loop2: ; found the end of the current parameter
-
-   IntCmp $R4 $R5 0 NextParam end
-   StrCpy $R6 1 ; to quit after this process
-
-   IntOp $R1 $R2 - $R3 ;number of letter of current parameter
-   StrCpy $R0 $CMDLINE $R1 $R3        ; stores the result in R0
-
-   NextParam:
-   IntCmp $R6 1 end ; leave if found or if not enough parameters
-
-   ; process the next parameter
-   IntOp $R4 $R4 + 1
-
-   Goto loop3
-
-   end:
-
-   Pop $R6  ; restore R0 - R6 to their initial value
-   Pop $R5
-   Pop $R4
-   Pop $R3
-   Pop $R2
-   Pop $R1
-
-   Exch $R0    ;Puts the result on the stack
-
- FunctionEnd
-
-; -- written by Michel Meyers --
-; ParameterGiven - checks first 9 parameters on the command line
-; Usage:
-;   Push "/parameter"                 ; to check command line for /parameter
-;   Call ParameterGiven
-;   Pop $R0                ; saves the result in $R0 (result = true or false)
-
- Function ParameterGiven
-   Exch $R0
-   Push $R1
-   Push $R2
-   Push $R3
-   
-   StrCpy $R1 0
-   StrCpy $R3 0
-   loopme:
-   StrCmp $R1 9 AllChecked
-   IntOp $R1 $R1 + 1
-   Push $R1
-   Call GetONEParameter
-   Pop $R2                ; saves the result in $R2
-   StrCmp $R0 $R2 Found
-   Goto loopme
-   
-   Found:
-   StrCpy $R3 1
-   Goto loopme
-   
-   AllChecked:
-   Exch $R3
-  
- FunctionEnd
 
-Section "Install"
+ !define      MUI_ABORTWARNING
 
+ !insertmacro MUI_LANGUAGE "English"
+
+
+
+DirText "Setup will install the Bacula Client ${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder.$\n$\nNote to CYGWIN users: please choose your CYGWIN root directory."
+
+
+Section "Bacula File Service" SecService
+  ;
   ; /cygwin on command line forces install dir to c:\cygwin\bacula (useful for silent install)
+  ;
   Push "/cygwin"
   Call ParameterGiven
   Pop $6
   StrCmp $6 0 NoCygwin
   StrCpy $INSTDIR "c:\cygwin\bacula"
-  NoCygwin:
+ NoCygwin:
+; IfFileExists "c:\cygwin" Cygwin ReallyNoCygwin
+;Cygwin:
+; StrCpy $INSTDIR "c:\cygwin\bacula"
+;ReallyNoCygwin:
 
   ; Check for existing installation
   StrCpy $7 0
   IfFileExists "$INSTDIR\bin\bacula-fd.conf" Upgrade NoUpgrade
 Upgrade:
+ Upgrade:
     StrCpy $7 1
     ; Shutdown any baculas that could be running
     ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill'
-  NoUpgrade:
+    ; give it some time to shutdown
+    Sleep 1000
+ NoUpgrade:
 
   ; Set output path to the installation directory.
   SetOutPath "$INSTDIR\bin"
@@ -165,16 +104,16 @@ Section "Install"
   CreateDirectory "c:\tmp"
   ; Put files there
   File baculafd\Release\bacula-fd.exe
-  File pthreads\pthreadVCE.dll
-  IfFileExists "$INSTDIR\bacula-fd.conf" newconf 
-  File bacula-fd.conf
+  File ..\..\..\depkgs-win32\pthreads\pthreadVCE.dll
+  File License.txt
+  IfFileExists "$INSTDIR\bin\bacula-fd.conf" newconf 
+  File baculafd\bacula-fd.conf
   goto do_service
 newconf:
-  File /oname=bacula-fd.conf.new bacula-fd.conf
+ newconf:
+  File /oname=bacula-fd.conf.new baculafd\bacula-fd.conf
        
-
   ; If /service was given jump to the service install part
 do_service:
+ do_service:
   Push "/service"
   Call ParameterGiven
   Pop $5
@@ -189,25 +128,32 @@ Section "Install"
 
   ; Install as service?
   MessageBox MB_YESNO|MB_ICONQUESTION "Do you want to install the Bacula Client as a service (automatically starts with your PC)?" IDNO NoService
 Service:
+ Service:
     ExecWait '"$INSTDIR\bin\bacula-fd.exe" /install'
     StrCpy $9 "1"
     WriteRegDWORD HKLM "Software\Bacula" "InstalledService" "1"
-  NoService:
+ NoService:
+
+  ; Create Start Menu Directory
+  SetShellVarContext all
+  CreateDirectory "$SMPROGRAMS\Bacula"
+  ; If not installed as service create Start Menu link
+  StrCmp $9 "1" Uninstall
+  CreateShortCut "$SMPROGRAMS\Bacula\Start Bacula Client.lnk" "$INSTDIR\bin\bacula-fd.exe" "-c $INSTDIR\bin\bacula-fd.conf" "$INSTDIR\bin\bacula-fd.exe" 0
 
-  ; Write the uninstall keys for Windows
+  Uninstall:
+  ; Write the uninstall keys for Windows & create Start Menu entry
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula Client"
   WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "UninstallString" '"$INSTDIR\uninstall.exe"'
-  SetOutPath "$INSTDIR"
-  WriteUninstaller "uninstall.exe"
+  WriteUninstaller "$INSTDIR\Uninstall.exe"
+  CreateShortCut "$SMPROGRAMS\Bacula\Uninstall Bacula.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0
 
   ; Create bacula-fd.conf and have the user edit it (skipped if silent)
   IfSilent NoReminder
   StrCmp $7 "1" NoReminder  ; skip if it is an upgrade
-  MessageBox MB_OK "Please edit $INSTDIR\bin\bacula-fd.conf according to your requirements/installation! Also remember to put a shortcut into your start menu if you didn't install the client as a service."
-  CopyFiles /SILENT "$INSTDIR\bin\bacula-fd.conf.new" "$INSTDIR\bin\bacula-fd.conf"
+  MessageBox MB_OK "Please edit the client configuration file $INSTDIR\bin\bacula-fd.conf to fit your installation. When you click the OK button Wordpad will open to allow you to do this. Be sure to save your changes before closing Wordpad."
   Exec 'write "$INSTDIR\bin\bacula-fd.conf"'  ; spawn wordpad with the file to be edited
 NoReminder:
+ NoReminder:
 
   ; Start the client? (default skipped if silent, use /start to force starting)
   Push "/start"
@@ -215,21 +161,101 @@ Section "Install"
   Pop $8
   StrCmp $8 "1" Start
   IfSilent NoStart
+  Call IsNt
+  Pop $R0
+  StrCmp $R0 "false" do_win98
+  MessageBox MB_YESNO|MB_ICONQUESTION  "Would you like to start the Bacula Client now?" IDNO SetPerms
+  Exec 'net start bacula'
+ SetPerms:
+  ; set default permissions on config file so it's not world readable
+  Exec 'cmd /C echo Y|cacls "$INSTDIR\bin\bacula-fd.conf" /G SYSTEM:F Administrators:F'
+  goto NoStart 
+ do_win98:
+  File Start.bat
+  File Stop.bat
   MessageBox MB_YESNO|MB_ICONQUESTION  "Would you like to start the Bacula Client now?" IDNO NoStart
-  Start:
-    Exec '"$INSTDIR\bin\bacula-fd.exe" -c "$INSTDIR\bin\bacula-fd.conf"'
-  NoStart:
+ Start:
+  Exec '"$INSTDIR\bin\bacula-fd.exe" -c "$INSTDIR\bin\bacula-fd.conf"'
+ NoStart:
+SectionEnd
 
+Section "Install Console" SecConsole
+  SetOutPath "$INSTDIR\bin"
+  File console\Release\bconsole.exe
+  IfFileExists "$INSTDIR\bin\bconsole.conf" newconf 
+  File console\bconsole.conf
+  goto do_next
+ newconf:
+  File /oname=bconsole.conf.new console\bconsole.conf
+ do_next:
+
+  ; Create bconsole.conf and have the user edit it (skipped if silent)
+  IfSilent NoReminder
+  StrCmp $7 "1" NoReminder  ; skip if it is an upgrade
+  MessageBox MB_OK "Please edit the command line console configuration file $INSTDIR\bin\bconsole.conf to fit your installation. When you click the OK button Wordpad will open to allow you to do this. Be sure to save your changes before closing Wordpad."
+  Exec 'write "$INSTDIR\bin\bconsole.conf"'  ; spawn wordpad with the file to be edited
+ NoReminder:
+SectionEnd
+
+Section "Install wx-Console" SecWxConsole
+  SetOutPath "$INSTDIR\bin"
+  File wx-console\Release\wx-console.exe
+  IfFileExists "$INSTDIR\bin\wx-console.conf" newconf 
+  File wx-console\wx-console.conf
+  goto do_next
+ newconf:
+  File /oname=wx-console.conf.new wx-console\wx-console.conf
+ do_next:
+  ; Create Start Menu entry
+  SetShellVarContext all
+  CreateShortCut "$SMPROGRAMS\Bacula\WX-Console.lnk" "$INSTDIR\bin\wx-console.exe" "-c $INSTDIR\bin\wx-console.conf" "$INSTDIR\bin\wx-console.exe" 0
+
+  ; Create wx-console.conf and have the user edit it (skipped if silent)
+  IfSilent NoReminder
+  StrCmp $7 "1" NoReminder  ; skip if it is an upgrade
+  MessageBox MB_OK "Please edit the WX-console configuration file $INSTDIR\bin\wx-console.conf to fit your installation. When you click the OK button Wordpad will open to allow you to do this. Be sure to save your changes before closing Wordpad."
+  Exec 'write "$INSTDIR\bin\wx-console.conf"'  ; spawn wordpad with the file to be edited
+ NoReminder:
+SectionEnd
+
+
+Section "Install Documentation" SecDoc
+  SetOutPath "$INSTDIR\doc"
+  CreateDirectory "$INSTDIR\doc"
+  File ..\..\..\docs\manual\bacula\*.html
+  File ..\..\..\docs\manual\bacula\*.png
+  File ..\..\..\docs\manual\bacula\*.css
+  File ..\..\..\docs\manual\bacula.pdf
+  ; Create Start Menu entry
+  SetShellVarContext all
+  CreateShortCut "$SMPROGRAMS\Bacula\Manual.lnk" "$INSTDIR\doc\bacula.pdf"
 SectionEnd
 
+;
+; Extra Page descriptions
+;
+
+  LangString DESC_SecService ${LANG_ENGLISH} "Install Bacula client on this system."
+  LangString DESC_SecConsole ${LANG_ENGLISH} "Install Console program on this system."
+  LangString DESC_SecWxConsole ${LANG_ENGLISH} "Install graphical console program on this system."
+  LangString DESC_SecDoc ${LANG_ENGLISH} "Install Documentation on this system."
+
+  !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+    !insertmacro MUI_DESCRIPTION_TEXT ${SecService} $(DESC_SecService)
+    !insertmacro MUI_DESCRIPTION_TEXT ${SecConsole} $(DESC_SecConsole)
+    !insertmacro MUI_DESCRIPTION_TEXT ${SecWxConsole} $(DESC_SecWxConsole)
+    !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} $(DESC_SecDoc)
+  !insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+
 
 ; Uninstall section
 
 UninstallText "This will uninstall the Bacula Client. Hit next to continue."
 
 Section "Uninstall"
-  
-  ; Shutdown any baculas that could be running
+
+  ; Shutdown any baculum that could be running
   ExecWait '"$INSTDIR\bin\bacula-fd.exe" /kill'
 
   ReadRegDWORD $9 HKLM "Software\Bacula" "InstalledService"
@@ -242,30 +268,41 @@ Section "Uninstall"
   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula"
   DeleteRegKey HKLM "Software\Bacula"
 
+  ; remove start menu items
+  SetShellVarContext all
+  Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"
+
   ; remove files and uninstaller (preserving config for now)
   CopyFiles /SILENT "$INSTDIR\bin\bacula-fd.conf" "$INSTDIR\bacula-fd.conf"
+  IfFileExists "$INSTDIR\bin\bconsole.conf" save_bconsole nosave_bconsole
+  save_bconsole:
+  CopyFiles /SILENT "$INSTDIR\bin\bconsole.conf" "$INSTDIR\bconsole.conf"
+  nosave_bconsole:
+  IfFileExists "$INSTDIR\bin\wx-console.conf" save_wxconsole nosave_wxconsole
+  save_wxconsole:
+  CopyFiles /SILENT "$INSTDIR\bin\wx-console.conf" "$INSTDIR\wx-console.conf"
+  nosave_wxconsole:
   Delete /REBOOTOK "$INSTDIR\bin\*.*"
+  Delete /REBOOTOK "$INSTDIR\doc\*.*"
   CopyFiles /SILENT "$INSTDIR\bacula-fd.conf" "$INSTDIR\bin\bacula-fd.conf"
-  Delete /REBOOTOK "$INSTDIR\bacula-fd.conf"
-  Delete /REBOOTOK "$INSTDIR\uninstall.exe"
+  CopyFiles /SILENT "$INSTDIR\bconsole.conf" "$INSTDIR\bin\bconsole.conf"
+  CopyFiles /SILENT "$INSTDIR\wx-console.conf" "$INSTDIR\bin\wx-console.conf"
+  Delete /REBOOTOK "$INSTDIR\*.conf"
+  Delete /REBOOTOK "$INSTDIR\Uninstall.exe"
 
   ; Check for existing installation
-  MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to delete the current configuration file ($INSTDIR\bin\bacula-fd.conf)?" IDNO LeaveConfig
-  Delete /REBOOTOK "$INSTDIR\bin\bacula-fd.conf"
+  MessageBox MB_YESNO|MB_ICONQUESTION "Would you like to delete the current configuration files and the working state file?" IDNO LeaveConfig
+  Delete /REBOOTOK "$INSTDIR\bin\*.conf"
+  Delete /REBOOTOK "$INSTDIR\working\*"
   ; remove directories used
   RMDir "$INSTDIR\bin"
+  RMDir "$INSTDIR\doc"
   RMDir "$INSTDIR\working"
   RMDir "$INSTDIR"
   RMDir "C:\tmp"
   LeaveConfig:
+  RMDir "$SMPROGRAMS\Bacula"
   
-  ; If we need to reboot we'll ask
-  IfRebootFlag Reboot Continue
-  Reboot:
-  MessageBox MB_YESNO|MB_ICONQUESTION "Some files will only be deleted after restarting. Reboot now?" IDNO Continue
-    Reboot
-  Continue:
-
 SectionEnd
 
 ; eof