
Загрузочный образ Debian – это не просто ISO-файл, а инструмент для развёртывания серверной инфраструктуры с минимальными зависимостями и максимальной гибкостью. В отличие от готовых сборок, собственный образ позволяет исключить ненужные пакеты (например, systemd-timesyncd или avahi-daemon), настроить ядро под специфическое оборудование и интегрировать критически важные драйверы на этапе установки. Это особенно актуально для серверов с аппаратными RAID-контроллерами (LSI MegaRAID, Adaptec) или сетевыми картами, требующими проприетарных модулей (ixgbe для Intel X550, bnx2x для Broadcom).
Процесс начинается с выбора базовой версии Debian. Для серверов рекомендуется использовать Debian 12 «Bookworm» с длительным сроком поддержки (LTS) или Debian 11 «Bullseye», если требуется совместимость с устаревшим ПО. Минимальный образ можно собрать на основе debootstrap, но для полноценного загрузочного носителя потребуется live-build – инструмент, позволяющий автоматизировать создание ISO с предустановленными пакетами, конфигурацией сети и даже предустановленными SSH-ключами. Пример минимального списка пакетов для сервера: linux-image-amd64, grub-efi, openssh-server, sudo, locales и ifupdown (вместо systemd-networkd для простоты отладки).
Ключевой этап – настройка preseed.cfg, который автоматизирует ответы на вопросы установщика. Например, для бездисковой установки на RAID-массив с LVM необходимо указать параметры разбиения дисков (d-i partman-auto/method string lvm), исключить подтверждение форматирования (d-i partman-lvm/confirm boolean true) и задать пароль root в зашифрованном виде (d-i passwd/root-password-crypted password $6$...). Для сетевой загрузки через PXE потребуется интеграция initrd с поддержкой nfsroot или isc-dhcp-server, а также настройка pxelinux.cfg/default с указанием пути к образу и параметров ядра (ip=dhcp root=/dev/nfs nfsroot=192.168.1.1:/srv/debian).
Оптимизация образа включает удаление временных файлов (apt clean), сжатие initramfs (COMPRESS=xz в /etc/initramfs-tools/initramfs.conf) и отключение ненужных сервисов (systemctl mask apt-daily.timer). Для проверки целостности образа используйте sha256sum и тестирование в виртуальной среде (QEMU с параметрами -m 2048 -enable-kvm). Готовый ISO можно записать на USB-накопитель с помощью dd if=debian-server.iso of=/dev/sdX bs=4M status=progress, но для серверов с UEFI обязательно проверьте наличие раздела EFI в образе (fdisk -l debian-server.iso).
Выбор и подготовка базового ISO-образа Debian для серверной установки
Для серверной установки Debian используйте минимальный образ *netinst* (сетевой установщик) с официального зеркала: debian-XX.X.X-amd64-netinst.iso, где XX.X.X – актуальная версия (например, 12.5.0). Этот образ весит ~300–500 МБ и содержит только базовые пакеты, что снижает риск уязвимостей и упрощает настройку под конкретные задачи. Избегайте образов *live* или *DVD-1* – они включают ненужные для сервера компоненты (графические окружения, офисные пакеты). Проверьте контрольную сумму SHA256 после загрузки: sha256sum debian-XX.X.X-amd64-netinst.iso – результат должен совпадать с данными на официальной странице. Для виртуализации (KVM, Proxmox) или bare-metal установки на современное оборудование выбирайте архитектуру *amd64*; для legacy-систем (до 2010 года) – *i386*.
Подготовьте загрузочный носитель с помощью dd или специализированных инструментов: dd if=debian-XX.X.X-amd64-netinst.iso of=/dev/sdX bs=4M status=progress && sync, где /dev/sdX – целевой диск (например, /dev/sdb). Для UEFI-систем убедитесь, что носитель отформатирован в FAT32 и содержит раздел ESP. При установке на RAID или LVM заранее создайте таблицу разделов с помощью fdisk или parted, так как netinst не поддерживает автоматическое разбиение для этих конфигураций. Если планируется установка без доступа к интернету, используйте образ *DVD-1* (4–5 ГБ), но вручную удалите лишние пакеты после установки: apt purge --auto-remove task-desktop task-laptop.
Настройка сетевых параметров и репозиториев в процессе создания образа

