Update On Mon Nov 25 19:36:45 CET 2024

This commit is contained in:
github-action[bot]
2024-11-25 19:36:45 +01:00
parent d1d2d4712c
commit 109b874dd4
84 changed files with 945 additions and 1168 deletions
+1
View File
@@ -835,3 +835,4 @@ Update On Thu Nov 21 19:38:10 CET 2024
Update On Fri Nov 22 19:38:14 CET 2024
Update On Sat Nov 23 19:33:03 CET 2024
Update On Sun Nov 24 19:33:36 CET 2024
Update On Mon Nov 25 19:36:34 CET 2024
+19 -3
View File
@@ -15,7 +15,8 @@ use chrono::Local;
use log::debug;
use nyanpasu_ipc::api::status::CoreState;
use profile::item_type::ProfileItemType;
use serde_yaml::Mapping;
use serde::Deserialize;
use serde_yaml::{value::TaggedValue, Mapping};
use std::{borrow::Cow, collections::VecDeque, path::PathBuf, result::Result as StdResult};
use storage::{StorageOperationError, WebStorage};
use sysproxy::Sysproxy;
@@ -118,8 +119,23 @@ pub async fn import_profile(url: String, option: Option<RemoteProfileOptionsBuil
pub async fn create_profile(item: Mapping, file_data: Option<String>) -> Result {
let kind = item
.get("type")
.and_then(|kind| serde_yaml::from_value::<ProfileItemType>(kind.clone()).ok())
.ok_or(anyhow!("the type field is null"))?;
.ok_or(anyhow!("the type field is not found"))?;
// FIXME: a workaround for serde_yaml, and it should be fixed by upstream
let kind = serde_yaml::from_value(match kind {
serde_yaml::Value::String(_) => kind.clone(),
serde_yaml::Value::Mapping(kind) => {
let tag = kind
.keys()
.next()
.ok_or(anyhow!("the type field is not found in mapping"))?;
serde_yaml::Value::Tagged(Box::new(TaggedValue {
tag: serde_yaml::value::Tag::new(tag.as_str().unwrap()),
value: kind.get(tag).unwrap().clone(),
}))
}
_ => return Err(anyhow!("the type field is not a string or mapping").into()),
})
.context("failed to parse the profile type")?;
let item = serde_yaml::Value::Mapping(item);
tracing::trace!("create profile: {kind:?} with {item:?}");
let profile: Profile = match kind {
@@ -29,7 +29,7 @@
"country-code-emoji": "2.3.0",
"dayjs": "1.11.13",
"framer-motion": "12.0.0-alpha.2",
"i18next": "24.0.0",
"i18next": "24.0.2",
"jotai": "2.10.3",
"json-schema": "0.4.0",
"material-react-table": "3.0.1",
@@ -52,10 +52,10 @@
"@csstools/normalize.css": "12.1.1",
"@emotion/babel-plugin": "11.13.5",
"@emotion/react": "11.13.5",
"@iconify/json": "2.2.275",
"@iconify/json": "2.2.276",
"@monaco-editor/react": "4.6.0",
"@tanstack/react-router": "1.82.2",
"@tanstack/router-devtools": "1.82.2",
"@tanstack/react-router": "1.82.8",
"@tanstack/router-devtools": "1.82.8",
"@tanstack/router-plugin": "1.81.9",
"@tauri-apps/plugin-clipboard-manager": "2.0.0",
"@tauri-apps/plugin-dialog": "2.0.1",
+1 -1
View File
@@ -43,7 +43,7 @@
"clsx": "2.1.1",
"d3-interpolate-path": "2.3.0",
"sass": "1.81.0",
"tailwind-merge": "2.5.4",
"tailwind-merge": "2.5.5",
"typescript-plugin-css-modules": "5.1.0",
"vite-plugin-dts": "4.3.0"
}
+3 -3
View File
@@ -3,9 +3,9 @@
"latest": {
"mihomo": "v1.18.10",
"mihomo_alpha": "alpha-eb985b0",
"clash_rs": "v0.7.1",
"clash_rs": "v0.7.2",
"clash_premium": "2023-09-05-gdcc8d87",
"clash_rs_alpha": "0.7.1-alpha+sha.a4b59dc"
"clash_rs_alpha": "0.7.2-alpha+sha.19ea847"
},
"arch_template": {
"mihomo": {
@@ -69,5 +69,5 @@
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
}
},
"updated_at": "2024-11-23T22:20:39.660Z"
"updated_at": "2024-11-24T22:20:35.622Z"
}
+34 -34
View File
@@ -218,7 +218,7 @@ importers:
version: link:../ui
'@tanstack/router-zod-adapter':
specifier: 1.81.5
version: 1.81.5(@tanstack/react-router@1.82.2(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8)
version: 1.81.5(@tanstack/react-router@1.82.8(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8)
'@tauri-apps/api':
specifier: 2.1.1
version: 2.1.1
@@ -241,8 +241,8 @@ importers:
specifier: 12.0.0-alpha.2
version: 12.0.0-alpha.2(@emotion/is-prop-valid@1.3.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
i18next:
specifier: 24.0.0
version: 24.0.0(typescript@5.7.2)
specifier: 24.0.2
version: 24.0.2(typescript@5.7.2)
jotai:
specifier: 2.10.3
version: 2.10.3(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)
@@ -275,7 +275,7 @@ importers:
version: 7.4.0(c6eqiv3v4ro6nnqx6e4soqhoku)
react-i18next:
specifier: 15.1.1
version: 15.1.1(i18next@24.0.0(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
version: 15.1.1(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
react-markdown:
specifier: 9.0.1
version: 9.0.1(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)
@@ -305,17 +305,17 @@ importers:
specifier: 11.13.5
version: 11.13.5(react@19.0.0-rc.1)(types-react@19.0.0-rc.1)
'@iconify/json':
specifier: 2.2.275
version: 2.2.275
specifier: 2.2.276
version: 2.2.276
'@monaco-editor/react':
specifier: 4.6.0
version: 4.6.0(monaco-editor@0.52.0)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
'@tanstack/react-router':
specifier: 1.82.2
version: 1.82.2(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
specifier: 1.82.8
version: 1.82.8(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
'@tanstack/router-devtools':
specifier: 1.82.2
version: 1.82.2(@tanstack/react-router@1.82.2(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
specifier: 1.82.8
version: 1.82.8(@tanstack/react-router@1.82.8(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
'@tanstack/router-plugin':
specifier: 1.81.9
version: 1.81.9(vite@5.4.11(@types/node@22.9.3)(less@4.2.0)(sass-embedded@1.78.0)(sass@1.81.0)(stylus@0.62.0)(terser@5.36.0))
@@ -468,7 +468,7 @@ importers:
version: 4.1.2(react@19.0.0-rc.1)
react-i18next:
specifier: 15.1.1
version: 15.1.1(i18next@24.0.0(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
version: 15.1.1(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
react-use:
specifier: 17.5.1
version: 17.5.1(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
@@ -495,8 +495,8 @@ importers:
specifier: 1.81.0
version: 1.81.0
tailwind-merge:
specifier: 2.5.4
version: 2.5.4
specifier: 2.5.5
version: 2.5.5
typescript-plugin-css-modules:
specifier: 5.1.0
version: 5.1.0(typescript@5.7.2)
@@ -1727,8 +1727,8 @@ packages:
'@vue/compiler-sfc':
optional: true
'@iconify/json@2.2.275':
resolution: {integrity: sha512-eiw64zix2sLUoZWjEJAwe0EU/wtZPww3h4NOEdqXgyiLmV400MXbOB7A+osZDuNPIP1Iapxab+r1mxW75dTWEw==}
'@iconify/json@2.2.276':
resolution: {integrity: sha512-YXCcFQSgFTj/3rlK6Vlv9T5suFjWBQu5dt9k/aYbje/U21jNp7P2xf0CPiAn8iItU/9uDj9mi3UsITMShqeCug==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -2669,8 +2669,8 @@ packages:
resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==}
engines: {node: '>=12'}
'@tanstack/react-router@1.82.2':
resolution: {integrity: sha512-vnX0njd3202iHf4w2hmv1GyudI/4mqCxIfHQdKaj/mRtFj/lydTq4de6x6kZ1TiLf1ZN/mKvfViAzGwsN2HIxQ==}
'@tanstack/react-router@1.82.8':
resolution: {integrity: sha512-l4F9V0CeDxvV5TGUsagGK5Zt1+l9xa6P+/Hyj6l79mBgW21Vm4BU3sJ3pgg75379gDee3G2sqkViYGEgv6JRFA==}
engines: {node: '>=12'}
peerDependencies:
'@tanstack/router-generator': 1.81.9
@@ -2699,11 +2699,11 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
'@tanstack/router-devtools@1.82.2':
resolution: {integrity: sha512-9R0cHGNF8oQMehBYzZZ+xyKWoBCgL4OZV7g0Bt3QJv+LusRQ57iYvA2uf0Cc5qfsba46l/ps0Z/UPLQWp55wfA==}
'@tanstack/router-devtools@1.82.8':
resolution: {integrity: sha512-fj0LMOF0MaDqxT17mTjSi09Bool2lYktdPeMoVB3eMr0Bgl4VvIuZ5vC96+4cODB4iExaf71/cBF5ozah8tFPA==}
engines: {node: '>=12'}
peerDependencies:
'@tanstack/react-router': ^1.82.2
'@tanstack/react-router': ^1.82.8
react: '>=18'
react-dom: '>=18'
@@ -4849,8 +4849,8 @@ packages:
hyphenate-style-name@1.1.0:
resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
i18next@24.0.0:
resolution: {integrity: sha512-ORGCwMrXxpmB/AljFbGEe0UK/9Pz6umb9aZgLZ9qJGE+kjKhlnLj423WX2mt+N0MlEJ78pQXFMBmeMzrkLxriQ==}
i18next@24.0.2:
resolution: {integrity: sha512-D88xyIGcWAKwBTAs4RSqASi8NXR/NhCVSTM4LDbdoU8qb/5dcEZjNCLDhtQBB7Epw/Cp1w2vH/3ujoTbqLSs5g==}
peerDependencies:
typescript: ^5
peerDependenciesMeta:
@@ -7149,8 +7149,8 @@ packages:
resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==}
engines: {node: '>=10.0.0'}
tailwind-merge@2.5.4:
resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==}
tailwind-merge@2.5.5:
resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==}
tailwindcss-textshadow@2.1.3:
resolution: {integrity: sha512-FGVHfK+xnV879VSQDeRvY61Aa+b0GDiGaFBPwCOKvqIrK57GyepWJL1GydjtGOLHE9qqphFucRNj9fHramCzNg==}
@@ -9122,7 +9122,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@iconify/json@2.2.275':
'@iconify/json@2.2.276':
dependencies:
'@iconify/types': 2.0.0
pathe: 1.1.2
@@ -10040,7 +10040,7 @@ snapshots:
dependencies:
remove-accents: 0.5.0
'@tanstack/react-router@1.82.2(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)':
'@tanstack/react-router@1.82.8(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)':
dependencies:
'@tanstack/history': 1.81.9
'@tanstack/react-store': 0.5.6(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
@@ -10071,9 +10071,9 @@ snapshots:
react: 19.0.0-rc.1
react-dom: 19.0.0-rc.1(react@19.0.0-rc.1)
'@tanstack/router-devtools@1.82.2(@tanstack/react-router@1.82.2(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)':
'@tanstack/router-devtools@1.82.8(@tanstack/react-router@1.82.8(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(csstype@3.1.3)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)':
dependencies:
'@tanstack/react-router': 1.82.2(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
'@tanstack/react-router': 1.82.8(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
clsx: 2.1.1
goober: 2.1.16(csstype@3.1.3)
react: 19.0.0-rc.1
@@ -10113,9 +10113,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.82.2(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8)':
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.82.8(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1))(zod@3.23.8)':
dependencies:
'@tanstack/react-router': 1.82.2(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
'@tanstack/react-router': 1.82.8(@tanstack/router-generator@1.81.9)(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1)
zod: 3.23.8
'@tanstack/store@0.5.5': {}
@@ -12594,7 +12594,7 @@ snapshots:
hyphenate-style-name@1.1.0: {}
i18next@24.0.0(typescript@5.7.2):
i18next@24.0.2(typescript@5.7.2):
dependencies:
'@babel/runtime': 7.26.0
optionalDependencies:
@@ -14120,11 +14120,11 @@ snapshots:
dependencies:
react: 19.0.0-rc.1
react-i18next@15.1.1(i18next@24.0.0(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1):
react-i18next@15.1.1(i18next@24.0.2(typescript@5.7.2))(react-dom@19.0.0-rc.1(react@19.0.0-rc.1))(react@19.0.0-rc.1):
dependencies:
'@babel/runtime': 7.26.0
html-parse-stringify: 3.0.1
i18next: 24.0.0(typescript@5.7.2)
i18next: 24.0.2(typescript@5.7.2)
react: 19.0.0-rc.1
optionalDependencies:
react-dom: 19.0.0-rc.1(react@19.0.0-rc.1)
@@ -14952,7 +14952,7 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
tailwind-merge@2.5.4: {}
tailwind-merge@2.5.5: {}
tailwindcss-textshadow@2.1.3:
dependencies:
+5 -5
View File
@@ -29,7 +29,7 @@ ArmSoM-Sige 系列:软路由、单板计算机、小型服务器与智能家
## 编译命令
1. 首先装好 Linux 系统,推荐 Debian 11 或 Ubuntu LTS
1. 首先装好 Linux 系统,推荐 Debian 或 Ubuntu LTS
2. 安装编译依赖
@@ -37,10 +37,10 @@ ArmSoM-Sige 系列:软路由、单板计算机、小型服务器与智能家
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
bzip2 ccache clang cmake cpio curl device-tree-compiler flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev \
libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \
libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python3 \
libssl-dev libtool llvm lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python3 \
python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \
uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
```
@@ -109,7 +109,7 @@ Build dependency: OpenWrt can only be built on a case-sensitive filesystem
# 以管理员身份打开终端
PS > fsutil.exe file setCaseSensitiveInfo <your_local_lede_path> enable
# 将本项目 git clone 到开启了大小写敏感的目录 <your_local_lede_path> 中
PS > git clone git@github.com:coolsnowwolf/lede.git <your_local_lede_path>
PS > git clone https://github.com/coolsnowwolf/lede <your_local_lede_path>
```
> 对已经 `git clone` 完成的项目目录执行 `fsutil.exe` 命令无法生效,大小写敏感只对新增的文件变更有效。
@@ -162,7 +162,7 @@ PS > git clone git@github.com:coolsnowwolf/lede.git <your_local_lede_path>
## 特别提示
1. 源代码中绝不含任何后门和可以监控或者劫持你的 HTTPS 的闭源软件, SSL 安全是互联网最后的壁垒安全干净才是固件应该做到的
1. 源代码中绝不含任何后门和可以监控或者劫持你的 HTTPS 的闭源软件, SSL 安全是互联网最后的壁垒安全干净才是固件应该做到的
2. 想学习 OpenWrt 开发,但是摸不着门道?自学没毅力?基础太差?怕太难学不会?跟着佐大学 OpenWrt 开发入门培训班助你能学有所成
报名地址:[点击报名](http://forgotfun.org/2018/04/openwrt-training-2018.html "报名")
+22 -158
View File
@@ -3,17 +3,15 @@
I18N: [English](README_EN.md) | [简体中文](README.md) | [日本語](README_JA.md)
## Official Channels
<!--
如有技术问题需要讨论或者交流,欢迎加入以下群:
1. QQ 讨论群: Op固件技术研究群 ,号码 891659613 ,加群链接:[点击加入](https://jq.qq.com/?_wv=1027&k=XL8SK5aC "Op固件技术研究群")
2. TG 讨论群: OP 编译官方大群 ,加群链接:[点击加入](https://t.me/JhKgAA6Hx1 "OP 编译官方大群")
3. Rockchip RK3568 预编译固件发布 Release 下载更新地址 (包括 H68K )<https://github.com/coolsnowwolf/lede/releases/tag/20220716>
-->
If you have technical questions for discussion or sharing, feel free to join the following channels:
1. QQ Group: *OpenWRT Firmware Technical Research Group*, Group Number is `891659613`. Join the group: [Link](https://jq.qq.com/?_wv=1027&k=XL8SK5aC "Op固件技术研究群").
1. QQ Group: *OpenWRT Firmware Technical Research Group*, Group Number is `891659613`.
Join the group: [Link](https://jq.qq.com/?_wv=1027&k=XL8SK5aC "Op固件技术研究群").
- [Click to download QQ client](https://im.qq.com/pcqq).
2. Telegram Group: *OpenWRT Firmware Technical Research Group*. Join the group: [Link](https://t.me/JhKgAA6Hx1 "OP 编译官方大群").
2. Telegram Group: *OpenWRT Firmware Technical Research Group*.
Join the group: [Link](https://t.me/JhKgAA6Hx1 "OP 编译官方大群").
## ArmSoM Sige Board Series Introduction
@@ -25,34 +23,15 @@ Buy Link
[![sige1-en](doc/sige-en.jpg)](https://aliexpress.com/item/3256807356692995.html)
## Notice
<!--
1. **不要用 root 用户进行编译**
2. 国内用户编译前最好准备好梯子
3. 默认登陆IP 192.168.1.1 密码 password
-->
1. **Never compile OpenWRT as `root`**
2. If you are living in mainland China, please make sure you could visit the **REAL** Internet.
3. Default login IP is `192.168.1.1`, password is `password`.
## How to Compile
<!--
1. 首先装好 Linux 系统,推荐 Debian 11 或 Ubuntu LTS
2. 安装编译依赖
```bash
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python3 python3-pyelftools \
libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \
vim wget xmlto xxd zlib1g-dev python3-setuptools
```
-->
1. Install a Linux distribution, Debian or Ubuntu LTS is recommended.
1. Install a Linux distribution, Debian 11 or Ubuntu LTS is recommended.
2. Install dependencies:
```bash
@@ -67,26 +46,6 @@ Buy Link
vim wget xmlto xxd zlib1g-dev python3-setuptools
```
<!--
3. 下载源代码,更新 feeds 并选择配置
```bash
git clone https://github.com/coolsnowwolf/lede
cd lede
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
```
4. 下载 dl 库,编译固件
(-j 后面是线程数,第一次编译推荐用单线程)
```bash
make download -j8
make V=s -j1
```
-->
3. Clone the source code, update `feeds` and configure:
```bash
@@ -101,46 +60,16 @@ Buy Link
> (`-j` is the thread count, single-thread is recommended for the first build):
```bash
make -j8 download V=s
make -j1 V=s
make download -j8
make V=s -j1
```
<!--
本套代码保证肯定可以编译成功。里面包括了 R23 所有源代码,包括 IPK 的。
你可以自由使用,但源码编译二次发布请注明我的 GitHub 仓库链接。谢谢合作!
-->
These commands are supposed to compile the source code successfully.
All source code of R23 is included, including IPK.
You can use this source code freely, but please link this GitHub repository when redistributing.
Thank you for your cooperation!
<!--
二次编译:
```bash
cd lede
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make download -j8
make V=s -j$(nproc)
```
如果需要重新配置:
```bash
rm -rf ./tmp && rm -rf .config
make menuconfig
make V=s -j$(nproc)
```
编译完成后输出路径:bin/targets
-->
Rebuild:
```bash
@@ -165,14 +94,8 @@ Build artifacts will be outputted to `bin/targets` directory.
### If you are using WSL/WSL2 as your build environment
<!--
由于 WSL 的 PATH 中包含带有空格的 Windows 路径,有可能会导致编译失败,请在 `make` 前面加上:
```bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```
-->
WSL's `PATH` potentially contain Windows paths with spaces, which may cause compilation failure. Please add the following lines to your local environment profiles before compiling:
WSL's `PATH` potentially contain Windows paths with spaces, which may cause compilation failure.
Please add the following lines to your local environment profiles before compiling:
```bash
# Update and reload your profile, ~/.bashrc for example.
@@ -182,26 +105,8 @@ EOF
source ~/.bashrc
```
<!--
由于默认情况下,装载到 WSL 发行版的 NTFS 格式的驱动器将不区分大小写,因此大概率在 WSL/WSL2 的编译检查中会返回以下错误:
```txt
Build dependency: OpenWrt can only be built on a case-sensitive filesystem
```
一个比较简洁的解决方法是,在 `git clone` 前先创建 Repository 目录,并为其启用大小写敏感:
```powershell
# 以管理员身份打开终端
PS > fsutil.exe file setCaseSensitiveInfo <your_local_lede_path> enable
# 将本项目 git clone 到开启了大小写敏感的目录 <your_local_lede_path> 中
PS > git clone git@github.com:coolsnowwolf/lede.git <your_local_lede_path>
```
> 对已经 `git clone` 完成的项目目录执行 `fsutil.exe` 命令无法生效,大小写敏感只对新增的文件变更有效。
-->
NTFS-formatted drives mounted to a WSL distribution will be case-insensitive by default. This will cause the following error when compiling in WSL/WSL2:
NTFS-formatted drives mounted to a WSL distribution will be case-insensitive by default.
This will cause the following error when compiling in WSL/WSL2:
```txt
Build dependency: OpenWrt can only be built on a case-sensitive filesystem
@@ -216,52 +121,27 @@ PS > fsutil.exe file setCaseSensitiveInfo <your_local_lede_path> enable
PS > git clone git@github.com:coolsnowwolf/lede.git <your_local_lede_path>
```
> For directories that have already been `git clone`d, `fsutil.exe` will not take effect. Case sensitivity will only be enabled for new changes in the directory.
> For directories that have already been `git clone`, `fsutil.exe` will not take effect.
> Case sensitivity will only be enabled for new changes in the directory.
### macOS Compilation
<!--
1. 在 AppStore 中安装 Xcode
2. 安装 Homebrew
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
3. 使用 Homebrew 安装工具链、依赖与基础软件包:
```bash
brew unlink awk
brew install coreutils diffutils findutils gawk gnu-getopt gnu-tar grep make ncurses pkg-config wget quilt xz
brew install gcc@11
```
4. 然后输入以下命令,添加到系统环境变量中:
```bash
echo 'export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/gnu-getopt/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/make/libexec/gnubin:$PATH"' >> ~/.bashrc
```
5. 重新加载一下 shell 启动文件 `source ~/.bashrc`,然后输入 `bash` 进入 bash shell,就可以和 Linux 一样正常编译了
-->
1. Install Xcode from AppStore
2. Install Homebrew:
```bash
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
3. Install toolchain, dependencies and packages with Homebrew:
```bash
brew unlink awk
brew install coreutils diffutils findutils gawk gnu-getopt gnu-tar grep make ncurses pkg-config wget quilt xz
brew install gcc@11
```
4. Update your system environment:
- mac with intel chip
@@ -287,34 +167,18 @@ PS > git clone git@github.com:coolsnowwolf/lede.git <your_local_lede_path>
echo 'export PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/opt/homebrew/opt/make/libexec/gnubin:$PATH"' >> ~/.bashrc
```
5. Reload your shell profile `source ~/.bashrc && bash`, then you can compile normally like Linux.
## Declaration
<!--
1. 源代码中绝不含任何后门和可以监控或者劫持你的 HTTPS 的闭源软件, SSL 安全是互联网最后的壁垒。安全干净才是固件应该做到的;
2. 想学习 OpenWrt 开发,但是摸不着门道?自学没毅力?基础太差?怕太难学不会?跟着佐大学 OpenWrt 开发入门培训班助你能学有所成
报名地址:[点击报名](http://forgotfun.org/2018/04/openwrt-training-2018.html "报名")
3. QCA IPQ60xx 开源仓库地址:<https://github.com/coolsnowwolf/openwrt-gl-ax1800>
4. 存档版本仓库地址:<https://github.com/coolsnowwolf/openwrt>
-->
1. This source code doesn't contain any backdoors or closed source applications that can monitor/capture your HTTPS traffic. SSL security is the final castle of cyber security. Safety is what a firmware should do.
2. Want to learn OpenWRT development but don't know how to start? Can't motivate yourself for self-learning? Do not have enough fundamental knowledge? Learn OpenWRT development with Mr. Zuo through his Beginner OpenWRT Training Course. Click [here](http://forgotfun.org/2018/04/openwrt-training-2018.html) to register.
3. QCA IPQ60xx open source repository: <https://github.com/coolsnowwolf/openwrt-gl-ax1800>
4. OpenWRT Archive repository: <https://github.com/coolsnowwolf/openwrt>
## Introduction to Software Routers
<!--
硬酷R2 - N95/N300迷你四网HomeLab服务器
(商品介绍页面 - 硬酷科技(支持花呗)):
[预售链接](https://item.taobao.com/item.htm?ft=t&id=719159813003)
[![r1](doc/r1.jpg)](https://item.taobao.com/item.htm?ft=t&id=719159813003)
-->
Yingku R2 - N95/N300 Mini Four-Network HomeLab Server
(Introduction page - Yingku Technology (support AliPay Huabei)):
+21 -173
View File
@@ -3,58 +3,25 @@
I18N: [English](README_EN.md) | [简体中文](README.md) | [日本語](README_JA.md)
## 公式チャンネル
<!--
如有技术问题需要讨论或者交流,欢迎加入以下群:
1. QQ 讨论群: Op固件技术研究群 ,号码 891659613 ,加群链接:[点击加入](https://jq.qq.com/?_wv=1027&k=XL8SK5aC "Op固件技术研究群")
2. TG 讨论群: OP 编译官方大群 ,加群链接:[点击加入](https://t.me/JhKgAA6Hx1 "OP 编译官方大群")
3. Rockchip RK3568 预编译固件发布 Release 下载更新地址 (包括 H68K )<https://github.com/coolsnowwolf/lede/releases/tag/20220716>
-->
ディスカッションや共有したい技術的な質問がある場合は、以下のチャンネルにお気軽にご参加ください:
1. QQ グループ: *OpenWRT ファームウェア技術研究グループ*、グループ番号は `891659613` です。グループに参加する: [リンク](https://jq.qq.com/?_wv=1027&k=XL8SK5aC "Op固件技术研究群")。
1. QQ グループ: *OpenWRT ファームウェア技術研究グループ*、グループ番号は `891659613` です。
グループに参加する: [リンク](https://jq.qq.com/?_wv=1027&k=XL8SK5aC "Op固件技术研究群")。
- [クリックして QQ クライアントをダウンロードする](https://im.qq.com/pcqq)。
2. Telegram グループ: *OpenWRT ファームウェア技術研究グループ*。グループに参加する: [リンク](https://t.me/JhKgAA6Hx1 "OP 编译官方大群")。
3. Rockchip **RK3568** コンパイル済みファームウェアリリース (H68K を含む): [クリックしてダウンロード](https://github.com/coolsnowwolf/lede/releases/tag/20220716)。
<div align="left">
<a href="https://item.taobao.com/item.htm?spm=a230r.1.14.11.4bb55247rdHEAP&id=702787603594&ns=1&abbucket=17#detail
">
<img style="margin: 0px 0px 0px 40px;" src="https://github.com/coolsnowwolf/lede/blob/master/doc/h68k.jpg?raw=true" width=600 />
</a>
</div>
4. Rockchip **RK3588**コンパイル済みファームウェアリリース(H68K を含む): [クリックしてダウンロード](https://github.com/coolsnowwolf/lede/releases/tag/20230609)。
## 注意
<!--
1. **不要用 root 用户进行编译**
2. 国内用户编译前最好准备好梯子
3. 默认登陆IP 192.168.1.1 密码 password
-->
1. **OpenWRT を決して `root` としてコンパイルしないこと**
2. 中国本土にお住まいの方は、ぜひ **REAL** インターネットをご覧ください。
3. デフォルトのログイン IP は `192.168.1.1` で、パスワードは `password` です。
## コンパイル方法
<!--
1. 首先装好 Linux 系统,推荐 Debian 11 或 Ubuntu LTS
2. 安装编译依赖
```bash
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python3 python3-pyelftools \
libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \
vim wget xmlto xxd zlib1g-dev python3-setuptools
```
-->
1. Linuxディストリビューションをインストールし、Debian または Ubuntu LTS を推奨します。
1. Linuxディストリビューションをインストールし、Debian 11 または Ubuntu LTS を推奨します。
2. 依存関係をインストールする:
```bash
@@ -69,26 +36,6 @@ I18N: [English](README_EN.md) | [简体中文](README.md) | [日本語](README_J
vim wget xmlto xxd zlib1g-dev python3-setuptools
```
<!--
3. 下载源代码,更新 feeds 并选择配置
```bash
git clone https://github.com/coolsnowwolf/lede
cd lede
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
```
4. 下载 dl 库,编译固件
(-j 后面是线程数,第一次编译推荐用单线程)
```bash
make download -j8
make V=s -j1
```
-->
3. ソースコードをクローンし、`feeds` を更新し、設定する:
```bash
@@ -103,46 +50,16 @@ I18N: [English](README_EN.md) | [简体中文](README.md) | [日本語](README_J
> (`-j` はスレッドカウント、最初のビルドはシングルスレッドを推奨):
```bash
make -j8 download V=s
make -j1 V=s
make download -j8
make V=s -j1
```
<!--
本套代码保证肯定可以编译成功。里面包括了 R23 所有源代码,包括 IPK 的。
你可以自由使用,但源码编译二次发布请注明我的 GitHub 仓库链接。谢谢合作!
-->
これらのコマンドは、ソースコードを正常にコンパイルするためのものです。
R23 のソースコードは IPK を含めてすべて含まれています。
このソースコードはご自由にお使いいただけますが、再配布の際はこの GitHub リポジトリをリンクしてください。
ご協力ありがとうございました!
<!--
二次编译:
```bash
cd lede
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make download -j8
make V=s -j$(nproc)
```
如果需要重新配置:
```bash
rm -rf ./tmp && rm -rf .config
make menuconfig
make V=s -j$(nproc)
```
编译完成后输出路径:bin/targets
-->
リビルド:
```bash
@@ -167,14 +84,8 @@ make V=s -j$(nproc)
### WSL/WSL2 をビルド環境として使用している場合
<!--
由于 WSL 的 PATH 中包含带有空格的 Windows 路径,有可能会导致编译失败,请在 `make` 前面加上:
```bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```
-->
WSL の `PATH` には、Windows のパスが空白で含まれている可能性があり、コンパイルに失敗することがあります。コンパイルする前に、ローカルの環境プロファイルに以下の行を追加してください:
WSL の `PATH` には、Windows のパスが空白で含まれている可能性があり、コンパイルに失敗することがあります。
コンパイルする前に、ローカルの環境プロファイルに以下の行を追加してください:
```bash
# 例えば、~/.bashrc などのプロファイルを更新した後、再読み込みを行う。
@@ -184,26 +95,8 @@ EOF
source ~/.bashrc
```
<!--
由于默认情况下,装载到 WSL 发行版的 NTFS 格式的驱动器将不区分大小写,因此大概率在 WSL/WSL2 的编译检查中会返回以下错误:
```txt
Build dependency: OpenWrt can only be built on a case-sensitive filesystem
```
一个比较简洁的解决方法是,在 `git clone` 前先创建 Repository 目录,并为其启用大小写敏感:
```powershell
# 以管理员身份打开终端
PS > fsutil.exe file setCaseSensitiveInfo <your_local_lede_path> enable
# 将本项目 git clone 到开启了大小写敏感的目录 <your_local_lede_path> 中
PS > git clone git@github.com:coolsnowwolf/lede.git <your_local_lede_path>
```
> 对已经 `git clone` 完成的项目目录执行 `fsutil.exe` 命令无法生效,大小写敏感只对新增的文件变更有效。
-->
WSL ディストリビューションにマウントされた NTFS フォーマットのドライブは、デフォルトで大文字と小文字が区別されません。このため、WSL/WSL2 でコンパイルすると、次のようなエラーが発生します:
WSL ディストリビューションにマウントされた NTFS フォーマットのドライブは、デフォルトで大文字と小文字が区別されません。
このため、WSL/WSL2 でコンパイルすると、次のようなエラーが発生します:
```txt
Build dependency: OpenWrt can only be built on a case-sensitive filesystem
@@ -218,55 +111,31 @@ PS > fsutil.exe file setCaseSensitiveInfo <your_local_lede_path> enable
PS > git clone git@github.com:coolsnowwolf/lede.git <your_local_lede_path>
```
> すでに `git clone` されたディレクトリでは、`fsutil.exe` は有効になりません。大文字小文字の区別はディレクトリの新しい変更に対してのみ有効になります。
> すでに `git clone` されたディレクトリでは、`fsutil.exe` は有効になりません。
> 大文字小文字の区別はディレクトリの新しい変更に対してのみ有効になります。
### macOS コンパイル
<!--
1. 在 AppStore 中安装 Xcode
2. 安装 Homebrew
```bash
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
3. 使用 Homebrew 安装工具链、依赖与基础软件包:
```bash
brew unlink awk
brew install coreutils diffutils findutils gawk gnu-getopt gnu-tar grep make ncurses pkg-config wget quilt xz
brew install gcc@11
```
4. 然后输入以下命令,添加到系统环境变量中:
```bash
echo 'export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/gnu-getopt/bin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/make/libexec/gnubin:$PATH"' >> ~/.bashrc
```
5. 重新加载一下 shell 启动文件 `source ~/.bashrc`,然后输入 `bash` 进入 bash shell,就可以和 Linux 一样正常编译了
-->
1. AppStore から Xcode をインストールする
2. Homebrew をインストールする:
```bash
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
3. Homebrew でツールチェーン、依存関係、パッケージをインストールする:
```bash
brew unlink awk
brew install coreutils diffutils findutils gawk gnu-getopt gnu-tar grep make ncurses pkg-config wget quilt xz
brew install gcc@11
```
4. システム環境のアップデート:
- MacのIntelシリコンバージョン
```bash
echo 'export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/usr/local/opt/findutils/libexec/gnubin:$PATH"' >> ~/.bashrc
@@ -288,34 +157,18 @@ PS > git clone git@github.com:coolsnowwolf/lede.git <your_local_lede_path>
echo 'export PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:$PATH"' >> ~/.bashrc
echo 'export PATH="/opt/homebrew/opt/make/libexec/gnubin:$PATH"' >> ~/.bashrc
```
5. シェルプロファイル `source ~/.bashrc && bash` を再読み込みすれば、Linux のように普通にコンパイルできます。
## 宣言
<!--
1. 源代码中绝不含任何后门和可以监控或者劫持你的 HTTPS 的闭源软件, SSL 安全是互联网最后的壁垒。安全干净才是固件应该做到的;
2. 想学习 OpenWrt 开发,但是摸不着门道?自学没毅力?基础太差?怕太难学不会?跟着佐大学 OpenWrt 开发入门培训班助你能学有所成
报名地址:[点击报名](http://forgotfun.org/2018/04/openwrt-training-2018.html "报名")
3. QCA IPQ60xx 开源仓库地址:<https://github.com/coolsnowwolf/openwrt-gl-ax1800>
4. 存档版本仓库地址:<https://github.com/coolsnowwolf/openwrt>
-->
1. このソースコードには、HTTPS トラフィックを監視/キャプチャできるバックドアやクローズドソースアプリケーションは含まれていません。SSL セキュリティはサイバーセキュリティの最後の城です。安全性はファームウェアがすべきことです。
2. OpenWRT の開発を学びたいが、何から始めたらいいかわからないですか?自己学習のモチベーションが上がらない?基礎知識が足りない?ズオ氏の初心者 OpenWRT トレーニングコースで一緒に OpenWRT 開発を学びましょう。お申し込みは[こちら](http://forgotfun.org/2018/04/openwrt-training-2018.html)をクリックしてください。
3. QCA IPQ60xx オープンソースリポジトリ: <https://github.com/coolsnowwolf/openwrt-gl-ax1800>
4. OpenWRT アーカイブリポジトリ: <https://github.com/coolsnowwolf/openwrt>
## ソフトウェアルーター入門
<!--
硬酷R2 - N95/N300迷你四网HomeLab服务器
(商品介绍页面 - 硬酷科技(支持花呗)):
[预售链接](https://item.taobao.com/item.htm?ft=t&id=719159813003)
[![r1](doc/r1.jpg)](https://item.taobao.com/item.htm?ft=t&id=719159813003)
-->
Yingku R2 - N95/N300 Mini Four-Network HomeLab Server
(紹介ページ - Yingku Technology (support AliPay Huabei)):
@@ -330,11 +183,6 @@ Yingku R2 - N95/N300 Mini Four-Network HomeLab Server
## 寄付
<!--
如果你觉得此项目对你有帮助,可以捐助我们,以鼓励项目能持续发展,更加完善
![star](doc/star.png)
-->
このプロジェクトがあなたのお役に立てたのであれば、このプロジェクトの発展を支援するための寄付をご検討ください。
<div align="left">
@@ -55,8 +55,6 @@ CONFIG_BRCM_CHAR_DRIVERS=y
CONFIG_BUFFER_HEAD=y
# CONFIG_CACHE_L2X0 is not set
CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CLKSRC_MMIO=y
CONFIG_CLK_BCM2711_DVP=y
CONFIG_CLK_BCM2835=y
@@ -172,7 +170,6 @@ CONFIG_FWNODE_MDIO=y
CONFIG_FW_CACHE=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_CLOCKEVENTS=y
@@ -69,8 +69,6 @@ CONFIG_BROADCOM_PHY=y
CONFIG_BUFFER_HEAD=y
# CONFIG_CACHE_L2X0 is not set
CONFIG_CC_HAVE_STACKPROTECTOR_TLS=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CLKSRC_MMIO=y
CONFIG_CLK_BCM2711_DVP=y
CONFIG_CLK_BCM2835=y
@@ -211,7 +209,6 @@ CONFIG_FWNODE_MDIO=y
CONFIG_FW_CACHE=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_ARCH_TOPOLOGY=y
CONFIG_GENERIC_BUG=y
@@ -85,8 +85,6 @@ CONFIG_CAVIUM_ERRATUM_23154=y
CONFIG_CAVIUM_ERRATUM_27456=y
CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CLKSRC_MMIO=y
CONFIG_CLK_BCM2711_DVP=y
CONFIG_CLK_BCM2835=y
@@ -218,7 +216,6 @@ CONFIG_FWNODE_MDIO=y
CONFIG_FW_CACHE=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_ARCH_TOPOLOGY=y
@@ -84,8 +84,6 @@ CONFIG_CAVIUM_ERRATUM_23154=y
CONFIG_CAVIUM_ERRATUM_27456=y
CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CLKSRC_MMIO=y
CONFIG_CLK_BCM2711_DVP=y
CONFIG_CLK_BCM2835=y
@@ -219,7 +217,6 @@ CONFIG_FWNODE_MDIO=y
CONFIG_FW_CACHE=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_ARCH_NUMA=y
@@ -110,8 +110,6 @@ CONFIG_BUFFER_HEAD=y
CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y
CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_CLKSRC_MMIO=y
CONFIG_CLK_BCM2711_DVP=y
CONFIG_CLK_BCM2835=y
@@ -262,7 +260,6 @@ CONFIG_FWNODE_MDIO=y
CONFIG_FW_CACHE=y
CONFIG_FW_LOADER_PAGED_BUF=y
CONFIG_FW_LOADER_SYSFS=y
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y
CONFIG_GENERIC_ALLOCATOR=y
CONFIG_GENERIC_ARCH_NUMA=y
@@ -22,7 +22,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
struct vchiq_drvdata {
const unsigned int cache_line_size;
@@ -1838,6 +1839,7 @@ static int vchiq_probe(struct platform_d
@@ -1825,6 +1826,7 @@ static int vchiq_probe(struct platform_d
goto error_exit;
}
@@ -30,7 +30,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
bcm2835_camera = vchiq_register_child(pdev, "bcm2835-camera");
bcm2835_audio = vchiq_register_child(pdev, "bcm2835_audio");
@@ -1853,6 +1855,7 @@ static void vchiq_remove(struct platform
@@ -1840,6 +1842,7 @@ static void vchiq_remove(struct platform
{
platform_device_unregister(bcm2835_audio);
platform_device_unregister(bcm2835_camera);
@@ -22,7 +22,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
static struct platform_device *vcsm_cma;
struct vchiq_drvdata {
@@ -1840,6 +1841,7 @@ static int vchiq_probe(struct platform_d
@@ -1827,6 +1828,7 @@ static int vchiq_probe(struct platform_d
}
vcsm_cma = vchiq_register_child(pdev, "vcsm-cma");
@@ -30,7 +30,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
bcm2835_camera = vchiq_register_child(pdev, "bcm2835-camera");
bcm2835_audio = vchiq_register_child(pdev, "bcm2835_audio");
@@ -1855,6 +1857,7 @@ static void vchiq_remove(struct platform
@@ -1842,6 +1844,7 @@ static void vchiq_remove(struct platform
{
platform_device_unregister(bcm2835_audio);
platform_device_unregister(bcm2835_camera);
@@ -18,7 +18,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -1790,6 +1790,12 @@ vchiq_register_child(struct platform_dev
@@ -1777,6 +1777,12 @@ vchiq_register_child(struct platform_dev
child = NULL;
}
@@ -17,7 +17,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -1776,6 +1776,7 @@ vchiq_register_child(struct platform_dev
@@ -1763,6 +1763,7 @@ vchiq_register_child(struct platform_dev
{
struct platform_device_info pdevinfo;
struct platform_device *child;
@@ -25,7 +25,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
memset(&pdevinfo, 0, sizeof(pdevinfo));
@@ -1791,10 +1792,20 @@ vchiq_register_child(struct platform_dev
@@ -1778,10 +1779,20 @@ vchiq_register_child(struct platform_dev
}
/*
@@ -16,7 +16,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -1785,12 +1785,20 @@ vchiq_register_child(struct platform_dev
@@ -1772,12 +1772,20 @@ vchiq_register_child(struct platform_dev
pdevinfo.id = PLATFORM_DEVID_NONE;
pdevinfo.dma_mask = DMA_BIT_MASK(32);
@@ -21,7 +21,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
struct vchiq_drvdata {
const unsigned int cache_line_size;
@@ -1869,6 +1870,7 @@ static int vchiq_probe(struct platform_d
@@ -1856,6 +1857,7 @@ static int vchiq_probe(struct platform_d
bcm2835_codec = vchiq_register_child(pdev, "bcm2835-codec");
bcm2835_camera = vchiq_register_child(pdev, "bcm2835-camera");
bcm2835_audio = vchiq_register_child(pdev, "bcm2835_audio");
@@ -29,7 +29,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
return 0;
@@ -1880,6 +1882,7 @@ error_exit:
@@ -1867,6 +1869,7 @@ error_exit:
static void vchiq_remove(struct platform_device *pdev)
{
@@ -36,10 +36,10 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+ .use_36bit_addrs = true,
+};
+
struct vchiq_2835_state {
int inited;
struct vchiq_arm_state arm_state;
@@ -147,10 +153,12 @@ static void __iomem *g_regs;
struct vchiq_pagelist_info {
struct pagelist *pagelist;
size_t pagelist_buffer_size;
@@ -142,10 +148,12 @@ static void __iomem *g_regs;
* of 32.
*/
static unsigned int g_cache_line_size = 32;
@@ -52,7 +52,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
static DEFINE_SEMAPHORE(g_free_fragments_mutex, 1);
@@ -180,7 +188,7 @@ static void
@@ -175,7 +183,7 @@ static void
cleanup_pagelistinfo(struct vchiq_instance *instance, struct vchiq_pagelist_info *pagelistinfo)
{
if (pagelistinfo->scatterlist_mapped) {
@@ -61,7 +61,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
pagelistinfo->num_pages, pagelistinfo->dma_dir);
}
@@ -340,7 +348,7 @@ create_pagelist(struct vchiq_instance *i
@@ -335,7 +343,7 @@ create_pagelist(struct vchiq_instance *i
count -= len;
}
@@ -70,7 +70,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
scatterlist,
num_pages,
pagelistinfo->dma_dir);
@@ -354,22 +362,61 @@ create_pagelist(struct vchiq_instance *i
@@ -349,22 +357,61 @@ create_pagelist(struct vchiq_instance *i
/* Combine adjacent blocks for performance */
k = 0;
@@ -148,7 +148,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
}
/* Partial cache lines (fragments) require special measures */
@@ -413,7 +460,7 @@ free_pagelist(struct vchiq_instance *ins
@@ -408,7 +455,7 @@ free_pagelist(struct vchiq_instance *ins
* NOTE: dma_unmap_sg must be called before the
* cpu can touch any of the data/pages.
*/
@@ -157,7 +157,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
pagelistinfo->num_pages, pagelistinfo->dma_dir);
pagelistinfo->scatterlist_mapped = 0;
@@ -468,6 +515,7 @@ free_pagelist(struct vchiq_instance *ins
@@ -463,6 +510,7 @@ free_pagelist(struct vchiq_instance *ins
static int vchiq_platform_init(struct platform_device *pdev, struct vchiq_state *state)
{
struct device *dev = &pdev->dev;
@@ -165,7 +165,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
struct vchiq_drvdata *drvdata = platform_get_drvdata(pdev);
struct rpi_firmware *fw = drvdata->fw;
struct vchiq_slot_zero *vchiq_slot_zero;
@@ -489,6 +537,24 @@ static int vchiq_platform_init(struct pl
@@ -484,6 +532,24 @@ static int vchiq_platform_init(struct pl
g_cache_line_size = drvdata->cache_line_size;
g_fragments_size = 2 * g_cache_line_size;
@@ -190,7 +190,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
/* Allocate space for the channels in coherent memory */
slot_mem_size = PAGE_ALIGN(TOTAL_SLOTS * VCHIQ_SLOT_SIZE);
frag_mem_size = PAGE_ALIGN(g_fragments_size * MAX_FRAGMENTS);
@@ -501,13 +567,14 @@ static int vchiq_platform_init(struct pl
@@ -496,13 +562,14 @@ static int vchiq_platform_init(struct pl
}
WARN_ON(((unsigned long)slot_mem & (PAGE_SIZE - 1)) != 0);
@@ -206,7 +206,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
vchiq_slot_zero->platform_data[VCHIQ_PLATFORM_FRAGMENTS_COUNT_IDX] =
MAX_FRAGMENTS;
@@ -541,7 +608,6 @@ static int vchiq_platform_init(struct pl
@@ -536,7 +603,6 @@ static int vchiq_platform_init(struct pl
}
/* Send the base address of the slots to VideoCore */
@@ -214,7 +214,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
err = rpi_firmware_property(fw, RPI_FIRMWARE_VCHIQ_INIT,
&channelbase, sizeof(channelbase));
if (err) {
@@ -555,6 +621,8 @@ static int vchiq_platform_init(struct pl
@@ -550,6 +616,8 @@ static int vchiq_platform_init(struct pl
return -ENXIO;
}
@@ -223,7 +223,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
vchiq_log_info(vchiq_arm_log_level, "vchiq_init - done (slots %pK, phys %pad)",
vchiq_slot_zero, &slot_phys);
@@ -1768,6 +1836,7 @@ void vchiq_platform_conn_state_changed(s
@@ -1755,6 +1823,7 @@ void vchiq_platform_conn_state_changed(s
static const struct of_device_id vchiq_of_match[] = {
{ .compatible = "brcm,bcm2835-vchiq", .data = &bcm2835_drvdata },
{ .compatible = "brcm,bcm2836-vchiq", .data = &bcm2836_drvdata },
@@ -231,7 +231,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
{},
};
MODULE_DEVICE_TABLE(of, vchiq_of_match);
@@ -1800,22 +1869,8 @@ vchiq_register_child(struct platform_dev
@@ -1787,22 +1856,8 @@ vchiq_register_child(struct platform_dev
child->dev.of_node = np;
@@ -15,7 +15,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -1869,8 +1869,18 @@ vchiq_register_child(struct platform_dev
@@ -1856,8 +1856,18 @@ vchiq_register_child(struct platform_dev
child->dev.of_node = np;
@@ -37,7 +37,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
/* Override the default prefix, which would be vchiq_arm (from the filename) */
#undef MODULE_PARAM_PREFIX
#define MODULE_PARAM_PREFIX DEVICE_NAME "."
@@ -133,6 +136,7 @@ struct vchiq_pagelist_info {
@@ -128,6 +131,7 @@ struct vchiq_pagelist_info {
struct pagelist *pagelist;
size_t pagelist_buffer_size;
dma_addr_t dma_addr;
@@ -45,7 +45,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
enum dma_data_direction dma_dir;
unsigned int num_pages;
unsigned int pages_need_release;
@@ -153,6 +157,7 @@ static void __iomem *g_regs;
@@ -148,6 +152,7 @@ static void __iomem *g_regs;
* of 32.
*/
static unsigned int g_cache_line_size = 32;
@@ -53,7 +53,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
static unsigned int g_use_36bit_addrs = 0;
static unsigned int g_fragments_size;
static char *g_fragments_base;
@@ -195,8 +200,13 @@ cleanup_pagelistinfo(struct vchiq_instan
@@ -190,8 +195,13 @@ cleanup_pagelistinfo(struct vchiq_instan
if (pagelistinfo->pages_need_release)
unpin_user_pages(pagelistinfo->pages, pagelistinfo->num_pages);
@@ -69,7 +69,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
}
static inline bool
@@ -231,6 +241,7 @@ create_pagelist(struct vchiq_instance *i
@@ -226,6 +236,7 @@ create_pagelist(struct vchiq_instance *i
u32 *addrs;
unsigned int num_pages, offset, i, k;
int actual_pages;
@@ -77,7 +77,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
size_t pagelist_size;
struct scatterlist *scatterlist, *sg;
int dma_buffers;
@@ -260,8 +271,14 @@ create_pagelist(struct vchiq_instance *i
@@ -255,8 +266,14 @@ create_pagelist(struct vchiq_instance *i
/* Allocate enough storage to hold the page pointers and the page
* list
*/
@@ -94,7 +94,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
vchiq_log_trace(vchiq_arm_log_level, "%s - %pK", __func__, pagelist);
@@ -282,6 +299,7 @@ create_pagelist(struct vchiq_instance *i
@@ -277,6 +294,7 @@ create_pagelist(struct vchiq_instance *i
pagelistinfo->pagelist = pagelist;
pagelistinfo->pagelist_buffer_size = pagelist_size;
pagelistinfo->dma_addr = dma_addr;
@@ -102,7 +102,7 @@ Signed-off-by: Oliver Gjoneski <ogjoneski@gmail.com>
pagelistinfo->dma_dir = (type == PAGELIST_WRITE) ?
DMA_TO_DEVICE : DMA_FROM_DEVICE;
pagelistinfo->num_pages = num_pages;
@@ -622,6 +640,13 @@ static int vchiq_platform_init(struct pl
@@ -617,6 +635,13 @@ static int vchiq_platform_init(struct pl
}
g_dma_dev = dma_dev ?: dev;
@@ -163,7 +163,8 @@ domain:store.steampowered.com'
config shunt_rules 'AIGC'
option remarks 'AIGC'
option domain_list 'geosite:category-ai-chat-!cn'
option domain_list 'geosite:category-ai-chat-!cn
domain:apple-relay.apple.com'
config shunt_rules 'Streaming'
option remarks 'Streaming'
@@ -2,6 +2,7 @@ engage.cloudflareclient.com
github.com
bing.com
c.mi.com
apple-relay.apple.com
#google
googleapis.cn
+3 -3
View File
@@ -28,9 +28,9 @@ jobs:
- name: Install Rust
run: |
rustup set profile minimal
rustup toolchain install 1.74
rustup default 1.74
rustup override set 1.74
rustup toolchain install 1.75
rustup default 1.75
rustup override set 1.75
- name: Build with All Features Enabled (Unix)
if: ${{ runner.os == 'Linux' || runner.os == 'macOS' }}
run: cargo build --verbose --features "full-extra local-flow-stat utility-url-outline"
+24 -11
View File
@@ -15,9 +15,13 @@ jobs:
strategy:
fail-fast: false
matrix:
target:
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-musl
platform:
- target: x86_64-unknown-linux-musl
toolchain: stable
- target: aarch64-unknown-linux-musl
toolchain: stable
- target: mips-unknown-linux-musl
toolchain: nightly
steps:
- uses: actions/checkout@v4
@@ -25,18 +29,17 @@ jobs:
- name: Install Rust
run: |
rustup set profile minimal
rustup toolchain install stable
rustup default stable
rustup override set stable
rustup target add --toolchain stable ${{ matrix.target }}
rustup toolchain install ${{ matrix.platform.toolchain }}
rustup default ${{ matrix.platform.toolchain }}
rustup override set ${{ matrix.platform.toolchain }}
- name: Install cross
run: cargo install cross
- name: Build ${{ matrix.target }}
- name: Build ${{ matrix.platform.target }}
timeout-minutes: 120
run: |
compile_target=${{ matrix.target }}
compile_target=${{ matrix.platform.target }}
compile_features="-f full"
@@ -51,13 +54,23 @@ jobs:
fi
fi
if [[ "$compile_target" == "mips-"* || "$compile_target" == "mipsel-"* || "$compile_target" == "mips64-"* || "$compile_target" == "mips64el-"* ]]; then
sudo apt-get update -y && sudo apt-get install -y upx;
if [[ "$?" == "0" ]]; then
compile_compress="-u"
fi
compile_nightly="-n"
compile_features="-Z build-std=std,panic_abort,proc_macro"
fi
cd build
./build-release -t ${{ matrix.target }} $compile_features $compile_compress
./build-release -t ${{ matrix.platform.target }} $compile_features $compile_compress $compile_nightly $compile_features
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target }}
name: ${{ matrix.platform.target }}
path: build/release/*
build-unix:
+57 -20
View File
@@ -21,19 +21,54 @@ jobs:
strategy:
fail-fast: false
matrix:
target:
- i686-unknown-linux-musl
- x86_64-pc-windows-gnu
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
- armv7-unknown-linux-musleabihf
- armv7-unknown-linux-gnueabihf
- arm-unknown-linux-gnueabi
- arm-unknown-linux-gnueabihf
- arm-unknown-linux-musleabi
- arm-unknown-linux-musleabihf
- aarch64-unknown-linux-gnu
- aarch64-unknown-linux-musl
platform:
- target: i686-unknown-linux-musl
toolchain: stable
- target: x86_64-pc-windows-gnu
toolchain: stable
- target: x86_64-unknown-linux-gnu
toolchain: stable
- target: x86_64-unknown-linux-musl
toolchain: stable
- target: armv7-unknown-linux-musleabihf
toolchain: stable
- target: armv7-unknown-linux-gnueabihf
toolchain: stable
- target: arm-unknown-linux-gnueabi
toolchain: stable
- target: arm-unknown-linux-gnueabihf
toolchain: stable
- target: arm-unknown-linux-musleabi
toolchain: stable
- target: arm-unknown-linux-musleabihf
toolchain: stable
- target: aarch64-unknown-linux-gnu
toolchain: stable
- target: aarch64-unknown-linux-musl
toolchain: stable
- target: mips-unknown-linux-gnu
toolchain: nightly
- target: mips-unknown-linux-musl
toolchain: nightly
- target: mipsel-unknown-linux-gnu
toolchain: nightly
- target: mipsel-unknown-linux-musl
toolchain: nightly
# FIXME: ring doesn't support mips64 CPU
# - target: mips64-unknown-linux-gnuabi64
# toolchain: nightly
# - target: mips64-unknown-linux-muslabi64
# toolchain: nightly
- target: mips64el-unknown-linux-gnuabi64
toolchain: nightly
# FIXME: Link Error.
# = note: mips64el-linux-muslsf-gcc: error: crt1.o: No such file or directory
# mips64el-linux-muslsf-gcc: error: crti.o: No such file or directory
# mips64el-linux-muslsf-gcc: error: crtbegin.o: No such file or directory
# mips64el-linux-muslsf-gcc: error: crtend.o: No such file or directory
# mips64el-linux-muslsf-gcc: error: crtn.o: No such file or directory
# - target: mips64el-unknown-linux-muslabi64
# toolchain: nightly
steps:
- uses: actions/checkout@v4
@@ -41,18 +76,17 @@ jobs:
- name: Install Rust
run: |
rustup set profile minimal
rustup toolchain install stable
rustup default stable
rustup override set stable
rustup target add --toolchain stable ${{ matrix.target }}
rustup toolchain install ${{ matrix.platform.toolchain }}
rustup default ${{ matrix.platform.toolchain }}
rustup override set ${{ matrix.platform.toolchain }}
- name: Install cross
run: cargo install cross
- name: Build ${{ matrix.target }}
- name: Build ${{ matrix.platform.target }}
timeout-minutes: 120
run: |
compile_target=${{ matrix.target }}
compile_target=${{ matrix.platform.target }}
compile_features="-f full"
@@ -65,10 +99,13 @@ jobs:
if [[ "$?" == "0" ]]; then
compile_compress="-u"
fi
compile_nightly="-n"
compile_features="-Z build-std=std,panic_abort,proc_macro"
fi
cd build
./build-release -t ${{ matrix.target }} $compile_features $compile_compress
./build-release -t ${{ matrix.platform.target }} $compile_features $compile_compress $compile_nightly $compile_features
- name: Upload Github Assets
uses: softprops/action-gh-release@v2
+94 -61
View File
@@ -212,7 +212,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -229,7 +229,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -411,7 +411,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -642,9 +642,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "cpufeatures"
version = "0.2.15"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6"
checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3"
dependencies = [
"libc",
]
@@ -740,7 +740,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -828,7 +828,28 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
name = "dynosaur"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92fac44672fabad44990176319b9e94393f3a38b960b5ca2af6cd90f5ecd1497"
dependencies = [
"dynosaur_derive",
"trait-variant",
]
[[package]]
name = "dynosaur_derive"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16c187d1e575ef546d24f0fcd7701cc04abfe6b5e7e2758aabc450b99e835ac3"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.89",
]
[[package]]
@@ -888,7 +909,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -1119,7 +1140,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -1214,9 +1235,9 @@ dependencies = [
[[package]]
name = "h2"
version = "0.4.6"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205"
checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e"
dependencies = [
"atomic-waker",
"bytes",
@@ -1270,9 +1291,9 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.15.1"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
[[package]]
name = "heapless"
@@ -1663,7 +1684,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -1780,9 +1801,9 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
[[package]]
name = "itoa"
version = "1.0.11"
version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
checksum = "540654e97a3f4470a492cd30ff187bc95d89557a903a2bbf112e2fae98104ef2"
[[package]]
name = "jemalloc-sys"
@@ -1872,7 +1893,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
dependencies = [
"cfg-if",
"windows-targets 0.48.5",
"windows-targets 0.52.6",
]
[[package]]
@@ -1910,9 +1931,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
[[package]]
name = "litemap"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104"
[[package]]
name = "lock_api"
@@ -2191,7 +2212,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -2355,7 +2376,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -2386,7 +2407,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -2501,9 +2522,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.89"
version = "1.0.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
dependencies = [
"unicode-ident",
]
@@ -2570,7 +2591,7 @@ dependencies = [
"once_cell",
"socket2",
"tracing",
"windows-sys 0.52.0",
"windows-sys 0.59.0",
]
[[package]]
@@ -2840,9 +2861,9 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
[[package]]
name = "rustix"
version = "0.38.40"
version = "0.38.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0"
checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6"
dependencies = [
"bitflags 2.6.0",
"errno",
@@ -2853,9 +2874,9 @@ dependencies = [
[[package]]
name = "rustls"
version = "0.23.17"
version = "0.23.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e"
checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f"
dependencies = [
"log",
"once_cell",
@@ -2937,9 +2958,9 @@ dependencies = [
[[package]]
name = "schannel"
version = "0.1.26"
version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1"
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
dependencies = [
"windows-sys 0.59.0",
]
@@ -3045,7 +3066,7 @@ checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -3114,13 +3135,13 @@ version = "1.22.0"
dependencies = [
"aes",
"arc-swap",
"async-trait",
"base64 0.22.1",
"blake3",
"bloomfilter",
"byte_string",
"bytes",
"cfg-if",
"dynosaur",
"env_logger",
"futures",
"hickory-resolver",
@@ -3142,6 +3163,7 @@ dependencies = [
"thiserror 2.0.3",
"tokio",
"tokio-tfo",
"trait-variant",
"url",
"windows-sys 0.59.0",
]
@@ -3220,7 +3242,6 @@ name = "shadowsocks-service"
version = "1.22.0"
dependencies = [
"arc-swap",
"async-trait",
"brotli",
"bson",
"byte_string",
@@ -3261,6 +3282,7 @@ dependencies = [
"tokio",
"tokio-native-tls",
"tokio-rustls",
"trait-variant",
"tun2",
"webpki-roots",
"windows-sys 0.59.0",
@@ -3439,9 +3461,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.87"
version = "2.0.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e"
dependencies = [
"proc-macro2",
"quote",
@@ -3450,9 +3472,9 @@ dependencies = [
[[package]]
name = "sync_wrapper"
version = "1.0.1"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
dependencies = [
"futures-core",
]
@@ -3465,7 +3487,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -3526,7 +3548,7 @@ dependencies = [
"fastrand",
"once_cell",
"rustix",
"windows-sys 0.52.0",
"windows-sys 0.59.0",
]
[[package]]
@@ -3565,7 +3587,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -3576,7 +3598,7 @@ checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -3683,7 +3705,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -3763,7 +3785,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
@@ -3806,6 +3828,17 @@ dependencies = [
"tracing-log",
]
[[package]]
name = "trait-variant"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.89",
]
[[package]]
name = "try-lock"
version = "0.2.5"
@@ -3862,9 +3895,9 @@ checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893"
[[package]]
name = "unicode-ident"
version = "1.0.13"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
[[package]]
name = "unicode-normalization"
@@ -4011,7 +4044,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
"wasm-bindgen-shared",
]
@@ -4045,7 +4078,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -4113,7 +4146,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
"windows-sys 0.48.0",
"windows-sys 0.59.0",
]
[[package]]
@@ -4374,9 +4407,9 @@ checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546"
[[package]]
name = "yoke"
version = "0.7.4"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5"
checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
dependencies = [
"serde",
"stable_deref_trait",
@@ -4386,13 +4419,13 @@ dependencies = [
[[package]]
name = "yoke-derive"
version = "0.7.4"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
"synstructure",
]
@@ -4414,27 +4447,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
name = "zerofrom"
version = "0.1.4"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55"
checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e"
dependencies = [
"zerofrom-derive",
]
[[package]]
name = "zerofrom-derive"
version = "0.1.4"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5"
checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
"synstructure",
]
@@ -4463,7 +4496,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
"syn 2.0.89",
]
[[package]]
+1 -1
View File
@@ -9,7 +9,7 @@ documentation = "https://docs.rs/shadowsocks-rust"
keywords = ["shadowsocks", "proxy", "socks", "socks5", "firewall"]
license = "MIT"
edition = "2021"
rust-version = "1.74"
rust-version = "1.75"
[badges]
maintenance = { status = "passively-maintained" }
+26 -8
View File
@@ -1,13 +1,31 @@
[build]
dockerfile = "./docker/linux-cross/Dockerfile"
pre-build = [
"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable",
". $HOME/.cargo/env",
"cargo install --force --locked bindgen-cli && mv $HOME/.cargo/bin/bindgen /usr/bin",
"rm -rf $HOME/.cargo"
]
# dockerfile = "./docker/linux-cross/Dockerfile"
# pre-build = [
# "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable",
# ". $HOME/.cargo/env",
# "cargo install --force --locked bindgen-cli && mv $HOME/.cargo/bin/bindgen /usr/bin",
# "rm -rf $HOME/.cargo"
# ]
[build.env]
passthrough = ["RUSTFLAGS"]
# MIPS targets are dropped to Tier 3
# https://github.com/rust-lang/compiler-team/issues/648
# FIXME: build-std with sequence is supported only on git
# [target.mips-unknown-linux-gnu]
# build-std = ["std", "panic_abort", "proc_macro"]
# [target.mips-unknown-linux-musl]
# build-std = ["std", "panic_abort", "proc_macro"]
# [target.mips64-unknown-linux-gnuabi64]
# build-std = ["std", "panic_abort", "proc_macro"]
# [target.mips64-unknown-linux-muslabi64]
# build-std = ["std", "panic_abort", "proc_macro"]
# [target.mips64el-unknown-linux-gnuabi64]
# build-std = ["std", "panic_abort", "proc_macro"]
# [target.mips64el-unknown-linux-muslabi64]
# build-std = ["std", "panic_abort", "proc_macro"]
# [target.mipsel-unknown-linux-gnu]
# build-std = ["std", "panic_abort", "proc_macro"]
# [target.mipsel-unknown-linux-musl]
# build-std = ["std", "panic_abort", "proc_macro"]
+11 -11
View File
@@ -46,17 +46,6 @@ if [[ "${BUILD_TARGET}" == "" ]]; then
BUILD_TARGET=$HOST_TRIPLE
fi
TARGET_SUFFIX=""
if [[ "${BUILD_TARGET}" == *"-windows-"* ]]; then
TARGET_SUFFIX=".exe"
fi
TARGETS=("sslocal${TARGET_SUFFIX}" "ssserver${TARGET_SUFFIX}" "ssurl${TARGET_SUFFIX}" "ssmanager${TARGET_SUFFIX}" "ssservice${TARGET_SUFFIX}")
if [[ "${BUILD_FEATURES}" == *"winservice"* ]]; then
TARGETS+=("sswinservice${TARGET_SUFFIX}")
fi
RELEASE_FOLDER="${ROOT_DIR}/release"
RELEASE_PACKAGE_NAME="shadowsocks-v${VERSION}.${BUILD_TARGET}"
@@ -69,6 +58,17 @@ else
cd "${ROOT_DIR}/../target/release"
fi
TARGET_SUFFIX=""
if [[ "${BUILD_TARGET}" == *"-windows-"* ]]; then
TARGET_SUFFIX=".exe"
fi
TARGETS=("sslocal${TARGET_SUFFIX}" "ssserver${TARGET_SUFFIX}" "ssurl${TARGET_SUFFIX}" "ssmanager${TARGET_SUFFIX}" "ssservice${TARGET_SUFFIX}")
if [ -e "sswinservice${TARGET_SUFFIX}" ]; then
TARGETS+=("sswinservice${TARGET_SUFFIX}")
fi
if [[ "${BUILD_TARGET}" == *"-windows-"* ]]; then
# For Windows, use zip
@@ -48,7 +48,7 @@ $CompressParam = @{
LiteralPath = "sslocal.exe", "ssserver.exe", "ssurl.exe", "ssmanager.exe", "ssservice.exe"
DestinationPath = "${PackagePath}"
}
if ((${Features}).Contains("winservice")) {
if ([System.IO.File]::Exists("sswinservice.exe")) {
$CompressParam.LiteralPath += "sswinservice.exe"
}
Compress-Archive @CompressParam
+29 -7
View File
@@ -11,8 +11,10 @@ fi
targets=()
features=()
use_upx=false
use_nightly=false
cargo_flags=""
while getopts "t:f:u" opt; do
while getopts "t:f:unZ:" opt; do
case $opt in
t)
targets+=($OPTARG)
@@ -23,8 +25,14 @@ while getopts "t:f:u" opt; do
u)
use_upx=true
;;
n)
use_nightly=true
;;
Z)
cargo_flags="-Z $OPTARG"
;;
?)
echo "Usage: $(basename $0) [-t <target-triple>] [-f features] [-u]"
echo "Usage: $(basename $0) [-t <target-triple>] [-f features] [-u] [-n]"
;;
esac
done
@@ -47,6 +55,11 @@ if [[ "${use_upx}" = true ]]; then
fi
fi
build_command="cross"
if [[ "${use_nightly}" = true ]]; then
build_command="$build_command +nightly"
fi
function build() {
cd "$CUR_DIR/.."
@@ -59,14 +72,16 @@ function build() {
if [[ "${TARGET_FEATURES}" != "" ]]; then
echo "* Building ${TARGET} package ${VERSION} with features \"${TARGET_FEATURES}\" ..."
cross build --target "${TARGET}" \
$build_command build --target "${TARGET}" \
--features "${TARGET_FEATURES}" \
--release
--release \
${cargo_flags}
else
echo "* Building ${TARGET} package ${VERSION} ..."
cross build --target "${TARGET}" \
--release
$build_command build --target "${TARGET}" \
--release \
${cargo_flags}
fi
if [[ $? != "0" ]]; then
@@ -107,12 +122,19 @@ function build() {
echo "* Packaging ZIP in ${PKG_PATH} ..."
cd ${RELEASE_DIR}
sswinservice=""
if [ -e "sswinservice.exe" ]; then
sswinservice="sswinservice.exe"
fi
zip ${PKG_PATH} \
"sslocal.exe" \
"ssserver.exe" \
"ssurl.exe" \
"ssmanager.exe" \
"ssservice.exe"
"ssservice.exe" \
"${sswinservice}"
if [[ $? != "0" ]]; then
exit 1
@@ -1,130 +0,0 @@
#!/bin/bash
CUR_DIR=$( cd $( dirname $0 ) && pwd )
VERSION=$(grep -E '^version' ${CUR_DIR}/../Cargo.toml | awk '{print $3}' | sed 's/"//g')
## Disable macos ACL file
if [[ "$(uname -s)" == "Darwin" ]]; then
export COPYFILE_DISABLE=1
fi
targets=()
features=()
use_upx=false
while getopts "t:f:u" opt; do
case $opt in
t)
targets+=($OPTARG)
;;
f)
features+=($OPTARG)
;;
u)
use_upx=true
;;
?)
echo "Usage: $(basename $0) [-t <target-triple>] [-f features] [-u]"
;;
esac
done
features+=${EXTRA_FEATURES}
if [[ "${#targets[@]}" == "0" ]]; then
echo "Specifying compile target with -t <target-triple>"
exit 1
fi
if [[ "${use_upx}" = true ]]; then
if [[ -z "$upx" ]] && command -v upx &> /dev/null; then
upx="upx -9"
fi
if [[ "x$upx" == "x" ]]; then
echo "Couldn't find upx in PATH, consider specifying it with variable \$upx"
exit 1
fi
fi
function build() {
cd "$CUR_DIR/.."
TARGET=$1
RELEASE_DIR="target/${TARGET}/release"
TARGET_FEATURES="${features[@]}"
if [[ "${TARGET_FEATURES}" != "" ]]; then
echo "* Building ${TARGET} package ${VERSION} with features \"${TARGET_FEATURES}\" ..."
cargo zigbuild --target "${TARGET}" \
--features "${TARGET_FEATURES}" \
--release
else
echo "* Building ${TARGET} package ${VERSION} ..."
cargo zigbuild --target "${TARGET}" \
--release
fi
if [[ $? != "0" ]]; then
exit 1
fi
PKG_DIR="${CUR_DIR}/release"
mkdir -p "${PKG_DIR}"
if [[ "$TARGET" == *"-linux-"* ]]; then
PKG_NAME="shadowsocks-v${VERSION}.${TARGET}.tar.xz"
PKG_PATH="${PKG_DIR}/${PKG_NAME}"
cd ${RELEASE_DIR}
if [[ "${use_upx}" = true ]]; then
# Enable upx for MIPS.
$upx sslocal ssserver ssurl ssmanager ssservice #>/dev/null
fi
echo "* Packaging XZ in ${PKG_PATH} ..."
tar -cJf ${PKG_PATH} \
"sslocal" \
"ssserver" \
"ssurl" \
"ssmanager" \
"ssservice"
if [[ $? != "0" ]]; then
exit 1
fi
cd "${PKG_DIR}"
shasum -a 256 "${PKG_NAME}" > "${PKG_NAME}.sha256"
elif [[ "$TARGET" == *"-windows-"* ]]; then
PKG_NAME="shadowsocks-v${VERSION}.${TARGET}.zip"
PKG_PATH="${PKG_DIR}/${PKG_NAME}"
echo "* Packaging ZIP in ${PKG_PATH} ..."
cd ${RELEASE_DIR}
zip ${PKG_PATH} \
"sslocal.exe" \
"ssserver.exe" \
"ssurl.exe" \
"ssmanager.exe" \
"ssservice.exe"
if [[ $? != "0" ]]; then
exit 1
fi
cd "${PKG_DIR}"
shasum -a 256 "${PKG_NAME}" > "${PKG_NAME}.sha256"
fi
echo "* Done build package ${PKG_NAME}"
}
for target in "${targets[@]}"; do
build "$target";
done
@@ -9,7 +9,7 @@ documentation = "https://docs.rs/shadowsocks-service"
keywords = ["shadowsocks", "proxy", "socks", "socks5", "firewall"]
license = "MIT"
edition = "2021"
rust-version = "1.74"
rust-version = "1.75"
[badges]
maintenance = { status = "passively-maintained" }
@@ -171,7 +171,7 @@ tokio-rustls = { version = "0.26", optional = true, default-features = false, fe
"ring",
] }
rustls-native-certs = { version = "0.8", optional = true }
async-trait = "0.1"
trait-variant = "0.1"
socket2 = { version = "0.5", features = ["all"] }
libc = "~0.2.141"
@@ -5,7 +5,6 @@ use std::{
net::{Ipv4Addr, Ipv6Addr, SocketAddr},
};
use async_trait::async_trait;
use futures::future;
use hickory_resolver::proto::{
op::{Message, Query},
@@ -104,7 +103,6 @@ impl DnsResolver {
}
}
#[async_trait]
impl DnsResolve for DnsResolver {
async fn resolve(&self, host: &str, port: u16) -> io::Result<Vec<SocketAddr>> {
let mut name = Name::from_utf8(host)?;
@@ -9,7 +9,6 @@ use std::{
time::Duration,
};
use async_trait::async_trait;
use bytes::Bytes;
use futures::future;
use log::{debug, error, trace, warn};
@@ -35,10 +34,7 @@ use crate::{
};
/// Writer for sending packets back to client
///
/// Currently it requires `async-trait` for `async fn` in trait, which will allocate a `Box`ed `Future` every call of `send_to`.
/// This performance issue could be solved when `generic_associated_types` and `generic_associated_types` are stabilized.
#[async_trait]
#[trait_variant::make(Send)]
pub trait UdpInboundWrite {
/// Sends packet `data` received from `remote_addr` back to `peer_addr`
async fn send_to(&self, peer_addr: SocketAddr, remote_addr: &Address, data: &[u8]) -> io::Result<()>;
@@ -8,14 +8,12 @@ use std::{
task::{Context, Poll},
};
use async_trait::async_trait;
use shadowsocks::net::AcceptOpts;
use tokio::net::TcpListener;
use crate::config::RedirType;
/// Extension function for `TcpListener` for setting extra options before `bind()`
#[async_trait]
pub trait TcpListenerRedirExt {
// Create a TcpListener for transparent proxy
//
@@ -3,7 +3,6 @@ use std::{
net::SocketAddr,
};
use async_trait::async_trait;
use log::warn;
use shadowsocks::net::{is_dual_stack_addr, set_tcp_fastopen, AcceptOpts};
use socket2::Protocol;
@@ -17,7 +16,6 @@ use crate::{
},
};
#[async_trait]
impl TcpListenerRedirExt for TcpListener {
async fn bind_redir(ty: RedirType, addr: SocketAddr, accept_opts: AcceptOpts) -> io::Result<TcpListener> {
match ty {
@@ -5,7 +5,6 @@ use std::{
os::unix::io::AsRawFd,
};
use async_trait::async_trait;
use log::warn;
use shadowsocks::net::{is_dual_stack_addr, set_tcp_fastopen, AcceptOpts};
use socket2::SockAddr;
@@ -19,7 +18,6 @@ use crate::{
},
};
#[async_trait]
impl TcpListenerRedirExt for TcpListener {
async fn bind_redir(ty: RedirType, addr: SocketAddr, accept_opts: AcceptOpts) -> io::Result<TcpListener> {
match ty {
@@ -3,7 +3,6 @@ use std::{
net::SocketAddr,
};
use async_trait::async_trait;
use shadowsocks::net::AcceptOpts;
use tokio::net::{TcpListener, TcpStream};
@@ -12,7 +11,6 @@ use crate::{
local::redir::redir_ext::{TcpListenerRedirExt, TcpStreamRedirExt},
};
#[async_trait]
impl TcpListenerRedirExt for TcpListener {
async fn bind_redir(_ty: RedirType, _addr: SocketAddr, _accept_opts: AcceptOpts) -> io::Result<TcpListener> {
let err = Error::new(
@@ -7,7 +7,6 @@ use std::{
time::Duration,
};
use async_trait::async_trait;
use log::{debug, error, info, trace, warn};
use lru_time_cache::LruCache;
use shadowsocks::{
@@ -91,7 +90,6 @@ impl UdpRedirInboundWriter {
}
}
#[async_trait]
impl UdpInboundWrite for UdpRedirInboundWriter {
async fn send_to(&self, mut peer_addr: SocketAddr, remote_addr: &Address, data: &[u8]) -> io::Result<()> {
// If IPv6 Transparent Proxy is supported on the current platform,
@@ -7,7 +7,6 @@ use std::{
time::Duration,
};
use async_trait::async_trait;
use byte_string::ByteStr;
use bytes::{BufMut, BytesMut};
use log::{debug, error, info, trace};
@@ -96,7 +95,6 @@ struct Socks5UdpInboundWriter {
inbound: Arc<UdpSocket>,
}
#[async_trait]
impl UdpInboundWrite for Socks5UdpInboundWriter {
async fn send_to(&self, peer_addr: SocketAddr, remote_addr: &Address, data: &[u8]) -> io::Result<()> {
let remote_addr = match remote_addr {
@@ -5,7 +5,6 @@ use std::{
time::Duration,
};
use async_trait::async_trait;
use bytes::{BufMut, BytesMut};
use etherparse::PacketBuilder;
use log::debug;
@@ -93,7 +92,6 @@ impl UdpTunInboundWriter {
}
}
#[async_trait]
impl UdpInboundWrite for UdpTunInboundWriter {
async fn send_to(&self, peer_addr: SocketAddr, remote_addr: &Address, data: &[u8]) -> io::Result<()> {
let addr = match *remote_addr {
@@ -2,7 +2,6 @@
use std::{io, net::SocketAddr, sync::Arc, time::Duration};
use async_trait::async_trait;
use log::{debug, error, info};
use shadowsocks::{
relay::{socks5::Address, udprelay::MAXIMUM_UDP_PAYLOAD_SIZE},
@@ -87,7 +86,6 @@ struct TunnelUdpInboundWriter {
inbound: Arc<UdpSocket>,
}
#[async_trait]
impl UdpInboundWrite for TunnelUdpInboundWriter {
async fn send_to(&self, peer_addr: SocketAddr, _remote_addr: &Address, data: &[u8]) -> io::Result<()> {
self.inbound.send_to(data, peer_addr).await.map(|_| ())
@@ -9,7 +9,7 @@ documentation = "https://docs.rs/shadowsocks-core"
keywords = ["shadowsocks", "proxy", "socks", "socks5", "firewall"]
license = "MIT"
edition = "2021"
rust-version = "1.74"
rust-version = "1.75"
[badges]
maintenance = { status = "passively-maintained" }
@@ -71,7 +71,8 @@ serde_json = "1.0"
percent-encoding = "2.1"
futures = "0.3"
async-trait = "0.1"
trait-variant = "0.1"
dynosaur = "0.1.2"
socket2 = { version = "0.5", features = ["all"] }
tokio = { version = "1.9.0", features = [
@@ -11,7 +11,6 @@ use std::{
#[cfg(feature = "hickory-dns")]
use arc_swap::ArcSwap;
use async_trait::async_trait;
use cfg_if::cfg_if;
#[cfg(feature = "hickory-dns")]
use hickory_resolver::config::ResolverConfig;
@@ -31,12 +30,17 @@ use crate::net::ConnectOpts;
use super::hickory_dns_resolver::DnsResolver as HickoryDnsResolver;
/// Abstract DNS resolver
#[async_trait]
#[trait_variant::make(Send)]
#[dynosaur::dynosaur(DynDnsResolve)]
pub trait DnsResolve {
/// Resolves `addr:port` to a list of `SocketAddr`
async fn resolve(&self, addr: &str, port: u16) -> io::Result<Vec<SocketAddr>>;
}
// Equivalent to (dyn DnsResolve + Send + Sync)
unsafe impl Send for DynDnsResolve<'_> {}
unsafe impl Sync for DynDnsResolve<'_> {}
#[cfg(feature = "hickory-dns")]
#[derive(Debug)]
pub struct HickoryDnsSystemResolver {
@@ -63,7 +67,7 @@ pub enum DnsResolver {
#[cfg(feature = "hickory-dns")]
HickoryDns(HickoryDnsResolver),
/// Customized Resolver
Custom(Box<dyn DnsResolve + Send + Sync>),
Custom(Box<DynDnsResolve<'static>>),
}
impl Default for DnsResolver {
@@ -282,7 +286,7 @@ impl DnsResolver {
where
R: DnsResolve + Send + Sync + 'static,
{
DnsResolver::Custom(Box::new(custom) as Box<dyn DnsResolve + Send + Sync>)
DnsResolver::Custom(DynDnsResolve::boxed(custom))
}
/// Resolve address into `SocketAddr`s
+1 -2
View File
@@ -8,8 +8,7 @@ import (
)
type ConnectionManager interface {
Start() error
Close() error
Lifecycle
NewConnection(ctx context.Context, this N.Dialer, conn net.Conn, metadata InboundContext, onClose N.CloseHandlerFunc)
NewPacketConnection(ctx context.Context, this N.Dialer, conn N.PacketConn, metadata InboundContext, onClose N.CloseHandlerFunc)
}
+5 -5
View File
@@ -336,11 +336,11 @@ func (s *Box) preStart() error {
if err != nil {
return err
}
err = adapter.Start(adapter.StartStateInitialize, s.network, s.router, s.outbound, s.inbound, s.endpoint)
err = adapter.Start(adapter.StartStateInitialize, s.network, s.connection, s.router, s.outbound, s.inbound, s.endpoint)
if err != nil {
return err
}
err = adapter.Start(adapter.StartStateStart, s.outbound, s.network, s.router)
err = adapter.Start(adapter.StartStateStart, s.outbound, s.network, s.connection, s.router)
if err != nil {
return err
}
@@ -364,7 +364,7 @@ func (s *Box) start() error {
if err != nil {
return err
}
err = adapter.Start(adapter.StartStatePostStart, s.outbound, s.network, s.router, s.inbound, s.endpoint)
err = adapter.Start(adapter.StartStatePostStart, s.outbound, s.network, s.connection, s.router, s.inbound, s.endpoint)
if err != nil {
return err
}
@@ -372,7 +372,7 @@ func (s *Box) start() error {
if err != nil {
return err
}
err = adapter.Start(adapter.StartStateStarted, s.network, s.router, s.outbound, s.inbound, s.endpoint)
err = adapter.Start(adapter.StartStateStarted, s.network, s.connection, s.router, s.outbound, s.inbound, s.endpoint)
if err != nil {
return err
}
@@ -391,7 +391,7 @@ func (s *Box) Close() error {
close(s.done)
}
err := common.Close(
s.inbound, s.outbound, s.router, s.network,
s.inbound, s.outbound, s.router, s.connection, s.network,
)
for _, lifecycleService := range s.services {
err = E.Append(err, lifecycleService.Close(), func(err error) error {
+1 -1
View File
@@ -2,7 +2,7 @@
icon: material/alert-decagram
---
#### 1.11.0-alpha.23
#### 1.11.0-alpha.24
* Fixes and improvements
+15 -8
View File
@@ -34,7 +34,10 @@ func NewConnectionManager(logger logger.ContextLogger) *ConnectionManager {
}
}
func (m *ConnectionManager) Start() error {
func (m *ConnectionManager) Start(stage adapter.StartStage) error {
if stage != adapter.StartStateInitialize {
return nil
}
return m.monitor.Start()
}
@@ -75,6 +78,7 @@ func (m *ConnectionManager) NewConnection(ctx context.Context, this N.Dialer, co
func (m *ConnectionManager) connectionCopy(ctx context.Context, source io.Reader, destination io.Writer, direction bool, done *atomic.Bool, onClose N.CloseHandlerFunc) {
originSource := source
originDestination := destination
var readCounters, writeCounters []N.CountFunc
for {
source, readCounters = N.UnwrapCountReader(source, readCounters)
@@ -92,7 +96,7 @@ func (m *ConnectionManager) connectionCopy(ctx context.Context, source io.Reader
onClose(err)
}
}
common.Close(source, destination)
common.Close(originSource, originDestination)
return
}
for _, counter := range readCounters {
@@ -108,17 +112,20 @@ func (m *ConnectionManager) connectionCopy(ctx context.Context, source io.Reader
}
_, err := bufio.CopyWithCounters(destination, source, originSource, readCounters, writeCounters)
if err != nil {
common.Close(destination, source)
} else if _, dstDuplex := destination.(N.WriteCloser); dstDuplex {
N.CloseWrite(destination)
common.Close(originSource, originDestination)
} else if duplexDst, isDuplex := destination.(N.WriteCloser); isDuplex {
err = duplexDst.CloseWrite()
if err != nil {
common.Close(originSource, originDestination)
}
} else {
common.Close(destination)
common.Close(originDestination)
}
if done.Swap(true) {
if onClose != nil {
onClose(err)
}
common.Close(source, destination)
common.Close(originSource, originDestination)
}
if !direction {
if err == nil {
@@ -220,10 +227,10 @@ func (m *ConnectionManager) NewPacketConnection(ctx context.Context, this N.Dial
ctx, conn = canceler.NewPacketConn(ctx, conn, udpTimeout)
}
destination := bufio.NewPacketConn(remotePacketConn)
var done atomic.Bool
if ctx.Done() != nil {
onClose = N.AppendClose(onClose, m.monitor.Add(ctx, conn))
}
var done atomic.Bool
go m.packetConnectionCopy(ctx, conn, destination, false, &done, onClose)
go m.packetConnectionCopy(ctx, destination, conn, true, &done, onClose)
}
+4
View File
@@ -68,6 +68,9 @@ func (m *ConnectionMonitor) Close() error {
m.access.Lock()
defer m.access.Unlock()
close(m.reloadChan)
for element := m.connections.Front(); element != nil; element = element.Next() {
element.Value.closer.Close()
}
return nil
}
@@ -96,6 +99,7 @@ func (m *ConnectionMonitor) monitor() {
if len(selectCases) < m.connections.Len()+1 {
selectCases = make([]reflect.SelectCase, 0, m.connections.Len()+1)
}
elements = elements[:0]
selectCases = selectCases[:1]
selectCases[0] = rootCase
for element := m.connections.Front(); element != nil; element = element.Next() {
+1 -1
View File
@@ -1,6 +1,6 @@
include $(TOPDIR)/rules.mk
PKG_VERSION:=1.13.0
PKG_VERSION:=1.13.1
LUCI_TITLE:=LuCI Support for mihomo
LUCI_DEPENDS:=+luci-base +mihomo
@@ -163,7 +163,8 @@ domain:store.steampowered.com'
config shunt_rules 'AIGC'
option remarks 'AIGC'
option domain_list 'geosite:category-ai-chat-!cn'
option domain_list 'geosite:category-ai-chat-!cn
domain:apple-relay.apple.com'
config shunt_rules 'Streaming'
option remarks 'Streaming'
@@ -2,6 +2,7 @@ engage.cloudflareclient.com
github.com
bing.com
c.mi.com
apple-relay.apple.com
#google
googleapis.cn
+5 -5
View File
@@ -1,13 +1,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=mihomo
PKG_RELEASE:=3
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/MetaCubeX/mihomo.git
PKG_SOURCE_DATE:=2024-11-14
PKG_SOURCE_VERSION:=de19f927e86573a7a97159e3b9925049f06d4563
PKG_MIRROR_HASH:=931d397995b2da9e97f3f050d4650fa9013980d6c523df40bca3b58822a42409
PKG_SOURCE_DATE:=2024-11-24
PKG_SOURCE_VERSION:=eb985b002e5aa61c4c2208646f33180c4fc938f9
PKG_MIRROR_HASH:=058ca55e42cbebecfa0b65b5b8f792bfba8c5240cfa43c44a017d0bdab498230
PKG_LICENSE:=MIT
PKG_MAINTAINER:=Joseph Mory <morytyann@gmail.com>
@@ -16,7 +16,7 @@ PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_PARALLEL:=1
PKG_BUILD_FLAGS:=no-mips16
PKG_BUILD_VERSION:=alpha-de19f92
PKG_BUILD_VERSION:=alpha-eb985b0
PKG_BUILD_TIME:=$(shell date -u -Iseconds)
GO_PKG:=github.com/metacubex/mihomo
+6
View File
@@ -159,8 +159,14 @@ start_service() {
cp -f "$profile_file" "$RUN_PROFILE_PATH"
elif [[ "$profile" == "subscription:"* ]]; then
local subscription_section; subscription_section="${profile/subscription:/}"
local subscription_name subscription_prefer
config_get subscription_name "$subscription_section" "name"
config_get subscription_prefer "$subscription_section" "prefer" "remote"
log "Use Subscription: $subscription_name."
local subscription_file; subscription_file="$SUBSCRIPTIONS_DIR/$subscription_section.yaml"
if [ "$subscription_prefer" == "remote" ] || [[ "$subscription_prefer" == "local" && ! -f "$subscription_file" ]]; then
update_subscription "$subscription_section"
fi
if [ ! -f "$subscription_file" ]; then
log "Subscription file not found."
log "Exiting..."
+2 -2
View File
@@ -30,13 +30,13 @@ define Download/geosite
HASH:=f04433837b88a3f49d7cd6517c91e8f5de4e4496f3d88ef3b7c6be5bb63f4c6f
endef
GEOSITE_IRAN_VER:=202411180037
GEOSITE_IRAN_VER:=202411250037
GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER)
define Download/geosite-ir
URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/
URL_FILE:=iran.dat
FILE:=$(GEOSITE_IRAN_FILE)
HASH:=f0a632368bdfd3a50745bbe4e30e8971508f98911ea05d4a7bb4e6f77ce6a225
HASH:=2062e9541a5cf34368265e1aac57b5f750ceb9c925a141002db735000602801f
endef
define Package/v2ray-geodata/template
+3 -3
View File
@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=v2rayA
PKG_VERSION:=2.2.6.2
PKG_VERSION:=2.2.6.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/v2rayA/v2rayA/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=3086649d78699f52f21e6cd79e9fe1760f9dd07f8be3507023ec7cdf429a4972
PKG_HASH:=62add8605c42e8e91b5fae22e3b05d146cdeea8fec44089fc1bf0ae29fc76dc0
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)/service
PKG_LICENSE:=AGPL-3.0-only
@@ -60,7 +60,7 @@ define Download/v2raya-web
URL:=https://github.com/v2rayA/v2rayA/releases/download/v$(PKG_VERSION)/
URL_FILE:=web.tar.gz
FILE:=$(WEB_FILE)
HASH:=611cbc151c2f652110987b2c3728ec6920ca80a72fd1dc56ef6f59315348577b
HASH:=e8bca04deaec72e3323310bc114fa4936474adcbb6638ec2e31dbdf88beabdae
endef
define Build/Prepare
@@ -25,6 +25,10 @@ namespace ServiceLib.Handler
await SetTaskLinux();
}
}
else if(Utils.IsOSX())
{
//TODO
}
return true;
}
@@ -23,7 +23,7 @@ namespace ServiceLib.Handler
Environment.SetEnvironmentVariable("V2RAY_LOCATION_ASSET", Utils.GetBinPath(""), EnvironmentVariableTarget.Process);
Environment.SetEnvironmentVariable("XRAY_LOCATION_ASSET", Utils.GetBinPath(""), EnvironmentVariableTarget.Process);
if (Utils.IsLinux())
if (Utils.IsLinux() || Utils.IsOSX())
{
var coreInfo = CoreInfoHandler.Instance.GetCoreInfo();
foreach (var it in coreInfo)
@@ -258,7 +258,7 @@ namespace ServiceLib.Handler
{
return _config.TunModeItem.EnableTun
&& eCoreType == ECoreType.sing_box
&& Utils.IsLinux()
&& (Utils.IsLinux() || Utils.IsOSX())
//&& _config.TunModeItem.LinuxSudoPwd.IsNotEmpty()
;
}
@@ -42,6 +42,8 @@
DownloadUrlWinArm64 = Global.NUrl + "/download/{0}/v2rayN-windows-arm64.zip",
DownloadUrlLinux64 = Global.NUrl + "/download/{0}/v2rayN-linux-64.zip",
DownloadUrlLinuxArm64 = Global.NUrl + "/download/{0}/v2rayN-linux-arm64.zip",
DownloadUrlOSX64 = Global.NUrl + "/download/{0}/v2rayN-macos-64.zip",
DownloadUrlOSXArm64 = Global.NUrl + "/download/{0}/v2rayN-macos-arm64.zip",
});
_coreInfo.Add(new CoreInfo
@@ -79,6 +81,8 @@
DownloadUrlWinArm64 = Global.XrayCoreUrl + "/download/{0}/Xray-windows-arm64-v8a.zip",
DownloadUrlLinux64 = Global.XrayCoreUrl + "/download/{0}/Xray-linux-64.zip",
DownloadUrlLinuxArm64 = Global.XrayCoreUrl + "/download/{0}/Xray-linux-arm64-v8a.zip",
DownloadUrlOSX64 = Global.XrayCoreUrl + "/download/{0}/Xray-macos-64.zip",
DownloadUrlOSXArm64 = Global.XrayCoreUrl + "/download/{0}/Xray-macos-arm64-v8a.zip",
Match = "Xray",
VersionArg = "-version",
RedirectInfo = true,
@@ -95,6 +99,8 @@
DownloadUrlWinArm64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-windows-arm64-{0}.zip",
DownloadUrlLinux64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-linux-amd64-compatible-{0}.gz",
DownloadUrlLinuxArm64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-linux-arm64-{0}.gz",
DownloadUrlOSX64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-darwin-amd64-compatible-{0}.gz",
DownloadUrlOSXArm64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-darwin-arm64-{0}.gz",
Match = "Mihomo",
VersionArg = "-v",
RedirectInfo = true,
@@ -140,6 +146,8 @@
DownloadUrlWinArm64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-windows-arm64.zip",
DownloadUrlLinux64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-linux-amd64.tar.gz",
DownloadUrlLinuxArm64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-linux-arm64.tar.gz",
DownloadUrlOSX64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-darwin-amd64.tar.gz",
DownloadUrlOSXArm64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-darwin-arm64.tar.gz",
Match = "sing-box",
VersionArg = "version",
});
@@ -12,6 +12,8 @@
public string? DownloadUrlWinArm64 { get; set; }
public string? DownloadUrlLinux64 { get; set; }
public string? DownloadUrlLinuxArm64 { get; set; }
public string? DownloadUrlOSX64 { get; set; }
public string? DownloadUrlOSXArm64 { get; set; }
public string? Match { get; set; }
public string? VersionArg { get; set; }
public bool RedirectInfo { get; set; }
@@ -450,6 +450,15 @@ namespace ServiceLib.Services
_ => null,
};
}
else if (Utils.IsOSX())
{
return RuntimeInformation.ProcessArchitecture switch
{
Architecture.Arm64 => coreInfo?.DownloadUrlOSXArm64,
Architecture.X64 => coreInfo?.DownloadUrlOSX64,
_ => null,
};
}
return null;
}
@@ -262,7 +262,7 @@ namespace ServiceLib.ViewModels
FileManager.ZipExtractToFile(fileName, toPath, _config.GuiItem.IgnoreGeoUpdateCore ? "geo" : "");
}
if (Utils.IsLinux())
if (Utils.IsLinux() || Utils.IsOSX())
{
var filesList = (new DirectoryInfo(toPath)).GetFiles().Select(u => u.FullName).ToList();
foreach (var file in filesList)
@@ -437,6 +437,11 @@ namespace ServiceLib.ViewModels
{
return _config.TunModeItem.LinuxSudoPwd.IsNotEmpty();
}
else if (Utils.IsOSX())
{
//TODO
return false;
}
return false;
}
@@ -169,6 +169,12 @@ namespace v2rayN.Desktop.Views
{
tabSystemproxy.IsVisible = false;
}
if (Utils.IsOSX())
{
togAutoRun.IsVisible = false;
//TODO
}
}
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)
@@ -202,7 +208,7 @@ namespace v2rayN.Desktop.Views
{
return lstFonts;
}
else if (Utils.IsLinux())
else if (Utils.IsLinux() || Utils.IsOSX())
{
var result = await Utils.GetLinuxFontFamily("zh");
if (result.IsNullOrEmpty())
+25 -10
View File
@@ -1,6 +1,7 @@
package router_test
import (
"fmt"
"os"
"path/filepath"
"testing"
@@ -13,16 +14,25 @@ import (
"google.golang.org/protobuf/proto"
)
func init() {
wd, err := os.Getwd()
common.Must(err)
func getAssetPath(file string) (string, error) {
path := platform.GetAssetLocation(file)
_, err := os.Stat(path)
if os.IsNotExist(err) {
path := filepath.Join("..", "..", "resources", file)
_, err := os.Stat(path)
if os.IsNotExist(err) {
return "", fmt.Errorf("can't find %s in standard asset locations or {project_root}/resources", file)
}
if err != nil {
return "", fmt.Errorf("can't stat %s: %v", path, err)
}
return path, nil
}
if err != nil {
return "", fmt.Errorf("can't stat %s: %v", path, err)
}
if _, err := os.Stat(platform.GetAssetLocation("geoip.dat")); err != nil && os.IsNotExist(err) {
common.Must(filesystem.CopyFile(platform.GetAssetLocation("geoip.dat"), filepath.Join(wd, "..", "..", "resources", "geoip.dat")))
}
if _, err := os.Stat(platform.GetAssetLocation("geosite.dat")); err != nil && os.IsNotExist(err) {
common.Must(filesystem.CopyFile(platform.GetAssetLocation("geosite.dat"), filepath.Join(wd, "..", "..", "resources", "geosite.dat")))
}
return path, nil
}
func TestGeoIPMatcherContainer(t *testing.T) {
@@ -217,10 +227,15 @@ func TestGeoIPMatcher6US(t *testing.T) {
}
func loadGeoIP(country string) ([]*router.CIDR, error) {
geoipBytes, err := filesystem.ReadAsset("geoip.dat")
path, err := getAssetPath("geoip.dat")
if err != nil {
return nil, err
}
geoipBytes, err := filesystem.ReadFile(path)
if err != nil {
return nil, err
}
var geoipList router.GeoIPList
if err := proto.Unmarshal(geoipBytes, &geoipList); err != nil {
return nil, err
+6 -16
View File
@@ -1,8 +1,6 @@
package router_test
import (
"os"
"path/filepath"
"strconv"
"testing"
@@ -10,7 +8,6 @@ import (
"github.com/xtls/xray-core/common"
"github.com/xtls/xray-core/common/errors"
"github.com/xtls/xray-core/common/net"
"github.com/xtls/xray-core/common/platform"
"github.com/xtls/xray-core/common/platform/filesystem"
"github.com/xtls/xray-core/common/protocol"
"github.com/xtls/xray-core/common/protocol/http"
@@ -20,18 +17,6 @@ import (
"google.golang.org/protobuf/proto"
)
func init() {
wd, err := os.Getwd()
common.Must(err)
if _, err := os.Stat(platform.GetAssetLocation("geoip.dat")); err != nil && os.IsNotExist(err) {
common.Must(filesystem.CopyFile(platform.GetAssetLocation("geoip.dat"), filepath.Join(wd, "..", "..", "release", "config", "geoip.dat")))
}
if _, err := os.Stat(platform.GetAssetLocation("geosite.dat")); err != nil && os.IsNotExist(err) {
common.Must(filesystem.CopyFile(platform.GetAssetLocation("geosite.dat"), filepath.Join(wd, "..", "..", "release", "config", "geosite.dat")))
}
}
func withBackground() routing.Context {
return &routing_session.Context{}
}
@@ -316,10 +301,15 @@ func TestRoutingRule(t *testing.T) {
}
func loadGeoSite(country string) ([]*Domain, error) {
geositeBytes, err := filesystem.ReadAsset("geosite.dat")
path, err := getAssetPath("geosite.dat")
if err != nil {
return nil, err
}
geositeBytes, err := filesystem.ReadFile(path)
if err != nil {
return nil, err
}
var geositeList GeoSiteList
if err := proto.Unmarshal(geositeBytes, &geositeList); err != nil {
return nil, err
+1 -1
View File
@@ -17,7 +17,7 @@ require (
github.com/sagernet/sing v0.5.1
github.com/sagernet/sing-shadowsocks v0.2.7
github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771
github.com/stretchr/testify v1.9.0
github.com/stretchr/testify v1.10.0
github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e
github.com/vishvananda/netlink v1.3.0
github.com/xtls/reality v0.0.0-20240712055506-48f0b2d5ed6d
+2 -2
View File
@@ -62,8 +62,8 @@ github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771 h1:emzAzMZ1
github.com/seiflotfy/cuckoofilter v0.0.0-20240715131351-a2f2c23f1771/go.mod h1:bR6DqgcAl1zTcOX8/pE2Qkj9XO00eCNqmKb7lXP8EAg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e h1:5QefA066A1tF8gHIiADmOVOV5LS43gt3ONnlEl3xkwI=
github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e/go.mod h1:5t19P9LBIrNamL6AcMQOncg/r10y3Pc01AbHeMhwlpU=
github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk=
+2 -2
View File
@@ -491,12 +491,12 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s
rawInput = (*bytes.Buffer)(unsafe.Pointer(p + r.Offset))
}
} else {
return errors.New(account.ID.String() + " is not able to use " + requestAddons.Flow).AtWarning()
return errors.New("account " + account.ID.String() + " is not able to use the flow " + requestAddons.Flow).AtWarning()
}
case "":
inbound.CanSpliceCopy = 3
if account.Flow == vless.XRV && (request.Command == protocol.RequestCommandTCP || isMuxAndNotXUDP(request, first)) {
return errors.New(account.ID.String() + " is not able to use \"\". Note that the pure TLS proxy has certain TLS in TLS characters.").AtWarning()
return errors.New("account " + account.ID.String() + " is rejected since the client flow is empty. Note that the pure TLS proxy has certain TLS in TLS characters.").AtWarning()
}
default:
return errors.New("unknown request flow " + requestAddons.Flow).AtWarning()
+2
View File
@@ -96,6 +96,7 @@ func InitializeServerConfig(config *core.Config) (*exec.Cmd, error) {
var (
testBinaryPath string
testBinaryCleanFn func()
testBinaryPathGen sync.Once
)
@@ -108,6 +109,7 @@ func genTestBinaryPath() {
return err
}
tempDir = dir
testBinaryCleanFn = func() { os.RemoveAll(dir) }
return nil
}))
file := filepath.Join(tempDir, "xray.test")
+12
View File
@@ -0,0 +1,12 @@
package scenarios
import (
"testing"
)
func TestMain(m *testing.M) {
genTestBinaryPath()
defer testBinaryCleanFn()
m.Run()
}
+1 -1
View File
@@ -5,7 +5,7 @@
"server": "http2.github.io",
"server_sni": "",
"server_port": 443,
"timeout": 0,
"connect_timeout": 2000,
"username": "username",
"password": "password",
"insecure_mode": false,
+1 -1
View File
@@ -5,7 +5,7 @@
"server": "http2.github.io",
"server_sni": "",
"server_port": 443,
"timeout": 0,
"connect_timeout": 2000,
"username": "username",
"password": "password",
"insecure_mode": false,
+9 -2
View File
@@ -49,6 +49,9 @@ bool ReadConfig() {
config_impl->Read("doh_url", &FLAGS_doh_url);
config_impl->Read("dot_host", &FLAGS_dot_host);
if (config_impl->HasKey<int32_t>("timeout")) {
config_impl->Read("timeout", &FLAGS_connect_timeout);
}
config_impl->Read("connect_timeout", &FLAGS_connect_timeout);
config_impl->Read("tcp_nodelay", &FLAGS_tcp_nodelay);
config_impl->Read("limit_rate", &FLAGS_limit_rate);
@@ -123,7 +126,7 @@ bool SaveConfig() {
static_cast<void>(config_impl->Delete("threads"));
all_fields_written &= config_impl->Write("doh_url", FLAGS_doh_url);
all_fields_written &= config_impl->Write("dot_host", FLAGS_dot_host);
all_fields_written &= config_impl->Write("timeout", FLAGS_connect_timeout);
static_cast<void>(config_impl->Delete("timeout"));
all_fields_written &= config_impl->Write("connect_timeout", FLAGS_connect_timeout);
all_fields_written &= config_impl->Write("tcp_nodelay", FLAGS_tcp_nodelay);
all_fields_written &= config_impl->Write("limit_rate", FLAGS_limit_rate);
@@ -173,7 +176,7 @@ std::string ValidateConfig() {
auto doh_url = absl::GetFlag(FLAGS_doh_url);
auto dot_host = absl::GetFlag(FLAGS_dot_host);
// auto limit_rate = absl::GetFlag(FLAGS_limit_rate);
// auto timeout = absl::GetFlag(FLAGS_connect_timeout);
auto timeout = absl::GetFlag(FLAGS_connect_timeout);
// TODO validate other configurations as well
@@ -231,6 +234,10 @@ std::string ValidateConfig() {
}
}
if (timeout < 0) {
err_msg << ",Invalid Connect Timeout: " << timeout;
}
auto ret = err_msg.str();
if (ret.empty()) {
return ret;
+18 -11
View File
@@ -39,16 +39,12 @@ class ssl_stream : public stream {
bool https_fallback,
SSL_CTX* ssl_ctx)
: stream(io_context, host_ips, host_sni, port, channel),
https_fallback_(https_fallback),
enable_tls_(true),
ssl_socket_(SSLSocket::Create(ssl_socket_data_index,
ssl_client_session_cache,
&io_context,
&socket_,
ssl_ctx,
https_fallback,
host_sni,
port)) {}
ssl_socket_data_index_(ssl_socket_data_index),
ssl_client_session_cache_(ssl_client_session_cache),
ssl_ctx_(ssl_ctx),
https_fallback_(https_fallback),
ssl_socket_(nullptr) {}
~ssl_stream() override {}
@@ -72,7 +68,11 @@ class ssl_stream : public stream {
void s_close(asio::error_code& ec) override {
ec = asio::error_code();
if (ssl_socket_) {
ssl_socket_->Disconnect();
} else {
stream::s_close(ec);
}
}
void on_async_connected(Channel* channel, asio::error_code ec) override {
@@ -81,6 +81,8 @@ class ssl_stream : public stream {
return;
}
scoped_refptr<stream> self(this);
ssl_socket_ = SSLSocket::Create(ssl_socket_data_index_, ssl_client_session_cache_, &io_context_, &socket_, ssl_ctx_,
https_fallback_, host_sni_, port_);
ssl_socket_->Connect([this, channel, self](int rv) {
if (closed_) {
DCHECK(!user_connect_callback_);
@@ -89,7 +91,7 @@ class ssl_stream : public stream {
asio::error_code ec;
if (rv < 0) {
ec = asio::error::connection_refused;
on_async_connected(channel, ec);
stream::on_async_connected(channel, ec);
return;
}
@@ -124,8 +126,13 @@ class ssl_stream : public stream {
}
private:
bool https_fallback_;
const bool enable_tls_;
const int ssl_socket_data_index_;
SSLClientSessionCache* const ssl_client_session_cache_;
SSL_CTX* const ssl_ctx_;
bool https_fallback_;
scoped_refptr<SSLSocket> ssl_socket_;
};
+8 -7
View File
@@ -401,10 +401,6 @@ class stream : public gurl_base::RefCountedThreadSafe<stream> {
VLOG(1) << "trying endpoint (" << domain() << "): " << endpoint;
endpoints_.pop_front();
endpoint_ = std::move(endpoint);
if (socket_.is_open()) {
asio::error_code ec;
socket_.close(ec);
}
on_resolve(channel);
}
@@ -418,6 +414,11 @@ class stream : public gurl_base::RefCountedThreadSafe<stream> {
on_async_connect_callback(asio::error::network_unreachable);
return;
}
// avoid asio::error::already_open error
if (socket_.is_open()) {
asio::error_code ec;
s_close(ec);
}
asio::error_code ec;
socket_.open(endpoint_.protocol(), ec);
if (ec) {
@@ -572,9 +573,9 @@ class stream : public gurl_base::RefCountedThreadSafe<stream> {
net::Resolver resolver_;
protected:
std::string host_ips_;
std::string host_sni_;
uint16_t port_;
const std::string host_ips_;
const std::string host_sni_;
const uint16_t port_;
asio::ip::tcp::endpoint endpoint_;
asio::io_context& io_context_;
asio::ip::tcp::socket socket_;
+1 -1
View File
@@ -5,7 +5,7 @@
"server": "http2.github.io",
"server_sni": "",
"server_port": 443,
"timeout": 0,
"connect_timeout": 2000,
"username": "username",
"password": "password",
"insecure_mode": false,
+1 -1
View File
@@ -2,7 +2,7 @@
"method": "http2",
"server": "localhost",
"server_port": 443,
"timeout": 0,
"connect_timeout": 2000,
"username": "username",
"password": "password",
"private_key_file": "/etc/yass/private_key.pem",
+1 -1
View File
@@ -5,7 +5,7 @@
"server": "http2.github.io",
"server_sni": "",
"server_port": 443,
"timeout": 0,
"connect_timeout": 2000,
"username": "username",
"password": "password",
"insecure_mode": false,
+6 -7
View File
@@ -59,16 +59,15 @@ class ChaturbateIE(InfoExtractor):
'Accept': 'application/json',
}, fatal=False, impersonate=True) or {}
status = response.get('room_status')
if status != 'public':
if error := self._ERROR_MAP.get(status):
raise ExtractorError(error, expected=True)
self.report_warning('Falling back to webpage extraction')
return None
m3u8_url = response.get('url')
if not m3u8_url:
status = response.get('room_status')
if error := self._ERROR_MAP.get(status):
raise ExtractorError(error, expected=True)
if status == 'public':
self.raise_geo_restricted()
self.report_warning(f'Got status "{status}" from API; falling back to webpage extraction')
return None
return {
'id': video_id,