NixTux https://nixtux.ru На этом сайте делимся опытом, скриптами и советами в Linux и Свободных программах Thu, 26 Jan 2023 20:41:22 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.0.3 debootstrap LoongNix 20 https://nixtux.ru/1263 https://nixtux.ru/1263#respond Thu, 26 Jan 2023 20:36:36 +0000 https://nixtux.ru/?p=1263 Читать далее debootstrap LoongNix 20]]> Разворачиваем rootfs (контейнер) c дистрибутивом Loongnix (под архитектуру loongarch) из-под этого же самого loongnix:

sudo apt install debootstrap
sudo cp -v /usr/share/debootstrap/scripts/stable /usr/share/debootstrap/scripts/DaoXiangHu-stable
sudo nano /usr/share/debootstrap/scripts/DaoXiangHu-stable

Заменяем «keyring /usr/share/keyrings/debian-archive-keyring.gpg» на: «keyring /usr/share/keyrings/debian-archive-buster-loongarch64-stable.gpg»
Делаем:

sudo mkdir -p /var/lib/machines/loongnix20
sudo debootstrap DaoXiangHu-stable /var/lib/machines/loongnix20 http://pkg.loongnix.cn/loongnix

Входим в chroot:
sudo chroot /var/lib/machines/loongnix20
Или через systemd-nspawn (поставив его: sudo apt install systemd-container)
sudo systemd-nspawn -D /var/lib/machines/loongnix20
Или даже запустив систему:
sudo systemd-nspawn -D /var/lib/machines/loongnix20 --boot
Или через snr (обертку над systemd-nspawn для упрощения запуска графических и звуковых приложений):
snr loongnix20
snr loongnix20 --boot

Скоро постараюсь сделать обзор железки и ОС, подписывайте во вконтакте и/или телеграме, чтобы не пропустить!

]]>
https://nixtux.ru/1263/feed 0
Ошибка при обновлении glibc: error: format not a string literal and no format arguments [-Werror=format-security] https://nixtux.ru/1260 https://nixtux.ru/1260#respond Tue, 17 Jan 2023 07:57:19 +0000 https://nixtux.ru/?p=1260 Читать далее Ошибка при обновлении glibc: error: format not a string literal and no format arguments [-Werror=format-security]]]> В платформе rosa2021.1 была версия glibc 2.33, а в новой платформе rosa2023.1, разработку которой начали в самом конце декабря 2022 года, версия glibc 2.36. Компилятор пока что по-прежнему gcc 11. При пересборке некоторых пакетов возникла ошибка:
error: format not a string literal and no format arguments [-Werror=format-security]

Эта ошибка описана здесь. Если кратко, то падает на конструкции вида printf(string), а правильно так: printf("%s", string).

Почему же она появилась? Делаем diff файла /usr/include/stdio.h из обеих платформ и видим, что в rosa2023.1 (glibc 2.36) в нем появилось:

#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
/* Declare all functions from bits/stdio2-decl.h first.  */
# include 
#endif

Смотрим файл /usr/include/bits/stdio2-decl.h в rosa2023.1:

#if __USE_FORTIFY_LEVEL > 1

extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
			  const char *__restrict __format, ...);
extern int __printf_chk (int __flag, const char *__restrict __format, ...);
<...>

В файле /usr/include/bits/stdio2.h:

__fortify_function int
printf (const char *__restrict __fmt, ...)
{
  return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
}

То есть в glbic закрутили гайки. Это хорошо. Возникает два вопроса:

  1. Нужно ли открутить гайку?
  2. Как ее открутить?

Конечно, лучше поправить пакеты патчами, как описано по ссылке выше, делая подобные замены:

-printf(string)
+printf("%s", string)