В chroot-окружении настройте сетевые интерфейсы через /etc/network/interfaces. Для статического IP используйте конфигурацию вида:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4.
Для DHCP достаточно iface eth0 inet dhcp. Проверьте доступность сети командой ping -c 3 deb.debian.org перед настройкой репозиториев.
Редактируйте /etc/apt/sources.list, указав зеркала с минимальной задержкой. Для Debian 12 (Bookworm) используйте:
deb http://deb.debian.org/debian bookworm main contrib non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free-firmware.
Исключите deb-src, если не планируете сборку пакетов из исходников. Обновите индексы репозиториев командой apt update и установите критически важные пакеты (apt install -y openssh-server sudo curl) до выхода из chroot.
Установка и конфигурация минимального набора пакетов для серверной среды
Минимальный набор пакетов для серверной среды Debian формируется на базе debootstrap с добавлением критически важных компонентов. Начните с установки базовой системы через:
debootstrap --arch=amd64 bookworm /mnt http://deb.debian.org/debian– для стабильной ветки (12.x).--variant=minbase– исключает рекомендуемые зависимости, сокращая образ на ~30%.
После монтирования /proc, /sys и /dev в целевую директорию (chroot /mnt), установите ядро и загрузчик:
apt install --no-install-recommends linux-image-amd64 grub2– ядро версии6.1.x(по умолчанию в Bookworm).grub-install /dev/sdX– заменитеsdXна целевой диск (например,vdaдля KVM).update-grub– генерирует конфигурацию загрузчика.
Для сетевой связности добавьте ifupdown и настройте интерфейсы вручную. Пример конфигурации /etc/network/interfaces для статического IP:
auto eth0 iface eth0 inet static address 192.168.1.10/24 gateway 192.168.1.1 dns-nameservers 8.8.8.8 1.1.1.1
Установите resolvconf для управления DNS (apt install resolvconf) и отключите systemd-resolved, если не требуется динамическое разрешение имен (systemctl disable systemd-resolved). Для IPv6 добавьте аналогичный блок с inet6.
Базовый набор инструментов включает:
openssh-server– доступ по SSH с предварительной генерацией ключей (ssh-keygen -t ed25519).sudo– для делегирования прав безroot(usermod -aG sudo username).locales– минимальная локальen_US.UTF-8(dpkg-reconfigure locales).tzdata– временная зона (ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime).
Отключите ненужные сервисы по умолчанию:
systemctl disable --now avahi-daemon cups cron atd
Для мониторинга установите htop и net-tools (ifconfig, netstat), но избегайте rsyslog – используйте journald с ограничением размера логов (journalctl --vacuum-size=100M).
Оптимизируйте APT для серверного использования:
- Отключите рекомендуемые пакеты в
/etc/apt/apt.conf.d/01norecommends:
APT::Install-Recommends "false"; APT::Install-Suggests "false";
- Настройте кеширование пакетов (
apt install apt-cacher-ng) для локального зеркала. - Обновите списки пакетов и очистите кеш:
apt update && apt full-upgrade -y && apt autoremove --purge -y && apt clean
Для автоматических обновлений установите unattended-upgrades и настройте в /etc/apt/apt.conf.d/50unattended-upgrades:
Unattended-Upgrade::Origins-Pattern {
"origin=Debian,codename=${distro_codename},label=Debian-Security";
};
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Завершите конфигурацию созданием образа:
- Размонтируйте файловые системы:
umount -R /mnt
- Создайте сжатый образ через
tarилиdd:
tar -czvf debian-server-minimal.tar.gz -C /mnt . # или для raw-образа: dd if=/dev/sdX bs=4M status=progress | gzip > debian-server.img.gz
Для виртуальных сред (KVM/QEMU) используйте virt-sparsify для уменьшения размера образа:
virt-sparsify --compress debian-server.img debian-server-sparse.qcow2
Автоматизация начальной настройки с помощью preseed-файла или cloud-init
Preseed-файлы в Debian позволяют полностью автоматизировать установку системы, включая разбиение дисков, выбор пакетов и настройку пользователей. Для генерации базового шаблона используйте команду debconf-get-selections --installer > preseed.cfg, затем отредактируйте его, добавив критические параметры:
d-i partman-auto/disk string /dev/sda– принудительное использование конкретного диска;d-i partman-auto/method string lvm– автоматическое создание LVM-разметки;d-i pkgsel/include string openssh-server sudo– установка необходимых пакетов без запроса.
Для загрузки preseed-файла через сеть добавьте в параметры загрузчика preseed/url=http://example.com/preseed.cfg. Убедитесь, что файл доступен по HTTP/HTTPS без аутентификации, иначе установщик прервется с ошибкой.
Cloud-init – альтернатива preseed для облачных сред и виртуализации. Конфигурация задается в YAML-файле user-data, который поддерживает модули для:
- Настройки сети (
network-config): статические IP, VLAN, bonding; - Создания пользователей и SSH-ключей (
users):ssh_authorized_keysдля беспарольного доступа; - Установки пакетов (
packages): список пакетов дляapt; - Выполнения скриптов (
runcmd): команды после первой загрузки.
Пример минимальной конфигурации для cloud-init:
#cloud-config users: - name: admin sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... packages: - qemu-guest-agent - fail2ban runcmd: - [ systemctl, enable, --now, qemu-guest-agent ]
Для проверки корректности cloud-init используйте cloud-init schema --config-file user-data. В виртуальных средах (KVM, Proxmox) передавайте user-data через метаданные ISO-образа или NoCloud datasource. В облаках (AWS, OpenStack) файл автоматически подтягивается из сервиса метаданных. При отладке логов используйте journalctl -u cloud-init и /var/log/cloud-init.log.
Ключевое отличие preseed и cloud-init: первый работает только на этапе установки, второй – после загрузки системы. Для гибридных сценариев (например, установка на bare metal с последующей облачной интеграцией) комбинируйте оба подхода: preseed для базовой установки, cloud-init для динамической настройки. В Debian 12 cloud-init по умолчанию не устанавливается – добавьте его в список пакетов preseed или через late_command:
d-i preseed/late_command string \ in-target apt-get install -y cloud-init; \ in-target systemctl enable cloud-init
Создание пользовательских скриптов для пост-установочной конфигурации

