From f508bc74b8547221064e281830f408b805ab4285 Mon Sep 17 00:00:00 2001 From: Kevin Yue Date: Wed, 27 Mar 2024 09:19:08 -0400 Subject: [PATCH] Add gp-suspend.service --- .github/workflows/build.yaml | 27 ++++++++++++-- .github/workflows/release.yaml | 9 ++++- Makefile | 37 ++++++++++++++++++- packaging/binary/Makefile.in | 30 ++++++++++++++- packaging/deb/postrm | 2 + packaging/deb/rules.in | 6 +++ .../usr/lib/systemd/system/gp-suspend.service | 10 +++++ packaging/pkgbuild/PKGBUILD.in | 4 +- packaging/pkgbuild/gp.install | 12 ++++++ .../rpm/globalprotect-openconnect.spec.in | 30 ++++++++++++++- 10 files changed, 157 insertions(+), 10 deletions(-) create mode 100644 packaging/files/usr/lib/systemd/system/gp-suspend.service create mode 100644 packaging/pkgbuild/gp.install diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6c7e5319..ce166b6e 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -62,20 +62,39 @@ jobs: strategy: matrix: os: ${{fromJson(needs.setup-matrix.outputs.matrix)}} + package: [deb, rpm, pkg, binary] runs-on: ${{ matrix.os }} steps: - name: Prepare workspace - run: rm -rf build-gp && mkdir build-gp + run: | + rm -rf build-gp-${{ matrix.package }} + mkdir -p build-gp-${{ matrix.package }} - name: Download tarball uses: actions/download-artifact@v3 with: name: artifact-source - path: build-gp + path: build-gp-${{ matrix.package }} - name: Docker Login run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - - name: Build gp in Docker + - name: Build ${{ matrix.package }} package in Docker + run: | + docker run --rm \ + -v $(pwd)/build-gp-${{ matrix.package }}:/${{ matrix.package }} \ + yuezk/gpdev:${{ matrix.package }}-builder + - name: Install ${{ matrix.package }} package in Docker run: | - docker run --rm -v $(pwd)/build-gp:/gp yuezk/gpdev:gp-builder + docker run --rm \ + -e GPGUI_INSTALLED=0 + -v $(pwd)/build-gp-${{ matrix.package }}:/${{ matrix.package }} \ + yuezk/gpdev:${{ matrix.package }}-builder \ + bash install.sh + - name: Upload ${{ matrix.package }} package + uses: actions/upload-artifact@v3 + with: + name: artifact-gp-${{ matrix.os }}-${{ matrix.package }} + if-no-files-found: error + path: | + build-gp-${{ matrix.package }}/artifacts/* build-gpgui: needs: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 05a172e7..6fc670c3 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -109,11 +109,16 @@ jobs: run: echo ${{ secrets.DOCKER_HUB_TOKEN }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin - name: Build ${{ matrix.package }} package in Docker run: | - docker run --rm -v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} -e INCLUDE_GUI=1 yuezk/gpdev:${{ matrix.package }}-builder + docker run --rm \ + -v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} \ + -e INCLUDE_GUI=1 \ + yuezk/gpdev:${{ matrix.package }}-builder - name: Install ${{ matrix.package }} package in Docker run: | - docker run --rm -v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} yuezk/gpdev:${{ matrix.package }}-builder \ + docker run --rm \ + -v $(pwd)/build-${{ matrix.package }}:/${{ matrix.package }} \ + yuezk/gpdev:${{ matrix.package }}-builder \ bash install.sh - name: Upload ${{ matrix.package }} package diff --git a/Makefile b/Makefile index 59e5cf3f..c24cb8c8 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,12 @@ PKG = $(PKG_NAME)-$(VERSION) SERIES ?= $(shell lsb_release -cs) PUBLISH ?= 0 +# Indicate if it is a Debian packaging +DEB_PACKAGING ?= 0 +INCLUDE_SYSTEMD ?= $(shell [ -d /run/systemd/system ] && echo 1 || echo 0) +# Enable the systemd service after installation +ENABLE_SERVICE ?= 1 + export DEBEMAIL = k3vinyue@gmail.com export DEBFULLNAME = Kevin Yue @@ -116,9 +122,34 @@ install: install -Dm644 packaging/files/usr/share/icons/hicolor/256x256@2/apps/gpgui.png $(DESTDIR)/usr/share/icons/hicolor/256x256@2/apps/gpgui.png install -Dm644 packaging/files/usr/share/polkit-1/actions/com.yuezk.gpgui.policy $(DESTDIR)/usr/share/polkit-1/actions/com.yuezk.gpgui.policy + # Install the systemd service + if [ $(INCLUDE_SYSTEMD) -eq 1 ]; then \ + if [ $(DEB_PACKAGING) -eq 1 ]; then \ + install -Dm644 packaging/files/usr/lib/systemd/system/gp-suspend.service $(DESTDIR)/lib/systemd/system/gp-suspend.service; \ + else \ + install -Dm644 packaging/files/usr/lib/systemd/system/gp-suspend.service $(DESTDIR)/usr/lib/systemd/system/gp-suspend.service; \ + fi; \ + if [ $(ENABLE_SERVICE) -eq 1 ]; then \ + systemctl --system daemon-reload \ + systemctl enable gp-suspend.service || true; \ + fi \ + else \ + echo "Skipping systemd service installation"; \ + fi + + @echo "Installation complete." + uninstall: @echo "Uninstalling $(PKG_NAME)..." + # Disable the systemd service + if [ -d /run/systemd/system ]; then \ + systemctl disable gp-suspend.service >/dev/null || true; \ + fi + + rm -f $(DESTDIR)/lib/systemd/system/gp-suspend.service + rm -f $(DESTDIR)/usr/lib/systemd/system/gp-suspend.service + rm -f $(DESTDIR)/usr/bin/gpclient rm -f $(DESTDIR)/usr/bin/gpauth rm -f $(DESTDIR)/usr/bin/gpservice @@ -223,6 +254,7 @@ init-pkgbuild: clean-pkgbuild tarball cp .build/tarball/${PKG}.tar.gz .build/pkgbuild cp packaging/pkgbuild/PKGBUILD.in .build/pkgbuild/PKGBUILD + cp packaging/pkgbuild/gp.install .build/pkgbuild sed -i "s/@PKG_NAME@/$(PKG_NAME)/g" .build/pkgbuild/PKGBUILD sed -i "s/@VERSION@/$(VERSION)/g" .build/pkgbuild/PKGBUILD @@ -244,7 +276,10 @@ binary: clean-binary tarball mkdir -p .build/binary/$(PKG_NAME)_$(VERSION)/artifacts make -C .build/binary/${PKG} build OFFLINE=$(OFFLINE) BUILD_FE=0 INCLUDE_GUI=$(INCLUDE_GUI) - make -C .build/binary/${PKG} install DESTDIR=$(PWD)/.build/binary/$(PKG_NAME)_$(VERSION)/artifacts + make -C .build/binary/${PKG} install \ + DESTDIR=$(PWD)/.build/binary/$(PKG_NAME)_$(VERSION)/artifacts \ + INCLUDE_SYSTEMD=1 \ + ENABLE_SERVICE=0 cp packaging/binary/Makefile.in .build/binary/$(PKG_NAME)_$(VERSION)/Makefile diff --git a/packaging/binary/Makefile.in b/packaging/binary/Makefile.in index 8f71e689..0aa4812d 100644 --- a/packaging/binary/Makefile.in +++ b/packaging/binary/Makefile.in @@ -1,3 +1,7 @@ +INCLUDE_SYSTEMD ?= $(shell [ -d /run/systemd/system ] && echo 1 || echo 0) +# Enable the systemd service after installation +ENABLE_SERVICE ?= 1 + install: @echo "===> Installing..." @@ -5,7 +9,10 @@ install: install -Dm755 artifacts/usr/bin/gpservice $(DESTDIR)/usr/bin/gpservice install -Dm755 artifacts/usr/bin/gpauth $(DESTDIR)/usr/bin/gpauth install -Dm755 artifacts/usr/bin/gpgui-helper $(DESTDIR)/usr/bin/gpgui-helper - install -Dm755 artifacts/usr/bin/gpgui $(DESTDIR)/usr/bin/gpgui + + if [ -f artifacts/usr/bin/gpgui ]; then \ + install -Dm755 artifacts/usr/bin/gpgui $(DESTDIR)/usr/bin/gpgui; \ + fi install -Dm644 artifacts/usr/share/applications/gpgui.desktop $(DESTDIR)/usr/share/applications/gpgui.desktop install -Dm644 artifacts/usr/share/icons/hicolor/scalable/apps/gpgui.svg $(DESTDIR)/usr/share/icons/hicolor/scalable/apps/gpgui.svg @@ -14,9 +21,28 @@ install: install -Dm644 artifacts/usr/share/icons/hicolor/256x256@2/apps/gpgui.png $(DESTDIR)/usr/share/icons/hicolor/256x256@2/apps/gpgui.png install -Dm644 artifacts/usr/share/polkit-1/actions/com.yuezk.gpgui.policy $(DESTDIR)/usr/share/polkit-1/actions/com.yuezk.gpgui.policy + # Install the service + if [ $(INCLUDE_SYSTEMD) -eq 1 ]; then \ + install -Dm644 artifacts/usr/lib/systemd/system/gpgui.service $(DESTDIR)/usr/lib/systemd/system/gpgui.service; \ + if [ $(ENABLE_SERVICE) -eq 1 ]; then \ + systemctl --system daemon-reload; \ + systemctl enable gpgui.service; \ + fi; \ + fi + + @echo "===> Done." + uninstall: @echo "===> Uninstalling from $(DESTDIR)..." + # Disable the systemd service + if [ -d /run/systemd/system ]; then \ + systemctl disable gp-suspend.service >/dev/null || true; \ + fi + + rm -f $(DESTDIR)/lib/systemd/system/gp-suspend.service + rm -f $(DESTDIR)/usr/lib/systemd/system/gp-suspend.service + rm -f $(DESTDIR)/usr/bin/gpclient rm -f $(DESTDIR)/usr/bin/gpservice rm -f $(DESTDIR)/usr/bin/gpauth @@ -29,3 +55,5 @@ uninstall: rm -f $(DESTDIR)/usr/share/icons/hicolor/128x128/apps/gpgui.png rm -f $(DESTDIR)/usr/share/icons/hicolor/256x256@2/apps/gpgui.png rm -f $(DESTDIR)/usr/share/polkit-1/actions/com.yuezk.gpgui.policy + + @echo "===> Done." diff --git a/packaging/deb/postrm b/packaging/deb/postrm index ba43a82d..00fd0b6b 100755 --- a/packaging/deb/postrm +++ b/packaging/deb/postrm @@ -11,4 +11,6 @@ case "$1" in ;; esac +#DEBHELPER# + exit 0 diff --git a/packaging/deb/rules.in b/packaging/deb/rules.in index af860750..569ff45d 100755 --- a/packaging/deb/rules.in +++ b/packaging/deb/rules.in @@ -2,6 +2,12 @@ export OFFLINE = @OFFLINE@ export BUILD_FE = 0 +export DEB_PACKAGING = 1 +export INCLUDE_SYSTEMD = 1 +export ENABLE_SERVICE = 0 %: dh $@ --no-parallel + +override_dh_installsystemd: + dh_installsystemd gp-suspend.service --no-start diff --git a/packaging/files/usr/lib/systemd/system/gp-suspend.service b/packaging/files/usr/lib/systemd/system/gp-suspend.service new file mode 100644 index 00000000..43b992db --- /dev/null +++ b/packaging/files/usr/lib/systemd/system/gp-suspend.service @@ -0,0 +1,10 @@ +[Unit] +Description=Disconnect from the VPN when suspending +Before=sleep.target + +[Service] +Type=oneshot +ExecStart=/usr/bin/gpclient disconnect + +[Install] +WantedBy=sleep.target diff --git a/packaging/pkgbuild/PKGBUILD.in b/packaging/pkgbuild/PKGBUILD.in index a238afb3..d43f5606 100644 --- a/packaging/pkgbuild/PKGBUILD.in +++ b/packaging/pkgbuild/PKGBUILD.in @@ -14,6 +14,8 @@ optdepends=('wmctrl: for window management') provides=('globalprotect-openconnect' 'gpclient' 'gpservice' 'gpauth' 'gpgui') +install=gp.install + source=("${_pkgname}-${pkgver}.tar.gz") sha256sums=('SKIP') @@ -31,5 +33,5 @@ build() { package() { cd "$pkgname-$pkgver" - make install DESTDIR="$pkgdir" + make install DESTDIR="$pkgdir" INCLUDE_SYSTEMD=1 ENABLE_SERVICE=0 } diff --git a/packaging/pkgbuild/gp.install b/packaging/pkgbuild/gp.install new file mode 100644 index 00000000..efd43474 --- /dev/null +++ b/packaging/pkgbuild/gp.install @@ -0,0 +1,12 @@ +post_install() { + systemctl --system daemon-reload + systemctl enable gpservice.service +} + +post_upgrade() { + post_install +} + +post_remove() { + systemctl disable gpservice.service +} diff --git a/packaging/rpm/globalprotect-openconnect.spec.in b/packaging/rpm/globalprotect-openconnect.spec.in index 61f3023a..750c266f 100644 --- a/packaging/rpm/globalprotect-openconnect.spec.in +++ b/packaging/rpm/globalprotect-openconnect.spec.in @@ -22,6 +22,7 @@ BuildRequires: perl BuildRequires: (webkit2gtk4.0-devel or webkit2gtk3-soup2-devel) BuildRequires: (libappindicator-gtk3-devel or libappindicator3-1) BuildRequires: (librsvg2-devel or librsvg-devel) +BuildRequires: systemd-rpm-macros Requires: openconnect >= 8.20, (libayatana-appindicator or libappindicator-gtk3) Conflicts: globalprotect-openconnect-snapshot @@ -34,16 +35,42 @@ A GUI for GlobalProtect VPN, based on OpenConnect, supports the SSO authenticati %prep %setup +%pre +%if 0%{?suse_version} + %service_add_pre gp-suspend.service +%endif + +%post +%if 0%{?suse_version} + %service_add_post gp-suspend.service +%else + %systemd_post gp-suspend.service +%endif + +%preun +%if 0%{?suse_version} + %service_del_preun gp-suspend.service +%else + %systemd_preun gp-suspend.service +%endif + %postun +# Clean up the gpgui downloaded at runtime rm -f %{_bindir}/gpgui +%if 0%{?suse_version} + %service_del_postun_without_restart gp-suspend.service +%else + %systemd_postun gp-suspend.service +%endif + %build # The injected RUSTFLAGS could fail the build unset RUSTFLAGS make build OFFLINE=@OFFLINE@ BUILD_FE=0 %install -%make_install +%make_install INCLUDE_SYSTEMD=1 ENABLE_SERVICE=0 %files %defattr(-,root,root) @@ -54,6 +81,7 @@ make build OFFLINE=@OFFLINE@ BUILD_FE=0 %{_datadir}/icons/hicolor/256x256@2/apps/gpgui.png %{_datadir}/icons/hicolor/scalable/apps/gpgui.svg %{_datadir}/polkit-1/actions/com.yuezk.gpgui.policy +%{_unitdir}/gp-suspend.service %dir %{_datadir}/icons/hicolor %dir %{_datadir}/icons/hicolor/32x32