mirror of
https://github.com/remittor/zapret-openwrt.git
synced 2026-01-03 15:18:50 +03:00
Compare commits
20 Commits
v72.202512
...
v72.202512
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5550820fdc | ||
|
|
0e8366f7d1 | ||
|
|
ea3c774537 | ||
|
|
57b7e65532 | ||
|
|
eeacc486f9 | ||
|
|
101382faf7 | ||
|
|
21229ef152 | ||
|
|
9aaf2b29e3 | ||
|
|
246f4a08a0 | ||
|
|
3d3eb82b7b | ||
|
|
8aff441b88 | ||
|
|
1c866d5de1 | ||
|
|
57d5ab5060 | ||
|
|
5a685cfa27 | ||
|
|
21017047a8 | ||
|
|
9298388a12 | ||
|
|
0972ce0889 | ||
|
|
40084f0762 | ||
|
|
a616c6fa4e | ||
|
|
06f45e3fbb |
80
.github/ISSUE_TEMPLATE/bug_report_en.yml
vendored
Normal file
80
.github/ISSUE_TEMPLATE/bug_report_en.yml
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
---
|
||||
name: 🐛 Bug Report
|
||||
description: Report a reproducible bug
|
||||
title: "[BUG] "
|
||||
labels: ["bug"]
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for reporting a bug! Please fill out the form below.
|
||||
|
||||
Before sending, please:
|
||||
- Check [existing issues](https://github.com/remittor/zapret-openwrt/issues)
|
||||
- Read [documentation](https://github.com/remittor/zapret-openwrt/wiki/)
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: 📝 Bug description
|
||||
description: A clear and concise description of what is not working
|
||||
placeholder: A clear and concise description of the bug
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: reproduction
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: Steps to reproduce the problem. If you're following a manual, please include a link to it.
|
||||
placeholder: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: ✅ Expected behavior
|
||||
description: A clear and concise description of what was to happen
|
||||
placeholder: Describe the expected behavior
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: 🖥️ System Information
|
||||
description: |
|
||||
Information about your system (fill in all that used)
|
||||
value: |
|
||||
- **OpenWrt version**:
|
||||
- **Zapret version**:
|
||||
- **Router model**:
|
||||
render: markdown
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: strategy
|
||||
attributes:
|
||||
label: ✅ The NFQWS strategy used
|
||||
description: All parameters of the NFQWS strategy, or its name
|
||||
placeholder: If the problem is caused by the NFQWS strategy
|
||||
|
||||
- type: textarea
|
||||
id: config
|
||||
attributes:
|
||||
label: ⚙️ System Configurations
|
||||
description: |
|
||||
Relevant parts of the configuration (remove sensitive information!)
|
||||
placeholder: |
|
||||
For example:
|
||||
- Contents of /etc/config/zapret
|
||||
- Firewall configuration (Flow offloading, etc.)
|
||||
- Additional configurations required for wireless/network/dhcp, etc.
|
||||
render: shell
|
||||
80
.github/ISSUE_TEMPLATE/bug_report_ru.yml
vendored
Normal file
80
.github/ISSUE_TEMPLATE/bug_report_ru.yml
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
---
|
||||
name: 🐛 Сообщение об ошибке
|
||||
description: Сообщить об ошибке
|
||||
title: "[BUG] "
|
||||
labels: ["bug"]
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Спасибо за создание отчета об ошибке!
|
||||
|
||||
Перед отправкой, пожалуйста:
|
||||
- Проверьте [существующие issues](https://github.com/remittor/zapret-openwrt/issues)
|
||||
- Просмотрите [документацию](https://github.com/remittor/zapret-openwrt/wiki/)
|
||||
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: 📝 Описание проблемы
|
||||
description: Четкое и краткое описание того, что не работает
|
||||
placeholder: Опишите проблему
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: reproduction
|
||||
attributes:
|
||||
label: Шаги для воспроизведения
|
||||
description: Шаги для воспроизведения проблемы. Если вы настраваете что-то по какому либо мануалу, приложите ссылку на него.
|
||||
placeholder: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: ✅ Ожидаемое поведение
|
||||
description: Четкое и краткое описание того, что должно было произойти
|
||||
placeholder: Опишите ожидаемое поведение
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: environment
|
||||
attributes:
|
||||
label: 🖥️ Информация о системе
|
||||
description: |
|
||||
Информация о вашей системе (заполните всё применяемое)
|
||||
value: |
|
||||
- **OpenWrt версия**:
|
||||
- **Zapret версия**:
|
||||
- **Роутер модель**:
|
||||
render: markdown
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: strategy
|
||||
attributes:
|
||||
label: ✅ Используемая стратегия NFQWS
|
||||
description: Все параметры стратегии NFQWS, либо её название
|
||||
placeholder: Если проблема вызвана стратегией NFQWS
|
||||
|
||||
- type: textarea
|
||||
id: config
|
||||
attributes:
|
||||
label: ⚙️ Конфигурация
|
||||
description: |
|
||||
Релевантные части конфигурации (удалите чувствительную информацию!)
|
||||
placeholder: |
|
||||
Например:
|
||||
- Содержимое /etc/config/zapret
|
||||
- Конфигурация файервола (опция Flow offloading и т.п.)
|
||||
- Дополнительные конфиги, которые потребуются wireless/network/dhcp и т.д.
|
||||
render: shell
|
||||
9
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
9
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 💬 Installation instructions / Инструкция по установке
|
||||
url: https://github.com/remittor/zapret-openwrt/wiki/Installing-zapret%E2%80%90openwrt-package
|
||||
about: Installation instructions / Инструкция по установке
|
||||
|
||||
- name: 📚 Original documetation / Оригинальная документация к zapret'у
|
||||
url: https://github.com/bol-van/zapret/blob/master/docs/readme.md
|
||||
about: README zapret
|
||||
66
.github/ISSUE_TEMPLATE/feature_request_en.yml
vendored
Normal file
66
.github/ISSUE_TEMPLATE/feature_request_en.yml
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
name: ✨ Feature Request
|
||||
description: Suggest a new feature or improvement
|
||||
title: "[FEATURE] "
|
||||
labels: ["enhancement", "needs-discussion"]
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Before sending, please:
|
||||
- Check [existing requests](https://github.com/remittor/zapret-openwrt/issues?q=is%3Aissue+label%3Aenhancement)
|
||||
- Make sure the function doesn't exist in [documentation](https://github.com/remittor/zapret-openwrt/wiki/)
|
||||
|
||||
- type: textarea
|
||||
id: summary
|
||||
attributes:
|
||||
label: Brief description
|
||||
description: Brief description of the proposed function
|
||||
placeholder: In one sentence, describe what you want to add...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: problem
|
||||
attributes:
|
||||
label: The problem it solves
|
||||
description: |
|
||||
Description of the problem or inconvenience this feature will solve
|
||||
placeholder: |
|
||||
There is no possibility now [...]
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: 💡 Proposed solution
|
||||
description: A clear and concise description of what you want to achieve
|
||||
placeholder: |
|
||||
I want Zapret to be able to [...]
|
||||
I suggest adding a feature that [...]
|
||||
Could be improved [...]
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: alternatives
|
||||
attributes:
|
||||
label: Workaround
|
||||
description: |
|
||||
Describe any alternative solutions or features you considered.
|
||||
Are there any workarounds you currently use?
|
||||
placeholder: |
|
||||
I'm currently solving this problem by [...]
|
||||
An alternative would be [...]
|
||||
I tried using [...], but it doesn't work because [...]
|
||||
|
||||
- type: textarea
|
||||
id: implementation
|
||||
attributes:
|
||||
label: Implementation ideas (optional)
|
||||
description: |
|
||||
If you have any ideas on how this could be implemented, please share them. Please keep LuCI's limitations in mind.
|
||||
placeholder: |
|
||||
This can be achieved using [...]
|
||||
68
.github/ISSUE_TEMPLATE/feature_request_ru.yml
vendored
Normal file
68
.github/ISSUE_TEMPLATE/feature_request_ru.yml
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
name: ✨ Запрос новой функции
|
||||
description: Предложите новую функцию или улучшение для Zapret
|
||||
title: "[FEATURE] "
|
||||
labels: ["enhancement", "needs-discussion"]
|
||||
assignees: []
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Спасибо за предложение новой функции!
|
||||
|
||||
Перед отправкой, пожалуйста:
|
||||
- Проверьте [существующие запросы](https://github.com/remittor/zapret-openwrt/issues?q=is%3Aissue+label%3Aenhancement)
|
||||
- Убедитесь, что функции не существует в [документации](https://github.com/remittor/zapret-openwrt/wiki/)
|
||||
|
||||
- type: textarea
|
||||
id: summary
|
||||
attributes:
|
||||
label: Краткое описание
|
||||
description: Краткое описание предлагаемой функции
|
||||
placeholder: В одном предложении опишите, что вы хотите добавить...
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: problem
|
||||
attributes:
|
||||
label: Проблема, которую решает
|
||||
description: |
|
||||
Описание проблемы или неудобства, которое решит эта функция
|
||||
placeholder: |
|
||||
Сейчас нет возможности [...]
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: 💡 Предлагаемое решение
|
||||
description: Четкое и краткое описание того, что вы хотите реализовать
|
||||
placeholder: |
|
||||
Я хочу, чтобы Zapret мог [...]
|
||||
Предлагаю добавить функцию, которая [...]
|
||||
Можно было бы улучшить [...] путем [...]
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: alternatives
|
||||
attributes:
|
||||
label: Workaround
|
||||
description: |
|
||||
Опишите альтернативные решения или функции, которые вы рассматривали
|
||||
Есть ли обходные пути, которые вы используете сейчас?
|
||||
placeholder: |
|
||||
Сейчас я решаю это проблему путем [...]
|
||||
Альтернативой могло бы быть [...]
|
||||
Пробовал использовать [...], но это не подходит потому что [...]
|
||||
|
||||
- type: textarea
|
||||
id: implementation
|
||||
attributes:
|
||||
label: Идеи реализации (опционально)
|
||||
description: |
|
||||
Если у вас есть идеи о том, как это можно реализовать, поделитесь ими. Помните про ограничения LuCI.
|
||||
placeholder: |
|
||||
Это можно реализовать с помощью [...]
|
||||
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
@@ -137,13 +137,13 @@ jobs:
|
||||
- mipsel_24kc_24kf
|
||||
- mipsel_74kc
|
||||
- mipsel_mips32
|
||||
- riscv64_riscv64
|
||||
- riscv64_generic
|
||||
- x86_64
|
||||
isTestOrFake:
|
||||
- ${{ needs.check.outputs.test_build == 'true' || needs.check.outputs.fake_build == 'true' }}
|
||||
exclude:
|
||||
- branch: openwrt-24.10
|
||||
arch: riscv64_riscv64
|
||||
arch: riscv64_generic
|
||||
- branch: SNAPSHOT
|
||||
arch: arm_cortex-a9_vfpv3-d16
|
||||
- { isTestOrFake: true }
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-zapret
|
||||
PKG_VERSION:=72.20251217
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=72.20251225
|
||||
PKG_RELEASE:=2
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_MAINTAINER:=remittor <https://github.com/remittor>
|
||||
|
||||
|
||||
@@ -400,7 +400,7 @@ return view.extend({
|
||||
poll.add(L.bind(this.statusPoll, this));
|
||||
|
||||
let page_title = _('Zapret');
|
||||
let pkgdict = tools.decode_pkg_list(pkg_list.stdout);
|
||||
let pkgdict = tools.decode_pkg_list(pkg_list.stdout, false);
|
||||
page_title += '   ';
|
||||
if (pkgdict['zapret'] === undefined || pkgdict['zapret'] == '') {
|
||||
page_title += 'unknown version';
|
||||
|
||||
@@ -181,40 +181,49 @@ return baseclass.extend({
|
||||
return m ? m[2] : defval;
|
||||
},
|
||||
|
||||
decode_pkg_list: function(pkg_list) {
|
||||
decode_pkg_list: function(pkg_list, with_suffix_r1 = true) {
|
||||
let pkg_dict = { };
|
||||
if (!pkg_list) {
|
||||
return pkg_dict;
|
||||
}
|
||||
let lines = pkg_list.trim().split('\n');
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
let line = lines[i].trim();
|
||||
let name;
|
||||
let ver;
|
||||
let rev = -1;
|
||||
if (this.packager.name == 'apk') {
|
||||
let fullname = line.split(' ')[0];
|
||||
let mpos = fullname.lastIndexOf("-");
|
||||
if (mpos <= 0)
|
||||
continue;
|
||||
if (fullname.substring(mpos+1, mpos+2) == 'r') {
|
||||
// release number
|
||||
fullname = fullname.substring(0, mpos);
|
||||
let match = fullname.match(/^(.*)-r(\d+)$/);
|
||||
if (match) {
|
||||
fullname = match[1];
|
||||
rev = parseInt(match[2], 10);
|
||||
}
|
||||
mpos = fullname.lastIndexOf("-");
|
||||
let mpos = fullname.lastIndexOf('-');
|
||||
if (mpos <= 0)
|
||||
continue;
|
||||
name = fullname.substring(0, mpos).trim();
|
||||
ver = fullname.substring(mpos+1).trim();
|
||||
continue; // incorrect format
|
||||
name = fullname.slice(0, mpos).trim();
|
||||
ver = fullname.slice(mpos + 1).trim();
|
||||
} else {
|
||||
if (!line.includes(' - '))
|
||||
continue;
|
||||
continue; // incorrect format
|
||||
name = line.split(' - ')[0].trim();
|
||||
ver = line.split(' - ')[1].trim();
|
||||
let spos = ver.indexOf(" ");
|
||||
if (spos > 0) {
|
||||
ver = ver.substring(0, spos);
|
||||
}
|
||||
let mpos = ver.lastIndexOf("-");
|
||||
if (mpos > 0 && ver.substring(mpos+1, mpos+2) == 'r') {
|
||||
// release number
|
||||
ver = ver.substring(0, mpos);
|
||||
let match = ver.match(/^(.*)-r(\d+)$/);
|
||||
if (match) {
|
||||
ver = match[1];
|
||||
rev = parseInt(match[2], 10);
|
||||
}
|
||||
}
|
||||
if (rev >= 0) {
|
||||
if (rev == 1 && !with_suffix_r1) {
|
||||
// nothing
|
||||
} else {
|
||||
ver += '-r' + rev;
|
||||
}
|
||||
}
|
||||
pkg_dict[name] = ver;
|
||||
@@ -535,8 +544,6 @@ return baseclass.extend({
|
||||
}
|
||||
value = value.replace(/˂/g, '<');
|
||||
value = value.replace(/˃/g, '>');
|
||||
uci.set('zapret', this.cfgsec, this.cfgparam, value);
|
||||
uci.save();
|
||||
let elem = document.getElementById("cbi-zapret-" + this.cfgsec + "-_" + this.cfgparam);
|
||||
if (elem) {
|
||||
let val = value.trim();
|
||||
@@ -549,19 +556,8 @@ return baseclass.extend({
|
||||
elem.querySelector('div').textContent = val;
|
||||
}
|
||||
}
|
||||
ui.hideModal();
|
||||
/*
|
||||
return uci.save()
|
||||
.then(L.bind(ui.changes.init, ui.changes))
|
||||
.then(L.bind(ui.changes.displayChanges, ui.changes))
|
||||
//.then(L.bind(ui.changes.apply, ui.changes))
|
||||
.then(ui.addNotification(null, E('p', _('Contents have been saved.')), 'info'))
|
||||
.catch(e => {
|
||||
ui.addNotification(null, E('p', _('Unable to save the contents') + ': %s'.format(e.message)));
|
||||
}).finally(() => {
|
||||
ui.hideModal();
|
||||
});
|
||||
*/
|
||||
uci.set('zapret2', this.cfgsec, this.cfgparam, value);
|
||||
uci.save().then(ui.hideModal);
|
||||
},
|
||||
|
||||
error: function(e) {
|
||||
@@ -580,13 +576,17 @@ return baseclass.extend({
|
||||
},
|
||||
|
||||
show: function() {
|
||||
//ui.showModal(null, E('p', { 'class': 'spinning' }, _('Loading')) );
|
||||
let content = this.load();
|
||||
//ui.hideModal();
|
||||
if (content === null) {
|
||||
return this.error('Cannot load parameter');
|
||||
}
|
||||
return this.render(content);
|
||||
ui.showModal(null,
|
||||
E('p', { 'class': 'spinning' }, _('Loading'))
|
||||
);
|
||||
L.resolveDefault(this.load(), null)
|
||||
.then(content => {
|
||||
ui.hideModal();
|
||||
return this.render(content);
|
||||
}).catch(e => {
|
||||
ui.hideModal();
|
||||
return this.error(e);
|
||||
})
|
||||
},
|
||||
}),
|
||||
|
||||
|
||||
@@ -32,11 +32,13 @@ return baseclass.extend({
|
||||
setStage: function(stage, btn_flag = true) {
|
||||
if (stage == 0) {
|
||||
this.btn_action.textContent = _('Check for updates');
|
||||
this.btn_action.classList.remove('hidden');
|
||||
} else
|
||||
if (stage == 1) {
|
||||
this.btn_action.textContent = _('Update packages');
|
||||
this.btn_action.classList.remove('hidden');
|
||||
} else {
|
||||
this.btn_action.textContent = _('');
|
||||
this.btn_action.classList.add('hidden');
|
||||
}
|
||||
if (stage > 1 && typeof(this.btn_action) == 'object') {
|
||||
this.setBtnMode(1);
|
||||
@@ -103,76 +105,78 @@ return baseclass.extend({
|
||||
let rpc_opt = { timeout: 5*1000 }
|
||||
//rpc_opt.uid = 0; // run under root
|
||||
const logFile = '/tmp/zapret_pkg_install.log';
|
||||
const pidFile = '/tmp/zapret_pkg_install.pid';
|
||||
const rcFile = logFile + '.rc';
|
||||
try {
|
||||
await fs.exec('/bin/busybox', [ 'rm', '-f', '/tmp/zapret_pkg_install.*' ], null, rpc_opt);
|
||||
await fs.exec('/bin/busybox', [ 'rm', '-f', logFile + '*' ], null, rpc_opt);
|
||||
this.appendLog('Install log cleared.');
|
||||
} catch (e) {
|
||||
this.appendLog('ERROR: Failed to clear log file');
|
||||
this.setStage(999);
|
||||
return 1;
|
||||
}
|
||||
//console.log(`Start ${fn_update_pkg_sh}...`);
|
||||
try {
|
||||
let opt = [ logFile, pidFile, fn_update_pkg_sh ];
|
||||
//opt.push('-t'); // only for testing
|
||||
let opt = [ logFile, fn_update_pkg_sh ];
|
||||
//opt.push('-t'); opt.push('0'); // only for testing
|
||||
opt.push(...opt_list);
|
||||
await fs.exec('/opt/zapret/script-exec.sh', opt, null, rpc_opt);
|
||||
this.appendLog('Process started...');
|
||||
let res = await fs.exec('/opt/zapret/script-exec.sh', opt, null, rpc_opt);
|
||||
if (res.code == 0) {
|
||||
this.appendLog('Process started...');
|
||||
} else {
|
||||
this.appendLog('ERROR: cannot run ' + fn_update_pkg_sh + ' script! (error = ' + res.code + ')');
|
||||
throw new Error('cannot run script');
|
||||
}
|
||||
} catch (e) {
|
||||
this.appendLog('ERROR: Failed to start process: ' + e.message);
|
||||
this.setStage(999);
|
||||
return 1;
|
||||
}
|
||||
let lastLen = 0;
|
||||
let pid = 0;
|
||||
//console.log('setInterval...');
|
||||
let retCode = -1;
|
||||
let timerBusy = false;
|
||||
let timer = setInterval(async () => {
|
||||
if (timerBusy)
|
||||
return; // skip iteration
|
||||
timerBusy = true;
|
||||
try {
|
||||
if (pid == 0) {
|
||||
try {
|
||||
let pid_data = await fs.exec('/bin/cat', [ pidFile ], null, rpc_opt);
|
||||
pid = parseInt(pid_data.stdout.trim(), 10);
|
||||
} catch (e) {
|
||||
//return; // goto next timer iteration
|
||||
}
|
||||
}
|
||||
let alive = null;
|
||||
if (pid > 0) {
|
||||
try {
|
||||
await fs.stat(`/proc/${pid}`, [ ], null, { timeout: 4*1000 });
|
||||
alive = true;
|
||||
} catch (e) {
|
||||
// file "/proc/${pid}" not founded ==> sh process terminated
|
||||
alive = false;
|
||||
}
|
||||
}
|
||||
let res = await fs.exec('/bin/cat', [ logFile ], null, rpc_opt);
|
||||
if (res.stdout.length > lastLen) {
|
||||
if (res.stdout && res.stdout.length > lastLen) {
|
||||
let log = res.stdout.slice(lastLen);
|
||||
log = log.replace(/^ \* resolve_conffiles.*(?:\r?\n|$)/gm, '');
|
||||
this.appendLog(log, '');
|
||||
lastLen = res.stdout.length;
|
||||
}
|
||||
if (pid > 0 && !alive) {
|
||||
clearInterval(timer);
|
||||
this.appendLog('\nProcess finished.');
|
||||
let log = res.stdout;
|
||||
let code = log.match(/^RESULT:\s*\(([^)]+)\)\s+.+$/m);
|
||||
if (code && code[1] == '+') {
|
||||
this.setStage(999);
|
||||
this.btn_action.textContent = _('OK');
|
||||
this.btn_action.disabled = false;
|
||||
this.btn_cancel.disabled = true;
|
||||
return 0;
|
||||
if (retCode < 0) {
|
||||
let rc = await fs.exec('/bin/cat', [ rcFile ], null, rpc_opt);
|
||||
if (rc.code != 0) {
|
||||
throw new Error('cannot read file "' + rcFile + '"');
|
||||
}
|
||||
this.appendLog('ERROR: Install updates failed!');
|
||||
if (rc.stdout) {
|
||||
retCode = parseInt(rc.stdout.trim(), 10);
|
||||
}
|
||||
}
|
||||
if (retCode >= 0) {
|
||||
clearInterval(timer);
|
||||
this.appendLog('\n' + 'Process finished.');
|
||||
if (res.stdout) {
|
||||
let code = res.stdout.match(/^RESULT:\s*\(([^)]+)\)\s+.+$/m);
|
||||
if (retCode == 0 && code && code[1] == '+') {
|
||||
this.stage = 999;
|
||||
this.btn_action.textContent = _('OK');
|
||||
this.btn_action.disabled = false;
|
||||
this.btn_cancel.disabled = true;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
this.appendLog('ERROR: Install updates failed with error ' + retCode);
|
||||
this.setStage(999);
|
||||
}
|
||||
} catch (e) {
|
||||
clearInterval(timer);
|
||||
this.appendLog('ERROR: reading log: ' + e.message);
|
||||
this.appendLog('ERROR: installUpdates: ' + e.message);
|
||||
this.appendLog('ERROR: installUpdates: ' + e.stack?.trim().split('\n').pop());
|
||||
this.setStage(999);
|
||||
} finally {
|
||||
timerBusy = false;
|
||||
}
|
||||
}, 500);
|
||||
},
|
||||
@@ -224,9 +228,6 @@ return baseclass.extend({
|
||||
|
||||
ui.showModal(_('Package update'), [
|
||||
E('div', { 'class': 'cbi-section' }, [
|
||||
E('div', {}, [
|
||||
E('p', {'class': 'cbi-title-field'}, [ 'CPU architecture: ' + pkg_arch ]),
|
||||
]),
|
||||
exclude_prereleases,
|
||||
E('br'), E('br'),
|
||||
forced_reinstall,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zapret-ip2net
|
||||
PKG_VERSION:=72.20251217
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=72.20251225
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_MAINTAINER:=bol-van
|
||||
PKG_LICENSE:=MIT
|
||||
@@ -10,8 +10,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=a36e6ee60e910861a5bd7a2ca4214f8a2ca6259d
|
||||
PKG_SOURCE_DATE:=2025-12-17
|
||||
PKG_SOURCE_VERSION:=e95a06c7eeff87e166a5f9ca71547b169c9852e0
|
||||
PKG_SOURCE_DATE:=2025-12-25
|
||||
|
||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zapret-mdig
|
||||
PKG_VERSION:=72.20251217
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=72.20251225
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_MAINTAINER:=bol-van
|
||||
PKG_LICENSE:=MIT
|
||||
@@ -10,8 +10,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=a36e6ee60e910861a5bd7a2ca4214f8a2ca6259d
|
||||
PKG_SOURCE_DATE:=2025-12-17
|
||||
PKG_SOURCE_VERSION:=e95a06c7eeff87e166a5f9ca71547b169c9852e0
|
||||
PKG_SOURCE_DATE:=2025-12-25
|
||||
|
||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zapret-tpws
|
||||
PKG_VERSION:=72.20251217
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=72.20251225
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_MAINTAINER:=bol-van
|
||||
PKG_LICENSE:=MIT
|
||||
@@ -10,8 +10,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=a36e6ee60e910861a5bd7a2ca4214f8a2ca6259d
|
||||
PKG_SOURCE_DATE:=2025-12-17
|
||||
PKG_SOURCE_VERSION:=e95a06c7eeff87e166a5f9ca71547b169c9852e0
|
||||
PKG_SOURCE_DATE:=2025-12-25
|
||||
|
||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zapret
|
||||
PKG_VERSION:=72.20251217
|
||||
PKG_RELEASE:=1
|
||||
PKG_VERSION:=72.20251225
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_MAINTAINER:=bol-van
|
||||
PKG_LICENSE:=MIT
|
||||
@@ -14,8 +14,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=a36e6ee60e910861a5bd7a2ca4214f8a2ca6259d
|
||||
PKG_SOURCE_DATE:=2025-12-17
|
||||
PKG_SOURCE_VERSION:=e95a06c7eeff87e166a5f9ca71547b169c9852e0
|
||||
PKG_SOURCE_DATE:=2025-12-25
|
||||
|
||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
|
||||
|
||||
@@ -90,14 +90,28 @@ function get_run_on_boot_option
|
||||
fi
|
||||
}
|
||||
|
||||
function get_distrib_param
|
||||
{
|
||||
local parname=$1
|
||||
local value="__unknown__"
|
||||
if [ -f /etc/openwrt_release ]; then
|
||||
while IFS='=' read -r key val; do
|
||||
val="${val#\'}"
|
||||
val="${val%\'}"
|
||||
val="${val#\"}"
|
||||
val="${val%\"}"
|
||||
if [ "$key" = "$parname" ]; then
|
||||
value="$val"
|
||||
break
|
||||
fi
|
||||
done < /etc/openwrt_release
|
||||
fi
|
||||
printf '%s' "$value"
|
||||
}
|
||||
|
||||
function get_cpu_arch
|
||||
{
|
||||
if [ -f /etc/openwrt_release ]; then
|
||||
. /etc/openwrt_release
|
||||
printf '%s' "$DISTRIB_ARCH"
|
||||
else
|
||||
printf 'unknown'
|
||||
fi
|
||||
get_distrib_param DISTRIB_ARCH
|
||||
}
|
||||
|
||||
function restore_ipset_txt
|
||||
@@ -154,7 +168,7 @@ function merge_cfg_with_def_values
|
||||
function remove_cron_task_logs
|
||||
{
|
||||
if [ -f "$CRONTAB_FILE" ]; then
|
||||
sed -i "/-name 'zapret\*.log' -size +/d" "$CRONTAB_FILE"
|
||||
sed -i "/-name 'zapret+\*.log' -size +/d" "$CRONTAB_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -163,7 +177,7 @@ function insert_cron_task_logs
|
||||
[ ! -f "$CRONTAB_FILE" ] && touch "$CRONTAB_FILE"
|
||||
[ ! -f "$CRONTAB_FILE" ] && return 1
|
||||
if ! grep -q -e "-name 'zapret\*\.log' -size \+" "$CRONTAB_FILE"; then
|
||||
echo "*/2 * * * * /usr/bin/find /tmp -maxdepth 1 -type f -name 'zapret*.log' -size +2600k -exec rm -f {} \;" >> "$CRONTAB_FILE"
|
||||
echo "*/2 * * * * /usr/bin/find /tmp -maxdepth 1 -type f -name 'zapret+*.log' -size +2600k -exec rm -f {} \;" >> "$CRONTAB_FILE"
|
||||
/etc/init.d/cron restart 2> /dev/null
|
||||
fi
|
||||
return 0
|
||||
@@ -176,7 +190,7 @@ function init_before_start
|
||||
[ ! -f "$HOSTLIST_FN" ] && touch "$HOSTLIST_FN"
|
||||
chmod 644 $ZAPRET_BASE/ipset/*.txt
|
||||
chmod 666 $ZAPRET_BASE/ipset/*.log
|
||||
rm -f /tmp/zapret*.log
|
||||
rm -f /tmp/zapret+*.log
|
||||
#*/
|
||||
if [ "$DAEMON_LOG_ENABLE" = "1" ]; then
|
||||
insert_cron_task_logs
|
||||
|
||||
@@ -247,6 +247,84 @@ function set_cfg_nfqws_strat
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
if [ "$strat" = "ALT7_by_Flowseal" ]; then
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.NFQWS_PORTS_TCP='80,443'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP='443'
|
||||
set $cfgname.config.NFQWS_OPT="
|
||||
# Strategy $strat
|
||||
|
||||
--filter-tcp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--ip-id=zero
|
||||
--dpi-desync=multisplit
|
||||
--dpi-desync-split-pos=2,sniext+1
|
||||
--dpi-desync-split-seqovl=679
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
|
||||
--new
|
||||
--filter-tcp=80,443 <HOSTLIST>
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--dpi-desync=multisplit
|
||||
--dpi-desync-split-pos=2,sniext+1
|
||||
--dpi-desync-split-seqovl=679
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
|
||||
--new
|
||||
--filter-udp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=6
|
||||
--dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin
|
||||
"
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
if [ "$strat" = "TLS_AUTO_ALT3_by_Flowseal" ]; then
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.NFQWS_PORTS_TCP='80,443'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP='443'
|
||||
set $cfgname.config.NFQWS_OPT="
|
||||
# Strategy $strat
|
||||
|
||||
--filter-tcp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--ip-id=zero
|
||||
--dpi-desync=fake,multisplit
|
||||
--dpi-desync-split-seqovl=681
|
||||
--dpi-desync-split-pos=1
|
||||
--dpi-desync-fooling=ts
|
||||
--dpi-desync-repeats=8
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
--dpi-desync-fake-tls-mod=rnd,dupsid,sni=www.google.com
|
||||
|
||||
--new
|
||||
--filter-tcp=80,443 <HOSTLIST>
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--dpi-desync=fake,multisplit
|
||||
--dpi-desync-split-seqovl=681
|
||||
--dpi-desync-split-pos=1
|
||||
--dpi-desync-fooling=ts
|
||||
--dpi-desync-repeats=8
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
--dpi-desync-fake-tls-mod=rnd,dupsid,sni=www.google.com
|
||||
|
||||
--new
|
||||
--filter-udp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=11
|
||||
--dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin
|
||||
"
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
BIN
zapret/files/fake/tls_clienthello_max_ru.bin
Normal file
BIN
zapret/files/fake/tls_clienthello_max_ru.bin
Normal file
Binary file not shown.
@@ -1,12 +1,15 @@
|
||||
#!/bin/sh
|
||||
# Copyright (c) 2024 remittor
|
||||
LOG_FILE=$1
|
||||
PID_FILE=$2
|
||||
shift 2
|
||||
RC_FILE=$1.rc
|
||||
shift 1
|
||||
: > $LOG_FILE
|
||||
: > $RC_FILE
|
||||
(
|
||||
exec </dev/null >/dev/null 2>&1
|
||||
"$@" >> $LOG_FILE 2>&1
|
||||
RETCODE=$?
|
||||
sleep 1
|
||||
echo $RETCODE > $RC_FILE
|
||||
) &
|
||||
echo $! > $PID_FILE
|
||||
exit 0
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
. /opt/zapret/comfunc.sh
|
||||
. /usr/share/libubox/jshn.sh
|
||||
. /etc/openwrt_release
|
||||
|
||||
opt_check=
|
||||
opt_prerelease=
|
||||
@@ -10,34 +11,34 @@ opt_update=
|
||||
opt_forced=
|
||||
opt_test=
|
||||
|
||||
while getopts "cu:pft" opt; do
|
||||
while getopts "cu:pft:" opt; do
|
||||
case $opt in
|
||||
c) opt_check=true;;
|
||||
p) opt_prerelease=true;;
|
||||
u) opt_update="$OPTARG";;
|
||||
f) opt_forced=true;;
|
||||
t) opt_test=true;;
|
||||
t) opt_test="$OPTARG";;
|
||||
esac
|
||||
done
|
||||
|
||||
ZAP_PKG_DIR=/tmp/zapret_pkg
|
||||
|
||||
if [ "$opt_test" = "true" ]; then
|
||||
if [ "$opt_test" != "" ]; then
|
||||
echo 1; sleep 2;
|
||||
echo 2; sleep 2;
|
||||
echo 3; sleep 2;
|
||||
echo ' * resolve_conffiles 123456'; sleep 1;
|
||||
echo 4; sleep 2;
|
||||
echo END
|
||||
return 0;
|
||||
return "$opt_test"
|
||||
fi
|
||||
|
||||
ZAP_CPU_ARCH=$(get_cpu_arch)
|
||||
ZAP_REL_URL="https://raw.githubusercontent.com/remittor/zapret-openwrt/gh-pages/releases/releases_zap1_$ZAP_CPU_ARCH.json"
|
||||
|
||||
WGET_TIMEOUT=5
|
||||
WGET_HEADER1="Accept: application/json"
|
||||
WGET_HEADER2="Cache-Control: no-cache"
|
||||
CURL_TIMEOUT=5
|
||||
CURL_HEADER1="Accept: application/json"
|
||||
CURL_HEADER2="Cache-Control: no-cache"
|
||||
|
||||
REL_JSON=
|
||||
REL_ACTUAL_TAG=
|
||||
@@ -48,13 +49,6 @@ ZAP_OUT=
|
||||
ZAP_ERR=
|
||||
ZAP_PKG_URL=
|
||||
|
||||
function download_json
|
||||
{
|
||||
local url="$1"
|
||||
wget -q -T "$WGET_TIMEOUT" --header="$WGET_HEADER1" --header="$WGET_HEADER2" -O - "$url"
|
||||
return $?
|
||||
}
|
||||
|
||||
if command -v apk >/dev/null; then
|
||||
PKG_MGR=apk
|
||||
ZAP_PKG_EXT=apk
|
||||
@@ -68,10 +62,17 @@ fi
|
||||
|
||||
# -------------------------------------------------------------------------------------------------------
|
||||
|
||||
function download_json
|
||||
{
|
||||
local url="$1"
|
||||
curl -s -L --max-time $CURL_TIMEOUT -H "$CURL_HEADER1" -H "$CURL_HEADER2" "$url" 2>/dev/null
|
||||
return $?
|
||||
}
|
||||
|
||||
function get_pkg_version
|
||||
{
|
||||
local pkg_name="$1"
|
||||
local ver line pkg_prefix
|
||||
local ver line base
|
||||
if [ "$PKG_MGR" = opkg ]; then
|
||||
ver=$( opkg list-installed "$pkg_name" 2>/dev/null | awk -F' - ' '{print $2}' | tr -d '\r' )
|
||||
if [ -n "$ver" ]; then
|
||||
@@ -82,16 +83,16 @@ function get_pkg_version
|
||||
if [ "$PKG_MGR" = apk ]; then
|
||||
line=$( apk info -e "$pkg_name" 2>/dev/null || true )
|
||||
if [ -n "$line" ]; then
|
||||
pkg_prefix="${pkg_name}-"
|
||||
base=${line%-r[0-9]*}
|
||||
ver=${base##*-}
|
||||
case "$line" in
|
||||
"$pkg_prefix"*)
|
||||
ver=${line#"$pkg_prefix"}
|
||||
*-r[0-9]*)
|
||||
echo -n "$ver${line#$base}"
|
||||
;;
|
||||
*)
|
||||
ver=${line##*-}
|
||||
echo -n "$ver"
|
||||
;;
|
||||
esac
|
||||
echo -n "$ver"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
@@ -105,7 +106,7 @@ function normalize_version
|
||||
local base
|
||||
local major minor rel
|
||||
case "$ver" in
|
||||
*-r*)
|
||||
*-r[0-9]*)
|
||||
rel="${ver##*-r}"
|
||||
base="${ver%-r*}"
|
||||
;;
|
||||
@@ -148,7 +149,6 @@ function download_releases_info
|
||||
{
|
||||
local txt txtlen txtlines generated_at
|
||||
REL_JSON=
|
||||
echo "CPU arch: $ZAP_CPU_ARCH"
|
||||
echo "Download releases info..."
|
||||
txt=$(download_json $ZAP_REL_URL)
|
||||
txtlen=${#txt}
|
||||
@@ -229,13 +229,32 @@ function get_actual_release
|
||||
|
||||
if [ "$opt_check" != "true" -a "$opt_update" = "" ]; then
|
||||
echo 'ERROR: Incorrect arguments'
|
||||
return 1
|
||||
return 4
|
||||
fi
|
||||
|
||||
if [ "$opt_update" = "@" ]; then
|
||||
opt_check="true"
|
||||
fi
|
||||
|
||||
#echo "DISTRIB_ID: $DISTRIB_ID"
|
||||
echo "DISTRIB_RELEASE: $DISTRIB_RELEASE"
|
||||
echo "DISTRIB_DESCRIPTION:" $(get_distrib_param DISTRIB_DESCRIPTION)
|
||||
echo "DISTRIB_ARCH:" $(get_distrib_param DISTRIB_ARCH)
|
||||
|
||||
if ! command -v curl >/dev/null 2>&1; then
|
||||
echo "ERROR: package \"curl\" not installed!"
|
||||
return 10
|
||||
fi
|
||||
CURL_INFO=$( curl -V )
|
||||
if ! echo "$CURL_INFO" | grep -q 'https'; then
|
||||
echo "------- package curl"
|
||||
echo "$CURL_INFO"
|
||||
echo "-------"
|
||||
echo "ERROR: package \"curl\" not supported HTTPS protocol!"
|
||||
echo "NOTE: Please install package \"curl-ssl\""
|
||||
return 11
|
||||
fi
|
||||
|
||||
if [ "$opt_check" = "true" ]; then
|
||||
download_releases_info
|
||||
ZAP_ERR=$?
|
||||
@@ -317,7 +336,8 @@ if [ "$opt_update" != "" ]; then
|
||||
fi
|
||||
ZAP_PKG_DIR=/tmp/zapret_pkg
|
||||
rm -rf $ZAP_PKG_DIR
|
||||
ZAP_PKG_SIZE=$( wget --spider -T $WGET_TIMEOUT --header="$WGET_HEADER2" -S "$ZAP_PKG_URL" 2>&1 | grep -i 'Content-Length:' | tail -n1 | awk '{print $2}' | tr -d '\r' )
|
||||
ZAP_PKG_HDRS=$( curl -s -I -L --max-time $CURL_TIMEOUT -H "$CURL_HEADER2" "$ZAP_PKG_URL" )
|
||||
ZAP_PKG_SIZE=$( echo "$ZAP_PKG_HDRS" | grep -i 'content-length: ' | tail -n1 | awk '{print $2}' | tr -d '\r' )
|
||||
echo "Downloded ZIP-file size = $ZAP_PKG_SIZE bytes"
|
||||
[ "$ZAP_PKG_SIZE" = "" ] || [[ $ZAP_PKG_SIZE -lt 256 ]] && {
|
||||
echo "ERROR: incorrect package size!"
|
||||
@@ -326,16 +346,20 @@ if [ "$opt_update" != "" ]; then
|
||||
mkdir $ZAP_PKG_DIR
|
||||
ZAP_PKG_FN="$ZAP_PKG_DIR/${ZAP_PKG_URL##*/}"
|
||||
echo "Download ZIP-file..."
|
||||
wget -q -T 15 --header="$WGET_HEADER2" -O "$ZAP_PKG_FN" "$ZAP_PKG_URL"
|
||||
curl -s -L --max-time 15 -H "$CURL_HEADER2" "$ZAP_PKG_URL" -o "$ZAP_PKG_FN"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: cannot download package!"
|
||||
return 215
|
||||
fi
|
||||
ZAP_PKG_SZ=$( wc -c < "$ZAP_PKG_FN" )
|
||||
if [ "$ZAP_PKG_SZ" != "$ZAP_PKG_SIZE" ]; then
|
||||
echo "ERROR: downloaded package is incorrect!"
|
||||
echo "ERROR: downloaded package is incorrect! (size = $ZAP_PKG_SZ)"
|
||||
return 216
|
||||
fi
|
||||
if ! command -v unzip >/dev/null 2>&1; then
|
||||
echo "ERROR: package \"upzip\" not installed!"
|
||||
return 218
|
||||
fi
|
||||
unzip -q "$ZAP_PKG_FN" -d $ZAP_PKG_DIR
|
||||
rm -f "$ZAP_PKG_FN"
|
||||
if [ "$PKG_MGR" = "apk" ]; then
|
||||
@@ -352,15 +376,19 @@ if [ "$opt_update" != "" ]; then
|
||||
echo "------ Downloaded packages:"
|
||||
echo "$ZAP_PKG_LIST"
|
||||
echo "------"
|
||||
ZAP_PKG_BASE_FN=$( find "$ZAP_PKG_DIR" -maxdepth 1 -type f -name "zapret_*.${ZAP_PKG_EXT}" | head -n 1 )
|
||||
ZAP_PKG_LUCI_FN=$( find "$ZAP_PKG_DIR" -maxdepth 1 -type f -name "luci-app-*.${ZAP_PKG_EXT}" | head -n 1 )
|
||||
if [ "$PKG_MGR" != "apk" ]; then
|
||||
ZAP_PKG_BASE_FN=$( find "$ZAP_PKG_DIR" -maxdepth 1 -type f -name "zapret_*.${ZAP_PKG_EXT}" | head -n 1 )
|
||||
else
|
||||
ZAP_PKG_BASE_FN=$( find "$ZAP_PKG_DIR" -maxdepth 1 -type f -name "zapret-[0-9]*.?*.${ZAP_PKG_EXT}" | head -n 1 )
|
||||
fi
|
||||
ZAP_PKG_LUCI_FN=$( find "$ZAP_PKG_DIR" -maxdepth 1 -type f -name "luci-app-zapret2*.${ZAP_PKG_EXT}" | head -n 1 )
|
||||
if [ ! -f "$ZAP_PKG_BASE_FN" ]; then
|
||||
echo "ERROR: File \"zapret_*.${ZAP_PKG_EXT}\" not found!"
|
||||
echo "ERROR: File \"zapret*.${ZAP_PKG_EXT}\" not found!"
|
||||
return 231
|
||||
fi
|
||||
echo "ZAP_PKG_BASE_FN = $ZAP_PKG_BASE_FN"
|
||||
if [ ! -f "$ZAP_PKG_LUCI_FN" ]; then
|
||||
echo "ERROR: File \"luci-app-*.${ZAP_PKG_EXT}\" not found!"
|
||||
echo "ERROR: File \"luci-app-zapret*.${ZAP_PKG_EXT}\" not found!"
|
||||
return 232
|
||||
fi
|
||||
echo "ZAP_PKG_LUCI_FN = $ZAP_PKG_LUCI_FN"
|
||||
@@ -384,5 +412,4 @@ if [ "$opt_update" != "" ]; then
|
||||
return 247
|
||||
fi
|
||||
echo "RESULT: (+) Packages from $ZAP_PKG_ZIP_NAME successfully installed!"
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user