Создание собственного дистрибутива на базе Debian

Этот подробный гайд проведёт вас через весь процесс создания вашего собственного дистрибутива Linux на основе Debian. Мы рассмотрим все этапы от подготовки рабочей среды до создания финального ISO-образа.

Содержание

1. Введение

Создание собственного дистрибутива Linux — это увлекательный процесс, который позволяет вам создать операционную систему, точно соответствующую вашим потребностям или потребностям вашей организации. Debian является отличной основой для этого благодаря своей стабильности, безопасности и обширному репозиторию программного обеспечения.

Примечание: Этот гайд предполагает, что у вас есть базовые знания Linux и командной строки. Если вы новичок, рекомендуем сначала ознакомиться с основами работы в Linux.

Почему Debian?

Debian предлагает несколько преимуществ как основа для вашего дистрибутива:

2. Подготовка рабочей среды

Системные требования

Для создания дистрибутива вам понадобится:

Установка необходимых инструментов

Начнем с установки основных инструментов, необходимых для создания дистрибутива:

sudo apt update
sudo apt install debootstrap squashfs-tools xorriso isolinux syslinux-common \
    grub-pc-bin grub-efi-amd64-bin mtools live-build cdebootstrap
sudo dnf update
sudo dnf install debootstrap squashfs-tools xorriso syslinux grub2 mtools genisoimage
sudo pacman -Syu
sudo pacman -S debootstrap squashfs-tools libisoburn syslinux grub mtools

Создание рабочей директории

Теперь создадим структуру директорий для нашего проекта:

mkdir -p ~/mydistro/{chroot,iso/{boot,isolinux,live}}
cd ~/mydistro

Совет: Хорошей практикой является использование системы контроля версий (например, Git) для отслеживания изменений в ваших конфигурационных файлах.

3. Создание базовой системы

Теперь мы создадим базовую минимальную систему Debian, которую затем будем настраивать.

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

Debootstrap — это инструмент, который устанавливает базовую систему Debian в подкаталог другой уже установленной системы.

Шаг 1: Создание базовой системы
sudo debootstrap --arch=amd64 --variant=minbase bullseye ~/mydistro/chroot http://deb.debian.org/debian/

Эта команда создаст минимальную установку Debian 11 "Bullseye". Вы можете заменить "bullseye" на другую версию Debian, такую как "bookworm" (Debian 12).

Шаг 2: Подготовка chroot-окружения
sudo mount --bind /dev ~/mydistro/chroot/dev
sudo mount --bind /dev/pts ~/mydistro/chroot/dev/pts
sudo mount --bind /proc ~/mydistro/chroot/proc
sudo mount --bind /sys ~/mydistro/chroot/sys

Эти команды монтируют необходимые системные директории в нашу chroot-среду.

Шаг 3: Вход в chroot-окружение
sudo chroot ~/mydistro/chroot /bin/bash

Теперь вы находитесь внутри вашей новой системы и можете настраивать её как root.

Настройка основных компонентов

Внутри chroot-окружения настроим основные компоненты системы:

# Настройка имени хоста
echo "mydistro" > /etc/hostname

# Настройка источников пакетов
cat > /etc/apt/sources.list << EOF
deb http://deb.debian.org/debian bullseye main contrib non-free
deb http://deb.debian.org/debian-security bullseye-security main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
EOF

# Обновление системы
apt update
apt upgrade -y

# Установка языковых пакетов и локалей
apt install -y locales
dpkg-reconfigure locales
# В интерактивном меню выберите нужные локали, например, ru_RU.UTF-8
# и установите её как локаль по умолчанию

# Установка временной зоны
apt install -y tzdata
dpkg-reconfigure tzdata
# Выберите свой регион и временную зону

# Установка ядра и загрузчика
apt install -y linux-image-amd64 live-boot systemd-sysv

4. Настройка и кастомизация

Установка рабочего окружения

Теперь установим графическое окружение. В зависимости от ваших предпочтений, вы можете выбрать одно из следующих:

