mirror of
https://github.com/fankes/beszel.git
synced 2025-10-19 17:59:28 +08:00
191 lines
5.5 KiB
Bash
Executable File
191 lines
5.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
version=0.0.1
|
|
# Define default values
|
|
PORT=45876
|
|
UNINSTALL=false
|
|
|
|
# Read command line options
|
|
while getopts "k:p:uh" opt; do
|
|
case $opt in
|
|
k) KEY="$OPTARG";;
|
|
p) PORT="$OPTARG";;
|
|
u) UNINSTALL=true;;
|
|
h) printf "Beszel Agent installation script\n\n"
|
|
printf "Usage: ./install-agent.sh [options]\n\n"
|
|
printf "Options: \n"
|
|
printf " -k : SSH key (required, or interactive if not provided)\n"
|
|
printf " -p : Port (default: $PORT)\n"
|
|
printf " -u : Uninstall Beszel Agent\n"
|
|
printf " -h : Display this help message\n"
|
|
exit 0;;
|
|
?) echo "Invalid option: -$OPTARG"; exit 1;;
|
|
esac
|
|
done
|
|
|
|
# Check if running as root
|
|
if [ "$(id -u)" != "0" ]; then
|
|
if command -v sudo >/dev/null 2>&1; then
|
|
exec sudo "$0" "$@"
|
|
else
|
|
echo "This script must be run as root. Please either:"
|
|
echo "1. Run this script as root (su root)"
|
|
echo "2. Install sudo and run with sudo"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Uninstall process
|
|
if [ "$UNINSTALL" = true ]; then
|
|
echo "Stopping and disabling the agent service..."
|
|
systemctl stop beszel-agent.service
|
|
systemctl disable beszel-agent.service
|
|
|
|
echo "Removing the systemd service file..."
|
|
rm /etc/systemd/system/beszel-agent.service
|
|
|
|
# Remove the update timer and service if they exist
|
|
echo "Removing the daily update service and timer..."
|
|
systemctl stop beszel-agent-update.timer 2>/dev/null
|
|
systemctl disable beszel-agent-update.timer 2>/dev/null
|
|
rm -f /etc/systemd/system/beszel-agent-update.service
|
|
rm -f /etc/systemd/system/beszel-agent-update.timer
|
|
|
|
systemctl daemon-reload
|
|
|
|
echo "Removing the Beszel Agent directory..."
|
|
rm -rf /opt/beszel-agent
|
|
|
|
echo "Removing the dedicated user for the agent service..."
|
|
killall beszel-agent
|
|
userdel beszel
|
|
|
|
echo "Beszel Agent has been uninstalled successfully!"
|
|
exit 0
|
|
fi
|
|
|
|
# Function to check if a package is installed
|
|
package_installed() {
|
|
command -v "$1" >/dev/null 2>&1
|
|
}
|
|
|
|
# Check for package manager and install necessary packages if not installed
|
|
if package_installed apt-get; then
|
|
if ! package_installed tar || ! package_installed curl; then
|
|
apt-get update
|
|
apt-get install -y tar curl
|
|
fi
|
|
elif package_installed yum; then
|
|
if ! package_installed tar || ! package_installed curl; then
|
|
yum install -y tar curl
|
|
fi
|
|
elif package_installed pacman; then
|
|
if ! package_installed tar || ! package_installed curl; then
|
|
pacman -Sy --noconfirm tar curl
|
|
fi
|
|
else
|
|
echo "Warning: Please ensure 'tar' and 'curl' are installed."
|
|
fi
|
|
|
|
# If no SSH key is provided, ask for the SSH key interactively
|
|
if [ -z "$KEY" ]; then
|
|
printf "Enter your SSH key: "
|
|
read KEY
|
|
fi
|
|
|
|
# Create a dedicated user for the service if it doesn't exist
|
|
if ! id -u beszel > /dev/null 2>&1; then
|
|
echo "Creating a dedicated user for the Beszel Agent service..."
|
|
useradd -M -s /bin/false beszel
|
|
fi
|
|
# Add the user to the docker group to allow access to the Docker socket
|
|
usermod -aG docker beszel
|
|
|
|
# Create the directory for the Beszel Agent
|
|
if [ ! -d "/opt/beszel-agent" ]; then
|
|
echo "Creating the directory for the Beszel Agent..."
|
|
mkdir -p /opt/beszel-agent
|
|
chown beszel:beszel /opt/beszel-agent
|
|
chmod 755 /opt/beszel-agent
|
|
fi
|
|
|
|
# Download and install the Beszel Agent
|
|
echo "Downloading and installing the agent..."
|
|
curl -sL "https://github.com/henrygd/beszel/releases/latest/download/beszel-agent_$(uname -s)_$(uname -m | sed 's/x86_64/amd64/' | sed 's/armv7l/arm/' | sed 's/aarch64/arm64/').tar.gz" \
|
|
| tar -xz -O beszel-agent | tee ./beszel-agent >/dev/null
|
|
mv ./beszel-agent /opt/beszel-agent/beszel-agent
|
|
chown beszel:beszel /opt/beszel-agent/beszel-agent
|
|
chmod 755 /opt/beszel-agent/beszel-agent
|
|
|
|
# Create the systemd service
|
|
echo "Creating the systemd service for the agent..."
|
|
cat > /etc/systemd/system/beszel-agent.service << EOF
|
|
[Unit]
|
|
Description=Beszel Agent Service
|
|
After=network.target
|
|
|
|
[Service]
|
|
Environment="PORT=$PORT"
|
|
Environment="KEY=$KEY"
|
|
# Environment="EXTRA_FILESYSTEMS=sdb"
|
|
ExecStart=/opt/beszel-agent/beszel-agent
|
|
User=beszel
|
|
Restart=always
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
# Load and start the service
|
|
printf "\nLoading and starting the agent service...\n"
|
|
systemctl daemon-reload
|
|
systemctl enable beszel-agent.service
|
|
systemctl start beszel-agent.service
|
|
|
|
# Prompt for auto-update setup
|
|
printf "\nWould you like to enable automatic daily updates for beszel-agent? (y/n): "
|
|
read AUTO_UPDATE
|
|
case "$AUTO_UPDATE" in
|
|
[Yy]*)
|
|
echo "Setting up daily automatic updates for beszel-agent..."
|
|
|
|
# Create systemd service for the daily update
|
|
cat > /etc/systemd/system/beszel-agent-update.service << EOF
|
|
[Unit]
|
|
Description=Update beszel-agent if needed
|
|
Wants=beszel-agent.service
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/bin/sh -c '/opt/beszel-agent/beszel-agent update | grep -q "Successfully updated" && systemctl restart beszel-agent'
|
|
EOF
|
|
|
|
# Create systemd timer for the daily update
|
|
cat > /etc/systemd/system/beszel-agent-update.timer << EOF
|
|
[Unit]
|
|
Description=Run beszel-agent update daily
|
|
|
|
[Timer]
|
|
OnCalendar=daily
|
|
Persistent=true
|
|
RandomizedDelaySec=4h
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable --now beszel-agent-update.timer
|
|
|
|
printf "\nAutomatic daily updates have been enabled.\n"
|
|
;;
|
|
esac
|
|
|
|
# Wait for the service to start or fail
|
|
if [ "$(systemctl is-active beszel-agent.service)" != "active" ]; then
|
|
echo "Error: The Beszel Agent service is not running."
|
|
echo "$(systemctl status beszel-agent.service)"
|
|
exit 1
|
|
fi
|
|
|
|
printf "\n\033[32mBeszel Agent has been installed successfully! It is now running on port $PORT.\033[0m\n" |