Rewrite homebrew addon to use core.func/tools.func pattern
Sources core.func, tools.func, error_handler.func, and api.func instead of inline color vars and msg functions. Adds structured sections (CONFIGURATION, OS DETECTION, UNINSTALL, INSTALL, MAIN) matching the qbittorrent-exporter/pihole-exporter pattern. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,102 +5,159 @@
|
|||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://brew.sh | Github: https://github.com/Homebrew/brew
|
# Source: https://brew.sh | Github: https://github.com/Homebrew/brew
|
||||||
|
|
||||||
function header_info {
|
if ! command -v curl &>/dev/null; then
|
||||||
clear
|
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||||
cat <<"EOF"
|
apt-get update >/dev/null 2>&1
|
||||||
__ __ __
|
apt-get install -y curl >/dev/null 2>&1
|
||||||
/ / / /___ ____ ___ ___ / /_ ________ _ __
|
fi
|
||||||
/ /_/ / __ \/ __ `__ \/ _ \/ __ \/ ___/ _ \ | /| / /
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||||
/ __ / /_/ / / / / / / __/ /_/ / / / __/ |/ |/ /
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||||
/_/ /_/\____/_/ /_/ /_/\___/_.___/_/ \___/|__/|__/
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||||
(Linuxbrew)
|
|
||||||
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
set -eEuo pipefail
|
|
||||||
YW=$(echo "\033[33m")
|
|
||||||
BL=$(echo "\033[36m")
|
|
||||||
RD=$(echo "\033[01;31m")
|
|
||||||
BGN=$(echo "\033[4;92m")
|
|
||||||
GN=$(echo "\033[1;92m")
|
|
||||||
DGN=$(echo "\033[32m")
|
|
||||||
CL=$(echo "\033[m")
|
|
||||||
CM="${GN}✓${CL}"
|
|
||||||
BFR="\\r\\033[K"
|
|
||||||
HOLD="-"
|
|
||||||
|
|
||||||
msg_info() {
|
|
||||||
local msg="$1"
|
|
||||||
echo -ne " ${HOLD} ${YW}${msg}..."
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_ok() {
|
|
||||||
local msg="$1"
|
|
||||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
msg_error() {
|
|
||||||
local msg="$1"
|
|
||||||
echo -e "${BFR} ${RD}✗ ${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Telemetry
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true
|
||||||
declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "homebrew" "addon"
|
|
||||||
|
|
||||||
header_info
|
# Enable error handling
|
||||||
|
set -Eeuo pipefail
|
||||||
|
trap 'error_handler' ERR
|
||||||
|
load_functions
|
||||||
|
init_tool_telemetry "" "addon"
|
||||||
|
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Homebrew (Linuxbrew) Installer" --yesno "This Will Install Homebrew (Linuxbrew) on this LXC Container. Proceed?" 10 58
|
# ==============================================================================
|
||||||
|
# CONFIGURATION
|
||||||
|
# ==============================================================================
|
||||||
|
VERBOSE=${var_verbose:-no}
|
||||||
|
APP="homebrew"
|
||||||
|
APP_TYPE="tools"
|
||||||
|
INSTALL_PATH="/home/linuxbrew/.linuxbrew"
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
# ==============================================================================
|
||||||
apt install -y build-essential git curl file procps &>/dev/null
|
# OS DETECTION
|
||||||
msg_ok "Installed Dependencies"
|
# ==============================================================================
|
||||||
|
if [[ -f "/etc/alpine-release" ]]; then
|
||||||
msg_info "Detecting Non-Root User"
|
echo -e "${CROSS} Alpine is not supported by Homebrew. Exiting."
|
||||||
BREW_USER=$(awk -F: '$3 >= 1000 && $3 < 65534 { print $1; exit }' /etc/passwd)
|
exit 1
|
||||||
if [ -z "$BREW_USER" ]; then
|
elif grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
|
||||||
msg_error "No non-root user found (uid >= 1000). Homebrew cannot run as root. Create a user first."
|
OS="Debian"
|
||||||
|
else
|
||||||
|
echo -e "${CROSS} Unsupported OS detected. Exiting."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
msg_ok "Detected User: $BREW_USER"
|
|
||||||
|
|
||||||
msg_info "Setting Up Homebrew Prefix"
|
# ==============================================================================
|
||||||
export PATH="/usr/sbin:$PATH"
|
# UNINSTALL
|
||||||
groupadd -f linuxbrew
|
# ==============================================================================
|
||||||
mkdir -p /home/linuxbrew/.linuxbrew
|
function uninstall() {
|
||||||
chown -R "$BREW_USER":linuxbrew /home/linuxbrew
|
msg_info "Uninstalling Homebrew"
|
||||||
chmod 2775 /home/linuxbrew
|
|
||||||
chmod 2775 /home/linuxbrew/.linuxbrew
|
|
||||||
usermod -aG linuxbrew "$BREW_USER"
|
|
||||||
msg_ok "Set Up Homebrew Prefix"
|
|
||||||
|
|
||||||
msg_info "Installing Homebrew"
|
BREW_USER=$(awk -F: '$3 >= 1000 && $3 < 65534 { print $1; exit }' /etc/passwd)
|
||||||
su - "$BREW_USER" -c 'NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"' &>/dev/null
|
if [[ -n "$BREW_USER" ]]; then
|
||||||
msg_ok "Installed Homebrew"
|
BREW_USER_HOME=$(getent passwd "$BREW_USER" | cut -d: -f6)
|
||||||
|
if [[ -f "$BREW_USER_HOME/.bashrc" ]]; then
|
||||||
|
sed -i '/# Homebrew (Linuxbrew)/,/^fi$/d' "$BREW_USER_HOME/.bashrc"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Configuring Shell Integration"
|
rm -rf /home/linuxbrew
|
||||||
cat <<'EOF'> /etc/profile.d/homebrew.sh
|
rm -f /etc/profile.d/homebrew.sh
|
||||||
|
groupdel linuxbrew &>/dev/null || true
|
||||||
|
|
||||||
|
msg_ok "Homebrew has been uninstalled"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# INSTALL
|
||||||
|
# ==============================================================================
|
||||||
|
function install() {
|
||||||
|
msg_info "Detecting Non-Root User"
|
||||||
|
BREW_USER=$(awk -F: '$3 >= 1000 && $3 < 65534 { print $1; exit }' /etc/passwd)
|
||||||
|
if [[ -z "$BREW_USER" ]]; then
|
||||||
|
msg_error "No non-root user found (uid >= 1000). Homebrew cannot run as root. Create a user first."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
msg_ok "Detected User: $BREW_USER"
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y build-essential git curl file procps
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting Up Homebrew Prefix"
|
||||||
|
export PATH="/usr/sbin:$PATH"
|
||||||
|
groupadd -f linuxbrew
|
||||||
|
mkdir -p /home/linuxbrew/.linuxbrew
|
||||||
|
chown -R "$BREW_USER":linuxbrew /home/linuxbrew
|
||||||
|
chmod 2775 /home/linuxbrew
|
||||||
|
chmod 2775 /home/linuxbrew/.linuxbrew
|
||||||
|
usermod -aG linuxbrew "$BREW_USER"
|
||||||
|
msg_ok "Set Up Homebrew Prefix"
|
||||||
|
|
||||||
|
msg_info "Installing Homebrew"
|
||||||
|
$STD su - "$BREW_USER" -c 'NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"'
|
||||||
|
msg_ok "Installed Homebrew"
|
||||||
|
|
||||||
|
msg_info "Configuring Shell Integration"
|
||||||
|
cat <<'EOF'> /etc/profile.d/homebrew.sh
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
if [ -d "/home/linuxbrew/.linuxbrew" ]; then
|
if [ -d "/home/linuxbrew/.linuxbrew" ]; then
|
||||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
chmod +x /etc/profile.d/homebrew.sh
|
chmod +x /etc/profile.d/homebrew.sh
|
||||||
|
|
||||||
BREW_USER_HOME=$(getent passwd "$BREW_USER" | cut -d: -f6)
|
BREW_USER_HOME=$(getent passwd "$BREW_USER" | cut -d: -f6)
|
||||||
if ! grep -q 'linuxbrew' "$BREW_USER_HOME/.bashrc" 2>/dev/null; then
|
if ! grep -q 'linuxbrew' "$BREW_USER_HOME/.bashrc" 2>/dev/null; then
|
||||||
cat >> "$BREW_USER_HOME/.bashrc" << 'EOF'
|
cat >> "$BREW_USER_HOME/.bashrc" << 'EOF'
|
||||||
|
|
||||||
# Homebrew (Linuxbrew)
|
# Homebrew (Linuxbrew)
|
||||||
if [ -d "/home/linuxbrew/.linuxbrew" ]; then
|
if [ -d "/home/linuxbrew/.linuxbrew" ]; then
|
||||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
|
fi
|
||||||
|
msg_ok "Configured Shell Integration"
|
||||||
|
|
||||||
|
msg_info "Verifying Installation"
|
||||||
|
$STD su - "$BREW_USER" -c 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" && brew --version'
|
||||||
|
msg_ok "Homebrew Verified"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
msg_ok "Homebrew installed successfully"
|
||||||
|
msg_ok "Ready for user: ${BL}${BREW_USER}${CL}"
|
||||||
|
msg_ok "Homebrew updates itself via: ${BL}brew update${CL}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# MAIN
|
||||||
|
# ==============================================================================
|
||||||
|
header_info
|
||||||
|
|
||||||
|
if [[ -d "$INSTALL_PATH" ]]; then
|
||||||
|
msg_warn "Homebrew is already installed."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo -n "${TAB}Uninstall Homebrew? (y/N): "
|
||||||
|
read -r uninstall_prompt
|
||||||
|
if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
uninstall
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_warn "No action selected. Exiting."
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
msg_ok "Configured Shell Integration"
|
|
||||||
|
|
||||||
msg_info "Verifying Installation"
|
# Fresh installation
|
||||||
su - "$BREW_USER" -c 'brew --version' &>/dev/null
|
msg_warn "Homebrew is not installed."
|
||||||
msg_ok "Homebrew Verified"
|
echo ""
|
||||||
|
echo -e "${TAB}${INFO} This will install:"
|
||||||
|
echo -e "${TAB} - Homebrew (Linuxbrew) package manager"
|
||||||
|
echo -e "${TAB} - Shell integration for the detected non-root user"
|
||||||
|
echo ""
|
||||||
|
|
||||||
echo -e "Successfully Installed!! Homebrew is ready for user ${BL}${BREW_USER}${CL}"
|
echo -n "${TAB}Install Homebrew? (y/N): "
|
||||||
|
read -r install_prompt
|
||||||
|
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
install
|
||||||
|
else
|
||||||
|
msg_warn "Installation cancelled. Exiting."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user