#!/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 verbose=0 use_fixed_password=0 varbose_arg= rootfs="archriscv-$(date --rfc-3339=date).tar.zst" 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 ;; *) 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,hostname,shadow} sudo systemd-nspawn -D qcow2 systemctl enable systemd-firstboot.service } use-fixed-password() { 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 pushd u-boot git checkout master -- ':(top)' git checkout master git pull --rebase git checkout v2023.04 make \ CROSS_COMPILE=riscv64-linux-gnu- \ qemu-riscv64_smode_defconfig make CROSS_COMPILE=riscv64-linux-gnu- popd msg "Building OpenSBI..." [[ -d opensbi ]] || git clone https://github.com/riscv-software-src/opensbi pushd opensbi git checkout master -- ':(top)' git checkout master git pull --rebase git checkout v1.1 make \ CROSS_COMPILE=riscv64-linux-gnu- \ PLATFORM=generic \ 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 "$filename" 10G sudo modprobe nbd max_part=16 || exit 1 sudo qemu-nbd -c /dev/nbd0 "$filename" sudo sfdisk /dev/nbd0 <