Но это чревато человеческими ошибками. Когда пакетов много (а их по результатам масс-билда пока что совсем немного, всего лишь 38, однако все равно это не мало), каждый нормально не протестируешь, а printf такая штука, что можно написать компилируемый, но падающий во время работы код.
Чтобы открутить гайку, достаточно в начале спека написать:
%global Werror_cflags %{nil}
Это уберет -Wformat -Werror=format-security из флагов компилятора. Поможет, если в сборочных скриптах пакета не выставляется этот или более общий и включающий этот флаг -Werror. Попробовать и отключить, и переназначить его (то есть добавить переназначающий вклад после прописанного в скриптах сборки) без правки скриптов можно так:

%global Werror_cflags %{nil}
%global optflags %{optflags} -Wno-error=format-security

В сообщении коммита указать, что это испоравление сборки с glibc 2.36, и можно вставить ссылку на эту статью, даже комментарием в спеке, чтоб при обновлении пакета было легко принять решение об удалении этого костыля.

]]>
https://nixtux.ru/1260/feed 0
Сколько кешбека можно было бы получить в банке Авангард https://nixtux.ru/1256 https://nixtux.ru/1256#respond Mon, 10 Oct 2022 03:13:16 +0000 https://nixtux.ru/?p=1256 Читать далее Сколько кешбека можно было бы получить в банке Авангард]]> Написал простой bash-скрипт, который берет выгрузку истории платежей по карте из банка Авангард и смотрит, по каким из них был бы начислен кешбек, а по каким нет.

Скрипт может быть интересен новичкам в bash: в нем используются, например, массивы. Код прост и содержит некоторые комментарии на русском. Приведен пример входных данных, которые может обрабатывать этот скрипт.

4 года активно использовал карту без кешбека и решил посчитать, что было бы, если бы использовал карту с кешбеком.

https://github.com/mikhailnov/avangard-cashback-analyzer

]]>
https://nixtux.ru/1256/feed 0
Запуск Kicad 2007 на GNU/Linux 2022 года https://nixtux.ru/1246 https://nixtux.ru/1246#respond Thu, 06 Oct 2022 11:40:13 +0000 https://nixtux.ru/?p=1246 Читать далее Запуск Kicad 2007 на GNU/Linux 2022 года]]> В комментариях на Opennet некий человек написал, что ему в 2022 году понадобилось открыть проект, сделанный в Kicad 2007-го года, а современные версии Kicad не смогли его открыть. Он нашел в интернете готовые бинарники Kicad 2007 года, но не смог их запустить.

Весьма распространено ошибочное на мой взгляд мнение, что в Linux очень плохо с бинарной совместимостью. Да, есть проблемы, но не такие, какими их часто описывают. Ради интереса попробовал запустить эти бинарники. Буду запускать их в контейнере.

Хостовая ОС — ROSA Fresh 12 (rosa2021.1), XFCE.

Ставлю скрипт snr, который позволяет запускать графические программы в systemd-nspawn:
sudo dnf install snr

Скачиваю с ABF свежую сборку rootfs (chroot) rosa2021.1 и распаковываю ее:

sudo -i
cd /var/lib/machines
btrfs subvol create rosa2021.1_kicad2007
cd rosa2021.1_kicad2007
wget --content-disposition <ссылка>
tar -xvf *.tar.xz
rm -fv *.tar.xz
exit

Вместо btrfs subvol create можно просто mkdir.

Вхожу в контейнер:
snr rosa2021.1_kicad2007

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

Скачиваю и распаковываю архив с готовыми бинарниками по указанной человеком ссылке:

dnf install wget
wget https://kicad-downloads.s3.cern.ch/archive/old_versions/kicad-2007-11-29-c.tgz
tar -xvf kicad-2007-11-29-c.tgz

В README.LINUX написано, что бинарники для Linux лежат в папке linux, перейдем в нее:
cd kicad/linux

В ней лежит исполняемый ELF-файл kicad. Он 32-битный, чрут у меня 64 битный для моделирования запуска без контейнеризации и виртуализации. Смотрим, каких библиотек не хватает в системе:

