Finish earthfile and add linux packaging assets

This commit is contained in:
Patrick Pacher 2024-03-27 12:51:54 +01:00
parent f003ef9a9b
commit 8cbc949533
5 changed files with 79 additions and 16 deletions

View file

@ -9,12 +9,15 @@ ARG --global outputDir = "./dist"
# to GOOS, GOARCH and GOARM when building go binaries. See the +RUST_TO_GO_ARCH_STRING # to GOOS, GOARCH and GOARM when building go binaries. See the +RUST_TO_GO_ARCH_STRING
# helper method at the bottom of the file. # helper method at the bottom of the file.
ARG --global architectures = "x86_64-unknown-linux-gnu" \ ARG --global architectures = "x86_64-unknown-linux-gnu" \
"aarch64-unknown-linux-gnu" \ "aarch64-unknown-linux-gnu" \
"armv7-unknown-linux-gnueabihf" \
"arm-unknown-linux-gnueabi" \
"x86_64-pc-windows-gnu" "x86_64-pc-windows-gnu"
# Compile errors here:
# "armv7-unknown-linux-gnueabihf" \
# "arm-unknown-linux-gnueabi" \
# Import the earthly rust lib since it already provides some useful # Import the earthly rust lib since it already provides some useful
# build-targets and methods to initialize the rust toolchain. # build-targets and methods to initialize the rust toolchain.
IMPORT github.com/earthly/lib/rust:3.0.2 AS rust IMPORT github.com/earthly/lib/rust:3.0.2 AS rust
@ -215,17 +218,17 @@ angular-project:
RUN ./node_modules/.bin/ng build --configuration ${configuration} --base-href ${baseHref} "${project}" RUN ./node_modules/.bin/ng build --configuration ${configuration} --base-href ${baseHref} "${project}"
RUN zip -r "./${project}.zip" "${dist}" RUN cwd=$(pwd) && cd "${dist}" && zip -r "${cwd}/${project}.zip" ./
SAVE ARTIFACT "./${project}.zip" AS LOCAL ${outputDir}/${project}.zip SAVE ARTIFACT "./${project}.zip" AS LOCAL ${outputDir}/${project}.zip
SAVE ARTIFACT "./dist" AS LOCAL ${outputDir}/${project} SAVE ARTIFACT "./dist" AS LOCAL ${outputDir}/${project}
# Build the angular projects (portmaster-UI and tauri-builtin) in production mode # Build the angular projects (portmaster-UI and tauri-builtin) in production mode
angular-release: angular-release:
BUILD +angular-project --project=portmaster --dist=./dist --configuration=production --baseHref=/ui/modules/portmaster BUILD +angular-project --project=portmaster --dist=./dist --configuration=production --baseHref=/ui/modules/portmaster/
# Build the angular projects (portmaster-UI and tauri-builtin) in dev mode # Build the angular projects (portmaster-UI and tauri-builtin) in dev mode
angular-dev: angular-dev:
BUILD +angular-project --project=portmaster --dist=./dist --configuration=development --baseHref=/ui/modules/portmaster BUILD +angular-project --project=portmaster --dist=./dist --configuration=development --baseHref=/ui/modules/portmaster/
# A base target for rust to prepare the build container # A base target for rust to prepare the build container
rust-base: rust-base:
@ -325,15 +328,19 @@ tauri-src:
# are preserved such that Rust's incremental compilation works correctly. # are preserved such that Rust's incremental compilation works correctly.
COPY --keep-ts ./desktop/tauri/ . COPY --keep-ts ./desktop/tauri/ .
COPY assets/data ./assets COPY assets/data ./assets
COPY packaging/linux ./../../packaging/linux
COPY (+angular-project/dist/tauri-builtin --project=tauri-builtin --dist=./dist/tauri-builtin --configuration=production --baseHref="/") ./../angular/dist/tauri-builtin COPY (+angular-project/dist/tauri-builtin --project=tauri-builtin --dist=./dist/tauri-builtin --configuration=production --baseHref="/") ./../angular/dist/tauri-builtin
WORKDIR /app/tauri/src-tauri
build-tauri: build-tauri:
FROM +tauri-src FROM +tauri-src
ARG --required target ARG --required target
ARG output="release/[^\./]+" ARG output = ".*/release/(([^\./]+|([^\./]+\.(dll|exe)))|bundle/.*\.(deb|msi|AppImage))"
ARG bundle="none" ARG bundle="none"
# if we want tauri to create the installer bundles we also need to provide all external binaries # if we want tauri to create the installer bundles we also need to provide all external binaries
# we need to do some magic here because tauri expects the binaries to include the rust target tripple. # we need to do some magic here because tauri expects the binaries to include the rust target tripple.
# We already knwo that triple because it's a required argument. From that triple, we use +RUST_TO_GO_ARCH_STRING # We already knwo that triple because it's a required argument. From that triple, we use +RUST_TO_GO_ARCH_STRING
@ -351,16 +358,15 @@ build-tauri:
COPY (+build-go/output --GOOS="${GOOS}" --CMDS="portmaster-start portmaster-core" --GOARCH="${GOARCH}" --GOARM="${GOARM}") /tmp/gobuild COPY (+build-go/output --GOOS="${GOOS}" --CMDS="portmaster-start portmaster-core" --GOARCH="${GOARCH}" --GOARM="${GOARM}") /tmp/gobuild
# Place them in the correct folder with the rust target tripple attached. # Place them in the correct folder with the rust target tripple attached.
LET dest=""
FOR bin IN $(ls /tmp/gobuild) FOR bin IN $(ls /tmp/gobuild)
SET dest="./binaries/${bin}-${target}" # ${bin$.*} does not work in SET commands unfortunately so we use a shell
# snippet here:
IF [ -z "${bin##*.exe}" ] RUN set -e ; \
SET dest = "./binaries/${bin%.*}-${target}.exe" dest="./binaries/${bin}-${target}" ; \
END if [ -z "${bin##*.exe}" ]; then \
dest="./binaries/${bin%.*}-${target}.exe" ; \
RUN echo "Copying ${bin} to ${dest}" fi ; \
RUN cp "/tmp/gobuild/${bin}" "${dest}" cp "/tmp/gobuild/${bin}" "${dest}" ;
END END
# Just for debugging ... # Just for debugging ...
@ -389,7 +395,7 @@ build-tauri:
# The following would use the CROSS function from the earthly lib, this # The following would use the CROSS function from the earthly lib, this
# DO rust+CROSS --target="${target}" # DO rust+CROSS --target="${target}"
RUN ls target SAVE ARTIFACT "target/${target}/release/" AS LOCAL "${outputDir}/tauri/${target}"
tauri-release: tauri-release:
FROM alpine:3.18 FROM alpine:3.18

