bashdays | Unsorted

Telegram-канал bashdays - Bash Days | Linux | DevOps

22119

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

Subscribe to a channel

Bash Days | Linux | DevOps

Не ssh, но близко — sftp.

Классная вещь, со своими достоинствами и недостатками. Гораздо круче, чем scp, поскольку кроме копирования позволяет управлять правами доступа.

По сравнению с ftp - возможность работы через один порт (легко пробрасывается) Протокол защищенный.

Из минусов - может создавать нагрузку на проц. В openssh включен из коробки. Поэтому если есть доступ по ssh - как правило, есть доступ и по sftp.

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

Вот, для этого есть решение — mysecureshell.

Для debian можно поставить:

sudo apt install mysecureshell


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

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

Достаточно пользователю прописать в качестве оболочки mysecureshell - и он человек, ограниченный файловой подсистемой. Кстати, список доступных оболочек можно глянуть так:

cat /etc/shells


А изменить, например так:

sudo usermod -s /usr/bin/mysecureshell username


Конфигурируется данное чудо путем редактирования файла /etc/ssh/sftp_config

Кстати, отлично сочетается с sshfs (монтирование через ssh (по факту через sftp)).

А вот с rsync, говорят не дружит, но я лично не проверял. Приводить примеры конфигурирования не стал, потому что там все очень понятно и прозрачно. Документация приличная, сам конфиг очень классно комментирован.

Репа Mysecureshell
Документация

tags: #linux #utilites © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

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

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

Пока мой архив был меньше 10 Тб, я не понимал, нахрена нужны инкрементные копии? А у кого-то петабайты...

Архивы настолько важны, что я даже слов подобрать не могу. Архивы - единственное, что может остаться после критического сбоя/атаки.

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

И из этого следует, что СХД для архивов должна быть самым защищенным элементом инфраструктуры. Очень хорошо, если на эту машину нельзя попасть никаким способом, кроме физического доступа.

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

Причем дисков должно быть минимум два с чередованием (месячным, недельным, ежедневным не важно, но чередование должно быть). Кроме того, есть холивар, по поводу того, кто должен быть инициатором соединения при архивировании - СХД или рабочий сервер.

Просто подумайте, кто больше подвержен атаке клиент или сервер. Конечно сервер. Поэтому для обеспечения минимальной безопасности архивов инициировать соединение должна СХД.

Я для себе решил вопрос с помощью "перевалочной базы" - Машины, на которую сервера сваливают одну дневную копию, и с которой СХД забирает все архивы.

Т.е. и рабочие сервера и СХД в этой схеме являются клиентами. Дело в том, что хорошо защитить один перевалочный сервер проще, чем каждый рабочий сервер.

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

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

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

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

Для нумерованных архивов для атаки - дату нужно менять несколько раз.

Причем число раз будет зависеть от схемы.

В общем резюмирую:

1. Хороших и плохих схем архивирования не существует - есть такие, которые подходят вам и не подходят.
2. СХД - самая защищенная машина инфраструктуры. Без возможности управления по сети.
3. Есть внешние копии с чередованием, на случай выхода из строя СХД.
4. Архивные копии между СХД и сервером передаются через промежуточную машину.
5. Несколько дневных копий можно ДОПОЛНИТЕЛЬНО хранить на самом рабочем сервере.
6. Используем нумерованные архивы с ротацией.

Холивар в коммментах приветствуется.

tags: #рабочиебудни © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

С пятницей ребят!

Недавно пришло письмо от мейл.ру мол у вас SPF запись пиздец хуёвая.

SPF-запись домена https://bashdays.ru задана таким образом, что для ее проверки необходимо 36 DNS-запросов из 10 допустимых.


Я человек простой — вижу хуйню, прохожу мимо. Но тут пройти не смог, какой-то животный интерес возник. Что это еще за 10 допустимых запросов?

Проресерчив тему, нашел сервис SPF Surveyor который как раз анализирует текущую SPF запись и выводит результат.

➡️ Рекомендую добавить сервис в закладки, для дебага самое оно!

От результата я знатно прихуел, вот моя SPF:

v=spf1 mx a include:spf.gca.to include:_spf.google.com include:spf.smtp.bz include:mindbox.ru ~all


И результат: 36/10

И чо мне с этим делать? Для начала убрал mx и a, по итогу получил результат: 18/10. Уже лучше, поехали дальше оптимизировать!

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

Перегуглил… нииихуууя!

И как это дерьмище сокращать? Если каждый инклуд содержит в себе еще сабинклуды. Сука!

Короче пост не про решение проблемы, а про сервис SPF Surveyor.

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

Такие дела…

tags: #рабочиебудни

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

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

Вас много и полюбому кто-то с этим уже столкнулся и живет в клубе по интересам. Вопрос — как эту хуйню захотфиксить? Мидокалм, пластыри и т.п. гавно это понятно.

