Вчера в посте я упомянул конфиги
ㅤ
Давай посмотрим что в других дистрибутивах происходит.
Debian / Ubuntu
Основной пакет → iptables-persistent / netfilter-persistent
RHEL / CentOS / Rocky / Alma (iptables-services)
Fedora (новые версии)
По умолчанию использует firewalld (поверх nftables). Если ставишь iptables-services:
Arch Linux / Manjaro
Из коробки iptables не сохраняет правила, обычно юзеры делают сами:
OpenSUSE / SLES
По умолчанию тоже firewalld, если ставить пакет iptables, правила обычно хранят в:
Astra Linux (Смоленск, Орёл и др. редакции)
Астра базируется на Debian, поэтому у неё схема как у Debian/Ubuntu:
РЕД ОС (RedOS)
RedOS базируется на RHEL/CentOS, поэтому там всё по «редхэту»:
Вроде основное осветил, если что-то проебал, забыл, затроил — пиши в комменты, поправим.
А вообще при возможности пользуйся облачным фаерволом, если страшно конфигурять iptables или руки растут из жопы.
🛠 #linux #security #iptables
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
iptables лишь для части дистрибутивов, Alex эту ситуацию в комментариях подметил верно.ㅤ
Давай посмотрим что в других дистрибутивах происходит.
Debian / Ubuntu
Основной пакет → iptables-persistent / netfilter-persistent
/etc/iptables/rules.v4
/etc/iptables/rules.v6
RHEL / CentOS / Rocky / Alma (iptables-services)
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables
Fedora (новые версии)
По умолчанию использует firewalld (поверх nftables). Если ставишь iptables-services:
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables
Arch Linux / Manjaro
Из коробки iptables не сохраняет правила, обычно юзеры делают сами:
/etc/iptables/iptables.rules
/etc/iptables/ip6tables.rules
OpenSUSE / SLES
По умолчанию тоже firewalld, если ставить пакет iptables, правила обычно хранят в:
/etc/sysconfig/iptables
Astra Linux (Смоленск, Орёл и др. редакции)
Астра базируется на Debian, поэтому у неё схема как у Debian/Ubuntu:
/etc/iptables/rules.v4
/etc/iptables/rules.v6
РЕД ОС (RedOS)
RedOS базируется на RHEL/CentOS, поэтому там всё по «редхэту»:
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables
Вроде основное осветил, если что-то проебал, забыл, затроил — пиши в комменты, поправим.
А вообще при возможности пользуйся облачным фаерволом, если страшно конфигурять iptables или руки растут из жопы.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Настройка и работа с Taskwarrior
Как бы я не шлялся словно «портовая шлюха» по разным таск-трекерам, так и вернулся к истокам Taskwarrior (далее TW).
ㅤ
Почему? Потому что в других таск-трекерах у меня спустя пару недель начинает образовываться какая-то лапша ебаная, прям как с ансиблом. Ну и по итогу на все это кладется болт.
Из коробки TW выглядит достаточно хуёва, как и все остальное в Linux. Но я его допилил с помощью конфигов, избавился от лишнего и оставил только, то что действительно нужно мне.
Пост получился длинным, поэтому идем дочитывать в блог 👇
🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️
https://two.su/684om
🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️
🛠 #рабочиебудни #gtd
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
Как бы я не шлялся словно «портовая шлюха» по разным таск-трекерам, так и вернулся к истокам Taskwarrior (далее TW).
ㅤ
Почему? Потому что в других таск-трекерах у меня спустя пару недель начинает образовываться какая-то лапша ебаная, прям как с ансиблом. Ну и по итогу на все это кладется болт.
Из коробки TW выглядит достаточно хуёва, как и все остальное в Linux. Но я его допилил с помощью конфигов, избавился от лишнего и оставил только, то что действительно нужно мне.
Пост получился длинным, поэтому идем дочитывать в блог 👇
https://two.su/684om
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5 32
Друзья и коллеги — С Днём Знаний!
Грех под это событие не напомнить про — Linux Factory.
ㅤ
За 1 месяц ты впитаешь необходимую базу, которая требуется, чтобы уйти с «завода» и вкатиться в айти на роль «девопс-инженера».
Короче. У меня появились свободные слоты и я готов взять на обучение еще 20-30 человек.
Цена временно снижена в 2 раза с5000р до 2500р.
Ты можешь пропить эти деньги, а можешь вложиться с умом и уже через месяц получать вкусную ЗП. Всё зависит от тебя, готов ли ты сделать шаг и что-то изменить.
Что внутри
— Никакой воды, только нужная информация
— Исключительно бест-практики
— Более 40ка уроков и домашних заданий
— Познаешь силу «Инфраструктура как код»
— Разберешь с docker и git
— Научишься писать пайплайны
— Настроишь мониторинг и алерты
— И многое другое…
Киллер-фичи
— Я твой личный ментор 1x1 (никаких групповых чатов)
— Вдумчивое кодревью ДЗ (обоснованные замечания)
— Нет дедлайнов (учишься когда захочешь)
— Можешь не сдавать домашки (двойки не ставлю)
— Задачи со звездочкой (для любителей посложнее)
— Можно пропускать темы и брать только нужные
— Избавишься от синдрома самозванца
⚪ Содержание курса и всех сезонов описал тут.
⚪ Подробнее о курсе можешь почитать тут.
⚪ А для сомневающихся добавил страницу с отзывами.
Кстати можешь глянуть пару (1 и 2) открытых уроков и сделать выводы, подойдет тебе все это или нет.
Вписаться в курс: @tormozilla_bot
если бот не отвечает, отправь ему повторно /start
По всем вопросам можешь писать сюда: @linuxfactorybot
Грех под это событие не напомнить про — Linux Factory.
ㅤ
За 1 месяц ты впитаешь необходимую базу, которая требуется, чтобы уйти с «завода» и вкатиться в айти на роль «девопс-инженера».
За год существования LF, через него прошло > 1000 человек. Больше половины учащихся успешно закончили курс и нашли свою первую хорошо оплачиваемую работу, которая им действительно нравится. LF это отличная инвестиция в своё будущее.
Короче. У меня появились свободные слоты и я готов взять на обучение еще 20-30 человек.
Цена временно снижена в 2 раза с
Ты можешь пропить эти деньги, а можешь вложиться с умом и уже через месяц получать вкусную ЗП. Всё зависит от тебя, готов ли ты сделать шаг и что-то изменить.
Что внутри
— Никакой воды, только нужная информация
— Исключительно бест-практики
— Более 40ка уроков и домашних заданий
— Познаешь силу «Инфраструктура как код»
— Разберешь с docker и git
— Научишься писать пайплайны
— Настроишь мониторинг и алерты
— И многое другое…
Киллер-фичи
— Я твой личный ментор 1x1 (никаких групповых чатов)
— Вдумчивое кодревью ДЗ (обоснованные замечания)
— Нет дедлайнов (учишься когда захочешь)
— Можешь не сдавать домашки (двойки не ставлю)
— Задачи со звездочкой (для любителей посложнее)
— Можно пропускать темы и брать только нужные
— Избавишься от синдрома самозванца
Кстати можешь глянуть пару (1 и 2) открытых уроков и сделать выводы, подойдет тебе все это или нет.
Вписаться в курс: @tormozilla_bot
если бот не отвечает, отправь ему повторно /start
По всем вопросам можешь писать сюда: @linuxfactorybot
Please open Telegram to view this post
VIEW IN TELEGRAM
11 44
Здрасти. Так, у нас тут баланс-батл проходил, давай посмотрим еще раз на посты, которые ребята прислали.
😀 😃 😄 😁 😅 😂 🤣 😊
😇 🙂 🙃 😉 😌 😍 🥰 😘
😗 😙 😚 😋 😛 😝 😜 🤪
🤨 🧐 🤓 😎 🤩 🥳 😏 😒
ㅤ
Ну и кто пропустил или забыл поставить «лайк» — самое время.
- Про дампы и postgres (98)
- Астра линукс и неочевидные нюансы (89)
- Про бомжей и authentication key (53)
- Живое вмешательство. File descriptors и GDB (103)
- Сетевой квест и 22 дырка (92)
- Учим Docker в SNAT (69)
- Парсинг сетевого оборудования (16)
- Про логи и systemd-cat (94)
- Деградация батареи в Linux (37)
- Организация бекапов 1С (34)
- Рубрика «упоротые однострочники» (53)
- Хакаем inode и добываем свободное место (100)
В скобках общее количество лайков на текущий момент. Завтра подведем итоги и выдадим донаты.
Всем огромное спасибо за участие, вы все большие молодцы!
🛠 #балансбатл #людипишут
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
ㅤ
Ну и кто пропустил или забыл поставить «лайк» — самое время.
- Про дампы и postgres (98)
- Астра линукс и неочевидные нюансы (89)
- Про бомжей и authentication key (53)
- Живое вмешательство. File descriptors и GDB (103)
- Сетевой квест и 22 дырка (92)
- Учим Docker в SNAT (69)
- Парсинг сетевого оборудования (16)
- Про логи и systemd-cat (94)
- Деградация батареи в Linux (37)
- Организация бекапов 1С (34)
- Рубрика «упоротые однострочники» (53)
- Хакаем inode и добываем свободное место (100)
В скобках общее количество лайков на текущий момент. Завтра подведем итоги и выдадим донаты.
Всем огромное спасибо за участие, вы все большие молодцы!
Если я проебался и что-то упустил, маякните, пожалуйста Максу, добавим в список.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
10 31
Подводим итоги #балансбатл:
ㅤ
Все «лайки» пересчитаны, получилось так:
Первое место: Живое вмешательство. File descriptors и GDB (124 реакции) от @AlbDVPs. (Донат — баланс-борд)
Второе место: Хакаем inode и добываем свободное место (116 реакций), автор @clovus. (Донат — 5000р)
Третье место: Про логи и systemd-cat (110 реакция), автор @a_glumov (Донат — 3000р)
🍻 Принимайте наши поздравления! 🍻
😀 😃 😄 😁 😅 😂 🤣 😊
😇 🙂 🙃 😉 😌 😍 🥰 😘
😗 😙 😚 😋 😛 😝 😜 🤪
🤨 🧐 🤓 😎 🤩 🥳 😏 😒
DevUps выбрал 2 поста, которые произвели на него впечатления.
Цитирую:
Как получить призы:
Сегодня к каждому из победителей придет Макс, запросит у вас вводные, ну а дальше дело в шляпе.
Всем кто принимал участие — огромнейшая благодарность, всем авторам постов лично жму руку, вы молодцы, что делитесь знаниями с другими. Это очень ценно! Спасибо вам ребята!
🛠 #балансбатл #людипишут
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
ㅤ
Все «лайки» пересчитаны, получилось так:
Первое место: Живое вмешательство. File descriptors и GDB (124 реакции) от @AlbDVPs. (Донат — баланс-борд)
Второе место: Хакаем inode и добываем свободное место (116 реакций), автор @clovus. (Донат — 5000р)
Третье место: Про логи и systemd-cat (110 реакция), автор @a_glumov (Донат — 3000р)
И дополнительное призовое место от нашего коллеги DevUps, обещает задонатить кругленькую сумму за пост, который произведет впечатление на него лично.
DevUps выбрал 2 поста, которые произвели на него впечатления.
Цитирую:
Кароче, я выбрал 2 статьи ... Закончилось место на диске? Или же закончились inode? и Живое вмешательство. File descriptors и GDB. Надо будет как-то решить как им бабок заслать, по 5к получается.
Как получить призы:
Сегодня к каждому из победителей придет Макс, запросит у вас вводные, ну а дальше дело в шляпе.
Всем кто принимал участие — огромнейшая благодарность, всем авторам постов лично жму руку, вы молодцы, что делитесь знаниями с другими. Это очень ценно! Спасибо вам ребята!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
3 61
Мне прилетела интересная задача.
🔤 🔤 🔥 🔤 🔤 🔤 🔤
ТЗ: Сервер без GUI, к нему подключают usb-диск с NTFS и начинается автоматическое архивирование. Логин не требуется, сообщения выдаются на tty1.
Использовать будем штатные средства
1. Подключаем диск, и запоминаем UUID.
здесь FLASH - метка диска
ㅤ
создадим каталог для монтирования:
Дальше создаем 4 файла. Чтобы было проще, в каждом файле в начале коммент с названием файла.
После создания:
Как это работает:
При подключении диска usb-диска срабатывает UDEV правило
Сама
Если все условия совпадают,
Если используется архивирование с чередованием дисков - просто сделайте у дисков одинаковые метки:
👆 Если в mount не указать опцию
👆 Запустить скрипт через UDEV даже в фоне не получится, поскольку система вырубит его через 5 сек.
🛠 #linux #bash
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
ТЗ: Сервер без GUI, к нему подключают usb-диск с NTFS и начинается автоматическое архивирование. Логин не требуется, сообщения выдаются на tty1.
sudo apt install ntfs-3g # для монтирования ntfs
Использовать будем штатные средства
udev + systemd .1. Подключаем диск, и запоминаем UUID.
lsblk -f
sdc
└─sdc1
ntfs FLASH
1234567890ABCDEF
здесь FLASH - метка диска
1234567890ABCDEF - UUIDㅤ
создадим каталог для монтирования:
mkdir -p /media/usb_ntfs; chmod 777 /media/usb_ntfs
Дальше создаем 4 файла. Чтобы было проще, в каждом файле в начале коммент с названием файла.
После создания:
sudo systemctl daemon-reload
Как это работает:
При подключении диска usb-диска срабатывает UDEV правило
99-usb-mount.rules и пытается запустить службу autousbbackup.serviceautousbbackup.service пытается запустить media-usb_ntfs.mount, поскольку жестко он нее зависит.Сама
media-usb_ntfs.mount запустится только в том случае, если UUID диска будет 1234567890ABCDEF.Если все условия совпадают,
autousbbackup.service запустит скрипт autousbbackup.sh, внутри которого Вы напишите копирование или синхронизацию данных в каталог /media/usb_ntfs.Если используется архивирование с чередованием дисков - просто сделайте у дисков одинаковые метки:
sudo umount /dev/sdXN # где /dev/sdXN имя вашего NTFS-раздела.
sudo ntfslabel --new-serial=1234567890ABCDEF /dev/sdXN #задайте UUID
👆 Если в mount не указать опцию
nofail система будет тормозить при загрузке.👆 Запустить скрипт через UDEV даже в фоне не получится, поскольку система вырубит его через 5 сек.
#/etc/udev/rules.d/99-usb-mount.rules
SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}="autousbbackup.service"
#/etc/systemd/system/media-usb_ntfs.mount
[Unit]
Description=Mount USB NTFS by UUID
[Mount]
What=/dev/disk/by-uuid/1234567890ABCDEF
Where=/media/usb_ntfs
Type=ntfs-3g
Options=defaults,big_writes,nofail,uid=1000,gid=1000
[Install]
WantedBy=multi-user.target
#/etc/systemd/system/autousbbackup.service
[Unit]
Description=Simple service autousbbackup
Requires=media-usb_ntfs.mount
After=media-usb_ntfs.mount
[Service]
Type=simple
ExecStart=/root/work/autousbbackup/autousbbackup.sh
[Install]
WantedBy=multi-user.target
#!/bin/bash
#/root/work/autousbbackup/autousbbackup.sh
declare -x PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
declare MOUNT_POINT=/media/usb_ntfs
declare TTY=/dev/tty1
declare DF='%(%Y%m%d-%H%M%S)T' #date format
declare LOG="$0.log"
exec &>"$LOG" # only one backup log
#exec &>>"$LOG" # all backups log
printf "$DF %s\n" -1 "START BACKUP"|tee "$TTY"
##############################################
sleep 3 # backup emulation
##############################################linux
printf "$DF %s\n" -1 "END BACKUP"|tee "$TTY"
#suicide, because service require mount point
systemd-mount --umount "$MOUNT_POINT"
—
Please open Telegram to view this post
VIEW IN TELEGRAM
6 77
Не уметь — не стыдно!
Вопрос из зала — есть ли какой-то тренажер или подобное, чтобы потыкать и понять как работает Kafka?
Конечно есть, у нас этого говна навалом!
Называется эта штука Kafka Visualisation.
Открываешь и тыкаешь хоть до усрачки. С ходу нихуя не понятно, но если вникнуть, то легко поймешь принцип работы.
А еще есть подобная штука для RabbitMQ, потыкать тут.
ㅤ
Изучай! Всех с пятницей и береги себя!
🛠 #services
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
Вопрос из зала — есть ли какой-то тренажер или подобное, чтобы потыкать и понять как работает Kafka?
Конечно есть, у нас этого говна навалом!
Называется эта штука Kafka Visualisation.
Открываешь и тыкаешь хоть до усрачки. С ходу нихуя не понятно, но если вникнуть, то легко поймешь принцип работы.
А еще есть подобная штука для RabbitMQ, потыкать тут.
ㅤ
Изучай! Всех с пятницей и береги себя!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
12 86
Если ты выполняешь план, то тебе повысят план, а не зарплату!
Пытался вчера подружить taskwarrior и s3 для синхронизации, из коробки оно вроде как только с AWS работает.
Подкинул в конфиг параметры подключение к кастомному хранилищу. Ну думаю, какая в хуй разница.
Проверяю
Мде… Всёж правильно, эндпоинт пингуется, курлится, телнетится. Описывать весь момент дебага не буду, но там конкретный такой - метод тыка был.
Ну раз обычный «метод тыка» не помогает, расчехляем
Что делает команда:
И в выхлопе находим строчку:
😀 😃 😄 😁 😅 😂 🤣 😊
😇 🙂 🙃 😉 😌 😍 🥰 😘
😗 😙 😚 😋 😛 😝 😜 🤪
🤨 🧐 🤓 😎 🤩 🥳 😏 😒
😞 😔 😟 😕 🙁 ☹️ 😣 😖
😫 😩 🥺 😢 😭 😤 😠 😡
Ну ёб твою мать! А нахуй я тогда все эти приседания с конфигом устраивал, если эта падла хуй положила и по
То есть настройка
Ну хоть проблему нашли.
Отсюда вывод: с кастомным S3 напрямую taskwarrior работать не сможет. Даже если устроить подмену хостов или сделать хак через CNAME.
А как синхронизировать-то задачи? Ооо брат, я уже написал про это отдельный пост, чуть позже закину.
Хороших тебе выходных!
🛠 #strace #debug #taskwarrior
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
Пытался вчера подружить taskwarrior и s3 для синхронизации, из коробки оно вроде как только с AWS работает.
Подкинул в конфиг параметры подключение к кастомному хранилищу. Ну думаю, какая в хуй разница.
sync.backend=s3
sync.aws.region=ru-7
sync.aws.bucket=taskwarrior
sync.aws.access_key_id=aed38518013b4ab
sync.aws.secret_access_key=992570bad57
sync.aws.endpoint=s3.ru-7.storage.selcloud.ru
Проверяю
task sync init, хуй там плавал, ошибка:unhandled error: dispatch failure: io error: error trying to connect: dns error: failed to lookup address information: Name or service not known: dns error: failed to lookup address information: Name or service not known: failed to lookup address information: Name or service not known
Мде… Всёж правильно, эндпоинт пингуется, курлится, телнетится. Описывать весь момент дебага не буду, но там конкретный такой - метод тыка был.
Ну раз обычный «метод тыка» не помогает, расчехляем
strace!strace -s 200 -f -e trace=network,connect,sendto,recvfrom task sync
Что делает команда:
-s 200 — печатать до 200 байт строковых аргументов (по умолчанию strace режет строки до 32 байт). Это важно, чтобы увидеть полный URL/hostname, который передаётся в syscalls.-f — следить не только за основным процессом, но и за всеми дочерними (fork/clone)-e trace=network, connect, sendto, recvfrom — ограничиваем вывод только сетевыми вызовами: socket, connect → создание сокетов и подключения (TCP/UDP). sendto / recvfrom → передача данных (обычно видно DNS-запросы, HTTP-заголовки и т.д.).И в выхлопе находим строчку:
taskwarrior.s3.ru-7.amazonaws.com.Ну ёб твою мать! А нахуй я тогда все эти приседания с конфигом устраивал, если эта падла хуй положила и по
task diagnostic никаких ошибок не вывело.То есть настройка
sync.aws.endpoint=… вообще не учитывается — клиент жёстко строит URL по схеме AWS.Ну хоть проблему нашли.
Strace все же достаточно пиздатый инструмент.Отсюда вывод: с кастомным S3 напрямую taskwarrior работать не сможет. Даже если устроить подмену хостов или сделать хак через CNAME.
А как синхронизировать-то задачи? Ооо брат, я уже написал про это отдельный пост, чуть позже закину.
Хороших тебе выходных!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
13 56
Дегенеративные модели
Получил на выходные от одного провайдера отличнейшее предложение, от которого трудно отказаться.
ВЕЧНЫЕ СЕРВЕРА!
ㅤ
Как работает эта модель — ты один раз оплачиваешь условные 10-30-50-100к рублей и получаешь VPS навсегда, до конца мать его жизни.
Звучит достаточно вкусно, но в каждой бочке меда есть ложка дегтя.
Вечного ничего не бывает.
Ну так, вот:
Покупая такой сервер, сервер не становится твоей собственностью. Ты по-прежнему выполняешь условия оферты, которую ты конечно же НЕ прочитал и просто протыкал далее → далее.
Открываем оферту и читаем:
Первый звоночек.
Я сталкивался с такой ситуацией в молодости и по глупости купил такой «вечный сервер» за 10к рублей. А через полгода с меня начали требовать абонентскую плату, а на мой ахуй мне было сказано — а вы оферту читали? Какие вопросы?
Пошел, почитал, а там черным по белому — извините, теперь ваш «вечный сервер» требует ежемесячной оплаты, потому что мы охуели и хотим больше денег.
Ладно, опыт получен. Прежде чем что-то бездумно покупать, вопрос нужно хотя бы немного заресерчить. И в 99% ты найдешь очень много подводных камней, о которых ты и не подозревал.
Второй звоночек.
Ладно, ты купил «вечный сервер» и потом хуяк! Скорость стала никакой. Идем в саппорт и требуем объяснений, в ответ получаем — ну дак в оферте же прописано.
При превышении 3ТБ трафика в месяц, для «вечных серверов», скорость пропускной полосы будет снижена до dialup’а. Вы превысили допустимы трафик, поэтому идете — нахуй и сосите жопу!
ВОТ ЭТО ПОВОРОТ!
😀 😃 😄 😁 😅 😂 🤣 😊
😇 🙂 🙃 😉 😌 😍 🥰 😘
😗 😙 😚 😋 😛 😝 😜 🤪
🤨 🧐 🤓 😎 🤩 🥳 😏 😒
😞 😔 😟 😕 🙁 ☹️ 😣 😖
😫 😩 🥺 😢 😭 😤 😠 😡
Третий звоночек.
Компания просто перестает существовать, либо ее банят за махинации и черные схемы. Всякое бывает. В этом случае ты просто теряешь доступ к своему «вечному серверу». Истории такие были, по крайней мере знаю две и оба раза я лишался доступа к серверам, благо были бэкапы.
Четвертый звоночек.
Для саппорта ты не приоритетный клиент, ты лох ебаный, которого уже облапошили, хуль на тебя время тратить, сам ебись со своими проблемами и «вечным сервером».
Выводы:
Да, компаниям это выгодно, в моменте заработать миллионы денег. Но для клиента это полная залупа, особенно если в одностороннем порядке меняется оферта и все делается, чтобы клиент сам отказался от услуг.
Деньги ведь с клиента уже получены, нахуй он нужен, еще и инфраструктурные ресурсы занимает. Вкорячим его в рамки и будем в уши ссать.
Всех под одну гребенку не ровняю, возможно на рынке и есть добросовестные поставщики услуг, респект им и уважуха! Но в любом случае «третий звоночек» никто не отменяет. Фактически «вечность» держится только на репутации и доброй воле провайдера.
Гарантий нет, это инвестиция в надежность чужого бизнеса.
Так что если тебе кто-то предлагает «вечный сервер» — шли его нахуй!
🛠 #рабочиебудни #hosting #server
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
Получил на выходные от одного провайдера отличнейшее предложение, от которого трудно отказаться.
ВЕЧНЫЕ СЕРВЕРА!
ㅤ
Как работает эта модель — ты один раз оплачиваешь условные 10-30-50-100к рублей и получаешь VPS навсегда, до конца мать его жизни.
Звучит достаточно вкусно, но в каждой бочке меда есть ложка дегтя.
Вечного ничего не бывает.
Ну так, вот:
Покупая такой сервер, сервер не становится твоей собственностью. Ты по-прежнему выполняешь условия оферты, которую ты конечно же НЕ прочитал и просто протыкал далее → далее.
Открываем оферту и читаем:
Исполнитель вправе изменять условия договора, в одностороннем порядке. Изменения вступают в силу с даты публикации на сайте. Если клиент не согласен, он может идти на хуй и сосать жопу.
Первый звоночек.
Я сталкивался с такой ситуацией в молодости и по глупости купил такой «вечный сервер» за 10к рублей. А через полгода с меня начали требовать абонентскую плату, а на мой ахуй мне было сказано — а вы оферту читали? Какие вопросы?
Пошел, почитал, а там черным по белому — извините, теперь ваш «вечный сервер» требует ежемесячной оплаты, потому что мы охуели и хотим больше денег.
Ладно, опыт получен. Прежде чем что-то бездумно покупать, вопрос нужно хотя бы немного заресерчить. И в 99% ты найдешь очень много подводных камней, о которых ты и не подозревал.
Второй звоночек.
Ладно, ты купил «вечный сервер» и потом хуяк! Скорость стала никакой. Идем в саппорт и требуем объяснений, в ответ получаем — ну дак в оферте же прописано.
При превышении 3ТБ трафика в месяц, для «вечных серверов», скорость пропускной полосы будет снижена до dialup’а. Вы превысили допустимы трафик, поэтому идете — нахуй и сосите жопу!
ВОТ ЭТО ПОВОРОТ!
Третий звоночек.
Компания просто перестает существовать, либо ее банят за махинации и черные схемы. Всякое бывает. В этом случае ты просто теряешь доступ к своему «вечному серверу». Истории такие были, по крайней мере знаю две и оба раза я лишался доступа к серверам, благо были бэкапы.
Четвертый звоночек.
Для саппорта ты не приоритетный клиент, ты лох ебаный, которого уже облапошили, хуль на тебя время тратить, сам ебись со своими проблемами и «вечным сервером».
Выводы:
Да, компаниям это выгодно, в моменте заработать миллионы денег. Но для клиента это полная залупа, особенно если в одностороннем порядке меняется оферта и все делается, чтобы клиент сам отказался от услуг.
Деньги ведь с клиента уже получены, нахуй он нужен, еще и инфраструктурные ресурсы занимает. Вкорячим его в рамки и будем в уши ссать.
Всех под одну гребенку не ровняю, возможно на рынке и есть добросовестные поставщики услуг, респект им и уважуха! Но в любом случае «третий звоночек» никто не отменяет. Фактически «вечность» держится только на репутации и доброй воле провайдера.
Предложение о «вечных серверах» живёт только в маркетинговых материалах, но юридической фиксации в оферте нет. Получается, что «вечность» основана исключительно на доверии к провайдеру.
Если сервер нужен надолго, то «окупается» он через 12-36 месяцев. Ресурсы у сервера фиксированные, например 1Гб RAM сегодня ещё куда-нибудь сгодится, но через 3–5 лет такой сервер может быть слишком слабым. А апгрейд невозможен.
Гарантий нет, это инвестиция в надежность чужого бизнеса.
Так что если тебе кто-то предлагает «вечный сервер» — шли его нахуй!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
10 92
Я тут порой пишу для одного интернет журнала (не для хабра, в пизду его). Ну и встал вопрос, как передавать материалы заказчику, чтобы не в голом markdown, а уже сверстано, стили, картинки и т.п.
ㅤ
Вариантов было много, hugo, mkdocs и т.п. По итогу выбрал Writefreely, оно отлично подошло. Оупенсорц, написан на GO, ставится на свои сервера, работает шустро.
Аналог Телеграфа и Телетайпа, но на стероидах. Можно делать разные блоги под разные задачи. Есть черновики, доступ по паролю и т.п.
Короче доволен, базовые потребности закрыты, поднимается так:
Способ не официальный. Потому что если делать, как в официальной документации, то как обычно — нихуя не работает из коробки. Классика!
Следующая проблема — картинки по ctrl+c/ctrl+v в writefreely не вставляются. Их нужно предварительно закончать и потом через ссылку вставлять. Дела…
По FTP я ебал это делать, поэтому был поднят Picsur.
Отличнейшее решение для любителей self-hosting. Аналог Imgur, но свой!
Запускается так:
Тем более эта хератень отлично дружит со скриншотилкой ShareX которую я совсем недавно начал использовать.
Рекомендую, там ебать комбайн под все задачи, хранилища и хотелки.
Как работает связка:
Делаешь скриншот, оно автоматически заливается в Picsur и в буфере обмена у тебя уже готовая ссылка для вставки в markdown. Удобно просто пиздец!
Такие дела. Вот и еще один полезный сервис в моей домашней лаборатории.
Потыкай, глядишь найдешь применение в своих задачках.
🛠 #services #selfhosting #workflow
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
ㅤ
Вариантов было много, hugo, mkdocs и т.п. По итогу выбрал Writefreely, оно отлично подошло. Оупенсорц, написан на GO, ставится на свои сервера, работает шустро.
Аналог Телеграфа и Телетайпа, но на стероидах. Можно делать разные блоги под разные задачи. Есть черновики, доступ по паролю и т.п.
Короче доволен, базовые потребности закрыты, поднимается так:
services:
write-freely:
image: nephatrine/write-freely:latest
container_name: write-freely
environment:
TZ: America/New_York
PUID: 1000
PGID: 1000
ports:
- "127.0.0.1:8085:8080/tcp"
volumes:
- ./write-freely:/mnt/config
Способ не официальный. Потому что если делать, как в официальной документации, то как обычно — нихуя не работает из коробки. Классика!
Следующая проблема — картинки по ctrl+c/ctrl+v в writefreely не вставляются. Их нужно предварительно закончать и потом через ссылку вставлять. Дела…
По FTP я ебал это делать, поэтому был поднят Picsur.
Отличнейшее решение для любителей self-hosting. Аналог Imgur, но свой!
Запускается так:
services:
picsur:
image: ghcr.io/caramelfur/picsur:latest
container_name: picsur
ports:
- '127.0.0.1:8080:8080'
environment:
PICSUR_DB_HOST: picsur_postgres
volumes:
- ./storage:/picsur/storage
restart: unless-stopped
picsur_postgres:
image: postgres:17-alpine
container_name: picsur_postgres
environment:
POSTGRES_DB: picsur
POSTGRES_PASSWORD: picsur
POSTGRES_USER: picsur
restart: unless-stopped
volumes:
- picsur-data:/var/lib/postgresql/data
volumes:
picsur-data:
Тем более эта хератень отлично дружит со скриншотилкой ShareX которую я совсем недавно начал использовать.
Рекомендую, там ебать комбайн под все задачи, хранилища и хотелки.
В настройках Picsur генеришь json и двойным кликом интегрируешь с ShareX, ничего руками прописывать не нужно.
Как работает связка:
Делаешь скриншот, оно автоматически заливается в Picsur и в буфере обмена у тебя уже готовая ссылка для вставки в markdown. Удобно просто пиздец!
Такие дела. Вот и еще один полезный сервис в моей домашней лаборатории.
Потыкай, глядишь найдешь применение в своих задачках.
Кстати нашел ShareX под Linux, если кому надо.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
6 70
У девопса нет стейджа, только прод!
Продолжаем тему с taskwarrior, сегодня настраиваем единый сервер синхронизации на движке Taskchampion.
ㅤ
Будем компилировать бинарники, прикручивать nginx, хуячить напильником авторизацию, испытаем полный спектр эмоций и постараемся избежать сгоревших жоп.
Сюда не поместилось, поэтому по классике публикую в блоге 👇
—
Please open Telegram to view this post
VIEW IN TELEGRAM
2 30
Всех с пятницей!
Меня частенько и «косвенно» связывали с компанией Selectel, я молча читал, слушал... И однажды подумал — а хули нет? Мало мне 3х работ, возьму еще одну.
И теперь я их официальный амбассадор.
Неспешно пишу статейки и интеграции. Предыдущий пост, как раз моих рук дело, пиздато же получилось!
Наверное эта информация для тебя будет бесполезной, просто держу в курсе, чтобы вопросов меньше возникало.
Еще раз всех с пятницей, береги себя и своих близких. Ну и хороших тебе предстоящих выходных! Ура блядь, дождались!
🍻🍻🍻🍻🍻
Меня частенько и «косвенно» связывали с компанией Selectel, я молча читал, слушал... И однажды подумал — а хули нет? Мало мне 3х работ, возьму еще одну.
И теперь я их официальный амбассадор.
Неспешно пишу статейки и интеграции. Предыдущий пост, как раз моих рук дело, пиздато же получилось!
Наверное эта информация для тебя будет бесполезной, просто держу в курсе, чтобы вопросов меньше возникало.
Еще раз всех с пятницей, береги себя и своих близких. Ну и хороших тебе предстоящих выходных! Ура блядь, дождались!
🍻🍻🍻🍻🍻
15 92
Вчера пишу сотруднику — Алёша, у нас прод какого-то хера 500ку каждые 3 минуты выплёвывает, чё у вас там происходит?
В ответ я получаю — даже не «нихуя», а реакцию (эмоджи) на мой вопрос, тупо ебать большой палец вверх. Типа — заебись!
ㅤ
А че заебись? Вы взяли это в работу, или заебись и вы очень рады, или что нахуй вообще происходит? Как это блядь интерпретировать?
ㅤ
Немного охуев от такого, я понимаю что я делаю так же, даже не задумываясь.
А делаю я по причине — нахуя ты мне 40 сообщений написал подряд? Ты думаешь я это читать буду? Нет! Я просто поставлю тебе сука лайк и дальше пойду делами своими заниматься.
😀 😃 😄 😁 😅 😂 🤣 😊
😇 🙂 🙃 😉 😌 😍 🥰 😘
😗 😙 😚 😋 😛 😝 😜 🤪
🤨 🧐 🤓 😎 🤩 🥳 😏 😒
😞 😔 😟 😕 🙁 ☹️ 😣 😖
😫 😩 🥺 😢 😭 😤 😠 😡
⚪ Выдели главное и напиши в 140 символов.
Давай разберемся когда «лайк» уместен.
Короткий ответ без флуда. Если человек пишет: «Встреча завтра в 11», и ты ставишь 👍 — это знак, что ты прочитал и согласен.
Эмоциональный отклик. «Спасибо, что помог!» — сердечко или смайлик даёт обратную связь, но не перегружает чат.
Командная культура. В некоторых компаниях реакциями заменяют лишние «ок», «понял», «согласен», и это экономит время.
Когда не уместен:
Личное обращение. Если коллега задаёт вопрос «Можешь помочь с этим?» и получает только реакцию, это может восприниматься как уход от диалога (послали нахуй).
Неясный контекст. Если сообщение неоднозначное («Нужно срочно переделать отчёт»), то реакция в виде 👍 может вызвать вопросы: «Это согласие? Или сарказм?»
Разные ожидания. Для кого-то реакция = полноценный ответ, а для кого-то — «отписался, лишь бы ничего не сказать» (это мой случай).
Ну так вот:
Если реакция однозначно отвечает на запрос (например, подтверждение), то это вполне корректно.
Если у собеседника может остаться неопределённость, то реакция без слов выглядит как недоответ.
Важно учитывать корпоративные нормы: где-то реакциями активно пользуются и это часть культуры, а где-то люди ждут хотя бы короткого текста.
Можно сформулировать простое правило:
- Если сообщение требует только «понял/согласен/спасибо» — реакция окей;
- Если есть риск недопонимания или человек вложил усилие — лучше ответить словами.
Ну и повторюсь — не пиши 10-20-30 сообщений подряд, никто их читать не будет, сформулируй мысль одним коротким предложением и напиши.
Ладно, теперь твои мысли давай в комменты.
Как ты относишься к таким лайкам?
🛠 #рабочиебудни
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
В ответ я получаю — даже не «нихуя», а реакцию (эмоджи) на мой вопрос, тупо ебать большой палец вверх. Типа — заебись!
ㅤ
А че заебись? Вы взяли это в работу, или заебись и вы очень рады, или что нахуй вообще происходит? Как это блядь интерпретировать?
ㅤ
Немного охуев от такого, я понимаю что я делаю так же, даже не задумываясь.
А делаю я по причине — нахуя ты мне 40 сообщений написал подряд? Ты думаешь я это читать буду? Нет! Я просто поставлю тебе сука лайк и дальше пойду делами своими заниматься.
Ну и еще ставлю «лайки», когда не хочу продолжать диалог, потому, что если напишешь текстом, то там ебанина начинается, про погоду, про проблемы в семье и т.п.
Про «приветы» уже много раз обсуждалось, для них отдельный котел.
Давай разберемся когда «лайк» уместен.
Короткий ответ без флуда. Если человек пишет: «Встреча завтра в 11», и ты ставишь 👍 — это знак, что ты прочитал и согласен.
Эмоциональный отклик. «Спасибо, что помог!» — сердечко или смайлик даёт обратную связь, но не перегружает чат.
Командная культура. В некоторых компаниях реакциями заменяют лишние «ок», «понял», «согласен», и это экономит время.
Когда не уместен:
Личное обращение. Если коллега задаёт вопрос «Можешь помочь с этим?» и получает только реакцию, это может восприниматься как уход от диалога (послали нахуй).
Неясный контекст. Если сообщение неоднозначное («Нужно срочно переделать отчёт»), то реакция в виде 👍 может вызвать вопросы: «Это согласие? Или сарказм?»
Разные ожидания. Для кого-то реакция = полноценный ответ, а для кого-то — «отписался, лишь бы ничего не сказать» (это мой случай).
Ну так вот:
Если реакция однозначно отвечает на запрос (например, подтверждение), то это вполне корректно.
Если у собеседника может остаться неопределённость, то реакция без слов выглядит как недоответ.
Важно учитывать корпоративные нормы: где-то реакциями активно пользуются и это часть культуры, а где-то люди ждут хотя бы короткого текста.
Можно сформулировать простое правило:
- Если сообщение требует только «понял/согласен/спасибо» — реакция окей;
- Если есть риск недопонимания или человек вложил усилие — лучше ответить словами.
Ну и повторюсь — не пиши 10-20-30 сообщений подряд, никто их читать не будет, сформулируй мысль одним коротким предложением и напиши.
А если хочется попиздеть, могу тебе желтую утку отправить. Поставишь ее напротив себя и пизди с ней сколько влезет.
Ладно, теперь твои мысли давай в комменты.
Как ты относишься к таким лайкам?
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 78
Смотри какая лялька: ExplainShell
ㅤ
Сервис помогает понять, что делает shell команда и все её параметры и ключи. Вставляешь например команду из прошлого поста:
И получаешь по ней полный разбор.
Работает достаточно просто, под капотом овер-дохуя ≈30к-man страниц. Штука оупенсорцная и лежит тут.
Логика работы:
1. Ман-страницы (разделы 1 и 8) загружаются и преобразуются в HTML.
2. Параграфы классифицируются – разделяются те, где описаны опции/флаги, и те, где нет.
3. Из отобранных параграфов извлекаются конкретные параметры и их описания.
4. Когда ты вводишь команду, она разбирается на синтаксическое дерево (AST) с помощью библиотеки
5. Компоненты команды («узлы» AST) сопоставляются с параметрами, найденными в ман-страницах.
6. Отображаем на фронте.
Вообще штука довольно бесполезная, но в образовательных целях очень даже вменяемая. Как раз для персонажей которые нихуя не понимают как ориентироваться в man страницах.
Ладно, глядишь сгодиться в хозяйстве.
🛠 #services #bash
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
ㅤ
Сервис помогает понять, что делает shell команда и все её параметры и ключи. Вставляешь например команду из прошлого поста:
strace -s 200 -f -e trace=network,recvfrom task sync
И получаешь по ней полный разбор.
Работает достаточно просто, под капотом овер-дохуя ≈30к-man страниц. Штука оупенсорцная и лежит тут.
Логика работы:
1. Ман-страницы (разделы 1 и 8) загружаются и преобразуются в HTML.
2. Параграфы классифицируются – разделяются те, где описаны опции/флаги, и те, где нет.
3. Из отобранных параграфов извлекаются конкретные параметры и их описания.
4. Когда ты вводишь команду, она разбирается на синтаксическое дерево (AST) с помощью библиотеки
bashlex.5. Компоненты команды («узлы» AST) сопоставляются с параметрами, найденными в ман-страницах.
6. Отображаем на фронте.
Вообще штука довольно бесполезная, но в образовательных целях очень даже вменяемая. Как раз для персонажей которые нихуя не понимают как ориентироваться в man страницах.
Хотя, кого я обманываю, сейчас каждый первый загоняет непонятную команду в GPT и оно тебе всё по полочкам раскладывает. Да еще и на русском языке.
Ладно, глядишь сгодиться в хозяйстве.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
2 69
Всегда делай хорошо, плохо само получится!
Сегодня я припёр тебе Vim Master. Херабора для тех, кто хочет приручить Vim. Это не скучный тутор, а что-то вроде игрульки.
16 уровней, челледжи на скорость, бейджики, всё по красоте. Устанавливать ничего не нужно, работает прям в браузере. Но если очень хочется, то оно с открытым исходным кодом, можно и себе воткнуть при желании…
ㅤ
Есть два режима: Cheat Mode для новичков и Challenge Mode для тех, у кого писька уже подросла.
Потыкай на досуге, освежи мышечную память.
🛠 #games #vim
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
Сегодня я припёр тебе Vim Master. Херабора для тех, кто хочет приручить Vim. Это не скучный тутор, а что-то вроде игрульки.
16 уровней, челледжи на скорость, бейджики, всё по красоте. Устанавливать ничего не нужно, работает прям в браузере. Но если очень хочется, то оно с открытым исходным кодом, можно и себе воткнуть при желании…
ㅤ
Есть два режима: Cheat Mode для новичков и Challenge Mode для тех, у кого писька уже подросла.
Потыкай на досуге, освежи мышечную память.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 57
Ищем баги с помощью strace
Предположим, крутится у тебя в проде какое-то приложение, это приложение было разработано криворукими обезьянами — на отъебись.
ㅤ
По итогу продакшен начинает троить и выжирать процессорное время. Хуита!
Явно требуется профилирование, но мыж с тобой не обезьяны, поэтому изучать код не будем. А сразу вооружимся
Запускаем:
Через несколько секунд жмём
Хм… эта падла активно пользуется системным вызовом
Виновника определили. То есть приложение постоянно что-то куда-то пишет, тем самым забивая 99% процессорного времени.
Важно понимать:
Здесь
Исходники у нас есть, давай посмотрим:
Что тут не так:
Из-за
Как пофиксить:
Теперь данные будут сбрасывать пачками, так как мы указали буферизацию, которая равна 1MB.
Проверяем до фикса:
Проверяем после фикса:
Количество вызовов
Как костыль и быстрофикс — сойдёт! Повторюсь — мы с тобой не обезьяны, чтобы вникать в код разработчиков и что-то в нем «правильно» править.
В большинстве случаев, ты просто находишь проблемы и уже с этими данными создаешь задачу на разработчика. Сам в код не лезь, целее будешь.
Ну и на закуску фикс, который сделали разработчики:
Как это работает:
1. StringIO хранит текст в оперативной памяти.
2. Цикл гонит туда строки.
3. Когда накопится, например, 1 MB, содержимое сбрасывается в файл одной большой порцией (
4. Буфер очищается и цикл продолжается.
Хуй знает на сколько это всё правильно, ну раз сделали через внутреннию буферизацию
Такие дела. Изучай.
🛠 #debug
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
Предположим, крутится у тебя в проде какое-то приложение, это приложение было разработано криворукими обезьянами — на отъебись.
ㅤ
По итогу продакшен начинает троить и выжирать процессорное время. Хуита!
Явно требуется профилирование, но мыж с тобой не обезьяны, поэтому изучать код не будем. А сразу вооружимся
strace и посмотрим где-же узкое горлышко.Запускаем:
strace -c python3 app.py
Через несколько секунд жмём
Ctrl-C и получаем статистику:% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ------
99.82 0.413251 8 49431 write
0.07 0.000291 32 9 mmap
0.05 0.000207 25 8 mprotect
0.03 0.000129 21 6 openat
0.02 0.000090 30 3 close
......
Хм… эта падла активно пользуется системным вызовом
write().time — процент процессорного времени, потраченного на вызов.usecs/call — среднее время на один вызов (в микросекундах).calls — сколько раз вызов был сделан.Виновника определили. То есть приложение постоянно что-то куда-то пишет, тем самым забивая 99% процессорного времени.
Важно понимать:
strace показывает только то время, которое ядро тратит на обработку системных вызовов. Поэтому значения могут отличаться от того, что покажет команда time:$ time python3 app.py
real 0m7.412s
user 0m1.102s
sys 0m6.184s
Здесь
sys совпадёт с тем, что мы видели через strace -c.Ну и теперь даже без доступа к исходникам можно быстро понять, где «утекают» ресурсы.
Исходники у нас есть, давай посмотрим:
with open("tmp.txt", "w") as f:
while True:
f.write("Привет супчики! Привет от BashDays!")
f.flush()Что тут не так:
Из-за
flush() Python гонит строку сразу в файловую систему, без буферизации.Как пофиксить:
# fixed.py
with open("tmp.txt", "w", buffering=1024*1024) as f:
while True:
f.write("Привет супчики! Привет от BashDays!\n")
Теперь данные будут сбрасывать пачками, так как мы указали буферизацию, которая равна 1MB.
Проверяем до фикса:
$ strace -c python3 app.py
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ------
99.8 0.413251 8 49431 write
Проверяем после фикса:
$ strace -c python3 app-fixed.py
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ------
98.9 0.072111 450 160 write
Количество вызовов
write() резко сократилось, нагрузка на ядро упала.Как костыль и быстрофикс — сойдёт! Повторюсь — мы с тобой не обезьяны, чтобы вникать в код разработчиков и что-то в нем «правильно» править.
В большинстве случаев, ты просто находишь проблемы и уже с этими данными создаешь задачу на разработчика. Сам в код не лезь, целее будешь.
Ну и на закуску фикс, который сделали разработчики:
import io
buffer = io.StringIO()
with open("tmp.txt", "w") as f:
while True:
buffer.write("Привет супчики! Привет от BashDays\n")
if buffer.tell() > 1024 * 1024:
f.write(buffer.getvalue())
f.flush()
buffer.seek(0)
buffer.truncate(0)
Как это работает:
1. StringIO хранит текст в оперативной памяти.
2. Цикл гонит туда строки.
3. Когда накопится, например, 1 MB, содержимое сбрасывается в файл одной большой порцией (
write + flush).4. Буфер очищается и цикл продолжается.
Хуй знает на сколько это всё правильно, ну раз сделали через внутреннию буферизацию
StringIO, значит так правильно.Такие дела. Изучай.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
108 75
Интровертизм в голове.
ㅤ
Сегодня подкормленный HR поделился формулой успеха.
Формула: На собесе хотят услышать, а на работе хотят увидеть.
Не стоит забивать на софт-скилы, хоть ты там ебать 100500 овердохуя умный лоб. Учись пиздеть (разговаривать). Даже если ты там прожженный интроверт — учись пиздеть, даже если тебе это не нравится.
Без пиздежа, ничего не получится. Ладно, получится, но ты сразу упрешься в потолок без перспектив.
Пиздёж в данном контексте — не ложь, а способ поддержать беседу, задать вопросы, поинтересоваться, прогнать какуюнить лютую дичь. Тут самое главное — сделать это уверенно, без ссанья в штанину и сранья на стену.
Прошел стадию с пиздежом, дальше у тебя будет — та самая, единственная задача на испытательном сроке. Которую никто не хочет делать. Которую не знают как сделать. А тебе придется это сделать!
А как её сделать? А ты придумай! Это твоя киллер-фича! Это твоё наследие (легаси). Если не можешь придумать — значит рановато пришел к этому боссу, откатись и качни свою жопку еще посильнее, откопай аммулет, высри бусину.
Короче как бы ты не хотел избегать людей, с ними придется общаться. Хотя бы для того, чтобы пройти HRа и задобрить его своим пиздежом.
Лично я терпеть не могу лично общаться, для меня целое испытание поехать поменять летнюю резину на зимнюю, либо кому-то позвонить и что-то узнать.
Со звонками ладно, делегировал, но есть вещи и дела где без тебя вопрос не решится. А если решится, то обязательно наебут.
Так что бери себя в руки, учись пиздеть (разговаривать), а если тебе это не нравится — терпи, улыбайся и разговаривай.
Интровертизм это в голове.
🛠 #рабочиебудни
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
ㅤ
Сегодня подкормленный HR поделился формулой успеха.
Формула: На собесе хотят услышать, а на работе хотят увидеть.
Не стоит забивать на софт-скилы, хоть ты там ебать 100500 овердохуя умный лоб. Учись пиздеть (разговаривать). Даже если ты там прожженный интроверт — учись пиздеть, даже если тебе это не нравится.
Без пиздежа, ничего не получится. Ладно, получится, но ты сразу упрешься в потолок без перспектив.
Пиздёж в данном контексте — не ложь, а способ поддержать беседу, задать вопросы, поинтересоваться, прогнать какуюнить лютую дичь. Тут самое главное — сделать это уверенно, без ссанья в штанину и сранья на стену.
Прошел стадию с пиздежом, дальше у тебя будет — та самая, единственная задача на испытательном сроке. Которую никто не хочет делать. Которую не знают как сделать. А тебе придется это сделать!
А как её сделать? А ты придумай! Это твоя киллер-фича! Это твоё наследие (легаси). Если не можешь придумать — значит рановато пришел к этому боссу, откатись и качни свою жопку еще посильнее, откопай аммулет, высри бусину.
Короче как бы ты не хотел избегать людей, с ними придется общаться. Хотя бы для того, чтобы пройти HRа и задобрить его своим пиздежом.
Лично я терпеть не могу лично общаться, для меня целое испытание поехать поменять летнюю резину на зимнюю, либо кому-то позвонить и что-то узнать.
Со звонками ладно, делегировал, но есть вещи и дела где без тебя вопрос не решится. А если решится, то обязательно наебут.
Так что бери себя в руки, учись пиздеть (разговаривать), а если тебе это не нравится — терпи, улыбайся и разговаривай.
Интровертизм это в голове.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
26 83
Довольно часто нужно быстро загрузить файл построчно в массив.
Как делает мальчик:
Как делает мужчина:
В первом варианте много кода, НО, работает везде. Во втором варианте, работает только в bash ≥4.0, но кода в разы меньше и не жрет CPU.
Либо расширь второй вариант и укажи:
Это гарантирует, что твой скрипт выполнится именно через bash, а не через системный
Ну и прицепом можешь добавить:
Это включение «строгого режима» в баше:
По итогу:
- Скрипт точно запустится под bash
- Ошибки не будут замалчиваться
- Сразу ловишь косяки
Удобно в CI/CD, где всё должно падать быстро и без хуйни.
Такие дела, изучай.
🛠 #bash
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
Как делает мальчик:
lines=()
while IFS= read -r line; do
lines+=("$line")
done < file.txt
echo "Первая строка: ${lines[0]}"
echo "Всего строк: ${#lines[@]}"
Как делает мужчина:
mapfile -t lines < file.txt
echo "Первая строка: ${lines[0]}"
echo "Всего строк: ${#lines[@]}"
В первом варианте много кода, НО, работает везде. Во втором варианте, работает только в bash ≥4.0, но кода в разы меньше и не жрет CPU.
Совет: если пишешь скрипт под bash — всегда используй mapfile. Если нужен кросс-шелл (sh,dash,ash) — оставайся на цикле.
Либо расширь второй вариант и укажи:
#!/usr/bin/env bash
Это гарантирует, что твой скрипт выполнится именно через bash, а не через системный
sh (который может быть dash, ash, ksh и т.п.).env ищет bash в $PATH, так что это более переносимо, чем жёстко указывать #!/bin/bashНу и прицепом можешь добавить:
set -euo pipefailЭто включение «строгого режима» в баше:
-e — выход из скрипта при любой ошибке (не игнорировать exit code ≠ 0).-u — ошибка при обращении к неинициализированной переменной (не будет пустых значений «по-тихому»).-o pipefail — пайплайны возвращают код ошибки первой упавшей команды, а не последней.По итогу:
- Скрипт точно запустится под bash
- Ошибки не будут замалчиваться
- Сразу ловишь косяки
Удобно в CI/CD, где всё должно падать быстро и без хуйни.
grep foo file.txt | wc -l
echo $? # 0, даже если grep ничего не нашёл
set -o pipefail
grep foo file.txt | wc -l
echo $? # 1, потому что grep ушел по пизде
Такие дела, изучай.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 69
Ща темку тебе интересную покажу…
ㅤ
Представим ситуацию — Писал ты код, который агрегирует файлы, рассчитывает их хеш по алгоритму MD5 и сохраняет в базу. Смысл - не сохранять повторно файл, который уже есть в базе.
Звучит пиздец банально. Ну дак вот.
В какой-то момент ты обнаруживаешь 2 файла, с разным содержимым, но с одним и тем же хешем. Да ёб твоб мать! А как такое возможно?
Возможно!
Как эта поебота работает описывать не буду, если интересно погугли, там это уже на 100500 разжевали и в рот положили.
Вернемся к баранам:
Создаём пару текстовых файлов:
Содержимое отличается одним символом (22 символ): В
Проверим, что так оно и есть:
Либо сразу выводим различия:
-
-
-
Ага, видим разницу.
Едем дальше, считаем MD5:
И видим:
Вот это нихуясебе! Наверное
Проверяем по другому:
Да нет, все правильно… Хеш одинаковый для разных файлов.
И что это всё значит?
Это наглядная коллизия и практическая атака на MD5 алгоритм.
На первый взгляд кажется, что «достаточно поменять один байт и можно случайно попасть в коллизию». Но на деле случайно это практически невозможно провернуть (вероятность ≈ 1 к
То, что я показал в примере с
То есть кто-то заранее просчитал, какой именно байт нужно поменять, чтобы скомпенсировать все внутренние изменения в состояниях MD5.
Практическая атака (2004–2008)
- В 2004 году Ван Сяоюнь с коллегами показали первую реальную коллизию для MD5 за считанные часы.
- В 2008 году был создан поддельный сертификат SSL с использованием MD5-коллизии (огромный скандал).
Вот с тех пор MD5 окончательно считается небезопасным.
Коллизии можно находить и создавать целенаправленно, поэтому не рекомендую использовать MD5 для проверки целостности, подписей, сертификатов и т.п.
Для этих задач лучше бери проверенный SHA-256 или что-то посильнее.
Вот такие пироги. Изучай!
🛠 #crypt #md5 #glitch
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
ㅤ
Представим ситуацию — Писал ты код, который агрегирует файлы, рассчитывает их хеш по алгоритму MD5 и сохраняет в базу. Смысл - не сохранять повторно файл, который уже есть в базе.
То есть для каждого нового файла, оно считает MD5 и ищет его в базе, если такого хеша нет, значит файл новый.
Звучит пиздец банально. Ну дак вот.
В какой-то момент ты обнаруживаешь 2 файла, с разным содержимым, но с одним и тем же хешем. Да ёб твоб мать! А как такое возможно?
Возможно!
MD5 ― это криптографическая хеш-функция, придуманная в 1991 году Рональдом Ривестом. Её задача — брать произвольные данные и сжимать их в 128-битное число (32 hex-символа).
Как эта поебота работает описывать не буду, если интересно погугли, там это уже на 100500 разжевали и в рот положили.
Вернемся к баранам:
Создаём пару текстовых файлов:
printf 'TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak' > a.txt
printf 'TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak' > b.txt
Содержимое отличается одним символом (22 символ): В
a.txt это A (ASCII 65, 0x41), в b.txt — E (ASCII 69, 0x45).Проверим, что так оно и есть:
xxd -g 1 a.txt | sed -n '1,2p'
xxd -g 1 b.txt | sed -n '1,2p'
xxd создаёт представление указанного файла или данных, прочитанных из потока стандартного ввода, в виде шестнадцатеричных кодов.
Либо сразу выводим различия:
cmp -l a.txt b.txt
22 101 105
-
22 → позиция (22-й байт в файле)-
101 (восьмеричное) → 0o101 = 65 (десятичное) = 0x41 = 'A'-
105 (восьмеричное) → 0o105 = 69 (десятичное) = 0x45 = 'E'cmp — утилита, которая сравнивает два файла побайтово и сообщает о первом отличии, если оно есть.
Ага, видим разницу.
Едем дальше, считаем MD5:
md5sum a.txt b.txt
И видим:
faad49866e9498fc1719f5289e7a0269 a.txt
faad49866e9498fc1719f5289e7a0269 b.txt
Вот это нихуясебе! Наверное
md5sum гличнулся…Проверяем по другому:
openssl dgst -md5 a.txt b.txt
MD5(a.txt)= faad49866e9498fc1719f5289e7a0269
MD5(b.txt)= faad49866e9498fc1719f5289e7a0269
Да нет, все правильно… Хеш одинаковый для разных файлов.
И что это всё значит?
Это наглядная коллизия и практическая атака на MD5 алгоритм.
На первый взгляд кажется, что «достаточно поменять один байт и можно случайно попасть в коллизию». Но на деле случайно это практически невозможно провернуть (вероятность ≈ 1 к
2^128).То, что я показал в примере с
A → E — это синтетическая пара, созданная криптографами специально с использованием дифференциального криптоанализа MD5.То есть кто-то заранее просчитал, какой именно байт нужно поменять, чтобы скомпенсировать все внутренние изменения в состояниях MD5.
Практическая атака (2004–2008)
- В 2004 году Ван Сяоюнь с коллегами показали первую реальную коллизию для MD5 за считанные часы.
- В 2008 году был создан поддельный сертификат SSL с использованием MD5-коллизии (огромный скандал).
Вот с тех пор MD5 окончательно считается небезопасным.
Коллизии можно находить и создавать целенаправленно, поэтому не рекомендую использовать MD5 для проверки целостности, подписей, сертификатов и т.п.
Для этих задач лучше бери проверенный SHA-256 или что-то посильнее.
Вот такие пироги. Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
17 93
Как оказалось многие не знают, как нативным
ㅤ
Все довольно просто и очевидно. Нужно сделать бутерброд.
В
1. Первая строка запускает скрипт в начале минуты (00:00, 00:01, 00:02…)
2. Вторая строка — ждёт 30 секунд и запускает скрипт (00:00:30, 00:01:30, 00:02:30…).
Тут и получаем шаг в 30 секунд, именно через 2 вызова.
Костыльно? Ага! Но порой не хочется ебаться с таймерами и сделать все по-быстрому. Как вариант, вполне годный. Аналогично можно городить и другие интервалы.
Минусы подхода
⚪ Нет гарантии точности. Если первый запуск скрипта будет работать дольше, чем пауза (
⚪ Мусор в crontab. Для мелкого интервала надо плодить много строк.
⚪ Нет гибкой логики.
Где это полезно
⚪ Лёгкие скрипты мониторинга (ping, проверка статуса).
⚪ Хаотизация нагрузки (например,
⚪ Если
А как работать с таймерами ищи по тегу #systemd, много про это писал.
🛠 #linux #cron #systemd
—
✅ @bashdays ✅ @linuxfactory ✅ @blog
cron (без systemd timers) запускать скрипты с интервалом в 30 секунд, без модификации самого скрипта.ㅤ
Все довольно просто и очевидно. Нужно сделать бутерброд.
Cron исторически работает только с минутной точностью. В crontab нельзя написать «каждые 10 секунд» или «раз в 30 секунд». Для этого обычно использую systemd timers или отдельный демонический скрипт с while true; sleep ...
В
crontab строка запускается раз в минуту. Но внутри можно поставить sleep — задержку перед запуском. Таким образом мы получим несколько запусков в рамках одной минуты.* * * * * /usr/local/sbin/bashdays.sh
* * * * * sleep 30; /usr/local/sbin/bashdays.sh
1. Первая строка запускает скрипт в начале минуты (00:00, 00:01, 00:02…)
2. Вторая строка — ждёт 30 секунд и запускает скрипт (00:00:30, 00:01:30, 00:02:30…).
Тут и получаем шаг в 30 секунд, именно через 2 вызова.
Костыльно? Ага! Но порой не хочется ебаться с таймерами и сделать все по-быстрому. Как вариант, вполне годный. Аналогично можно городить и другие интервалы.
Минусы подхода
sleep), запуски могут наложиться.Где это полезно
sleep $((RANDOM % 60)) для рассинхрона).systemd timers или другие планировщики недоступны (например, в ограниченных окружениях или старых системах).А как работать с таймерами ищи по тегу #systemd, много про это писал.
—
Please open Telegram to view this post
VIEW IN TELEGRAM