summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkali <kali@leap.se>2020-07-23 18:29:53 +0200
committerRuben Pollan <meskio@sindominio.net>2020-10-13 19:08:39 +0200
commit211fc457329b074fd4331aec0c4fc5d765e9023f (patch)
tree2b5920cb56ab7886afe0cfb821dc5325643d05fa
parentea1127046b2400f3655d1e43e691f44f708afa6b (diff)
[pkg] post-installer script
-rw-r--r--installer/bitmask-installer.pro1
-rwxr-xr-xinstaller/packages/riseupvpn/data/post-install.py80
-rw-r--r--installer/packages/riseupvpn/meta/install.js26
3 files changed, 95 insertions, 12 deletions
diff --git a/installer/bitmask-installer.pro b/installer/bitmask-installer.pro
index c91a618..1435e4c 100644
--- a/installer/bitmask-installer.pro
+++ b/installer/bitmask-installer.pro
@@ -21,6 +21,7 @@ OTHER_FILES += \
macx {
OTHER_FILES += "packages/riseupvpn/data/riseup-vpn.app"
OTHER_FILES += "packages/riseupvpn/data/bitmask-helper"
+ OTHER_FILES += "packages/riseupvpn/data/installer.py"
}
linux {
OTHER_FILES += "packages/riseupvpn/data/riseup-vpn"
diff --git a/installer/packages/riseupvpn/data/post-install.py b/installer/packages/riseupvpn/data/post-install.py
new file mode 100755
index 0000000..1e1addd
--- /dev/null
+++ b/installer/packages/riseupvpn/data/post-install.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import subprocess
+
+HELPER = "bitmask-helper"
+HELPER_PLIST = "/Library/LaunchDaemons/se.leap.bitmask-helper.plist"
+
+def main():
+ _dir = os.path.dirname(os.path.realpath(__file__))
+ log = open(os.path.join(_dir, 'post-install.log'), 'w')
+ log.write('Checking for admin privileges...')
+
+ _id = os.getuid()
+ if _id != 0:
+ err = "error: need to run as root. UID: %s\n" % str(_id)
+ logErr(log, msg)
+
+ # failure: sys.exit(1)
+
+ if isHelperRunning():
+ log.write("Trying to stop bitmask-helper...")
+ # if this fail, we can check if the HELPER_PLIST is there
+ ok = unloadHelper()
+ log.write("success: %s \n" % str(ok))
+
+ ok = makeHelperExecutable()
+ log.write("chmod +x helper: %s \n" % str(ok))
+
+ # 3. cp se.leap.bitmask-helper.plist /Library/LaunchDaemons/
+ copyLaunchDaemon()
+
+ # 4. launchctl load /Library/LaunchDaemons/se.leap.bitmask-helper.plist
+ launchHelper()
+
+ # 5. chown admin:wheel /Applications/$applicationName.app/Contents/helper # is this the folder?
+ grantPermissionsOnLogFolder()
+
+ # all good
+ log.write('post-install script: done')
+ sys.exit(0)
+
+
+def logErr(log, msg):
+ log.write(err)
+ sys.exit(1)
+
+def isHelperRunning():
+ ps = _getProcessList()
+ return HELPER in ps
+
+def unloadHelper():
+ out = subprocess.call(["launchctl", "unload", HELPER_PLIST])
+ return out == 0
+
+def makeHelperExecutable():
+ out = subprocess.call(["chmod", "+x", HELPER])
+ return out == 0
+
+def copyLaunchDaemon():
+ pass
+
+def launchHelper():
+ pass
+
+def grantPermissionsOnLogFolder():
+ pass
+
+def _getProcessList():
+ _out = []
+ output = subprocess.Popen(["ps", "-ceA"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ stdout, stderr = output.communicate()
+ for line in stdout.split('\n'):
+ cmd = line.split(' ')[-1]
+ _out.append(cmd.strip())
+ return _out
+
+if __name__ == "__main__":
+ main()
diff --git a/installer/packages/riseupvpn/meta/install.js b/installer/packages/riseupvpn/meta/install.js
index e5174e1..f9c85f2 100644
--- a/installer/packages/riseupvpn/meta/install.js
+++ b/installer/packages/riseupvpn/meta/install.js
@@ -18,34 +18,36 @@ Component.prototype.createOperations = function ()
// We can also use this to register different components (different architecture for instance)
// See https://doc.qt.io/qtinstallerframework/qt-installer-framework-systeminfo-packages-root-meta-installscript-qs.html
- console.log("Post installation. Checking platform...")
if (systemInfo.productType === "windows") {
- console.log("Platform: windows");
postInstallWindows();
} else if (systemInfo.productType === "osx") {
- console.log("Platform: osx");
postInstallOSX();
} else {
- console.log("Platform: linux");
postInstallLinux();
}
}
function postInstallWindows() {
- component.addOperation("CreateShortcut",
- "@TargetDir@/README.txt",
- "@StartMenuDir@/README.lnk",
- "workingDirectory=@TargetDir@",
- "iconPath=%SystemRoot%/system32/SHELL32.dll",
- "iconId=2");
+ component.addOperation(
+ "CreateShortcut",
+ "@TargetDir@/README.txt",
+ "@StartMenuDir@/README.lnk",
+ "workingDirectory=@TargetDir@",
+ "iconPath=%SystemRoot%/system32/SHELL32.dll",
+ "iconId=2");
}
function postInstallOSX() {
- console.log("TODO: should do osx post-installation");
+ console.log("Post-installation for OSX");
+ // TODO add UNDOEXECUTE for the uninstaller
+ component.addElevatedOperation(
+ "Execute", "{0}",
+ "@TargetDir@/post-install.py",
+ "errormessage=There was an error during the post-installation script, things might be broken. Please report this error and attach the post-install.log file.");
}
function postInstallLinux() {
- console.log("TODO: should do linux post-installation");
+ console.log("Post-installation for GNU/Linux");
console.log("Maybe you want to use your package manager instead?");
component.addOperation("AppendFile", "/tmp/riseupvpn.log", "this is a test - written from the installer");
}