Bash Days | Linux | DevOps
23.3K subscribers
148 photos
24 videos
675 links
Авторский канал от действующего девопса

Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.

Автор: Роман Шубин
Реклама: @maxgrue

MAX: https://max.ru/bashdays

Курс: @tormozilla_bot
Блог: https://bashdays.ru
Download Telegram
У меня Obsidian бекапится в git, естественно он торчит наружу жопой. Репа конечно же приватная, но чем черт не шутит.

Каких-то критичных данных я в заметках не храню, ну спиздят и спиздят, пусть читают как на bash программировать. Мне не жалко.

Но недавно понадобилось мне зашифровать некоторые заметки. Поизучал я различные варианты и остановился на плагине — Meld Encrypt.

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

Слева появляется иконка — New Encrypt Note, забиваешь туда пароль, подсказку. Создается исходный файл в формате mdenc, а не нативный markdown с расширением .md.

Внутри исходного файла json`чик вида:

{
"version": "2.0",
"hint": "My Hint",
"encodedData": "tH/epIAOSgeGQQtO7FTcM="
}


Что прикольно, ты можешь зашифровать не всю заметку, а только её часть либо критические данные в каком-нибудь пайплайне. Выделяешь эти данные и слева жмешь иконку — Ecrypt Selection.

Теперь этот файл .mdenc заливает в git и не зная правильного пароля хуй кто прочтет твою заметку, даже если её спиздят. Аналогично с заметками где ты зашифровал часть данных.

Шифрованная часть внутри заметки выглядит так:

🔐β 💡My Hint💡ls92E5jV+HlAfZMML== 🔐


Короче полет нормальный. Хер знает насколько сильный там энкрипт, но от лишних глаз эта штука защищает.

В одном из issue в репе есть комментарий — «I have reviewed the code and noticed that it uses AES-GCM with a fixed IV and a password-derived key.»

Ну и по коду могу сказать что работает примерно так:

Пользователь задаёт пароль для шифрования.

Ключ генерится на основе пароля, скорее всего это PBKDF2.

Шифрование проходит по схеме AES-GCM. Шифр AES, режим Galois/Counter Mode с поддержкой аутентификации (В коде есть тэг MAC).

Не уверен, но возможно используется фиксированный IV инициализационный вектор.

Автор плагина походу сам не знает, что он написал. Поэтому подстраховался и добавил в ридми — «Use at Your Own Risk», мол идите нахуй, если вас подломят я тут не причем.

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

🛠 #encrypt #obsidian #utilites

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
1165
Дожились блядь, схватил погремуху на LF. (скрином поделился: Антон Жданов) публикую с его разрешения и с разрешения участника диалога. Так что все блядь прозрачно и согласовано!

- Каждому лектору в жопу по вектору
- Лучше в жопу сунуть глобус чем у ЦУМА сеть в автобус
- Если ты не голубой нарисуй вагон другой


Новый бренд чтоль мутитиль - Сёледка под Шубой?

Ладно хули, рутина. Дела, люди всем двором на LF идут, устраивают челеджи, кто на какой задачке вперед сдохнет ))

Всех с пятницей, хороших тебе предстоящих выходных, ну и по классике — береги себя!

🛠 #рабочиебудни

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
747
Олды могут помнить эту замечательную игруху, называлась она Star Trek, придумал и реализовал ее Майк Мэйфилд в 1971 году.

Короче некий энтузиаст запилил ее на чистом Bash и притащил в современный мир под названием Bash Trek.

Это пошаговая стратегия, да, прям в терминале.

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

Устанавливается просто:

cd /tmp
wget https://github.com/StarShovel/bash-trek/raw/main/bashtrek.sh
chmod +x bashtrek.sh
./bashtrek.sh


И погнали сводить скулы.

Как играть:

Нажми на цитату чтобы развернуть

— Галактика — это сетка 8×8 квадрантов, каждый квадрант — 8×8 позиций.

— При навигации тебе будет предложено направление (0-7 как «ферзь» в шахматах, восемь возможных направлений) и расстояние (количество шагов).

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

— Червоточины («wormholes») могут появляться в квадрантах, если ты войдешь в червоточину, тебя телепортирует в случайное место в галактики.

— При входе в квадрант с клингонами, они могут атаковать твой корабль. Щиты (SHI) защищают, но если они севшие — тебе пезда.

— У тебя есть база (starbase), если ты подлетишь к базе, торпеды, щиты и энергия восстанавливаются.

— Есть временные ограничения «stardate» (звёздная дата), до которой нужно уничтожить всех клингов, если не успеешь — тебе пезда.


Короче затягивает, протупил сегодня пару часов, ни разу так и не победил.

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

🛠 #games #игры

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
647
Как прокачать Minecraft сервер с помощью Angie

Накидал пост о том, как мы мигрировали minecraft сервер на выделенный сервер и защитились от ботов с помощью Angie, просто и эффективно.

Сюда по классике не влезло, всё в блоге 👇

Читать: https://two.su/bieb4

🛠 #angie #devops #security

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
550
This media is not supported in your browser
VIEW IN TELEGRAM
Ха! Сегодня будем тыкать палкой «Крокодила».

Croc — это кроссплатформенный CLI-тор. С помощью этой штуки можно передавать файлы/каталоги между устройствами. Без айпи, хуйни и лишнего гемора.

Работает по принципу «отправь, введи код, получи по ебалу».

Установка под всё:

curl https://getcroc.schollz.com | bash
brew install croc
scoop install croc
choco install croc
winget install schollz.croc


Начнем! Я буду передавать файлы c Linux сервера на свою виндовую машину.

На Linux сервере запускаю:

cd /tmp && echo "Hello BashDays" >> bashdays.txt
croc send bashdays.txt


Получаем:

Sending 'bashdays.txt' (15 B)
Code is: 2811-spray-cabinet

On the other computer run:
(For Windows)
croc 2811-spray-cabinet
(For Linux/macOS)
CROC_SECRET="2811-spray-cabinet" croc


Так, идем на Windows машину и запускаем:

croc 2811-spray-cabinet


То есть берем «секретную строку» и передаем её получателю. Получатель запускает команду выше и видит:

C:\Users\user>croc 2811-spray-cabinet
Accept 'bashdays.txt' (15 B)? (Y/n) Y

Receiving (<-92.52.131.227:10350)
bashdays.txt 100% |████████████████████| (15/15 B, 73 B/s)


А на Linux машине:

Sending (->92.52.131.227:9015)
bashdays.txt 100% |████████████████████| (15/15 B, 41 kB/s)


Вуаля! Проверяем файл на винде, всё прекрасно передалось!

«Крокодил» не требует VPN, SSH, SCP, FTP, использует end-to-end шифрование (AES-256), работает между любыми ОС.

Фича — можно передать каталог, не архивируя его. Ну и как self-hosted воткнуть, чтобы уж совсем не параноить, как истеричка.

Да, есть прикол, что при получении ты вводишь «секретный код» и он отпечатается в истории команд, это хуйня. Поэтому просто запускаем croc и оно в интерактиве запросит код, вводишь код и дело в шляпе. В историю команд ничего не попало.

А если автокоды тебе в хуй не уперлись, можешь через ключик -code впендюрить свой код доступа. Всё гибко, покури репку и описание, там прям можно на многое повлиять, вплоть до создания своего relay.


Под капотом P2P протокол через relay-сервер — работает даже если устройства за NAT.

На Android кстати тоже порт есть в F-Droid.


🛠 #utilites #tools #selfhosting

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
264
Как «сократить» расходы

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

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

С одной стороны делал полезную работу, с другой стороны всегда было ощущение — а нахуя я этим занимаюсь?

Зачем я это делаю, это понятно, а вот нахуя я пытаюсь сократить расходы — непонятно. Деньги то всёравно не мои. Если я сокращу расходы, моя ЗП не вырастит.

Ну да ладно. Пост про другое.

Как бы ты не менял поставщиков гандонов, пока ты не придумаешь как выращивать эти гандоны в своём огороде — нихрена не поменяется.

Допустим ты придумал и начал выращивать гандоны в своём огороде.

Хотя их можно и не выращивать, позови 10 человек на собес и 9 из них будут гандонами. Неплохо? Ага!


Блядь, всё отвлекаюсь. Короче выращиваешь ты гандоны и сэкономил 1000 баксов. Охуенно? Охуенно!

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

Видишь где наебалово? Знаю, видишь…

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

Теперь всё в порядке. Отдельный человек решает все вопросы с производством гандонов, а задачи в спринте вновь запиливаются вовремя. Людей хватает.

Сэкономили, молодцы. Только вот эта сэкономленная тыща баксов идет на ЗП новому сотруднику + компания платит за сотрудника налоги, пенсионные и т.п. сборы в казну. 1000 баксов превращается в 1500 баксов.

Заебись сэкономили! Ну вот и я про тоже.

А как сокращать расходы-то? Если ты мелкий стартап, то никак, поменьше пиздежа, побольше работы. Закупай готовые гандоны от производителя и не пытайся их производить сам. Смысла в этом нет. Сосредоточься на своём продукте.

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

Чё еще сказать. Если что-то делаешь, подумай — а нахуя я это делаю? Сейчас да, разумно поднимать свои гандонные фабрики и свои сервисы, но это разумно лишь в текущих реалиях, когда загнивающие дрочепаки обложили нас санкциями.

Всё, иду я нахуй дальше диван продавливать. Удачи!

🛠 #трудовыебудни

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
1254
Профессиональная деформация

Каждый раз когда вижу урл вида:

https://bashdays.ru/?p=4893


Невольно тянется рука поставить в конце символ ' и посмотреть что будет.

Башкой понимаю, что в современном мире такое сработает 1 раз на 100кк, но ничего поделать с собой не могу. Когда видишь потенциальную дырку — нужно попробовать вставить.

А какая у тебя деформация? Поделись своим скелетом в комментах 😲

Кстати LF подорожал, кто не успел или кого выперло, заходите, раздам 30 промокодов по 1000 рубасов. Для тех кто уже занимается, повышений не будет.


🛠 #трудовыебудни

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
25
Хотелось бы поговорить о гувернантках, но будем обсуждать губернаторов. (governors).

🔤🔤🔤🔤🔤🔤🔤

Сейчас практически везде идет борьба за экологию, поэтому производители пытаются делать процы «зелеными». Есть нагрузка - частоту поднимают, нет нагрузки - частоту снижают и сразу падает тепловыделение и энергопотребление.

Так вот, управляют частотой/производительностью/энергопотреблением специальные алгоритмы, которые называются governors. Чтобы было проще выбирать, их наштамповали несколько видов:

performance — максимальная производительность (Ну, почти максимальная)
powersave — максимальное энергосбережение
ondemand — быстрое изменение частоты от нагрузки
conservative — медленное изменение частоты от нагрузки
schedutil — интеграция с планировщиком ядра Linux

К сожалению не все губеры доступны для вашей системы. Список доступных можно посмотреть так:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors


Вот, у меня на ноуте доступны только два: performance schedutil

Используемый в настоящее время:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor


Обратите внимание, governor задается для каждого ядра отдельно.

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

И пофигу на электроэнергию и тепловыделение, лишь бы быстрее закончилась. Тогда можно на время выполнения задачи изменить governor.

Делается это простым скриптом:

#!/bin/bash
declare -a KEEP_GOVERNOR
declare DIR_PREFIX=/sys/devices/system/cpu
declare SET_GOVERNOR='performance'
declare -i NPROC=$(nproc) # число ядер (процессоров)
declare -i PRESENT=0

#Проверка поддержки governor системой
for G in $(cat "$DIR_PREFIX/cpu0/cpufreq/scaling_available_governors");do
if [[ "$SET_GOVERNOR" == "$G" ]];then
PRESENT=1
break
fi
done

if !((PRESENT));then
echo GOVERNOR $SET_GOVERNOR not supported.
printf "Available governors : "
cat "$DIR_PREFIX/cpu0/cpufreq/scaling_available_governors"
exit 1
fi

# Keep current setting
I=NPROC
while ((I--));do
KEEP_GOVERNOR[$I]=$(cat "$DIR_PREFIX/cpu${I}/cpufreq/scaling_governor")
done

# Set (Для установки требуются привилегии)
I=NPROC
while ((I--));do
echo "$SET_GOVERNOR">"$DIR_PREFIX/cpu${I}/cpufreq/scaling_governor"
done

#Здесь ВАШ код

sleep 10

##############

# Restore settings
I=NPROC
while ((I--));do
echo "${KEEP_GOVERNOR[$I]}">"$DIR_PREFIX/cpu${I}/cpufreq/scaling_governor"
done


Если все делать в ручном режиме. Поменять governor для всех ядер можно командой:

sudo echo performance| sudo tee /sys/devices/system/cpu/cpu{0..1}/cpufreq/scaling_governor


здесь performance - задаваемый governor

{0..1} - описание числа процессоров (ядер). Для шестнадцати {0..15}.

Такая установка проживет до перезагрузки. Если требуется постоянные настройки - можно поставить в cron @reboot, прописать в grub или воспользоваться специальными утилитами.

Продолжение следует.

🛠 #cpu #performance #frequency #governor

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
36
Здесь я рассказал, как просто управлять производительностью сервера с помощью governors.

🔤🔤🔤🔤🔤🔤🔤

Но есть еще один способ: Прямое управление частотой.

Дело в том, что governor задает только скорость нарастания и убывания частоты, в зависимости от нагрузки. Сами частоты заданы в файлах:

/sys/devices/system/cpu/cpu0/cpufreq/

scaling_min_freq
scaling_cur_freq
scaling_max_freq

Но и пределы частоты тоже можно менять.

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

/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

(это для нулевого ядра)

У меня на ноуте, например, 1350000 1200000 1000000

Посмотреть частоты можно здесь:

cpuinfo_min_freq - минимальная частота ядра
cpuinfo_cur_freq - текущая
cpuinfo_max_freq - максимальная

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

Таким образом, командой типа:

cp cpuinfo_max_freq scaling_min_freq

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

Кстати, повышать частоты требуется не всегда.

Приведу пример:

У меня работает роутер на мини-PC. Если использовать его только как роутер - нагрузка максимум 5%.

Я поставил туда торрент-качалку. А она может загрузить проц, даже если использовать nice. Но я задал минимальную частоту в качестве максимальной:

cp cpuinfo_min_freq scaling_max_freq

Теперь мини-PC холодный, даже если прикидывается сервером и работает на 100% (В полку).

Код для установки максимальной производительности получается несколько проще, чем с governor:

#!/bin/bash
declare -a KEEP_MINFREQ
declare DIR_PREFIX=/sys/devices/system/cpu
declare -i NPROC=$(nproc) # число ядер (процессоров)

# Keep current setting
I=NPROC
while ((I--));do
KEEP_MINFREQ[$I]=$(cat "$DIR_PREFIX/cpu${I}/cpufreq/scaling_min_freq")
done

# Set
I=NPROC
while ((I--));do
# Поднимаем минимальную частоту до максимума
cp "$DIR_PREFIX/cpu${I}/cpufreq/cpuinfo_max_freq" "$DIR_PREFIX/cpu${I}/cpufreq/scaling_min_freq"
done

#Здесь ВАШ код

sleep 10

##############

# Restore settings
I=NPROC
while ((I--));do
echo "${KEEP_MINFREQ[$I]}">"$DIR_PREFIX/cpu${I}/cpufreq/scaling_min_freq"
done

Всем стабильных серваков!

🛠 #cpu #performance #frequency #governor

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
38
CPU AFFINITY

По просьбе коллеги @dox89.


🔤🔤🔤🔤🔤🔤🔤

Предыдущие статьи по настройке производительности Здесь и Здесь:

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

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

С помощью программы можно taskset можно запускать процессы на указанных ядрах.

Например:

taskset --cpu-list 0-2,6 thunderbird


Запустит thunderbird, и разрешит почтовому клиенту работать только на указанных ядрах.

Фактически taskset не разрешает работать на указанных ядрах, а запрещает работать на всех остальных, потому что по умолчанию любому процессу можно работать на всех ядрах.

Если использовать ключик -p PID, то аналогичную процедуру можно выполнить с уже запущенным процессом.

Современные процессоры имеют гибридную архитектуру. Т.е. они содержат и энергоэффективные и производительные ядра.

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

Ну, или для всей «шушеры» выделить пару ядер, освободив остальные для самых важных процессов.

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

Ну, и напоследок - вредный совет.

Однажды у моего коллеги на работе эффективные менеджеры ввели KPI.

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

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

А потом - о5-25.

Но как они этого добивались - я не знаю :-)

man taskset
man nice

🛠 #cpu #core #taskset #nice #perfomance

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
46
Борьба за производительность

В продолжение истории борьбы за производительность.

🔤🔤🔤🔤🔤🔤🔤🔤

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

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

Тут на помощь приходят 4 параметра ядра - isolcpus, nohz_full, rcu_nocbs и irqaffinity.

В рамках решаемого кейса сразу указал на них, что сократило поиск необходимых решений.

По сути, все 4 параметра решают одну задачу - ограничить использование указанных ядер (например 0-3) процессами, за исключением базовых - init, scsi и прочих.

Таким образом мы можем через тот же taskset указать вручную на ядра 0-3 те процессы, что нам нужны.

В данной картине мы защищаем этот сегмент от службы irqbalance, которая с завидным упорством будет ребалансировать процессы между ядрами.

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

Конкретно мой случай изоляции был применен в рамках разделения нагрузки на сетевые прерывания и nginx, но в совокупности факторов - параметры ядра, отключенный + маскированный irqbalance, taskset и еще несколько твиков - давало профит только при утилизации сетевой карты лишь до 70%, дальше спецэффекты постепенно возвращались.

🛠 #cpu #core #taskset #nice #perfomance

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
20
Опять потерял заявку? Не ты один

Когда в компании появляются десятки или сотни запросов: на оборудование, доступы, оплату или закупку — без системы они начинают теряться. Кажется, что все под контролем, но на деле у каждого отдела складываются разные процессы: кто-то пишет в личку, некоторые отмечают в табличке, а кто-то “давай голосом”.

12 ноября в 17:00 пройдет вебинар «Как упорядочить работу со входящим потоком задач». Покажут, как один раз настроить все процессы в Яндекс Трекере и больше никогда не искать, куда пропала заявка. Расскажут, почему важно вести всё через Трекер, как документировать процессы в Вики, автоматизировать назначение ответственных и какие фишки автоматизации используют сами в Яндексе.

Ведут вебинар руководитель продуктового направления Трекера Данил Майорский и архитектор решений и амбассадор Трекера Татьяна Родина. Полезно всем, кто регулярно в работе использует таск-менеджеры: IT-руководителям, администраторам, HR, AХО и тем, у кого входящих задач больше, чем часов в сутках.

Регистрируйся по ссылке.

#workflow #автоматизация #трекер
10
HRы и еже с ними, ловите головастого DevOps отличника и LF выпускника.

Такие мероприятия я провожу редко, но хороших кадров грех не порекомендовать.


Резюмирую

Мужчина в полном рассвете сил (26 лет), хочет на удаленку. Есть большое желание развиваться дальше, делать вещи и пилить охуительные инфраструктурные циркули.

Не пиздит и не завышает опыт, а это уже ценно!

Шарит за:

- докеры, пайплайны, ансиблы, кубы, графики и т.п.
- спец по информационной безопасности (PT SIEM),
- автоматизация на bash, python

Короче базовый набор маст-хев практик из коробки.

Нанимаешь и он работает, без лишних вопросов и хуйни. А твои сервера начинают тарахтеть быстрее и стабильнее.

Подробное резюме запрашивай в личке: @avs_jr_07

Чтобы все подряд ему не писали, ЗП хочет от 180к, за такой опыт, вполне справедливо!

🛠 #кандидаты #кадры

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
27
Вопрос с LF, думаю всем полезно будет.

Пишу пайплайн, есть такая конструкция:

platform=$(uname -m)
docker run --platform linux/arm64


Я бы хотел, чтобы параметр --platform linux/arm64 подставлял в том случае, если архитектура платформы == arm64, в других случаях этот параметр подставлять не нужно.

Делаю так, но получается какая-то хуйня:

platform=$(uname -m)
docker run ${platform/arm64/--platform linux/arm64}


Короче смотри. Задачку можно решить несколькими способами.

Способ 1. Заточен под Bash:

platform=$(uname -m)
docker run $([[ $platform = arm64 ]] && echo "--platform linux/arm64")


Этот способ не сработает, если код запустится в /bin/sh, потому что оно не POSIX. Тут уже смотри под чем все это будет запускаться.

Тут можешь почитать чем отличаются [[ ]] от []
А тут что такое POSIX


Способ 2. Универсальный:

platform=$(uname -m)
docker run $( [ "$platform" = "arm64" ] && echo "--platform linux/arm64" )


На 100 % POSIX-совместим. По функционалу эти способы идентичны.

Ну и по итогу имеем:

[[ ... ]] — это расширенная bash-версия, безопаснее и гибче (поддержка pattern, безопасность кавычек при пробелах и пустых строках, поддежка логики с &&)

[ ... ] — POSIX-совместимая, более строгая и требующая аккуратности с кавычками.

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

🛠 #bash #pipeline

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
146
Туалетная бумага по cron’у

Я короче каждый месяц заказываю на WB туалетную бумагу, сразу беру 32 рулона. В чатике ссылки как-то скидывал на этот товар.

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

Решено было накидать Bash скрипт, который каждый месяц будет заказывать на WB радость для моей жопы.


Открытой API у WB нет, но реверс-инженерию никто не отменял. Открываем в браузере режим разработчика, натыкиваем нужные действия на сайте и потом смотрим вкладку Network. Выбираем нужные запросы и рожаем скрипт.

Концепт скрипта:

1. Авторизация. С ней я не стал заморачиваться, авторизовался на сайте, выгрузил кукисы в файл. Полюбому можно и это автоматизировать через curl, но чёт пока лень.

2. Скрипт принимает единственный параметр $1, это ссылка на товар WB, мало ли бумага моя закончится и придется другого поставщика искать.

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

Пример добавления в корзину:

RESPONSE=$(curl -s "https://cart-storage-api.wildberries.ru/api/basket/sync?ts=$TS&device_id=$DEVICE_ID" \
-X POST \
-H 'content-type: application/json' \
-H 'origin: https://www.wildberries.ru' \
-b "$COOKIES_FILE" \
--data-raw "$JSON_PAYLOAD"
)


Все параметры прилетают из $JSON_PAYLOAD, параметр автоматически заполняются нужными данными на основе переданного урла в $1, да, активно используется jq.

Говнокод конечно лютый получился, но работает. А это главное в нашем деле!

4. Ну и всё, в телегу мне приходит уведомление, что заказ оформлен, бабло спишут по факту. Ну и пишут примерное число доставки.

5. Как только товар пришел в пункт выдачи, получаю уведомление в телегу. Аналогично curl запросом проверяется статус в личном кабинете.

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

59 23 25 * * /usr/local/sbin/shit_paper.sh https://wb.ru/296/detail.aspx


Вот и вся наука. Теперь когда я возвращаюсь из гаража, захожу по пути в пункт выдачи и забираю свои 32 рулона. Удобно? Да охуенно!

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


Еще бы научить чтобы чайник сам в себя воду наливал, было бы вообще ништяк.

Давай, увидимся! Хороших тебе предстоящих выходных и береги себя!

🛠 #bash #devops

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
1182
Продолжаем ковырять angie, на этот раз посмотрим на Status Page, которая отображает всю статистику по веб-серверу. Выглядит прям хорошо.

Устанавливаем пакет:

sudo apt install angie-console-light


В папке /usr/share/angie-console-light/html появляется статика.

Добавляем локейшен:

location /console/ {
auto_redirect on;

alias /usr/share/angie-console-light/html/;
index index.html;

location /console/api/ {
api /status/;
}
}


Теперь открываем в браузере и видим красивую мордочку. Демо мордочки можешь посмотреть здесь.

Да, не забываем включить Basic Auth чтобы хитрожопые не подглядывали.

У меня на паре пет проектов эта морда включена (графана избыточна), чисто посмотреть статусы раз в сутки, которые возвращают 500ку. Если оно горит красным, значит что-то где-то пошло по пизде.


Подробнее читай в официальной документации.

🛠 #angie #devops

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
531
Кто идёт на Kuber Conf by AOT 4 декабря?

Первая некоммерческая K8s-конференция в Москве — отличный повод встретиться и обсудить:

🟣 Как на самом деле работает CNI chaining в продакшене
🟣 Как безопасно развернуть Gatekeeper для k8s-in-k8s
🟣 Поддержку Kubernetes в Vitastor
🟣 Опыт построения Managed Kubernetes

На ивенте будут топовые инженеры и архитекторы — будет о чём поговорить.
Конференция проходит под эгидой Ассоциации облачно-ориентированных технологий (АОТ), которую создают Флант, VK Cloud и Yandex Cloud.

Встречаемся?

Программа и билеты: https://aot-kuberconf.ru/?utm_source=telegram&utm_medium=referral_cpc&utm_campaign=bashdays

Реклама Садовская.Е.О
ИНН:9710066394 Erid:2Vtzqw3fYS4
8
Load Average на пальцах

Все про него знают, но не все понимают.

Давай рассмотрим такие цифры:

0.30  1.20  0.80


1. За последнюю 1 минуту средняя очередь = 0.30
2. за 5 минут = 1.20
3. за 15 минут = 0.80

Сразу куча вопросов, а что такое «очередь»?

«очередь» == количество задач, которые хотят работать прямо сейчас, но процессоров не хватает, чтобы заняться всеми сразу.

➡️ Главное правило

Сравниваем Load Average с количеством ядер.

- У тебя 4 ядра → нормальная нагрузка = до 4.0
- У тебя 1 ядро → нормальная нагрузка = до 1.0
- У тебя 8 ядер → нормальная нагрузка = до 8.0

🟢 Всё в порядке:

- LA ≤ количество ядер → CPU успевает всё делать, очередей нет.

🟡 Чёт уже не то, подгрузилось:

- LA ≈ количество ядер × 1–2 → процессы начинают стоять в очереди, но система пока еще жива.

🔴 Жопа:

- LA сильно > количества ядер → процессы стоят в очереди, всё тормозит.


➡️ Теперь на котиках

Ты стоишь в магазине:

- 1 касса, 1 человек в очереди → заебись
- 1 касса, 10 человек в очереди → жопа
- 4 кассы, 6 человек → пока норм

CPU = кассы, Load Average == очередь.

LA это не про загрузку CPU в процентах — это просто «очередь».

➡️ Как задебажить

Берем top, htop или подобное и смотрим столбец %CPU, если один процесс жрёт 100% на однопроцессорной системе — он пидарас и забил ядро. Если процесс жрёт 300% на 4-ядерной — он занял 3 ядра.

Смотрим самых прожорливых пидарасов:

ps aux --sort=-%cpu | head


Если ничего не нашел, то смотрим в сторону:

- I/O wait — медленный диск / много дисковых операций
- много процессов, но каждый почти ничего не ест (fork storm)
- сеть или блокировки

Капля в море, но это базовый чеклист на ситуацию, когда сервер ушел в «полку».

А ты добавляй в комменты, что еще можно вынести в дебаг, будет полезно.


🛠 #linix #devops

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
273
Даже двухнедельный отпуск не принесёт столько удовольствия, как хорошая партнёрка от Selectel.

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


А если серьёзно — никакой магии. Советуй надёжного провайдера с 17-летним опытом, шестью ЦОДами и инфраструктурой под любые нужды — и получай до 15% на баланс.

На эти 15% арендуешь сервачок и бесплатно хостишь на нём свой личный блог про девопс-потуги и разработку. Ну или гоняешь пайплайны в личном гитлабе.


В партнерской программе Selectel всё честно, прозрачно и самое главное — надежно! Проверял сам.

Год назад я ради интереса залетел в программу, и знаешь, зашло! Так что потыкай, за спрос не ударят в нос:

Зарегистрироваться: https://slc.tl/mtgzq

😇🙂🙃😉😌😍🥰😘
😗😙😚😋😛😝😜🤪
🤨🧐🤓😎🤩🥳😏😒
😞😔😟😕🙁☹️😣😖
😫😩🥺😢😭😤😠😡

Серверы крутятся — проценты мутятся!

в ссылке моей рефки нет, так что не ссы — навариваться на тебе я не стану…

Реклама, АО «Селектел», erid: 2VtzqxCY6hn
Please open Telegram to view this post
VIEW IN TELEGRAM
15
Всем зрасти. Забирайте спеца на работу.

Codename: Андрей
Rank: Овер-преисполнившийся Linux-админ

Последнее время активно занимается мониторингом, особенно Zabbix, хотя может и в пром с графаной

Помогал мне тестировать и писать шаблоны для PVE/PBS и эта штука с небольшими видоизменениями с 6го заббикса стала официальной

Отлично разбирается в Linux, с закрытыми глазами разберет и соберет ядро с учетом нюансов железа и ПО

Кубер не уважает, к ансиблистам относится очень настороженно

Владеет светлой магией Bash, тёмной магией Perl, и немного Python


Контакт: @egoza73

🛠 #кандидаты #кадры

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
25