mirror of
https://salsa.debian.org/raspi-team/image-specs
synced 2026-05-30 06:38:09 +02:00
Switch away from using a systemd service for the initial root resize. Instead, we resize the root partition and filesystem in the initrd. To simplify things, the initrd script will check whether it should resize the partition on every boot. It does this by checking if the entire disk (ignoring an empty 4MB) is in use. However, the scripts themselves are deleted from the system after the initrd is generated. After the image is installed, the resize script should exist only in the initrd. When the kernel gets upgraded (eg, for a security update) or a new initrd is generated due to a package install, the new initrd will not contain the resize script. At that point, nothing will remain from the image's initial resize bootstrapping process. This process (but not the scripts) is similar to what cloud-initramfs-growroot does. However, that particular package has an indirect dependency on Python, and we don't necessarily want that overhead in our images just for resizing.
152 lines
4.9 KiB
YAML
152 lines
4.9 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
|
|
trailing-newline: '1'
|
|
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 are _not_ enabled by default.
|
|
# Enable them by uncommenting the following line:
|
|
# deb http://deb.debian.org/debian __RELEASE__-backports main contrib non-free
|
|
__OTHER_APT_ENABLE__
|
|
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:
|
|
- ssh
|
|
- parted
|
|
- dosfstools
|
|
- iw
|
|
- wpasupplicant
|
|
- __FIRMWARE_PKG__
|
|
- __LINUX_IMAGE__
|
|
__EXTRA_PKGS__
|
|
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"
|
|
|
|
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_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
|
|
|
|
# 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: /
|