A just/alpine.just => just/alpine.just +34 -0
@@ 0,0 1,34 @@
+# Download Alpine Linux keys
+keys:
+ #!/usr/bin/env sh
+ mkdir -p common/etc/apk/keys
+ cd common/etc/apk/keys
+
+ # Copy the names unser APKBUILD from here:
+ # https://git.alpinelinux.org/aports/plain/main/alpine-keys
+ keys="
+ alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub
+ alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub
+ alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub
+ alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub
+ alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub
+ alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub
+ alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub
+ alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub
+ alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub
+ alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub
+ alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub
+ alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub
+ alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub
+ alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub
+ alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub
+ alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub
+ alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub
+ alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub
+ "
+
+ for key in $keys; do
+ curl -O "https://git.alpinelinux.org/aports/plain/main/alpine-keys/${key}"
+ done
+
+ curl -O "https://mirror.sr.ht/alpine/alpine@sr.ht.rsa.pub"
M justfile => justfile +42 -44
@@ 1,7 1,11 @@
+# Alpine Linux setup
+mod alpine "./just/alpine.just"
+
_default:
just --list
# Check if host directory exists
+[group("check")]
host-dir-exists host:
#!/usr/bin/env sh
if [ ! -d {{host}} ]; then
@@ 9,7 13,22 @@ host-dir-exists host:
exit 1
fi
+# Check host reachability via ping
+[group("check")]
+host-reachable host: (host-dir-exists host)
+ #!/usr/bin/env sh
+ ping -w 1 -c 1 $(cat ./{{host}}/ADDRESS)
+ if [ $? -ne 0 ]; then
+ echo "{{host}} is not reachable"
+ exit 1
+ fi
+
+# All checks
+[group("check")]
+check host: (host-dir-exists host) (host-reachable host)
+
# Remove common files from host
+[group("cleanup")]
remove-common host: (host-dir-exists host)
#!/usr/bin/env sh
prefix="./common/"
@@ 18,26 37,23 @@ remove-common host: (host-dir-exists host)
rm -f "./{{host}}/files/$path"
done
-# Merge common files into host directory
-merge-with-common host: (host-dir-exists host)
- cp --archive --force ./common/. ./{{host}}/files/
-
# Remove build artifacts
+[group("cleanup")]
remove-artifacts host: (host-dir-exists host)
rm -f "./{{host}}/{{host}}.img"
rm -f "./{{host}}/{{host}}.packages"
+ rm -f "./{{host}}/payload.tar.gz"
-# Check host reachability via ping
-host-reachable host: (host-dir-exists host)
- #!/usr/bin/env sh
- ping -w 1 -c 1 $(cat ./{{host}}/ADDRESS)
- if [ $? -ne 0 ]; then
- echo "{{host}} is not reachable"
- exit 1
- fi
+# All cleanups
+[group("cleanup")]
+cleanup host: (remove-common host) (remove-artifacts host)
+
+# Merge common files into host directory
+merge-with-common host: (host-dir-exists host)
+ cp --archive --force ./common/. ./{{host}}/files/
# Test the IMGBUILD by building an image
-test host: (host-dir-exists host) (merge-with-common host) && (remove-common host) (remove-artifacts host)
+test host: (host-dir-exists host) (merge-with-common host) && (cleanup host)
#!/usr/bin/env sh
cd ./{{host}}
sudo makeimg --format "raw 4g msdos ext4"
@@ 47,37 63,19 @@ get-anemos host: (host-reachable host)
ssh root@$(cat ./{{host}}/ADDRESS) curl https://git.sr.ht/~bitfehler/anemos-cli/blob/master/anemos -o anemos
ssh root@$(cat ./{{host}}/ADDRESS) chmod +x ./anemos
-# Download alpine linux keys
-alpine-keys:
+# Tar the payload for a host
+payload host: (host-dir-exists host) (merge-with-common host)
#!/usr/bin/env sh
- mkdir -p common/etc/apk/keys
- cd common/etc/apk/keys
-
- # Copy the names unser APKBUILD from here:
- # https://git.alpinelinux.org/aports/plain/main/alpine-keys
- keys="
- alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub
- alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub
- alpine-devel@lists.alpinelinux.org-524d27bb.rsa.pub
- alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub
- alpine-devel@lists.alpinelinux.org-58199dcc.rsa.pub
- alpine-devel@lists.alpinelinux.org-58cbb476.rsa.pub
- alpine-devel@lists.alpinelinux.org-58e4f17d.rsa.pub
- alpine-devel@lists.alpinelinux.org-5e69ca50.rsa.pub
- alpine-devel@lists.alpinelinux.org-60ac2099.rsa.pub
- alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub
- alpine-devel@lists.alpinelinux.org-61666e3f.rsa.pub
- alpine-devel@lists.alpinelinux.org-616a9724.rsa.pub
- alpine-devel@lists.alpinelinux.org-616abc23.rsa.pub
- alpine-devel@lists.alpinelinux.org-616ac3bc.rsa.pub
- alpine-devel@lists.alpinelinux.org-616adfeb.rsa.pub
- alpine-devel@lists.alpinelinux.org-616ae350.rsa.pub
- alpine-devel@lists.alpinelinux.org-616db30d.rsa.pub
- alpine-devel@lists.alpinelinux.org-66ba20fe.rsa.pub
- "
+ cd ./{{host}}
+ tar czf payload.tar.gz IMGBUILD files
- for key in $keys; do
- curl -O "https://git.alpinelinux.org/aports/plain/main/alpine-keys/${key}"
- done
+# Initialize a new host
+init host: (check host) (get-anemos host) (payload host) && (cleanup host)
+ scp ./{{host}}/payload.tar.gz ./{{host}}/files/etc/anemos.conf root@$(cat ./{{host}}/ADDRESS):
+ ssh root@$(cat ./{{host}}/ADDRESS) ./anemos -c anemos.conf
- curl -O "https://mirror.sr.ht/alpine/alpine@sr.ht.rsa.pub"
+# Deploy an existing host
+deploy host: (check host) (get-anemos host) (payload host) && (cleanup host)
+ scp ./{{host}}/payload.tar.gz root@$(cat ./{{host}}/ADDRESS):
+ ssh root@$(cat ./{{host}}/ADDRESS) mount /boot
+ ssh root@$(cat ./{{host}}/ADDRESS) ./anemos