Чтобы статья не развалилась на куски, мы четко зафиксируем задачу: собрать свой rootfs с рабочим столом MATE, простым текстовым редактором и браузером под свой ноутбук или ПК. Все это лирика, вернемся к нашему сборщику debootstrap.
Чтобы установить его, введите в терминале:
apt install -y debootstrap

Чтобы приступить к созданию образа, нам нужно вызвать debootstrap с определенными командами:
debootstrap stable /path/to/rootfs http://deb.debian.org/debian/
Где stable— это последний стабильный выпуск, /path/to/rootfs — путь, где будет лежать наш rootfs, а http://deb.debian.org/debian/ — репозиторий или зеркало, откуда будут скачиваться пакеты.
Note: использовать --variant=minbase в наших целях противопоказано, он не устанавливает некоторые критические части, что в будущем может привести к отсутствию звука, как пример. Дальше остается только ждать, пока все скачается, распакуется и появится строчка:
I: Base system installed successfully.
После распаковки нашего базового образа нам нужно в него «войти», для этого мы будем использовать chroot. Просто так написать chroot /path/to/rootfs не выйдет: установщику apt, как и многим утилитам, в процессе настройки и конфигурации нужен доступ к ядру системы (VFS ядра, если быть точным). Для оживления нашего rootfs будем подключать системные папки /dev, /proc, /sys.
mount --rbind /dev /path/to/rootfs/dev mount --make-rslave /path/to/rootfs/dev # конкретно в моем случае это было /srv/main00 mount -t proc proc /path/to/rootfs/proc mount --rbind /sys /path/to/rootfs/sys mount --make-rslave /path/to/rootfs/sys # --make-rslave нужен для правильного размонтирования в конце
Все приготовления закончены, заходим в наш rootfs командой:
chroot /path/to/rootfs
Чтобы не ставить мусор в виде рекомендованных пакетов, нужно добавить правило в пакетный менеджер apt. Напишите nano /etc/apt/apt.conf.d/99no-recommends и в окне вставьте:
APT::Install-Recommends "false"; APT::Install-Suggests "false";

Делаем apt update и начинаем ставить пакеты. Для контекста: в Debian есть зависимые пакеты, рекомендательные, советуемые и мета-пакеты. Зависимые — это обязательная часть ПО, без которой оно даже не запустится. Рекомендательные — это иконки, шрифты или иные пакеты, влияющие на функционал ПО или дополняющие его. Советуемые (Suggested packages) пакеты аналогичны рекомендованным, но с еще большим количеством мусора. Мета-пакеты — просто пакеты-заглушки, объединяющие другие зависимости в один пакет. Яркий пример — firmware-linux, ставящий большую часть распространенных прошивок.
Подготовка завершена, приступаем к установке нужного ПО в наш rootfs:
apt install -y mate-core l3afpad firefox-esr locales-all
Note: мы не ставим все языки и кодировки текста и оставляем стандартный C.utf-8, но без всех локалей некоторое ПО может не запускаться.
mate-core обозреваемый в статье не имеет в зависимых пакетах важные части без которых система не загрузится до рабочего стола, чтобы избавиться от прописования cli комманд для подключения к интернету и успешно загрузиться, нужно вручную установить x11 и апплеты:
apt install -y xorg lightdm network-manager-gnome mate-media mate-utils # Три последних нужны для минимального трея сети и звука
Далее определяемся с прошивками. Чтобы apt увидел несвободные бинарные компоненты, нужно внести изменения в файл /etc/apt/sources.list. Просто откройте его через nano /etc/apt/sources.list и допишите в конец non-free-firmware

Система у нас минималистичная, и у нас есть два пути: простой и банальный, занимающий больше места (ставим мета-пакет firmware-linux и забываем, что это такое), либо идем сложным путем. Здесь нет мета-пакетов, и придется найти, из чего состоит наш ПК/ноутбук, его видеокарту и сетевые адаптеры. Например, если видеокарта у нас AMD, мы ставим пакет firmware-amd-graphics, если сетевая карточка или свисток от Realtek — ставим firmware-realtek (парадокс, но он содержит прошивки еще и для аудиочипов). В общем, тут ориентируемся по названию вендора чипа. В моем личном случае это выглядит так:
apt install -y firmware-atheros firmware-amd-graphics firmware-linux-free
Система без ядра Linux — не система, переходим к нему: ставим сначала dracut вместо initramfs-tools:
apt install -y dracut
И уже после его установки ставим мета-пакет ядра:
apt install -y linux-image-amd64
Note: в репозиториях Debian stable ядро дремучее, а у нас тут «Arch». Есть второй вариант для тех, кому нужно новое ядро. Прописываем репозиторий backports:
nano /etc/apt/sources.list.d/backports.sources
И вставьте:
Types: deb URIs: http://deb.debian.org/debian/ Suites: stable-backports Components: main Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Обновляем древо пакетов apt:
apt update
И ставим (или обновляем) свежее ядро: apt install -y linux-image-amd64/stable-backports
До конца статьи совсем немного, крепимся дальше. Нам не нужен обрубок без звука и сети, нам понадобятся NetworkManager, pipewire и опционально bluetooth-апплетдля контроля подключений.
Ставим сетевую и звуковую части:
apt install -y network-manager-l10n wpasupplicant wireless-regdb modemmanager pipewire-audio wireplumber gnome-keyring
Опционально еще и blueman для bluetooth-подключений:
apt install -y libspa-0.2-bluetooth blueman rfkill bluez-tools
Напоследок, чтобы не забыть случайные драйвера и триггеры для dracut, пишем:
dracut -f --kver 7.0.12+deb13-amd64

