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

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

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

MAX: https://max.ru/bashdays

Курс: @tormozilla_bot
Блог: https://bashdays.ru
Download Telegram
Привет, всех с Новым Годом! Праздники праздниками, но пора уже входить в рабочий поток и разгрести локальный техдолг. На этот раз решаем задачку с тремя известными: Windows + WSL + VirtualBox.

Суть такая. Понадобилось мне вхреначить на локальную машину VirtualBox с убунтой, для тестирования фичи, которую писал в этом посте. Фича не хотела заводиться на виртуальных серверах Селектела, хотя и должна была. Потребовалось убедиться, что дело не в моих кривых руках. Ладно, лирика…

Короче цепануться к убунте из wsl по ssh к VirtualBox из коробки не получилось. Да и понятно, подсети разные. Пришлось временно воспользоваться powershell и через ssh проверить гипотезу с cgroup. Винда видит подсеть виртуалки и с этим проблем нет. Проверил, забыл.

Но вопрос остался открытым: как блять/дь малой кровью из WSL (с ubuntu 22.04) подключиться напрямую к виртуалке c ubuntu 22.04 по ssh? И не задрачиваться с таблицами роутинга? Рассказываю!

Чтобы не лезть в маршрутизацию, пришлось воспользоваться стандартным функционалом проброса портов в самом VirtualBox. Жопа конечно знатно сгорела, но желаемого добился.

В общем, пиздуем в настройки VirtualBox: Сеть, Адаптер1. В нем по умолчанию включен NAT. Открываем пункт - Дополнительно, видим кнопку: Проброс портов. Заходим и начинаем заниматься очередной хуитой магией.

Сначала роутим на виндовую машину:

Имя: ssh_win
Протокол: tcp
Адрес хоста: 127.0.0.1
Порт хоста: 2222
Адрес гостя: пусто
Порт гостя: 22


Так, теперь в powershell я могу цепануться к виртуалке так:

ssh -p2222 user@127.0.0.1


Оно и ежу понятно, теперь усложняем задачу:

Имя: ssh_win_host
Протокол: tcp
Адрес хоста: 192.168.31.100
Порт хоста: 22
Адрес гостя: пусто
Порт гостя: 22


Этой хернёй разрешаем подключение из powershell по такому принципу:

ssh user@192.168.31.100


Ага, айпишник 192.168.31.100 это адрес, который выдал роутер моей виндовой машине. Как видим уже используется 22 порт. Посмотреть айпишник можно командой ipconfig в терминале powershell. Да простят меня адепты линукса.

Ну и теперь финальный штрих, прикручиваем WSL:

Имя: ssh_wsl
Протокол: tcp
Адрес хоста: 172.21.20.123
Порт хоста: 2222
Адрес гостя: пусто
Порт гостя: 22


Айпишник 172.21.20.123 выдан убунте в WSL, смотрим его через ifconfig. А дальше заходим в сам WSL и подключаемся к VirtualBox как к обычному серверу:

ssh user@192.168.31.100


То есть цепляемся в виндовой/хостовой машине на 22 порт, который уже проброшен. Закидываем public ключи, делаем алиасы для быстрого коннекта. Всё! Дело в шляпе! Мы подключились из WSL (ubuntu) по ssh к виртуальной машине в VirtualBox.

Есть нюанс, у меня дополнительно поднят VPN через wireguard, там еще один фактор с подсетью. Поэтому я добавил еще мусора:

Имя: ssh_vpn
Протокол: tcp
Адрес хоста: 10.66.64.55
Порт хоста: 22
Адрес гостя: пусто
Порт гостя: 22


Теперь при активации VPN, подключение к VirtualBox через WSL будет выглядеть так:

ssh user@10.66.64.55


Логично, адрес виндовой/хостовой машины меняется с 192.168.31.100 на 10.66.64.55. Но это детали. Еще есть тема, что при включении/выключении VPN вся это тягомотина с пробросом портов подхватывается не сразу. Имей это ввиду.

Я себе сделал 2 алиаса в wsl ~/.zshrc:

alias box1="ssh user@192.168.31.100"
alias box2="ssh user@10.66.64.55"


Алиасы подключения без ВПН и с ВПН. Ну ты и так про это знаешь. Картинки с настройками залил сюда (открываются нативно в телеграфе), заскриншотил свои поделки. Визуальнее всегда понятнее. Но у меня там дэцл хосты и айпишники по другому обзываются. Не обессудь.

Если знаешь более красивое решение этой задачи с пробросом, сердечно ждем в комментариях.

Ладно, самое время включить режим «День-Тюлень». Еще раз всех с НГ. Увидимся!

tags: #linux #wsl #windows #network

💩 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
100
Привет. Сегодня покажу как на wsl хитро вкорячить свежую версию ubuntu 23 или 24. Так как в коробке идет только старенькая 22, придется немного потыкать в консольке.

Зачем это нужно? Ну например проверить какие-то штуки, которых нет в ubuntu 22. А для чего мне это понадобилось, я напишу в следующем посте, как раз одно на другое наложилось. Если спойлернуть: писал пост про софтину, но она работает только с новыми версиями убунты. Вот и пришлось немного переобуться.

По bash версиям имеем такое:

22.04 - 5.1.16
23.04 - 5.2.16
24.04 - 5.2.21


Так, есть несколько способов вкорячить свежую убунту в wsl.

Хитрожопый способ с docker

Заходим в wsl убунты 22 и ставим docker если он у тебя еще не стоит.

curl -sSL https://get.docker.com | sh
usermod -aG docker $(whoami)


WSL DETECTED: We recommend using Docker Desktop for Windows.

Оно грязно выругается, но ждем 20 секунд и установка завершиться успехом

Перезапускаем сессию чтобы пользователь смог работать с docker.

Дальше тащим образ ubuntu:lunar, как раз это версия 23.04. Аналогично можешь и другие версии/разновидности дистрибутива на wsl вкорячивать. Все что есть в docker можно поднять в wsl.

docker pull ubuntu:lunar


Запускаем контейнер и выходим из него

docker run -it --name ubuntu23 ubuntu:lunar
exit


Проверяем что контейнер есть:

docker ps -a


Экспортируем

docker export ubuntu23 > /tmp/ubuntu23.tar


В папке /tmp появился tar размером где-то 75 мегабайт. Уже хорошо. Теперь на хостовой с виндой создаем папку. Я сделал ее на диске D: и назвал так D:\\wsl\\ubuntu23

Теперь копируем этот tar на хостовую машину с виндой в папку D:\\wsl\\ubuntu23.

Переходим в powershell и импортируем tar:

wsl --import ubuntu23 D:\wsl\ubuntu23\ D:\wsl\ubuntu23\ubuntu23.tar


В папке D:\\wsl\\ubuntu23 появится новый файл: ext4.vhdx размером около 150 мегабайт. Так, дальше…

Смотрим что у нас есть, в powershell:

wsl -l -v


На экран вываливается примерно такое:

PS C:\Users\user> wsl -l -v

NAME STATE VERSION
* Ubuntu-22.04 Running 2
ubuntu23 Stopped 2


Собственно на этом всё. Запускаем lunar:

wsl -d ubuntu23


Всё!

Второй способ. Сделать dist-upgrade уже существующей убунты:

sudo sed 's/lts/normal/g' /etc/update-manager/release-upgrades
sudo sed -i `s/jammy/lunar/g` /etc/apt/sources.list
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade


Хотя апргрейд крайняя мера, когда 22.04 уже не нужна. А мне нужна! Пока не знаю зачем, но пусть будет.

Третий и самый простой.

Поставить Ubuntu (Preview) по этой ссылке прям с магазина микрософта. Кликнул и последняя убунта у тебя в wsl.

В моём случае сразу прилетел Release: 24.04 Codename: noble. Через docker конечно интереснее, есть какая-то прозрачность и контроль.

А так, как я ленивая жопа, я предпочел поставить Ubuntu Preview. Но способ с docker я конечно пощупал и поставил 23 версию. Теперь имею зоопарк 22, 23, 24, думаю для экспериментов вполне хватит.

Да, когда ставишь через docker, оно автоматически пропишется в Windows Terminal и потом всю эту кухню можно запускать кликом мыши, без ввода wsl -d.

