Skip to content
This repository has been archived by the owner on Jul 19, 2019. It is now read-only.

Raspi Zero W Support #60

Closed
wants to merge 5 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
150 changes: 150 additions & 0 deletions raspi0w.yaml
@@ -0,0 +1,150 @@
# 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: sid
mirror: http://deb.debian.org/debian
target: /
arch: armel
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 sid 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-rpi
tag: /
unless: rootfs_unpacked

- cache-rootfs: /
unless: rootfs_unpacked

- shell: |
echo "rpi-z" > "${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*

cp "${ROOT?}/usr/lib/linux-image-4.19.0.5-rpi/bcm2835-rpi-zero-w.dtb" "${ROOT?}/boot/"

cat >> "${ROOT?}/etc/motd" <<'EOT'

Please change the root password by running passwd
EOT
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
#
# Enable UART in the boot loader to debug
#
# Tell start.elf that the kernel is upstream, so the BCM2835 dtb gets loaded
# From:
# https://www.raspberrypi.org/forums/viewtopic.php?p=1456353&sid=4fb9bf969c9ef5594f38e028b36e39c6#p1456353
#
- chroot: /
shell: |
ls -aR /boot
sed -i 's/.dev.mmcblk0p2/LABEL=RASPIROOT/' /boot/firmware/cmdline.txt
sed -i 's/BOOT_UART=0/BOOT_UART=1/' /boot/firmware/bootcode.bin
sed -i '/enable_uart=1/a upstream_kernel=1' /boot/firmware/config.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: /