]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/win64_installer/winbacula.nsi
b0759af36bdce1aa714f6364140f4d044a96f193
[bacula/bacula] / bacula / src / win32 / win64_installer / winbacula.nsi
1 ; winbacula.nsi
2 ;
3 ; Began as a version written by Michel Meyers (michel@tcnnet.dyndns.org)
4 ;
5 ; Adapted by Kern Sibbald for native Win32 Bacula
6 ;    added a number of elements from Christopher Hull's installer
7 ;
8 ; D. Scott Barninger Nov 13 2004
9 ; added configuration editing for bconsole.conf and bwx-console.conf
10 ; better explanation in dialog boxes for editing config files
11 ; added Start Menu items
12 ; fix uninstall of config files to do all not just bacula-fd.conf
13 ;
14 ; D. Scott Barninger Dec 05 2004
15 ; added specification of default permissions for bacula-fd.conf
16 ;   - thanks to Jamie Ffolliott for pointing me at cacls
17 ; added removal of working-dir files if user selects to remove config
18 ; uninstall is now 100% clean
19 ;
20 ; D. Scott Barninger Apr 17 2005
21 ; 1.36.3 release docs update
22 ; add pdf manual and menu shortcut
23 ;
24 ; Robert Nelson May 15 2006
25 ; Added server installs and implemented Microsoft install locations
26 ; Use LogicLib.nsh
27 ; Added Bacula-SD and Bacula-DIR
28 ; Replaced ParameterGiven with standard GetOptions
29 ;
30 ; Kern Sibbald October 2008
31 ; Remove server installs
32 ; Install into single bacula directory
33 ;  (i.e. undo a large part of what Robert Nelson did)
34 ;
35 ; Eric Bollengier March 2009
36 ; Updated to handle Win64 installation
37 ;
38 ; Kern Sibbald April 2009
39 ; Correct some Win64 install problems
40 ; It is mind boggling how many lines of this insane scripting language
41 ;   have been written with absolutely no comments
42 ;
43 ; Command line options:
44 ;
45 ; /service    - 
46 ; /start
47 ;
48 ; netsh firewall add portopening protocol=tcp port=9102 name="Bacula-FD"
49
50
51 !define PRODUCT "Bacula"
52
53 ;
54 ; Include the Modern UI
55 ;
56
57 !include "MUI.nsh"
58 !include "LogicLib.nsh"
59 !include "FileFunc.nsh"
60 !include "Sections.nsh"
61 !include "StrFunc.nsh"
62 !include "WinMessages.nsh"
63 ;
64 ; Basics
65 ;
66 Name "Bacula"
67 OutFile "${OUT_DIR}\win${WINVER}bacula-${VERSION}.exe"
68 SetCompressor lzma
69
70 InstallDir "C:\Program Files\Bacula"
71 InstallDirRegKey HKLM "Software\Bacula" "InstallLocation"
72
73 InstType "Client"
74 ;InstType "Server"
75 ;InstType "Full"
76
77 !insertmacro GetParent
78
79 ${StrCase}
80 ${StrRep}
81 ${StrTok}
82 ${StrTrimNewLines}
83
84 ;
85 ; Pull in pages
86 ;
87
88 !define      MUI_COMPONENTSPAGE_SMALLDESC
89
90 !define      MUI_HEADERIMAGE
91 !define      MUI_BGCOLOR                739AB9
92 !define      MUI_HEADERIMAGE_BITMAP     "bacula-logo.bmp"
93
94 !InsertMacro MUI_PAGE_WELCOME
95 !InsertMacro MUI_PAGE_LICENSE "..\..\..\LICENSE"
96 Page custom EnterInstallType
97 !define      MUI_PAGE_CUSTOMFUNCTION_SHOW PageComponentsShow
98 !InsertMacro MUI_PAGE_COMPONENTS
99 !define      MUI_PAGE_CUSTOMFUNCTION_PRE PageDirectoryPre
100 !InsertMacro MUI_PAGE_DIRECTORY
101 Page custom EnterConfigPage1 LeaveConfigPage1
102 Page custom EnterConfigPage2 LeaveConfigPage2
103 !Define      MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveInstallPage
104 !InsertMacro MUI_PAGE_INSTFILES
105 Page custom EnterWriteTemplates
106 !Define      MUI_FINISHPAGE_SHOWREADME $INSTDIR\Readme.txt
107 !InsertMacro MUI_PAGE_FINISH
108
109 !InsertMacro MUI_UNPAGE_WELCOME
110 !InsertMacro MUI_UNPAGE_CONFIRM
111 !InsertMacro MUI_UNPAGE_INSTFILES
112 !InsertMacro MUI_UNPAGE_FINISH
113
114 !define      MUI_ABORTWARNING
115
116 !InsertMacro MUI_LANGUAGE "English"
117
118 !InsertMacro GetParameters
119 !InsertMacro GetOptions
120
121 DirText "Setup will install Bacula ${VERSION} to the directory specified below. To install in a different folder, click Browse and select another folder."
122
123 !InsertMacro MUI_RESERVEFILE_INSTALLOPTIONS
124 ;
125 ; Global Variables
126 ;
127 Var OptService
128 Var OptStart
129 Var OptSilent
130
131 Var CommonFilesDone
132
133 Var OsIsNT
134
135 Var HostName
136
137 Var ConfigClientName
138 Var ConfigClientPort
139 Var ConfigClientMaxJobs
140 Var ConfigClientPassword
141 Var ConfigClientInstallService
142 Var ConfigClientStartService
143
144 Var ConfigStorageName
145 Var ConfigStoragePort
146 Var ConfigStorageMaxJobs
147 Var ConfigStoragePassword
148 Var ConfigStorageInstallService
149 Var ConfigStorageStartService
150
151 Var ConfigDirectorName
152 Var ConfigDirectorPort
153 Var ConfigDirectorMaxJobs
154 Var ConfigDirectorPassword
155 Var ConfigDirectorAddress
156 Var ConfigDirectorMailServer
157 Var ConfigDirectorMailAddress
158 Var ConfigDirectorDB
159 Var ConfigDirectorInstallService
160 Var ConfigDirectorStartService
161
162 Var ConfigMonitorName
163 Var ConfigMonitorPassword
164
165 Var LocalDirectorPassword
166 Var LocalHostAddress
167
168 Var MySQLPath
169 Var MySQLVersion
170 Var PostgreSQLPath
171 Var PostgreSQLVersion
172
173 Var AutomaticInstall
174 Var InstallType
175
176 !define NewInstall      0
177 !define UpgradeInstall  1
178 !define MigrateInstall  2
179
180 Var OldInstallDir
181 Var PreviousComponents
182 Var NewComponents
183
184 ; Bit 0 = File Service
185 ;     1 = Storage Service
186 ;     2 = Director Service
187 ;     3 = Command Console
188 ;     4 = Bat Console
189 ;     5 = wxWidgits Console
190 ;     6 = Documentation (PDF)
191 ;     7 = Documentation (HTML)
192
193 !define ComponentFile                   1
194 !define ComponentStorage                2
195 !define ComponentDirector               4
196 !define ComponentTextConsole            8
197 !define ComponentBatConsole             16
198 !define ComponentGUIConsole             32
199 !define ComponentPDFDocs                64
200 !define ComponentHTMLDocs               128
201
202 !define ComponentsRequiringUserConfig           63
203 !define ComponentsFileAndStorage                3
204 !define ComponentsFileAndStorageAndDirector     7
205 !define ComponentsDirectorAndTextGuiConsoles    60
206 !define ComponentsTextAndGuiConsoles            56
207
208 Var HDLG
209 Var HCTL
210
211 Function .onInit
212   Push $R0
213   Push $R1
214
215   ; Process Command Line Options
216   StrCpy $OptService 1
217   StrCpy $OptStart 1
218   StrCpy $OptSilent 0
219   StrCpy $CommonFilesDone 0
220   StrCpy $OsIsNT 0
221   StrCpy $AutomaticInstall 0
222   StrCpy $InstallType ${NewInstall}
223   StrCpy $OldInstallDir ""
224   StrCpy $PreviousComponents 0
225   StrCpy $NewComponents 0
226   StrCpy $MySQLPath ""
227   StrCpy $MySQLVersion ""
228   StrCpy $PostgreSQLPath ""
229   StrCpy $PostgreSQLVersion ""
230   StrCpy $LocalDirectorPassword ""
231
232   ${GetParameters} $R0
233
234   ClearErrors
235   ${GetOptions} $R0 "/noservice" $R1
236   IfErrors +2
237     StrCpy $OptService 0
238
239   ClearErrors
240   ${GetOptions} $R0 "/nostart" $R1
241   IfErrors +2
242     StrCpy $OptStart 0
243
244   IfSilent 0 +2
245     StrCpy $OptSilent 1
246
247   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
248   ${If} $R0 != ""
249     StrCpy $OsIsNT 1
250   ${EndIf}
251
252   Call GetComputerName
253   Pop $HostName
254
255   Call GetHostName
256   Pop $LocalHostAddress
257
258   Call GetUserName
259
260   ; Configuration Defaults
261
262   StrCpy $ConfigClientName               "$HostName-fd"
263   StrCpy $ConfigClientPort               9102
264   StrCpy $ConfigClientMaxJobs            10
265   ;StrCpy $ConfigClientPassword
266   StrCpy $ConfigClientInstallService     "$OptService"
267   StrCpy $ConfigClientStartService       "$OptStart"
268
269   StrCpy $ConfigDirectorPort             9101
270
271   StrCpy $ConfigMonitorName              "$HostName-mon"
272   ;StrCpy $ConfigMonitorPassword
273
274 ; PLUGINSDIR refers to temporary helper programs and not Bacula plugins!
275   InitPluginsDir
276   File "/oname=$PLUGINSDIR\openssl.exe"  "${SRC_DIR}\openssl.exe"
277   File "/oname=$PLUGINSDIR\ssleay32-0.9.8.dll" "${SRC_DIR}\ssleay32-0.9.8.dll"
278   File "/oname=$PLUGINSDIR\cryptoeay32-0.9.8.dll" "${SRC_DIR}\cryptoeay32-0.9.8.dll"        
279 ;  File "/oname=$PLUGINSDIR\libeay32.dll" "${SRC_DIR}\libeay32.dll"
280 ;  File "/oname=$PLUGINSDIR\ssleay32.dll" "${SRC_DIR}\ssleay32.dll"
281   File "/oname=$PLUGINSDIR\sed.exe"      "${SRC_DIR}\sed.exe"
282
283   !InsertMacro MUI_INSTALLOPTIONS_EXTRACT "InstallType.ini"
284   !InsertMacro MUI_INSTALLOPTIONS_EXTRACT "WriteTemplates.ini"
285
286   SetPluginUnload alwaysoff
287
288 ; Set client password
289   nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'
290   pop $R0
291   ${If} $R0 = 0
292    FileOpen $R1 "$PLUGINSDIR\pw.txt" r
293    IfErrors +4
294      FileRead $R1 $R0
295      ${StrTrimNewLines} $ConfigClientPassword $R0
296      FileClose $R1
297   ${EndIf}
298
299   SetPluginUnload manual
300
301 ; Set monitor password
302   nsExec::Exec '"$PLUGINSDIR\openssl.exe" rand -base64 -out $PLUGINSDIR\pw.txt 33'
303   pop $R0
304   ${If} $R0 = 0
305    FileOpen $R1 "$PLUGINSDIR\pw.txt" r
306    IfErrors +4
307      FileRead $R1 $R0
308      ${StrTrimNewLines} $ConfigMonitorPassword $R0
309      FileClose $R1
310   ${EndIf}
311
312   Pop $R1
313   Pop $R0
314 FunctionEnd
315
316 Function .onSelChange
317   Call UpdateComponentUI
318 FunctionEnd
319
320 Function InstallCommonFiles
321   ${If} $CommonFilesDone = 0
322     SetOutPath "$INSTDIR"
323     File "Readme.txt"
324
325     SetOutPath "$INSTDIR"
326 !if "${BUILD_TOOLS}" == "MinGW32"
327     File "${SRC_DIR}\mingwm10.dll"
328     File "${SRC_DIR}\pthreadGCE.dll"
329     File "${SRC_DIR}\zlib1.dll"
330     File "${SRC_DIR}\ssleay32.dll"
331     File "${SRC_DIR}\libeay32.dll"
332 !endif
333 !if "${BUILD_TOOLS}" == "MinGW64"
334     File "${SRC_DIR}\pthreadGCE.dll"
335     File "${SRC_DIR}\cryptoeay32-0.9.8.dll"
336     File "${SRC_DIR}\ssleay32-0.9.8.dll"
337     File "${SRC_DIR}\zlib1.dll"
338 !endif
339     File "${SRC_DIR}\bacula.dll"
340     File "/oname=$INSTDIR\openssl.cnf" "${SRC_DIR}\openssl.cnf"
341     File "${SRC_DIR}\openssl.exe"
342     File "${SRC_DIR}\bsleep.exe"
343     File "${SRC_DIR}\bsmtp.exe"
344     File "${SRC_DIR}\expr64.exe"
345     File "${SRC_DIR}\snooze.exe"
346
347     CreateShortCut "$SMPROGRAMS\Bacula\Documentation\View Readme.lnk" "write.exe" '"$INSTDIR\Readme.txt"'
348
349     StrCpy $CommonFilesDone 1
350   ${EndIf}
351 FunctionEnd
352
353 Section "-Initialize"
354
355   WriteRegStr   HKLM Software\Bacula InstallLocation "$INSTDIR"
356
357   Call GetSelectedComponents
358   Pop $R2
359   WriteRegDWORD HKLM Software\Bacula Components $R2
360
361   ; remove start menu items
362   SetShellVarContext all
363
364   Delete /REBOOTOK "$SMPROGRAMS\Bacula\Configuration\*"
365   Delete /REBOOTOK "$SMPROGRAMS\Bacula\Documentation\*"
366   Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"
367   RMDir "$SMPROGRAMS\Bacula\Configuration"
368   RMDir "$SMPROGRAMS\Bacula\Documentation"
369   RMDir "$SMPROGRAMS\Bacula"
370   CreateDirectory "$SMPROGRAMS\Bacula"
371   CreateDirectory "$SMPROGRAMS\Bacula\Configuration"
372   CreateDirectory "$SMPROGRAMS\Bacula\Documentation"
373
374   CreateDirectory "$INSTDIR"
375   CreateDirectory "$INSTDIR\working"
376
377   SetOutPath "$INSTDIR"
378   File "..\..\..\LICENSE"
379   Delete /REBOOTOK "$INSTDIR\License.txt"
380
381 ; Output a series of SED commands to configure the .conf file(s)
382   FileOpen $R1 $PLUGINSDIR\config.sed w
383   FileWrite $R1 "s;@VERSION@;${VERSION};g$\r$\n"
384   FileWrite $R1 "s;@DATE@;${__DATE__};g$\r$\n"
385   FileWrite $R1 "s;@DISTNAME@;Windows;g$\r$\n"
386
387   StrCpy $R2 ${BUILD_TOOLS}
388
389   Call GetHostName
390   Exch $R3
391   Pop $R3
392
393   FileWrite $R1 "s;@DISTVER@;$R2;g$\r$\n"
394
395   ${StrRep} $R2 "$INSTDIR\working" "\" "\\\\"
396   FileWrite $R1 's;@working_dir@;$R2;g$\r$\n'
397   ${StrRep} $R2 "$INSTDIR\working" "\" "\\"
398   FileWrite $R1 's;@working_dir_cmd@;$R2;g$\r$\n'
399
400   ${StrRep} $R2 "$INSTDIR" "\" "\\\\"
401   FileWrite $R1 's;@bin_dir@;$R2;g$\r$\n'
402   ${StrRep} $R2 "$INSTDIR" "\" "\\"
403   FileWrite $R1 's;@bin_dir_cmd@;$R2;g$\r$\n'
404
405   ${StrRep} $R2 "$INSTDIR\plugins" "\" "\\\\"
406   FileWrite $R1 's;@fdplugins_dir@;$R2;g$\r$\n'
407
408   ${StrRep} $R2 "$INSTDIR" "\" "/"
409   FileWrite $R1 "s;@BUILD_DIR@;$R2;g$\r$\n"
410
411   FileWrite $R1 "s;@client_address@;$LocalHostAddress;g$\r$\n"
412
413   ${If} "$ConfigClientName" != ""
414     FileWrite $R1 "s;@client_name@;$ConfigClientName;g$\r$\n"
415   ${EndIf}
416   ${If} "$ConfigClientPort" != ""
417     FileWrite $R1 "s;@client_port@;$ConfigClientPort;g$\r$\n"
418   ${EndIf}
419   ${If} "$ConfigClientMaxJobs" != ""
420     FileWrite $R1 "s;@client_maxjobs@;$ConfigClientMaxJobs;g$\r$\n"
421   ${EndIf}
422   ${If} "$ConfigClientPassword" != ""
423     FileWrite $R1 "s;@client_password@;$ConfigClientPassword;g$\r$\n"
424   ${EndIf}
425   ${If} "$ConfigDirectorName" != ""
426     FileWrite $R1 "s;@director_name@;$ConfigDirectorName;g$\r$\n"
427   ${EndIf}
428   ${If} "$ConfigDirectorPort" != ""
429     FileWrite $R1 "s;@director_port@;$ConfigDirectorPort;g$\r$\n"
430   ${EndIf}
431   ${If} "$ConfigDirectorPassword" != ""
432     FileWrite $R1 "s;@director_password@;$ConfigDirectorPassword;g$\r$\n"
433   ${EndIf}
434   ${If} "$ConfigDirectorAddress" != ""
435     FileWrite $R1 "s;@director_address@;$ConfigDirectorAddress;g$\r$\n"
436   ${EndIf}
437   ${If} "$ConfigMonitorName" != ""
438     FileWrite $R1 "s;@monitor_name@;$ConfigMonitorName;g$\r$\n"
439   ${EndIf}
440   ${If} "$ConfigMonitorPassword" != ""
441     FileWrite $R1 "s;@monitor_password@;$ConfigMonitorPassword;g$\r$\n"
442   ${EndIf}
443
444   FileClose $R1
445
446   ${If} ${FileExists} "$OldInstallDir\bacula-fd.exe"
447     nsExec::ExecToLog '"$OldInstallDir\bacula-fd.exe" /kill'     ; Shutdown any bacula that could be running
448     Sleep 3000
449     nsExec::ExecToLog '"$OldInstallDir\bacula-fd.exe" /remove'   ; Remove existing service
450   ${EndIf}
451
452 SectionEnd
453
454 SectionGroup "Client" SecGroupClient
455
456 Section "File Service" SecFileDaemon
457   SectionIn 1 2 3
458
459   SetOutPath "$INSTDIR\plugins"
460   File "${SRC_DIR}\exchange-fd.dll"
461
462   SetOutPath "$INSTDIR"
463
464   File "${SRC_DIR}\bacula-fd.exe"
465
466   File "/oname=$PLUGINSDIR\bacula-fd.conf" "bacula-fd.conf.in"
467
468   StrCpy $0 "$INSTDIR"
469   StrCpy $1 bacula-fd.conf
470   Call ConfigEditAndCopy
471
472   StrCpy $0 bacula-fd
473   StrCpy $1 "File Service"
474   StrCpy $2 $ConfigClientInstallService
475   StrCpy $3 $ConfigClientStartService
476
477   Call InstallDaemon
478
479   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Client Configuration.lnk" "write.exe" '"$INSTDIR\bacula-fd.conf"'
480 SectionEnd
481
482 SectionGroupEnd
483
484 SectionGroup "Consoles" SecGroupConsoles
485
486 Section "Command Console" SecConsole
487   SectionIn 1 2 3
488
489   SetOutPath "$INSTDIR"
490
491   File "${SRC_DIR}\bconsole.exe"
492   Call InstallCommonFiles
493
494   File "/oname=$PLUGINSDIR\bconsole.conf" "bconsole.conf.in"
495   StrCpy $0 "$INSTDIR"
496   StrCpy $1 bconsole.conf
497   Call ConfigEditAndCopy
498
499   CreateShortCut "$SMPROGRAMS\Bacula\bconsole.lnk" "$INSTDIR\bconsole.exe" '-c "$INSTDIR\bconsole.conf"' "$INSTDIR\bconsole.exe" 0
500   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Command Console Configuration.lnk" "write.exe" '"$INSTDIR\bconsole.conf"'
501
502 SectionEnd
503
504 Section "Bat Console" SecBatConsole
505   SectionIn 1 2 3
506
507   SetOutPath "$INSTDIR\bin32"
508
509   Call InstallCommonFiles
510   File "${SRC_DIR}\QtCore4.dll"
511   File "${SRC_DIR}\QtGui4.dll"
512   File "${SRC_DIR}\mingwm10.dll"
513   File "${SRC_DIR}\ssleay32.dll"
514   File "${SRC_DIR}\libeay32.dll"
515   File "${SRC_DIR}\bat.exe"
516   File "/oname=$INSTDIR\bin32\bacula.dll" "${SRC_DIR}\bacula32.dll"
517   File "/oname=$INSTDIR\bin32\pthreadGCE.dll" "${SRC_DIR}\pthreadGCE32.dll"
518   File "/oname=$INSTDIR\bin32\zlib1.dll" "${SRC_DIR}\zlib132.dll"
519
520   File "/oname=$PLUGINSDIR\bat.conf" "bat.conf.in"
521   StrCpy $0 "$INSTDIR\bin32"
522   StrCpy $1 bat.conf
523   Call ConfigEditAndCopy
524
525   SetOutPath "$INSTDIR\help"
526   File "${SRC_DIR}\help\*"
527   SetOutPath "$INSTDIR"
528
529
530   ; Create Start Menu entry
531   CreateShortCut "$SMPROGRAMS\Bacula\Bat.lnk" "$INSTDIR\bin32\bat.exe" '-c "$INSTDIR\bin32\bat.conf"' "$INSTDIR\bin32\bat.exe" 0
532   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Bat Configuration.lnk" "write.exe" '"$INSTDIR\bin32\bat.conf"'
533   SetOutPath "$INSTDIR"
534 SectionEnd
535
536 SectionGroupEnd
537
538
539 Section "-Finish"
540   Push $R0
541
542   ${If} $OsIsNT = 1
543 ;   nsExec::ExecToLog 'cmd.exe /C echo Y|cacls "$INSTDIR" /T /G SYSTEM:F Administrators:F'
544   ${EndIf}
545
546   ; Write the uninstall keys for Windows & create Start Menu entry
547   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula"
548   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "InstallLocation" "$INSTDIR"
549   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayVersion" "${VERSION}"
550   ${StrTok} $R0 "${VERSION}" "." 0 0
551   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMajor" $R0
552   ${StrTok} $R0 "${VERSION}" "." 1 0
553   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMinor" $R0
554   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoModify" 1
555   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoRepair" 1
556   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLUpdateInfo" "http://www.bacula.org"
557   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLInfoAbout" "http://www.bacula.org"
558   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "HelpLink" "http://www.bacula.org?page=support"
559   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "UninstallString" '"$INSTDIR\uninstall.exe"'
560   WriteUninstaller "$INSTDIR\Uninstall.exe"
561   CreateShortCut "$SMPROGRAMS\Bacula\Uninstall Bacula.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0
562   Pop $R0
563 SectionEnd
564
565 ; Extra Page descriptions
566
567 LangString DESC_SecFileDaemon ${LANG_ENGLISH} "Install Bacula File Daemon on this system."
568 LangString DESC_SecConsole ${LANG_ENGLISH} "Install command console program on this system."
569 LangString DESC_SecBatConsole ${LANG_ENGLISH} "Install Bat graphical console program on this system."
570
571 LangString TITLE_ConfigPage1 ${LANG_ENGLISH} "Configuration"
572 LangString SUBTITLE_ConfigPage1 ${LANG_ENGLISH} "Set installation configuration."
573
574 LangString TITLE_ConfigPage2 ${LANG_ENGLISH} "Configuration (continued)"
575 LangString SUBTITLE_ConfigPage2 ${LANG_ENGLISH} "Set installation configuration."
576
577 LangString TITLE_InstallType ${LANG_ENGLISH} "Installation Type"
578 LangString SUBTITLE_InstallType ${LANG_ENGLISH} "Choose installation type."
579
580 LangString TITLE_WriteTemplates ${LANG_ENGLISH} "Create Templates"
581 LangString SUBTITLE_WriteTemplates ${LANG_ENGLISH} "Create a resource template for inclusion in the Director's configuration file."
582
583 !InsertMacro MUI_FUNCTION_DESCRIPTION_BEGIN
584   !InsertMacro MUI_DESCRIPTION_TEXT ${SecFileDaemon} $(DESC_SecFileDaemon)
585   !InsertMacro MUI_DESCRIPTION_TEXT ${SecConsole} $(DESC_SecConsole)
586   !InsertMacro MUI_DESCRIPTION_TEXT ${SecBatConsole} $(DESC_SecBatConsole)
587 !InsertMacro MUI_FUNCTION_DESCRIPTION_END
588
589 ; Uninstall section
590
591 UninstallText "This will uninstall Bacula. Click Uninstall to continue."
592
593 Section "Uninstall"
594   ; Shutdown any baculum that could be running
595   nsExec::ExecToLog '"$INSTDIR\bacula-fd.exe" /kill'
596   Sleep 3000
597
598 ; ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-fd"
599   ; Remove bacula service
600   nsExec::ExecToLog '"$INSTDIR\bacula-fd.exe" /remove'
601   nsExec::ExecToLog '"$INSTDIR\plugins\exchange-fd.dll" /remove'
602   
603   ; remove registry keys
604   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula"
605   DeleteRegKey HKLM "Software\Bacula"
606
607   ; remove start menu items
608   SetShellVarContext all
609   Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"
610   RMDir "$SMPROGRAMS\Bacula"
611
612   ; remove files and uninstaller (preserving config for now)
613   Delete /REBOOTOK "$INSTDIR\doc\*"
614   Delete /REBOOTOK "$INSTDIR\*"
615
616   ; Check for existing installation
617   MessageBox MB_YESNO|MB_ICONQUESTION \
618   "Would you like to delete the current configuration files and the working state file?" IDNO NoDel
619     Delete /REBOOTOK "$INSTDIR\*"
620     Delete /REBOOTOK "$INSTDIR\bin32\*"
621     Delete /REBOOTOK "$INSTDIR\working\*"
622     Delete /REBOOTOK "$INSTDIR\plugins\*"
623     Delete /REBOOTOK "$PLUGINSDIR\bacula-*.conf"
624     Delete /REBOOTOK "$PLUGINSDIR\*console.conf"
625     Delete /REBOOTOK "$PLUGINSDIR\*conf.in"
626     Delete /REBOOTOK "$PLUGINSDIR\openssl.exe"
627     Delete /REBOOTOK "$PLUGINSDIR\libeay32.dll"
628     Delete /REBOOTOK "$PLUGINSDIR\ssleay32.dll"
629     Delete /REBOOTOK "$PLUGINSDIR\sed.exe"    
630     Delete /REBOOTOK "$PLUGINSDIR\pw.txt"     
631     Delete /REBOOTOK "$PLUGINSDIR\*.sed" 
632     Delete /REBOOTOK "$PLUGINSDIR\*.cmd"    
633     Delete /REBOOTOK "$PLUGINSDIR\*.sql"    
634     RMDir "$INSTDIR\plugins"
635     RMDir "$INSTDIR\working"
636     RMDir "$INSTDIR\bin32"
637     RMDir "$INSTDIR"
638 NoDel:
639
640   ; remove directories used
641   RMDir "$INSTDIR\doc"
642   RMDir "$INSTDIR"
643 SectionEnd
644
645 ;
646 ; $0 - Service Name (ie Bacula-FD)
647 ; $1 - Service Description (ie Bacula File Daemon)
648 ; $2 - Install as Service
649 ; $3 - Start Service now
650 ;
651 Function InstallDaemon
652   Call InstallCommonFiles
653
654   WriteRegDWORD HKLM "Software\Bacula" "Service_$0" $2
655   
656   ${If} $2 = 1
657     nsExec::ExecToLog '"$INSTDIR\$0.exe" /kill'
658     sleep 3000
659     nsExec::ExecToLog '"$INSTDIR\$0.exe" /remove'
660     nsExec::ExecToLog '"$INSTDIR\$0.exe" /install -c "$INSTDIR\$0.conf"'
661
662     ${If} $OsIsNT <> 1
663       File "Start.bat"
664       File "Stop.bat"
665     ${EndIf}
666
667     ; Start the service?
668
669     ${If} $3 = 1  
670       ${If} $OsIsNT = 1
671         nsExec::ExecToLog 'net start $0'
672       ${Else}
673         Exec '"$INSTDIR\$0.exe" /service -c "$INSTDIR\$0.conf"'
674       ${EndIf}
675     ${EndIf}
676   ${Else}
677     CreateShortCut "$SMPROGRAMS\Bacula\Start $1.lnk" "$INSTDIR\$0.exe" '-c "$INSTDIR\$0.conf"' "$INSTDIR\$0.exe" 0
678   ${EndIf}
679 FunctionEnd
680
681 Function GetComputerName
682   Push $R0
683   Push $R1
684   Push $R2
685
686   System::Call "kernel32::GetComputerNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2"
687
688   ${StrCase} $R0 $R0 "L"
689
690   Pop $R2
691   Pop $R1
692   Exch $R0
693 FunctionEnd
694
695 !define ComputerNameDnsFullyQualified   3
696
697 Function GetHostName
698   Push $R0
699   Push $R1
700   Push $R2
701
702   ${If} $OsIsNT = 1
703     System::Call "kernel32::GetComputerNameExA(i ${ComputerNameDnsFullyQualified}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
704     ${If} $R2 = 0
705       Pop $R2
706       DetailPrint "GetComputerNameExA failed - LastError = $R2"
707       Call GetComputerName
708       Pop $R0
709     ${Else}
710       Pop $R2
711     ${EndIf}
712   ${Else}
713     Call GetComputerName
714     Pop $R0
715   ${EndIf}
716
717   Pop $R2
718   Pop $R1
719   Exch $R0
720 FunctionEnd
721
722 !define NameUserPrincipal 8
723
724 Function GetUserName
725   Push $R0
726   Push $R1
727   Push $R2
728
729   ${If} $OsIsNT = 1
730     System::Call "secur32::GetUserNameExA(i ${NameUserPrincipal}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
731     ${If} $R2 = 0
732       Pop $R2
733       DetailPrint "GetUserNameExA failed - LastError = $R2"
734       Pop $R0
735       StrCpy $R0 ""
736     ${Else}
737       Pop $R2
738     ${EndIf}
739   ${Else}
740       StrCpy $R0 ""
741   ${EndIf}
742
743   ${If} $R0 == ""
744     System::Call "advapi32::GetUserNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
745     ${If} $R2 = 0
746       Pop $R2
747       DetailPrint "GetUserNameA failed - LastError = $R2"
748       StrCpy $R0 ""
749     ${Else}
750       Pop $R2
751     ${EndIf}
752   ${EndIf}
753
754   Pop $R2
755   Pop $R1
756   Exch $R0
757 FunctionEnd
758
759 Function ConfigEditAndCopy
760   Push $R1
761
762   ${If} ${FileExists} "$0\$1"
763     StrCpy $R1 ".new"
764   ${Else}
765     StrCpy $R1 ""
766   ${EndIf}
767
768   nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\$1"'
769   CopyFiles "$PLUGINSDIR\$1" "$0\$1$R1"
770
771   Pop $R1
772 FunctionEnd
773
774 Function GetSelectedComponents
775   Push $R0
776   StrCpy $R0 0
777   ${If} ${SectionIsSelected} ${SecFileDaemon}
778     IntOp $R0 $R0 | ${ComponentFile}
779   ${EndIf}
780   ${If} ${SectionIsSelected} ${SecConsole}
781     IntOp $R0 $R0 | ${ComponentTextConsole}
782   ${EndIf}
783   ${If} ${SectionIsSelected} ${SecBatConsole}
784     IntOp $R0 $R0 | ${ComponentBatConsole}
785   ${EndIf}
786   Exch $R0
787 FunctionEnd
788
789 Function PageComponentsShow
790
791   Call SelectPreviousComponents
792   Call UpdateComponentUI
793 FunctionEnd
794
795 Function PageDirectoryPre
796   ${If} $AutomaticInstall = 1
797   ${OrIf} $InstallType = ${UpgradeInstall}
798     Abort
799   ${EndIf}
800 FunctionEnd
801
802 Function LeaveInstallPage
803   Push "$INSTDIR\install.log"
804   Call DumpLog
805 FunctionEnd
806
807 Function EnterWriteTemplates
808   Push $R0
809   Push $R1
810
811   Call GetSelectedComponents
812   Pop $R0
813
814   IntOp $R0 $R0 & ${ComponentDirector}
815   IntOp $R1 $NewComponents & ${ComponentsFileAndStorage}
816
817   ${If} $R0 <> 0
818   ${OrIf} $R1 = 0
819     Pop $R1
820     Pop $R0
821     Abort
822   ${EndIf}
823
824   IntOp $R0 $NewComponents & ${ComponentFile}
825   ${If} $R0 = 0
826     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 0
827     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags DISABLED
828     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State
829     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED
830   ${Else}
831     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 1
832     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags
833     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State "C:\$ConfigClientName.conf"
834   ${EndIf}
835
836
837   !InsertMacro MUI_HEADER_TEXT "$(TITLE_WriteTemplates)" "$(SUBTITLE_WriteTemplates)"
838   !InsertMacro MUI_INSTALLOPTIONS_DISPLAY "WriteTemplates.ini"
839
840   !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 2" State
841   ${If} $R0 <> 0
842     File "/oname=$PLUGINSDIR\client.conf.in" "client.conf.in"
843
844     nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\client.conf.in"'
845     !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 3" State
846     ${If} $R0 != ""
847       CopyFiles "$PLUGINSDIR\client.conf.in" "$R0"
848     ${EndIf}
849   ${EndIf}
850
851
852   Pop $R1
853   Pop $R0
854 FunctionEnd
855
856 Function SelectPreviousComponents
857   ${If} $InstallType <> ${NewInstall}
858     IntOp $R1 $PreviousComponents & ${ComponentFile}
859     ${If} $R1 <> 0
860       !InsertMacro SelectSection ${SecFileDaemon}
861       !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_RO}
862     ${Else}
863       !InsertMacro UnselectSection ${SecFileDaemon}
864       !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_RO}
865     ${EndIf}
866     IntOp $R1 $PreviousComponents & ${ComponentTextConsole}
867     ${If} $R1 <> 0
868       !InsertMacro SelectSection ${SecConsole}
869       !InsertMacro SetSectionFlag ${SecConsole} ${SF_RO}
870     ${Else}
871       !InsertMacro UnselectSection ${SecConsole}
872       !InsertMacro ClearSectionFlag ${SecConsole} ${SF_RO}
873     ${EndIf}
874     IntOp $R1 $PreviousComponents & ${ComponentBatConsole}
875     ${If} $R1 <> 0
876       !InsertMacro SelectSection ${SecBatConsole}
877       !InsertMacro SetSectionFlag ${SecBatConsole} ${SF_RO}
878     ${Else}
879       !InsertMacro UnselectSection ${SecBatConsole}
880       !InsertMacro ClearSectionFlag ${SecBatConsole} ${SF_RO}
881     ${EndIf}
882   ${EndIf}
883 FunctionEnd
884
885 Function UpdateComponentUI
886   Push $R0
887   Push $R1
888
889   Call GetSelectedComponents
890   Pop $R0
891
892   IntOp $R1 $R0 ^ $PreviousComponents
893   IntOp $NewComponents $R0 & $R1
894
895   ${If} $InstallType <> ${NewInstall}
896     IntOp $R1 $NewComponents & ${ComponentFile}
897     ${If} $R1 <> 0
898       !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_BOLD}
899     ${Else}
900       !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_BOLD}
901     ${EndIf}
902     IntOp $R1 $NewComponents & ${ComponentTextConsole}
903     ${If} $R1 <> 0
904       !InsertMacro SetSectionFlag ${SecConsole} ${SF_BOLD}
905     ${Else}
906       !InsertMacro ClearSectionFlag ${SecConsole} ${SF_BOLD}
907     ${EndIf}
908     IntOp $R1 $NewComponents & ${ComponentBatConsole}
909     ${If} $R1 <> 0
910       !InsertMacro SetSectionFlag ${SecBatConsole} ${SF_BOLD}
911     ${Else}
912       !InsertMacro ClearSectionFlag ${SecBatConsole} ${SF_BOLD}
913     ${EndIf}
914   ${EndIf}
915
916   GetDlgItem $R0 $HWNDPARENT 1
917
918   IntOp $R1 $NewComponents & ${ComponentsRequiringUserConfig}
919   ${If} $R1 = 0
920     SendMessage $R0 ${WM_SETTEXT} 0 "STR:Install"
921   ${Else}
922     SendMessage $R0 ${WM_SETTEXT} 0 "STR:&Next >"
923   ${EndIf}
924
925   Pop $R1
926   Pop $R0
927 FunctionEnd
928
929 !include "InstallType.nsh"
930 !include "ConfigPage1.nsh"
931 !include "ConfigPage2.nsh"
932 !include "DumpLog.nsh"