ladybird/Meta/build-image-extlinux.sh
Tim Schumacher 032ef1b461 Meta: Define SUDO for all the image building scripts
Back when adding support for `pls` as a `sudo` replacement,
`build-image-qemu` dynamically set the `SUDO` variable depending on what
system it was running on and used the contents of that variable to call
the correct elevation utility.

During recent changes to the elevation error message, that usage of the
variable was replicated across all of our scripts, but without also
replicating the logic to set that variable in the first place.

Add back the variable setting logic to all the other scripts to keep
them from running into unset variables.
2022-10-16 23:39:45 +02:00

118 lines
2.8 KiB
Bash
Executable file

#!/bin/sh
set -e
SUDO="sudo"
if [ "$(uname -s)" = "SerenityOS" ]; then
SUDO="pls"
fi
die() {
echo "die: $*"
exit 1
}
if [ "$(id -u)" != 0 ]; then
set +e
${SUDO} -E -- sh -c "\"$0\" $* || exit 42"
case $? in
1)
die "this script needs to run as root"
;;
42)
exit 1
;;
*)
exit 0
;;
esac
else
: "${SUDO_UID:=0}" "${SUDO_GID:=0}"
fi
for dir in "/usr/lib/syslinux/bios" "/usr/lib/syslinux" "/usr/share/syslinux"; do
if [ -d $dir ]; then
syslinux_dir=$dir
break
fi
done
if [ -z $syslinux_dir ]; then
echo "can't find syslinux directory"
exit 1
fi
disk_usage() {
if [ "$(uname -s)" = "Darwin" ]; then
du -sm "$1" | cut -f1
else
du -sm --apparent-size "$1" | cut -f1
fi
}
DISK_SIZE=$(($(disk_usage "$SERENITY_SOURCE_DIR/Base") + $(disk_usage Root) + 300))
echo "setting up disk image..."
dd if=/dev/zero of=extlinux_disk_image bs=1M count="${DISK_SIZE:-800}" status=none || die "couldn't create disk image"
chown "$SUDO_UID":"$SUDO_GID" extlinux_disk_image || die "couldn't adjust permissions on disk image"
echo "done"
printf "creating loopback device... "
dev=$(losetup --find --partscan --show extlinux_disk_image)
if [ -z "$dev" ]; then
die "couldn't mount loopback device"
fi
echo "loopback device is at ${dev}"
cleanup() {
if [ -d mnt ]; then
printf "unmounting filesystem... "
umount mnt || ( sleep 1 && sync && umount mnt )
rmdir mnt
echo "done"
fi
if [ -e "${dev}" ]; then
printf "cleaning up loopback device... "
losetup -d "${dev}"
echo "done"
fi
}
trap cleanup EXIT
printf "creating partition table... "
parted -s "${dev}" mklabel msdos mkpart primary ext2 32k 100% -a minimal set 1 boot on || die "couldn't partition disk"
partition_number="p1"
echo "done"
printf "destroying old filesystem... "
dd if=/dev/zero of="${dev}${partition_number}" bs=1M count=1 status=none || die "couldn't destroy old filesystem"
echo "done"
printf "creating new filesystem... "
mke2fs -q -I 128 "${dev}${partition_number}" || die "couldn't create filesystem"
echo "done"
printf "mounting filesystem... "
mkdir -p mnt
mount "${dev}${partition_number}" mnt/ || die "couldn't mount filesystem"
echo "done"
script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
"$script_path/build-root-filesystem.sh"
if [ -z "$1" ]; then
extlinux_cfg="$SERENITY_SOURCE_DIR"/Meta/extlinux.conf
else
extlinux_cfg=$1
fi
echo "installing extlinux with $extlinux_cfg..."
mkdir -p mnt/boot/extlinux
extlinux --install mnt/boot/extlinux
cp "$extlinux_cfg" mnt/boot/extlinux/extlinux.conf
for module in mboot.c32 menu.c32 libutil.c32 libcom32.c32; do
cp $syslinux_dir/$module mnt/boot/extlinux/
done
dd bs=440 count=1 conv=notrunc if=$syslinux_dir/mbr.bin of="$dev"
echo "done"