Предисловие
Здравствуй, дорогой читатель!
Меня зовут Антон, я молодой инженер, который совсем недавно своими тонкими неокрепшими ручонками пробил стенку из кальцита, выбрался в неизведанный мир проводов и индийских драконов да со всего своего юношеского маху сиганул навстречу приключениям.
Мне предстоит узнать много нового и отстроить свое космическое судно… или, может, ноев ковчег? Нет, мне предстоит отстроить свою систему; систему, что я нареку именем d96. В процессе ее строительства, как подобает всякому капитану, я буду вести бортовой журнал.
Итак, запись #1…
Вступление
Началось все прозаично и просто: на работе пылился старенький ThinkPad без монитора на Core i3 и с восьмушкой оперативной памяти. Какое удивительное совпадение, но в то же самое время под 2 вкладки браузера у меня использовался более резвый жеребенок. Казалось бы, пущай и дальше гордый старец в мирном сне возвышается над бренностью нашего мира, только вот, по мотивам классических фэнтези, к седобородому пришел молодой кремнерожденный и, как водится, стал донимать.
В общем, и целом, и частности, решил я следующее: организовать рабочее пространство под те самые 2 вкладки на ThinkPad’ыше, доступ к которому будет осуществляться удаленно (напоминаю, монитор был ампутирован), а бодрого соколенка использовать под другие задачи (какие - покуда и сам не знаю).
Итак, цель - сымпровизировать машину под управлением Linux с удаленным доступом для рабочих задач.
Из жизни комет
Первым делом я достал из загашника vga-шный монитор и lan-шнурок, чтобы накатить систему. Да - загашник у меня квантово запутанный. Под мои задачи выбор пал на Ubuntu 22.04 LTS, по причине того, что я уже немного знаком с Ubuntu 24.04 LTS, и мне хотелось понять, как сильно отличается то, чем пользуюсь я, от иглы, на которой сидит мой преподаватель в университете. Но тогда я еще не знал, как сильно я ошибаюсь. Спойлер - не сильно. Просто современная Ubuntu использует для графической оболочки Wayland, а для удаленного доступа к окошкам я хотел использовать vnc, который работает с x11. Благо, интернет полнится мифами, поэтому направив запрос в космос: “Сервант на линух - это для меня”, я получил следующий манускрипт от парня, который решил мою задачу быстрее, умнее и давнее[1] - Ubuntu MATE 24.04 LTS[2]. Она построена на x11, графическая оболочка относительно много не жрет - что еще нужно для счастья (много чего, но для серванта под чайник и этого достаточно). Впоследствии окажется, что манипулировать окнами, аки профессиональный стекольщик, мне, по большому счету, вообще не нужно, ну да ладно, авось пригодится, есть пить не просит, просто ресурсы пожевывает. Светлые умы, конечно же, скажут про Ubuntu Server, куда при необходимости можно поставить GUI (Graphical User Interface). Ну и что вы мне сделаете? А? Я в другом городе, вообще!
С выбором системы разобрались. Далее мне нужен доступ по SSH, чтобы можно было удаленно подключиться к консоли; VNC-сервер, дабы получить доступ к монитору (я буду подключаться к физическому монитору, хоть его и нет, подобно фантомной конечности, наш ThinkPad’ышь все же его видит); раздать доступ к корневой папке, просто чтобы было (удобно); а еще поставить китёнышка (docker), который во чреве своем понесет ChirpStack (штука-дрюка для IoT на LoRaWAN). Далее - по делу: что, кого, как и куда вводить. Ну и tailscale - на сладкое (“из любой точки мира есть доступ”). Кстати, пункт с ssh можно пропустить, если десерт входит в ваши планы.
По делу
Вот, не обманул же - по делу. Ладно, все, не паясничаем…
Установить Ubuntu MATE[2] (в моем случае - 24.04 LTS);
Далее - Ctrl+Alt+T - наши друзья, все в терминале.
Установить SSH-server - для доступа по SSH:
#(-y - yes for all questions during installation)
sudo apt install \-y openssh-server
#Проверим, запущен ли сервер:
sudo systemctl status ssh
В WinOS терминал, как и в Ubuntu, в коробку с системой бережно положен ssh-клиент, поэтому из обеих осей доступ к нашему ssh-серверу будет осуществляться просто:
#Имя пользователя @ ip-адрес устройства и номер порта, 22 - золотой стандарт
ssh username@this.is.your.ip -p 22
Дабы вычислить “серверный” ip пропишем:
hostname -I
Установить vncserver - для удаленного доступа к GUI (xvnc - для физического дисплея / tigervnc - для виртуального дисплея; я воспользуюсь xvnc):
sudo apt install x11vnc
#Устанавливаем пароль; его нужно будет ввести следом за командой ниже:
11vnc -storepasswd
#Запускаем vncserver c физическим дисплеем (-display :0), с использованием авторизации через сохраненный пароль ( -rfbauth ~/.vnc/passwd), не завершаем сессию после отключения клиента (-forever), разрешаем одновременное подключение (-shared), используем стандартный порт vnc (-rfbport 5900):
x11vnc -display :0 -rfbauth ~/.vnc/passwd -forever -shared -rfbport 5900
На данном этапе я тестирую работоспособность, пытаясь подключиться с другого ПК средствами VNC-клиента (RealVNC Viewer - в моем случае). Для этого нужно находиться в одной локальной сети, знать ip-адрес ThinkPad’ыша и не забыть номер порта, который мы указали при запуске VNC-сервера (5900).
Создавая новое соединение в VNC-клиенте, нужно будет ввести, к примеру:
192.168.80.178:5900
Затем заданный нами ранее пароль, ну и все - успех. По крайней мере, должен быть.
Далее добавим vnc’шку в автозапуск:
#Откройте или создайте файл ~/.xprofile
sudo nano ~/.xprofile
Ах, да, nano - простой консольный текстовый редактор, самые важные сочетания клавиш для него на данном этапе - Ctrl+O - записать, Ctrl+X - закрыть.
#Добавьте туда следующие строки:
if [ -n "$DISPLAY" ]; then
/usr/bin/x11vnc -display :0 -rfbauth /home/awmnb/.vnc/passwd -forever -shared -rfbport 5900 &
fi
#Перезагрузите systemd, чтобы он распознал новый сервис
sudo systemctl daemon-reload
#Включите автозапуск этого сервиса
sudo systemctl enable x11vnc.service
Установить samba - для того, чтобы дать доступ к директориям нашего ThinkPad’ыша клиентам локальной сети:
(Я раздаю домашнюю папку, для всего остального есть SSH.)
sudo apt install \-y samba
# -a — ключ, который означает: добавить нового пользователя в базу Samba. username - имя пользователя Linux. Можно узнать, прописав:
whoami
sudo smbpasswd -a username
sudo nano /etc/samba/smb.conf
#В конец файла, который был открыт командой выше, необходимо прописать блок:
[username-home]
path = /home/username
browseable = yes
read only = no
guest ok = no
valid users = username
#перезагрузить службу с новым конфигом
sudo systemctl restart smbd
#добавить в автозагрузку
sudo systemctl enable smbd
#проверить статус автозагрузки
sudo systemctl is-enabled smbd
После выполнения вышеописанных операций на второй машине под управлением Ubuntu, находящейся в моей юрисдикции, сетевой диск обнаружился автоматически. Если магическим образом на пингвине ничего не заработало, следует использовать практический - заходим в проводник, “+ Other Locations” - “Enter Server Address…”
smb://this.is.your.ip/username-home
#Либо в терминале:
nautilus smb://this.is.your.ip/username-home
Для доступа к расшаренной папке с WinOS необходимо в проводнике перейти по следующему адресу:
\\this.is.your.ip\\username-home
#username-home - был назван добавленный в конфиг-файл samba блок
Чтобы не запоминать путь, я предпочел выдать ThinkPad’ышу статический ip и подключить сетевой диск в Win:
RMC on This PC in explorer -> Map Network Drive -> …
Настройка автоматической авторизации пользователя при старте системы.
(Напомню, что дисплей нашего старца выпал, с криком: "Ну чё, ра-народ? Погнали...", а после перезапуска системы без авторизации ни одна из столь кропотливо установленных нами служб предательски не запустится…)
#Открыть файл конфигурации LightDM:
sudo nano /etc/lightdm/lightdm.conf
#Добавить или раскомментировать строки:
[SeatDefaults]
autologin-user=awmnb
autologin-user-timeout=0
Установить tailscale[3] - что-то вроде личной VPN-сети для автоматического объединения устройств в локалку без проброса портов, белых айпишников и шаманских плясок.
На сайте tailscale[4] есть построчный мануал с актуальными версиями под самые разные системы, здесь же будут продублированы команды для знакомства с этим компанейским парнягой на Ubuntu (MATE) 24.04 LTS (noble):
#Добавим gpg-ключ:
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
Если на данном этапе наш титаник мчится на полном ходу к айсбергу с кодовым именем 451, а мы, напялив на глаза блюдца, видим в терминале следующее:
curl: (22) The requested URL returned error: 451
… крепитесь, подкрепитесь и вернитесь к делу. Из вашей точки мира доступ к вводимым нами ссылкам отсутствует. На этот случай у меня спрятан OpenVPN в рукаве. Ну, небось, не маленькие.
#Добавим репозиторий:
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
#Установим tailscale:
sudo apt-get update
sudo apt-get install tailscale
#Подключимся к сети tailscale:
sudo tailscale up
На этом этапе нас сошлют по ссылочке, а нам и деваться некуда, и авторизоваться надобно, посему - пройдем. Не убудет же... К созданному аккаунту будет привязана наша удаленная локальная сеть.
#Узнаем наш ip в созданной сети, а заодно и ip прочих подключенных устройств:
tailscale ip -4
tailscale status
При установке данным способом, программа будет стартовать с системой; с snap-пакетом могут быть проблемы где-то между Новокузнецком и автозапуском. Во-о-от...
Можно еще поднять ssh от tailscale при желании:
sudo tailscale up --ssh
Говорят, никаких паролей для завсегдатаев вашего паба.
“Вот и все. Ну и что?”
Ну а дальше - импровизируем как можем. Я, например, бережно положил нашего красноглазого циклопыша на полку, поближе к роутеру, воткнул в него питание, LAN и оставил мирно бухтеть куллером на благо рабочего класса.
Ну… разве что развернул Docker, в коем запустил ChirpStack, дабы транзисторам щелкалось с пользой.
Но это уже совсем другая история…