Привет, очередная халява. Каждый год я отдаю 3 проходки-билета (скидка 100%) на онлайн-конференцию «Подлодка».
Если есть желание посетить сие онлайн-мероприятие, кликай кнопку ниже. В выходные опубликуются результаты. Ну а дальше с вами свяжусь я или Макс и раздадим ништяки. Такие дела!
Условия розыгрыша: подписаться на канал @bashdays и @gitgate
Если есть желание посетить сие онлайн-мероприятие, кликай кнопку ниже. В выходные опубликуются результаты. Ну а дальше с вами свяжусь я или Макс и раздадим ништяки. Такие дела!
Условия розыгрыша: подписаться на канал @bashdays и @gitgate
Bash Days | Linux | DevOps
Привет, очередная халява. Каждый год я отдаю 3 проходки-билета (скидка 100%) на онлайн-конференцию «Подлодка». Если есть желание посетить сие онлайн-мероприятие, кликай кнопку ниже. В выходные опубликуются результаты. Ну а дальше с вами свяжусь я или Макс…
1. dima (@Vesel4ag)
2. Nikolay (@galek240)
3. Cagami (@cagami)
Please open Telegram to view this post
VIEW IN TELEGRAM
Proxmox post install in 2025 (часть 1)
ㅤ
Давай разберемся, что нужно сделать после установки proxmox.
Наш путь — это всё сделать ручками, чтобы было понимание и контроль над процессом.
Для начала пиздуем сюда:
И добавляем дополнительные репозитории:
Затем отключаем интерпрайзный репозиторий в файле:
В нем комментируем одну строчку:
Следом отключаем платный
Комментируем и добавляем халявную репу:
После этого выполняем:
Всё раздуплится и обновится из бесплатных репозиториев. После этого перезагружаем сервер, потому что прилетело достаточно много важного и серьезного.
Дальше выполняем в терминале proxmox:
Эта команда отключит
На этом можно и закончить, но есть еще момент с прокидываем физических устройств в виртуальные машины.
Этот момент рассмотрим во второй части (завтра в 14:13 МСК залетит, пост в отложке), там похитрее всё.
🛠 #proxmox #devops
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
Давай разберемся, что нужно сделать после установки proxmox.
Как вариант сразу накатить эту штуку Proxmox VE Post Install, но процесс не прозрачный.
Наш путь — это всё сделать ручками, чтобы было понимание и контроль над процессом.
Для начала пиздуем сюда:
/etc/apt/sources.list
И добавляем дополнительные репозитории:
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
deb http://security.debian.org/debian-security bookworm-security main contrib
Затем отключаем интерпрайзный репозиторий в файле:
/etc/apt/sources.list.d/pve-enterprise.list
В нем комментируем одну строчку:
# deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
Следом отключаем платный
ceph, идем в файл:/etc/apt/sources.list.d/ceph.list
Комментируем и добавляем халявную репу:
# deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise
deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription
После этого выполняем:
apt update && apt upgrade
reboot
Всё раздуплится и обновится из бесплатных репозиториев. После этого перезагружаем сервер, потому что прилетело достаточно много важного и серьезного.
Дальше выполняем в терминале proxmox:
sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.jsЭта команда отключит
No valid subsciption, сообщение о том, что у нас отсутствует подписка на интерпрайз. Довольно нозящая и заёбистая тема. Чтобы изменения вступили в силу, скинь кэш в браузере. Всё, больше это информационное окошко тебя не побеспокоит.
На этом можно и закончить, но есть еще момент с прокидываем физических устройств в виртуальные машины.
Этот момент рассмотрим во второй части (завтра в 14:13 МСК залетит, пост в отложке), там похитрее всё.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Proxmox post install in 2025 (часть 2)
Такс, следующим этапом после установки proxmox необходимо настроить проброс реальных устройств в виртуальные машины.
ㅤ
Если устройство проброшено в виртуальную машину, то ни хостовая машина ни другие виртуальные машины использовать это устройство не смогут. Короче устройство будет изолировано.
Открываем на редактирование файл:
И правим
Если у тебя Intel:
Если у тебя AMD
Сохраняем изменения и обновляем загрузчик:
По-хорошему proxmox нужно отправить в перезагрузку, но это не точно. В любом случае для чистоты эксперимента я все же ребучу.
Загружаем модули:
Открываем на редактирование:
И прописываем:
С версии ядра 6.2 модуль vfio_virqfd больше нахуй не нужен.
Сохраняем и запускаем:
Здесь обязательно нужен ребут, без ребута нихуя НЕ заработает!
Проверяем:
И ищем строчку:
Если нашел, то поздравляю, у тебя всё получилось! Если же нет, то еще раз внимательно выполни все шаги и не забудь про ребут.
На закуску
Чтобы изолировать GPU карточку от хостовой системы, нужно еще с бубном побегать.
Узнаём ID карточки, а дальше подставляем этот ID в эту команду:
И пиздярим блеклисты:
Ну и само собой отправляем proxmox в ребут.
Проброс HDD
Узнаём ID диска и выполняем команду:
Вот и вся наука. Всё лично протестировано и работает как часы, включая проброс видюхи.
Если есть чего добавить, велком в комменты.
🛠 #proxmox #devops
—
✅ @bashdays / @linuxfactory / @blog
Такс, следующим этапом после установки proxmox необходимо настроить проброс реальных устройств в виртуальные машины.
ㅤ
Проброс устройств подразумевает — устройства которые подключены к материнской плате на хостовой машине. Например, видюха, модемы и т.п. То есть виртуальные машины смогут их использовать.
Если устройство проброшено в виртуальную машину, то ни хостовая машина ни другие виртуальные машины использовать это устройство не смогут. Короче устройство будет изолировано.
У меня таким боком прокинут рутокен в виндовую виртуалку, чтобы в ЭДО доки подписывать с любого устройства и из любой жопы мира.
Открываем на редактирование файл:
/etc/default/grubИ правим
GRUB_CMDLINE_LINUX_DEFAULT, должно получиться так:Если у тебя Intel:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pt=on"
Если у тебя AMD
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on pt=on"
iommu=on — включает IOMMU (Input-Output Memory Management Unit) для процессоров. Этот механизм позволяет изолировать устройства ввода-вывода, повышая безопасность и управление памятью.
pt=on — включает поддержку PCI passthrough для виртуализации, позволяя передавать устройства (например, видеокарты или другие PCI-устройства) непосредственно в виртуальные машины.
Сохраняем изменения и обновляем загрузчик:
update-grub
reboot
По-хорошему proxmox нужно отправить в перезагрузку, но это не точно. В любом случае для чистоты эксперимента я все же ребучу.
Загружаем модули:
Открываем на редактирование:
/etc/modulesИ прописываем:
vfio
vfio_iommu_type1
vfio_pci
С версии ядра 6.2 модуль vfio_virqfd больше нахуй не нужен.
Сохраняем и запускаем:
update-initramfs -u -k all
reboot
Здесь обязательно нужен ребут, без ребута нихуя НЕ заработает!
Проверяем:
dmesg | grep -e DMAR -e IOMMU or dmesg | grep -e DMAR -e IOMMU
И ищем строчку:
Interrupt remapping enable Если нашел, то поздравляю, у тебя всё получилось! Если же нет, то еще раз внимательно выполни все шаги и не забудь про ребут.
На закуску
Чтобы изолировать GPU карточку от хостовой системы, нужно еще с бубном побегать.
lspci -nn
Узнаём ID карточки, а дальше подставляем этот ID в эту команду:
echo "options vfio-pci ids=10de:____,10de:____ disable_vga=1" > /etc/modprobe.d/vfio.conf
И пиздярим блеклисты:
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia_drm" >> /etc/modprobe.d/blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf
Ну и само собой отправляем proxmox в ребут.
Проброс HDD
ls -n /dev/disk/by-id/
Узнаём ID диска и выполняем команду:
/sbin/qm set [VM-ID] -virtio2 /dev/disk/by-id/[DISK-ID]
Вот и вся наука. Всё лично протестировано и работает как часы, включая проброс видюхи.
Если есть чего добавить, велком в комменты.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Продолжу делиться всякими плюшками и фэйлами.
🔤 🔤 🔥 🔤 🔤 🔤 🔤
Пару дней назад начал писать скрипт на bash для того, чтобы 1с-ники в случае чего могли перезапустить службы 1c, postgres. И меня при этом не трогали.
В общем, написал. Но хотелось бы, чтобы перезапуск служб производится без
запроса пароля.
Есть файл в системе
Добавляем строчку:
И все. Пользователь
Делается это так:
или
Но пароль при этом не запрашивается. Еще один плюс в том, что
😞 В процессе отладки на виртуалке словил жесткий fail.
В
У меня debian. Пароль
Пришлось на хосте монтировать файл виртуалки
👆 Поэтому прежде чем править файл, убедитесь, что пароль
В случае проблем — сэкономите кучу времени и нервов.
🛠 #рабочиебудни #linux
—
✅ @bashdays / @linuxfactory / @blog
Пару дней назад начал писать скрипт на bash для того, чтобы 1с-ники в случае чего могли перезапустить службы 1c, postgres. И меня при этом не трогали.
В общем, написал. Но хотелось бы, чтобы перезапуск служб производится без
запроса пароля.
Есть файл в системе
/etc/sudoers. В котором можно все это сделать.Добавляем строчку:
username ALL=NOPASSWD:/usr/sbin/service postgresql*,/usr/sbin/service srv1cv83*,/usr/sbin/reboot
И все. Пользователь
username может управлять указанными службами и даже перезапустить сервак.Делается это так:
sudo service postgresql restart
или
sudo service srv1cv83_1541 status
Но пароль при этом не запрашивается. Еще один плюс в том, что
sudo -i система выполнить не даст.srv1cv83* Указана так, потому что на сервере может быть несколько служб 1c. Если указать /usr/sbin/service postgresql st*, то можно будет запустить, остановить и посмотреть статус. И всё!😞 В процессе отладки на виртуалке словил жесткий fail.
В
sudoers прописал service без пути. После этого команда sudo начала ругаться на ошибки в sudoers и перестала работать.У меня debian. Пароль
root заблокирован, sudo не работает. Я даже в recovery загрузиться не смог.Пришлось на хосте монтировать файл виртуалки
qcow2 и восстанавливать, все, как было.👆 Поэтому прежде чем править файл, убедитесь, что пароль
root установлен.В случае проблем — сэкономите кучу времени и нервов.
su root и будет счастье.—
Please open Telegram to view this post
VIEW IN TELEGRAM
Не долго музыка играла.
Недавно писал про мини-пк и что у меня на proxmox крутится.
Ну дак вот, вчера с утра смотрю, proxmox и все lxc выпали из сети, ну бывает, выключил с кнопки, включил. Хуй там плавал.
ㅤ
Подключил эту пепяку к монитору, НИХУЯ, подсветка горит, лампочка горит, но на экран ничего не выводится. Разобрал. При старте вентилятор делает несколько оборотов и останавливается. Прекрасное начало утра. Мне блядь уроки писать надо, а тут такое.
Разобрал еще больше, откинул батарейку, обнулил биос — НИЧЕГО!
Поперетыкал монитор в разные дырки, тишина.
Отпиздил (как советский телевизор), тишина.
Хм… походу мини пиздюк пал смертью храбрых.
Дата включения: 27.02
Дата смерти: 08.04
Работал 24/7, при температуре 45-50 градусов.
Вот такие дела. В общем не рекомендую. По крайней мере для режима 24/7 эта хуйня явно не подходит, ну либо мне так повезло.
По итогу достал свою старую добрую (пятую) малину, быстренько все на ней поднял и выдохнул. Четвертая малина у меня лет 8 отработала нонстопом без такой вот хуйни.
Как придет блок питания, напишу по результатам.
🛠 #hardware #fails
—
✅ @bashdays / @linuxfactory / @blog
Недавно писал про мини-пк и что у меня на proxmox крутится.
Ну дак вот, вчера с утра смотрю, proxmox и все lxc выпали из сети, ну бывает, выключил с кнопки, включил. Хуй там плавал.
ㅤ
Подключил эту пепяку к монитору, НИХУЯ, подсветка горит, лампочка горит, но на экран ничего не выводится. Разобрал. При старте вентилятор делает несколько оборотов и останавливается. Прекрасное начало утра. Мне блядь уроки писать надо, а тут такое.
Разобрал еще больше, откинул батарейку, обнулил биос — НИЧЕГО!
Поперетыкал монитор в разные дырки, тишина.
Отпиздил (как советский телевизор), тишина.
Хм… походу мини пиздюк пал смертью храбрых.
Дата включения: 27.02
Дата смерти: 08.04
Работал 24/7, при температуре 45-50 градусов.
Осталось проверить блок питания, но подходящего не нашел. Заказал, чтобы исключить этот момент. Но очень сомневаюсь что это поможет. Надеюсь хоть винт на террабайт из строя не вышел, куданить потом его прикручу.
Вот такие дела. В общем не рекомендую. По крайней мере для режима 24/7 эта хуйня явно не подходит, ну либо мне так повезло.
По итогу достал свою старую добрую (пятую) малину, быстренько все на ней поднял и выдохнул. Четвертая малина у меня лет 8 отработала нонстопом без такой вот хуйни.
Как придет блок питания, напишу по результатам.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, ну вот и состоялось моё знакомство с серверным дистрибутивом SelectOS, дошли так сказать руки до прекрасного.
Все мои ухаживания в пост не влезли, да и с форматированием тут беда, поэтому наливаем кофе/пиво и читаем тут 👇
🦖 Пробуем SelectOS
Ну и по классике жанра, камон в комменты, будем активно обсуждать!
🛠 #linux #review
—
✅ @bashdays / @linuxfactory / @blog
Все мои ухаживания в пост не влезли, да и с форматированием тут беда, поэтому наливаем кофе/пиво и читаем тут 👇
Ну и по классике жанра, камон в комменты, будем активно обсуждать!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Хули нет, в пятницу вечером, а дня за три предупредить нельзя было? клиентоориентированность... долбаёбы блядь
🛠 #рабочиебудни
—
✅ @bashdays / @linuxfactory / @blog
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Официально стартанул 3й сезон (Terraform) Linux Factory.
Всё еще мечтаешь о ЗП > 200к? Тогда ты по адресу!
Над курсом была проведена масштабная работа, все уроки я перенес на свои сервера. Под капотом движок mkdocs + material.
Учел твою обратную связь, дополнил и отредактировал первые два сезона. Добавил темную тему и поиск + отрефачена куча мелочей.
Через LF за год прошло более 900 человек, 32 дали фидбек по офферу, то есть нашли работу мечты и получают 100500 мильонов в секунду. Что интересно в этом списке есть люди, которые вообще были далеки от айти и девопса.
Ладно. Больше в уши не лью. Захочешь, сам почитаешь. В любом случае до конца июля действует скидка
Киллер фича — ты со мной на связи, решаем вопросы 1x1.
После курса ты преисполнишься бест-практиками и научишься делать ха-ра-шо. Ну и естественно заработаешь себе на квартиру и машину, без кредитов и ипотек.
Вписаться в курс: @tormozilla_bot
По всем вопросам можешь писать сюда: @linuxfactorybot
Please open Telegram to view this post
VIEW IN TELEGRAM
Бебебед практики 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