# ldd kicad
linux-gate.so.1 (0xf7efb000)
libXxf86vm.so.1 => not found
libgtk-x11-2.0.so.0 => not found
libgdk-x11-2.0.so.0 => not found
libatk-1.0.so.0 => not found
libgdk_pixbuf-2.0.so.0 => not found
libm.so.6 => /lib/libm.so.6 (0xf7dff000)
libpangoxft-1.0.so.0 => not found
libpangox-1.0.so.0 => not found
libgthread-2.0.so.0 => not found
libpango-1.0.so.0 => not found
libgobject-2.0.so.0 => not found
libgmodule-2.0.so.0 => not found
libdl.so.2 => /lib/libdl.so.2 (0xf7df7000)
libglib-2.0.so.0 => not found
libpangoft2-1.0.so.0 => not found
libSM.so.6 => not found
libgcc_s.so.1 => not found
libc.so.6 => /lib/libc.so.6 (0xf7be4000)
libX11.so.6 => not found
libXinerama.so.1 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0xf7bc1000)
/lib/ld-linux.so.2 (0xf7efd000)

Теперь нужно поставить все недостающие 32-битные библиотеки. Благодаря механизму provides в rpm не нужно знать названия пакетов с этими библиотека. Просто перечисляем их для пакетного менеджера:
dnf install 'libXxf86vm.so.1' 'libgtk-x11-2.0.so.0' 'libgdk-x11-2.0.so.0' 'libatk-1.0.so.0' 'libgdk_pixbuf-2.0.so.0' 'libpangoxft-1.0.so.0' 'libpangox-1.0.so.0' 'libgthread-2.0.so.0' 'libpango-1.0.so.0' 'libgobject-2.0.so.0' 'libgmodule-2.0.so.0' 'libglib-2.0.so.0' 'libpangoft2-1.0.so.0' 'libSM.so.6' 'libgcc_s.so.1' 'libX11.so.6' 'libXinerama.so.1'
Установилось 59 пакетов. Стоит отметить, что если бы у меня была 32-битная ОС с каким-нибудь DE, то все эти библиотеки уже были бы установлены.

Запускаем kicad:
./kicad

Он запустился! Вот он, красавчик:

Как видите, грамотно собранный бинарник, использующий только стабильные ABI (в т.ч. glib2.0 и GTK+2), работает и через 15 лет. Кстати, ABI GTK+3 тоже стабилен. Изменения ABI можно посмотреть здесь: https://abi-laboratory.pro/index.php?view=tracker

]]>
https://nixtux.ru/1246/feed 0
Сборка бутылок https://nixtux.ru/1241 https://nixtux.ru/1241#respond Mon, 09 May 2022 21:33:16 +0000 https://nixtux.ru/?p=1241 Вы, говорят, пакеты собираете? А бутылки не пробовали? Больше же платят.

]]>
https://nixtux.ru/1241/feed 0
Упаковка снимка BTRFS в сжатый файл-образ https://nixtux.ru/1236 https://nixtux.ru/1236#respond Sat, 30 Apr 2022 22:06:45 +0000 https://nixtux.ru/?p=1236 Читать далее Упаковка снимка BTRFS в сжатый файл-образ]]> Рассмотрим упаковку подраздела (subvolume) BTRFS в сжатый файл-образ.


Сначала делаем снимок в режиме только чтения:
btrfs subvol snapshot -r orig snapshot

Типовая схема передачи всего подраздела (подтома) BTRFS без сжатия такова:
btrfs send snapshot | ssh ip@host btrfs receive /path
ssh может стоять по любую сторону, также его может вовсе не быть. В результате подобной команды на приемнике будет подраздел в режиме только для чтения /path/snapshot. С него можно снять снимок (снапшот) уже в режиме чтения. Отправлять (send) можно только снимок в режиме только чтения (ключ -r у btrfs subvol snapshot).

Суть нашего трюка в том, что мы отправляем поток данных в программу для сжатия и выводим результат в файл. Пример:
btrfs send snapshot | zstd -16 -T0 -vv -o /path/to/file.img.zst
Или то же самое с сохранением в файл средствами шелла, а не самой zstd:
btrfs send snapshot | zstd -16 -T0 -vv > /path/to/file.img.zst
Вместо zstd можно использовать gzip, xz или любую другую программу для сжатия.

