Установка и использование LXD на Linux

Обновлено и опубликовано Опубликовано:

Используемые термины: LXDLinux.

В рамках данной инструкции мы рассмотрим установку LXD на различные дистрибутивы Linux, а также основные команды для работы с ним.

Установка LXD

Рассмотрим несколько вариантов систем на основе DEB и RPM.

Ubuntu / Debian

Установка может быть выполнена из встроенного репозитория:

apt update

apt install lxd

РЕД ОС

Установка может быть выполнена из встроенного репозитория:

yum install lxd

Разрешаем и запускаем сервис:

systemctl enable lxd --now

Сборка из исходников (Astra Linux, Ubuntu, Rocky Linux)

В репозиториях некоторых дистрибутивов Linux может не быть пакета lxd. Например, в Rocky (RPM-base) и Astra (DEB-base).

В инструкциях по установки для этих систем рекомендуется использовать snap, но мы рассмотрим вариант установки из исходников.

Нам понадобятся некоторые пакеты для работы:

  • git — для загрузки исходников с официального сайта.
  • make — для сборки.
  • attr — позволяет управлять расширенными атрибутами файловой системы. Нужен для запуска и работы lxd.
  • dnsmasq — пакет, позволяющий развернуть DNS-сервер с дополнительными возможностями, на вроде, подмены адреса по условию, маршрутизации dns-запросов и другими. Нужен для инициализации и работы lxd.

В зависимости от дистрибутива, для установки используем разные команды:

а) RPM-base:

dnf install git make attr dnsmasq

б) DEB-base:

apt install git make attr dnsmasq

Система может вернуть ошибку запуска dnsmasq. Как правило, это из-за того, что 53 порт занят службой systemd-resolved. Отключаем ее:

systemctl disable systemd-resolved --now

Теперь можно запустить dnsmasq:

systemctl start dnsmasq

Также нам нужны пакеты для сборки.

Их мы также будем устанавливать разными командами для разных типов Linux.

а) RPM-base:

dnf install --enablerepo=powertools autoconf automake go libtool lz4-devel sqlite-devel libuv libcap-devel ShellCheck libacl-devel libudev-devel lxc-devel libuv-devel

б) DEB-base:

apt install autoconf automake golang libtool liblz4-dev libsqlite3-dev libuv1 libuv1-dev libcap-dev shellcheck libacl1-dev libudev-dev lxc-dev

Необходимые пакеты установлены. Идем дальше.

Проверяем версию go:

go version

Она должна быть выше версии 1.16.

Если версия golang ниже, то выполняем следующие действия.

На странице разработчика копируем ссылку на последнюю версию go. С помощью скопированной ссылки качаем архив:

wget https://go.dev/dl/go1.19.4.linux-amd64.tar.gz

Распакуем архив:

tar xzf go*.tar.gz -C /usr/local

Откроем на редактирование файл:

vi /etc/profile

И добавим в него:

GOROOT=/usr/local/go
GOPATH=~/.go
PATH=$PATH:$GOROOT/bin:$GOPATH/bin

И применим данные настройки:

source /etc/profile

Чтобы использовался по умолчанию новый go, вводим две команды:

update-alternatives --install "/usr/bin/go" "go" "/usr/local/go/bin/go" 0

update-alternatives --set go /usr/local/go/bin/go

Снова проверяем версию go:

go version 

Копируем проект:

git clone https://github.com/lxc/lxd

Переходим в загруженный каталог:

cd lxd/

Собираем зависимые файлы и библиотеки:

make deps

В итоге, мы должны увидеть просьбу использовать следующие системные переменные:

export CGO_CFLAGS="-I/root/go/deps/raft/include/ -I/root/go/deps/dqlite/include/"
export CGO_LDFLAGS="-L/root/go/deps/raft/.libs -L/root/go/deps/dqlite/.libs/"
export LD_LIBRARY_PATH="/root/go/deps/raft/.libs/:/root/go/deps/dqlite/.libs/"
export CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"

