diff options
author | Andrew Cady <d@jerkface.net> | 2018-06-13 23:27:47 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2018-06-13 23:27:47 -0400 |
commit | 1735f15a8c61400d92e46b9a2472ba8070c81107 (patch) | |
tree | 520b8ded31f40326b65624db6a884c868e0ea4b8 /build-rootfs.sh | |
parent | 3b6e13e10c96b5d7dca88fb2af3a1c662bf62954 (diff) |
build-rootfs.sh builds the rootfs
Diffstat (limited to 'build-rootfs.sh')
-rwxr-xr-x | build-rootfs.sh | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/build-rootfs.sh b/build-rootfs.sh new file mode 100755 index 0000000..63eb4c9 --- /dev/null +++ b/build-rootfs.sh | |||
@@ -0,0 +1,313 @@ | |||
1 | #!/bin/sh -e | ||
2 | release=stretch | ||
3 | img_name=t3 | ||
4 | img_file=debootstrap/${release}-minbase-amd64.${img_name}.btrfs | ||
5 | |||
6 | die() { printf '%s\n' "$*" >&2; exit 1; } | ||
7 | |||
8 | chroot="./debootstrap.sh chroot $release $img_name" | ||
9 | img_sh="./debootstrap.sh sh $release $img_name" | ||
10 | |||
11 | install_packages() | ||
12 | { | ||
13 | # $chroot env DEBIAN_FRONTEND=noninteractive apt-get -y install "$@" | ||
14 | (set -x; ./debootstrap.sh add "$release" "$img_name" "$@") | ||
15 | } | ||
16 | |||
17 | defrag() | ||
18 | { | ||
19 | $img_sh btrfs fi def -rc . | ||
20 | } | ||
21 | |||
22 | xorg_packages() | ||
23 | { | ||
24 | wordlines xorg libxss1 | ||
25 | |||
26 | } | ||
27 | |||
28 | wordlines() { printf '%s\n' "$@"; } | ||
29 | |||
30 | useful_packages() | ||
31 | { | ||
32 | wordlines vim-tiny git tmux ssh | ||
33 | } | ||
34 | |||
35 | network_packages() | ||
36 | { | ||
37 | wordlines \ | ||
38 | network-manager avahi-daemon libnss-mdns \ | ||
39 | iproute2 iw iputils-ping \ | ||
40 | firmware-iwlwifi firmware-linux firmware-linux-nonfree \ | ||
41 | firmware-atheros firmware-linux-free firmware-b43legacy-installer \ | ||
42 | firmware-ti-connectivity firmware-libertas firmware-ipw2x00 \ | ||
43 | firmware-ralink firmware-b43-installer firmware-realtek firmware-iwlwifi \ | ||
44 | firmware-brcm80211 firmware-zd1211 | ||
45 | } | ||
46 | |||
47 | filesystem_tool_packages() | ||
48 | { | ||
49 | wordlines btrfs-progs cryptsetup-bin hfsprogs mdadm nbd-client ntfs-3g | ||
50 | } | ||
51 | |||
52 | boot_tool_packages() | ||
53 | { | ||
54 | wordlines grub-pc isolinux initramfs-tools | ||
55 | } | ||
56 | |||
57 | samizdat_dep_packages() | ||
58 | { | ||
59 | wordlines \ | ||
60 | ca-certificates cryptsetup-bin dnsmasq eject \ | ||
61 | gnupg gnupg2 gnupg-agent grub2-common grub-common grub-pc \ | ||
62 | grub-pc-bin hfsprogs hfsutils nbd-server netscript-ipfilter \ | ||
63 | openssl pinentry-curses strongswan tor xorriso | ||
64 | } | ||
65 | |||
66 | find_prog() | ||
67 | { | ||
68 | want_prog=$1 | ||
69 | prog=$(which "$want_prog") && return | ||
70 | if [ "$SUDO_USER" -a "$(id -u)" = 0 ]; then | ||
71 | prog=$(sh -c 'su - "$SUDO_USER" -c "which xmonad"') | ||
72 | else | ||
73 | false | ||
74 | fi | ||
75 | } | ||
76 | |||
77 | install_program_from_path() | ||
78 | { | ||
79 | find_prog "$1" || die "program not found: $1" | ||
80 | $img_sh cp -L "$prog" ./usr/local/bin/"$1" | ||
81 | } | ||
82 | |||
83 | install_xmonad() | ||
84 | { | ||
85 | install_program_from_path xmonad | ||
86 | $chroot ln -s /usr/local/bin/xmonad /etc/alternatives/x-window-manager | ||
87 | $chroot ln -s /etc/alternatives/x-window-manager /usr/bin/x-window-manager | ||
88 | } | ||
89 | |||
90 | kernel_packages() | ||
91 | { | ||
92 | wordlines busybox cpio firmware-linux-free \ | ||
93 | initramfs-tools initramfs-tools-core irqbalance \ | ||
94 | klibc-utils kmod libklibc libnuma1 linux-base \ | ||
95 | linux-image-4.9.0-6-amd64 linux-image-amd64 \ | ||
96 | systemd-sysv | ||
97 | } | ||
98 | |||
99 | install_apt_cache() | ||
100 | { | ||
101 | $img_sh rsync -RaP /var/cache/apt --exclude archives ./ | ||
102 | } | ||
103 | |||
104 | install_kiki() | ||
105 | { | ||
106 | install_program_from_path cokiki | ||
107 | install_program_from_path kiki | ||
108 | } | ||
109 | |||
110 | install_samizdat() | ||
111 | { | ||
112 | srcdir=$(pwd) || return | ||
113 | export srcdir | ||
114 | $img_sh sh -c 'instdir=$(pwd) && cd "$srcdir" && make instdir="${instdir}" install install-configuration' | ||
115 | } | ||
116 | |||
117 | make_bootable() | ||
118 | { | ||
119 | ln -sf "$PWD"/"${img_file}" /srv/nbd.btrfs | ||
120 | btrfstune -S1 /srv/nbd.btrfs | ||
121 | } | ||
122 | |||
123 | print_config_dat() | ||
124 | { | ||
125 | # perl -n -00 -e '/^Flags:.*seen/m && print;' /var/cache/debconf/config.dat > config.seen.dat | ||
126 | cat <<'EOF' | ||
127 | |||
128 | Name: debconf/frontend | ||
129 | Template: debconf/frontend | ||
130 | Value: Noninteractive | ||
131 | Owners: debconf | ||
132 | Flags: seen | ||
133 | |||
134 | Name: debconf/priority | ||
135 | Template: debconf/priority | ||
136 | Value: critical | ||
137 | Owners: debconf | ||
138 | Flags: seen | ||
139 | |||
140 | Name: locales/locales_to_be_generated | ||
141 | Template: locales/locales_to_be_generated | ||
142 | Value: en_US.UTF-8 UTF-8 | ||
143 | Owners: locales | ||
144 | Flags: seen | ||
145 | |||
146 | Name: locales/default_environment_locale | ||
147 | Template: locales/default_environment_locale | ||
148 | Value: en_US.UTF-8 | ||
149 | Owners: locales | ||
150 | Flags: seen | ||
151 | Variables: | ||
152 | locales = en_US.UTF-8 | ||
153 | |||
154 | Name: tzdata/Areas | ||
155 | Template: tzdata/Areas | ||
156 | Value: US | ||
157 | Owners: tzdata | ||
158 | Flags: seen | ||
159 | |||
160 | Name: tzdata/Zones/Etc | ||
161 | Template: tzdata/Zones/Etc | ||
162 | Value: UTC | ||
163 | Owners: tzdata | ||
164 | Flags: seen | ||
165 | |||
166 | Name: tzdata/Zones/US | ||
167 | Template: tzdata/Zones/US | ||
168 | Value: Michigan | ||
169 | Owners: tzdata | ||
170 | Flags: seen | ||
171 | |||
172 | Name: firmware-ipw2x00/license/accepted | ||
173 | Template: firmware-ipw2x00/license/accepted | ||
174 | Owners: firmware-ipw2x00 | ||
175 | |||
176 | Name: firmware-ipw2x00/license/error | ||
177 | Template: firmware-ipw2x00/license/error | ||
178 | Owners: firmware-ipw2x00 | ||
179 | |||
180 | Name: b43-fwcutter/install-unconditional | ||
181 | Template: b43-fwcutter/install-unconditional | ||
182 | Value: true | ||
183 | Owners: b43-fwcutter | ||
184 | |||
185 | EOF | ||
186 | } | ||
187 | |||
188 | install_config_dat() | ||
189 | { | ||
190 | print_config_dat | $img_sh sh -c 'cat >> ./var/cache/debconf/config.dat' | ||
191 | } | ||
192 | |||
193 | all_packages() | ||
194 | { | ||
195 | (kernel_packages | ||
196 | network_packages | ||
197 | useful_packages | ||
198 | filesystem_tool_packages | ||
199 | boot_tool_packages | ||
200 | samizdat_dep_packages | ||
201 | xorg_packages) | sort -u | ||
202 | } | ||
203 | |||
204 | main() | ||
205 | { | ||
206 | ./debootstrap.sh init $release | ||
207 | ./debootstrap.sh new $release $img_name | ||
208 | |||
209 | install_config_dat | ||
210 | |||
211 | install_packages $(kernel_packages) | ||
212 | install_packages $(network_packages) | ||
213 | install_packages $(useful_packages) | ||
214 | install_packages $(filesystem_tool_packages) | ||
215 | install_packages $(boot_tool_packages) | ||
216 | install_packages $(samizdat_dep_packages) | ||
217 | install_packages $(xorg_packages) | ||
218 | install_xmonad | ||
219 | |||
220 | # install_apt_cache | ||
221 | install_samizdat | ||
222 | install_kiki | ||
223 | |||
224 | make_bootable | ||
225 | } | ||
226 | |||
227 | if [ "${0##*/}" = build-rootfs.sh ]; then | ||
228 | main | ||
229 | fi | ||
230 | |||
231 | |||
232 | exit | ||
233 | : <<'EOF' | ||
234 | # manual installs | ||
235 | |||
236 | # essential tools | ||
237 | vim-tiny | ||
238 | git | ||
239 | tmux | ||
240 | ssh | ||
241 | |||
242 | # filesystem access | ||
243 | btrfs-tools | ||
244 | cryptsetup | ||
245 | hfsprogs | ||
246 | mdadm | ||
247 | nbd-client | ||
248 | ntfs-3g | ||
249 | |||
250 | # bootloaders | ||
251 | grub-pc | ||
252 | isolinux | ||
253 | initramfs-tools | ||
254 | |||
255 | # network | ||
256 | network-manager | ||
257 | avahi-daemon | ||
258 | libnss-mdns | ||
259 | |||
260 | # network tools | ||
261 | iproute2 | ||
262 | iw | ||
263 | iputils-ping | ||
264 | |||
265 | # wifi | ||
266 | firmware-iwlwifi | ||
267 | firmware-linux | ||
268 | firmware-linux-nonfree | ||
269 | |||
270 | # apt-cache pkgnames firmware|while read line; do apt-cache show $line|grep -qi wireless && echo $line; done | ||
271 | firmware-atheros | ||
272 | firmware-linux-free | ||
273 | firmware-b43legacy-installer | ||
274 | firmware-ti-connectivity | ||
275 | firmware-libertas | ||
276 | firmware-ipw2x00 | ||
277 | firmware-ralink | ||
278 | firmware-b43-installer | ||
279 | firmware-realtek | ||
280 | firmware-iwlwifi | ||
281 | firmware-brcm80211 | ||
282 | firmware-zd1211 | ||
283 | |||
284 | # graphics | ||
285 | xorg | ||
286 | libxss1 # for xmonad, to be installed via binary | ||
287 | |||
288 | # samizdat deps | ||
289 | |||
290 | btrfs-progs | ||
291 | ca-certificates | ||
292 | cryptsetup-bin | ||
293 | dnsmasq | ||
294 | eject | ||
295 | gnupg | ||
296 | gnupg2 | ||
297 | gnupg-agent | ||
298 | grub2-common | ||
299 | grub-common | ||
300 | grub-pc | ||
301 | grub-pc-bin | ||
302 | hfsprogs | ||
303 | hfsutils | ||
304 | nbd-server | ||
305 | netscript-ipfilter | ||
306 | openssl | ||
307 | pinentry-curses | ||
308 | strongswan | ||
309 | tor | ||
310 | xorriso | ||
311 | |||
312 | |||
313 | EOF | ||