Получается, что весь снимок упаковался в файл, с которым можно сделать, что угодно, например, с помощью split(1) нарезать на куски, записать на DVD-болванки и положить их в шкаф.

Восстановление из снимка будет производиться как-то так:
zstd -d /path/to/file.img.zst | btrfs receive /path

]]>
https://nixtux.ru/1236/feed 0
Установка DragonFlyBSD на SSD через виртуальную машину https://nixtux.ru/1230 https://nixtux.ru/1230#respond Sat, 16 Apr 2022 14:48:43 +0000 https://nixtux.ru/?p=1230 Читать далее Установка DragonFlyBSD на SSD через виртуальную машину]]> В этом видео:
* подключили SSD-диск к переходнику SATA-USB, по USB к компьютеру
* пробросили USB-переходник в виртуальную машину (virt-manager на ROSA Fresh XFCE)
* загрузили LiveCD DragonFlyBSD
* затерли SSD-диск из-под DragonFlyBSD
* разметили диск (HAMMER2), разобрали кратко понятие слайсов и разделов в BSD-разметке
* установили ОС DragonFlyBSD 6.2.1
* запустили только что установленную ОС с SSD в виртуальной машине

Документация по DragonFlyBSD: https://www.dragonflybsd.org/docs/handbook/

Подписывайтесь:
https://nixtux.ru
https://vk.com/nixtux
https://t.me/nixtux

]]>
https://nixtux.ru/1230/feed 0
Несколько действий в dnf подряд и интерактивно в dnf shell https://nixtux.ru/1221 https://nixtux.ru/1221#comments Mon, 11 Apr 2022 18:45:59 +0000 https://nixtux.ru/?p=1221 Читать далее Несколько действий в dnf подряд и интерактивно в dnf shell]]> Пакетный менеджер dnf работает в целом быстро, однако немало времени занимает прогрузка метаданных, которые содержат в т.ч. список всех файлов всех пакетов. Низкая скорость их прогрузки особенно чувствуется на процессорах с частотой одного ядра меньше 2 ГГц. Иногда бывает нужно выполнить несколько действий одновременно, например, сделать запрос repoquery, обновить систему (upgrade), установить какой-то пакет, а ждать прогрузки метаданных по несколько секунд или даже несколько десятков секунд на Intel Atom N450 на каждое действие не хочется. На помощь приходит dnf shell — интерактивная командная оболочка.

Картинка ниже показывает, что мы делаем:

И так, запускаем dnf shell, ключом командной строки подключив дополнительный репозиторий:

localhost ~ # dnf --repofrompath libarchive,http://abf-downloads.rosalinux.ru/rosa2021.1/container/4020183/x86_64/main/release/ shell
Добавлен libarchive репозиторий из http://abf-downloads.rosalinux.ru/rosa2021.1/container/4020183/x86_64/main/release/
Последняя проверка окончания срока действия метаданных: 0:06:48 назад, Пн 11 апр 2022 21:27:10.
>

dnf shell запустился, метаданные прогрузились, dnf ждет нашей команды. Скомандуем ему запланировать обновление системы:

> upgrade

Команда и вместе с ней расчет транзакции на обновление были выполнены почти моментально, если процессор слабый, то разница по скорости с выполнением dnf upgrade в обычной консоли хорошо заметна на глаз.
Теперь скомандуем вывести запланированную транзакцию:

> transaction
========================================================
 Пакет    Архитектура
                 Версия   Репозиторий             Размер
========================================================
Обновление:
 bsdtar   x86_64 3.5.3-2  libarchive               56 k
 lib64archive18
          x86_64 3.5.3-2  libarchive              311 k
 lib64python3.8
          x86_64 3.8.11-8 mirror-rosa-x86_64-main 1.0 M
 python3  x86_64 3.8.11-8 mirror-rosa-x86_64-main 9.3 M

Результат транзакции
========================================================
Обновление  4 Пакета

Теперь добавим в запланированную транзакцию установку пакета bsdcpio и вновь выведем запланированную траназакцию, которая будет включать в себя и обновление, и установку пакета:

> transaction
==========================================================
 Пакет      Архитектура
                   Версия   Репозиторий             Размер
==========================================================
Установка:
 bsdcpio    x86_64 3.5.3-2  libarchive               28 k
Обновление:
 bsdtar     x86_64 3.5.3-2  libarchive               56 k
 lib64archive18
            x86_64 3.5.3-2  libarchive              311 k
 lib64python3.8
            x86_64 3.8.11-8 mirror-rosa-x86_64-main 1.0 M
 python3    x86_64 3.8.11-8 mirror-rosa-x86_64-main 9.3 M

Результат транзакции
==========================================================
Установка   1 Пакет
Обновление  4 Пакета

Командой run можно запустить выполнение транзакции.
Вместо transaction можно писать ts, вместо upgrade — up.

У меня есть желание сделать библиотеку и/или утилиту для взаимодействия с dnf shell и использовать ее в скриптах подбора и установки проприетарных драйверов NVidia, чтобы они запускали dnf не кучу раз, а заставили его один раз прогрузить метаданные и потом общались с ним по душам.

]]>
https://nixtux.ru/1221/feed 2
Из Москвы в Холковский монастрырь с пещерами https://nixtux.ru/1163 https://nixtux.ru/1163#respond Sun, 27 Mar 2022 13:46:31 +0000 https://nixtux.ru/?p=1163 Читать далее Из Москвы в Холковский монастрырь с пещерами]]> В Белгородской области есть Холковский монастырь, на территории которого есть уникальные, очень интересные меловые пещеры. Без машины добраться туда не очень просто, опишу, как сам добирался туда и обратно, и покажу фотографии. Процесс поездки туда не менее интересен, чем сами пещеры.

Маршрут: от Москвы до монастыря, без автомобиля.

Ехал так:

  1. Москва-Воронеж поездом. От Москвы до Воронежа на поезде в ночь, вечером в 23 часа выехал, в 7 утра приехал. Хорошо тем, что можно поспать и выспаться в поезде, не теряя время на дорогу.
  2. Воронеж-Старый Оскол автобусом. Свободных в автобус из Воронежа до Чернянки — ближайшего к Холковсковским пещерам крупного населенного пункта — уже не было, а заранее купить билеты я не пытался. Поэтому пришлось купить в кассе автовокзала Воронежа билет на ближайший автобус от Воронежа до Старого Оскола, стоил он около 350 руб.
  3. Старый Оскол-Чернянка автобусом. Заранее нашел на Яндекс Картах автовокзал Старого Оскола и якобы его сайт av4725.ru. Форма поиска билетов открывает сайт avokzaly.ru того же владельца. Сайт написан на PHP, судя по ошибке, которую он мне выдал при попытке купить билет (это ни хорошо, ни плохо, просто заметил), со второго раза ошибки не было. Успешно купил билет на автобус Старый Оскол — Чернянка за примерно 170 руб. Автобус из Воронежа по расписанию должен был прийти в 13:47, а этот уходил в 14:00, однако приехали из Воронежа раньше, времени на пересадку было с запасом, даже успел подзарядить телефон в специальной стойке на Старооскольском автовокзале.
  4. Чернянка-монастырь пешком. Автобус №102/103 от Чернянки до монастыря ходит лишь 2-3 раза в день (смотрите расписание по Яндекс Картам, строя маршрут), как минимум, утром в 8:20 и вечером в 17 с чем-то. Решил дойти пешком, 12 км, шел около трех часов.

Существует местное такси в Чернянке, телефон: +7 951 152-21-21. Автопарк состоит из Шкод на газе (метане). Телефон узнал случайно от местных по пути пешком, которые попросили вызвать им такси. Это такси готово приехать и в соседние населенные пункты, в т.ч. Ездочное, Холки и пр. Я на нем потом ехал от монастыря в Новый Оскол, но об этом ниже.

