mirror of
https://gitlab.com/alemaire/image-specs.git
synced 2025-01-11 01:53:30 +00:00
5e2dc9c569
This speeds up iterative development of a vmdb specification file: the output of qemu-debootstrap and the apt installation additinal packages are cached. They take up most of the time of a full run. If modifying other parts of raspi3.yaml, this means an iteration drops from about 20 minutes to 16 seconds on my laptop. If making changes to the cached parts, the cache tarball needs to be deleted between runs. The --rootfs-tarball options MUST now be used on all invocations.
141 lines
4.3 KiB
YAML
141 lines
4.3 KiB
YAML
# 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%
|
|
part-tag: boot-part
|
|
|
|
- mkpart: primary
|
|
device: "{{ output }}"
|
|
start: 20%
|
|
end: 100%
|
|
part-tag: root-fs
|
|
|
|
- kpartx: "{{ output }}"
|
|
|
|
- mkfs: vfat
|
|
partition: boot-part
|
|
label: RASPIFIRM
|
|
|
|
- mkfs: ext4
|
|
partition: root-fs
|
|
label: RASPIROOT
|
|
|
|
- mount: root-fs
|
|
|
|
- mount: boot-part
|
|
mount-on: root-fs
|
|
dirname: '/boot/firmware'
|
|
fs-tag: boot-fs
|
|
|
|
- unpack-rootfs: root-fs
|
|
|
|
# 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: root-fs
|
|
arch: arm64
|
|
components:
|
|
- main
|
|
- contrib
|
|
- non-free
|
|
unless: rootfs_unpacked
|
|
|
|
# TODO(https://bugs.debian.org/877855): remove this workaround once
|
|
# debootstrap is fixed
|
|
- chroot: root-fs
|
|
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
|
|
fs-tag: root-fs
|
|
unless: rootfs_unpacked
|
|
|
|
- cache-rootfs: root-fs
|
|
unless: rootfs_unpacked
|
|
|
|
- shell: |
|
|
echo "rpi3" > "${ROOT?}/etc/hostname"
|
|
|
|
# '..VyaTFxP8kT6' is crypt.crypt('raspberry', '..')
|
|
sed -i 's,root:[^:]*,root:..VyaTFxP8kT6,' "${ROOT?}/etc/shadow"
|
|
|
|
sed -i 's,#PermitRootLogin prohibit-password,PermitRootLogin yes,g' "${ROOT?}/etc/ssh/sshd_config"
|
|
|
|
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"
|
|
|
|
mkdir -p "${ROOT?}/etc/iptables"
|
|
install -m 644 -o root -g root rules.v4 "${ROOT?}/etc/iptables/rules.v4"
|
|
install -m 644 -o root -g root rules.v6 "${ROOT?}/etc/iptables/rules.v6"
|
|
|
|
install -m 755 -o root -g root rpi3-resizerootfs "${ROOT?}/usr/sbin/rpi3-resizerootfs"
|
|
install -m 644 -o root -g root rpi3-resizerootfs.service "${ROOT?}/etc/systemd/system"
|
|
mkdir -p "${ROOT?}/etc/systemd/system/systemd-remount-fs.service.requires/"
|
|
ln -s /etc/systemd/system/rpi3-resizerootfs.service "${ROOT?}/etc/systemd/system/systemd-remount-fs.service.requires/rpi3-resizerootfs.service"
|
|
|
|
install -m 644 -o root -g root rpi3-generate-ssh-host-keys.service "${ROOT?}/etc/systemd/system"
|
|
mkdir -p "${ROOT?}/etc/systemd/system/multi-user.target.requires/"
|
|
ln -s /etc/systemd/system/rpi3-generate-ssh-host-keys.service "${ROOT?}/etc/systemd/system/multi-user.target.requires/rpi3-generate-ssh-host-keys.service"
|
|
rm -f ${ROOT?}/etc/ssh/ssh_host_*_key*
|
|
|
|
cat >> "${ROOT?}/etc/motd" <<'EOT'
|
|
|
|
Please change the root password by running passwd
|
|
EOT
|
|
root-fs: root-fs
|
|
|
|
# Clean up archive cache (likely not useful) and lists (likely outdated) to
|
|
# reduce image size by several hundred megabytes.
|
|
- chroot: root-fs
|
|
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: root-fs
|
|
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: root-fs
|