MyTetra Share
Делитесь знаниями!
Создание и использование LXC контейнера в Astra Linux SE
Время создания: 19.07.2024 09:19
Автор: Xintrea
Текстовые метки: astra, linux, контейнер, LXC, создание, настройка, установка, развертывание
Раздел: Компьютер - Linux - Дистрибутив Astra Linux
Запись: xintrea/mytetra_syncro/master/base/1721369963fw3iqtdnet/text.html на raw.github.com

В этой заметке описывается установка LXC-контейнера с Astra Linux 1.7 внутри основной системы с Astra Linux 1.6. Да, в Astra 1.6 можно запустить контейнер со всеми библиотеками от Astra 1.7. Все проверено, все работает.





Развёртывание контейнера с Astra Linux SE


1. В основной системе надо установить пакеты lxc и lxc-astra.


2. Далее необходимо настроить сеть под контейнеры. Для этого:


Создать файл /etc/default/lxc-net со следующим содержимым:



USE_LXC_BRIDGE="true"

LXC_BRIDGE="lxcbr0"

LXC_ADDR="10.0.3.1"

LXC_NETMASK="255.255.255.0"

LXC_NETWORK="10.0.3.0/24"

LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"

LXC_DHCP_MAX="253"

LXC_DHCP_CONFILE=""

LXC_DOMAIN=""



Как видно из этих настроек, для сети будет использоваться соединение типа "мост". Обычно, такое же соединение используется и при обычной виртуализации, например в VirtualBox. По сути, эти настройки создают в системе виртуальный маршрутизатор. Маршрутизатору указывается его IP-адрес, маска сети, обслуживаемый сетевой диапазон (не совсем понятно почему, ибо маска и диапазон содержат одни и те же сведения), задаются параметры DHCP-сервера.


Затем, в файле /etc/lxc/default.conf строчку:



lxc.net.0.type = empty



необходимо заменить на:



lxc.net.0.type = veth

lxc.net.0.link = lxcbr0

lxc.net.0.flags = up



Здесь надо обратить внимание, что имя линка lxcbr0 совпадает с именем, заданным ранее в параметре LXC_BRIDGE.


После всех настроек следует перезапустить службу lxc-net:



sudo systemctl restart lxc-net



После этого действия должно появиться новое сетевое подключение lxcbr0. Его можно увидеть командой ip addr.


3. Подменить содержимое /etc/apt/sources.list на конфиг, необходимый для целевой системы контейнера. Другими словами, надо взять sources.list от гостя, и временно поместить содержимое этого файла в /etc/apt/sources.list основной (хостовой) системы. Это необходимо сделать из-за того, что в момент инсталляции скрипт будет копировать /etc/apt/sources.list хостовой системы в создаваемый каталог образа гостя.


Предполагается, что все репозитарии, прописанные в sources.list, доступны по сети для хостовой машины. А из-за того, что был настроен мост, эти репозитарии будут доступны и для команд, запускаемых внутри гостевой системы.


4. Создать контейнер следующей командой:



sudo lxc-create -t astralinux-se -n <название_контейнера>



Название контейнера будет использоваться далее при его старте и остановке.


В параметре -t указан скрипт astralinux-se. Этот скрипт подготовлен разработчиками Astra Linux, и устанавливается вместе с пакетом lxc-astra. Благодаря ему, без проблем развертывается Astra Linux 1.7 в Astra Linux 1.6 (и другие комбинации дистрибутивов семейства Astra).


5. Вернуть обратно содержимое файла /etc/apt/sources.list хоста.



Использование


1. Для доступа к графике хоста из гостевой системы:


На хосте добавить в файл /var/lib/lxc/<название_контейнера>/config следующие строки:



lxc.mount.entry = tmpfs tmp tmpfs defaults

lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir

lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir

lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir,ro



На хосте добавить пользователя (какого?) в группу video.


Разрешить подключение к X-серверу хоста с гостевых систем (да и вообще с других хостов). Для этого перед командой запуска контейнера необходимо выполнить команду:



sudo xhost +local:root



2. Посмотреть список существующих контейнеров:



sudo lxc-ls



3. Запуск контейнера:



sudo lxc-start -n <имя_контейнера>



4. Проверка статусов контейнеров:



sudo lxc-ls -f



5. Вход в терминал контейнера (что пароль по умолчанию — astralinux):



ssh admin@<адрес_контейнера>



6. Установка средств разработки (пример):



sudo apt-get install gcc g++ gdb qt5-default qttools5-dev qt5-style-plugins qtmultimedia5-dev qtbase5-private-dev qtcreator



7. Запуск приложений контейнера удаленно, без консольного входа по ssh, одной командой:



ssh admin@<адрес_контейнера> "DISPLAY=:0 nohup <команда>"



8. Остановка контейнера:



sudo lxc-stop -n <имя_контейнера>



9. Уничтожение контейнера:



sudo lxc-destroy -n <имя_контейнера>



Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования