mirror of
https://github.com/fankes/beszel.git
synced 2025-10-19 17:59:28 +08:00
feat(install): enhance install-agent.sh with China mirror support
- Add `-c` flag to use GitHub mirror (ghp.ci) for mainland China users - Implement checksum verification for downloaded files - Add progress bar for file downloads This change improves installation reliability and user experience, especially for users in regions (China mainland etc.) with limited GitHub access.
This commit is contained in:
@@ -4,22 +4,32 @@ version=0.0.1
|
|||||||
# Define default values
|
# Define default values
|
||||||
PORT=45876
|
PORT=45876
|
||||||
UNINSTALL=false
|
UNINSTALL=false
|
||||||
|
CHINA_MAINLAND=false
|
||||||
|
GITHUB_URL="https://github.com"
|
||||||
|
GITHUB_API_URL="https://api.github.com"
|
||||||
|
|
||||||
# Read command line options
|
# Read command line options
|
||||||
while getopts "k:p:uh" opt; do
|
while getopts "k:p:uhc" opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
k) KEY="$OPTARG";;
|
k) KEY="$OPTARG" ;;
|
||||||
p) PORT="$OPTARG";;
|
p) PORT="$OPTARG" ;;
|
||||||
u) UNINSTALL=true;;
|
u) UNINSTALL=true ;;
|
||||||
h) printf "Beszel Agent installation script\n\n"
|
c) CHINA_MAINLAND=true ;;
|
||||||
printf "Usage: ./install-agent.sh [options]\n\n"
|
h)
|
||||||
printf "Options: \n"
|
printf "Beszel Agent installation script\n\n"
|
||||||
printf " -k : SSH key (required, or interactive if not provided)\n"
|
printf "Usage: ./install-agent.sh [options]\n\n"
|
||||||
printf " -p : Port (default: $PORT)\n"
|
printf "Options: \n"
|
||||||
printf " -u : Uninstall Beszel Agent\n"
|
printf " -k : SSH key (required, or interactive if not provided)\n"
|
||||||
printf " -h : Display this help message\n"
|
printf " -p : Port (default: $PORT)\n"
|
||||||
exit 0;;
|
printf " -u : Uninstall Beszel Agent\n"
|
||||||
?) echo "Invalid option: -$OPTARG"; exit 1;;
|
printf " -c : Using GitHub mirror sources to resolve network timeout issues in mainland China\n"
|
||||||
|
printf " -h : Display this help message\n"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
?)
|
||||||
|
echo "Invalid option: -$OPTARG"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -64,6 +74,20 @@ if [ "$UNINSTALL" = true ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$CHINA_MAINLAND" = true ]; then
|
||||||
|
printf "\nConfirmed to use GitHub mirrors (ghp.ci) for download beszel-agent?\nThis helps to install Agent properly in mainland China. (Y/n): "
|
||||||
|
read USE_MIRROR
|
||||||
|
USE_MIRROR=${USE_MIRROR:-Y}
|
||||||
|
if [ "$USE_MIRROR" = "Y" ] || [ "$USE_MIRROR" = "y" ]; then
|
||||||
|
GITHUB_URL="https://ghp.ci/https://github.com"
|
||||||
|
# In China, only github.com is blocked, while api.github.com is not (for now).
|
||||||
|
# GITHUB_API_URL="https://api.github.com"
|
||||||
|
echo "Using GitHub Mirror for downloads..."
|
||||||
|
else
|
||||||
|
echo "GitHub mirrors will not be used for installation."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Function to check if a package is installed
|
# Function to check if a package is installed
|
||||||
package_installed() {
|
package_installed() {
|
||||||
command -v "$1" >/dev/null 2>&1
|
command -v "$1" >/dev/null 2>&1
|
||||||
@@ -71,20 +95,20 @@ package_installed() {
|
|||||||
|
|
||||||
# Check for package manager and install necessary packages if not installed
|
# Check for package manager and install necessary packages if not installed
|
||||||
if package_installed apt-get; then
|
if package_installed apt-get; then
|
||||||
if ! package_installed tar || ! package_installed curl; then
|
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y tar curl
|
apt-get install -y tar curl coreutils
|
||||||
fi
|
fi
|
||||||
elif package_installed yum; then
|
elif package_installed yum; then
|
||||||
if ! package_installed tar || ! package_installed curl; then
|
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
||||||
yum install -y tar curl
|
yum install -y tar curl coreutils
|
||||||
fi
|
fi
|
||||||
elif package_installed pacman; then
|
elif package_installed pacman; then
|
||||||
if ! package_installed tar || ! package_installed curl; then
|
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
||||||
pacman -Sy --noconfirm tar curl
|
pacman -Sy --noconfirm tar curl coreutils
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Warning: Please ensure 'tar' and 'curl' are installed."
|
echo "Warning: Please ensure 'tar' and 'curl' and 'sha256sum (coreutils)' are installed."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If no SSH key is provided, ask for the SSH key interactively
|
# If no SSH key is provided, ask for the SSH key interactively
|
||||||
@@ -93,6 +117,16 @@ if [ -z "$KEY" ]; then
|
|||||||
read KEY
|
read KEY
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Verify checksum
|
||||||
|
if command -v sha256sum >/dev/null; then
|
||||||
|
CHECK_CMD="sha256sum"
|
||||||
|
elif command -v md5 >/dev/null; then
|
||||||
|
CHECK_CMD="md5 -q"
|
||||||
|
else
|
||||||
|
echo "No MD5 checksum utility found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Create a dedicated user for the service if it doesn't exist
|
# Create a dedicated user for the service if it doesn't exist
|
||||||
if ! id -u beszel > /dev/null 2>&1; then
|
if ! id -u beszel > /dev/null 2>&1; then
|
||||||
echo "Creating a dedicated user for the Beszel Agent service..."
|
echo "Creating a dedicated user for the Beszel Agent service..."
|
||||||
@@ -111,12 +145,52 @@ fi
|
|||||||
|
|
||||||
# Download and install the Beszel Agent
|
# Download and install the Beszel Agent
|
||||||
echo "Downloading and installing the 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
|
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
||||||
mv ./beszel-agent /opt/beszel-agent/beszel-agent
|
ARCH=$(uname -m | sed 's/x86_64/amd64/' | sed 's/armv7l/arm/' | sed 's/aarch64/arm64/')
|
||||||
|
FILE_NAME="beszel-agent_${OS}_${ARCH}.tar.gz"
|
||||||
|
LATEST_VERSION=$(curl -s "$GITHUB_API_URL""/repos/henrygd/beszel/releases/latest" | grep -o '"tag_name": "v[^"]*"' | cut -d'"' -f4 | tr -d 'v')
|
||||||
|
if [ -z "$LATEST_VERSION" ]; then
|
||||||
|
echo "Failed to get latest version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Downloading and installing agent version ${LATEST_VERSION} from ${GITHUB_URL} ..."
|
||||||
|
|
||||||
|
# Download checksums file
|
||||||
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
cd "$TEMP_DIR" || exit 1
|
||||||
|
CHECKSUM=$(curl -sL "$GITHUB_URL/henrygd/beszel/releases/download/v${LATEST_VERSION}/beszel_${LATEST_VERSION}_checksums.txt" | grep "$FILE_NAME" | cut -d' ' -f1)
|
||||||
|
if [ -z "$CHECKSUM" ] || ! echo "$CHECKSUM" | grep -qE "^[a-fA-F0-9]{64}$"; then
|
||||||
|
echo "Failed to get checksum or invalid checksum format"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! curl -#L "$GITHUB_URL/henrygd/beszel/releases/download/v${LATEST_VERSION}/$FILE_NAME" -o "$FILE_NAME"; then
|
||||||
|
echo "Failed to download the agent from ""$GITHUB_URL/henrygd/beszel/releases/download/v${LATEST_VERSION}/$FILE_NAME"
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$($CHECK_CMD "$FILE_NAME" | cut -d' ' -f1)" != "$CHECKSUM" ]; then
|
||||||
|
echo "Checksum verification failed: $($CHECK_CMD "$FILE_NAME" | cut -d' ' -f1) & $CHECKSUM"
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! tar -xzf "$FILE_NAME" beszel-agent; then
|
||||||
|
echo "Failed to extract the agent"
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mv beszel-agent /opt/beszel-agent/beszel-agent
|
||||||
chown beszel:beszel /opt/beszel-agent/beszel-agent
|
chown beszel:beszel /opt/beszel-agent/beszel-agent
|
||||||
chmod 755 /opt/beszel-agent/beszel-agent
|
chmod 755 /opt/beszel-agent/beszel-agent
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
|
||||||
# Create the systemd service
|
# Create the systemd service
|
||||||
echo "Creating the systemd service for the agent..."
|
echo "Creating the systemd service for the agent..."
|
||||||
cat > /etc/systemd/system/beszel-agent.service << EOF
|
cat > /etc/systemd/system/beszel-agent.service << EOF
|
||||||
|
Reference in New Issue
Block a user