ch
Feedback
Bash Days | Linux | DevOps

Bash Days | Linux | DevOps

前往频道在 Telegram

Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.ru

显示更多

📈 Telegram 频道 Bash Days | Linux | DevOps 的分析概览

频道 Bash Days | Linux | DevOps (@bashdays) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 23 748 名订阅者,在 技术与应用 类别中位列第 5 662,并在 俄罗斯 地区排名第 27 962

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 23 748 名订阅者。

根据 29 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -187,过去 24 小时变化为 4,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 29.45%。内容发布后 24 小时内通常能获得 13.31% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 6 993 次浏览,首日通常累积 3 160 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 39
  • 主题关注点: 内容集中在 bashdays, linux, bash, docker, скрипт 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Авторский блог от действующего девопса Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу. Автор: Роман Шубин Реклама: @maxgrue MAX: https://max.ru/bashdays Курс: @tormozilla_bot Блог: https://bashdays.r...

凭借高频更新(最新数据采集于 30 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

23 748
订阅者
+424 小时
-337
-18730
帖子存档
Встречайте новый формат инженерного диалога T-Sync Conf — офлайн-конференция от Группы «Т-Технологии» для опытных инженеров.
Встречайте новый формат инженерного диалога T-Sync Conf — офлайн-конференция от Группы «Т-Технологии» для опытных инженеров. 7 февраля в Москве на площадке TAU соберутся платформенные, security- и дата-инженеры, аналитики, DevOps-, SRE-, CI/CD-, AI-, ML-, R&D- и DX -специалисты. Как все устроено: — Контуры — тематические зоны, каждая из которых раскрывает отдельный слой инженерной реальности: AI, Data, R&D, Security, Platform и другие направления. — Вместо классических докладов — круглые столы, стенды, хакатон, воркшопы и мастер-классы. — Инженерные решения изнутри — возможность посмотреть, как устроены технологии в Т-Банке и других компаниях, и пообщаться напрямую с теми, кто их создает. А еще много практики, интересных знакомств и живых систем. Успейте подать заявку

Я тут это, капчу накрутил. Создавал под один нищенский нишевый проект. 😲 Сможешь пройти? ㅤ Подсказываю — можно накидать bash
+1
Я тут это, капчу накрутил. Создавал под один нищенский нишевый проект. 😲 Сможешь пройти? Подсказываю — можно накидать bash скрипт, который будет эмулировать нажатие F24 и успешно пройти эту проверку через передачу кейкода в xdotool. Ну либо клавиатуру купить как на картинке. Концепт на Bash:
for i in $(seq 1 50); do
  xdotool key F24
  sleep 1
done
Всем хорошей рабочей недели! 🛠 #security #feature #dev 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

В хромо подобных браузерах в «Режиме разработчика» есть интересный инструмент, называется «Sensors». Про это очень мало кто з
+1
В хромо подобных браузерах в «Режиме разработчика» есть интересный инструмент, называется «Sensors». Про это очень мало кто знает, поэтому я принес это тебе. Суть вкладки — можно задать любую геолокацию. По итогу сайты, которые это отслеживают мягко говорю прихуеют. В Sensors можно поменять не только геолокацию (можно свою в пресетах накрутить), но и еще всякие штуки включить — ориентация, тачи а не клики, логическое число CPU. Короче инструмент подменяет реальные значения на кастомные. Например, заходишь на сайт, разрешаешь пробив геолокации и сайт видит тебя, что ты вообще — самурай с японской локализацией браузера. Очень полезно для тестирования приложений, как распределяются воркеры, как работает распараллеливание, обман fingerprinting и т.п.
Мы раньше применяли эту фичу для аналитики фишинговых страниц, которые не честно собирали данные про пользователей и отправляли в бигдату с целью дальнейшей обработки.
Ну и плюсом, для тех кто не знал — на вкладке «Network» есть выпадающий список «Trottling», в нем ты можешь выбрать качество интернет соединения, либо задать своё. Ну и посмотреть как будет вести себя сайт например при скорости в 2G. Вот такие пироги, изучай! 🛠 #services #feature #dev 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

Ну началось… ㅤ Нашел я тебе тут новейший браузер для терминала. Причем не огрызок ебаный вроде lynx, а прям полноценный, с по
Ну началось… Нашел я тебе тут новейший браузер для терминала. Причем не огрызок ебаный вроде lynx, а прям полноценный, с поддержкой графики, скриптов и со всеми современными технологиями. Называется это чудо Brow6el, из пакетов ты его не поставишь, потому что разрабатывает его гикнутый профессор, соответственно тебе придется собрать его самому из исходников. Благо товарищ побеспокоился об ущербных и дал нам Bash скрипты для билда. Поехали собирать:
git clone https://codeberg.org/janantos/brow6el.git

sudo apt install build-essential cmake gitlibsixel-dev libgtk-3-dev libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev libglib2.0-dev

cd /tmp/brow6el
chmod +x download_cef.sh
./download_cef.sh

mkdir -p build
cd build
cmake ..
make -j$(nproc)
Готово! Теперь запускаем:
cd build
./run_brow6el.sh https://linuxfactory.ru
Как это работает? В основе лежит Chromium Embedded Framework (CEF), который рендерит страницы без графического интерфейса. Затем Brow6el преобразует полученное изображение в sixel-графику — формат, который поддерживают многие терминалы. В результате браузер выводит картинку в терминал и обновляет её в реальном времени. Функции: - поддержка мыши и клавиатуры - обычный ввод и прокрутка - вкладки - менеджер загрузок - система закладок - приватный режим - JavaScript-консоль - внедрять скрипты по шаблону URL Фича: ввод мыши возможен как с реальной мыши, так и через виртуальную мышь, управляемую клавиатурой, что позволяет работать даже если у тебя отсутствует мышь.
Короче забавная штука, пользоваться я этим говнищем не буду, но как концепт потыкать вполне себе достойно.
Возможно тебе сгодится для тайлинга или чего-то еще. Забирай в копилку. 🛠 #utilites #linux #terminal 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

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

Почтовый сервер у себя дома Вчера решал интересную задачку. У меня в интернетах крутится собственный почтовый сервер на домене, сервер ежемесячно поджирает стабильно около 2к рублей. Хотя за месяц от силы я получаю 10-20 писем. Избыточно в плане инфраструктуры и затрат? Конечно! Разумно перетащить его к себе на домашний proxmox и избавиться от одной статьи расходов. Во время проектирования миграции, было много вопросов и самый главный — у меня нет белого IP в домашнем сегменте, как быть? DynDNS я ебал, да и с микротиком возиться не хочется. Всё оказалось достаточно просто. Создаем условно за 100 рублей сервер в интернетах с белым IP, втыкаем на него angie с модулем stream, объединяем этот сервер с домашней сетью с помощью netbird или другой технологией. И просто проксипасим все запросы в домашний сегмент.
Про MX, SPF, DKIM писать не буду, все это настраивается отдельно, не сложно.
Звучит логично. Но на практике пришлось поебстись и почитать спецификации всей этой кухни. Конфиг для angie получился такой, он работает при условии наличия модуля stream.
nginx upstream imap_backend { server 100.106.7.8:993; } upstream smtp_backend { server 100.106.7.8:587; } upstream sieve_backend { server 100.106.7.8:4190; } server { listen 993; proxy_pass imap_backend; proxy_timeout 1h; proxy_connect_timeout 30s; } server { listen 587; proxy_pass smtp_backend; proxy_timeout 1h; proxy_connect_timeout 30s; } server { listen 4190; proxy_pass sieve_backend; proxy_timeout 1h; proxy_connect_timeout 30s; } дополнительные порты сам добавь, сюда всё не влезло
Суть тут такая, все запросы на определенные порты, перенаправляются в netbird сеть, а 100.106.7.8 это IP адрес как раз моего LXC контейнера с почтовым сервером в домашнем proxmox. Получилась банальная прокся. Великолепно то, что angie автоматом получает SSL сертификаты и в почтовых программах с этим заморачиваться не нужно, просто указываем домен, порт и всё работает как часы. sieve_backend нужен, чтобы управлять фильтрами в почте, например при получении письма с определенным заголовком, переносить это письмо в другую папку.
Я использую nextcloud mail, и там есть поддержка sieve из коробки. Потыкал еще roundcube для морды, но чёт не зашла, топорная какая-то штука, хотя рабочая.
Да, в роле почтового сервера у меня установлен docker-mailserver. Штука классная, установил, пару тычек выписал в конфиг и оно работает. Морды в ней нет, чисто логическая часть, что-то вроде бекенда. Еще нюанс в конфиге docker-mailserver я прописал SSL сертификаты, эти сертификаты я взял в angie после того как он мне их выдал. В этом плане нужно еще придумать, как организовать передачу этих сертов к себе в proxmox.
environment:
  - SSL_TYPE=manual
  - SSL_CERT_PATH=/tmp/dms/custom-certs/certificate.pem
  - SSL_KEY_PATH=/tmp/dms/custom-certs/private.key
    
volumes:
  - ./ssl:/tmp/dms/custom-certs/:ro
Банально можно через scp копировать, но в идеале поднять vault hashicorp и хранить серты там и по необходимости дергать от туда в любое место.
Ну и важное уточнение, отправлять почту во вне, тебе в нынешних реалиях никто не даст (25 порт на отправку везде заблочен), поэтому используем какой-нибудь relay для этого. Благо есть полно таких, кто дает отправить 10-15к писем в месяц легально и бесплатно. Я пользуюсь этим сервисом несколько лет. Что еще. Возможно будут проблемы с SPF, но если оно тебе в хуй не уперлось, то отключаем в конфиге docker-mailserver - ENABLE_POLICYD_SPF=0. Ну и SIEVE включается там же через ENABLE_MANAGESIEVE=1. Плюсом можешь воткнуть mail archiver и вообще горя не знать. Теперь все твои письки письма под контролем и ты сам себе хозяин этой суеты. Ну и дополнительная экономия на избыточной инфраструктуре. На этом всё, изучай. Концепт я тебе показал, нюансы рассказал, так что дерзай, всё решаемо. 🛠 #selfhosting #proxmox #devops 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

Как-то так, с Наступающим друзья и коллеги 🥳
Как-то так, с Наступающим друзья и коллеги 🥳

Volume VS Bind в Docker Сегодня рассмотрим, как и в каких случаях правильно использовать bind или volume при запуске docker контейнеров. Пересмотрев кучу docker compose файлов, можно сделать вывод — большинство даж не понимают что они делают. Что печально, прожжённые девопс-инженеры продолжают харкодить и творить дичь. Видимо придерживаются методологии — у меня работает, остальное похуй. Вообще есть правило: - Если нужно редактировать файлы руками с хоста, используешь Bind Mount. - Если данные нужны только приложению (БД, логи, кэш) используешь Volumes. Шпаргалка, что есть что:
# Это docker volume, данные хранятся в
# /var/lib/docker/volumes/

volumes:
  - nginx_data:/etc/data

# Это bind mount, данные хранятся рядом
# с файлом docker-compose.yml

volumes:
  - ./data:/etc/data
Ну и никто не запрещает это совмещать, но старайся разделять. Тем более при работе с volumes, в docker есть удобные команды, ну и через midnight commander можешь физически потыкать файлы, при условии если есть рутовый доступ к файловой системе. Самое главное не делай так: Про этот случай я и писал в начале поста, вроде человек 20 лет отрубил в айтишке, а пишет хуйню.
volumes:
  - /home/anus/conf.d:/etc/nginx/cond.f
  - /home/anus/data/logs:/var/log/nginx
Тут идет жесткая привязка к путям и после запуска наступишь на грабли, либо получишь по ебалу от бедолаги который это запустит. Короче так не делай!
Я лично предпочитаю volumes и порой даже конфиги в нем храню, потому что этот volume можно легко примаунтить к любому другому контейнеру и получить доступ к этим файлам. Банально возьмем связку nginx + php-fpm, используем один общий volume и php скрипты корректно выполняются.
Bind mount удобен при разработке и отладки. Ты монтируешь папку с исходным кодом проекта. Правишь код в IDE на хосте и изменения мгновенно подхватываются приложением внутри контейнера. А еще есть полезный флаг: «RO», используется в ситуациях, когда тебе нужно что-бы приложение в контейнере не перезаписывало данные в примонтированном каталоге. Удобно для отладки или для каких-то ограничений. Пример:
services:
  web:
    image: nginx:alpine
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./logs:/var/log/nginx
При всём желании, конфиг nginx.conf нельзя модифицировать из приложения в контейнере. Это можно сделать только на хостовой машине. Второй же bind mount по умолчанию - «RW». Ну и пожелания: - Используйте именованные тома, вместо анонимных томов (которые выглядят как длинный хеш 4f32a...) всегда давайте томам осмысленные имена: db_data, app_uploads - Придерживайся принципа - «Один контейнер — один вольюм». Старайтесь не монтировать один и тот же вольюм в 10 разных контейнеров на запись. Если нужно делиться данными, один контейнер должен быть «владельцем» (RW), а остальные — «потребителями» (RO). - Бэкап: Правило «3-2-1». Volume — это не бэкап, это просто место хранения. Если ты случайно ёбнешь вольюм командой prune, данные исчезнут. Используйте временный контейнер для создания архива:
docker run --rm -v db_data:/data -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
- Docker со временем накапливает «висячие» (dangling) вольюмы — это те, что остались от удаленных контейнеров. Периодически запускай docker volume prune. Оно удалит только те тома, которые не подключены ни к одному контейнеру (включая остановленные). - Разницы в скорости между Bind и Volume почти нет, оба работают напрямую через ядро. Но это зависит от операционной системы, если у тебя винда и 100500 абстракций, то будут тормоза. Вот такие пироги, если есть чё добавить, жду тебя в комментариях. 🛠 #docker #linux #devops 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

Предыдущий пост от Tagd Tagd про курево хорошо зашел, поэтому продолжаем здоровую тему, ведь айтишники тоже люди. И даже я взялся за ум, недавно прошел курс у аддиктолога и трезв уже 51 день, правда «пост абстинентный синдром» неплохо даёт знать о себе. Приятного чтива. Поехали! 🔤🔤🔤🔤🔤🔤🔤 Я тут несколько лет назад совсем завязал пить. Даже пятидесятилетие отмечал трезвым. Если статья наберет хотя бы 70 лайков - продолжу и напишу, как похудел со 130 до 85 кг.
Лицензионное соглашение. Я никого ни к чему не призываю, ничего не рекомендую, ни за что не отвечаю. Просто рассказываю о себе.
По молодости, особенно в студенческие годы я, конечно, выпивал. Ну не то, чтобы каждый день, но мог насинячится очень сильно. Однажды я выпил бутылку водки без закуски и так напился, что проснулся на улице от того, что две тетки щупали мне пульс, поверяя, жив ли я или нет. После этого случая я решил резко сократить потребляемое количество крепкого спиртного до трех рюмок за вечер, и обязательно под хорошую закуску. При этом я сделал неправильный вывод — что лучше пить пиво, чем водку. Пиво пили регулярно, после работы, а в пятницу — так обязательно. Оказывается напиться можно и пивом. Я однажды из-за этого попал в вытрезвитель... Но, то ли метаболизм у меня изменился, то ли пиво было не очень. Однажды вечером я выпил пару бутылок пива (~1 литр в сумме) и сразу лег спать. Проснулся ночью, от того, что чуть не задохнулся. Пиво + апноэ на фоне большого веса очень гремучая смесь. Я не мог продышаться несколько минут. Меня охватил такой ужас, что я навсегда решил завязать с пивом. Просто, чтобы не сдохнуть однажды. Потом, с возрастом, я начал замечать, что даже после небольшого количества алкоголя на утро чувствую себя хуже, чем обычно. Особенно начали раздражать «мешки» под глазами. Короче, я сделал выводы, и сначала уменьшил количество до одной рюмки за вечер, а потом понял, что разницы между одной рюмкой и ни одной — практически нет. А если разницы нет, то и пить незачем. У этого решения, кстати, прекрасный побочный эффект — мои дети, видя что я праздники отмечаю без спиртного, не пили даже в студенчестве. Да и не курили тоже. Видать права английская поговорка: «Не воспитывайте детей — всё равно они будут похожи на вас. Воспитывайте себя…» Жду 70 лайков и продолжим. 🛠 #рабочиебудни 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

Что находится по ту сторону IT-компании одного из крупнейших ритейлеров — и как на самом деле выглядит трансформация изнутри?​ MAGNIT TECH запустил подкаст «По ту сторону»: каждые две недели здесь будут говорить о цифровой трансформации, технологиях, управлении командами и изменениях внутри большой IT-экосистемы на примере ритейла. ​ В первом, новогоднем выпуске — CIO Вячеслав Кубаев делится с Директором по трансформации Семеном Мацепурой, что остается по ту сторону разработки:
- Куда движется стратегия и какие вызовы стоят перед командами в ближайшее время.​ - Что сейчас происходит с брендом MAGNIT TECH и зачем компании понадобился ребрендинг.​ - Какие форматы управления работают лучше и почему матричная структура перестает справляться.​ - Как управлять большим объемом задач и при этом оставаться в ресурсе
Бежим смотреть или слушать

Stop Using Pi-Hole – Technitium DNS Is Better В комментах к посту про «ПИ-ДЫРКУ» ребята посоветовали присмотреться к Techniti
+3
Stop Using Pi-Hole – Technitium DNS Is Better В комментах к посту про «ПИ-ДЫРКУ» ребята посоветовали присмотреться к Technitium DNS. Ну вот я и присмотрелся, прислушался к авторитетному мнению. Ключевым фактором стало — кластеризация и синхронизация из коробки, без велосипедов на Bash скриптах. Да и по интерфейсу нет ебанутых новогодних ёлок и гирлянд. Поднял я это у себя на 2х нодах в докерах, одну на малине, другую в proxmox, ну и на роутере прописал чтобы по DHCP раздавались DNSки в локальную сеть. Поднимается элементарно:
services:
  dns-server:
    container_name: technitium-dns1
    hostname: technitium-dns1
    image: technitium/dns-server:latest
    ports:
      - 5380:5380/tcp # Web console (HTTP)
      - 53:53/udp # DNS service
      - 53:53/tcp # DNS service
      - "53443:53443/tcp" # Web console (HTTPS)
        
      # Optional ports - uncomment as needed:
      # - "853:853/udp"      # DNS-over-QUIC
      # - "853:853/tcp"      # DNS-over-TLS
      # - "443:443/udp"      # DNS-over-HTTPS (HTTP/3)
      # - "443:443/tcp"      # DNS-over-HTTPS (HTTP/1.1, HTTP/2)
      # - "67:67/udp"        # DHCP service

   # environment:
      # - DNS_SERVER_DOMAIN=dns.local
      # - DNS_SERVER_FORWARDERS=10.1.149.10

      # Production options:
      # - DNS_SERVER_ADMIN_PASSWORD=your_secure_password
      # - DNS_SERVER_PREFER_IPV6=false
      # - DNS_SERVER_RECURSION=AllowOnlyForPrivateNetworks

    volumes:
      - technitium-dns-data:/etc/dns
    restart: unless-stopped
    sysctls:
      - net.ipv4.ip_local_port_range=1024 65000
volumes:
  technitium-dns-data:
    driver: local
networks: {}
Если нужны енвы или порты, расскоментируй строчки по потребностям, мне хватило минимальных вмешательств. Затем заходим в морду: http://<IP>:5380 и конфигурируем по необходимости. Зоны добавляются в разделе Zones, после добавления зоны, создаешь «A» запись например для домена nextcloud.local и прописываешь IP своего nginx proxy manager (далее NPM), ну а дальше в NPM разруливаешь на нужные IP адреса и порты. Создаём кластер Чтобы создать кластер, идем во вкладку AdministrationCluster. Создаем кластер, а на второй ноде в этом же разделе жмем кнопку Join Cluster. Заполняем очевидные поля, явки, пароли и радуемся синхронизации. Теперь при добавлении новой зоны на первой ноде, эта зона улетит на вторую ноду. Главное не забыть выбрать Catalog Zone при добавлении зоны. Никаких танцев с бубном. Ааа.. Есть танцы, возможно ты столкнешься с ошибкой, что 53 порт уже занят. Это нормально, фиксим:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo rm /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
Если у тебя какие-то другие резолверы стоят, то:
sudo systemctl stop dnsmasq
sudo systemctl disable dnsmasq
sudo systemctl stop bind9
sudo systemctl disable bind9
Собственно на этом всё. Базу я тебе показал, дальше сам. А всем кто привел меня к этому решению - спасибо и премного благодарен! Скрасил воскресный вечер не за кружкой бухла, а за полезным занятием. Изучай! 🛠 #selfhosting #proxmox #devops 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

Когда подарок — это аптайм 100% Я тут рассчитывал потратить Новогоднюю премию на миграцию инфраструктуры в Selectel. Но всегда есть - НО… ШЕФ - твоя премия потрачена на корпоратив, а еще мне на Мальдивы надо смотаться по делам. Так что, извини. Классика! Чё делать? Правильно! Написать письмо Деду морозу Тирексу и поныть:
Дорогой Тирекс, пишет тебе мальчик Рома, мне 40 лет и весь год я себя вёл очень хорошо, учился на одни пятерки, убирал гавно за котом и помогал маме. На новый год я хочу получить выделенный сервер с 32 гигабайтами оперативной памяти и жирненьким рейдом + S3 хранилище. На этом сервере я буду крутить свой «очень полезный» стартап и помогать людям. Сейчас у меня всё крутится на raspberry pi 3 и ресурсов не хватает. Буду рассчитывать на твою помощь и поддержку. Надеюсь ради меня ты пожертвуешь Мальдивами. Спасибо, до свидания, всего хорошего, адью!
Отправляем это письмо (но со своей историей) через форму до 30 января 2026 и если твой проект действительно искренний и нужный, то в течение 10 дней ты получишь: - до 30к бонусов на облачные сервисы - кешбэк до 1кк бонусов от расходов - до 1кк бонусов на бесплатный переезд в Selectel
Количество бонусы зависит от проекта. Нюанс — получить поддержку могут только юридические лица и ИП.
Короче предложение довольно вкусное и я закинул заявку, чем чёрт не шутит. Главное верить в чудо и оно обязательно сбудется. Напиши письмо прямо сейчас: https://slc.tl/2008u С Наступающим ребят! 🎄🎄🎄 Реклама, АО «Селектел», erid: 2VtzqwVEWdQ

Синхронизируем настройки Pi-Hole между инстансами. У меня в сети живет несколько нод с pi-hole, которые раскиданы по разным устройствам (proxmox, raspberry pi и т.п.). И сразу встала необходимость, чтобы все ноды с pi-hole имели одинаковые настройки.
Pi-hole — это сетевой DNS‑фильтр и блокировщик рекламы с открытым исходным кодом. Он работает как свой DNS‑сервер, перехватывает DNS‑запросы от устройств в локальной сети и блокирует домены из списков рекламы, трекеров и вредоносных сайтов, возвращая «пустой» ответ вместо IP‑адреса рекламного ресурса.
Стратегия такая, одна нода будет master, где производятся все основное настройки, затем все эти настройки раскатываются на другие ноды (slave). Раньше такой кейс разруливали с помощью Orbital Sync, Nebula Sync и т.п. Но одно сдохло, другое работает через хуй-пизда-копыто. Короче нужно рабочее решение. Пишем свой велосипед
#!/usr/bin/env bash

set -euo pipefail

PRIMARY_PIH_DIR="/etc/pihole"

SECONDARY_USER="root"
SECONDARY_PIH_DIR="/etc/pihole"
SECONDARY_HOSTS=(
  "192.168.10.97"
  "192.168.10.98"
  "192.168.10.99"
)

RSYNC_EXCLUDES=(
  "--exclude=pihole-FTL.db"
  "--exclude=macvendor.db"
  "--exclude=*.log"
)

echo "[pihole-sync] $(date): start"

for host in "${SECONDARY_HOSTS[@]}"; do
  echo "[pihole-sync] ---- host ${host} ----"

  rsync -az \
    "${RSYNC_EXCLUDES[@]}" \
    "${PRIMARY_PIH_DIR}/" \
    "${SECONDARY_USER}@${host}:${SECONDARY_PIH_DIR}/"

  echo "[pihole-sync] ${host}: restart dns"
  ssh "${SECONDARY_USER}@${host}" "pihole restartdns >/dev/null 2>&1" || \
    echo "[pihole-sync] ${host}: FAILED to restart dns"

done

echo "[pihole-sync] $(date): done"
В SECONDARY_HOSTS забиваем айпишники slave инстансов, этакий массив. На этом настройка скрипта закончена. Весь лишний мусор вроде логов и статистики синхронизироваться не будет. Сохраняем, чмодим, кидаем в крон (а лучше в systemd с таймерами):
Про таймеры подробно писал тут и тут.
crontab -e
*/5 * * * * /usr/local/sbin/pihole-sync.sh >> /var/log/pihole-sync.log 2>&1
Не забываем прокинуть ssh ключи с master на slave, чтобы скрипт не уперся рогом в логин и пароль. Вроде мелочь, а полезная, да еще и на bash. Хороших тебе предстоящих выходных и береги себя! 🛠 #bash #linux #devops 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

💥 MySQL Multi-Source Replication: как построить мультимастер-БД, которая не падает 23 декабря в 20:00 мск — бесплатный урок
💥 MySQL Multi-Source Replication: как построить мультимастер-БД, которая не падает 23 декабря в 20:00 мск — бесплатный урок курса «Инфраструктура высоконагруженных систем» Устали от падения мастера? Переходите от Master-Slave к мультимастеру, где запись идёт на несколько нод одновременно, а система переключается при сбое за секунды. 📌 Что будет: — Эволюция репликации: от Master-Slave к Multi-Master — Пошаговая настройка Multi-Source Replication — Автоматический failover через Keepalived (с демо!) — Стратегии для highload: горизонтальное масштабирование записи 🎯 После вебинара сможете: — Развернуть Multi-Source/Multi-Master MySQL — Настроить автоматическое переключение мастеров — Избегать конфликтов записи — Проектировать отказоустойчивые БД Особенно полезно админам Linux, DevOps и архитекторам. 👉 Регистрация открыта: https://vk.cc/cSohiy Вебинар приурочен к старту курса «Инфраструктура высоконагруженных систем». Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Тут скоро Новый Год. И многие люди начинают давать себе обеты - вот, с нового года начну новую жизнь. Брошу курить, брошу пить, или сброшу лишний вес. 🔤🔤🔤🔤🔤🔤🔤
«Бросить курить легко. Я делал это сотни раз» Марк Твен.
Вот, к этой дате я и решил поделиться с народом собственным опытом. Для начала расскажу, как я бросил курить. Если статья наберет хотя бы 70 лайков - продолжу и напишу, как я бросил пить и похудел со 130 до 85 кг.
Лицензионное соглашение. Я никого ни к чему не призываю, ничего не рекомендую, ни за что не отвечаю. Просто рассказываю о себе.
Я бросил курить в конце августа 1998 года. К тому времени у меня был многолетний опыт курильщика. Да и бросал я уже не первый раз. Я решил завязать с куревом, потому что у меня начало ухудшаться здоровье. Я начал кашлять по утрам. Во рту была такая вонь, как-будто кошки нагадили. Да, совсем забыл напомнить, это были девяностые, с деньгами и куревом было плохо, поэтому курил я "Приму". И за день выкуривал 2 пачки. Прикиньте, какую дозу всякой дряни я получал. Ошибки, которые я делая раньше, пытаясь бросить: 1. Снижал дозу. Довел до одной сигареты в НЕДЕЛЮ!!! Пофигу. Ты или куришь или нет. Нельзя немного курить, немного пить и быть немного беременной. 2. На период бросания, нужно завязать с употреблением алкоголя. Он снимает тормоза, и я возобновлял пагубную привычку именно по-пьяни. 3. Друзей, которые знают, что Вы пытаетесь бросить, и которые предлагают покурить, нужно посылать далеко и надолго. Друзья - те кто поддерживают, а не те, кто помогают кожух пропить. Я бросил сразу. Одномоментно. Мне было очень плохо. Мне было так плохо, что через два месяца мне еще очень сильно хотелось курить, а через 6 месяцев хотелось периодически. Девяностые, никаких никотинозаменителей, пластырей, таблеток. Все на морально-волевых. Вместо сигарет жевал жевательную резинку, и делал дыхательную гимнастику:
Если очень сильно хочется курить - делаешь несколько глубоких и быстрых вдохов-выдохов и задерживаешь дыхание на полном вдохе. Это называется гипервентиляция легких. После задержки дыхания "организм плывет". Ощущение очень похожее, на выкуривание сигареты. С той лишь разницей, что от такой дыхательной гимнастики очень просто избавиться.
В первые дни я так делал примерно через каждые 20-30 минут, что соизмеримо с периодом перекуров. Постепенно необходимость в этом отпала и я, наконец-то понял, что у меня есть сила воли. И этот ресурс я использовал для дальнейших самоограничений. Я до сих пор помню, как мне было тяжело бросать, и именно это в нескольких тяжелых жизненных случаях остановило меня от возобновления идиотской привычки. Ну, еще и понимание, что когда я курил, то расплачивался деньгами и здоровьем, а какой-то директор табачной фабрики попал себе машины, дома, а возможно и яхты. Жду 70 лайков и продолжим. 🛠 #рабочиебудни 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

Сегодня будем хакать Proxmox и создавать работоспособный кластер из 2х нод. ㅤ Ты скажешь - фии… Легкотня! Да, добавить ноду в
+2
Сегодня будем хакать Proxmox и создавать работоспособный кластер из 2х нод. Ты скажешь - фии… Легкотня! Да, добавить ноду в кластер легко, но если у тебя всего 2 ноды в кластере, ни о каком кворуме речь не идет. Кворум предполагает наличие 3х нод. Либо Q-Device сервера. Если выключить одну из нод, то например при попытке сделать бекапы ты получишь ошибку — твой кластер пошел по пизде, сначала пофикси эту проблему и лишь потом я сделаю бекапы. Да, если кластер развален, то файловая система переходит в режим R/O. И хуй ты че с этим сделаешь.
Если кластер потерял кворум, /etc/pve автоматически монтируется только для чтения, и никакие chmod/chown/chattr не помогут, т.к. это не обычный ext4/xfs.
Прям вызов! И че делать? Очевидно вернуть ноду в кластер и произвести некие манипуляции пока кластер не развален. Мыж с тобой не пальцем деланные, давай наебем хакнем эту поеботу. И подтасуем результаты кворума в нашу пользу. Сразу скажу — так делать нельзя! Включаем ноду, чтобы кластер восстановился. Заходим по ssh на proxmox ноду, которая включена 24/7 (у меня она называется pvx).
vim /etc/pve/corosync.conf
Да, предварительно не забудь забекапить все файлы, в которые вносишь изменения. Вообще никогда не забывай этого делать, особенно на проде. В будущем это спасет тебе жизнь и сохранит кучу нервных клеток.
В файле видим описания кластера:
nodelist {
  node {
    name: pvx
    nodeid: 1
    quorum_votes: 1
    ring0_addr: 192.168.10.60
  }
  node {
    name: wenom
    nodeid: 2
    quorum_votes: 1
    ring0_addr: 192.168.10.55
  }
}
Видим quorum_votes. Это и есть ключевая опция для хака. Для pvx ноды я меняю 1 на 2. То есть искусственно присваиваю два голоса без кворума. И ниже в блоке totem меняем параметр config_version: c 2 на 3. Все! Ничего перезагружать не нужно. Чтобы проверить, запускаем:
pvecm status

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          2 192.168.10.60 (local)
0x00000002          1 192.168.10.55
И видим что нода pvx получила 2 голоса. Теперь если выключить вторую ноду. Файловая система не перейдет в режим R/O и всё будет работать, как и раньше с одной нодой. Поздравляю, теперь ты можешь прокачать свою домашнюю лабораторию и выключать ненужные узлы кластера как тебе вздумается. Развлекайся! 🛠 #selfhosting #proxmox #devops 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

🔥 OTUS открывает набор на мощный highload-курс «Инфраструктура высоконагруженных систем» Старт: 30 января 2026 Длительность:
🔥 OTUS открывает набор на мощный highload-курс «Инфраструктура высоконагруженных систем» Старт: 30 января 2026 Длительность: 5 месяцев За 5 месяцев вы построите настоящий отказоустойчивый highload-кластер под миллионы пользователей и получите самый востребованный стек 2025–2026: Terraform • Pacemaker + Corosync • Nginx/HAProxy под миллион RPS • Kubernetes (очень глубоко) • OpenStack • Ceph • SaltStack • Puppet • MySQL/PostgreSQL Cluster • Kafka • Elasticsearch Преподаватели — действующие архитекторы сверхбольших инфраструктур. Финальный проект сразу идёт в портфолио и становится вашим главным козырем на собеседованиях. Пройдите бесплатное вступительное тестирование прямо сейчас → подтвердим ваш уровень и забронируем место на курсе 👉Пройти тест и забронировать место: https://vk.cc/cSogME Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Если попал в царство циклопов, прикрой один глаз! Сколько бы мы не плевались в сторону ИИ, всё же некоторые инструменты реально облегчают повседневную рутину.
Много раз говорил и еще раз повторюсь — мир не стоит на месте, инструментарий развивается и расширяется. Вчера мы закручивали саморез отверткой, сегодня есть шуруповерт. Так зачем отказываться если инструмент реально сэкономит твоё время и силы.
Если ты использовал ИИ и получил от него ответ — вникни в ответ, разберись почему так и что значит каждая строчка кода. В таком контексте нет ничего зазорного. Не нужно извиняться если ты прибегнул к помощи бездушной твари, ты сократил время на гуглежку. Ну а если ты просто копипастишь — ты долбаёб, который через месяц деградирует в дерево.
Раньше все плевались от nginx и предпочитали apache, сейчас nginx плотно вошел в каждую инфраструктуру и apache в хуй не упёрся. В любой вакансии будет — навыки конфигурирования nginx.
Каким ИИ пользуюсь я? Всё банально: 1. Perplexity (бесплатный PRO на год) 2. GPT (бесплатный GO для студентов) Этого хватает с головой, чтобы покрыть 99% вопросов. Первая полностью заменяет мне поисковые системы, в любом месте нажал ctrl+alt+p, забил запрос и получил краткую выжимку из 100500 источников. Да, там есть куча другого функционала, но я пользуюсь ей как поисковиком, уж больно нравится мне получать саммари и не бегать по ссылкам. Но опять-же если в ответе не уверен, лучше перепроверь. Вторая, ну тут и рассказывать нечего, в основном домашки ребенку решаю, потому что в программе начальных классов — какой-то пиздец, как будто собеседование в компанию проходишь. Так сколько блядь люков? Помимо домашек оно у меня по API подключено к Obsidian, на основе постов генерю варианты заголовков и описаний для блога. Удобно, выдумывать ничего не нужно, нажал хоткей и получил 50 вариантов, выбрал, отредачил под себя, опубликовал. Сколько плачу за всё? Нисколько! Всё решается первоначальной гуглежкой и оформлением акционных подписок. Допустим зашел на GPT с Индии и получил 1 год на тарифе GO для студентов.
Спиздел. Плачу за API запросы для Obsidian, но год назад забросил 10$ и на балансе сейчас 8$ осталось, капля в море.
Да, порой нужно потратить 15-30 минут, но оно того стоит. Просто поищи на ютубе — Как получить тариф GO для GPT или PRO для perplexity. А если уж совсем упарываться не хочется, то на авито за пару минут тебе всё оформят на твой аккаунт, причем за миску супа. Спрос рождает предложения. Выводы НЕ КОПИПАСТИ с GPT! Вникай в ответы, перепроверяй если не уверен или есть сомнения. А какими ИИ пользуешься ты? Поделись в комментариях, будет интересно. 🛠 #рабочиебудни #services 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog

Что важно знать про DevSecOps и защиту контейнеров прямо сейчас? Разбор — в подкасте «DevSecOps — от кода до контейнера». Обсудим: 🌟когда команде пора задуматься о внедрении DevSecOps, а когда можно чуть притормозить 🌟какие технологии помогают встроить безопасность в разработку без лишней головной боли 🌟чем хороша контейнеризация и какие встречаются подводные камни при защите контейнерных сред 🌟как донести до руководства, что DevSecOps — это не «пустая трата денег», а инвестиция в снижение рисков 🌟Без воды: реальные кейсы и практические советы. 🌟Спикеры — руководители отделов безопасной разработки Crosstech Solutions Group и «Инфосистемы Джет». Смотрите подкаст на площадках: 🌟 VK Видео 🌟 Rutube 🌟 Я.музыка 🌟 Сайт Crosstech Solutions Group Реклама. ООО «КРОССТЕХ СОЛЮШНС ГРУПП», ИНН: 7722687219, Erid: 2VtzqxKxejC

Как расшифровать бекапы TrueNAS У меня в домашней лаборатории self-hosted торчит TrueNas и по шедуллеру заливает бекапы критичных файлов по протоколу webdav в облако. В облаке каждый файл имеет расширение .bin, если скачать к себе на машину такой файл, то внутри будет мусор. И тут возник логичный вопрос, если мой TrueNas пойдет по пизде, как мне забрать из бекапа файлы и расшифровать их без участия TrueNas? Оказалось все довольно просто. Под капотом TrueNas установлен rclone, который и выполняет задачу резервирования данных. Получается имея на своей локальной машине rclone теоретически можно забрать шифрованные бекапы и легко их расшифровать. Давай попробуем реализовать задуманное. Бекапы шифруются с помощью Encryption Password и Encryption Salt, эти параметры задаются в TrueNas, соответственно нам понадобятся эти данные. Для начала расшифруем один файл, посмотрим как всё проёдет. Зашифрованный бекап файла я скачал к себе на машину и положил в папку /tmp/encrypted/file.jpg.bin Если файл открыть на просмотр, увидим такое:
RCLONE......hx^..]]NN..
..=._.S...4:..b...P...3`.^u0yO  Ҭ..)..fkMP...K..
Пишем конфиг ~/.config/rclone.conf:
[cryptbackup]
type = crypt
remote = /tmp/encrypted
filename_encryption = off
directory_name_encryption = false
password = ZK6U8CZRqP-vT5fK0HwjO_Q
password2 = -GGulJpRclHETHVhp1MMs
Этот конфиг сгенерился автоматически, после запуска rclone config и заполнения данных. Чтобы получить зашифрованный пароль из командной строки, воспользуйся командой:
rclone obscure "<password>"
rclone obscure "<salt>"
Потом эти данные можешь подставить в конфиг.
Если в TrueNas включено шифрование имен, то в параметре filename_encryption нужно прописать standard. Не проебись, на конце буква «d».
Проверяем:
rclone ls cryptbackup:

1974875 file.jpg
Отлично! Что-то сработало. Давай наконец-то расшифруем этот файл:
rclone copy cryptbackup: /tmp/decrypted
Всё, задача решена, в папке /tmp/decrypted лежит расшифрованная картинка и прекрасно открывается. Аналогично поступаешь и с другими файлами. Тут суть закинуть весь зашифрованный бекап в папку /tmp/encrypted и одной командой copy все прекрасно расшифруется в /tmp/decrypted сохраняя структуру папок. По итогу имеем удобный и практичный способ восстанавливать такие штуки без участия TrueNas. А так-же можно проверять такие бекапы после заливки их в облако, чтобы точно быть уверенным, что бекап точно рабочий. Концепт проверки: автоматически забрать несколько контрольных файлов из бекапа, расшифровать, сверить внутренности с шаблоном и при проблемах — плюнуть в графану или в телегу алертом. На этом всё. Хороших тебе выходных!
🔥 Да, забыл, до 01.01.26 действует промокод FACTORY_26 (1000р) на первый месяц в Linux Factory.
🛠 #selfhosting #backup #crypt 💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog