13 ноября 2024 Linux Linux многопользовательская система


Последнее время, наблюдая развитие компьютеров, заметил насколько много ресурсов доступно обычному компьютеру. Например, мой очередной новый ПК имеет процессор с 22 ядрам и 44 потоками, 128 гигабайт быстрой оперативной памяти, почти с десяток портов для подключения SATA дисков и ещё больше портов ввода вывода в виде USB. То-есть, чисто технически к этому компьютеру можно прицепить 4 набора беспроводных клавиш с мышками, 8 мониторов и 4 кресла. И для офисной работы этого вполне хватит.

типичное офисное рабочее место

Но оказывается, что Linux даже за последнее десятилетие бурного развития так и не осилил многопользовательский режим и в нём до сих пор используется режим виртуальный многопользовательский режим, то-есть пользователи многут подключить по сети к серверу который работает с root правами и для каждого нового пользователя он создаёт виртуальную сессию

Казалось бы что сложного, в настройках загрузчика указать наборы клавиш и мониторов для группировки в сессии терминалов отдельных клиентов, а затем продублировать эти настройки на X сервера. Но нет, нацiсты из команды Linux заняты отписками на добавления новых архитектур и патчей от российских разработчиков, буду  впиливать Rust в ядро и менять master ветку на main, чтобы не оскорбились либеральные квадробоберы.

В интернете нашёл вот такие жалкие оправдания в стиле «640 КБ должно хватить всем» @ Бил Гейц

Идея многопользовательской загрузки с отдельными наборами клавиатуры и мониторов для каждого пользователя на одной машине в Linux кажется привлекательной, однако она сталкивается с рядом технических, аппаратных и пользовательских ограничений. Вот основные причины:
1. Аппаратные ограничения

    Ограничения интерфейсов ввода/вывода: Современные ПК имеют ограниченное количество портов ввода/вывода, таких как USB или HDMI/DisplayPort. Подключение множества мониторов и клавиатур часто требует дополнительных устройств, таких как USB-хабы и мультивыходные видеокарты.
    Ограничения видеокарт: Большинство видеокарт предназначены для работы с одним или несколькими мониторами как единым рабочим пространством. Разделение их на независимые сессии пользователей требует сложной настройки и аппаратной поддержки, которой часто не хватает.

2. Ограничения программного обеспечения

    X11 и Wayland: Исторически Linux использует X11 и (в последние годы) Wayland для управления графикой. Эти системы не были изначально разработаны для полной изоляции видеовыходов и периферийных устройств между пользователями.
    Менеджеры дисплея: Стандартные менеджеры дисплея (GDM, SDDM, LightDM) не поддерживают работу с несколькими параллельными графическими сессиями, привязанными к отдельным мониторам и клавиатурам, в режиме полной изоляции.

3. Конфликты ввода

    В стандартной системе Linux устройства ввода (клавиатуры, мыши) распознаются системой как глобальные. Это означает, что ввод с любой клавиатуры обрабатывается одинаково для всех активных пользователей, что вызывает конфликты.

4. Сложность конфигурации

    Даже если бы аппаратное обеспечение поддерживало независимые устройства, настройка такой многопользовательской среды потребовала бы значительных усилий от администратора системы. Требуются сложные изменения в конфигурации ядра, менеджера сессий и драйверов устройств.

5. Безопасность и производительность

    Безопасность: В многопользовательской системе важно обеспечить, чтобы действия одного пользователя не могли повлиять на работу другого. Это требует значительных изменений в уровне ядра и драйверов для полного изолирования ресурсов.
    Производительность: Одновременная работа нескольких пользователей с высокими графическими и вычислительными требованиями может привести к серьезным задержкам и перегрузке системы.

6. Альтернативы

    Сетевые решения: В большинстве случаев проще и эффективнее использовать терминальные службы, такие как SSH или VNC, где пользователи могут работать на одном сервере с разных клиентских устройств.
    Паравиртуализация и контейнеры: Технологии вроде KVM или Docker позволяют создавать изолированные рабочие среды для каждого пользователя.

