Skip to content

Commit

Permalink
feat(nod32ms.conf): add link_method configuration for file linking
Browse files Browse the repository at this point in the history
refactor(Config.class.php): update link method detection logic to support new link_method config

feat(Mirror.class.php): implement multiple link methods based on config

feat(langpacks): add messages for symbolic link creation in English and Russian language packs

The changes introduce a new configuration option for specifying the method of linking files, update the logic for detecting the link method, and add support for creating both hard and symbolic links based on the new configuration. Additionally, language pack entries are updated to reflect the new functionality for symbolic links. This allows for more flexibility and better OS compatibility when setting up file links in the application.

#### Commit Message for src/server.ts:
fix(server.ts): change port variable case from lowercase port to uppercase PORT to improve semantics

#### Commit Message for worker/core/langpacks/ukr.lng:
feat(worker/core/langpacks/ukr.lng): add support for symbolic links

#### Commit Message for worker/entrypoint.sh:
fix(worker/entrypoint.sh): change watch command option from -n to -tn to fix compatibility issue

Please note that the commit messages provided above are based on the changes observed in the `git diff --staged` output you provided. These messages follow the conventional commit convention, which includes a concise description of the changes made and the reason behind them.
  • Loading branch information
marat2509 committed Mar 5, 2024
1 parent f4cf1da commit 6099523
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 48 deletions.
9 changes: 9 additions & 0 deletions nod32ms.conf
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ debug_update = 0
; Path to your www directory where eset mirror files will be located.
web_dir = "www"

; Method for linking files
; auto - autodetect for current OS
; hardlink_php - link() php function for create hard link
; hardlink_fsutil - WinNT fsutil for create hard link
; hardlink_ln - Unix ln for create hard link
; symlink_php - symlink() php function for create symbolic link
; symlink_ln - Unix ln for create symbolic link
link_method = "auto"

; Generate index.html file and put it into the root of www directory.
; It will have: correct database version, size and date of successful update.
generate_html = 1
Expand Down
75 changes: 39 additions & 36 deletions worker/core/inc/classes/Config.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -170,45 +170,48 @@ static private function check_config()

if (!is_writable(static::$CONF['SCRIPT']['web_dir'])) throw new ConfigException("Web directory is not writable. Check your permissions!");

// Link test
$linktestfile = Tools::ds(static::$CONF['LOG']['dir'], LINKTEST);
$test = false;
$status = false;

if (file_exists($linktestfile)) {
$status = file_get_contents($linktestfile);

if (preg_match("/link|fsutil|false/", $status)) $test = true;
}
if ($test == false) {
file_put_contents(Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest'), '');

if (
function_exists('link') &&
symlink(
Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest'),
Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest2')
)
) {
$status = 'link';
} elseif (
preg_match("/^win/i", PHP_OS) &&
shell_exec(
sprintf(
"fsutil hardlink create %s %s",
if (empty(static::$CONF['SCRIPT']['link_method']) || static::$CONF['SCRIPT']['link_method'] == "auto") {
// Link test
$linktestfile = Tools::ds(static::$CONF['LOG']['dir'], LINKTEST);
$test = false;
$status = false;

if (file_exists($linktestfile)) {
$status = file_get_contents($linktestfile);

if (preg_match("/symlink_php|hardlink_fsutil|false/", $status)) $test = true;
}
if ($test == false) {
file_put_contents(Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest'), '');

if (
function_exists('symlink') &&
symlink(
Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest'),
Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest2'))
) != 0
) {
$status = 'fsutil';
} else $status = 'false';

if ($status) unlink(Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest2'));

unlink(Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest'));
@file_put_contents($linktestfile, $status);
Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest2')
)
) {
$status = 'symlink_php';
} elseif (
preg_match("/^win/i", PHP_OS) &&
shell_exec(
sprintf(
"fsutil hardlink create %s %s",
Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest'),
Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest2'))
) != 0
) {
$status = 'hardlink_fsutil';
} else $status = 'false';

if ($status) unlink(Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest2'));

unlink(Tools::ds(static::$CONF['SCRIPT']['web_dir'], 'linktest'));
@file_put_contents($linktestfile, $status);
}
static::$CONF['SCRIPT']['link_method'] = ($status != 'false' ? $status : false);
}
static::$CONF['create_hard_links'] = ($status != 'false' ? $status : false);
}

/**
Expand Down
20 changes: 16 additions & 4 deletions worker/core/inc/classes/Mirror.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -649,15 +649,27 @@ static public function create_links($dir, $new_files)

if (!file_exists($res)) mkdir($res, 0755, true);

switch (Config::get('create_hard_links')) {
case 'link':
symlink($result, $path);
switch (Config::get('SCRIPT')['link_method']) {
case 'hardlink_php':
link($result, $path);
Log::write_log(Language::t("Created hard link for %s", basename($array['file'])), 3, static::$version);
break;
case 'fsutil':
case 'hardlink_fsutil':
shell_exec(sprintf("fsutil hardlink create %s %s", $path, $result));
Log::write_log(Language::t("Created hard link for %s", basename($array['file'])), 3, static::$version);
break;
case 'hardlink_ln':
shell_exec(sprintf("ln -f %s %s", $result, $path));
Log::write_log(Language::t("Created hard link for %s", basename($array['file'])), 3, static::$version);
break;
case 'symlink_php':
symlink($result, $path);
Log::write_log(Language::t("Created symbolic link for %s", basename($array['file'])), 3, static::$version);
break;
case 'symlink_ln':
shell_exec(sprintf("ln -fs %s %s", $result, $path));
Log::write_log(Language::t("Created symbolic link for %s", basename($array['file'])), 3, static::$version);
break;
case 'copy':
default:
copy($result, $path);
Expand Down
8 changes: 5 additions & 3 deletions worker/core/langpacks/en.lng
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Incorrect value of self_update parameter. Must be 0, 1 or 2!
Language file [%s.lng] does not exist!
Language file [%s] is corrupted!
Created hard link for %s
Created symbolic link for %s
Copied file %s
From %s downloaded %s [%s] [%s/s]
Error download url %s
Expand All @@ -38,14 +39,14 @@ Run script %s
Total working time: %s
Stop script.
Keys file is empty!
Use valid key [%s:%s] Expiration date %s
Use valid key [%s:%s]
Invalid key [%s:%s]
Unhandled exception [%s]
No working keys were found!
Link wasn't found [%s]
Link was found [%s]
Found keys: %s
Found valid key [%s:%s] Expiration date %s
Found valid key [%s:%s]
Found invalid key [%s:%s]
Found links: %s
Begining search at %s
Expand Down Expand Up @@ -81,7 +82,8 @@ Validating key [%s:%s] for version %s
The script has been stopped!
Checking mirror %s with key [%s:%s]
Extracting file %s to %s
Key [%s:%s:%s:%s] already exists
Key [%s:%s:%s] already exists
Key [%s:%s] already exists
Found expired key [%s:%s] Expiration date %s
Downloading %s [%s Bytes]
Error while downloading file %s [%s]
Expand Down
6 changes: 4 additions & 2 deletions worker/core/langpacks/ru.lng
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Web каталог без доступа на запись. Проверьте
Файл локализации [%s.lng] не существует!
Файл локализации [%s] повреждён!
Создана жесткая ссылка для %s
Создана символическая ссылка для %s
Скопирован файл %s
С %s загружено %s [%s] [%s/s]
Ошибка загрузки файла %s
Expand All @@ -45,7 +46,7 @@ Web каталог без доступа на запись. Проверьте
Ссылка не найдена [%s]
Найдена ссылка [%s]
Найдено ключей: %s
Найден действующий ключ [%s:%s] Срок действия %s
Найден действующий ключ [%s:%s]
Найден не действующий ключ [%s:%s]
Найдено ссылок: %s
Начат поиск в %s
Expand Down Expand Up @@ -81,7 +82,8 @@ Web каталог без доступа на запись. Проверьте
Скрипт будет остановлен!
Проверка зеркала %s с ключом [%s:%s]
Распаковка файла %s в %s
Ключ [%s:%s:%s:%s] уже существует
Ключ [%s:%s:%s] уже существует
Ключ [%s:%s] уже существует
Найден просроченный ключ [%s:%s] Срок действия %s
Загрузка %s [%s Байт]
Ошибка при загрузке файла %s [%s]
Expand Down
6 changes: 4 additions & 2 deletions worker/core/langpacks/ukr.lng
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Web каталог без доступу на запис. Перевірте в
Файл локалізації [%s.lng] не існує!
Файл локалізації [%s] ушкоджений!
Створено жорстке посилання для %s
Створено символічне посилання для %s
Скопійовано файл %s
З %s завантажено %s [%s] [%s/s]
Помилка завантаження файлу %s
Expand All @@ -45,7 +46,7 @@ Web каталог без доступу на запис. Перевірте в
Посилання не знайдено [%s]
Знайдено посилання [%s]
Знайдені ключі: %s
Знайдено діючий ключ [%s:%s] Термін дії %s
Знайдено діючий ключ [%s:%s]
Знайдено не діючий ключ [%s:%s]
Знайдено посилання: %s
Почато пошук у %s
Expand Down Expand Up @@ -81,7 +82,8 @@ ESET NOD32 сервер оновлення
Скрипт буде зупинен!
Перевірка дзеркала %s з ключом [%s:%s]
Розпаковка файлу %s в %s
Ключ [%s:%s:%s:%s] вже існує
Ключ [%s:%s:%s] вже існує
Ключ [%s:%s] вже існує
Знайдено прострочений ключ [%s:%s] Термін дії %s
Завантаження %s [%s Байт]
Помилкака при завантаженні файлу %s [%s]
Expand Down
2 changes: 1 addition & 1 deletion worker/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ if [ -z "${UPDATE_INTERVAL}" ]; then
UPDATE_INTERVAL=3600
fi

watch -n $UPDATE_INTERVAL "php /app/update.php"
watch -tn $UPDATE_INTERVAL "php /app/update.php"

0 comments on commit 6099523

Please sign in to comment.