diff --git a/.github/update.log b/.github/update.log
index fd6e0040e1..eab91121e4 100644
--- a/.github/update.log
+++ b/.github/update.log
@@ -1163,3 +1163,4 @@ Update On Thu Oct 23 20:39:01 CEST 2025
Update On Fri Oct 24 20:39:40 CEST 2025
Update On Sat Oct 25 20:37:45 CEST 2025
Update On Sun Oct 26 19:35:56 CET 2025
+Update On Mon Oct 27 19:43:18 CET 2025
diff --git a/clash-meta/hub/executor/executor.go b/clash-meta/hub/executor/executor.go
index 041e6fc36b..44f7f14418 100644
--- a/clash-meta/hub/executor/executor.go
+++ b/clash-meta/hub/executor/executor.go
@@ -39,7 +39,7 @@ import (
"github.com/metacubex/mihomo/listener/inner"
"github.com/metacubex/mihomo/listener/tproxy"
"github.com/metacubex/mihomo/log"
- "github.com/metacubex/mihomo/ntp"
+ "github.com/metacubex/mihomo/ntp/ntp"
"github.com/metacubex/mihomo/tunnel"
)
diff --git a/clash-meta/ntp/service.go b/clash-meta/ntp/ntp/service.go
similarity index 80%
rename from clash-meta/ntp/service.go
rename to clash-meta/ntp/ntp/service.go
index 8473df6a8f..8f27d0aac1 100644
--- a/clash-meta/ntp/service.go
+++ b/clash-meta/ntp/ntp/service.go
@@ -3,18 +3,18 @@ package ntp
import (
"context"
"sync"
- "sync/atomic"
"time"
"github.com/metacubex/mihomo/component/dialer"
"github.com/metacubex/mihomo/component/proxydialer"
"github.com/metacubex/mihomo/log"
+ mihomoNtp "github.com/metacubex/mihomo/ntp"
M "github.com/metacubex/sing/common/metadata"
"github.com/metacubex/sing/common/ntp"
)
-var globalSrv atomic.Pointer[Service]
+var globalSrv *Service
var globalMu sync.Mutex
type Service struct {
@@ -23,21 +23,20 @@ type Service struct {
ticker *time.Ticker
ctx context.Context
cancel context.CancelFunc
- offset atomic.Int64 // [time.Duration]
syncSystemTime bool
}
func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, syncSystemTime bool) {
globalMu.Lock()
defer globalMu.Unlock()
- if service := globalSrv.Swap(nil); service != nil {
- service.Stop()
+ if globalSrv != nil {
+ globalSrv.Stop()
}
if server == "" || interval <= 0 {
return
}
ctx, cancel := context.WithCancel(context.Background())
- service := &Service{
+ globalSrv = &Service{
server: M.ParseSocksaddr(server),
dialer: proxydialer.NewByNameSingDialer(dialerProxy, dialer.NewDialer()),
ticker: time.NewTicker(interval * time.Minute),
@@ -45,8 +44,7 @@ func ReCreateNTPService(server string, interval time.Duration, dialerProxy strin
cancel: cancel,
syncSystemTime: syncSystemTime,
}
- service.Start()
- globalSrv.Store(service)
+ globalSrv.Start()
}
func (srv *Service) Start() {
@@ -59,10 +57,6 @@ func (srv *Service) Stop() {
srv.cancel()
}
-func (srv *Service) Offset() time.Duration {
- return time.Duration(srv.offset.Load())
-}
-
func (srv *Service) update() error {
var response *ntp.Response
var err error
@@ -80,7 +74,7 @@ func (srv *Service) update() error {
} else if offset < time.Duration(0) {
log.Infoln("System clock is behind NTP time by %s", -offset)
}
- srv.offset.Store(int64(offset))
+ mihomoNtp.SetOffset(offset)
if srv.syncSystemTime {
timeNow := response.Time
syncErr := setSystemTime(timeNow)
@@ -97,7 +91,7 @@ func (srv *Service) update() error {
}
func (srv *Service) loopUpdate() {
- defer srv.offset.Store(0)
+ defer mihomoNtp.SetOffset(0)
defer srv.ticker.Stop()
for {
err := srv.update()
@@ -111,13 +105,3 @@ func (srv *Service) loopUpdate() {
}
}
}
-
-func Now() time.Time {
- now := time.Now()
- if service := globalSrv.Load(); service != nil {
- if offset := service.Offset(); offset.Abs() > 0 {
- now = now.Add(offset)
- }
- }
- return now
-}
diff --git a/clash-meta/ntp/time_stub.go b/clash-meta/ntp/ntp/time_stub.go
similarity index 100%
rename from clash-meta/ntp/time_stub.go
rename to clash-meta/ntp/ntp/time_stub.go
diff --git a/clash-meta/ntp/time_unix.go b/clash-meta/ntp/ntp/time_unix.go
similarity index 100%
rename from clash-meta/ntp/time_unix.go
rename to clash-meta/ntp/ntp/time_unix.go
diff --git a/clash-meta/ntp/time_windows.go b/clash-meta/ntp/ntp/time_windows.go
similarity index 100%
rename from clash-meta/ntp/time_windows.go
rename to clash-meta/ntp/ntp/time_windows.go
diff --git a/clash-meta/ntp/time.go b/clash-meta/ntp/time.go
new file mode 100644
index 0000000000..e69be02564
--- /dev/null
+++ b/clash-meta/ntp/time.go
@@ -0,0 +1,28 @@
+// Package ntp provide time.Now
+//
+// DON'T import other package in mihomo to keep minimal internal dependencies
+package ntp
+
+import (
+ "time"
+
+ "sync/atomic"
+)
+
+var _offset atomic.Int64 // [time.Duration]
+
+func SetOffset(offset time.Duration) {
+ _offset.Store(int64(offset))
+}
+
+func GetOffset() time.Duration {
+ return time.Duration(_offset.Load())
+}
+
+func Now() time.Time {
+ now := time.Now()
+ if offset := GetOffset(); offset != 0 {
+ now = now.Add(offset)
+ }
+ return now
+}
diff --git a/clash-meta/rules/provider/mrs_converter.go b/clash-meta/rules/provider/mrs_converter.go
index dbbe51cb29..edc24e7eea 100644
--- a/clash-meta/rules/provider/mrs_converter.go
+++ b/clash-meta/rules/provider/mrs_converter.go
@@ -34,7 +34,7 @@ func ConvertToMrs(buf []byte, behavior P.RuleBehavior, format P.RuleFormat, w io
}
var encoder *zstd.Encoder
- encoder, err = zstd.NewWriter(w, zstd.WithEncoderLevel(zstd.SpeedBestCompression))
+ encoder, err = zstd.NewWriter(w)
if err != nil {
return err
}
diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock
index 13564c4558..c585387c49 100644
--- a/clash-nyanpasu/backend/Cargo.lock
+++ b/clash-nyanpasu/backend/Cargo.lock
@@ -365,7 +365,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -531,7 +531,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -566,7 +566,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -615,7 +615,7 @@ checksum = "99e1aca718ea7b89985790c94aad72d77533063fe00bc497bb79a7c2dae6a661"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -860,7 +860,7 @@ dependencies = [
"regex",
"rustc-hash 1.1.0",
"shlex",
- "syn 2.0.107",
+ "syn 2.0.108",
"which 4.4.2",
]
@@ -1058,7 +1058,7 @@ checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"synstructure",
]
@@ -1196,7 +1196,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -1488,7 +1488,7 @@ dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -1722,7 +1722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f76990911f2267d837d9d0ad060aa63aaad170af40904b29461734c339030d4d"
dependencies = [
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2003,7 +2003,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
dependencies = [
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2013,7 +2013,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
dependencies = [
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2054,7 +2054,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2065,7 +2065,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2156,7 +2156,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2177,7 +2177,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2187,7 +2187,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
dependencies = [
"derive_builder_core",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2200,7 +2200,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustc_version",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2355,7 +2355,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2387,7 +2387,7 @@ checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2685,7 +2685,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2706,7 +2706,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2777,7 +2777,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -2898,7 +2898,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -3055,7 +3055,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -3205,7 +3205,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -3511,7 +3511,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -3773,7 +3773,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -4302,7 +4302,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -4404,7 +4404,7 @@ dependencies = [
"proc-macro2",
"quote",
"sha2 0.10.9",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -4421,7 +4421,7 @@ dependencies = [
"serde",
"serde_json",
"sha2 0.10.9",
- "syn 2.0.107",
+ "syn 2.0.108",
"url",
]
@@ -4519,7 +4519,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -5122,7 +5122,7 @@ checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -5632,7 +5632,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -5694,7 +5694,7 @@ dependencies = [
"proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -5763,7 +5763,7 @@ version = "0.1.0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -6419,7 +6419,7 @@ checksum = "05bbaa5b6b98826bb62b164406f703bee72c5287af9986f9c863fa8ea992b476"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -6461,7 +6461,7 @@ dependencies = [
"phf 0.13.1",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -6721,7 +6721,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -6869,7 +6869,7 @@ dependencies = [
"phf_shared 0.11.3",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"unicase",
]
@@ -6883,7 +6883,7 @@ dependencies = [
"phf_shared 0.13.1",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -6946,7 +6946,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -7124,7 +7124,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [
"proc-macro2",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -7187,9 +7187,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
-version = "1.0.101"
+version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
+checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
dependencies = [
"unicode-ident",
]
@@ -7210,7 +7210,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b"
dependencies = [
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -7608,7 +7608,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -7817,7 +7817,7 @@ dependencies = [
"serde",
"serde_json",
"serde_yaml",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8025,7 +8025,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8169,7 +8169,7 @@ checksum = "d6185cf75117e20e62b1ff867b9518577271e58abe0037c40bb4794969355ab0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8180,7 +8180,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8215,7 +8215,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8277,7 +8277,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8325,7 +8325,7 @@ checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8717,7 +8717,7 @@ dependencies = [
"Inflector",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8841,7 +8841,7 @@ dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -8884,9 +8884,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.107"
+version = "2.0.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b"
+checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917"
dependencies = [
"proc-macro2",
"quote",
@@ -8910,7 +8910,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -9032,7 +9032,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -9152,7 +9152,7 @@ dependencies = [
"serde",
"serde_json",
"sha2 0.10.9",
- "syn 2.0.107",
+ "syn 2.0.108",
"tauri-utils",
"thiserror 2.0.17",
"time",
@@ -9170,7 +9170,7 @@ dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"tauri-codegen",
"tauri-utils",
]
@@ -9476,7 +9476,7 @@ dependencies = [
"heck 0.5.0",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -9645,7 +9645,7 @@ checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -9691,7 +9691,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -9702,7 +9702,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -9859,7 +9859,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -10082,7 +10082,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -10174,7 +10174,7 @@ version = "0.2.5"
source = "git+https://github.com/Frando/tracing-test.git?rev=e81ec65#e81ec655a5ec5c4351104628b1b1ba694f80a1dc"
dependencies = [
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -10680,7 +10680,7 @@ dependencies = [
"log",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"wasm-bindgen-shared",
]
@@ -10715,7 +10715,7 @@ checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -10997,7 +10997,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -11414,7 +11414,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -11425,7 +11425,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -11436,7 +11436,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -11447,7 +11447,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -12229,7 +12229,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"synstructure",
]
@@ -12241,7 +12241,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"synstructure",
]
@@ -12297,7 +12297,7 @@ checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"zbus-lockstep",
"zbus_xml",
"zvariant",
@@ -12312,7 +12312,7 @@ dependencies = [
"proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"zbus_names",
"zvariant",
"zvariant_utils",
@@ -12360,7 +12360,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -12380,7 +12380,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"synstructure",
]
@@ -12401,7 +12401,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -12445,7 +12445,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -12456,7 +12456,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
]
[[package]]
@@ -12601,7 +12601,7 @@ dependencies = [
"proc-macro-crate 3.3.0",
"proc-macro2",
"quote",
- "syn 2.0.107",
+ "syn 2.0.108",
"zvariant_utils",
]
@@ -12614,6 +12614,6 @@ dependencies = [
"proc-macro2",
"quote",
"serde",
- "syn 2.0.107",
+ "syn 2.0.108",
"winnow 0.7.13",
]
diff --git a/clash-nyanpasu/frontend/interface/package.json b/clash-nyanpasu/frontend/interface/package.json
index 79f96867f7..0d8d789fa7 100644
--- a/clash-nyanpasu/frontend/interface/package.json
+++ b/clash-nyanpasu/frontend/interface/package.json
@@ -13,7 +13,7 @@
"dependencies": {
"@tanstack/react-query": "5.90.5",
"@tauri-apps/api": "2.8.0",
- "ahooks": "3.9.5",
+ "ahooks": "3.9.6",
"dayjs": "1.11.18",
"lodash-es": "4.17.21",
"ofetch": "1.4.1",
diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json
index a07ca76396..481d59135b 100644
--- a/clash-nyanpasu/frontend/nyanpasu/package.json
+++ b/clash-nyanpasu/frontend/nyanpasu/package.json
@@ -26,7 +26,7 @@
"@tanstack/router-zod-adapter": "1.81.5",
"@tauri-apps/api": "2.8.0",
"@types/json-schema": "7.0.15",
- "ahooks": "3.9.5",
+ "ahooks": "3.9.6",
"allotment": "1.20.4",
"country-code-emoji": "2.3.0",
"country-emoji": "1.5.6",
@@ -59,9 +59,9 @@
"@iconify/json": "2.2.400",
"@monaco-editor/react": "4.7.0",
"@tanstack/react-query": "5.90.5",
- "@tanstack/react-router": "1.133.13",
- "@tanstack/react-router-devtools": "1.133.13",
- "@tanstack/router-plugin": "1.133.13",
+ "@tanstack/react-router": "1.133.32",
+ "@tanstack/react-router-devtools": "1.133.32",
+ "@tanstack/router-plugin": "1.133.32",
"@tauri-apps/plugin-clipboard-manager": "2.3.0",
"@tauri-apps/plugin-dialog": "2.4.0",
"@tauri-apps/plugin-fs": "2.4.2",
diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json
index 11d0b2325d..7bc464381a 100644
--- a/clash-nyanpasu/frontend/ui/package.json
+++ b/clash-nyanpasu/frontend/ui/package.json
@@ -21,7 +21,7 @@
"@types/d3": "7.4.3",
"@types/react": "19.2.2",
"@vitejs/plugin-react": "5.0.4",
- "ahooks": "3.9.5",
+ "ahooks": "3.9.6",
"d3": "7.9.0",
"framer-motion": "12.23.24",
"react": "19.2.0",
diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json
index 99ee038b1e..993d6960f2 100644
--- a/clash-nyanpasu/manifest/version.json
+++ b/clash-nyanpasu/manifest/version.json
@@ -2,7 +2,7 @@
"manifest_version": 1,
"latest": {
"mihomo": "v1.19.15",
- "mihomo_alpha": "alpha-90f47a6",
+ "mihomo_alpha": "alpha-9ed9c3d",
"clash_rs": "v0.9.1",
"clash_premium": "2023-09-05-gdcc8d87",
"clash_rs_alpha": "0.9.1-alpha+sha.fc9ebc5"
@@ -69,5 +69,5 @@
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
}
},
- "updated_at": "2025-10-25T22:20:57.739Z"
+ "updated_at": "2025-10-26T22:21:09.443Z"
}
diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml
index 11926955cd..14d2e332fd 100644
--- a/clash-nyanpasu/pnpm-lock.yaml
+++ b/clash-nyanpasu/pnpm-lock.yaml
@@ -185,8 +185,8 @@ importers:
specifier: 2.8.0
version: 2.8.0
ahooks:
- specifier: 3.9.5
- version: 3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ specifier: 3.9.6
+ version: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
dayjs:
specifier: 1.11.18
version: 1.11.18
@@ -253,7 +253,7 @@ importers:
version: 4.1.14
'@tanstack/router-zod-adapter':
specifier: 1.81.5
- version: 1.81.5(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)
+ version: 1.81.5(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)
'@tauri-apps/api':
specifier: 2.8.0
version: 2.8.0
@@ -261,8 +261,8 @@ importers:
specifier: 7.0.15
version: 7.0.15
ahooks:
- specifier: 3.9.5
- version: 3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ specifier: 3.9.6
+ version: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
allotment:
specifier: 1.20.4
version: 1.20.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
@@ -355,14 +355,14 @@ importers:
specifier: 5.90.5
version: 5.90.5(react@19.2.0)
'@tanstack/react-router':
- specifier: 1.133.13
- version: 1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ specifier: 1.133.32
+ version: 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tanstack/react-router-devtools':
- specifier: 1.133.13
- version: 1.133.13(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.13)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
+ specifier: 1.133.32
+ version: 1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
'@tanstack/router-plugin':
- specifier: 1.133.13
- version: 1.133.13(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))
+ specifier: 1.133.32
+ version: 1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))
'@tauri-apps/plugin-clipboard-manager':
specifier: 2.3.0
version: 2.3.0
@@ -493,8 +493,8 @@ importers:
specifier: 5.0.4
version: 5.0.4(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))
ahooks:
- specifier: 3.9.5
- version: 3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ specifier: 3.9.6
+ version: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
d3:
specifier: 7.9.0
version: 7.9.0
@@ -1304,10 +1304,6 @@ packages:
resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
engines: {node: '>=6.9.0'}
- '@babel/runtime@7.28.2':
- resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==}
- engines: {node: '>=6.9.0'}
-
'@babel/runtime@7.28.3':
resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==}
engines: {node: '>=6.9.0'}
@@ -3092,8 +3088,8 @@ packages:
'@tailwindcss/postcss@4.1.14':
resolution: {integrity: sha512-BdMjIxy7HUNThK87C7BC8I1rE8BVUsfNQSI5siQ4JK3iIa3w0XyVvVL9SXLWO//CtYTcp1v7zci0fYwJOjB+Zg==}
- '@tanstack/history@1.133.3':
- resolution: {integrity: sha512-zFQnGdX0S4g5xRuS+95iiEXM+qlGvYG7ksmOKx7LaMv60lDWa0imR8/24WwXXvBWJT1KnwVdZcjvhCwz9IiJCw==}
+ '@tanstack/history@1.133.28':
+ resolution: {integrity: sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==}
engines: {node: '>=12'}
'@tanstack/match-sorter-utils@8.19.4':
@@ -3108,16 +3104,16 @@ packages:
peerDependencies:
react: ^18 || ^19
- '@tanstack/react-router-devtools@1.133.13':
- resolution: {integrity: sha512-Bc7jap95WD32U0KSuPDZOehujwycNE8cUoroQ8/A2FIugTV6msxW7/fm1Dny7MzVv2lc8VgRIykFGt1vveZgVA==}
+ '@tanstack/react-router-devtools@1.133.32':
+ resolution: {integrity: sha512-dd0PzcAjzaDY9rPq9zoiItit3PKDVAekLgMLtNyXneyYrTXqPDSZwSge/l+cB0V1QcuAq6w+qx3LyFd3+zK40g==}
engines: {node: '>=12'}
peerDependencies:
- '@tanstack/react-router': ^1.133.13
+ '@tanstack/react-router': ^1.133.32
react: '>=18.0.0 || >=19.0.0'
react-dom: '>=18.0.0 || >=19.0.0'
- '@tanstack/react-router@1.133.13':
- resolution: {integrity: sha512-mVAj70mPOH/a60Hjlha3gHEWLFuE4kHeKau/AL5Xp6e5GtNk1JTRwN4sJ9QlSyLcClOUUtGfED1FoLj0D2W0Eg==}
+ '@tanstack/react-router@1.133.32':
+ resolution: {integrity: sha512-UqakhaFJ+r5S+b4/AvLux70Hk+1MpmwfKwbdV7vuM2bVRUSztM8xtcttVpzZwRV45Ls8YsStY58prEVdCpvkNg==}
engines: {node: '>=12'}
peerDependencies:
react: '>=18.0.0 || >=19.0.0'
@@ -3142,15 +3138,15 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- '@tanstack/router-core@1.133.13':
- resolution: {integrity: sha512-zZptdlS/wSkqozb07Y3zX5gas2OapJdjEG6/Id0e/twNefVdR4EY2TK/mgvyhHtKIpCxIcnZz/3opypgeQi9bg==}
+ '@tanstack/router-core@1.133.28':
+ resolution: {integrity: sha512-HErb1X9F+u4VzguJKafX1p5fSnNnfo7aK8Xxh5cICFMShPBxt9i1K45nUbQaRkf45N1tg4gJ3l8mlmwWRm9WWA==}
engines: {node: '>=12'}
- '@tanstack/router-devtools-core@1.133.13':
- resolution: {integrity: sha512-NyXZws0sVeB6+410fa2fopitFAbEqKMhGZw1ojI4bp3DyVwL6l9cnIRHw6qew3gRUVa3SBn00puJ++LfZSYc7w==}
+ '@tanstack/router-devtools-core@1.133.28':
+ resolution: {integrity: sha512-V4wwfVV9dGJ+OoEkAvVF6LWyST+s6MMSt+N73453lNbIbzQrODu5xdVr5svnzsuH3Kt5Fms5dMBlvb77gRcn4w==}
engines: {node: '>=12'}
peerDependencies:
- '@tanstack/router-core': ^1.133.13
+ '@tanstack/router-core': ^1.133.28
csstype: ^3.0.10
solid-js: '>=1.9.5'
tiny-invariant: ^1.3.3
@@ -3158,18 +3154,18 @@ packages:
csstype:
optional: true
- '@tanstack/router-generator@1.133.13':
- resolution: {integrity: sha512-W5locmcYSz0dY+KEOIFijUeOdQEzjCxY+uT9ExY/YeQcOBcBFIk9/UnBkE6wRLCPOBb1gfURjPNc9rI93HGrOA==}
+ '@tanstack/router-generator@1.133.29':
+ resolution: {integrity: sha512-Nngp1i7ch22qqLkjsQwoyos8mawL5bG2GjHg8IMOzFbMR+dVQfh9gSkpkhUbLMv8TMb8Na31tyR0/tDr+E/NCA==}
engines: {node: '>=12'}
- '@tanstack/router-plugin@1.133.13':
- resolution: {integrity: sha512-R5cbCwdw5chQhgaVERE2JlPpGWcER4FuVkRGDbLaW/rpawIskJCjkAbhqyfgXPF8VsEUOs9+7FK6ocODnqM/qA==}
+ '@tanstack/router-plugin@1.133.32':
+ resolution: {integrity: sha512-4YtRrGs5nq/sZmwwT/jmS1LiucEevsWjxzTEilHRBtjeMgFbrhnQ7jBHHRPym71C40W/9tEgzcQS3dGq5LC5+g==}
engines: {node: '>=12'}
peerDependencies:
'@rsbuild/core': '>=1.0.2'
- '@tanstack/react-router': ^1.133.13
+ '@tanstack/react-router': ^1.133.32
vite: '>=5.0.0 || >=6.0.0 || >=7.0.0'
- vite-plugin-solid: ^2.11.8
+ vite-plugin-solid: ^2.11.10
webpack: '>=5.92.0'
peerDependenciesMeta:
'@rsbuild/core':
@@ -3183,8 +3179,8 @@ packages:
webpack:
optional: true
- '@tanstack/router-utils@1.133.3':
- resolution: {integrity: sha512-miPFlt0aG6ID5VDolYuRXgLS7cofvbZGMvHwf2Wmyxjo6GLp/kxxpkQrfM4T1I5cwjwYZZAQmdUKbVHwFZz9sQ==}
+ '@tanstack/router-utils@1.133.19':
+ resolution: {integrity: sha512-WEp5D2gPxvlLDRXwD/fV7RXjYtqaqJNXKB/L6OyZEbT+9BG/Ib2d7oG9GSUZNNMGPGYAlhBUOi3xutySsk6rxA==}
engines: {node: '>=12'}
'@tanstack/router-zod-adapter@1.81.5':
@@ -3204,8 +3200,8 @@ packages:
'@tanstack/virtual-core@3.13.9':
resolution: {integrity: sha512-3jztt0jpaoJO5TARe2WIHC1UQC3VMLAFUW5mmMo0yrkwtDB2AQP0+sh10BVUpWrnvHjSLvzFizydtEGLCJKFoQ==}
- '@tanstack/virtual-file-routes@1.133.3':
- resolution: {integrity: sha512-6d2AP9hAjEi8mcIew2RkxBX+wClH1xedhfaYhs8fUiX+V2Cedk7RBD9E9ww2z6BGUYD8Es4fS0OIrzXZWHKGhw==}
+ '@tanstack/virtual-file-routes@1.133.19':
+ resolution: {integrity: sha512-IKwZENsK7owmW1Lm5FhuHegY/SyQ8KqtL/7mTSnzoKJgfzhrrf9qwKB1rmkKkt+svUuy/Zw3uVEpZtUzQruWtA==}
engines: {node: '>=12'}
'@taplo/core@0.2.0':
@@ -3831,9 +3827,8 @@ packages:
resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
engines: {node: '>=12.0'}
- ahooks@3.9.5:
- resolution: {integrity: sha512-TrjXie49Q8HuHKTa84Fm9A+famMDAG1+7a9S9Gq6RQ0h90Jgqmiq3CkObuRjWT/C4d6nRZCw35Y2k2fmybb5eA==}
- engines: {node: '>=18'}
+ ahooks@3.9.6:
+ resolution: {integrity: sha512-Mr7f05swd5SmKlR9SZo5U6M0LsL4ErweLzpdgXjA1JPmnZ78Vr6wzx0jUtvoxrcqGKYnX0Yjc02iEASVxHFPjQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -9716,8 +9711,6 @@ snapshots:
'@babel/runtime@7.27.6': {}
- '@babel/runtime@7.28.2': {}
-
'@babel/runtime@7.28.3': {}
'@babel/runtime@7.28.4': {}
@@ -11434,7 +11427,7 @@ snapshots:
postcss: 8.5.6
tailwindcss: 4.1.14
- '@tanstack/history@1.133.3': {}
+ '@tanstack/history@1.133.28': {}
'@tanstack/match-sorter-utils@8.19.4':
dependencies:
@@ -11447,10 +11440,10 @@ snapshots:
'@tanstack/query-core': 5.90.5
react: 19.2.0
- '@tanstack/react-router-devtools@1.133.13(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.13)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
+ '@tanstack/react-router-devtools@1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
dependencies:
- '@tanstack/react-router': 1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- '@tanstack/router-devtools-core': 1.133.13(@tanstack/router-core@1.133.13)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
+ '@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@tanstack/router-devtools-core': 1.133.28(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)
@@ -11471,11 +11464,11 @@ snapshots:
- tsx
- yaml
- '@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ '@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@tanstack/history': 1.133.3
+ '@tanstack/history': 1.133.28
'@tanstack/react-store': 0.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- '@tanstack/router-core': 1.133.13
+ '@tanstack/router-core': 1.133.28
isbot: 5.1.28
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
@@ -11501,9 +11494,9 @@ snapshots:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
- '@tanstack/router-core@1.133.13':
+ '@tanstack/router-core@1.133.28':
dependencies:
- '@tanstack/history': 1.133.3
+ '@tanstack/history': 1.133.28
'@tanstack/store': 0.7.0
cookie-es: 2.0.0
seroval: 1.3.2
@@ -11511,9 +11504,9 @@ snapshots:
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
- '@tanstack/router-devtools-core@1.133.13(@tanstack/router-core@1.133.13)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
+ '@tanstack/router-devtools-core@1.133.28(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
dependencies:
- '@tanstack/router-core': 1.133.13
+ '@tanstack/router-core': 1.133.28
clsx: 2.1.1
goober: 2.1.16(csstype@3.1.3)
solid-js: 1.9.5
@@ -11534,11 +11527,11 @@ snapshots:
- tsx
- yaml
- '@tanstack/router-generator@1.133.13':
+ '@tanstack/router-generator@1.133.29':
dependencies:
- '@tanstack/router-core': 1.133.13
- '@tanstack/router-utils': 1.133.3
- '@tanstack/virtual-file-routes': 1.133.3
+ '@tanstack/router-core': 1.133.28
+ '@tanstack/router-utils': 1.133.19
+ '@tanstack/virtual-file-routes': 1.133.19
prettier: 3.6.2
recast: 0.23.11
source-map: 0.7.4
@@ -11547,7 +11540,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tanstack/router-plugin@1.133.13(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))':
+ '@tanstack/router-plugin@1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))':
dependencies:
'@babel/core': 7.28.4
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
@@ -11555,21 +11548,21 @@ snapshots:
'@babel/template': 7.27.2
'@babel/traverse': 7.28.4
'@babel/types': 7.28.4
- '@tanstack/router-core': 1.133.13
- '@tanstack/router-generator': 1.133.13
- '@tanstack/router-utils': 1.133.3
- '@tanstack/virtual-file-routes': 1.133.3
+ '@tanstack/router-core': 1.133.28
+ '@tanstack/router-generator': 1.133.29
+ '@tanstack/router-utils': 1.133.19
+ '@tanstack/virtual-file-routes': 1.133.19
babel-dead-code-elimination: 1.0.10
chokidar: 3.6.0
unplugin: 2.3.10
zod: 3.25.76
optionalDependencies:
- '@tanstack/react-router': 1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
- '@tanstack/router-utils@1.133.3':
+ '@tanstack/router-utils@1.133.19':
dependencies:
'@babel/core': 7.28.4
'@babel/generator': 7.28.3
@@ -11582,9 +11575,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)':
+ '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)':
dependencies:
- '@tanstack/react-router': 1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
zod: 4.1.12
'@tanstack/store@0.7.0': {}
@@ -11593,7 +11586,7 @@ snapshots:
'@tanstack/virtual-core@3.13.9': {}
- '@tanstack/virtual-file-routes@1.133.3': {}
+ '@tanstack/virtual-file-routes@1.133.19': {}
'@taplo/core@0.2.0': {}
@@ -12283,9 +12276,9 @@ snapshots:
adm-zip@0.5.16: {}
- ahooks@3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
+ ahooks@3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- '@babel/runtime': 7.28.2
+ '@babel/runtime': 7.28.4
'@types/js-cookie': 3.0.6
dayjs: 1.11.18
intersection-observer: 0.12.2
@@ -12524,7 +12517,7 @@ snapshots:
babel-plugin-macros@3.1.0:
dependencies:
- '@babel/runtime': 7.28.2
+ '@babel/runtime': 7.28.4
cosmiconfig: 7.1.0
resolve: 1.22.8
diff --git a/lede/target/linux/rockchip/patches-6.1/011-v6.3-net-rfkill-gpio-add-DT-support.patch b/lede/target/linux/rockchip/patches-6.1/011-v6.3-net-rfkill-gpio-add-DT-support.patch
deleted file mode 100644
index 8a9f4c3079..0000000000
--- a/lede/target/linux/rockchip/patches-6.1/011-v6.3-net-rfkill-gpio-add-DT-support.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From d64c732dfc9edcd57feb693c23162117737e426b Mon Sep 17 00:00:00 2001
-From: Philipp Zabel
-Date: Mon, 2 Jan 2023 18:29:34 +0100
-Subject: [PATCH] net: rfkill: gpio: add DT support
-
-Allow probing rfkill-gpio via device tree. This hooks up the already
-existing support that was started in commit 262c91ee5e52 ("net:
-rfkill: gpio: prepare for DT and ACPI support") via the "rfkill-gpio"
-compatible, with the "name" and "type" properties renamed to "label"
-and "radio-type", respectively, in the device tree case.
-
-Signed-off-by: Philipp Zabel
-Link: https://lore.kernel.org/r/20230102-rfkill-gpio-dt-v2-2-d1b83758c16d@pengutronix.de
-Signed-off-by: Johannes Berg
----
- net/rfkill/rfkill-gpio.c | 20 ++++++++++++++++++--
- 1 file changed, 18 insertions(+), 2 deletions(-)
-
---- a/net/rfkill/rfkill-gpio.c
-+++ b/net/rfkill/rfkill-gpio.c
-@@ -79,6 +79,8 @@ static int rfkill_gpio_probe(struct plat
- {
- struct rfkill_gpio_data *rfkill;
- struct gpio_desc *gpio;
-+ const char *name_property;
-+ const char *type_property;
- const char *type_name;
- int ret;
-
-@@ -86,8 +88,15 @@ static int rfkill_gpio_probe(struct plat
- if (!rfkill)
- return -ENOMEM;
-
-- device_property_read_string(&pdev->dev, "name", &rfkill->name);
-- device_property_read_string(&pdev->dev, "type", &type_name);
-+ if (dev_of_node(&pdev->dev)) {
-+ name_property = "label";
-+ type_property = "radio-type";
-+ } else {
-+ name_property = "name";
-+ type_property = "type";
-+ }
-+ device_property_read_string(&pdev->dev, name_property, &rfkill->name);
-+ device_property_read_string(&pdev->dev, type_property, &type_name);
-
- if (!rfkill->name)
- rfkill->name = dev_name(&pdev->dev);
-@@ -169,12 +178,19 @@ static const struct acpi_device_id rfkil
- MODULE_DEVICE_TABLE(acpi, rfkill_acpi_match);
- #endif
-
-+static const struct of_device_id rfkill_of_match[] __maybe_unused = {
-+ { .compatible = "rfkill-gpio", },
-+ { },
-+};
-+MODULE_DEVICE_TABLE(of, rfkill_of_match);
-+
- static struct platform_driver rfkill_gpio_driver = {
- .probe = rfkill_gpio_probe,
- .remove = rfkill_gpio_remove,
- .driver = {
- .name = "rfkill_gpio",
- .acpi_match_table = ACPI_PTR(rfkill_acpi_match),
-+ .of_match_table = of_match_ptr(rfkill_of_match),
- },
- };
-
diff --git a/lede/target/linux/rockchip/patches-6.12/036-06-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch b/lede/target/linux/rockchip/patches-6.12/036-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch
similarity index 100%
rename from lede/target/linux/rockchip/patches-6.12/036-06-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch
rename to lede/target/linux/rockchip/patches-6.12/036-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch
diff --git a/lede/target/linux/rockchip/patches-6.12/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch b/lede/target/linux/rockchip/patches-6.12/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch
deleted file mode 100644
index 2917724911..0000000000
--- a/lede/target/linux/rockchip/patches-6.12/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi
-+++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi
-@@ -514,6 +514,7 @@
- num-lanes = <2>;
- vpcie0v9-supply = <&vcca0v9_s3>;
- vpcie1v8-supply = <&vcca1v8_s3>;
-+ bus-scan-delay-ms = <1000>;
- status = "okay";
- };
-
diff --git a/lede/target/linux/rockchip/patches-6.12/994-rockchip-pcie-reimplement-bus-scan-delay.patch b/lede/target/linux/rockchip/patches-6.12/994-rockchip-pcie-reimplement-bus-scan-delay.patch
deleted file mode 100644
index 7541f5437d..0000000000
--- a/lede/target/linux/rockchip/patches-6.12/994-rockchip-pcie-reimplement-bus-scan-delay.patch
+++ /dev/null
@@ -1,96 +0,0 @@
---- a/Documentation/admin-guide/kernel-parameters.txt
-+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -4967,6 +4967,14 @@
- nomsi Do not use MSI for native PCIe PME signaling (this makes
- all PCIe root ports use INTx for all services).
-
-+ pcie_rockchip_host.bus_scan_delay= [PCIE] Delay in ms before
-+ scanning PCIe bus in Rockchip PCIe host driver. Some PCIe
-+ cards seem to need delays that can be several hundred ms.
-+ If set to greater than or equal to 0 this parameter will
-+ override delay that can be set in device tree.
-+ Values less than 0 mean that this parameter is ignored.
-+ default=-1
-+
- pcmv= [HW,PCMCIA] BadgePAD 4
-
- pd_ignore_unused
---- a/drivers/pci/controller/pcie-rockchip-host.c
-+++ b/drivers/pci/controller/pcie-rockchip-host.c
-@@ -32,10 +32,14 @@
- #include
- #include
- #include
-+#include
-
- #include "../pci.h"
- #include "pcie-rockchip.h"
-
-+static int bus_scan_delay = -1;
-+module_param_named(bus_scan_delay, bus_scan_delay, int, S_IRUGO);
-+
- static void rockchip_pcie_enable_bw_int(struct rockchip_pcie *rockchip)
- {
- u32 status;
-@@ -933,6 +937,7 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
- struct device *dev = &pdev->dev;
- struct pci_host_bridge *bridge;
- int err;
-+ u32 delay = 0;
-
- if (!dev->of_node)
- return -ENODEV;
-@@ -982,6 +987,26 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
- bridge->sysdata = rockchip;
- bridge->ops = &rockchip_pcie_ops;
-
-+ /* Checking if bus scan delay was given from command line and prefer
-+ * that over the value in device tree (which defaults to 0 if not set).
-+ */
-+ if (bus_scan_delay >= 0) {
-+ delay = bus_scan_delay;
-+ dev_info(dev, "wait %u ms (from command-line) before bus scan\n", delay);
-+ } else {
-+ delay = rockchip->bus_scan_delay;
-+ dev_info(dev, "wait %u ms (from device tree) before bus scan\n", delay);
-+ }
-+ /* Workaround for some devices crashing on pci_host_probe / pci_scan_root_bus_bridge
-+ * calls: sleep a bit before bus scan. Call trace gets to rockchip_pcie_rd_conf when
-+ * trying to read vendor id (pci_bus_generic_read_dev_vendor_id is in call stack)
-+ * before panicing. I have no idea why this works or what causes the panic. I just
-+ * found this hack by luck when trying to "make it break differently if possible".
-+ */
-+ if (delay > 0) {
-+ msleep(delay);
-+ }
-+
- err = rockchip_pcie_setup_irq(rockchip);
- if (err)
- goto err_remove_irq_domain;
---- a/drivers/pci/controller/pcie-rockchip.c
-+++ b/drivers/pci/controller/pcie-rockchip.c
-@@ -102,6 +102,12 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip)
- return dev_err_probe(dev, rockchip->num_clks,
- "failed to get clocks\n");
-
-+ err = of_property_read_u32(node, "bus-scan-delay-ms", &rockchip->bus_scan_delay);
-+ if (err) {
-+ dev_info(dev, "no bus scan delay, default to 0 ms\n");
-+ rockchip->bus_scan_delay = 0;
-+ }
-+
- return 0;
- }
- EXPORT_SYMBOL_GPL(rockchip_pcie_parse_dt);
---- a/drivers/pci/controller/pcie-rockchip.h
-+++ b/drivers/pci/controller/pcie-rockchip.h
-@@ -351,6 +351,8 @@ struct rockchip_pcie {
- phys_addr_t msg_bus_addr;
- bool is_rc;
- struct resource *mem_res;
-+ /* Bus scan delay is a workaround for some pcie devices causing crashes */
-+ u32 bus_scan_delay;
- };
-
- static u32 rockchip_pcie_read(struct rockchip_pcie *rockchip, u32 reg)
-
diff --git a/lede/target/linux/rockchip/patches-6.6/036-06-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch b/lede/target/linux/rockchip/patches-6.6/071-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch
similarity index 100%
rename from lede/target/linux/rockchip/patches-6.6/036-06-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch
rename to lede/target/linux/rockchip/patches-6.6/071-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch
diff --git a/lede/target/linux/rockchip/patches-6.6/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch b/lede/target/linux/rockchip/patches-6.6/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch
deleted file mode 100644
index 2917724911..0000000000
--- a/lede/target/linux/rockchip/patches-6.6/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi
-+++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi
-@@ -514,6 +514,7 @@
- num-lanes = <2>;
- vpcie0v9-supply = <&vcca0v9_s3>;
- vpcie1v8-supply = <&vcca1v8_s3>;
-+ bus-scan-delay-ms = <1000>;
- status = "okay";
- };
-
diff --git a/lede/target/linux/rockchip/patches-6.6/994-rockchip-pcie-reimplement-bus-scan-delay.patch b/lede/target/linux/rockchip/patches-6.6/994-rockchip-pcie-reimplement-bus-scan-delay.patch
deleted file mode 100644
index 7541f5437d..0000000000
--- a/lede/target/linux/rockchip/patches-6.6/994-rockchip-pcie-reimplement-bus-scan-delay.patch
+++ /dev/null
@@ -1,96 +0,0 @@
---- a/Documentation/admin-guide/kernel-parameters.txt
-+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -4967,6 +4967,14 @@
- nomsi Do not use MSI for native PCIe PME signaling (this makes
- all PCIe root ports use INTx for all services).
-
-+ pcie_rockchip_host.bus_scan_delay= [PCIE] Delay in ms before
-+ scanning PCIe bus in Rockchip PCIe host driver. Some PCIe
-+ cards seem to need delays that can be several hundred ms.
-+ If set to greater than or equal to 0 this parameter will
-+ override delay that can be set in device tree.
-+ Values less than 0 mean that this parameter is ignored.
-+ default=-1
-+
- pcmv= [HW,PCMCIA] BadgePAD 4
-
- pd_ignore_unused
---- a/drivers/pci/controller/pcie-rockchip-host.c
-+++ b/drivers/pci/controller/pcie-rockchip-host.c
-@@ -32,10 +32,14 @@
- #include
- #include
- #include
-+#include
-
- #include "../pci.h"
- #include "pcie-rockchip.h"
-
-+static int bus_scan_delay = -1;
-+module_param_named(bus_scan_delay, bus_scan_delay, int, S_IRUGO);
-+
- static void rockchip_pcie_enable_bw_int(struct rockchip_pcie *rockchip)
- {
- u32 status;
-@@ -933,6 +937,7 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
- struct device *dev = &pdev->dev;
- struct pci_host_bridge *bridge;
- int err;
-+ u32 delay = 0;
-
- if (!dev->of_node)
- return -ENODEV;
-@@ -982,6 +987,26 @@ static int rockchip_pcie_probe(struct platform_device *pdev)
- bridge->sysdata = rockchip;
- bridge->ops = &rockchip_pcie_ops;
-
-+ /* Checking if bus scan delay was given from command line and prefer
-+ * that over the value in device tree (which defaults to 0 if not set).
-+ */
-+ if (bus_scan_delay >= 0) {
-+ delay = bus_scan_delay;
-+ dev_info(dev, "wait %u ms (from command-line) before bus scan\n", delay);
-+ } else {
-+ delay = rockchip->bus_scan_delay;
-+ dev_info(dev, "wait %u ms (from device tree) before bus scan\n", delay);
-+ }
-+ /* Workaround for some devices crashing on pci_host_probe / pci_scan_root_bus_bridge
-+ * calls: sleep a bit before bus scan. Call trace gets to rockchip_pcie_rd_conf when
-+ * trying to read vendor id (pci_bus_generic_read_dev_vendor_id is in call stack)
-+ * before panicing. I have no idea why this works or what causes the panic. I just
-+ * found this hack by luck when trying to "make it break differently if possible".
-+ */
-+ if (delay > 0) {
-+ msleep(delay);
-+ }
-+
- err = rockchip_pcie_setup_irq(rockchip);
- if (err)
- goto err_remove_irq_domain;
---- a/drivers/pci/controller/pcie-rockchip.c
-+++ b/drivers/pci/controller/pcie-rockchip.c
-@@ -102,6 +102,12 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip)
- return dev_err_probe(dev, rockchip->num_clks,
- "failed to get clocks\n");
-
-+ err = of_property_read_u32(node, "bus-scan-delay-ms", &rockchip->bus_scan_delay);
-+ if (err) {
-+ dev_info(dev, "no bus scan delay, default to 0 ms\n");
-+ rockchip->bus_scan_delay = 0;
-+ }
-+
- return 0;
- }
- EXPORT_SYMBOL_GPL(rockchip_pcie_parse_dt);
---- a/drivers/pci/controller/pcie-rockchip.h
-+++ b/drivers/pci/controller/pcie-rockchip.h
-@@ -351,6 +351,8 @@ struct rockchip_pcie {
- phys_addr_t msg_bus_addr;
- bool is_rc;
- struct resource *mem_res;
-+ /* Bus scan delay is a workaround for some pcie devices causing crashes */
-+ u32 bus_scan_delay;
- };
-
- static u32 rockchip_pcie_read(struct rockchip_pcie *rockchip, u32 reg)
-
diff --git a/mieru/Makefile b/mieru/Makefile
index 5a3a9cf30b..d759b98fbd 100644
--- a/mieru/Makefile
+++ b/mieru/Makefile
@@ -34,6 +34,11 @@ PROJECT_NAME=$(shell basename "${ROOT}")
# Use `tools/bump_version.sh` script to change all those files at one shot.
VERSION="3.21.0"
+# With .ONESHELL, each recipe is executed in a single shell instance.
+# This allows `cd` to affect subsequent commands in the same recipe.
+# .ONESHELL is supported in GNU Make version 3.82 and later.
+.ONESHELL:
+
# Build binaries and installation packages.
.PHONY: build
build: bin deb rpm
@@ -82,16 +87,15 @@ client-android: client-android-arm64
# Build Android arm64 client.
.PHONY: client-android-arm64
client-android-arm64:
- if [ ! -z $$(command -v gcc) ]; then\
- mkdir -p release/android/arm64;\
- env GOOS=android GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/android/arm64/mieru cmd/mieru/mieru.go;\
- cd release/android/arm64;\
- sha256sum mieru > mieru_${VERSION}_android_arm64.sha256.txt;\
- tar -zcvf mieru_${VERSION}_android_arm64.tar.gz mieru;\
- sha256sum mieru_${VERSION}_android_arm64.tar.gz > mieru_${VERSION}_android_arm64.tar.gz.sha256.txt;\
- cd "${ROOT}";\
- mv release/android/arm64/mieru_${VERSION}_android_arm64.tar.gz release/;\
- mv release/android/arm64/mieru_${VERSION}_android_arm64.tar.gz.sha256.txt release/;\
+ if [ ! -z $$(command -v gcc) ]; then
+ mkdir -p release/android/arm64
+ env GOOS=android GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/android/arm64/mieru cmd/mieru/mieru.go
+ cd release/android/arm64
+ sha256sum mieru > mieru_${VERSION}_android_arm64.sha256.txt
+ tar -zcvf mieru_${VERSION}_android_arm64.tar.gz mieru
+ sha256sum mieru_${VERSION}_android_arm64.tar.gz > mieru_${VERSION}_android_arm64.tar.gz.sha256.txt
+ mv mieru_${VERSION}_android_arm64.tar.gz ../../
+ mv mieru_${VERSION}_android_arm64.tar.gz.sha256.txt ../../
fi
# Build linux clients.
@@ -103,48 +107,48 @@ client-linux: client-linux-amd64 client-linux-arm64 client-linux-armv7 client-li
client-linux-amd64:
mkdir -p release/linux/amd64
env GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/amd64/mieru cmd/mieru/mieru.go
- cd release/linux/amd64;\
- sha256sum mieru > mieru_${VERSION}_linux_amd64.sha256.txt;\
- tar -zcvf mieru_${VERSION}_linux_amd64.tar.gz mieru;\
- sha256sum mieru_${VERSION}_linux_amd64.tar.gz > mieru_${VERSION}_linux_amd64.tar.gz.sha256.txt
- mv release/linux/amd64/mieru_${VERSION}_linux_amd64.tar.gz release/
- mv release/linux/amd64/mieru_${VERSION}_linux_amd64.tar.gz.sha256.txt release/
+ cd release/linux/amd64
+ sha256sum mieru > mieru_${VERSION}_linux_amd64.sha256.txt
+ tar -zcvf mieru_${VERSION}_linux_amd64.tar.gz mieru
+ sha256sum mieru_${VERSION}_linux_amd64.tar.gz > mieru_${VERSION}_linux_amd64.tar.gz.sha256.txt
+ mv mieru_${VERSION}_linux_amd64.tar.gz ../../
+ mv mieru_${VERSION}_linux_amd64.tar.gz.sha256.txt ../../
# Build linux arm64 client.
.PHONY: client-linux-arm64
client-linux-arm64:
mkdir -p release/linux/arm64
env GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/arm64/mieru cmd/mieru/mieru.go
- cd release/linux/arm64;\
- sha256sum mieru > mieru_${VERSION}_linux_arm64.sha256.txt;\
- tar -zcvf mieru_${VERSION}_linux_arm64.tar.gz mieru;\
- sha256sum mieru_${VERSION}_linux_arm64.tar.gz > mieru_${VERSION}_linux_arm64.tar.gz.sha256.txt
- mv release/linux/arm64/mieru_${VERSION}_linux_arm64.tar.gz release/
- mv release/linux/arm64/mieru_${VERSION}_linux_arm64.tar.gz.sha256.txt release/
+ cd release/linux/arm64
+ sha256sum mieru > mieru_${VERSION}_linux_arm64.sha256.txt
+ tar -zcvf mieru_${VERSION}_linux_arm64.tar.gz mieru
+ sha256sum mieru_${VERSION}_linux_arm64.tar.gz > mieru_${VERSION}_linux_arm64.tar.gz.sha256.txt
+ mv mieru_${VERSION}_linux_arm64.tar.gz ../../
+ mv mieru_${VERSION}_linux_arm64.tar.gz.sha256.txt ../../
# Build linux armv7 client.
.PHONY: client-linux-armv7
client-linux-armv7:
mkdir -p release/linux/armv7
env GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/armv7/mieru cmd/mieru/mieru.go
- cd release/linux/armv7;\
- sha256sum mieru > mieru_${VERSION}_linux_armv7.sha256.txt;\
- tar -zcvf mieru_${VERSION}_linux_armv7.tar.gz mieru;\
- sha256sum mieru_${VERSION}_linux_armv7.tar.gz > mieru_${VERSION}_linux_armv7.tar.gz.sha256.txt
- mv release/linux/armv7/mieru_${VERSION}_linux_armv7.tar.gz release/
- mv release/linux/armv7/mieru_${VERSION}_linux_armv7.tar.gz.sha256.txt release/
+ cd release/linux/armv7
+ sha256sum mieru > mieru_${VERSION}_linux_armv7.sha256.txt
+ tar -zcvf mieru_${VERSION}_linux_armv7.tar.gz mieru
+ sha256sum mieru_${VERSION}_linux_armv7.tar.gz > mieru_${VERSION}_linux_armv7.tar.gz.sha256.txt
+ mv mieru_${VERSION}_linux_armv7.tar.gz ../../
+ mv mieru_${VERSION}_linux_armv7.tar.gz.sha256.txt ../../
# Build linux riscv64 client.
.PHONY: client-linux-riscv64
client-linux-riscv64:
mkdir -p release/linux/riscv64
env GOOS=linux GOARCH=riscv64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/riscv64/mieru cmd/mieru/mieru.go
- cd release/linux/riscv64;\
- sha256sum mieru > mieru_${VERSION}_linux_riscv64.sha256.txt;\
- tar -zcvf mieru_${VERSION}_linux_riscv64.tar.gz mieru;\
- sha256sum mieru_${VERSION}_linux_riscv64.tar.gz > mieru_${VERSION}_linux_riscv64.tar.gz.sha256.txt
- mv release/linux/riscv64/mieru_${VERSION}_linux_riscv64.tar.gz release/
- mv release/linux/riscv64/mieru_${VERSION}_linux_riscv64.tar.gz.sha256.txt release/
+ cd release/linux/riscv64
+ sha256sum mieru > mieru_${VERSION}_linux_riscv64.sha256.txt
+ tar -zcvf mieru_${VERSION}_linux_riscv64.tar.gz mieru
+ sha256sum mieru_${VERSION}_linux_riscv64.tar.gz > mieru_${VERSION}_linux_riscv64.tar.gz.sha256.txt
+ mv mieru_${VERSION}_linux_riscv64.tar.gz ../../
+ mv mieru_${VERSION}_linux_riscv64.tar.gz.sha256.txt ../../
# Build MacOS clients.
.PHONY: client-mac
@@ -155,24 +159,24 @@ client-mac: client-mac-amd64 client-mac-arm64
client-mac-amd64:
mkdir -p release/macos/amd64
env GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/macos/amd64/mieru cmd/mieru/mieru.go
- cd release/macos/amd64;\
- sha256sum mieru > mieru_${VERSION}_macos_amd64.sha256.txt;\
- tar -zcvf mieru_${VERSION}_macos_amd64.tar.gz mieru;\
- sha256sum mieru_${VERSION}_macos_amd64.tar.gz > mieru_${VERSION}_macos_amd64.tar.gz.sha256.txt
- mv release/macos/amd64/mieru_${VERSION}_macos_amd64.tar.gz release/
- mv release/macos/amd64/mieru_${VERSION}_macos_amd64.tar.gz.sha256.txt release/
+ cd release/macos/amd64
+ sha256sum mieru > mieru_${VERSION}_macos_amd64.sha256.txt
+ tar -zcvf mieru_${VERSION}_macos_amd64.tar.gz mieru
+ sha256sum mieru_${VERSION}_macos_amd64.tar.gz > mieru_${VERSION}_macos_amd64.tar.gz.sha256.txt
+ mv mieru_${VERSION}_macos_amd64.tar.gz ../../
+ mv mieru_${VERSION}_macos_amd64.tar.gz.sha256.txt ../../
# Build MacOS arm64 client.
.PHONY: client-mac-arm64
client-mac-arm64:
mkdir -p release/macos/arm64
env GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/macos/arm64/mieru cmd/mieru/mieru.go
- cd release/macos/arm64;\
- sha256sum mieru > mieru_${VERSION}_macos_arm64.sha256.txt;\
- tar -zcvf mieru_${VERSION}_macos_arm64.tar.gz mieru;\
- sha256sum mieru_${VERSION}_macos_arm64.tar.gz > mieru_${VERSION}_macos_arm64.tar.gz.sha256.txt
- mv release/macos/arm64/mieru_${VERSION}_macos_arm64.tar.gz release/
- mv release/macos/arm64/mieru_${VERSION}_macos_arm64.tar.gz.sha256.txt release/
+ cd release/macos/arm64
+ sha256sum mieru > mieru_${VERSION}_macos_arm64.sha256.txt
+ tar -zcvf mieru_${VERSION}_macos_arm64.tar.gz mieru
+ sha256sum mieru_${VERSION}_macos_arm64.tar.gz > mieru_${VERSION}_macos_arm64.tar.gz.sha256.txt
+ mv mieru_${VERSION}_macos_arm64.tar.gz ../../
+ mv mieru_${VERSION}_macos_arm64.tar.gz.sha256.txt ../../
# Build windows clients.
.PHONY: client-windows
@@ -183,24 +187,24 @@ client-windows: client-windows-x86 client-windows-amd64
client-windows-x86:
mkdir -p release/windows/386
env GOOS=windows GOARCH=386 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/windows/386/mieru.exe cmd/mieru/mieru.go
- cd release/windows/386;\
- sha256sum mieru.exe > mieru_${VERSION}_windows_x86.exe.sha256.txt;\
- zip -r mieru_${VERSION}_windows_x86.zip mieru.exe;\
- sha256sum mieru_${VERSION}_windows_x86.zip > mieru_${VERSION}_windows_x86.zip.sha256.txt
- mv release/windows/386/mieru_${VERSION}_windows_x86.zip release/
- mv release/windows/386/mieru_${VERSION}_windows_x86.zip.sha256.txt release/
+ cd release/windows/386
+ sha256sum mieru.exe > mieru_${VERSION}_windows_x86.exe.sha256.txt
+ zip -r mieru_${VERSION}_windows_x86.zip mieru.exe
+ sha256sum mieru_${VERSION}_windows_x86.zip > mieru_${VERSION}_windows_x86.zip.sha256.txt
+ mv mieru_${VERSION}_windows_x86.zip ../../
+ mv mieru_${VERSION}_windows_x86.zip.sha256.txt ../../
# Build windows amd64 client.
.PHONY: client-windows-amd64
client-windows-amd64:
mkdir -p release/windows/amd64
env GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/windows/amd64/mieru.exe cmd/mieru/mieru.go
- cd release/windows/amd64;\
- sha256sum mieru.exe > mieru_${VERSION}_windows_amd64.exe.sha256.txt;\
- zip -r mieru_${VERSION}_windows_amd64.zip mieru.exe;\
- sha256sum mieru_${VERSION}_windows_amd64.zip > mieru_${VERSION}_windows_amd64.zip.sha256.txt
- mv release/windows/amd64/mieru_${VERSION}_windows_amd64.zip release/
- mv release/windows/amd64/mieru_${VERSION}_windows_amd64.zip.sha256.txt release/
+ cd release/windows/amd64
+ sha256sum mieru.exe > mieru_${VERSION}_windows_amd64.exe.sha256.txt
+ zip -r mieru_${VERSION}_windows_amd64.zip mieru.exe
+ sha256sum mieru_${VERSION}_windows_amd64.zip > mieru_${VERSION}_windows_amd64.zip.sha256.txt
+ mv mieru_${VERSION}_windows_amd64.zip ../../
+ mv mieru_${VERSION}_windows_amd64.zip.sha256.txt ../../
# Build linux servers.
.PHONY: server-linux
@@ -211,24 +215,24 @@ server-linux: server-linux-amd64 server-linux-arm64
server-linux-amd64:
mkdir -p release/linux/amd64
env GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/amd64/mita cmd/mita/mita.go
- cd release/linux/amd64;\
- sha256sum mita > mita_${VERSION}_linux_amd64.sha256.txt;\
- tar -zcvf mita_${VERSION}_linux_amd64.tar.gz mita;\
- sha256sum mita_${VERSION}_linux_amd64.tar.gz > mita_${VERSION}_linux_amd64.tar.gz.sha256.txt
- mv release/linux/amd64/mita_${VERSION}_linux_amd64.tar.gz release/
- mv release/linux/amd64/mita_${VERSION}_linux_amd64.tar.gz.sha256.txt release/
+ cd release/linux/amd64
+ sha256sum mita > mita_${VERSION}_linux_amd64.sha256.txt
+ tar -zcvf mita_${VERSION}_linux_amd64.tar.gz mita
+ sha256sum mita_${VERSION}_linux_amd64.tar.gz > mita_${VERSION}_linux_amd64.tar.gz.sha256.txt
+ mv mita_${VERSION}_linux_amd64.tar.gz ../../
+ mv mita_${VERSION}_linux_amd64.tar.gz.sha256.txt ../../
# Build linux arm64 server.
.PHONY: server-linux-arm64
server-linux-arm64:
mkdir -p release/linux/arm64
env GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/arm64/mita cmd/mita/mita.go
- cd release/linux/arm64;\
- sha256sum mita > mita_${VERSION}_linux_arm64.sha256.txt;\
- tar -zcvf mita_${VERSION}_linux_arm64.tar.gz mita;\
- sha256sum mita_${VERSION}_linux_arm64.tar.gz > mita_${VERSION}_linux_arm64.tar.gz.sha256.txt
- mv release/linux/arm64/mita_${VERSION}_linux_arm64.tar.gz release/
- mv release/linux/arm64/mita_${VERSION}_linux_arm64.tar.gz.sha256.txt release/
+ cd release/linux/arm64
+ sha256sum mita > mita_${VERSION}_linux_arm64.sha256.txt
+ tar -zcvf mita_${VERSION}_linux_arm64.tar.gz mita
+ sha256sum mita_${VERSION}_linux_arm64.tar.gz > mita_${VERSION}_linux_arm64.tar.gz.sha256.txt
+ mv mita_${VERSION}_linux_arm64.tar.gz ../../
+ mv mita_${VERSION}_linux_arm64.tar.gz.sha256.txt ../../
# Build debian installation packages.
.PHONY: deb
@@ -237,61 +241,61 @@ deb: deb-client-amd64 deb-client-arm64 deb-server-amd64 deb-server-arm64
# Build debian client amd64 installation package.
.PHONY: deb-client-amd64
deb-client-amd64: client-linux-amd64
- if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then\
- rm -rf build/package/mieru/amd64/debian/usr/bin;\
- mkdir -p build/package/mieru/amd64/debian/usr/bin;\
- cp release/linux/amd64/mieru build/package/mieru/amd64/debian/usr/bin/;\
- cd build/package/mieru/amd64;\
- fakeroot dpkg-deb -Zxz --build debian .;\
- cd "${ROOT}";\
- mv build/package/mieru/amd64/mieru_${VERSION}_amd64.deb release/;\
- cd release;\
- sha256sum mieru_${VERSION}_amd64.deb > mieru_${VERSION}_amd64.deb.sha256.txt;\
+ if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then
+ rm -rf build/package/mieru/amd64/debian/usr/bin
+ mkdir -p build/package/mieru/amd64/debian/usr/bin
+ cp release/linux/amd64/mieru build/package/mieru/amd64/debian/usr/bin/
+ cd build/package/mieru/amd64
+ fakeroot dpkg-deb -Zxz --build debian .
+ cd "${ROOT}"
+ mv build/package/mieru/amd64/mieru_${VERSION}_amd64.deb release/
+ cd release
+ sha256sum mieru_${VERSION}_amd64.deb > mieru_${VERSION}_amd64.deb.sha256.txt
fi
# Build debian client arm64 installation package.
.PHONY: deb-client-arm64
deb-client-arm64: client-linux-arm64
- if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then\
- rm -rf build/package/mieru/arm64/debian/usr/bin;\
- mkdir -p build/package/mieru/arm64/debian/usr/bin;\
- cp release/linux/arm64/mieru build/package/mieru/arm64/debian/usr/bin/;\
- cd build/package/mieru/arm64;\
- fakeroot dpkg-deb -Zxz --build debian .;\
- cd "${ROOT}";\
- mv build/package/mieru/arm64/mieru_${VERSION}_arm64.deb release/;\
- cd release;\
- sha256sum mieru_${VERSION}_arm64.deb > mieru_${VERSION}_arm64.deb.sha256.txt;\
+ if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then
+ rm -rf build/package/mieru/arm64/debian/usr/bin
+ mkdir -p build/package/mieru/arm64/debian/usr/bin
+ cp release/linux/arm64/mieru build/package/mieru/arm64/debian/usr/bin/
+ cd build/package/mieru/arm64
+ fakeroot dpkg-deb -Zxz --build debian .
+ cd "${ROOT}"
+ mv build/package/mieru/arm64/mieru_${VERSION}_arm64.deb release/
+ cd release
+ sha256sum mieru_${VERSION}_arm64.deb > mieru_${VERSION}_arm64.deb.sha256.txt
fi
# Build debian server amd64 installation package.
.PHONY: deb-server-amd64
deb-server-amd64: server-linux-amd64
- if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then\
- rm -rf build/package/mita/amd64/debian/usr/bin;\
- mkdir -p build/package/mita/amd64/debian/usr/bin;\
- cp release/linux/amd64/mita build/package/mita/amd64/debian/usr/bin/;\
- cd build/package/mita/amd64;\
- fakeroot dpkg-deb -Zxz --build debian .;\
- cd "${ROOT}";\
- mv build/package/mita/amd64/mita_${VERSION}_amd64.deb release/;\
- cd release;\
- sha256sum mita_${VERSION}_amd64.deb > mita_${VERSION}_amd64.deb.sha256.txt;\
+ if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then
+ rm -rf build/package/mita/amd64/debian/usr/bin
+ mkdir -p build/package/mita/amd64/debian/usr/bin
+ cp release/linux/amd64/mita build/package/mita/amd64/debian/usr/bin/
+ cd build/package/mita/amd64
+ fakeroot dpkg-deb -Zxz --build debian .
+ cd "${ROOT}"
+ mv build/package/mita/amd64/mita_${VERSION}_amd64.deb release/
+ cd release
+ sha256sum mita_${VERSION}_amd64.deb > mita_${VERSION}_amd64.deb.sha256.txt
fi
# Build debian server arm64 installation package.
.PHONY: deb-server-arm64
deb-server-arm64: server-linux-arm64
- if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then\
- rm -rf build/package/mita/arm64/debian/usr/bin;\
- mkdir -p build/package/mita/arm64/debian/usr/bin;\
- cp release/linux/arm64/mita build/package/mita/arm64/debian/usr/bin/;\
- cd build/package/mita/arm64;\
- fakeroot dpkg-deb -Zxz --build debian .;\
- cd "${ROOT}";\
- mv build/package/mita/arm64/mita_${VERSION}_arm64.deb release/;\
- cd release;\
- sha256sum mita_${VERSION}_arm64.deb > mita_${VERSION}_arm64.deb.sha256.txt;\
+ if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then
+ rm -rf build/package/mita/arm64/debian/usr/bin
+ mkdir -p build/package/mita/arm64/debian/usr/bin
+ cp release/linux/arm64/mita build/package/mita/arm64/debian/usr/bin/
+ cd build/package/mita/arm64
+ fakeroot dpkg-deb -Zxz --build debian .
+ cd "${ROOT}"
+ mv build/package/mita/arm64/mita_${VERSION}_arm64.deb release/
+ cd release
+ sha256sum mita_${VERSION}_arm64.deb > mita_${VERSION}_arm64.deb.sha256.txt
fi
# Build RPM installation packages.
@@ -301,57 +305,57 @@ rpm: rpm-client-amd64 rpm-client-arm64 rpm-server-amd64 rpm-server-arm64
# Build RPM client amd64 installation package.
.PHONY: rpm-client-amd64
rpm-client-amd64: client-linux-amd64
- if [ ! -z $$(command -v rpmbuild) ]; then\
- rm -rf build/package/mieru/amd64/rpm/mieru;\
- cp release/linux/amd64/mieru build/package/mieru/amd64/rpm/;\
- cd build/package/mieru/amd64/rpm;\
- rpmbuild -bb --target x86_64 --build-in-place --define "_topdir $$(pwd)" mieru.spec;\
- cd "${ROOT}";\
- mv build/package/mieru/amd64/rpm/RPMS/x86_64/mieru-${VERSION}-1.x86_64.rpm release/;\
- cd release;\
- sha256sum mieru-${VERSION}-1.x86_64.rpm > mieru-${VERSION}-1.x86_64.rpm.sha256.txt;\
+ if [ ! -z $$(command -v rpmbuild) ]; then
+ rm -rf build/package/mieru/amd64/rpm/mieru
+ cp release/linux/amd64/mieru build/package/mieru/amd64/rpm/
+ cd build/package/mieru/amd64/rpm
+ rpmbuild -bb --target x86_64 --build-in-place --define "_topdir $$(pwd)" mieru.spec
+ cd "${ROOT}"
+ mv build/package/mieru/amd64/rpm/RPMS/x86_64/mieru-${VERSION}-1.x86_64.rpm release/
+ cd release
+ sha256sum mieru-${VERSION}-1.x86_64.rpm > mieru-${VERSION}-1.x86_64.rpm.sha256.txt
fi
# Build RPM client arm64 installation package.
.PHONY: rpm-client-arm64
rpm-client-arm64: client-linux-arm64
- if [ ! -z $$(command -v rpmbuild) ]; then\
- rm -rf build/package/mieru/arm64/rpm/mieru;\
- cp release/linux/arm64/mieru build/package/mieru/arm64/rpm/;\
- cd build/package/mieru/arm64/rpm;\
- rpmbuild -bb --target aarch64 --build-in-place --define "_topdir $$(pwd)" mieru.spec;\
- cd "${ROOT}";\
- mv build/package/mieru/arm64/rpm/RPMS/aarch64/mieru-${VERSION}-1.aarch64.rpm release/;\
- cd release;\
- sha256sum mieru-${VERSION}-1.aarch64.rpm > mieru-${VERSION}-1.aarch64.rpm.sha256.txt;\
+ if [ ! -z $$(command -v rpmbuild) ]; then
+ rm -rf build/package/mieru/arm64/rpm/mieru
+ cp release/linux/arm64/mieru build/package/mieru/arm64/rpm/
+ cd build/package/mieru/arm64/rpm
+ rpmbuild -bb --target aarch64 --build-in-place --define "_topdir $$(pwd)" mieru.spec
+ cd "${ROOT}"
+ mv build/package/mieru/arm64/rpm/RPMS/aarch64/mieru-${VERSION}-1.aarch64.rpm release/
+ cd release
+ sha256sum mieru-${VERSION}-1.aarch64.rpm > mieru-${VERSION}-1.aarch64.rpm.sha256.txt
fi
# Build RPM server amd64 installation package.
.PHONY: rpm-server-amd64
rpm-server-amd64: server-linux-amd64
- if [ ! -z $$(command -v rpmbuild) ]; then\
- rm -rf build/package/mita/amd64/rpm/mita;\
- cp release/linux/amd64/mita build/package/mita/amd64/rpm/;\
- cd build/package/mita/amd64/rpm;\
- rpmbuild -bb --target x86_64 --build-in-place --define "_topdir $$(pwd)" mita.spec;\
- cd "${ROOT}";\
- mv build/package/mita/amd64/rpm/RPMS/x86_64/mita-${VERSION}-1.x86_64.rpm release/;\
- cd release;\
- sha256sum mita-${VERSION}-1.x86_64.rpm > mita-${VERSION}-1.x86_64.rpm.sha256.txt;\
+ if [ ! -z $$(command -v rpmbuild) ]; then
+ rm -rf build/package/mita/amd64/rpm/mita
+ cp release/linux/amd64/mita build/package/mita/amd64/rpm/
+ cd build/package/mita/amd64/rpm
+ rpmbuild -bb --target x86_64 --build-in-place --define "_topdir $$(pwd)" mita.spec
+ cd "${ROOT}"
+ mv build/package/mita/amd64/rpm/RPMS/x86_64/mita-${VERSION}-1.x86_64.rpm release/
+ cd release
+ sha256sum mita-${VERSION}-1.x86_64.rpm > mita-${VERSION}-1.x86_64.rpm.sha256.txt
fi
# Build RPM server arm64 installation package.
.PHONY: rpm-server-arm64
rpm-server-arm64: server-linux-arm64
- if [ ! -z $$(command -v rpmbuild) ]; then\
- rm -rf build/package/mita/arm64/rpm/mita;\
- cp release/linux/arm64/mita build/package/mita/arm64/rpm/;\
- cd build/package/mita/arm64/rpm;\
- rpmbuild -bb --target aarch64 --build-in-place --define "_topdir $$(pwd)" mita.spec;\
- cd "${ROOT}";\
- mv build/package/mita/arm64/rpm/RPMS/aarch64/mita-${VERSION}-1.aarch64.rpm release/;\
- cd release;\
- sha256sum mita-${VERSION}-1.aarch64.rpm > mita-${VERSION}-1.aarch64.rpm.sha256.txt;\
+ if [ ! -z $$(command -v rpmbuild) ]; then
+ rm -rf build/package/mita/arm64/rpm/mita
+ cp release/linux/arm64/mita build/package/mita/arm64/rpm/
+ cd build/package/mita/arm64/rpm
+ rpmbuild -bb --target aarch64 --build-in-place --define "_topdir $$(pwd)" mita.spec
+ cd "${ROOT}"
+ mv build/package/mita/arm64/rpm/RPMS/aarch64/mita-${VERSION}-1.aarch64.rpm release/
+ cd release
+ sha256sum mita-${VERSION}-1.aarch64.rpm > mita-${VERSION}-1.aarch64.rpm.sha256.txt
fi
# Build binaries used in integration tests.
@@ -370,18 +374,18 @@ test-binary:
# Build a docker image to run integration tests.
.PHONY: test-container
test-container: test-binary
- if [ ! -z $$(command -v docker) ]; then\
- docker build -t mieru_httptest:${SHORT_SHA} -f test/deploy/httptest/Dockerfile .;\
- docker build -t mieru_proxychain:${SHORT_SHA} -f test/deploy/proxychain/Dockerfile .;\
+ if [ ! -z $$(command -v docker) ]; then
+ docker build -t mieru_httptest:${SHORT_SHA} -f test/deploy/httptest/Dockerfile .
+ docker build -t mieru_proxychain:${SHORT_SHA} -f test/deploy/proxychain/Dockerfile .
fi
rm -f exampleapiclient mieru mieru2 mita mita2 httpserver sockshttpclient socksudpclient udpserver
# Run docker integration tests.
.PHONY: run-container-test
run-container-test: test-container
- if [ ! -z $$(command -v docker) ]; then\
- docker run mieru_httptest:${SHORT_SHA};\
- docker run mieru_proxychain:${SHORT_SHA};\
+ if [ ! -z $$(command -v docker) ]; then
+ docker run mieru_httptest:${SHORT_SHA}
+ docker run mieru_proxychain:${SHORT_SHA}
fi
# Generate source code from protobuf.
@@ -396,19 +400,19 @@ endif
.PHONY: protobuf
protobuf:
# Download location: https://github.com/protocolbuffers/protobuf/releases
- if [ ! -x "${ROOT}/tools/build/protoc" ]; then\
- curl -o "${ROOT}/tools/build/protoc" https://raw.githubusercontent.com/enfein/buildtools/main/protoc/22.3/linux_${PROTOC_ARCH}/bin/protoc;\
- chmod 755 "${ROOT}/tools/build/protoc";\
+ if [ ! -x "${ROOT}/tools/build/protoc" ]; then
+ curl -o "${ROOT}/tools/build/protoc" https://raw.githubusercontent.com/enfein/buildtools/main/protoc/22.3/linux_${PROTOC_ARCH}/bin/protoc
+ chmod 755 "${ROOT}/tools/build/protoc"
fi
# Download location: https://github.com/protocolbuffers/protobuf-go/releases
- if [ ! -x "${ROOT}/tools/build/protoc-gen-go" ]; then\
- curl -o "${ROOT}/tools/build/protoc-gen-go" https://raw.githubusercontent.com/enfein/buildtools/main/protoc-gen-go/1.30.0/linux_${PROTOC_ARCH}/protoc-gen-go;\
- chmod 755 "${ROOT}/tools/build/protoc-gen-go";\
+ if [ ! -x "${ROOT}/tools/build/protoc-gen-go" ]; then
+ curl -o "${ROOT}/tools/build/protoc-gen-go" https://raw.githubusercontent.com/enfein/buildtools/main/protoc-gen-go/1.30.0/linux_${PROTOC_ARCH}/protoc-gen-go
+ chmod 755 "${ROOT}/tools/build/protoc-gen-go"
fi
# Download location: https://github.com/grpc/grpc-go/releases
- if [ ! -x "${ROOT}/tools/build/protoc-gen-go-grpc" ]; then\
- curl -o "${ROOT}/tools/build/protoc-gen-go-grpc" https://raw.githubusercontent.com/enfein/buildtools/main/protoc-gen-go-grpc/1.3.0/linux_${PROTOC_ARCH}/protoc-gen-go-grpc;\
- chmod 755 "${ROOT}/tools/build/protoc-gen-go-grpc";\
+ if [ ! -x "${ROOT}/tools/build/protoc-gen-go-grpc" ]; then
+ curl -o "${ROOT}/tools/build/protoc-gen-go-grpc" https://raw.githubusercontent.com/enfein/buildtools/main/protoc-gen-go-grpc/1.3.0/linux_${PROTOC_ARCH}/protoc-gen-go-grpc
+ chmod 755 "${ROOT}/tools/build/protoc-gen-go-grpc"
fi
PATH=${PATH}:"${ROOT}/tools/build" ${ROOT}/tools/build/protoc -I="${ROOT}/pkg" \
@@ -434,8 +438,11 @@ protobuf:
# Package source code.
.PHONY: src
src: clean
- cd ..; tar --exclude="${PROJECT_NAME}/.git" -zcvf source.tar.gz "${PROJECT_NAME}"; zip -r source.zip "${PROJECT_NAME}" -x \*.git\*
- mkdir -p release; mv ../source.tar.gz release; mv ../source.zip release
+ (cd ..; tar --exclude="${PROJECT_NAME}/.git" -zcvf source.tar.gz "${PROJECT_NAME}")
+ (cd ..; zip -r source.zip "${PROJECT_NAME}" -x "${PROJECT_NAME}/.git/*")
+ mkdir -p release
+ mv ../source.tar.gz release
+ mv ../source.zip release
# Clean all the files outside the git repository.
.PHONY: clean
diff --git a/mieru/apis/client/client.go b/mieru/apis/client/client.go
index a4246ca0fd..f66e752330 100644
--- a/mieru/apis/client/client.go
+++ b/mieru/apis/client/client.go
@@ -145,7 +145,9 @@ func (mc *mieruClient) DialContext(ctx context.Context, addr net.Addr) (net.Conn
return nil, fmt.Errorf("unsupported network type %s", netAddrSpec.Network())
}
req.DstAddr = netAddrSpec.AddrSpec
- return internal.NewEarlyConn(conn, req), nil
+ earlyConn := internal.NewEarlyConn(conn)
+ earlyConn.SetRequest(req)
+ return earlyConn, nil
}
_, err = internal.PostDialHandshake(conn, netAddrSpec)
return conn, err
diff --git a/mieru/apis/internal/early_conn.go b/mieru/apis/internal/early_conn.go
index 068031353f..6903df9a89 100644
--- a/mieru/apis/internal/early_conn.go
+++ b/mieru/apis/internal/early_conn.go
@@ -18,43 +18,61 @@ package internal
import (
"bytes"
"fmt"
- "io"
"net"
"sync"
+ "sync/atomic"
"time"
"github.com/enfein/mieru/v3/apis/constant"
"github.com/enfein/mieru/v3/apis/model"
)
-// Socks5Writer is an interface for socks5 objects that can be written to a writer.
-type Socks5Writer interface {
- WriteToSocks5(writer io.Writer) error
-}
-
-var _ Socks5Writer = (*model.Request)(nil)
-var _ Socks5Writer = (*model.Response)(nil)
-
// EarlyConn implements net.Conn interface.
// When the Write() method on the net.Conn is called for the first time,
-// it performs the initial handshake and writes the request to the server.
+// it performs the initial handshake and writes
+// the request or response to the peer.
type EarlyConn struct {
net.Conn
- object Socks5Writer
+ request atomic.Pointer[model.Request]
+ response atomic.Pointer[model.Response]
+ peerResponse atomic.Pointer[model.Response]
handshakeOnce sync.Once
handshakeErr error
handshaked chan struct{}
}
// NewEarlyConn creates a new EarlyConn.
-func NewEarlyConn(conn net.Conn, object Socks5Writer) *EarlyConn {
+func NewEarlyConn(conn net.Conn) *EarlyConn {
return &EarlyConn{
Conn: conn,
- object: object,
handshaked: make(chan struct{}),
}
}
+func (c *EarlyConn) SetRequest(request *model.Request) {
+ if c.response.Load() != nil {
+ panic("can't set request when response is not empty")
+ }
+ select {
+ case <-c.handshaked:
+ panic("can't set request when handshake already done")
+ default:
+ c.request.Store(request)
+ }
+}
+
+func (c *EarlyConn) SetResponse(response *model.Response) {
+ if c.request.Load() != nil {
+ panic("can't set response when request is not empty")
+ }
+ select {
+ case <-c.handshaked:
+ panic("can't set response when handshake already done")
+ default:
+ c.response.Store(response)
+ }
+}
+
// Read will block until a message is received or an error occurs.
// It waits for the handshake to complete.
func (c *EarlyConn) Read(b []byte) (n int, err error) {
@@ -103,10 +121,26 @@ func (c *EarlyConn) NeedHandshake() bool {
}
}
+// PeerResponse returns the response from the peer.
+// It returns nil if the handshake has not been performed yet.
+func (c *EarlyConn) PeerResponse() *model.Response {
+ return c.peerResponse.Load()
+}
+
func (c *EarlyConn) doHandshakeAndWrite(b []byte) error {
var buf bytes.Buffer
- if err := c.object.WriteToSocks5(&buf); err != nil {
- return err
+ request := c.request.Load()
+ response := c.response.Load()
+ if request != nil {
+ if err := request.WriteToSocks5(&buf); err != nil {
+ return err
+ }
+ } else if response != nil {
+ if err := response.WriteToSocks5(&buf); err != nil {
+ return err
+ }
+ } else {
+ return fmt.Errorf("no request or response set")
}
if len(b) > 0 {
buf.Write(b)
@@ -116,8 +150,7 @@ func (c *EarlyConn) doHandshakeAndWrite(b []byte) error {
}
// If this is a request, read the response.
- switch c.object.(type) {
- case *model.Request:
+ if request != nil {
c.Conn.SetReadDeadline(time.Now().Add(10 * time.Second))
defer c.Conn.SetReadDeadline(time.Time{})
@@ -128,11 +161,7 @@ func (c *EarlyConn) doHandshakeAndWrite(b []byte) error {
if resp.Reply != constant.Socks5ReplySuccess {
return fmt.Errorf("server returned socks5 error code %d", resp.Reply)
}
- case *model.Response:
- // No need to read anything.
- default:
- return fmt.Errorf("unsupported object type for EarlyConn: %T", c.object)
+ c.peerResponse.Store(&resp)
}
-
return nil
}
diff --git a/mieru/apis/internal/early_conn_test.go b/mieru/apis/internal/early_conn_test.go
index b8b76a3777..8f64268912 100644
--- a/mieru/apis/internal/early_conn_test.go
+++ b/mieru/apis/internal/early_conn_test.go
@@ -78,7 +78,8 @@ func TestEarlyConn_Request(t *testing.T) {
Port: 80,
},
}
- conn := internal.NewEarlyConn(clientConn, req)
+ conn := internal.NewEarlyConn(clientConn)
+ conn.SetRequest(req)
defer conn.Close()
// The first write triggers the handshake.
@@ -143,7 +144,8 @@ func TestEarlyConn_Response(t *testing.T) {
Port: 1080,
},
}
- conn := internal.NewEarlyConn(clientConn, resp)
+ conn := internal.NewEarlyConn(clientConn)
+ conn.SetResponse(resp)
defer conn.Close()
// The first write triggers sending the response.
diff --git a/mihomo/hub/executor/executor.go b/mihomo/hub/executor/executor.go
index 041e6fc36b..44f7f14418 100644
--- a/mihomo/hub/executor/executor.go
+++ b/mihomo/hub/executor/executor.go
@@ -39,7 +39,7 @@ import (
"github.com/metacubex/mihomo/listener/inner"
"github.com/metacubex/mihomo/listener/tproxy"
"github.com/metacubex/mihomo/log"
- "github.com/metacubex/mihomo/ntp"
+ "github.com/metacubex/mihomo/ntp/ntp"
"github.com/metacubex/mihomo/tunnel"
)
diff --git a/mihomo/ntp/service.go b/mihomo/ntp/ntp/service.go
similarity index 80%
rename from mihomo/ntp/service.go
rename to mihomo/ntp/ntp/service.go
index 8473df6a8f..8f27d0aac1 100644
--- a/mihomo/ntp/service.go
+++ b/mihomo/ntp/ntp/service.go
@@ -3,18 +3,18 @@ package ntp
import (
"context"
"sync"
- "sync/atomic"
"time"
"github.com/metacubex/mihomo/component/dialer"
"github.com/metacubex/mihomo/component/proxydialer"
"github.com/metacubex/mihomo/log"
+ mihomoNtp "github.com/metacubex/mihomo/ntp"
M "github.com/metacubex/sing/common/metadata"
"github.com/metacubex/sing/common/ntp"
)
-var globalSrv atomic.Pointer[Service]
+var globalSrv *Service
var globalMu sync.Mutex
type Service struct {
@@ -23,21 +23,20 @@ type Service struct {
ticker *time.Ticker
ctx context.Context
cancel context.CancelFunc
- offset atomic.Int64 // [time.Duration]
syncSystemTime bool
}
func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, syncSystemTime bool) {
globalMu.Lock()
defer globalMu.Unlock()
- if service := globalSrv.Swap(nil); service != nil {
- service.Stop()
+ if globalSrv != nil {
+ globalSrv.Stop()
}
if server == "" || interval <= 0 {
return
}
ctx, cancel := context.WithCancel(context.Background())
- service := &Service{
+ globalSrv = &Service{
server: M.ParseSocksaddr(server),
dialer: proxydialer.NewByNameSingDialer(dialerProxy, dialer.NewDialer()),
ticker: time.NewTicker(interval * time.Minute),
@@ -45,8 +44,7 @@ func ReCreateNTPService(server string, interval time.Duration, dialerProxy strin
cancel: cancel,
syncSystemTime: syncSystemTime,
}
- service.Start()
- globalSrv.Store(service)
+ globalSrv.Start()
}
func (srv *Service) Start() {
@@ -59,10 +57,6 @@ func (srv *Service) Stop() {
srv.cancel()
}
-func (srv *Service) Offset() time.Duration {
- return time.Duration(srv.offset.Load())
-}
-
func (srv *Service) update() error {
var response *ntp.Response
var err error
@@ -80,7 +74,7 @@ func (srv *Service) update() error {
} else if offset < time.Duration(0) {
log.Infoln("System clock is behind NTP time by %s", -offset)
}
- srv.offset.Store(int64(offset))
+ mihomoNtp.SetOffset(offset)
if srv.syncSystemTime {
timeNow := response.Time
syncErr := setSystemTime(timeNow)
@@ -97,7 +91,7 @@ func (srv *Service) update() error {
}
func (srv *Service) loopUpdate() {
- defer srv.offset.Store(0)
+ defer mihomoNtp.SetOffset(0)
defer srv.ticker.Stop()
for {
err := srv.update()
@@ -111,13 +105,3 @@ func (srv *Service) loopUpdate() {
}
}
}
-
-func Now() time.Time {
- now := time.Now()
- if service := globalSrv.Load(); service != nil {
- if offset := service.Offset(); offset.Abs() > 0 {
- now = now.Add(offset)
- }
- }
- return now
-}
diff --git a/mihomo/ntp/time_stub.go b/mihomo/ntp/ntp/time_stub.go
similarity index 100%
rename from mihomo/ntp/time_stub.go
rename to mihomo/ntp/ntp/time_stub.go
diff --git a/mihomo/ntp/time_unix.go b/mihomo/ntp/ntp/time_unix.go
similarity index 100%
rename from mihomo/ntp/time_unix.go
rename to mihomo/ntp/ntp/time_unix.go
diff --git a/mihomo/ntp/time_windows.go b/mihomo/ntp/ntp/time_windows.go
similarity index 100%
rename from mihomo/ntp/time_windows.go
rename to mihomo/ntp/ntp/time_windows.go
diff --git a/mihomo/ntp/time.go b/mihomo/ntp/time.go
new file mode 100644
index 0000000000..e69be02564
--- /dev/null
+++ b/mihomo/ntp/time.go
@@ -0,0 +1,28 @@
+// Package ntp provide time.Now
+//
+// DON'T import other package in mihomo to keep minimal internal dependencies
+package ntp
+
+import (
+ "time"
+
+ "sync/atomic"
+)
+
+var _offset atomic.Int64 // [time.Duration]
+
+func SetOffset(offset time.Duration) {
+ _offset.Store(int64(offset))
+}
+
+func GetOffset() time.Duration {
+ return time.Duration(_offset.Load())
+}
+
+func Now() time.Time {
+ now := time.Now()
+ if offset := GetOffset(); offset != 0 {
+ now = now.Add(offset)
+ }
+ return now
+}
diff --git a/mihomo/rules/provider/mrs_converter.go b/mihomo/rules/provider/mrs_converter.go
index dbbe51cb29..edc24e7eea 100644
--- a/mihomo/rules/provider/mrs_converter.go
+++ b/mihomo/rules/provider/mrs_converter.go
@@ -34,7 +34,7 @@ func ConvertToMrs(buf []byte, behavior P.RuleBehavior, format P.RuleFormat, w io
}
var encoder *zstd.Encoder
- encoder, err = zstd.NewWriter(w, zstd.WithEncoderLevel(zstd.SpeedBestCompression))
+ encoder, err = zstd.NewWriter(w)
if err != nil {
return err
}
diff --git a/openclash/.github/workflows/update_third_party_resources.yml b/openclash/.github/workflows/update_third_party_resources.yml
deleted file mode 100644
index ef5813ff44..0000000000
--- a/openclash/.github/workflows/update_third_party_resources.yml
+++ /dev/null
@@ -1,213 +0,0 @@
-name: Update Third-Party Resources
-
-on:
- schedule:
- - cron: '30 0 */3 * *'
- workflow_dispatch:
-
-jobs:
- update-resources:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout Repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 1
- ref: dev
-
- - name: Set up environment
- run: |
- sudo apt-get update
- sudo apt-get -y install curl wget unzip git jq coreutils
-
- - name: Set file paths
- run: |
- echo "CHNR_PATH=luci-app-openclash/root/etc/openclash/china_ip_route.ipset" >> $GITHUB_ENV
- echo "CHNR6_PATH=luci-app-openclash/root/etc/openclash/china_ip6_route.ipset" >> $GITHUB_ENV
- echo "YACD_PATH=luci-app-openclash/root/usr/share/openclash/ui/yacd" >> $GITHUB_ENV
- echo "ZASHBOARD_PATH=luci-app-openclash/root/usr/share/openclash/ui/zashboard" >> $GITHUB_ENV
- echo "METACUBEXD_PATH=luci-app-openclash/root/usr/share/openclash/ui/metacubexd" >> $GITHUB_ENV
- echo "GEOSITE_PATH=luci-app-openclash/root/etc/openclash/GeoSite.dat" >> $GITHUB_ENV
- echo "COUNTRY_MMDB_PATH=luci-app-openclash/root/etc/openclash/Country.mmdb" >> $GITHUB_ENV
-
- - name: Update China IP Route Files
- id: chnr
- run: |
- mkdir -p tmp
- echo "Downloading China IP Route files..."
- curl -sSL https://ispip.clang.cn/all_cn.txt -o tmp/china_ip_route.ipset
- mkdir -p $(dirname $CHNR_PATH)
- UPDATED=0
- if [ -f "$CHNR_PATH" ]; then
- if ! cmp -s tmp/china_ip_route.ipset "$CHNR_PATH"; then
- echo "China IP Route list has been updated, replacing old version."
- cp tmp/china_ip_route.ipset "$CHNR_PATH"
- UPDATED=1
- else
- echo "China IP Route list is up to date."
- fi
- else
- echo "China IP Route list file doesn't exist, creating it."
- cp tmp/china_ip_route.ipset "$CHNR_PATH"
- UPDATED=1
- fi
- curl -sSL https://ispip.clang.cn/all_cn_ipv6.txt -o tmp/china_ip6_route.ipset
- mkdir -p $(dirname $CHNR6_PATH)
- UPDATED6=0
- if [ -f "$CHNR6_PATH" ]; then
- if ! cmp -s tmp/china_ip6_route.ipset "$CHNR6_PATH"; then
- echo "China IP6 Route list has been updated, replacing old version."
- cp tmp/china_ip6_route.ipset "$CHNR6_PATH"
- UPDATED6=1
- else
- echo "China IP6 Route list is up to date."
- fi
- else
- echo "China IP6 Route list file doesn't exist, creating it."
- cp tmp/china_ip6_route.ipset "$CHNR6_PATH"
- UPDATED6=1
- fi
- echo "updated=$UPDATED" >> $GITHUB_OUTPUT
- echo "updated6=$UPDATED6" >> $GITHUB_OUTPUT
-
- - name: Update MetaCubeXD UI
- id: metacubexd
- run: |
- echo "Downloading latest MetaCubeXD UI zip from gh-pages branch..."
- mkdir -p tmp/metacubexd_zip
- curl -sSL https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip -o tmp/metacubexd.zip
- unzip -q -o tmp/metacubexd.zip -d tmp/metacubexd_zip
- METACUBEXD_UNZIP_PATH="tmp/metacubexd_zip/metacubexd-gh-pages"
- mkdir -p "$METACUBEXD_PATH"
- UPDATED=0
- if [ -d "$METACUBEXD_PATH" ]; then
- if diff -qr "$METACUBEXD_UNZIP_PATH"/ "$METACUBEXD_PATH"/ >/dev/null; then
- echo "MetaCubeXD UI is up to date."
- else
- echo "MetaCubeXD UI has been updated, replacing old version."
- rm -rf "$METACUBEXD_PATH"/*
- cp -rf "$METACUBEXD_UNZIP_PATH"/* "$METACUBEXD_PATH"
- UPDATED=1
- fi
- else
- echo "MetaCubeXD UI directory doesn't exist, creating it."
- mkdir -p "$METACUBEXD_PATH"
- cp -rf "$METACUBEXD_UNZIP_PATH"/* "$METACUBEXD_PATH"
- UPDATED=1
- fi
- echo "updated=$UPDATED" >> $GITHUB_OUTPUT
-
- - name: Update Yacd UI
- id: yacd
- run: |
- echo "Downloading latest Yacd UI zip from gh-pages branch..."
- mkdir -p tmp/yacd_zip
- curl -sSL https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip -o tmp/yacd.zip
- unzip -q -o tmp/yacd.zip -d tmp/yacd_zip
- YACD_UNZIP_PATH="tmp/yacd_zip/Yacd-meta-gh-pages"
- mkdir -p "$YACD_PATH"
- UPDATED=0
- if [ -d "$YACD_PATH" ]; then
- if diff -qr "$YACD_UNZIP_PATH"/ "$YACD_PATH"/ >/dev/null; then
- echo "Yacd UI is up to date."
- else
- echo "Yacd UI has been updated, replacing old version."
- rm -rf "$YACD_PATH"/*
- cp -rf "$YACD_UNZIP_PATH"/* "$YACD_PATH"
- UPDATED=1
- fi
- else
- echo "Yacd UI directory doesn't exist, creating it."
- mkdir -p "$YACD_PATH"
- cp -rf "$YACD_UNZIP_PATH"/* "$YACD_PATH"
- UPDATED=1
- fi
- echo "updated=$UPDATED" >> $GITHUB_OUTPUT
-
- - name: Update ZashBoard UI
- id: zashboard
- run: |
- echo "Downloading latest ZashBoard UI release zip..."
- mkdir -p tmp/zashboard_zip
- curl -sSL https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip -o tmp/zashboard.zip
- unzip -q -o tmp/zashboard.zip -d tmp/zashboard_zip
- mkdir -p "$ZASHBOARD_PATH"
- UPDATED=0
- if [ -d "$ZASHBOARD_PATH" ]; then
- if diff -qr tmp/zashboard_zip/dist/ "$ZASHBOARD_PATH"/ >/dev/null; then
- echo "ZashBoard UI is up to date."
- else
- echo "ZashBoard UI has been updated, replacing old version."
- rm -rf "$ZASHBOARD_PATH"/*
- cp -rf tmp/zashboard_zip/dist/* "$ZASHBOARD_PATH"
- UPDATED=1
- fi
- else
- echo "ZashBoard UI directory doesn't exist, creating it."
- mkdir -p "$ZASHBOARD_PATH"
- cp -rf tmp/zashboard_zip/dist/* "$ZASHBOARD_PATH"
- UPDATED=1
- fi
- echo "updated=$UPDATED" >> $GITHUB_OUTPUT
-
- - name: Update GeoSite files
- id: geo
- run: |
- RULES_RELEASE=$(curl -s https://api.github.com/repos/Loyalsoldier/v2ray-rules-dat/releases/latest | jq -r '.tag_name')
- echo "Latest v2ray-rules-dat version: $RULES_RELEASE"
- curl -sSL "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/download/${RULES_RELEASE}/geosite.dat" -o tmp/GeoSite.dat
- mkdir -p $(dirname "$GEOSITE_PATH")
- UPDATED_GEOSITE=0
- if [ -f "$GEOSITE_PATH" ]; then
- if ! cmp -s tmp/GeoSite.dat "$GEOSITE_PATH"; then
- echo "GeoSite.dat has been updated, replacing old version."
- cp tmp/GeoSite.dat "$GEOSITE_PATH"
- UPDATED_GEOSITE=1
- else
- echo "GeoSite.dat is up to date."
- fi
- else
- echo "GeoSite.dat file doesn't exist, creating it."
- cp tmp/GeoSite.dat "$GEOSITE_PATH"
- UPDATED_GEOSITE=1
- fi
- echo "geosite=$UPDATED_GEOSITE" >> $GITHUB_OUTPUT
-
- - name: Update Country.mmdb
- id: mmdb
- run: |
- curl -sSL "https://github.com/alecthw/mmdb_china_ip_list/releases/latest/download/Country-lite.mmdb" -o tmp/Country.mmdb
- mkdir -p $(dirname "$COUNTRY_MMDB_PATH")
- UPDATED=0
- if [ -f "$COUNTRY_MMDB_PATH" ]; then
- if ! cmp -s tmp/Country.mmdb "$COUNTRY_MMDB_PATH"; then
- echo "Country.mmdb has been updated, replacing old version."
- cp tmp/Country.mmdb "$COUNTRY_MMDB_PATH"
- UPDATED=1
- else
- echo "Country.mmdb is up to date."
- fi
- else
- echo "Country.mmdb file doesn't exist, creating it."
- cp tmp/Country.mmdb "$COUNTRY_MMDB_PATH"
- UPDATED=1
- fi
- echo "updated=$UPDATED" >> $GITHUB_OUTPUT
-
- - name: Commit changes
- if: |
- steps.chnr.outputs.updated == '1' ||
- steps.chnr.outputs.updated6 == '1' ||
- steps.metacubexd.outputs.updated == '1' ||
- steps.yacd.outputs.updated == '1' ||
- steps.zashboard.outputs.updated == '1' ||
- steps.geo.outputs.geosite == '1' ||
- steps.mmdb.outputs.updated == '1'
- run: |
- rm -rf tmp
- git config user.name 'github-actions[bot]'
- git config user.email 'github-actions[bot]@users.noreply.github.com'
- git add .
- UPDATE_MSG="Chore: update third-party resources"
- git commit -m "$UPDATE_MSG"
- git push
\ No newline at end of file
diff --git a/openclash/luci-app-openclash/Makefile b/openclash/luci-app-openclash/Makefile
index 2ce9d306af..33fe329b5a 100644
--- a/openclash/luci-app-openclash/Makefile
+++ b/openclash/luci-app-openclash/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash
-PKG_VERSION:=0.47.022
+PKG_VERSION:=0.47.024
PKG_MAINTAINER:=vernesong
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
diff --git a/openclash/luci-app-openclash/root/etc/init.d/openclash b/openclash/luci-app-openclash/root/etc/init.d/openclash
index 7ddc4c4d06..d34bc27014 100644
--- a/openclash/luci-app-openclash/root/etc/init.d/openclash
+++ b/openclash/luci-app-openclash/root/etc/init.d/openclash
@@ -651,10 +651,21 @@ do_run_file()
} >/dev/null 2>&1
+container() {
+ [ -f "/proc/1/cgroup" ] && grep -qiE "(docker|containerd|lxc|podman|kubepods|container)" /proc/1/cgroup 2>/dev/null && return 0
+ [ -f "/proc/1/environ" ] && grep -qiE "(docker|containerd|lxc|podman|kubepods|container)" /proc/1/environ 2>/dev/null && return 0
+ [ -f "/.dockerenv" ] && return 0
+ env | grep -qiE "(docker|kubernetes|container)" && return 0
+ return 1
+}
+
check_mod()
{
- modprobe $1
- if [ -z "$(lsmod |awk '{print $1}' |grep ^$1$)" ]; then
+ if container; then
+ return 0
+ fi
+ modprobe $1 2>/dev/null
+ if [ $? -ne 0 ]; then
LOG_OUT "Error:【$1】module not found, please check your system depends and try again!"
start_fail
fi
diff --git a/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml b/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml
index 1e75322cc8..eb003e12b6 100644
--- a/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml
+++ b/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml
@@ -137,9 +137,6 @@ jobs:
rm -rf temp_resp
git clone -b master --single-branch https://github.com/openwrt/packages.git temp_resp
- cd temp_resp
- git checkout 2b99cd7d7637da0f152da378994f699aaf0dd44d
- cd ..
echo "update golang version"
rm -rf feeds/packages/lang/golang
cp -r temp_resp/lang/golang feeds/packages/lang
@@ -147,6 +144,11 @@ jobs:
rm -rf feeds/packages/lang/rust
cp -r temp_resp/lang/rust feeds/packages/lang
rm -rf temp_resp
+
+ echo "update patch-kernel.sh"
+ git clone -b main --single-branch https://github.com/openwrt/openwrt.git temp_resp
+ cp -f temp_resp/scripts/patch-kernel.sh scripts/
+ rm -rf temp_resp
echo "Patch application completed"
#--------------------------------------end_patches--------------------------------------------
@@ -324,9 +326,6 @@ jobs:
rm -rf temp_resp
git clone -b master --single-branch https://github.com/openwrt/packages.git temp_resp
- cd temp_resp
- git checkout 2b99cd7d7637da0f152da378994f699aaf0dd44d
- cd ..
echo "update golang version"
rm -rf feeds/packages/lang/golang
cp -r temp_resp/lang/golang feeds/packages/lang
@@ -335,6 +334,10 @@ jobs:
cp -r temp_resp/lang/rust feeds/packages/lang
rm -rf temp_resp
+ git clone -b main --single-branch https://github.com/openwrt/openwrt.git temp_resp
+ cp -f temp_resp/scripts/patch-kernel.sh scripts/
+ rm -rf temp_resp
+
echo "fixed rust host build error"
sed -i 's/--set=llvm\.download-ci-llvm=false/--set=llvm.download-ci-llvm=true/' feeds/packages/lang/rust/Makefile
grep -q -- '--ci false \\' feeds/packages/lang/rust/Makefile || sed -i '/x\.py \\/a \ --ci false \\' feeds/packages/lang/rust/Makefile
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
index 39a105abac..433ed33569 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
@@ -29,7 +29,6 @@ o = s:option(DynamicList, "chnroute_url", translate("China IPs(chnroute) Update
o:depends("geo2rule", false)
o:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china.txt", translate("gaoyifan/china-operator-ip/china"))
o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN"))
-o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR"))
o:value("https://fastly.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN"))
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN"))
o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/ChinaMax/ChinaMax_IP_No_IPv6.txt", translate("ios_rule_script/ChinaMax_IP_No_IPv6"))
diff --git a/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml b/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml
index c77f5d5bfe..5174b487f4 100644
--- a/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml
+++ b/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml
@@ -136,9 +136,6 @@ jobs:
rm -rf temp_resp
git clone -b master --single-branch https://github.com/openwrt/packages.git temp_resp
- cd temp_resp
- git checkout 2b99cd7d7637da0f152da378994f699aaf0dd44d
- cd ..
echo "update golang version"
rm -rf feeds/packages/lang/golang
cp -r temp_resp/lang/golang feeds/packages/lang
@@ -147,6 +144,11 @@ jobs:
cp -r temp_resp/lang/rust feeds/packages/lang
rm -rf temp_resp
+ echo "update patch-kernel.sh"
+ git clone -b main --single-branch https://github.com/openwrt/openwrt.git temp_resp
+ cp -f temp_resp/scripts/patch-kernel.sh scripts/
+ rm -rf temp_resp
+
echo "Patch application completed"
#--------------------------------------end_patches--------------------------------------------
@@ -323,9 +325,6 @@ jobs:
rm -rf temp_resp
git clone -b master --single-branch https://github.com/openwrt/packages.git temp_resp
- cd temp_resp
- git checkout 2b99cd7d7637da0f152da378994f699aaf0dd44d
- cd ..
echo "update golang version"
rm -rf feeds/packages/lang/golang
cp -r temp_resp/lang/golang feeds/packages/lang
@@ -333,6 +332,11 @@ jobs:
rm -rf feeds/packages/lang/rust
cp -r temp_resp/lang/rust feeds/packages/lang
rm -rf temp_resp
+
+ echo "update patch-kernel.sh"
+ git clone -b main --single-branch https://github.com/openwrt/openwrt.git temp_resp
+ cp -f temp_resp/scripts/patch-kernel.sh scripts/
+ rm -rf temp_resp
echo "fixed rust host build error"
sed -i 's/--set=llvm\.download-ci-llvm=false/--set=llvm.download-ci-llvm=true/' feeds/packages/lang/rust/Makefile
diff --git a/sing-box/clients/android/version.properties b/sing-box/clients/android/version.properties
index 2d89cd6009..78cfee0f59 100644
--- a/sing-box/clients/android/version.properties
+++ b/sing-box/clients/android/version.properties
@@ -1,3 +1,3 @@
-VERSION_CODE=584
-VERSION_NAME=1.12.11
+VERSION_CODE=587
+VERSION_NAME=1.12.12
GO_VERSION=go1.25.3
diff --git a/sing-box/docs/changelog.md b/sing-box/docs/changelog.md
index 7d97f09595..2eb606d37e 100644
--- a/sing-box/docs/changelog.md
+++ b/sing-box/docs/changelog.md
@@ -2,6 +2,14 @@
icon: material/alert-decagram
---
+#### 1.13.0-alpha.27
+
+* Fixes and improvements
+
+#### 1.12.12
+
+* Fixes and improvements
+
#### 1.13.0-alpha.26
* Update quic-go to v0.55.0
diff --git a/sing-box/go.mod b/sing-box/go.mod
index e8c5661967..8476e1570d 100644
--- a/sing-box/go.mod
+++ b/sing-box/go.mod
@@ -29,7 +29,7 @@ require (
github.com/sagernet/gomobile v0.1.8
github.com/sagernet/gvisor v0.0.0-20250811.0-sing-box-mod.1
github.com/sagernet/quic-go v0.55.0-sing-box-mod.2
- github.com/sagernet/sing v0.8.0-beta.5
+ github.com/sagernet/sing v0.8.0-beta.6
github.com/sagernet/sing-mux v0.3.3
github.com/sagernet/sing-quic v0.6.0-beta.4
github.com/sagernet/sing-shadowsocks v0.2.8
diff --git a/sing-box/go.sum b/sing-box/go.sum
index 0bc63e2ea4..f9ca8bb1bb 100644
--- a/sing-box/go.sum
+++ b/sing-box/go.sum
@@ -163,8 +163,8 @@ github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/l
github.com/sagernet/quic-go v0.55.0-sing-box-mod.2 h1:I79gW4Xl5ciVARHfnp122lDAMhC0AwUCU765Q8Kxdfo=
github.com/sagernet/quic-go v0.55.0-sing-box-mod.2/go.mod h1:IE9naq7Kekj0rPAdWc0GLW1ENR7gAOQV9VRTDlKN8Bk=
github.com/sagernet/sing v0.6.9/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
-github.com/sagernet/sing v0.8.0-beta.5 h1:Cm4CnLQGNyG5Jl1U9pKWAjFUcbjchGGqn1xeXzfI5kw=
-github.com/sagernet/sing v0.8.0-beta.5/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
+github.com/sagernet/sing v0.8.0-beta.6 h1:GXv1j1xWHihx6ptyOXh0yp4jUqJoNjCqD8d+AI9rnLU=
+github.com/sagernet/sing v0.8.0-beta.6/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing-mux v0.3.3 h1:YFgt9plMWzH994BMZLmyKL37PdIVaIilwP0Jg+EcLfw=
github.com/sagernet/sing-mux v0.3.3/go.mod h1:pht8iFY4c9Xltj7rhVd208npkNaeCxzyXCgulDPLUDA=
github.com/sagernet/sing-quic v0.6.0-beta.4 h1:2k/+Xrv/pjl7AYC7LD9tcB7y1lIgw04LjJjqTI8q5Xk=
diff --git a/small/gn/Makefile b/small/gn/Makefile
index 311aead233..aabc09600a 100644
--- a/small/gn/Makefile
+++ b/small/gn/Makefile
@@ -38,7 +38,8 @@ endef
define Host/Configure
$(PYTHON) $(HOST_BUILD_DIR)/build/gen.py \
- --no-last-commit-position
+ --no-last-commit-position \
+ --allow-warnings
endef
define Host/Compile
diff --git a/small/luci-app-openclash/Makefile b/small/luci-app-openclash/Makefile
index 2ce9d306af..33fe329b5a 100644
--- a/small/luci-app-openclash/Makefile
+++ b/small/luci-app-openclash/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash
-PKG_VERSION:=0.47.022
+PKG_VERSION:=0.47.024
PKG_MAINTAINER:=vernesong
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
diff --git a/small/luci-app-openclash/root/etc/init.d/openclash b/small/luci-app-openclash/root/etc/init.d/openclash
index 7ddc4c4d06..d34bc27014 100644
--- a/small/luci-app-openclash/root/etc/init.d/openclash
+++ b/small/luci-app-openclash/root/etc/init.d/openclash
@@ -651,10 +651,21 @@ do_run_file()
} >/dev/null 2>&1
+container() {
+ [ -f "/proc/1/cgroup" ] && grep -qiE "(docker|containerd|lxc|podman|kubepods|container)" /proc/1/cgroup 2>/dev/null && return 0
+ [ -f "/proc/1/environ" ] && grep -qiE "(docker|containerd|lxc|podman|kubepods|container)" /proc/1/environ 2>/dev/null && return 0
+ [ -f "/.dockerenv" ] && return 0
+ env | grep -qiE "(docker|kubernetes|container)" && return 0
+ return 1
+}
+
check_mod()
{
- modprobe $1
- if [ -z "$(lsmod |awk '{print $1}' |grep ^$1$)" ]; then
+ if container; then
+ return 0
+ fi
+ modprobe $1 2>/dev/null
+ if [ $? -ne 0 ]; then
LOG_OUT "Error:【$1】module not found, please check your system depends and try again!"
start_fail
fi
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
index 39a105abac..433ed33569 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua
@@ -29,7 +29,6 @@ o = s:option(DynamicList, "chnroute_url", translate("China IPs(chnroute) Update
o:depends("geo2rule", false)
o:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china.txt", translate("gaoyifan/china-operator-ip/china"))
o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN"))
-o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR"))
o:value("https://fastly.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN"))
o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN"))
o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/ChinaMax/ChinaMax_IP_No_IPv6.txt", translate("ios_rule_script/ChinaMax_IP_No_IPv6"))
diff --git a/small/sing-box/Makefile b/small/sing-box/Makefile
index 293b2d8add..e4474414d8 100644
--- a/small/sing-box/Makefile
+++ b/small/sing-box/Makefile
@@ -5,12 +5,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sing-box
-PKG_VERSION:=1.12.11
+PKG_VERSION:=1.12.12
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=14f5f106812b9e0c0c91432c1a6dd0b42d8bcd2fcf3789e4ceba0892967ac41e
+PKG_HASH:=f08add81eab7e4d6091195179bb39fa3f64dbb0326feaa022994566b702d1245
PKG_LICENSE:=GPL-3.0-or-later
PKG_LICENSE_FILES:=LICENSE
diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile
index 91eb90b04d..58761e6035 100644
--- a/small/v2ray-geodata/Makefile
+++ b/small/v2ray-geodata/Makefile
@@ -21,16 +21,16 @@ define Download/geoip
HASH:=c23ac8343e9796f8cc8b670c3aeb6df6d03d4e8914437a409961477f6b226098
endef
-GEOSITE_VER:=20251026063608
+GEOSITE_VER:=20251027071824
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
define Download/geosite
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
URL_FILE:=dlc.dat
FILE:=$(GEOSITE_FILE)
- HASH:=a8d4a7ae3b3fb1ece40eb3e5af8618fc7b86fe6f51eeda6efa08a390ed7de16c
+ HASH:=e31ccd49c4c2b28e83a8124f764f711fa4d444da71c8f74d14958ae991b1e1bb
endef
-GEOSITE_IRAN_VER:=202510200041
+GEOSITE_IRAN_VER:=202510270042
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)/
diff --git a/yt-dlp/yt_dlp/extractor/urplay.py b/yt-dlp/yt_dlp/extractor/urplay.py
index 79bb8a8055..a0ac2a0bc6 100644
--- a/yt-dlp/yt_dlp/extractor/urplay.py
+++ b/yt-dlp/yt_dlp/extractor/urplay.py
@@ -8,6 +8,7 @@ from ..utils import (
try_get,
unified_timestamp,
)
+from ..utils.traversal import traverse_obj
class URPlayIE(InfoExtractor):
@@ -25,7 +26,7 @@ class URPlayIE(InfoExtractor):
'upload_date': '20171214',
'series': 'UR Samtiden - Livet, universum och rymdens märkliga musik',
'duration': 2269,
- 'categories': ['Vetenskap & teknik'],
+ 'categories': ['Kultur & historia'],
'tags': ['Kritiskt tänkande', 'Vetenskap', 'Vetenskaplig verksamhet'],
'episode': 'Om vetenskap, kritiskt tänkande och motstånd',
'age_limit': 15,
@@ -78,7 +79,7 @@ class URPlayIE(InfoExtractor):
webpage = self._download_webpage(url, video_id)
urplayer_data = self._search_nextjs_data(webpage, video_id, fatal=False) or {}
if urplayer_data:
- urplayer_data = try_get(urplayer_data, lambda x: x['props']['pageProps']['program'], dict)
+ urplayer_data = traverse_obj(urplayer_data, ('props', 'pageProps', 'productData', {dict}))
if not urplayer_data:
raise ExtractorError('Unable to parse __NEXT_DATA__')
else: