Бебебед практики bash, продолжаем.
Нельзя просто так взять условие из языка «Сиськи» и заменить его на квадратные скобки.
Сколько не повторяй, один хер делают неправильно.
Команда
Хуёвая практика:
В этом примере сначала проверяется
Если же
Бест-практика! Зырь!
Делаем двойные скобки. Двойные скобки умеют работать с
Внутри неё можно использовать логические операторы
Рассмотрим пример:
Для тупых Кто до сих пор не понял:
Представь, что ты говоришь своей бабушке: Если я убрал в комнате И сделал уроки, я могу поиграть в девопс-инженера.
Ну так вот:
Вот и вся наука. Изучай!
🛠 #bash #badpractices #bestpractices
—
✅ @bashdays / @linuxfactory / @blog
Нельзя просто так взять условие из языка «Сиськи» и заменить его на квадратные скобки.
Сколько не повторяй, один хер делают неправильно.
Команда
[ — это не просто скобка, а отдельная команда. Она проверяет, пиздеж ли что-то или нет.Хуёвая практика:
if [ a = b ] && [ c = d ]; then
...
fi
В этом примере сначала проверяется
a = b, если это пиздёж — дальше ничего не выполняется.Если же
a = b НЕ пиздёж — тогда проверяется c = d. И если c = d НЕ пиздёж, то выполняется, то что внутри then.Проще по моему объяснить уже нереально. Сложно перепутать пизду с розеткой. Хотя… вечно путают.
Бест-практика! Зырь!
if [[ a = b && c = d ]]; then
...
fi
Делаем двойные скобки. Двойные скобки умеют работать с
&& внутри.[[ ... ]] — это специальная команда Bash, которая используется для проверки условий. Она умнее и безопаснее, чем обычная [ ... ].Внутри неё можно использовать логические операторы
&& (и) и || (или) без дополнительных скобок или дополнительных [.Рассмотрим пример:
a="hello"
b="hello"
c="bashdays"
d="bashdays"
if [[ $a = $b && $c = $d ]]; then
echo "Условия совпали!"
fi
1. Проверяет $a = $b → "hello" = "hello"? → Да.
2. Дальше && говорит: Если первое условие — НЕ пиздёж, идём ко второму.
3. Проверяет $c = $d → "bashdays" = "bashdays"? → Да.
4. Оба условия верны → выполняется команда echo.
[ — работает с одним условием за раз[[ — может работать с комбинированными условиями прямо внутри себя.Представь, что ты говоришь своей бабушке: Если я убрал в комнате И сделал уроки, я могу поиграть в девопс-инженера.
Ну так вот:
[[ ... ]] — это бабушка, которая за всю свою жизнь повидала много дерьма и вполне может понять твою сложную фразу: убрал И сделал уроки.[ ... ] — это твой младший брат, пиздюк еще не в состоянии воспринимать такие большие выпады и ему нужно говорить частями.«Сначала убрал?» — (ДА) Не пиздёж.
«Сделал уроки?» — (ДА) Не пиздеж.
«Ок, теперь я могу поиграть в девопс-инженера»
Вот и вся наука. Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Короче блядь! Если ты хочешь сохранить то, что ввёл человек, в переменную с именем
ㅤ
Напиши так:
А если хочешь прикрыть своё очко от спецсимволов, делай так:
Вот так делать хуёва:
В этом случае
Как говорил мой техдир:
Делай правильно и твои руки никто не оторвёт и не пропьёт.
Для маленьких:
Представь, ты говоришь: «Дай хуй» — и тебе сразу дают хуй.
Всёж просто.😲
А теперь представь, что ты говоришь: «Дай $хуй».
Тут сначала дополнительно нужно спросить «А кто такой хуй?» — может, это Олег? И тогда тебе дадут Хуй Олега.
То есть, сначала нужно узнать, кто прячется под «хуем», а потом уже брать, чтобы не взять чужой «хуй».
Надеюсь ты понял. Изучай!
🛠 #bash #badpractices #bestpractices
—
✅ @bashdays / @linuxfactory / @blog
foo, то не нужно писать доллар ($) перед именем переменной.ㅤ
Напиши так:
read foo
А если хочешь прикрыть своё очко от спецсимволов, делай так:
IFS= read -r foo
Вот так делать хуёва:
read $foo
В этом случае
$foo — уже не имя переменной, а значение переменной foo. Как говорил мой техдир:
Рома, золотые у тебя руки. Оторвать бы их да пропить.
Делай правильно и твои руки никто не оторвёт и не пропьёт.
Для маленьких:
Представь, ты говоришь: «Дай хуй» — и тебе сразу дают хуй.
Всёж просто.
А теперь представь, что ты говоришь: «Дай $хуй».
Тут сначала дополнительно нужно спросить «А кто такой хуй?» — может, это Олег? И тогда тебе дадут Хуй Олега.
То есть, сначала нужно узнать, кто прячется под «хуем», а потом уже брать, чтобы не взять чужой «хуй».
Надеюсь ты понял. Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
3 70
Все знают команду
🔤 🔤 🔥 🔤 🔤 🔤 🔤
Очень удобная команда, имеет очень много форматов и позволяет складывать/вычитать даты, например:
Но в bash есть еще средства для работы со временем:
ㅤ
Переменная
Переменная
Обратите внимание, число секунд не зависит от часового пояса.
Обратите внимание, разделитель дробной части может быть различным, в зависимости от языковых настроек.
Переменные
И еще есть специальный формат оператора
Например:
Если не указать переменную или указать -1 - будет использовано текущая дата/время. Если указать -2 - будет использовано время начала работы этого экземпляра bash.
И
Например:
Полный список временны́х зон на системах с
🛠 #bash
—
✅ @bashdays / @linuxfactory / @blog
date для работы с датами/временем.Очень удобная команда, имеет очень много форматов и позволяет складывать/вычитать даты, например:
date -d"-1 day" # Чт 02 янв 2025 21:52:15 MSK - текущая дата минус один день.
date -d"+2 week" # Пт 17 янв 2025 21:53:48 MSK - текущая дата плюс две недели.
"day", "week" "month", "year", "hour", "min", "sec"
Но в bash есть еще средства для работы со временем:
ㅤ
Переменная
SECONDS показывает, сколько секунд прошло с начала запуска скрипта или момента задания значения переменной. Обычно используется для хронометража блока кода скрипта. Например:SECONDS=0
# здесь блок длительного кода
echo $SECONDS
Переменная
EPOCHSECONDS - показывает число секунд, прошедших с начала эпохи UNIX (01.01.1970 00:00:00 UTC).Обратите внимание, число секунд не зависит от часового пояса.
EPOCHREALTIME - аналогична предыдущей, но секунды с точностью до микросекунды. С помощью этой переменной можно точно отслеживать время небольших кусков кода. Даже если просто вывести переменную дважды - будет разное время:echo $EPOCHREALTIME $EPOCHREALTIME
# 1744652451,166523 1744652451,166539
Обратите внимание, разделитель дробной части может быть различным, в зависимости от языковых настроек.
Переменные
EPOCHSECONDS и EPOCHREALTIME обнулить не получится.И еще есть специальный формат оператора
printf для преобразования секунд UNIX в формат дат:printf '%(DT_FORMAT)T' $EPOCHSECONDS
DT_FORMAT - практически полностью совпадает с форматом команды date.Например:
printf '%(%Y%m%d-%H%M%S)T' $EPOCHSECONDS
# 20250414-203214
Если не указать переменную или указать -1 - будет использовано текущая дата/время. Если указать -2 - будет использовано время начала работы этого экземпляра bash.
printf удобен тем, что выполняется гораздо быстрее чем date (хотя говорить о скорости bash немного смешно) и позволяет результат операции записать сразу в переменную (Например DT).printf -v DT '%(%Y%m%d-%H%M%S)T'
И
date и printf работают в локальной временно́й зоне, чтобы это изменить можно задать "врéменную переменную" TZ.Например:
TZ='UTC' date
# Пн 14 апр 2025 16:15:57 UTC
TZ='Asia/Irkutsk' printf '%(%Y%m%d-%H%M%S)T\n'
# 20250415-001621
Полный список временны́х зон на системах с
systemd можно получить с помощью команды timedatectl list-timezones.—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 58
Продолжение истории с мини-пиздюком и proxmox.
- Первая часть
- Вторая часть
Короче пришли мне блоки питания с озона, ну думаю ради успокоения души надо проверить. Хотя на 100% был уверен что затея изначально полное говнище.
ㅤ
Ииии барабанная дробь, мини-пиздюк подал признаки жизни и завелся. Я почесал свою лысую кабину и по классике жанра — а что если?
Воткнул родной блок питания, на который грешил. Ииии эта пизда без проблем включилась. Чё блядь происходит? Радоваться рано.
Ладно… Оставляю на ночь это ебучую головную боль с родным блоком питания, proxmox шуршит, всё ништяк.
На утро — вентилятор хуярит как дичь перепуганная. Ебаться рылом в ламинат!
Пингую, хуй там плавал! Выключаю, включаю — ничего! Перекидываю блоки питания — ничего!
Я даж и не знаю теперь, что сука происходит, нагрев 40-50, чипы не должны отваливаться. Включается какая-то защита? Такое ощущение что этот мини-пиздюк конкретно решил мне выкрутить яйца.
Какие мысли господа и дамы? Выкинуть эту поеботу или есть какой-то быстро фикс типа прошивки или пиздюлин 20 таблеток?
🛠 #hardware #fails
—
✅ @bashdays / @linuxfactory / @blog
- Первая часть
- Вторая часть
Короче пришли мне блоки питания с озона, ну думаю ради успокоения души надо проверить. Хотя на 100% был уверен что затея изначально полное говнище.
ㅤ
Ииии барабанная дробь, мини-пиздюк подал признаки жизни и завелся. Я почесал свою лысую кабину и по классике жанра — а что если?
Воткнул родной блок питания, на который грешил. Ииии эта пизда без проблем включилась. Чё блядь происходит? Радоваться рано.
Если работает, это еще ничего не значит. Ну ты это и сам знаешь.
Ладно… Оставляю на ночь это ебучую головную боль с родным блоком питания, proxmox шуршит, всё ништяк.
На утро — вентилятор хуярит как дичь перепуганная. Ебаться рылом в ламинат!
Пингую, хуй там плавал! Выключаю, включаю — ничего! Перекидываю блоки питания — ничего!
Я даж и не знаю теперь, что сука происходит, нагрев 40-50, чипы не должны отваливаться. Включается какая-то защита? Такое ощущение что этот мини-пиздюк конкретно решил мне выкрутить яйца.
Еще кстати подумал — а мож это proxmox? Ради интереса надо попробовать какой нить SelectOS накатить…
Какие мысли господа и дамы? Выкинуть эту поеботу или есть какой-то быстро фикс типа прошивки или пиздюлин 20 таблеток?
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Всё тебе, блядь, смехуюшечки да пиздахаханьки.
ㅤ
Создаём файл:
Внутри получаем:
И применяем бэд-практику:
Эта команда читает файл
Что тут не так?
А всё! В лучшем случае получишь хуем по лбу и примеришь золотой пизды колпак. Эта команда испортит файл. Низя так делать! Всё проебёшь!
После этой команды файл
А теперь делаем правильно!
Смотрим содержимое файла
Здесь мы всё сделали через временный файл, громоздко, но по крайней мере безопасно. Веселый колпак тебе теперь точно не светит.
Можно извратиться и провернуть всё это дело на основе дескрипторов, но опять же этот способ не безопасен.
Можно правда хакнуть таким методом:
Это работает без временного файла на уровне Bash, потому что
Резюмируем: Не ссы использовать временные файлы, пусть твои bash скрипты будут безопасны и читаемы.
🛠 #bash #badpractices #bestpractices
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
Создаём файл:
echo -e "foo\nbar\nfoo again" > bashdays.txt
Внутри получаем:
foo
bar
foo again
И применяем бэд-практику:
cat bashdays.txt | sed 's/foo/baz/g' > bashdays.txt
Эта команда читает файл
bashdays.txt и одновременно пишет в него.Что тут не так?
А всё! В лучшем случае получишь хуем по лбу и примеришь золотой пизды колпак. Эта команда испортит файл. Низя так делать! Всё проебёшь!
После этой команды файл
bashdays.txt обнулится. Хотя визуально команда выглядит абсолютно безопасной.А теперь делаем правильно!
sed 's/foo/baz/g' bashdays.txt > tmpfile && mv tmpfile bashdays.txt
Смотрим содержимое файла
bashdays.txt и видим ожидаемый результат:baz
bar
baz again
Здесь мы всё сделали через временный файл, громоздко, но по крайней мере безопасно. Веселый колпак тебе теперь точно не светит.
Можно извратиться и провернуть всё это дело на основе дескрипторов, но опять же этот способ не безопасен.
Можно правда хакнуть таким методом:
printf '%s\n' ',s/foo/baz/g' w q | ed -s bashdays.txt
Это работает без временного файла на уровне Bash, потому что
ed сделаем всё сам. Но опять же конструкция нихуя непонятная. Резюмируем: Не ссы использовать временные файлы, пусть твои bash скрипты будут безопасны и читаемы.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 65
Нежных много, деловых мало. Ну не могу я из песни слов выбросить, получится сухо и не интересно.
ㅤ
Поэтому нарушать традиций не будем, продолжаем в том же ключе. А нежные пусть идут на... ну ты понял.
Рассмотрим распространённый случай:
Тут всё предельно ясно и понятно. Все в ажуре!
Но это вершина айсберга. Эта команда может отрабатывать не так, как ты ожидаешь. Потому что
Что подразумевается по «хитрыми штуками»
— Разделить содержимое на отдельные слова (если там есть пробелы).
— Подставить имена файлов с таким шаблоном, если он выглядит как
И тут у новичков возникает многочасовой проёб, когда переменная выводит неправильные значения.
Смотри:
Выглядит опять всё красиво. А по факту получаешь:
Да блядь! А я просто хотел вывести строкой
Первое
Поэтому, если ты хочешь наверняка вывести переменную как есть, лучше используй `printf`
Для маленьких:
Представь, что ты говоришь падшей женщине: «покажи что у тебя в трусах», она снимает трусы, а там — большой сочный хуй.
А чтобы в трусах был ожидаемый результат, нужно изначально это учесть в моменте знакомства (до просьбы) и расставить все кавычки.
Хотя у каждого свой ожидаемый результат… возможно кавычки вовсе и не потребуются.
Такие дела. Изучай!
🛠 #bash #badpractices #bestpractices
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
Поэтому нарушать традиций не будем, продолжаем в том же ключе. А нежные пусть идут на... ну ты понял.
Рассмотрим распространённый случай:
echo $foo
Тут всё предельно ясно и понятно. Все в ажуре!
Но это вершина айсберга. Эта команда может отрабатывать не так, как ты ожидаешь. Потому что
foo это переменная. И если ты её не возьмешь в кавычки, то Bash может сделать с её содержимым всякие хитрые штуки.Что подразумевается по «хитрыми штуками»
— Разделить содержимое на отдельные слова (если там есть пробелы).
— Подставить имена файлов с таким шаблоном, если он выглядит как
*.zip (это называется глоббинг).И тут у новичков возникает многочасовой проёб, когда переменная выводит неправильные значения.
Смотри:
msg="Пожалуйста, введите имя файла в формате *.zip"
echo $msg
Выглядит опять всё красиво. А по факту получаешь:
Пожалуйста, введите имя файла в формате awscliv2.zip
Да блядь! А я просто хотел вывести строкой
*.zip а не получить список файлов в текущей папке.var="*.zip"
echo "$var"
echo $var
Первое
echo напечатает *.zip, а второе выведет список всех файлов, которые заканчиваются на .zip.Поэтому, если ты хочешь наверняка вывести переменную как есть, лучше используй `printf`
printf "%s\n" "$foo"
Для маленьких:
Представь, что ты говоришь падшей женщине: «покажи что у тебя в трусах», она снимает трусы, а там — большой сочный хуй.
А чтобы в трусах был ожидаемый результат, нужно изначально это учесть в моменте знакомства (до просьбы) и расставить все кавычки.
Хотя у каждого свой ожидаемый результат… возможно кавычки вовсе и не потребуются.
Такие дела. Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 62
У меня для вас отличная новость! 💃
Я УСТАЛ!
Не буду сегодня грузить всякой хуйнёй, пошлите отдыхать. Всем хороших предстоящих выходных и берегите себя!
🛠 #рабочиебудни
—
✅ @bashdays / @linuxfactory / @blog
Не буду сегодня грузить всякой хуйнёй, пошлите отдыхать. Всем хороших предстоящих выходных и берегите себя!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
16 128
Бомбардиро крокодило!
ㅤ
Я выспался, можно продолжать радовать вас всякой «нужной» хуйней.
Давно про
Суть этого сервиса — автоматически разрешать поддомены в IP адреса без необходимости поднимать свой DNS сервер.
Сейчас как мы делаем, локально редактируем файл
Например:
И если перейти по адресу
А ведь это база. С помощью которой ты к примеру поднимаешь новый продакшен. Но что бы протестировать его, тебе нужно подкинуть на новый продакшен домен со старого продакшена. А тебе такое сделать не дадут.
Вот и прописываешь себе в
Вернемся к
Теперь открыв
Давай потыкаем
У меня на IP
Пингуем:
В ответ я получаю такую картинку:
Отлично, пинг прошел, вернулся локальный айпишник. То есть мы пинганули какой-то глобальный домен, а он привел нас на локальный сервис.
Теперь я направляюсь в браузер и открываю url:
Мне открывается стартовая страница
Хуяк и видим предупреждение:
Ну клёвое же. Запрос прошел через глобальный домен и перенаправил запрос в мою локальную сеть. Без необходимости что-то прописывать в
Просто жмем «продолжить» и попадаем снова на стартовую страницу
Еще вариант с портами:
На порту
А можно прям кучу поддоменов плодить:
И всё будет работать.
А еще можно на такие домены получить SSL сертификаты, но у тебя должен быть белый айпишник.
Хуяк и у тебя готовый SSL для домена
Минусы nip.io:
1. Не поддерживает wildcards, но в большинстве случаев они избыточны. Инструмент заточен больше на удобное тестирование при разработке.
2. SSL работает только с публичными IP. Для
У
Хорошо тебе провести эти выходные. Ну а я пошел фиксить баги.
Увидимся!
🛠 #devops #networks
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
Я выспался, можно продолжать радовать вас всякой «нужной» хуйней.
Давно про
nip.io ничего не слышал, но всё чаще встречаю его у ребят с Linux Factory. Суть этого сервиса — автоматически разрешать поддомены в IP адреса без необходимости поднимать свой DNS сервер.
Сейчас как мы делаем, локально редактируем файл
/etc/hosts, прописываем в него какие-то свои локальные айпишники на вымышленные домены. Например:
192.168.0.10 nginx.local
192.168.0.11 grafana.local
И если перейти по адресу
nginx.local попадаешь на виртуалку с айпишником 192.168.0.10. Это всё очевидно.Но опять же как оказалось про манипуляции с hosts файлом многие не знали.
А ведь это база. С помощью которой ты к примеру поднимаешь новый продакшен. Но что бы протестировать его, тебе нужно подкинуть на новый продакшен домен со старого продакшена. А тебе такое сделать не дадут.
Вот и прописываешь себе в
hosts этот домен, указываешь айпишник нового прода, идешь тестишь, если все ок, то меняешь A запись.Вернемся к
nip.io, суть там такая же, прописываешь айпишники и нужные домены и по итогу получаешь такое:nginx.192.168.0.10.nip.io → 192.168.0.10
app.192.168.0.11.nip.io → 192.168.0.11
test.192.168.0.12.nip.io → 192.168.0.12
Теперь открыв
nginx.192.168.0.10.nip.io ты попадешь на 192.168.0.10 без редактирования своего hosts файла.Давай потыкаем
У меня на IP
192.168.10.6 в локалке висит малина со всякими открытыми портами. Пингуем:
ping 192.168.10.6.nip.io
В ответ я получаю такую картинку:
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: 192.168.10.6.nip.io
Address: 192.168.10.6
Отлично, пинг прошел, вернулся локальный айпишник. То есть мы пинганули какой-то глобальный домен, а он привел нас на локальный сервис.
Теперь я направляюсь в браузер и открываю url:
http://192.168.10.6
Мне открывается стартовая страница
nginx. Тут всё понятно и логично. А теперь давай сделаем так.http://nginx.192.168.10.6.nip.io
Хуяк и видим предупреждение:
Для сайта 192.168.10.6.nip.io не поддерживается защищенное подключение
Ну клёвое же. Запрос прошел через глобальный домен и перенаправил запрос в мою локальную сеть. Без необходимости что-то прописывать в
hosts файле.Просто жмем «продолжить» и попадаем снова на стартовую страницу
nginx.Еще вариант с портами:
http://sync.192.168.10.6.nip.io:8384
На порту
8384 у меня висит syncthing и всё отлично открывается. То есть можно пробрасывать запросы через домен прям на порты или в докер контейнеры.А можно прям кучу поддоменов плодить:
http://a.b.c.d.192.168.10.6.nip.io/
И всё будет работать.
А еще можно на такие домены получить SSL сертификаты, но у тебя должен быть белый айпишник.
sudo certbot certonly --standalone -d nginx.204.0.115.50.nip.io
Хуяк и у тебя готовый SSL для домена
nginx.204.0.115.50.nip.io. Ну а если не хочется возиться с certbot можно воспользоваться алтернативами, например acme.sh или caddy.Минусы nip.io:
1. Не поддерживает wildcards, но в большинстве случаев они избыточны. Инструмент заточен больше на удобное тестирование при разработке.
2. SSL работает только с публичными IP. Для
127.0.0.1.nip.io или 192.168.x.x.nip.io Let's Encrypt не выдаст сертификат.У
nip.io есть альтернативы: xip.io или sslip.ioВ общем я показал, а тебе уже самому решать где это применить или не применить.
Хорошо тебе провести эти выходные. Ну а я пошел фиксить баги.
Увидимся!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Живу в лесу, поклоняюсь колесу…
ㅤ
А чё эта хуйня не работает? Яж всё правильно сделал!
С виду всё верно. Но если внимательно прочитать команду и подумать, происходит такое:
Но у
А
Поэтому правильно так:
Теперь логика не хромает:
Вроде мелочь, а на эти грабли постоянно наступают и бегут — аа, у меня принтер не печатает!!! Что я делаю не так???
🛠 #bash #badpractices #bestpractices
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
А чё эта хуйня не работает? Яж всё правильно сделал!
su -c 'ls -la'
С виду всё верно. Но если внимательно прочитать команду и подумать, происходит такое:
Хочу стать root и выполнить команду ls -la.
Но у
su другое мнение:Хочу стать пользователем с именем -c
А
-c — это не имя пользователя, а опция. Поэтому правильно так:
su root -c 'ls -la'
Теперь логика не хромает:
Перейти к пользователю root и выполнить команду ls -la.
Вроде мелочь, а на эти грабли постоянно наступают и бегут — аа, у меня принтер не печатает!!! Что я делаю не так???
А чем отличается su от sudo я писал тут, почитай на досуге и обнови нейронные связи.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Хозяйство вести — не мудями трясти!
ㅤ
Ну дак вот, чтобы твой любимый линукс в
В винде, в папке
Затем перезапустить wsl2 в повершеле:
И после этого твой линукс получит тот же самый айпишник что и хостовая машина (
Ну а там дальше пробрасывай порты и развлекайся как твоей душе угодно.
Раньше жили пиздатее, можно было сделать так:
Где и как можно применить:
- Ты хочешь из винды обратиться к серверу поднятому внутри wsl, без
- Проблемы с випиэн (часто бывает, что при включённом випиэн wsl теряет интернет или не видит другие хосты).
- Когда надо изнутри wsl видеть локальную сеть хоста и взаимодействовать, как обычное приложение винды.
- При разработке серверных приложений, если нужно, чтобы всё вело себя как на обычной машине, а не в изолированной виртуалке.
Ну ты понял. Бери на вооружение, хуйня полезная если правильно применить.
🛠 #linux #networks #windows #wsl
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
Ну дак вот, чтобы твой любимый линукс в
wsl имел такой же айпишник как и хостовая машина, нужно сделать так:В винде, в папке
C:\Users\<user>\ создать файл с названием .wslconfig и запихать в него:[wsl2]
networkingMode=mirrored
Затем перезапустить wsl2 в повершеле:
wsl --shutdown
И после этого твой линукс получит тот же самый айпишник что и хостовая машина (
192.168.0.100), а не виртуальные (172.31.124.159, 10.255.255.254).Ну а там дальше пробрасывай порты и развлекайся как твоей душе угодно.
Режим mirrored включает зеркальный режим сети, при котором wsl использует сетевой стек хоста, а не собственную виртуализированную NAT-сеть.
— wsl и винда имеют один и тот же IP-адрес
— Порты, открытые в wsl, становятся видимыми как будто они открыты на самой винде.
— Локальные сервисы винды и wsl могут легче видеть друг друга без специальных настроек.
— Повышенная совместимость с випиэн, файрволами и корпоративными прокси.
Раньше жили пиздатее, можно было сделать так:
networkingMode=bridge и виртуалка в wsl получала айпишник прям по DHCP. Но в новых версиях винды эту штуку выпилили, видимо на это были свои причины.Где и как можно применить:
- Ты хочешь из винды обратиться к серверу поднятому внутри wsl, без
localhost:port-forward и прочих долбаёбских танцев.- Проблемы с випиэн (часто бывает, что при включённом випиэн wsl теряет интернет или не видит другие хосты).
- Когда надо изнутри wsl видеть локальную сеть хоста и взаимодействовать, как обычное приложение винды.
- При разработке серверных приложений, если нужно, чтобы всё вело себя как на обычной машине, а не в изолированной виртуалке.
Ну ты понял. Бери на вооружение, хуйня полезная если правильно применить.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
3 81
Продолжаем с WSL2
ㅤ
По умолчанию wsl запускается с какими-то своими дефолтными параметрами, будь то память, проц, свап и т.п.
Но все эти параметры можно без труда зареврайтить. Всё это делается через тот же самый файл
Пример:
Здесь я выделил виртуальной машине 2 ядра из 16ти доступных. По умолчанию wsl сразу выгребает 16 ядер и половину памяти.
Хочешь подключить swap? Без проблем! Хочешь указать кастомное ядро? Хуйня! Есть и такой параметр! Про всё остальное почитаешь сам.
Всё это удобно собрано в этой доке, причем на русском языке. Садишься, пробегаешься глазками, вникаешь, закрываешь свои базовые потребности. Удобно!
В общем имей в виду, что даже wsl поддаётся конфигурации.
Пользуйтесь!
🛠 #linux #networks #windows #wsl
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
По умолчанию wsl запускается с какими-то своими дефолтными параметрами, будь то память, проц, свап и т.п.
Но все эти параметры можно без труда зареврайтить. Всё это делается через тот же самый файл
C:\Users\<user>\.wslconfig.Пример:
[wsl2]
processors=2
Здесь я выделил виртуальной машине 2 ядра из 16ти доступных. По умолчанию wsl сразу выгребает 16 ядер и половину памяти.
Таких параметров для тонкой настройки — жопой ешь, под любые твои хотелки и потребности.
Хочешь подключить swap? Без проблем! Хочешь указать кастомное ядро? Хуйня! Есть и такой параметр! Про всё остальное почитаешь сам.
Всё это удобно собрано в этой доке, причем на русском языке. Садишься, пробегаешься глазками, вникаешь, закрываешь свои базовые потребности. Удобно!
В общем имей в виду, что даже wsl поддаётся конфигурации.
Хотя у меня никогда не возникало потребностей что-то менять, дефолтные параметры вполне вменяемые, линуксы не тормозят, всё работает из коробки. Но позадротить иногда хочется и благо для этого есть всё необходимое.
Пользуйтесь!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Не сломано? Не чини!
ㅤ
Давай рассмотрим ситуацию, чтобы въехать в контекст.
Почему всё пошло по пизде? Ведь на проекте были тестировщики, были результаты исследований.
Что не так?
Все просто, в отличие от потребителей, тестировщики не знали какой бекэнд они тестировали, старый или новый.
Производитель банально не учел у потребителей когнитивное искажение — отклонение в сторону «Статус-Кво».
Эт чё за хуйня? Это склонность держаться за старое, даже если новое в разы лучше.
Короче эта тяга ко всему привычному и знакомому, даже если оно пиздец не удобное и не безопасное.
Почему появляется искажение «Статус-Кво».
Ты годами задрачивал Bash скрипты и теперь с помощью их можешь решить абсолютно любую задачу.
Но приходит какой-то Алёша и говорит — Антон, твои скрипты унылое гавно, слишком сложные и трудозатратные. Чтобы решить задачи, есть более эффективные инструменты.
С помощью этих инструментов ты будешь тратить в 10 раз меньше времени и результат будет лучше.
Но чтобы всё получилось, тебе придется окунуться в новое и еще годик позадротить.
Антон шлёт нахуй этого Алёшу. Зачем изучать новое, если дорожка протоптана и заасфальтирована. Иди по ней и в ус не дуй.
Так работают мозги. Работа с привычкой. У мозга есть знакомые сценарии и готовые шаблоны. Поэтому мы с тобой склонны избегать перемен, даже если они приведут к лучшему результату.
Последствия этих искажений очевидны — ты пиздецово деградируешь.
Упускаешь возможности, хуяришь на нелюбимой работе, пишешь душный код, лишь бы от тебя отъебались.
Но иногда эти искажения наоборот полезны — когда твои новые решения несут непредсказуемые и высокие риски.
В этой ситуации «Статус-Кво» будет хорошим выбором, но только если это не сверх осторожность. Следовать привычки это не плохо или хорошо. Всё зависит от привычки.
Можно привыкнуть ко всему, даже если это раньше казалось тебе не возможным.
Всегда пробуй то, что кажется некомфортным или страшным. Будь открыт к новому, получай, а не трать свою энергию от знакомства с неизведанным.
Ну и конечно же оценивай риски и преимущества изменений (swot-анализ), чтобы принимать более осознанные решения.
Задавай вопрос — а действительно ли я делаю так, потому что это лучше для меня? Или потому что это привычно?
Главная опасность «Статуса-Кво», то что люди могут привыкнуть к любым ужасам, причиной которых они сами и являются.
Поэтому чтобы не быть причиной ужасов, задумайся — когда именно твоё мнение стало твоим.
Подведем черту. Если решил что-то изменить, убедись что другим это зайдет. Проводи тесты на реальных пользователях, а не на заинтересованных лицах (тестировщиках).
Так и с пивом, теперь есть 2 версии. Старое и новое. А потребитель уже сам выберет, что ему больше по вкусу.
Пили параллельно, вводи параллельно, давай право выбора и у тебя всегда всё будет хорошо.
Хорошего тебе дня!
🛠 #рабочиебудни
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
Давай рассмотрим ситуацию, чтобы въехать в контекст.
Производитель пива изменяет формулу напитка, предварительно проводит А/Б тестирование. Из 10ти тестировщиков, только 1му не зашёл новый напиток. А это означало, что новое пиво мастхев и его можно вливать в пузаны населению.
Но что-то пошло по пизде, новое пиво не взлетело. А потребители массово захейтили производителя и потребовал вернуть старую формулу.
Почему всё пошло по пизде? Ведь на проекте были тестировщики, были результаты исследований.
Что не так?
Все просто, в отличие от потребителей, тестировщики не знали какой бекэнд они тестировали, старый или новый.
Производитель банально не учел у потребителей когнитивное искажение — отклонение в сторону «Статус-Кво».
Эт чё за хуйня? Это склонность держаться за старое, даже если новое в разы лучше.
Идите нахуй со своим новым фреймворком, мне привычнее на Bash скриптах сервера настраивать. Лучше оставлю всё как есть. Куберы? Нене, я лучше протоптанной дорожкой пойду и на docker swarm буду жить.
Короче эта тяга ко всему привычному и знакомому, даже если оно пиздец не удобное и не безопасное.
Почему появляется искажение «Статус-Кво».
Ты годами задрачивал Bash скрипты и теперь с помощью их можешь решить абсолютно любую задачу.
Но приходит какой-то Алёша и говорит — Антон, твои скрипты унылое гавно, слишком сложные и трудозатратные. Чтобы решить задачи, есть более эффективные инструменты.
С помощью этих инструментов ты будешь тратить в 10 раз меньше времени и результат будет лучше.
Но чтобы всё получилось, тебе придется окунуться в новое и еще годик позадротить.
Антон шлёт нахуй этого Алёшу. Зачем изучать новое, если дорожка протоптана и заасфальтирована. Иди по ней и в ус не дуй.
Так работают мозги. Работа с привычкой. У мозга есть знакомые сценарии и готовые шаблоны. Поэтому мы с тобой склонны избегать перемен, даже если они приведут к лучшему результату.
По крайней мере у меня так, я в рот ебал что-то новое изучать, особенно если это нужно не мне, а работодателю. Если я делаю это для себя, то конечно с этим проще.
Последствия этих искажений очевидны — ты пиздецово деградируешь.
Упускаешь возможности, хуяришь на нелюбимой работе, пишешь душный код, лишь бы от тебя отъебались.
Но иногда эти искажения наоборот полезны — когда твои новые решения несут непредсказуемые и высокие риски.
В этой ситуации «Статус-Кво» будет хорошим выбором, но только если это не сверх осторожность. Следовать привычки это не плохо или хорошо. Всё зависит от привычки.
Можно привыкнуть ко всему, даже если это раньше казалось тебе не возможным.
Когда ты начал изучать Кубер и такой — да блядь, почему эта хуйня такая неочевидная? А через полгода ты уже его на хую вертел и всё что можно в него мигрировал.
Всегда пробуй то, что кажется некомфортным или страшным. Будь открыт к новому, получай, а не трать свою энергию от знакомства с неизведанным.
Ну и конечно же оценивай риски и преимущества изменений (swot-анализ), чтобы принимать более осознанные решения.
Задавай вопрос — а действительно ли я делаю так, потому что это лучше для меня? Или потому что это привычно?
Главная опасность «Статуса-Кво», то что люди могут привыкнуть к любым ужасам, причиной которых они сами и являются.
Поэтому чтобы не быть причиной ужасов, задумайся — когда именно твоё мнение стало твоим.
Подведем черту. Если решил что-то изменить, убедись что другим это зайдет. Проводи тесты на реальных пользователях, а не на заинтересованных лицах (тестировщиках).
Как с Кинопоиском, когда они выкатили новую морду, весь интернет орал. По итогу ребята вернули старую версию, но оставили возможность переключаться на новую.
Так и с пивом, теперь есть 2 версии. Старое и новое. А потребитель уже сам выберет, что ему больше по вкусу.
Пили параллельно, вводи параллельно, давай право выбора и у тебя всегда всё будет хорошо.
Хорошего тебе дня!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 92
Мазафакин скилз девопс-инженер, уровень — я бы даже сказал ближе к сеньору. Ща раскидаю по полкам.
ㅤ
Я лично с ним поработал в нескольких проектах, его работы это произведение искусства. Ниндзя Гайден сосёт хуй и отдыхает!
Что понравилось — оперативное решение инфраструктурных проблем, въедливый дебаг и траблшутинг, не делает другим мозги, пишет ОХУЕННУЮ документацию, придерживается кодстайла, уверенный программист на yaml, здравые мысли по оптимизации + еще куча талантов.
А самое главное качество — самостоятельность и умение гуглить! Любая неизвестная технология для него — дай час, разберемся.
Короче этот викинг поставит твою инфраструктуру раком и выебет её по всем бест-практикам и маст-хэвам. А самое ценное, этот человек увеличит твою прибыль в 17 раз за 3 часа.
По стеку, база: ansible, gitlab, docker, hashicorp, пайплайны, ну короче вся эта девопсовая хуйня которая тебе и нужна.
Ставки и аппетиты умеренные: 250к в месяц. Но всё обсуждаемо. Если дашь больше, значок тебе и вымпел!
Если нечем платить, лучше не пиши, будешь послан нахуй и проклят.
Такие предложения бывают раз в 100 лет, тем более с рекомендациями, НЕ ПРОЕБИСЬ. Предложи удалёнку, 250 тыщ в месяц, хорошее отношение и по итогу получишь Золотую Антилопу.
Пиши быстрее сюда и назначай собес: @LittleGreenCat
—
Please open Telegram to view this post
VIEW IN TELEGRAM
У
ㅤ
То есть ты не напрямую подключаешься к серверу:
А подключаешься к серверу через сервер с
Настраивается эта штука так:
На сервере с
Создаём под это дело отдельную роль:
На сервере к которому хотим подключаться, делаем:
Добавляем в конфиг
И перезапускаем:
Переходим на свою локальную машину, с которой будем подключаться:
Этой командой подписываем свой публичный ключ через
Сохраняем на локальную машину подписанный ключ:
Смотрим параметры получившегося ключа:
Опять же получишь портянку информации, можно посмотреть валидность и время жизни этого ключа.
Теперь подключаемся:
Ну и вишенка, подключаемся через враппер:
В этом случае подписывать ключ не обязательно.
Доступ к серверам контролирует
Что-то вроде центра сертификации, писал как-то отдельный пост на эту тему.
Нашел еще видос у пиндоса на эту тему, можешь визуально глянуть и проникнутся.
Такие дела!
🛠 #linux #devops
—
✅ @bashdays / @linuxfactory / @blog
Hashicorp Vault есть прикольная фишка со встроенным ssh враппером и подписными ключами.ㅤ
То есть ты не напрямую подключаешься к серверу:
ssh root@server
А подключаешься к серверу через сервер с
Vault, получается что-то вроде бастиона. Vault подписывает ключи и запускает тебя в нужное место.Настраивается эта штука так:
На сервере с
Vault выполняем:vault secrets enable -path=ssh ssh
vault write ssh/config/ca generate_signing_key=true
Создаём под это дело отдельную роль:
vault write ssh/roles/devops -<<"EOH"
{
"allow_user_certificates": true,
"allowed_users": "*",
"allowed_extensions": "permit-pty,permit-port-forwarding,permit-agent-forwarding,permit-user-rc,permit-X11-forwarding",
"default_extensions": [
{
"permit-pty": ""
}
],
"key_type": "ca",
"default_user": "root",
"ttl": "30m0s"
}
EOH
На сервере к которому хотим подключаться, делаем:
curl -o /etc/ssh/trusted-user-ca-keys.pem https://vault.bashdays.ru:8200/v1/ssh/public_key
Добавляем в конфиг
/etc/ssh/sshd_config строчку: TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem
И перезапускаем:
systemctl restart sshdПереходим на свою локальную машину, с которой будем подключаться:
export VAULT_TOKEN="token"
vault write -address='https://vault.bashdays.ru:8200' ssh/sign/devops public_key=@$HOME/.ssh/id_rsa.pub
Этой командой подписываем свой публичный ключ через
vault сервер. В ответ получаем кучу всякой хуйни типа: serial_number и signed_key.Сохраняем на локальную машину подписанный ключ:
export VAULT_TOKEN="token"
vault write -address='https://vault.bashdays.ru:8200' --field=signed_key ssh/sign/devops public_key=@$HOME/.ssh/id_rsa.pub > ~/.ssh/id_rsa_signed_key.pub
Смотрим параметры получившегося ключа:
ssh-keygen -Lf /Users/user/.ssh/id_rsa_signed_key.pub`
Опять же получишь портянку информации, можно посмотреть валидность и время жизни этого ключа.
Теперь подключаемся:
ssh -i ~/.ssh/id_rsa_signed_key.pub -i ~/.ssh/id_rsa root@server
Ну и вишенка, подключаемся через враппер:
vault ssh -address='https://vault.bashdays.ru:8200' -private-key-path=~/.ssh/id_rsa -public-key-path=~/.ssh/id_rsa.pub -mode=ca -role=devops -user-known-hosts-file=/dev/null root@server
В этом случае подписывать ключ не обязательно.
Доступ к серверам контролирует
Vault. Можно быстро накручивать необходимые права, забирать и отзывать ключи. Ну и там много чего еще можно сделать.Выглядит крайне неудобно и не интуитивно. Но порой такую штуку можешь встретить в компаниях. Хотя я против такой хуйни, какая-то блядь избыточная безопасность.
Что-то вроде центра сертификации, писал как-то отдельный пост на эту тему.
Нашел еще видос у пиндоса на эту тему, можешь визуально глянуть и проникнутся.
Такие дела!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 56
Давно хотел попробовать эту штуку и попробовал. Штука называется
ㅤ
Чтобы установить операционку тебе не нужна никакая флешка и т.п.
Выставляешь в биосе сетевую загрузку и устанавливаешь на выбор любой дистрибутив.
Тыкаем палкой:
Теперь закидываем любые iso образы в папку
Я закинул ubuntu server и selectos для теста.
Запускаем:
После этого можно зайти на морду и посмотреть более детально, крутится эта штука на
Внутри можно поднастроить TFTP сервер, увидеть исошники, поменять разрешения экранов и менюшек, прописать белые списки мак адресов ну и т.п. Сам потыкаешь, всё интуитивно понятно.
Проверяем.
Поднимаю новую машину в виртулбоксе c EFI, выставляю загрузку по сети и вижу ожидаемый результат. У меня доступно два дистрибутива ubuntu и selectos. Отлично!
Выбираем нужный дистрибутив и запускаем установку по сети.
Что понравилось —
Да, чтобы оно автоматом стартавало, можно закинуть какой-нибудь такой юнит.
Надо будет попробовать исошники с виндой подкинуть. А то порой приносят мне по старой памяти ноуты на переустановку винды, хуй откажешься, я же блядь программист.
Ладно, бери на вооружение, глядишь пригодится.
🛠 #linux #pxe #utilites
—
✅ @bashdays / @linuxfactory / @blog
iVentoy.ㅤ
iVentoy это PXE сервер. Если уж совсем простым языком, то это сервер который раздаёт исошники. Чтобы установить операционку тебе не нужна никакая флешка и т.п.
Выставляешь в биосе сетевую загрузку и устанавливаешь на выбор любой дистрибутив.
iVentoy из коробки дружит и с легаси биосом и с efi, так что хуёвина универсальная. Можно поднимать сервер и по Linux и под Windows.iVentoy is an enhanced version of the PXE server. With iVentoy you can boot and install OS on multiple machines at the same time through the network.
iVentoy is extremely easy to use, without complicated configuration, just put the ISO file in the specified location and select PXE boot in the client machine.
iVentoy supports x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI and ARM64 UEFI mode at the same time.
iVentoy support 110+ common types of OS (Windows/WinPE/Linux/VMware)
Тыкаем палкой:
wget https://github.com/ventoy/PXE/releases/download/v1.0.20/iventoy-1.0.20-linux-free.tar.gz
tar -xzf iventoy-1.0.20-linux-free.tar.gz
mv iventoy-1.0.20 /opt/iventoy
cd /opt/iventoy
Теперь закидываем любые iso образы в папку
/opt/iventoy/iso.Я закинул ubuntu server и selectos для теста.
Запускаем:
./iventoy.sh start
После этого можно зайти на морду и посмотреть более детально, крутится эта штука на
26000 порту. Меня пустило так:http://192.168.10.32:26000
Внутри можно поднастроить TFTP сервер, увидеть исошники, поменять разрешения экранов и менюшек, прописать белые списки мак адресов ну и т.п. Сам потыкаешь, всё интуитивно понятно.
Да, важно не забыть в вебморде справа нажать зеленую стрелку, это запустит PXE сервер.
Проверяем.
Поднимаю новую машину в виртулбоксе c EFI, выставляю загрузку по сети и вижу ожидаемый результат. У меня доступно два дистрибутива ubuntu и selectos. Отлично!
Выбираем нужный дистрибутив и запускаем установку по сети.
Что понравилось —
iVentoy ставится элементарно, без хуйни и заморочек. Буквально пару минут и у тебя готовый PXE, запускай и накатывай операционки без флешек и внешних винтов.Да, чтобы оно автоматом стартавало, можно закинуть какой-нибудь такой юнит.
[Unit]
Description=iVentoy PXE Server
After=network.target
[Service]
Type=forking
ExecStart=/opt/iventoy/iventoy.sh start
ExecStop=/opt/iventoy/iventoy.sh stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
Надо будет попробовать исошники с виндой подкинуть. А то порой приносят мне по старой памяти ноуты на переустановку винды, хуй откажешься, я же блядь программист.
Ладно, бери на вооружение, глядишь пригодится.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4 110
Если что-то делать, что-то будет!
После моего последнего поста про SelectOS много кто заглянул в личку с вопросами — мол, как оно вообще и т.п.
Раз интересно, запилил для тебя продолжение. Рассказал как на этой ОС я поднял локальный gitlab для команды, впендюрил раннеры и с чем пришлось столкнуться.
Го чтиво читать да комменты писать 👇
🦖 SelectOS в деле
🛠 #linux #review
—
✅ @bashdays / @linuxfactory / @blog
После моего последнего поста про SelectOS много кто заглянул в личку с вопросами — мол, как оно вообще и т.п.
Раз интересно, запилил для тебя продолжение. Рассказал как на этой ОС я поднял локальный gitlab для команды, впендюрил раннеры и с чем пришлось столкнуться.
Го чтиво читать да комменты писать 👇
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Как оказалось многие испытывают неистовые жопные боли при настройке
ㅤ
Сегодня покажу как избавиться от боли и на лету получать SSL для
Устанавливаем angie:
Начиная с
Открываем айпишник сервера в браузере и убеждаемся что все работает. Если всё заебись, получишь стартовую страницу
Конфигуряем angie на домен two.su.
Создаем файл
А в файле
Если
Проверяем:
Полученный сертификат и соответствующий ключ будут доступны в конфигурации через переменные $acme_cert_<имя> и $acme_cert_key_<имя>.
Перезапускаем:
Если получил ошибку, закинь сертификаты заглушки в
У меня никаких ошибок не возникло.
В папке:
Захожу в браузере на
Меня вся эта кухня полностью устраивает. Понятно дело есть
Когда что-то настраиваешь руками, а не мышкой, то имеешь представление как работает технология изнутри. А если ты это знаешь, то легко сможешь отдебажить баги и найти первопричину.
По крайней мере меня так учили и я с этим полностью согласен.
🛠 #linux #devops #angie #ssl
—
✅ @bashdays / @linuxfactory / @blog
angie со встроенной поддержкой SSL сертификатов от Lets Encrypt.ㅤ
Сегодня покажу как избавиться от боли и на лету получать SSL для
angie. Без всяких там certbot и acme.sh. Довольно удобно реализовано.Для чистоты эксперимента я взял чистый, прерываемый сервер, без nginx’ов и т.п. на базе Ubuntu 24.04.
angie это аналог nginx, но на стероидах, у меня он крутится на уроках для LinuxFactory и в блоге. Подкупил он меня нативной поддержкой LUA и кучей модулей включая авто-получение SSL сертов.Устанавливаем angie:
sudo curl -o /etc/apt/trusted.gpg.d/angie-signing.gpg https://angie.software/keys/angie-signing.gpg
echo "deb https://download.angie.software/angie/$(. /etc/os-release && echo "$ID/$VERSION_ID $VERSION_CODENAME") main" | sudo tee /etc/apt/sources.list.d/angie.list > /dev/null
sudo apt-get update
sudo apt-get install -y angie
Начиная с
Angie 1.3.0, модуль ACME (http_acme_module) включён по умолчанию в основной пакет angie.Открываем айпишник сервера в браузере и убеждаемся что все работает. Если всё заебись, получишь стартовую страницу
angie. Дефолтная страница практически один в один повторяет дефолтную страницу от nginx.Дальше у меня есть домен two.su который живет в Cloudfalre. В настройках DNS я прописываю A запись и указываю айпишник нового сервера. Весь трафик идет напрямую, без фильтрации самого Cloudfalre.
Конфигуряем angie на домен two.su.
Создаем файл
two.su.conf в /etc/angie/httpd.d/ с таким содержимым. server {
listen 443 ssl;
server_name two.su www.two.su;
acme letsencrypt;
ssl_certificate $cert_letsencrypt;
ssl_certificate_key $cert_key_letsencrypt;
location / {
root /var/www/html;
}
}А в файле
/etc/angie/angie.conf в секцию http добавляем:acme_client letsencrypt https://acme-v02.api.letsencrypt.org/directory;
resolver 127.0.0.53;
map $acme_cert_letsencrypt $cert_letsencrypt {
'' /etc/angie/ssl-self-signed/cert.pem;
default $acme_cert_letsencrypt;
map $acme_cert_letsencrypt $cert_key_letsencrypt {
'' /etc/angie/ssl-self-signed/key.pem;
default $acme_cert_key_letsencrypt;
}
Если
angie у тебя работает в докере, то в resolver пропиши: 127.0.0.11.Проверяем:
angie -t и в ответ получаем:angie: the configuration file /etc/angie/angie.conf syntax is ok
angie: configuration file /etc/angie/angie.conf test is successful
Полученный сертификат и соответствующий ключ будут доступны в конфигурации через переменные $acme_cert_<имя> и $acme_cert_key_<имя>.
Перезапускаем:
systemctl reload angieЕсли получил ошибку, закинь сертификаты заглушки в
/etc/angieopenssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj "/C=RU/O=Bashdays/CN=LinuxFactory"
У меня никаких ошибок не возникло.
В папке:
/var/lib/angie/acme/letsencrypt появились ключи и серты.Захожу в браузере на
two.su и вижу зеленый замочек. Что и требовалось доказать. SSL сертификат был автоматически получен и в дальнейшем будет автоматически продляться. Без всяких кронов, клиентов, API ключей и хуйни.Единый сертификат будет получен для всех доменных имён, которые были перечислены в директиве server_name. А директива acme указывает, какой ACME-клиент должен использоваться.
Меня вся эта кухня полностью устраивает. Понятно дело есть
Nginx Proxy Manager, но я привык работать без гуёвых штук и мордочек.Когда что-то настраиваешь руками, а не мышкой, то имеешь представление как работает технология изнутри. А если ты это знаешь, то легко сможешь отдебажить баги и найти первопричину.
По крайней мере меня так учили и я с этим полностью согласен.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
3 72
Продолжение следует, буду держать в курсе, завтра остатки выложу, пойду спать, мож само рассосется, как в воду глядели в чатике скрин про mc, htop.
Короче закручивается какая-то интересная ситуация, прод у них лежит уже как пару часов, знатно потрудились.
Чё сука ровно на жопе не сидится, вечно руки свои нужно куда-то засунуть в пятницу вечером.
Не могу написать матом, корпоративная солидарность, не профессионально, да — NDA нет, поэтому и публикую на всеобщее.
Пойду тоже логи почищу в var/mysql, заебали они меня (логи), в особенности
ibdata1, слишком жирный. Как ты его вообще удалить-то смогла без даунтайма по графикам... и mysql не стопали... загадка... сильна Мадемуазе́ль!
У всех проблем одно начало...
Сидела женщина, скучала,
Качала ножкою своей,
И вдруг пришла мыслишка к ней...
Она подумала: "Чего же?,
Сидеть мне здесь совсем не гоже,
Пойду-ка я слегка пройдусь,
И хоть немного развлекусь..."
© Александр Флинде
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Отдыхаешь? А как тебе такое? Если пропиздоглазил, то смотри на зеленый замочек и домен.
ㅤ
Короче — я сгенерил валидный SSL сертификат для домена localhost.
Аналогично можно бесконечно генерить такие сертификаты для любых своих локальных доменов. Ну и затем подключать их во всякие nginx, mysql джанги-хуянги и т.п.
Называется
Чтобы установить
И заинсталлить
Получаем такое:
Всё! Теперь у нас есть свой доверенный центр сертификации.
Выпускаем первый SSL сертификат.
Ебли с этим никакой нет, запускаем:
То есть просто перечисляем список доменов.
В ответ получаем:
В результате получаем
Ну а дальше пихаем ихв жопы в нужное место и наслаждаемся зеленым замочком.
Если серты и ключи тебе нужно генерить в определенном месте, можешь это указать так:
Это полезно если у тебя какая-то автоматизация или баш скрипт, который автоматом будет это всё генерить, а nginx или angie это подхавывать.
Чтобы этой хуйнёй воспользоваться на WSL, делаем так:
Здесь мы не выполняем инициализацию
Для того чтобы эти сертификаты были доверенными в винде, нужно указать путь к корневому сертификату, который мы с тобой зашили в винду.
Идем на виндовую машину и выполняем:
В ответ получаем путь до корневого сертификата, у меня такой:
Возвращаем в WSL и выполняем:
Если у тебя
Теперь можно выпускать SSL сертификаты в WSL и в винде они будут считаться доверенными.
Если у тебя не винда, а мак или линукс, похуй, все делается аналогично, в официальной документации эти кейсы все подробно расписаны.
Что прикольно, такие серты живут по два года. При желании их можно прикрутить к своему локальному proxmox или еще куданить. Тут уже сам разберешься.
Для локальных целей прям маст-хев! Забирай на вооружение.
🛠 #ssl #utilites
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
Короче — я сгенерил валидный SSL сертификат для домена localhost.
Аналогично можно бесконечно генерить такие сертификаты для любых своих локальных доменов. Ну и затем подключать их во всякие nginx, mysql джанги-хуянги и т.п.
Называется
mkcert. Работает на всём, Винда, Линукс и Мак. В случае с виндой установка осуществляется через менеджеры пакетов scoop или chocolatey.Чтобы установить
scoop в powershell нужно забить:Set-ExecutionPolicy RemoteSigned -scope CurrentUser
irm get.scoop.sh | iex
И заинсталлить
mkcertscoop bucket add extras
scoop install mkcert
mkcert -install
Получаем такое:
Created a new local CA 💥
The local CA is now installed in the system trust store! ⚡️
Note: Firefox support is not available on your platform. ℹ️
Всё! Теперь у нас есть свой доверенный центр сертификации.
Выпускаем первый SSL сертификат.
Ебли с этим никакой нет, запускаем:
mkcert bashdays.kek "*.bashdays.kek"
То есть просто перечисляем список доменов.
В ответ получаем:
Created a new certificate valid for the following names 📜
- "bashdays.kek"
- "*.bashdays.kek"
Reminder: X.509 wildcards only go one level deep, so this won't match a.b.bashdays.kek ℹ️
The certificate is at "./bashdays.kek+1.pem" and the key at "./bashdays.kek+1-key.pem" ✅
It will expire on 2 August 2027 🗓
В результате получаем
bashdays.kek+1.pem — сертификат и bashdays.kek+1-key.pem - приватный ключ.Ну а дальше пихаем их
Если серты и ключи тебе нужно генерить в определенном месте, можешь это указать так:
mkcert -cert-file=/ssl/fullchain.crt -key-file=/ssl/private.key bashdays.kek
Это полезно если у тебя какая-то автоматизация или баш скрипт, который автоматом будет это всё генерить, а nginx или angie это подхавывать.
Чтобы этой хуйнёй воспользоваться на WSL, делаем так:
sudo apt install libnss3-tools
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
Здесь мы не выполняем инициализацию
mkcert -install, на WSL мы только генерим SSL сертификаты.Для того чтобы эти сертификаты были доверенными в винде, нужно указать путь к корневому сертификату, который мы с тобой зашили в винду.
Идем на виндовую машину и выполняем:
mkcert -CAROOT
В ответ получаем путь до корневого сертификата, у меня такой:
C:\Users\user\AppData\Local\mkcertВозвращаем в WSL и выполняем:
echo "export CAROOT=/mnt/c/Users/user/AppData/Local/mkcert" >> ~/.bashrc
Если у тебя
zsh, сам разберешься.Теперь можно выпускать SSL сертификаты в WSL и в винде они будут считаться доверенными.
Если у тебя не винда, а мак или линукс, похуй, все делается аналогично, в официальной документации эти кейсы все подробно расписаны.
Что прикольно, такие серты живут по два года. При желании их можно прикрутить к своему локальному proxmox или еще куданить. Тут уже сам разберешься.
mkcert давнишняя штука, но как оказалось про неё мало кто знает, я про нее слышал года 4 назад, но успешно забыл. И вот только сегодня нашел в своих bash скриптах интеграцию с ней.
Для локальных целей прям маст-хев! Забирай на вооружение.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 106
Как работает RSA.
Вся ассиметричная криптография держится на принципе:
ㅤ
Сразу с ума не сходи, сначала душная теория, а потом весёлая практика — на письках. Как ты любишь!
Берем простые числа:
Подставляем в формулу:
Получается:
Открытый ключ:
Закрытый ключ:
😲 Пример на письках
Антон спрашивает у Маши — а сколько сантиметров хуй у Ивана?
Маша знает что у Ивана хуй — 21 сантиметр. Но Маше нужно это сообщить Антону, чтобы Иван не узнал.
Для этого Маше нужно знать открытый ключ Антона.
Берем открытый ключ из предыдущих вычислений
И шифруем хуй Ивана:
Возводим длину хуя Ивана в 691 степень по модулю 779 и получаем число 717.
Теперь Маша передает без палева число 717 Антону.
Антон же с помощью закрытого ключа расшифровывает длину хуя Ивана.
Аналогично возводим в степень по модулю. С помощью математики Антон узнаёт сколько сантиметров хуй у Ивана.
Даже линейка не понадобилась!
Подытожим:
Даже если Иван перехватит такое сообщение, то цифра 717 ему ни о чем не скажет, не может же быть хуй 717 см… хотя у леперов и пикабушников наверное так и есть.
Вот тебе пример на Bash:
В результате получим: 717 и 21. Что и требовалось доказать!
Чуть позже покажу как «ломают» такие ключи и как сгенерить RSA ключ с бэкдором.
Изучай!
🛠 #ssl #security #rsa #crypto
—
✅ @bashdays / @linuxfactory / @blog
Вся ассиметричная криптография держится на принципе:
В одну сторону — быстро, в другую сторону — неразумно и пиздец как долго.
ㅤ
Сразу с ума не сходи, сначала душная теория, а потом весёлая практика — на письках. Как ты любишь!
Берем простые числа:
p = 19
q = 41
Подставляем в формулу:
N=p*q=779ф(N)=(p-1)*(q-1)=720e=691d=571
N = p * q = 779 = это модуль, он используется как часть открытого и закрытого ключей.φ(N) = (p - 1)(q - 1) = 18 * 40 = 720 = функция Эйлера от N, она показывает количество чисел, взаимно простых с N.e = 691 = открытая экспонента, часть публичного ключа. Она должна быть взаимно проста с φ(N).d = 571 = закрытая экспонента, часть приватного ключа. Это мультипликативная обратная величина к e по модулю φ(N) (то есть: (d * e) % φ(N) = 1).Получается:
Открытый ключ:
(e, N) = (691, 779)Закрытый ключ:
(d, N) = (571, 779)Антон спрашивает у Маши — а сколько сантиметров хуй у Ивана?
Маша знает что у Ивана хуй — 21 сантиметр. Но Маше нужно это сообщить Антону, чтобы Иван не узнал.
Для этого Маше нужно знать открытый ключ Антона.
Берем открытый ключ из предыдущих вычислений
(691, 779).И шифруем хуй Ивана:
21^691 mod 779 = 717
Возводим длину хуя Ивана в 691 степень по модулю 779 и получаем число 717.
Теперь Маша передает без палева число 717 Антону.
Антон же с помощью закрытого ключа расшифровывает длину хуя Ивана.
717^571 mod 779 = 21
Аналогично возводим в степень по модулю. С помощью математики Антон узнаёт сколько сантиметров хуй у Ивана.
Даже линейка не понадобилась!
Подытожим:
Даже если Иван перехватит такое сообщение, то цифра 717 ему ни о чем не скажет, не может же быть хуй 717 см… хотя у леперов и пикабушников наверное так и есть.
Вот тебе пример на Bash:
#!/bin/bash
# Исходные данные
m=21
e=691
d=571
n=779
# Шифруем: c = m^e mod n
c=$(echo "$m ^ $e % $n" | bc)
echo "Зашифрованное сообщение: $c"
# Расшифровываем: m = c^d mod n
decrypted=$(echo "$c ^ $d % $n" | bc)
echo "Расшифрованное сообщение: $decrypted"
В результате получим: 717 и 21. Что и требовалось доказать!
В этот скрипт можешь подставить исходные данные своего прибора и результаты скинуть пиэму.
Чуть позже покажу как «ломают» такие ключи и как сгенерить RSA ключ с бэкдором.
Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 123