3 .PHONY: _target _qemu _partition _format _mount _bootstrap _install _sparse _copy _config _syslinux _umount _partcopy _squash _mbr
6 KEYRING := keys/debian-archive-stretch-stable.gpg
7 BOOTSTRAP := http://cdn.debian.net/debian
10 deb http://cdn.debian.net/debian stretch main
12 PACKAGES := ${PACKAGES} apt btrfs-tools busybox-static bzip2 ca-certificates cron debian-archive-keyring deborphan firmware-linux-free gzip htop ifupdown init iputils-ping irqbalance isc-dhcp-client less make net-tools nmap ntpdate openssh-client psmisc rsync sshfs sudo systemd traceroute unzip vim wget wireless-tools wpasupplicant xz-utils zip
21 _target: _mbr _umount _config _install _partition
27 _install: _bootstrap _mount
28 _config: _install _mount
30 _umount: _mount _config _syslinux
31 _mbr: _umount _syslinux
35 PBOOT := part_boot.img
36 PROOT := part_root.img
40 _target: _mbr _umount _partcopy _config _install
47 _copy: _install _mount
50 _umount: _mount _config _syslinux
52 _partcopy: _partition _umount
53 _mbr: _partcopy _syslinux
60 _target: _squash _install _config
76 KEYRING := keys/raspbian-archive-keyring.gpg
77 BOOTSTRAP := http://raspbian.raspberrypi.org/raspbian
80 deb http://raspbian.raspberrypi.org/raspbian stretch main non-free firmware rpi
81 deb http://archive.raspberrypi.org/debian stretch main
83 PACKAGES := ${PACKAGES} firmware-brcm8011 libraspberrypi-bin libraspberrypi0 pi-bluetooth raspberrypi-bootloader raspberrypi-kernel
85 _target: _umount _partcopy _config _install
93 _copy: _install _mount
95 _umount: _mount _config
97 _partcopy: _partition _umount
105 ifeq "${ARCH}" "amd64"
106 PACKAGES := ${PACKAGES} linux-image-amd64
107 else ifeq "${ARCH}" "i386"
108 PACKAGES := ${PACKAGES} linux-image-686
111 export SOURCES SYSROOT CFGROOT VOLUME PBOOT PROOT SQUASH ARCH KEYRING BOOTSTRAP
114 btrfs subvol create "$$SYSROOT" || mkdir -p "$$SYSROOT}"
117 _qemu: ${SYSROOT}/usr/bin/qemu-arm-static
118 ${SYSROOT}/usr/bin/qemu-arm-static: /usr/bin/qemu-arm-static ${SYSROOT}
119 mkdir -p "$${SYSROOT}"/usr/bin
120 chmod 755 "$${SYSROOT}/usr" "$${SYSROOT}/usr/bin"
123 _bootstrap: ${SYSROOT}/bin/sh
124 ${SYSROOT}/bin/sh: | ${SYSROOT}
125 debootstrap --variant=minbase --arch="$${ARCH}" \
126 --keyring="$${KEYRING}" \
127 stretch "$${SYSROOT}" "$${BOOTSTRAP}"
129 .PHONY: _aptkeys _norecommends
130 _aptkeys: ${SYSROOT}/etc/apt/trusted.gpg.d/
131 _norecommends: ${SYSROOT}/etc/apt/apt.conf.d/10norecommends
133 ${SYSROOT}/etc/apt/apt.conf.d/10norecommends: ${SYSROOT}
135 printf 'APT::Install-Recommends "false";\n' >"$@"
138 ${SYSROOT}/etc/apt/trusted.gpg.d/: ${SYSROOT}
142 _install: ${SYSROOT} _aptkeys _norecommends
143 printf %s "$${SOURCES}" >"$${SYSROOT}/etc/apt/sources.list"
144 -cp /etc/resolv.conf "$${SYSROOT}/etc/"
145 -chroot "$${SYSROOT}" sh -c 'apt-mark showmanual |xargs apt-mark auto'
146 -chroot "$${SYSROOT}" apt-get update
147 chroot "$${SYSROOT}" ln -sf /bin/true /usr/local/sbin/invoke-rc.d
148 chroot "$${SYSROOT}" apt-get --yes install ${PACKAGES}
149 chroot "$${SYSROOT}" apt-get --yes --auto-remove purge
150 -chroot "$${SYSROOT}" apt-get --yes --auto-remove upgrade
151 chroot "$${SYSROOT}" apt-get clean
152 chroot "$${SYSROOT}" rm /usr/local/sbin/invoke-rc.d
155 btrfs sub snap "$${SYSROOT}" "$${CFGROOT}" || \
156 cp -a "$${SYSROOT}/." "$${CFGROOT}/"
159 _config: _main_config
160 _main_config: ${CFGROOT} cfg_seed/
161 cp -a cfg_seed/. "$${CFGROOT}"
163 ${SQUASH}: ${CFGROOT}
165 mksquashfs "$$CFGROOT" "$$SQUASH" -comp xz
170 [ "$${SYSROOT#/}" ] && [ "$${CFGROOT#/}" ] || false # (abort receipe)
171 -mount |grep -qwF "$${SYSROOT}/boot" && umount "$${SYSROOT}/boot"
172 -mount |grep -qwF "$${SYSROOT}/proc" && umount "$${SYSROOT}/proc"
173 -mount |grep -qwF "$${SYSROOT}/sys" && umount "$${SYSROOT}/sys"
174 -mount |grep -qwF "$${SYSROOT}/dev" && umount "$${SYSROOT}/dev"
175 -mount |grep -qwF "$${SYSROOT}" && umount "$${SYSROOT}"
176 -mount |grep -qwF "$${CFGROOT}" && umount "$${CFGROOT}"
177 if [ -d "$${SYSROOT}" ] && ! mount |grep -qwFe "$${SYSROOT}"; then \
178 btrfs sub del "$${SYSROOT}" || echo rm -r "$${SYSROOT}"; \
180 if [ -d "$${CFGROOT}" ] && ! mount |grep -qwFe "$${CFGROOT}"; then \
181 btrfs sub del "$${CFGROOT}" || echo rm -r "$${CFGROOT}"; \