Вот и все. Чуть позже закину пост как раз про ту самую софтину, которая хочет работать только на свежих линуксах. Увидимся!

tags: #linux #windows

💩 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
74
С наступающим! Давным-давно я избавился от OpenVPN и сейчас активно продолжаю использовать WireGuard. Даже порой связываю продакшен сервера wg тоннелями в разных регионах, где нет возможности это сделать из коробки. Стабильно, быстро, бесплатно.

Всё было хорошо, пока я не повзрослел и не познал джаззз установил себе Windows. Ну и естественно запихал туда официальный гуёвый клиент от wg. А что могло пойти не так? А всё!

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

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

Так я ебался с полгода, но в этот понедельник меня это окончательно заебало! Пошел искать альтернативы, конкретно гуишного клиента. Потому что сама технология wg меня устраивает, не устраивают эти постоянные глюки.

И да, я много гуглил про эти проблемы, они имеются и фиксятся именно, так как я их и фиксил, перезагрузками, службами и другими костылями.

Короче перебрал я разные клиенты, всё шлак, ну и наткнулся на гитхабе на что-то приличное, простое и даже с фичами.

Называется эта штука TunnlTo. Работает в коллаборации с WireSock. По бенчмаркам обгоняет даже официальный WG клиент. На странице проекта там все подробно описано, можешь самостоятельно ознакомиться.

Чо понравилось:

1. Не глючит, шустрый, не виснет
2. Поддержка импорта тоннелей из официального wg клиента
3. При загрузки ОС можно автоматом подключать/не подключать VPN
4. Разделение приложений, кто идет через VPN, а кто нет
5. Ну и конечно другие фичи, какие хз, мне 4х хватает

В общем мне пока нравится. Заточено под винду, но у маководов и линукс-гиков и так всё хорошо, мой личный пруф.

💻 Страница проекта на github

Неделька выдалась продуктивная и очень нервная, в плане работы, в плане домашней рутины, в плане партнерских интеграций. Надо уже новых коллег к нам приводить, а я всё фигнёй какой-то занимаюсь. Исправлюсь! На выходные сделаем небольшую паузу, буду готовить контент план, чтобы уж совсем из пальца темы не высасывать. Да и ты отдохнешь.

Ну а тебе и твоим близким желаю хороших предстоящих выходных, берегите себя ребят. Увидимся!

tags: #utils #windows #networks

💩 @bashdays
Please open Telegram to view this post
VIEW IN TELEGRAM
112
Немного съедем с темы и решим задачку с монтированием виндового раздела (BitLocker) в Linux.

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

При попытке монтирования получишь ошибку — анкновн файлсистем тайп БитЛохер.

Всё решается с помощью утилиты dislocker.

sudo apt install dislocker


После установки создаем пару папок:

sudo mkdir -p /mnt/bitlocker
sudo mkdir -p /mnt/bitlockermount


Смотрим зашифрованные разделы fdisk -l ну или lsblk. Ну а дальше делаем финт ушами:

sudo dislocker <partition> -u<password> -- /mnt/bitlocker


Расшифровываем раздел, подставляем нужный partition и password. Partition берем тот что нашли через fdisk или lsblk. Что-то типа /dev/sdd1 /dev/sdc1.

Монтируем:

sudo mount -o loop /mnt/bitlocker/dislocker-file /mnt/bitlockermount


Чтобы подключить раздел только для чтения, добавь в обе команды ключ -r. Рекомендую все же подключать с этим ключом.

Если получил ошибку:

mount: /mnt/bitlockermount: wrong fs type, bad option, bad superblock on /dev/loop10, missing codepage or helper program, or other error.


То укажи явно тип файловой системы:

Для ntfs:

sudo mount -t ntfs-3g -o loop /mnt/bitlocker/dislocker-file /media/bitlockermount


Для exFat:

sudo mount -t exFAT-fuse -o loop /mnt/bitlocker/dislocker-file /media/bitlockermount


Еще момент, вместо пароля можно использовать пароль восстановления, файла BEK или открытого ключа с помощью которого производилось шифрование.

Для пароля восcтановления: -p<password>

Для открытого ключа: -c

Для BEK: -f <BEKFILE>

Заметь что после ключа -p нет пробела, это важно.


Ну вот и всё. Теперь ты умеешь подключить диски с BitLocker.

А что бы такой диск подключался автоматически, камон в fstab:

<partition> /mnt/bitlocker fuse.dislocker user-password=<password>,nofail 0 0

/mnt/bitlocker/dislocker-file /media/bitlockermount auto nofail 0 0


Подставляем свои значения и радуемся.

➡️ Репа dislocker тут, можешь глянуть что там у нее под капотом.

Кстати диски с битлокером отлично открываются в Fedora Silverblue из коробки (с помощью recovery password). По крайней мере в прошлом году точно открывались. Можешь ее на виртуалку поставить и развлекаться.

tags: #linux #windows #utilites

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
57
Захотелось мне сегодня порядок на внешнем винте навести, который подключен к малине. Естественно там разметка ext4.

Ну дак вот. Цепляю этот диск к 11й винде по USB иии… хуй там плавал!

Эт всё понятно, но я почему-то думал что в 2025 году винда научилась с таким жить. Не научилась.


Ну мыж с тобой не пальцем деланные, если есть wsl значит оно может ext4 теоретически прочитать.

Покопавшись некоторое время в куче говна и применив приёмчики от Чака Норриса мне удалось это победить.

Показываю!

Запускаем powershell, я запускал под суперадмином, хуй знает мож и от юзера прямоходячего сработает.

В павершеле пишем:

wmic diskdrive list brief


В ответ получаем список доступных дисков, в том числе подключенных по usb.

Caption DeviceID Partitions
WDC \\.\PHYSICALDRIVE2 1
ADATA \\.\PHYSICALDRIVE1 3
WD10 \\.\PHYSICALDRIVE0 1


Заебись! Я вижу свой usb диск, зовется он PHYSICALDRIVE2.

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


Дальше. Если у тебя не стоит wsl, ставим:

wsl --install


Да, это все делаем в повершеле в винде. После установки запусти wsl с убунтой и задай пароль для рута, пусть там все инициализируется.

Если всё сделал правильно, запускаем:

wsl --mount \\.\PHYSICALDRIVE2 --bare


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

Ключ bare монтирует диск в "сыром" виде, без автоматического создания файловой системы или попытки её определения. Это полезно, если вы хотите работать с диском на низком уровне, например, для восстановления данных, анализа структуры диска или выполнения других операций, которые требуют прямого доступа к данным на диске.


Ага, примонтировали, ну и теперь идем в свою убунту которая в wsl кружится и делаем финальный маунт:

mount -t ext4 /dev/sdd1 /mnt/sdd


Папку /mnt/sdd нужно создать ручками. А раздел диска (sdd1) подсмотреть командой blkid.

Всё, usb винт успешно примонтирован в wsl убунты, файлы доступны. Теперь их можно копировать на ntfs и радоваться.

400 гигов с ext4 на ntfs копировалось 3 часа.

Хуй знает на сколько я изобрел велосипед, но поставленную задачку решил без всяких парагонов и прочего внешнего софта. ЗБС!

tags: #linux #windows

🔔 @bashdays➡️ @gitgate
Please open Telegram to view this post
VIEW IN TELEGRAM
84
Хозяйство вести — не мудями трясти!

Ну дак вот, чтобы твой любимый линукс в 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 видеть локальную сеть хоста и взаимодействовать, как обычное приложение винды.

- При разработке серверных приложений, если нужно, чтобы всё вело себя как на обычной машине, а не в изолированной виртуалке.

Ну ты понял. Бери на вооружение, хуйня полезная если правильно применить.

🛠 #linux #networks #windows #wsl

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
381
Продолжаем с WSL2

По умолчанию wsl запускается с какими-то своими дефолтными параметрами, будь то память, проц, свап и т.п.

Но все эти параметры можно без труда зареврайтить. Всё это делается через тот же самый файл C:\Users\<user>\.wslconfig.

Пример:

[wsl2]
processors=2


Здесь я выделил виртуальной машине 2 ядра из 16ти доступных. По умолчанию wsl сразу выгребает 16 ядер и половину памяти.

