feature: Gets Ubuntu autoinstall working.
This commit is contained in:
parent
eb1dc99389
commit
61ccbf61d6
23 changed files with 357 additions and 523 deletions
|
@ -1,35 +1,66 @@
|
|||
#!/usr/bin/env bash
|
||||
SSH_SERVER="$1"
|
||||
SERVER_INSTALL_PATH="$1"
|
||||
|
||||
ssh-to-srv() {
|
||||
ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" nixos@$SSH_SERVER $@
|
||||
}
|
||||
HTTP_PORT="$((1024 + $RANDOM % 65535))"
|
||||
TMPDIR="/tmp/server_http_$HTTP_PORT"
|
||||
|
||||
if [ "$GIT_REPO" == "" ]; then
|
||||
export GIT_REPO="https://git.hofers.cloud/greysoh/kittehcluster"
|
||||
fi
|
||||
BASE_IPS="$(ip a | grep "inet" | grep "brd" | cut -d "/" -f 1 | cut -d " " -f 6)"
|
||||
|
||||
if [ "$NIX_INSTALL_PATH" == "" ]; then
|
||||
echo "ERROR: the environment variable 'NIX_INSTALL_PATH' is not set!"
|
||||
echo "This can be fixed by setting it to the path of the nix file, i.e:"
|
||||
echo "$ NIX_INSTALL_PATH=kitteh-node-1/server.nix ./install.sh"
|
||||
EXT_10_DOT_IPS="$(echo "$BASE_IPS" | grep "10.")"
|
||||
EXT_192168_IPS="$(echo "$BASE_IPS" | grep "192.168.")"
|
||||
EXT_172_16_IPS="$(echo "$BASE_IPS" | grep "172.16.")"
|
||||
|
||||
EXTERNAL_IP_FULL=$EXT_10_DOT_IPS$'\n'$EXT_192168_IPS$'\n'$EXT_172_16_IPS$'\n'
|
||||
|
||||
if [ "$SERVER_INSTALL_PATH" = "" ]; then
|
||||
echo "You didn't pass in all the arguments! Usage:"
|
||||
echo " ./install.sh \$INSTALL_KEY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "secrets.nix" ]; then
|
||||
echo "ERROR: secrets.nix doesn't exit! Copy that file, and setup your secrets, please."
|
||||
exit 1
|
||||
./merge.py "$SERVER_INSTALL_PATH"
|
||||
|
||||
echo "[x] initializing..."
|
||||
mkdir $TMPDIR
|
||||
|
||||
echo "#cloud-config" > $TMPDIR/user-data
|
||||
cat /tmp/script.yml >> $TMPDIR/user-data
|
||||
|
||||
if [ "$(uname)" == "Linux" ]; then
|
||||
echo "[x] stopping firewall (Linux)..."
|
||||
sudo systemctl stop firewall
|
||||
fi
|
||||
|
||||
echo "Initializing..."
|
||||
touch $TMPDIR/meta-data
|
||||
touch $TMPDIR/vendor-data
|
||||
|
||||
# Ugh, gotta reimplement ssh-copy-id real quick...
|
||||
# TODO: see if there's a way to specify custom arguments to ssh-copy-id's SSH process
|
||||
for i in ~/.ssh/id_*.pub; do
|
||||
echo "Copying public key '$i'..."
|
||||
ssh-to-srv bash -c "'mkdir -p ~/.ssh; touch ~/.ssh/authorized_keys; echo -n $(cat $i | base64) | base64 -d > ~/.ssh/authorized_keys'"
|
||||
done
|
||||
echo "[x] starting HTTP server..."
|
||||
echo " - Listening on port $HTTP_PORT."
|
||||
echo " - Add one of these command line options for Ubuntu (guessed local IP):"
|
||||
|
||||
ssh-to-srv bash -c "'echo -n $(cat secrets.nix | base64) | base64 -d > /tmp/secrets.nix'"
|
||||
ssh-to-srv bash -c "'echo -n $(cat install-script.sh | base64) | base64 -d > /tmp/install.sh'"
|
||||
ssh-to-srv bash -c "'GIT_REPO=$GIT_REPO NIX_INSTALL_PATH=$NIX_INSTALL_PATH SECRETS_PATH=/tmp/secrets.nix bash /tmp/install.sh'"
|
||||
while IFS= read -r IP; do
|
||||
# I'm too lazy to do root causing of this shit.
|
||||
|
||||
if [ "$IP" != "" ]; then
|
||||
echo " - autoinstall \"ds=nocloud-net;s=http://$IP:$HTTP_PORT/\""
|
||||
fi
|
||||
done <<< "$EXTERNAL_IP_FULL"
|
||||
|
||||
echo " - Choose the right IP."
|
||||
echo
|
||||
|
||||
SERVE_SCRIPT="$PWD/serve.py"
|
||||
|
||||
pushd $TMPDIR > /dev/null
|
||||
|
||||
python3 $SERVE_SCRIPT $HTTP_PORT
|
||||
|
||||
popd > /dev/null
|
||||
|
||||
echo "[x] running cleanup tasks..."
|
||||
rm -rf $TMPDIR
|
||||
|
||||
if [ "$(uname)" == "Linux" ]; then
|
||||
echo "[x] starting firewall (Linux)..."
|
||||
sudo systemctl start firewall
|
||||
fi
|
Reference in a new issue