Создание своего дистрибутива (Debian 11) с помощью Systemd-nspawn
sudo apt update
sudo apt upgrade
===========================================================
Установка необходимого ПО
Чтобы создать собственный дистрибутив, вам потребуется несколько инструментов. Установите их следующими командами:
sudo apt install debootstrap mmdebstrap squashfs-tools xorriso grub-pc-bin grub-efi-amd64-bin mtools systemd-container syslinux isolinux syslinux-efi
==========================================================
Создание базовой системы
Теперь вы готовы начать создание вашего собственного дистрибутива. Начните с создания базовой системы с помощью debootstrap:
sudo debootstrap --arch=amd64 bullseye /opt/mydistro http://deb.debian.org/debian/
---------------------------------------
Российские зеркала
debootstrap --arch=amd64 bullseye /opt/mydistro http://mirror.yandex.ru/debian/
debootstrap --arch=amd64 bullseye /opt/mydistro http://mirror.truenetwork.ru/debian/
debootstrap --arch=amd64 bullseye /opt/mydistro http://mirror.corbina.net/debian/
---------------------------------------
==========================================================
Теперь, когда у вас есть базовая система, зайдите в новую систему с помощью команды chroot:
sudo chroot /opt/mydistro
==========================================================
После этого может появиться предупреждение о локали: bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Нужно установить как минимум локаль en_US.UTF-8 (внутри chroot не действует команда sudo)
apt-get install locales
dpkg-reconfigure locales
В списке выберите en_US.UTF-8 и нажмите Enter для подтверждения выбора. Выбор осуществляется пробелом, а на Ок надо переключиться клавишей Tab
После этого система должна успешно установить и активировать эту локаль.
Можно выбрать несколько локалей, но en_US.UTF-8 выставить локалью по умолчанию
==========================================================
Задаём пароль root
passwd root
==========================================================
Выходим из chroot
exit
==========================================================
Останавливаем службу sshd на хостовой машине (освобождается порт 22)
sudo systemctl stop sshd
==========================================================
Останавливаем службу ntp на хостовой машине (освобождается порт 123)
sudo systemctl stop ntp
==========================================================
Запуск chroot с использованием systemd-nspawn:
После установки systemd-container, можно использовать systemd-nspawn для запуска chroot с поддержкой systemd:
sudo systemd-nspawn -b -D /opt/mydistro
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
Но для Yunohost и других сервисов, использующих фаерволл лучше эта команда:
sudo systemd-nspawn -b --capability=CAP_NET_ADMIN -D /opt/mydistro
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
После этого вводим логин root и заданный ранее пароль
----------------------------------------------------------
!!! Если нужно корректно выйти из systemd-nspawn:
Тройное нажатие Ctrl+]: В некоторых случаях, особенно если контейнер был запущен с -b (boot), тройное нажатие Ctrl+] может вывести вас из контейнера.
==========================================================
Проверяем, что systemd запущен
systemctl
systemctl
==========================================================
Для Yunohost подставляем рабочий репозиторий с PHP. Как это делается - в инструкции "Проблемы с PHP".
Устанавливаем ca-certificates
apt install ca-certificates
Обновляем пакеты
apt update
==========================================================
Устанавливаем ядро Linux и загрузчик GRUB:
apt install linux-image-amd64 grub-pc
==========================================================
Устанавливаем несколько утилит
apt install ca-certificates curl gnupg mc htop lsof net-tools wget
==========================================================
Устанавливаем Gnome
apt update
apt install gnome
При установке в запросе выбора языка, выбрать en
==========================================================
Устанавливаем Yunohost
wget -O /tmp/yunohost https://install.yunohost.org
/bin/bash /tmp/yunohost
==========================================================
Постустановка Yunohost
yunohost tools postinstall
Ответы на вопросы:
Main domain: yunohost.local
Admin username: yunohost
Admin full name: yunohost
New administration password: hert45ujw8p
Confirm new administration password: hert45ujw8p
==========================================================
После постустановки Yunohost опять подставит заблокированный репозиторий PHP.
Снова поменять, руководствуясь инструкцией "Проблемы с PHP"
Обновить пакеты
apt update
Устанавливаем Matrix Synapse
yunohost app install synapse --args "domain=synapse.local"
==========================================================
УДАЛЕНИЕ КОНТЕЙНЕРА
Выйдите из контейнера:
Убедитесь, что вы вышли из контейнера, если все задачи внутри контейнера завершены. Используйте команду:
bash
exit
Остановите все процессы systemd-nspawn:
Убедитесь, что контейнер не активен и все его процессы остановлены.
Остановите systemd-nspawn:resolvectl status
Если systemd-nspawn все еще работает, остановите его, используя:
sudo machinectl poweroff mydistro
Где mydistro - это имя вашего контейнера.
Удалите файлы контейнера:
Удалите каталог, который был использован для контейнера (/opt/mydistro в вашем случае):
bash
sudo rm -rf /opt/mydistro
Эти шаги удалят контейнер полностью, включая все файлы и настройки, связанные с ним. Убедитесь, что перед удалением вы закончили все задачи
=========================================================
==========================================================================
==========================================================================
ДОПОЛНИТЕЛЬНО
----------------------
Список доступных систем для debootstrap
ls -1 /usr/share/debootstrap/scripts/
Установка через debootstrap в chroot системы Ubuntu 20.04
# sudo apt-get install ubuntu-keyring (на Debian не сработает)
sudo debootstrap --arch=amd64 focal /opt/mydistro_ub http://archive.ubuntu.com/ubuntu/
После создания и запуска контейнера systemd-nspawn, надо включить там интернет этими командами:
systemctl enable systemd-resolved
systemctl start systemd-resolved
systemctl status systemd-resolved
resolvectl dns enp0s3 8.8.8.8 8.8.4.4 # (вместо enp0s3 ставим нужный сетевой интерфейс, находим его с помощью ip a)
resolvectl status
Далее надо добавить репозитории
echo "deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse" | sudo tee /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu focal-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu focal-security main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
Обновляем список пакетов
apt update
==========================================================================
==========================================================================
СОЗДАНИЕ ДИСТРИБУТИВА
----------------------
Создаёйте tar-архив файловой системы контейнера
sudo tar --numeric-owner -cvpzf debian-custom.tar.gz -C /opt/mydistro .
Подготовьте структуру для ISO-образа и скопируйте туда содержимое архива:
mkdir -p iso/custom
sudo tar -xvpzf debian-custom.tar.gz -C iso/custom
Для создания ISO-образа с поддержкой загрузки через BIOS и UEFI, вам нужны файлы vmlinuz, initrd.img, isolinux.bin, ldlinux.c32, и efi.img. Вот, как их получить:
1. Получение vmlinuz и initrd.img
Эти файлы можно найти в установленной системе Debian или загрузить из Debian netboot.
Из установленной системы:
Обычно они находятся в каталоге /boot:
bash
cp /boot/vmlinuz-* iso/custom/vmlinuz
cp /boot/initrd.img-* iso/custom/initrd.img
Из Debian netboot:
Скачайте файлы из Debian netboot.
bash
wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux -O iso/custom/vmlinuz
wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz -O iso/custom/initrd.img
2. Получение isolinux.bin и ldlinux.c32
Эти файлы можно получить из пакета syslinux:
bash
mkdir -p iso/custom/{isolinux,live}
# sudo apt-get install syslinux
cp /usr/lib/ISOLINUX/isolinux.bin iso/custom/isolinux/
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 iso/custom/isolinux/
cp /usr/lib/syslinux/modules/bios/menu.c32 iso/custom/isolinux/
cp /usr/lib/syslinux/modules/bios/libutil.c32 iso/custom/isolinux/
Скачайте ядро и initrd из Debian netboot репозитория:
mkdir -p /tmp/debian-netboot
cd /tmp/debian-netboot
wget http://ftp.debian.org/debian/dists/bullseye/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux -O vmlinuz
wget http://ftp.debian.org/debian/dists/bullseye/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz -O initrd.img
cd /home/имя_пользователя
Скопируйте скачанные файлы ядра и initrd в директорию live:
bash
cp /tmp/debian-netboot/vmlinuz iso/live/
cp /tmp/debian-netboot/initrd.img iso/live/
3. Создание efi.img с помощью grub-mkstandalone
Создайте файл efi.img с помощью команды grub-mkstandalone:
bash
#
sudo apt-get install grub-efi-amd64-bin
#
mkdir -p iso/custom/boot/grub
grub-mkstandalone --format=x86_64-efi --output=iso/custom/boot/grub/efi.img \
--locales="" --fonts="" "boot/grub/grub.cfg=grub.cfg"
4. Создание файла конфигурации grub.cfg
Создайте файл grub.cfg в текущем каталоге (где выполняется команда):
bash
cat <<EOF >grub.cfg
set timeout=10
menuentry "Install Debian" {
linux /vmlinuz boot=live
initrd /initrd.img
}
EOF
5. Создание файла конфигурации isolinux.cfg
Создайте файл isolinux.cfg:
bash
cat <<EOF >iso/custom/isolinux/isolinux.cfg
UI menu.c32
PROMPT 0
TIMEOUT 50
DEFAULT custom
6. Создание ISO-образа
Теперь, когда все файлы на месте, можно создать ISO-образ:
bash
xorriso -as mkisofs -o custom-debian.iso -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat \
iso/custom
Эти шаги должны обеспечить успешное создание ISO-образа с поддержкой загрузки через BIOS и UEFI.