mirror of
https://salsa.debian.org/raspi-team/image-specs
synced 2026-05-30 06:38:09 +02:00
Commit 26a7de63b0 in master:
/etc/machine-id needs to exist and be empty on buster, while bullseye
needs this file not to exist at all. For now, treat both bullseye and
bookworm the same way.
167 lines
5.3 KiB
YAML
167 lines
5.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: 4MiB
|
|
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: /
|
|
|
|
- qemu-debootstrap: __RELEASE__
|
|
mirror: http://deb.debian.org/debian
|
|
target: /
|
|
arch: __ARCH__
|
|
components:
|
|
- main
|
|
- contrib
|
|
- non-free
|
|
unless: rootfs_unpacked
|
|
|
|
- create-file: /etc/apt/sources.list
|
|
contents: |+
|
|
deb http://deb.debian.org/debian __RELEASE__ main contrib non-free
|
|
deb http://security.debian.org/debian-security __SECURITY_SUITE__ main contrib non-free
|
|
__BACKPORTS__
|
|
|
|
unless: rootfs_unpacked
|
|
|
|
- copy-file: /etc/initramfs-tools/hooks/rpi-resizerootfs
|
|
src: rootfs/etc/initramfs-tools/hooks/rpi-resizerootfs
|
|
perm: 0755
|
|
unless: rootfs_unpacked
|
|
|
|
- copy-file: /etc/initramfs-tools/scripts/local-bottom/rpi-resizerootfs
|
|
src: rootfs/etc/initramfs-tools/scripts/local-bottom/rpi-resizerootfs
|
|
perm: 0755
|
|
unless: rootfs_unpacked
|
|
|
|
- chroot: /
|
|
shell: |
|
|
apt-get update
|
|
unless: rootfs_unpacked
|
|
|
|
- apt: install
|
|
packages:
|
|
- ca-certificates
|
|
- dosfstools
|
|
- iw
|
|
- parted
|
|
- ssh
|
|
- wpasupplicant
|
|
- __LINUX_IMAGE__
|
|
- __RASPI_FIRMWARE__
|
|
- __WIRELESS_FIRMWARE__
|
|
tag: /
|
|
unless: rootfs_unpacked
|
|
|
|
- cache-rootfs: /
|
|
unless: rootfs_unpacked
|
|
|
|
- shell: |
|
|
echo "__HOST__-$(date +%Y%m%d)" > "${ROOT?}/etc/hostname"
|
|
|
|
# Allow root logins locally with no password
|
|
sed -i 's,root:[^:]*:,root::,' "${ROOT?}/etc/shadow"
|
|
|
|
install -m 644 -o root -g root rootfs/etc/fstab "${ROOT?}/etc/fstab"
|
|
|
|
install -m 644 -o root -g root rootfs/etc/network/interfaces.d/eth0 "${ROOT?}/etc/network/interfaces.d/eth0"
|
|
install -m 600 -o root -g root rootfs/etc/network/interfaces.d/wlan0 "${ROOT?}/etc/network/interfaces.d/wlan0"
|
|
|
|
install -m 755 -o root -g root rootfs/usr/local/sbin/rpi-set-sysconf "${ROOT?}/usr/local/sbin/rpi-set-sysconf"
|
|
install -m 644 -o root -g root rootfs/etc/systemd/system/rpi-set-sysconf.service "${ROOT?}/etc/systemd/system/"
|
|
install -m 644 -o root -g root rootfs/boot/firmware/sysconf.txt "${ROOT?}/boot/firmware/sysconf.txt"
|
|
mkdir -p "${ROOT?}/etc/systemd/system/basic.target.requires/"
|
|
ln -s /etc/systemd/system/rpi-set-sysconf.service "${ROOT?}/etc/systemd/system/basic.target.requires/rpi-set-sysconf.service"
|
|
|
|
# Resize script is now in the initrd for first boot; no need to ship it.
|
|
rm -f "${ROOT?}/etc/initramfs-tools/hooks/rpi-resizerootfs"
|
|
rm -f "${ROOT?}/etc/initramfs-tools/scripts/local-bottom/rpi-resizerootfs"
|
|
|
|
install -m 644 -o root -g root rootfs/etc/systemd/system/rpi-reconfigure-raspi-firmware.service "${ROOT?}/etc/systemd/system/"
|
|
mkdir -p "${ROOT?}/etc/systemd/system/multi-user.target.requires/"
|
|
ln -s /etc/systemd/system/rpi-reconfigure-raspi-firmware.service "${ROOT?}/etc/systemd/system/multi-user.target.requires/rpi-reconfigure-raspi-firmware.service"
|
|
__FIX_FIRMWARE_PKG_NAME__
|
|
|
|
install -m 644 -o root -g root rootfs/etc/systemd/system/rpi-generate-ssh-host-keys.service "${ROOT?}/etc/systemd/system/"
|
|
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*
|
|
|
|
__EXTRA_ROOT_SHELL_CMDS__
|
|
root-fs: /
|
|
|
|
# Copy the relevant device tree files to the boot partition
|
|
- chroot: /
|
|
shell: |
|
|
install -m 644 -o root -g root __DTB__ /boot/firmware/
|
|
|
|
# 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
|
|
#
|
|
# These changes will be overwritten after the hardware is probed
|
|
# after dpkg reconfigures raspi-firmware (upon first boot).
|
|
- chroot: /
|
|
shell: |
|
|
sed -i 's/^/console=__SERIAL_CONSOLE__ /' /boot/firmware/cmdline.txt
|
|
sed -i 's/.dev.mmcblk0p2/LABEL=RASPIROOT/' /boot/firmware/cmdline.txt
|
|
|
|
__EXTRA_CHROOT_SHELL_CMDS__
|
|
|
|
# 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: /
|
|
|
|
# Clear /etc/machine-id and /var/lib/dbus/machine-id, as both should
|
|
# be auto-generated upon first boot. From the manpage
|
|
# (machine-id(5)):
|
|
#
|
|
# For normal operating system installations, where a custom image is
|
|
# created for a specific machine, /etc/machine-id should be
|
|
# populated during installation.
|
|
#
|
|
# Note this will also trigger ConditionFirstBoot=yes for systemd.
|
|
- chroot: /
|
|
shell: |
|
|
rm -f /etc/machine-id /var/lib/dbus/machine-id
|
|
__TOUCH_MACHINE_ID__
|