ServerAdmin.ru
28.9K subscribers
304 photos
35 videos
13 files
2.63K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
​​▶️ Я уже рассказывал про классный мониторинг Uptime Kuma, который можно развернуть у себя. Он умеет мониторить сайты и всё, что с ними связано, а также делать простые icmp проверки, проверки tcp портов и Docker контейнеров.

На канале realmanual, автора которого вы часто можете видеть в комментариях к моим заметкам, вышло подробное видео на тему этого мониторинга. Там он рассказывает не только про установку и настройку, которые просты, но и углубляется в автоматизацию. С помощью API он настроил добавление и удаление мониторов.

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

https://www.youtube.com/watch?v=7gN9_Ph-9Z4

#мониторинг #видео
​​▶️ В интернете масса статей и видео по настройке одного из самых популярных веб серверов Nginx. Разработчики в какой-то момент озаботились тем, чтобы самим выпустить канонические руководства, по которым стоит настраивать их веб сервер. Эти руководства они поддерживают и по мере необходимости обновляют.

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

https://youtube.com/playlist?list=PLGz_X9w9raXf748bzuGOV6XJv7q3wLxhZ

🎓 Список тем из него:

How to define and publish APIs using NGINX Controller
How to Set Quotas with NGINX Plus
How to Set Up SSL with NGINX
How to Serve Static Content
How to Install NGINX on Debian and Ubuntu
How to create an API Dev Portal using NGINX Controller
Key Files, Commands, and Directories with NGINX
How to Install NGINX on CentOS and Red Hat
How to Install NGINX Amplify on Linux
NGINX Unit: From Zero to Lift Off
Dynamic SSL Key Management with NGINX
Getting Started with NGINX Service Mesh
NGINX as an API Gateway
How to Configure NGINX Plus as a WAF Using NGINX App Protect
NGINX App Protect Denial of Service (DoS) Overview
Configure NGINX as a Reverse Proxy
How to Streamline API Operations with API Connectivity Manager

Все видео на английском. Если не знаете его, можно спокойно всё понять через переводчик в режиме реального времени от Яндекса, или с английскими субтитрами. Часть тем актуальна для только версии Plus.

#nginx #видео #обучение
​​Сколько вы знаете способов увидеть, под каким пользователем работаете в ОС на базе Linux? На практике эта информация нужна не так часто, если ты работаешь в консоли. Обычно и так знаешь, под каким пользователем подключаешься. Также его видно в строке ввода терминала в bash. Исключения бывают, когда приходится работать под отдельным пользователем для настройки какого-то софта. Например, postgresql. Удобнее зайти под пользователем postgres и работать в его окружении.

Традиционные способы через утилиты: whoami, id , logname, w и т. д. Можно посмотреть через переменные окружения: echo $LOGNAME и echo $USER. Все эти способы вроде бы похожи друг на друга, но на самом деле есть некоторые принципиальные отличия.

К примеру, если запустить whoami и id под sudo, вы увидите пользователя root, а в logname — пользователя, под которым вы запускаете sudo. Это может быть полезно, если выполняете какой-то скрипт под sudo, и вам нужно сделать проверку пользователя, который его запускает. Например, разрешить запуск скрипта только если он запущен конкретным пользователем (script_allow_user).

if [[ "$(logname)" = 'script_allow_user' ]]
then
echo "Start script execution..."
...............................................
else
echo "This user is not allowed to run the script"
fi

Отдельно стоит упомянуть утилиту из состава systemd — loginctl. С её помощью можно узнать массу всего не только об активном пользователе, но и о сессиях, и даже управлять ими.
# loginctl user-status

#bash #script
​​Небольшой полезный сервис, с помощью которого вы можете очень быстро настроить доступ к локальному сервису через интернет. Речь пойдёт про pinggy.io. Покажу сразу на конкретном примере, что это такое.

Допустим, вы запускаете http сервер на локальном сервере, чтобы получить доступ к файлам в директории:

# cd /var/log
# python3 -m http.server

Теперь по адресу http://172.25.228.79:8000/ вы сможете увидеть содержимое директории /var/log. Если вы хотите получить доступ к этой директории через интернет, то воспользуйтесь указанным сервисом:

# ssh -p 443 -R0:localhost:8000 -L4300:localhost:4300 a.pinggy.io

Эта команда выполнит переадресацию локального порта 8000 по ssh на сервер pinggy.io, который выдаст вам временное доменное имя и настроит доступ к вашему сервису через интернет. Ссылка будет вида https://ranfgxbznvwfo.a.pinggy.io. Пройдя по ней, вы попадёте на свой локальный веб сервер. Статистику по действиям пользователей увидите прямо в консоли сервера.

Всё устроено довольно просто. То же самое вы сможете сделать и со своим сервером, у которого настроен ssh и есть публичный IP адрес. Но с помощью pinggy.io это сделать намного быстрее, так как тут автоматом создаётся и настраивается поддомен.

Сервис платный, но есть бесплатный тарифный план, который доступен без регистрации и каких-то дополнительных действий. Достаточно выполнить команду в консоли с ssh соединением. Основное ограничение бесплатного тарифа — через 60 минут бездействия туннель отключается.

В заметке использовался веб сервер python и переадресация портов ssh. Веб сервер был взят для примера. Настроить доступ через интернет можно к любому локальному сервису.

#сервис #бесплатно
​​Давно не было заметок о Zabbix, хотя я с ним регулярно работаю. В основном привычные настройки делал. Из последнего — настраивал мониторинг сайтов, docker контейнеров, бэкапов. Стандартный шаблон для Docker очень нравится. Полезные метрики, оповещения, всё на автообнаружении сделано. Ручной работы нет. Статьи в целом актуальны по смыслу и идеям реализации, но где-то в деталях и картинках устарели. Планирую после релиза 7.0 весь раздел по Zabbix на сайте актуализировать.

От команды Zabbix последнее время не было каких-то значимых новостей, заметок в блоге или на ютуб канале. Я за всем этим слежу. Из более ли менее интересных событий отмечу следующие:

Появился шаблон оповещений для интеграции с новой технологией Event-Driven Ansible.

На днях в блоге вышла очень хорошая статья, описывающая принципы создания новых метрик с использованием различных преобразований. Для примера там взяли типовой шаблон для Nginx и показали, как к базовым метрикам добавить новые. Например, показать динамику изменения числа запросов к веб серверу и вывести метрику на дашборд. Таких примеров там много, статья большая. Рекоvендую, если осваиваете Zabbix.

Ещё одна интересная статья про добавление в Zabbix метеокарты. К сожалению, статья слишком поверхностная и у меня быстро не получилось повторить настройку. Более детально разбираться не было времени. Хотел для личного использования настроить.

В Zabbix 6.4 появилась возможность выгружать события из Zabbix в режиме реального времени в другие системы. В статье описан пример реализации этой функциональности.

Цикл видео про настройку мониторинга Kubernetes с помощью Zabbix (1, 2, 3 части)

25 мая будет вебинар на русском языке — Обзор системы мониторинга Zabbix.

💡Релиз Zabbix 7.0 LTS обещают к концу этого года. Думаю, перенесут на начало 2024, как это обычно бывает. Там много полезного обещают завести. Например, сбор метрик из сторонних TSDB, наконец-то обновление раздела Inventory. Я думал, они его в конце концов уберут. Обновление мониторинга сайтов обещают, но пока даже не начали разработку. Скорее всего отложат.

#zabbix
​​Пользуюсь утилитой screen почти столько же лет, сколько использую Linux. В основном для того, чтобы не завершалась ssh сессия после разрыва соединения. И только на днях один подписчик написал, что её можно использовать для доступа другого пользователя к своей сессии или наоборот. Не знал об это и никогда не видел. Делал когда-то заметки про бесплатные сервисы, которые позволяют шарить консоль, по типу того, как это происходит в teamviewer или anydesk, только для консоли.

Если подключились под одной учётной записью к серверу, то любому из подключившихся достаточно создать сессию screen:
# screen -d -m -S shared
И обоим подключиться к ней:
# screen -x shared
Теперь у обоих одна консоль на двоих. Все команды отображаются у обоих подключившихся.

Для разных пользователей действия другие. Для начала необходимо установить suid бит, чтобы screen всегда запускался с привилегиями суперпользователя:
# chmod u+s $(which screen)
# chmod 755 /var/run/screen
# rm -fr /var/run/screen/*
Теперь запускаем, к примеру, сессию у root и открываем доступ для пользователя zerox:
# screen -d -m -S shared
# screen -r shared
Зайдя в сессию от root, разрешаем подключиться пользователю zerox. Для этого в терминале нажимаем комбинацию Ctrl-a и вводим команду:
:multiuser on
Потом снова Ctrl-a и команду:
Ctrl-a :acladd zerox
Подключаемся пользователем zerox и оказываемся в одной сессии с root:
# screen -x root/shared

Постороннему пользователю можно выдать как полные права, так и только на чтение. По умолчанию даются полные. Чтобы дать только на чтение, нужно добавить команду в сессии через Ctrl-a:
:writelock on

Немного погуглил эту тему и нашёл статью о том, как человек подглядывал за тех. поддержкой одного продукта, которая не хотела делиться инструкцией по настройке. В итоге он скриптом со screen подменил оболочку этому сотруднику и следил за ним через общую сессию screen.

#linux #screen
​​Мне подсказали интересную программу для управления сетевыми устройствами — Mupsbox. Вышла она в 2019 году и изначально поддерживала только микротики. Сейчас поддерживает помимо него остальных популярных вендоров (Cisco, HP, Dlink, Huawei и т.д.). Привлекла она меня в первую очередь тем, что бесплатная версия имеет хорошую функциональность, которая позволяет полноценно использовать программу.

🟢 Основные возможности Mupsbox:

Управление сетевыми устройствами.
Бэкап, восстановление, сравнение архивов и конфигураций.
Подсчёт трафика.
Syslog сервер для сбора логов.
Функциональность HotSpot для доступа в сеть.

Mupsbox представляет из себя приложение под Windows с типовым установщиком. База локальная, хранится в firebird. Выглядит немного непривычно, потому что какого-то стандарта для такого рода приложений нет, но я довольно быстро установил и разобрался, немного подсмотрев инструкцию.

🔴 Ограничения бесплатной версии:

Добавление устройств и управление без ограничений.
Бэкап только 10 устройств.
Подсчёт трафика только для 3-х устройств, хранение статистики — неделя.
Syslog сервер только для 1 устройства, хранение лога — неделя.
Hotspot для одного устройства и только 5 аутентификаций в сутки.

