diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml index ea5f6b0..0eff8b4 100644 --- a/.forgejo/workflows/build.yml +++ b/.forgejo/workflows/build.yml @@ -1,8 +1,9 @@ name: image -# Builds a flashable postmarketOS image for the Fairphone 6 (kernel from -# milos-linux combined-stable + imsd) and publishes it as the rolling -# 'latest' release. +# Builds the flashable postmarketOS images for the Fairphone 6 (kernel from +# milos-linux combined-stable + imsd) — Plasma Mobile (fp6-img.tar.xz) and +# Phosh (fp6-img-phosh.tar.xz) — and publishes both as the rolling 'latest' +# release. # # Runs on the dedicated privileged runner label "pmos" (loop devices for # pmbootstrap install, qemu-user binfmt on the host for the aarch64 chroots). @@ -34,9 +35,16 @@ jobs: with: persist-credentials: true - - name: Build image + - name: Build image (Plasma Mobile) run: ./build.sh + # Second UI from the same package builds (the kernel and the aports + # above are already current in pmbootstrap's work dir, so this is the + # install + export only): fp6-img-phosh.tar.xz next to fp6-img.tar.xz + # in the same release. + - name: Build image (Phosh) + run: FP6IMG_UI=phosh FP6IMG_KEEP_DIST=1 ./build.sh + - name: Upload artifacts uses: actions/upload-artifact@v3 with: diff --git a/README.md b/README.md index 02529ce..aa8ee72 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,11 @@ cd fp6-img ./install.sh ``` +Two images are published per release, same kernel and packages, different +shell: `fp6-img.tar.xz` boots **Plasma Mobile** (calls through Plasma +Dialer), `fp6-img-phosh.tar.xz` boots **Phosh** (calls through GNOME Calls, +via imsd's `imsd-ofono` backend). Pick one; the install steps are identical. + `install.sh` erases dtbo, flashes the rootfs, **RAM-boots** the kernel, writes the boot partition from inside Linux where the bootloader's NV-wipe cannot see it, then reads the modem NV back and reports the result. The bootloader never writes `boot`. diff --git a/build.sh b/build.sh index 82ae48e..6d9322b 100755 --- a/build.sh +++ b/build.sh @@ -30,6 +30,18 @@ KERNEL_BRANCH=combined-stable # sha256; that gated fresh installs only, never upgrades, and cost a commit # and an image run per release. REGISTRY=https://forgejo.catcrafts.net/api/packages/Catcrafts/alpine/edge/fp6 +# FP6IMG_UI: which postmarketOS UI the image boots into. plasma-mobile (the +# default) gets imsd-dialerd from the imsd package itself; phosh gets the +# opt-in imsd-ofono subpackage (imsd-ofonod + the GNOME Calls plugin +# override) on top. Everything else in the package set is UI-agnostic. The +# archive is named after it: fp6-img.tar.xz for plasma-mobile, +# fp6-img-.tar.xz otherwise, so one release can carry both. +FP6IMG_UI=${FP6IMG_UI:-plasma-mobile} +case "$FP6IMG_UI" in +plasma-mobile) UI_PACKAGES=; IMG_NAME=fp6-img ;; +phosh) UI_PACKAGES=,imsd-ofono; IMG_NAME=fp6-img-phosh ;; +*) echo "FP6IMG_UI=$FP6IMG_UI: expected plasma-mobile or phosh" >&2; exit 1 ;; +esac PMAPORTS_REPO=https://gitlab.postmarketos.org/postmarketOS/pmaports.git cd "$(dirname "$0")" @@ -83,11 +95,13 @@ if [ "$(id -u)" = 0 ]; then id build >/dev/null 2>&1 || adduser -D build echo 'build ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/build # empty dist in place (never delete the dir itself: a shell cd'd into it - # would poison the next podman invocation's cwd) + # would poison the next podman invocation's cwd). FP6IMG_KEEP_DIST=1 keeps + # what is there: the second UI build of one run adds its archive next to + # the first one's. install -d -o build dist - find dist -mindepth 1 -delete + [ -n "${FP6IMG_KEEP_DIST:-}" ] || find dist -mindepth 1 -delete # su scrubs the environment — carry the knobs that matter across it - exec su build -c "FP6IMG_NO_CROSSDIRECT='${FP6IMG_NO_CROSSDIRECT:-}' sh -eu '$PWD/build.sh'" + exec su build -c "FP6IMG_NO_CROSSDIRECT='${FP6IMG_NO_CROSSDIRECT:-}' FP6IMG_UI='${FP6IMG_UI:-}' sh -eu '$PWD/build.sh'" fi # git hosts occasionally hiccup (our forgejo lives on a small VM that also @@ -218,9 +232,9 @@ cat > "$HOME/.config/pmbootstrap_v3.cfg" <&2 @@ -325,21 +339,22 @@ pmbootstrap export "$EXPORT" # so the archive is built without a second 3 GiB copy on disk. STAGE="$WORK/stage" rm -rf "$STAGE" -mkdir -p "$STAGE/fp6-img" -ln -s "$EXPORT/boot.img" "$STAGE/fp6-img/boot.img" -ln -s "$EXPORT/fairphone-fp6.img" "$STAGE/fp6-img/fairphone-fp6.img" -cp README.md install.sh "$STAGE/fp6-img/" +mkdir -p "$STAGE/$IMG_NAME" +ln -s "$EXPORT/boot.img" "$STAGE/$IMG_NAME/boot.img" +ln -s "$EXPORT/fairphone-fp6.img" "$STAGE/$IMG_NAME/fairphone-fp6.img" +cp README.md install.sh "$STAGE/$IMG_NAME/" { echo "kernel: $KERNEL_REPO $KERNEL_BRANCH @ $COMMIT" + echo "ui: $FP6IMG_UI" echo "built: $(date -u +%Y-%m-%dT%H:%M:%SZ)" echo "default login: user / 147147 (same as official postmarketOS images)" while read -r _n _v _s; do printf '%-14s %s %s-%s (newest registry package, sha256 %s)\n' "$_n:" "$REGISTRY" "$_n" "$_v" "$_s" done < "$REG_DL/manifest" -} > "$STAGE/fp6-img/build-info.txt" +} > "$STAGE/$IMG_NAME/build-info.txt" # sums of the extracted contents -(cd "$STAGE/fp6-img" && sha256sum -- * > sha256sums.txt) -tar -C "$STAGE" -chf - fp6-img | xz -T0 -6 > dist/fp6-img.tar.xz +(cd "$STAGE/$IMG_NAME" && sha256sum -- * > sha256sums.txt) +tar -C "$STAGE" -chf - "$IMG_NAME" | xz -T0 -6 > "dist/$IMG_NAME.tar.xz" rm -rf "$STAGE" ls -la dist/