Skip to content

Testing a specific disk layout

Anton Hvornum edited this page Apr 16, 2021 · 1 revision

One of the current issues is disk layout and cache issues. In order to test this some what reliably, the following script can be run.

It will create two partitions:

  • /dev/sda1 -> fat32
  • /dev/sda2 -> Encrypted -> ext4

It will also install a base linux on this setup (including bootloader). Nothing will be configured, just the binaries put in place for testing the partitioner.

#!/bin/bash

if [ -z "$1" ]
then
	echo "Need to define a output folder for the archiso:"
	echo "Example (build and run):"
	echo "  ./test.sh ./archiso true"
	echo "Example (skip building and run ISO as given path):"
	echo "  ./test.sh ./archiso"
	exit 1
fi

REPO="https://github.com/Torxed/archinstall.git"
ARCHISO_FOLDER=$1
REBUILD=$2
BRANCH="master"

if [ $REBUILD ]
then
	echo "Making a clean build!"
	`rm -rf "${ARCHISO_FOLDER}" 2>/dev/null` || (
		echo "Could not delete protected folder:";
		echo "-> ${ARCHISO_FOLDER}";
		echo "Running as sudo.";
		sudo rm -rf "${ARCHISO_FOLDER}"
	)

	mkdir -p "${ARCHISO_FOLDER}"
	cp -r /usr/share/archiso/configs/releng/* "${ARCHISO_FOLDER}/"

	git clone "${REPO}" "${ARCHISO_FOLDER}/airootfs/root/archinstall-git"
	(cd "${ARCHISO_FOLDER}/airootfs/root/archinstall-git"; git checkout "${BRANCH}" )

	echo "git" >> "${ARCHISO_FOLDER}/packages.x86_64"
	echo "python" >> "${ARCHISO_FOLDER}/packages.x86_64"
	echo "python-pip" >> "${ARCHISO_FOLDER}/packages.x86_64"
	echo "python-setuptools" >> "${ARCHISO_FOLDER}/packages.x86_64"

	cat <<\EOF >> "${ARCHISO_FOLDER}/airootfs/root/.zprofile"
if [[ -z $DISPLAY && $XDG_VTNR -eq 1 ]]; then
	cd /root/archinstall-git
	pip uninstall archinstall -y >/dev/null 2>&1
	git pull
	python setup.py install >/dev/null 2>&1
	cd /root

	RED='\033[0;31m'
	YEL='\033[1;33m'
	NC='\033[0m'

	umount -R /mnt
	cryptsetup close /dev/mapper/luksloop

	wipefs -a -f -i -q /dev/sda
	parted -s /dev/sda mklabel gpt
	parted -s /dev/sda mkpart primary fat32 1MiB 513MiB
	parted -s /dev/sda name 1 EFI
	parted -s /dev/sda set 1 boot on
	parted -s /dev/sda set 1 esp on
	parted -s /dev/sda mkpart primary 513MiB 100%

	mkfs.fat -F32 /dev/sda1

	echo -n "test" > /tmp/disk.pw

	cryptsetup \
			--batch-mode \
			--verbose \
			--type luks2 \
			--pbkdf argon2i \
			--hash sha512 \
			--key-size 512 \
			--iter-time 10 \
			--key-file /tmp/disk.pw \
			--use-urandom \
			luksFormat /dev/sda2

	cryptsetup open /dev/sda2 luksloop --key-file /tmp/disk.pw --type luks2
	mkfs.ext4 /dev/mapper/luksloop
	mount /dev/mapper/luksloop /mnt

	mkdir -p /mnt/boot
	mount /dev/sda1 /mnt/boot

	pacstrap /mnt base linux efibootmgr
	arch-chroot /mnt bootctl --no-variables --path=/boot install

	lsblk -f -o+TYPE,SIZE

	umount -R /mnt
	cryptsetup close /dev/mapper/luksloop

	echo ""
	echo -e "${RED}Note:${NC} This is a release candidate! (Experimental release: v2.1.4)"
	echo -e "Do not bother Arch Linux support staff about issues in this specific release candidate!"
	echo -e "Instead, ${YEL}create an Issue ticket on the Upstream GithHub page for support:${NC}"
	echo -e "  https://github.com/archlinux/archinstall/issues"
	echo ""
	echo "Run 'python -m archinstall' when you are ready to test (configure your network first if needed)!"
fi
EOF

	( cd "${ARCHISO_FOLDER}/"; sudo mkarchiso -v -w work/ -o out/ ./; )
fi

if [ ! -f "./test.qcow2" ];
then
	qemu-img create -f qcow2 ./test.qcow2 15G
fi

sudo qemu-system-x86_64 \
        -cpu host \
        -enable-kvm \
        -machine q35,accel=kvm \
        -device intel-iommu \
        -m 8192 \
        -drive if=pflash,format=raw,readonly,file=/usr/share/ovmf/x64/OVMF_CODE.fd  \
        -drive if=pflash,format=raw,readonly,file=/usr/share/ovmf/x64/OVMF_VARS.fd \
        -device virtio-scsi-pci,bus=pcie.0,id=scsi0 \
            -device scsi-hd,drive=hdd0,bus=scsi0.0,id=scsi0.0,bootindex=2 \
                -drive file=./test.qcow2,if=none,format=qcow2,discard=unmap,aio=native,cache=none,id=hdd0 \
        -device virtio-scsi-pci,bus=pcie.0,id=scsi1 \
            -device scsi-cd,drive=cdrom0,bus=scsi1.0,bootindex=1 \
                -drive file=$(ls -t $ARCHISO_FOLDER/out/*.iso | head -n 1),media=cdrom,if=none,format=raw,cache=none,id=cdrom0

This will run against latest master and have a fixed partition setup on every login/re-login to the ISO. This enables quick testing by hitting Ctrl-D in the shell of the ISO.