Rework msg_functions for tool.func Pt. 3

This commit is contained in:
CanbiZ 2025-06-17 16:54:55 +02:00
parent fd1c8c5368
commit 89af776d8f

View File

@ -941,8 +941,8 @@ function setup_local_ip_helper() {
# Install networkd-dispatcher if not present # Install networkd-dispatcher if not present
if ! dpkg -s networkd-dispatcher >/dev/null 2>&1; then if ! dpkg -s networkd-dispatcher >/dev/null 2>&1; then
$STD apt-get update -qq $STD apt-get update
$STD apt-get install -yq networkd-dispatcher $STD apt-get install -y networkd-dispatcher
fi fi
# Write update_local_ip.sh # Write update_local_ip.sh
@ -999,8 +999,6 @@ EOF
chmod +x "$DISPATCHER_SCRIPT" chmod +x "$DISPATCHER_SCRIPT"
systemctl enable -q --now networkd-dispatcher.service systemctl enable -q --now networkd-dispatcher.service
$STD msg_ok "LOCAL_IP helper installed using networkd-dispatcher"
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@ -1070,7 +1068,6 @@ function download_with_progress() {
content_length=$(curl -fsSLI "$url" | awk '/Content-Length/ {print $2}' | tr -d '\r' || true) content_length=$(curl -fsSLI "$url" | awk '/Content-Length/ {print $2}' | tr -d '\r' || true)
if [[ -z "$content_length" ]]; then if [[ -z "$content_length" ]]; then
#msg_warn "Content-Length not available, falling back to plain download"
if ! curl -fL# -o "$output" "$url"; then if ! curl -fL# -o "$output" "$url"; then
msg_error "Download failed" msg_error "Download failed"
return 1 return 1
@ -1092,7 +1089,6 @@ function download_with_progress() {
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function setup_uv() { function setup_uv() {
$STD msg_info "Checking uv installation..."
local UV_BIN="/usr/local/bin/uv" local UV_BIN="/usr/local/bin/uv"
local TMP_DIR local TMP_DIR
TMP_DIR=$(mktemp -d) TMP_DIR=$(mktemp -d)
@ -1128,15 +1124,14 @@ function setup_uv() {
local INSTALLED_VERSION local INSTALLED_VERSION
INSTALLED_VERSION=$($UV_BIN -V | awk '{print $2}') INSTALLED_VERSION=$($UV_BIN -V | awk '{print $2}')
if [[ "$INSTALLED_VERSION" == "$LATEST_VERSION" ]]; then if [[ "$INSTALLED_VERSION" == "$LATEST_VERSION" ]]; then
$STD msg_ok "uv is already at the latest version ($INSTALLED_VERSION)"
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
[[ ":$PATH:" != *":/usr/local/bin:"* ]] && export PATH="/usr/local/bin:$PATH" [[ ":$PATH:" != *":/usr/local/bin:"* ]] && export PATH="/usr/local/bin:$PATH"
return 0 return 0
else else
$STD msg_info "Updating uv from $INSTALLED_VERSION to $LATEST_VERSION" msg_info "Updating uv from $INSTALLED_VERSION to $LATEST_VERSION"
fi fi
else else
$STD msg_info "Installing uv $LATEST_VERSION" msg_info "Setup uv $LATEST_VERSION"
fi fi
# Download and install manually # Download and install manually
@ -1161,12 +1156,10 @@ function setup_uv() {
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
ensure_usr_local_bin_persist ensure_usr_local_bin_persist
msg_ok "uv $LATEST_VERSION installed" msg_ok "Setup uv $LATEST_VERSION"
# Optional: install specific Python version # Optional: install specific Python version
if [[ -n "${PYTHON_VERSION:-}" ]]; then if [[ -n "${PYTHON_VERSION:-}" ]]; then
$STD msg_info "Ensuring Python $PYTHON_VERSION is available via uv..."
local VERSION_MATCH local VERSION_MATCH
VERSION_MATCH=$(uv python list --only-downloads | VERSION_MATCH=$(uv python list --only-downloads |
grep -E "^cpython-${PYTHON_VERSION//./\\.}\.[0-9]+-linux" | grep -E "^cpython-${PYTHON_VERSION//./\\.}\.[0-9]+-linux" |
@ -1177,14 +1170,12 @@ function setup_uv() {
return 1 return 1
fi fi
if uv python list | grep -q "cpython-${VERSION_MATCH}-linux.*uv/python"; then if ! uv python list | grep -q "cpython-${VERSION_MATCH}-linux.*uv/python"; then
$STD msg_ok "Python $VERSION_MATCH already installed via uv"
else
if ! $STD uv python install "$VERSION_MATCH"; then if ! $STD uv python install "$VERSION_MATCH"; then
msg_error "Failed to install Python $VERSION_MATCH via uv" msg_error "Failed to install Python $VERSION_MATCH via uv"
return 1 return 1
fi fi
msg_ok "Installed Python $VERSION_MATCH via uv" msg_ok "Setup Python $VERSION_MATCH via uv"
fi fi
fi fi
} }
@ -1214,7 +1205,6 @@ function ensure_usr_local_bin_persist() {
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function setup_gs() { function setup_gs() {
msg_info "Setup Ghostscript"
mkdir -p /tmp mkdir -p /tmp
TMP_DIR=$(mktemp -d) TMP_DIR=$(mktemp -d)
CURRENT_VERSION=$(gs --version 2>/dev/null || echo "0") CURRENT_VERSION=$(gs --version 2>/dev/null || echo "0")
@ -1230,12 +1220,11 @@ function setup_gs() {
fi fi
if dpkg --compare-versions "$CURRENT_VERSION" ge "$LATEST_VERSION_DOTTED"; then if dpkg --compare-versions "$CURRENT_VERSION" ge "$LATEST_VERSION_DOTTED"; then
msg_ok "Ghostscript is already at version $CURRENT_VERSION"
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
return return
fi fi
msg_info "Installing/Updating Ghostscript to $LATEST_VERSION_DOTTED" msg_info "Setup Ghostscript $LATEST_VERSION_DOTTED"
curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${LATEST_VERSION}/ghostscript-${LATEST_VERSION_DOTTED}.tar.gz" -o "$TMP_DIR/ghostscript.tar.gz" curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs${LATEST_VERSION}/ghostscript-${LATEST_VERSION_DOTTED}.tar.gz" -o "$TMP_DIR/ghostscript.tar.gz"
if ! tar -xzf "$TMP_DIR/ghostscript.tar.gz" -C "$TMP_DIR"; then if ! tar -xzf "$TMP_DIR/ghostscript.tar.gz" -C "$TMP_DIR"; then
@ -1261,7 +1250,7 @@ function setup_gs() {
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
if [[ $EXIT_CODE -eq 0 ]]; then if [[ $EXIT_CODE -eq 0 ]]; then
msg_ok "Ghostscript installed/updated to version $LATEST_VERSION_DOTTED" msg_ok "Setup Ghostscript $LATEST_VERSION_DOTTED"
else else
msg_error "Ghostscript installation failed" msg_error "Ghostscript installation failed"
fi fi
@ -1290,9 +1279,8 @@ function setup_ruby() {
local TMP_DIR local TMP_DIR
TMP_DIR=$(mktemp -d) TMP_DIR=$(mktemp -d)
msg_info "Installing rbenv + ruby-build + Ruby $RUBY_VERSION" msg_info "Setup Ruby $RUBY_VERSION"
# Fetch latest rbenv release tag from GitHub (e.g. v1.3.2 → 1.3.2)
local RBENV_RELEASE local RBENV_RELEASE
RBENV_RELEASE=$(curl -fsSL https://api.github.com/repos/rbenv/rbenv/releases/latest | grep '"tag_name":' | cut -d '"' -f4 | sed 's/^v//') RBENV_RELEASE=$(curl -fsSL https://api.github.com/repos/rbenv/rbenv/releases/latest | grep '"tag_name":' | cut -d '"' -f4 | sed 's/^v//')
if [[ -z "$RBENV_RELEASE" ]]; then if [[ -z "$RBENV_RELEASE" ]]; then
@ -1301,14 +1289,12 @@ function setup_ruby() {
return 1 return 1
fi fi
# Download and extract rbenv release
curl -fsSL "https://github.com/rbenv/rbenv/archive/refs/tags/v${RBENV_RELEASE}.tar.gz" -o "$TMP_DIR/rbenv.tar.gz" curl -fsSL "https://github.com/rbenv/rbenv/archive/refs/tags/v${RBENV_RELEASE}.tar.gz" -o "$TMP_DIR/rbenv.tar.gz"
tar -xzf "$TMP_DIR/rbenv.tar.gz" -C "$TMP_DIR" tar -xzf "$TMP_DIR/rbenv.tar.gz" -C "$TMP_DIR"
mkdir -p "$RBENV_DIR" mkdir -p "$RBENV_DIR"
cp -r "$TMP_DIR/rbenv-${RBENV_RELEASE}/." "$RBENV_DIR/" cp -r "$TMP_DIR/rbenv-${RBENV_RELEASE}/." "$RBENV_DIR/"
cd "$RBENV_DIR" && src/configure && $STD make -C src cd "$RBENV_DIR" && src/configure && $STD make -C src
# Fetch latest ruby-build plugin release tag (e.g. v20250507 → 20250507)
local RUBY_BUILD_RELEASE local RUBY_BUILD_RELEASE
RUBY_BUILD_RELEASE=$(curl -fsSL https://api.github.com/repos/rbenv/ruby-build/releases/latest | grep '"tag_name":' | cut -d '"' -f4 | sed 's/^v//') RUBY_BUILD_RELEASE=$(curl -fsSL https://api.github.com/repos/rbenv/ruby-build/releases/latest | grep '"tag_name":' | cut -d '"' -f4 | sed 's/^v//')
if [[ -z "$RUBY_BUILD_RELEASE" ]]; then if [[ -z "$RUBY_BUILD_RELEASE" ]]; then
@ -1317,44 +1303,35 @@ function setup_ruby() {
return 1 return 1
fi fi
# Download and install ruby-build plugin
curl -fsSL "https://github.com/rbenv/ruby-build/archive/refs/tags/v${RUBY_BUILD_RELEASE}.tar.gz" -o "$TMP_DIR/ruby-build.tar.gz" curl -fsSL "https://github.com/rbenv/ruby-build/archive/refs/tags/v${RUBY_BUILD_RELEASE}.tar.gz" -o "$TMP_DIR/ruby-build.tar.gz"
tar -xzf "$TMP_DIR/ruby-build.tar.gz" -C "$TMP_DIR" tar -xzf "$TMP_DIR/ruby-build.tar.gz" -C "$TMP_DIR"
mkdir -p "$RBENV_DIR/plugins/ruby-build" mkdir -p "$RBENV_DIR/plugins/ruby-build"
cp -r "$TMP_DIR/ruby-build-${RUBY_BUILD_RELEASE}/." "$RBENV_DIR/plugins/ruby-build/" cp -r "$TMP_DIR/ruby-build-${RUBY_BUILD_RELEASE}/." "$RBENV_DIR/plugins/ruby-build/"
echo "$RUBY_BUILD_RELEASE" >"$RBENV_DIR/plugins/ruby-build/RUBY_BUILD_version.txt" echo "$RUBY_BUILD_RELEASE" >"$RBENV_DIR/plugins/ruby-build/RUBY_BUILD_version.txt"
# Persist rbenv init to user's profile
if ! grep -q 'rbenv init' "$PROFILE_FILE"; then if ! grep -q 'rbenv init' "$PROFILE_FILE"; then
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >>"$PROFILE_FILE" echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >>"$PROFILE_FILE"
echo 'eval "$(rbenv init -)"' >>"$PROFILE_FILE" echo 'eval "$(rbenv init -)"' >>"$PROFILE_FILE"
fi fi
# Activate rbenv in current shell
export PATH="$RBENV_DIR/bin:$PATH" export PATH="$RBENV_DIR/bin:$PATH"
eval "$("$RBENV_BIN" init - bash)" eval "$("$RBENV_BIN" init - bash)"
# Install Ruby version if not already present if ! "$RBENV_BIN" versions --bare | grep -qx "$RUBY_VERSION"; then
if "$RBENV_BIN" versions --bare | grep -qx "$RUBY_VERSION"; then
msg_ok "Ruby $RUBY_VERSION already installed"
else
msg_info "Installing Ruby ${RUBY_VERSION} (patience)"
$STD "$RBENV_BIN" install "$RUBY_VERSION" $STD "$RBENV_BIN" install "$RUBY_VERSION"
fi fi
# Set Ruby version globally
"$RBENV_BIN" global "$RUBY_VERSION" "$RBENV_BIN" global "$RUBY_VERSION"
hash -r hash -r
# Optionally install Rails via gem
if [[ "$RUBY_INSTALL_RAILS" == "true" ]]; then if [[ "$RUBY_INSTALL_RAILS" == "true" ]]; then
msg_info "Installing latest Rails via gem" msg_info "Setup Rails via gem"
gem install rails gem install rails
msg_ok "Rails $(rails -v) installed" msg_ok "Setup Rails $(rails -v)"
fi fi
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
msg_ok "rbenv stack ready (Ruby $RUBY_VERSION)" msg_ok "Setup Ruby $RUBY_VERSION"
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@ -1368,12 +1345,10 @@ function setup_ruby() {
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
function create_selfsigned_certs() { function create_selfsigned_certs() {
local app=${APP:-$(echo "${APPLICATION,,}" | tr -d ' ')} local app=${APP:-$(echo "${APPLICATION,,}" | tr -d ' ')}
$STD msg_info "Creating Self-Signed Certificate"
$STD openssl req -x509 -nodes -days 365 -newkey rsa:4096 \ $STD openssl req -x509 -nodes -days 365 -newkey rsa:4096 \
-keyout /etc/ssl/private/"$app"-selfsigned.key \ -keyout /etc/ssl/private/"$app"-selfsigned.key \
-out /etc/ssl/certs/"$app"-selfsigned.crt \ -out /etc/ssl/certs/"$app"-selfsigned.crt \
-subj "/C=US/O=$app/OU=Domain Control Validated/CN=localhost" -subj "/C=US/O=$app/OU=Domain Control Validated/CN=localhost"
$STD msg_ok "Created Self-Signed Certificate"
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@ -1400,11 +1375,11 @@ function setup_rust() {
# rustup & toolchain # rustup & toolchain
if ! command -v rustup &>/dev/null; then if ! command -v rustup &>/dev/null; then
msg_info "Installing rustup" msg_info "Setup Rust"
curl -fsSL https://sh.rustup.rs | $STD sh -s -- -y --default-toolchain "$RUST_TOOLCHAIN" curl -fsSL https://sh.rustup.rs | $STD sh -s -- -y --default-toolchain "$RUST_TOOLCHAIN"
export PATH="$CARGO_BIN:$PATH" export PATH="$CARGO_BIN:$PATH"
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >>"$HOME/.profile" echo 'export PATH="$HOME/.cargo/bin:$PATH"' >>"$HOME/.profile"
msg_ok "Installed rustup with $RUST_TOOLCHAIN" msg_ok "Setup Rust"
else else
$STD rustup install "$RUST_TOOLCHAIN" $STD rustup install "$RUST_TOOLCHAIN"
$STD rustup default "$RUST_TOOLCHAIN" $STD rustup default "$RUST_TOOLCHAIN"
@ -1429,20 +1404,21 @@ function setup_rust() {
if [[ -n "$INSTALLED_VER" ]]; then if [[ -n "$INSTALLED_VER" ]]; then
if [[ -n "$VER" && "$VER" != "$INSTALLED_VER" ]]; then if [[ -n "$VER" && "$VER" != "$INSTALLED_VER" ]]; then
msg_info "Updating $NAME from $INSTALLED_VER to $VER" msg_info "Update $NAME: $INSTALLED_VER → $VER"
$STD cargo install "$NAME" --version "$VER" --force $STD cargo install "$NAME" --version "$VER" --force
msg_ok "Updated $NAME to $VER"
elif [[ -z "$VER" ]]; then elif [[ -z "$VER" ]]; then
msg_info "Updating $NAME to latest" msg_info "Update $NAME: $INSTALLED_VER → latest"
$STD cargo install "$NAME" --force $STD cargo install "$NAME" --force
else msg_ok "Updated $NAME to latest"
msg_ok "$NAME@$INSTALLED_VER already up to date"
fi fi
else else
msg_info "Installing $NAME ${VER:+($VER)}" msg_info "Setup $NAME ${VER:+($VER)}"
$STD cargo install "$NAME" ${VER:+--version "$VER"} $STD cargo install "$NAME" ${VER:+--version "$VER"}
msg_ok "Setup $NAME ${VER:-latest}"
fi fi
done done
msg_ok "All requested Rust crates processed" msg_ok "Setup Rust"
fi fi
} }
@ -1456,7 +1432,7 @@ function setup_rust() {
function setup_adminer() { function setup_adminer() {
if grep -qi alpine /etc/os-release; then if grep -qi alpine /etc/os-release; then
msg_info "Installing Adminer (Alpine)" msg_info "Setup Adminer (Alpine)"
mkdir -p /var/www/localhost/htdocs/adminer mkdir -p /var/www/localhost/htdocs/adminer
if ! curl -fsSL https://github.com/vrana/adminer/releases/latest/download/adminer.php \ if ! curl -fsSL https://github.com/vrana/adminer/releases/latest/download/adminer.php \
-o /var/www/localhost/htdocs/adminer/index.php; then -o /var/www/localhost/htdocs/adminer/index.php; then
@ -1465,7 +1441,7 @@ function setup_adminer() {
fi fi
msg_ok "Adminer available at /adminer (Alpine)" msg_ok "Adminer available at /adminer (Alpine)"
else else
msg_info "Installing Adminer (Debian/Ubuntu)" msg_info "Setup Adminer (Debian/Ubuntu)"
$STD apt-get install -y adminer $STD apt-get install -y adminer
$STD a2enconf adminer $STD a2enconf adminer
$STD systemctl reload apache2 $STD systemctl reload apache2
@ -1490,7 +1466,7 @@ function setup_yq() {
local GITHUB_REPO="mikefarah/yq" local GITHUB_REPO="mikefarah/yq"
if ! command -v jq &>/dev/null; then if ! command -v jq &>/dev/null; then
$STD apt-get update -qq $STD apt-get update
$STD apt-get install -y jq || { $STD apt-get install -y jq || {
msg_error "Failed to install jq" msg_error "Failed to install jq"
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
@ -1506,7 +1482,6 @@ function setup_yq() {
fi fi
fi fi
msg_info "Setup yq"
local RELEASE_JSON local RELEASE_JSON
RELEASE_JSON=$(curl -fsSL "https://api.github.com/repos/${GITHUB_REPO}/releases/latest") RELEASE_JSON=$(curl -fsSL "https://api.github.com/repos/${GITHUB_REPO}/releases/latest")
local LATEST_VERSION local LATEST_VERSION
@ -1519,11 +1494,10 @@ function setup_yq() {
fi fi
if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" == "$LATEST_VERSION" ]]; then if [[ -n "$CURRENT_VERSION" && "$CURRENT_VERSION" == "$LATEST_VERSION" ]]; then
msg_ok "Setup yq ($CURRENT_VERSION)"
rm -rf "$TMP_DIR"
return return
fi fi
msg_info "Setup yq ($LATEST_VERSION)"
curl -fsSL "https://github.com/${GITHUB_REPO}/releases/download/v${LATEST_VERSION}/yq_linux_amd64" -o "$TMP_DIR/yq" curl -fsSL "https://github.com/${GITHUB_REPO}/releases/download/v${LATEST_VERSION}/yq_linux_amd64" -o "$TMP_DIR/yq"
chmod +x "$TMP_DIR/yq" chmod +x "$TMP_DIR/yq"
mv "$TMP_DIR/yq" "$BINARY_PATH" mv "$TMP_DIR/yq" "$BINARY_PATH"