]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/win64_installer/winbacula.nsi
27a0915aed120697c9b77d19729228c9c103f062
[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   Delete /REBOOTOK "$INSTDIR\help\*"
616
617   ; Check for existing installation
618   MessageBox MB_YESNO|MB_ICONQUESTION \
619   "Would you like to delete the current configuration files and the working state file?" IDNO NoDel
620     Delete /REBOOTOK "$INSTDIR\*"
621     Delete /REBOOTOK "$INSTDIR\bin32\*"
622     Delete /REBOOTOK "$INSTDIR\working\*"
623     Delete /REBOOTOK "$INSTDIR\plugins\*"
624     Delete /REBOOTOK "$PLUGINSDIR\bacula-*.conf"
625     Delete /REBOOTOK "$PLUGINSDIR\*console.conf"
626     Delete /REBOOTOK "$PLUGINSDIR\*conf.in"
627     Delete /REBOOTOK "$PLUGINSDIR\openssl.exe"
628     Delete /REBOOTOK "$PLUGINSDIR\libeay32.dll"
629     Delete /REBOOTOK "$PLUGINSDIR\ssleay32.dll"
630     Delete /REBOOTOK "$PLUGINSDIR\sed.exe"    
631     Delete /REBOOTOK "$PLUGINSDIR\pw.txt"     
632     Delete /REBOOTOK "$PLUGINSDIR\*.sed" 
633     Delete /REBOOTOK "$PLUGINSDIR\*.cmd"    
634     Delete /REBOOTOK "$PLUGINSDIR\*.sql"    
635     RMDir "$INSTDIR\plugins"
636     RMDir "$INSTDIR\working"
637     RMDir "$INSTDIR\bin32"
638     RMDir "$INSTDIR"
639 NoDel:
640
641   ; remove directories used
642   RMDir "$INSTDIR\doc"
643   RMDir "$INSTDIR\help"
644   RMDir "$INSTDIR"
645 SectionEnd
646
647 ;
648 ; $0 - Service Name (ie Bacula-FD)
649 ; $1 - Service Description (ie Bacula File Daemon)
650 ; $2 - Install as Service
651 ; $3 - Start Service now
652 ;
653 Function InstallDaemon
654   Call InstallCommonFiles
655
656   WriteRegDWORD HKLM "Software\Bacula" "Service_$0" $2
657   
658   ${If} $2 = 1
659     nsExec::ExecToLog '"$INSTDIR\$0.exe" /kill'
660     sleep 3000
661     nsExec::ExecToLog '"$INSTDIR\$0.exe" /remove'
662     nsExec::ExecToLog '"$INSTDIR\$0.exe" /install -c "$INSTDIR\$0.conf"'
663
664     ${If} $OsIsNT <> 1
665       File "Start.bat"
666       File "Stop.bat"
667     ${EndIf}
668
669     ; Start the service?
670
671     ${If} $3 = 1  
672       ${If} $OsIsNT = 1
673         nsExec::ExecToLog 'net start $0'
674       ${Else}
675         Exec '"$INSTDIR\$0.exe" /service -c "$INSTDIR\$0.conf"'
676       ${EndIf}
677     ${EndIf}
678   ${Else}
679     CreateShortCut "$SMPROGRAMS\Bacula\Start $1.lnk" "$INSTDIR\$0.exe" '-c "$INSTDIR\$0.conf"' "$INSTDIR\$0.exe" 0
680   ${EndIf}
681 FunctionEnd
682
683 Function GetComputerName
684   Push $R0
685   Push $R1
686   Push $R2
687
688   System::Call "kernel32::GetComputerNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2"
689
690   ${StrCase} $R0 $R0 "L"
691
692   Pop $R2
693   Pop $R1
694   Exch $R0
695 FunctionEnd
696
697 !define ComputerNameDnsFullyQualified   3
698
699 Function GetHostName
700   Push $R0
701   Push $R1
702   Push $R2
703
704   ${If} $OsIsNT = 1
705     System::Call "kernel32::GetComputerNameExA(i ${ComputerNameDnsFullyQualified}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
706     ${If} $R2 = 0
707       Pop $R2
708       DetailPrint "GetComputerNameExA failed - LastError = $R2"
709       Call GetComputerName
710       Pop $R0
711     ${Else}
712       Pop $R2
713     ${EndIf}
714   ${Else}
715     Call GetComputerName
716     Pop $R0
717   ${EndIf}
718
719   Pop $R2
720   Pop $R1
721   Exch $R0
722 FunctionEnd
723
724 !define NameUserPrincipal 8
725
726 Function GetUserName
727   Push $R0
728   Push $R1
729   Push $R2
730
731   ${If} $OsIsNT = 1
732     System::Call "secur32::GetUserNameExA(i ${NameUserPrincipal}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
733     ${If} $R2 = 0
734       Pop $R2
735       DetailPrint "GetUserNameExA failed - LastError = $R2"
736       Pop $R0
737       StrCpy $R0 ""
738     ${Else}
739       Pop $R2
740     ${EndIf}
741   ${Else}
742       StrCpy $R0 ""
743   ${EndIf}
744
745   ${If} $R0 == ""
746     System::Call "advapi32::GetUserNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
747     ${If} $R2 = 0
748       Pop $R2
749       DetailPrint "GetUserNameA failed - LastError = $R2"
750       StrCpy $R0 ""
751     ${Else}
752       Pop $R2
753     ${EndIf}
754   ${EndIf}
755
756   Pop $R2
757   Pop $R1
758   Exch $R0
759 FunctionEnd
760
761 Function ConfigEditAndCopy
762   Push $R1
763
764   ${If} ${FileExists} "$0\$1"
765     StrCpy $R1 ".new"
766   ${Else}
767     StrCpy $R1 ""
768   ${EndIf}
769
770   nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\$1"'
771   CopyFiles "$PLUGINSDIR\$1" "$0\$1$R1"
772
773   Pop $R1
774 FunctionEnd
775
776 Function GetSelectedComponents
777   Push $R0
778   StrCpy $R0 0
779   ${If} ${SectionIsSelected} ${SecFileDaemon}
780     IntOp $R0 $R0 | ${ComponentFile}
781   ${EndIf}
782   ${If} ${SectionIsSelected} ${SecConsole}
783     IntOp $R0 $R0 | ${ComponentTextConsole}
784   ${EndIf}
785   ${If} ${SectionIsSelected} ${SecBatConsole}
786     IntOp $R0 $R0 | ${ComponentBatConsole}
787   ${EndIf}
788   Exch $R0
789 FunctionEnd
790
791 Function PageComponentsShow
792
793   Call SelectPreviousComponents
794   Call UpdateComponentUI
795 FunctionEnd
796
797 Function PageDirectoryPre
798   ${If} $AutomaticInstall = 1
799   ${OrIf} $InstallType = ${UpgradeInstall}
800     Abort
801   ${EndIf}
802 FunctionEnd
803
804 Function LeaveInstallPage
805   Push "$INSTDIR\install.log"
806   Call DumpLog
807 FunctionEnd
808
809 Function EnterWriteTemplates
810   Push $R0
811   Push $R1
812
813   Call GetSelectedComponents
814   Pop $R0
815
816   IntOp $R0 $R0 & ${ComponentDirector}
817   IntOp $R1 $NewComponents & ${ComponentsFileAndStorage}
818
819   ${If} $R0 <> 0
820   ${OrIf} $R1 = 0
821     Pop $R1
822     Pop $R0
823     Abort
824   ${EndIf}
825
826   IntOp $R0 $NewComponents & ${ComponentFile}
827   ${If} $R0 = 0
828     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 0
829     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags DISABLED
830     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State
831     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED
832   ${Else}
833     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 1
834     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags
835     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State "C:\$ConfigClientName.conf"
836   ${EndIf}
837
838
839   !InsertMacro MUI_HEADER_TEXT "$(TITLE_WriteTemplates)" "$(SUBTITLE_WriteTemplates)"
840   !InsertMacro MUI_INSTALLOPTIONS_DISPLAY "WriteTemplates.ini"
841
842   !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 2" State
843   ${If} $R0 <> 0
844     File "/oname=$PLUGINSDIR\client.conf.in" "client.conf.in"
845
846     nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\client.conf.in"'
847     !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 3" State
848     ${If} $R0 != ""
849       CopyFiles "$PLUGINSDIR\client.conf.in" "$R0"
850     ${EndIf}
851   ${EndIf}
852
853
854   Pop $R1
855   Pop $R0
856 FunctionEnd
857
858 Function SelectPreviousComponents
859   ${If} $InstallType <> ${NewInstall}
860     IntOp $R1 $PreviousComponents & ${ComponentFile}
861     ${If} $R1 <> 0
862       !InsertMacro SelectSection ${SecFileDaemon}
863       !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_RO}
864     ${Else}
865       !InsertMacro UnselectSection ${SecFileDaemon}
866       !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_RO}
867     ${EndIf}
868     IntOp $R1 $PreviousComponents & ${ComponentTextConsole}
869     ${If} $R1 <> 0
870       !InsertMacro SelectSection ${SecConsole}
871       !InsertMacro SetSectionFlag ${SecConsole} ${SF_RO}
872     ${Else}
873       !InsertMacro UnselectSection ${SecConsole}
874       !InsertMacro ClearSectionFlag ${SecConsole} ${SF_RO}
875     ${EndIf}
876     IntOp $R1 $PreviousComponents & ${ComponentBatConsole}
877     ${If} $R1 <> 0
878       !InsertMacro SelectSection ${SecBatConsole}
879       !InsertMacro SetSectionFlag ${SecBatConsole} ${SF_RO}
880     ${Else}
881       !InsertMacro UnselectSection ${SecBatConsole}
882       !InsertMacro ClearSectionFlag ${SecBatConsole} ${SF_RO}
883     ${EndIf}
884   ${EndIf}
885 FunctionEnd
886
887 Function UpdateComponentUI
888   Push $R0
889   Push $R1
890
891   Call GetSelectedComponents
892   Pop $R0
893
894   IntOp $R1 $R0 ^ $PreviousComponents
895   IntOp $NewComponents $R0 & $R1
896
897   ${If} $InstallType <> ${NewInstall}
898     IntOp $R1 $NewComponents & ${ComponentFile}
899     ${If} $R1 <> 0
900       !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_BOLD}
901     ${Else}
902       !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_BOLD}
903     ${EndIf}
904     IntOp $R1 $NewComponents & ${ComponentTextConsole}
905     ${If} $R1 <> 0
906       !InsertMacro SetSectionFlag ${SecConsole} ${SF_BOLD}
907     ${Else}
908       !InsertMacro ClearSectionFlag ${SecConsole} ${SF_BOLD}
909     ${EndIf}
910     IntOp $R1 $NewComponents & ${ComponentBatConsole}
911     ${If} $R1 <> 0
912       !InsertMacro SetSectionFlag ${SecBatConsole} ${SF_BOLD}
913     ${Else}
914       !InsertMacro ClearSectionFlag ${SecBatConsole} ${SF_BOLD}
915     ${EndIf}
916   ${EndIf}
917
918   GetDlgItem $R0 $HWNDPARENT 1
919
920   IntOp $R1 $NewComponents & ${ComponentsRequiringUserConfig}
921   ${If} $R1 = 0
922     SendMessage $R0 ${WM_SETTEXT} 0 "STR:Install"
923   ${Else}
924     SendMessage $R0 ${WM_SETTEXT} 0 "STR:&Next >"
925   ${EndIf}
926
927   Pop $R1
928   Pop $R0
929 FunctionEnd
930
931 !include "InstallType.nsh"
932 !include "ConfigPage1.nsh"
933 !include "ConfigPage2.nsh"
934 !include "DumpLog.nsh"