diff options
author | Andrew Cady <d@jerkface.net> | 2018-07-09 17:46:51 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2018-07-09 17:46:51 -0400 |
commit | 2702e09259bd66b85c6d3a4c0753ed1120d714df (patch) | |
tree | 576a3b500bff0d3fa4618c1e4d305d2de7911acf /build-rootfs.sh | |
parent | 6815ac19bfd8e945894d6d37ef5f0d51523aa8d4 (diff) |
get build-rootfs.sh working adequately to build some truly useful images
Diffstat (limited to 'build-rootfs.sh')
-rwxr-xr-x | build-rootfs.sh | 99 |
1 files changed, 77 insertions, 22 deletions
diff --git a/build-rootfs.sh b/build-rootfs.sh index 63eb4c9..76daf66 100755 --- a/build-rootfs.sh +++ b/build-rootfs.sh | |||
@@ -1,6 +1,7 @@ | |||
1 | #!/bin/sh -e | 1 | #!/bin/sh |
2 | set -e | ||
2 | release=stretch | 3 | release=stretch |
3 | img_name=t3 | 4 | img_name=2018-06-27 |
4 | img_file=debootstrap/${release}-minbase-amd64.${img_name}.btrfs | 5 | img_file=debootstrap/${release}-minbase-amd64.${img_name}.btrfs |
5 | 6 | ||
6 | die() { printf '%s\n' "$*" >&2; exit 1; } | 7 | die() { printf '%s\n' "$*" >&2; exit 1; } |
@@ -19,13 +20,17 @@ defrag() | |||
19 | $img_sh btrfs fi def -rc . | 20 | $img_sh btrfs fi def -rc . |
20 | } | 21 | } |
21 | 22 | ||
23 | wordlines() { printf '%s\n' "$@"; } | ||
24 | |||
22 | xorg_packages() | 25 | xorg_packages() |
23 | { | 26 | { |
24 | wordlines xorg libxss1 | 27 | wordlines xorg libxss1 xserver-xorg-input-all xserver-xorg-input-wacom |
25 | |||
26 | } | 28 | } |
27 | 29 | ||
28 | wordlines() { printf '%s\n' "$@"; } | 30 | necessary_packages() |
31 | { | ||
32 | wordlines systemd-sysv | ||
33 | } | ||
29 | 34 | ||
30 | useful_packages() | 35 | useful_packages() |
31 | { | 36 | { |
@@ -68,18 +73,26 @@ find_prog() | |||
68 | want_prog=$1 | 73 | want_prog=$1 |
69 | prog=$(which "$want_prog") && return | 74 | prog=$(which "$want_prog") && return |
70 | if [ "$SUDO_USER" -a "$(id -u)" = 0 ]; then | 75 | if [ "$SUDO_USER" -a "$(id -u)" = 0 ]; then |
71 | prog=$(sh -c 'su - "$SUDO_USER" -c "which xmonad"') | 76 | prog=$(sh -c 'su - "$SUDO_USER" -c "which \"'"${want_prog}"'\""') |
72 | else | 77 | else |
73 | false | 78 | false |
74 | fi | 79 | fi |
75 | } | 80 | } |
76 | 81 | ||
77 | install_program_from_path() | 82 | install_program_from_path1() |
78 | { | 83 | { |
79 | find_prog "$1" || die "program not found: $1" | 84 | find_prog "$1" || die "program not found: $1" |
80 | $img_sh cp -L "$prog" ./usr/local/bin/"$1" | 85 | $img_sh cp -L "$prog" ./usr/local/bin/"$1" |
81 | } | 86 | } |
82 | 87 | ||
88 | install_program_from_path() | ||
89 | { | ||
90 | local f | ||
91 | for f in "$@"; do | ||
92 | install_program_from_path1 "$f" || die "could not install package '$f'" | ||
93 | done | ||
94 | } | ||
95 | |||
83 | install_xmonad() | 96 | install_xmonad() |
84 | { | 97 | { |
85 | install_program_from_path xmonad | 98 | install_program_from_path xmonad |
@@ -92,19 +105,17 @@ kernel_packages() | |||
92 | wordlines busybox cpio firmware-linux-free \ | 105 | wordlines busybox cpio firmware-linux-free \ |
93 | initramfs-tools initramfs-tools-core irqbalance \ | 106 | initramfs-tools initramfs-tools-core irqbalance \ |
94 | klibc-utils kmod libklibc libnuma1 linux-base \ | 107 | klibc-utils kmod libklibc libnuma1 linux-base \ |
95 | linux-image-4.9.0-6-amd64 linux-image-amd64 \ | 108 | linux-image-4.9.0-6-amd64 linux-image-amd64 |
96 | systemd-sysv | ||
97 | } | 109 | } |
98 | 110 | ||
99 | install_apt_cache() | 111 | install_apt_cache() |
100 | { | 112 | { |
101 | $img_sh rsync -RaP /var/cache/apt --exclude archives ./ | 113 | $img_sh rsync -RaP /var/lib/apt/lists --exclude partial ./ |
102 | } | 114 | } |
103 | 115 | ||
104 | install_kiki() | 116 | install_kiki() |
105 | { | 117 | { |
106 | install_program_from_path cokiki | 118 | install_program_from_path cokiki kiki |
107 | install_program_from_path kiki | ||
108 | } | 119 | } |
109 | 120 | ||
110 | install_samizdat() | 121 | install_samizdat() |
@@ -193,21 +204,30 @@ install_config_dat() | |||
193 | all_packages() | 204 | all_packages() |
194 | { | 205 | { |
195 | (kernel_packages | 206 | (kernel_packages |
196 | network_packages | 207 | necessary_packages |
197 | useful_packages | 208 | network_packages |
198 | filesystem_tool_packages | 209 | useful_packages |
199 | boot_tool_packages | 210 | filesystem_tool_packages |
200 | samizdat_dep_packages | 211 | boot_tool_packages |
201 | xorg_packages) | sort -u | 212 | samizdat_dep_packages |
213 | xorg_packages) | sort -u | ||
214 | } | ||
215 | |||
216 | choose_hostname() | ||
217 | { | ||
218 | true | ||
202 | } | 219 | } |
203 | 220 | ||
204 | main() | 221 | main() |
205 | { | 222 | { |
206 | ./debootstrap.sh init $release | 223 | ./debootstrap.sh init $release |
207 | ./debootstrap.sh new $release $img_name | 224 | ./debootstrap.sh new $release $img_name |
225 | ./debootstrap.sh with_img $release $img_name truncate -s 5G | ||
226 | # ./debootstrap.sh with_img $release $img_name btrfstune -S0 -f || true | ||
227 | ./debootstrap.sh sh $release $img_name btrfs filesystem resize max . | ||
208 | 228 | ||
209 | install_config_dat | 229 | install_config_dat |
210 | 230 | install_packages $(necessary_packages) | |
211 | install_packages $(kernel_packages) | 231 | install_packages $(kernel_packages) |
212 | install_packages $(network_packages) | 232 | install_packages $(network_packages) |
213 | install_packages $(useful_packages) | 233 | install_packages $(useful_packages) |
@@ -215,13 +235,48 @@ main() | |||
215 | install_packages $(boot_tool_packages) | 235 | install_packages $(boot_tool_packages) |
216 | install_packages $(samizdat_dep_packages) | 236 | install_packages $(samizdat_dep_packages) |
217 | install_packages $(xorg_packages) | 237 | install_packages $(xorg_packages) |
238 | install_packages firefox-esr linphone alsa-utils | ||
218 | install_xmonad | 239 | install_xmonad |
219 | 240 | ||
220 | # install_apt_cache | 241 | # (Note: libglib2.0-bin is needed for mypaint to work correctly) |
242 | install_packages mypaint libglib2.0-bin emacs25 strongswan-pki strongswan-swanctl strongswan-nm | ||
243 | install_packages build-essential vim less xbindkeys w3m sudo dmenu psmisc rsync | ||
244 | install_apt_cache | ||
245 | |||
221 | install_samizdat | 246 | install_samizdat |
222 | install_kiki | 247 | install_kiki |
248 | install_program_from_path google | ||
249 | install_program_from_path stack | ||
250 | install_program_from_path dhtd dht | ||
251 | |||
252 | add_user_account u | ||
253 | add_git_clone ../src/dotfiles home/u/src/dotfiles | ||
254 | add_git_clone ./ home/u/src/samizdat | ||
255 | add_git_clone ../src/bittorrent home/u/src/presence | ||
223 | 256 | ||
224 | make_bootable | 257 | make_bootable |
258 | echo done. >&2 | ||
259 | } | ||
260 | |||
261 | add_user_account() | ||
262 | { | ||
263 | local uname="$1" | ||
264 | $chroot useradd "$uname" -G sudo -m -p '' -s /bin/bash | ||
265 | } | ||
266 | |||
267 | add_git_clone() | ||
268 | { | ||
269 | local src dst="$2" | ||
270 | src=$(realpath -e "$1") || die "add_git_clone: path does not exist: $1" | ||
271 | $img_sh git clone "$src" ./"$dst" | ||
272 | |||
273 | # todo: set up to properly push and pull via VPN | ||
274 | |||
275 | # From "man git clone": | ||
276 | # | ||
277 | # This default configuration is achieved by creating references to the | ||
278 | # remote branch heads under refs/remotes/origin and by initializing | ||
279 | # remote.origin.url and remote.origin.fetch configuration variables. | ||
225 | } | 280 | } |
226 | 281 | ||
227 | if [ "${0##*/}" = build-rootfs.sh ]; then | 282 | if [ "${0##*/}" = build-rootfs.sh ]; then |