Данные опции могут иметь разные значения в зависимости от операционной системы. Скопируйте и вставьте те строки, которые вам вернул сборщик.

Собираем lxd:

make

В итоге, мы должны увидеть сообщение:

LXD built successfully

Скопируем полученную сборку в каталог /opt:

mv $(go env GOPATH) /opt/lxd

Создадим конфигурационный файл для добавления пути в системную переменную PATH:

vi /etc/profile.d/lxd.sh

export PATH="${PATH}:/opt/lxd/bin"

Создаем файл для добавления пути к динамическим библиотекам, нужным для работы lxd:

vi /etc/ld.so.conf.d/lxd.conf

/opt/lxd/deps/dqlite/.libs
/opt/lxd/deps/raft/.libs

Применяем настройку для динамических библиотек:

ldconfig

Для старта сервиса lxd создадим юнит:

vi /etc/systemd/system/lxd.service

[Unit]
Description=LXD Service
After=network.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/opt/lxd/bin/lxd
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

Разрешим автозапуск и стартуем сервис:

systemctl enable lxd --now

Проверим состояние:

systemctl status lxd

Инициализация после установки

Если мы собирали LXD из исходников, нам нужно применить настройки PATH, которые были указаны в файле каталога profile.d. Для этого либо перезайдем под пользователем root:

sudo su -

* на конце - обязателен.

Либо вводим:

source /etc/profile.d/lxd.sh

Теперь вводим команду для инициализации lxd:

lxd init

Программа работает в интерактивном режиме и начнем задавать вопросы. Можно ответить по умолчанию, нажав Enter или дать свои ответы:

Would you like to use LXD clustering? (yes/no) [default=no]: 
Do you want to configure a new storage pool? (yes/no) [default=yes]: 
Name of the new storage pool [default=default]: 
Name of the storage backend to use (dir, lvm) [default=dir]: 
Would you like to connect to a MAAS server? (yes/no) [default=no]: 
Would you like to create a new local network bridge? (yes/no) [default=yes]: 
What should the new bridge be called? [default=lxdbr0]: 
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
Would you like the LXD server to be available over the network? (yes/no) [default=no]: 
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: 
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: 

Если инициализация пройдет успешно, система должна вернуть пустую строку.

Для завершения настройки, открываем файл:

vi /etc/subuid

И добавляем:

root:1000000:1000000000
lxd:1000000:1000000000

И также с файлом:

vi /etc/subgid

root:1000000:1000000000
lxd:1000000:1000000000

Основные команды

Разобьем команды на группы.

Получение информации

1. Список контейнеров:

lxc list

2. Серверы, с которых можно получить образы:

lxc remote list

3. Список образов, доступных для загрузки и использования:

lxc image list <сервер>:

Например:

lxc image list images:

Список конкретных образов:

lxc image list <сервер>: <название образа>

Например, для Ubuntu:

lxc image list images: ubuntu

4. Получить информацию о контейнере:

lxc info <имя контейнера>

Например:

lxc info rockylinux/8

5. Посмотреть лог контейнера:

lxc info --show-log <контейнер>

Работа с контейнерами

1. Создание и запуск контейнера на основе образа:

lxc launch <сервер>:<имя образа> <как назвать контейнер>

Например:

lxc launch images:rockylinux/8 rocky

2. Запуск / Перезапуск / Остановка / Приостановка:

lxc <команда> <контейнер>

Например:

lxc start ubuntu

lxc restart rockylinux

lxc stop debian

lxc pause centos

3. Редактирование конфигурации:

lxc config edit <контейнер>

Например:

lxc config edit rocky

4. Подключиться к контейнеру:

lxc exec <контейнер> <оболочка>

Например:

lxc exec rocky bash

Читайте также

Другие инструкции по схожей тематике:

1. Установка OpenVZ на CentOS.

2. Установка Docker на Linux.

3. Установка podman на Linux.

# Linux # Серверы # Виртуализация # DevOps
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет