浏览代码

release: Fix packages

世界 6 月之前
父节点
当前提交
6a051054db

+ 1 - 1
.github/workflows/build.yml

@@ -181,7 +181,7 @@ jobs:
           fi
           echo "DIR_NAME=${DIR_NAME}" >> "${GITHUB_ENV}"
           PKG_VERSION="${{ needs.calculate_version.outputs.version }}"
-          PKG_VERSION="${PKG_VERSION//-/\~}-1"
+          PKG_VERSION="${PKG_VERSION//-/\~}"
           echo "PKG_VERSION=${PKG_VERSION}" >> "${GITHUB_ENV}"
       - name: Package DEB
         if: matrix.debian != ''

+ 2 - 0
.github/workflows/linux.yml

@@ -120,6 +120,7 @@ jobs:
           set -xeuo pipefail
           sudo gem install fpm
           sudo apt-get install -y debsigs
+          cp .fpm_systemd .fpm
           fpm -t deb \
             --name "${NAME}" \
             -v "$PKG_VERSION" \
@@ -138,6 +139,7 @@ jobs:
         run: |-
           set -xeuo pipefail
           sudo gem install fpm
+          cp .fpm_systemd .fpm
           fpm -t rpm \
             --name "${NAME}" \
             -v "$PKG_VERSION" \

+ 42 - 41
docs/installation/package-manager.md

@@ -8,56 +8,57 @@ icon: material/package
 
 === ":material-debian: Debian / APT"
 
-   ```bash
-   sudo mkdir -p /etc/apt/keyrings &&
-      sudo curl -fsSL https://sing-box.app/gpg.key -o /etc/apt/keyrings/sagernet.asc &&
-      sudo chmod a+r /etc/apt/keyrings/sagernet.asc &&
-      echo '
-   Types: deb
-   URIs: https://deb.sagernet.org/
-   Suites: *
-   Components: *
-   Enabled: yes
-   Signed-By: /etc/apt/keyrings/sagernet.asc
-   ' | sudo tee /etc/apt/sources.list.d/sagernet.sources &&
-      sudo apt-get update &&
-      sudo apt-get install sing-box # or sing-box-beta
-   ```
+    ```bash
+    sudo mkdir -p /etc/apt/keyrings &&
+       sudo curl -fsSL https://sing-box.app/gpg.key -o /etc/apt/keyrings/sagernet.asc &&
+       sudo chmod a+r /etc/apt/keyrings/sagernet.asc &&
+       echo '
+    Types: deb
+    URIs: https://deb.sagernet.org/
+    Suites: *
+    Components: *
+    Enabled: yes
+    Signed-By: /etc/apt/keyrings/sagernet.asc
+    ' | sudo tee /etc/apt/sources.list.d/sagernet.sources &&
+       sudo apt-get update &&
+       sudo apt-get install sing-box # or sing-box-beta
+    ```
 
 === ":material-redhat: Redhat / DNF 5"
 
-   ```bash
-   sudo dnf config-manager addrepo --from-repofile=https://sing-box.app/sing-box.repo &&
-   sudo dnf install sing-box # or sing-box-beta
-   ```
+    ```bash
+    sudo dnf config-manager addrepo --from-repofile=https://sing-box.app/sing-box.repo &&
+    sudo dnf install sing-box # or sing-box-beta
+    ```
 
 === ":material-redhat: Redhat / DNF 4"
 
-   ```bash
-   sudo dnf config-manager --add-repo https://sing-box.app/sing-box.repo &&
-   sudo dnf -y install dnf-plugins-core &&
-   sudo dnf install sing-box # or sing-box-beta
-   ```
+    ```bash
+    sudo dnf config-manager --add-repo https://sing-box.app/sing-box.repo &&
+    sudo dnf -y install dnf-plugins-core &&
+    sudo dnf install sing-box # or sing-box-beta
+    ```
 
 ## :material-download-box: Manual Installation
 
-   The script download and install the latest package from GitHub releases for deb or rpm based Linux distributions, ArchLinux and OpenWrt.
-   
-   ```shell
-   curl -fsSL https://sing-box.app/install.sh | sh
-   ```
-   
-   or latest beta:
-   
-   ```shell
-   curl -fsSL https://sing-box.app/install.sh | sh -s -- --beta
-   ```
-   
-   or specific version:
-   
-   ```shell
-   curl -fsSL https://sing-box.app/install.sh | sh -s -- --version <version>
-   ```
+The script download and install the latest package from GitHub releases
+for deb or rpm based Linux distributions, ArchLinux and OpenWrt.
+
+```shell
+curl -fsSL https://sing-box.app/install.sh | sh
+```
+
+or latest beta:
+
+```shell
+curl -fsSL https://sing-box.app/install.sh | sh -s -- --beta
+```
+
+or specific version:
+
+```shell
+curl -fsSL https://sing-box.app/install.sh | sh -s -- --version <version>
+```
 
 ## :material-book-lock-open: Managed Installation
 