Программа состоит из основного приложения и набора служб Windows, которые настраиваются и запускаются по необходимости. Отдельная служба ftp, sftp, tftp для сбора логов, отдельная для syslog сервера, отдельная для web интерфейса и т.д. Программа умеет отправлять оповещения по email или telegram.

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

Сначала подумал, что проект заброшен. Сайт выглядит каким-то недоделанным. Но судя по новостям, не так давно вышла очередная новая версия с множеством изменений и доработок.

Сайт / Обзор / Telegram группа

#network #mikrotik #backup
Думаю, многие из вас помнят приятную халяву от Oracle, когда можно было получить несколько бесплатных виртуалок навсегда. У меня была парочка, которая успешно работала длительное время, пока не случился февраль 2022. После этого все учётные записи пользователей из РФ были заблокированы. Я особо сильно не расстроился, так как очевидно, что подобную халяву можно использовать только для каких-то тестов. У меня там личные VPN жили.

Недавно увидел видео на ютубе на одном из каналов, которые регулярно смотрю — БЕСПЛАТНЫЕ СЕРВЕРА ORACLE. ТЕПЕРЬ БЕЗ КАРТЫ!. Информация заинтересовала, решил проверить. Сразу скажу итог — то, что описано, больше не работает в том виде, как там показано. Пишу эту заметку для того, чтобы вы не тратили время и лишний раз не расстраивались.

На момент записи видео тема была рабочая. Видно было по комментариям, что у некоторых всё получилось. Там смысл в том, что после записи на тематический вебинар можно было получить приглашение на регистрацию аккаунта с бесплатными ресурсами без подтверждения платежа. С карточками РФ подтвердить платёж невозможно, так что это был выход. Главное не спалиться, что ты из РФ.

У меня для всякой санкционки есть отдельная виртуалка с чистым браузером и автоматическим подключением после загрузки к VPN серверу в США. С её помощью я без проблем и лишних заморочек обхожу различные ограничения. Так что попробовать эту методу у меня не составило труда. Всё сделал, как описано, но при регистрации всё равно попросили платёжную карту предоставить. Судя по свежим отзывам в комментариях, это у всех так теперь.

Написал заметку, чтобы вы не тратили время на этот способ, если где-то его увидите. Ну и если вдруг у кого-то всё же получилось зарегистрировать учётку в Oracle Cloud и получить виртуальные сервера бесплатно, то расскажите, как вы это сделали.
​​Веб сервер Nginx уже давно умеет писать логи в json формате. В настройке по умолчанию используются текстовые логи. Да и почти везде, где мне приходится видеть логи веб сервера, они в текстовом формате. Если ещё не используете json формат для логов, то предлагаю вам пересмотреть свои привычки и использовать. Это удобно и для ручного просмотра логов, и для парсинга в тех или иных системах.

Настроить json логи очень просто. Вот пример для привычного формата combined, только в json. Добавляем в основной конфиг в раздел http { }.

log_format json_combined escape=json
 '{'
  '"time_local":"$time_local",'
  '"remote_addr":"$remote_addr",'
  '"remote_user":"$remote_user",'
  '"request":"$request",'
  '"status": "$status",'
  '"body_bytes_sent":"$body_bytes_sent",'
  '"request_time":"$request_time",'
  '"http_referrer":"$http_referer",'
  '"http_user_agent":"$http_user_agent"'
 '}';

И дальше либо в общую настройку, либо в настройку логов виртуального хоста добавляем:

access_log /var/log/nginx/access.log json_combined;

Теперь, если отправить логи в ELK или Zabbix, их обработка будет упрощена, так как для json формата там есть готовые обработчики. А в консоли логи удобно смотреть с помощью jq. Смотрим весь лог:

# jq '.' access.log

Смотрим только список урлов, к которым были обращения:

# jq '.request' access.log

Выводим полные записи логов, где только 404 коды ответов:

# jq '. | select(.status=="404")' access.log

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

# jq '. | select(.status=="404") | .request' access.log

Добавим сюда же информацию о времени запроса:

# jq '. | select(.status=="404") | .time_local,.request' access.log

Думаю, идею вы поняли. Json смотреть проще, быстрее и гибче, нежели грепать или обрабатывать утилитами типа sed, awk и т.д. Надо только немного изучить синтаксис jq. Если хотите получить значения без кавычек " ", то добавьте к jq ключ -r:

# jq -r '.request' access.log

Все переменные, которые вы можете использовать в логе, перечислены в документации к модулю ngx_http_core_module. Я обычно добавляю некоторые переменные к стандартным, а именно:

$request_length, $upstream_addr,
$upstream_status,
$upstream_response_time,
$upstream_connect_time,
$upstream_header_time,
$server_name,
$ssl_protocol,
$ssl_cipher.

#nginx #jq
​​Ранее я пробовал и рассказывал, как настроить VDI (Virtual Desktop Infrastructure) на базе Proxmox. Для этого нужно немного поднастроить гипервизор и использовать PVE-VDIClient для подключения к рабочим местам. Читайте, кому интересно, отдельную заметку по этому поводу.

С тех времён у меня в закладках осталась система Ravada VDI, которую я хотел попробовать, но так руки и не дошли. Нужен железный сервер, но он так и не подвернулся под руку. Поэтому рассказываю как есть по информации с их сайта.