View file

@ -0,0 +1,9 @@
[Desktop Entry]
Name=Portmaster
GenericName=Application Firewall Notifier
Exec=/usr/bin/portmaster --with-prompts --with-notifications --background
Icon=portmaster
Terminal=false
Type=Application
Categories=System
NoDisplay=true

View file

@ -0,0 +1,8 @@
[Desktop Entry]
Name=Portmaster
GenericName=Application Firewall
Exec={{exec}} --data=/opt/safing/portmaster --with-prompts --with-notifications
Icon={{icon}}
Terminal=false
Type=Application
Categories=System

View file

@ -0,0 +1,40 @@
[Unit]
Description=Portmaster by Safing
Documentation=https://safing.io
Documentation=https://docs.safing.io
Before=nss-lookup.target network.target shutdown.target
After=systemd-networkd.service
Conflicts=shutdown.target
Conflicts=firewalld.service
Wants=nss-lookup.target
[Service]
Type=simple
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=24
LockPersonality=yes
MemoryDenyWriteExecute=yes
NoNewPrivileges=yes
PrivateTmp=yes
PIDFile=/var/lib/portmaster/core-lock.pid
Environment=LOGLEVEL=info
Environment=PORTMASTER_ARGS=
EnvironmentFile=-/etc/default/portmaster
ProtectSystem=true
RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6
RestrictNamespaces=yes
ProtectHome=read-only
ProtectKernelTunables=yes
ProtectKernelLogs=yes
ProtectControlGroups=yes
PrivateDevices=yes
AmbientCapabilities=cap_chown cap_kill cap_net_admin cap_net_bind_service cap_net_broadcast cap_net_raw cap_sys_module cap_sys_ptrace cap_dac_override cap_fowner cap_fsetid
CapabilityBoundingSet=cap_chown cap_kill cap_net_admin cap_net_bind_service cap_net_broadcast cap_net_raw cap_sys_module cap_sys_ptrace cap_dac_override cap_fowner cap_fsetid
StateDirectory=portmaster
ExecStartPre=-/usr/bin/portmaster-start --data $STATE_DIRECTORY clean-structure
ExecStart=/usr/bin/portmaster-core --data $STATE_DIRECTORY --disable-software-updates $PORTMASTER_ARGS
ExecStartPost=-/usr/bin/portmaster-start recover-iptables
[Install]
WantedBy=multi-user.target