summaryrefslogtreecommitdiff
path: root/branding/templates/qtinstaller
diff options
context:
space:
mode:
authorkali <kali@leap.se>2020-09-30 16:25:27 +0200
committerRuben Pollan <meskio@sindominio.net>2020-10-13 19:08:44 +0200
commitef892643df8970aec45dbc3f48eabb95a1ccbf22 (patch)
tree1a20c34cca7b94e69468e471790996fa61909805 /branding/templates/qtinstaller
parent47ac0543b9ed2d4afb8814a19e2f4dc3c30030e1 (diff)
[pkg] osx helper and working qt installer
Diffstat (limited to 'branding/templates/qtinstaller')
-rw-r--r--branding/templates/qtinstaller/config/config.xml22
-rw-r--r--branding/templates/qtinstaller/installer.pro36
-rwxr-xr-xbranding/templates/qtinstaller/osx/post-install.py98
-rw-r--r--branding/templates/qtinstaller/osx/se.leap.bitmask-helper.plist26
-rw-r--r--branding/templates/qtinstaller/packages/bitmaskvpn/.gitignore1
-rw-r--r--branding/templates/qtinstaller/packages/bitmaskvpn/meta/install.js53
-rw-r--r--branding/templates/qtinstaller/packages/bitmaskvpn/meta/package.xml11
7 files changed, 247 insertions, 0 deletions
diff --git a/branding/templates/qtinstaller/config/config.xml b/branding/templates/qtinstaller/config/config.xml
new file mode 100644
index 0000000..936726d
--- /dev/null
+++ b/branding/templates/qtinstaller/config/config.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Installer>
+ <Name>DemoLibVPN-0.0.1</Name>
+ <Version>0.0.1</Version>
+ <Title>DemoLibVPN Installer</Title>
+ <Publisher>LEAP Encryption Access Project</Publisher>
+ <TargetDir>@ApplicationsDir@/DemoLibVPN</TargetDir>
+ <RunProgram>@TargetDir@/demolib-vpn.app</RunProgram>
+ <RunProgramArguments>
+ </RunProgramArguments>
+ <StartMenuDir>DemoLibVPN</StartMenuDir>
+ <AllowNonAsciiCharacters>false</AllowNonAsciiCharacters>
+ <!--
+ <RemoteRepositories>
+ <Repository>
+ <Url>http://localhost/repository/</Url>
+ </Repository>
+ </RemoteRepositories>
+ -->
+ <MaintenanceToolName>Uninstall-DemoLibVPN</MaintenanceToolName>
+ <WizardStyle>mac</WizardStyle>
+</Installer>
diff --git a/branding/templates/qtinstaller/installer.pro b/branding/templates/qtinstaller/installer.pro
new file mode 100644
index 0000000..ec800c1
--- /dev/null
+++ b/branding/templates/qtinstaller/installer.pro
@@ -0,0 +1,36 @@
+!defined(INSTALLER, var):INSTALLER= "BitmaskVPN-Installer-git"
+TEMPLATE = aux
+CONFIG -= debug_and_release
+
+INPUT = $$PWD/config/config.xml $$PWD/packages
+inst.input = INPUT
+inst.output = $$INSTALLER
+inst.commands = binarycreator -c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT}
+inst.CONFIG += target_predeps no_link combine
+
+QMAKE_EXTRA_COMPILERS += inst
+
+OTHER_FILES += \
+# watch out... it chokes with dashes in the path
+ packages/riseupvpn/meta/package.xml \
+ packages/riseupvpn/meta/install.js \
+ packages/riseupvpn/data/README.txt \
+
+macx {
+ OTHER_FILES += "packages/riseupvpn/data/riseup-vpn.app"
+ OTHER_FILES += "packages/riseupvpn/data/bitmask-helper"
+ OTHER_FILES += "packages/riseupvpn/data/installer.py"
+ OTHER_FILES += "packages/riseupvpn/data/se.leap.bitmask-helper.plist"
+ OTHER_FILES += "packages/riseupvpn/data/openvpn.leap"
+ OTHER_FILES += "packages/riseupvpn/data/helper/bitmask.pf.conf"
+ OTHER_FILES += "packages/riseupvpn/data/client.up.sh"
+ OTHER_FILES += "packages/riseupvpn/data/client.down.sh"
+}
+linux {
+ OTHER_FILES += "packages/riseupvpn/data/riseup-vpn"
+ OTHER_FILES += "packages/riseupvpn/data/bitmask-helper"
+}
+win32{
+ OTHER_FILES += "packages/riseupvpn/data/riseup-vpn.exe"
+ OTHER_FILES += "packages/riseupvpn/data/helper.exe"
+}
diff --git a/branding/templates/qtinstaller/osx/post-install.py b/branding/templates/qtinstaller/osx/post-install.py
new file mode 100755
index 0000000..32b4780
--- /dev/null
+++ b/branding/templates/qtinstaller/osx/post-install.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import sys
+import subprocess
+
+HELPER = "bitmask-helper"
+HELPER_PLIST = "/Library/LaunchDaemons/se.leap.bitmask-helper.plist"
+_dir = os.path.dirname(os.path.realpath(__file__))
+
+def main():
+ log = open(os.path.join(_dir, 'post-install.log'), 'w')
+ log.write('Checking for admin privileges...\n')
+
+ _id = os.getuid()
+ if _id != 0:
+ err = "error: need to run as root. UID: %s\n" % str(_id)
+ logErr(log, err)
+
+ # failure: sys.exit(1)
+
+ if isHelperRunning():
+ log.write("Trying to stop bitmask-helper...\n")
+ # if this fail, we can check if the HELPER_PLIST is there
+ ok = unloadHelper()
+ log.write("success: %s \n" % str(ok))
+
+ ok = fixHelperOwner(log)
+ log.write("chown helper: %s \n" % str(ok))
+
+ log.write("Copy launch daemon...\n")
+ copyLaunchDaemon()
+
+ log.write("Trying to launch helper...\n")
+ out = launchHelper()
+ log.write("result: %s \n" % str(out))
+
+ grantPermissionsOnLogFolder()
+
+ # all done
+ log.write('post-install script: done\n')
+ sys.exit(0)
+
+
+def logErr(log, msg):
+ log.write(msg)
+ sys.exit(1)
+
+def isHelperRunning():
+ ps = _getProcessList()
+ return HELPER in ps
+
+def unloadHelper():
+ out = subprocess.call(["launchctl", "unload", HELPER_PLIST])
+ out2 = subprocess.call(["pkill", "-9", "bitmask-helper"]) # just in case
+ return out == 0
+
+def fixHelperOwner(log):
+ path = os.path.join(_dir, HELPER)
+ try:
+ os.chown(path, 0, 0)
+ except OSError as exc:
+ log.write(str(exc))
+ return False
+ return True
+
+def copyLaunchDaemon():
+ plist = "se.leap.bitmask-helper.plist"
+ path = os.path.join(_dir, plist)
+ dest = os.path.join('/Library/LaunchDaemons', plist)
+ _p = _dir.replace("/", "\/")
+ subprocess.call(["sed", "-i.back", "s/PATH/%s/" % _p, path])
+ shutil.copy(path, dest)
+
+def launchHelper():
+ out = subprocess.call(["launchctl", "load", "/Library/LaunchDaemons/se.leap.bitmask-helper.plist"])
+ return out == 0
+
+def grantPermissionsOnLogFolder():
+ helperDir = os.path.join(_dir, 'helper')
+ try:
+ os.makedirs(helperDir)
+ except Exception:
+ pass
+ os.chown(helperDir, 0, 0)
+
+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/branding/templates/qtinstaller/osx/se.leap.bitmask-helper.plist b/branding/templates/qtinstaller/osx/se.leap.bitmask-helper.plist
new file mode 100644
index 0000000..c9d9687
--- /dev/null
+++ b/branding/templates/qtinstaller/osx/se.leap.bitmask-helper.plist
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>WorkingDirectory</key>
+ <string>/tmp</string>
+ <key>StandardOutPath</key>
+ <string>bitmask-helper.log</string>
+ <key>StandardErrorPath</key>
+ <string>bitmask-helper-err.log</string>
+ <key>GroupName</key>
+ <string>daemon</string>
+ <key>RunAtLoad</key>
+ <true/>
+ <key>SessionCreate</key>
+ <true/>
+ <key>KeepAlive</key>
+ <true/>
+ <key>ThrottleInterval</key>
+ <integer>5</integer>
+ <key>Label</key>
+ <string>se.leap.BitmaskHelper</string>
+ <key>Program</key>
+ <string>PATH/bitmask-helper</string>
+</dict>
+</plist>
diff --git a/branding/templates/qtinstaller/packages/bitmaskvpn/.gitignore b/branding/templates/qtinstaller/packages/bitmaskvpn/.gitignore
new file mode 100644
index 0000000..60baa9c
--- /dev/null
+++ b/branding/templates/qtinstaller/packages/bitmaskvpn/.gitignore
@@ -0,0 +1 @@
+data/*
diff --git a/branding/templates/qtinstaller/packages/bitmaskvpn/meta/install.js b/branding/templates/qtinstaller/packages/bitmaskvpn/meta/install.js
new file mode 100644
index 0000000..f9c85f2
--- /dev/null
+++ b/branding/templates/qtinstaller/packages/bitmaskvpn/meta/install.js
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 LEAP
+**
+****************************************************************************/
+
+function Component() {
+}
+
+Component.prototype.createOperations = function ()
+{
+ // This will actually install the files
+ component.createOperations();
+
+ // And now our custom actions.
+ // See https://doc.qt.io/qtinstallerframework/operations.html for reference
+ //
+ // 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
+
+ if (systemInfo.productType === "windows") {
+ postInstallWindows();
+ } else if (systemInfo.productType === "osx") {
+ postInstallOSX();
+ } else {
+ postInstallLinux();
+ }
+}
+
+function postInstallWindows() {
+ component.addOperation(
+ "CreateShortcut",
+ "@TargetDir@/README.txt",
+ "@StartMenuDir@/README.lnk",
+ "workingDirectory=@TargetDir@",
+ "iconPath=%SystemRoot%/system32/SHELL32.dll",
+ "iconId=2");
+}
+
+function postInstallOSX() {
+ 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("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");
+}
diff --git a/branding/templates/qtinstaller/packages/bitmaskvpn/meta/package.xml b/branding/templates/qtinstaller/packages/bitmaskvpn/meta/package.xml
new file mode 100644
index 0000000..b910e7f
--- /dev/null
+++ b/branding/templates/qtinstaller/packages/bitmaskvpn/meta/package.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Package>
+ <DisplayName>DemoLibVPN</DisplayName>
+ <Description>DemoLibVPN</Description>
+ <Version>0.20.9-1</Version>
+ <ReleaseDate>2020-10-01</ReleaseDate>
+ <Default>false</Default>
+ <RequiresAdminRights>true</RequiresAdminRights>
+ <Script>install.js</Script>
+ <ForcedInstallation>true</ForcedInstallation>
+</Package>