From 01c6ea9a6b250f14424e26910e892a0f913e8979 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Wed, 17 Nov 2021 09:55:08 +0200 Subject: [PATCH] makebsd.sh: new script to make custom FreeBSD images Signed-off-by: Ivailo Monev --- makebsd.sh | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 makebsd.sh diff --git a/makebsd.sh b/makebsd.sh new file mode 100755 index 0000000..b172b27 --- /dev/null +++ b/makebsd.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +set -e + +if [ ! -f "$1" ];then + echo "Pass path to ISO" + exit 1 +fi + +isosrc="$1" +workdir="$HOME/iso" +mntdir="/mnt/iso" +isoout="$HOME/custom.iso" +imgout="$HOME/custom.img" +makeimg="no" + +pkg install rsync cdrtools + +mdconfig -a -t vnode -u 0 -f "$isosrc" +mkdir -vp "$mntdir" +mount -t cd9660 /dev/md0 "$mntdir" + +mkdir -vp "$workdir" +rsync -va "$mntdir/" "$workdir/" +umount "$mntdir" +mdconfig -d -u 0 + +if [ "$makeimg" == "no" ];then + echo '/dev/iso9660/CDROM / cd9660 ro 0 0' > "$workdir/etc/fstab" + rm -vf "$workdir/etc/rc.conf.local" +else + echo '/dev/ufs/USB / ufs ro 1 1' > "$workdir/etc/fstab" + echo 'root_rw_mount="NO"' > "$workdir/etc/rc.conf.local" +fi + +# TODO: do not hardcode memory device size +if ! grep -q Custom "$workdir/etc/rc.local";then + echo ' +# Custom Live CD/DVD read-write support +if [ ! -d /tmp/rw ];then + mkdir -vp /tmp/rw + mdmfs -M -s 1024m md /tmp/rw + + for d in /etc /var /root;do + mkdir -vp /tmp/rw/$d + mount -t unionfs /tmp/rw/$d $d + done +fi +' >> "$workdir/etc/rc.local" +fi + +mv -vf "$workdir/etc/resolv.conf" "$workdir/etc/resolv.conf.backup" +cp -vf /etc/resolv.conf "$workdir/etc/resolv.conf" +jail -c path="$workdir" mount.devfs ip4.addr=192.0.2.100 interface=em0 command=/bin/sh +mv -vf "$workdir/etc/resolv.conf.backup" "$workdir/etc/resolv.conf" + +if [ "$makeimg" == "no" ];then + mkisofs -J -R -b boot/cdboot -no-emul-boot -o "$isoout" "$workdir" +else + makefs -B little -o label=USB -o version=2 "$imgout.part" "$workdir" + mkimg -v -s bsd -b "$workdir/boot/boot" -p freebsd-ufs:="$imgout.part" -o "$imgout.part2" + rm -vf "$imgout.part" + mkimg -v -s mbr -b "$workdir/boot/mbr" -p freebsd:="$imgout.part2" -o "$imgout" + rm -vf "$imgout.part2" +fi + +rm -vfr "$workdir"