]> granicus.if.org Git - icinga2/commitdiff
Add missing pre and post installation commands
authorGunnar Beutner <gunnar@beutner.name>
Thu, 31 Mar 2016 08:25:44 +0000 (10:25 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Thu, 31 Mar 2016 12:53:54 +0000 (14:53 +0200)
refs #11449

CMakeLists.txt
icinga-installer/icinga-installer.cpp
icinga2.wixpatch

index 687a403490b084ced1255bb992245cb8c608975b..25582b53455832ff3f76fdb9b29dc123d845bbab 100644 (file)
@@ -328,6 +328,7 @@ set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "nsExec::Exec '\\\"$INSTDIR\\\\sbin\\\\i
 set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icinga-app\\\\icinga.ico")
 set(CPACK_WIX_UPGRADE_GUID "52F2BEAA-4DF0-4C3E-ABDC-C0F61DE4DF8A")
 set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/icinga2.wixpatch")
+set(CPACK_WIX_EXTENSIONS "WixUtilExtension")
 
 set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
 include(InstallRequiredSystemLibraries)
index 3bfbdb9bba8e82fe05fb6539606c249c5d6926e8..022faa726f621b355fda2bf97f8c72e8c28b6413 100644 (file)
 
 using namespace icinga;
 
-int InstallIcinga(void)
+static String GetIcingaInstallDir(void)
 {
-       MessageBox(NULL, "Install", "Icinga 2", 0);
+       char szFileName[MAX_PATH];
+       if (!GetModuleFileName(NULL, szFileName, sizeof(szFileName)))
+               return "";
+       return Utility::DirName(Utility::DirName(szFileName));
+}
+
+static void ExecuteCommand(const String& command)
+{
+       std::cerr << "Executing command: " << command << std::endl;
+       system(command.CStr());
+}
+
+static void ExecuteIcingaCommand(const String& args)
+{
+       ExecuteCommand("\"" + GetIcingaInstallDir() + "\\sbin\\icinga2.exe\" " + args);
+}
+
+static int InstallIcinga(void)
+{
+       String installDir = GetIcingaInstallDir();
+
+       ExecuteCommand("icacls \"" + installDir + "\" /grant *S-1-5-20:(oi)(ci)m");
+       ExecuteCommand("icacls \"" + installDir + "\\etc\" /inheritance:r /grant:r *S-1-5-20:(oi)(ci)m *S-1-5-32-544:(oi)(ci)f");
+
+       Utility::MkDirP(installDir + "/etc/icinga2/pki", 0700);
+       Utility::MkDirP(installDir + "/var/cache/icinga2", 0700);
+       Utility::MkDirP(installDir + "/var/lib/icinga2/pki", 0700);
+       Utility::MkDirP(installDir + "/var/lib/icinga2/agent/inventory", 0700);
+       Utility::MkDirP(installDir + "/var/lib/icinga2/api/config", 0700);
+       Utility::MkDirP(installDir + "/var/lib/icinga2/api/log", 0700);
+       Utility::MkDirP(installDir + "/var/lib/icinga2/api/zones", 0700);
+       Utility::MkDirP(installDir + "/var/lib/icinga2/api/zones", 0700);
+       Utility::MkDirP(installDir + "/var/log/icinga2/compat/archive", 0700);
+       Utility::MkDirP(installDir + "/var/log/icinga2/crash", 0700);
+       Utility::MkDirP(installDir + "/var/spool/icinga2/perfdata", 0700);
+       Utility::MkDirP(installDir + "/var/spool/icinga2/tmp", 0700);
+
+       ExecuteIcingaCommand("--scm-install daemon");
+
        return 0;
 }
 
-int UninstallIcinga(void)
+static int UninstallIcinga(void)
 {
-       MessageBox(NULL, "Uninstall", "Icinga 2", 0);
+       ExecuteIcingaCommand("--scm-uninstall");
+
        return 0;
 }
 
@@ -42,6 +81,8 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
        /* must be called before using any other libbase functions */
        Application::InitializeBase();
 
+       //AllocConsole();
+
        int rc;
 
        if (strcmp(lpCmdLine, "install") == 0) {
@@ -53,5 +94,7 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
                rc = 1;
        }
 
+       //Utility::Sleep(3);
+
        Application::Exit(rc);
 }
index 38360b53417fb2ac1d624c5e3089c5fcdfc9a7f4..d9ce2ceafc90f3991b9ee37aa514ece913b1d16a 100644 (file)
@@ -1,11 +1,28 @@
 <CPackWiXPatch>
   <CPackWiXFragment Id="#PRODUCT">
+    <Property Id="ALLUSERS">1</Property>
+
     <CustomAction Id="XtraInstall" FileKey="CM_FP_sbin.icinga2_installer.exe" ExeCommand="install" Execute="deferred" Impersonate="no" />
     <CustomAction Id="XtraUninstall" FileKey="CM_FP_sbin.icinga2_installer.exe" ExeCommand="uninstall" Execute="deferred" Impersonate="no" />
 
     <InstallExecuteSequence>
       <Custom Action="XtraInstall" Before="InstallFinalize">$CM_CP_sbin.icinga2_installer.exe&gt;2</Custom>
-      <Custom Action="XtraUninstall" After="InstallInitialize">$CM_CP_sbin.icinga2_installer.exe=2</Custom>
+      <Custom Action="XtraUninstall" Before="RemoveExistingProducts">$CM_CP_sbin.icinga2_installer.exe=2</Custom>
     </InstallExecuteSequence>
+
+    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Run Icinga 2 setup wizard" />
+
+    <Property Id="WixShellExecTarget" Value="[#CM_FP_sbin.Icinga2SetupAgent.exe]" />
+    <CustomAction Id="LaunchIcinga2Wizard"
+        BinaryKey="WixCA"
+        DllEntry="WixShellExec"
+        Impersonate="no" />
+
+    <UI>
+        <Publish Dialog="ExitDialog" 
+            Control="Finish" 
+            Event="DoAction" 
+            Value="LaunchIcinga2Wizard">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
+    </UI>
   </CPackWiXFragment>
 </CPackWiXPatch>
\ No newline at end of file