From 75d1b83eaff0c7a15023f45e5600c627fb0dca8a Mon Sep 17 00:00:00 2001 From: Emil Dabrowski Date: Tue, 17 Dec 2024 14:40:36 +0100 Subject: [PATCH] feat: add sysyadm initialization script --- usr/local/jilits/sysyadm-init.sh | 105 +++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 usr/local/jilits/sysyadm-init.sh diff --git a/usr/local/jilits/sysyadm-init.sh b/usr/local/jilits/sysyadm-init.sh new file mode 100644 index 0000000..abc3b76 --- /dev/null +++ b/usr/local/jilits/sysyadm-init.sh @@ -0,0 +1,105 @@ +#!/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" || echo "$alias_cmd" >>"$ALIASES_FILE" +done + +iprint "Aliases added. Reloading bash aliases." +# shellcheck disable=SC1090 +source "$ALIASES_FILE" + +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 "Initializing sysyadm with root privileges..." + sysyadm init -w / + + iprint "Cloning sysyadm repository..." + sysyadm clone -w / "$REPO_URL" +fi + +iprint "Running sysyadm alts..." +sysyadm alts + +iprint "Running sysyadm bootstrap..." +sysyadm bootstrap + +iprint "Script completed successfully."