7. Низкий спрос

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

Реализация полноценной многопользовательской загрузки с изоляцией устройств ввода/вывода в Linux требует значительных аппаратных и программных изменений. Учитывая низкий спрос и существующие альтернативы, такие как виртуализация и удаленный доступ, развитие этого направления оказалось экономически и технически нецелесообразным.

Получается, что Linux идёт на поводу и производителей железа которым выгодно, что бы за каждое рабочее место платил деньги в корпорацию "добра"


07 октября 2024 Linux


Для того чтобы UDP приходящие из внешней сети на 53 порт перенаправить на другой порт, например 1025, необходимо добавить вот такое правило

sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 1025

# а удалить во тако

sudo iptables -t nat -D PREROUTING -p udp --dport 53 -j REDIRECT --to-port 1025

Для того чтобы UDP идушие по локальной сети на 53 порт перенаправить на другой порт, например 1025, необходимо добавить вот такое правило

sudo iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-port 1025

# удалить вот так
sudo iptables -t nat -D OUTPUT -p udp --dport 53 -j REDIRECT --to-port 1025

 


10 сентября 2024 30 сентября 2024 Linux DNS DNS сервер DNS протокол


Список опций

ssnn --help
Использовать так: ssnn [-hVv] [-p <port>] [--ttl=<ttl>] [-a <admin>]... [--zones=<zones>]... [TYPE=NAME=VALUE]...
Такие есть аргументы.

  -h, --help                показать подсказку и выйти
  -V, --version             показать версию и выйти
  -v, --verbose             расширенный вывод
  -p, --port=<port>         Номер порта (1024)
  --ttl=<ttl>               TTL (default: 600)
  -a, --admin=<admin>       Админ по умолчанию
  --zones=<zones>           Путь к директории зон (zones)
  TYPE=NAME=VALUE           Multiple records (e.g., A=test.ru=127.0.0.1)

Запустить на 53 порту можно только с root правами или в Docker контейнере с пробросом порта

sudo ./ssnn --port=53

Через опцию командной строки добавить две ресурсные A-записи для домена test.ru

./ssnn A=test.ru=127.0.0.1 A=test.ru=192.168.0.1

Поддерживаются следующие записи

Тип ресурсной записи Структура значения
A список IP адресов, по одной на каждую строку
MX число адрес-сервера
CNAME строка
HINFO список строк ключ;значение
SOA строка емейла администратора зоны
TXT список строк длиной до 255 символов
URI число число урл

Так же опциями запуска можно изменить значение по умолчанию для параметра TTL и емейл администратора всех зон

Настройки зоны можно сохранить в виде иерархии директорий и файлов, представленной в виде:

