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

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

Второй канал: @srv_admin_live
Сайт: serveradmin.ru
Download Telegram
​​Для запуска системы Android на обычных компьютерах или виртуалках долгое время был наиболее популярен проект android-x86.org. К сожалению, он не обновляется уже несколько лет. Наиболее популярным и рабочим вариантом на текущий день является проект Bliss-OS.

Bliss-OS - операционная система на базе Android, которую можно установить на компьютер или ноутбук, а также в виртуальную машину. На железо я ставить не пробовал, хотя в сети видел много отзывов о том, как люди ставят эту систему на старое железо и пользуются. Подойдёт какой-нибудь старый ноут с 4 Гб памяти. При этом Bliss-OS будет со свежей версией Android 13. То есть это будет современная система, которую можно успешно использовать для работы в интернете.

Я установил Bliss-OS в виртуальную машину Proxmox. Продолбался я с ней очень долго, пока не нашёл вот эту инструкцию:

▶️ Installing Android On Proxmox As A Virtual Machine Using BlissOS

Если делать строго по ней, то всё получится. Для виртуальной машины нужно выставить следующие настройки:

Bios: OVMF (UEFI)
Display: VirGL GPU
Чтобы он заработал, на хост надо установить пару пакетов:
# apt install libgl1 libegl1
Machine: q35
VirtIO SCSI single
Hard Disk: SATA, галку Discard поставить
EFI Disk: тип qcow2, pre-enroll keys отключить
Сеть: бридж VirtIO в локалку или куда-то ещё, где есть dhcp

Я устанавливал с ISO образа Bliss-v16.9.4-x86_64-OFFICIAL-gapps-20240220.iso. То есть взял свежую 16-ю версию с Android 13. Во время локальной установки нужно обязательно:

▪️ выбрать разметку gpt
▪️ при разбивке диска сделать первый раздел 1024М, тип EFI System
▪️ второй раздел весь остальной объём, тип Linux Filesystem
▪️ первый раздел форматируем в fat32
▪️ систему ставим на второй раздел, форматируем в ext4
▪️ в качестве загрузчика выбираем rEFInd Boot Manager

Если сделать, как описано, всё получится. Я долго мучался, пока не повторил в точности, как здесь. Система загрузилась, всё заработало. Даже видео с ютуба нормально показывает.

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

Я не проработал один важный момент, который мне был бы очень полезен. Если кто-то знает и пробовал хорошее рабочее решение, дайте совет. Нужна возможность подключаться к этой системе удалённо, желательно не только с PC, но и с другого смартфона под Android.

⇨ Сайт

#android
​​Недавно на глаза попалась бесплатная программа под Windows для быстрого обзора занятого места на диске - SpaceSniffer. Она очень старая. Написана ещё во времена Windows 2000, но работает до сих пор. Я попробовал, выглядит необычно, но удобно.

Хотя лично я ещё лет 10 назад в каком-то офисе у админа увидел портированную программу TreeSizePro. Понравилась, сохранил себе. С тех пор постоянно её использую. Вроде мелочь, но очень удобно. Лежит на Яндекс.Диске. Если надо где-то запустить, то просто скачиваю. И на ноуте всегда под рукой.

Сейчас проверил, её продолжают развивать, супернавороченная стала. Умеет и по ssh ходить, место проверять, и по S3. Но все эти фишки денег стоят. А только для винды есть бесплатная версия в магазине. Попробуйте, может понравится. Так вот случайно увидишь программу, а потом пользуешься ей 10 лет.

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

#windows
​​Продолжу тему с Android, потому что в комментариях вчера посоветовали отличную программу для управления этой системой - scrcpy. Судя по всему это очень популярная программа, потому что у неё огромное количество звёзд на github (103k). Я про неё не знал и ни разу не видел упоминаний.

С помощью этой программы очень легко и быстро можно настроить управление Android устройством с компьютера. Сразу приведу основные моменты программы scrcpy:

▪️ это не полноценный софт для удалённого управления, программа буквально передаёт несжатый поток видео и аудио с устройства на комп, то есть нужна очень быстрая wifi сеть
▪️ смартфоны можно подключать к компу через usb, тогда отклик будет в районе 50 мс, так что можно будет даже в игрушки играть
▪️ для работы не нужно ничего устанавливать на смартфон, нужно только включить режим отладки по usb или wifi

А теперь покажу, как это работает на практике, если будете подключаться с Windows машины (Linux и MacOS тоже поддерживаются). Я настроил подключение и к виртуальной машине с Bliss OS, и к своему смартфону.

Для Bliss OS никаких настроек в Android делать не надо. Там даже в меню нет режима отладки. Он, судя по всему, включен по умолчанию. Качаем scrcpy для Windows. Распаковываем в любую директорию, заходим туда через консоль и сразу подключаемся:

> cd C:\Users\User\Downloads\scrcpy-win64-v2.4
> scrcpy --tcpip=10.20.1.60

Никаких настроек делать не надо. 10.20.1.60 - ip адрес виртуальной машины с Bliss OS. Посмотреть его можно в системе, запустив присутствующий там терминал Termux. IP адрес можно посмотреть с помощью команды ifconfig.
Всё, удалённое управление работает.

Со смартфоном немного посложнее, так как сначала нужно подключиться по USB к компьютеру, чтобы разрешить с него подключения. TCP/IP соединение в scrcpy работает через adb, так что сначала его нужно настроить. Для этого так же идём в директорию с скачанной scrcpy и запускаем adb. Смартфон должен быть подключен к компу в режиме Передачи файлов/Android Auto. По крайней мере так было у меня.

Ноутбук и смартфон должны быть в одной wifi сети. Проверяем, видит ли adb смартфон:

> adb devices
List of devices attached
DUCYB6KMKZTOGMUK    device

Даём смартфону команду слушать подключения на 5555 порту:

> adb tcpip 5555

Подключаемся к смартфону:

> adb connect 192.168.0.169:5555

На смартфоне должен появиться зарос на разрешение подключения с этого компа. Разрешаем. Теперь TCP соединение со смартфоном будет в списке устройств:

> adb devices
List of devices attached
DUCYB6KMKZTOGMUK    device
192.168.0.169:5555   device