Ravada — open source проект для организации VDI на базе гипервизора KVM. Разворачивается на типовых дистрибутивах: Debian, Ubuntu или Fedora. Для установки есть собранные deb и rpm пакеты, так что установка очень простая — скачиваем и устанавливаем пакет. Пример установки на Debian. Для хранения информации необходим MariaDB сервер. В комплекте с Ravada идёт веб сервер. Всё управление системой выполняется через браузер.

Судя по документации, настройка простая и быстрая. С помощью Ravada можно организовать рабочие места как на Linux, так и Windows. Для подключения к виртуальным машинам можно использовать virt-viewer. Подключение работает по протоколу SPICE. Есть интеграция с LDAP сервером. Пользователей можно брать оттуда.

Проект мне показался интересным и полезным. Бесплатных продуктов по данной тематике почти нет. Это удел крупных корпоративных систем за много денег. А для какого-нибудь учебного класса система, подобная Ravada, будет в самый раз. К тому же она активно развивается. Регулярно выходят новые релизы.

Сайт / Исходники
Тема тюнинга сетевого стека очень узкая и сложная. В сети в основном все перепечатывают статьи друг у друга. Когда изучал тему, сразу это бросилось в глаза. За основу имеет смысл взять вот эти материалы, которые мне понравились больше всего:

Описание некоторых sysctl переменных ядра Linux
Настройка ядра Linux для тяжелых проектов и защиты от DDOS
Настройка Linux для HL и защиты от DDoS
Когда TCP-сокеты отказываются умирать

Многое устарело, либо не соответствует текущим настройкам по умолчанию. Какие-то механизмы и так в современных ядрах включены. Ниже моя компиляция того, что показалось актуальным на текущий момент. В основном это то, что касается таймаутов и потребления памяти. Её сейчас много и она дешёвая.

📌 Увеличиваем значение tcp_max_orphans, которое отвечает за максимальное число осиротевших (не связанных ни с одним процессом) сокетов TCP. Каждый такой сокет съедает примерно 64 Кб памяти. Так что параметр нужно сопоставлять с доступной памятью на сервере.
net.ipv4.tcp_max_orphans = 65536

📌 Уменьшаем tcp_fin_timeout (по умолчанию 60). Параметр отвечает за максимальное время пребывания сокета в состоянии FIN-WAIT-2. Это состояние используется в тех случаях, когда другая сторона не закрыла соединение. Каждый сокет занимает порядка 1.5 Кб памяти, что может подъедать её, когда их очень много.
net.ipv4.tcp_fin_timeout = 10

📌 Параметры, отвечающие за проверку TCP соединений в статусе SO_KEEPALIVE: keepalive_time определяет время, через которое начнутся проверки после последней активности соединения, keepalive_intvl определяет интервал проверки, а keepalive_probes количество этих проверок.
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5

📌 Стоит обратить внимание на параметры net.ipv4.tcp_mem, net.ipv4.tcp_rmem, net.ipv4.tcp_wmem. Они очень сильно зависят от памяти на сервере и в момент загрузки системы вычисляются автоматически. В общем случае их трогать не обязательно, но иногда можно и вручную подредактировать в сторону увеличения значений.

📌 Отключаем (по умолчанию включено) передачу syncookies вызывающему хосту в случае переполнения очереди SYN-пакетов для заданного сокета.
net.ipv4.tcp_syncookies = 0

📌 Отдельное внимание алгоритму, который используется для контроля перегрузки в TCP сетях. Их много (cubic, htcp, bic, westwood и т.д.) и однозначно сказать, что лучше использовать, трудно. В разных схемах нагрузки алгоритмы показывают разные результаты. Управляет этим параметр ядра tcp_congestion_control:
net.ipv4.tcp_congestion_control = cubic

📌 При большом количестве исходящих соединений сервера может не хватать локальных портов для них. По умолчанию используется диапазон 32768 - 60999. Его можно расширить:
net.ipv4.ip_local_port_range = 10240 65535

📌 Включаем защиту от TIME_WAIT атак. По умолчанию она отключена.
net.ipv4.tcp_rfc1337 = 1

📌 Максимальное число открытых сокетов, ждущих соединения, по умолчанию имеет довольно низкое значение. В ядрах до 5.3 это 128, в 5.4 увеличили до 4096. На нагруженных и мощных серверах имеет смысл увеличить:
net.core.somaxconn = 16384

📌 На мощных и нагруженных серверах можно увеличить стандартные значения размера буфера приёма и передачи для всех соединений. Параметр измеряется в байтах. По умолчанию это 212992 или 208 КБ.
net.core.rmem_default = 851968
net.core.wmem_default = 851968
net.core.rmem_max = 12582912
net.core.wmem_max = 12582912

📌 Отключаем локальные перенаправления ICMP пакетов. Делать это стоит только в том случае, если ваш сервер не выполняет роль маршрутизатора, то есть у вас обычный веб сервер.
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
Дополнительно можно вообще отключить ответ на ICMP запросы на уровне ядра. Я сам так не делаю обычно, но видел компанию, где вообще все сервера не отвечали на пинги.
net.ipv4.icmp_echo_ignore_all = 1

#linux #sysctl #network
▶️ Если кто-то ещё не видел, предлагаю насладиться просмотром великолепного саркастического ролика на тему работы технической поддержки по телефону: The Expert: IT Support.

 Оригинал:
https://www.youtube.com/watch?v=ZOzzRlc_qho
 Дубляж:
https://www.youtube.com/watch?v=F0T0Y91npYg
Мне лично оригинал намного больше понравился.

У меня была очень похожая по своему абсурду и безвыходности история. И тоже с тех. поддержкой по телефону. Зимой ездил проверять загородный дом, где у меня постоянно включен электрический котёл для отопления, который управляется через GSM модуль.

Особенность этого котла и модуля такова, что когда настроено управление по GSM, вручную ничего изменить нельзя. Надо отключать модуль и менять настройки. Днём я экспериментировал с режимами, а вечером собрался уезжать в квартиру. Это была пятница. И как назло, связь с котлом пропала, и я не могу поменять режим на тот, что мне нужен. А уехать, не поменяв режим, тоже не могу, потому что там выставлена комфортная температура для всего дома, а уезжая, я оставляю 12 градусов. Топить дом на полную мощность, когда там никого нет, не хотелось.

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

Я уже стою готовый выехать и понимаю, что не знаю, что делать. Подождал минут 10, связи нет. Облазил весь сайт продавца GSM модуля, телефона поддержки нигде нет. Его походу просто не существует. Пишу через тикет систему в тех. поддержку. Думаю, ну раз номера нет, значит тех. поддержка отвечает оперативно и решает проблему. Прождал час, никто не ответил на почту.

Звоню в тех. поддержку мобильного оператора. Там огроменное голосовое меню и я не понимаю, куда мне нужно обратиться по своему вопросу. Несколько раз прослушал голосового помощника и не понял, во-первых, как решить вопрос через голосовое меню, во-вторых, как попасть на живого оператора. Тут уже конкретно раздражённый был. Начал искать в интернете информацию, как попасть к живому оператору. В итоге нашёл номер, позвонил туда и попал к человеку. Слава богу, пока это ещё возможно!

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

В общем, я смирился и уезжать не стал. Остался ночевать. Побоялся уехать, а то потом придётся возвращаться, чтобы перезагружать GSM модуль. Не было уверенности, что потом всё заработает само. В итоге ночью связь появилась, управление заработало. Утром я всё настроил и уехал домой.

И только в понедельник днём мне тех. поддержка написала, что были проблемы с биллингом у сотового оператора, поэтому временно связь не работала, а теперь всё ок.

Такие вот современные технологии. Я лично себе не стал никаких умных домов делать. Всё провёл проводами и для электрики, и для слаботочки. Хотя мне предлагал электрик сделать выключатели на радиоуправлении, и провода не пришлось бы тащить к каждому. В бревенчатом доме это довольно хлопотно. Отказался. Как представлю, аккумуляторы там менять, или какие-нибудь помехи начнутся. Все камеры, все рабочие места, везде кабели протянул. Ну его нафиг.

Я не сторонник автоматизации в доме. Хотя казалось бы, со всем этим работаю и разбираюсь. Купить приборы, сервачок поставить, WiFi и т.д. Вот из-за того, что разбираюсь, и не хочу связываться. Пусть хоть дома всё будет чётко и по старинке — пришёл, шлёпнул по выключателю и всё работает. Система реального времени. Котёл тоже переделаю, когда перееду постоянно жить, а не наездами.

#юмор
▶️ Rebrain наконец-то стали выкладывать некоторые свои вебинары в публичный доступ. Теперь можно их пропускать и откладывать на потом 😁 И зашли сразу с козыря. Выложили вебинар:

Networks by Rebrain: Траблшутинг сетевых сервисов. Инструменты и утилиты для диагностики
https://www.youtube.com/watch?v=5Ppg5PHQFH4

Я смотрел два вебинара с этим ведущим. Очень понравилось. Ольга чётко всё рассказывает, в теме разбирается отлично. Видно, что к вебинарам готовится: план мероприятия, теория, подготовленная лаба, практика. На одном из вебинаров, Сегментация сети без разделения на подсети (интересная и новая для меня тема), не удержался и выразил своё восхищение 👍

В общем, рекомендую. Ольга Яновская, Василий Озеров, Андрей Буранов. Их стараюсь не пропускать, так как всегда гарантированно интересно и полезно.

