#!/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 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] ExecStart= ExecStart=/usr/bin/systemd-firstboot --prompt --force [Install] WantedBy=sysinit.target EOF sudo arch-chroot 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 git checkout master -- ':(top)' git pull --rebase git checkout v2022.07 msg2 "Apply binutils 2.38 compitible patch" git apply ../0001-riscv-fix-compitible-with-binutils-2.38.patch msg2 "Apply 'virtio: pci: fix bug of virtio_pci_map_capability' patch" git apply ../0002-virtio-pci-fix-bug-of-virtio_pci_map_capability.patch 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 git checkout master -- ':(top)' git pull --rebase git checkout v1.0 msg2 "Apply binutils 2.38 compitible patch" git cherry-pick -n 5d53b55aa77ffeefd4012445dfa6ad3535e1ff2c 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 sudo qemu-nbd -c /dev/nbd0 "$filename" sudo sfdisk /dev/nbd0 <