Подключаемся к смартфону:

> scrcpy --tcpip=192.168.0.169

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

Если wifi соединение не очень быстрое, то можно урезать битрейт. Когда писал эту заметку, был в помещении с плохим вайфаем. Опытным путём нашёл битрейт, с которым отклик более ли менее нормальный:

> scrcpy --tcpip=192.168.0.169 --video-bit-rate 1M

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

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

Исходники / Видео настройки смартфона

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

▪️ curl: работа с веб серверами, отправка почты, чтение почты по imap,
▪️ systemctl: управление службами, работа с таймерами, просмотр информации о системе,
▪️ find: общие примеры, очистка старых файлов, поиск дубликатов файлов,
▪️ lsof: работа с файлами и сетевыми соединениями
▪️ grep - поиск строк и шаблонов в текстах
▪️ cat - использование cat как текстового редактора
▪️ type - возвращает тип введённой в оболочку команды
▪️ touch - обновление информации о atime и mtime файла
▪️ hash - просмотр кэша путей к исполняемым файлам
▪️ auditctl - аудит доступа к файлам
▪️ history - просмотр истории введённых в консоль команд
▪️ at - планировщик разовых заданий
▪️ ps - вывод списка процессов с подробностями
▪️ dig - запросы к dns серверам
▪️ nc - установка сетевых соединений и передача по ним информации
▪️ screen - защита терминальных сессий от разрыва соединения
▪️ cut - работа с текстовыми строками
▪️ w - информация об uptime, подключенных пользователях, la
▪️ less - постраничный вывод информации в консоль
▪️ truncate - усечение текстовых файлов (логов)
▪️ split - разделение файлов на части
▪️ units - конвертация единиц измерения
▪️ chsh - замена оболочки пользователя
▪️ fc - утилита из состава оболочки bash для работы с историей команд
▪️ socat - создание потоков для передачи данных, прямой доступ к shell
▪️ lsmem и chmem - информация об оперативной памяти, управление объёмом использования
▪️ column - выводит данные других команд в табличном виде
▪️ vmstat - информация по использованию оперативной памяти, cpu и дисках
▪️ findmnt - информация о точках монтирования
▪️ sed - автоматическая замена текста в файлах
▪️ date - вывод информации о дате и времени в различных форматах
▪️ basename - показывает только имя файла из полного пути
▪️ lsblk - информации об устройствах хранения

#terminal #подборка
​​После установки обновлений иногда необходимо выполнить перезагрузку системы. Точно надо это сделать, если обновилось ядро. Необходимо загрузиться с новым ядром. В коммерческих системах Linux от разных разработчиков есть механизмы обновления ядра без перезагрузки. В бесплатных системах такого не видел.

Для того, чтобы отслеживать этот момент, можно воспользоваться программой needrestart. Она есть в базовых репах:

# apt install needrestart

В rpm дистрибутивах название будет needs-restarting. Если просто запустить программу, то она в интерактивном режиме покажет, какие службы необходимо перезапустить, чтобы подгрузить обновлённые библиотеки, либо скажет, что надо перезапустить систему, чтобы применить обновление ядра.

Для того, чтобы использовать её в автоматизации, есть ключ -b, batch mode:

# needrestart -b
NEEDRESTART-VER: 3.5
NEEDRESTART-KCUR: 5.10.0-25-amd64
NEEDRESTART-KEXP: 5.10.0-29-amd64
NEEDRESTART-KSTA: 3
NEEDRESTART-SVC: cron.service
NEEDRESTART-SVC: dbus.service
NEEDRESTART-SVC: getty@tty1.service
NEEDRESTART-SVC: ifup@ens18.service
NEEDRESTART-SVC: qemu-guest-agent.service
NEEDRESTART-SVC: rsyslog.service
NEEDRESTART-SVC: systemd-journald.service
NEEDRESTART-SVC: systemd-logind.service
NEEDRESTART-SVC: systemd-timesyncd.service
NEEDRESTART-SVC: systemd-udevd.service

Здесь перечислены службы, которые нужно перезапустить после обновления системы. И показана информация об ядре. Значение NEEDRESTART-KSTA может принимать следующие состояния необходимости обновления ядра:

0: неизвестно, либо не удалось определить
1: нет необходимости в обновлении
2: ожидается какое-то ABI совместимое обновление (не понял, что это такое)
3: ожидается обновление версии

Если у вас значение 3, как у меня в примере, значит систему нужно перезагрузить, чтобы обновлённое ядро 5.10.0-29-amd64 заменило текущее загруженное 5.10.0-25-amd64.

Значение NEEDRESTART-KSTA можно передать в мониторинг и отслеживать необходимость перезагрузки. Например, В Zabbix можно передать вывод следующей команды:

# needrestart -b | grep 'NEEDRESTART-KSTA' | awk '{print $2}'

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

с помощью локального скрипта и параметра UserParameter в агенте
с помощью EnableRemoteCommands в агенте и ключа system.run на сервере
с помощью zabbix_sender
с помощью скрипта и передачи значения ключа напрямую в сервер через его API

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

После перезагрузки значение NEEDRESTART-KSTA станет равно единице:

# needrestart -b
NEEDRESTART-VER: 3.5
NEEDRESTART-KCUR: 5.10.0-29-amd64
NEEDRESTART-KEXP: 5.10.0-29-amd64
NEEDRESTART-KSTA: 1

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

Покажу, как строку сразу преобразовать в нормальный json, чтобы потом можно было легко анализировать:

# needrestart -b | tr ':' '=' | tr -d ' ' | jo -p
{
  "NEEDRESTART-VER": 3.5,
  "NEEDRESTART-KCUR": "5.10.0-29-amd64",
  "NEEDRESTART-KEXP": "5.10.0-29-amd64",
  "NEEDRESTART-KSTA": 1
}

Обработал в лоб. Взял утилиту jo, заменил : на = c помощью tr, потому что jo понимает только =, потом убрал лишние пробелы опять же с помощью tr. Получили чистый json, из которого с помощью jsonpath можно забрать необходимое для анализа значение.

# needrestart -b | tr ':' '=' | tr -d ' ' | jo -p | jq .'"NEEDRESTART-KSTA"'
1

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

#linux #мониторинг
This media is not supported in your browser
VIEW IN TELEGRAM
К сожалению, для меня типичная картина. Я удалёнщик уже много лет (8-9, точно уже не помню, но ещё до пандемии, когда это стало трендом). Просыпаюсь обычно в 9-10 утра, и ноут в рюкзаке где-то рядом, если работал накануне не из дома.

Бывает, по телефону кто-то звонит по делам. Если уже часов 10-11, то быстро встаю, достаю ноут, подключаю к док станции и сажусь что-то делать. Не сказать, что сильно надо, но потом всё равно перезванивать придётся и решать вопрос. А можно ещё и забыть. Так что если вопрос простой, то лучше сразу решить.

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

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

▶️ Источник

#юмор
​​Хочу дать рекомендацию тем, кто будет выбирать себе рюкзак. Я считай со школы всегда хожу с рюкзаками. И на работу чаще всего с рюкзаками ходил, кроме периода, когда на машине ездил, брал сумку.

Где-то лет 9-10 назад я купил себе большой ноут с экраном 17 дюймов и внешней видюхой. Носить его в обычном рюкзаке, который у меня тогда был, стало неудобно, поэтому решил купить что-то побольше. А так как ноут тяжёлый, взял рюкзак с разгрузкой на груди и поясе. С тех пор так с ним и хожу, потому что он очень удобный и отличного качества. А ноут быстро продал, не понравился.

Рюкзак этот Deuter Gigant. Я не знаю, есть ли сейчас в продаже точно такие же модели. Скорее всего нет, но что-то похожее от этой фирмы должны быть. Рюкзак таскаю с собой каждый день. Ничего не сломалось, не протёрлось, не прохудилось. Все молнии работают, застёжки тоже. Рюкзак неоднократно стирался.

Всё, что у меня было до него, было значительно хуже. Это прям отличная вещь, которой приятно пользоваться. Люблю такие вещи, которые однозначно хорошего качества. На днях по старой памяти купил дочке в начальную школу очередной ноут Thinkpad x220 домашку смотреть в МЭШ и понемногу привыкать к компу. Нравится эта модель. Дома 2 штуки. Один сломался, купил на замену. Для маленьких детей и учёбы хороший вариант.

Чтобы поинтересней было, решил показать вам содержимое своего рюкзака. Некоторые вещи были для меня открытием, уже забыл про них. Заодно нашёл пропажу, которую дома обыскался. Содержимое рюкзака за 10 лет почти не поменялось. Большая часть вещей на деле не нужны. Там у меня хранится:

Пакет с кучей флешек, которыми почти не пользуюсь. Одна может понадобится раз в 2-3 месяца что-то перекинуть родителям.
Пачка карточек доступа во всякие офисы и офисные центры.
Наушники беспроводные и проводные на всякий случай.
Зарядка для смартфона. Нужна в основном для дачи.
Короткий и тоненький патчкорд. На вид удобный, но не припоминаю, чтобы хоть раз им воспользовался. Ношу просто так на всякий случай.
Внешний жёсткий диск. Нужен очень редко. В основном для мультиков детей на даче. Для каких-то других дел не помню, когда использовал последний раз. Всё как-то в онлайн перешло.
Фонарик. Нашлась пропажа. Лежал в боковом отделе, забыл про него. На днях дома искал, не смог найти. Думал, дети утащили.
Два токена, один с ЭЦП, второй с лицензией 1С.
2 отвёртки. Пользуюсь постоянно. Чаще всего, чтобы батарейки менять в детских игрушках и пультах. Храню в рюкзаке, чтобы под рукой всегда были.
Разные провода, переходники, даже коннектор один нашёлся.
2 резиновые подставки под ноут, чтобы он немного под углом стоял. Простая и удобная штука, рекомендую. Мне больше нравится, когда ноут немного наклонён. Печатать удобнее.
Ноут, зарядка для него, мышка, коврик для мышки. Это на столе сейчас.

В рюкзаке всё это по карманам распихано. Такой вот я Плюшкин. Таскаю всякие вещи с собой, даже если они не особо нужны. А дома и по дачам (своя и родительская) сколько всего хранится - компы, комплектующие, старые ноуты, мониторы. Всё рабочее, жалко выкинуть. Но на деле не нужно. Иногда знакомым что-то отдаю, если попросят.

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

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

Возможности у Hestiacp плюс-минус такие же как у всех представителей этого класса ПО. Перечислю основные:

▪️ Классический веб сервер для PHP на базе Nginx или Apache c СУБД MySQL или PostgreSQL.
▪️ DNS сервер на базе Bind.
▪️ Почтовый сервер на базе традиционного стека Exim, Dovecot, ClamAV, SpamAssassin, Roundcube.
▪️ Набор соответствующих обвязок в виде Let's Encrypt, Iptables, Fail2ban, Vsftpd и т.д.

Сделано всё без каких-то изысков на базе стандартного open source ПО. Благодаря этому, если вы разбираетесь в этом ПО, то управление для вас не будет представлять тыкание через веб интерфейс в чёрный ящик. Если что, сможете что-то поправить и мимо панели. Все конфиги на своих стандартных местах - /etc/nginx, /etc/php и т.д.. Какие-то вынесены в отдельный каталог панели (/home/admin/conf), но всё равно в системе оставлены символьные ссылки в стандартных местах.

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

Разработчики поддерживают автоматическую установку только на deb сервера - Ubuntu, Debian, так что использовать рекомендуется что-то из них. Тогда установка пройдёт автоматически с помощью готового скрипта:

# wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
# bash hst-install.sh

Установщик задаст несколько простых вопросов, перечислит все компоненты, которые будут установлены и установит непосредственно панель управления. Процесс будет длиться минут 10. После этого можно идти в веб интерфейс по адресу, который увидите в консоли - https://330767.simplecloud.ru:8083 (у вас будет другой домен), учётка будет написана там же.

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

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

Сайт / Исходники / Demo

#hosting_panel
Dovecot - наиболее популярный imap сервер, который используется в почтовых серверах на базе open source ПО. Остальные значительно уступают ему в популярности, и я даже не уверен, что их кто-то ещё использует. К примеру, лет 15 назад я настраивал Courier-IMAP. Со временем перешёл на Dovecot, потому что он более популярен.

