From 599bc9fb41a9c179a24b3425f3c59134ea18d8df Mon Sep 17 00:00:00 2001
From: Nico Alt <nicoalt@posteo.org>
Date: Mon, 14 Feb 2022 08:22:54 +0100
Subject: [PATCH] Try to add preinst/postinst scripts

---
 .gitlab-ci.yml                                | 18 ++++--
 build.gradle.kts                              |  1 +
 .../linux/org.briarproject.Briar.metainfo.xml | 58 +++++++++++++++++++
 src/packagingResources/linux/postinst         | 37 ++++++++++++
 src/packagingResources/linux/preinst          | 31 ++++++++++
 src/packagingResources/linux/prerm            | 39 +++++++++++++
 utils/finalize-deb.sh                         | 27 +++++++++
 7 files changed, 205 insertions(+), 6 deletions(-)
 create mode 100644 src/appResources/linux/org.briarproject.Briar.metainfo.xml
 create mode 100755 src/packagingResources/linux/postinst
 create mode 100755 src/packagingResources/linux/preinst
 create mode 100755 src/packagingResources/linux/prerm
 create mode 100755 utils/finalize-deb.sh

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cd2421bc35..8494fd6397 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -57,7 +57,8 @@ b_bullseye_deb:
   script:
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly -x kaptKotlin packageDeb
-    - mv build/compose/binaries/main/deb/*.deb ./briar-desktop-debian-bullseye.deb
+    - utils/finalize-deb.sh
+    - mv build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-debian-bullseye.deb
   artifacts:
     paths:
       - briar-desktop-debian-bullseye.deb
@@ -71,7 +72,8 @@ b_20_ubuntu_deb:
   script:
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly -x kaptKotlin packageDeb
-    - mv build/compose/binaries/main/deb/*.deb ./briar-desktop-ubuntu-20.04.deb
+    - utils/finalize-deb.sh
+    - mv build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-ubuntu-20.04.deb
   artifacts:
     paths:
       - briar-desktop-ubuntu-20.04.deb
@@ -85,7 +87,8 @@ b_18_ubuntu_deb:
   script:
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly -x kaptKotlin packageDeb
-    - mv build/compose/binaries/main/deb/*.deb ./briar-desktop-ubuntu-18.04.deb
+    - utils/finalize-deb.sh
+    - mv build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-ubuntu-18.04.deb
   artifacts:
     paths:
       - briar-desktop-ubuntu-18.04.deb
@@ -111,7 +114,8 @@ rb_bullseye_deb:
   script:
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta -x kaptKotlin packageDeb
-    - mv build/compose/binaries/main/deb/*.deb ./briar-desktop-debian-bullseye.deb
+    - utils/finalize-deb.sh
+    - mv build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-debian-bullseye.deb
   artifacts:
     paths:
       - briar-desktop-debian-bullseye.deb
@@ -125,7 +129,8 @@ rb_20_ubuntu_deb:
   script:
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta -x kaptKotlin packageDeb
-    - mv build/compose/binaries/main/deb/*.deb ./briar-desktop-ubuntu-20.04.deb
+    - utils/finalize-deb.sh
+    - mv build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-ubuntu-20.04.deb
   artifacts:
     paths:
       - briar-desktop-ubuntu-20.04.deb
@@ -139,7 +144,8 @@ rb_18_ubuntu_deb:
   script:
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
     - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta -x kaptKotlin packageDeb
-    - mv build/compose/binaries/main/deb/*.deb ./briar-desktop-ubuntu-18.04.deb
+    - utils/finalize-deb.sh
+    - mv build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-ubuntu-18.04.deb
   artifacts:
     paths:
       - briar-desktop-ubuntu-18.04.deb
diff --git a/build.gradle.kts b/build.gradle.kts
index 617395770e..c38d84864b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -126,6 +126,7 @@ compose.desktop {
             vendor = "The Briar Project"
             copyright = "2021-2022 The Briar Project"
             licenseFile.set(project.file("LICENSE.txt"))
+            appResourcesRootDir.set(project.layout.projectDirectory.dir("src/appResources"))
             // As described at https://github.com/JetBrains/compose-jb/tree/master/tutorials/Native_distributions_and_local_execution#configuring-included-jdk-modules
             // the Gradle plugin does not automatically determine necessary JDK modules to ship
             // so that we need to define required modules here:
diff --git a/src/appResources/linux/org.briarproject.Briar.metainfo.xml b/src/appResources/linux/org.briarproject.Briar.metainfo.xml
new file mode 100644
index 0000000000..30b5609312
--- /dev/null
+++ b/src/appResources/linux/org.briarproject.Briar.metainfo.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop-application">
+  <id>org.briarproject.Briar</id>
+  <metadata_license>CC-BY-4.0</metadata_license>
+  <project_license>AGPL-3.0-only</project_license>
+
+  <name>Briar</name>
+  <summary>Secure messaging, anywhere</summary>
+
+  <description>
+    <p>
+      Briar is a messaging app designed for activists, journalists, and anyone
+      else who needs a safe, easy and robust way to communicate. Unlike
+      traditional messaging apps, Briar doesn't rely on a central server -
+      messages are synchronized directly between the users' devices. If the
+      internet's down, Briar can sync via Bluetooth or Wi-Fi, keeping the
+      information flowing in a crisis. If the internet's up, Briar can sync via
+      the Tor network, protecting users and their relationships from
+      surveillance.
+    </p>
+  </description>
+
+  <launchable type="desktop-id">org.briarproject.Briar.desktop</launchable>
+
+  <url type="homepage">https://code.briarproject.org/briar/briar-desktop</url>
+  <url type="bugtracker">https://code.briarproject.org/briar/briar-desktop/-/issues</url>
+  <url type="faq">https://code.briarproject.org/briar/briar-desktop/blob/main/README.md#faq</url>
+  <url type="help">https://briarproject.org/manual/</url>
+  <url type="translate">https://www.transifex.com/otf/briar/</url>
+  <url type="donation">https://liberapay.com/Briar/donate</url>
+  <project_group>Briar</project_group>
+  <developer_name>The Briar Project</developer_name>
+  <update_contact>desktop@briarproject.org</update_contact>
+  
+  <content_rating type="oars-1.1">
+    <content_attribute id="social-chat">intense</content_attribute>
+  </content_rating>
+
+  <provides>
+    <binary>briar-desktop</binary>
+  </provides>
+
+  <custom>
+    <value key="Purism::form_factor">workstation</value>
+  </custom>
+
+  <releases>
+    <release version="0.2.0" date="2022-02-22">
+      <description>
+        <p>
+          See the changelog for more information on this release.
+        </p>
+      </description>
+      <url>https://code.briarproject.org/briar/briar-desktop/-/wikis/Changelog#anchor-020</url>
+    </release>
+  </releases>
+
+</component>
diff --git a/src/packagingResources/linux/postinst b/src/packagingResources/linux/postinst
new file mode 100755
index 0000000000..d3b38e2049
--- /dev/null
+++ b/src/packagingResources/linux/postinst
@@ -0,0 +1,37 @@
+#!/bin/sh
+# postinst script for briar-desktop
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postinst> `configure' <most-recently-configured-version>
+#        * <old-postinst> `abort-upgrade' <new version>
+#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+#          <new-version>
+#        * <postinst> `abort-remove'
+#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+#          <failed-install-package> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see https://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+case "$1" in
+    configure)
+ln -nsf /opt/briar-desktop/lib/briar-desktop-Briar.desktop /opt/briar-desktop/lib/org.briarproject.Briar.desktop
+xdg-desktop-menu install --novendor /opt/briar-desktop/lib/org.briarproject.Briar.desktop
+ln -nsf /opt/briar-desktop/bin/Briar /usr/bin/briar-desktop
+ln -nsf /opt/briar-desktop/lib/app/resources/org.briarproject.Briar.metainfo.xml /usr/share/metainfo/org.briarproject.Briar.metainfo.xml
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+exit 0
diff --git a/src/packagingResources/linux/preinst b/src/packagingResources/linux/preinst
new file mode 100755
index 0000000000..cca6979424
--- /dev/null
+++ b/src/packagingResources/linux/preinst
@@ -0,0 +1,31 @@
+#!/bin/sh
+# preinst script for briar-desktop
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <new-preinst> `install'
+#        * <new-preinst> `install' <old-version>
+#        * <new-preinst> `upgrade' <old-version>
+#        * <old-preinst> `abort-upgrade' <new-version>
+# for details, see https://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    install|upgrade)
+mkdir -p /usr/share/desktop-directories/
+    ;;
+
+    abort-upgrade)
+    ;;
+
+    *)
+        echo "preinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+exit 0
diff --git a/src/packagingResources/linux/prerm b/src/packagingResources/linux/prerm
new file mode 100755
index 0000000000..124f009ead
--- /dev/null
+++ b/src/packagingResources/linux/prerm
@@ -0,0 +1,39 @@
+#!/bin/sh
+# prerm script for briar-desktop
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <prerm> `remove'
+#        * <old-prerm> `upgrade' <new-version>
+#        * <new-prerm> `failed-upgrade' <old-version>
+#        * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
+#        * <deconfigured's-prerm> `deconfigure' `in-favour'
+#          <package-being-installed> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see https://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+
+
+case "$1" in
+    remove|upgrade|deconfigure)
+xdg-desktop-menu uninstall /opt/briar-desktop/lib/org.briarproject.Briar.desktop
+rm /usr/bin/briar-desktop
+rm /usr/share/metainfo/org.briarproject.Briar.metainfo.xml
+    ;;
+
+    failed-upgrade)
+    ;;
+
+    *)
+        echo "prerm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+exit 0
+
diff --git a/utils/finalize-deb.sh b/utils/finalize-deb.sh
new file mode 100755
index 0000000000..43c9ec66b2
--- /dev/null
+++ b/utils/finalize-deb.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# A script for manually adding files to the produced .deb files.
+# https://unix.stackexchange.com/a/138190
+
+set -ex
+
+DIR=$(dirname $0)
+REPO="$DIR/.."
+OUTPUT="$REPO/deb"
+
+cd "$REPO/build/compose/binaries/main/deb"
+
+mkdir tmp
+cd tmp
+
+# Unpack control.tar.xz to tmp directory
+ar p ../*.deb control.tar.xz | tar -xJ
+ar d ../*.deb control.tar.xz
+
+# Replace preinst, postinst, prerm scripts
+#TODO
+
+# Repackage briar-desktop.deb
+cp ../*.deb ../briar-desktop.deb
+tar cfJ control.tar.xz ./*[!z]
+ar r ../briar-desktop.deb control.tar.xz
-- 
GitLab