Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c0509e090 |
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "rknboost",
|
"name": "rknboost",
|
||||||
"version": "0.5.3",
|
"version": "0.5.4",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "rknboost",
|
"name": "rknboost",
|
||||||
"version": "0.5.3",
|
"version": "0.5.4",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "rknboost",
|
"name": "rknboost",
|
||||||
"version": "0.5.3",
|
"version": "0.5.4",
|
||||||
"description": "Кроссплатформенное десктопное приложение на Electron + React + TypeScript",
|
"description": "Кроссплатформенное десктопное приложение на Electron + React + TypeScript",
|
||||||
"main": "./out/main/index.js",
|
"main": "./out/main/index.js",
|
||||||
"desktopName": "rknboost.desktop",
|
"desktopName": "rknboost.desktop",
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ CONFIG="$RUN_DIR/strategy.cfg"
|
|||||||
ERRLOG="$RUN_DIR/nfqws.err"
|
ERRLOG="$RUN_DIR/nfqws.err"
|
||||||
TABLE_FAMILY=inet
|
TABLE_FAMILY=inet
|
||||||
TABLE_NAME=rknboost
|
TABLE_NAME=rknboost
|
||||||
|
# Держать в синхроне с NFQUEUE_NUM в nfqws.linux.ts (используется там же для --dry-run).
|
||||||
QUEUE_NUM=220
|
QUEUE_NUM=220
|
||||||
FW_MARK=0x40000000
|
FW_MARK=0x40000000
|
||||||
|
|
||||||
|
|||||||
@@ -78,18 +78,30 @@ export async function stageRuntime(): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* `nfqws --dry-run @<файл>` — проверяет только аргументы фильтра, root не нужен (в отличие
|
* Номер очереди NFQUEUE — держать в синхроне с `QUEUE_NUM` в `rknboost-helper.sh`
|
||||||
* от рабочего запуска демона). Запускаем бинарник из сборки напрямую: dry-run идёт от uid
|
* (там же и объяснение выбора числа). В TS он нужен только для `--dry-run` ниже: сам
|
||||||
|
* помощник получает его не отсюда, а как захардкоженное значение в своём коде.
|
||||||
|
*/
|
||||||
|
const NFQUEUE_NUM = 220
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `nfqws --dry-run @<файл>` — проверяет аргументы фильтра, root не нужен (в отличие от
|
||||||
|
* рабочего запуска демона). Запускаем бинарник из сборки напрямую: dry-run идёт от uid
|
||||||
* самого приложения, а не root, так что FUSE-примонтированный AppImage тут не помеха —
|
* самого приложения, а не root, так что FUSE-примонтированный AppImage тут не помеха —
|
||||||
* ограничение касается только `pkexec` (см. linuxStagingDir()). Дословный аналог
|
* ограничение касается только `pkexec` (см. linuxStagingDir()).
|
||||||
* `Win32Engine['dryRun']`.
|
*
|
||||||
|
* В отличие от `Win32Engine['dryRun']` (там `winws.exe --dry-run @file` без доп. флагов
|
||||||
|
* достаточно) nfqws требует `--qnum` даже для проверки — «Need queue number (--qnum)»,
|
||||||
|
* даже когда реальная очередь не открывается. Значение то же, что использует помощник
|
||||||
|
* при настоящем запуске: раз номер не совпадёт — `nft`-правила и демон всё равно будут
|
||||||
|
* рассинхронизированы, но сам факт валидности остальных аргументов dry-run проверяет верно.
|
||||||
*/
|
*/
|
||||||
export async function dryRun(configBody: string): Promise<void> {
|
export async function dryRun(configBody: string): Promise<void> {
|
||||||
const dir = await mkdtemp(join(tmpdir(), 'rknboost-dryrun-'))
|
const dir = await mkdtemp(join(tmpdir(), 'rknboost-dryrun-'))
|
||||||
const configPath = join(dir, 'dry-run.cfg')
|
const configPath = join(dir, 'dry-run.cfg')
|
||||||
try {
|
try {
|
||||||
await writeFile(configPath, configBody, 'utf8')
|
await writeFile(configPath, configBody, 'utf8')
|
||||||
await run(nfqwsPath(), ['--dry-run', `@${configPath}`])
|
await run(nfqwsPath(), ['--dry-run', `--qnum=${NFQUEUE_NUM}`, `@${configPath}`])
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const message = error instanceof Error ? error.message : String(error)
|
const message = error instanceof Error ? error.message : String(error)
|
||||||
throw new Error(`Стратегия содержит недопустимые параметры nfqws: ${message}`, {
|
throw new Error(`Стратегия содержит недопустимые параметры nfqws: ${message}`, {
|
||||||
|
|||||||
Reference in New Issue
Block a user