Так вот, если вы эксплуатируете этот imap сервер, то можно использовать его встроенные возможности для очистки почтовых ящиков или папок в них. В первую очередь это касается папок Trash и Junk (Spam). Для этого можно использовать простую команду:

# doveadm expunge -u user@example.com mailbox Trash savedbefore 4w

Она удалит все письма в ящике user@example.com в папке Trash старше 4-х недель. Соответственно, так можно очищать любой ящик.

Условие может быть составным. Например, очистим все прочитанные сообщения в папке Spam старше 24 часов:

# doveadm expunge -u user@example.com mailbox 'Junk' SEEN not SINCE 24h

Можно делать глобальные чистки сразу для всех ящиков (❗️будьте аккуратны с подобными командами). Например, удалим всю почту старше трёх лет:

# doveadm expunge -A mailbox % before 156w

Синтаксис запросов doveadm описан в документации dovecot.

Благодаря тому, что Dovecot, как я уже сказал, используется почти во всех бесплатных сборках почтовых серверов, вы можете использовать эти возможности и там. Например, в iredmail, mailcow и т.д.

Когда я не знал про эти возможности Dovecot, использовал свои костыли на основе find. Так как письма в формате maildir - это по сути обычные текстовые файлы, вы можете делать с ними на уровне файлов всё, что угодно. Примеры своих скриптов я показал в статье Очистка и обслуживание почтовой базы postfix. Посмотрите, может найдёте там для себя что-то полезное. Я показываю в том числе, как выполнять очистку писем на основе их содержимого или заголовка (поля subject). К примеру, удалять все письма старше 30 дней с определённой темой. Статья писалась 7! лет назад. Сейчас я бы делал скорее всего всё это по-другому, так что не спешите критиковать. Просто примите к сведению то, что там написано, если для вас эта тема актуальна.

#mailserver #dovecot
​​Наиболее популярным и простым в настройке мониторингом сейчас является Prometheus. Простым не в плане возможностей, а в плане начальной настройки. Так как для него очень много всего автоматизировано, начать сбор метрик можно в несколько простых действий. Мониторинг сразу заработает и дальше с ним можно разбираться и настраивать.

Напишу краткую шпаргалку по запуску связки Prometheus + Grafana, чтобы её можно было сохранить и использовать по мере надобности. Я установлю их в Docker, сразу буду мониторить сам Prometheus и локальных хост Linux. Подключу для примера ещё один внешний Linux сервер.

Ставим Docker:

# curl https://get.docker.com | bash -

Готовим файл docker-compose.yml:

# mkdir ~/prometheus && cd ~/prometheus
# touch docker-compose.yml

Содержимое файла:

version: '3.9'
networks:
monitoring:
driver: bridge
volumes:
prometheus_data: {}

services:

prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
container_name: prometheus
hostname: prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
expose:
- 9090
restart: unless-stopped
environment:
TZ: "Europe/Moscow"
networks:
- monitoring

node-exporter:
image: prom/node-exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
container_name: exporter
hostname: exporter
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
expose:
- 9100
restart: unless-stopped
environment:
TZ: "Europe/Moscow"
networks:
- monitoring

grafana:
image: grafana/grafana
user: root
depends_on:
- prometheus
ports:
- 3000:3000
volumes:
- ./grafana:/var/lib/grafana
- ./grafana/provisioning/:/etc/grafana/provisioning/
container_name: grafana
hostname: grafana
restart: unless-stopped
environment:
TZ: "Europe/Moscow"
networks:
- monitoring

И рядом кладём конфиг prometheus.yml:

scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
scrape_timeout: 5s
static_configs:
- targets: ['localhost:9090']

- job_name: 'node-local'
scrape_interval: 5s
static_configs:
- targets: ['node-exporter:9100']

Запускаем весь стек:

# docker-compose up -d

Если будут ошибки, прогоните весь yaml через какой-нибудь валидатор. При копировании он часто ломается.

Ждём, когда всё поднимется, и идём по IP адресу сервера на порт 3000. Логинимся в Grafana под учёткой admin / admin. Заходим в Connections ⇨ Data sources и добавляем источник prometheus. В качестве параметра Prometheus server URL указываем http://prometheus:9090. Сохраняем.

Идём в Dashboards, нажимаем New ⇨ Import. Вводим ID дашборда для Node Exporter - 1860. Сохраняем и идём смотреть дашборд. Увидите все доступные графики и метрики хоста Linux, на котором всё запущено.

Идём на удалённый Linux хост и запускаем там любым подходящим способом node-exporter. Например, через Docker напрямую:

# docker run -d --net="host" --pid="host" -v "/:/host:ro,rslave" prom/node-exporter:latest --path.rootfs=/host

Проверяем, что сервис запущен на порту 9100:

# ss -tulnp | grep 9100

Возвращаемся на сервер с prometheus и добавляем в его конфиг еще одну job с этим сервером:

- job_name: 'node-remote'
scrape_interval: 5s
static_configs:
- targets: ['10.20.1.56:9100']

Перезапускаем стек:

# docker compose restart

Идём в Dashboard в Grafana и выбираем сверху в выпадающем списке job от этого нового сервера - node-remote.

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

❗️В проде не забывайте ограничивать доступ ко всем открытым портам хостов с помощью файрвола.

#мониторинг #prometheus #devops
До меня только сегодня докатилась новость про сбой в работе СДЕК. Говорят, что их плотно зашифровали. Немного жутко стало от новости, потому что сразу примерил на себя шкуру сотрудников сопровождения инфраструктуры. Сам то я тоже с этим сталкивался, и не раз. Мне повезло, что без потерь выходил из ситуаций.

Пишу, что именно повезло, потому что понимаю, защититься на 100% не получится. И ты всегда сидишь на пороховой бочке. Я восстанавливался из бэкапов, которые не пострадали. Но при должном усердии со стороны нападающих могут и пострадать. Вопрос квалификации и мотивации нападающих. Периодически всплывающие новости об уязвимостях в очень распространённом ПО, типа openssh-server, говорят о том, что пока эти уязвимости не появились в новостях, их кто-то может эксплуатировать. И следов будет не найти.

