Compare commits

..

32 Commits

Author SHA1 Message Date
Teddysun
abe60a07d3 Update Dockerfile 2025-09-11 15:50:58 +09:00
Teddysun
46aeebcec6 Update Dockerfile.rpmbuild10 2025-05-28 15:32:31 +09:00
Teddysun
f18503bb78 Update README.md 2025-05-24 17:02:58 +09:00
Teddysun
c2ac597a49 Added Dockerfile.rpmbuild10 2025-05-24 16:56:06 +09:00
Teddysun
ac0c938845 Update bench.sh 2025-05-08 14:36:23 +09:00
Teddysun
27fca9f438 Update Dockerfile 2025-05-05 14:06:37 +09:00
Teddysun
24f6bac3d6 Update Dockerfile 2025-05-05 14:01:33 +09:00
Teddysun
e3aea30e09 Update Dockerfile.rpmbuild9 2025-05-05 13:58:07 +09:00
Teddysun
6f141e0c7d Update Dockerfile 2025-05-05 13:56:08 +09:00
Teddysun
16c918af89 Added Dockerfile.fedora42 2025-04-20 12:56:24 +09:00
Teddysun
168062f2de Update Dockerfile 2024-12-29 23:22:33 +09:00
Teddysun
54072da2d9 Update comments 2024-12-03 18:52:57 +09:00
Teddysun
51a8eccf5e Update comments 2024-12-03 18:51:25 +09:00
Teddysun
42b5fd9277 Update wireguard.sh 2024-11-23 16:08:32 +09:00
Teddysun
88b7f8ae2d Update wireguard.sh 2024-11-23 16:02:29 +09:00
Teddysun
667000925c Update comments 2024-11-12 20:46:21 +09:00
Teddysun
8d560f0f99 Update comments 2024-11-12 20:16:15 +09:00
Teddysun
4403442596 Added Dockerfile.fedora40 2024-07-07 13:59:12 +09:00
Teddysun
f38976343d Update to latest version 2024-07-07 13:58:09 +09:00
Teddysun
118cdb138a Update README.md 2024-04-27 11:42:57 +09:00
Teddysun
ff632d0d28 Update build_xray.sh 2024-04-26 23:43:41 +09:00
Teddysun
85f5933b40 Update build_xray.sh 2024-04-26 23:42:32 +09:00
Teddysun
f1c46e0873 Added xray-plugin rpm and deb source
Signed-off-by: Teddysun <i@teddysun.com>
2024-04-26 23:39:03 +09:00
Teddysun
6cdb88d529 Added xray-core rpm and deb source
Signed-off-by: Teddysun <i@teddysun.com>
2024-04-26 23:29:48 +09:00
vvto33
6711d6e2e9 Update function check_virt (#121)
Adjusted to recognize 'KVM' when 'sys_manu' contains 'QEMU'.
(Detection was failing on BuyVM.net's KVM VPS)
2024-04-17 17:16:00 +09:00
Seamile
1050224c16 Fixed function io_test adapt to the Chinese environment (#124) 2024-04-17 17:14:22 +09:00
Teddysun
acef6b00a6 Added build_trojan-go-fork.sh 2023-11-15 20:55:50 +09:00
Teddysun
49ad970132 Update trojan-go 2023-11-15 20:52:50 +09:00
Teddysun
9d94a26b12 Improve shell script by shellcheck
Signed-off-by: Teddysun <i@teddysun.com>
2023-10-24 11:35:12 +09:00
Adam Xiao Han
5d975e90ef Improve disk usage calculation (#115)
1. use "free -k" to get swap usage
2. improve disk usage calculation to support ZFS
2023-10-24 10:41:26 +09:00
Teddysun
70f8bd140d Update comments
Added Emojis

Signed-off-by: Teddysun <i@teddysun.com>
2023-10-16 20:01:41 +09:00
秉虎
28e7865afb Fixed processor name contains processor string issue (#114)
When model name contain processor, such as 'Common KVM processor', it will cause a false calculate in processor.
To prevent this, add ^ to make sure it only count the line start with processor.
2023-10-16 15:50:20 +09:00
64 changed files with 1861 additions and 256 deletions

158
bench.sh
View File

@@ -2,7 +2,7 @@
# #
# Description: A Bench Script by Teddysun # Description: A Bench Script by Teddysun
# #
# Copyright (C) 2015 - 2023 Teddysun <i@teddysun.com> # Copyright (C) 2015 - 2025 Teddysun <i@teddysun.com>
# Thanks: LookBack <admin@dwhd.org> # Thanks: LookBack <admin@dwhd.org>
# URL: https://teddysun.com/444.html # URL: https://teddysun.com/444.html
# https://github.com/teddysun/across/blob/master/bench.sh # https://github.com/teddysun/across/blob/master/bench.sh
@@ -57,12 +57,16 @@ next() {
speed_test() { speed_test() {
local nodeName="$2" local nodeName="$2"
[ -z "$1" ] && ./speedtest-cli/speedtest --progress=no --accept-license --accept-gdpr >./speedtest-cli/speedtest.log 2>&1 || \ if [ -z "$1" ];then
./speedtest-cli/speedtest --progress=no --server-id=$1 --accept-license --accept-gdpr >./speedtest-cli/speedtest.log 2>&1 ./speedtest-cli/speedtest --progress=no --accept-license --accept-gdpr >./speedtest-cli/speedtest.log 2>&1
else
./speedtest-cli/speedtest --progress=no --server-id="$1" --accept-license --accept-gdpr >./speedtest-cli/speedtest.log 2>&1
fi
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
local dl_speed=$(awk '/Download/{print $3" "$4}' ./speedtest-cli/speedtest.log) local dl_speed up_speed latency
local up_speed=$(awk '/Upload/{print $3" "$4}' ./speedtest-cli/speedtest.log) dl_speed=$(awk '/Download/{print $3" "$4}' ./speedtest-cli/speedtest.log)
local latency=$(awk '/Latency/{print $3" "$4}' ./speedtest-cli/speedtest.log) up_speed=$(awk '/Upload/{print $3" "$4}' ./speedtest-cli/speedtest.log)
latency=$(awk '/Latency/{print $3" "$4}' ./speedtest-cli/speedtest.log)
if [[ -n "${dl_speed}" && -n "${up_speed}" && -n "${latency}" ]]; then if [[ -n "${dl_speed}" && -n "${up_speed}" && -n "${latency}" ]]; then
printf "\033[0;33m%-18s\033[0;32m%-18s\033[0;31m%-20s\033[0;36m%-12s\033[0m\n" " ${nodeName}" "${up_speed}" "${dl_speed}" "${latency}" printf "\033[0;33m%-18s\033[0;32m%-18s\033[0;31m%-20s\033[0;36m%-12s\033[0m\n" " ${nodeName}" "${up_speed}" "${dl_speed}" "${latency}"
fi fi
@@ -74,19 +78,18 @@ speed() {
speed_test '21541' 'Los Angeles, US' speed_test '21541' 'Los Angeles, US'
speed_test '43860' 'Dallas, US' speed_test '43860' 'Dallas, US'
speed_test '40879' 'Montreal, CA' speed_test '40879' 'Montreal, CA'
speed_test '24215' 'Paris, FR' speed_test '61933' 'Paris, FR'
speed_test '28922' 'Amsterdam, NL' speed_test '28922' 'Amsterdam, NL'
speed_test '25858' 'Beijing, CN'
speed_test '24447' 'Shanghai, CN' speed_test '24447' 'Shanghai, CN'
speed_test '5530' 'Chongqing, CN'
speed_test '60572' 'Guangzhou, CN' speed_test '60572' 'Guangzhou, CN'
speed_test '32155' 'Hongkong, CN' speed_test '32155' 'Hong Kong, CN'
speed_test '23647' 'Mumbai, IN'
speed_test '13623' 'Singapore, SG' speed_test '13623' 'Singapore, SG'
speed_test '21569' 'Tokyo, JP' speed_test '48463' 'Tokyo, JP'
} }
io_test() { io_test() {
(LANG=C dd if=/dev/zero of=benchtest_$$ bs=512k count=$1 conv=fdatasync && rm -f benchtest_$$) 2>&1 | awk -F, '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//' (LANG=C dd if=/dev/zero of=benchtest_$$ bs=512k count="$1" conv=fdatasync && rm -f benchtest_$$) 2>&1 | awk -F '[,]' '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//'
} }
calc_size() { calc_size() {
@@ -111,10 +114,27 @@ calc_size() {
echo "${total_size}" echo "${total_size}"
return return
fi fi
total_size=$(awk 'BEGIN{printf "%.1f", '$raw' / '$num'}') total_size=$(awk 'BEGIN{printf "%.1f", '"$raw"' / '$num'}')
echo "${total_size} ${unit}" echo "${total_size} ${unit}"
} }
# since calc_size converts kilobyte to MB, GB and TB
# to_kibyte converts zfs size from bytes to kilobyte
to_kibyte() {
local raw=$1
awk 'BEGIN{printf "%.0f", '"$raw"' / 1024}'
}
calc_sum() {
local arr=("$@")
local s
s=0
for i in "${arr[@]}"; do
s=$((s + i))
done
echo ${s}
}
check_virt() { check_virt() {
_exists "dmesg" && virtualx="$(dmesg 2>/dev/null)" _exists "dmesg" && virtualx="$(dmesg 2>/dev/null)"
if _exists "dmidecode"; then if _exists "dmidecode"; then
@@ -138,6 +158,8 @@ check_virt() {
virt="KVM" virt="KVM"
elif [[ "${sys_product}" == *KVM* ]]; then elif [[ "${sys_product}" == *KVM* ]]; then
virt="KVM" virt="KVM"
elif [[ "${sys_manu}" == *QEMU* ]]; then
virt="KVM"
elif [[ "${cname}" == *KVM* ]]; then elif [[ "${cname}" == *KVM* ]]; then
virt="KVM" virt="KVM"
elif [[ "${cname}" == *QEMU* ]]; then elif [[ "${cname}" == *QEMU* ]]; then
@@ -172,20 +194,21 @@ check_virt() {
} }
ipv4_info() { ipv4_info() {
local org="$(wget -q -T10 -O- ipinfo.io/org)" local org city country region
local city="$(wget -q -T10 -O- ipinfo.io/city)" org="$(wget -q -T10 -O- http://ipinfo.io/org)"
local country="$(wget -q -T10 -O- ipinfo.io/country)" city="$(wget -q -T10 -O- http://ipinfo.io/city)"
local region="$(wget -q -T10 -O- ipinfo.io/region)" country="$(wget -q -T10 -O- http://ipinfo.io/country)"
if [[ -n "$org" ]]; then region="$(wget -q -T10 -O- http://ipinfo.io/region)"
echo " Organization : $(_blue "$org")" if [[ -n "${org}" ]]; then
echo " Organization : $(_blue "${org}")"
fi fi
if [[ -n "$city" && -n "country" ]]; then if [[ -n "${city}" && -n "${country}" ]]; then
echo " Location : $(_blue "$city / $country")" echo " Location : $(_blue "${city} / ${country}")"
fi fi
if [[ -n "$region" ]]; then if [[ -n "${region}" ]]; then
echo " Region : $(_yellow "$region")" echo " Region : $(_yellow "${region}")"
fi fi
if [[ -z "$org" ]]; then if [[ -z "${org}" ]]; then
echo " Region : $(_red "No ISP detected")" echo " Region : $(_red "No ISP detected")"
fi fi
} }
@@ -193,9 +216,10 @@ ipv4_info() {
install_speedtest() { install_speedtest() {
if [ ! -e "./speedtest-cli/speedtest" ]; then if [ ! -e "./speedtest-cli/speedtest" ]; then
sys_bit="" sys_bit=""
local sysarch="$(uname -m)" local sysarch
sysarch="$(uname -m)"
if [ "${sysarch}" = "unknown" ] || [ "${sysarch}" = "" ]; then if [ "${sysarch}" = "unknown" ] || [ "${sysarch}" = "" ]; then
local sysarch="$(arch)" sysarch="$(arch)"
fi fi
if [ "${sysarch}" = "x86_64" ]; then if [ "${sysarch}" = "x86_64" ]; then
sys_bit="x86_64" sys_bit="x86_64"
@@ -215,10 +239,10 @@ install_speedtest() {
[ -z "${sys_bit}" ] && _red "Error: Unsupported system architecture (${sysarch}).\n" && exit 1 [ -z "${sys_bit}" ] && _red "Error: Unsupported system architecture (${sysarch}).\n" && exit 1
url1="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-${sys_bit}.tgz" url1="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-${sys_bit}.tgz"
url2="https://dl.lamp.sh/files/ookla-speedtest-1.2.0-linux-${sys_bit}.tgz" url2="https://dl.lamp.sh/files/ookla-speedtest-1.2.0-linux-${sys_bit}.tgz"
wget --no-check-certificate -q -T10 -O speedtest.tgz ${url1} if ! wget --no-check-certificate -q -T10 -O speedtest.tgz ${url1}; then
if [ $? -ne 0 ]; then if ! wget --no-check-certificate -q -T10 -O speedtest.tgz ${url2}; then
wget --no-check-certificate -q -T10 -O speedtest.tgz ${url2} _red "Error: Failed to download speedtest-cli.\n" && exit 1
[ $? -ne 0 ] && _red "Error: Failed to download speedtest-cli.\n" && exit 1 fi
fi fi
mkdir -p speedtest-cli && tar zxf speedtest.tgz -C ./speedtest-cli && chmod +x ./speedtest-cli/speedtest mkdir -p speedtest-cli && tar zxf speedtest.tgz -C ./speedtest-cli && chmod +x ./speedtest-cli/speedtest
rm -f speedtest.tgz rm -f speedtest.tgz
@@ -228,14 +252,14 @@ install_speedtest() {
print_intro() { print_intro() {
echo "-------------------- A Bench.sh Script By Teddysun -------------------" echo "-------------------- A Bench.sh Script By Teddysun -------------------"
echo " Version : $(_green v2023-10-15)" echo " Version : $(_green v2025-05-08)"
echo " Usage : $(_red "wget -qO- bench.sh | bash")" echo " Usage : $(_red "wget -qO- bench.sh | bash")"
} }
# Get System information # Get System information
get_system_info() { get_system_info() {
cname=$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//') cname=$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')
cores=$(awk -F: '/processor/ {core++} END {print core}' /proc/cpuinfo) cores=$(awk -F: '/^processor/ {core++} END {print core}' /proc/cpuinfo)
freq=$(awk -F'[ :]' '/cpu MHz/ {print $4;exit}' /proc/cpuinfo) freq=$(awk -F'[ :]' '/cpu MHz/ {print $4;exit}' /proc/cpuinfo)
ccache=$(awk -F: '/cache size/ {cache=$2} END {print cache}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//') ccache=$(awk -F: '/cache size/ {cache=$2} END {print cache}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')
cpu_aes=$(grep -i 'aes' /proc/cpuinfo) cpu_aes=$(grep -i 'aes' /proc/cpuinfo)
@@ -244,22 +268,22 @@ get_system_info() {
LANG=C LANG=C
free | awk '/Mem/ {print $2}' free | awk '/Mem/ {print $2}'
) )
tram=$(calc_size $tram) tram=$(calc_size "$tram")
uram=$( uram=$(
LANG=C LANG=C
free | awk '/Mem/ {print $3}' free | awk '/Mem/ {print $3}'
) )
uram=$(calc_size $uram) uram=$(calc_size "$uram")
swap=$( swap=$(
LANG=C LANG=C
free | awk '/Swap/ {print $2}' free | awk '/Swap/ {print $2}'
) )
swap=$(calc_size $swap) swap=$(calc_size "$swap")
uswap=$( uswap=$(
LANG=C LANG=C
free | awk '/Swap/ {print $3}' free | awk '/Swap/ {print $3}'
) )
uswap=$(calc_size $uswap) uswap=$(calc_size "$uswap")
up=$(awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days, %d hour %d min\n",a,b,c)}' /proc/uptime) up=$(awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days, %d hour %d min\n",a,b,c)}' /proc/uptime)
if _exists "w"; then if _exists "w"; then
load=$( load=$(
@@ -277,19 +301,23 @@ get_system_info() {
if _exists "getconf"; then if _exists "getconf"; then
lbit=$(getconf LONG_BIT) lbit=$(getconf LONG_BIT)
else else
echo ${arch} | grep -q "64" && lbit="64" || lbit="32" echo "${arch}" | grep -q "64" && lbit="64" || lbit="32"
fi fi
kern=$(uname -r) kern=$(uname -r)
disk_total_size=$( in_kernel_no_swap_total_size=$(
LANG=C LANG=C
df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs -t swap --total 2>/dev/null | grep total | awk '{ print $2 }' df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs --total 2>/dev/null | grep total | awk '{ print $2 }'
) )
disk_total_size=$(calc_size $disk_total_size) swap_total_size=$(free -k | grep Swap | awk '{print $2}')
disk_used_size=$( zfs_total_size=$(to_kibyte "$(calc_sum "$(zpool list -o size -Hp 2> /dev/null)")")
disk_total_size=$(calc_size $((swap_total_size + in_kernel_no_swap_total_size + zfs_total_size)))
in_kernel_no_swap_used_size=$(
LANG=C LANG=C
df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs -t swap --total 2>/dev/null | grep total | awk '{ print $3 }' df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs --total 2>/dev/null | grep total | awk '{ print $3 }'
) )
disk_used_size=$(calc_size $disk_used_size) swap_used_size=$(free -k | grep Swap | awk '{print $3}')
zfs_used_size=$(to_kibyte "$(calc_sum "$(zpool list -o allocated -Hp 2> /dev/null)")")
disk_used_size=$(calc_size $((swap_used_size + in_kernel_no_swap_used_size + zfs_used_size)))
tcpctrl=$(sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}') tcpctrl=$(sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}')
} }
# Print System information # Print System information
@@ -308,14 +336,14 @@ print_system_info() {
echo " CPU Cache : $(_blue "$ccache")" echo " CPU Cache : $(_blue "$ccache")"
fi fi
if [ -n "$cpu_aes" ]; then if [ -n "$cpu_aes" ]; then
echo " AES-NI : $(_green "Enabled")" echo " AES-NI : $(_green "\xe2\x9c\x93 Enabled")"
else else
echo " AES-NI : $(_red "Disabled")" echo " AES-NI : $(_red "\xe2\x9c\x97 Disabled")"
fi fi
if [ -n "$cpu_virt" ]; then if [ -n "$cpu_virt" ]; then
echo " VM-x/AMD-V : $(_green "Enabled")" echo " VM-x/AMD-V : $(_green "\xe2\x9c\x93 Enabled")"
else else
echo " VM-x/AMD-V : $(_red "Disabled")" echo " VM-x/AMD-V : $(_red "\xe2\x9c\x97 Disabled")"
fi fi
echo " Total Disk : $(_yellow "$disk_total_size") $(_blue "($disk_used_size Used)")" echo " Total Disk : $(_yellow "$disk_total_size") $(_blue "($disk_used_size Used)")"
echo " Total Mem : $(_yellow "$tram") $(_blue "($uram Used)")" echo " Total Mem : $(_yellow "$tram") $(_blue "($uram Used)")"
@@ -337,7 +365,7 @@ print_io_test() {
if [ -z "${freespace}" ]; then if [ -z "${freespace}" ]; then
freespace=$(df -m . | awk 'NR==3 {print $3}') freespace=$(df -m . | awk 'NR==3 {print $3}')
fi fi
if [ ${freespace} -gt 1024 ]; then if [ "${freespace}" -gt 1024 ]; then
writemb=2048 writemb=2048
io1=$(io_test ${writemb}) io1=$(io_test ${writemb})
echo " I/O Speed(1st run) : $(_yellow "$io1")" echo " I/O Speed(1st run) : $(_yellow "$io1")"
@@ -345,14 +373,14 @@ print_io_test() {
echo " I/O Speed(2nd run) : $(_yellow "$io2")" echo " I/O Speed(2nd run) : $(_yellow "$io2")"
io3=$(io_test ${writemb}) io3=$(io_test ${writemb})
echo " I/O Speed(3rd run) : $(_yellow "$io3")" echo " I/O Speed(3rd run) : $(_yellow "$io3")"
ioraw1=$(echo $io1 | awk 'NR==1 {print $1}') ioraw1=$(echo "$io1" | awk 'NR==1 {print $1}')
[ "$(echo $io1 | awk 'NR==1 {print $2}')" == "GB/s" ] && ioraw1=$(awk 'BEGIN{print '$ioraw1' * 1024}') [[ "$(echo "$io1" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw1=$(awk 'BEGIN{print '"$ioraw1"' * 1024}')
ioraw2=$(echo $io2 | awk 'NR==1 {print $1}') ioraw2=$(echo "$io2" | awk 'NR==1 {print $1}')
[ "$(echo $io2 | awk 'NR==1 {print $2}')" == "GB/s" ] && ioraw2=$(awk 'BEGIN{print '$ioraw2' * 1024}') [[ "$(echo "$io2" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw2=$(awk 'BEGIN{print '"$ioraw2"' * 1024}')
ioraw3=$(echo $io3 | awk 'NR==1 {print $1}') ioraw3=$(echo "$io3" | awk 'NR==1 {print $1}')
[ "$(echo $io3 | awk 'NR==1 {print $2}')" == "GB/s" ] && ioraw3=$(awk 'BEGIN{print '$ioraw3' * 1024}') [[ "$(echo "$io3" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw3=$(awk 'BEGIN{print '"$ioraw3"' * 1024}')
ioall=$(awk 'BEGIN{print '$ioraw1' + '$ioraw2' + '$ioraw3'}') ioall=$(awk 'BEGIN{print '"$ioraw1"' + '"$ioraw2"' + '"$ioraw3"'}')
ioavg=$(awk 'BEGIN{printf "%.1f", '$ioall' / 3}') ioavg=$(awk 'BEGIN{printf "%.1f", '"$ioall"' / 3}')
echo " I/O Speed(average) : $(_yellow "$ioavg MB/s")" echo " I/O Speed(average) : $(_yellow "$ioavg MB/s")"
else else
echo " $(_red "Not enough space for I/O Speed test!")" echo " $(_red "Not enough space for I/O Speed test!")"
@@ -361,10 +389,10 @@ print_io_test() {
print_end_time() { print_end_time() {
end_time=$(date +%s) end_time=$(date +%s)
time=$((${end_time} - ${start_time})) time=$((end_time - start_time))
if [ ${time} -gt 60 ]; then if [ ${time} -gt 60 ]; then
min=$(expr $time / 60) min=$((time / 60))
sec=$(expr $time % 60) sec=$((time % 60))
echo " Finished in : ${min} min ${sec} sec" echo " Finished in : ${min} min ${sec} sec"
else else
echo " Finished in : ${time} sec" echo " Finished in : ${time} sec"
@@ -376,16 +404,16 @@ print_end_time() {
! _exists "wget" && _red "Error: wget command not found.\n" && exit 1 ! _exists "wget" && _red "Error: wget command not found.\n" && exit 1
! _exists "free" && _red "Error: free command not found.\n" && exit 1 ! _exists "free" && _red "Error: free command not found.\n" && exit 1
# check for curl/wget # check for curl/wget
command -v curl >/dev/null 2>&1 && local_curl=true || unset local_curl _exists "curl" && local_curl=true
# test if the host has IPv4/IPv6 connectivity # test if the host has IPv4/IPv6 connectivity
[[ ! -z ${local_curl} ]] && ip_check_cmd="curl -s -m 4" || ip_check_cmd="wget -qO- -T 4" [[ -n ${local_curl} ]] && ip_check_cmd="curl -s -m 4" || ip_check_cmd="wget -qO- -T 4"
ipv4_check=$((ping -4 -c 1 -W 4 ipv4.google.com >/dev/null 2>&1 && echo true) || ${ip_check_cmd} -4 icanhazip.com 2> /dev/null) ipv4_check=$( (ping -4 -c 1 -W 4 ipv4.google.com >/dev/null 2>&1 && echo true) || ${ip_check_cmd} -4 icanhazip.com 2> /dev/null)
ipv6_check=$((ping -6 -c 1 -W 4 ipv6.google.com >/dev/null 2>&1 && echo true) || ${ip_check_cmd} -6 icanhazip.com 2> /dev/null) ipv6_check=$( (ping -6 -c 1 -W 4 ipv6.google.com >/dev/null 2>&1 && echo true) || ${ip_check_cmd} -6 icanhazip.com 2> /dev/null)
if [[ -z "$ipv4_check" && -z "$ipv6_check" ]]; then if [[ -z "$ipv4_check" && -z "$ipv6_check" ]]; then
_yellow "Warning: Both IPv4 and IPv6 connectivity were not detected.\n" _yellow "Warning: Both IPv4 and IPv6 connectivity were not detected.\n"
fi fi
[[ -z "$ipv4_check" ]] && online="$(_red "Offline")" || online="$(_green "Online")" [[ -z "$ipv4_check" ]] && online="$(_red "\xe2\x9c\x97 Offline")" || online="$(_green "\xe2\x9c\x93 Online")"
[[ -z "$ipv6_check" ]] && online+=" / $(_red "Offline")" || online+=" / $(_green "Online")" [[ -z "$ipv6_check" ]] && online+=" / $(_red "\xe2\x9c\x97 Offline")" || online+=" / $(_green "\xe2\x9c\x93 Online")"
start_time=$(date +%s) start_time=$(date +%s)
get_system_info get_system_info
check_virt check_virt

99
deb/xray-plugin/Makefile Normal file
View File

@@ -0,0 +1,99 @@
ARCH=$(shell uname -m)
VERSION?=1.8.15
GO_VERSION:=1.22.5
SHELL:=/bin/bash
GO_BASE_IMAGE=golang
GO_IMAGE?=$(GO_BASE_IMAGE):$(GO_VERSION)-bookworm
EPOCH?=
REPO?=https://github.com/teddysun/xray-plugin.git
REF?=v1.8.15
CHOWN:=docker run --rm -v $(CURDIR):/v -w /v alpine chown
ifdef BUILD_IMAGE
BUILD_IMAGE_FLAG=--build-arg $(BUILD_IMAGE)
endif
COMMON_FILES=common
BUILD?=DOCKER_BUILDKIT=1 \
docker build \
$(BUILD_IMAGE_FLAG) \
--build-arg GO_IMAGE=$(GO_IMAGE) \
--build-arg COMMON_FILES=$(COMMON_FILES) \
-t debbuild-$@/$(ARCH) \
-f $@/Dockerfile \
.
# Additional flags may be necessary at some point
RUN_FLAGS=
RUN?=docker run --rm -h buildbot \
-e PLATFORM \
-e EPOCH='$(EPOCH)' \
-e DEB_VERSION=$(VERSION) \
-e VERSION=$(VERSION) \
-v $(CURDIR)/debbuild/$@:/build \
$(RUN_FLAGS) \
debbuild-$@/$(ARCH)
DEBIAN_VERSIONS ?= debian-buster debian-bullseye debian-bookworm
UBUNTU_VERSIONS ?= ubuntu-focal ubuntu-jammy ubuntu-noble
DISTROS := $(DEBIAN_VERSIONS) $(UBUNTU_VERSIONS)
# Taken from: https://www.cmcrossroads.com/article/printing-value-makefile-variable
print-% : ; @echo $($*)
.PHONY: help
help: ## show make targets
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
.PHONY: checkout-src
checkout-src: src/github.com/teddysun/xray-plugin
./checkout.sh src/github.com/teddysun/xray-plugin "$(REF)"
src/github.com/teddysun/xray-plugin:
git init $@
git -C $@ remote add origin "$(REPO)"
.PHONY: checkout
checkout: checkout-src ## checkout source at the given reference(s)
.PHONY: clean
clean: ## remove build artifacts
[ ! -d debbuild ] || $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild
$(RM) -r debbuild
[ ! -d sources ] || $(CHOWN) -R $(shell id -u):$(shell id -g) sources
$(RM) -r sources
-docker builder prune -f --filter until=24h
.PHONY: deb
deb: ubuntu debian ## build all deb packages
.PHONY: ubuntu
ubuntu: $(UBUNTU_VERSIONS) ## build all ubuntu deb packages
.PHONY: debian
debian: $(DEBIAN_VERSIONS) ## build all debian deb packages
.PHONY: $(DISTROS)
$(DISTROS): sources
@echo "== Building packages for $@ =="
mkdir -p "debbuild/$@"
$(BUILD)
$(RUN)
$(CHOWN) -R $(shell id -u):$(shell id -g) "debbuild/$@"
.PHONY: sources
sources: sources/xray-plugin.tgz
sources/xray-plugin.tgz:
mkdir -p $(@D)
docker run --rm -w /v \
-v $(realpath $(CURDIR)/src/github.com/teddysun/xray-plugin):/xray-plugin \
-v $(CURDIR)/$(@D):/v \
alpine \
tar -C / -c -z -f /v/xray-plugin.tgz --exclude .git xray-plugin
# See ARCHES in common.mk. Could not figure out how to match both distro and arch.
BUNDLES:=$(addsuffix .tar.gz,$(addprefix debbuild/bundles-%-,$(ARCHES)))
$(BUNDLES): %
tar czf $@ --transform="s|^debbuild/\(.*\)|bundles/$(VERSION)/build-deb/\1|" debbuild/$*

74
deb/xray-plugin/build-deb Normal file
View File

@@ -0,0 +1,74 @@
#!/usr/bin/env bash
set -x
set -e
# untar sources
mkdir -p /root/build-deb/xray-plugin
tar -C /root/build-deb -xzf /sources/xray-plugin.tgz
# link them to their canonical path
mkdir -p /go/src/github.com/teddysun
ln -snf /root/build-deb/xray-plugin /go/src/github.com/teddysun/xray-plugin
EPOCH="${EPOCH:-}"
EPOCH_SEP=""
if [[ -n "$EPOCH" ]]; then
EPOCH_SEP=":"
fi
if [[ -z "${DEB_VERSION}" ]]; then
echo "DEB_VERSION is required to build deb packages"
exit 1
fi
echo VERSION AAA ${VERSION}
VERSION=${VERSION:-$(cat VERSION)}
debSource="$(awk -F ': ' '$1 == "Source" { print $2; exit }' debian/control)"
debMaintainer="$(awk -F ': ' '$1 == "Maintainer" { print $2; exit }' debian/control)"
debDate="$(date --rfc-2822)"
# Include an extra `1` in the version, in case we ever would have to re-build an
# already published release with a packaging-only change.
pkgRevision=1
# Generate changelog. The version/name of the generated packages are based on this.
#
# Resulting packages are formatted as;
#
# - name of the package (e.g., "docker-ce")
# - version (e.g., "23.0.0~beta.0")
# - pkgRevision (usually "-0", see above), which allows updating packages with
# packaging-only changes (without a corresponding release of the software
# that's packaged).
# - distro (e.g., "ubuntu")
# - VERSION_ID (e.g. "22.04" or "11") this must be "sortable" to make sure that
# packages are upgraded when upgrading to a newer distro version ("codename"
# cannot be used for this, as they're not sorted)
# - SUITE ("codename"), e.g. "jammy" or "bullseye". This is mostly for convenience,
# because some places refer to distro versions by codename, others by version.
# we prefix the codename with a tilde (~), which effectively excludes it from
# version comparison.
#
# Note that while the `${EPOCH}${EPOCH_SEP}` is part of the version, it is not
# included in the package's *filename*. (And if you're wondering: we needed the
# EPOCH because of our use of CalVer, which made version comparing not work in
# some cases).
#
# Examples:
#
# docker-ce_23.0.0~beta.0-1~debian.11~bullseye_amd64.deb
# docker-ce_23.0.0~beta.0-1~ubuntu.22.04~jammy_amd64.deb
cat > "debian/changelog" <<-EOF
$debSource (${EPOCH}${EPOCH_SEP}${DEB_VERSION}-${pkgRevision}~${DISTRO}.${VERSION_ID}~${SUITE}) $SUITE; urgency=low
* Version: ${VERSION}
-- $debMaintainer $debDate
EOF
# The space above at the start of the line for the debMaintainer is very important
echo VERSION BBB ${VERSION}
dpkg-buildpackage -uc -us -I.git
destination="/build"
mkdir -p "$destination"
mv -v /root/xray-plugin* "$destination"

View File

@@ -0,0 +1,39 @@
#!/usr/bin/env sh
# Copyright 2018-2020 Docker Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
checkout() (
set -ex
SRC="$1"
REF="$2"
REF_FETCH="$REF"
# if ref is branch or tag, retrieve its canonical form
REF=$(git -C "$SRC" ls-remote --refs --heads --tags origin "$REF" | awk '{print $2}')
if [ -n "$REF" ]; then
# if branch or tag then create it locally too
REF_FETCH="$REF:$REF"
else
REF="FETCH_HEAD"
fi
git -C "$SRC" fetch --update-head-ok --depth 1 origin "$REF_FETCH"
git -C "$SRC" checkout -q "$REF"
)
# Only execute checkout function above if this file is executed, not sourced from another script
prog=checkout.sh # needs to be in sync with this file's name
if [ "$(basename -- $0)" = "$prog" ]; then
checkout $*
fi

View File

@@ -0,0 +1,29 @@
Source: xray-plugin
Section: devel
Priority: optional
Maintainer: Teddysun <i@teddysun.com>
Build-Depends: bash,
cmake,
dh-apparmor,
debhelper-compat (= 12),
gcc,
git,
libc-dev,
libltdl-dev,
libseccomp-dev,
libseccomp2,
libsystemd-dev,
libtool,
make,
pkg-config
Standards-Version: 3.9.6
Homepage: https://github.com/teddysun/xray-plugin
Vcs-Browser: https://github.com/teddysun/xray-plugin
Vcs-Git: git://github.com/teddysun/xray-plugin.git
Package: xray-plugin
Architecture: linux-any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Xray plugin for shadowsocks
Yet another SIP003 plugin for shadowsocks, based on xray-core.
It should be used with shadowsocks.

View File

@@ -0,0 +1 @@
xray-plugin/README.md

View File

@@ -0,0 +1,28 @@
#!/usr/bin/make -f
VERSION?=$(shell cat VERSION)
# force packages to be built with xz compression, as Ubuntu 21.10 and up use
# zstd compression, which is non-standard, and breaks 'dpkg-sig --verify'
override_dh_builddeb:
dh_builddeb -- -Zxz
override_dh_auto_build:
cd xray-plugin \
&& GO111MODULE=on \
env CGO_ENABLED=0 go build -v -trimpath -ldflags "-X main.VERSION=v$(VERSION) -s -w -buildid=" -o "xray-plugin"
# http://manpages.debian.org/dh_dwz
override_dh_dwz:
# dh_dwz in debhelper versions less than 13 has issues with files that are missing debug symbols (once we update to debhelper-compat 13+ this can be removed)
@# https://packages.debian.org/debhelper
@# https://packages.ubuntu.com/debhelper
override_dh_auto_install:
install -D -m 0755 xray-plugin/xray-plugin debian/xray-plugin/usr/bin/xray-plugin
override_dh_shlibdeps:
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
%:
dh $@

View File

@@ -0,0 +1 @@
1.0

View File

@@ -0,0 +1,40 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=debian
ARG SUITE=bookworm
ARG VERSION_ID=12
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,40 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=debian
ARG SUITE=bullseye
ARG VERSION_ID=11
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,40 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=debian
ARG SUITE=buster
ARG VERSION_ID=10
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,46 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=ubuntu
ARG SUITE=focal
ARG VERSION_ID=20.04
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
# Remove diverted man binary to prevent man-pages being replaced with "minimized" message. See docker/for-linux#639
RUN if [ "$(dpkg-divert --truename /usr/bin/man)" = "/usr/bin/man.REAL" ]; then \
rm -f /usr/bin/man; \
dpkg-divert --quiet --remove --rename /usr/bin/man; \
fi
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,46 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=ubuntu
ARG SUITE=jammy
ARG VERSION_ID=22.04
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
# Remove diverted man binary to prevent man-pages being replaced with "minimized" message. See docker/for-linux#639
RUN if [ "$(dpkg-divert --truename /usr/bin/man)" = "/usr/bin/man.REAL" ]; then \
rm -f /usr/bin/man; \
dpkg-divert --quiet --remove --rename /usr/bin/man; \
fi
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,46 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=ubuntu
ARG SUITE=noble
ARG VERSION_ID=24.04
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
# Remove diverted man binary to prevent man-pages being replaced with "minimized" message. See docker/for-linux#639
RUN if [ "$(dpkg-divert --truename /usr/bin/man)" = "/usr/bin/man.REAL" ]; then \
rm -f /usr/bin/man; \
dpkg-divert --quiet --remove --rename /usr/bin/man; \
fi
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

101
deb/xray/Makefile Normal file
View File

@@ -0,0 +1,101 @@
ARCH=$(shell uname -m)
VERSION?=24.11.30
GO_VERSION:=1.23.3
SHELL:=/bin/bash
GO_BASE_IMAGE=golang
GO_IMAGE?=$(GO_BASE_IMAGE):$(GO_VERSION)-bookworm
EPOCH?=
REPO?=https://github.com/xtls/xray-core.git
REF?=v24.11.30
CHOWN:=docker run --rm -v $(CURDIR):/v -w /v alpine chown
ifdef BUILD_IMAGE
BUILD_IMAGE_FLAG=--build-arg $(BUILD_IMAGE)
endif
COMMON_FILES=common
BUILD?=DOCKER_BUILDKIT=1 \
docker build \
$(BUILD_IMAGE_FLAG) \
--build-arg GO_IMAGE=$(GO_IMAGE) \
--build-arg COMMON_FILES=$(COMMON_FILES) \
-t debbuild-$@/$(ARCH) \
-f $@/Dockerfile \
.
# Additional flags may be necessary at some point
RUN_FLAGS=
RUN?=docker run --rm -h buildbot \
-e PLATFORM \
-e EPOCH='$(EPOCH)' \
-e DEB_VERSION=$(VERSION) \
-e VERSION=$(VERSION) \
-v $(CURDIR)/debbuild/$@:/build \
$(RUN_FLAGS) \
debbuild-$@/$(ARCH)
DEBIAN_VERSIONS ?= debian-buster debian-bullseye debian-bookworm
UBUNTU_VERSIONS ?= ubuntu-focal ubuntu-jammy ubuntu-noble
DISTROS := $(DEBIAN_VERSIONS) $(UBUNTU_VERSIONS)
# Taken from: https://www.cmcrossroads.com/article/printing-value-makefile-variable
print-% : ; @echo $($*)
.PHONY: help
help: ## show make targets
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
.PHONY: checkout-src
checkout-src: src/github.com/xtls/xray
../checkout.sh src/github.com/xtls/xray "$(REF)"
@curl -sSLo src/github.com/xtls/xray/geoip.dat https://github.com/v2fly/geoip/releases/latest/download/geoip.dat
@curl -sSLo src/github.com/xtls/xray/geosite.dat https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat
src/github.com/xtls/xray:
git init $@
git -C $@ remote add origin "$(REPO)"
.PHONY: checkout
checkout: checkout-src ## checkout source at the given reference(s)
.PHONY: clean
clean: ## remove build artifacts
[ ! -d debbuild ] || $(CHOWN) -R $(shell id -u):$(shell id -g) debbuild
$(RM) -r debbuild
[ ! -d sources ] || $(CHOWN) -R $(shell id -u):$(shell id -g) sources
$(RM) -r sources
-docker builder prune -f --filter until=24h
.PHONY: deb
deb: ubuntu debian ## build all deb packages
.PHONY: ubuntu
ubuntu: $(UBUNTU_VERSIONS) ## build all ubuntu deb packages
.PHONY: debian
debian: $(DEBIAN_VERSIONS) ## build all debian deb packages
.PHONY: $(DISTROS)
$(DISTROS): sources
@echo "== Building packages for $@ =="
mkdir -p "debbuild/$@"
$(BUILD)
$(RUN)
$(CHOWN) -R $(shell id -u):$(shell id -g) "debbuild/$@"
.PHONY: sources
sources: sources/xray.tgz
sources/xray.tgz:
mkdir -p $(@D)
docker run --rm -w /v \
-v $(realpath $(CURDIR)/src/github.com/xtls/xray):/xray \
-v $(CURDIR)/$(@D):/v \
alpine \
tar -C / -c -z -f /v/xray.tgz --exclude .git xray
# See ARCHES in common.mk. Could not figure out how to match both distro and arch.
BUNDLES:=$(addsuffix .tar.gz,$(addprefix debbuild/bundles-%-,$(ARCHES)))
$(BUNDLES): %
tar czf $@ --transform="s|^debbuild/\(.*\)|bundles/$(VERSION)/build-deb/\1|" debbuild/$*

74
deb/xray/build-deb Normal file
View File

@@ -0,0 +1,74 @@
#!/usr/bin/env bash
set -x
set -e
# untar sources
mkdir -p /root/build-deb/xray
tar -C /root/build-deb -xzf /sources/xray.tgz
# link them to their canonical path
mkdir -p /go/src/github.com/xtls
ln -snf /root/build-deb/xray /go/src/github.com/xtls/xray-core
EPOCH="${EPOCH:-}"
EPOCH_SEP=""
if [[ -n "$EPOCH" ]]; then
EPOCH_SEP=":"
fi
if [[ -z "${DEB_VERSION}" ]]; then
echo "DEB_VERSION is required to build deb packages"
exit 1
fi
echo VERSION AAA ${VERSION}
VERSION=${VERSION:-$(cat VERSION)}
debSource="$(awk -F ': ' '$1 == "Source" { print $2; exit }' debian/control)"
debMaintainer="$(awk -F ': ' '$1 == "Maintainer" { print $2; exit }' debian/control)"
debDate="$(date --rfc-2822)"
# Include an extra `1` in the version, in case we ever would have to re-build an
# already published release with a packaging-only change.
pkgRevision=1
# Generate changelog. The version/name of the generated packages are based on this.
#
# Resulting packages are formatted as;
#
# - name of the package (e.g., "docker-ce")
# - version (e.g., "23.0.0~beta.0")
# - pkgRevision (usually "-0", see above), which allows updating packages with
# packaging-only changes (without a corresponding release of the software
# that's packaged).
# - distro (e.g., "ubuntu")
# - VERSION_ID (e.g. "22.04" or "11") this must be "sortable" to make sure that
# packages are upgraded when upgrading to a newer distro version ("codename"
# cannot be used for this, as they're not sorted)
# - SUITE ("codename"), e.g. "jammy" or "bullseye". This is mostly for convenience,
# because some places refer to distro versions by codename, others by version.
# we prefix the codename with a tilde (~), which effectively excludes it from
# version comparison.
#
# Note that while the `${EPOCH}${EPOCH_SEP}` is part of the version, it is not
# included in the package's *filename*. (And if you're wondering: we needed the
# EPOCH because of our use of CalVer, which made version comparing not work in
# some cases).
#
# Examples:
#
# docker-ce_23.0.0~beta.0-1~debian.11~bullseye_amd64.deb
# docker-ce_23.0.0~beta.0-1~ubuntu.22.04~jammy_amd64.deb
cat > "debian/changelog" <<-EOF
$debSource (${EPOCH}${EPOCH_SEP}${DEB_VERSION}-${pkgRevision}~${DISTRO}.${VERSION_ID}~${SUITE}) $SUITE; urgency=low
* Version: ${VERSION}
-- $debMaintainer $debDate
EOF
# The space above at the start of the line for the debMaintainer is very important
echo VERSION BBB ${VERSION}
dpkg-buildpackage -uc -us -I.git
destination="/build"
mkdir -p "$destination"
mv -v /root/xray* "$destination"

39
deb/xray/checkout.sh Normal file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env sh
# Copyright 2018-2020 Docker Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
checkout() (
set -ex
SRC="$1"
REF="$2"
REF_FETCH="$REF"
# if ref is branch or tag, retrieve its canonical form
REF=$(git -C "$SRC" ls-remote --refs --heads --tags origin "$REF" | awk '{print $2}')
if [ -n "$REF" ]; then
# if branch or tag then create it locally too
REF_FETCH="$REF:$REF"
else
REF="FETCH_HEAD"
fi
git -C "$SRC" fetch --update-head-ok --depth 1 origin "$REF_FETCH"
git -C "$SRC" checkout -q "$REF"
)
# Only execute checkout function above if this file is executed, not sourced from another script
prog=checkout.sh # needs to be in sync with this file's name
if [ "$(basename -- $0)" = "$prog" ]; then
checkout $*
fi

View File

@@ -0,0 +1,19 @@
{
"inbounds": [{
"port": 9000,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "1eb6e917-774b-4a84-aff6-b058577c60a5",
"level": 1,
"alterId": 64
}
]
}
}],
"outbounds": [{
"protocol": "freedom",
"settings": {}
}]
}

29
deb/xray/common/control Normal file
View File

@@ -0,0 +1,29 @@
Source: xray
Section: net
Priority: optional
Maintainer: Teddysun <i@teddysun.com>
Build-Depends: bash,
cmake,
dh-apparmor,
debhelper-compat (= 12),
gcc,
git,
libc-dev,
libltdl-dev,
libseccomp-dev,
libseccomp2,
libsystemd-dev,
libtool,
make,
pkg-config
Standards-Version: 3.9.6
Homepage: https://github.com/xtls/xray-core
Rules-Requires-Root: no
Vcs-Browser: https://github.com/xtls/xray-core
Vcs-Git: git://github.com/xtls/xray-core.git
Package: xray
Architecture: linux-any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Xray, Penetrates Everything.
Also the best v2ray-core, with XTLS support. Fully compatible configuration.

32
deb/xray/common/rules Normal file
View File

@@ -0,0 +1,32 @@
#!/usr/bin/make -f
# force packages to be built with xz compression, as Ubuntu 21.10 and up use
# zstd compression, which is non-standard, and breaks 'dpkg-sig --verify'
override_dh_builddeb:
dh_builddeb -- -Zxz
override_dh_auto_build:
cd xray \
&& GO111MODULE=on \
env CGO_ENABLED=0 go build -v -trimpath -ldflags "-s -w -buildid=" -o "xray" ./main
# http://manpages.debian.org/dh_dwz
override_dh_dwz:
# dh_dwz in debhelper versions less than 13 has issues with files that are missing debug symbols (once we update to debhelper-compat 13+ this can be removed)
@# https://packages.debian.org/debhelper
@# https://packages.ubuntu.com/debhelper
override_dh_auto_install:
install -D -m 0644 debian/config.json debian/xray/etc/xray/config.json
install -D -m 0755 xray/xray debian/xray/usr/bin/xray
install -D -m 0644 xray/geoip.dat debian/xray/usr/share/xray/geoip.dat
install -D -m 0644 xray/geosite.dat debian/xray/usr/share/xray/geosite.dat
override_dh_installsystemd:
dh_installsystemd --no-enable --no-start
override_dh_shlibdeps:
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
%:
dh $@

View File

@@ -0,0 +1 @@
1.0

View File

@@ -0,0 +1 @@
xray/README.md

View File

@@ -0,0 +1,17 @@
[Unit]
Description=Xray Service
Documentation=https://github.com/xtls
After=network.target nss-lookup.target
[Service]
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/bin/xray run -config /etc/xray/config.json
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,17 @@
[Unit]
Description=Xray Service
Documentation=https://github.com/xtls
After=network.target nss-lookup.target
[Service]
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/bin/xray run -config /etc/xray/%i.json
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,40 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=debian
ARG SUITE=bookworm
ARG VERSION_ID=12
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,40 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=debian
ARG SUITE=bullseye
ARG VERSION_ID=11
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,40 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=debian
ARG SUITE=buster
ARG VERSION_ID=10
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,46 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=ubuntu
ARG SUITE=focal
ARG VERSION_ID=20.04
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
# Remove diverted man binary to prevent man-pages being replaced with "minimized" message. See docker/for-linux#639
RUN if [ "$(dpkg-divert --truename /usr/bin/man)" = "/usr/bin/man.REAL" ]; then \
rm -f /usr/bin/man; \
dpkg-divert --quiet --remove --rename /usr/bin/man; \
fi
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,46 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=ubuntu
ARG SUITE=jammy
ARG VERSION_ID=22.04
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
# Remove diverted man binary to prevent man-pages being replaced with "minimized" message. See docker/for-linux#639
RUN if [ "$(dpkg-divert --truename /usr/bin/man)" = "/usr/bin/man.REAL" ]; then \
rm -f /usr/bin/man; \
dpkg-divert --quiet --remove --rename /usr/bin/man; \
fi
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -0,0 +1,46 @@
# syntax=docker/dockerfile:1
ARG GO_IMAGE
ARG DISTRO=ubuntu
ARG SUITE=noble
ARG VERSION_ID=24.04
ARG BUILD_IMAGE=${DISTRO}:${SUITE}
FROM ${GO_IMAGE} AS golang
FROM ${BUILD_IMAGE}
# Remove diverted man binary to prevent man-pages being replaced with "minimized" message. See docker/for-linux#639
RUN if [ "$(dpkg-divert --truename /usr/bin/man)" = "/usr/bin/man.REAL" ]; then \
rm -f /usr/bin/man; \
dpkg-divert --quiet --remove --rename /usr/bin/man; \
fi
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y curl devscripts equivs git
ENV GOPROXY=https://proxy.golang.org|direct
ENV GO111MODULE=off
ENV GOPATH=/go
ENV GOTOOLCHAIN=local
ENV PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
ARG COMMON_FILES
COPY --link ${COMMON_FILES} /root/build-deb/debian
RUN apt-get update \
&& mk-build-deps -t "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y" -i /root/build-deb/debian/control
COPY --link sources/ /sources
ARG DISTRO
ARG SUITE
ARG VERSION_ID
ENV DISTRO=${DISTRO}
ENV SUITE=${SUITE}
ENV VERSION_ID=${VERSION_ID}
COPY --link --from=golang /usr/local/go /usr/local/go
WORKDIR /root/build-deb
COPY build-deb /root/build-deb/build-deb
ENTRYPOINT ["/root/build-deb/build-deb"]

View File

@@ -1,5 +1,5 @@
# Dockerfile for Brook based alpine # Dockerfile for Brook based alpine
# Copyright (C) 2019 - 2020 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/txthinking/brook # https://github.com/txthinking/brook

View File

@@ -1,9 +1,9 @@
# Dockerfile for Brook based alpine # Dockerfile for Brook based alpine
# Copyright (C) 2019 - 2020 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/txthinking/brook # https://github.com/txthinking/brook
FROM --platform=${TARGETPLATFORM} alpine:latest FROM alpine:latest
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
ARG TARGETPLATFORM ARG TARGETPLATFORM

View File

@@ -1,5 +1,5 @@
# Dockerfile for caddy v1.0.5 based alpine # Dockerfile for caddy v1.0.5 based alpine
# Copyright (C) 2021 Teddysun <i@teddysun.com> # Copyright (C) 2021 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/caddyserver/caddy # https://github.com/caddyserver/caddy
# https://github.com/caddyserver/forwardproxy # https://github.com/caddyserver/forwardproxy

View File

@@ -1,10 +1,10 @@
# Dockerfile for caddy v1.0.5 based alpine # Dockerfile for caddy v1.0.5 based alpine
# Copyright (C) 2021 Teddysun <i@teddysun.com> # Copyright (C) 2021 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/caddyserver/caddy # https://github.com/caddyserver/caddy
# https://github.com/caddyserver/forwardproxy # https://github.com/caddyserver/forwardproxy
FROM --platform=${TARGETPLATFORM} alpine:3.14 FROM alpine:3.14
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
ARG TARGETPLATFORM ARG TARGETPLATFORM

View File

@@ -1,9 +1,9 @@
# Dockerfile for hysteria based alpine # Dockerfile for hysteria based alpine
# Copyright (C) 2023 Teddysun <i@teddysun.com> # Copyright (C) 2023 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/HyNetwork/hysteria # https://github.com/HyNetwork/hysteria
FROM --platform=${TARGETPLATFORM} alpine:latest FROM alpine:latest
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
ARG TARGETPLATFORM ARG TARGETPLATFORM

View File

@@ -1,5 +1,5 @@
# Dockerfile for KMS Server # Dockerfile for KMS Server
# Copyright (C) 2018 - 2020 Teddysun <i@teddysun.com> # Copyright (C) 2018 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/Wind4/vlmcsd # https://github.com/Wind4/vlmcsd

View File

@@ -3,14 +3,14 @@
# Reference URL: # Reference URL:
# https://github.com/Wind4/vlmcsd # https://github.com/Wind4/vlmcsd
FROM --platform=$TARGETPLATFORM alpine:latest AS builder FROM alpine:latest AS builder
WORKDIR /root WORKDIR /root
RUN apk add --no-cache git make build-base && \ RUN apk add --no-cache git make build-base && \
git clone --branch master --single-branch https://github.com/Wind4/vlmcsd.git && \ git clone --branch master --single-branch https://github.com/Wind4/vlmcsd.git && \
cd vlmcsd/ && \ cd vlmcsd/ && \
make make
FROM --platform=$TARGETPLATFORM alpine:latest FROM alpine:latest
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
COPY --from=builder /root/vlmcsd/bin/vlmcsd /usr/bin/vlmcsd COPY --from=builder /root/vlmcsd/bin/vlmcsd /usr/bin/vlmcsd

View File

@@ -1,7 +1,7 @@
# Dockerfile for build RPM packages. # Dockerfile for build RPM packages.
# Copyright (C) 2023 Teddysun <i@teddysun.com> # Copyright (C) 2023 Teddysun <i@teddysun.com>
FROM --platform=${TARGETPLATFORM} fedora:37 FROM fedora:37
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
RUN dnf install -y yum-utils && \ RUN dnf install -y yum-utils && \

View File

@@ -1,7 +1,7 @@
# Dockerfile for build RPM packages. # Dockerfile for build RPM packages.
# Copyright (C) 2023 Teddysun <i@teddysun.com> # Copyright (C) 2023 Teddysun <i@teddysun.com>
FROM --platform=${TARGETPLATFORM} fedora:38 FROM fedora:38
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
RUN dnf install -y yum-utils && \ RUN dnf install -y yum-utils && \

View File

@@ -1,7 +1,7 @@
# Dockerfile for build RPM packages. # Dockerfile for build RPM packages.
# Copyright (C) 2023 Teddysun <i@teddysun.com> # Copyright (C) 2023 Teddysun <i@teddysun.com>
FROM --platform=${TARGETPLATFORM} fedora:39 FROM fedora:39
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
RUN dnf install -y yum-utils && \ RUN dnf install -y yum-utils && \

View File

@@ -0,0 +1,37 @@
# Dockerfile for build RPM packages.
# Copyright (C) 2024 Teddysun <i@teddysun.com>
FROM fedora:40
LABEL maintainer="Teddysun <i@teddysun.com>"
RUN dnf install -y yum-utils && \
dnf install -y tar wget git tree gcc gcc-c++ vim automake \
sudo net-tools make cmake zstd libzstd chkconfig libtool \
bash coreutils diffutils patch ca-certificates pcre-devel \
rpm-build rpm-devel rpmlint rpmdevtools ncurses which procps \
asciidoc audit-libs-devel binutils-devel flex jq gettext mbedtls-devel \
libcap-devel newt-devel pciutils-devel perl-generators c-ares-devel libev-devel \
python3 python3-devel python3-docutils rsync xmlto bc bison libsodium-devel \
java-devel ncurses-devel numactl-devel openssl-devel perl-devel \
bpftool dwarves gcc-plugin-devel glibc-static hmaccalc kernel-rpm-macros \
libbabeltrace-devel libbpf-devel libcap-ng-devel libnl3-devel libtraceevent-devel \
elfutils-devel xz-devel perl-ExtUtils-Embed && \
dnf clean all && rm -rf /var/cache/dnf /var/lib/rpm/__db*
RUN useradd builder -u 1000 -m -G users,wheel && \
echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "# macros" > /home/builder/.rpmmacros && \
echo "%_topdir /home/builder/rpmbuild" >> /home/builder/.rpmmacros && \
echo "%_sourcedir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_builddir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_specdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_rpmdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_srcrpmdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "set enable-bracketed-paste off" >> /etc/inputrc && \
mkdir -p /home/builder/rpmbuild && \
chown -R builder /home/builder
USER builder
VOLUME /home/builder
WORKDIR /home/builder/rpmbuild
CMD ["/bin/bash"]

View File

@@ -0,0 +1,37 @@
# Dockerfile for build RPM packages.
# Copyright (C) 2024 Teddysun <i@teddysun.com>
FROM fedora:41
LABEL maintainer="Teddysun <i@teddysun.com>"
RUN dnf install -y yum-utils && \
dnf install -y tar wget git tree gcc gcc-c++ vim automake \
sudo net-tools make cmake zstd libzstd chkconfig libtool \
bash coreutils diffutils patch ca-certificates pcre-devel \
rpm-build rpm-devel rpmlint rpmdevtools ncurses which procps \
asciidoc audit-libs-devel binutils-devel flex jq gettext mbedtls-devel \
libcap-devel newt-devel pciutils-devel perl-generators c-ares-devel libev-devel \
python3 python3-devel python3-docutils rsync xmlto bc bison libsodium-devel \
java-devel ncurses-devel numactl-devel openssl-devel perl-devel \
bpftool dwarves gcc-plugin-devel glibc-static hmaccalc kernel-rpm-macros \
libbabeltrace-devel libbpf-devel libcap-ng-devel libnl3-devel libtraceevent-devel \
elfutils-devel xz-devel perl-ExtUtils-Embed && \
dnf clean all && rm -rf /var/cache/dnf /var/lib/rpm/__db*
RUN useradd builder -u 1000 -m -G users,wheel && \
echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "# macros" > /home/builder/.rpmmacros && \
echo "%_topdir /home/builder/rpmbuild" >> /home/builder/.rpmmacros && \
echo "%_sourcedir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_builddir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_specdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_rpmdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_srcrpmdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "set enable-bracketed-paste off" >> /etc/inputrc && \
mkdir -p /home/builder/rpmbuild && \
chown -R builder /home/builder
USER builder
VOLUME /home/builder
WORKDIR /home/builder/rpmbuild
CMD ["/bin/bash"]

View File

@@ -0,0 +1,37 @@
# Dockerfile for build RPM packages.
# Copyright (C) 2025 Teddysun <i@teddysun.com>
FROM fedora:42
LABEL maintainer="Teddysun <i@teddysun.com>"
RUN dnf install -y yum-utils && \
dnf install -y tar wget git tree gcc gcc-c++ vim automake \
sudo net-tools make cmake zstd libzstd chkconfig libtool \
bash coreutils diffutils patch ca-certificates pcre-devel \
rpm-build rpm-devel rpmlint rpmdevtools ncurses which procps \
asciidoc audit-libs-devel binutils-devel flex jq gettext mbedtls-devel \
libcap-devel newt-devel pciutils-devel perl-generators c-ares-devel libev-devel \
python3 python3-devel python3-docutils rsync xmlto bc bison libsodium-devel \
java-devel ncurses-devel numactl-devel openssl-devel perl-devel \
bpftool dwarves gcc-plugin-devel glibc-static hmaccalc kernel-rpm-macros \
libbabeltrace-devel libbpf-devel libcap-ng-devel libnl3-devel libtraceevent-devel \
elfutils-devel xz-devel perl-ExtUtils-Embed && \
dnf clean all && rm -rf /var/cache/dnf /var/lib/rpm/__db*
RUN useradd builder -u 1000 -m -G users,wheel && \
echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "# macros" > /home/builder/.rpmmacros && \
echo "%_topdir /home/builder/rpmbuild" >> /home/builder/.rpmmacros && \
echo "%_sourcedir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_builddir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_specdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_rpmdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_srcrpmdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "set enable-bracketed-paste off" >> /etc/inputrc && \
mkdir -p /home/builder/rpmbuild && \
chown -R builder /home/builder
USER builder
VOLUME /home/builder
WORKDIR /home/builder/rpmbuild
CMD ["/bin/bash"]

View File

@@ -0,0 +1,39 @@
# Dockerfile for build RPM packages.
# Copyright (C) 2025 Teddysun <i@teddysun.com>
FROM almalinux:10
LABEL maintainer="Teddysun <i@teddysun.com>"
RUN dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm && \
dnf config-manager --enable epel && \
dnf config-manager --enable crb && \
rpm -e --nodeps coreutils-single && \
dnf install -y tar wget tree git gcc gcc-c++ coreutils bash diffutils patch ca-certificates \
sudo net-tools make cmake zstd libzstd chkconfig pcre2-devel \
rpm-build rpm-devel rpmlint rpmdevtools ncurses which procps \
asciidoc audit-libs-devel binutils-devel flex jq gettext \
libcap-devel newt-devel pciutils-devel perl-generators \
python3 python3-devel python3-docutils rsync xmlto bc bison \
java-devel ncurses-devel numactl-devel openssl-devel perl-devel \
bpftool dwarves gcc-plugin-devel glibc-static hmaccalc kernel-rpm-macros \
libbabeltrace-devel libbpf-devel libcap-ng-devel libnl3-devel libtraceevent-devel \
elfutils-devel xz-devel perl-ExtUtils-Embed && \
dnf clean all && rm -rf /var/cache/dnf /var/lib/rpm/__db*
RUN useradd builder -u 1000 -m -G users,wheel && \
echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "# macros" > /home/builder/.rpmmacros && \
echo "%_topdir /home/builder/rpmbuild" >> /home/builder/.rpmmacros && \
echo "%_sourcedir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_builddir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_specdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_rpmdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "%_srcrpmdir %{_topdir}" >> /home/builder/.rpmmacros && \
echo "set enable-bracketed-paste off" >> /etc/inputrc && \
mkdir -p /home/builder/rpmbuild && \
chown -R builder /home/builder
USER builder
VOLUME /home/builder
WORKDIR /home/builder/rpmbuild
CMD ["/bin/bash"]

View File

@@ -1,7 +1,7 @@
# Dockerfile for build RPM packages. # Dockerfile for build RPM packages.
# Copyright (C) 2021 - 2022 Teddysun <i@teddysun.com> # Copyright (C) 2021 - 2022 Teddysun <i@teddysun.com>
FROM --platform=${TARGETPLATFORM} centos:7 FROM centos:7
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
RUN yum install -y yum-utils epel-release centos-release-scl-rh && \ RUN yum install -y yum-utils epel-release centos-release-scl-rh && \

View File

@@ -1,23 +1,24 @@
# Dockerfile for build RPM packages. # Dockerfile for build RPM packages.
# Copyright (C) 2021 - 2022 Teddysun <i@teddysun.com> # Copyright (C) 2021 - 2025 Teddysun <i@teddysun.com>
FROM --platform=${TARGETPLATFORM} rockylinux:8 FROM rockylinux:8
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
RUN yum install -y yum-utils epel-release && \ RUN dnf install -y yum-utils epel-release && \
yum-config-manager --enable epel && \ dnf config-manager --enable epel && \
yum-config-manager --enable powertools && \ dnf config-manager --enable powertools && \
dnf install -y https://dl.lamp.sh/linux/rhel/el8/x86_64/teddysun-release-1.0-1.el8.noarch.rpm && \
rpm -e --nodeps coreutils-single && \ rpm -e --nodeps coreutils-single && \
yum install -y tar wget git tree gcc gcc-c++ \ dnf install -y tar wget wget2 git tree gcc gcc-c++ \
sudo net-tools make cmake zstd libzstd chkconfig \ sudo net-tools make cmake zstd libzstd chkconfig pcre-devel pcre2-devel \
bash coreutils diffutils patch ca-certificates \ bash coreutils diffutils patch ca-certificates \
rpm-build rpm-devel rpmlint rpmdevtools which procps \ rpm-build rpm-devel rpmlint rpmdevtools which procps \
asciidoc audit-libs-devel binutils-devel flex \ asciidoc audit-libs-devel binutils-devel flex \
libcap-devel newt-devel pciutils-devel perl-generators \ libcap-devel newt-devel pciutils-devel perl-generators \
python3 python3-devel python3-docutils rsync xmlto bc bison libnl3-devel \ python3 python3-devel python3-docutils rsync xmlto bc bison libnl3-devel \
java-devel ncurses-devel numactl-devel openssl-devel perl-devel dwarves \ java-devel ncurses-devel numactl-devel openssl-devel openssl3-devel perl-devel dwarves \
elfutils-devel xz-devel perl-ExtUtils-Embed gettext kmod libkcapi-hmaccalc && \ elfutils-devel xz-devel perl-ExtUtils-Embed gettext kmod libkcapi-hmaccalc && \
yum clean all && rm -rf /var/cache/dnf /var/lib/rpm/__db* dnf clean all && rm -rf /var/cache/dnf /var/lib/rpm/__db*
RUN useradd builder -u 1000 -m -G users,wheel && \ RUN useradd builder -u 1000 -m -G users,wheel && \
echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \ echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \

View File

@@ -1,15 +1,16 @@
# Dockerfile for build RPM packages. # Dockerfile for build RPM packages.
# Copyright (C) 2022 Teddysun <i@teddysun.com> # Copyright (C) 2022 - 2025 Teddysun <i@teddysun.com>
FROM --platform=${TARGETPLATFORM} rockylinux:9 FROM rockylinux:9
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
RUN yum install -y yum-utils epel-release && \ RUN dnf install -y yum-utils epel-release && \
yum-config-manager --enable epel && \ dnf config-manager --enable epel && \
yum-config-manager --enable crb && \ dnf config-manager --enable crb && \
dnf install -y https://dl.lamp.sh/linux/rhel/el9/x86_64/teddysun-release-1.0-1.el9.noarch.rpm && \
rpm -e --nodeps coreutils-single && \ rpm -e --nodeps coreutils-single && \
yum install -y tar wget git tree gcc gcc-c++ \ dnf install -y tar wget wget2 git tree gcc gcc-c++ \
sudo net-tools make cmake zstd libzstd chkconfig \ sudo net-tools make cmake zstd libzstd chkconfig pcre-devel pcre2-devel \
bash coreutils diffutils patch ca-certificates \ bash coreutils diffutils patch ca-certificates \
rpm-build rpm-devel rpmlint rpmdevtools ncurses which procps \ rpm-build rpm-devel rpmlint rpmdevtools ncurses which procps \
asciidoc audit-libs-devel binutils-devel flex jq gettext \ asciidoc audit-libs-devel binutils-devel flex jq gettext \
@@ -19,7 +20,7 @@ RUN yum install -y yum-utils epel-release && \
bpftool dwarves gcc-plugin-devel glibc-static hmaccalc kernel-rpm-macros \ bpftool dwarves gcc-plugin-devel glibc-static hmaccalc kernel-rpm-macros \
libbabeltrace-devel libbpf-devel libcap-ng-devel libnl3-devel libtraceevent-devel \ libbabeltrace-devel libbpf-devel libcap-ng-devel libnl3-devel libtraceevent-devel \
elfutils-devel xz-devel perl-ExtUtils-Embed && \ elfutils-devel xz-devel perl-ExtUtils-Embed && \
yum clean all && rm -rf /var/cache/dnf /var/lib/rpm/__db* dnf clean all && rm -rf /var/cache/dnf /var/lib/rpm/__db*
RUN useradd builder -u 1000 -m -G users,wheel && \ RUN useradd builder -u 1000 -m -G users,wheel && \
echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \ echo "builder ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \

View File

@@ -1,4 +1,4 @@
## CentOS RPM package building environment by Teddysun ## RHEL RPM package building environment by Teddysun
This docker image can be used to build RPM packages. This docker image can be used to build RPM packages.
@@ -6,13 +6,14 @@ For more information on docker and containerization technologies, refer to [offi
## Supported tags and respective `Dockerfile` links ## Supported tags and respective `Dockerfile` links
- `latest`, `9` [*(Dockerfile)*][7] - `latest`, `10` [*(Dockerfile)*][8]
- `9` [*(Dockerfile)*][7]
- `8` [*(Dockerfile)*][2] - `8` [*(Dockerfile)*][2]
- `7` [*(Dockerfile)*][3] - `7` [*(Dockerfile)*][3]
### Reference ### Reference
- Supported architectures ([*more info*][4]): `amd64` - Supported architectures ([*more info*][4]): `amd64`, `arm64`
## Integration ## Integration
@@ -46,6 +47,12 @@ For CentOS 9 Stream / Rockylinux 9 / Almalinux 9
$ docker pull teddysun/rpmbuild:9 $ docker pull teddysun/rpmbuild:9
``` ```
For CentOS 10 Stream / Rockylinux 10 / Almalinux 10
```bash
$ docker pull teddysun/rpmbuild:10
```
It can be found at [Docker Hub][6]. It can be found at [Docker Hub][6].
## Start a container ## Start a container
@@ -71,6 +78,12 @@ $ mkdir -m 777 -p /opt/builder9
$ docker run -it --rm -h buildbot --name rpmbuild9 -v /opt/builder9:/home/builder/rpmbuild teddysun/rpmbuild:9 $ docker run -it --rm -h buildbot --name rpmbuild9 -v /opt/builder9:/home/builder/rpmbuild teddysun/rpmbuild:9
``` ```
There is an example to start a container for CentOS 10 Stream / Rockylinux 10 / Almalinux 10 like below:
```bash
$ mkdir -m 777 -p /opt/builder10
$ docker run -it --rm -h buildbot --name rpmbuild10 -v /opt/builder10:/home/builder/rpmbuild teddysun/rpmbuild:10
```
[1]: https://docs.docker.com/ [1]: https://docs.docker.com/
[2]: https://github.com/teddysun/across/blob/master/docker/rpmbuild/Dockerfile.rpmbuild8 [2]: https://github.com/teddysun/across/blob/master/docker/rpmbuild/Dockerfile.rpmbuild8
@@ -79,3 +92,4 @@ $ docker run -it --rm -h buildbot --name rpmbuild9 -v /opt/builder9:/home/builde
[5]: https://docs.docker.com/install/ [5]: https://docs.docker.com/install/
[6]: https://hub.docker.com/r/teddysun/rpmbuild/ [6]: https://hub.docker.com/r/teddysun/rpmbuild/
[7]: https://github.com/teddysun/across/blob/master/docker/rpmbuild/Dockerfile.rpmbuild9 [7]: https://github.com/teddysun/across/blob/master/docker/rpmbuild/Dockerfile.rpmbuild9
[8]: https://github.com/teddysun/across/blob/master/docker/rpmbuild/Dockerfile.rpmbuild10

View File

@@ -1,5 +1,5 @@
# Dockerfile for trojan-go based alpine # Dockerfile for trojan-go based alpine
# Copyright (C) 2019 - 2021 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/p4gefau1t/trojan-go # https://github.com/p4gefau1t/trojan-go
# https://github.com/v2fly/v2ray-core # https://github.com/v2fly/v2ray-core

View File

@@ -1,30 +1,31 @@
# Dockerfile for trojan-go based alpine # Dockerfile for trojan-go based alpine
# Copyright (C) 2019 - 2021 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/p4gefau1t/trojan-go # https://github.com/p4gefau1t/trojan-go
# https://github.com/v2fly/v2ray-core # https://github.com/v2fly/v2ray-core
# https://github.com/v2fly/geoip # https://github.com/v2fly/geoip
# https://github.com/v2fly/domain-list-community # https://github.com/v2fly/domain-list-community
# https://github.com/Potterli20/trojan-go-fork
FROM --platform=${TARGETPLATFORM} alpine:latest
LABEL maintainer="Teddysun <i@teddysun.com>" FROM alpine:latest
LABEL maintainer="Teddysun <i@teddysun.com>"
ARG TARGETPLATFORM
COPY trojan-go.sh /root/trojan-go.sh ARG TARGETPLATFORM
COPY config.json /etc/trojan-go/config.json COPY trojan-go.sh /root/trojan-go.sh
RUN set -ex \ COPY config.json /etc/trojan-go/config.json
&& apk add --no-cache tzdata ca-certificates \ RUN set -ex \
&& chmod +x /root/trojan-go.sh \ && apk add --no-cache tzdata ca-certificates \
&& /root/trojan-go.sh "${TARGETPLATFORM}" \ && chmod +x /root/trojan-go.sh \
&& rm -fv /root/trojan-go.sh \ && /root/trojan-go.sh "${TARGETPLATFORM}" \
&& mkdir -p /usr/share/trojan-go \ && rm -fv /root/trojan-go.sh \
&& wget -O /usr/share/trojan-go/geosite.dat https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat \ && mkdir -p /usr/share/trojan-go \
&& wget -O /usr/share/trojan-go/geoip.dat https://github.com/v2fly/geoip/releases/latest/download/geoip.dat \ && wget -O /usr/share/trojan-go/geosite.dat https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat \
&& wget -O /usr/share/trojan-go/geoip-only-cn-private.dat https://github.com/v2fly/geoip/releases/latest/download/geoip-only-cn-private.dat \ && wget -O /usr/share/trojan-go/geoip.dat https://github.com/v2fly/geoip/releases/latest/download/geoip.dat \
&& ln -fs /usr/share/trojan-go/geoip.dat /usr/bin/ \ && wget -O /usr/share/trojan-go/geoip-only-cn-private.dat https://github.com/v2fly/geoip/releases/latest/download/geoip-only-cn-private.dat \
&& ln -fs /usr/share/trojan-go/geoip-only-cn-private.dat /usr/bin/ \ && ln -fs /usr/share/trojan-go/geoip.dat /usr/bin/ \
&& ln -fs /usr/share/trojan-go/geosite.dat /usr/bin/ && ln -fs /usr/share/trojan-go/geoip-only-cn-private.dat /usr/bin/ \
&& ln -fs /usr/share/trojan-go/geosite.dat /usr/bin/
VOLUME /etc/trojan-go
ENV TZ=Asia/Shanghai VOLUME /etc/trojan-go
CMD [ "/usr/bin/trojan-go", "-config", "/etc/trojan-go/config.json" ] ENV TZ=Asia/Shanghai
CMD [ "/usr/bin/trojan-go", "-config", "/etc/trojan-go/config.json" ]

View File

@@ -1,65 +1,72 @@
## Trojan-Go Docker Image by Teddysun ## Trojan-Go Docker Image by Teddysun
[Trojan-Go][1] is An unidentifiable mechanism that helps you bypass [GFW](https://en.wikipedia.org/wiki/Great_Firewall). [Trojan-Go][1] is An unidentifiable mechanism that helps you bypass [GFW](https://en.wikipedia.org/wiki/Great_Firewall).
Trojan-Go features multiple protocols over `TLS` to avoid both active/passive detections and ISP `QoS` limitations. Trojan-Go features multiple protocols over `TLS` to avoid both active/passive detections and ISP `QoS` limitations.
Docker images are built for quick deployment in various computing cloud providers. Docker images are built for quick deployment in various computing cloud providers.
For more information on docker and containerization technologies, refer to [official document][2]. For more information on docker and containerization technologies, refer to [official document][2].
## Prepare the host ## Prepare the host
If you need to install docker by yourself, follow the [official installation guide][3]. If you need to install docker by yourself, follow the [official installation guide][3].
## Pull the image ## Pull the image
```bash ```bash
$ docker pull teddysun/trojan-go $ docker pull teddysun/trojan-go
``` ```
This pulls the latest release of trojan-go. This pulls the latest release of trojan-go.
It can be found at [Docker Hub][4]. It can be found at [Docker Hub][4].
## Start a container ## Start a container
You **must create a configuration file** `/etc/trojan-go/config.json` in host at first: You **must create a configuration file** `/etc/trojan-go/config.json` in host at first:
``` ```
$ mkdir -p /etc/trojan-go $ mkdir -p /etc/trojan-go
``` ```
A sample in JSON like below: A sample in JSON like below:
``` ```
{ {
"run_type": "server", "run_type": "server",
"local_addr": "0.0.0.0", "local_addr": "0.0.0.0",
"local_port": 443, "local_port": 443,
"remote_addr": "127.0.0.1", "remote_addr": "127.0.0.1",
"remote_port": 80, "remote_port": 80,
"password": [ "password": [
"your_awesome_password" "your_password"
], ],
"ssl": { "ssl": {
"cert": "server.crt", "cert": "your_cert.crt",
"key": "server.key", "key": "your_key.key",
"sni": "your-domain-name.com", "sni": "your-domain-name.com"
"fallback_port": 1234 },
} "router": {
} "enabled": true,
``` "block": [
"geoip:private"
An online documentation can be found [here](https://p4gefau1t.github.io/trojan-go/) ],
"geoip": "/usr/share/trojan-go/geoip.dat",
There is an example to start a container that use host network, run as a trojan-go server like below: "geosite": "/usr/share/trojan-go/geosite.dat"
}
```bash }
$ docker run -d --network host --name trojan-go --restart=always -v /etc/trojan-go:/etc/trojan-go teddysun/trojan-go ```
```
An online documentation can be found [here](https://p4gefau1t.github.io/trojan-go/)
[1]: https://github.com/p4gefau1t/trojan-go
[2]: https://docs.docker.com/ There is an example to start a container that use host network, run as a trojan-go server like below:
[3]: https://docs.docker.com/install/
```bash
$ docker run -d --network host --name trojan-go --restart=always -v /etc/trojan-go:/etc/trojan-go teddysun/trojan-go
```
[1]: https://github.com/p4gefau1t/trojan-go
[2]: https://docs.docker.com/
[3]: https://docs.docker.com/install/
[4]: https://hub.docker.com/r/teddysun/trojan-go/ [4]: https://hub.docker.com/r/teddysun/trojan-go/

View File

@@ -0,0 +1,55 @@
#!/bin/bash
#
# This is a Shell script for build multi-architectures trojan-go binary file
#
# Supported architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, s390x
#
# Copyright (C) 2020 - 2023 Teddysun <i@teddysun.com>
#
# Reference URL:
# https://github.com/p4gefau1t/trojan-go
# https://github.com/Potterli20/trojan-go-fork
cur_dir="$(pwd)"
COMMANDS=( git go )
for CMD in "${COMMANDS[@]}"; do
if [ ! "$(command -v "${CMD}")" ]; then
echo "${CMD} is not installed, please install it and try again" && exit 1
fi
done
cd ${cur_dir}
#version=$(wget --no-check-certificate -qO- https://api.github.com/repos/p4gefau1t/trojan-go/tags | grep 'name' | cut -d\" -f4 | head -1)
#echo "git clone -b ${version} https://github.com/p4gefau1t/trojan-go.git"
echo "git clone https://github.com/Potterli20/trojan-go-fork.git"
#git clone -b ${version} https://github.com/p4gefau1t/trojan-go.git
git clone https://github.com/Potterli20/trojan-go-fork.git
cd trojan-go-fork || exit 2
PACKAGE_NAME="github.com/Potterli20/trojan-go-fork"
VERSION="$(git describe --tags)"
# VERSION="v2023.11.15"
COMMIT="$(git rev-parse HEAD)"
VAR_SETTING="-X ${PACKAGE_NAME}/constant.Version=${VERSION} -X ${PACKAGE_NAME}/constant.Commit=${COMMIT}"
LDFLAGS="-s -w ${VAR_SETTING} -buildid="
ARCHS=( 386 amd64 arm arm64 ppc64le s390x )
ARMS=( 6 7 )
for ARCH in ${ARCHS[@]}; do
if [ "${ARCH}" = "arm" ]; then
for V in ${ARMS[@]}; do
echo "Building trojan-go_linux_${ARCH}${V}"
env CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} GOARM=${V} go build -v -tags "full" -ldflags "${LDFLAGS}" -o ${cur_dir}/trojan-go_linux_${ARCH}${V}
done
else
echo "Building trojan-go_linux_${ARCH}"
env CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} go build -v -tags "full" -ldflags "${LDFLAGS}" -o ${cur_dir}/trojan-go_linux_${ARCH}
fi
done
chmod +x ${cur_dir}/trojan-go_linux_*
# clean up
cd ${cur_dir} && rm -fr trojan-go-fork

View File

@@ -1,21 +1,23 @@
{ {
"run_type": "server", "run_type": "server",
"local_addr": "0.0.0.0", "local_addr": "0.0.0.0",
"local_port": 443, "local_port": 443,
"remote_addr": "127.0.0.1", "remote_addr": "127.0.0.1",
"remote_port": 80, "remote_port": 80,
"password": [ "password": [
"your_password" "your_password"
], ],
"ssl": { "ssl": {
"cert": "your_cert.crt", "cert": "your_cert.crt",
"key": "your_key.key", "key": "your_key.key",
"sni": "your-domain-name.com" "sni": "your-domain-name.com"
}, },
"router":{ "router": {
"enabled": true, "enabled": true,
"block": [ "block": [
"geoip:private" "geoip:private"
] ],
} "geoip": "/usr/share/trojan-go/geoip.dat",
"geosite": "/usr/share/trojan-go/geosite.dat"
}
} }

View File

@@ -1,5 +1,5 @@
# Dockerfile for trojan based alpine # Dockerfile for trojan based alpine
# Copyright (C) 2020 Teddysun <i@teddysun.com> # Copyright (C) 2020 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/trojan-gfw/trojan # https://github.com/trojan-gfw/trojan
# https://trojan-gfw.github.io/trojan/ # https://trojan-gfw.github.io/trojan/

View File

@@ -1,10 +1,10 @@
# Dockerfile for trojan based alpine # Dockerfile for trojan based alpine
# Copyright (C) 2020 Teddysun <i@teddysun.com> # Copyright (C) 2020 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/trojan-gfw/trojan # https://github.com/trojan-gfw/trojan
# https://trojan-gfw.github.io/trojan/ # https://trojan-gfw.github.io/trojan/
FROM --platform=${TARGETPLATFORM} alpine:latest AS builder FROM alpine:latest AS builder
WORKDIR /root WORKDIR /root
RUN set -ex \ RUN set -ex \
&& VERSION="$(wget --no-check-certificate -qO- https://api.github.com/repos/trojan-gfw/trojan/tags | grep 'name' | cut -d\" -f4 | head -1)" \ && VERSION="$(wget --no-check-certificate -qO- https://api.github.com/repos/trojan-gfw/trojan/tags | grep 'name' | cut -d\" -f4 | head -1)" \
@@ -15,7 +15,7 @@ RUN set -ex \
&& make \ && make \
&& strip -s trojan && strip -s trojan
FROM --platform=${TARGETPLATFORM} alpine:latest FROM alpine:latest
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
RUN set -ex \ RUN set -ex \

View File

@@ -1,5 +1,5 @@
# Dockerfile for v2ray based alpine # Dockerfile for v2ray based alpine
# Copyright (C) 2019 - 2021 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/v2fly/v2ray-core # https://github.com/v2fly/v2ray-core
# https://github.com/v2fly/geoip # https://github.com/v2fly/geoip

View File

@@ -1,11 +1,11 @@
# Dockerfile for v2ray based alpine # Dockerfile for v2ray based alpine
# Copyright (C) 2019 - 2021 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2024 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/v2fly/v2ray-core # https://github.com/v2fly/v2ray-core
# https://github.com/v2fly/geoip # https://github.com/v2fly/geoip
# https://github.com/v2fly/domain-list-community # https://github.com/v2fly/domain-list-community
FROM --platform=${TARGETPLATFORM} alpine:latest FROM alpine:latest
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
ARG TARGETPLATFORM ARG TARGETPLATFORM

View File

@@ -1,5 +1,5 @@
# Dockerfile for xray based alpine # Dockerfile for xray based alpine
# Copyright (C) 2019 - 2021 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2025 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/XTLS/Xray-core # https://github.com/XTLS/Xray-core
# https://github.com/v2fly/v2ray-core # https://github.com/v2fly/v2ray-core
@@ -13,13 +13,13 @@ WORKDIR /root
COPY xray.sh /root/xray.sh COPY xray.sh /root/xray.sh
COPY config.json /etc/xray/config.json COPY config.json /etc/xray/config.json
RUN set -ex \ RUN set -ex \
&& apk add --no-cache tzdata ca-certificates \ && apk add --no-cache bash tzdata ca-certificates openssl \
&& mkdir -p /var/log/xray /usr/share/xray \ && mkdir -p /var/log/xray /usr/share/xray \
&& chmod +x /root/xray.sh \ && chmod +x /root/xray.sh \
&& /root/xray.sh \ && /root/xray.sh \
&& rm -fv /root/xray.sh \ && rm -fv /root/xray.sh \
&& wget -O /usr/share/xray/geosite.dat https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat \ && wget -O /usr/share/xray/geosite.dat https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/geosite.dat \
&& wget -O /usr/share/xray/geoip.dat https://github.com/v2fly/geoip/releases/latest/download/geoip.dat && wget -O /usr/share/xray/geoip.dat https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/geoip.dat
VOLUME /etc/xray VOLUME /etc/xray
ENV TZ=Asia/Shanghai ENV TZ=Asia/Shanghai

View File

@@ -1,12 +1,12 @@
# Dockerfile for xray based alpine # Dockerfile for xray based alpine
# Copyright (C) 2019 - 2021 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2025 Teddysun <i@teddysun.com>
# Reference URL: # Reference URL:
# https://github.com/XTLS/Xray-core # https://github.com/XTLS/Xray-core
# https://github.com/v2fly/v2ray-core # https://github.com/v2fly/v2ray-core
# https://github.com/v2fly/geoip # https://github.com/v2fly/geoip
# https://github.com/v2fly/domain-list-community # https://github.com/v2fly/domain-list-community
FROM --platform=${TARGETPLATFORM} alpine:latest FROM alpine:latest
LABEL maintainer="Teddysun <i@teddysun.com>" LABEL maintainer="Teddysun <i@teddysun.com>"
ARG TARGETPLATFORM ARG TARGETPLATFORM
@@ -14,14 +14,16 @@ WORKDIR /root
COPY xray.sh /root/xray.sh COPY xray.sh /root/xray.sh
COPY config.json /etc/xray/config.json COPY config.json /etc/xray/config.json
RUN set -ex \ RUN set -ex \
&& apk add --no-cache tzdata ca-certificates \ && apk add --no-cache bash tzdata ca-certificates openssl \
&& mkdir -p /var/log/xray /usr/share/xray \ && mkdir -p /var/log/xray /usr/share/xray \
&& chmod +x /root/xray.sh \ && chmod +x /root/xray.sh \
&& /root/xray.sh "${TARGETPLATFORM}" \ && /root/xray.sh "${TARGETPLATFORM}" \
&& rm -fv /root/xray.sh \ && rm -fv /root/xray.sh \
&& wget -O /usr/share/xray/geosite.dat https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat \ && wget -O /usr/share/xray/geosite.dat https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/geosite.dat \
&& wget -O /usr/share/xray/geoip.dat https://github.com/v2fly/geoip/releases/latest/download/geoip.dat && wget -O /usr/share/xray/geoip.dat https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/geoip.dat
VOLUME /etc/xray VOLUME /etc/xray
VOLUME /var/log/xray
ENV TZ=Asia/Shanghai ENV TZ=Asia/Shanghai
CMD [ "/usr/bin/xray", "-config", "/etc/xray/config.json" ] CMD [ "/usr/bin/xray", "-config", "/etc/xray/config.json" ]

View File

@@ -40,9 +40,7 @@ A sample in JSON like below:
"settings": { "settings": {
"clients": [ "clients": [
{ {
"id": "1eb6e917-774b-4a84-aff6-b058577c60a5", "id": "1eb6e917-774b-4a84-aff6-b058577c60a5"
"level": 1,
"alterId": 64
} }
] ]
} }
@@ -54,7 +52,7 @@ A sample in JSON like below:
} }
``` ```
Or generate a configuration file online by [https://tools.sprov.xyz/v2ray/](https://tools.sprov.xyz/v2ray/) Or some examples of uses for Xray-core [https://github.com/XTLS/Xray-examples](https://github.com/XTLS/Xray-examples)
There is an example to start a container that listen on port `9000`, run as a Xray server like below: There is an example to start a container that listen on port `9000`, run as a Xray server like below:

View File

@@ -4,7 +4,7 @@
# #
# Supported architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, s390x # Supported architectures: amd64, arm32v6, arm32v7, arm64v8, i386, ppc64le, s390x
# #
# Copyright (C) 2020 Teddysun <i@teddysun.com> # Copyright (C) 2020 - 2024 Teddysun <i@teddysun.com>
# #
# Reference URL: # Reference URL:
# https://github.com/XTLS/Xray-core # https://github.com/XTLS/Xray-core
@@ -22,7 +22,7 @@ cd ${cur_dir}
git clone https://github.com/XTLS/Xray-core.git git clone https://github.com/XTLS/Xray-core.git
cd Xray-core || exit 2 cd Xray-core || exit 2
LDFLAGS="-s -w" LDFLAGS="-s -w -buildid="
ARCHS=( 386 amd64 arm arm64 ppc64le s390x ) ARCHS=( 386 amd64 arm arm64 ppc64le s390x )
ARMS=( 6 7 ) ARMS=( 6 7 )

View File

@@ -0,0 +1,36 @@
#
# spec file for package xray-plugin
#
Name: xray-plugin
Version: 1.8.15
Release: 1%{?dist}
Summary: A SIP003 plugin for shadowsocks
License: MIT
Group: Productivity/Networking/Security
URL: https://github.com/teddysun/xray-plugin
Source0: %{name}-%{version}.tar.gz
BuildRequires: bash
%global debug_package %{nil}
%global _missing_build_ids_terminate_build 0
%description
Yet another SIP003 plugin for shadowsocks, based on xray-core
%prep
%setup -q
%build
export CGO_ENABLED=0
go build -v -trimpath -ldflags "-X main.VERSION=v%{version} -s -w -buildid=" -o xray-plugin
%install
# install binary
install -D -p -m 0755 xray-plugin %{buildroot}%{_bindir}/xray-plugin
%files
%defattr(-,root,root)
%doc README.md
%{_bindir}/xray-plugin
%license LICENSE

190
rpm/xray/xray.spec Normal file
View File

@@ -0,0 +1,190 @@
%global debug_package %{nil}
Name: xray
Version: 24.11.30
Release: 1%{?dist}
Summary: Xray, Penetrates Everything.
License: MPL-2.0
URL: https://github.com/XTLS/Xray-core
Packager: Teddysun <i@teddysun.com>
Source0: https://github.com/XTLS/Xray-core/archive/refs/tags/v%{version}.tar.gz#/Xray-core-%{version}.tar.gz
Source1: https://github.com/teddysun/across/raw/master/rpm/xray/config.json
Source2: https://github.com/v2fly/geoip/releases/latest/download/geoip.dat
Source3: https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat
#BuildRequires: golang >= 1.20
%if 0%{?rhel} && 0%{?rhel} < 8
BuildRequires: systemd
%else
BuildRequires: systemd-rpm-macros
%endif
%{?systemd_requires}
Provides: Productivity/Networking/Web/Proxy
%description
Xray, Penetrates Everything.
Also the best v2ray-core, with XTLS support. Fully compatible configuration.
%prep
%setup -q -n Xray-core-%{version}
%build
# https://pagure.io/go-rpm-macros/c/1cc7f5d9026175bb6cb1b8c889355d0c4fc0e40a
%undefine _auto_set_build_flags
LDFLAGS='-s -w -buildid='
env CGO_ENABLED=0 go build -v -trimpath -ldflags "$LDFLAGS" -o %{name} ./main
%install
%{__install} -d %{buildroot}%{_bindir}
%{__install} -p -m 755 %{name} %{buildroot}%{_bindir}
%{__install} -d %{buildroot}%{_sysconfdir}/%{name}
%{__install} -p -m 644 %{S:1} %{buildroot}%{_sysconfdir}/%{name}/config.json
%{__install} -d %{buildroot}%{_datadir}/%{name}
%{__install} -p -m 0644 %{S:2} %{buildroot}%{_datadir}/%{name}/geoip.dat
%{__install} -p -m 0644 %{S:3} %{buildroot}%{_datadir}/%{name}/geosite.dat
%{__install} -d %{buildroot}%{_unitdir}
cat > %{buildroot}%{_unitdir}/%{name}.service <<EOF
[Unit]
Description=Xray Service
Documentation=https://github.com/xtls
After=network.target nss-lookup.target
[Service]
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/bin/xray run -config /etc/xray/config.json
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000
[Install]
WantedBy=multi-user.target
EOF
cat > %{buildroot}%{_unitdir}/%{name}@.service <<EOF
[Unit]
Description=Xray Service
Documentation=https://github.com/xtls
After=network.target nss-lookup.target
[Service]
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/bin/xray run -config /etc/xray/%i.json
Restart=on-failure
RestartPreventExitStatus=23
LimitNPROC=10000
LimitNOFILE=1000000
[Install]
WantedBy=multi-user.target
EOF
%post
%systemd_post %{name}.service
%preun
%systemd_preun %{name}.service
%postun
%systemd_postun_with_restart %{name}.service
%files
%{_bindir}/%{name}
%{_unitdir}/%{name}.service
%{_unitdir}/%{name}@.service
%dir %{_sysconfdir}/%{name}
%config(noreplace) %{_sysconfdir}/%{name}/config.json
%{_datadir}/%{name}/*.dat
%license LICENSE
%doc README.md
%changelog
* Sat Nov 30 2024 Teddysun <i@teddysun.com> - 24.11.30-1
- Update version to 24.11.30
* Thu Nov 21 2024 Teddysun <i@teddysun.com> - 24.11.21-1
- Update version to 24.11.21
* Mon Nov 11 2024 Teddysun <i@teddysun.com> - 24.11.11-1
- Update version to 24.11.11
* Tue Nov 05 2024 Teddysun <i@teddysun.com> - 24.11.5-1
- Update version to 24.11.5
* Thu Oct 31 2024 Teddysun <i@teddysun.com> - 24.10.31-1
- Update version to 24.10.31
* Wed Oct 16 2024 Teddysun <i@teddysun.com> - 24.10.16-1
- Update version to 24.10.16
* Mon Sep 30 2024 Teddysun <i@teddysun.com> - 24.9.30-1
- Update version to 24.9.30
* Thu Sep 19 2024 Teddysun <i@teddysun.com> - 24.9.19-1
- Update version to 24.9.19
* Mon Sep 16 2024 Teddysun <i@teddysun.com> - 24.9.16-1
- Update version to 24.9.16
* Sat Sep 07 2024 Teddysun <i@teddysun.com> - 24.9.7-1
- Update version to 24.9.7 (New version naming rule, based release date)
* Fri Aug 30 2024 Teddysun <i@teddysun.com> - 1.8.24-1
- Update version to 1.8.24
* Sun Aug 04 2024 Teddysun <i@teddysun.com> - 1.8.23-1
- Update to version 1.8.23
* Wed Jul 17 2024 Teddysun <i@teddysun.com> - 1.8.19-1
- Update to version 1.8.19
* Mon Jul 15 2024 Teddysun <i@teddysun.com> - 1.8.18-1
- Update to version 1.8.18
* Fri Jul 12 2024 Teddysun <i@teddysun.com> - 1.8.17-1
- Update to version 1.8.17
* Fri Jun 21 2024 Teddysun <i@teddysun.com> - 1.8.16-1
- Update to version 1.8.16
* Tue Jun 18 2024 Teddysun <i@teddysun.com> - 1.8.15-1
- Update to version 1.8.15
* Thu May 23 2024 Teddysun <i@teddysun.com> - 1.8.13-1
- Update to version 1.8.13
* Wed May 22 2024 Teddysun <i@teddysun.com> - 1.8.12-1
- Update to version 1.8.12
* Fri Apr 26 2024 Teddysun <i@teddysun.com> - 1.8.11-1
- Update to version 1.8.11
* Sat Mar 30 2024 Teddysun <i@teddysun.com> - 1.8.10-1
- Update to version 1.8.10
* Mon Mar 11 2024 Teddysun <i@teddysun.com> - 1.8.9-1
- Update to version 1.8.9
* Mon Feb 26 2024 Teddysun <i@teddysun.com> - 1.8.8-1
- Update to version 1.8.8
* Mon Jan 08 2024 Teddysun <i@teddysun.com> - 1.8.7-1
- Update to version 1.8.7
* Sat Nov 18 2023 Teddysun <i@teddysun.com> - 1.8.6-1
- Update to version 1.8.6
* Tue Nov 14 2023 Teddysun <i@teddysun.com> - 1.8.5-1
- Update to version 1.8.5
* Wed Oct 18 2023 Teddysun <i@teddysun.com> - 1.8.4-1
- Update to version 1.8.4

View File

@@ -2,7 +2,7 @@
# #
# This is a Shell script for configure and start WireGuard VPN server. # This is a Shell script for configure and start WireGuard VPN server.
# #
# Copyright (C) 2019 - 2020 Teddysun <i@teddysun.com> # Copyright (C) 2019 - 2024 Teddysun <i@teddysun.com>
# #
# Reference URL: # Reference URL:
# https://www.wireguard.com # https://www.wireguard.com
@@ -71,16 +71,16 @@ _exists() {
} }
_ipv4() { _ipv4() {
local ipv4="$( ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \ local ipv4="$( ip addr | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \
egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\.|^169\.254\." | head -n 1 )" grep -E -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\.|^169\.254\." | head -n 1 )"
[ -z "${ipv4}" ] && ipv4="$( wget -qO- -t1 -T2 ipv4.icanhazip.com )" [ -z "${ipv4}" ] && ipv4="$( wget -qO- -t1 -T2 http://ipv4.icanhazip.com )"
[ -z "${ipv4}" ] && ipv4="$( wget -qO- -t1 -T2 ipinfo.io/ip )" [ -z "${ipv4}" ] && ipv4="$( wget -qO- -t1 -T2 http://ipinfo.io/ip )"
printf -- "%s" "${ipv4}" printf -- "%s" "${ipv4}"
} }
_ipv6() { _ipv6() {
local ipv6="" local ipv6=""
ipv6="$(wget -qO- -t1 -T2 ipv6.icanhazip.com)" ipv6="$(wget -qO- -t1 -T2 http://ipv6.icanhazip.com)"
printf -- "%s" "${ipv6}" printf -- "%s" "${ipv6}"
} }
@@ -296,6 +296,9 @@ install_wg_pkgs() {
if [ -n "$(_os_ver)" -a "$(_os_ver)" -eq 8 ]; then if [ -n "$(_os_ver)" -a "$(_os_ver)" -eq 8 ]; then
yum-config-manager --enable PowerTools > /dev/null 2>&1 || yum-config-manager --enable powertools > /dev/null 2>&1 yum-config-manager --enable PowerTools > /dev/null 2>&1 || yum-config-manager --enable powertools > /dev/null 2>&1
fi fi
if [ -n "$(_os_ver)" -a "$(_os_ver)" -eq 9 ]; then
yum-config-manager --enable crb > /dev/null 2>&1
fi
_error_detect "yum -y install libmnl-devel" _error_detect "yum -y install libmnl-devel"
_error_detect "yum -y install elfutils-libelf-devel" _error_detect "yum -y install elfutils-libelf-devel"
[ ! -d "/usr/src/kernels/$(uname -r)" ] && _error_detect "yum -y install kernel-headers" && _error_detect "yum -y install kernel-devel" [ ! -d "/usr/src/kernels/$(uname -r)" ] && _error_detect "yum -y install kernel-headers" && _error_detect "yum -y install kernel-devel"
@@ -474,9 +477,9 @@ EOF
# Create client interface # Create client interface
create_client_if() { create_client_if() {
_info "Create client interface: /etc/wireguard/${SERVER_WG_NIC}_client" _info "Create client interface: /etc/wireguard/${SERVER_WG_NIC}_client.conf"
if [ -n "${SERVER_PUB_IPV6}" ]; then if [ -n "${SERVER_PUB_IPV6}" ]; then
cat > /etc/wireguard/${SERVER_WG_NIC}_client <<EOF cat > /etc/wireguard/${SERVER_WG_NIC}_client.conf <<EOF
[Interface] [Interface]
PrivateKey = ${CLIENT_PRIVATE_KEY} PrivateKey = ${CLIENT_PRIVATE_KEY}
Address = ${CLIENT_WG_IPV4}/24,${CLIENT_WG_IPV6}/64 Address = ${CLIENT_WG_IPV4}/24,${CLIENT_WG_IPV6}/64
@@ -489,7 +492,7 @@ AllowedIPs = 0.0.0.0/0,::/0
Endpoint = ${SERVER_PUB_IPV4}:${SERVER_WG_PORT} Endpoint = ${SERVER_PUB_IPV4}:${SERVER_WG_PORT}
EOF EOF
else else
cat > /etc/wireguard/${SERVER_WG_NIC}_client <<EOF cat > /etc/wireguard/${SERVER_WG_NIC}_client.conf <<EOF
[Interface] [Interface]
PrivateKey = ${CLIENT_PRIVATE_KEY} PrivateKey = ${CLIENT_PRIVATE_KEY}
Address = ${CLIENT_WG_IPV4}/24 Address = ${CLIENT_WG_IPV4}/24
@@ -502,13 +505,13 @@ AllowedIPs = 0.0.0.0/0
Endpoint = ${SERVER_PUB_IPV4}:${SERVER_WG_PORT} Endpoint = ${SERVER_PUB_IPV4}:${SERVER_WG_PORT}
EOF EOF
fi fi
chmod 600 /etc/wireguard/${SERVER_WG_NIC}_client chmod 600 /etc/wireguard/${SERVER_WG_NIC}_client.conf
} }
# Generate a QR Code picture with default client interface # Generate a QR Code picture with default client interface
generate_qr() { generate_qr() {
_info "Generate a QR Code picture with client interface" _info "Generate a QR Code picture with client interface"
_error_detect "qrencode -s8 -o /etc/wireguard/${SERVER_WG_NIC}_client.png < /etc/wireguard/${SERVER_WG_NIC}_client" _error_detect "qrencode -s8 -o /etc/wireguard/${SERVER_WG_NIC}_client.png < /etc/wireguard/${SERVER_WG_NIC}_client.conf"
} }
# Enable IP forwarding # Enable IP forwarding
@@ -581,7 +584,7 @@ install_completed() {
_info "WireGuard VPN Server installation completed" _info "WireGuard VPN Server installation completed"
_info "" _info ""
_info "WireGuard VPN default client file is below:" _info "WireGuard VPN default client file is below:"
_info "$(_green "/etc/wireguard/${SERVER_WG_NIC}_client")" _info "$(_green "/etc/wireguard/${SERVER_WG_NIC}_client.conf")"
_info "" _info ""
_info "WireGuard VPN default client QR Code is below:" _info "WireGuard VPN default client QR Code is below:"
_info "$(_green "/etc/wireguard/${SERVER_WG_NIC}_client.png")" _info "$(_green "/etc/wireguard/${SERVER_WG_NIC}_client.png")"
@@ -596,7 +599,7 @@ add_client() {
_red "WireGuard was not installed, please install it and try again\n" && exit 1 _red "WireGuard was not installed, please install it and try again\n" && exit 1
fi fi
default_server_if="/etc/wireguard/${SERVER_WG_NIC}.conf" default_server_if="/etc/wireguard/${SERVER_WG_NIC}.conf"
default_client_if="/etc/wireguard/${SERVER_WG_NIC}_client" default_client_if="/etc/wireguard/${SERVER_WG_NIC}_client.conf"
[ ! -s "${default_server_if}" ] && echo "The default server interface ($(_red ${default_server_if})) does not exists" && exit 1 [ ! -s "${default_server_if}" ] && echo "The default server interface ($(_red ${default_server_if})) does not exists" && exit 1
[ ! -s "${default_client_if}" ] && echo "The default client interface ($(_red ${default_client_if})) does not exists" && exit 1 [ ! -s "${default_client_if}" ] && echo "The default client interface ($(_red ${default_client_if})) does not exists" && exit 1
while true; do while true; do
@@ -604,7 +607,7 @@ add_client() {
if [ -z "${client}" ]; then if [ -z "${client}" ]; then
_red "Client name can not be empty\n" _red "Client name can not be empty\n"
else else
new_client_if="/etc/wireguard/${client}_client" new_client_if="/etc/wireguard/${client}_client.conf"
if [ "${client}" = "${SERVER_WG_NIC}" ]; then if [ "${client}" = "${SERVER_WG_NIC}" ]; then
echo "The default client ($(_yellow ${client})) already exists. Please re-enter it" echo "The default client ($(_yellow ${client})) already exists. Please re-enter it"
elif [ -s "${new_client_if}" ]; then elif [ -s "${new_client_if}" ]; then
@@ -615,7 +618,7 @@ add_client() {
fi fi
done done
# Get information from default interface file # Get information from default interface file
client_files=($(find /etc/wireguard/ -name "*_client" | sort)) client_files=($(find /etc/wireguard/ -name "*_client*" | sort))
client_ipv4=() client_ipv4=()
client_ipv6=() client_ipv6=()
for ((i=0; i<${#client_files[@]}; i++)); do for ((i=0; i<${#client_files[@]}; i++)); do
@@ -688,11 +691,11 @@ EOF
echo "Add a WireGuard client ($(_green ${client})) completed" echo "Add a WireGuard client ($(_green ${client})) completed"
systemctl restart wg-quick@${SERVER_WG_NIC} systemctl restart wg-quick@${SERVER_WG_NIC}
# Generate a new QR Code picture # Generate a new QR Code picture
qrencode -s8 -o ${new_client_if}.png < ${new_client_if} qrencode -s8 -o /etc/wireguard/${client}_client.png < ${new_client_if}
echo "Generate a QR Code picture with new client ($(_green ${client})) completed" echo "Generate a QR Code picture with new client ($(_green ${client})) completed"
echo echo
echo "WireGuard VPN new client ($(_green ${client})) file is below:" echo "WireGuard VPN new client ($(_green ${client})) file is below:"
_green "/etc/wireguard/${client}_client\n" _green "/etc/wireguard/${client}_client.conf\n"
echo echo
echo "WireGuard VPN new client ($(_green ${client})) QR Code is below:" echo "WireGuard VPN new client ($(_green ${client})) QR Code is below:"
_green "/etc/wireguard/${client}_client.png\n" _green "/etc/wireguard/${client}_client.png\n"
@@ -717,7 +720,7 @@ remove_client() {
fi fi
fi fi
done done
client_if="/etc/wireguard/${client}_client" client_if="/etc/wireguard/${client}_client.conf"
[ ! -s "${client_if}" ] && echo "The client file ($(_red ${client_if})) does not exists" && exit 1 [ ! -s "${client_if}" ] && echo "The client file ($(_red ${client_if})) does not exists" && exit 1
tmp_tag="$(grep -w "Address" ${client_if} | awk '{print $3}' | cut -d\/ -f1 )" tmp_tag="$(grep -w "Address" ${client_if} | awk '{print $3}' | cut -d\/ -f1 )"
[ -n "${tmp_tag}" ] && sed -i '/'"$tmp_tag"'/,+1d;:a;1,3!{P;$!N;D};N;ba' ${default_server_if} [ -n "${tmp_tag}" ] && sed -i '/'"$tmp_tag"'/,+1d;:a;1,3!{P;$!N;D};N;ba' ${default_server_if}
@@ -737,7 +740,7 @@ list_clients() {
local line="+-------------------------------------------------------------------------+\n" local line="+-------------------------------------------------------------------------+\n"
local string=%-35s local string=%-35s
printf "${line}|${string} |${string} |\n${line}" " Client Interface" " Client's IP" printf "${line}|${string} |${string} |\n${line}" " Client Interface" " Client's IP"
client_files=($(find /etc/wireguard/ -name "*_client" | sort)) client_files=($(find /etc/wireguard/ -name "*_client*" | sort))
ips=($(grep -w "AllowedIPs" ${default_server_if} | awk '{print $3}')) ips=($(grep -w "AllowedIPs" ${default_server_if} | awk '{print $3}'))
[ ${#client_files[@]} -ne ${#ips[@]} ] && echo "One or more client interface file is missing in /etc/wireguard" && exit 1 [ ${#client_files[@]} -ne ${#ips[@]} ] && echo "One or more client interface file is missing in /etc/wireguard" && exit 1
for ((i=0; i<${#ips[@]}; i++)); do for ((i=0; i<${#ips[@]}; i++)); do