Шаг 1: Подготовка системы

# Обновляем список пакетов и систему
sudo apt update
sudo apt upgrade -y

# Устанавливаем базовые утилиты, которые могут пригодиться
sudo apt install -y curl wget gnupg software-properties-common

# Для Debian 13 так:
sudo apt install -y curl wget gnupg ca-certificates apt-transport-https

Шаг 2: Настраиваем репозиторий Backports

Внимание!
Для Debian 13 Шаг 2 не нужен

# Добавляем репозиторий backports
echo "deb http://deb.debian.org/debian bookworm-backports main" | sudo tee /etc/apt/sources.list.d/bookworm-backports.list

# Настраиваем приоритеты, чтобы избежать проблем с экспериментальными пакетами
sudo tee /etc/apt/preferences.d/90-bookworm-backports << EOF
Package: *
Pin: release a=bookworm-backports
Pin-Priority: 500

Package: incus*
Pin: release a=bookworm-backports
Pin-Priority: 1000

Package: *
Pin: release a=experimental
Pin-Priority: 1
EOF

# Обновляем список пакетов с учетом новых репозиториев
sudo apt update

Шаг 3: Установка Incus (без QEMU)

# Устанавливаем Incus без рекомендательных пакетов (исключаем QEMU)
sudo apt install -t bookworm-backports incus --no-install-recommends -y

# Для Debian 13:
sudo apt install incus --no-install-recommends -y

Шаг 4: Запуск службы Incus

# Запускаем службу Incus
sudo systemctl start incus incus.socket

# Включаем автозапуск
sudo systemctl enable incus incus.socket

# Проверяем статус
sudo systemctl status incus

Шаг 5: Настройка Incus

# Запускаем инициализацию с настройками по умолчанию
sudo incus admin init --auto

Что делает --auto:

Создает storage pool default с бэкендом dir

Создает сетевой мост incusbr0 с NAT

Включает IPv6

Настраивает API на локальный socket

Шаг 6: Проверка установки

# Проверяем, что демон работает
sudo systemctl status incus

# Проверяем список контейнеров (должен быть пустым)
sudo incus list

# Проверяем информацию о сервере
sudo incus info

Шаг 7: Настройка прав пользователя (опционально)

Чтобы не использовать sudo для каждой команды, добавьте своего пользователя в группу incus:

# Добавляем текущего пользователя в группу incus
sudo usermod -a -G incus-admin $USER

# Применяем изменения группы (или перелогиньтесь)
newgrp incus-admin

# Проверяем группы
# Должны видеть incus-admin в списке
groups

# Проверяем, что теперь можно работать без sudo
incus list

Шаг 8: Запуск первого контейнера

# Запускаем контейнер с Ubuntu 22.04
incus launch images:ubuntu/22.04 test-container

# Проверяем, что контейнер запустился
incus list

# Заходим в контейнер
incus exec test-container -- bash

# Внутри контейнера можно проверить систему
cat /etc/os-release
exit

Полезные команды для начала работы

# Просмотр доступных образов
incus image list images: | head -20

# Создание контейнера с конкретным дистрибутивом
incus launch images:debian/12 my-debian
incus launch images:alpine/3.18 my-alpine

# Остановка контейнера
incus stop test-container

# Удаление контейнера
incus delete test-container

# Просмотр информации о хранилище
incus storage list

# Просмотр сетевых настроек
incus network list

Если нужна поддержка виртуальных машин (позже)

# Установка QEMU для поддержки ВМ
sudo apt install -t bookworm-backports qemu-system-x86 -y

# Теперь можно запускать виртуальные машины
incus launch images:ubuntu/22.04 my-vm --vm

Возможные проблемы и решения

Проблема: Команда incus не найдена

# Перезагружаем или перелогиниваемся
sudo reboot
# или
newgrp incus

Проблема: Нет доступа к socket

# Проверяем группу пользователя
groups $USER
# Если нет incus, добавляем и перелогиниваемся
sudo usermod -a -G incus $USER
newgrp incus

Проверка успешной установки

После выполнения всех шагов у вас должен быть:

✅ Работающая команда incus

✅ Контейнер test-container в статусе "RUNNING"

✅ Доступ к Incus без sudo (если настроили группу)

Как узнать на каком порту слушает incus

Способ 1: Команда incus config

# Показывает текущий адрес и порт
incus config show | grep https_address

# Или конкретно
incus config get core.https_address

Способ 2: Системные утилиты

# Показывает все слушающие порты
sudo netstat -tlnp | grep incus

# Или с помощью ss (более современная)
sudo ss -tlnp | grep incus

# Ищем процесс incus
sudo lsof -i -P -n | grep incus

Способ 3: Проверка через systemd

# Смотрим статус службы
sudo systemctl status incus

# Или смотрим сокеты
sudo systemctl list-sockets | grep incus

Способ 4: Если Incus не слушает порт

# Проверяем текущую конфигурацию
incus config show

# Если порт не настроен, устанавливаем
sudo incus config set core.https_address ":8443"

# Перезапускаем
sudo systemctl restart incus

# Проверяем снова
sudo ss -tlnp | grep 8443

Способ 5: Проверка всех сетевых соединений

# Показывает все открытые порты
sudo netstat -tulpn

# Или только TCP порты
sudo netstat -tlnp

Пример вывода когда всё работает:

$ sudo ss -tlnp | grep incus
LISTEN 0      128          0.0.0.0:8443      0.0.0.0:*    users:(("incus",pid=1234,fd=10))

Это значит Incus слушает на порту 8443 на всех интерфейсах.

Если порт не настроен:

# Настраиваем порт
sudo incus config set core.https_address "0.0.0.0:8443"

# Или только локальный доступ
sudo incus config set core.https_address "127.0.0.1:8443"

# Перезапускаем
sudo systemctl restart incus

# Проверяем
sudo ss -tlnp | grep incus

Краткая памятка:

# УСТАНОВИТЬ порт (работает) ✅
sudo incus config set core.https_address ":8443"

# ПРОВЕРИТЬ что слушает (работает) ✅
sudo ss -tlnp | grep incus

# ПОСМОТРЕТЬ конфигурацию (только с sudo) ✅
sudo incus config show