DEVELOPMENT ENVIRONMENT

~liljamo/src.quest-anemos

4f40688eeb78b660c40d14214533cbc9491deae3 — Jonni Liljamo 8 days ago 817921f
feat: justfile organization and payload, init, deploy
2 files changed, 76 insertions(+), 44 deletions(-)

A just/alpine.just
M justfile
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