Все, это конец. Выходим из нашего rootfs командой exit и размонтируем /dev, /proc, /sys:
umount -R /path/to/rootfs/dev umount -R /path/to/rootfs/sys umount -R /path/to/rootfs/proc

Пакуем наш rootfs с помощью:
mksquashfs /path/to/rootfs/* /path/to/mate-rootfs.sqfs

Промежуточный итог: мы собрали свой собственный золотой образ дистрибутива Debian stable со своим ПО под свои задачи без лишних пакетов. Я специально не расписывал про добавление пользователей, настройку паролей и установку, иначе гайд разрастется в длинный лонгрид. В следующей части мы разберем установку нашего образа вместе с настройкой через efistub. Вторая часть выйдет не скоро, образ системы я уже протестировал и она рабочая
Комментарии (15)

mlp2
15.07.2026 11:19Спасибо за статью!
Я слышал часть пакетов linux переписали на rust. Есть просто способ поставить их вместо обычных?
Как на счёт обновления с официальных репозиториев debian? Как оно организованно ?
Как туда добавить свои пакеты например яндекс браузер + сервер с которого это ПО будет обновляется напрямую?
российское шифрование, российские SSL - сертификаты из коробки ?

executionerrok Автор
15.07.2026 11:19Про пакеты на rust тоже слышал, конкретно с debian stable переписывали apt но пока это прероготива свежих ubuntu
Обновление реопзиториев? stable релиз автоматически перезжает на новый релиз как выйдет(forky) но чтобы обновить систему нужен dist-upgrade вроде
Пакеты добавляються вместе с рпеозиториям того же яндека, по аналогии с тем что написано в статье про бэкпорты. Сертификаты, гост это отдельное ПО не в составе debian

alfos
15.07.2026 11:19Посмотрите лучше в сторону mmdebstrap.
Вот немного кода.
RUN mmdebstrap \
--architectures="amd64" \
--variant=custom \
--skip=usrmerge \
--include="base-files base-passwd bash coreutils dash dpkg diffutils findutils" \
--include="grep gzip libc-bin perl-base sed tar usrmerge" \
--include="ca-certificates curl git jq" \
--aptopt='APT::Install-Recommends "false"' \
--aptopt='APT::Install-Suggests "false"' \
--dpkgopt='path-exclude=/usr/share/doc/*' \
--dpkgopt='path-exclude=/usr/share/man/*' \
--dpkgopt='path-exclude=/usr/share/locale/*' \
--dpkgopt='path-include=/usr/share/doc/*/copyright' \
--dpkgopt='path-include=/usr/share/doc/*/changelog.Debian.*' \
--hook-dir='/usr/share/mmdebstrap/hooks/merged-usr' \
--hook-dir='/hooks' \
bookworm ${ROOTDIR};\
rm -rf "${ROOTDIR}"/var/cache/apt/* "${ROOTDIR}"/var/lib/apt/lists/* "${ROOTDIR}"/tmp/* "${ROOTDIR}"/root/.android/cache
executionerrok Автор
15.07.2026 11:19Про mmdebstrap не знал спасибо, только для целей разворачивания на диск как полноценной десктоп системы не подойдет, он превратиться в обычный debootstrap. chroot нужен как никак

alfos
15.07.2026 11:19Если у вас задача собрать десктопный Debian, то у меня вопрос. Зачем вы делаете это?
APT::Install-Recommends "false"; APT::Install-Suggests "false";
executionerrok Автор
15.07.2026 11:19Уменьшение места, каждый мегабайт должен быть сэкономлен. Без них подтянеться как минимум ffmpeg, gnome-keyring и др. Это как минимум 200мб к образу

NutsUnderline
15.07.2026 11:19официальная netinstall версия debian изначально содержит очень мало, и много галочек. я убрал при установке практически все. и далее просто много разных apt. из немногого где приходиться "поугадывать" это networkmanager. я одно время просто забил текстовый конфиг и вообще не ставил эти пакеты. и в таком виде уже где с 10 по 13 апгрейдилось без лишних пакетов. Так что не вижу особого повода делать какуюто особую сборку для дектопа.
Для чего встраиваемого - другое дело, но это совсем другая история. Я пробовал bulidroot и для сборки простого десктопного "монолита", но иногда хочется обновлять софт без перересборки ядра.

NutsUnderline
15.07.2026 11:19в репозиториях Debian stable ядро дремучее, а у нас тут «Arch»
и вот тут я и не понял: а откуда оно появилось? особенно после
Система без ядра Linux — не система, переходим к нему: ставим сначала
dracutвместоinitramfs-toolsкоторый как бы создает initrd. понять это можно очень по разному.
и уж только по мелкой подписи к картинке
Note: 7.0.12+deb13-amd64 можно и нужно заменить на свое, dracut ищет совпадения по имени в /lib/modules/%kernelname
можно предположить что именно dracut че то там умеет выкачивать откуда то
Shaman_RSHU
Как только не изголяются, чтобы не ставить Arch :) /s
executionerrok Автор
Арч это прошлое вот компиляция Gentoo.....
Shaman_RSHU
Тогда уж LFS
Zazza
Не знаю, кто тебя минусил и за что. Поставил плюс. Я когда студентом был, мы ещё сравнивали у кого на системе за сколько glibc и gcc собирается)
executionerrok Автор
Явно те кто не компилировал исходные коды. Предполагаю что не распознали шутку
Shaman_RSHU
Иногда не понимают сарказм, есть возможность уменьшить карму только потому, что мыслишь по другому :)