# See https://wiki.debian.org/RaspberryPi3 for known issues and more details. steps: - mkimg: "{{ output }}" size: 1500M - mklabel: msdos device: "{{ output }}" - mkpart: primary fs-type: 'fat32' device: "{{ output }}" start: 0% end: 20% tag: /boot - mkpart: primary device: "{{ output }}" start: 20% end: 100% tag: / - kpartx: "{{ output }}" - mkfs: vfat partition: /boot label: RASPIFIRM - mkfs: ext4 partition: / label: RASPIROOT - mount: / - mount: /boot mount-on: / dirname: '/boot/firmware' - unpack-rootfs: / # We need to use Debian buster (currently testing) instead of Debian stretch # (currently stable) for: # # linux ≥ 4.14 # Which includes the sdhost driver for faster SD card access and making the # WiFi chip available, and has the WiFi driver enabled. # # raspi3-firmware ≥ 1.20171201-1 # Which includes a recent enough firmware version to correctly pass the MAC # address to the kernel. This is a regression with Linux ≥ 4.12, see # https://github.com/raspberrypi/firmware/issues/846 # Also, this package contains a Raspberry Pi 3-specific firmware file # required by the WiFi driver. - qemu-debootstrap: buster mirror: http://deb.debian.org/debian target: / arch: arm64 components: - main - contrib - non-free unless: rootfs_unpacked # TODO(https://bugs.debian.org/877855): remove this workaround once # debootstrap is fixed - chroot: / shell: | echo 'deb http://deb.debian.org/debian buster main contrib non-free' > /etc/apt/sources.list apt-get update unless: rootfs_unpacked - apt: install packages: - ssh - parted - dosfstools # Contains /lib/firmware/brcm/brcmfmac43430-sdio.bin (required for WiFi). - firmware-brcm80211 - wireless-tools - wpasupplicant - raspi3-firmware - linux-image-arm64 tag: / unless: rootfs_unpacked - cache-rootfs: / unless: rootfs_unpacked - shell: | echo "rpi3" > "${ROOT?}/etc/hostname" # Allow root logins with no password sed -i 's,root:[^:]*:,root::,' "${ROOT?}/etc/shadow" install -m 644 -o root -g root fstab "${ROOT?}/etc/fstab" install -m 644 -o root -g root eth0 "${ROOT?}/etc/network/interfaces.d/eth0" install -m 755 -o root -g root set-sysconf "${ROOT?}/usr/local/sbin/set-sysconf" install -m 644 -o root -g root set-sysconf.service "${ROOT?}/etc/systemd/system" install -m 644 -o root -g root sysconf.txt "${ROOT?}/boot/firmware/sysconf.txt" mkdir -p "${ROOT?}/etc/systemd/system/basic.target.requires/" ln -s /etc/systemd/system/set-sysconf.service "${ROOT?}/etc/systemd/system/basic.target.requires/set-sysconf.service" install -m 755 -o root -g root rpi-resizerootfs "${ROOT?}/usr/sbin/rpi-resizerootfs" install -m 644 -o root -g root rpi-resizerootfs.service "${ROOT?}/etc/systemd/system" mkdir -p "${ROOT?}/etc/systemd/system/systemd-remount-fs.service.requires/" ln -s /etc/systemd/system/rpi-resizerootfs.service "${ROOT?}/etc/systemd/system/systemd-remount-fs.service.requires/rpi-resizerootfs.service" install -m 644 -o root -g root rpi-generate-ssh-host-keys.service "${ROOT?}/etc/systemd/system" mkdir -p "${ROOT?}/etc/systemd/system/multi-user.target.requires/" ln -s /etc/systemd/system/rpi-generate-ssh-host-keys.service "${ROOT?}/etc/systemd/system/multi-user.target.requires/rpi-generate-ssh-host-keys.service" rm -f ${ROOT?}/etc/ssh/ssh_host_*_key* root-fs: / # Clean up archive cache (likely not useful) and lists (likely outdated) to # reduce image size by several hundred megabytes. - chroot: / shell: | apt-get clean rm -rf /var/lib/apt/lists # Modify the kernel commandline we take from the firmware to boot from # the partition labeled raspiroot instead of forcing it to mmcblk0p2 - chroot: / shell: | ls -aR /boot sed -i 's/.dev.mmcblk0p2/LABEL=RASPIROOT/' /boot/firmware/cmdline.txt # TODO(https://github.com/larswirzenius/vmdb2/issues/24): remove once vmdb # clears /etc/resolv.conf on its own. - shell: | rm "${ROOT?}/etc/resolv.conf" root-fs: /