[D:путь к настройкам]/[D:название ресурсной записи]/[D:ТИП РЕСУРСНОЙ ЗАПИСИ/[F:значение ресурсной записи]

Директория ресурсных записей

По умолчанию настройки должны размещаться в директории zones либо можно изменить с помощью опции --zones=/etc/ssnn/zones/

После запуска программа анализирует опции запуска и формирует группу хешь-таблиц ресурсных запией,

затем загружаются данные из директории ZONES (при этом замещая ранее определённые записи)

затем сервер переходит в режим обслуживания неблокируемых UDP соединений с DNS клиентами

для внесения изменений в настройки ресурсных записей необходимо изменить данные в хранилища --zones и перезапустить сервер

либо можно отправить серверу сигнал SIGHUP, после получения сигнала сервер заново загружает все данные из хранилища --zones

pkill -q ssnn

По-умолчанию, сервер для каждого домена, после каждой переконфигурации, вычисляет значение SERIAL на основе текущей даты и времени, изменить это поведение можно с помощью создания и редактирования значения в файле SERIAL

echo $(awk '{print $1+1}' < zzz/example.com/SERIAL ) > zzz/example.com/SERIAL
cat zzz/example.com/SERIAL
4

killall -1 ssnn 

nslookup -querytype=SOA -port=1025 example.com 127.0.0.1
Server:		127.0.0.1
Address:	127.0.0.1#1025

example.com
	origin = example.com
	mail addr = ff.ya.ru
	serial = 4
	refresh = 600
	retry = 6000
	expire = 6000
	minimum = 600

 


28 августа 2024 10 сентября 2024 Linux bash xxd


Предположим есть некоторый дамп данных в формате hex, определяем его в переменную xxx

xxx='e9 e4 85 80 00 01
00 01 00 00 00 00 03 63 64 6e 09 63 65 6e 74 72
73 76 65 74 02 72 75 00 00 05 00 01 c0 0c 00 05
00 01 00 00 00 78 00 19 0a 32 6d 76 36 35 32 73
62 75 33 01 61 06 74 72 62 63 64 6e 03 6e 65 74
00'

Затем в цикле преобразуем каждое значение и сохраняем в файл

for x in $xxx ; do 
echo x$x |  xxd -r -p  ; 
done > xxx.bin

Преобразовать обратно в дополнительный ANSI форма

hexdump -C xxx.bin

 


10 июля 2024 Linux losetup cfdisk dd mkfs


Для получения навыка работы в дисковыми устройствами в среде Linux лучше начать экспериментировать в виртуальными устройствами в домашней папке пользователя

Это позволит безопасно для данных и оборудования освоить процессы разметки раздело, создания файловых систем, монтирования, размонтирования, так же лучше понять принципы работы ядра Linux с данными на дисках

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

 

  1. Создать пустой файл размером 1Гб
    dd if=/dev/zero of=test-image bs=1M count=1024
    1024+0 записей получено
    1024+0 записей отправлено
    1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 0,678707 s, 1,6 GB/s
    
  2. Подключить файл как блочное устройство(диск), тут с помощью утилиты losetup ядро получает имя нового виртуального устройства и имя файла, затем ядро связывает эти данные в новое виртуальное устройство
  3. sudo losetup /dev/loop33 test-image 
  4. Теперь в директории /dev/ появлось виртуальное устройство /dev/loop33 и с ним можно работать как с обычными диском используя инструменты fdisk cfdisk или gparted

    Разметить разделы на новом "диске" под свои тестовые нужны

    sudo cfdisk /dev/loop33
  5. Так как структура файла изменилась и на нём появились разделы, необходимо перемонтировать файл-виртуальное устройство
    # отмонтировать
    sudo losetup -d /dev/loop33 
    
    # примонтировать с поиском разделов
    sudo losetup -P  /dev/loop33  test-image
  6. Теперь в директории /dev/ появятся файлы устройств-разделов находящихся в тестовом файле и с ними можно работать как обычными разделами, там можно создавать файловые системы
    ffsdmad@basm:~$ sudo mkfs.ext4  /dev/loop33p1
    [sudo] пароль для ffsdmad: 
    mke2fs 1.46.5 (30-Dec-2021)
    Discarding device blocks: done                            
    Creating filesystem with 128000 4k blocks and 128000 inodes
    Filesystem UUID: d184b921-84f1-4fbe-8e98-729e67fbbfeb
    Superblock backups stored on blocks: 
    	32768, 98304
    
    Allocating group tables: done                            
    Сохранение таблицы inod'ов: done                            
    Создание журнала (4096 блоков): готово
    Writing superblocks and filesystem accounting information: готово
    
    ffsdmad@basm:~$ sudo mkfs.ext4  /dev/loop33p2
    mke2fs 1.46.5 (30-Dec-2021)
    Discarding device blocks: done                            
    Creating filesystem with 133888 4k blocks and 33520 inodes
    Filesystem UUID: fc175588-43de-4731-973c-875722ed273f
    Superblock backups stored on blocks: 
    	32768, 98304
    
    Allocating group tables: done                            
    Сохранение таблицы inod'ов: done                            
    Создание журнала (4096 блоков): готово
    Writing superblocks and filesystem accounting information: готово
    

    gparted

  7. Просмотр разделов устройства с помощью консольной версии gparted

    Просмотр разделов устройства с помощью консольной версии gparted

  8. Смонтировать новые файловые системы
    # создаёт две директории в /tmp
    mkdir -p /tmp/{1..2}
    
    # монтирование в созданные директории
    sudo mount /dev/loop33p1 /tmp/1 
    sudo mount /dev/loop33p2 /tmp/2
    
  9. Заполнить тестовыми данными
    sudo cp -r /etc /tmp/1/
    
    sudo cp -r /var/mail /tmp/2/
    
    # открыть смонтированные файловые системы в файловом менеджере mc
    mc  /tmp/1/  /tmp/2/ 

  10. Отмонтировать файловые системы, отмонтировать виртуальные устройства и удалить следы
    # отмонтировать файловые системы
    sudo umount /tmp/{1..2}
    
    # отмонтировать виртуальное устройств
    losetup -d /dev/loop33
    
    # удалить файл устройства
    rm test-image

 


30 мая 2024 Linux


Для того чтобы обойти блокировку ДокерХаба необходимо

на сервере который не заблокирова DockerHub установить непрозрачный прокси

настроить авторизацию по паролю

настроить Docker на работу с Proxy

Вот пример моих настроек tinyproxy

User tinyproxy
Group tinyproxy
Port 8888
Timeout 600
DefaultErrorFile "/usr/share/tinyproxy/default.html"
StatFile "/usr/share/tinyproxy/stats.html"
LogFile "/var/log/tinyproxy/tinyproxy.log"
LogLevel Info
PidFile "/run/tinyproxy/tinyproxy.pid"
MaxClients 100
BasicAuth user superPsWd
ViaProxyName "superproxy"
ConnectPort 443
ConnectPort 563

Теперь необходимо перенастроить докер приложение,  у меня удалось только через глобальную правку конфига /lib/systemd/system/docker.service, в секции [Service] добавляем прокси переменные

[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
Environment="HTTP_PROXY=http://user:superPsWd@my-proxy.xxx:8888"
Environment="HTTPS_PROXY=http://user:superPsWd@my-proxy.xxx:8888"

Затем можно перезагрузить конфиг докера и сам докер

systemctl daemon-reload &&  systemctl restart docker

 


28 мая 2024 Linux


Иногда чтото происходит с материнской платой и отваливается USB порт. Но ядро Linux продолжает пытаться общаться с этим портом и в логах появляются вот такие логи

Cannot enable. Maybe the USB cable is bad

Для исправления этой ошибки необходимо сообщить ядру о необходимости исключить заданный порт из работы, для этого необходимо отправить ID порта в файл /sys/bus/pci/drivers/xhci_hcd/unbind

Найти ID порта можно вот так

find /sys/ -name \*usb8-port2\*

/sys/devices/pci0000:00/0000:00:1c.4/0000:07:00.0/usb8/8-0:1.0/usb8-port2

у меня получился вот такой ID: 0000:07:00.0, затем этот ID нужно отправить в ядро

echo -n 0000:07:00.0 | tee /sys/bus/pci/drivers/xhci_hcd/unbind

/sys/bus/pci/drivers/xhci_hcd/unbind


27 апреля 2024 Linux


Имею несколько компьютеров с прошлым LTS релизом Ubuntu 24.04, согласно рекомендация перед сменой версий необходимо обновить текущий дистрибутив

root@micro-server:~# apt update 
Сущ:1 http://ru.archive.ubuntu.com/ubuntu jammy InRelease                                                         
Сущ:2 http://ru.archive.ubuntu.com/ubuntu jammy-updates InRelease                                                 
Сущ:3 http://ru.archive.ubuntu.com/ubuntu jammy-backports InRelease                                               
Сущ:4 http://security.ubuntu.com/ubuntu jammy-security InRelease                                                  
Сущ:5 https://esm.ubuntu.com/apps/ubuntu jammy-apps-security InRelease                            
Сущ:6 https://esm.ubuntu.com/apps/ubuntu jammy-apps-updates InRelease
Сущ:7 https://esm.ubuntu.com/infra/ubuntu jammy-infra-security InRelease
Сущ:8 https://esm.ubuntu.com/infra/ubuntu jammy-infra-updates InRelease
Чтение списков пакетов… Готово            
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
Все пакеты имеют последние версии.


root@micro-server:~# apt upgrade
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово         
Расчёт обновлений… Готово
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.


root@micro-server:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.4 LTS
Release:	22.04
Codename:	jammy


root@micro-server:~# grep Prompt /etc/update-manager/release-upgrades
Prompt=lts
#Prompt=normal

root@micro-server:~# do-release-upgrade 
Проверка наличия нового релиза Ubuntu
Нет доступной LTS версии для разработчиков.
Чтобы произвести полное обновление до последнего разрабатываемого (без долгосрочной поддержки) выпуска 
установите Prompt=normal в /etc/update-manager/release-upgrades.

Причём совсем недавно обновление работало и я для тестов обновил 22.04,4 до тестовой версии 24.04, но там обнаружился сломанный пакет docker-python и я ожидал что его починят в официальном релизе

Так вот после выхода релиза ничего не изменилось,

root@csvt:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 24.04 LTS
Release:	24.04
Codename:	noble


root@csvt:~# apt update 
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Hit:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease
Hit:3 http://archive.ubuntu.com/ubuntu noble-security InRelease
Hit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
root@csvt:~# apt upgrade 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

То-есть сейчас, пока не получается обновиться до офицального LTS Ubuntu 24.04

PS: оказывается, что обновиться с 22.04.4 на 24.04 нельзя потому что это обновление придёт после 15 августа, об этом написано https://discourse.ubuntu.com/t/noble-numbat-release-notes/39890#upgrades-4

Users of Ubuntu 23.10 will be offered an automatic upgrade to 24.04 soon after the release.
Users of 22.04 LTS however will be offered the automatic upgrade when 24.04.1 LTS is released, which is scheduled for the 15th of August.

 


17 апреля 2024 18 апреля 2024 Linux docker stunnel4


Серверную часть тонеля stunnel4 не имеет смысла описывать, а вот создания контейнера шифрующего трафика ещё ни где особо не описано. Итак

В директори services/stunnel4 размещаем 3 файла

  • [remote-ip].pem - файл сертификат, [remote-ip]  я использую для быстрой идентификации IP сервера к которому идёт подключение
  • stunnel.conf - настройка stunnel4
  • Dockerfile - файл образа

в файле stunnel.conf пишем примерно такое

client = yes
pid = /var/run/stunnel.pid
foreground = yes

[postgres]
accept = 0.0.0.0:55432
connect = [remote-ip]:15432
cert = /etc/stunnel/[remote-ip].pem

Разумеется [remote-ip]  заменяем на свой

В файле Dockerfile пишем вот такое

from avccvut/stunnel4:0.1-5.44

COPY ./[remote-ip].pem /etc/stunnel/
COPY ./stunnel.conf /etc/stunnel/

CMD ["stunnel4", "/etc/stunnel/stunnel.conf"]

В файле docker-compose.yml добавляем новый такой контейнер:

  postgres:
    # ...

  stunnel4:
    container_name: ${APP_NAME}-stunnel4
    build:
      context: services/stunnel4
    ports:
      - 55432:55432

После того как контейнер будет запущен обращаться к продакшен базе вот так

docker-compose exec postgres psql postgresql://user:psswrd@stunnel4:55432/dbname

Или например вот так можно скорпировать таблицу из внешней базы в локальный контейнер

docker-compose exec postgres pg_dump postgresql://user:psswrd@stunnel4:55432/dbname -t auth_user | docker-compose exec postgres psql dbname

 


09 октября 2023 Linux ubuntu 22.04 haproxy rsyslog logging


Недавно обнаружил, что современные на 2023 года Ubuntu не логируют работу Haproxy. Оказывается в них отсутствует и не настроен rsyslog

проверить можно вот так

apt-cache policy rsyslog

установить вот так

sudo apt-get install rsyslog

Затем необходимо настроить его для работы на 514 пору, для этого необходимо раскоментировать следующие настройки

egrep 'im(tcp|udp)' /etc/rsyslog.conf
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")

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

service rsyslog restart

Затем проверить в /etc/haproxy/haproxy.cfg глобальную настройку
 

global
        log 127.0.0.1:514 local0

defaults
        log     global

и перезапустить haproxy

haproxy -c -V -f /etc/haproxy/haproxy.cfg && service haproxy reload

А так же подумать на счёт переноса haproxy  в отдельный контейнер


04 октября 2023 Linux docker ftp proFTPD


Современный backend может не содержать на физическом сервере своих привычных файлов, там может даже не было СУБД и Веб-сервера потому что вся система размещается в контейнерах Docker

Для того чтобы предоставить доступ к файлам в таком контейнере можно воспользовать образом proFTPD и включить его в конфигурацию docker-compose

Ниже представлена настройка такого контейнера

  ftp:
    image: instantlinux/proftpd
    container_name: ${APP_NAME}-ftp
    ports:
      - "2100:21"
      - "30091-30100:30091-30100"
    env_file: .env
    volumes:
      - ./ftp/secrets:/run/secrets
      - ./site:/home/site/
    environment:
      - PASV_ADDRESS=0.0.0.0
      - ANONYMOUS_DISABLE=on
      - TZ=Europe/Moscow
      - SFTP_ENABLE=off
      - PASV_MAX_PORT=30100
      - PASV_MIN_PORT=30091

так же предполагается наличие  .env файла в котором необходимо определить следующие переменные

FTPUSER_UID=1000
FTPUSER_NAME=ftp_user
FTPUSER_PASSWORD_SECRET=Yhatztna7%$4A8hag

Переменная FTPUSER_UID должна быть равна ID текущего пользовать от имени которого запускается контейнер

Переменные FTPUSER_NAME и FTPUSER_PASSWORD_SECRET ипользуется для генерации пароля и поиска этого пароля в специальном файле в директории /run/secrets

Дело в том, что proFTPD использует пароли в определённом формате, для нормальной работы необходимо сгенерировать пароль и положить в специальный файл, который будет подмотирован в образ proFTPD

python3 -c "import crypt,random,string;  print(crypt.crypt('$FTPUSER_PASSWORD_SECRET', '\$6\$' + ''.join( [random.choice(string.ascii_letters + string.digits)   for _ in range(16)])))" > ftp/secrets/$FTPUSER_PASSWORD_SECRET

в результате получится вот такой файл с паролем

cat  ftp/secrets/Yhatztna7%\$4A8hag 
$6$XyHVN6aqgQvgj7Vv$Ac/9hKk0WYOmYPPh/hcG/yLvMAAgi91.k5lC2U4Dx/1PEe0KtW8NsLOhN6GBzcX8TKQPF51JHmyBX580pZ9.A0

Если хочется дополнительных опцией автозапуска то достаточно изучить файл инициализации контейнера

docker-compose exec ftp cat /usr/local/bin/entrypoint.sh

 


21 апреля 2023 22 августа 2023 Linux bind dnssec


export DOMAINNAME=breys.ru

cd /var/cache/bind

dnssec-keygen -L 3600 -a RSASHA256 -b 2048  $DOMAINNAME
dnssec-keygen -L 3600 -f KSK -a RSASHA256 -b 4096 $DOMAINNAME

for key in `ls K$DOMAINNAME*.key`; do 
    echo "\$INCLUDE $key"  /etc/bind/zones/$DOMAINNAME.conf ; 
done

salt=$(head -c 1000 /dev/urandom | sha1sum | cut -b 1-16)

dnssec-signzone -A -3 $salt -N INCREMENT -o $DOMAINNAME -t /etc/bind/zones/$DOMAINNAME.conf

В результате подписанный файл зоны будет в файле /etc/bind/zones/$DOMAINNAME.conf

этот файл необходимо указать в настройках зоны и перезапустить bind9

zone "breys.ru" {
    type master;
//    file "/etc/bind/zones/breys.ru.conf";
    file "/etc/bind/zones/breys.ru.conf.signed";
};

При этом утилита dnssec-signzone подписывает каждую запись зоны /etc/bind/zones/$DOMAINNAME.conf

в который мы добавили созданные ключи через $INCLUDE

Ключи должны находиться в /var/cache/bind

В дальнейшем с зоной необходимо работать по такой схеме

  • изменения вносят в оригинальный файл зоны /etc/bind/zones/breys.ru.conf
  • подписывают изменённый файл зоны ключами:
    dnssec-signzone -A -3 $salt -N INCREMENT -o $DOMAINNAME -t /etc/bind/zones/$DOMAINNAME.conf
  • перезапускают bind9

 


06 марта 2023 Linux


Проверить mail._domainkey

dig TXT mail._domainkey.centersvet.com

Получить заголовок зоны

 dig +nocmd centrsvet.com any +multiline +noall +answer

 


20 января 2023 25 января 2023 Linux dd losetup pvcreate vgcreate lvcreate vgchange


Задача: выжать максимум производительность из шины материнской платы.

Цель: raid массив построенный на программной технологии LVM

RAID массив 0 уровня состоит из 4 виртуальных устройств Linux созданных на основе пустых файлов размером по 512 мегабайт

Процедура создания программного LVM/RAID0

# создание пустых файлов
dd if=/dev//zero of=sda1.dd bs=1M count=512
dd if=/dev//zero of=sda2.dd bs=1M count=512
dd if=/dev//zero of=sda3.dd bs=1M count=512
dd if=/dev//zero of=sda4.dd bs=1M count=512


# создание виртуальных устройств
losetup --partscan --find --show  sda1.dd
losetup --partscan --find --show  sda2.dd
losetup --partscan --find --show  sda3.dd
losetup --partscan --find --show  sda4.dd


# создание PV
pvcreate /dev/loop15
pvcreate /dev/loop16
pvcreate /dev/loop17
pvcreate /dev/loop18


# создание VG
vgcreate vgdata /dev/loop15 /dev/loop16 /dev/loop17  /dev/loop18


# создание LVM/RAID0
lvcreate -i4 -I64  -l 100%VG -n lvmirror vgdata

Файлы блоков LVM/RAID0 будут размещать на 3 типах физических устройств

  1. Шпиндельный диск HDD с интерфейсом SATA
  2. Твердотельное хранилище SSD с интерфейсом SATA
  3. NVME с интерфейсом M2

Для перемещения блоков LVM/RAID0 необходимо остановить VG, удалить виртуальные устройства, перенести файлы, создать устройства, запустить VG по следующему сценарию

# остановка VG
vgchange -a n vgdata


# деактивация виртуальных устройств
losetup -d /dev/loop15
losetup -d /dev/loop16
losetup -d /dev/loop17
losetup -d /dev/loop18


# перемещение файлов-блоков LVM/RAID0
mv sda* /путь/


cd /путь/

# создание виртуальных устройств
losetup --partscan --find --show  sda1.dd
losetup --partscan --find --show  sda2.dd
losetup --partscan --find --show  sda3.dd
losetup --partscan --find --show  sda4.dd


# запуск VG
vgchange -a y vgdata

Ниже будут показаны три комбинации конфигураций, в каждой конфигурации по два скриншота замеров производительности диска на котором размещёны блоки LVM/RAID0 и замер производительности LVM/RAID0

Первая, самая медленная, конфигурация: здесь блоки raid размещаются на SSD с интерфейсом SATA

средняя скорость чтения с SSD/SATA диска 540Мб/с

SSD/SATARAID0/LVM on SSD SATA

 

Вторая конфигурация: здесь блоки raid размещаются на обычном шпиндельном SATA диске

Средняя скорость чтения SATA 144Мб/с

SATARAID0/LVM on SATA

 

 

Последняя, самая быстрая конфигурация: здесь блоки raid размещаются на скоростном NVME установленнам через переходник в слот PCI-Express

Средняя скорость чтения NVME 2,7Гб/м

NVME/M2RAID0/LVM on NVME

Вывод: с помощью LVM/Raid можно получить повышение производительности цифрового хранилища.

Получается, можно взять обычный шпиндельный SATA диск, разделить его на 4 раздел, на их основе создать LVM/RAID0 и получить увеличение скорости чтения в несколько раз

даже звучит дико

сводная таблица, в кавычках количество разделов используемых в LVM/RAID0

SATA (WDC WD3000FYYZ-01UL1B0) 143,3 Мб/с  
LVM/RAID0(1) SATA 3,0 Гб/с 117,1 Мб/с
LVM/RAID0(2) SATA 3,1 Гб/с 64,9 Мб/с
LVM/RAID0(3) SATA 3,9 Гб/с 85,9 Мб/с
LVM/RAID0(4) SATA 5.2 Гб/с 92.8 Мб/с
LVM/RAID0(6) SATA 5,5 Гб/с 73,3 Мб/с
SSD/SATA (Samsung SSD 870 QVO) 540.9 Мб/с  
LVM/RAID0(1) SSD/SATA 2,2 Гб/с 74,5 Мб/с
LVM/RAID0(2) SSD/SATA 3,7 Гб/с 66,7 Мб/с
LVM/RAID0(3) SSD/SATA 5,7 Гб/с 72,4 Мб/с
LVM/RAID0(4) SSD/SATA 5.1 Гб/с 71.7 Мб/с
LVM/RAID0(6) SSD/SATA 7,4 Гб/с 70,9 Мб/с
NVME/M2 (Samsung SSD 970 EVO Plus) 2.7 Гб/с  
LVM/RAID0(1) NVME/M2 2,4 Гб/с 457,3 Мб/с
LVM/RAID0(2) NVME/M2 3.7 Гб/с 351,9 Мб/с
LVM/RAID0(3) NVME/M2 4,2 Гб/с 453,1 Мб/с
LVM/RAID0(4) NVME/M2 5.5 Гб/с 522.4 Мб/с
LVM/RAID0(6) NVME/M2 7,9 Гб/с 462,7 Мб/с

 


19 января 2023 Linux


Наконец-то, спустя 10 лет, пришлось добавлять наши родные сертификаты, есть потенциально рабочий гайд установки корневого сертификата минцифры на RedHat/Сentos, а я представляю гайд для Debian/Ubuntu

# перейти в директорию с сертифкатами
cd /usr/local/share/ca-certificates

# скачать корневые сертификаты минцифры РФ
wget https://gu-st.ru/content/lending/russian_trusted_root_ca_pem.crt https://gu-st.ru/content/lending/russian_trusted_sub_ca_pem.crt

# обновить список доверенных сертификатов операционной системы
update-ca-certificates --verbose

Вот и всё


22 декабря 2022 27 декабря 2022 Linux


Управление dd образами производится в 4 операции

sudo losetup --partscan --find --read-only --show  file.dd 

# создаёт виртуальный Диск и отображает имя файла виртуального диска, в моём случае /dev/loop15
# список разделов можно посмотреть вот так sudo fdisk -l /dev/loop15

sudo mount /dev/loop15p2 /mnt

# монтирует второй раздел виртуальный диска в директорую /mnt/
# тут какие то работы с данными образами

sudo umount /mnt 

# отмонтировать

sudo losetup -d /dev/loop15 

# удалить виртуальный диск