From 8bf8f7e95ebb0537eebb01a7a825988b6fbbde99 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Sun, 14 Jul 2019 16:58:28 +0200 Subject: [PATCH 1/1] general structure, + squash builder --- .gitignore | 10 ++ Makefile | 183 +++++++++++++++++++++++++ keys/debian-archive-stretch-stable.gpg | Bin 0 -> 2275 bytes keys/raspberrypi-archive-keyring.gpg | Bin 0 -> 1191 bytes keys/raspbian-archive-keyring.gpg | Bin 0 -> 1233 bytes 5 files changed, 193 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 keys/debian-archive-stretch-stable.gpg create mode 100644 keys/raspberrypi-archive-keyring.gpg create mode 100644 keys/raspbian-archive-keyring.gpg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4853b85 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +cfg_root/ +sys_root/ +rpi_root/ +img_mount/ +part_boot.img +part_root.img +rpi_boot.img +rpi_root.img +.*.swp +.*.swo diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..65005eb --- /dev/null +++ b/Makefile @@ -0,0 +1,183 @@ + +DEFAULT: _target +.PHONY: _target _qemu _partition _format _mount _bootstrap _install _sparse _copy _config _syslinux _umount _partcopy _squash _mbr + +ARCH := amd64 +KEYRING := keys/debian-archive-stretch-stable.gpg +BOOTSTRAP := http://cdn.debian.net/debian + +define SOURCES = +deb http://cdn.debian.net/debian stretch main +endef +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 + +ifdef disk +VOLUME := ${disk} +PBOOT := ${disk}1 +PROOT := ${disk}2 +SYSROOT := hdd_mount/ +CFGROOT := hdd_mount/ + +_target: _mbr _umount _config _install _partition + +_partition: +_format: _partition +_mount: _format +_bootstrap: _mount +_install: _bootstrap _mount +_config: _install _mount +_syslinux: _mount +_umount: _mount _config _syslinux +_mbr: _umount _syslinux + +else ifdef image +VOLUME := ${image} +PBOOT := part_boot.img +PROOT := part_root.img +SYSROOT := sys_root/ +CFGROOT := img_mount/ + +_target: _mbr _umount _partcopy _config _install + +_bootstrap: +_install: _bootstrap +_sparse: +_format: _sparse +_mount: _format +_copy: _install _mount +_config: _copy _mount +_syslinux: _mount +_umount: _mount _config _syslinux +_partition: +_partcopy: _partition _umount +_mbr: _partcopy _syslinux + +else ifdef squash +SQUASH := ${squash} +SYSROOT := sys_root/ +CFGROOT := cfg_root/ + +_target: _squash _install _config + +_bootstrap: +_install: _bootstrap +_copy: _install +_config: _copy +_squash: _config + +else ifdef raspi +VOLUME := ${image} +PBOOT := rpi_boot.img +PROOT := rpi_root.img +SYSROOT := rpi_root/ +CFGROOT := img_mount/ + +ARCH := armhf +KEYRING := keys/raspbian-archive-keyring.gpg +BOOTSTRAP := http://raspbian.raspberrypi.org/raspbian + +define SOURCES = +deb http://raspbian.raspberrypi.org/raspbian stretch main non-free firmware rpi +deb http://archive.raspberrypi.org/debian stretch main +endef +PACKAGES := ${PACKAGES} firmware-brcm8011 libraspberrypi-bin libraspberrypi0 pi-bluetooth raspberrypi-bootloader raspberrypi-kernel + +_target: _umount _partcopy _config _install + +_qemu: +_bootstrap: _qemu +_install: _bootstrap +_sparse: +_format: _sparse +_mount: _format +_copy: _install _mount +_config: _copy _mount +_umount: _mount _config +_partition: +_partcopy: _partition _umount + +else +_target: + false + +endif + +ifeq "${ARCH}" "amd64" +PACKAGES := ${PACKAGES} linux-image-amd64 +else ifeq "${ARCH}" "i386" +PACKAGES := ${PACKAGES} linux-image-686 +endif + +export SOURCES SYSROOT CFGROOT VOLUME PBOOT PROOT SQUASH ARCH KEYRING BOOTSTRAP + +${SYSROOT}: + btrfs subvol create "$$SYSROOT" || mkdir -p "$$SYSROOT}" + chmod 755 "$@" + +_qemu: ${SYSROOT}/usr/bin/qemu-arm-static +${SYSROOT}/usr/bin/qemu-arm-static: /usr/bin/qemu-arm-static ${SYSROOT} + mkdir -p "$${SYSROOT}"/usr/bin + chmod 755 "$${SYSROOT}/usr" "$${SYSROOT}/usr/bin" + cp -p "$<" "$@" + +_bootstrap: ${SYSROOT}/bin/sh +${SYSROOT}/bin/sh: | ${SYSROOT} + debootstrap --variant=minbase --arch="$${ARCH}" \ + --keyring="$${KEYRING}" \ + stretch "$${SYSROOT}" "$${BOOTSTRAP}" + +.PHONY: _aptkeys _norecommends +_aptkeys: ${SYSROOT}/etc/apt/trusted.gpg.d/ +_norecommends: ${SYSROOT}/etc/apt/apt.conf.d/10norecommends + +${SYSROOT}/etc/apt/apt.conf.d/10norecommends: ${SYSROOT} + mkdir -p "$(dir $@)" + printf 'APT::Install-Recommends "false";\n' >"$@" + chmod 644 "$@" + +${SYSROOT}/etc/apt/trusted.gpg.d/: ${SYSROOT} + mkdir -p "$@" + cp keys/*.gpg "$@" + +_install: ${SYSROOT} _aptkeys _norecommends + printf %s "$${SOURCES}" >"$${SYSROOT}/etc/apt/sources.list" + -cp /etc/resolv.conf "$${SYSROOT}/etc/" + -chroot "$${SYSROOT}" sh -c 'apt-mark showmanual |xargs apt-mark auto' + -chroot "$${SYSROOT}" apt-get update + chroot "$${SYSROOT}" ln -sf /bin/true /usr/local/sbin/invoke-rc.d + chroot "$${SYSROOT}" apt-get --yes install ${PACKAGES} + chroot "$${SYSROOT}" apt-get --yes --auto-remove purge + -chroot "$${SYSROOT}" apt-get --yes --auto-remove upgrade + chroot "$${SYSROOT}" apt-get clean + chroot "$${SYSROOT}" rm /usr/local/sbin/invoke-rc.d + +_copy: ${SYSROOT} + btrfs sub snap "$${SYSROOT}" "$${CFGROOT}" || \ + cp -a "$${SYSROOT}/." "$${CFGROOT}/" + +.PHONY: _main_config +_config: _main_config +_main_config: ${CFGROOT} cfg_seed/ + cp -a cfg_seed/. "$${CFGROOT}" + +${SQUASH}: ${CFGROOT} + -rm "$@" + mksquashfs "$$CFGROOT" "$$SQUASH" -comp xz + +_squash: ${SQUASH} + +clean: + [ "$${SYSROOT#/}" ] && [ "$${CFGROOT#/}" ] || false # (abort receipe) + -mount |grep -qwF "$${SYSROOT}/boot" && umount "$${SYSROOT}/boot" + -mount |grep -qwF "$${SYSROOT}/proc" && umount "$${SYSROOT}/proc" + -mount |grep -qwF "$${SYSROOT}/sys" && umount "$${SYSROOT}/sys" + -mount |grep -qwF "$${SYSROOT}/dev" && umount "$${SYSROOT}/dev" + -mount |grep -qwF "$${SYSROOT}" && umount "$${SYSROOT}" + -mount |grep -qwF "$${CFGROOT}" && umount "$${CFGROOT}" + if [ -d "$${SYSROOT}" ] && ! mount |grep -qwFe "$${SYSROOT}"; then \ + btrfs sub del "$${SYSROOT}" || echo rm -r "$${SYSROOT}"; \ + fi + if [ -d "$${CFGROOT}" ] && ! mount |grep -qwFe "$${CFGROOT}"; then \ + btrfs sub del "$${CFGROOT}" || echo rm -r "$${CFGROOT}"; \ + fi + -rm "$${SQUASH}" diff --git a/keys/debian-archive-stretch-stable.gpg b/keys/debian-archive-stretch-stable.gpg new file mode 100644 index 0000000000000000000000000000000000000000..2c3f78fc729cdb331b87a90bc9142ee38de699b6 GIT binary patch literal 2275 zcmV<92pspB0u2ONAc@@p5CG30Fki)pHEYrlV~=+aX%E^Vr6AyZA0=qw$|AUHhj+Ab zqqA`Y0sOl!bra4BVoLFZZXJ**n|C0n>uElr1|H+;07dIOS z$Mir)$kDmb=bmGmqH$3{7Rq|2AzV7bQ=`c$53f0)jzWaWAG`s&enu=?{Q+}WvZIMR z^|g0pB(hL4+ANV=UTveJox_48)fWLj3Ys!-yi+zzwuVw;t|$AGWw0U41HsDx$!0Rl zMO}HFoWDsi>crhQ2ySUA#=TLmEEd%MXY+~6Q)rqCkxb+eF!`FZk$cs#zE%mqb?a!k z+NNE`Y6D}5Y<8-1Z|=a{KFU-Z%Gkdaf_-pU>b96i+OU;BtTrKf$p&`|OhJ1{C zlih-cctJ$!-D_03!Cx$;akoe_K+uqKqK?l~DY(n7%v$nl?BHrhcI>88baFoie^%EV zhwmiUi7e|>R+9h`0RRECM?_^}X<=?4Q*>csY-J!)Wo%_(b7de)WqBYdIWKc`a%FU5 zXel5(WMyJ$VQwvQWo%_(b7eqmX>)XQE@Wk5X<=?IZ*pfoi2^+Y69EVSCj|moAc@@q z8v_Li4+)$A1q%rX2LlBa3JC}c1r`DW0RRFX0Rk6*0162Z?+-XC8hd2`k3A3mBC?pE z`*FYG27Zqc)Xhjx;t+_?rDk+aVtTDp2};_gF|qW>xyICXo^$DmXQcFt<5xSN;0;0W zFU}kRk*bXCM`E#LULI;XW4v`15R-#|?A|RjDi64=jxD3cLtZQpX@=Gp!Y7 z{QwS&FboPPV3|t;>R0e=Cno)gdv8^1%dI>DjAWVXypw}=p>%U>NZa|KSeUph6p~k8 zM_8od9sa+V22w3UGVLq2Tk=DegX}M%q|mGUU`1T1nw!rkj{zVr7TF$Z=Mw|J$%M=> zCjIYM(ydC_iGd0F)@2Nmz3zy9dTYEQr+EWZN@|=wmLo&Xzl=r9$eNUiZAbM+DZ=(2 zg82pA(nCR`iZHv;Mc(^FJ3)C*IDuLlyVmmZ%X+Wu(i2V67YE#f#9&)>9Q>WG2`Une zfvJ6*1r-?BceJLdbtX##sn4tcA!`385)m1qhmra^50-vwVJazN_Zw6-FAumS)Bi2@u15CI4P z1_c6HCHg-A3JDM~0e}Sw1>_8oI1m8i-jTyh=xO*9w+6f&(lco2G<2(MWQC5o$RvEE!$6Bl2@9OpnQiL-6(rKm? z-nE#ICebq&<>uB8zGY7n4@q=kqbg=i9=Ql#-~Tv{99n!^PFkAzHmjP5JH|NIPGB)l zhn&|O1ZCj*8sm0;oy^g_E z=nJ|U`>z|t8!T5XctXZ%PNSw?u)P(6@diPa{Ha#*V+;MMeqe-cBs%y2idhyUhK?y( zp-${QYHgmWV8}7X5p?oTc@H93rvz_xmReZacB;^SS@6%ydKR4Uig+jHBbJc!sGZCz zpv#qsmQLj{2c?5$2S}N)0ssJs0vrSo0SEvF1p-+o7W)7S2@u83UBbme%~_AZ5C2@b z832iZbT2L<%2*=Mq6BqjDQ^Ndgk(5cYH zR!|t2S08!-5!z+gtT2NQ#I;A`QJ_|g6_ld8v~Qqlo??r6=?o*1SDi@9hYMuP=!)R5 z%TjXv&T4FX*h6iM@SGF@ab47c-Uwvt3KMB7IKecqR4(|yJjNtLCBK_)Jc}sum8D#+ z4IV3q=&OO5$F!5`*n_a0b5t*jeW&aKULN*@4dJ9Vfd`KW5yBNS!Ee6imrk@k8$aG!U*svdTc1IRiK zF5(}o30vTGl{;*;W#;a|>1S5FgZhU_BE_>#QZFHv96J-KI71PfQM?6OD9!k(o*7wJ xSkjaNs>Q-6L51!sIRW-*@Uv0iG^w%#p06`x`}%gF>-*mv*6h%KZQ`&3000OsE~5Yd literal 0 HcmV?d00001 diff --git a/keys/raspberrypi-archive-keyring.gpg b/keys/raspberrypi-archive-keyring.gpg new file mode 100644 index 0000000000000000000000000000000000000000..ec758a15dcb7aa849fe5c286d88adf537da07687 GIT binary patch literal 1191 zcmV;Y1X%l-0SyFC-R_S82mq_Xq#AHyU!QwtGcm4R@PLL6L4LMVuSDD}S^bWgD(f z8w646R_0hcFid6w?MWv(jM768U&qzSWkZrTA!qok;;q3vaYXnZGm3m&Gv>jivG za7)9LBadobb$$-gJ~#86|Z)G z%BB^`+S8w79&uRUhy-a*cWx%zsymS~@PC5px>1zk^v%a-A^ z13H#9Tj$tY4{F+9kGCywy`qeEep!&8DzKv`*{N6(L9GGfT7*K6E!DjGLsa7J_RK9f zW^EDTumS)Bxd9CXPu=d10SExim0Lk&PPcw;{Yo+6v#`8q#B-r`j5`_*xDK zCWa;5&EWUr(pJybQ^)J&POU8XkEbCWTKcbsFX(Y%-Uo*o0P6WeG3XV3_DasA*Yw)< zR-_tBg0tOjR4)HDw++^#0=kPr`=+4gygHzpz2-5t@qBRfOC;^{=j86C`T`B9XNJ9H z(niMc5|SMZaB5p%m}J#v1NrE9exdgvr-_TKZ8n5mbCwsoG7FxcifEjV6OfUqMmZ)X z&JTK#?=a&(OP)X7<1VSFDqBKy-hRn}1jf{`&zV=AD3~~!d@W%@g8pHf#+Y752}@j6 zSJLgCjkjX;`FY$uL5?8+5di=Ji2)x37y$wR2?YXA-R_S98w>yn2@ry@DUyGqFg`_! z2mf?{wW`p}O}n`w!a2E<*Xw+8b)hjp)*tuBD&&2iSYD3FRC^H|z}pS?gpD#~3hFzm zRP`ih9UMXy@vrMIrd@T+MaiRNZpMf{twCpv|9l$}uqWlnItZW3lkiC5BvE`7^z63S zP_U?mQKY~Vq(+T&PvYI;@PeEd?Ft@o*y~wL<&jXlPv5MzJh7EDU#j+)X!pvo`4Ta{ znjb*V{NrYFax=-lI2A(0xGg_*DS!mwHDBnM@KDZ&WI7@>#rk)=&V<*{iWSqcc$sIa zTh%h_P)c%5B{Gj^+H_Vx<@C+wVtcMV`p^QtJm( zbt-pSjSf2f>lpyXa#ruMvl*a~bH)1r4uc;)MCe)%sbh>c#z@(>gCXt%zmPi`IKcBc z1hyn0(A*d@ut#D`JhgPk_BZ_ED2q-|uPxdFH$h_Xd)JqP=pRi8Y_L0PW&6Wj^RQBVSOQG@Z)vw5 z)exaU-m)Kpxmhg;7T+P}`5c0hS8Ka5QzA$ID<@INY+w(z2S*Q3r5UcakumY^UJ^D` z+EKZdQlTX$@Azb2fMoy?0RRECN=<2NWgt{&Z*6dMZ*CwcQeks&Vr6o2c_2_}AVg(i zX<=?4VRCI~W*|XQO?EabRz^@MAUthwbZBpFaC2{NKxb`XX>2ZIZ*4w_0XPH`0RjLb z1p-fa!f65<0|pBT2nPcK1{DYb2?`4Y76JnS0v-VZ7k~f?2@sKGlZ}x5-7cXD2mr+U z<@g5B*u))XINMIJq>orm-9Iyr{EI)wPl244p;iBDNtkx%)qpnz41HSJ^of-DA?Fs$ zm>QB{Z>ghdxn0m6!0>Y-u?Z%Ez7>lWg z^F=L#1%)Zp9CcLQmnBHe5P#VlVw8Jhr!mc!sg|olpAY>`-+i zrwJ(19;YDJ)c^R?e1udv)D)L=(q0(^TRxzF|Ez%bG)#GMEiaKdtPst*$5I}D12uFa%!1}9 z6kVZQu&FK&dFw9K8 z2{t#+pjUF{XizH7Ve_1XRDZ$!%AR;zM;cT zZ+FFxUjPvS00D^s9|RZy0ssjG0#A6tX#yJz0162Zk!6#Okp0~*EW-!@qBEV2G$GLO za{p?n9#ugmAlBIONUj4dyDteI1x_4VwY<=I6iOpo_VJ2|I`r&{YYVn=&Z~oGgxp(s z28D#KMe+nz9q+c9_)ah`otuZ5O`(m`0Pk`Z7sCQf6^WhC{2DVai;i%@mo6`Zrk@yKE8A1>u2VD9vs@=k8y;K>B*E1L vn$Ni-5>?)d^5cjU@!t24JXLnUVEu?)?E{fxrcsM-z{P+pGkx~