diff --git a/go.mod b/go.mod index 4f243ae..4fb3e7b 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/UserExistsError/conpty v0.1.4 github.com/blang/semver v3.5.1+incompatible github.com/creack/pty v1.1.24 + github.com/go-ping/ping v1.2.0 github.com/gorilla/websocket v1.5.3 github.com/rhysd/go-github-selfupdate v1.2.3 github.com/shirou/gopsutil v3.21.11+incompatible @@ -15,8 +16,6 @@ require ( require ( github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-ping/ping v1.2.0 // indirect - github.com/golang/protobuf v1.3.2 // indirect github.com/google/go-github/v30 v30.1.0 // indirect github.com/google/go-querystring v1.0.0 // indirect github.com/google/uuid v1.2.0 // indirect @@ -33,5 +32,4 @@ require ( golang.org/x/net v0.21.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - google.golang.org/appengine v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index e644269..d1ba1a9 100644 --- a/go.sum +++ b/go.sum @@ -13,7 +13,6 @@ github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU github.com/go-ping/ping v1.2.0 h1:vsJ8slZBZAXNCK4dPcI2PEE9eM9n9RbXbGouVQ/Y4yQ= github.com/go-ping/ping v1.2.0/go.mod h1:xIFjORFzTxqIV/tDVGO4eDy/bLuSyawEeojSm3GfRGk= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/google/go-github/v30 v30.1.0 h1:VLDx+UolQICEOKu2m4uAoMti1SxuEBAl7RSEG16L+Oo= github.com/google/go-github/v30 v30.1.0/go.mod h1:n8jBpHl45a/rlBUtRJMOG4GhNADUQFEufcolZ95JfU8= @@ -58,20 +57,17 @@ github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oW github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288 h1:JIqe8uIcRBHXDQVvZtHwp80ai3Lw3IJAeJEs55Dc1W0= golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= @@ -85,20 +81,17 @@ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.3.0 h1:FBSsiFRMz3LBeXIomRnVzrQwSDj4ibvcRexLG0LZGQk= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/install.sh b/install.sh index c0d92c1..f7b7a0e 100644 --- a/install.sh +++ b/install.sh @@ -12,11 +12,11 @@ NC='\033[0m' # No Color # Logging functions log_info() { - echo -e "${BLUE}[INFO]${NC} $1" + echo -e "${NC} $1" } log_success() { - echo -e "${GREEN}[SUCCESS]${NC} $1" + echo -e "${GREEN}${NC} $1" } log_warning() { @@ -28,7 +28,7 @@ log_error() { } log_step() { - echo -e "${PURPLE}[STEP]${NC} $1" + echo -e "${NC} $1" } log_config() { @@ -115,6 +115,11 @@ uninstall_previous() { rc-service ${service_name} stop rc-update del ${service_name} default rm -f "/etc/init.d/${service_name}" + elif command -v uci >/dev/null 2>&1 && [ -f "/etc/init.d/${service_name}" ]; then + log_info "Stopping and disabling existing procd service..." + /etc/init.d/${service_name} stop + /etc/init.d/${service_name} disable + rm -f "/etc/init.d/${service_name}" fi # Remove old binary if it exists @@ -186,30 +191,28 @@ case $arch in esac log_info "Detected architecture: ${GREEN}$arch${NC}" -current_version="" +version_to_install="latest" if [ -n "$install_version" ]; then log_info "Attempting to install specified version: ${GREEN}$install_version${NC}" - current_version="$install_version" + version_to_install="$install_version" else - api_url="https://api.github.com/repos/komari-monitor/komari-agent/releases/latest" - log_step "Fetching latest version from GitHub API..." - current_version=$(curl -s "$api_url" | grep "tag_name" | cut -d'"' -f4) - if [ -z "$current_version" ]; then - log_error "Could not fetch latest version" - exit 1 - fi - log_success "Latest version fetched: ${GREEN}$current_version${NC}" + log_info "No version specified, installing the latest version." fi -log_success "Installing Komari Agent version: ${GREEN}$current_version${NC}" # Construct download URL file_name="komari-agent-linux-${arch}" +if [ "$version_to_install" = "latest" ]; then + download_path="latest/download" +else + download_path="download/${version_to_install}" +fi + if [ -n "$github_proxy" ]; then # Use proxy for GitHub releases - download_url="${github_proxy}/https://github.com/komari-monitor/komari-agent/releases/download/${current_version}/${file_name}" + download_url="${github_proxy}/https://github.com/komari-monitor/komari-agent/releases/${download_path}/${file_name}" else # Direct access to GitHub releases - download_url="https://github.com/komari-monitor/komari-agent/releases/download/${current_version}/${file_name}" + download_url="https://github.com/komari-monitor/komari-agent/releases/${download_path}/${file_name}" fi log_step "Creating installation directory: ${GREEN}$target_dir${NC}" @@ -287,8 +290,48 @@ EOF rc-update add ${service_name} default rc-service ${service_name} start log_success "OpenRC service configured and started" +elif command -v uci >/dev/null 2>&1; then + # procd service configuration (OpenWrt) + log_info "Using procd for service management" + service_file="/etc/init.d/${service_name}" + cat > "$service_file" << EOF +#!/bin/sh /etc/rc.common + +START=99 +STOP=10 + +USE_PROCD=1 + +PROG="${komari_agent_path}" +ARGS="${komari_args}" + +start_service() { + procd_open_instance + procd_set_param command \$PROG \$ARGS + procd_set_param respawn + procd_set_param stdout 1 + procd_set_param stderr 1 + procd_set_param user root + procd_close_instance +} + +stop_service() { + killall \$(basename \$PROG) +} + +reload_service() { + stop + start +} +EOF + + # Set permissions and enable service + chmod +x "$service_file" + /etc/init.d/${service_name} enable + /etc/init.d/${service_name} start + log_success "procd service configured and started" else - log_error "Unsupported init system (neither systemd nor openrc found)" + log_error "Unsupported init system (systemd, openrc, or procd not found)" exit 1 fi