+ 21 - 22
docs/installation/package-manager.zh.md

@@ -26,39 +26,38 @@ icon: material/package
 
 === ":material-redhat: Redhat / DNF 5"
 
-   ```bash
-   sudo dnf config-manager addrepo --from-repofile=https://sing-box.app/sing-box.repo &&
-   sudo dnf install sing-box # or sing-box-beta
-   ```
+    ```bash
+    sudo dnf config-manager addrepo --from-repofile=https://sing-box.app/sing-box.repo &&
+    sudo dnf install sing-box # or sing-box-beta
+    ```
 
 === ":material-redhat: Redhat / DNF 4"
 
-   ```bash
-   sudo dnf config-manager --add-repo https://sing-box.app/sing-box.repo &&
-   sudo dnf -y install dnf-plugins-core &&
-   sudo dnf install sing-box # or sing-box-beta
-   ```
+    ```bash
+    sudo dnf config-manager --add-repo https://sing-box.app/sing-box.repo &&
+    sudo dnf -y install dnf-plugins-core &&
+    sudo dnf install sing-box # or sing-box-beta
+    ```
 
 ## :material-download-box: 手动安装
 
-=== ":material-debian: Debian / DEB"
+该脚本从 GitHub 发布中下载并安装最新的软件包,适用于基于 deb 或 rpm 的 Linux 发行版、ArchLinux 和 OpenWrt。
 
-    ```bash
-    bash <(curl -fsSL https://sing-box.app/deb-install.sh)
-    ```
+```shell
+curl -fsSL https://sing-box.app/install.sh | sh
+```
 
-=== ":material-redhat: Redhat / RPM"
+或最新测试版:
 
-    ```bash
-    bash <(curl -fsSL https://sing-box.app/rpm-install.sh)
-    ```
-    (这适用于任何使用 `rpm` 和 `systemd` 的发行版。由于 `rpm` 定义依赖关系的方式,如果安装成功,就多半能用。)
+```shell
+curl -fsSL https://sing-box.app/install.sh | sh -s -- --beta
+```
 
-=== ":simple-archlinux: Archlinux / PKG"
+或指定版本:
 
-    ```bash
-    bash <(curl -fsSL https://sing-box.app/arch-install.sh)
-    ```
+```shell
+curl -fsSL https://sing-box.app/install.sh | sh -s -- --version <version>
+```
 
 ## :material-book-lock-open: 托管安装
 

+ 63 - 44
docs/installation/tools/install.sh

@@ -3,76 +3,92 @@
 download_beta=false
 download_version=""
 
-for arg in "$@"; do
-  if [[ "$arg" == "--beta" ]]; then
-    download_beta=true
-  elif [[ "$arg" == "--version" ]]; then
-    download_version=true
-  elif [[ "$download_version" == 'true' ]]; then
-    download_version="$arg"
-  else
-    echo "Unknown argument: $arg"
-    echo "Usage: $0 [--beta] [--version <version>]"
-    exit 1
-  fi
+while [ $# -gt 0 ]; do
+  case "$1" in
+    --beta)
+      download_beta=true
+      shift
+      ;;
+    --version)
+      shift
+      if [ $# -eq 0 ]; then
+        echo "Missing argument for --version"
+        echo "Usage: $0 [--beta] [--version <version>]"
+        exit 1
+      fi
+      download_version="$1"
+      shift
+      ;;
+    *)
+      echo "Unknown argument: $1"
+      echo "Usage: $0 [--beta] [--version <version>]"
+      exit 1
+      ;;
+  esac
 done
 
-if [[ $(command -v dpkg) ]]; then
+if command -v pacman >/dev/null 2>&1; then
+  os="linux"
+  arch=$(uname -m)
+  package_suffix=".pkg.tar.zst"
+  package_install="pacman -U --noconfirm"
+elif command -v dpkg >/dev/null 2>&1; then
   os="linux"
   arch=$(dpkg --print-architecture)
   package_suffix=".deb"
   package_install="dpkg -i"
-elif [[ $(command -v dnf) ]]; then
+elif command -v dnf >/dev/null 2>&1; then
   os="linux"
   arch=$(uname -m)
   package_suffix=".rpm"
   package_install="dnf install -y"
-elif [[ $(command -v rpm) ]]; then
+elif command -v rpm >/dev/null 2>&1; then
   os="linux"
   arch=$(uname -m)
   package_suffix=".rpm"
   package_install="rpm -i"
