mirror of https://github.com/XTLS/Xray-install
Add Alpine Linux (#86)
* Initial commit * Testable * Add description * Instruction revision * Fix wrong content * Fix environment variables * Correct variable location * Content adjustment * More precise content * Replace '[[' with '[' * Fix mistakes * Correct the output * Fix case conversion * Basically available * Variable correction * Complete basic revision * Fix mistakes * Fix the source of log files * Make script more compatible and fails fast * Update download link to v2fly and fix #2 Issue (#3) * Update download link to v2fly. * Update "Identify architecture" * Fix Line 56 variable name * Try to fix verification_v2ray * improve detect arm without vfp * feat: install Xray-core * docs: add English and Chinese Simplified * Fix SHA * Update install-release.sh 修改路径,跟https://github.com/XTLS/Xray-install保持一致 * Update xray * Rewrite OpenRC * cap: daemon with ambient and inheritable * Fix README * Use tab * Fix README * respawn period * Fix README * daemon: 3 panic in 10 minutes stops service * README: rename files * README: rename * Migration: modify the path to fit this repo * Migration: merge license * Alpine: Fix shebang * Alpine: check alpine * Alpine: check root * Alpine: refactor code related to architecture identification * Alpine: shellcheck * Alpine: shellcheck SC2181 * Alpine: shellcheck SC2002 * Alpine: Move global variable to main function to fix runtime error after refactoring * Alpine: Hide debug information * Alpine: Enhance script usability - Add necessary user prompts for better feedback - Exit on failure of rc service installation - Reduce permissions for geoip and geosite files - Rename install_software to install_dependencies * Alpine: Add HTTP error handling to all curl commands * README.md: Add Chinese translations * README.md: Add link to Alpine Linux README for specific instructions * Alpine README.md: Clarify content to remove ambiguity --------- Co-authored-by: Dct Mei <dctxmei@gmail.com> Co-authored-by: Loyalsoldier <10487845+Loyalsoldier@users.noreply.github.com> Co-authored-by: Kslr <kslrwang@gmail.com> Co-authored-by: Elvis Wang <me@elvisw.com> Co-authored-by: 秋のかえで <autmaple@protonmail.com> Co-authored-by: Markson Hon <50002150+MarksonHon@users.noreply.github.com> Co-authored-by: winds365 <winds365@live.com>pull/89/head
parent
3a2a03dac9
commit
cbc6bf326e
|
@ -1,8 +1,14 @@
|
|||
# Xray-install
|
||||
|
||||
English | [简体中文](README_zh-Hans.md) | [繁體中文](README_zh-Hant.md)
|
||||
|
||||
Bash script for installing Xray in operating systems such as CentOS / Debian / OpenSUSE that support systemd.
|
||||
|
||||
[Filesystem Hierarchy Standard (FHS)](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)
|
||||
**For Alpine Linux users**, please refer to **[Alpine Linux Specific Instructions](alpinelinux/README.md)** for installation scripts and guides tailored for Alpine Linux.
|
||||
|
||||
---
|
||||
|
||||
#### [Filesystem Hierarchy Standard (FHS)](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)
|
||||
|
||||
```
|
||||
installed: /etc/systemd/system/xray.service
|
||||
|
@ -53,6 +59,7 @@ bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release
|
|||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install --logrotate $time
|
||||
```
|
||||
|
||||
```
|
||||
installed: /etc/systemd/system/logrotate@.service
|
||||
installed: /etc/systemd/system/logrotate@.timer
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
# Xray-install
|
||||
|
||||
[English](README.md) | 简体中文 | [繁體中文](README_zh-Hant.md)
|
||||
|
||||
用于在支持 systemd 的操作系统(如 CentOS / Debian / OpenSUSE)中安装 Xray 的 Bash 脚本。
|
||||
|
||||
**对于 Alpine Linux 用户**,请参考 **[Alpine Linux 专用说明](alpinelinux/README_zh-Hans.md)** 以获取适用于 Alpine Linux 的安装脚本和指南。
|
||||
|
||||
---
|
||||
|
||||
#### [文件系统层次结构标准 (FHS)](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)
|
||||
|
||||
```
|
||||
已安装文件:
|
||||
- /etc/systemd/system/xray.service
|
||||
- /etc/systemd/system/xray@.service
|
||||
|
||||
- /usr/local/bin/xray
|
||||
- /usr/local/etc/xray/*.json
|
||||
|
||||
- /usr/local/share/xray/geoip.dat
|
||||
- /usr/local/share/xray/geosite.dat
|
||||
|
||||
- /var/log/xray/access.log
|
||||
- /var/log/xray/error.log
|
||||
```
|
||||
|
||||
注意:Xray 默认不会将日志记录到 `/var/log/xray/*.log`。请配置 `"log"` 来指定日志文件。
|
||||
|
||||
## 基本用法
|
||||
|
||||
**安装并升级 Xray-core 和地理数据,默认使用 `User=nobody`,但不会覆盖已有服务文件中的 `User` 设置**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
|
||||
```
|
||||
|
||||
**仅更新 geoip.dat 和 geosite.dat**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install-geodata
|
||||
```
|
||||
|
||||
**移除 Xray,但保留 json 配置文件和日志**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ remove
|
||||
```
|
||||
|
||||
## 高级用法
|
||||
|
||||
**安装并升级 Xray-core 到预发布版本**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install --beta
|
||||
```
|
||||
|
||||
**安装并升级 Xray-core 和地理数据,并启用 `logrotate`,`$time` 可以是 12:34:56 格式的时间**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install --logrotate $time
|
||||
```
|
||||
|
||||
```
|
||||
已安装文件:
|
||||
- /etc/systemd/system/logrotate@.service
|
||||
- /etc/systemd/system/logrotate@.timer
|
||||
- /etc/logrotate.d/xray
|
||||
```
|
||||
|
||||
**安装并升级 Xray-core 和地理数据,使用 `User=root`,会覆盖已有服务文件中的 `User` 设置**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install -u root
|
||||
```
|
||||
|
||||
**安装并升级 Xray-core,但不包含地理数据**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install --without-geodata
|
||||
```
|
||||
|
||||
**移除 Xray,包括 json 配置文件和日志**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ remove --purge
|
||||
```
|
||||
|
||||
## 更多用法
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ help
|
||||
```
|
||||
|
||||
## 星标趋势图
|
||||
|
||||
[](https://starchart.cc/XTLS/Xray-install)
|
|
@ -0,0 +1,97 @@
|
|||
# Xray-install
|
||||
|
||||
[English](README.md) | [简体中文](README_zh-Hans.md) | 繁體中文
|
||||
|
||||
用於在支持 systemd 的作業系統(如 CentOS / Debian / OpenSUSE)中安裝 Xray 的 Bash 腳本。
|
||||
|
||||
**對於 Alpine Linux 使用者**,請參考 **[Alpine Linux 專用說明](alpinelinux/README_zh-Hant.md)** 以獲取適用於 Alpine Linux 的安裝腳本和指南。
|
||||
|
||||
---
|
||||
|
||||
#### [檔案系統層次結構標準 (FHS)](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)
|
||||
|
||||
```
|
||||
已安裝檔案:
|
||||
- /etc/systemd/system/xray.service
|
||||
- /etc/systemd/system/xray@.service
|
||||
|
||||
- /usr/local/bin/xray
|
||||
- /usr/local/etc/xray/*.json
|
||||
|
||||
- /usr/local/share/xray/geoip.dat
|
||||
- /usr/local/share/xray/geosite.dat
|
||||
|
||||
- /var/log/xray/access.log
|
||||
- /var/log/xray/error.log
|
||||
```
|
||||
|
||||
注意:Xray 預設不會將日誌記錄到 `/var/log/xray/*.log`。請配置 `"log"` 來指定日誌檔案。
|
||||
|
||||
## 基本用法
|
||||
|
||||
**安裝並升級 Xray-core 和地理數據,預設使用 `User=nobody`,但不會覆蓋已有服務檔案中的 `User` 設定**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
|
||||
```
|
||||
|
||||
**僅更新 geoip.dat 和 geosite.dat**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install-geodata
|
||||
```
|
||||
|
||||
**移除 Xray,但保留 json 設定檔案和日誌**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ remove
|
||||
```
|
||||
|
||||
## 進階用法
|
||||
|
||||
**安裝並升級 Xray-core 到預發布版本**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install --beta
|
||||
```
|
||||
|
||||
**安裝並升級 Xray-core 和地理數據,並啟用 `logrotate`,`$time` 可以是 12:34:56 格式的時間**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install --logrotate $time
|
||||
```
|
||||
|
||||
```
|
||||
已安裝檔案:
|
||||
- /etc/systemd/system/logrotate@.service
|
||||
- /etc/systemd/system/logrotate@.timer
|
||||
- /etc/logrotate.d/xray
|
||||
```
|
||||
|
||||
**安裝並升級 Xray-core 和地理數據,使用 `User=root`,會覆蓋已有服務檔案中的 `User` 設定**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install -u root
|
||||
```
|
||||
|
||||
**安裝並升級 Xray-core,但不包含地理數據**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install --without-geodata
|
||||
```
|
||||
|
||||
**移除 Xray,包括 json 設定檔案和日誌**
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ remove --purge
|
||||
```
|
||||
|
||||
## 更多用法
|
||||
|
||||
```
|
||||
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ help
|
||||
```
|
||||
|
||||
## 星標趨勢圖
|
||||
|
||||
[](https://starchart.cc/XTLS/Xray-install)
|
|
@ -0,0 +1,78 @@
|
|||
# Xray-install for Alpine Linux
|
||||
|
||||
English | [简体中文](README_zh-Hans.md) | [繁體中文](README_zh-Hant.md)
|
||||
|
||||
## Install Xray
|
||||
|
||||
#### Install cURL
|
||||
|
||||
```sh
|
||||
apk add curl
|
||||
```
|
||||
|
||||
#### Download Installation Script
|
||||
|
||||
```sh
|
||||
curl -O https://raw.githubusercontent.com/XTLS/Xray-install/main/alpinelinux/install-release.sh
|
||||
```
|
||||
|
||||
#### Run Installation Script
|
||||
|
||||
```sh
|
||||
ash install-release.sh
|
||||
```
|
||||
|
||||
## Management Commands
|
||||
|
||||
#### Enable Xray Service (Auto-start on Boot)
|
||||
|
||||
```sh
|
||||
rc-update add xray
|
||||
```
|
||||
|
||||
#### Disable Xray Service (Remove from Auto-start)
|
||||
|
||||
```sh
|
||||
rc-update del xray
|
||||
```
|
||||
|
||||
#### Start Xray
|
||||
|
||||
```sh
|
||||
rc-service xray start
|
||||
```
|
||||
|
||||
#### Stop Xray
|
||||
|
||||
```sh
|
||||
rc-service xray stop
|
||||
```
|
||||
|
||||
#### Restart Xray
|
||||
|
||||
```sh
|
||||
rc-service xray restart
|
||||
```
|
||||
|
||||
## Breaking Changes at 2025-04-09
|
||||
|
||||
#### Path Change: Original path `/usr/local/lib/xray/` has been updated to new path `/usr/local/share/xray/`
|
||||
|
||||
- This directory contains `geosite.dat` and `geoip.dat`
|
||||
- If you have scripts to automatically update these files, please adjust them accordingly
|
||||
- Regular users can ignore this change
|
||||
|
||||
#### Watchdog: Xray process will now automatically restart indefinitely (every 5 seconds) upon panic, unless it panic 3 times in 10 minutes
|
||||
|
||||
- Advanced users no longer need to manually modify `/etc/init.d/xray` or write custom daemon scripts
|
||||
- Regular users can ignore this change
|
||||
|
||||
#### No `root` Required: Xray now retains privileges (capabilities) to support `tproxy` and `sockopt` even when running as `nobody`
|
||||
|
||||
- Advanced users **should not** (and need not) run Xray as `root` anymore — it already has all required network privileges
|
||||
- If you run Xray as a **server** (not client), you _may_ optionally run the command below to reduce capabilities. This theoretically minimizes attack surface but has negligible practical impact
|
||||
- Regular users can ignore this change
|
||||
|
||||
```sh
|
||||
sed -i 's/^capabilities="^cap_net_bind_service,^cap_net_admin,^cap_net_raw"$/capabilities="^cap_net_bind_service"/g' /etc/init.d/xray
|
||||
```
|
|
@ -0,0 +1,78 @@
|
|||
# Xray-install for Alpine Linux
|
||||
|
||||
[English](README.md) | 简体中文 | [繁體中文](README_zh-Hant.md)
|
||||
|
||||
## 安装 Xray
|
||||
|
||||
#### 安装 cURL
|
||||
|
||||
```sh
|
||||
apk add curl
|
||||
```
|
||||
|
||||
#### 下载安装脚本
|
||||
|
||||
```sh
|
||||
curl -O https://raw.githubusercontent.com/XTLS/Xray-install/main/alpinelinux/install-release.sh
|
||||
```
|
||||
|
||||
#### 运行安装脚本
|
||||
|
||||
```sh
|
||||
ash install-release.sh
|
||||
```
|
||||
|
||||
## 管理命令
|
||||
|
||||
#### 启用 Xray 服务 (开机自启)
|
||||
|
||||
```sh
|
||||
rc-update add xray
|
||||
```
|
||||
|
||||
#### 禁用 Xray 服务 (取消自启)
|
||||
|
||||
```sh
|
||||
rc-update del xray
|
||||
```
|
||||
|
||||
#### 运行 Xray
|
||||
|
||||
```sh
|
||||
rc-service xray start
|
||||
```
|
||||
|
||||
#### 停止 Xray
|
||||
|
||||
```sh
|
||||
rc-service xray stop
|
||||
```
|
||||
|
||||
#### 重启 Xray
|
||||
|
||||
```sh
|
||||
rc-service xray restart
|
||||
```
|
||||
|
||||
## 重大更改 at 2025-04-09
|
||||
|
||||
#### 路径变更:原路径 `/usr/local/lib/xray/` 变更为 新路径 `/usr/local/share/xray/`
|
||||
|
||||
- 此目录存放了 `geosite.dat` 和 `geoip.dat`
|
||||
- 如果你编写了一些脚本来自动更新这些文件,需要留意此项改动
|
||||
- 普通用户无需关注此改动
|
||||
|
||||
#### 看门狗:若 Xray 进程 `panic` 将无限自动重启,间隔 5 秒,除非 10 分钟内崩溃 3 次
|
||||
|
||||
- 对于高级用户,你无需再手动调整 `/etc/init.d/xray` 或自己编写 daemon 脚本了
|
||||
- 普通用户无需关注此改动
|
||||
|
||||
#### 无需 `root`:已为 Xray 授予特权,即便以 `nobody` 身份运行也支持 `tproxy` 和 `sockopt`
|
||||
|
||||
- 对于高级用户,你无需、也**不应该**再让 Xray 以 `root` 身份运行,现在它们已具备所有网络特权
|
||||
- 如果你的 Xray 作为**节点**而不是客户端运行,或*可考虑*执行下面的命令撤销部分网络特权。理论上可以降低攻击面,实际上无关痛痒
|
||||
- 普通用户无需关注此改动
|
||||
|
||||
```sh
|
||||
sed -i 's/^capabilities="^cap_net_bind_service,^cap_net_admin,^cap_net_raw"$/capabilities="^cap_net_bind_service"/g' /etc/init.d/xray
|
||||
```
|
|
@ -0,0 +1,78 @@
|
|||
# Xray-install for Alpine Linux
|
||||
|
||||
[English](README.md) | [简体中文](README_zh-Hans.md) | 繁體中文
|
||||
|
||||
## 安裝 Xray
|
||||
|
||||
#### 安裝 cURL
|
||||
|
||||
```sh
|
||||
apk add curl
|
||||
```
|
||||
|
||||
#### 下載安裝腳本
|
||||
|
||||
```sh
|
||||
curl -O https://raw.githubusercontent.com/XTLS/Xray-install/main/alpinelinux/install-release.sh
|
||||
```
|
||||
|
||||
#### 執行安裝腳本
|
||||
|
||||
```sh
|
||||
ash install-release.sh
|
||||
```
|
||||
|
||||
## 管理指令
|
||||
|
||||
#### 啟用 Xray 服務 (開機自啟)
|
||||
|
||||
```sh
|
||||
rc-update add xray
|
||||
```
|
||||
|
||||
#### 停用 Xray 服務 (取消自啟)
|
||||
|
||||
```sh
|
||||
rc-update del xray
|
||||
```
|
||||
|
||||
#### 啟動 Xray
|
||||
|
||||
```sh
|
||||
rc-service xray start
|
||||
```
|
||||
|
||||
#### 關閉 Xray
|
||||
|
||||
```sh
|
||||
rc-service xray stop
|
||||
```
|
||||
|
||||
#### 重啟 Xray
|
||||
|
||||
```sh
|
||||
rc-service xray restart
|
||||
```
|
||||
|
||||
## 重大變更 at 2025-04-09
|
||||
|
||||
#### 路徑變更:原始路徑 `/usr/local/lib/xray/` 變更為 新路徑 `/usr/local/share/xray/`
|
||||
|
||||
- 此目錄存放了 `geosite.dat` 和 `geoip.dat`
|
||||
- 如果你編寫了一些腳本來自動更新這些文件,需要留意此項改動
|
||||
- 普通用戶無需關注此改動
|
||||
|
||||
#### 看門狗:若 Xray 進程 `panic` 將無限自動重啟,間隔 5 秒,除非 10 分鐘內崩潰 3 次
|
||||
|
||||
- 對於高級用戶,你無需再手動調整 `/etc/init.d/xray` 或自己編寫 daemon 腳本了
|
||||
- 普通用戶無需關注此改動
|
||||
|
||||
#### 無需 `root`:已為 Xray 授予特權,即便以 `nobody` 身分執行也支援 `tproxy` 和 `sockopt`
|
||||
|
||||
- 對於高級用戶,你無需、也**不應該**再讓 Xray 以 `root` 身份運行,現在它們已具備所有網絡特權
|
||||
- 如果你的 Xray 是作為**節點**而不是客戶端運行,或*可考慮*執行下面的命令撤銷部分網路特權。理論上可以降低攻擊面,實際上無關痛癢
|
||||
- 普通用戶無需關注此改動
|
||||
|
||||
```sh
|
||||
sed -i 's/^capabilities="^cap_net_bind_service,^cap_net_admin,^cap_net_raw"$/capabilities="^cap_net_bind_service"/g' /etc/init.d/xray
|
||||
```
|
|
@ -0,0 +1,37 @@
|
|||
#!/sbin/openrc-run
|
||||
|
||||
name="Xray Daemon"
|
||||
description="A unified platform for anti-censorship"
|
||||
|
||||
supervisor=supervise-daemon
|
||||
respawn_delay=5
|
||||
respawn_max=2
|
||||
respawn_period=600
|
||||
|
||||
pidfile="/run/${RC_SVCNAME}.pid"
|
||||
rc_ulimit="-n 1024000 -u 1024000"
|
||||
capabilities="^cap_net_bind_service,^cap_net_admin,^cap_net_raw"
|
||||
extra_commands="checkconfig"
|
||||
|
||||
env=${env:-"XRAY_LOCATION_ASSET=/usr/local/share/xray/"} # See: https://github.com/XTLS/Xray-core/blob/main/common/platform/platform.go
|
||||
confdir=${confdir:-"/usr/local/etc/xray/"}
|
||||
command="/usr/local/bin/xray"
|
||||
command_user="nobody:nobody"
|
||||
command_args="run -confdir $confdir"
|
||||
required_files="$confdir"
|
||||
|
||||
depend() {
|
||||
need net
|
||||
want dns ntp-client
|
||||
after firewall
|
||||
}
|
||||
|
||||
checkconfig() {
|
||||
export $env
|
||||
$command $command_args -test
|
||||
eend $?
|
||||
}
|
||||
|
||||
start_pre() {
|
||||
checkconfig || return 1
|
||||
}
|
|
@ -0,0 +1,231 @@
|
|||
#!/usr/bin/env ash
|
||||
# shellcheck shell=dash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
check_alpine() {
|
||||
if [ -f /etc/alpine-release ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_if_running_as_root() {
|
||||
# If you want to run as another user, please modify $EUID to be owned by this user
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
return 0
|
||||
else
|
||||
echo "error: You must run this script as root!"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
identify_architecture() {
|
||||
if [ "$(uname)" != 'Linux' ]; then
|
||||
echo "error: This operating system is not supported."
|
||||
return 1
|
||||
fi
|
||||
case "$(uname -m)" in
|
||||
'i386' | 'i686')
|
||||
MACHINE='32'
|
||||
;;
|
||||
'amd64' | 'x86_64')
|
||||
MACHINE='64'
|
||||
;;
|
||||
'armv5tel')
|
||||
MACHINE='arm32-v5'
|
||||
;;
|
||||
'armv6l')
|
||||
MACHINE='arm32-v6'
|
||||
grep Features /proc/cpuinfo | grep -qw 'vfp' || MACHINE='arm32-v5'
|
||||
;;
|
||||
'armv7' | 'armv7l')
|
||||
MACHINE='arm32-v7a'
|
||||
grep Features /proc/cpuinfo | grep -qw 'vfp' || MACHINE='arm32-v5'
|
||||
;;
|
||||
'armv8' | 'aarch64')
|
||||
MACHINE='arm64-v8a'
|
||||
;;
|
||||
'mips')
|
||||
MACHINE='mips32'
|
||||
;;
|
||||
'mipsle')
|
||||
MACHINE='mips32le'
|
||||
;;
|
||||
'mips64')
|
||||
MACHINE='mips64'
|
||||
lscpu | grep -q "Little Endian" && MACHINE='mips64le'
|
||||
;;
|
||||
'mips64le')
|
||||
MACHINE='mips64le'
|
||||
;;
|
||||
'ppc64')
|
||||
MACHINE='ppc64'
|
||||
;;
|
||||
'ppc64le')
|
||||
MACHINE='ppc64le'
|
||||
;;
|
||||
'riscv64')
|
||||
MACHINE='riscv64'
|
||||
;;
|
||||
's390x')
|
||||
MACHINE='s390x'
|
||||
;;
|
||||
*)
|
||||
echo "error: The architecture is not supported."
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
if [ ! -f '/etc/os-release' ]; then
|
||||
echo "error: Don't use outdated Linux distributions."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
install_dependencies() {
|
||||
if [ -n "$(command -v curl)" ]; then
|
||||
return
|
||||
fi
|
||||
if [ -n "$(command -v unzip)" ]; then
|
||||
return
|
||||
fi
|
||||
if [ "$(command -v apk)" ]; then
|
||||
echo "Installing required dependencies..."
|
||||
apk add curl unzip
|
||||
else
|
||||
echo "error: The script does not support the package manager in this operating system."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
download_xray() {
|
||||
echo "Downloading Xray files..."
|
||||
if ! curl -f -L -H 'Cache-Control: no-cache' -o "$ZIP_FILE" "$DOWNLOAD_LINK" -#; then
|
||||
echo 'error: Download failed! Please check your network or try again.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! curl -f -L -H 'Cache-Control: no-cache' -o "$ZIP_FILE.dgst" "$DOWNLOAD_LINK.dgst" -#; then
|
||||
echo 'error: Download failed! Please check your network or try again.'
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
verification_xray() {
|
||||
CHECKSUM=$(awk -F '= ' '/256=/ {print $2}' "$ZIP_FILE.dgst")
|
||||
LOCALSUM=$(sha256sum "$ZIP_FILE" | awk '{printf $1}')
|
||||
if [ "$CHECKSUM" != "$LOCALSUM" ]; then
|
||||
echo 'error: SHA256 check failed! Please check your network or try again.'
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
decompression() {
|
||||
unzip -q "$ZIP_FILE" -d "$TMP_DIRECTORY"
|
||||
}
|
||||
|
||||
is_it_running() {
|
||||
XRAY_RUNNING='0'
|
||||
if [ -n "$(pgrep xray)" ]; then
|
||||
rc-service xray stop
|
||||
XRAY_RUNNING='1'
|
||||
fi
|
||||
}
|
||||
|
||||
install_xray() {
|
||||
install -m 755 "${TMP_DIRECTORY}xray" "/usr/local/bin/xray"
|
||||
install -d /usr/local/share/xray/
|
||||
install -m 644 "${TMP_DIRECTORY}geoip.dat" "/usr/local/share/xray/geoip.dat"
|
||||
install -m 644 "${TMP_DIRECTORY}geosite.dat" "/usr/local/share/xray/geosite.dat"
|
||||
}
|
||||
|
||||
install_confdir() {
|
||||
CONFDIR='0'
|
||||
if [ ! -d '/usr/local/etc/xray/' ]; then
|
||||
install -d /usr/local/etc/xray/
|
||||
for BASE in 00_log 01_api 02_dns 03_routing 04_policy 05_inbounds 06_outbounds 07_transport 08_stats 09_reverse; do
|
||||
echo '{}' >"/usr/local/etc/xray/$BASE.json"
|
||||
done
|
||||
CONFDIR='1'
|
||||
fi
|
||||
}
|
||||
|
||||
install_log() {
|
||||
LOG='0'
|
||||
if [ ! -d '/var/log/xray/' ]; then
|
||||
install -d -o nobody -g nobody /var/log/xray/
|
||||
install -m 600 -o nobody -g nobody /dev/null /var/log/xray/access.log
|
||||
install -m 600 -o nobody -g nobody /dev/null /var/log/xray/error.log
|
||||
LOG='1'
|
||||
fi
|
||||
}
|
||||
|
||||
install_startup_service_file() {
|
||||
OPENRC='0'
|
||||
if [ ! -f '/etc/init.d/xray' ]; then
|
||||
mkdir "${TMP_DIRECTORY}init.d/"
|
||||
if ! curl -f -L -o "${TMP_DIRECTORY}init.d/xray" https://raw.githubusercontent.com/XTLS/Xray-install/main/alpinelinux/init.d/xray -sS; then
|
||||
echo 'error: Failed to start service file download! Please check your network or try again.'
|
||||
exit 1
|
||||
fi
|
||||
install -m 755 "${TMP_DIRECTORY}init.d/xray" /etc/init.d/xray
|
||||
OPENRC='1'
|
||||
fi
|
||||
}
|
||||
|
||||
information() {
|
||||
echo 'installed: /usr/local/bin/xray'
|
||||
echo 'installed: /usr/local/share/xray/geoip.dat'
|
||||
echo 'installed: /usr/local/share/xray/geosite.dat'
|
||||
if [ "$CONFDIR" -eq '1' ]; then
|
||||
echo 'installed: /usr/local/etc/xray/00_log.json'
|
||||
echo 'installed: /usr/local/etc/xray/01_api.json'
|
||||
echo 'installed: /usr/local/etc/xray/02_dns.json'
|
||||
echo 'installed: /usr/local/etc/xray/03_routing.json'
|
||||
echo 'installed: /usr/local/etc/xray/04_policy.json'
|
||||
echo 'installed: /usr/local/etc/xray/05_inbounds.json'
|
||||
echo 'installed: /usr/local/etc/xray/06_outbounds.json'
|
||||
echo 'installed: /usr/local/etc/xray/07_transport.json'
|
||||
echo 'installed: /usr/local/etc/xray/08_stats.json'
|
||||
echo 'installed: /usr/local/etc/xray/09_reverse.json'
|
||||
fi
|
||||
if [ "$LOG" -eq '1' ]; then
|
||||
echo 'installed: /var/log/xray/'
|
||||
fi
|
||||
if [ "$OPENRC" -eq '1' ]; then
|
||||
echo 'installed: /etc/init.d/xray'
|
||||
fi
|
||||
rm -r "$TMP_DIRECTORY"
|
||||
echo "removed: $TMP_DIRECTORY"
|
||||
echo "You may need to execute a command to remove dependent software: apk del curl unzip"
|
||||
if [ "$XRAY_RUNNING" -eq '1' ]; then
|
||||
rc-service xray start
|
||||
else
|
||||
echo 'Please execute the command: rc-update add xray; rc-service xray start'
|
||||
fi
|
||||
echo "info: Xray is installed."
|
||||
}
|
||||
|
||||
main() {
|
||||
check_alpine || return 1
|
||||
check_if_running_as_root || return 1
|
||||
identify_architecture || return 1
|
||||
install_dependencies
|
||||
|
||||
TMP_DIRECTORY="$(mktemp -d)/"
|
||||
ZIP_FILE="${TMP_DIRECTORY}Xray-linux-$MACHINE.zip"
|
||||
DOWNLOAD_LINK="https://github.com/XTLS/Xray-core/releases/latest/download/Xray-linux-$MACHINE.zip"
|
||||
|
||||
download_xray
|
||||
verification_xray
|
||||
decompression
|
||||
is_it_running
|
||||
install_xray
|
||||
install_confdir
|
||||
install_log
|
||||
install_startup_service_file || return 1
|
||||
information
|
||||
}
|
||||
|
||||
main
|
Loading…
Reference in New Issue