apt install -y gnome-core gdm3 firefox-esr NetworkManager
apt install -y kde-standard sddm firefox-esr NetworkManager
apt install -y xfce4 xfce4-goodies lightdm firefox-esr network-manager
apt install -y xorg openbox lightdm tint2 nitrogen firefox-esr network-manager

Установка дополнительного программного обеспечения

Добавьте программное обеспечение, которое должно быть включено в ваш дистрибутив:

# Базовые утилиты
apt install -y sudo nano vim-tiny less file htop gdebi gparted synaptic apt-utils

# Мультимедиа и офисные приложения
apt install -y vlc gimp libreoffice-writer libreoffice-calc

# Инструменты разработки (опционально)
apt install -y git build-essential

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

Создадим пользователя по умолчанию и настроим систему:

# Создание пользователя
adduser liveuser
# Следуйте инструкциям для установки пароля и информации о пользователе

# Добавление пользователя в группу sudo
usermod -aG sudo liveuser

# Настройка автоматического входа для live-системы
mkdir -p /etc/systemd/system/getty@tty1.service.d/
cat > /etc/systemd/system/getty@tty1.service.d/override.conf << EOF
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin liveuser --noclear %I \$TERM
EOF

Внимание: Автоматический вход должен использоваться только для live-системы. В установленной системе это создаст угрозу безопасности.

5. Управление пакетами

Создание собственного репозитория (опционально)

Если вы хотите распространять собственные пакеты с вашим дистрибутивом, вы можете создать свой репозиторий:

# Установка необходимых инструментов
apt install -y reprepro gpg

# Создание структуры репозитория
mkdir -p /var/www/repos/apt/debian
cd /var/www/repos/apt/debian

# Создание ключа GPG для подписи пакетов
gpg --gen-key
# Следуйте инструкциям для создания ключа

# Экспорт открытого ключа
gpg --export -a "Ваше имя" > mydistro-key.asc

Установка специфических пакетов

Для создания действительно кастомного дистрибутива вы можете захотеть установить некоторые пакеты из других источников:

# Добавление стороннего репозитория (пример для VSCode)
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list

apt update
apt install -y code

Создание метапакетов

Метапакеты позволяют группировать несколько пакетов как единое целое, что упрощает установку и обновление:

# Установка инструментов для создания пакетов
apt install -y equivs

# Создание конфигурации метапакета
mkdir -p /tmp/metapackage
cd /tmp/metapackage
equivs-control mydistro-desktop.control

# Редактирование файла конфигурации
nano mydistro-desktop.control

Содержимое файла конфигурации:

Section: metapackages
Priority: optional
Standards-Version: 3.9.2
Package: mydistro-desktop
Version: 1.0
Maintainer: Ваше Имя <ваш.email@example.com>
Depends: firefox-esr, libreoffice-writer, libreoffice-calc, vlc, gimp
Description: Метапакет рабочего стола MyDistro
 Этот метапакет устанавливает все необходимые компоненты
 стандартного рабочего окружения MyDistro.

Затем создайте пакет:

# Создание пакета
equivs-build mydistro-desktop.control

# Установка пакета
dpkg -i mydistro-desktop_1.0_all.deb
apt install -f

6. Брендинг и визуальный стиль

Создание темы оформления

Для создания уникального внешнего вида вашего дистрибутива вы можете настроить темы оформления:

# Установка инструментов для настройки тем
apt install -y gtk2-engines-murrine gtk2-engines-pixbuf

# Создание директории для тем
mkdir -p /usr/share/themes/MyDistro
# Здесь вы размещаете файлы вашей темы GTK

Настройка Plymouth (экран загрузки)

Plymouth отвечает за отображение графического экрана загрузки:

# Установка Plymouth
apt install -y plymouth plymouth-themes

# Создание темы Plymouth
mkdir -p /usr/share/plymouth/themes/mydistro

