sysfiles/usr/local/jilits/sysyadm-init.sh

102 lines
2.6 KiB
Bash

#!/bin/bash
# Exit immediately if a command exits with a non-zero status
set -e
# Google Bash Script Guidelines: All static variables are defined at the top and marked readonly.
readonly REPO_URL="ssh://git@git.jilits.se:2222/JILITS/sysfiles.git"
readonly YADM_DIR="/etc/yadm"
readonly YADM_DATA_DIR="$YADM_DIR/data"
readonly YADM_REPO_PATH="$YADM_DATA_DIR/repo.git"
readonly ROOT_SSH_KEY="/root/.ssh/id_rsa"
readonly ALIASES_FILE="$HOME/.bash_aliases"
readonly -A ALIASES=(
["y"]="yadm"
["sysyadm"]="sudo yadm --yadm-dir '$YADM_DIR' --yadm-data '$YADM_DATA_DIR'"
["s"]="sysyadm"
)
# Function to print messages
function iprint() {
echo -e "\e[32m[INFO]\e[0m $1"
}
function eprint() {
echo -e "\e[31m[ERROR]\e[0m $1" >&2
}
# Function to run sysyadm commands
function sysyadm() {
sudo yadm --yadm-dir "$YADM_DIR" --yadm-data "$YADM_DATA_DIR" "$@"
}
if [ "$EUID" -eq 0 ]; then
eprint "This script must be run as a non-root user. Exiting."
exit 1
fi
if ! command -v apt &>/dev/null; then
eprint "This script is intended for Debian-based systems. Exiting."
exit 1
fi
iprint "System is Debian-compatible. Proceeding..."
if ! command -v yadm &>/dev/null; then
iprint "Installing yadm..."
sudo apt update && sudo apt install -y yadm
else
iprint "yadm is already installed."
fi
iprint "Ensuring aliases are in $ALIASES_FILE..."
for alias_name in "${!ALIASES[@]}"; do
alias_cmd="alias $alias_name=\"${ALIASES[$alias_name]}\""
grep -qxF "$alias_cmd" "$ALIASES_FILE" 2>/dev/null || echo "$alias_cmd" >>"$ALIASES_FILE"
done
if sudo test -f "$ROOT_SSH_KEY"; then
iprint "SSH key for root already exists. Skipping key generation."
else
iprint "Generating SSH key for root..."
sudo ssh-keygen -t rsa -N "" -f "$ROOT_SSH_KEY"
iprint "Printing the public SSH key for root:"
sudo cat "$ROOT_SSH_KEY.pub"
while true; do
read -p "Has the SSH key been added to the Git server? (y/n): " CONFIRM
case $CONFIRM in
[Yy])
break
;;
[Nn])
iprint "Please add the key to the Git server and confirm when done."
;;
*)
iprint "Please answer y or n."
;;
esac
done
fi
iprint "Using repository URL: $REPO_URL"
if [ -d "$YADM_REPO_PATH" ]; then
iprint "Yadm repository already exists at $YADM_REPO_PATH. Skipping initialization and clone."
else
iprint "Cloning sysyadm repository..."
sysyadm clone -w / "$REPO_URL"
fi
iprint "Running sysyadm alts..."
sysyadm alt
if [ -f "$YADM_DIR/bootstrap" ]; then
iprint "Running sysyadm bootstrap..."
sysyadm bootstrap
fi
iprint "Script completed successfully."