Хорошая защита это на самом деле очень дорого. Например, я знаю, как теоретически может пострадать инфраструктура, которой я управляю. Понимаю, как и где можно взломать. Примерно понимаю, как от этого защищаться и как подстраховать инфраструктуру на случай, если защита не поможет. Но стоить защищённая инфраструктура может в 3 раза больше, чем компания платит за существующую. И получается, что ты уже 10 лет живёшь в текущей инфре с рисками, но платишь в 3 раза меньше. Но даже если заплатишь в 3 раза больше, то не получишь 100% гарантию защиты. А если тебя всё равно взломают, то как потом объяснишь рост расходов в 3 раза? 🧐

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

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

❗️Я не так давно оформлял документы на родившегося ребёнка. Теперь СНИЛС и мед. полис электронные. Пришли мне в личку на госуслугах. На руки ничего не дали. Лет 7 назад упразднили документы на право собственности. Нету гербовых свидетельств, всё в базе данных Росреестра. Намечен явный тренд на полную цифровизацию. Школьников к этому с первого класса приучают.

А что мы будем делать, когда зашифруют Госуслуги? Это обрушит управление всего государства. Отсутствие бумажных дубликатов различных документов похоже на сознательное вредительство, которое проводят как раз для того, чтобы потом в один день всё обрушить. Ведь вероятность этого довольно высока. Это не какие-то гипотетические угрозы из области конспирологии, а абсолютно реальные. Что думаете по этому поводу? Или может я напрасно переживаю и там всё надёжно защищено с офлайн хранилищами в бункерах? Я без шуток, может и на самом деле так. Это было бы логично.

#мысли
​​Вчера была заметка про быструю установку связки Prometheus + Grafana. Из-за лимита Telegram на длину сообщений разом всё описать не представляется возможным. А для полноты картины не хватает настройки уведомлений, так как мониторинг без них это не мониторинг, а красивые картинки.

Для примера я настрою два типа уведомлений:

SMTP для только для метки critical
Telegram для меток critical и warning

Уведомления будут отправляться на основе двух событий:

▪️ С хоста нету метрик, то есть он недоступен мониторингу, метка critical
▪️ На хосте процессор занят в течении минуты более чем на 70%, метка warning

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

Постить сюда все конфигурации в формате yaml неудобно, поэтому решил их собрать в архив и прикрепить в следующем сообщении. Там будут 4 файла:

- docker-compose.yml - основной файл с конфигурацией всех сервисов. Его описание можно посмотреть в предыдущем посте. Там добавился новый контейнер с alertmanager и файл с правилами для prometheus - alert.rules
- prometheus.yml - настройки Прометеуса.
- alert.rules - файл с двумя правилами уведомлений о недоступности хоста и превышении нагрузки CPU.
- alertmanager.yml - настройки alertmanager с двумя источниками для уведомлений: email и telegram. Не забудьте там поменять токен бота, id своего аккаунта, куда бот будет отправлять уведомления и настройки smtp.

Для запуска всего стека с уведомлениями достаточно положить эти 4 файла в отдельную директорию и там запустить compose:

# docker compose up

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

# docker compose stop

Исправляйте конфиги и заново запускайте. Зайдя по IP адресу сервера на порт 9090, вы попадёте в веб интерфейс Prometheus. Там будет отдельный раздел Alerts, где можно следить за работой уведомлений.

В данном примере со всем стэком наглядно показан принцип построения современного мониторинга с подходом инфраструктура как код (IaC). Имея несколько файлов конфигурации, мы поднимаем необходимую систему во всей полноте. Её легко переносить, изменять конфигурацию и отслеживать эти изменения через git.

#мониторинг #prometheus #devops
​​Shodan знают все или почти все. Когда-то писал про него. У этого сервиса есть очень простая и маленькая утилита, которая проверяет ваши списки ip адресов по своей базе открытых портов и уязвимостей. Называется nrich. Удобно запихнуть все свои внешние IP адреса и периодически проверять то, как их видит Shodan. Его используют многие сканеры и боты, для автоматического поиска доступных из интернета сервисов.

Поставить можно как из пакета, так и просто скачать бинарник напрямую. Всё есть в репозитории.

# wget https://gitlab.com/api/v4/projects/33695681/packages/generic/nrich/latest/nrich_latest_x86_64.deb
# dpkg -i nrich_latest_x86_64.deb

Формируем текстовый файл с ip адресами, где в каждой строке по ip адресу:

1.1.1.1
8.8.8.8
и т.д.

Запускаем проверку:

# nrich ip.list

Результат виден в консоли. Можно сразу в json обернуть:

# nrich ip.list --output json

Данные nrich берёт из публичного бесплатного сервиса internetdb.shodan.io.

#security
​​Вчера читал англоязычную статью про консольную утилиту sttr для модификации текста. У неё, в принципе, есть некоторые полезные возможности, но в репозиториях дистрибутивов не представлена, так что не счёл её полезным инструментом, поэтому не буду на ней останавливаться.

В статье меня очень удивило и привлекло другое. Там был пример установки этой утилиты в Windows:

# curl.exe https://webi.ms/sttr | powershell

❗️Я, во-первых, не знал, что в винде есть curl. Проверил у себя на Windows 11, реально есть:

> curl
curl: try 'curl --help' for more information

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

# curl https://get.docker.com | bash -

Скачали скрипт и сразу передали его в bash на исполнение. Оказывается, и в powershell некоторые разработчики пишут скрипты для подобной установки. Автор утилиты заморочился.

Хотя не знаю, автор ли тут заморочился. Я посмотрел, что за скрипт там скачивается. Он принадлежит площадке webinstall.dev, и скачивает в первую очередь с неё скрипт-установщик webi-pwsh.ps1 для установки программы. И только потом уже ставится программа. То есть первый скрипт загружает второй скрипт в зависимости от системы и уже он ставит программу.

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

А тут получается не пойми что. Я так понял, что webinstall.dev это такой сервис, который позволяет организовать единую ссылку для установки софта через консоль на разные системы и платформы. Идея интересная, но с точки зрения безопасности очень сомнительная. Хотя они и выкладывают всю свою базу софта, который можно установить через сервис на github:

https://github.com/webinstall/webi-installers

#windows
▶️ Месяц назад на youtube канале, который мне очень нравится, вышли два ролика. В них автор кратко рассказал про его любимый open source софт, который он использует. Там внушительный список получился, поэтому решил вынести его в отдельную публикацию. В видео мне понравилось то, что большую часть софта я тоже знаю, писал о ней тут, а что-то тоже использую.

Думаю, вам тоже это может быть полезным, поэтому сделал краткую выжимку со ссылками. Автор кратко рассказывает о софте и показывает работу с ним в веб интерфейсе. Получилось кратко и наглядно. Можно для себя что-то полезное вынести.

The Free and Open Source Software I Use in 2024 - Part 1:

Webmin - известная веб панель управления сервером. Мне было удивительно увидеть свежую версию. Давно не ставил и не видел этого внешнего вида. Раньше тема была другая.

PiKVM - KVM over IP на базе одноплатников типа Raspberry Pi. Позволяет переустанавливать системы, заходить в BIOS и т.д. То есть как на обычных KVM. Сходу не понял, как это технически реализовано. Надо будет отдельно разобраться и попробовать. Выглядит интересно, не слышал раньше о подобном софте.

Nginx Proxy Manager - известная веб панель для управления конфигурациями Nginx. Сделана качественно и функционально, приятно пользоваться. Писал о ней не раз.

MeshCentral - софт для удалённого управления компьютерами через браузер. Вроде недавно про него писал, а прошло уже более 3-х лет 😱

Portainer-CE - веб панель для управления Docker контейнерами. Удобная и популярная панель. Лучшая в своём классе.

Vaultwarden - хранение и групповое использование сохранённых учётных данных.

Metabase - BI-инструмент для составления отчетов, визуализации выборок, учёта финансов и т.д.

Remotely - ещё один неплохой софт для удалённого управления компами. Отличается тем, что упакован в Docker и очень легко разворачивается.

Guacamole - шлюз для удалённых подключений к серверам всех мастей по ssh, rdp, vnc и т.д.

Authentik - популярный сервис для своего SSO.

Netbird - платформа для построения распределённых VPN сетей на базе Wireguard.

LXConsole - веб интерфейс для управления LXC контейнеров. Ни разу не слышал о таком.

Home Assistant - известный софт для построения и управления "умным домом".

NextCloud - всем известный файловый сервер и собственное облачное хранилище для файлов и работы с документами.

RocketChat - один из самых популярных self-hosted чатов. Хорошо его знаю, так как админю в том числе.

Dashy - создание дашборда для стартовой страницы браузера с информацией и ссылками на свои сервисы.

Trilium Notes - популярный сервис для хранения заметок.

The Open Source Software I use in 2024 - Part 2:

Mail-in-a-Box - сборка для установки почтового сервера на базе Postfix + Dovecot.

Jitsi Meet - сервис для ауди и видео конференций, замена zoom, google meet и т. д.

Pi-hole - фильтрующий DNS сервер для блокировки рекламы.

Uptime Kuma - симпатичный и простой в настройке мониторинг для http, icmp и tcp проверок.

OpenMediaVault - дистрибутив на базе Debian для организации файлового сервера.

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

RustDesk - ещё один качественный софт для организации инфраструктуры на основе своих серверов с выдачей ID для управления удалёнными компьютерами.

Некоторый софт пропустил, который посчитал не таким интересным. Иначе всё не уместилось бы в одну публикацию.

#видео
​​Вчера свершилось знаменательное событие - заблокировали доступ к hub.docker.com с IP адресов в России. Теперь без лишних телодвижений не скачать образы из этого репозитория. Не очень понятно, зачем это сделали, почему только сейчас и в чём тут смысл, если обойти эту блокировку, как и многие другие, не представляет каких-то проблем.

Расскажу несколько простых разных способов обхода этой блокировки.

1️⃣ Самый простой - переключиться на какое-то зеркало. Их сейчас много появится и встанет вопрос доверия к ним. Пока можно гугловское зеркало использовать, но его скорее всего тоже рано или поздно для нас заблокируют. Для этого достаточно создать конфиг /etc/docker/daemon.json, если у вас его нет, следующего содержания:

{ "registry-mirrors": ["https://mirror.gcr.io"] }

Перезапускаем службу и пользуемся, как раньше.

# systemctl restart docker

Больше ничего менять не надо.

2️⃣ Использовать локально подключение докера к своему реджистри через прокси. Недавно я об этом рассказывал и там многие написали, типа зачем всё это, доступ не заблокирован. Потому что не будет вашего итальянского сыра ХАХАХАХА. Сегодня этот реджистри, завтра все остальные. Прокси тоже относительно просто решает вопрос для единичного хоста.

3️⃣ Можно глобально на общем шлюзе настроить VPN подключение к серверу за пределами РФ, маркировать весь трафик, что блокируется и отправлять его через VPN соединение. Я так делаю дома для себя и своих тестовых стендов. Рассказывал про эту настройку на примере Mikrotik.

4️⃣ Поднять собственный прокси для докера, который будет иметь доступ к hub.docker.com. Не важно, как это будет сделано у него: через VPN он будет подключаться, или сразу поднят на VPS за пределами РФ. Вы со своей стороны будете подключаться к этому прокси, а он будет по вашим запросам загружать образы.

Проще всего подобный прокси поднять с помощью Nexus repository. Показываю, как это сделать. Я сразу взял VPS за пределами РФ и развернул там:

# docker volume create --name nexus-data
# docker run -d -p 8081:8081 -p 8082:8082 --name nexus \
-v nexus-data:/nexus-data sonatype/nexus3

В файле /var/lib/docker/volumes/nexus-data/_data/admin.password смотрим пароль от пользователя admin. Идём в веб интерфейс Nexus по IP адресу сервера на порт 8081.