В ремиссии чо делаете? ЛФК из чего состоит? Я ебать попробовал по официальному мануалу от невролога как котик спину выгибать и вгибать на корачках, через полчаса с температурой слег ))

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

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

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

Короче коллеги-калеки поделитесь инвайтом в ваш клуб и методичкой чо делать, спасибо ) Всем отвечу уже завтра, пойду плакать.

tags: #рабочиебудни

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

МТС приглашает DevOps-инженеров на митап True Tech DevOps

10 октября | 19:00
Офлайн в Москве | Онлайн

Инженеры МТС и приглашенные эксперты разберут кейсы использования Service Mesh. Обсудим, какими критериями следует руководствоваться при выборе инструментов, как проходит процесс опромышлевания решения, подводные камни и личный опыт.

А еще разберемся с доставкой чувствительных данных в Kubernetes и проведением тренировок по устранению инцидентов. Для участия зарегистрируйся по ссылке.

Читать полностью…

Bash Days | Linux | DevOps

🙂 Как эффективно и безболезненно внедрить DevSecOps?

Positive Technologies выпустили в помощь общедоступную методологию внедрения практик безопасной разработки — AppSec Table Top.

📖 Внутри — набор принципов и подходов, которые помогут выстроить AppSec-процессы с учетом интересов бизнеса, требований регуляторов и потребностей команд.

В методологии учтена передовая экспертиза Positive Technologies в области application security, а также лучшие российские практики и зарубежные наработки.

Скачивайте гайдлайн на сайте, а дальше... вы будете знать, что делать.

Читать полностью…

Bash Days | Linux | DevOps

Открытый вебинар «5 ошибок администрирования K8s» от Слёрм.

Ошибка № 1. Ставить Kubernetes
Ошибка № 2,3,4,5. Пытаться его настроить...

Куб либо всегда говорит правду, либо всегда лжет, но вы никогда об этом не знаете… Как с этим работать?
Обсудим на вебинаре 2 октября.

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

🔵 PVC и StatefulSet для Stateful приложений
Или как потерять все данные из своей БД

🔵 CoreDNS Overload
Узкие места в кубах: медленные межсерверные взаимодействия при большом трафике

🔵 Kubelet memory overcommit on the node
Или как дестабилизировать куб на своих нодах

🔵 CPU limits
Продолжаем наступать на эти грабли: как неэффективно управлять ресурсами приложения


Бонус от Слёрм:
На вебинаре подарим одному участнику место на курсе «K8s База»

пикеры:
- Кирилл Борисов. SRE в VK
- Всеволод Севостьянов. Staff engineer в Lokalise

Когда вебинар: 2 октября в 17:00 мск
Регистрация через бот


Реклама ООО «Слёрм» ИНН 3652901451

Читать полностью…

Bash Days | Linux | DevOps

Yandex Cloud анонсировала сервис по аренде выделенных физических серверов

Yandex BareMetal позволит арендовать выделенные физические сервера и гибко настраивать их для размещения любого программного обеспечения, в том числе средств виртуализации. Компании уже могут подать заявку на закрытое тестирование сервиса Yandex BareMetal, которое начнется до конца 2024 года.

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

Читайте подробнее в блоге.

Читать полностью…

Bash Days | Linux | DevOps

Ты DevOps инженер и видишь этот пост?
Это знак: Яндекс Практикум ждёт именно тебя!


Яндекс Практикум ищет наставников на курс «DevOps».
Наставник ведет вебинары и отвечает на вопросы студентов в чате, проверяет домашние задания и мотивирует, помогает с трудностями во время обучения.

Мы ждем, что вы:
• знаете, что такое DevOps, зачем он был придуман и при каких обстоятельствах
• имеете опыт работы с DevOps-инструментами от 3 лет (CI\CD, Docker, Kubernetes, GitLab)

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

📩 Узнать подробности и откликнуться здесь.

Читать полностью…

Bash Days | Linux | DevOps

🚀 Вебинар о современном подходе к разметке диска! 🚀
Тема: Современный подход к разметке диска
Рассмотрим эволюцию разметки дискового пространства на примере ОС Linux

На вебинаре вы узнаете:
- Какие требования к дисковому пространству предъявляют современные технологии
- Почему нужны дополнительные уровни абстракции
- Чем плох старый подход к разметке и почему лучше избегать логических разделов

📅 Дата и время: 27.09 в 20:00 (мск)
🔔 Не упустите шанс! Узнайте, как грамотно планировать дисковое пространство и увеличивать файловую систему на логическом диске!


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

🔗 Ссылка для регистрации:  https://otus.pw/9X5M/

🔆 Спикер: Андрей Буранов

📌 Занятие пройдёт в рамках курса «Administrator Linux. Basic». Доступна рассрочка на обучение!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Bash Days | Linux | DevOps

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

