diff options
| author | Nikolay Govorov <me@govorov.online> | 2026-07-06 02:08:40 +0100 |
|---|---|---|
| committer | Nikolay Govorov <me@govorov.online> | 2026-07-06 02:08:40 +0100 |
| commit | d4f9be7447bffeb3e97a003cd3b326751b82c35a (patch) | |
| tree | 1a3662113b617679a4592c1d6f409627fab080ab | |
| parent | 8f8a22d9b926033e94e2d7d12bc9d92aa33947ea (diff) | |
| download | tar tar.gz tar.bz2 tar.lz tar.xz tar.zst zip | |
images: removes symlinks for each version
Diffstat
25 files changed, 283 insertions, 328 deletions
diff --git a/images/alpine/3.20/genimg b/images/alpine/3.20/genimg deleted file mode 100755 --- a/images/alpine/3.20/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -xeu -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=v3.20 -exec ../genimg diff --git a/images/alpine/3.21/genimg b/images/alpine/3.21/genimg deleted file mode 100755 --- a/images/alpine/3.21/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -xeu -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=v3.21 -exec ../genimg diff --git a/images/alpine/3.22/genimg b/images/alpine/3.22/genimg deleted file mode 100755 --- a/images/alpine/3.22/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -xeu -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=v3.22 -exec ../genimg diff --git a/images/alpine/3.23/genimg b/images/alpine/3.23/genimg deleted file mode 100755 --- a/images/alpine/3.23/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -xeu -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=v3.23 -exec ../genimg diff --git a/images/alpine/3.24/genimg b/images/alpine/3.24/genimg deleted file mode 100755 --- a/images/alpine/3.24/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -xeu -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=v3.24 -exec ../genimg diff --git a/images/alpine/edge/genimg b/images/alpine/edge/genimg deleted file mode 100755 --- a/images/alpine/edge/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -xeu -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=edge -exec ../genimg diff --git a/images/alpine/genimg b/images/alpine/genimg index 2ac659b..908132a 100755 --- a/images/alpine/genimg +++ b/images/alpine/genimg @@ -3,10 +3,28 @@ # SPDX-FileCopyrightText: 2026 Nikolay Govorov # SPDX-License-Identifier: AGPL-3.0-only -echo "$release" >/dev/null # fail on -u if release unset -arch="${1:-x86_64}" +self=$(dirname "$(readlink -f "$0")") +cd "$self" + +version=${1:-} +arch="${2:-x86_64}" linux="${linux:-linux-lts}" +case $version in + 3.20|3.21|3.22|3.23|3.24) + release="v$version" + ;; + edge) + release="edge" + ;; + *) + echo "usage: ${0##*/} <3.20|3.21|3.22|3.23|3.24|edge> [arch]" >&2 + exit 1 + ;; +esac + +out="$version/$arch" + cleanup() { # The order here is important if you don't want to hose your mounts sync @@ -22,11 +40,11 @@ cleanup() { qemu-nbd --disconnect /dev/nbd0 || true } -mkdir -p "$arch" +mkdir -p "$out" -qemu-img create -f qcow2 "$arch"/root.img.qcow2 24G +qemu-img create -f qcow2 "$out"/root.img.qcow2 24G modprobe nbd max_part=16 -qemu-nbd --connect=/dev/nbd0 "$arch"/root.img.qcow2 +qemu-nbd --connect=/dev/nbd0 "$out"/root.img.qcow2 for i in $(seq 1 5); do sleep 0.$i partprobe /dev/nbd0 && break @@ -53,16 +71,6 @@ mkdir /mnt/boot mount /dev/nbd0p1 /mnt/boot swapon /dev/nbd0p2 -extra="" -case $release in - 3.23) - extra="!usr-merge-nag" - ;; - edge) - extra="!usr-merge-nag" - ;; -esac - # TODO: Remove bash apk add -U \ -X http://dl-cdn.alpinelinux.org/alpine/$release/main/ \ @@ -73,7 +81,7 @@ apk add -U \ --initdb \ acct alpine-base alpine-conf alpine-sdk linux-firmware-none $linux \ git mercurial openssh sudo syslinux tzdata gnupg haveged bash curl \ - doas $extra + doas mount --bind /dev /mnt/dev mount --bind /dev/pts /mnt/dev/pts diff --git a/images/debian/bookworm/genimg b/images/debian/bookworm/genimg deleted file mode 100755 --- a/images/debian/bookworm/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=bookworm -exec ../genimg "$@" diff --git a/images/debian/forky/genimg b/images/debian/forky/genimg deleted file mode 100755 --- a/images/debian/forky/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=forky -exec ../genimg "$@" diff --git a/images/debian/genimg b/images/debian/genimg index 297a26d..7c98cd3 100755 --- a/images/debian/genimg +++ b/images/debian/genimg @@ -3,8 +3,20 @@ # SPDX-FileCopyrightText: 2026 Nikolay Govorov # SPDX-License-Identifier: AGPL-3.0-only -echo "$release" >/dev/null # fail on -u if release unset -arch=${1:-amd64} +self=$(dirname "$(readlink -f "$0")") +cd "$self" + +release=${1:-} +arch=${2:-amd64} + +case $release in + bookworm|forky|sid|trixie) ;; + *) + echo "usage: ${0##*/} <bookworm|forky|sid|trixie> [arch]" >&2 + exit 1 + ;; +esac + case $arch in amd64) iface=ens3 @@ -41,11 +53,12 @@ cleanup() { qemu-nbd --disconnect /dev/nbd0 || true } -mkdir -p "$arch" +out="$release/$arch" +mkdir -p "$out" -qemu-img create -f qcow2 $arch/root.img.qcow2 32G +qemu-img create -f qcow2 "$out/root.img.qcow2" 32G modprobe nbd max_part=16 -qemu-nbd --connect=/dev/nbd0 $arch/root.img.qcow2 +qemu-nbd --connect=/dev/nbd0 "$out/root.img.qcow2" for i in $(seq 1 5); do sleep 0.$i partprobe /dev/nbd0 && break @@ -75,7 +88,7 @@ if [ "$arch" = "amd64" ] then debootstrap --include=gnupg2 --arch=$arch $release /mnt else - ../qemu-debootstrap --include=gnupg2 --arch=$arch $release /mnt + ./qemu-debootstrap --include=gnupg2 --arch=$arch $release /mnt fi mount --bind /dev /mnt/dev @@ -163,12 +176,12 @@ case "$arch" in EOF ;; arm64) - cp /mnt/boot/vmlinuz-* $arch/vmlinuz - cp /mnt/boot/initrd.img-* $arch/initrd.img + cp /mnt/boot/vmlinuz-* "$out/vmlinuz" + cp /mnt/boot/initrd.img-* "$out/initrd.img" ;; ppc64el) - cp /mnt/boot/vmlinux-* $arch/vmlinux - cp /mnt/boot/initrd.img-* $arch/initrd.img + cp /mnt/boot/vmlinux-* "$out/vmlinux" + cp /mnt/boot/initrd.img-* "$out/initrd.img" ;; esac diff --git a/images/debian/sid/genimg b/images/debian/sid/genimg deleted file mode 100755 --- a/images/debian/sid/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=sid -exec ../genimg "$@" diff --git a/images/debian/trixie/genimg b/images/debian/trixie/genimg deleted file mode 100755 --- a/images/debian/trixie/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=trixie -exec ../genimg "$@" diff --git a/images/fedora/42/genimg b/images/fedora/42/genimg deleted file mode 100755 --- a/images/fedora/42/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=42 -exec ../genimg "$*" diff --git a/images/fedora/43/genimg b/images/fedora/43/genimg deleted file mode 100755 --- a/images/fedora/43/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=43 -exec ../genimg "$*" diff --git a/images/fedora/44/genimg b/images/fedora/44/genimg deleted file mode 100755 --- a/images/fedora/44/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=44 -exec ../genimg "$*" diff --git a/images/fedora/genimg b/images/fedora/genimg index 7983380..5ba53e7 100755 --- a/images/fedora/genimg +++ b/images/fedora/genimg @@ -6,8 +6,20 @@ # Network Block Device used to interact with the QCOW2 image. NBD_DEVICE=/dev/nbd0 -echo "$release" >/dev/null # fail on -u if release unset -arch=${1:-x86_64} +self=$(dirname "$(readlink -f "$0")") +cd "$self" + +release=${1:-} +arch=${2:-x86_64} + +case $release in + 42|43|44) ;; + *) + echo "usage: ${0##*/} <42|43|44> [arch]" >&2 + exit 1 + ;; +esac + case $arch in x86_64) iface=ens3 @@ -37,11 +49,12 @@ run_root() { sh -c "$*" } -mkdir -p "$arch" +out="$release/$arch" +mkdir -p "$out" -qemu-img create -f qcow2 "$arch/root.img.qcow2" 24G +qemu-img create -f qcow2 "$out/root.img.qcow2" 24G modprobe nbd max_part=16 -qemu-nbd --connect=$NBD_DEVICE "$arch/root.img.qcow2" +qemu-nbd --connect=$NBD_DEVICE "$out/root.img.qcow2" trap cleanup EXIT # Looks like qemu-nbd is non-blocking. Wait one second to make sure $NBD_DEVICE diff --git a/images/freebsd/14.x/genimg b/images/freebsd/14.x/genimg deleted file mode 100755 --- a/images/freebsd/14.x/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release="14.4-RELEASE" -exec ../genimg "$@" diff --git a/images/freebsd/15.x/genimg b/images/freebsd/15.x/genimg deleted file mode 100755 --- a/images/freebsd/15.x/genimg +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release="15.1-RELEASE" -export repo="FreeBSD-ports" -exec ../genimg "$@" diff --git a/images/freebsd/current/genimg b/images/freebsd/current/genimg deleted file mode 100755 --- a/images/freebsd/current/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release="16.0" -exec ../genpkgimg "$@" diff --git a/images/freebsd/genimg b/images/freebsd/genimg index c5219ea..59500f8 100755 --- a/images/freebsd/genimg +++ b/images/freebsd/genimg @@ -3,53 +3,56 @@ # SPDX-FileCopyrightText: 2026 Nikolay Govorov # SPDX-License-Identifier: AGPL-3.0-only -echo "$release" >/dev/null # fail on -u if unset -arch="${1:-amd64}" -: ${repo:=FreeBSD} - -dist_base="https://download.freebsd.org/ftp/releases/$arch/$release" - -dist_files="kernel.txz base.txz base-dbg.txz" -dist_dir="/usr/freebsd-dist/$arch/$release" - -mkdir -p "$dist_dir" -for f in $dist_files -do - fetch -m -o "$dist_dir/$f" "$dist_base/$f" -done - -cleanup() { - sync || true - umount /mnt/dev || true - umount /mnt || true - mdconfig -du md0 || true -} -trap cleanup EXIT - -rm -f disk.img -truncate -s 8G disk.img -mdconfig -a -t vnode -f disk.img -u md0 -gpart create -s gpt /dev/md0 -gpart add -t freebsd-boot -l bootfs -b 40 -s 512K md0 -gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 md0 -gpart add -t freebsd-ufs -l rootfs -b 1M md0 -newfs -U /dev/md0p2 - -mount /dev/md0p2 /mnt - -mkdir -p /mnt/dev -mount -t devfs devfs /mnt/dev - -for f in $dist_files -do - tar -C /mnt -xJf "$dist_dir/$f" -done - -echo "/dev/gpt/rootfs / ufs rw,noatime 1 1" >/mnt/etc/fstab -touch /mnt/firstboot -echo 'autoboot_delay="-1"' >>/mnt/boot/loader.conf - -cat >>/mnt/etc/rc.conf <<EOF +self=$(dirname "$(readlink -f "$0")") +cd "$self" + +version=${1:-} +arch="${2:-amd64}" +repo=FreeBSD + +# Build a RELEASE image from the published distribution tarballs. +genimg() { + dist_base="https://download.freebsd.org/ftp/releases/$arch/$release" + + dist_files="kernel.txz base.txz base-dbg.txz" + dist_dir="/usr/freebsd-dist/$arch/$release" + + mkdir -p "$dist_dir" + for f in $dist_files; do + fetch -m -o "$dist_dir/$f" "$dist_base/$f" + done + + cleanup() { + sync || true + umount /mnt/dev || true + umount /mnt || true + mdconfig -du md0 || true + } + trap cleanup EXIT + + rm -f disk.img + truncate -s 8G disk.img + mdconfig -a -t vnode -f disk.img -u md0 + gpart create -s gpt /dev/md0 + gpart add -t freebsd-boot -l bootfs -b 40 -s 512K md0 + gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 md0 + gpart add -t freebsd-ufs -l rootfs -b 1M md0 + newfs -U /dev/md0p2 + + mount /dev/md0p2 /mnt + + mkdir -p /mnt/dev + mount -t devfs devfs /mnt/dev + + for f in $dist_files; do + tar -C /mnt -xJf "$dist_dir/$f" + done + + echo "/dev/gpt/rootfs / ufs rw,noatime 1 1" >/mnt/etc/fstab + touch /mnt/firstboot + echo 'autoboot_delay="-1"' >>/mnt/boot/loader.conf + + cat >>/mnt/etc/rc.conf <<EOF ntpd_enable=YES sshd_enable=YES growfs_enable=YES @@ -57,52 +60,170 @@ hostname="build" ifconfig_DEFAULT="inet 10.0.2.15 netmask 255.255.255.0" defaultrouter="10.0.2.2" EOF -echo "nameserver 8.8.8.8" >/mnt/etc/resolv.conf -echo "nameserver 9.9.9.9" >>/mnt/etc/resolv.conf -echo "nameserver 1.1.1.1" >>/mnt/etc/resolv.conf -tzsetup -s -C /mnt UTC + echo "nameserver 8.8.8.8" >/mnt/etc/resolv.conf + echo "nameserver 9.9.9.9" >>/mnt/etc/resolv.conf + echo "nameserver 1.1.1.1" >>/mnt/etc/resolv.conf + tzsetup -s -C /mnt UTC -cat >>/mnt/etc/ssh/sshd_config <<EOF + cat >>/mnt/etc/ssh/sshd_config <<EOF PermitRootLogin yes PasswordAuthentication yes PermitEmptyPasswords yes UsePAM no EOF -mkdir -p /mnt/usr/local/etc/pkg/repos/ -cat >/mnt/usr/local/etc/pkg/repos/FreeBSD.conf <<EOF + mkdir -p /mnt/usr/local/etc/pkg/repos/ + cat >/mnt/usr/local/etc/pkg/repos/FreeBSD.conf <<EOF $repo: { url: pkg+http://pkg.FreeBSD.org/\$\{ABI\}/latest enabled: yes } EOF -# freebsd-update is only supported for RELEASE -if [ "${release%-RELEASE}" != "$release" ] -then - env PAGER=true /usr/sbin/freebsd-update \ - -b /mnt \ - --currently-running "$release" \ - --not-running-from-cron -F \ - fetch install -fi + # freebsd-update is only supported for RELEASE + if [ "${release%-RELEASE}" != "$release" ]; then + env PAGER=true /usr/sbin/freebsd-update \ + -b /mnt \ + --currently-running "$release" \ + --not-running-from-cron -F \ + fetch install + fi + + env ASSUME_ALWAYS_YES=YES pkg -c /mnt bootstrap -f + # TODO: remove bash + env ASSUME_ALWAYS_YES=YES pkg -c /mnt install git mercurial bash sudo curl + + git clone https://github.com/freebsd/freebsd-ports /mnt/usr/ports --depth=1 --single-branch + + pw -R /mnt groupadd sudo + pw -R /mnt useradd -n build -u 1000 -s /usr/local/bin/bash -m -w none -G sudo + echo "%sudo ALL=(ALL) NOPASSWD: ALL" >>/mnt/usr/local/etc/sudoers + + cleanup + trap : EXIT + + mkdir -p "$out" + qemu-img convert -f raw -O qcow2 disk.img "$out"/root.img.qcow2 + rm disk.img + + # Filesystem will be enlarged by growfs(7) on next startup + qemu-img resize "$out"/root.img.qcow2 24G +} + +# Build an image entirely from pkg base (used for -CURRENT, which has no +# published release tarballs). +genpkgimg() { + rel=${release%%.*} + + cleanup() { + umount disk/usr/share/keys/pkg || true + chflags -R noschg disk || true + rm -rf disk || true + } + trap cleanup EXIT + + rm -f disk.img + mkdir disk + mkdir -p disk/usr/local/etc/pkg/repos + # pkg -R needs absolute path + reposdir=$(pwd)/disk/usr/local/etc/pkg/repos + + cat >${reposdir}/FreeBSD.conf <<EOF +FreeBSD: { + url: pkg+http://pkg.FreeBSD.org/\$\{ABI\}/latest + enabled: yes + mirror_type: srv + signature_type: fingerprint +} +FreeBSD-base: { + url: pkg+http://pkg.FreeBSD.org/\$\{ABI\}/base_latest + enabled: yes + mirror_type: srv + signature_type: fingerprint +} +EOF + export ABI="FreeBSD:$rel:$arch" + export IGNORE_OSVERSION=yes + mkdir -p disk/usr/share/keys/pkg + mount -t nullfs /usr/share/keys/pkg disk/usr/share/keys/pkg + pkg -C /dev/null -R ${reposdir} -r disk update + umount disk/usr/share/keys/pkg + # XXX replace by group FreeBSD-base the day it is implemented :D + pkg -C /dev/null -R ${reposdir} -r disk rquery -g "%n" "FreeBSD*" | grep -vE "(lib32|dbg|kernel|src|tests)" | + xargs pkg -C /dev/null -R ${reposdir} -r disk install -y + if pkg -C /dev/null -R ${reposdir} -r disk install -y FreeBSD-kernel-generic-nodebug; then + echo "kernel=kernel.GENERIC-NODEBUG" >disk/boot/loader.conf + else + pkg -C /dev/null -R ${reposdir} -r disk install -y FreeBSD-kernel-generic + fi + + echo "/dev/gpt/rootfs / ufs rw,noatime 1 1" >disk/etc/fstab + touch disk/firstboot + echo 'autoboot_delay="-1"' >>disk/boot/loader.conf + + cat >>disk/etc/rc.conf <<EOF +ntpd_enable=YES +sshd_enable=YES +growfs_enable=YES +hostname="build" +ifconfig_DEFAULT="inet 10.0.2.15 netmask 255.255.255.0" +defaultrouter="10.0.2.2" +EOF + cat >disk/etc/resolv.conf <<EOF +nameserver 8.8.8.8 +nameserver 8.8.4.4 +EOF + tzsetup -s -C disk UTC + + cat >>disk/etc/ssh/sshd_config <<EOF +PermitRootLogin yes +PasswordAuthentication yes +PermitEmptyPasswords yes +UsePAM no +EOF -env ASSUME_ALWAYS_YES=YES pkg -c /mnt bootstrap -f -# TODO: remove bash -env ASSUME_ALWAYS_YES=YES pkg -c /mnt install git mercurial bash sudo curl + # TODO: remove bash + pkg -r disk -R ${reposdir} install -y pkg git-lite mercurial bash sudo curl + pkg -r disk -R ${reposdir} clean -ay -git clone https://github.com/freebsd/freebsd-ports /mnt/usr/ports --depth=1 --single-branch + pw -R disk groupadd sudo + pw -R disk useradd -n build -u 1000 -s /usr/local/bin/bash -m -w none -G sudo + echo "%sudo ALL=(ALL) NOPASSWD: ALL" >>disk/usr/local/etc/sudoers -pw -R /mnt groupadd sudo -pw -R /mnt useradd -n build -u 1000 -s /usr/local/bin/bash -m -w none -G sudo -echo "%sudo ALL=(ALL) NOPASSWD: ALL" >>/mnt/usr/local/etc/sudoers + makefs -s 5g -B little -o label=rootfs -o version=2 -o softupdates=1 disk.img disk + mkdir -p "$out" + mkimg -s gpt \ + -b disk/boot/pmbr \ + -C 16G \ + -p freebsd-boot:=disk/boot/gptboot \ + -p freebsd-ufs/rootfs:=disk.img \ + -f qcow2 \ + -o "$out"/root.img.qcow2 -cleanup -trap : EXIT + cleanup + trap : EXIT -mkdir -p "$arch" -qemu-img convert -f raw -O qcow2 disk.img "$arch"/root.img.qcow2 -rm disk.img + rm disk.img +} -# Filesystem will be enlarged by growfs(7) on next startup -qemu-img resize "$arch"/root.img.qcow2 24G +out="$version/$arch" + +case $version in +14.x) + release="14.4-RELEASE" + genimg + ;; +15.x) + release="15.1-RELEASE" + repo="FreeBSD-ports" + genimg + ;; +current) + release="16.0" + genpkgimg + ;; +*) + echo "usage: ${0##*/} <14.x|15.x|current> [arch]" >&2 + exit 1 + ;; +esac diff --git a/images/freebsd/genpkgimg b/images/freebsd/genpkgimg deleted file mode 100755 --- a/images/freebsd/genpkgimg +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh -eux -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-FileCopyrightText: 2026 Nikolay Govorov -# SPDX-License-Identifier: AGPL-3.0-only - -echo "$release" >/dev/null # fail on -u if unset -arch="${1:-amd64}" -rel=${release%%.*} - -cleanup() { - umount disk/usr/share/keys/pkg || true - chflags -R noschg disk || true - rm -rf disk || true -} -trap cleanup EXIT - -rm -f disk.img -mkdir disk -mkdir -p disk/usr/local/etc/pkg/repos -# pkg -R needs absolute path -reposdir=$(pwd)/disk/usr/local/etc/pkg/repos - -cat >${reposdir}/FreeBSD.conf <<EOF -FreeBSD: { - url: pkg+http://pkg.FreeBSD.org/\$\{ABI\}/latest - enabled: yes - mirror_type: srv - signature_type: fingerprint -} -FreeBSD-base: { - url: pkg+http://pkg.FreeBSD.org/\$\{ABI\}/base_latest - enabled: yes - mirror_type: srv - signature_type: fingerprint -} -EOF -export ABI="FreeBSD:$rel:$arch" -export IGNORE_OSVERSION=yes -mkdir -p disk/usr/share/keys/pkg -mount -t nullfs /usr/share/keys/pkg disk/usr/share/keys/pkg -pkg -C /dev/null -R ${reposdir} -r disk update -umount disk/usr/share/keys/pkg -# XXX replace by group FreeBSD-base the day it is implemented :D -pkg -C /dev/null -R ${reposdir} -r disk rquery -g "%n" "FreeBSD*" | grep -vE "(lib32|dbg|kernel|src|tests)" | \ - xargs pkg -C /dev/null -R ${reposdir} -r disk install -y -if pkg -C /dev/null -R ${reposdir} -r disk install -y FreeBSD-kernel-generic-nodebug ; then - echo "kernel=kernel.GENERIC-NODEBUG" > disk/boot/loader.conf -else - pkg -C /dev/null -R ${reposdir} -r disk install -y FreeBSD-kernel-generic -fi - -echo "/dev/gpt/rootfs / ufs rw,noatime 1 1" >disk/etc/fstab -touch disk/firstboot -echo 'autoboot_delay="-1"' >>disk/boot/loader.conf - -cat >>disk/etc/rc.conf <<EOF -ntpd_enable=YES -sshd_enable=YES -growfs_enable=YES -hostname="build" -ifconfig_DEFAULT="inet 10.0.2.15 netmask 255.255.255.0" -defaultrouter="10.0.2.2" -EOF -cat > disk/etc/resolv.conf <<EOF -nameserver 8.8.8.8 -nameserver 8.8.4.4 -EOF -tzsetup -s -C disk UTC - -cat >>disk/etc/ssh/sshd_config <<EOF -PermitRootLogin yes -PasswordAuthentication yes -PermitEmptyPasswords yes -UsePAM no -EOF - -# TODO: remove bash -pkg -r disk -R ${reposdir} install -y pkg git-lite mercurial bash sudo curl -pkg -r disk -R ${reposdir} clean -ay - -pw -R disk groupadd sudo -pw -R disk useradd -n build -u 1000 -s /usr/local/bin/bash -m -w none -G sudo -echo "%sudo ALL=(ALL) NOPASSWD: ALL" >>disk/usr/local/etc/sudoers - -makefs -s 5g -B little -o label=rootfs -o version=2 -o softupdates=1 disk.img disk -mkdir -p "$arch" -mkimg -s gpt \ - -b disk/boot/pmbr \ - -C 16G \ - -p freebsd-boot:=disk/boot/gptboot \ - -p freebsd-ufs/rootfs:=disk.img \ - -f qcow2 \ - -o "$arch"/root.img.qcow2 - -cleanup -trap : EXIT - -rm disk.img diff --git a/images/ubuntu/genimg b/images/ubuntu/genimg index bb42bf1..4b519be 100755 --- a/images/ubuntu/genimg +++ b/images/ubuntu/genimg @@ -3,8 +3,20 @@ # SPDX-FileCopyrightText: 2026 Nikolay Govorov # SPDX-License-Identifier: AGPL-3.0-only -echo "$release" >/dev/null # fail on -u if release unset -arch=${1:-amd64} +self=$(dirname "$(readlink -f "$0")") +cd "$self" + +release=${1:-} +arch=${2:-amd64} + +case $release in + jammy|noble|resolute) ;; + *) + echo "usage: ${0##*/} <jammy|noble|resolute> [arch]" >&2 + exit 1 + ;; +esac + case $arch in amd64) iface=ens3 @@ -34,11 +46,12 @@ cleanup() { qemu-nbd --disconnect /dev/nbd0 || true } -mkdir -p "$arch" +out="$release/$arch" +mkdir -p "$out" -qemu-img create -f qcow2 $arch/root.img.qcow2 32G +qemu-img create -f qcow2 "$out/root.img.qcow2" 32G modprobe nbd max_part=16 -qemu-nbd --connect=/dev/nbd0 $arch/root.img.qcow2 +qemu-nbd --connect=/dev/nbd0 "$out/root.img.qcow2" trap cleanup EXIT # Looks like qemu-nbd is non-blocking. Wait one second to make sure $NBD_DEVICE @@ -171,8 +184,8 @@ EOF if [ "$arch" != "amd64" ] then - cp /mnt/boot/vmlinuz $arch/vmlinuz - cp /mnt/boot/initrd.img $arch/initrd.img + cp /mnt/boot/vmlinuz "$out/vmlinuz" + cp /mnt/boot/initrd.img "$out/initrd.img" fi sync diff --git a/images/ubuntu/jammy/genimg b/images/ubuntu/jammy/genimg deleted file mode 100755 --- a/images/ubuntu/jammy/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=jammy -exec ../genimg "$@" diff --git a/images/ubuntu/noble/genimg b/images/ubuntu/noble/genimg deleted file mode 100755 --- a/images/ubuntu/noble/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=noble -exec ../genimg "$@" diff --git a/images/ubuntu/resolute/genimg b/images/ubuntu/resolute/genimg deleted file mode 100755 --- a/images/ubuntu/resolute/genimg +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux -# SPDX-FileCopyrightText: 2017-2026 Drew DeVault -# SPDX-License-Identifier: AGPL-3.0-only - -export release=resolute -exec ../genimg "$@" |
