Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • reform/reform-system-image
  • artfwo/reform-system-image
  • bluerise/reform-system-image
  • technomancy/reform-system-image
  • Chartreuse/reform-system-image
  • josch/reform-system-image
  • doctorhoo/reform-system-image
  • rufform/reform-system-image
  • hartkopp/reform-system-image
  • sevan/reform-system-image
  • chaseadam/reform-system-image
  • zeha/reform-system-image
  • hramrach/reform-system-image
  • frickler/reform-system-image
14 results
Show changes
Commits on Source (13)
......@@ -6,36 +6,38 @@ variables:
description: "distribution to build image for like testing, unstable and experimental"
value: unstable
REFORM_DEBIAN_PACKAGES_BRANCH:
description: "if set, prefer *.deb packages created by the latest pipeline run from this reform-debian-packages branch"
description: "if set, prefer *.deb packages created by the latest pipeline run from this reform-debian-packages branch under the '$CI_PROJECT_NAMESPACE' namespace"
value:
build:
script: |
set -x
# do not allow custom builds on the main branch as those would taint the
# repository at https://mntre.com/reform-debian-repo/
if [ -n "${CI_COMMIT_REF_NAME+x}" ] && [ "${CI_COMMIT_REF_NAME:-}" = main ]; then
if [ "$DIST" != "unstable" ]; then
echo "refusing to build image for anything but unstable on main branch" >&2
exit 1
fi
if [ -n "$REFORM_DEBIAN_PACKAGES_BRANCH" ]; then
echo "refusing to build image using packages from reform-debian-packages branch" >&2
exit 1
fi
fi
apt update -o Acquire::AllowReleaseInfoChange=true -o quiet::ReleaseInfoChange=true
apt-get --no-install-recommends -y install mmdebstrap genext2fs ca-certificates e2fsprogs pigz git mount parted apt-utils unzip python3-apt
apt-get --no-install-recommends -y install mmdebstrap ca-certificates e2fsprogs pigz git mount parted apt-utils libarchive-tools python3-apt
if [ ! -e /proc/sys/fs/binfmt_misc/status ]; then
mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
fi
apt-get --no-install-recommends -y install arch-test qemu-user-static
arch-test arm64 || cat /usr/lib/binfmt.d/qemu-aarch64.conf > /proc/sys/fs/binfmt_misc/register
arch-test arm64
if [ -n "${REFORM_DEBIAN_PACKAGES_BRANCH:+x}" ]; then
echo "REFORM_DEBIAN_PACKAGES_BRANCH=${REFORM_DEBIAN_PACKAGES_BRANCH}" >&2
echo "downloading..." >&2
/usr/lib/apt/apt-helper download-file \
"https://source.mnt.re/$CI_PROJECT_NAMESPACE/reform-debian-packages/-/jobs/artifacts/${REFORM_DEBIAN_PACKAGES_BRANCH}/download?file_type=archiv&job=reprepro" \
"archive.zip"
echo "extracting..." >&2
mkdir -p ./repo
bsdtar --verbose --directory repo --strip-components=5 --extract --file archive.zip "*.deb"
fi
./mkimage.sh
pigz ./reform-system-imx8mq.img
pigz ./pocket-reform-system-a311d.img
pigz ./pocket-reform-system-imx8mp.img
pigz ./reform-system-a311d.img
pigz ./reform-system-imx8mp.img
pigz ./reform-system-imx8mq.img
pigz ./reform-system-ls1028a.img
after_script: |
if [ "$DIST" != "unstable" ]; then
echo "DIST: $DIST" >&2
fi
......@@ -44,6 +46,9 @@ build:
fi
artifacts:
paths:
- "reform-system-imx8mq.img.gz"
- "pocket-reform-system-a311d.img.gz"
- "pocket-reform-system-imx8mp.img.gz"
- "reform-system-a311d.img.gz"
- "reform-system-imx8mp.img.gz"
- "reform-system-imx8mq.img.gz"
- "reform-system-ls1028a.img.gz"
......@@ -47,27 +47,18 @@ while getopts :h:d:m:-: OPTCHAR; do
done
shift "$((OPTIND - 1))"
SYSIMAGES="reform-system-imx8mq reform-system-ls1028a"
if [ "$#" -eq 0 ]; then
case "$DIST" in
bookworm) PLATFORMS="ls1028a imx8mq" ;;
bookworm-backports) PLATFORMS="ls1028a a311d imx8mq";;
testing) PLATFORMS="ls1028a a311d imx8mq";;
unstable) PLATFORMS="ls1028a a311d imx8mq";;
experimental) PLATFORMS="ls1028a a311d imx8mq";;
bookworm) : ;;
bookworm-backports) SYSIMAGES="$SYSIMAGES reform-system-a311d";;
testing) SYSIMAGES="$SYSIMAGES reform-system-a311d pocket-reform-system-a311d pocket-reform-system-imx8mp reform-system-imx8mp";;
unstable) SYSIMAGES="$SYSIMAGES reform-system-a311d pocket-reform-system-a311d pocket-reform-system-imx8mp reform-system-imx8mp";;
experimental) SYSIMAGES="$SYSIMAGES reform-system-a311d pocket-reform-system-a311d pocket-reform-system-imx8mp reform-system-imx8mp reform-system-rk3588";;
*) echo "unsupported distribution: $DIST" >&2; exit 1;;
esac
else
for PLATFORM; do
case $PLATFORM in
ls1028a|imx8mq) : ;;
a311d) if [ "$DIST" = "bookworm" ]; then
echo "a311d is not supported on bookworm">&2
exit 1
fi ;;
*) echo "unsupported platform: $PLATFORM" >&2; exit 1;;
esac
done
PLATFORMS="$*"
SYSIMAGES="$*"
fi
case "$MIRROR" in
......@@ -87,7 +78,7 @@ case "$MIRROR" in
esac
# make sure build tools are installed
set -- mmdebstrap genext2fs e2fsprogs git mount parted unzip python3-apt
set -- mmdebstrap e2fsprogs git mount parted python3-apt
if [ "$(dpkg --print-architecture)" != arm64 ]; then
set -- "$@" arch-test qemu-user-static
fi
......@@ -102,10 +93,6 @@ if dpkg --compare-versions "$(dpkg-query --showformat='${Version}\n' --show mmde
echo "mmdebstrap version must be >= 0.8.4-1"
exit 1
fi
if dpkg --compare-versions "$(dpkg-query --showformat='${Version}\n' --show genext2fs)" lt "1.5.0-2"; then
echo "genext2fs version must be >= 1.5.0-2"
exit 1
fi
# if we are in a git repository and if SOURCE_DATE_EPOCH is not set, use the
# timestamp of the latest git commit
......@@ -134,28 +121,8 @@ export TMPDIR
BOOTSIZE=488
ROOTSIZE=4096
for PLATFORM in $PLATFORMS; do
case "$PLATFORM" in
imx8mq) PROJECT="reform-boundary-uboot"; TAG="2023-10-18"; SHA1="3de987054676b65b80ecb65455465326c9539928";;
a311d) PROJECT="reform-a311d-uboot"; TAG="2023-10-18"; SHA1="db5f2efb62da58dbf548e73a97764cc1380ed4ab";;
ls1028a) PROJECT="reform-ls1028a-uboot"; TAG="2023-10-10"; SHA1="41570d83a25e8fb6ec84afa1e4cc9559c962d621";;
esac
/usr/lib/apt/apt-helper download-file \
"https://source.mnt.re/reform/$PROJECT/-/jobs/artifacts/$TAG/raw/flash.bin?job=build" \
"flash-$PLATFORM.bin" "SHA1:$SHA1"
done
# download DisplayPort firmware blob for LS1028A
/usr/lib/apt/apt-helper download-file \
"https://source.mnt.re/reform/reform-ls1028a-uboot/-/raw/main/ls1028a-mhdpfw.bin" \
ls1028a-mhdpfw.bin "SHA1:fa96b9aa59d7c1e9e6ee1c0375d0bcc8f8e5b78c"
if [ -n "${REFORM_DEBIAN_PACKAGES_BRANCH:+x}" ]; then
/usr/lib/apt/apt-helper download-file \
"https://source.mnt.re/reform/reform-debian-packages/-/jobs/artifacts/${REFORM_DEBIAN_PACKAGES_BRANCH}/download?file_type=archiv&job=reprepro" \
"archive.zip"
unzip -v -j archive.zip '*.deb' -d ./repo
fi
rm -f ./machines/*.conf
mkdir -p ./machines ./repo
# create Packages and Release file for custom repo
if [ -n "$(find repo -maxdepth 1 -name "*.deb" -print -quit)" ]; then
......@@ -173,13 +140,15 @@ fi
# fill $@ array with options passed to mmdebstrap
set -- --architectures=arm64 --components=main,non-free-firmware --variant="minbase" --verbose
# packages for graphical user interface
set -- "$@" --include="xwayland xterm foot sway fonts-inter fonts-noto-color-emoji waybar swayidle swaylock mesa-utils lxpolkit wayland-protocols wofi wireplumber papirus-icon-theme libglib2.0-bin gsettings-desktop-schemas gnome-disk-utility gnome-themes-extra-data gnome-icon-theme gnome-settings-daemon gnome-system-monitor grim slurp gedit evince mpv sxiv thunar gvfs-backends pavucontrol unicode-data engrampa neverball minetest qt5ct kde-style-breeze python3-gi gir1.2-ayatanaappindicator3-0.1 gir1.2-notify-0.7 x11-xserver-utils dunst pkexec synaptic pasystray"
set -- "$@" --include="xwayland xterm sway fonts-inter fonts-noto-color-emoji waybar swayidle swaylock mesa-utils lxpolkit wayland-protocols wofi wireplumber papirus-icon-theme libglib2.0-bin gsettings-desktop-schemas gnome-disk-utility gnome-themes-extra-data gnome-icon-theme gnome-settings-daemon gnome-system-monitor grim slurp gedit evince mpv sxiv gvfs-backends unicode-data engrampa neverball minetest qt5ct kde-style-breeze dunst pasystray wev wf-recorder wayvnc"
# reform-tools recommends
set -- "$@" --include=" brightnessctl foot gir1.2-ayatanaappindicator3-0.1 gir1.2-notify-0.7 gnome-system-monitor ircii pavucontrol pkexec pulseaudio-utils python3 python3-gi synaptic thunar x11-xserver-utils fonts-font-awesome"
case "$DIST" in
unstable|experimental) set -- "$@" --include="wayfire reform-firedecor firefox";;
*) set -- "$@" --include="firefox-esr"
esac
# packages for networking
set -- "$@" --include="iproute2 iptables inetutils-ping ircii elinks isc-dhcp-client netcat-traditional net-tools network-manager network-manager-gnome nfacct ntp ntpdate rsync telnet traceroute wpasupplicant curl wget w3m rfkill ifupdown netbase openssh-client blueman firmware-realtek"
set -- "$@" --include="iproute2 iptables inetutils-ping elinks isc-dhcp-client netcat-traditional net-tools network-manager network-manager-gnome nfacct ntp ntpdate rsync telnet traceroute wpasupplicant curl wget w3m rfkill ifupdown netbase openssh-client blueman firmware-realtek"
# packages for system administration
set -- "$@" --include="apt apt-utils apt-listbugs apt-file cron cryptsetup lvm2 dbus-bin e2fsprogs fbset init-system-helpers ncdu parted pciutils policykit-1 procps sudo systemd systemd-sysv tmux u-boot-tools screen"
# utilities
......@@ -202,6 +171,8 @@ case "$DIST" in
bookworm-backports) set -- "$@" --setup-hook='copy-in reform_bookworm-backports.sources /etc/apt/sources.list.d/';;
experimental) set -- "$@" --setup-hook='echo deb http://deb.debian.org/debian experimental main > "$1"/etc/apt/sources.list.d/experimental.list';;
esac
# copy out machine descriptions from reform-tools so that we can use them as well
set -- "$@" --customize-hook="sync-out /usr/share/reform-tools/machines ./machines"
# list packages and versions that are not from debian.org
set -- "$@" --customize-hook="APT_CONFIG=\$MMDEBSTRAP_APT_CONFIG python3 -c 'import apt_pkg;apt_pkg.init();cache=apt_pkg.Cache(None);print(\"\n\".join(sorted([f\"{pkg.name:<44} {pkg.current_ver.ver_str}\" for pkg in cache.packages if pkg.current_ver for pfile, _ in pkg.current_ver.file_list if not pfile.not_source and not pfile.site.endswith(\".debian.org\")])))' > \"\$1\"/custom-pkgs.lst" \
--customize-hook='copy-out /custom-pkgs.lst .' \
......@@ -251,6 +222,14 @@ set -- "$@" \
--customize-hook='rm "$1"/etc/resolv.conf'
# copy out kernel and initrd for use with qemu
set -- "$@" --customize-hook="download /vmlinuz kernel" --customize-hook="download /initrd.img initrd"
# copy out contents of /boot
set -- "$@" --customize-hook="tar-out /boot boot.tar"
# choose the correct mode
if [ "$(id -u)" = 0 ]; then
set -- "$@" --mode=root
else
set -- "$@" --mode=unshare
fi
case "$DIST" in
testing)
......@@ -264,77 +243,167 @@ case "$DIST" in
;;
esac
mmdebstrap "$@" target-userland.tar
if [ "$(id -u)" = 0 ]; then
run_inside_userns() {
"$@"
}
else
run_inside_userns() {
unshare --user --map-auto --map-user=65536 --map-group=65536 --keep-caps -- "$@"
}
fi
TEMPROOT=
cleanup() {
if test -n "$TEMPROOT"; then
run_inside_userns rm -Rf "$TEMPROOT"
fi
rm -f boot.ext4 boot.tar root.ext4
}
trap cleanup EXIT
# The default action for these signals does not invoke the EXIT trap.
trap 'exit 1' HUP INT QUIT TERM
TEMPROOT="$(mktemp -d)"
mmdebstrap "$@" --format=directory --mode=unshare --skip=output/dev "$TEMPROOT"
# create a common root partition from the above
# this will be identical independent of the platform
mmtarfilter --path-exclude='/boot/*' < target-userland.tar \
| genext2fs --volume-label reformsdroot --block-size 1024 --size-in-blocks $((ROOTSIZE*1024)) --bytes-per-inode 16384 --tarball - root.ext2
# this will be identical independent of the sysimage
run_inside_userns find "$TEMPROOT/boot/" -mindepth 1 -delete
: >root.ext4
run_inside_userns /sbin/mkfs.ext4 -L reformsdroot -d "$TEMPROOT" "root.ext4" "${ROOTSIZE}M"
# system ---------------------------------------------------------
for PLATFORM in $PLATFORMS; do
# invoke mmdebstrap again to produce a platform specific /boot
case "$PLATFORM" in
imx8mq) MACHINE="MNT Reform 2";;
a311d) MACHINE="MNT Reform 2 with BPI-CM4 Module";;
ls1028a) MACHINE="MNT Reform 2 with LS1028A Module";;
# remove MNT Reform 2 HDMI.conf because we do not create a sysimage for it
# and it would produce multiple matches for reform-system-imx8mq
rm "machines/MNT Reform 2 HDMI.conf"
for SYSIMAGE in $SYSIMAGES; do
CONF="$(grep -l "^SYSIMAGE=\"$SYSIMAGE\"\$" machines/*.conf)";
if [ ! -e "$CONF" ]; then
echo "reform-tools does not know about a configuration for $SYSIMAGE" >&2
exit 1
fi
# shellcheck source=/dev/null
. "$CONF"
case "$SYSIMAGE" in
reform-system-imx8mq) PROJECT="reform-boundary-uboot"; TAG="2023-10-18"; SHA1="3de987054676b65b80ecb65455465326c9539928";;
reform-system-a311d) PROJECT="reform-a311d-uboot"; TAG="2023-10-18"; SHA1="db5f2efb62da58dbf548e73a97764cc1380ed4ab";;
reform-system-ls1028a) PROJECT="reform-ls1028a-uboot"; TAG="2023-10-10"; SHA1="41570d83a25e8fb6ec84afa1e4cc9559c962d621";;
pocket-reform-system-a311d)
/usr/lib/apt/apt-helper download-file "https://source.mnt.re/reform/reform-a311d-uboot/-/jobs/3634/artifacts/raw/meson-g12b-bananapi-cm4-mnt-pocket-reform-flash.bin" "$(basename "$DTBPATH" .dtb)-flash.bin"
unset DTBPATH
continue
;;
pocket-reform-system-imx8mp)
/usr/lib/apt/apt-helper download-file "https://source.mnt.re/reform/reform-imx8mp-uboot/-/jobs/3642/artifacts/raw/imx8mp-mnt-pocket-reform-flash.bin" "$(basename "$DTBPATH" .dtb)-flash.bin"
unset DTBPATH
continue
;;
reform-system-imx8mp)
/usr/lib/apt/apt-helper download-file "https://source.mnt.re/reform/reform-imx8mp-uboot/-/jobs/3642/artifacts/raw/imx8mp-mnt-reform2-flash.bin" "$(basename "$DTBPATH" .dtb)-flash.bin"
unset DTBPATH
continue
;;
reform-system-rk3588)
echo "FIXME: no u-boot yet" >&2
exit 1
;;
esac
/usr/lib/apt/apt-helper download-file \
"https://source.mnt.re/reform/$PROJECT/-/jobs/artifacts/$TAG/raw/flash.bin?job=build" \
"$(basename "$DTBPATH" .dtb)-flash.bin" "SHA1:$SHA1"
unset DTBPATH
done
# download DisplayPort firmware blob for LS1028A
/usr/lib/apt/apt-helper download-file \
"https://source.mnt.re/reform/reform-ls1028a-uboot/-/raw/main/ls1028a-mhdpfw.bin" \
ls1028a-mhdpfw.bin "SHA1:fa96b9aa59d7c1e9e6ee1c0375d0bcc8f8e5b78c"
for SYSIMAGE in $SYSIMAGES; do
# invoke mmdebstrap again to produce a platform specific /boot
# fill $@ array with options passed to mmdebstrap
# FIXME: use --skip=tar-in/mknod once support for it is in stable
CONF="$(grep -l "^SYSIMAGE=\"$SYSIMAGE\"\$" machines/*.conf)";
if [ ! -e "$CONF" ]; then
echo "reform-tools does not know about a configuration for $SYSIMAGE" >&2
exit 1
fi
# shellcheck source=/dev/null
. "$CONF"
if [ -z ${DTBPATH+x} ]; then
echo "machine configuration for $SYSIMAGE misses DTBPATH" >&2
exit 1
fi
if [ -z ${UBOOT_OFFSET+x} ]; then
echo "machine configuration for $SYSIMAGE misses UBOOT_OFFSET" >&2
exit 1
fi
if [ -z ${FLASHBIN_OFFSET+x} ]; then
echo "machine configuration for $SYSIMAGE misses FLASHBIN_OFFSET" >&2
exit 1
fi
MACHINE="$(basename "$CONF" .conf)"
set -- --variant=custom --skip=update,setup,cleanup \
--setup-hook='mmtarfilter --path-exclude="/dev/*" --path-include=/dev/pts --path-include=/dev/shm < target-userland.tar | tar --numeric-owner --xattrs --xattrs-include="*" --directory "$1" --extract --file -' \
--customize-hook="upload flash-$PLATFORM.bin /boot/flash.bin" \
--chrooted-customize-hook="echo $MACHINE > /etc/flash-kernel/machine" \
--chrooted-customize-hook='echo yes > /etc/flash-kernel/ignore-efi' \
--chrooted-customize-hook='chown -R root:root /boot/flash.bin' \
--chrooted-customize-hook='flash-kernel'
case "$PLATFORM" in
ls1028a)
--skip=check/empty \
--setup-hook="tar-in boot.tar /" \
--customize-hook="upload ./$(basename "$DTBPATH" .dtb)-flash.bin /boot/flash.bin" \
--chrooted-customize-hook="
set -exu;
awk \"/^Machine: $MACHINE\$/,/^\$/\" /usr/share/flash-kernel/db/all.db >&2
awk \"/^Machine: $MACHINE\$/,/^\$/\" /usr/share/flash-kernel/db/all.db | grep --silent \"^DTB-Id: $DTBPATH\$\" >&2;
echo \"$MACHINE\" > /etc/flash-kernel/machine;
echo yes > /etc/flash-kernel/ignore-efi;
chown -R root:root /boot/flash.bin;
flash-kernel;
readlink /boot/dtb >&2;
readlink /boot/dtb-*reform2-arm64 >&2;
find /boot/ -wholename \"/boot/dtbs/*/$DTBPATH\" >&2;
find /boot/ -wholename \"/boot/dtbs/*/$DTBPATH\" | grep --silent \"/$DTBPATH\$\";
test -e \"\$(find /boot/ -wholename \"/boot/dtbs/*/$DTBPATH\")\";
"
case "$SYSIMAGE" in
reform-system-ls1028a)
set -- "$@" \
--customize-hook='upload ls1028a-mhdpfw.bin /boot/ls1028a-mhdpfw.bin' \
--chrooted-customize-hook='update-initramfs -u'
;;
esac
mmdebstrap "$@" '' - \
| mmtarfilter --path-exclude='*' --path-include=/boot \
--path-include='/boot/*' --strip-components=2 \
| genext2fs --volume-label reformsdboot --block-size 1024 \
--size-in-blocks $((BOOTSIZE*1024)) --bytes-per-inode 16384 \
--tarball - boot.ext2
mmdebstrap "$@" '' --format=directory --mode=unshare --skip=output/dev "$TEMPROOT"
: >boot.ext4
run_inside_userns /sbin/mkfs.ext4 -L reformsdboot -d "$TEMPROOT/boot" "boot.ext4" "${BOOTSIZE}M"
# make sure that the filesystem includes boot.scr
/usr/sbin/debugfs boot.ext2 -R "stat boot.scr" \
| sed 's/ \+/ /g' | grep --quiet "Type: regular Mode: 0644 Flags: 0x0"
IMGNAME="reform-system-$PLATFORM.img"
dd if=root.ext2 of="$IMGNAME" seek=$((((BOOTSIZE+4)*1024*1024)/4194304)) bs=4194304
dd if=boot.ext2 of="$IMGNAME" seek=1 bs=4194304 conv=notrunc
rm boot.ext2
truncate --size="+512" "$IMGNAME"
/sbin/parted -s "$IMGNAME" "mklabel msdos"
/usr/sbin/debugfs boot.ext4 -R "stat boot.scr" \
| sed 's/ \+/ /g' | grep --quiet "Type: regular Mode: 0644 Flags: 0x"
dd if=root.ext4 of="$SYSIMAGE.img" seek=$((((BOOTSIZE+4)*1024*1024)/4194304)) bs=4194304
dd if=boot.ext4 of="$SYSIMAGE.img" seek=1 bs=4194304 conv=notrunc
rm boot.ext4
truncate --size="+512" "$SYSIMAGE.img"
/sbin/parted -s "$SYSIMAGE.img" "mklabel msdos"
# reproducible disk signature
printf mntr | dd of="$IMGNAME" seek=440 bs=1 conv=notrunc
/sbin/parted -s "$IMGNAME" "mkpart primary ext4 4MiB $((BOOTSIZE+4))MiB"
/sbin/parted -s "$IMGNAME" "mkpart primary ext4 $((BOOTSIZE+4))MiB $((BOOTSIZE+ROOTSIZE+4))MiB"
/sbin/parted -s "$IMGNAME" print
printf mntr | dd of="$SYSIMAGE.img" seek=440 bs=1 conv=notrunc
/sbin/parted -s "$SYSIMAGE.img" "mkpart primary ext4 4MiB $((BOOTSIZE+4))MiB"
/sbin/parted -s "$SYSIMAGE.img" "mkpart primary ext4 $((BOOTSIZE+4))MiB $((BOOTSIZE+ROOTSIZE+4))MiB"
/sbin/parted -s "$SYSIMAGE.img" print
# install u-boot
dd if="./$(basename "$DTBPATH" .dtb)-flash.bin" of="$SYSIMAGE.img" conv=notrunc bs=512 seek="$((UBOOT_OFFSET/512))" skip="$((FLASHBIN_OFFSET/512))"
case "$PLATFORM" in
imx8mq) dd if="./flash-$PLATFORM.bin" of="$IMGNAME" conv=notrunc bs=1k seek=33;;
a311d) dd if="./flash-$PLATFORM.bin" of="$IMGNAME" conv=notrunc bs=512 skip=1 seek=1;;
ls1028a) dd if="./flash-$PLATFORM.bin" of="$IMGNAME" conv=notrunc bs=512 seek=8;;
esac
unset DTBPATH
unset UBOOT_OFFSET
unset FLASHBIN_OFFSET
done
echo "Custom packages not from debian.org:" >&2
cat custom-pkgs.lst >&2
echo >&2
for PLATFORM in $PLATFORMS; do
IMGNAME="reform-system-$PLATFORM.img"
echo "Reform System Image for $PLATFORM created: $IMGNAME, MD5 checksum:"
md5sum "$IMGNAME"
echo "MD5 checksums:" >&2
for SYSIMAGE in $SYSIMAGES; do
md5sum "$SYSIMAGE.img" >&2
done
rm target-userland.tar root.ext2
*.deb