From ec4bad56d6c4de0cfa41b7aec6b12faa97598961 Mon Sep 17 00:00:00 2001 From: Coelacanthus Date: Sun, 11 Sep 2022 23:25:47 +0800 Subject: [PATCH] refactor: add arguments to contrl script behaivor, rename to non-suffix Signed-off-by: Coelacanthus --- mkimg.sh => mkimg | 70 +++++++++++++++++++++++++++++++++++------ mkrootfs | 79 +++++++++++++++++++++++++++++++++++++++++++++++ mkrootfs.sh | 31 ------------------- startqemu.sh | 2 +- 4 files changed, 140 insertions(+), 42 deletions(-) rename mkimg.sh => mkimg (60%) create mode 100755 mkrootfs delete mode 100755 mkrootfs.sh diff --git a/mkimg.sh b/mkimg similarity index 60% rename from mkimg.sh rename to mkimg index d1cde56..17a3654 100755 --- a/mkimg.sh +++ b/mkimg @@ -1,15 +1,63 @@ #!/usr/bin/bash # -# SPDX-FileCopyrightText: 2022 Celeste Liu +# SPDX-FileCopyrightText: 2022 Celeste Liu # SPDX-License-Identifier: GPL-3.0-or-later # shellcheck disable=1091 . /usr/share/makepkg/util.sh colorize +verbose=0 +use_fixed_password=0 +varbose_arg= + +show_help() { +cat << EOF +Usage: ${0##*/} [-hvf] [-p PASSWORD] [-r ROOTFS] [FILENAME] +Create Arch RISC-V qemu image. + + FILENAME generated image file name + default: 'archriscv-$(date --rfc-3339=date).qcow2' + + -h display this help and exit + -f use fixed password instead of using systemd-firstboot to ask + -p PASSWORD set root password to PASSWORD instead of passwd in rootfs + -r ROOTFS specify rootfs file name + -v verbose mode +EOF +} + +parse-args() { + local OPTIND=1 + while getopts 'hvfr:p:' opt; do + case $opt in + h) + show_help + exit 0 + ;; + v) verbose=$((verbose+1)) + varbose_arg="--verbose" + ;; + f) + use_fixed_password=1 + ;; + p) password=$OPTARG + ;; + r) rootfs=${OPTARG:-archriscv-$(date --rfc-3339=date).tar.zst} + ;; + *) + show_help >&2 + exit 1 + ;; + esac + done + shift "$(( OPTIND-1 ))" + filename=${1:-archriscv-$(date --rfc-3339=date).qcow2} +} + toggle-systemd-firstboot() { msg2 "Toggle systemd-firstboot..." - sudo rm -f qcow2/etc/{machine-id,localtime,hostname,shadow,locale.conf} + sudo rm -f qcow2/etc/{machine-id,hostname,shadow} sudo mkdir -p qcow2/etc/systemd/system/systemd-firstboot.service.d cat << EOF | sudo tee qcow2/etc/systemd/system/systemd-firstboot.service.d/install.conf [Service] @@ -23,10 +71,12 @@ EOF } use-fixed-password() { - msg2 "Using fixed password..." - : # set in rootfs + msg2 "Using fixed password... $password" + [[ -n $password ]] && sudo usermod --root $(realpath ./qcow2) --password $(openssl passwd -6 "$password") root } +parse-args "$@" + msg "Building u-boot..." [[ -d u-boot ]] || git clone https://github.com/u-boot/u-boot.git @@ -62,10 +112,12 @@ make \ FW_PAYLOAD_PATH=../u-boot/u-boot.bin popd +cp ./opensbi/build/platform/generic/firmware/fw_payload.bin opensbi_fw_payload.bin + msg "Create image file..." -qemu-img create -f qcow2 "archriscv-$(date --rfc-3339=date).qcow2" 10G +qemu-img create -f qcow2 "$filename" 10G sudo modprobe nbd max_part=16 -sudo qemu-nbd -c /dev/nbd0 "archriscv-$(date --rfc-3339=date).qcow2" +sudo qemu-nbd -c /dev/nbd0 "$filename" sudo sfdisk /dev/nbd0 < +# SPDX-License-Identifier: GPL-3.0-or-later + +# shellcheck disable=1091 +. /usr/share/makepkg/util.sh +colorize + +verbose=0 +varbose_arg= + +show_help() { +cat << EOF +Usage: ${0##*/} [-hv] [-p PASSWORD] [FILENAME] +Create Arch RISC-V rootfs. + + FILENAME generated rootfs file name, use the archive suffix to decide + the compression algorithm. + default: 'archriscv-$(date --rfc-3339=date).tar.zst' + + -h display this help and exit + -p PASSWORD set root password to PASSWORD instead of archriscv + -v verbose mode +EOF +} + +parse-args() { + local OPTIND=1 + while getopts 'hvp:' opt; do + case $opt in + h) + show_help + exit 0 + ;; + v) verbose=$((verbose+1)) + varbose_arg="--verbose" + ;; + p) password=${OPTARG:-archriscv} + ;; + *) + show_help >&2 + exit 1 + ;; + esac + done + shift "$(( OPTIND-1 ))" + filename=${1:-archriscv-$(date --rfc-3339=date).tar.zst} + echo $filename +} + +parse-args "$@" + +msg "Building rootfs..." +mkdir -p ./rootfs +sudo chown root:root ./rootfs +sudo pacstrap \ + -C /usr/share/devtools/pacman-extra-riscv64.conf \ + -M \ + ./rootfs \ + base + +msg "Clean up pacman package cache..." +yes y | sudo pacman \ + --sysroot ./rootfs \ + --sync --clean --clean + +msg "Set root password (Default: archriscv)..." +sudo usermod --root $(realpath ./rootfs) --password $(openssl passwd -6 "$password") root + +msg "Compressing rootfs..." +sudo bsdtar --create \ + --auto-compress --options "compression-level=9"\ + $varbose_arg \ + --xattrs --acls\ + -f "$filename" -C rootfs/ . + +msg "Clean up rootfs directory..." +sudo rm -rf ./rootfs diff --git a/mkrootfs.sh b/mkrootfs.sh deleted file mode 100755 index bfb60bc..0000000 --- a/mkrootfs.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/bash -# -# SPDX-FileCopyrightText: 2022 Celeste Liu -# SPDX-License-Identifier: GPL-3.0-or-later - -# shellcheck disable=1091 -. /usr/share/makepkg/util.sh -colorize - -msg "Building rootfs..." -mkdir -p ./rootfs -sudo chown root:root ./rootfs -sudo pacstrap \ - -C /usr/share/devtools/pacman-extra-riscv64.conf \ - -M \ - ./rootfs \ - base - -msg "Clean up pacman package cache..." -yes y | sudo pacman \ - --sysroot ./rootfs \ - --sync --clean --clean - -msg "Set root password (Default: archriscv)..." -sudo usermod --root $(realpath ./rootfs) --password $(openssl passwd -6 archriscv) root - -msg "Compressing rootfs..." -sudo bsdtar --create --zstd --verbose --xattrs --acls -f "archriscv-$(date --rfc-3339=date).tar.zst" -C rootfs/ . - -msg "Clean up rootfs directory..." -sudo rm -rf ./rootfs diff --git a/startqemu.sh b/startqemu.sh index 6edfda6..7bf30fe 100755 --- a/startqemu.sh +++ b/startqemu.sh @@ -13,7 +13,7 @@ qemu-system-riscv64 \ -machine virt \ -smp 8 \ -m 4G \ - -bios ./opensbi/build/platform/generic/firmware/fw_payload.bin \ + -bios ./opensbi_fw_payload.bin \ -device virtio-blk-device,drive=hd0 \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-device,rng=rng0 \