mirror of
https://github.com/fankes/beszel.git
synced 2025-10-18 17:29:28 +08:00
add freebsd support to agent install script / update command (#39)
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -45,6 +46,16 @@ func (w *openWRTRestarter) Restart() error {
|
|||||||
return exec.Command(w.cmd, "restart", "beszel-agent").Run()
|
return exec.Command(w.cmd, "restart", "beszel-agent").Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type freeBSDRestarter struct{ cmd string }
|
||||||
|
|
||||||
|
func (f *freeBSDRestarter) Restart() error {
|
||||||
|
if err := exec.Command(f.cmd, "beszel-agent", "status").Run(); err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
ghupdate.ColorPrint(ghupdate.ColorYellow, "Restarting beszel-agent via FreeBSD rc…")
|
||||||
|
return exec.Command(f.cmd, "beszel-agent", "restart").Run()
|
||||||
|
}
|
||||||
|
|
||||||
func detectRestarter() restarter {
|
func detectRestarter() restarter {
|
||||||
if path, err := exec.LookPath("systemctl"); err == nil {
|
if path, err := exec.LookPath("systemctl"); err == nil {
|
||||||
return &systemdRestarter{cmd: path}
|
return &systemdRestarter{cmd: path}
|
||||||
@@ -53,6 +64,9 @@ func detectRestarter() restarter {
|
|||||||
return &openRCRestarter{cmd: path}
|
return &openRCRestarter{cmd: path}
|
||||||
}
|
}
|
||||||
if path, err := exec.LookPath("service"); err == nil {
|
if path, err := exec.LookPath("service"); err == nil {
|
||||||
|
if runtime.GOOS == "freebsd" {
|
||||||
|
return &freeBSDRestarter{cmd: path}
|
||||||
|
}
|
||||||
return &openWRTRestarter{cmd: path}
|
return &openWRTRestarter{cmd: path}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@@ -1,3 +1,7 @@
|
|||||||
|
## 0.12.8
|
||||||
|
|
||||||
|
- Add FreeBSD support for agent install script and update command.
|
||||||
|
|
||||||
## 0.12.7
|
## 0.12.7
|
||||||
|
|
||||||
- Make LibreHardwareMonitor opt-in with `LHM=true` environment variable. (#1130)
|
- Make LibreHardwareMonitor opt-in with `LHM=true` environment variable. (#1130)
|
||||||
@@ -8,6 +12,8 @@
|
|||||||
|
|
||||||
- Display system counts (active, paused, down) in All Systems 'view' options. (#1078)
|
- Display system counts (active, paused, down) in All Systems 'view' options. (#1078)
|
||||||
|
|
||||||
|
- Remember All Systems sort order during session.
|
||||||
|
|
||||||
## 0.12.6
|
## 0.12.6
|
||||||
|
|
||||||
- Add maximum 1 minute memory usage.
|
- Add maximum 1 minute memory usage.
|
||||||
|
@@ -8,6 +8,10 @@ is_openwrt() {
|
|||||||
grep -qi "OpenWrt" /etc/os-release
|
grep -qi "OpenWrt" /etc/os-release
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_freebsd() {
|
||||||
|
[ "$(uname -s)" = "FreeBSD" ]
|
||||||
|
}
|
||||||
|
|
||||||
# If SELinux is enabled, set the context of the binary
|
# If SELinux is enabled, set the context of the binary
|
||||||
set_selinux_context() {
|
set_selinux_context() {
|
||||||
# Check if SELinux is enabled and in enforcing or permissive mode
|
# Check if SELinux is enabled and in enforcing or permissive mode
|
||||||
@@ -66,6 +70,96 @@ ensure_trailing_slash() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Generate FreeBSD rc service content
|
||||||
|
generate_freebsd_rc_service() {
|
||||||
|
cat <<'EOF'
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# PROVIDE: beszel_agent
|
||||||
|
# REQUIRE: DAEMON NETWORKING
|
||||||
|
# BEFORE: LOGIN
|
||||||
|
# KEYWORD: shutdown
|
||||||
|
|
||||||
|
# Add the following lines to /etc/rc.conf to configure Beszel Agent:
|
||||||
|
#
|
||||||
|
# beszel_agent_enable (bool): Set to YES to enable Beszel Agent
|
||||||
|
# Default: YES
|
||||||
|
# beszel_agent_env_file (str): Beszel Agent env configuration file
|
||||||
|
# Default: /opt/beszel-agent/env
|
||||||
|
# beszel_agent_user (str): Beszel Agent daemon user
|
||||||
|
# Default: beszel
|
||||||
|
# beszel_agent_bin (str): Path to the beszel-agent binary
|
||||||
|
# Default: /opt/beszel-agent/beszel-agent
|
||||||
|
# beszel_agent_flags (str): Extra flags passed to beszel-agent command invocation
|
||||||
|
# Default:
|
||||||
|
|
||||||
|
. /etc/rc.subr
|
||||||
|
|
||||||
|
name="beszel_agent"
|
||||||
|
rcvar=beszel_agent_enable
|
||||||
|
|
||||||
|
load_rc_config $name
|
||||||
|
: ${beszel_agent_enable:="YES"}
|
||||||
|
: ${beszel_agent_user:="beszel"}
|
||||||
|
: ${beszel_agent_flags:=""}
|
||||||
|
: ${beszel_agent_env_file:="/opt/beszel-agent/env"}
|
||||||
|
: ${beszel_agent_bin:="/opt/beszel-agent/beszel-agent"}
|
||||||
|
|
||||||
|
logfile="/var/log/${name}.log"
|
||||||
|
pidfile="/var/run/${name}.pid"
|
||||||
|
|
||||||
|
procname="/usr/sbin/daemon"
|
||||||
|
start_precmd="${name}_prestart"
|
||||||
|
start_cmd="${name}_start"
|
||||||
|
stop_cmd="${name}_stop"
|
||||||
|
|
||||||
|
extra_commands="upgrade"
|
||||||
|
upgrade_cmd="beszel_agent_upgrade"
|
||||||
|
|
||||||
|
beszel_agent_prestart()
|
||||||
|
{
|
||||||
|
if [ ! -f "${beszel_agent_env_file}" ]; then
|
||||||
|
echo WARNING: missing "${beszel_agent_env_file}" env file. Start aborted.
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
beszel_agent_start()
|
||||||
|
{
|
||||||
|
echo "Starting ${name}"
|
||||||
|
/usr/sbin/daemon -fc \
|
||||||
|
-P "${pidfile}" \
|
||||||
|
-o "${logfile}" \
|
||||||
|
-u "${beszel_agent_user}" \
|
||||||
|
"${beszel_agent_bin}" ${beszel_agent_flags}
|
||||||
|
}
|
||||||
|
|
||||||
|
beszel_agent_stop()
|
||||||
|
{
|
||||||
|
pid="$(check_pidfile "${pidfile}" "${procname}")"
|
||||||
|
if [ -n "${pid}" ]; then
|
||||||
|
echo "Stopping ${name} (pid=${pid})"
|
||||||
|
kill -- "-${pid}"
|
||||||
|
wait_for_pids "${pid}"
|
||||||
|
else
|
||||||
|
echo "${name} isn't running"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
beszel_agent_upgrade()
|
||||||
|
{
|
||||||
|
echo "Upgrading ${name}"
|
||||||
|
if command -v sudo >/dev/null; then
|
||||||
|
sudo -u "${beszel_agent_user}" -- "${beszel_agent_bin}" update
|
||||||
|
else
|
||||||
|
su -m "${beszel_agent_user}" -c "${beszel_agent_bin} update"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
run_rc_command "$1"
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
# Default values
|
# Default values
|
||||||
PORT=45876
|
PORT=45876
|
||||||
UNINSTALL=false
|
UNINSTALL=false
|
||||||
@@ -237,6 +331,28 @@ if [ "$UNINSTALL" = true ]; then
|
|||||||
echo "Removing the daily update service..."
|
echo "Removing the daily update service..."
|
||||||
rm -f /etc/crontabs/beszel
|
rm -f /etc/crontabs/beszel
|
||||||
|
|
||||||
|
elif is_freebsd; then
|
||||||
|
echo "Stopping and disabling the agent service..."
|
||||||
|
service beszel-agent stop
|
||||||
|
sysrc beszel_agent_enable="NO"
|
||||||
|
|
||||||
|
echo "Removing the FreeBSD service files..."
|
||||||
|
rm -f /usr/local/etc/rc.d/beszel-agent
|
||||||
|
|
||||||
|
# Remove the daily update cron job if it exists
|
||||||
|
echo "Removing the daily update cron job..."
|
||||||
|
if crontab -u root -l 2>/dev/null | grep -q "beszel-agent.*update"; then
|
||||||
|
crontab -u root -l 2>/dev/null | grep -v "beszel-agent.*update" | crontab -u root -
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove log files
|
||||||
|
echo "Removing log files..."
|
||||||
|
rm -f /var/log/beszel-agent.log
|
||||||
|
|
||||||
|
# Remove env file
|
||||||
|
echo "Removing environment configuration file..."
|
||||||
|
rm -f /opt/beszel-agent/env
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "Stopping and disabling the agent service..."
|
echo "Stopping and disabling the agent service..."
|
||||||
systemctl stop beszel-agent.service
|
systemctl stop beszel-agent.service
|
||||||
@@ -262,6 +378,8 @@ if [ "$UNINSTALL" = true ]; then
|
|||||||
killall beszel-agent 2>/dev/null
|
killall beszel-agent 2>/dev/null
|
||||||
if is_alpine || is_openwrt; then
|
if is_alpine || is_openwrt; then
|
||||||
deluser beszel 2>/dev/null
|
deluser beszel 2>/dev/null
|
||||||
|
elif is_freebsd; then
|
||||||
|
pw user del beszel 2>/dev/null
|
||||||
else
|
else
|
||||||
userdel beszel 2>/dev/null
|
userdel beszel 2>/dev/null
|
||||||
fi
|
fi
|
||||||
@@ -298,6 +416,11 @@ elif package_installed opkg; then
|
|||||||
opkg update
|
opkg update
|
||||||
opkg install tar curl coreutils
|
opkg install tar curl coreutils
|
||||||
fi
|
fi
|
||||||
|
elif package_installed pkg && is_freebsd; then
|
||||||
|
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
||||||
|
pkg update
|
||||||
|
pkg install -y gtar curl coreutils
|
||||||
|
fi
|
||||||
elif package_installed apt-get; then
|
elif package_installed apt-get; then
|
||||||
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
||||||
apt-get update
|
apt-get update
|
||||||
@@ -378,6 +501,16 @@ elif is_openwrt; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
elif is_freebsd; then
|
||||||
|
if ! id -u beszel >/dev/null 2>&1; then
|
||||||
|
pw user add beszel -u 2000 -d /nonexistent -s /usr/sbin/nologin -c "beszel user"
|
||||||
|
fi
|
||||||
|
# Add the user to the wheel group to allow self-updates
|
||||||
|
if pw group show wheel >/dev/null 2>&1; then
|
||||||
|
echo "Adding beszel to wheel group for self-updates"
|
||||||
|
pw group mod wheel -m beszel
|
||||||
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
if ! id -u beszel >/dev/null 2>&1; then
|
if ! id -u beszel >/dev/null 2>&1; then
|
||||||
useradd --system --home-dir /nonexistent --shell /bin/false beszel
|
useradd --system --home-dir /nonexistent --shell /bin/false beszel
|
||||||
@@ -623,6 +756,68 @@ EOF
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
elif is_freebsd; then
|
||||||
|
echo "Creating FreeBSD rc service..."
|
||||||
|
|
||||||
|
# Create environment configuration file with proper permissions
|
||||||
|
echo "Creating environment configuration file..."
|
||||||
|
cat >/opt/beszel-agent/env <<EOF
|
||||||
|
LISTEN=$PORT
|
||||||
|
KEY="$KEY"
|
||||||
|
TOKEN=$TOKEN
|
||||||
|
HUB_URL=$HUB_URL
|
||||||
|
EOF
|
||||||
|
chmod 640 /opt/beszel-agent/env
|
||||||
|
chown root:beszel /opt/beszel-agent/env
|
||||||
|
|
||||||
|
# Create the rc service file
|
||||||
|
generate_freebsd_rc_service > /usr/local/etc/rc.d/beszel-agent
|
||||||
|
|
||||||
|
# Set proper permissions for the rc script
|
||||||
|
chmod 755 /usr/local/etc/rc.d/beszel-agent
|
||||||
|
|
||||||
|
# Enable and start the service
|
||||||
|
echo "Enabling and starting the agent service..."
|
||||||
|
sysrc beszel_agent_enable="YES"
|
||||||
|
service beszel-agent restart
|
||||||
|
|
||||||
|
# Check if service started successfully
|
||||||
|
sleep 2
|
||||||
|
if ! service beszel-agent status | grep -q "is running"; then
|
||||||
|
echo "Error: The Beszel Agent service failed to start. Checking logs..."
|
||||||
|
tail -n 20 /var/log/beszel_agent.log
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Auto-update service for FreeBSD
|
||||||
|
if [ "$AUTO_UPDATE_FLAG" = "true" ]; then
|
||||||
|
AUTO_UPDATE="y"
|
||||||
|
elif [ "$AUTO_UPDATE_FLAG" = "false" ]; then
|
||||||
|
AUTO_UPDATE="n"
|
||||||
|
else
|
||||||
|
printf "\nEnable automatic daily updates for beszel-agent? (y/n): "
|
||||||
|
read AUTO_UPDATE
|
||||||
|
fi
|
||||||
|
case "$AUTO_UPDATE" in
|
||||||
|
[Yy]*)
|
||||||
|
echo "Setting up daily automatic updates for beszel-agent..."
|
||||||
|
|
||||||
|
# Create cron job to run beszel-agent update command daily
|
||||||
|
if ! crontab -u root -l 2>/dev/null | grep -q "beszel-agent.*update"; then
|
||||||
|
(crontab -u root -l 2>/dev/null; echo "12 0 * * * /opt/beszel-agent/beszel-agent update >/dev/null 2>&1") | crontab -u root -
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\nDaily updates have been enabled via cron job.\n"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Check service status
|
||||||
|
if ! service beszel-agent status >/dev/null 2>&1; then
|
||||||
|
echo "Error: The Beszel Agent service is not running."
|
||||||
|
service beszel-agent status
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
# Original systemd service installation code
|
# Original systemd service installation code
|
||||||
echo "Creating the systemd service for the agent..."
|
echo "Creating the systemd service for the agent..."
|
||||||
@@ -729,4 +924,4 @@ EOF
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf "\n\033[32mBeszel Agent has been installed successfully! It is now running on port $PORT.\033[0m\n"
|
printf "\n\033[32mBeszel Agent has been installed successfully! It is now running on $PORT.\033[0m\n"
|
||||||
|
Reference in New Issue
Block a user