From 0d554866c82ba9d6e3135265a59bfb4198a9f5f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= Date: Sun, 24 May 2020 08:49:41 +0200 Subject: [PATCH] Initial sourcehut-inspired freebsd image build script --- .../freebsd-build-opennebula-image.sh | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100755 opennebula-images/freebsd-build-opennebula-image.sh diff --git a/opennebula-images/freebsd-build-opennebula-image.sh b/opennebula-images/freebsd-build-opennebula-image.sh new file mode 100755 index 0000000..18722ab --- /dev/null +++ b/opennebula-images/freebsd-build-opennebula-image.sh @@ -0,0 +1,109 @@ +#!/bin/sh + +# This script generates FreeBSD images for OpenNebula, being heavily inspired +# from srht's FreeBSD build image definition. It assumes running on a FreeBSD host. + +set -e +set -x + +# XXX: Handle command-line arguments? +RELEASE=12.1-RELEASE +IMAGE_PATH=freebsd-$RELEASE-$(date +%+F).img.qcow2 +IMAGE_SIZE=10G + +# TODO: find the package definition and built ourself, publish in some RPM repository. +ONE_CONTEXT_RPM_URL="https://github.com/OpenNebula/addon-context-linux/releases/download/v5.10.0/one-context-5.10.0-1.el8.noarch.rpm" +ONE_CONTEXT_RPM_PATH=/root/one-context.rpm + +cleanup() { + sync || true + umount /mnt/dev || true + umount /mnt || true + mdconfig -du md0 || true +} +trap cleanup EXIT + +if [ "$(whoami)" != 'root' ]; then + echo "This script must be run as root." >&2 + exit 1 +fi + +# Allocate and partition/format disk image. +truncate -s 6G 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 -s 5G md0 +newfs -U /dev/md0p2 + +# Mount allocated image. +mount /dev/md0p2 /mnt +mkdir -p /mnt/dev +mount -t devfs devfs /mnt/dev + +# Download and extract base system. +dist_files="kernel.txz base.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" + tar -C /mnt -xJf "$dist_dir/$f" +done + +# Configure new system. +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 < /mnt/etc/resolv.conf +tzsetup -s -C /mnt UTC + +cat >>/mnt/etc/ssh/sshd_config </mnt/usr/local/etc/pkg/repos/FreeBSD.conf <