Для экономии заряда на телефоне строил маршрут в Яндекс Картах, потом включал режим энергосбережения (есть такая функция в LineageOS на ею прошитой Motorola G5S), авиарежим и отключал геопозицию, затем иногда включал только геопозицию, ждал определения местоположения, удостоверялся, что иду правильно, и отключал ее.

Чернянка — это довольно большой поселок городского типа, только чтоб дойти от автостанции (ж/д станция рядом с ней) до окраины нужно минут 50. По пути есть магазины и придорожные забегаловки, где можно поесть.

Вид на железнодорожную станцию Чернянка:
Вид на железнодорожную станцию Чернянка
Что-то у жд станции Чернянка

Обращает на себя внимание очень хорошее состояние сел и дорог в Белгородской области.



Даже вот такие декоративные сооружения есть:

По пути встретился танк из дерева:

Вид на монастырь издалека:

Пришел туда поздно, уже после 18-ти часов. На сайте монастыря (holkovskiy-monastyre.ru) написано, что якобы существует гостиница при монастыре, но на самом деле её там нет и вроде бы ее строят. Ночевать там негде. В Чернянке и в центральной гостинице, и у некой Людмилы Викторовны +7 910 366-93-90, которая сдает что-то в районе ж/д станции 652-ой км на окраине Чернянки, к которой отправили из гостиницы, свободных мест не было. Пришлось судорожно соображать, что делать, предположил, что ж/д вокзал в Новом Осколе работает круглосуточно, телефон почти сел, выяснять было некогда.

Позвонил в такси из Чернянки (+7 951 152-21-21), спросил, можно ли доехать от монастыря до ж/д вокзала Нового Оскола, сказали типа без базара, 600 рублей, приехали за 15 минут (быстрее доехать от Чернянки до монастыря чисто физически невозможно). По стоимости — почти как в соседний район Москвы съездить, даже дешевле, чем это иногда стоит.
Оказалось, что в Новом Осколе нет железнодорожного вокзала, там просто станция, которая была уже закрыта (было где-то 20:30).

Нашел на карте единственную в городе гостиницу «Белогорье». Позвонил, оказалось, что свободные места есть, объяснили, как до них дойти, еле нашел вход.

Если в номере живет 2 случайных человека, то стоит 590 рублей в сутки, если один, то 1210 руб. Оплатил 1210 руб., оплата только наличкой, но, если что, рядом есть отделения и, наверное, банкоматы Сбербанка и Московского индустриального банка. Наличка у меня с собой была на всякий случай, еще в Москве в банкомате Промсвязьбанка снял с карты Юмани банкнотами по 50 и 500 руб. Отзывы о гостинице на Яндекс Картах плохие, но мне понравилось. Да, в коридоре местами падает краска со стен, но в номере такой проблемы нет, в номере электроводонагреватель (горячая вода без проблем), раковина, унитаз, душевая, жидкое мыло, туалетная бумага, постельное белье, одеяло, большое и маленькое полотенца, батарея (на которой можно просушить одежду и обувь, но поставить на батарею что-либо не получится, острая вершина), выключенный холодильник (с грязью вокруг обода), маленький телевизор (включать не пробовал), розетки (свободны 2 штуки по 2 разъема, плюс, наверное, есть еще для телевизора и холодильника), электрочайник, почти без накипи, тарелка и стеклянный стакан, окно с занавесками, стол, мягкий стул, ковер на полу. В номере тепло. За такие деньги вообще прекрасно. Гостиница государственная (МУП — муниципальное унитарное предприятие).