#видео #обучение #network
На днях поставил себе на ноут программу по управлению оборотами вентилятора TPFanControl (https://thinkwiki.de/TPFanControl). Она вроде бы специально для серии Thinkpad написана, но может и с другими работает. Но это не суть. Таких программ много.

Я раньше пользовался подобной программой, потом как-то подзабыл и при переезде на другой ноут не поставил. Сейчас вспомнил и исправил. Программа нужна вот для чего. Я настроил включение вентилятора только если температура процессора становится выше 70-ти градусов. Это случается не так часто. В итоге почти всё время ноут полностью бесшумен. Очень удобно.

Стандартные алгоритмы управления вентилятором другие. Обычно хоть немного, но он шевелится и прибавляет обороты значительно раньше. Хотя температуры до 70-80 градусов вполне безопасны для процессора. Перегреться всё равно не успеет, он тротлить начинает сразу при перегреве.

У TPFanControl немного замороченный текстовый конфиг. Все настройки только в нём. После установки не понятно, с чего начать настройку. Если кому-то нужен, напишите в комментах, я свой выложу.

Обзор и настройка программы:
https://www.youtube.com/watch?v=5IPn0Jt7oA8

#железо
🎓 Недавно вспомнил про образовательную платформу stepik.org, где я когда-то давно проходил несколько курсов. Зашёл посмотреть, что там есть интересного и полезного. С удивлением заметил довольно много бесплатных и на вид неплохих курсов с тысячами отзывов и оценок.

Ещё обратил внимание, что некоторые курсы после прохождения предлагают получить именной сертификат. Мне кажется, может быть полезным получить 1-2 таких сертификата и добавить их к своему резюме. При условии, что у вас там будет 2-3 сертификата с полноценного платного обучения с сертификацией в конце. Разбавить их тематическими бесплатными для увеличения значимости в глазах рекрутёра не думаю, что будет лишним. Разумеется всё это актуально для тех, у кого небольшой опыт.

📌 Несколько бесплатных курсов по Linux:

Введение в Linux — самый большой и масштабный бесплатный курс по Linux. В целом, отзывы положительные, но в последних видны упоминания, что курс уже устарел. На курсе даётся база, которая в Linux меняется очень слабо, так что скорее всего устаревание некритичное. К курсу полагается сертификат.

Основы Linux — более свежий и короткий курс по сравнению с предыдущим. Но объём всё равно внушительный. Не на один день.

Linux CLI — наиболее свежий курс с основами командной строки. Объём небольшой, на один вечер.

Архитектура параллельных вычислительных систем — название неговорящие, хотя сам курс про Linux. В нём учат настраивать линуксовую базу: apache, nginx, iptables, bind9 (dns), nfs, samba, docker.

#обучение
​​Бессмысленная воскресная тема. Дело было вечером, делать было нечего. Увидел в одной из подборок софта с github информацию о консольном видео проигрывателе Terminal Media Player. Причём там было указано, что может проигрывать видео из youtube.

Мне стало очень любопытно, неужели действительно в терминале можно посмотреть ютубовское видео. Взял чистую виртулаку с Debian 11, без иксов, без видеокарты, без звуковой карты. Типичная VPS. Решил проверить, смогу ли я запустить ролик из ютуба на ней. Сразу скажу, что у меня получилось, но пришлось повозиться.

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

Подключаем contrib non-free репозитории:
deb http://deb.debian.org/debian/ bullseye main contrib non-free

Ставим зависимости:
# apt install libopencv-dev clang libclang-dev ffmpeg libavfilter-dev \
libavdevice-dev libasound2-dev

Ставим yt-dlp, который будет качать ролики с ютуба:
# curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp \
-o /usr/local/bin/yt-dlp
# chmod a+rx /usr/local/bin/yt-dlp

Устанавливаем свежую версию Rust и Cargo:
# curl https://sh.rustup.rs -sSf | sh

Собираем tplay:
# cargo install tplay

Пробуем проиграть видео:
# tplay https://www.youtube.com/watch?v=dtWrZJw2iWc

Если у вас нет звуковой карты, то скорее всего увидите ошибку, типа такой:
ALSA lib confmisc.c:767:(parse_card) cannot find card '0'

Оказывается, в ядре линукс с некоторого времени появилась звуковая карта пустышка, как раз для таких случаев. Загружаем модуль ядра:
# modprobe snd-dummy

И снова пробуем запустить ролик:
# tplay https://www.youtube.com/watch?v=dtWrZJw2iWc

Теперь должны увидеть изображение. С настройками по умолчанию у меня картинка была слишком непонятной. Сделал таблицу символов чёрно-белой, стало получше:
# tplay https://www.youtube.com/watch?v=dtWrZJw2iWc -g

А когда заменил на другую, стало ещё лучше:
# tplay https://www.youtube.com/watch?v=dtWrZJw2iWc -g --char-map ".:-=+*"

Разные настройки цвета и набора символов можно менять в процессе воспроизведения видео, нажимая на цифры 0-9 и клавиши g.

Такая вот бесполезная фигня получилась, которая реально работает. Можно в терминале по ssh смотреть видео на VPS в режиме ASCII. Единственное, где это может пригодиться — быстро получить картинку в ASCII из какого-то кадра в видео. Если делать всё это на ноуте или компе, то можно картинку с веб камеры вывести в терминал.

#разное #linux
​​На днях в рассылке увидел любопытный инструмент, на который сразу обратил внимание. Название простое и неприметное — Task. Это утилита, написанная на Gо, которая умеет запускать задачи на основе конфигурации в формате yaml. Сейчас сразу на примерах покажу, как это работает, чтобы было понятно, для чего может быть нужно.

Сама программа это просто одиночный бинарник, который можно установить кучей способов, описанных в документации. Его даже в винде можно установить через winget.

Создаём файл с задачами Taskfile.yml:

version: "3"

tasks:
 default:
  desc: Run all tasks
  cmds:
   - task: task01
   - task: task02

 task01:
  desc: Task 01
  cmds:
   - echo "Task 01"

 task02:
  desc: Task 02
  cmds:
   - echo "Task 02"

Сохраняем и запускаем. Для начала посмотрим список задач:

# task --list
task: Available tasks for this project:
* default:    Run all tasks
* task01:    Task 01
* task02:    Task 02

Запустим первую задачу:

# task task01
task: [task01] echo "Task 01"

Или сразу обе, запустив task без параметров. Запустится задача default, которую мы описали в самом начале:

# task
task: [task01] echo "Task 01"
Task 01
task: [task02] echo "Task 02"
Task 02

Идею, думаю, вы поняли. Это более простая и лёгкая в освоении замена утилиты make, которая используется в основном для сбора софта из исходников.

Первое, что приходит в голову, где утилита task может быть полезна, помимо непосредственно сборки из исходников, как замена make — сборка docker образов. Если у вас длинный RUN, который неудобно читать, поддерживать и отлаживать из-за его размера, то его можно заменить одной задачей с task. Это позволит упростить написание и поддержку, а также избавить от необходимости разбивать этот RUN на несколько частей, что порождает создание дополнительных слоёв.

Вместо того, чтобы описывать все свои действия в длиннющем RUN, оформите все свои шаги через task и запустите в RUN только его. Примерно так:

COPY --from=bins /usr/bin/task /usr/local/bin/task
COPY tasks/Taskfile.yaml ./Taskfile.yaml
RUN task

Скопировали бинарник + yaml с задачами и запустили их. А там они могут быть красиво оформлены по шагам. Писать и отлаживать эти задачи будет проще, чем сразу в Dockerfile. Для task написано расширение в Visual Studio Code.

Task поддерживает:
переходы по директориям
зависимости задач
импорт в Taskfile из другого Taskfile
динамические переменные
особенности OS, можно явно указать Taskfile_linux.yml или Taskfile_windows.yml
и многое другое. Всё это описано в документации.

Я немного поразбирался с Task. Он мне показался более простой заменой одиночных сценариев для ansible. Это когда вам не нужен полноценный playbook, а достаточно простого набора команд в едином файле, чтобы быстро его запустить и выполнить небольшой набор действий. Только в Task нет никаких модулей, только cmds.

#devops #script #docker
​​Я одно время перебирал программы для личных заметок, аналоги Evernote. В какой-то момент мне надоело. Понял, что это пустая трата времени. Остался в итоге на Joplin, которым пользуюсь уже пару лет. В нём не всё устраивает, но в целом — сойдёт.

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

Joplin. Писал о нём много, как в отдельных заметках (1, 2), так и косвенно упоминал в других. Не нравится тормознутость, отсутствие нормальных таблиц, отсутствие локального шифрования базы.

Obsidian. По отзывам одно из самых популярных решений. Я бы советовал начинать именно с него, если ищите что-то подобное. В нём хорошо реализованы связи между документами. Это прям его фишка. В плюсы можно отнести большое количество плагинов для расширения функциональности.

Trilium Notes. Тоже популярное приложение, как и предыдущее. Часто давали рекомендации на него. Есть возможность установить на свой сервер и все устройства синхронизировать с него.

Appflowy. Авторы позиционируют его как аналог Notion. Из явных плюсов — приложение шустрое, так как написано на Rust и Flutter. С Notion оно никак не конкурирует, потому что функционал заметно ниже. Это просто заметки.

Notea. Ещё одна попытка сделать копию Notion. Можно запустить в Docker, базу хранить в S3. Выглядит приятно и современно. Похож на Appflowy. Даже не знаю, как их сравнить. На вид почти одно и то же.

CherryTree. Необычная программа для заметок в старом стиле. Написана на C++, поэтому работает очень быстро. Минус один и самый существенный — это локальная программа, мобильной версии нет вообще.

MyTetra. Ещё одно олдскульное приложение на C++. Я его начал использовать. Сначала показалось удобным, потому что быстрое с хорошей навигацией. Но когда немного попользовался, заметил много минусов и в итоге забросил. Там был какой-то один жирнющий минус в редакторе, из-за которого я прекратил использование. К сожалению, уже забыл, что не понравилось.

◽️Wreeto. Веб сервис с адаптированным под мобильники интерфейсом. Так что можно через браузер ходить со смартфона. Умеет хранить заметки в формате Markdown и Wiki. Можно настроить Google oAuth. Написано на Ruby, что неплохо, так как аналоги чаще всего на Javascript. Хотя у меня тут нет уверенности, что руби явно быстрее яваскрипта.

◽️PMS - персональная система менеджмента. Тут есть всё — от календаря с ToDo, адресной книги до ведения целей личностного развития. Даже личная хранилка для паролей есть. Система интересная. Думаю, сделаю про неё отдельную заметку.

◽️Focalboard. Ещё одна заявленная альтернатива Trello, Notion, и Asana от авторов бесплатного чат-сервера Mattermost. Выглядит круто, особенно в связке с Mattermost. Но это больше про командную работу, а не персональные заметки. Хотя сейчас заметил в репозитории информацию, что проект для персонального использования останется как есть, а все командные фишки и развитие этого направления переедут в Mattermost как единую платформу.

◽️Standard Notes. Похожий на все остальные подобные приложения, аналоги Notion и Trello. В этом разработчики делают упор на безопасность и приватность. Обещают шифрованное хранение и передачу информации при синхронизации. Внешне особых отличий от остальных не увидел.

◽️Nimbus Note. Видел несколько положительных отзывов на него. Приложение коммерческое с бесплатным тарифным планом. Это не Open Source. Для одиночного использования бесплатного тарифного плана за глаза, как раньше было у Evernote. Выглядит приятнее open source аналогов, что логично для коммерческого продукта.

◽️Notesnook. Авторы позиционируют приложение как замену Evernote. Сделан упор на шифровании хранения и передачи информации. В мобильном приложении есть отдельный пароль на запуск. Можно шарить отдельные заметки и шифровать их паролем. Написан на JavaScript, внешне похож на аналоги.

#заметки
​​Если вам приходится самому писать Dockerfiles для сборки образов, то рекомендую удобный и функциональный линтер для проверки синтаксиса и общих рекомендаций по оптимизации — Hadolint (Haskell Dockerfile Linter). Он проверяет Dockerfile на предмет использования общепринятых best practice, а shell код в RUN с помощью рекомендаций ShellCheck.

Hadolint можно использовать как локально, так и с помощью веб сервиса. Работает он чётко, все рекомендации по делу. Покажу несколько примеров. Простенький Dockerfile:

FROM golang:1.7.3 AS build
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html  
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=build /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"]

Казалось бы, что тут может быть не так. Проверяем рекомендации hadolint:

# docker run --rm -i hadolint/hadolint < Dockerfile
-:6 DL3007 warning: Using latest is prone to errors if the image will ever update. Pin the version explicitly to a release tag
-:7 DL3018 warning: Pin versions in apk add. Instead of `apk add <package>` use `apk add <package>=<version>`

Вполне резонные замечания. Он не рекомендует использовать тэг latest и советует явно указывать версию софта в пакетном менеджере. В данном случае это скорее всего не критично. Но в общем случае за этим стоит следить, особенно за latest. Это разом может всё сломать в самый неподходящий момент.

Ещё небольшой пример:

FROM debian:stable
RUN apt-get update && apt-get install -y --force-yes apache2
EXPOSE 80 443
VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Проверяем:

# docker run --rm -i hadolint/hadolint < Dockerfile
-:2 DL3008 warning: Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
-:2 DL3009 info: Delete the apt-get lists after installing something
-:2 DL3015 info: Avoid additional packages by specifying `--no-install-recommends`

Здесь та же рекомендация — указывать конкретную версию в установке пакетов. Дальше рекомендация подчистить за работой apt-get. Речь тут скорее всего про что-то типа в самом конце:
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
Ну и последняя рекомендация добавить ключ --no-install-recommends в apt-get, что тоже не лишено смысла.

То есть hadolint рекомендует привести RUN к следующему виду:
RUN apt-get update && \
apt-get install -y --force-yes --no-install-recommends apache2=2.4 \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

Как видите, все рекомендации адекватные, хотя каких-то явных ошибок тут нет.

#devops #docker
​​Среди большинства программ в Linux для сбора информации об оборудовании и системе, в стороне стоит dmidecode. Она, в отличие, к примеру, от lshw, hwinfo, inxi, не опрашивает оборудование, а берёт информацию из таблицы DMI (Desktop Management Interface) или SMBIOS. Поэтому все запросы выполняются практически мгновенно. Плюс к её использованию — она практически всегда есть в базовых дистрибутивах. Не припоминаю, чтобы хоть раз приходилось её ставить отдельно.

Demidecode легко использовать, так как у неё немного параметров. В основном это тип аппаратного устройства, о котором мы хотим получить информацию. Вот полный список :

0 BIOS
1 Система
2 Материнская плата
3 Корпус
4 Процессор
5 Контроллер памяти
6 Модуль памяти
7 Кэш
8 Коннекторы портов
9 Системные слоты
10 Интегрированные устройства
11 Строки OEM
12 Параметры системной конфигурации
13 Язык BIOS
14 Ассоциации групп
15 Журнал системных событий
16 Массив физической памяти
17 Устройство памяти
18 32-битные ошибки доступа к памяти
19 Отображенный адрес массива памяти
20 Отображенный адрес устройства памяти
21 Встроенное указывающее устройство
22 Батарея мобильного устройства
23 Устройство сброса состояния системы
24 Устройства безопасности
25 Управление питанием системы
26 Датчик напряжения
27 Устройство охлаждения
28 Датчик температуры
29 Датчик тока
30 Механизм удаленного доступа
31 Сервисы проверки целостности данных загрузки
32 Загрузочные устройства
33 64-битные ошибки доступа к памяти
34 Устройство управления
35 Компонент устройства управления
36 Граничные данные устройства управления
37 Канал памяти
38 Устройство IPMI
39 Блок питания
40 Дополнительная информация
41 Дополнительная информация об интегрированных устройствах
42 Хост-интерфейс контроллера управления
126 Деактивированная строка
127 Маркер конца таблицы

Наиболее популярные идентификаторы объединены кодовыми словами:

bios 1, 13
system 1, 12, 15, 23, 32
baseboard 2, 10, 41
chassis 3
processor 4
memory 5, 6, 16, 17
cache 7
connector 8
slot 9

То есть информацию о процессоре смотрим:
# dmidecode -t 4
или
# dmidecode -t processor

С помощью dmidecode удобно централизованно собирать информацию о каких-то характеристиках. Например, смотрим информацию о процессоре:

# dmidecode -s processor-version
Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz

# dmidecode -s processor-frequency
4200 MHz

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

# dmidecode -s

Вывод dmidecode имеет смысл упрощать ключом -q, который убирает некоторую техническую информацию, которая чаще всего не нужна. Например, убирает информацию о handle (уникальный идентификатор железа) и мета данных.

❗️Dmidecode нормально показывает информацию, когда запущен на реальном железе. Если его запускать в виртуальных машинах, то часто информацию о тех или иных компонентах в DMI не будет. Например, о процессоре или материнской плате. Наличие информации будет зависеть от гипервизора и его настроек.

#linux #железо