release: Fix packages

This commit is contained in:
世界 2025-04-19 18:38:12 +08:00
parent 49498f6439
commit 6a051054db
No known key found for this signature in database
GPG Key ID: CD109927C34A63C4
5 changed files with 139 additions and 118 deletions

View File

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

View File

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

View File

@ -41,23 +41,24 @@ icon: material/package
## :material-download-box: Manual Installation ## :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. The script download and install the latest package from GitHub releases
for deb or rpm based Linux distributions, ArchLinux and OpenWrt.
```shell ```shell
curl -fsSL https://sing-box.app/install.sh | sh curl -fsSL https://sing-box.app/install.sh | sh
``` ```
or latest beta: or latest beta:
```shell ```shell
curl -fsSL https://sing-box.app/install.sh | sh -s -- --beta curl -fsSL https://sing-box.app/install.sh | sh -s -- --beta
``` ```
or specific version: or specific version:
```shell ```shell
curl -fsSL https://sing-box.app/install.sh | sh -s -- --version <version> curl -fsSL https://sing-box.app/install.sh | sh -s -- --version <version>
``` ```
## :material-book-lock-open: Managed Installation ## :material-book-lock-open: Managed Installation

View File

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

View File

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