Рано утром, проснувшись в 5 утра, покинул эту хорошую гостиницу в Новом Осколе и пешком за 10 минут дошел до местной ж/д станции, в 6 утра с нее уходила электричка, на которой можно доехать до Чернянки. В этом время здание станции еще закрыто, посадка на поезд просто с перрона. На станции садились либо только в один, либо еще кто-то был, не помню, но народу мало, электричка была почти пустой. Автоматика объявила, что поезд прибывает на третий путь, но какой там путь третий, непонятно. Прибыл на путь по середине, который третий с обоих сторон (при объявлении в Чернянке говорят, что путь третий со стороны станции). Просто сел в поезд, подошел кондуктор, банковской картой заплатил 60 рублей за билет.

Утром (26 марта 2022 года) было холодно, идти пешком не хотелось, в помещении автостанции дождался автобус №102/103 в 8:20, заранее купив билет за, кажется, 40 руб. в кассе этой автостанции, работающей с 5 до 20 часов. На автостанции в Чернянке телефон зарядить негде, разве что просить работников. Автобус довез прям до монастыря, пройти от остановки нужно было минут 5.

Вот карта:

1 — автобусная остановка, 3 — надземная церковь, где проходят службы, 4 — надземная церковь на горе (в ней службы проходят очень редко), 5 — вход в пещеры, 2 — туалет, церковная лавка, сувенирная лавка.

Почти каждую субботу службы проходят в подземном храме (в пещере), начало в 9 утра, но в этот раз было в надземном.

В сувенирной лавке можно оплатить экскурсию по пещерам, стоит 200 рублей, работает с 10 утра, я туда пришел ближе к 11, на 11:15 была назначена экскурсия. Оплата только наличными (говорят, что мобильная связь там плохо работает, вполне верю — там низина), крупные купюры пришлось разменять, купив свечи в соседней церковной лавке.

Пересказывать историю пещер не вижу смысла, она описана в интернете, покажу фотографии (нажимайте на них для увеличения).


Подземная церковь с выточенными на стенах иконами и изображениями:


Видео прохода по пещерному «корридору» (не знаю, как правильно назвать ход между пещерами):

В пещерах держится температура около +10°C круглогодично, воздух приятный, утверждают, что целебный, т.к. содержит много веществ. Чтоб им подышать, как я понял, нужно попасть либо на экскурсию (идет около 20 минут), либо на службу в большинство суббот.

Немного надземных видов:





С утра был слышен гул самолетов, скорее всего, военных.

Интересный памятник на местном кладбище:


Спокойно спи,
Здесь ничего не происходит,
По-прежнему за ночью день приходит.
Пусть оберет покой душа твоя,
Мы помним о тебе.
Семья твоя

Обратно в Москву ехал проще: пешком дошел до Чернянки (можно было бы подождать автобус, прибыть в Чернянку получилось бы чуть раньше, но не хотелось ждать его 2 часа, а погода была хорошей), на электричке в 16:06 за час доехал до Старого Оскола (та же самая электричка, на которой ехал утром, посадка тоже прямо с перрона, оплата кондуктору в поезде), далее на поезде Белгород-Москва доехал до Москвы, билеты на поезд покупал заранее, снова спал в поезде, что очень удобно.

В Старом Осколе полноценный железнодорожный вокзал, в зале ожидания можно зарядить телефон, там, как и в Воронеже, стоят лавки, между которыми розетки с двумя USB-портами и вилкой 220 вольт. В розетку подключал ноутбук с Росой и немного работал. На вокзале пусто, поезда бывают редко, поесть негде. Как понял исходя из надписи на привокзальной площади, эта ветка железной дороги была построена в 1943 году для военных целей.

На карте ниже маршрут поезда, на котором я ехал.

Как видите, есть иной маршрут из Москвы в Белгород — через Орёл и Курск, на нем больше поездов, а на этом вокзал в Старом Осколе безмятежно пустует, дожидаясь редкого гостя.

Хотелось есть, на вокзале заведений не было, вроде были какие-то непонятные заведения недалеко от вокзала, но было 3 с половиной часа свободного времени, на такси доехал до какого-то торгового центра, где можно было поесть. Кстати, в Жар-Пицце «большой» картофель фри больше, чем в Бургер-Кинге.