Начните с проверки зависимостей. В первом скрипте добавьте проверку наличия интерпретатора и прав выполнения: #!/bin/bash. Для Python используйте
if [ "$(id -u)" -ne 0 ]; then
echo "Требуются права root" >&2
exit 1
fi#!/usr/bin/env python3 и модуль argparse для обработки аргументов командной строки, если скрипт предполагает интерактивность.
Автоматизируйте установку пакетов через apt с предварительным обновлением списков репозиториев. Пример для минимального набора инструментов: apt update && apt install -y curl wget git tmux htop fail2ban ufw. Исключите интерактивные диалоги, добавив DEBIAN_FRONTEND=noninteractive перед командами apt, чтобы избежать остановок на запросах подтверждения.
Конфигурируйте сервисы через шаблоны файлов. Храните эталонные конфиги в /usr/local/etc/templates/ и копируйте их в /etc/ с заменой переменных. Например, для sshd_config: sed -e "s/^#PermitRootLogin.*/PermitRootLogin no/" \
-e "s/^#PasswordAuthentication.*/PasswordAuthentication no/" \
/usr/local/etc/templates/sshd_config > /etc/ssh/sshd_config. Перезапускайте сервисы только после проверки синтаксиса: sshd -t && systemctl restart sshd.
Создавайте пользователей и группы с заранее определёнными UID/GID, чтобы избежать конфликтов в кластерных средах. Используйте groupadd -g 2000 devops && useradd -u 2000 -g devops -m -s /bin/bash devops. Для SSH-доступа добавляйте публичные ключи из заранее подготовленного файла: mkdir -p /home/devops/.ssh && cat /usr/local/etc/keys/devops.pub >> /home/devops/.ssh/authorized_keys && chown -R devops:devops /home/devops/.ssh.
Настройте брандмауэр ufw с минимальным набором правил. Пример для веб-сервера: ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable. Логируйте все изменения в файл /var/log/post-install.log с временными метками: exec >> /var/log/post-install.log 2>&1.
echo "$(date '+%Y-%m-%d %H:%M:%S') - Настройка ufw завершена"
Завершите скрипты проверкой успешности выполнения. Добавьте в конец каждого блока команду if [ $? -ne 0 ]; then. Для комплексных сценариев используйте
echo "Ошибка в блоке [имя_блока]" >&2
exit 1
fiset -e в начале скрипта, чтобы прервать выполнение при первой ошибке. Храните резервные копии изменённых файлов в /var/backups/post-install/ с датой в имени: cp /etc/ssh/sshd_config /var/backups/post-install/sshd_config_$(date +%F).bak.
