Сегодня про RANDOM и револьвер
В бородатые 2000е была такая консольная игруля «Русская рулетка», состояла она из одной строчки:
Для начала давай сделаем её более безопасной:
Суть такая: Если деление по модулю псевдослучайного числа переменной RANDOM вернёт - 0, значит тебе песда и пистолет выстрелил. Соответственно если > 0, то ты пока еще жив и тебе повезло.
А теперь давай посмотрим на условия, при которых «пистолет выстрелит» сразу.
Число отличное от 0, указанное в качестве переменной RANDOM используется как seed (семя) для генератора псевдослучайных чисел.
Если посеять число 2, то при первом обращении к переменной RANDOM получим значение, которое делится на 6 без остатка.
Этот посев даст нужное в разных версиях интерпретатора. Все дело в том, что в версии bash 5.1 были внесены изменения связанные с этим. Короче если у тебя версия баша > 5.0, то можно изменить поведение генератора с помощью переменной BASH_COMPAT.
Так, давай теперь это проверим:
Получаем значение: 20814
А тут уже другое: 20034
Если мы задаем 0 в переменную RANDOM, тогда семя (seed) инициализируется жестко заданным значением. При котором генерируется требуемое число, то есть делится на 6 без остатка.
Тут пистолет гарантированно выстрелит. Аналогично предыдущему примеру, если начало строки не число:
Снова получим 100% выстрел.
✔️ Как работает генератор:
- Начальное значение seed, оболочка получает совершая манипуляции над значениями pid, ppid, uid + текущие время (секунды, микросекунды).
- Далее полученное значение пропускается через алгоритм, а результат сохраняется. При следующих обращениях также пропускается через алгоритм.
- Потом полученное число усекается. В документации указано максимальное возможное значение 32367.
Как я писал выше, руки у нас развязаны и мы можем влиять на начальное значение генератора через переменную RANDOM.
Такие дела, исследуйте!
tags: #bash #linux
@ВАSНDАYS | BАSHDАYS.CОM
В бородатые 2000е была такая консольная игруля «Русская рулетка», состояла она из одной строчки:
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf / || echo "You live"
Для начала давай сделаем её более безопасной:
[ $[ $RANDOM % 6 ] == 0 ] && echo 'You died' || echo 'You live'
Суть такая: Если деление по модулю псевдослучайного числа переменной RANDOM вернёт - 0, значит тебе песда и пистолет выстрелил. Соответственно если > 0, то ты пока еще жив и тебе повезло.
А теперь давай посмотрим на условия, при которых «пистолет выстрелит» сразу.
Число отличное от 0, указанное в качестве переменной RANDOM используется как seed (семя) для генератора псевдослучайных чисел.
Если посеять число 2, то при первом обращении к переменной RANDOM получим значение, которое делится на 6 без остатка.
RANDOM=2
[ $[ $RANDOM % 6 ] == 0 ] && echo 'You died' || echo 'You live'
Этот посев даст нужное в разных версиях интерпретатора. Все дело в том, что в версии bash 5.1 были внесены изменения связанные с этим. Короче если у тебя версия баша > 5.0, то можно изменить поведение генератора с помощью переменной BASH_COMPAT.
Переменная BASH_COMPAT в оболочке Bash используется для указания совместимости с предыдущими версиями Bash. Если установить ее на определенное значение, это может изменить поведение Bash так, чтобы оно соответствовало определенной версии.
Например, если вы установите BASH_COMPAT=3.2, то это означает, что текущая оболочка Bash будет работать совместимо с версией 3.2. Это может быть полезно, если у вас есть скрипты, которые были написаны для старых версий Bash и вы хотите, чтобы они продолжали работать в новых версиях без изменений поведения.
Так, давай теперь это проверим:
( BASH_COMPAT=51 ; RANDOM=0 ; echo $RANDOM )
Получаем значение: 20814
( BASH_COMPAT=50 ; RANDOM=0 ; echo $RANDOM )
А тут уже другое: 20034
Если мы задаем 0 в переменную RANDOM, тогда семя (seed) инициализируется жестко заданным значением. При котором генерируется требуемое число, то есть делится на 6 без остатка.
RANDOM=0
[ $[ $RANDOM % 6 ] == 0 ] && echo 'You died' || echo 'You live'
Тут пистолет гарантированно выстрелит. Аналогично предыдущему примеру, если начало строки не число:
RANDOM='bashdays'
[ $[ $RANDOM % 6 ] == 0 ] && echo 'You died' || echo 'You live'
Снова получим 100% выстрел.
✔️ Как работает генератор:
- Начальное значение seed, оболочка получает совершая манипуляции над значениями pid, ppid, uid + текущие время (секунды, микросекунды).
- Далее полученное значение пропускается через алгоритм, а результат сохраняется. При следующих обращениях также пропускается через алгоритм.
- Потом полученное число усекается. В документации указано максимальное возможное значение 32367.
Как я писал выше, руки у нас развязаны и мы можем влиять на начальное значение генератора через переменную RANDOM.
Такие дела, исследуйте!
tags: #bash #linux
@ВАSНDАYS | BАSHDАYS.CОM
Хотели в детстве сыграть в «Самый умный»?💡
Реализуйте мечту в IT-квизе
Активируйте Telegram-бота и проверьте свои знания сразу в восьми темах:
▫️ Дата-центры и железо
▫️ Разработка и soft skills
▫️ ИБ и сети
▫️ Kubernetes и ML
Отвечайте на технические вопросы каждый день и побеждайте в мини-играх — за каждый верный ответ начислим баллы. Игроки с самым высоким рейтингом получат крутые подарки от Selectel. Старт с 22 апреля.
Перейти в бота → https://slc.tl/6evat
Реклама ООО «Селектел» erid 2VtzqvpmxJc
Реализуйте мечту в IT-квизе
Активируйте Telegram-бота и проверьте свои знания сразу в восьми темах:
▫️ Дата-центры и железо
▫️ Разработка и soft skills
▫️ ИБ и сети
▫️ Kubernetes и ML
Отвечайте на технические вопросы каждый день и побеждайте в мини-играх — за каждый верный ответ начислим баллы. Игроки с самым высоким рейтингом получат крутые подарки от Selectel. Старт с 22 апреля.
Перейти в бота → https://slc.tl/6evat
Реклама ООО «Селектел» erid 2VtzqvpmxJc
🔤🔤🔤🔤🔤🔤🔤🔤🔤
tags: #bash
@ВАSНDАYS | BАSHDАYS.CОM
shopt -s extglob; : "${PS1}"; : "${_//$'\x01'+([^$'\x02'])$'\x02'}"; : "${#_}"; printf '%b' "\e#8\e[$(((LINES-1)/2));$(((COLUMNS-_)/2))H"
tags: #bash
@ВАSНDАYS | BАSHDАYS.CОM
⚡️ Появление технологической базы ПО отечественных вендоров и рост приложений, использующих алгоритмы на основе ИИ, — одни из главных трендов 2023 года. А что еще?
Мы опросили 800+ ИТ-специалистов, включая топ-менеджеров компаний, чтобы понять, как за год трансформировался отечественный рынок DevOps. Упаковали все это в отчет, который сейчас можно бесплатно скачать по ссылке.
📊 Из отчета вы узнаете:
- как российские компании преодолевают технологические и кадровые вызовы;
- планы и прогнозы развития рынка DevOps в ближайшем будущем;
- актуальные вопросы безопасной разработки (DevSecOps);
- в каком состоянии кадровый рынок DevOps.
Наши партнеры: МТС, IBS, Яндекс, Лаборатория Касперского, а также НИУ ВШЭ, ИСП РАН и ЭКОПСИ Консалтинг.
Забирайте ежегодный отчет по ссылке.
Реклама. Информация о рекламодателе
Мы опросили 800+ ИТ-специалистов, включая топ-менеджеров компаний, чтобы понять, как за год трансформировался отечественный рынок DevOps. Упаковали все это в отчет, который сейчас можно бесплатно скачать по ссылке.
📊 Из отчета вы узнаете:
- как российские компании преодолевают технологические и кадровые вызовы;
- планы и прогнозы развития рынка DevOps в ближайшем будущем;
- актуальные вопросы безопасной разработки (DevSecOps);
- в каком состоянии кадровый рынок DevOps.
Наши партнеры: МТС, IBS, Яндекс, Лаборатория Касперского, а также НИУ ВШЭ, ИСП РАН и ЭКОПСИ Консалтинг.
Забирайте ежегодный отчет по ссылке.
Реклама. Информация о рекламодателе
Всем привет. Записал сегодня пилотный выпуск на ютубину, изредка буду заходить с подобным контентом. Над звуком еще поработаем, есть нюансы. Завтра отдельным постом продолжу эту тему, так сказать вывернем наизнанку.
Поддержи подпиской и лайком! Спасибо!👇
https://youtu.be/gTwpoAaB_dY
Поддержи подпиской и лайком! Спасибо!👇
https://youtu.be/gTwpoAaB_dY
YouTube
Как получить root на любом Linux сервере
Сегодня расскажу как пентестеры и черношляпы повышают привелегии на Linux машинах и получают root доступ. Без уязвимостей и эксплоитов.
Привет, это Девопс фабрика! Мы обучаем желающих перейти в DevOps.
Приглашаем на МОК интервью по DevOps! Сделаем бесплатно для первых десяти человек.
МОК интервью - это отличный способ подготовиться к реальным собеседованиям и проверить свои знания в дружелюбной обстановке.
Что вас ждет?
- Реальные вопросы от лидов, проводивших сотни собеседований по DevOps.
- Подробная обратная связь по вашему собеседованию и рекомендации по улучшению.
- Опыт, который поможет вам стать увереннее и легче пройти реальное собеседование.
- Внимательное и дружелюбное отношение, все проводится спокойно и без стресса :)
Посмотреть видео предыдущих интервью и записаться можно по ссылке в канале
Реклама. ООО «Байкалтим», ИНН: 3851008933, erid: 2Vtzqx3bUA5
Приглашаем на МОК интервью по DevOps! Сделаем бесплатно для первых десяти человек.
МОК интервью - это отличный способ подготовиться к реальным собеседованиям и проверить свои знания в дружелюбной обстановке.
Что вас ждет?
- Реальные вопросы от лидов, проводивших сотни собеседований по DevOps.
- Подробная обратная связь по вашему собеседованию и рекомендации по улучшению.
- Опыт, который поможет вам стать увереннее и легче пройти реальное собеседование.
- Внимательное и дружелюбное отношение, все проводится спокойно и без стресса :)
Посмотреть видео предыдущих интервью и записаться можно по ссылке в канале
Реклама. ООО «Байкалтим», ИНН: 3851008933, erid: 2Vtzqx3bUA5
Официальные тренинги по Zabbix на русском языке от Галс Софтвэр
Мы запустили официальные тренинги Zabbix с возможностью получения сертификатов вендора. Все тренинги и сертификации будут проводиться на русском языке. Анонсы ближайших тренингов и полезную информацию по Zabbix также публикуем в нашем канале , посвященный Zabbix и ничему кроме Zabbix.
Предлагаем ознакомиться с расписанием ближайших публичных тренингов:
Zabbix Certified Specialist (ZCS) 3-7 июня 2024 года (оффлайн + онлайн)
Zabbix Certified Professional (ZCP) 1-3 июля 2024 года (оффлайн + онлайн)
Оплата в рублях для юридических и и физических лиц по договору, счету или карте. Возможно проведение приватных тренингов.
Задать вопросы и получить дополнительную информацию вы можете у или по запросу на welcome.com.
Мы запустили официальные тренинги Zabbix с возможностью получения сертификатов вендора. Все тренинги и сертификации будут проводиться на русском языке. Анонсы ближайших тренингов и полезную информацию по Zabbix также публикуем в нашем канале , посвященный Zabbix и ничему кроме Zabbix.
Предлагаем ознакомиться с расписанием ближайших публичных тренингов:
Zabbix Certified Specialist (ZCS) 3-7 июня 2024 года (оффлайн + онлайн)
Zabbix Certified Professional (ZCP) 1-3 июля 2024 года (оффлайн + онлайн)
Оплата в рублях для юридических и и физических лиц по договору, счету или карте. Возможно проведение приватных тренингов.
Задать вопросы и получить дополнительную информацию вы можете у или по запросу на welcome.com.
Тут у безопасников жопы сгорели после предыдущего поста.
Нужно ли на приватный ssh ключ устанавливать пароль?
Давай сравним с ключом от квартиры. Поставил ты к примеру пиздатый замок на свою входную дверь и у тебя есть связка ключей.
А дальше? А дальше ты берешь эту связку ключей и помещаешь в сейф, ставишь код и радуешься. Радуешься до того момента, когда тебе нужно выйти из дома.
Приходится брать сейф с собой и везде с ним таскаться. Потому что это безопасно! Код от сейфа же никто не знает, поэтому не получит доступ к ключу, который открывает твою пиздатую дверь.
Удобно? Охуенно удобно! Главное практично.
Я всегда считал и считаю, что ssh ключи нужны, чтобы заходить на сервера без пароля. Нахуя ты тогда отключаешь возможность логина по паролю и оставляешь ключ к которому нужно вводить пароль?
Добавь тогда уж туда еще один фактор авторизации через QR код и Яндекс.Ключ. Лишним не будет 😲
✔️ Пароль на ключ тебе нужен — если ты рукожопая обезьяна, сосёшься в засос с ослами, качаешь сомнительный со...
Нужно ли на приватный ssh ключ устанавливать пароль?
Давай сравним с ключом от квартиры. Поставил ты к примеру пиздатый замок на свою входную дверь и у тебя есть связка ключей.
А дальше? А дальше ты берешь эту связку ключей и помещаешь в сейф, ставишь код и радуешься. Радуешься до того момента, когда тебе нужно выйти из дома.
Приходится брать сейф с собой и везде с ним таскаться. Потому что это безопасно! Код от сейфа же никто не знает, поэтому не получит доступ к ключу, который открывает твою пиздатую дверь.
Удобно? Охуенно удобно! Главное практично.
Я всегда считал и считаю, что ssh ключи нужны, чтобы заходить на сервера без пароля. Нахуя ты тогда отключаешь возможность логина по паролю и оставляешь ключ к которому нужно вводить пароль?
Добавь тогда уж туда еще один фактор авторизации через QR код и Яндекс.Ключ. Лишним не будет 😲
✔️ Пароль на ключ тебе нужен — если ты рукожопая обезьяна, сосёшься в засос с ослами, качаешь сомнительный со...
Если команда разработки расширяется, DevOps-инженеров становится меньше, а инфраструктура активно развивается и растет, поддерживать сразу несколько архитектурных решений становится сложно и невыгодно.
На встрече Алексей Подольский, инженер внутренней разработки в Cloud․ru, расскажет, как безболезненно объединить кластеры Kubernetes, оптимизировать инфраструктуру и повысить безопасность трафика внутри кластера.
На вебинаре вы узнаете:
▪️ как сделать процесс объединения более простым и комфортным — 4 основных условия;
▪️ какие этапы объединения кластеров Kubernetes можно выделить;
▪️ как не только объединить несколько архитектурных решений, но и оптимизировать инфраструктуру и снизить стоимость ее обслуживания;
▪️ как усилить безопасность периметра с помощью тонкой фильтрации трафика;
▪️с какими проблемами можно столкнуться на этапе миграции и как их лучше решать.
Также на встрече покажем готовое решение — поделимся результатом слияния нескольких кластеров и создания целостной инфраструктуры.
Веб...
На встрече Алексей Подольский, инженер внутренней разработки в Cloud․ru, расскажет, как безболезненно объединить кластеры Kubernetes, оптимизировать инфраструктуру и повысить безопасность трафика внутри кластера.
На вебинаре вы узнаете:
▪️ как сделать процесс объединения более простым и комфортным — 4 основных условия;
▪️ какие этапы объединения кластеров Kubernetes можно выделить;
▪️ как не только объединить несколько архитектурных решений, но и оптимизировать инфраструктуру и снизить стоимость ее обслуживания;
▪️ как усилить безопасность периметра с помощью тонкой фильтрации трафика;
▪️с какими проблемами можно столкнуться на этапе миграции и как их лучше решать.
Также на встрече покажем готовое решение — поделимся результатом слияния нескольких кластеров и создания целостной инфраструктуры.
Веб...
Привет, сегодня коротко, очередная внеплановая пятница. Короче в продолжение к постам про повышение привилегий.
Если звезды сошлись (suid/guid и прочая хуйня), то через vim ты можешь получить интерактивный root shell.
Делается так:
Или так:
На выходе тебе выплюнет доллар ($) ну и там уже бесоёбишь.
Это применимо не только к пентесту, но и к ситуации когда админ порезал оболочку, ограничив тебя белым списком.
И если в этом списке есть vi/vim, то ты ничем не ограничен. Запускаешь полноценный shell через vim и развлекаешься. А порой можно дотянутся и до папки /root и всего остального. Было бы желание 🥳
Вектор этот очень распространён, добавил в бэклог. Сниму как-нибудь видос на ютубину, покажу так сказать всю подноготную выхода из клетки средствами vim.
Давай, хороших выходных! Я пожалуй тоже устрою себе внеплановый отпуск на пару дней. Увидимся!
Там еще ребята с какого-то облака пришли. Устроим с ними конкурс в ближайшее время с вкусными призами, обещают подвезти вам облачных плюшек на халяву, а я в свою очередь денежный бонус задоначу, приобретете себе чтонибудь пиздатое, например как Дима тут ))
tags: #linux #security #utils
@ВАSНDАYS | BАSHDАYS.CОM
Если звезды сошлись (suid/guid и прочая хуйня), то через vim ты можешь получить интерактивный root shell.
Делается так:
vim -c ':!/bin/sh'
Или так:
vim --cmd ':set shell=/bin/sh|:shell'
На выходе тебе выплюнет доллар ($) ну и там уже бесоёбишь.
Это применимо не только к пентесту, но и к ситуации когда админ порезал оболочку, ограничив тебя белым списком.
И если в этом списке есть vi/vim, то ты ничем не ограничен. Запускаешь полноценный shell через vim и развлекаешься. А порой можно дотянутся и до папки /root и всего остального. Было бы желание 🥳
Вектор этот очень распространён, добавил в бэклог. Сниму как-нибудь видос на ютубину, покажу так сказать всю подноготную выхода из клетки средствами vim.
Давай, хороших выходных! Я пожалуй тоже устрою себе внеплановый отпуск на пару дней. Увидимся!
Там еще ребята с какого-то облака пришли. Устроим с ними конкурс в ближайшее время с вкусными призами, обещают подвезти вам облачных плюшек на халяву, а я в свою очередь денежный бонус задоначу, приобретете себе чтонибудь пиздатое, например как Дима тут ))
tags: #linux #security #utils
@ВАSНDАYS | BАSHDАYS.CОM
This media is not supported in your browser
VIEW IN TELEGRAM
Майские праздники равносильны новогодним, уже на третий день начинаешь деградировать и превращаться в обезьяну. После таких затяжных выходных, нужно еще пару недель, чтобы вернуться к нормальной жизни.
Привет. Сегодня расскажу про штуку, которой одно время пользовался на локальной машине и снова к ней вернулся.
✔️ Называется Atuin — Magical shell history.
Если коротко, эта тулза заменяет стандартный поиск в командной строке по ctrl+r на красивенький и достаточно удобный.
Но помимо красивых пейзажей, вся история команд синхронизируется с облачным сервером. Используется база данных sqlite.
По сути у тебя одна общая история на нескольких машинах. Очень удобно если бегаешь между ноутом и стационарным компом.
Ты скажешь — фи, это же не безопасно! Согласен, поэтому есть варик поднять свой сервачок и синхронизировать через него.
Все в лучших традициях selfhosted. Мануал по установке сервера. Через docker-compose за пару минут все расчехляется.
Привет. Сегодня расскажу про штуку, которой одно время пользовался на локальной машине и снова к ней вернулся.
✔️ Называется Atuin — Magical shell history.
Если коротко, эта тулза заменяет стандартный поиск в командной строке по ctrl+r на красивенький и достаточно удобный.
Но помимо красивых пейзажей, вся история команд синхронизируется с облачным сервером. Используется база данных sqlite.
По сути у тебя одна общая история на нескольких машинах. Очень удобно если бегаешь между ноутом и стационарным компом.
Ты скажешь — фи, это же не безопасно! Согласен, поэтому есть варик поднять свой сервачок и синхронизировать через него.
Все в лучших традициях selfhosted. Мануал по установке сервера. Через docker-compose за пару минут все расчехляется.
Кстати если нажать стрелочку вверх, сработает триггер и откр...
Сегодня за девопс, gitlab и как сделать комфортный pipeline с выпадающими списками Variables + Бонусы.
Из коробки, когда ты жмешь кнопку Run Pipeline, тебе нужно руками вбивать нужные Variables, например, чтобы указать окружение, в которое будет раскатан релиз.
Каждый раз вбивать руками
Хочется чтобы был выпадающий список со всеми параметрами. Накликал мышкой и в продакшен.
Выпадающие списки можно делать не только с окружениями, но и добавить банальные вопросы YES/NO и прочее. А затем в секции rules уже все это разруливать и обрабатывать.
✔️Ниже базовая болванка
Создаем файл
В первой секции variables, описываем выпадающий список. Из него будем выбирать мышкой, куда деплоить.
N/A (выбран по умолчанию) добавлено для дураков, которые ничего не выбирают и сразу тыкают Run Pipeline. В таком случае пайплайн зафейлится и ничего не пострадает.
Дальше идут две секции, которые описывают окружения stage и production, там указываем айпишинки и вообще всё, что захотим для каждого окружения. Можно флагов навтыкать и прочего говна.
Ну и основная секция deploy, у меня указан раннер с тэгом common-runner, а потом полезная нагрузка которая будет выполнена.
В секции rules зашита логика. В зависимости от того, какое окружение было выбрано из выпадающего списка, применяются настройки либо от stage, либо от production. Короче инклудится нужное.
Собственно всё. Если нужно добавить еще каких-то выпадающих списков, добавляем в первую секцию всё необходимое, аналогично ENVIRONMENT. Ну и потом в rules все это обрабатываем. Например, так:
В общем всё элементарно. По итогу получаем незамысловатый пайплайн, всё в одном месте и ничего не раскидано по самому gitlab.
Бонусы. Да, если нужен общий пайплайн для нескольких проектов, делаем так:
Создаем репу dev/pipelines, кидаем туда файл .gitlab-ci.yml, настраиваем в нем всё под свои реалии.
Дальше в нужных проектах добавляем файл .gitlab-ci.yml с таким содержимым:
Всё, теперь не надо плодить кучу .gitlab-ci.yml с одинаковым содержимым, все инклудится из одного места. Ну и если нужно что-то поменять, меняем один раз и все проекты автоматически это подхватывают.
Максимально попытался упростить и сделать наглядно, а дальше уже включай фантазию и твори.
Хорошего тебе дня, увидимся!
tags: #devops
@ВАSНDАYS | BАSHDАYS.CОM
Из коробки, когда ты жмешь кнопку Run Pipeline, тебе нужно руками вбивать нужные Variables, например, чтобы указать окружение, в которое будет раскатан релиз.
Каждый раз вбивать руками
Variable ENVIRONMENT=stage / production
ну пиздец тяжко и неудобно. А если таких переменных овердохуя, то всё желание пропадает что-то делать.Хочется чтобы был выпадающий список со всеми параметрами. Накликал мышкой и в продакшен.
Выпадающие списки можно делать не только с окружениями, но и добавить банальные вопросы YES/NO и прочее. А затем в секции rules уже все это разруливать и обрабатывать.
✔️Ниже базовая болванка
Создаем файл
.gitlab-ci.yml
в корне проекта и добавляем в него:variables:
ENVIRONMENT:
value: "N/A"
options:
- "N/A"
- "STAGE"
- "PRODUCTION"
description: "Deployment environment"
.stage_server:
&stage_server
WEB_NODE: "xx.xx.xx.xx"
DB_NODE: "xx.xx.xx.xx"
.production_server:
&production_server
WEB_NODE: "xx.xx.xx.xx"
DB_NODE: "xx.xx.xx.xx"
deploy:
tags:
- common-runner
script:
- echo $ENVIRONMENT
- echo "build & deploy here"
rules:
- if: '$ENVIRONMENT == "STAGE"'
variables:
<<: *stage_server
- if: '$ENVIRONMENT == "PRODUCTION"'
variables:
<<: *production_server
В первой секции variables, описываем выпадающий список. Из него будем выбирать мышкой, куда деплоить.
N/A (выбран по умолчанию) добавлено для дураков, которые ничего не выбирают и сразу тыкают Run Pipeline. В таком случае пайплайн зафейлится и ничего не пострадает.
Дальше идут две секции, которые описывают окружения stage и production, там указываем айпишинки и вообще всё, что захотим для каждого окружения. Можно флагов навтыкать и прочего говна.
Ну и основная секция deploy, у меня указан раннер с тэгом common-runner, а потом полезная нагрузка которая будет выполнена.
В секции rules зашита логика. В зависимости от того, какое окружение было выбрано из выпадающего списка, применяются настройки либо от stage, либо от production. Короче инклудится нужное.
Собственно всё. Если нужно добавить еще каких-то выпадающих списков, добавляем в первую секцию всё необходимое, аналогично ENVIRONMENT. Ну и потом в rules все это обрабатываем. Например, так:
- if: '$JOB == "YES" && $ENVIRONMENT == "STAGE"'
В общем всё элементарно. По итогу получаем незамысловатый пайплайн, всё в одном месте и ничего не раскидано по самому gitlab.
Бонусы. Да, если нужен общий пайплайн для нескольких проектов, делаем так:
Создаем репу dev/pipelines, кидаем туда файл .gitlab-ci.yml, настраиваем в нем всё под свои реалии.
Дальше в нужных проектах добавляем файл .gitlab-ci.yml с таким содержимым:
include:
- project: "dev/pipelines"
file: ".gitlab-ci.yml"
Всё, теперь не надо плодить кучу .gitlab-ci.yml с одинаковым содержимым, все инклудится из одного места. Ну и если нужно что-то поменять, меняем один раз и все проекты автоматически это подхватывают.
Максимально попытался упростить и сделать наглядно, а дальше уже включай фантазию и твори.
Хорошего тебе дня, увидимся!
tags: #devops
@ВАSНDАYS | BАSHDАYS.CОM
Java — один из самых популярных языков программирования, который используют разработчики для создания игр и приложений. Если вы давно мечтаете попробовать себя в этой сфере, скорее записывайтесь на мини-курс по Java-разработке. Подойдёт новичкам разного возраста, а ещё это полностью бесплатно!
Регистрируйтесь: https://epic.st/0gaPiE?erid=2VtzqvfS5WZ
🎉 И получите первый подарок — гайд по профессии Java-разработчика.
Что будем делать на мини-курсе:
🔹 Обсудим, почему Java — один из самых востребованных языков
🔹 Познакомимся с кодом Java и рассмотрим ключевые элементы приложений на этом языке
🔹 Определим навыки для трудоустройства
🔹 Сравним Java и Python
🔹 Сделаем Java-приложения по инструкции
Формат мини-курса отлично подойдёт для обучения из любой точки мира: смотрите видео в удобное время и закрепляйте навыки на практике.
Успейте записаться бесплатно!
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
Регистрируйтесь: https://epic.st/0gaPiE?erid=2VtzqvfS5WZ
🎉 И получите первый подарок — гайд по профессии Java-разработчика.
Что будем делать на мини-курсе:
🔹 Обсудим, почему Java — один из самых востребованных языков
🔹 Познакомимся с кодом Java и рассмотрим ключевые элементы приложений на этом языке
🔹 Определим навыки для трудоустройства
🔹 Сравним Java и Python
🔹 Сделаем Java-приложения по инструкции
Формат мини-курса отлично подойдёт для обучения из любой точки мира: смотрите видео в удобное время и закрепляйте навыки на практике.
Успейте записаться бесплатно!
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
Люди любят жаловаться на жизнь, а когда предлагаешь обратиться к психологу — это «дорого», «некогда», «я им не доверяю».
Кому действительно важно разобраться в себе и изменить жизнь, видит возможности, а не препятствия
Первый шаг к решению проблемы — этоеё осознание . В этом может помочь канал доказательного врача-психиатра и психотерапевта , через терапевтические тексты которого можно поработать над:
✅ погружением в себя и определением причины своих непростых состояний
✅ понижением градуса тревожности
✅ повышением самооценки
✅ способностью эффективно контактировать с людьми
Реклама. Ковалев К.И. ИНН: 325502816794
Кому действительно важно разобраться в себе и изменить жизнь, видит возможности, а не препятствия
Первый шаг к решению проблемы — это
✅ погружением в себя и определением причины своих непростых состояний
✅ понижением градуса тревожности
✅ повышением самооценки
✅ способностью эффективно контактировать с людьми
Реклама. Ковалев К.И. ИНН: 325502816794
Чипи-чипи, чапа-чапа. Привет, на скрине 🚫некий Linux бедолага очень обрадовался, когда нашел пасхалку в команде date. Этакий нигде недокументированный аргумент.
Ну да, если запросить help либо глянуть в гуглах, такая конструкция нигде не упоминается.
Молодец чо. НО, если бы он знал про функцию getopt_long, то вряд ли сделал открытие. Ща расскажу в чем прикол.
Короче, куча программ и утилит используют функцию getopt_long для перебора командной строки. И эта функция распознает сокращения в длинных аргументах и опциях.
Собственно вот оригинальная команда:
Но если пропустить её через getopt_long, получим ту самую «пасхалку»:
✔️ Еще примеры для понимания:
Понял в чем прикол? Но это еще не всё!
Утил...
date --iso=seconds
Ну да, если запросить help либо глянуть в гуглах, такая конструкция нигде не упоминается.
Молодец чо. НО, если бы он знал про функцию getopt_long, то вряд ли сделал открытие. Ща расскажу в чем прикол.
Короче, куча программ и утилит используют функцию getopt_long для перебора командной строки. И эта функция распознает сокращения в длинных аргументах и опциях.
Функция getopt_long входит в состав пакета GNU C (glibc)
Собственно вот оригинальная команда:
date --iso-8601=seconds
Но если пропустить её через getopt_long, получим ту самую «пасхалку»:
date --iso=seconds
✔️ Еще примеры для понимания:
1. nano --smart --book
2. ls --hyper --show
3. du --one --human --sum
1. --smarthome --bookstyle
2. --hyperlink --show-control-chars
3. --one-file-system --human-readable --summarize
Понял в чем прикол? Но это еще не всё!
Утил...
⚡ Скидка 20% на комплект сервисов: Managed Kubernetes, объектное хранилище S3 и облачные базы данных
Запускайте и развивайте веб-проекты любой сложности с помощью отказоустойчивых и масштабируемых сервисов Selectel. До 30 июня подключите три сервиса и пользуйтесь ими со скидкой 20%. Скидка не ограничена по времени и действует, пока вы используете все три сервиса.
Преимущества PaaS-сервисов в Selectel:
◽️ Быстрый запуск, отказоустойчивость и легкое масштабирование.
◽️Вы можете размещать и хранить персональные данные пользователей по закону, ведь сервисы соответствуют 152-ФЗ.
◽️Для того, чтобы развернуть проект в удобной панели my.selectel достаточно несколько кликов.
Переходите по ссылке, что зарегистрироваться и подключить сервисы со скидкой: https://slc.tl/ycean
Реклама ООО «Селектел» erid 2VtzquePgc2
Запускайте и развивайте веб-проекты любой сложности с помощью отказоустойчивых и масштабируемых сервисов Selectel. До 30 июня подключите три сервиса и пользуйтесь ими со скидкой 20%. Скидка не ограничена по времени и действует, пока вы используете все три сервиса.
Преимущества PaaS-сервисов в Selectel:
◽️ Быстрый запуск, отказоустойчивость и легкое масштабирование.
◽️Вы можете размещать и хранить персональные данные пользователей по закону, ведь сервисы соответствуют 152-ФЗ.
◽️Для того, чтобы развернуть проект в удобной панели my.selectel достаточно несколько кликов.
Переходите по ссылке, что зарегистрироваться и подключить сервисы со скидкой: https://slc.tl/ycean
Реклама ООО «Селектел» erid 2VtzquePgc2
Упоримся? А давай!
Открывай терминал с башем и запускай команду:
По идее тут что-то вроде бесконечного цикла, который будет cat’ить на экран файл hosts, предварительно грепнув содержимое по символу «a».
Запустил? И всё зависло! По крайней мере у меня вывелась только одна строчка вида:
Но почему оно зависло? А потому, что утилита cat при попытке записать данные в сломанный канал, завершается сигналом.
✔️ Давай убедимся:
Получаем цифру 13. Откуда она взялась? Смотри! Если команда завершается сигналом, тогда статус ошибки ($?) == 128 + Номер сигнала.
А дальше вычитаем, делим, умножаем, корень квадратный вычисляем, заводим в дискриминант по синусу. Пеню. Короче получили цифру 13.
Более подробно про сигналы мы с тобой разбирали в этом посте.
Давай посмотрим, что такое 13:
Вывелось PIPE, что равносильно SIGPIPE (Broken Pipe). Ага!
Получается что наш бесконечный цикл постоянно запускает утилиту cat, которая тут же завершается.
Раньше эта ситуация была очевидна и на экран выводилась ошибка. А вот с версии Bash 3.1-alpha1 это пофиксили, вот выжимка из спеков:
Нахуй так сделали, непонятно, скорее всего ушли в сторону set pipefail, типа кому надо тот включит, чтобы лишнее гавно на экран не сыпалось.
Ладно. После запуска этого бесконечного цикла, можешь запустить htop и визуально глянуть как порождается бесконечное количество процессов, растет счетчик PID. А как только выработан лимит PID, пиды начинают использоваться повторно. В общем это хорошо видно.
Ну либо так можно глянуть:
Увидишь большую разницу между значениями PID.
Теперь как это пофиксить. Если уж захотелось упороться, нужно упарываться правильно.
Вот несколько вариантов:
Если присмотреться, может возникнуть вопрос — а откуда выходит exit? Цикл выполняется в подоболочке, потому что является участником канала.
Давай проверим:
Запускаем конвейер в фоне. Команда cat без указания аргументов будет читать стандартный ввод, который в данной ситуации ассоциирован с терминалом и ждет ввода данных.
А такое не позволительно фоновым процессам, поэтому такие задания будут приостановлены.
Проверяем, что оно действительно приостановлено:
Ну и теперь смотрим, кто есть кто:
Процесс 251913/251893 и есть подоболочка, в котором крутится наш цикл. Вот с этой подоболочки и выходит exit.
Сложно? Да не… азы с некоторыми нюансами. Изучай!
tags: #linux #bash
—
🔔
Открывай терминал с башем и запускай команду:
while :; do cat /etc/hosts ; done | grep -m1 'a'
По идее тут что-то вроде бесконечного цикла, который будет cat’ить на экран файл hosts, предварительно грепнув содержимое по символу «a».
Аргумент -m1 = выход после первого вхождения искомой подстроки. После этого, конец канала закрывается для чтения.
Запустил? И всё зависло! По крайней мере у меня вывелась только одна строчка вида:
127.0.0.1 localhost bashdays
Но почему оно зависло? А потому, что утилита cat при попытке записать данные в сломанный канал, завершается сигналом.
✔️ Давай убедимся:
set -o pipefail
cat /etc/hosts | exit 0
echo $(( $? > 128 ? $? - 128 : $? ))
Получаем цифру 13. Откуда она взялась? Смотри! Если команда завершается сигналом, тогда статус ошибки ($?) == 128 + Номер сигнала.
А дальше вычитаем, делим, умножаем, корень квадратный вычисляем, заводим в дискриминант по синусу. Пеню. Короче получили цифру 13.
Более подробно про сигналы мы с тобой разбирали в этом посте.
Давай посмотрим, что такое 13:
kill -l 13
Вывелось PIPE, что равносильно SIGPIPE (Broken Pipe). Ага!
Получается что наш бесконечный цикл постоянно запускает утилиту cat, которая тут же завершается.
Раньше эта ситуация была очевидна и на экран выводилась ошибка. А вот с версии Bash 3.1-alpha1 это пофиксили, вот выжимка из спеков:
This document details the changes between this version, bash-3.1-alpha1,
and the previous version, bash-3.0-release.
By default, the shell no longer reports processes dying from SIGPIPE.
Нахуй так сделали, непонятно, скорее всего ушли в сторону set pipefail, типа кому надо тот включит, чтобы лишнее гавно на экран не сыпалось.
Ладно. После запуска этого бесконечного цикла, можешь запустить htop и визуально глянуть как порождается бесконечное количество процессов, растет счетчик PID. А как только выработан лимит PID, пиды начинают использоваться повторно. В общем это хорошо видно.
Ну либо так можно глянуть:
ps --no-headers --sort=pid -eo pid
Увидишь большую разницу между значениями PID.
Теперь как это пофиксить. Если уж захотелось упороться, нужно упарываться правильно.
Вот несколько вариантов:
while : ; do cat /etc/hosts || { echo $? >&2 ; exit; } ;done | grep -m1 'a'
while : ; do cat /etc/hosts || break ; done | grep -m1 'a'
while : ; do cat /etc/hosts || exit ; done | grep -m1 'a'
Если присмотреться, может возникнуть вопрос — а откуда выходит exit? Цикл выполняется в подоболочке, потому что является участником канала.
Давай проверим:
while : ; do cat ; done | grep -m1 'a' &
Запускаем конвейер в фоне. Команда cat без указания аргументов будет читать стандартный ввод, который в данной ситуации ассоциирован с терминалом и ждет ввода данных.
А такое не позволительно фоновым процессам, поэтому такие задания будут приостановлены.
Проверяем, что оно действительно приостановлено:
jobs -l
[1]+251913 Stopped (tty input) while :; do
cat;
done
251921 | grep --color=auto -m1 'a'
Ну и теперь смотрим, кто есть кто:
ps --forest -o pid,ppid,stat,comm
PID PPID STAT COMMAND
251893 251854 Ss bash
251913 251893 T \_bash
251924 251913 T | \_cat
251921 251893 T \_grep
251962 251893 R+ \_ps
Процесс 251913/251893 и есть подоболочка, в котором крутится наш цикл. Вот с этой подоболочки и выходит exit.
Сложно? Да не… азы с некоторыми нюансами. Изучай!
tags: #linux #bash
—
🔔
Привет. В Linux есть утилита basenc, которая входит в состав пакета coreutils. С помощью неё можно конвертировать данные в двоичный формат. Это который
Видел на днях как люди упарывались и писали свои велосипеды, банально не зная о существовании этой утилиты и её возможностях.
А всё просто, давай закодируем название деревни:
По итогу получаем набор 0 и 1. Ключ -w16 я указываю, чтобы выводить по 16 символов в строке. Для удобства. Так как русские символы кодируются двумя байтами.
✔️ Вывод получился таким:
А почему в последней строке какой-то обрубок?
Это не обрубок, это 8 бит! И эти 8 бит == символу новой строки, который закодирован одним байтом, о чем нам говорит левый бит первого и единственного октета (00001010).
А декодируется всё это безобразие так:
Просто указываем ключ -d и вуаля!
Если тема интересна, можешь почитать более подробно про кодирование UTF-8 здесь.
⚡ Вага-вага!
Сегодня чуть позже (16:00 МСК) залетит еще один партнерский пост, но это будет не просто рекламная интеграция.
Ниже я сделаю кнопку (в 16:02 МСК). Нажав на нее ты сможешь выиграть 1 бесплатный купон на неплохую онлайн конфу. Всего будет 3 таких купона. Всю эту кухню контролирую лично я, поэтому наёба тут нет.
А на следующей неделе будет еще одна движуха, но там уже более интересная и интерактивная, с денежными призами и облачными серверами, вчера в чатике подробности озвучивал.
Короче если интересно, не пропусти. Давай, хорошего дня!
tags: #linux #bash
—
🔔
00110010
.Видел на днях как люди упарывались и писали свои велосипеды, банально не зная о существовании этой утилиты и её возможностях.
А всё просто, давай закодируем название деревни:
echo 'пиздачосово' | basenc -w16 --base2msbf
По итогу получаем набор 0 и 1. Ключ -w16 я указываю, чтобы выводить по 16 символов в строке. Для удобства. Так как русские символы кодируются двумя байтами.
✔️ Вывод получился таким:
1101000010111111
1101000010111000
1101000010110111
1101000010110100
1101000010110000
1101000110000111
1101000010111110
1101000110000001
1101000010111110
1101000010110010
1101000010111110
00001010
А почему в последней строке какой-то обрубок?
Это не обрубок, это 8 бит! И эти 8 бит == символу новой строки, который закодирован одним байтом, о чем нам говорит левый бит первого и единственного октета (00001010).
А декодируется всё это безобразие так:
str="1101000010111111110100001011100011010000101101111101000010110100110100001011000011010001100001111101000010111110110100011000000111010000101111101101000010110010110100001011111000001010"
echo $str | basenc -d --base2msbf
Просто указываем ключ -d и вуаля!
Если тема интересна, можешь почитать более подробно про кодирование UTF-8 здесь.
⚡ Вага-вага!
Сегодня чуть позже (16:00 МСК) залетит еще один партнерский пост, но это будет не просто рекламная интеграция.
Ниже я сделаю кнопку (в 16:02 МСК). Нажав на нее ты сможешь выиграть 1 бесплатный купон на неплохую онлайн конфу. Всего будет 3 таких купона. Всю эту кухню контролирую лично я, поэтому наёба тут нет.
А на следующей неделе будет еще одна движуха, но там уже более интересная и интерактивная, с денежными призами и облачными серверами, вчера в чатике подробности озвучивал.
Короче если интересно, не пропусти. Давай, хорошего дня!
tags: #linux #bash
—
🔔
Масштабирование задач и высокая производительность с Immers.cloud
Друзья, мы являемся одними из ведущих поставщиков IaaS услуг в России, специализирующийся на использовании GPU. На нашем сайте представлен широкий выбор видеокарт для обучения и инференса нейронных сетей, включая в свой арсенал такие мощные модели, как Н100 и А100 на 80 Gb с NVlink.
Мы закрепляем физические ядра процессора и графические адаптеры только за одним клиентом.
Это значит, что:
🌳 Ядра процессора будут доступны на 100% процессорного времени;
🌳 Выбранный графический ускоритель будет зарезервирован только за вашим сервером;
🌳 Вы получите высокую производительность при работе с системой хранения.
Тестирование виртуальных серверов с сетевыми загрузочными дисками показывает до 70 000 IOPS на случайные операции чтения и до 60 000 IOPS на случайные операции записи.
Вы можете быть уверены, что арендуемые CPU и GPU используются только вашим виртуальным сервером.
Заинтересованы? Давайте обсудим, как наш сервис может стать решением ваши...
Друзья, мы являемся одними из ведущих поставщиков IaaS услуг в России, специализирующийся на использовании GPU. На нашем сайте представлен широкий выбор видеокарт для обучения и инференса нейронных сетей, включая в свой арсенал такие мощные модели, как Н100 и А100 на 80 Gb с NVlink.
Мы закрепляем физические ядра процессора и графические адаптеры только за одним клиентом.
Это значит, что:
🌳 Ядра процессора будут доступны на 100% процессорного времени;
🌳 Выбранный графический ускоритель будет зарезервирован только за вашим сервером;
🌳 Вы получите высокую производительность при работе с системой хранения.
Тестирование виртуальных серверов с сетевыми загрузочными дисками показывает до 70 000 IOPS на случайные операции чтения и до 60 000 IOPS на случайные операции записи.
Вы можете быть уверены, что арендуемые CPU и GPU используются только вашим виртуальным сервером.
Заинтересованы? Давайте обсудим, как наш сервис может стать решением ваши...
Если испытываешь проблемы с написанием постов, есть пиздатый лайкфак!
А далее пост пишется на одном дыхании. Кстати этот способ отлично работает для всяких документаций, планирования спринтов и т.п.
Ну чо — Короче блядь. Пятничная математика!
Массив bin содержит 256 восьмиразрядных числа в двоичной системе счисления.
Получаем:
Количество разрядов двоичного числа (длина любого индекса)
Получаем:
Количество двоичных чисел (длина массива)
Получаем:
Разрядность можно регулировать количеством списков начиная с
✔️ Раз зашел разговор за память...
Иииииии… Получаемпо ебалу :
А почему так? Минус каким хером тут? А все правильно!
Эта ситуация называется — Целочисленное переполнение. И оно НЕ отслеживается в Bash!
Начиная с версии 2.05b-alpha1 используется тип intmax_t.
Ну и смотрим маны:
Давай затестим:
У меня такое:
Это границы для положительных и отрицательных чисел.
Чо еще…
Перевод из двоичной системы счисления в десятичную.
Получаем:
В арифметических операциях Bash можно задавать систему счисления.
В общем случае в данных конструкциях не обязательно указывать знак $ перед именем переменной. Но при указании системы счисления это всё же нужно.
Получаем:
Наверное на этом всё, если есть что добавить, пиши в комменты. Хороших тебе предстоящих выходных и береги себя!
tags: #bash #linux
—
🔔
Открываешь свой любимый редактор и пишешь — Короче блядь!
А далее пост пишется на одном дыхании. Кстати этот способ отлично работает для всяких документаций, планирования спринтов и т.п.
Ну чо — Короче блядь. Пятничная математика!
Массив bin содержит 256 восьмиразрядных числа в двоичной системе счисления.
bin=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})
Особенность этого массива — значение любого элемента массива, соответствует индексу элемента в двоичном представлении. Таким образом перевод числа из десятичной в двоичную систему счисления, сводится к заданию числа (дес) в качестве индекса.
echo ${bin[101]}
Получаем:
01100101
Количество разрядов двоичного числа (длина любого индекса)
echo ${#bin[0]}
Получаем:
8
Количество двоичных чисел (длина массива)
echo ${#bin[@]}
Получаем:
256
Разрядность можно регулировать количеством списков начиная с
{0..1}{0..1}
. Но будь очень осторожен, память не резиновая!✔️ Раз зашел разговор за память...
echo $((2**63))
Иииииии… Получаем
-9223372036854775808
А почему так? Минус каким хером тут? А все правильно!
Эта ситуация называется — Целочисленное переполнение. И оно НЕ отслеживается в Bash!
Про Целочисленное переполнение читай тут
help let
Начиная с версии 2.05b-alpha1 используется тип intmax_t.
This document details the changes between this version, bash-2.05b-alpha1, and the previous version, bash-2.05a-release.
The shell now performs arithmetic in the largest integer size the machine supports (intmax_t), instead of long.
Ну и смотрим маны:
man 7 system_data_types
Давай затестим:
echo "Дипазон: От $((2**63)) до $((2**63-1))"
У меня такое:
-9223372036854775808
до 9223372036854775807
Это границы для положительных и отрицательных чисел.
Чо еще…
Перевод из двоичной системы счисления в десятичную.
echo $(( 2#1000 ))
Получаем:
8
В арифметических операциях Bash можно задавать систему счисления.
echo $(( 2#1000 + 2#1000 ))
let dec=2#0001
echo $dec
В общем случае в данных конструкциях не обязательно указывать знак $ перед именем переменной. Но при указании системы счисления это всё же нужно.
bin=0011
echo $(( 2#$bin ))
Получаем:
3
Наверное на этом всё, если есть что добавить, пиши в комменты. Хороших тебе предстоящих выходных и береги себя!
tags: #bash #linux
—
🔔