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