-elif [[ $(command -v pacman) ]]; then
-  os="linux"
-  arch=$(uname -m)
-  package_suffix=".pkg.tar.zst"
-  package_install="pacman -U --noconfirm"
-elif [[ $(command -v opkg) ]]; then
+elif command -v opkg >/dev/null 2>&1; then
   os="openwrt"
-  source /etc/os-release
+  . /etc/os-release
   arch="$OPENWRT_ARCH"
   package_suffix=".ipk"
-  package_install="opkg update && opkg install -y"
+  package_install="opkg update && opkg install"
 else
   echo "Missing supported package manager."
   exit 1
 fi
 
-if [[ -z "$download_version" ]]; then
-  if [[ "$download_beta" != 'true' ]]; then
-    if [[ -n "$GITHUB_TOKEN" ]]; then
-      latest_release=$(curl -s --fail-with-body -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases/latest)
+if [ -z "$download_version" ]; then
+  if [ "$download_beta" != "true" ]; then
+    if [ -n "$GITHUB_TOKEN" ]; then
+      latest_release=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases/latest)
     else
-      latest_release=$(curl -s --fail-with-body https://api.github.com/repos/SagerNet/sing-box/releases/latest)
+      latest_release=$(curl -s https://api.github.com/repos/SagerNet/sing-box/releases/latest)
     fi
     curl_exit_status=$?
-    if [[ $curl_exit_status -ne 0 ]]; then
+    if [ $curl_exit_status -ne 0 ]; then
+      exit $curl_exit_status
+    fi
+    if [ "$(echo "$latest_release" | grep tag_name | wc -l)" -eq 0 ]; then
       echo "$latest_release"
-      exit $?
+      exit 1
     fi
-    download_version=$(echo "$latest_release" | grep tag_name | cut -d ":" -f2 | sed 's/\"//g;s/\,//g;s/\ //g;s/v//')
+    download_version=$(echo "$latest_release" | grep tag_name | head -n 1 | awk -F: '{print $2}' | sed 's/[", v]//g')
   else
-    if [[ -n "$GITHUB_TOKEN" ]]; then
-      latest_release=$(curl -s --fail-with-body -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases)
+    if [ -n "$GITHUB_TOKEN" ]; then
+      latest_release=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" https://api.github.com/repos/SagerNet/sing-box/releases)
     else
-      latest_release=$(curl -s --fail-with-body https://api.github.com/repos/SagerNet/sing-box/releases)
+      latest_release=$(curl -s https://api.github.com/repos/SagerNet/sing-box/releases)
     fi
     curl_exit_status=$?
-    if [[ $? -ne 0 ]]; then
+    if [ $curl_exit_status -ne 0 ]; then
+      exit $curl_exit_status
+    fi
+    if [ "$(echo "$latest_release" | grep tag_name | wc -l)" -eq 0 ]; then
       echo "$latest_release"
-      exit $?
+      exit 1
     fi
-    download_version=$(echo "$latest_release" | grep tag_name | head -n 1 | cut -d ":" -f2 | sed 's/\"//g;s/\,//g;s/\ //g;s/v//')
+    download_version=$(echo "$latest_release" | grep tag_name | head -n 1 | awk -F: '{print $2}' | sed 's/[", v]//g')
   fi
 fi
 
@@ -80,18 +96,21 @@ package_name="sing-box_${download_version}_${os}_${arch}${package_suffix}"
 package_url="https://github.com/SagerNet/sing-box/releases/download/v${download_version}/${package_name}"
 
 echo "Downloading $package_url"
-if [[ -n "$GITHUB_TOKEN" ]]; then
-  curl --fail-with-body -Lo "$package_name" -H "Authorization: token ${GITHUB_TOKEN}" "$package_url"
+if [ -n "$GITHUB_TOKEN" ]; then
+  curl --fail -Lo "$package_name" -H "Authorization: token ${GITHUB_TOKEN}" "$package_url"
 else
-  curl --fail-with-body -Lo "$package_name" "$package_url"
+  curl --fail -Lo "$package_name" "$package_url"
 fi
 
-if [[ $? -ne 0 ]]; then
-  exit $?
+curl_exit_status=$?
+if [ $curl_exit_status -ne 0 ]; then
+  exit $curl_exit_status
 fi
 
-if [[ $(command -v sudo) ]]; then
+if command -v sudo >/dev/null 2>&1; then
   package_install="sudo $package_install"
 fi
 
-echo "$package_install $package_name" && $package_install "$package_name" && rm "$package_name"
+echo "$package_install $package_name"
+sh -c "$package_install \"$package_name\""
+rm -f "$package_name"