Сегодня затронем довольно сложную тему bash: Использование групп в регулярных выражениях.
ㅤ
Обычно для регулярок используют
🔤 🔤 🔤 🔤 🔤 🔤 🔤
Приведу простой пример:
Первый
Второй
Разберем подробнее:
Обратите внимание — регулярку нельзя заключать в кавычки, иначе она превратиться втыкву строку.
Напомню:
Первая группа
Вторая группа
Третья и четвёртая группы
➡️ И теперь самое главное:
Если строка (в данном случае имя файла) соответствует
Все остальные группы помещаются в следующие элементы массива. Получаем что-то типа:
По итогу — с помощью одного
Ну, на всякий случай напомню, если вдруг решите дни или месяцы использовать в математических операциях — придется избавиться от ведущих нулей, поскольку числа, начинающиеся на «0» bash считает восьмеричными.
Для перфекционистов скажу, что данная регулярка не является строгой по отношению к датам, но в большинстве практических скриптов ее можно использовать.
Всем кода без багов.
🛠 #bash
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Обычно для регулярок используют
grep. Он очень функциональный и быстрый, но иногда использование встроенных в bash регулярок может здорово упростить скрипты.Приведу простой пример:
#!/bin/bash
declare PREF="FILE"
#создаем 10 файлов с "плавающим" префиксом
for FILE in "202512"{01..10};do
touch ${PREF:$RANDOM%4}${FILE}".txt"
done
# Выбираем только файлы с префиксом из двух или трех символов и "даты"
for FILE in *;do
if [[ $FILE =~ (.{2,3})([0-9]{4})([0-9]{2})([0-9]{2}) ]];then
# echo $FILE
declare -p BASH_REMATCH
fi
done
Первый
for создает 10 тестовых файлов c «случайным» префиксом (1-4 последние буквы слова FILE).Второй
for — основной выбирает нужные нам файлы. А что именно нам нужно — задает регулярное выражение. Разберем подробнее:
(.{2,3})([0-9]{4})([0-9]{2})([0-9]{2})Обратите внимание — регулярку нельзя заключать в кавычки, иначе она превратиться в
Напомню:
. - заменяет любой символ, кроме перевода строки
{2,3} - определяет количество захватываемых символов
[0-9] - любой символ в диапазоне 0-9
() - захватываемая группа
Первая группа
(.{2,3}) — Захватывает от 2 до 3 любых символов {2,3} указывает минимальное и максимальное количество.Вторая группа
([0-9]{4}) — Захватывает ровно 4 цифры (0–9).Третья и четвёртая группы
([0-9]{2})([0-9]{2}): Каждая захватывает ровно 2 цифры.Если строка (в данном случае имя файла) соответствует
regexp - захваченный результат помещается в массив BASH_REMATCH с индексом 0Все остальные группы помещаются в следующие элементы массива. Получаем что-то типа:
declare -a BASH_REMATCH=([0]="LE20251204" [1]="LE" [2]="2025" [3]="12" [4]="04")
...
По итогу — с помощью одного
if мы получили: Префикс файла (1), год (2), месяц (3) и день (4).Ну, на всякий случай напомню, если вдруг решите дни или месяцы использовать в математических операциях — придется избавиться от ведущих нулей, поскольку числа, начинающиеся на «0» bash считает восьмеричными.
Для перфекционистов скажу, что данная регулярка не является строгой по отношению к датам, но в большинстве практических скриптов ее можно использовать.
Всем кода без багов.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, сегодня будем учить zsh автоматически перечитывать конфиг после изменения.
ㅤ
Каждый раз заёбисто делать
Поэтому открываем
Теперь после каждого изменения файла
Как это работает:
Нюанс:
Проблема в том, что zsh -n проверяет только синтаксис (скобки, конструкции), но не выполнение команд. Имей это ввиду.
Если сделать так:
То всё пройдёт замечательно. Ну ты понял к чему я клоню.
Тема прикольная, экспериментируй.
🛠 #bash #linux #shell
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Каждый раз заёбисто делать
source ~/.zhsrc после очередных изменений, да и плагинов я актуальных найти так и не смог.По-хорошему можно было бы и плагин для сообщества накидать, но я ленивая скотина и обошелся Bash скриптом.
Поэтому открываем
~/.zshrc и пихаем в него такое:ZSH_LAST_MOD=$(stat -c %Y ~/.zshrc 2>/dev/null || stat -f %m ~/.zshrc)
precmd() {
local new_mod=$(stat -c %Y ~/.zshrc 2>/dev/null || stat -f %m ~/.zshrc)
if [[ $new_mod != $ZSH_LAST_MOD ]]; then
if zsh -n ~/.zshrc; then
source ~/.zshrc
ZSH_LAST_MOD=$new_mod
echo "🔄 .zshrc auto-reloaded (OK)"
else
echo "⚠️ .zshrc has syntax errors — reload skipped"
fi
fi
}
Теперь после каждого изменения файла
~/.zshrc конфиг будет автоматически перечитан. НО перечитан он будет только после проверки, если ты своими кривыми руками где-то накосорезил — идешь нахуй. Логично? Логично!Как это работает:
1. Сохраняет timestamp последней модификации .zshrc
2. precmd() — специальная функция zsh, которая автоматически вызывается перед каждым выводом prompt (после любой команды или Enter). Вызывается незаметно, идеально для фоновых проверок без вмешательства в работу.
3. Дальше логика, сравнивает timestamps — если .zshrc отредактирован и сохранен, переходит к проверке.
4. zsh -n файл — проверяет синтаксис без выполнения (no-execute mode). Возвращает 0 при успехе, > 0 при ошибках (дубликаты, незакрытые скобки и т.п.).
5. Ну а дальше сообщает тебе, все ок или идешь нахуй.
Нюанс:
echo 'syntax error' >> ~/.zshrc
/home/user/.zshrc:226: command not found: syntax
🔄 .zshrc auto-reloaded (OK)
Проблема в том, что zsh -n проверяет только синтаксис (скобки, конструкции), но не выполнение команд. Имей это ввиду.
Если сделать так:
echo '# syntax error' >> ~/.zshrc
🔄 .zshrc auto-reloaded (OK)
То всё пройдёт замечательно. Ну ты понял к чему я клоню.
Тема прикольная, экспериментируй.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 46
Как расшифровать бекапы TrueNAS
У меня в домашней лаборатории self-hosted торчит TrueNas и по шедуллеру заливает бекапы критичных файлов по протоколу webdav в облако.
ㅤ
В облаке каждый файл имеет расширение .bin, если скачать к себе на машину такой файл, то внутри будет мусор.
И тут возник логичный вопрос, если мой TrueNas пойдет по пизде, как мне забрать из бекапа файлы и расшифровать их без участия TrueNas?
Оказалось все довольно просто. Под капотом TrueNas установлен rclone, который и выполняет задачу резервирования данных. Получается имея на своей локальной машине rclone теоретически можно забрать шифрованные бекапы и легко их расшифровать.
Давай попробуем реализовать задуманное.
Бекапы шифруются с помощью
Для начала расшифруем один файл, посмотрим как всё проёдет.
Зашифрованный бекап файла я скачал к себе на машину и положил в папку
Если файл открыть на просмотр, увидим такое:
Пишем конфиг
Этот конфиг сгенерился автоматически, после запуска
Чтобы получить зашифрованный пароль из командной строки, воспользуйся командой:
Потом эти данные можешь подставить в конфиг.
Проверяем:
Отлично! Что-то сработало. Давай наконец-то расшифруем этот файл:
Всё, задача решена, в папке
Аналогично поступаешь и с другими файлами. Тут суть закинуть весь зашифрованный бекап в папку
По итогу имеем удобный и практичный способ восстанавливать такие штуки без участия TrueNas.
А так-же можно проверять такие бекапы после заливки их в облако, чтобы точно быть уверенным, что бекап точно рабочий.
Концепт проверки: автоматически забрать несколько контрольных файлов из бекапа, расшифровать, сверить внутренности с шаблоном и при проблемах — плюнуть в графану или в телегу алертом.
На этом всё. Хороших тебе выходных!
🛠 #selfhosting #backup #crypt
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
У меня в домашней лаборатории 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.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
10 40
Если попал в царство циклопов, прикрой один глаз!
ㅤ
Сколько бы мы не плевались в сторону ИИ, всё же некоторые инструменты реально облегчают повседневную рутину.
Если ты использовал ИИ и получил от него ответ — вникни в ответ, разберись почему так и что значит каждая строчка кода. В таком контексте нет ничего зазорного. Не нужно извиняться если ты прибегнул к помощи бездушной твари, ты сократил время на гуглежку.
Ну а если ты просто копипастишь — ты долбаёб, который через месяц деградирует в дерево.
Каким ИИ пользуюсь я?
Всё банально:
1. Perplexity (бесплатный PRO на год)
2. GPT (бесплатный GO для студентов)
Этого хватает с головой, чтобы покрыть 99% вопросов.
Первая полностью заменяет мне поисковые системы, в любом месте нажал
Да, там есть куча другого функционала, но я пользуюсь ей как поисковиком, уж больно нравится мне получать саммари и не бегать по ссылкам. Но опять-же если в ответе не уверен, лучше перепроверь.
Вторая, ну тут и рассказывать нечего, в основном домашки ребенку решаю, потому что в программе начальных классов — какой-то пиздец, как будто собеседование в компанию проходишь. Так сколько блядь люков?
Помимо домашек оно у меня по API подключено к Obsidian, на основе постов генерю варианты заголовков и описаний для блога. Удобно, выдумывать ничего не нужно, нажал хоткей и получил 50 вариантов, выбрал, отредачил под себя, опубликовал.
Сколько плачу за всё?
Нисколько! Всё решается первоначальной гуглежкой и оформлением акционных подписок. Допустим зашел на GPT с Индии и получил 1 год на тарифе GO для студентов.
Да, порой нужно потратить 15-30 минут, но оно того стоит. Просто поищи на ютубе — Как получить тариф GO для GPT или PRO для perplexity.
А если уж совсем упарываться не хочется, то на авито за пару минут тебе всё оформят на твой аккаунт, причем за миску супа. Спрос рождает предложения.
Выводы
НЕ КОПИПАСТИ с GPT! Вникай в ответы, перепроверяй если не уверен или есть сомнения.
А какими ИИ пользуешься ты? Поделись в комментариях, будет интересно.
🛠 #рабочиебудни #services
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Сколько бы мы не плевались в сторону ИИ, всё же некоторые инструменты реально облегчают повседневную рутину.
Много раз говорил и еще раз повторюсь — мир не стоит на месте, инструментарий развивается и расширяется. Вчера мы закручивали саморез отверткой, сегодня есть шуруповерт. Так зачем отказываться если инструмент реально сэкономит твоё время и силы.
Если ты использовал ИИ и получил от него ответ — вникни в ответ, разберись почему так и что значит каждая строчка кода. В таком контексте нет ничего зазорного. Не нужно извиняться если ты прибегнул к помощи бездушной твари, ты сократил время на гуглежку.
Ну а если ты просто копипастишь — ты долбаёб, который через месяц деградирует в дерево.
Раньше все плевались от 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! Вникай в ответы, перепроверяй если не уверен или есть сомнения.
А какими ИИ пользуешься ты? Поделись в комментариях, будет интересно.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня будем хакать Proxmox и создавать работоспособный кластер из 2х нод.
ㅤ
Ты скажешь - фии… Легкотня! Да, добавить ноду в кластер легко, но если у тебя всего 2 ноды в кластере, ни о каком кворуме речь не идет. Кворум предполагает наличие 3х нод. Либо Q-Device сервера.
Если выключить одну из нод, то например при попытке сделать бекапы ты получишь ошибку — твой кластер пошел по пизде, сначала пофикси эту проблему и лишь потом я сделаю бекапы.
Да, если кластер развален, то файловая система переходит в режим R/O. И хуй ты че с этим сделаешь.
Прям вызов! И че делать? Очевидно вернуть ноду в кластер и произвести некие манипуляции пока кластер не развален.
Мыж с тобой не пальцем деланные, давайнаебем хакнем эту поеботу. И подтасуем результаты кворума в нашу пользу.
Сразу скажу — так делать нельзя!
Включаем ноду, чтобы кластер восстановился. Заходим по ssh на proxmox ноду, которая включена 24/7 (у меня она называется
В файле видим описания кластера:
Видим
И ниже в блоке
Чтобы проверить, запускаем:
И видим что нода
Поздравляю, теперь ты можешь прокачать свою домашнюю лабораторию и выключать ненужные узлы кластера как тебе вздумается.
Развлекайся!
🛠 #selfhosting #proxmox #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Ты скажешь - фии… Легкотня! Да, добавить ноду в кластер легко, но если у тебя всего 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 и всё будет работать, как и раньше с одной нодой.Поздравляю, теперь ты можешь прокачать свою домашнюю лабораторию и выключать ненужные узлы кластера как тебе вздумается.
Развлекайся!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11 55
Тут скоро Новый Год. И многие люди начинают давать себе обеты - вот, с нового года начну новую жизнь. Брошу курить, брошу пить, или сброшу лишний вес.
🔤 🔤 🔤 🔤 🔤 🔤 🔤
Вот, к этой дате я и решил поделиться с народом собственным опытом. Для начала расскажу, как я бросил курить.
ㅤ
Если статья наберет хотя бы 70 лайков - продолжу и напишу, как я бросил пить и похудел со 130 до 85 кг.
Я бросил курить в конце августа 1998 года. К тому времени у меня был многолетний опыт курильщика. Да и бросал я уже не первый раз.
Я решил завязать с куревом, потому что у меня начало ухудшаться здоровье. Я начал кашлять по утрам. Во рту была такая вонь, как-будто кошки нагадили.
Да, совсем забыл напомнить, это были девяностые, с деньгами и куревом было плохо, поэтому курил я "Приму". И за день выкуривал 2 пачки. Прикиньте, какую дозу всякой дряни я получал.
Ошибки, которые я делал раньше, пытаясь бросить:
1. Снижал дозу. Довел до одной сигареты в НЕДЕЛЮ!!! Пофигу. Ты или куришь или нет. Нельзя немного курить, немного пить и быть немного беременной.
2. На период бросания, нужно завязать с употреблением алкоголя. Он снимает тормоза, и я возобновлял пагубную привычку именно по-пьяни.
3. Друзей, которые знают, что Вы пытаетесь бросить, и которые предлагают покурить, нужно посылать далеко и надолго. Друзья - те кто поддерживают, а не те, кто помогают кожух пропить.
Я бросил сразу. Одномоментно. Мне было очень плохо. Мне было так плохо, что через два месяца мне еще очень сильно хотелось курить, а через 6 месяцев хотелось периодически.
Девяностые, никаких никотинозаменителей, пластырей, таблеток. Все на морально-волевых. Вместо сигарет жевал жевательную резинку, и делал дыхательную гимнастику:
В первые дни я так делал примерно через каждые 20-30 минут, что соизмеримо с периодом перекуров. Постепенно необходимость в этом отпала и я, наконец-то понял, что у меня есть сила воли. И этот ресурс я использовал для дальнейших самоограничений.
Я до сих пор помню, как мне было тяжело бросать, и именно это в нескольких тяжелых жизненных случаях остановило меня от возобновления идиотской привычки.
Ну, еще и понимание, что когда я курил, то расплачивался деньгами и здоровьем, а какой-то директор табачной фабрики напокупал себе машины, дома, а возможно и яхты.
Жду 70 лайков и продолжим.
🛠 #рабочиебудни
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
«Бросить курить легко. Я делал это сотни раз» Марк Твен.
Вот, к этой дате я и решил поделиться с народом собственным опытом. Для начала расскажу, как я бросил курить.
ㅤ
Если статья наберет хотя бы 70 лайков - продолжу и напишу, как я бросил пить и похудел со 130 до 85 кг.
Лицензионное соглашение.
Я никого ни к чему не призываю, ничего не рекомендую, ни за что не отвечаю. Просто рассказываю о себе.
Я бросил курить в конце августа 1998 года. К тому времени у меня был многолетний опыт курильщика. Да и бросал я уже не первый раз.
Я решил завязать с куревом, потому что у меня начало ухудшаться здоровье. Я начал кашлять по утрам. Во рту была такая вонь, как-будто кошки нагадили.
Да, совсем забыл напомнить, это были девяностые, с деньгами и куревом было плохо, поэтому курил я "Приму". И за день выкуривал 2 пачки. Прикиньте, какую дозу всякой дряни я получал.
Ошибки, которые я делал раньше, пытаясь бросить:
1. Снижал дозу. Довел до одной сигареты в НЕДЕЛЮ!!! Пофигу. Ты или куришь или нет. Нельзя немного курить, немного пить и быть немного беременной.
2. На период бросания, нужно завязать с употреблением алкоголя. Он снимает тормоза, и я возобновлял пагубную привычку именно по-пьяни.
3. Друзей, которые знают, что Вы пытаетесь бросить, и которые предлагают покурить, нужно посылать далеко и надолго. Друзья - те кто поддерживают, а не те, кто помогают кожух пропить.
Я бросил сразу. Одномоментно. Мне было очень плохо. Мне было так плохо, что через два месяца мне еще очень сильно хотелось курить, а через 6 месяцев хотелось периодически.
Девяностые, никаких никотинозаменителей, пластырей, таблеток. Все на морально-волевых. Вместо сигарет жевал жевательную резинку, и делал дыхательную гимнастику:
Если очень сильно хочется курить - делаешь несколько глубоких и быстрых вдохов-выдохов и задерживаешь дыхание на полном вдохе.
Это называется гипервентиляция легких. После задержки дыхания "организм плывет". Ощущение очень похожее, на выкуривание сигареты. С той лишь разницей, что от такой дыхательной гимнастики очень просто избавиться.
В первые дни я так делал примерно через каждые 20-30 минут, что соизмеримо с периодом перекуров. Постепенно необходимость в этом отпала и я, наконец-то понял, что у меня есть сила воли. И этот ресурс я использовал для дальнейших самоограничений.
Я до сих пор помню, как мне было тяжело бросать, и именно это в нескольких тяжелых жизненных случаях остановило меня от возобновления идиотской привычки.
Ну, еще и понимание, что когда я курил, то расплачивался деньгами и здоровьем, а какой-то директор табачной фабрики напокупал себе машины, дома, а возможно и яхты.
Жду 70 лайков и продолжим.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
24 342
Синхронизируем настройки Pi-Hole между инстансами.
ㅤ
У меня в сети живет несколько нод с pi-hole, которые раскиданы по разным устройствам (proxmox, raspberry pi и т.п.). И сразу встала необходимость, чтобы все ноды с pi-hole имели одинаковые настройки.
Стратегия такая, одна нода будет master, где производятся все основное настройки, затем все эти настройки раскатываются на другие ноды (slave).
Раньше такой кейс разруливали с помощью Orbital Sync, Nebula Sync и т.п. Но одно сдохло, другое работает через хуй-пизда-копыто. Короче нужно рабочее решение.
Пишем свой велосипед
В
Сохраняем, чмодим, кидаем в крон (а лучше в systemd с таймерами):
Не забываем прокинуть ssh ключи с master на slave, чтобы скрипт не уперся рогом в логин и пароль.
Вроде мелочь, а полезная, да еще и на bash. Хороших тебе предстоящих выходных и береги себя!
🛠 #bash #linux #devops #selfhosting
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
У меня в сети живет несколько нод с 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. Хороших тебе предстоящих выходных и береги себя!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 29
Когда подарок — это аптайм 100%
Я тут рассчитывал потратить Новогоднюю премию на миграцию инфраструктуры в Selectel. Но всегда есть - НО…
ШЕФ - твоя премия потрачена на корпоратив, а еще мне на Мальдивы надо смотаться по делам. Так что, извини. Классика!
Чё делать? Правильно! Написать письмоДеду морозу Тирексу и поныть:
Отправляем это письмо (но со своей историей) через форму до 30 января 2026 и если твой проект действительно искренний и нужный, то в течение 10 дней ты получишь:
- до 30к бонусов на облачные сервисы
- кешбэк до 1кк бонусов от расходов
- до 1кк бонусов на бесплатный переезд в Selectel
Короче предложение довольно вкусное и я закинул заявку, чем чёрт не шутит. Главное верить в чудо и оно обязательно сбудется.
Напиши письмо прямо сейчас: https://slc.tl/2008u
С Наступающим ребят! 🎄🎄🎄
Реклама, АО «Селектел», erid: 2VtzqwVEWdQ
Я тут рассчитывал потратить Новогоднюю премию на миграцию инфраструктуры в Selectel. Но всегда есть - НО…
ШЕФ - твоя премия потрачена на корпоратив, а еще мне на Мальдивы надо смотаться по делам. Так что, извини. Классика!
Чё делать? Правильно! Написать письмо
Дорогой Тирекс, пишет тебе мальчик Рома, мне 40 лет и весь год я себя вёл очень хорошо, учился на одни пятерки, убирал гавно за котом и помогал маме.
На новый год я хочу получить выделенный сервер с 32 гигабайтами оперативной памяти и жирненьким рейдом + S3 хранилище. На этом сервере я буду крутить свой «очень полезный» стартап и помогать людям.
Сейчас у меня всё крутится на raspberry pi 3 и ресурсов не хватает. Буду рассчитывать на твою помощь и поддержку. Надеюсь ради меня ты пожертвуешь Мальдивами.
Спасибо, до свидания, всего хорошего, адью!
Отправляем это письмо (но со своей историей) через форму до 30 января 2026 и если твой проект действительно искренний и нужный, то в течение 10 дней ты получишь:
- до 30к бонусов на облачные сервисы
- кешбэк до 1кк бонусов от расходов
- до 1кк бонусов на бесплатный переезд в Selectel
Количество бонусы зависит от проекта. Нюанс — получить поддержку могут только юридические лица и ИП.
Короче предложение довольно вкусное и я закинул заявку, чем чёрт не шутит. Главное верить в чудо и оно обязательно сбудется.
Напиши письмо прямо сейчас: https://slc.tl/2008u
С Наступающим ребят! 🎄🎄🎄
Реклама, АО «Селектел», erid: 2VtzqwVEWdQ
Stop Using Pi-Hole – Technitium DNS Is Better
В комментах к посту про «ПИ-ДЫРКУ» ребята посоветовали присмотреться к Technitium DNS. Ну вот я и присмотрелся, прислушался к авторитетному мнению.
ㅤ
Ключевым фактором стало — кластеризация и синхронизация из коробки, без велосипедов на Bash скриптах. Да и по интерфейсу нет ебанутых новогодних ёлок и гирлянд.
Поднял я это у себя на 2х нодах в докерах, одну на малине, другую в proxmox, ну и на роутере прописал чтобы по DHCP раздавались DNSки в локальную сеть.
Поднимается элементарно:
Если нужны енвы или порты, расскоментируй строчки по потребностям, мне хватило минимальных вмешательств.
Затем заходим в морду:
Зоны добавляются в разделе Zones, после добавления зоны, создаешь «A» запись например для домена
Создаём кластер
Чтобы создать кластер, идем во вкладку Administration → Cluster. Создаем кластер, а на второй ноде в этом же разделе жмем кнопку Join Cluster. Заполняем очевидные поля, явки, пароли и радуемся синхронизации.
Теперь при добавлении новой зоны на первой ноде, эта зона улетит на вторую ноду. Главное не забыть выбрать Catalog Zone при добавлении зоны.
Никаких танцев с бубном. Ааа.. Есть танцы, возможно ты столкнешься с ошибкой, что 53 порт уже занят. Это нормально, фиксим:
Если у тебя какие-то другие резолверы стоят, то:
Собственно на этом всё. Базу я тебе показал, дальше сам. А всем кто привел меня к этому решению - спасибо и премного благодарен! Скрасил воскресный вечер не за кружкой бухла, а за полезным занятием.
Изучай!
🛠 #selfhosting #proxmox #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
В комментах к посту про «ПИ-ДЫРКУ» ребята посоветовали присмотреться к 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 адреса и порты.Создаём кластер
Чтобы создать кластер, идем во вкладку Administration → Cluster. Создаем кластер, а на второй ноде в этом же разделе жмем кнопку 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
Собственно на этом всё. Базу я тебе показал, дальше сам. А всем кто привел меня к этому решению - спасибо и премного благодарен! Скрасил воскресный вечер не за кружкой бухла, а за полезным занятием.
Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5 43
Media is too big
VIEW IN TELEGRAM
Что находится по ту сторону IT-компании одного из крупнейших ритейлеров — и как на самом деле выглядит трансформация изнутри?
MAGNIT TECH запустил подкаст «По ту сторону»: каждые две недели здесь будут говорить о цифровой трансформации, технологиях, управлении командами и изменениях внутри большой IT-экосистемы на примере ритейла.
В первом, новогоднем выпуске — CIO Вячеслав Кубаев делится с Директором по трансформации Семеном Мацепурой, что остается по ту сторону разработки:
Бежим смотреть или слушать
MAGNIT TECH запустил подкаст «По ту сторону»: каждые две недели здесь будут говорить о цифровой трансформации, технологиях, управлении командами и изменениях внутри большой IT-экосистемы на примере ритейла.
В первом, новогоднем выпуске — CIO Вячеслав Кубаев делится с Директором по трансформации Семеном Мацепурой, что остается по ту сторону разработки:
- Куда движется стратегия и какие вызовы стоят перед командами в ближайшее время.
- Что сейчас происходит с брендом MAGNIT TECH и зачем компании понадобился ребрендинг.
- Какие форматы управления работают лучше и почему матричная структура перестает справляться.
- Как управлять большим объемом задач и при этом оставаться в ресурсе
Бежим смотреть или слушать
Предыдущий пост от Tagd Tagd про курево хорошо зашел, поэтому продолжаем здоровую тему, ведь айтишники тоже люди. И даже я взялся за ум, недавно прошел курс у аддиктолога и трезв уже 51 день, правда «пост абстинентный синдром» неплохо даёт знать о себе.
ㅤ
Приятного чтива. Поехали!
🔤 🔤 🔤 🔤 🔤 🔤 🔤
Я тут несколько лет назад совсем завязал пить. Даже пятидесятилетие отмечал трезвым.
Если статья наберет хотя бы 70 лайков - продолжу и напишу, как похудел со 130 до 85 кг.
По молодости, особенно в студенческие годы я, конечно, выпивал. Ну не то, чтобы каждый день, но мог насинячится очень сильно.
Однажды я выпил бутылку водки без закуски и так напился, что проснулся на улице от того, что две тетки щупали мне пульс, поверяя, жив ли я или нет.
После этого случая я решил резко сократить потребляемое количество крепкого спиртного до трех рюмок за вечер, и обязательно под хорошую закуску. При этом я сделал неправильный вывод — что лучше пить пиво, чем водку.
Пиво пили регулярно, после работы, а в пятницу — так обязательно. Оказывается напиться можно и пивом. Я однажды из-за этого попал в вытрезвитель...
Но, то ли метаболизм у меня изменился, то ли пиво было не очень. Однажды вечером я выпил пару бутылок пива (~1 литр в сумме) и сразу лег спать.
Проснулся ночью, от того, что чуть не задохнулся. Пиво + апноэ на фоне большого веса очень гремучая смесь. Я не мог продышаться несколько минут. Меня охватил такой ужас, что я навсегда решил завязать с пивом. Просто, чтобы не сдохнуть однажды.
Потом, с возрастом, я начал замечать, что даже после небольшого количества алкоголя на утро чувствую себя хуже, чем обычно. Особенно начали раздражать «мешки» под глазами. Короче, я сделал выводы, и сначала уменьшил количество до одной рюмки за вечер, а потом понял, что разницы между одной рюмкой и ни одной — практически нет. А если разницы нет, то и пить незачем.
У этого решения, кстати, прекрасный побочный эффект — мои дети, видя что я праздники отмечаю без спиртного, не пили даже в студенчестве. Да и не курили тоже.
Видать права английская поговорка: «Не воспитывайте детей — всё равно они будут похожи на вас. Воспитывайте себя…»
Жду 70 лайков и продолжим.
🛠 #рабочиебудни
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Приятного чтива. Поехали!
Я тут несколько лет назад совсем завязал пить. Даже пятидесятилетие отмечал трезвым.
Если статья наберет хотя бы 70 лайков - продолжу и напишу, как похудел со 130 до 85 кг.
Лицензионное соглашение.
Я никого ни к чему не призываю, ничего не рекомендую, ни за что не отвечаю. Просто рассказываю о себе.
По молодости, особенно в студенческие годы я, конечно, выпивал. Ну не то, чтобы каждый день, но мог насинячится очень сильно.
Однажды я выпил бутылку водки без закуски и так напился, что проснулся на улице от того, что две тетки щупали мне пульс, поверяя, жив ли я или нет.
После этого случая я решил резко сократить потребляемое количество крепкого спиртного до трех рюмок за вечер, и обязательно под хорошую закуску. При этом я сделал неправильный вывод — что лучше пить пиво, чем водку.
Пиво пили регулярно, после работы, а в пятницу — так обязательно. Оказывается напиться можно и пивом. Я однажды из-за этого попал в вытрезвитель...
Но, то ли метаболизм у меня изменился, то ли пиво было не очень. Однажды вечером я выпил пару бутылок пива (~1 литр в сумме) и сразу лег спать.
Проснулся ночью, от того, что чуть не задохнулся. Пиво + апноэ на фоне большого веса очень гремучая смесь. Я не мог продышаться несколько минут. Меня охватил такой ужас, что я навсегда решил завязать с пивом. Просто, чтобы не сдохнуть однажды.
Потом, с возрастом, я начал замечать, что даже после небольшого количества алкоголя на утро чувствую себя хуже, чем обычно. Особенно начали раздражать «мешки» под глазами. Короче, я сделал выводы, и сначала уменьшил количество до одной рюмки за вечер, а потом понял, что разницы между одной рюмкой и ни одной — практически нет. А если разницы нет, то и пить незачем.
У этого решения, кстати, прекрасный побочный эффект — мои дети, видя что я праздники отмечаю без спиртного, не пили даже в студенчестве. Да и не курили тоже.
Видать права английская поговорка: «Не воспитывайте детей — всё равно они будут похожи на вас. Воспитывайте себя…»
Жду 70 лайков и продолжим.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
10 160