]> git.plutz.net Git - rpi_small/blob - Makefile
debootstrap raspbian and build image file from it
[rpi_small] / Makefile
1 .FORCE:
2
3 define PARTITIONS =
4 label: dos\n\
5 unit: sectors\n\
6 \n\
7 : start=8192, size=114688, type=1, type=c\n\
8 : start=122880, type=83\n
9 endef
10
11 define SOURCES = 
12 deb     http://raspbian.raspberrypi.org/raspbian stretch main non-free firmware rpi\n\
13 deb     http://archive.raspberrypi.org/debian stretch main\n
14 endef
15 BOOTSTRAP := http://raspbian.raspberrypi.org/raspbian
16
17 define SOURCES = 
18 deb     http://localhost/raspbian stretch main non-free firmware rpi\n
19 endef
20 BOOTSTRAP := http://localhost/raspbian
21
22 PACKAGES := apt apt-transport-https bluez bluez-firmware btrfs-tools busybox-static bzip2 ca-certificates cron deborphan firmware-atheros firmware-brcm80211 firmware-libertas firmware-linux-free firmware-misc-nonfree firmware-realtek gzip htop ifupdown init iptables iputils-ping irqbalance isc-dhcp-client less libraspberrypi-bin libraspberrypi0 make net-tools nmap ntpdate openssh-client openssh-server p7zip-full raspberrypi-bootloader raspberrypi-kernel rpi-update rsync ssh sshfs sudo systemd traceroute unace unrar-free unzip vim wget wireless-tools wpasupplicant xz-utils zip
23
24 raspi_root: /usr/bin/qemu-arm-static
25         btrfs subvolume create "$@" || mkdir "$@"
26         mkdir -p "$@/usr/bin"
27         chmod 755 -R "$@/"
28         cp -p "$<" "$@/usr/bin/"
29         debootstrap --keyring=./raspbian-archive-keyring.gpg \
30                 --arch=armhf --variant=minbase \
31                 stretch "$@/" "${BOOTSTRAP}"
32
33 raspi_root/: raspi_root .FORCE
34         printf '${SOURCES}' >$@/etc/apt/sources.list
35         -chroot "$@" apt-key add - <./raspberrypi-archive-keyring.gpg
36         -cp /etc/resolv.conf "$@etc/"
37         # for tree in ${CONFIG}; do for file in apt default timezone; do cp -av "$$tree/etc/$$file" "$@/etc/" || true; done; done
38         -chroot "$@" sh -c 'apt-mark showmanual |xargs apt-mark auto'
39         -chroot "$@" apt-get update
40         chroot "$@" ln -sf /bin/true /usr/local/sbin/invoke-rc.d
41         chroot "$@" apt-get --yes install ${PACKAGES}
42         chroot "$@" apt-get --yes --auto-remove purge
43         chroot "$@" apt-get --yes --auto-remove upgrade
44         chroot "$@" rm /usr/local/sbin/invoke-rc.d
45         chroot "$@" apt-get clean
46         touch "$@"
47
48 raspi.img: raspi_root/
49         -rmdir "$@.mnt"
50         mkdir "$@.mnt"
51         dd bs=1M count=0 seek=1024 of="$@"
52         printf '${PARTITIONS}' |sfdisk "$@"
53         lo=$$(losetup -f); image='$@'; \
54         start=$$(sfdisk --dump "$$image" |sed -rn 's;^.*start= *([0-9]+),.*type=83;\1;p'); \
55         size=$$(sfdisk --dump "$$image" |sed -rn 's;^.*size= *([0-9]+),.*type=83;\1;p'); \
56         losetup -o $$((start * 512)) --sizelimit $$((size * 512)) "$${lo}" "$$image" && \
57         mkfs.ext4 "$$lo" && mount -t ext4 "$$lo" "$@.mnt/";
58         mkdir "$@.mnt/boot"
59         lo=$$(losetup -f); image='$@'; \
60         start=$$(sfdisk --dump "$$image" |sed -rn 's;^.*start= *([0-9]+),.*type=c;\1;p'); \
61         size=$$(sfdisk --dump "$$image" |sed -rn 's;^.*size= *([0-9]+),.*type=c;\1;p'); \
62         losetup -o $$((start * 512)) --sizelimit $$((size * 512)) "$${lo}" "$$image" && \
63         mkfs.vfat "$$lo" && mount -t vfat "$$lo" "$@.mnt/boot";
64         rsync -av "$<" "$@.mnt/"
65         umount "$@.mnt/boot/" "$@.mnt/"
66         losetup -a |sed -rn '/$@/{s;^([^:]+):.*$$;\1;p;q}' |xargs losetup -d
67         losetup -a |sed -rn '/$@/{s;^([^:]+):.*$$;\1;p;q}' |xargs losetup -d
68         rmdir "$@.mnt/"