Переходим в раздел управления и добавляем новый репозиторий. Тип выбираем docker (proxy). Если вы сами к прокси будете подключаться через VPN или проксировать к нему запросы через ещё какой-то прокси, типа Nginx или HAproxy, то можно в свойствах репозитория выбрать только HTTP и порт 8082. Это упростит настройку. Рекомендую идти именно по этому пути, чтобы ограничить тем или иным способом доступ к этому репозиторию. Вы же не будете его открывать в общий доступ для всех. В таком случае можно будет установить флаг Allow anonymous docker pull. Не нужно будет на всех хостах аутентификацию проходить.

В качестве Remote Storage можно указать https://registry-1.docker.io. Это докеровский репозиторий. Остальные настройки можно оставить по умолчанию, либо изменить в зависимости от ваших предпочтений.

Также зайдите в раздел Security ⇨ Realms и добавьте Docker Bearer Token Realm. Без него аутентификация в реджистри не будет работать.

После создания репозитория, можно его открыть. Там будет показан его url в зависимости от ваших настроек порта, http и адреса самого Nexus. Теперь его можно использовать в настройках /etc/docker/daemon.json:

{
    "insecure-registries": ["10.105.10.105:8082"],
    "registry-mirrors": ["http://10.105.10.105:8082"]
}

Перезапускайте службу Docker и пробуйте. Можно аутентифицироваться в своём реджистри и что-то загрузить:

# docker login 10.105.10.105:8082
# docker pull nginx

Идём в веб интерфейс Nexus, смотрим обзор репозитория и видим там скачанный образ Nginx.

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

#devops #docker
▶️ Всем хороших тёплых теперь уже летних выходных. Как обычно, ниже те видео из моих подписок за последнее время (обычно беру период в 2 недели), что мне показались интересными. В начале будет самое актуальное 😁 (хотя всех уже наверное задолбала эта тема)

Установка Adguard Home и разблокировка Docker Hub, ClamAV и TMDB
Наглядная инструкция на тему настройки Adguard Home для обхода блокировок с той стороны путём перенаправления трафика к заблокированным доменам на отдельные DNS сервера. А они каким-то образом резолвят ответы так, что блокировка обходится. Интересное решение. Я не знал, что так вообще можно сделать. Не понял техническую реализацию такого обхода.

🔥How To Migrate ZABBIX from MySQL to PostgreSQL
Set up TimescaleDB with Zabbix for Extra Performance
Два полезных видео от Dmitry Lambert на тему перевода Zabbix с MySQL на PostgreSQL, а так же подключения TimescaleDB для увеличения производительности подсистемы хранения метрик.

HTTP API | Компьютерные сети 2024 - 14
Система доменных имен DNS | Компьютерные сети 2024 - 15
Очередные уроки с курса по сетям от Созыкина Андрея.

Установка XPEnology 7.2 на мини ПК с SSD NVME M2
Инструкция по установке XPEnology. Кто не знает, что это такое, рекомендую познакомиться. Я пользуюсь более 10-ти лет. Думаю, что в районе 12-13 лет уже.

Proxmox Backup Server. Установка, настройка, тест, обзор функций.
Очень подробный разбор PBS для создания бэкапов VM и не только в Proxmox. Кто с ним знаком, смотреть особо нет смысла. Кто не знаком, получит полное представление о нём.

Proxmox Automation with Proxmox Helper Scripts!
Обзор известной коллекции Proxmox Helper Scripts, про которую постоянно вспоминают в комментариях к заметка о Proxmox. Да я и сам писал ранее о них. Отдельно хочу упомянуть статью от этого автора у него на сайте про автоматизацию полива грядок на своём участке. Мне было интересно посмотреть, на базе чего это технически реализуется. Стоит всё это немало для нашего уровня жизни.

Выбор VPN для использования в Mikrotik
Очень подробный разбор всех вариантов VPN в Микротике от сертифицированного тренера Козлова Романа. Видео большое (2 часа), так как это лекция, а не смонтированный ролик по теме с выжимкой информации.

Zammad - Open Source Helpdesk and Ticketing software for your MSP, IT or other business needs!
Подробный обзор Zammad - одной из лучших open source систем для организации собственной HelpDesk службы. Я когда-то давно делал про неё заметку.

I automated EVERYTHING in my HomeLab with Kestra
Я не так давно писал про Kestra. Автор видео развернул у себя эту систему и рассказал, как её использует для автоматизации.

Zero-Trust for DevOps! Twingate + Terraform + Kubernetes
Подробное видео по использованию Twingate в Kubernetes. Это инструмент для довольно популярного последнее время направления по организации peer-to-peer соединений в рамках распределённой VPN сети. А так же для подключения внешних клиентов в эти сети.

BEST Server Monitoring with TICK stack setup for FREE!
Очень понравился TICK stack для мониторинга. Никогда раньше о нём не слышал. Это связка в docker-compose нескольких популярных open source продуктов: Telegraf, InfluxDB, Chronograf, Kapacitor. У автора есть серия статей по этой теме. Ссылки в описании к видео.

Без вышки все? Нужно ли высшее образование DevOps, программисту, и др айти специалисту?
Рассуждения автора на актуальную тему. Сам я лично так и не определился, нужно ли это или нет. У меня есть высшее техническое образование практически по моей специальности (математик-программист, были курсы и по администрированию, и по сетям, и по ОС и т.д.). Но не могу сказать, что на практике оно мне сильно помогло в работе. Для старта и получения работы больше помог сертификат Microsoft, который я получил перед окончанием вуза и поиском работы.

#видео
🔝 ТОП постов за прошедший месяц. Все самые популярные публикации по месяцам можно почитать со соответствующему хэштэгу #топ. Отдельно можно посмотреть ТОП за прошлый год.

Пользуясь случаем, хочу попросить проголосовать за мой канал, так как это открывает некоторые возможности по настройке (не только публикацию историй): https://t.me/boost/srv_admin.

📌 Больше всего просмотров:
◽️Связка Grafana + Influxdb + K6 для нагрузочного тестирования (12857)
◽️Песня про системных администраторов (12563)
◽️Комбинация Alt+Shif+3 в терминале bash (11870)

📌 Больше всего комментариев:
◽️Утро на удалёнке (208)
◽️Взлом СДЕК (163)
◽️Перенос ОС на базе Linux с помощью dd (83)

