]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/win32_installer/winbacula.nsi
eff5b904d35e38e05dd4873810707fb93c8206b9
[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   Call InstallCommonFiles
503   File "${SRC_DIR}\QtCore4.dll"
504   File "${SRC_DIR}\QtGui4.dll"
505
506   File "${SRC_DIR}\bat.exe"
507
508   File "/oname=$PLUGINSDIR\bat.conf" "bat.conf.in"
509   StrCpy $0 "$INSTDIR"
510   StrCpy $1 bat.conf
511   Call ConfigEditAndCopy
512
513   SetOutPath "$INSTDIR\help"
514   File "${SRC_DIR}\help\*"
515   SetOutPath "$INSTDIR"
516    
517
518   ; Create Start Menu entry
519   CreateShortCut "$SMPROGRAMS\Bacula\Bat.lnk" "$INSTDIR\bat.exe" '-c "$INSTDIR\bat.conf"' "$INSTDIR\bat.exe" 0
520   CreateShortCut "$SMPROGRAMS\Bacula\Configuration\Edit Bat Configuration.lnk" "write.exe" '"$INSTDIR\bat.conf"'
521 SectionEnd
522
523
524 ; Deleted because wxconsole is deprecated
525 ;Section "Graphical Console" SecWxConsole
526 ;  SectionIn 1 2 3
527   
528 ;  SetOutPath "$INSTDIR"
529 ;
530 ;SectionEnd
531
532 SectionGroupEnd
533
534 SectionGroup "Documentation" SecGroupDocumentation
535
536 Section "Documentation (Acrobat Format)" SecDocPdf
537   SectionIn 1 2 3
538
539   SetOutPath "$INSTDIR\doc"
540   CreateDirectory "$INSTDIR\doc"
541
542   File "${SRC_DIR}\docs\manuals\en\console\console.pdf"
543   File "${SRC_DIR}\docs\manuals\en\misc\misc.pdf"
544   File "${SRC_DIR}\docs\manuals\en\main\main.pdf"
545   File "${SRC_DIR}\docs\manuals\en\utility\utility.pdf"
546   File "${SRC_DIR}\docs\manuals\en\problems\problems.pdf"
547   CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Console.lnk" '"$INSTDIR\doc\console.pdf"'
548   CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Main.lnk" '"$INSTDIR\doc\main.pdf"'
549   CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Misc.lnk" '"$INSTDIR\doc\misc.pdf"'
550   CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Utility.lnk" '"$INSTDIR\doc\utility.pdf"'
551   CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Problems.lnk" '"$INSTDIR\doc\problems.pdf"'
552   SetOutPath "$INSTDIR"
553 SectionEnd
554
555 ;Section "Documentation (HTML Format)" SecDocHtml
556 ;  SectionIn 3
557
558 ; SetOutPath "$INSTDIR\doc"
559 ; CreateDirectory "$INSTDIR\doc"
560
561 ; File "${SRC_DIR}\manual\bacula\*.html"
562 ; File "${SRC_DIR}\manual\bacula\*.png"
563 ; File "${SRC_DIR}\manual\bacula\*.css"
564 ; CreateShortCut "$SMPROGRAMS\Bacula\Documentation\Manual (HTML).lnk" '"$INSTDIR\doc\index.html"'
565 ;SectionEnd
566
567 SectionGroupEnd
568
569 Section "-Finish"
570   Push $R0
571
572   ${If} $OsIsNT = 1
573 ;   nsExec::ExecToLog 'cmd.exe /C echo Y|cacls "$INSTDIR" /T /G SYSTEM:F Administrators:F'
574   ${EndIf}
575
576   ; Write the uninstall keys for Windows & create Start Menu entry
577   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayName" "Bacula"
578   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "InstallLocation" "$INSTDIR"
579   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "DisplayVersion" "${VERSION}"
580   ${StrTok} $R0 "${VERSION}" "." 0 0
581   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMajor" $R0
582   ${StrTok} $R0 "${VERSION}" "." 1 0
583   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "VersionMinor" $R0
584   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoModify" 1
585   WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "NoRepair" 1
586   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLUpdateInfo" "http://www.bacula.org"
587   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "URLInfoAbout" "http://www.bacula.org"
588   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "HelpLink" "http://www.bacula.org?page=support"
589   WriteRegStr   HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula" "UninstallString" '"$INSTDIR\uninstall.exe"'
590   WriteUninstaller "$INSTDIR\Uninstall.exe"
591   CreateShortCut "$SMPROGRAMS\Bacula\Uninstall Bacula.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0
592   Pop $R0
593 SectionEnd
594
595 ; Extra Page descriptions
596
597 LangString DESC_SecFileDaemon ${LANG_ENGLISH} "Install Bacula File Daemon on this system."
598 LangString DESC_SecConsole ${LANG_ENGLISH} "Install command console program on this system."
599 LangString DESC_SecBatConsole ${LANG_ENGLISH} "Install Bat graphical console program on this system."
600
601 LangString TITLE_ConfigPage1 ${LANG_ENGLISH} "Configuration"
602 LangString SUBTITLE_ConfigPage1 ${LANG_ENGLISH} "Set installation configuration."
603
604 LangString TITLE_ConfigPage2 ${LANG_ENGLISH} "Configuration (continued)"
605 LangString SUBTITLE_ConfigPage2 ${LANG_ENGLISH} "Set installation configuration."
606
607 LangString TITLE_InstallType ${LANG_ENGLISH} "Installation Type"
608 LangString SUBTITLE_InstallType ${LANG_ENGLISH} "Choose installation type."
609
610 LangString TITLE_WriteTemplates ${LANG_ENGLISH} "Create Templates"
611 LangString SUBTITLE_WriteTemplates ${LANG_ENGLISH} "Create a resource template for inclusion in the Director's configuration file."
612
613 !InsertMacro MUI_FUNCTION_DESCRIPTION_BEGIN
614   !InsertMacro MUI_DESCRIPTION_TEXT ${SecFileDaemon} $(DESC_SecFileDaemon)
615   !InsertMacro MUI_DESCRIPTION_TEXT ${SecConsole} $(DESC_SecConsole)
616   !InsertMacro MUI_DESCRIPTION_TEXT ${SecBatConsole} $(DESC_SecBatConsole)
617 !InsertMacro MUI_FUNCTION_DESCRIPTION_END
618
619 ; Uninstall section
620
621 UninstallText "This will uninstall Bacula. Click Uninstall to continue."
622
623 Section "Uninstall"
624   ; Shutdown any baculum that could be running
625   nsExec::ExecToLog '"$INSTDIR\bacula-fd.exe" /kill'
626   Sleep 3000
627
628 ; ReadRegDWORD $R0 HKLM "Software\Bacula" "Service_Bacula-fd"
629   ; Remove bacula service
630   nsExec::ExecToLog '"$INSTDIR\bacula-fd.exe" /remove'
631   nsExec::ExecToLog '"$INSTDIR\plugins\exchange-fd.dll" /remove'
632   
633   ; remove registry keys
634   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Bacula"
635   DeleteRegKey HKLM "Software\Bacula"
636
637   ; remove start menu items
638   SetShellVarContext all
639   Delete /REBOOTOK "$SMPROGRAMS\Bacula\*"
640   RMDir "$SMPROGRAMS\Bacula"
641
642   ; remove files and uninstaller (preserving config for now)
643   Delete /REBOOTOK "$INSTDIR\doc\*"
644   Delete /REBOOTOK "$INSTDIR\*"
645   Delete /REBOOTOK "$INSTDIR\help\*"
646
647   ; Check for existing installation
648   MessageBox MB_YESNO|MB_ICONQUESTION \
649   "Would you like to delete the current configuration files and the working state file?" IDNO NoDel
650     Delete /REBOOTOK "$INSTDIR\*"
651     Delete /REBOOTOK "$INSTDIR\working\*"
652     Delete /REBOOTOK "$INSTDIR\plugins\*"
653     Delete /REBOOTOK "$PLUGINSDIR\bacula-*.conf"
654     Delete /REBOOTOK "$PLUGINSDIR\*console.conf"
655     Delete /REBOOTOK "$PLUGINSDIR\*conf.in"
656     Delete /REBOOTOK "$PLUGINSDIR\openssl.exe"
657     Delete /REBOOTOK "$PLUGINSDIR\libeay32.dll"
658     Delete /REBOOTOK "$PLUGINSDIR\ssleay32.dll"
659     Delete /REBOOTOK "$PLUGINSDIR\sed.exe"    
660     Delete /REBOOTOK "$PLUGINSDIR\pw.txt"     
661     Delete /REBOOTOK "$PLUGINSDIR\*.sed" 
662     Delete /REBOOTOK "$PLUGINSDIR\*.cmd"    
663     Delete /REBOOTOK "$PLUGINSDIR\*.sql"    
664     RMDir "$INSTDIR\plugins"
665     RMDir "$INSTDIR\working"
666     RMDir "$INSTDIR"
667 NoDel:
668
669   ; remove directories used
670   RMDir "$INSTDIR\doc"
671   RMDir "$INSTDIR\help"
672   RMDir "$INSTDIR"
673 SectionEnd
674
675 ;
676 ; $0 - Service Name (ie Bacula-FD)
677 ; $1 - Service Description (ie Bacula File Daemon)
678 ; $2 - Install as Service
679 ; $3 - Start Service now
680 ;
681 Function InstallDaemon
682   Call InstallCommonFiles
683
684   WriteRegDWORD HKLM "Software\Bacula" "Service_$0" $2
685   
686   ${If} $2 = 1
687     nsExec::ExecToLog '"$INSTDIR\$0.exe" /kill'
688     sleep 3000
689     nsExec::ExecToLog '"$INSTDIR\$0.exe" /remove'
690     nsExec::ExecToLog '"$INSTDIR\$0.exe" /install -c "$INSTDIR\$0.conf"'
691
692     ${If} $OsIsNT <> 1
693       File "Start.bat"
694       File "Stop.bat"
695     ${EndIf}
696
697     ; Start the service?
698
699     ${If} $3 = 1  
700       ${If} $OsIsNT = 1
701         nsExec::ExecToLog 'net start $0'
702       ${Else}
703         Exec '"$INSTDIR\$0.exe" /service -c "$INSTDIR\$0.conf"'
704       ${EndIf}
705     ${EndIf}
706   ${Else}
707     CreateShortCut "$SMPROGRAMS\Bacula\Start $1.lnk" "$INSTDIR\$0.exe" '-c "$INSTDIR\$0.conf"' "$INSTDIR\$0.exe" 0
708   ${EndIf}
709 FunctionEnd
710
711 Function GetComputerName
712   Push $R0
713   Push $R1
714   Push $R2
715
716   System::Call "kernel32::GetComputerNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2"
717
718   ${StrCase} $R0 $R0 "L"
719
720   Pop $R2
721   Pop $R1
722   Exch $R0
723 FunctionEnd
724
725 !define ComputerNameDnsFullyQualified   3
726
727 Function GetHostName
728   Push $R0
729   Push $R1
730   Push $R2
731
732   ${If} $OsIsNT = 1
733     System::Call "kernel32::GetComputerNameExA(i ${ComputerNameDnsFullyQualified}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
734     ${If} $R2 = 0
735       Pop $R2
736       DetailPrint "GetComputerNameExA failed - LastError = $R2"
737       Call GetComputerName
738       Pop $R0
739     ${Else}
740       Pop $R2
741     ${EndIf}
742   ${Else}
743     Call GetComputerName
744     Pop $R0
745   ${EndIf}
746
747   Pop $R2
748   Pop $R1
749   Exch $R0
750 FunctionEnd
751
752 !define NameUserPrincipal 8
753
754 Function GetUserName
755   Push $R0
756   Push $R1
757   Push $R2
758
759   ${If} $OsIsNT = 1
760     System::Call "secur32::GetUserNameExA(i ${NameUserPrincipal}, t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
761     ${If} $R2 = 0
762       Pop $R2
763       DetailPrint "GetUserNameExA failed - LastError = $R2"
764       Pop $R0
765       StrCpy $R0 ""
766     ${Else}
767       Pop $R2
768     ${EndIf}
769   ${Else}
770       StrCpy $R0 ""
771   ${EndIf}
772
773   ${If} $R0 == ""
774     System::Call "advapi32::GetUserNameA(t .R0, *i ${NSIS_MAX_STRLEN} R1) i.R2 ?e"
775     ${If} $R2 = 0
776       Pop $R2
777       DetailPrint "GetUserNameA failed - LastError = $R2"
778       StrCpy $R0 ""
779     ${Else}
780       Pop $R2
781     ${EndIf}
782   ${EndIf}
783
784   Pop $R2
785   Pop $R1
786   Exch $R0
787 FunctionEnd
788
789 Function ConfigEditAndCopy
790   Push $R1
791
792   ${If} ${FileExists} "$0\$1"
793     StrCpy $R1 ".new"
794   ${Else}
795     StrCpy $R1 ""
796   ${EndIf}
797
798   nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\$1"'
799   CopyFiles "$PLUGINSDIR\$1" "$0\$1$R1"
800
801   Pop $R1
802 FunctionEnd
803
804 Function GetSelectedComponents
805   Push $R0
806   StrCpy $R0 0
807   ${If} ${SectionIsSelected} ${SecFileDaemon}
808     IntOp $R0 $R0 | ${ComponentFile}
809   ${EndIf}
810   ${If} ${SectionIsSelected} ${SecConsole}
811     IntOp $R0 $R0 | ${ComponentTextConsole}
812   ${EndIf}
813   ${If} ${SectionIsSelected} ${SecBatConsole}
814     IntOp $R0 $R0 | ${ComponentBatConsole}
815   ${EndIf}
816   ${If} ${SectionIsSelected} ${SecDocPdf}
817     IntOp $R0 $R0 | ${ComponentPDFDocs}
818   ${EndIf}
819   Exch $R0
820 FunctionEnd
821
822 Function PageComponentsShow
823   Call SelectPreviousComponents
824   Call UpdateComponentUI
825 FunctionEnd
826
827 Function PageDirectoryPre
828   ${If} $AutomaticInstall = 1
829   ${OrIf} $InstallType = ${UpgradeInstall}
830     Abort
831   ${EndIf}
832 FunctionEnd
833
834 Function LeaveInstallPage
835   Push "$INSTDIR\install.log"
836   Call DumpLog
837 FunctionEnd
838
839 Function EnterWriteTemplates
840   Push $R0
841   Push $R1
842
843   Call GetSelectedComponents
844   Pop $R0
845
846   IntOp $R0 $R0 & ${ComponentDirector}
847   IntOp $R1 $NewComponents & ${ComponentsFileAndStorage}
848
849   ${If} $R0 <> 0
850   ${OrIf} $R1 = 0
851     Pop $R1
852     Pop $R0
853     Abort
854   ${EndIf}
855
856   IntOp $R0 $NewComponents & ${ComponentFile}
857   ${If} $R0 = 0
858     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 0
859     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags DISABLED
860     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State
861     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" Flags REQ_SAVE|FILE_EXPLORER|WARN_IF_EXIST|DISABLED
862   ${Else}
863     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" State 1
864     DeleteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 2" Flags
865     WriteINIStr "$PLUGINSDIR\WriteTemplates.ini" "Field 3" State "C:\$ConfigClientName.conf"
866   ${EndIf}
867
868
869   !InsertMacro MUI_HEADER_TEXT "$(TITLE_WriteTemplates)" "$(SUBTITLE_WriteTemplates)"
870   !InsertMacro MUI_INSTALLOPTIONS_DISPLAY "WriteTemplates.ini"
871
872   !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 2" State
873   ${If} $R0 <> 0
874     File "/oname=$PLUGINSDIR\client.conf.in" "client.conf.in"
875
876     nsExec::ExecToLog '$PLUGINSDIR\sed.exe -f "$PLUGINSDIR\config.sed" -i.bak "$PLUGINSDIR\client.conf.in"'
877     !InsertMacro MUI_INSTALLOPTIONS_READ $R0 "WriteTemplates.ini" "Field 3" State
878     ${If} $R0 != ""
879       CopyFiles "$PLUGINSDIR\client.conf.in" "$R0"
880     ${EndIf}
881   ${EndIf}
882
883
884   Pop $R1
885   Pop $R0
886 FunctionEnd
887
888 Function SelectPreviousComponents
889   ${If} $InstallType <> ${NewInstall}
890     IntOp $R1 $PreviousComponents & ${ComponentFile}
891     ${If} $R1 <> 0
892       !InsertMacro SelectSection ${SecFileDaemon}
893       !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_RO}
894     ${Else}
895       !InsertMacro UnselectSection ${SecFileDaemon}
896       !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_RO}
897     ${EndIf}
898     IntOp $R1 $PreviousComponents & ${ComponentTextConsole}
899     ${If} $R1 <> 0
900       !InsertMacro SelectSection ${SecConsole}
901       !InsertMacro SetSectionFlag ${SecConsole} ${SF_RO}
902     ${Else}
903       !InsertMacro UnselectSection ${SecConsole}
904       !InsertMacro ClearSectionFlag ${SecConsole} ${SF_RO}
905     ${EndIf}
906     IntOp $R1 $PreviousComponents & ${ComponentBatConsole}
907     ${If} $R1 <> 0
908       !InsertMacro SelectSection ${SecBatConsole}
909       !InsertMacro SetSectionFlag ${SecBatConsole} ${SF_RO}
910     ${Else}
911       !InsertMacro UnselectSection ${SecBatConsole}
912       !InsertMacro ClearSectionFlag ${SecBatConsole} ${SF_RO}
913     ${EndIf}
914     ${If} $R1 <> 0
915       !InsertMacro SelectSection ${SecDocPdf}
916       !InsertMacro SetSectionFlag ${SecDocPdf} ${SF_RO}
917     ${Else}
918       !InsertMacro UnselectSection ${SecDocPdf}
919       !InsertMacro ClearSectionFlag ${SecDocPdf} ${SF_RO}
920     ${EndIf}
921   ${EndIf}
922 FunctionEnd
923
924 Function UpdateComponentUI
925   Push $R0
926   Push $R1
927
928   Call GetSelectedComponents
929   Pop $R0
930
931   IntOp $R1 $R0 ^ $PreviousComponents
932   IntOp $NewComponents $R0 & $R1
933
934   ${If} $InstallType <> ${NewInstall}
935     IntOp $R1 $NewComponents & ${ComponentFile}
936     ${If} $R1 <> 0
937       !InsertMacro SetSectionFlag ${SecFileDaemon} ${SF_BOLD}
938     ${Else}
939       !InsertMacro ClearSectionFlag ${SecFileDaemon} ${SF_BOLD}
940     ${EndIf}
941     IntOp $R1 $NewComponents & ${ComponentTextConsole}
942     ${If} $R1 <> 0
943       !InsertMacro SetSectionFlag ${SecConsole} ${SF_BOLD}
944     ${Else}
945       !InsertMacro ClearSectionFlag ${SecConsole} ${SF_BOLD}
946     ${EndIf}
947    IntOp $R1 $NewComponents & ${ComponentBatConsole}
948     ${If} $R1 <> 0
949       !InsertMacro SetSectionFlag ${SecBatConsole} ${SF_BOLD}
950     ${Else}
951       !InsertMacro ClearSectionFlag ${SecBatConsole} ${SF_BOLD}
952     ${EndIf}
953     IntOp $R1 $NewComponents & ${ComponentPDFDocs}
954     ${If} $R1 <> 0
955       !InsertMacro SetSectionFlag ${SecDocPdf} ${SF_BOLD}
956     ${Else}
957       !InsertMacro ClearSectionFlag ${SecDocPdf} ${SF_BOLD}
958     ${EndIf}
959   ${EndIf}
960
961   GetDlgItem $R0 $HWNDPARENT 1
962
963   IntOp $R1 $NewComponents & ${ComponentsRequiringUserConfig}
964   ${If} $R1 = 0
965     SendMessage $R0 ${WM_SETTEXT} 0 "STR:Install"
966   ${Else}
967     SendMessage $R0 ${WM_SETTEXT} 0 "STR:&Next >"
968   ${EndIf}
969
970   Pop $R1
971   Pop $R0
972 FunctionEnd
973
974 !include "InstallType.nsh"
975 !include "ConfigPage1.nsh"
976 !include "ConfigPage2.nsh"
977 !include "DumpLog.nsh"