# Создание конфигурационного файла темы
cat > /usr/share/plymouth/themes/mydistro/mydistro.plymouth << EOF
[Plymouth Theme]
Name=MyDistro
Description=MyDistro Boot Screen
ModuleName=script

[script]
ImageDir=/usr/share/plymouth/themes/mydistro
ScriptFile=/usr/share/plymouth/themes/mydistro/mydistro.script
EOF

# Создание скрипта Plymouth
cat > /usr/share/plymouth/themes/mydistro/mydistro.script << EOF
Window.SetBackgroundTopColor(0.0, 0.0, 0.0);
Window.SetBackgroundBottomColor(0.0, 0.0, 0.0);

logo.image = Image("logo.png");
logo.sprite = Sprite(logo.image);
logo.sprite.SetX(Window.GetWidth() / 2 - logo.image.GetWidth() / 2);
logo.sprite.SetY(Window.GetHeight() / 2 - logo.image.GetHeight() / 2);
EOF

# Установка темы по умолчанию
plymouth-set-default-theme -R mydistro

Примечание: Вам понадобится создать логотип (logo.png) для вашего дистрибутива и поместить его в директорию темы Plymouth.

Настройка обоев рабочего стола и логотипов

Кастомизация рабочего стола:

# Создание директории для обоев
mkdir -p /usr/share/backgrounds/mydistro

# Копирование изображений фона
# (предполагается, что у вас есть файл wallpaper.jpg)
cp /path/to/wallpaper.jpg /usr/share/backgrounds/mydistro/

# Установка обоев по умолчанию
if [ -d /etc/skel/.config ]; then
    mkdir -p /etc/skel/.config
fi

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

apt install -y dconf-cli
mkdir -p /etc/skel/.config/dconf
cat > /etc/skel/.config/dconf/user.d/background.conf << EOF
[org/gnome/desktop/background]
picture-uri='file:///usr/share/backgrounds/mydistro/wallpaper.jpg'
picture-options='stretched'
EOF
mkdir -p /etc/skel/.config/plasma-org.kde.plasma.desktop-appletsrc
cat > /etc/skel/.config/plasma-org.kde.plasma.desktop-appletsrc << EOF
[Containments][1][Wallpaper][org.kde.image][General]
Image=file:///usr/share/backgrounds/mydistro/wallpaper.jpg
EOF
mkdir -p /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml
cat > /etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml << EOF


  
    
      
        
        
      
    
  

EOF

7. Создание ISO-образа

Подготовка к созданию ISO

Перед созданием ISO-образа нужно выполнить очистку и подготовку системы:

# Очистка кэша apt
apt clean

# Удаление временных файлов
rm -rf /tmp/*

# Выход из chroot
exit

Создание squashfs

Теперь создадим сжатый образ файловой системы:

# Отмонтирование системных директорий
sudo umount ~/mydistro/chroot/dev/pts
sudo umount ~/mydistro/chroot/dev
sudo umount ~/mydistro/chroot/proc
sudo umount ~/mydistro/chroot/sys

# Создание squashfs образа
sudo mksquashfs ~/mydistro/chroot ~/mydistro/iso/live/filesystem.squashfs -comp xz -e boot

Настройка загрузчика

Настроим GRUB для загрузки нашего дистрибутива:

# Копирование ядра и initrd из chroot
sudo cp ~/mydistro/chroot/boot/vmlinuz-* ~/mydistro/iso/boot/vmlinuz
sudo cp ~/mydistro/chroot/boot/initrd.img-* ~/mydistro/iso/boot/initrd

# Настройка ISOLINUX
sudo cp /usr/lib/ISOLINUX/isolinux.bin ~/mydistro/iso/isolinux/
sudo cp /usr/lib/syslinux/modules/bios/*.c32 ~/mydistro/iso/isolinux/

# Создание конфигурации isolinux
cat > ~/mydistro/iso/isolinux/isolinux.cfg << EOF
UI menu.c32
PROMPT 0
TIMEOUT 30
DEFAULT mydistro

LABEL mydistro
  MENU LABEL Start MyDistro
  LINUX /boot/vmlinuz
  INITRD /boot/initrd
  APPEND boot=live components quiet splash\n\nLABEL mydistro_nomodeset
  MENU LABEL Start MyDistro (Safe Graphics)\n  LINUX /boot/vmlinuz\n  INITRD /boot/initrd\n  APPEND boot=live components quiet splash nomodeset\nEOF

Создание ISO-образа

Теперь создадим загрузочный ISO-образ:

# Создание ISO образа
sudo xorriso -as mkisofs -r \
    -J -joliet-long \
    -l -iso-level 3 \
    -partition_offset 16 \
    -publisher "MyDistro" \
    -A "MyDistro Live" \
    -b isolinux/isolinux.bin \
    -c isolinux/boot.cat \
    -no-emul-boot \
    -boot-load-size 4 \
    -boot-info-table \
    -o ~/mydistro.iso \
    ~/mydistro/iso/

Примечание: После создания ISO-образа рекомендуется проверить его в виртуальной машине перед распространением.

8. Тестирование

Тестирование в виртуальной машине

Перед распространением важно тщательно протестировать ваш дистрибутив:

Базовое тестирование
  • Проверка загрузки системы
  • Тестирование работы сети
  • Проверка графического интерфейса
  • Тестирование установленных приложений
Расширенное тестирование
  • Проверка обновления системы
  • Тестирование установки дополнительных пакетов
  • Проверка работы с различными видами оборудования
  • Тестирование локализации

Внимание: Убедитесь, что вы протестировали все сценарии использования, особенно в режиме Live и после установки на жёсткий диск.

9. Распространение

Подготовка к распространению

Перед распространением вашего дистрибутива:

# Создание контрольных сумм
cd ~/
md5sum mydistro.iso > mydistro.iso.md5
sha256sum mydistro.iso > mydistro.iso.sha256

Создание документации

# Создание директории для документации
mkdir -p ~/mydistro-docs
cat > ~/mydistro-docs/README.md << EOF
# MyDistro Linux

## О дистрибутиве
MyDistro - это кастомный дистрибутив на базе Debian, созданный для...

## Системные требования
- Процессор: 64-bit x86
- ОЗУ: минимум 2 ГБ
- Место на диске: минимум 20 ГБ

## Установка
1. Загрузите ISO-образ
2. Создайте загрузочный USB-накопитель
3. Загрузитесь с USB и следуйте инструкциям

## Поддержка
Если у вас возникли проблемы, посетите наш форум поддержки...
EOF

10. Поддержка и обновление

План поддержки

Разработайте план поддержки вашего дистрибутива:

Автоматизация обновлений

# Создание скрипта для сборки обновлённого ISO
cat > ~/update-iso.sh << EOF
#!/bin/bash

# Обновление пакетов в chroot
sudo chroot ~/mydistro/chroot apt update
sudo chroot ~/mydistro/chroot apt upgrade -y

# Очистка
sudo chroot ~/mydistro/chroot apt clean
sudo chroot ~/mydistro/chroot rm -rf /tmp/*

# Создание нового squashfs
sudo mksquashfs ~/mydistro/chroot ~/mydistro/iso/live/filesystem.squashfs -comp xz -e boot

# Создание нового ISO
sudo xorriso -as mkisofs -r \
    -J -joliet-long \
    -l -iso-level 3 \
    -partition_offset 16 \
    -publisher "MyDistro" \
    -A "MyDistro Live" \
    -b isolinux/isolinux.bin \
    -c isolinux/boot.cat \
    -no-emul-boot \
    -boot-load-size 4 \
    -boot-info-table \
    -o ~/mydistro-\$(date +%Y%m%d).iso \
    ~/mydistro/iso/
EOF

chmod +x ~/update-iso.sh

Совет: Создайте автоматизированный процесс сборки и тестирования для упрощения выпуска обновлений.