Надоел и приелся VirtualBox/VMWare? Хочется новенького?
Да легко, опять же эта новая херабора как-то мимо многих прошла, включая меня. Нет это не LXC, vagrant и даже не docker.
Короче, это — Multipass от Canonical. И да, полностью бесплатная и с мордой.
ㅤ
Выдумать ничего не буду, лови нативку с сайта:
Работает под Linux, Wiundows, Mac
Что же это за зверь?
Multipass использует доступный гипервизор в зависимости от платформы:
- Linux — KVM
- macOS — HyperKit или QEMU
- Windows — Hyper-V или VirtualBox (в новых версиях QEMU)
Можно управлять как через морду, так и через командную строку. Это развязывает руки. Например, можно накодить себе bash скрипт и через него поднимать виртуалки под лабы.
Чё прикольно, для него есть Terraform провайдер, ну прям не инструмент, а золото.
Работает элементарно, если через морду — выбираешь дистрибутив, накручиваешь ползунки и жмешь Launch, через 40 секунд у тебя готовая виртуалка.
Ну либо headless (через командную):
Основные команды:
Из дистрибутивов только Ubuntu, но этого достаточно чтобы что-то протестировать либо погонять. Ребята в LF активно этим инструментом пользуются и создают тестовые кубер-кластера, ну и ансибл оттачивают.
Настроек там жопой ешь, так что можно и статические айпишники мутить, выбирать сетевые режимы и многое другое.
В общем рекомендую, инструмент зачетный, никакой ёбли как VBox и VMWare.
🛠 #devops #vm #linux
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Да легко, опять же эта новая херабора как-то мимо многих прошла, включая меня. Нет это не LXC, vagrant и даже не docker.
Дело пахнет писюнами…
Короче, это — Multipass от Canonical. И да, полностью бесплатная и с мордой.
ㅤ
Выдумать ничего не буду, лови нативку с сайта:
Получитепо ебалумгновенную виртуальную машину Ubuntu с помощью одной команды. Multipass может запускать виртуальные машины и настраивать их с помощью cloud-init, как в общедоступном облаке. Прототип вашего облака запускается локально и бесплатно.
Работает под Linux, Wiundows, Mac
Что же это за зверь?
Multipass использует доступный гипервизор в зависимости от платформы:
- Linux — KVM
- macOS — HyperKit или QEMU
- Windows — Hyper-V или VirtualBox (в новых версиях QEMU)
Можно управлять как через морду, так и через командную строку. Это развязывает руки. Например, можно накодить себе bash скрипт и через него поднимать виртуалки под лабы.
Чё прикольно, для него есть Terraform провайдер, ну прям не инструмент, а золото.
terraform {
required_providers {
multipass = {
source = "larstobi/multipass"
version = "~> 1.4.2"
}
}
}Работает элементарно, если через морду — выбираешь дистрибутив, накручиваешь ползунки и жмешь Launch, через 40 секунд у тебя готовая виртуалка.
Ну либо headless (через командную):
Основные команды:
multipass launch --name foo
multipass exec foo -- lsb_release -a
multipass list
multipass stop foo bar
multipass start foo
multipass delete bar
multipass purge
multipass find
multipass launch -n bar --cloud-init cloud-config.yaml
multipass help
Из дистрибутивов только Ubuntu, но этого достаточно чтобы что-то протестировать либо погонять. Ребята в LF активно этим инструментом пользуются и создают тестовые кубер-кластера, ну и ансибл оттачивают.
Настроек там жопой ешь, так что можно и статические айпишники мутить, выбирать сетевые режимы и многое другое.
В общем рекомендую, инструмент зачетный, никакой ёбли как VBox и VMWare.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5 60
А вот это нам надо!
TUI админка для Proxmox. И да, ее можно поставить себе локально и цепануть к ней все твои Proxmox кластера, которые находятся где-то в сети.
ㅤ
Называется всё это добро — pvetui
Работает под всеми операционками, так как реализован на GO.
А зачем? Ну я заебался каждый раз лезть в браузер, чтобы сделать какие-то рутинные действия, да и айпишники я никогда не помню чтобы к ним по ssh подключиться. А через
Установка и запуск:
Под другие ОС:
При первом запуске утилита попросит сконфигурировать её. Жмем пару раз Enter, открывается редактор конфига, заполняем необходимые поля.
Я заполнил URL, логин и пароль от панели Proxmox. Чтобы оно не орало, нужно стереть данные в полях API, тогда оно даст сохранить конфигурационный файл.
Инициализация, закончена, видим сообщение:
Запускаем морду и смотрим что получилось.
Эту штуку можно повесить на alias либо прописать в PATH, чтобы полные пути до бинарника каждый раз не писать.
А получилось у нас прям заебись. Теперь я нажимаю ALT+2 и попадаю в список всех своих виртуальных машин. Стрелочками выбираю нужную мне машину и нажимаю букву «m», открывается менюшка.
В менюшке можно сразу провалиться в машину по SSH, что мне и нужно. Но это еще не всё, там и ребуты и миграции, даже VNC есть (нужен xdg). Короче базовый минимум поадминить присутствует.
Да, если нажать «ESC» то откроется еще одна глобальная менюшка для конфигурации самой утилиты, выбор профилей, управление плагинами и т.п.
Короче явки-ссылки я тебе дал, дальше сам смотри, всё там гибко конфигурируется и настраивается. И тем более TUI интерфейсы сейчас прям в трендах.
Хорошей тебе рабочей недели! Не болей!
🛠 #selfhosting #linux #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
TUI админка для Proxmox. И да, ее можно поставить себе локально и цепануть к ней все твои Proxmox кластера, которые находятся где-то в сети.
ㅤ
Называется всё это добро — pvetui
Работает под всеми операционками, так как реализован на GO.
А зачем? Ну я заебался каждый раз лезть в браузер, чтобы сделать какие-то рутинные действия, да и айпишники я никогда не помню чтобы к ним по ssh подключиться. А через
pvetui такое можно провернуть в два счета.Ты скажешь — дак сделай алиасы для айпишников и цепляйся к нужным виртуалкам. Справедливо, но мне лень. Тем более виртуалки у меня постоянно создаются, удаляеются и я ебал каждый раз алиасы делать.
Установка и запуск:
go install github.com/devnullvoid/pvetui/cmd/pvetui@latest
/home/user/go/bin/pvetui
Под другие ОС:
yay -S pvetui-bin
yay -S pvetui-git
brew install --cask devnullvoid/pvetui/pvetui
scoop bucket add pvetui https://github.com/devnullvoid/scoop-pvetui
scoop install pvetui
# либо из исходников
git clone https://github.com/devnullvoid/pvetui.git
cd pvetui
make install
При первом запуске утилита попросит сконфигурировать её. Жмем пару раз Enter, открывается редактор конфига, заполняем необходимые поля.
Я заполнил URL, логин и пароль от панели Proxmox. Чтобы оно не орало, нужно стереть данные в полях API, тогда оно даст сохранить конфигурационный файл.
Но опять же если у тебя API ключ, делаешь под своё конфигурацию.
Инициализация, закончена, видим сообщение:
✅ Configuration is ready!
🔄 Please re-run 'pvetui' to start the application with your new configuration.
🚪 Exiting.
Запускаем морду и смотрим что получилось.
/home/user/go/bin/pvetui
Эту штуку можно повесить на alias либо прописать в PATH, чтобы полные пути до бинарника каждый раз не писать.
А получилось у нас прям заебись. Теперь я нажимаю ALT+2 и попадаю в список всех своих виртуальных машин. Стрелочками выбираю нужную мне машину и нажимаю букву «m», открывается менюшка.
В менюшке можно сразу провалиться в машину по SSH, что мне и нужно. Но это еще не всё, там и ребуты и миграции, даже VNC есть (нужен xdg). Короче базовый минимум поадминить присутствует.
Да, если нажать «ESC» то откроется еще одна глобальная менюшка для конфигурации самой утилиты, выбор профилей, управление плагинами и т.п.
Короче явки-ссылки я тебе дал, дальше сам смотри, всё там гибко конфигурируется и настраивается. И тем более TUI интерфейсы сейчас прям в трендах.
Хорошей тебе рабочей недели! Не болей!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
7 67
Как я обновил Proxmox и остался жив
Здрасти, приехали. Сегодня будем обновлять proxmox 8 на 9.1 Оно в принципе и необязательно, но очень хотелось потыкать новую фичу с OCI.
А нахуя? Чтобы проще запускать приложения, которые уже существуют в виде Docker-образов. Теперь в LXC не нужно поднимать отдельно докер демон, все работает из коробки.
Ладно, отвлеклись. Про OCI отдельно распишу. Сегодня обновляем всю эту трихомудию до нужной версии.
Бекапить я ничего не буду, бекапы для слабаков. Но ты меня не слушай, делай правильно и подстилай соломку.
По классике сюда всё не влезло, поэтому гоу в блог читать продолжение 👇
🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️
➡️ https://two.su/4ui2c
🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️ 🅰️
🛠 #proxmox #devops #selfhosting
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Здрасти, приехали. Сегодня будем обновлять proxmox 8 на 9.1 Оно в принципе и необязательно, но очень хотелось потыкать новую фичу с OCI.
OCI это способ запускать контейнеры из Docker-образов. То есть proxmox теперь умеет скачивать Docker-образы (OCI-images) и превращать их в LXC-контейнеры.
А нахуя? Чтобы проще запускать приложения, которые уже существуют в виде Docker-образов. Теперь в LXC не нужно поднимать отдельно докер демон, все работает из коробки.
Ладно, отвлеклись. Про OCI отдельно распишу. Сегодня обновляем всю эту трихомудию до нужной версии.
Бекапить я ничего не буду, бекапы для слабаков. Но ты меня не слушай, делай правильно и подстилай соломку.
Даже если у меня всё пойдет по пиздец, это отличный кейс, чтобы отдебажить проблему и решить её.
По классике сюда всё не влезло, поэтому гоу в блог читать продолжение 👇
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Bashdays
Обновляем Proxmox 8 до Proxmox 9 (OCI)
Подробная инструкция по переходу на новую ветку Debian Trixie в Proxmox. Фиксим репы, обновляем ключи, прогоняем pve8to9 и устанавливаем всё, что предлагает система. Даю комментарии по каждому этапу, чтобы апдейт не превратился в ад.
11 38
Техническое_задание_на_разработку_приложения.pdf
87.6 KB
Подработка на разработку!
Мой хороший товарищ попросил закинуть, закидываю.
ㅤ
Мож у кого-то команда разработчиков простаивает, ну либо договоритесь выполнить какую-то часть работ в плане инфраструктуры.
Короче, за подробностями пишите Марии, все расскажет и покажет 👇
@marysako_py
чтобы вопросов не было — публикация ТЗ и контактов согласованы
Мой хороший товарищ попросил закинуть, закидываю.
ㅤ
Мож у кого-то команда разработчиков простаивает, ну либо договоритесь выполнить какую-то часть работ в плане инфраструктуры.
Короче, за подробностями пишите Марии, все расскажет и покажет 👇
@marysako_py
чтобы вопросов не было — публикация ТЗ и контактов согласованы
Docker Privileged VS Non-privileged
Давай сразу к примерам:
➡️ Non-privileged
Ты ребёнок, тебя посадили в песочницу, дали совок и формочки, сказали — слышь еблан, играть можно только здесь!
Ты можешь:
— лепить куличики и кренделя
— копать ямки и могилки для жуков
— сыпать песочек в глаза другим детям
— строить свой маленький мир
Ты не можешь:
— вылазить из песочницы
— пойти на стройку и доебывать сторожа
— насрать в ладошку и кидаться этим в людей
— послать всех нахуй и сделать по своему
Ты работаешь строго в пределах песочницы. Безопасно, предсказуемо, контролируемо, изолировано. Ты бездушный non-privileged контейнер.
➡️ Privileged
Ты ребёнок, но всем на тебя поебать, ты сам выбираешь сидеть тебе в песочнице или кидаться с балкона кирпичами в пустые головы прохожих. У тебя развязаны руки, любые безумные поступки позволительны. У тебя есть ключи от всех дверей и тебе за это ничего не будет.
Всё это происходит, когда ты запускаешь:
Твой контейнер может:
— управлять сетевыми интерфейсами хоста
— лезть в
— монтировать что угодно куда угодно
— работать как полноценная виртуалка
— запускать systemd, модифицировать ядро, iptables, модули и т.п
То есть, это уже не ребёнок в песочнице, а ребёнок со швейцарским армейским ножом, запертый в серверной.
➡️ Non-privileged (обычный контейнер)
- Ограниченный доступ к Linux capabilities
- Нет доступа к аппаратным устройствам
- Нет прав на управление сетью хоста
- Запуск отдельных процессов, а не мини-ОС
- Работает в namespace'ах и cgroup'ах изоляции
Используется для:
- веб-сервисов
- приложений
- баз данных
- CI/CD runner’ов (если привилегия не нужна)
- всего, что «из коробки» работает в Docker
➡️ Privileged (контейнер-всевластия)
- Доступ ко всем Linux capabilities
- Может лезть в
- Может менять сетевые интерфейсы хоста
- Может работать как виртуалка
- Может запускать systemd
- Может cломать или убить сеть, firewall и модули ядра
Используется для:
- контейнеров, которым нужны реальные устройства
- low-level инструментов: tcpdump, wireshark, iptables
- Docker-in-Docker в особых сценариях
- Kubernetes kubelet / CNI плагины
- экспериментов, когда нужно «полный root над всем»
Что выбрать?
Мой алгоритм:
В большинстве случаев лучше выдать минимум необходимых прав, чем сразу открывать ящик пандоры.
Ну и для отладки
На днях продолжим…
🛠 #linuxfactory #linux #docker
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Как говорится — «Нам нужно досье на этого мисье»
Давай сразу к примерам:
Ты ребёнок, тебя посадили в песочницу, дали совок и формочки, сказали — слышь еблан, играть можно только здесь!
Ты можешь:
— лепить куличики и кренделя
— копать ямки и могилки для жуков
— сыпать песочек в глаза другим детям
— строить свой маленький мир
Ты не можешь:
— вылазить из песочницы
— пойти на стройку и доебывать сторожа
— насрать в ладошку и кидаться этим в людей
— послать всех нахуй и сделать по своему
Ты работаешь строго в пределах песочницы. Безопасно, предсказуемо, контролируемо, изолировано. Ты бездушный non-privileged контейнер.
Ты ребёнок, но всем на тебя поебать, ты сам выбираешь сидеть тебе в песочнице или кидаться с балкона кирпичами в пустые головы прохожих. У тебя развязаны руки, любые безумные поступки позволительны. У тебя есть ключи от всех дверей и тебе за это ничего не будет.
Всё это происходит, когда ты запускаешь:
docker run --privileged
Твой контейнер может:
— управлять сетевыми интерфейсами хоста
— лезть в
/dev— монтировать что угодно куда угодно
— работать как полноценная виртуалка
— запускать systemd, модифицировать ядро, iptables, модули и т.п
То есть, это уже не ребёнок в песочнице, а ребёнок со швейцарским армейским ножом, запертый в серверной.
- Ограниченный доступ к Linux capabilities
- Нет доступа к аппаратным устройствам
- Нет прав на управление сетью хоста
- Запуск отдельных процессов, а не мини-ОС
- Работает в namespace'ах и cgroup'ах изоляции
Используется для:
- веб-сервисов
- приложений
- баз данных
- CI/CD runner’ов (если привилегия не нужна)
- всего, что «из коробки» работает в Docker
- Доступ ко всем Linux capabilities
- Может лезть в
/dev, работать с устройствами- Может менять сетевые интерфейсы хоста
- Может работать как виртуалка
- Может запускать systemd
- Может cломать или убить сеть, firewall и модули ядра
Используется для:
- контейнеров, которым нужны реальные устройства
- low-level инструментов: tcpdump, wireshark, iptables
- Docker-in-Docker в особых сценариях
- Kubernetes kubelet / CNI плагины
- экспериментов, когда нужно «полный root над всем»
Что выбрать?
Мой алгоритм:
Задача не требует низкоуровневых операций?⚪ всегда non-privileged.
Нужно одно конкретное действие (например NET_ADMIN)?⚪ --cap-add вместо privileged.
Нужен доступ к устройству?⚪ --device вместо полного доступа.
Ничего из этого не помогает?⚪ тогда уже --privileged.
В большинстве случаев лучше выдать минимум необходимых прав, чем сразу открывать ящик пандоры.
Ну и для отладки
privileged прям мастхев, чтобы исключить какие-то внешние факторы, от которых могут лезть баги.На днях продолжим…
—
Please open Telegram to view this post
VIEW IN TELEGRAM
13 61
А у нас сегодня на повестке интересная «темка» — Автоматическая очистка tmp-файлов даже после SIGTERM.
ㅤ
Пишем подопытный скрипт:
Чмодим, запускаем, ага скрипт упал на
Код выходы проверить так:
Здесь я взял синтетику, показать наглядно этот случай. Суть «темки» — подчищать за собой, при любых обстоятельствах, даже если скрипт вернул ошибку, либо завершился успешно.
Снова изобретать велосипед? Неа! Всё это работает из коробки.
В этом случае скрипт также вернет код
Нихуя непонятно, но очень интересно.
Смотри —
Давай подключим
В выхлопе видим:
То есть Bash вызывает
Почему trap срабатывает?
Если скрипт упал или получил сигнал
— в обработчике сигнала вызывается registered trap
— затем Bash падает/выходит
—
Да банально при выполнении скрипта ты нажал
Вот такие пироги!
С пятницей и хороших тебе предстоящих выходных!
🛠 #bash #debug #strace
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Как говорится — Волков бояться, в лесу не ебаться!
Пишем подопытный скрипт:
#!/usr/bin/env bash
set -e
temp=$(mktemp)
echo "Создал файл: $temp"
false
echo "Удаляю файл"
rm -f "$temp"
Чмодим, запускаем, ага скрипт упал на
false, но успел создать временный файл в папке /tmp == /tmp/tmp.oWQ0HiYxSV. И он не удалился. Скрипт вернул статус == 1;Код выходы проверить так:
echo "код: $?"
Здесь я взял синтетику, показать наглядно этот случай. Суть «темки» — подчищать за собой, при любых обстоятельствах, даже если скрипт вернул ошибку, либо завершился успешно.
Снова изобретать велосипед? Неа! Всё это работает из коробки.
#!/usr/bin/env bash
set -e
temp=$(mktemp)
echo "Создал файл: $temp"
trap 'echo "Удаляю $temp"; rm -f "$temp"' EXIT
false
В этом случае скрипт также вернет код
1, но временный файл будет удалён при любом раскладе.Нихуя непонятно, но очень интересно.
Смотри —
trap вызывает rm ПРИ ВЫХОДЕ ИЗ СКРИПТА. И похуй с каким статусом был завершен скрипт. Временный файл будет гарантированно удалён.Давай подключим
strace:strace -e trace=process,signal bash -c '
tmp=$(mktemp)
trap "rm -f $tmp" EXIT
echo "tmp=$tmp"
'
В выхлопе видим:
openat(AT_FDCWD, "/tmp/tmp.Dn2qG3uK9V", O_RDWR|O_CREAT|O_EXCL, 0600) = 3
rt_sigaction(SIGINT, {sa_handler=0x...}, NULL, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x...}, NULL, 8) = 0
unlink("/tmp/tmp.Dn2qG3uK9V") = 0
exit_group(0) = ?
openat(... O_EXCL) — это mktemp, создающий файл атомарноrt_sigaction() — Bash ставит ловушки для сигналовunlink() — это и есть выполнение trapexit_group(0) = ? — завершает процессТо есть Bash вызывает
rm/unlink() ДО выхода из процесса.Почему trap срабатывает?
Если скрипт упал или получил сигнал
kill -TERM <pid>, то на уровне Bash:— в обработчике сигнала вызывается registered trap
— затем Bash падает/выходит
—
trap УЖЕ успел выполнить команду очисткиtrap выполняется ДО того, как процесс отдаст SIGTERM ядру, если только ловушка для этого сигнала была установлена.Да банально при выполнении скрипта ты нажал
CTRL+C, скрипт остановился, НО временные файлы сразу подчистились.➡️ Про exit codes (коды выхода) писал тут.➡️ Про сигналы писал ранее тут и тут и тут и тут.
Вот такие пироги!
С пятницей и хороших тебе предстоящих выходных!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 52
В Proxmox 9.1 завезли OCI. В предыдущем посте про обновление с 8ки на 9ку я это уже упоминал, поэтому повторяться не буду.
Сегодня посмотрим как OCI работает на практике.
ㅤ
OCI это не какая-то отдельная сущность, это тот же самый LXC контейнер в котором будет запущен нужный тебе контейнер.
Тут важное замечание — тебе не нужно устанавливать руками docker демона в LXC и только затем запускать контейнер. OCI все сделает само. Это не какой-то встроенный docker или k8s. Всё так или иначе работает под управлением LXC.
К примеру возьмем заезженный образ nginx, который валяется в dockerhub:
Заходим в Proxmox и идем в раздел с шаблонами, там будет кнопка
➡️ ЧИТАТЬ ПРОДОЛЖЕНИЕ
🛠 #proxmox #devops #selfhosting
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
➡️ Как я обновлял Proxmox и остался жив
Сегодня посмотрим как OCI работает на практике.
ㅤ
OCI это не какая-то отдельная сущность, это тот же самый LXC контейнер в котором будет запущен нужный тебе контейнер.
Тут важное замечание — тебе не нужно устанавливать руками docker демона в LXC и только затем запускать контейнер. OCI все сделает само. Это не какой-то встроенный docker или k8s. Всё так или иначе работает под управлением LXC.
К примеру возьмем заезженный образ nginx, который валяется в dockerhub:
nginx:latest
Заходим в Proxmox и идем в раздел с шаблонами, там будет кнопка
Pull from OCI Registry.—
Please open Telegram to view this post
VIEW IN TELEGRAM
6 22
Бывает ли кибербезопасность удобной?
Как ускорить выдачу доступов, упростить расследование сбоев и забыть о постоянной смене паролей от уймы серверов? А заодно — защитить критичные ресурсы от взлома и случайных изменений?
Это возможно с PAM-системой, если она следит за балансом безопасности и удобства.
BI.ZONE PAM — решение, созданное с уважением к вашему пользовательскому опыту и основанное на концепции zero trust.
Смотрите короткие видео, чтобы самим оценить удобство ВI.ZONЕ PAM:
🔵 Подключение к защищаемым системам без паролей.
🔵 Кеширование MFA для ускорения массовых операций.
🔵 Подключение через терминальную ферму Linux.
🔵 Лицензии для старта и масштаба.
Как ускорить выдачу доступов, упростить расследование сбоев и забыть о постоянной смене паролей от уймы серверов? А заодно — защитить критичные ресурсы от взлома и случайных изменений?
Это возможно с PAM-системой, если она следит за балансом безопасности и удобства.
BI.ZONE PAM — решение, созданное с уважением к вашему пользовательскому опыту и основанное на концепции zero trust.
Смотрите короткие видео, чтобы самим оценить удобство ВI.ZONЕ PAM:
Please open Telegram to view this post
VIEW IN TELEGRAM
Чтоб тебе такого интересного рассказать… а давайка я научу тебя весьма полезной теме. Сегодня будем резать аппетиты.
Создаем синтетику
Чмодим и запускаем. По итогу твой проц начинает хуярить как не в себя, выжирая на 100500% все свободные ресурсы. Хуита!
ㅤ
Давай это исправим и разрешим скрипту хуячить лишь на 50%.
Для начала проверяем, сможем ли мы это сделать
Если получил выхлоп, то в большинстве случаев у тебя всё получится.
Создадим клетку «bashdays.slice»:
Здесь мы включаем нужные контроллеры для дочерних директорий, запихиваем туда текущий shell и в последней строчке выставляем 50% для CPU.
Снова запускаем первый скрипт-пожиратель и наблюдаем как проц перестал хуярить как не в себя и ограничен теперь половинкой (50%). Отличная работа!
Аналогично можно сделать и с RAM и с IO.
Создаем еще одну синтетику:
Жрём память пачками по 100 МБ. Сначала увидишь замедление (reclaim), потом — пиздец! Нас выкинет локальный OOM, но только внутри cgroup, а не всей системы.
Посмотреть статистику в реальном времени:
Ну и давай посмотрим IO (тормозим винт и превращаем его в флешку USB1.1). Цель — мы хотим, чтобы процесс читал с диска не быстрее 10 МБ/с:
Узнаем major:minor:
Допустим, диск —
И запускаем:
Теперь твой винт начинает работать как древняя флешка, хотя железо у тебя современное.
Короче такие вот приколы! Изучай!
🛠 #linux #cgroup #debug
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Тема крайне полезная, бери на вооружение, однажды в хозяйстве однозначно сгодится.
Создаем синтетику
#!/bin/bash
while :; do :; done
Чмодим и запускаем. По итогу твой проц начинает хуярить как не в себя, выжирая на 100500% все свободные ресурсы. Хуита!
ㅤ
Давай это исправим и разрешим скрипту хуячить лишь на 50%.
Для начала проверяем, сможем ли мы это сделать
mount | grep cgroup2
cat /sys/fs/cgroup/cgroup.controllers
Если получил выхлоп, то в большинстве случаев у тебя всё получится.
Создадим клетку «bashdays.slice»:
sudo su
cd /sys/fs/cgroup
mkdir bashdays.slice
echo "+cpu +memory +io" > cgroup.subtree_control
cd bashdays.slice
echo $$ > cgroup.procs
echo "50000 100000" > cpu.max
Здесь мы включаем нужные контроллеры для дочерних директорий, запихиваем туда текущий shell и в последней строчке выставляем 50% для CPU.
Снова запускаем первый скрипт-пожиратель и наблюдаем как проц перестал хуярить как не в себя и ограничен теперь половинкой (50%). Отличная работа!
Что такое cgroups — это такая комната наказаний в ядре Linux. Ты создаёшь группу процессов, ядро начинает следить за их CPU, памятью, диском, IO и карать, если они жрут больше положенного.
Аналогично можно сделать и с RAM и с IO.
echo $((512*1024*1024)) > memory.max
Создаем еще одну синтетику:
#!/bin/bash
blocks=()
while true; do
blocks+=("$(head -c 104857600 </dev/zero | tr '\0' 'A')")
echo "Allocated ${#blocks[@]}00 MB"
sleep 1
done
Жрём память пачками по 100 МБ. Сначала увидишь замедление (reclaim), потом — пиздец! Нас выкинет локальный OOM, но только внутри cgroup, а не всей системы.
Посмотреть статистику в реальном времени:
cat memory.current
cat memory.events
Ну и давай посмотрим IO (тормозим винт и превращаем его в флешку USB1.1). Цель — мы хотим, чтобы процесс читал с диска не быстрее 10 МБ/с:
Узнаем major:minor:
lsblk --output NAME,MAJ:MIN
Допустим, диск —
8:0 (типичное для /dev/sda).echo "8:0 rbps=10485760" > io.max
И запускаем:
#!/bin/bash
dd if=/dev/sda of=/dev/null bs=1M
Теперь твой винт начинает работать как древняя флешка, хотя железо у тебя современное.
Кстати это отличные способы заподлостроения либо как вариант подойдут для технических собеседований.
Например, говоришь кандидату — найди почему тормозит винт, либо — объясни почему скрипт жрет 50% процессора, а не 100%. Сразу вычислишь бродяг вайтишных, им даже ГПТ не поможет.
Короче такие вот приколы! Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 74