Таких параметров для тонкой настройки — жопой ешь, под любые твои хотелки и потребности.


Хочешь подключить swap? Без проблем! Хочешь указать кастомное ядро? Хуйня! Есть и такой параметр! Про всё остальное почитаешь сам.

Всё это удобно собрано в этой доке, причем на русском языке. Садишься, пробегаешься глазками, вникаешь, закрываешь свои базовые потребности. Удобно!

В общем имей в виду, что даже wsl поддаётся конфигурации.

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


Пользуйтесь!

🛠 #linux #networks #windows #wsl

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
49
Решил поделиться своим опытом использования Samba.

🔤🔤🔥🔤🔤🔤🔤

Ну, не то, чтобы прям Samba, но всякими smb-комбайнами.

Я сопровождаю небольшие конторки от 5 до 100 компов. Покупать виндовые серверы для такого количества — просто излишество. Если для маленьких конторок, для 10 машин, еще можно расшарить папку на win-pro, то дальше нужно думать.

Начал я с FreeNas, потом Nas4free, TrueNas, OMV, и когда поднабрался опыта, остановился на Samba без всяких web-интерфейсов.

Но я не об этом. Тем, кто думает, что можно легко заменить win-server на Samba Посвящается.

Основное отличие виндового и линуксового сервера — права доступа. У винды права реализованы лучше и гибче. Сейчас мне в комментах напишут про ACL, особенно те, кто их не использует.

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

Большинство проблем, связанных с правами на Samba, связаны именно с ACL.

Ситуация следующая, два пользователя U1, U2, три папки D1, D2, D3. U1 имеет доступ D1, D2, U2 к D2, D3. На винде, если U1, создаст файл в D1, а потом перенесет в D2 - пользователь U2 будет иметь к нему доступ, а на линуксе нет.

Для некоторых папок приходится делать cron-скрипт для сброса прав. Может у кого-то есть опыт использования inotify для этого, поделитесь.

Не знаю, как Вы, а я для себя решил отказаться от ACL. Потому что использовать getacl setfacl не удобно.

Рекомендую для маленьких контор использовать разрешения на шАры и обычные линуксовые права. Просто в этом случае расшаренных папок много.

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

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

🛠 #windows #linux

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
36
Из каждого чайника слышу про ZED, это такой новомодный IDE от авторов Atom. Славится своей скоростью и минимализмом, никаких тебе новогодних ёлок и перегруженных интерфейсов. Чем-то напоминает VIM.

Дошли руки потыкать. Но одного желания мало, под винду сука дистрибутив не завезли. Хочешь под винду? Скомпилируй из исходников!

😀😃😄😁😅😂🤣😊
😇🙂🙃😉😌😍🥰😘
😗😙😚😋😛😝😜🤪
🤨🧐🤓😎🤩🥳😏😒

Да легко! Спустя 4 часа ебатни и дебага — спасибо, идите нахуй!

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


Залил в себя пару пиалок до-хун-пао, словил дзен и нашел выход.

Пиздуем на сайт и ищем ZED. Ебала жаба гадюку! Всё уже придумано и собрано за нас. Верните мне 4 часа компиляции!

Открываем CMD и хуячим:

scoop bucket add extras
scoop install extras/zed


Всё!

Если не установлен scoop, ставим так:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex


Что по IDE?

Моё почтение, все нужные мне плагины по девопсовым делам — есть. Даже маркдаун и превью работает. Шикарно!

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

Чтобы по умолчанию в качестве терминала у тебя не открывался CMD, делаем финт ушами и дружим ZED с WSL.

  "terminal": {
"shell": {
"program": "C:\\Windows\\System32\\wsl.exe"
},
"font_family": "Hack Nerd Font Mono",
"font_size": 15,
"line_height": "standard"
}


Теперь открывается ZSH, или что там у тебя установлено в WSL.

Ааа, забыл, в ZED можно подключить ИИ агенты, причем можешь локально поднять дипсик или т.п. и использовать его прям в IDE.


Больше добавить пока нечего, всё нравится. Буду тыкать, а там уже посмотрим.

🛠 #windows #ide #dev

@bashdays @linuxfactory @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
149