Понимая это, Яндекс Лицей запустил годовую онлайн-программу по одному из самых популярных языков программирования — Go. Все задания разработаны специалистами из индустрии, а потому акцент в них сделан на практике. Во время обучения вы разберётесь, как писать понятный и конкурентный код, познакомитесь с системой контроля версий Git, а также начнёте проектировать микросервисы.

Что ещё?
- Учиться можно онлайн и в комфортном темпе.
- Чтобы начать обучение, не нужно проходить вступительные испытания.
- Обучение полностью бесплатное.

Программа подойдёт подросткам 13-20 лет. Подайте заявку до 30 сентября и учитесь у лучших!

Читать полностью…

Bash Days | Linux | DevOps

Активируйте режим супергероя.

26 сентября в 11:00 (МСК) «Лаборатория Касперского» в прямом эфире представит обновленное решение Kaspersky EDR для бизнеса Оптимальный 3.0. Базовые функции EDR теперь стали доступны не только для Windows, но и для Linux и macOS.

На стриме эксперты расскажут, как с помощью автоматизированных сценариев вы сможете предотвратить развитие атаки на рабочие места на Windows, Linux и macOS всего в несколько кликов и какие еще полезные возможности для вас открывает Kaspersky EDR для бизнеса Оптимальный 3.0.

ЗАРЕГИСТРИРОВАТЬСЯ

До встречи на стриме!

Читать полностью…

Bash Days | Linux | DevOps

DevOps-инженеры, пост для вас 😉

«Орки тут» — бесплатный митап 💜💜💜 для DevOps-инженеров и не только 🎙

Темы докладов 👇
🟣 Apache Kafka в кластере логов: что было сделано не так?
🟣Один deploy, чтобы править всеми: как скрестить K8s, Ansible и Jenkins, не привлекая внимания санитаров.

Встречаемся 24 сентября в 19:00 (мск) онлайн и офлайн в Санкт-Петербурге.

Чтобы поучаствовать и узнать подробности, зарегистрируйтесь на сайте митапа «Орки тут».

Читать полностью…

Bash Days | Linux | DevOps

YADRO приглашает талантливых инженеров технической поддержки на One Week Offer 🔍

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

Своими знаниями ребята готовы делиться с новыми сотрудниками через обучение и наставничество.

🔵 Скорее оставляй заявку и присоединяйся к команде!

Читать полностью…

Bash Days | Linux | DevOps

🚀 Вебинар по балансировке нагрузки в Nginx! 🚀
Тема: Балансировка нагрузки в Nginx
Спикер: Николай Лавлинский

На занятии вы:
- Познакомитесь с вариантами балансировки нагрузки
- На практике изучите различные методы балансировки нагрузки в Nginx и их настройку

🔔 Не упустите шанс! Узнайте, как эффективно балансировать нагрузку в Nginx и улучшить производительность ваших веб-приложений!

Для кого:
- Системным администраторам Linux
- Веб-разработчикам
- Всем, кто планирует изучить вопрос балансировки нагрузки средствами Nginx

Преимущества участия в вебинаре:
- Понимание ключевых отличий методов балансировки
- Навыки применения различных вариантов балансировки в веб-приложениях

🔗 Ссылка для регистрации:  https://otus.pw/H7Wg/

⏰ Занятие пройдёт 23 сентября в 19:00 по мск в рамках курса «Инфраструктура высоконагруженных систем». Доступна рассрочка на обучение!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Bash Days | Linux | DevOps

❓ Хотите узнать, как контейнеризация может изменить ваш подход к разработке и администрированию?

👉 Ждем вас на открытом вебинаре 10 октября в 19:00 мск, где мы разберем:

- концепцию контейнеров и их отличия от виртуализации;
- основные принципы применения контейнеризации;
- особенности файловой системы в Docker;
- принцип работы Docker на практике: запуск приложения в контейнере со всеми необходимыми настройками.

=======
👉 Регистрируйтесь прямо сейчас: https://otus.pw/2shl/
=======

🔆 Спикер Николай Лавлинский — технический директор в Метод Лаб, PhD Economic Science, опытный руководитель разработки и преподаватель.

Встречаемся в преддверии старта курса «Administrator Linux. Basic». Все участники вебинара получат специальную цену на обучение!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Bash Days | Linux | DevOps

Не хватает практики и знаний для работы с K8s?

➡️ Поможем DevOpsам систематизировать знания и освоить навыки работы с кластером
⚡️А на бонусном курсе «Основы ИБ» научим обеспечивать безопасность на самых начальных этапах

Курс «Kubernetes База»
Видеокурс «Основы ИБ»
«Ansible.Основы» и «Docker.Основы»

70 000 ₽ (вместо 105000 ₽)
Промокод на скидку в боте до 11 октября


⭐️ОБНОВИЛИ ВЕСЬ КУРС «K8s База»

Чему научим:
Основам работы с K8s, системой автоматизации развертывания, масштабирования и управления приложениями в контейнерах.
Запускать кластер, работать с базовыми абстракциями и подключать дополнительные компоненты
Запускать приложения в кластере, понимать принципы работы сети и настраивать CI/CD пайпланы
Ориентироваться во всех доменах информационной безопасности
Выстраивать безопасную инфраструктуру и разработку

Старт потока 7 октября
➡️ 6 недель обучения
➡️ 63 часа практики
➡️ 5 встреч со спикерами

👉 Промокод и подробнее о курсе в боте

Реклама ООО «Слёрм» ИНН 3652901451 erid:2VtzqumNrFb

Читать полностью…

Bash Days | Linux | DevOps

❓ Хотите автоматизировать управление конфигурациями серверов и приложений?

Ждем вас на открытом вебинаре , где мы разберем:
- основные концепции Salt: как работает Salt, что такое состояния и модули;
- как использовать Salt для автоматизации задач: установка ПО, настройка сервисов и т.д.;
- примеры практического применения Salt.
👉👉👉 Регистрируйтесь прямо сейчас: https://otus.pw/rb1D/

📅 Дата и время: 7 октября в 20:00 мск
📌 Урок для DevOps-инженеров, системных администраторов и разработчиков, которым необходимо настроить среду разработки и развернуть свои приложения.

Встречаемся в преддверии старта курса «Инфраструктура высоконагруженных систем». Все участники вебинара получат специальную цену на обучение!

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Bash Days | Linux | DevOps

Принцесса для снятия стресса

Привет. Когда ты создаешь новый docker контейнер, то по умолчанию этому контейнеру назначается имя. Откуда оно берется?

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


<прилагательное><фамилия> и всегда написаны в нижнем регистре.

Например:

quirky_pare
agitated_turing
furious_heisenberg
romantic_curie


Окей. После некоторого ресёрча оказалось, что 90% докера написано на Golang. Вот это поворот!

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

➡️ Посмотреть можешь тут.

Мотаем этот код в самый низ и видим забавную хуйню:

if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
goto begin
}


Этакая пасхалочка. Но зачем все эти имена?

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

Ну и на закуску адаптируем полученные знания на bash, генератор может выглядеть так:

#!/bin/bash

adjectives=(
"adoring" "agitated" "amazing" "angry" "awesome" "blissful" "bold"
"boring" "brave" "clever" "cool" "compassionate" "competent" "crazy"
"dazzling" "determined" "ecstatic" "elegant" "eloquent" "epic"
"exciting" "fervent" "focused" "furious" "gallant" "gifted" "goofy"
"gracious" "happy" "hardcore" "hopeful" "hungry" "infallible" "inspiring"
"jolly" "jovial" "keen" "kind" "laughing" "loving" "magical"
"mystifying" "naughty" "nervous" "nostalgic" "optimistic" "peaceful"
"practical" "priceless" "quirky" "recursing" "relaxed" "reverent"
"sad" "serene" "sharp" "silly" "sleepy" "stoic" "strange" "stupefied"
"suspicious" "tender" "thirsty" "trusting" "unruffled" "vibrant"
"vigilant" "wizardly" "wonderful" "youthful" "zealous" "zen"
)

scientists=(
"albattani" "allen" "archimedes" "ardinghelli" "babbage" "bashdays" "banach"
"banzai" "bardeen" "bartik" "bassi" "bell" "benz" "bhabha" "bhaskara"
"blackwell" "bohr" "booth" "borg" "bose" "boyd" "brahmagupta" "brattain"
"brown" "carson" "chandrasekhar" "colden" "cori" "cray" "curie"
"darwin" "davinci" "dijkstra" "dubinsky" "easley" "einstein"
"elion" "engelbart" "euclid" "euler" "fermat" "fermi" "feynman"
"franklin" "galileo" "galois" "goldberg" "goodall" "hawking"
"heisenberg" "hermann" "herschel" "hertz" "hodgkin" "hoover" "hopper"
"hypatia" "joliot" "kalam" "keller" "kowalevski" "lalande" "leavitt"
"lichterman" "liskov" "lovelace" "mayer" "mccarthy" "mcclintock"
"mclean" "mcnulty" "meitner" "mendel" "mendeleev" "minsky" "mirzakhani"
"moore" "napier" "newton" "nobel" "noether" "panini" "pare"
"pasteur" "payne" "perlman" "pike" "poincare" "ptolemy" "raman"
"ramanujan" "ride" "ritchie" "roentgen" "rosalind" "saha"
"sammet" "shockley" "sinoussi" "stallman" "stonebraker" "swanson"
"tesla" "thompson" "torvalds" "turing" "varahamihira" "visvesvaraya"
"wilbur" "wiles" "williams" "wilson" "wing" "wozniak" "wright"
"yonath"
)

generate_container_name() {
local adjective="${adjectives[RANDOM % ${#adjectives[@]}]}"
local scientist="${scientists[RANDOM % ${#scientists[@]}]}"
echo "${adjective}_${scientist}"
}

count=${1:-10}
for ((i=1; i<=count; i++)); do
generate_container_name
done


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

Теперь ты в праве заполнить массивы своими данными и генерировать уникальные имена, например: pizdatiy_huy или ohuennaya_pizda.

А потом использовать сразу в командах:

docker run --name $(bash script.sh) -d nginx


Есть еще такая штука:

alias dn='curl -s https://frightanic.com/goodies_content/docker-names.php'


Это выплюнет тебе подобное имя прям в консоли без скриптов и приседаний.

А еще есть библиотека на питоне — codenamize, которая проворачивает тоже самое.

Короче есть из чего выбрать. В общем пользуйся, прикручивай, изучай!

tags: #linux #bash #docker

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Решился я тут по быстрому взгромоздить proxmox на пятую малину, благо есть решение — Pimox7.

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

Кто не в курсе:

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


Всё чего я добился с Pimox7:

The following packages have unmet dependencies:
ceph-fuse : Depends: libfmt7 (>= 7.1.3+ds1) but it is not installable
libpve-rs-perl : Depends: perlapi-5.32.1 but it is not installable
libpve-u2f-server-perl : Depends: perlapi-5.32.1 but it is not installable
librados2-perl : Depends: perlapi-5.32.1 but it is not installable
lxc-pve : Depends: libgnutlsxx28 but it is not installable
pve-cluster : Depends: perlapi-5.32.1 but it is not installable
pve-qemu-kvm : Depends: liburing1 (>= 0.7) but it is not installable


Какой-то сука перл... Ну раз такое дело, надо решать! Фиксить скрипт Pimox7 я ебал, поэтому устроил анал-карнавал и зашел с черного хода.

В телеге с разметкой беда, поэтому запилил свою «официальную документацию» в другом месте. Мож кому пригодится 👇

➡️ Proxmox на Raspberry Pi 5

Хорошего тебе дня-вечера, увидимся!

tags: #linux #рабочиебудни

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Здрасти. Давай сегодня соберем свой «мета-пакет».

Что такое «мета-пакет»? Нууу…

Например, я хочу разом поставить htop, git, rclone, mc и прочее. И чтобы не вводить команду на установку:

apt install htop git rclone mc


Я могу поставить один «мета-пакет», который будет содержать в себе все эти утилиты. Что-то из оперы Zver DVD, где нужный софт ставился сразу пачкой.

Поехали тыкать палкой!

Ставим зависимости и готовим окружение:

sudo apt-get install -y build-essential devscripts dh-make


Создаем структуру для «мета-пакета»:

cd /tmp
mkdir bashdays-soft
cd bashdays-soft


Создайте контрольные файлы пакета:

dh_make --native --single --yes -p bashdays-soft_1.0


Ключи:

native — создаёт пакет без указания версии дистрибутива
single — создаёт минимальную структуру
-p my-metapackage_1.0 — имя пакета и версия (1.0)

В ответ получаем выхлоп:

Maintainer Name : root
Email-Address : root@unknown
Date : Sun, 29 Sep 2024 03:58:22 +0000
Package Name : bashdays-soft
Version : 1.0
License : gpl3
Package Type : single


Открываем файл на редактирование:

vim debian/control


И хуячим описание для «мета-пакета»:

Source: bashdays-soft
Section: misc
Priority: optional
Maintainer: Roman Shubin <hello@devopsina.ru>
Standards-Version: 4.5.0
Build-Depends: debhelper-compat (= 11)

Package: bashdays-soft
Architecture: all
Depends: mc, htop, curl, git
Description: My own Installer


В секции Depends перечислены все пакеты, которые должны быть установлены вместе с мета-пакетом. У меня это mc, htop, curl, git.

Параметр Architecture: all указывает, что пакет не зависит от архитектуры.

Собираем «мета-пакет»:


debuild -us -uc


Ключи -us и -uc отключают подпись пакета.

Смотрим что получилось:

ls -la ..


И видим:

bashdays-soft_1.0.tar.xz
bashdays-soft_1.0_all.deb


Наш «мета-пакет готов». Давай теперь его установим и посмотрим что получилось:

sudo apt install -yf ../bashdays-soft_1.0_all.deb


Проверяем и видим что произошла установка всех пакетов которые я описал в секции Depends в файле debian/control. ЗБС!

Проверить можно так:

dpkg -l mc htop curl git


В ответ получишь красивую табличку и информацию о пакетах.

Теперь можешь приготовить свой собственный «мета-пакет» со всем необходимым и быстренько раскатывать его на новые сервера.

Темка достаточно интересная, поэтому рекомендую потыкать.

Пользуйтесь!

tags: #linux

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

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

Проблема усугубляется тем, что на сервере нет ipmi или аналогов, кроме того, в окружении нет админа. Поэтому конфигурировать сеть нужно по ssh.

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

Скрипт поможет в случае чего восстановить конфигурацию, в случае моего косяка.

Алгоритм работы следующий:

0. Есть работающий сервер.

1. При запуске создается резервная копия защищаемого каталога конфигурации /etc

2. В crontab добавляется задание, которое через определенное время ПОСЛЕ ПЕРЕЗАГРУЗКИ восстановит каталог из копии.

3. Если вышеуказанное задание определит, что в систему по ssh вошел указанный пользователь, восстановление отменяется и задание из crontab убирается.

4.Если пользователь не смог войти в систему - сначала создается вторая резервная копия защищаемого каталога (на тот случай, если сконфигурировали все правильно, но забыли/не смогли войти из-за проблем на вашей стороне, ну и для анализа), после этого производится восстановление резервной копии из пункта 1, убирается задание из crontab и производится перезагрузка сервера. Сервер приведен к пункту 0.


Пользоваться этой цацой просто:

1. ПЕРЕД НАЧАЛОМ КОНФИГУРИРОВАНИЯ запускаем скрипт, Он запрашивает имя пользователя и время ожидания до восстановления ПОСЛЕ ПЕРЕЗАГРУЗКИ.

2. Конфигурируем сервак.

3. Отправляем сервак в перезагрузку. (Да, не лучший вариант, но по сравнению с командировкой фигня).

4. Пытаемся войти по ssh.


По ssh мы войдем в любом случае. Или быстро (если сервак сконфигурировали правильно) или по окончании времени ожидания и перезагрузки.

Обращаю внимание - если пользователь смог войти в систему - Сервер считается работоспособным, задание из cron убирается.

И если вы решите что-то снова поконфигурировать - нужно снова запускать скрипт и один-два раза перезагружать сервак. Лучше составьте план действий.

Скрипт тестировался на debian путем удаления каталога /etc/network

Используйте скрипт под свою ответственность. Гарантировать, что он заработает на вашей системе я не могу. Для начала попробуйте защить какой-нибудь каталог в домашней директории.

Скрипт не сможет восстановить конфигурацию, если машина не грузится совсем (ну, например грохнули fstab)

На Alpine точно не работает по двум причинам:

1. crontab не понимает опцию @reboot (проблема решаемая через /etc/inid.d)

2. по умолчанию не работают команды last, who, w. Поэтому несколько проблематично определить наличие пользователя в системе.

➡️ Скрипт в комментариях к этому посту, сюда не влез сука!

tags: #bash #linux © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Привет. Почему-то я думал что сегодня пятница, мда…

Ладно, поехали. Ты всяко встречался с такой ебаной ошибкой при подключении к серверу по ssh:

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Please contact your system administrator. Add correct host key in /home/your_user/.ssh/known_hosts to get rid of this message. Offending RSA key in /home/your_user/.ssh/known_hosts:xx


У меня коллеги обычно сразу прибегают и начинают подозревать неладное — ааа спасите, сервер взломали, не могу подключиться! Паникёры блядь…


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

Чо за ошибка и что нужно делать?

Файл ~/.ssh/known_hosts используется для хранения списка хостов, с которыми ты ранее взаимодействовал по ssh.

Когда ты впервые подключаешься к новому удалённому серверу по ssh, клиент ssh сохраняет его ключ в этот файл.

В дальнейшем, при каждом подключении к этому серверу, ssh-клиент сверяет ключ сервера с тем, что хранится в файле known_hosts.

Это помогает удостовериться, что ты подключаешься к правильному серверу, а не к какому-то левому.

Короче вся эта чача сделана для безопасности, чтобы избежать анальной атаки — «мужик посередине».


Но нам то бояться нечего, поэтому забиваем хуй и избавляемся от этого раз и навсегда.

Открываем свой локальный /etc/ssh/ssh_config или ~/.ssh/config и херачим в него такое:

Host * 
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null


Всё! Теперь даже если случится «мужик посередине», ты успешно подключишься к серверу без всяких ошибок.

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

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

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@hostname


Либо сделать алиас:

alias ssh = "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"


А если всё делать по уму и остерегаться «мужика посередине»:

1. Наводим справки, что случилось с сервером у админов
2. Если все ок, делаем так: ssh-keygen -R <hostname_or_ip>

После этой команды, файл known_hosts подчиститься и ошибка отправится в пешее эротическое.

Чо тебе еще рассказать? Особо больше нечего по этой теме.

А если тебе есть что добавить — велком в комментарии.

Давай краба! Завтра надеюсь точно пятница…

tags: #linux

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Порой бывает необходимо прям из bash-скрипта добавить/удалить какое-нибудь задание в cron.

Ниже пара функций, которые позволяют это сделать. И если с добавлением вообще проблем не возникает

{ crontab -l; echo '#@reboot echo BashDays >/tmp/BashDays.txt' ; }| crontab -


ИЛИ:

{ crontab -l; echo '#*/10 * * * 5 echo BashDays >>/tmp/BashDays.txt' ; }| crontab -


Можно конечно и так, но вдруг одинаковых заданий может быть несколько и их нужно будет как-то различать.

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


#!/bin/bash

function ADD_CRON_TASK(){
local CRON_TASK=${1:-'#'}
local COMMENT=${2:-$(date +%s)}
COMMENT=${COMMENT// /_}
{ crontab -l 2>/dev/null; echo "$CRON_TASK #$COMMENT"; }| crontab -
}

function REMOVE_CRON_TASK(){
if [[ $# -eq 0 ]];then
echo No comment to remove cron task >&2
return
fi
COMMENT=${1// /_}
crontab -l 2>/dev/null|sed '/#'$COMMENT'$/d'|crontab -
}

CRON_TASK='#@reboot reboot'
COMMENT="My litle joke"
ADD_CRON_TASK "$CRON_TASK" "$COMMENT"

crontab -l|tail -3

echo '###################################################'
REMOVE_CRON_TASK "$COMMENT"

crontab -l |tail -3


Если запустить программу, увидите что-то типа:

# 
# m h dom mon dow command
# @reboot reboot #My_litle_joke
#############################
# For more information see the
#
# m h dom mon dow command


Видно, что программа добавила задание, вывела последние три строки crontab'a, потом разделитель.

Затем задание было удалено. Это видно по последним трем строкам.

В комментариях задания пробелы заменяются на "_" для упрощения работы c sed.

Ну, и на всякий пожарный напомню, что для корректной работы с cron нужно задать переменную PATH либо в crontab, либо в скрипте.

tags: #bash #linux © by Tagd Tagd

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Вчера мы рассмотрели способы как отреверсить Dockerfile с помощью рук и глаз.

Сегодня рассмотрим никому не известную утилиту — «Дедок».

Утилита написана на питоне и позволяет свести к минимуму handjob по реверсу.

Грубо говоря «Дедок» проанализирует твой docker image и выплюнет на экран готовый Dockerfile.

Ну как готовый, очень приближенный к реальности.

Работает эта хуйня очень просто — парсит history и избавляется от лишней хуйни. Но хуйня порой пролетает, так что будь к этому готов.

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

docker run -v /var/run/docker.sock:/var/run/docker.sock mrhavens/dedockify <ID Image>


Либо сразу в алиас:

alias dedoc="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm mrhavens/dedockify"


Предварительно подставь нужный ID Image.


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

➡️ Репа проекта и документашка.

Развлекайся. Увидимся совсем скоро!

tags: #debug #devops #docker

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Реверсим Dockerfile

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

Как произвести реверсинг?

Для примера соберем образ из такого Dockerfile

FROM python:3.8-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]


Запускаем сборку имейджа:

docker build -t pythoner:latest .


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

docker history pythoner:latest


Результат команды выведет протокол сборки + команды. Но команды будут урезанными. Для того чтобы получить полный листинг, делаем так:

docker history --no-trunc pythoner:latest


Вылетит простыня, но при сноровке и насмотренности, всё вполне предсказуемо.

В идеале совмещаем с dive, смотрим окно Layers и стрелками перемещаемся по слоям, а там уже видно все команды, которые выполнялись из Dockerfile.

По итогу из говна и палок собираем копию нужного нам Dockerfile.

А файлы, которые были добавлены через COPY, вытягиваем себе на локальную машину так:

docker cp <image id>:/etc/nginx/nginx.conf /tmp


Про дебаг докер имейджей и контейнеров я писал в этом посте, почитай, достаточно информативно.


Как вариант можешь воспользоваться анализаторами, например trivy.

Trivy это комплексный и универсальный сканер безопасности для docker images. Заодно еще безопасность своих решений можно позырить и приуныть.

А еще есть клевая поделка для этого на python, но про нее закину уже завтра.

Вот такие пироги, если знаешь еще способы — пиши в комменты, будет полезно!

tags: #debug #devops #docker

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

🔥 Говяжий дошик ВСЁ!

Есть штука прикольнее, называет — tig.

Это утилита-обёртка для git с консольной мордой лица (ncurses). Охуенно заходит для быстро позырить историю коммитов и прочие непотребства.

- Просмотр истории и логов
- Отображение состояния репозитория
- Работа с изменениями на уровне отдельных блоков
- Поиск по содержимому файлов


Можно конечно и через нативные git командами всё это глянуть, но любителям новогодних ёлок — tig однозначно зайдёт.

Звездочек у проекта достаточно дохуя (12к), поэтому рекомендую забрать в свой рабочий инструментарий. Авось зайдёт на постоянку. Потыкай.

Установка: apt install tig

Репа на гитхабе: https://github.com/jonas/tig

tags: #utils #linux

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Чтобы каждый раз не задрачивать жесткий диск операциями — чтение/запись, ядро Linux обычно сохраняет некоторую часть данных в памяти.

Представим ситуацию — у тебя на кухне гудит сервак, ты запускаешь на нем apt update и внезапно отключают свет. Через минуту свет включают, ты запускаешь вновь apt update, а оно тебе орет:

The package cache file is corrupted


Что это за покемон? Почему оно сломалось?

Потому что во время операции apt update, часть данных была сохранена в памяти и данные просто не успели записаться на диск. Соответственно целостность файла с кешем была похерена.

Давай посмотрим:

free -h


Смотрим столбец buff/cache, в нем видим что-то вроде: 383Mi.

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

В Linux есть команда sync, которая позволяет насильно записать все данные из памяти на диск.

Но если после sync повторно запустить free -h, изменений ты не увидишь, потому что sync ничего не зачищает, а только записывает.

Зачистить можно так:

sync; echo 1 > /proc/sys/vm/drop_caches
sync; echo 2 > /proc/sys/vm/drop_caches
sync; echo 3 > /proc/sys/vm/drop_caches


Хуячим командами в ядро и зачищаем buff/cache, теперь можно снова запустить free -h и лицезреть меньший размер.

Очищает кэш страниц (page cache), который используется для кэширования содержимого файлов и каталогов.

Очищает только кэш объектов inode и dentry (данные о файловой системе, такие как пути и метаданные файлов).

Очищает как кэш страниц, так и кэш объектов inode и dentry.

Где применять?

1. Перед отключением устройства (umount)
2. Перед очисткой кэшей памяти (drop_caches)
3. После крупных файловых операций
4. В bash скриптах для безопасного завершения

А для анализа всех этих кешей, памяти, буферов и т.п. есть несколько утилит: vmtouch, bpfcc-tools, dstat. Можешь потыкать на досуге.

Пользуйтесь!

tags: #linux

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Как ускорить установку пакетов

Берем для примера пресловутый midnight commander и устанавливаем повторно + снимем бенчмарку.

time apt install -y --reinstall mc
real: 2.977s


Почти 3 секунды. Приемлемо. Но если нужно поставить 100 пакетов, то в среднем это займет 300 секунд или 5 минут. Уже дохуя!

Давай оптимизируем этот процесс и превратим 300 секунд в 150, а то и меньше.

Устанавливаем утилиту eatmydata:

apt install eatmydata


Устанавливаем midnight commander и замеряем время:

time eatmydata apt install -y --reinstall mc
real: 1.204s


Хуясе, почти одна секунда, установка mc прошла в два раза быстрее.

Но почему? И что сделала eatmydata?

eatmydata предназначенная для ускорения операций записи на диск в Linux-системах, особенно при установке пакетов с помощью APT. Она временно отключает механизмы, которые обеспечивают сохранность данных при сбоях системы, такие как fsync, fdatasync, flock и msync, что позволяет уменьшить время записи данных на диск.


Короче говоря утилита игнорирует запросы на немедленное сохранение данных на диске (синхронизация). Система сразу записывает данные на диск без использования кеша.

Где это можно использовать?

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

Такие дела, изучай!

tags: #linux

🔔 @bashdays➡️ @gitgate

Читать полностью…

Bash Days | Linux | DevOps

Когда ты устанавливаешь софтину через apt или подобную херню, зачастую к софтине прилипают паразиты.

То есть Recommended packages. Ща покажу!

Смотри:

apt install mc

The following NEW packages will be installed:
bzip2 libssh2-1 mailcap mc mc-data unzip

6 newly installed.


Ага, будет установлено 6 пакетов, включая паразитов — mailcap unzip.

Midnight Commander отлично работает без этих mailcap unzip.

А прикинь, ставишь ты какую-нибудь phantomjs, а он дополнительно тянет KDE, на сервер где вообще нет иксов.


Это так для примера, чтобы ты понял про что я.

Как избавиться от паразитов? Вот так:

apt install mc --no-install-recommends

Recommended packages:
mailcap unzip
The following NEW packages will be installed:
libssh2-1 mc mc-data
3 newly installed.


Всё! На три пакета установится меньше (bzip2 это Suggested packages)

Как глобально избавиться от Recommended packages?

Создаем файл: /etc/apt/apt.conf.d/99norecommends

И вставляем в него:

APT::Install-Recommends "false";


Теперь ключик no-install-recommends можно везде не пихать, паразиты отключены.

Ну а чтобы для конкретного пакета установить паразитов:

apt-get install mc --install-recommends


Конец! Пользуйся на здоровье!

tags: #linux

🔔 @bashdays➡️ @gitgate

Читать полностью…
Subscribe to a channel