wildcar's home

Webmin custom command menu parameter

Webmin предлагает удобный веб-интерфейс для управления linux сервером
Одной из возможностей является функциональность пользовательских команд
Webmin custom command
Для заведения команды вводятся ее параметры, что запустить в командной строке, под каким пользователем и с какими параметрами
В качестве параметров может использоваться поле для ввода текста, опции, бинарный выбор
Одной из возможностей является меню
В качестве параметра для меню указывается имя текстового файла, в котором указаны опции меню
В документации по webmin указано, что в файле одна опция — это одна строка в файле, при этом первая часть строки — это сам параметр, который передается в команду, потом запятая, затем текстовое описание этого параметра, которое видит пользователь, как пункт меню
В реальности (актуально для версии Webmin 2.303), парсер файла ищет связки параметр — описание в файле, разделенные пробелом
И если в параметре уже есть пробелы, то его нужно заключить в кавычки
Для строк можно использовать # в начале строки как комментарий
Вот файл, который получился для occ команд nextcloud:

"maintenance:repair --include-expensive" "Maintenance repair all"
"db:add-missing-columns" "Add missing columns"
"db:add-missing-indices" "Add missing indices"
"app:list" "List of installed applications"
"maintenance:mode --off" "Switch off maintenance mode"
"update" "Proceed with update"

Сам парсер находится в исходном файле webmin \custom\custom-lib.pl и выглядит следующим образом:

# read_opts_file(file)
# Read the file containing possible menu options for a command
sub read_opts_file
{
local @rv;
local $file = $_[0];
if ($file !~ /^\// && $file !~ /\|\s*$/) {
	local @uinfo = getpwnam($remote_user);
	if (@uinfo) {
		$file = "$uinfo[7]/$file";
		}
	}
my $h;
$h = "<" if ($file =~ /^\// && $file !~ /\|\s*$/);
open(FILE, "$h".$file);
while(<FILE>) {
	s/\r|\n//g;
	next if (/^#/);
	if (/^"([^"]*)"\s+"([^"]*)"$/) {
		push(@rv, [ $1, $2 ]);
		}
	elsif (/^"([^"]*)"$/) {
		push(@rv, [ $1, $1 ]);
		}
	elsif (/^(\S+)\s+(\S.*)/) {
		push(@rv, [ $1, $2 ]);
		}
	else {
		push(@rv, [ $_, $_ ]);
		}
	}
close(FILE);
return @rv;
}

Wireguard server on Ubuntu

https://www.wireguard.com/quickstart/
Manual
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8

sudo apt install wireguard
wg genkey | tee server-privatekey | wg pubkey > server-publickey

~/wg/wg-server.conf

[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820
[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg= #client public key
AllowedIPs = 10.192.122.3/32
wg setconf wg0 ~/wg/wg-server.conf
ip link add dev wg0 type wireguard
ip address add dev wg0 10.60.10.1/24
ip link set up dev wg0

wg genkey | tee server-privatekey | wg pubkey > server-publickey
wg setconf wg0 /etc/wireguard/wg0.conf

Проверка доступности извне порта сервера (проверяется с клиентской машины)
nc -z -v -u 91.149.254.78 51820
Проверка, что TCP пакеты доходят до сервера (проверяется на сервере)
tcpdump -n -i eth0 port 51820
https://habr.com/ru/articles/709920/
https://losst.pro/ustanovka-wireguard-v-ubuntu
https://docs.vultr.com/how-to-install-wireguard-vpn-on-ubuntu-24-04

kvas DNS routing for keenetic router

Main wiki
https://github.com/qzeleza/kvas/wiki
Tags
https://github.com/qzeleza/kvas/blob/main/opt/etc/conf/tags.list
Проверка доменов сайта

window.domains = [...new Set(performance.getEntriesByType('resource').map(r => (new URL(r.name)).hostname))]; console.log(domains);

Очистка DNS windows

ipconfig /flushdns

Очистка DNS браузера

chrome://net-internals/#dns

Используемые DNS
powershell:

Get-DnsClientServerAddress

cmd:

cmd:

Добавить локальный host в DNS: /opt/etc/hosts

192.168.1.1 localserver

Перезапустить DNS

/opt/etc/init.d/S56dnsmasq restart

или

kvas update

Midnight Commander и редактор micro настройка

Для работы с терминальными сессиями удобно использовать Терминал Windows
Хорошо настраивается и имеет приятный вид и интерфейс
https://apps.microsoft.com/detail/9n0dx20hk701

Для удобства работы в MC в рамках терминала можно сделать следующие настройки:

Переход на папку выше через backspace:
Глобальные настройки сочетаний клавиш здесь:

/etc/mc/mc.keymap

Меняем

CdParentSmart = backspace

Smart имеется ввиду, что команда не будет срабатывать, если в строке команд есть текст
Подключаем редактор micro
https://micro-editor.github.io/index.html
Позволяет пользоваться клавиатурными командами Ctrl-C, Ctrl-V и т. д.
Позволяет использовать буфер обмена терминала — он будет прозрачен как в терминале, так и на хосте

Устанавливаем micro

sudo apt install micro xclip

Меняем редактор по умолчанию в mc

Находим куда установился micro

whereis micro

Отключаем в MC встроенный редактор

Отключаем в MC встроенный редактор

Поменять настройку какой внешний редактор будет использовать MC можно разными способами

  1. Вызываем команду
selected_editor

и выбираем нужный редактор, если нужного редактора в списке нет,

  1. Редактируем файл настроек selected_editor
micro ~/.selected_editor

правим строку

SELECTED_EDITOR="/usr/bin/micro"

если пакет sensible-utils (куда входит selected_editor) недоступен,

  1. Устанавливаем переменную среды EDITOR
    в файл ~.bashrc добавляем строку:
EDITOR=/usr/bin/micro

Устанавливаем настройку буфера обмена на терминал и отключаем автокопирование в буфер выделения

В micro Ctrl-E

set clipboard terminal
set useprimary false

Устанавливаем выход из  micro по клавише Esc

в файл ~/.config/micro/bindings.json добавить строку (если там уже есть комбинации строку нужно дописать к ним, поставив после последней запятую:

{
"Esc": "Quit"
}

Все настройки, указанные здесь, распространяются только на текущего пользователя и при запуске MC от имени root (sudo root) нужно настроить то же самое для root

Подключение WinSCP с root правами

https://winscp.net/eng/docs/faq_su
Узнать, где находится sftp-server можно командой

whereis sftp-server

With SFTP protocol, you can use SFTP server option on SFTP page of Advanced Site Settings dialog to execute SFTP binary under a different user. With OpenSSH server, you can specify:

sudo /usr/lib/sftp-server

Добавить в /etc/sudoers.d файл, скажем wildcar_sftp с содержимым:

username ALL=NOPASSWD: /usr/lib/sftp-server

Тюнинг Nextcloud

Советы по тюнингу Nextcloud, когда в общих сведениях о сервере выдаются ошибки и предупреждения:

Проверка безопасности и параметров
Для обеспечения безопасности и производительности важно, чтобы всё было настроено правильно. Чтобы убедиться в этом, мы выполняем некоторые автоматические проверки. Для получения дополнительной информации обратитесь к соответствующему разделу документации.
Были обнаружены ошибки конфигурации.

https://kurazhov.ru/nextcloud-tuning/#12
APCu not available for local cache
Изменить /etc/php/8.3/cli/php.ini

apc.enable_cli=1

Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения 512 MB

sudo apt install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm

Изменить /etc/php/8.3/fpm/php.ini
и /etc/php/8.3/apache2/php.ini

memory_limit = 512M

и перезапустить PHP и Apache

sudo systemctl restart php8.3-fpm
sudo systemctl reload apache2

Модуль PHP OPcache настроен неправильно
Изменить /etc/php/8.3/fpm/php.ini

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=256
opcache.save_comments=1
opcache.revalidate_freq=1

и перезапустить PHP и Apache

sudo systemctl restart php8.3-fpm
sudo systemctl reload apache2

Установка Portainer для Docker

Выдержка из инструкций:
https://docs.portainer.io/start/install-ce/server/docker/linux
https://timeweb.cloud/tutorials/docker/ustanovka-i-ispolzovanie-portainer

Установка Portainer через Docker

mkdir ~/portainer 
cd ~/portainer 
cat > docker-compose.yml

Вставляем в файл следующие инструкции:

services:
  portainer:
    image: portainer/portainer-ce:lts
    container_name: portainer
    ports:
      - 8000:8000
      - 9443:9443
    volumes:
      - portainer_data:/data
      - /var/run/docker.sock:/var/run/docker.sock
    restart: always
volumes:
    portainer_data:

Нажимаем Ctrl-C
Создаем том для хранения базы данных

sudo docker volume create portainer_data
sudo docker compose up -d
Ранее Ctrl + ↓