📌 Больше всего пересылок:
◽️Подборка заметок по базовым консольным программам Linux (💥938 не зря пол дня их собирал)
◽️Быстрый запуск Prometheus + Grafana (468)
◽️Сервис zonemaster.net для проверки DNS (449)

📌 Больше всего реакций:
◽️Заметка ко дню победы на 9-е мая (401)
◽️Комбинация Alt+Shif+3 в терминале bash (309)
◽️Взлом СДЕК (263)
◽️Подборка заметок по базовым консольным программам Linux (💥251)
◽️Комбинация Ctrl+s в терминале bash (242)

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

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

#топ
​​Я некоторое время назад сделал подборку основных команд, которые использую при работе с Docker. За последнее время в комментариях увидел несколько команд для Docker Compose, которые сам не знал, но они полезны. Решил сделать такую же подборку и для Docker Compose. Сам их все не помню и либо лезу в свою шпаргалку, либо начинаю гуглить. Я тут не привожу самые очевидные команды, типа start, stop, restart с разными ключами и т.д.

📌 Запустить часть контейнеров:

# docker compose up ct1 ct2

📌 Проверить файл конфигурации. Не знал об этой команде и всегда использовал внешние линтеры. Встроенный намного удобнее.

# docker compose config

📌 Запустить новый контейнер и выполнить в нём команду:

# docker compose run ct1 /scripts/start.js

📌 Запустить команду в работающем контейнере:

# docker compose exec ct1 bash

Поясню, в чём тут разница. На первый взгляд команды похожи. Run удобно использовать для выполнения какой-то команды из контейнера, который постоянно не запущен. Например, там какой-то один бинарник или скрипт, который запускается, отрабатывает и больше он не нужен. Удобно запустить его через run. Новый контейнер запустится, отработает и завершит работу. А exec удобно использовать, когда надо что-то запустить в работающем контейнере. Это аналог docker exec.

📌 Посмотреть все логи или логи контейнера:

# docker compose logs
# docker compose logs ct1

📌 Скопировать файлы из/в контейнер:

# docker compose cp prometheus:/etc/prometheus/prometheus.yml ~/
# docker compose cp ~/prometheus/prometheus.yml prometheus:/etc/prometheus/

Последняя команда скопирует файл только если он лежит в директории с docker-compose.yml, который запущен.

📌 Приостановить и запустить контейнеры:

# docker compose pause
# docker compose unpause

Для приостановки контейнеров используется механизм cgroups freezer. Процессам отправляется команда SIGSTOP для заморозки и SIGCONT для продолжения работы.

📌 Посмотреть список запущенных контейнеров:

# docker compose top

📌 Посмотреть графическую схему всего docker-compose. Используется экспериментальная возможность экспорта содержимого композа в формат программы graphviz:

# docker compose alpha viz --networks --ports --image

Копируем полученный текст и вставляем в любой публичный онлайн редактор graphviz, например этот. Получаем наглядную схему связей контейнеров вместе с сетями и проброшенными портами. Удобно посмотреть на большой конфиг. Например, от mailcow.

📌Выполнить тестовую отработку команды без реальных действий:

# docker compose cp prometheus:/etc/prometheus/prometheus.yml ~/ --dry-run

Можно добавлять --dry-run к любой команде. Актуально для копирования файлов, так как там легко ошибиться с путём или файлом.

Полный набор всех команд и возможностей Docker Compose можно посмотреть в документации:

https://docs.docker.com/compose/reference

#docker
​​Есть популярный вопрос для собеседования администраторов Linux:

Расскажите, как происходит загрузка операционной системы на базе Linux.

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

1️⃣ После запуска сервера или виртуалки, первым делом загружается bios или uefi. Bios ищет загрузчик на локальном или сетевом носителе и запускает его. Uefi может в себе содержать загрузчик. А может и нет. Если вы переносите виртуалку с одного гипервизора на другой, то обязательно учитывайте этот момент, используется bios или uefi. Если второе, то на другом гипервизоре нужно будет воспроизвести настройки uefi, чтобы виртуалка заработала. Если честно, я не совсем понимаю, зачем может быть нужен uefi для виртуальных машин, если не используется secure boot. Проще использовать обычный bios. Пример, как может на практике выглядеть перенос VM с uefi с HyperV на Proxmox.

2️⃣ Дальше загружается загрузчик с диска (не обязательно локального, может и сетевого). Для Linux обычно это GRUB. Я ничего другого не встречал, хотя есть и другие. У загрузчика есть небольшое меню и набор опций, которые иногда пригождаются. Например, если загрузчик по какой-то причине не смог загрузиться с диска или раздела, который у него указан загрузочным. Можно это сделать вручную через grub rescue. Пример, когда я так поступал, чтобы починить загрузку системы.

❗️Важно не забывать про загрузчик, когда вы используете в качестве загрузочного диска mdadm раздел софтового рейда. Загрузчик GRUB должен быть на всех дисках, входящих в рейд массив, чтобы в случае выхода из строя одного диска, вы могли загрузиться с любого другого. Он не реплицируется автоматически, так как mdadm работает на уровне разделов диска, а загрузчик располагается вне разделов.

3️⃣ В зависимости от настроек GRUB, загружается ядро Linux. Оно монтирует специально подготовленный образ файловой системы initramfs, загружаемый в оперативную память. Этот образ содержит все необходимые настройки и драйвера, чтобы загрузиться с нестандартный файловых систем, с LVM, с RAID, по сети и т.д. Там могут быть любые настройки. Можно выводить какую-то заставку, проверять диски и многое другое. Также с него запускается первый процесс init.

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

Иногда после переноса на другое железо, сервер или вируталка могут не запуститься, потому что в initramfs не будет поддержки необходимого железа. В
этом случае initramfs нужно будет пересобрать с поддержкой всего, что необходимо для успешной загрузки. Это можно сделать либо на старом месте, пока система ещё работает, либо загрузиться с какого-то livecd.

4️⃣ После запуска Init начинает загружаться система инициализации и управления службами. Сейчас это почти везде SystemD. Здесь я особо не знаю, что рассказать. С какими-то проблемами если и сталкивался, то это уже отдельные моменты в работающей системе, которые относительно легко исправить, так как чаще всего к системе уже есть удалённый доступ.

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

#linux #grub