Какая-то паранойя в отношении фальшивых купюр: в торговом центре по громкой связи объявляли, что полиция предупреждает, что появилось много качественных подделок, а в кафе даже купюры по 100 рублей проверяли на аппарате для определения фальшивых купюр. Наверное, диверсанты с Украины активно работают.

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

Решил почитать про эту икону, вот, что выдал Google:

А вот, что выдал Яндекс:

Выдача Яндекса оказалась намного лучше и ответила на все вопросы, когда как Google в пределах первой страницы результатов поиска (дальше первой не смотрел) не выдал вообще ничего, что я хотел. Редко можно (было?) встретить столь большую разницу в качестве поисков Гугла и Яндекса. Сейчас просто стоит вопрос о замене поисковика по умолчанию в пакете браузера Chromium в Росе, а двое моих коллег утверждали, что стали замечать большую разницу в выдаче Google и Yandex, хотя раньше не замечали ее. Интересно.

Ну, и потом в усилившийся дождь на такси доехал до вокзала. В нижнем зале ожидания не слышно объявлений поездов, заметил просто толпу людей, куда-то пошедших из верхнего зала.

Если есть вопросы, пишите в комментарии.

]]>
https://nixtux.ru/1163/feed 0
Снятие дампов трафика в Linux со сжатием и ротацией https://nixtux.ru/1159 https://nixtux.ru/1159#respond Sun, 06 Mar 2022 11:50:08 +0000 https://nixtux.ru/?p=1159 Читать далее Снятие дампов трафика в Linux со сжатием и ротацией]]> Задача: для отладки странных проблем в течение нескольких часов снимать дампы всего трафика на сервере.
Однако трафика много, а места на диске не очень много.

Утилита для снятия дампов ­— tcpdump — умеет автоматически ротировать и сжимать дампы. Для сжатия она вызывает программу или скрипт, указанный в ключе -z, с путем к файлу первым аргументом. Пример команды:
tcpdump -G 3600 -w 'tcpdump_%Y-%m-%d_%H:%M:%S.pcap' -z xz
Будут писаться файлы-дампа с именами вида tcpdump_2022-03-06_14:26:50.pcap, затем раз в 3600 секунд (раз в час) будет начинаться запись в новый файл и будет вызываться сжатие:
xz tcpdump_2022-03-06_14:26:50.pcap
Утилита xz(1) по умолчанию удаляет исходный файл после сжатия, tcpdump_2022-03-06_14:26:50.pcap превратится в tcpdump_2022-03-06_14:26:50.pcap.xz.

Однако я хочу сжимать с помощью zstd (потому что могу:)), а утилита zstd(1) исходный файл по умолчанию не удаляет, чтобы удаляли, нужно добавить ключ --rm. Сделаем скрипт-прослойку `zstd.sh:

#!/bin/sh
zstd --rm -10 "$1"

Указали уровень сжатия 10 и включили удаление исходного файла после сжатия. Имя сжатого файла будет таким: tcpdump_2022-03-06_14:26:50.pcap.zst.
Делаем скрипт исполняемым:
chmod +x zstd.sh
Теперь запустим tcpdump с указанием либо полного, либо относительного пути к скрипту:
tcpdump -G 3600 -w 'tcpdump_%Y-%m-%d_%H:%M:%S.pcap' -z ./zstd.sh
tcpdump -G 3600 -w 'tcpdump_%Y-%m-%d_%H:%M:%S.pcap' -z /root/zstd.sh
Обратите внимание, что если написать «zstd.sh» вместо «./zstd.sh», то будет выполнен поиск zstd.sh в $PATH, а его там нет.

Распаковать сжатый дамп можно так:
zstd -d tcpdump_2022-03-06_14:26:50.pcap.zst
xz -d tcpdump_2022-03-06_14:26:50.pcap.zst
Файл-дамп можно просмотреть в, например, Wireshark.

Если бы я дампил трафик в промышленных масштабах, то попробовал бы создать словарь для zstd (ищите по слову train в man zstd).

]]>
https://nixtux.ru/1159/feed 0