Собственный дистрибутив на базе Debian Linux
Потребовалось как-то по работе сделать кастомный дистрибутив. Дистрибутив должен умещаться на один диск и содержать в себе все, что требуется для простого десктопа + некоторые мелочи.
Для начала нам надо установить эталонную систему. Берем с сайта debian.org дистрибутив. Например NetInstall. Скачиваем и устанавливаем на машину(или на виртуальную машину, кому как удобнее). Например я ставлю базовую систему, а затем все устанавливаю руками.
Итак. Система установлена. Устанавливаем требуемые пакеты.
apt-get install gnome gdm openoffice.org xfonts-base xorg xserver-xorg
После устанавливаем пакет «apt-move»
открываем настройки /etc/apt-move.conf и указываем в пункте LOCALDIR путь до того места, где у нас будет храниться будущий дистрибутив. У меня путь был указан в /home/debian. Сохраняем конфиг и выполняем команду apt-move update
По указанному выше пути(/home/debian/distrib) появился каталог pool. В нем будут лежать пакеты, которые в итоге окажутся на диске.
Монтируем CD(в нем ведь все еще есть диск Debian NETINSTALL) и копируем все, что на нем есть в каталог /home/debian/distrib.
Скачиваем с серверов debian.org файлы override.. Я например брал с ftp.fr.debian.org/debian/indices. Версия текущего дистрибутива etch, поэтому и скачиваем файлы, с названиями override.etch.*
Разархивируем gunzip’ом и кладем например в /home/debian/indices
В каталоге /home/debian создаем файл с именем apt.conf и заполняем его текстом по примеру с wiki.debian.org/DebianCustomCD/PoolAptConf. В этом-же каталоге создаем файл с названием дистрибутива (например mycd.conf) и заполнем его по примеру с wiki.debian.org/DebianCustomCD/PoolPackagesGzConf
Запускаем apt-ftparchive -c apt.conf generate mycd.conf
Ну а теперь самое главное. в каталоге /home/debian/distrib/install.i386 создаем файл preseed.conf
В него вписываем инструкции для инсталлятора Debian.
Пример заполнения файла preseed.conf
#заставляем инсталлер автоматически выбирать интерфейс
d-i netcfg/choose_interface select auto
#или выбираем конкретный
#d-i netcfg/choose_interface select eth1
# устанавливаем таймаут для DHCP(в данном случае, если у вас DHCP сервер медленный)
d-i netcfg/dhcp_timeout string 100
#если по DHCP ничего не получили, выводим опцию с возможностью указать настройки сети руками
d-i netcfg/dhcp_failed note
d-i netcfg/dhcp_options select Configure network manually
#название хостнейма данной машины и домена
d-i netcfg/get_hostname string office
d-i netcfg/get_domain string local
# Установка часов
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Moscow
#Устанавливаем базовую систему
tasksel tasksel/first multiselect standard
#возможны разные варианты 🙂
#tasksel tasksel/first multiselect standard, web-server
#tasksel tasksel/first multiselect standard, kde-desktop
# Ну и индивидуальныем пакеты
d-i pkgsel/include string ssh xorg xserver-xorg gdm gnome openoffice.org xfonts-base xfonts-100dpi xfonts-75dpi xfonts-encodings xfonts-scalable xfonts-utils
# Показываем сообщение о предстоящем ребуте
d-i finish-install/reboot_in_progress note
Сохраняем этот файл и открываем для редактирования isolinux/isolinux.cfg
в нем дописываем
LABEL installseed
kernel /install.386/vmlinuz
append vga=normal file=/cdrom/install.386/preseed.cfg initrd=/install.386/initrd.gz —
выходим в директорию /home/debian/distrib
выполняем команду
find . -type f -print0 | xargs —null md5sum > md5sum.txt
и собственно начинаем процесс создания ISO образа:
genisoimage -r -V «Debian 4.0 r4a i386 custom» -o /home/debian/debiancustom_40.iso -J -cache-inodes -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /home/debian/distrib
После того, как программа закончит работу, в /home/debian/ можно будет найти .iso файл с нашим кастомным дистрибутивом. Теперь его или пишем на болванку или ставим на виртуальную машину.
p.s. надеюсь, ничего не забыл 🙂
Свой дистрибутив Debian
Общее описание по созданию своего дистрибутива читайте в статье «Свой дистрибутив Linux».
Описанная схема работает для всех Debian-совместимых систем, т.е. Debian, Ubuntu, Linux Mint и т.д.
После установки локализации и настройки системы со всеми нужными приложениями, создадим свой установочный диск, с которого потом будем разворачивать готовую систему за считанные минуты и без доступа в Интернет.
Пакет remastersys способен создать iso образ установочного диска в двух вариантах
- backup — полная копия системы, включая пользовательские данные и
- dist — дистрибутив системы, заточенный под наши нужды. Установка ОС с этого дистрибутива ничем не будет отличаться от обычной установки, только набор ПО будет уже наш.
Инструкцию по работе с remastersys можно прочесть на официальном сайте http://www.geekconnection.org/remastersys. Она очень проста и сводится к следующим шагам:
Подготовка
Для Debian нужно доустановить дополнительные пакеты. Узнаём версию ядра:
# uname -a Linux hostname 2.6.26-2-686 #1 SMP Tue Mar 9 17:35:51 UTC 2010 i686 GNU/Linux
устанавливаем пакеты squashfs-modules и aufs-modules для нашего ядра:
# apt-get install squashfs-modules-2.6.26-2-686 aufs-modules-2.6.26-2-686
Далее автор советует перезагрузить систему перед установкой самого remastersys.
Установка
1) Добавить в список репозиториев /etc/apt/sources.list (для Ubuntu 9.х 10.х) строчку:
2) Установить remastersys
# apt-get update # apt-get install remastersys
Запуск
Запускаем от root’a с графическим интерфейсом:
Без графического интерфейса, для резервной копии:
Для создания дистрибутива
Запустив без параметров узнаем их все.
Настройки можно подправить в /etc/remastersys.conf
Замеченные особенности
- Загрузчик сохраняет список установленных ОС (где создавался дистрибутив) в независимости от их наличия на новом месте.
- Сохраняются настройки сетевых подключений
Собираем свой дистрибутив Linux на флешке
Всем привет! Думаю, многие из тех, кто хоть как-то связан с IT, знают про популярные live-дистрибутивы, которые можно носить с собой в кармане для решения различных задач (восстановление системы, разметка диска, резервное копирование и многое другое), такие как Slax, Puppy Linux, Porteus или отечественные проекты PuppyRus, MagOS. Сегодня мы с вами соберём свой дистрибутив на флешке на базе Debian.
Что нам понадобится? Дистрибутив на базе Debian (оптимальным выбором будут последние версии Debian, Ubuntu или Mint), либо любой дистрибутив с установленным Docker и немного времени (все операции, описанные в данной статье, включая сборку, занимают не более получаса при наличии достаточно быстрого канала в Internet).
Первые шаги
Собирать мы будем скриптами MiniOS Live, так как они имеют относительно низкий порог вхождения и позволяют собрать вариант с любым набором пакетов на базе Debian 9-Sid.
git clone —depth=1 https://github.com/minios-linux/minios-live.git
Изначально, скрипты настроены на сборку варианта MiniOS Standard на базе Debian 11 с архитектурой amd64. Собрать этот вариант можно достаточно просто
cd minios-live
./install —
либо для Docker
cd minios-live/docker
./ 01-runme.sh
docker run -it —name mlc —privileged —device-cgroup-rule=’b 7:* rmw’ -v /dev:/dev -v /home/username/build:/build local/mlc /build/minios-live/install —
где /home/username/build — папка, содержащая minios-live.
Вот что у нас получится в итоге:
Основной файл конфигурации сборки MiniOS — minios-live/linux-live/buildconfig, для большинства переменных указано их назначение и значения, которые они могут принимать. В нём можно выбрать готовые наборы пакетов и настроек, архитектуру, изменить стандартный initrd и многое другое.
Модификация базовой системы
Сборка базовой системы 00-core производится из скриптов, расположеных в minios-live/linux-live/basesystem/00-core, там вы можете найти списки пакетов для каждого варианта сборки и изменить их (часть пакетов устанавливается скриптом install, так как в разных дистрибутивах один и тот же пакет может иметь разные названия).Там же расположена папка rootcopy-install, данные из неё автоматически копируются в систему перед началом установки. Для копирования данных в систему после установки создайте папку rootcopy-postinstall и разместите данные в ней. В самом конце выполняется скрипт postinstall.
Модификация/создание модулей
Скрипты, из которых собираются модули, располагаются в minios-live/linux-live/scripts, менять наименования модулей 00-09 нельзя. Наименования скриптов сборки, списков пакетов и папок те же, что и для базовой системы, но теперь к ним добавляется скрипт build. В нём указываются операции сборки ПО из исходных кодов, данный скрипт выполняется после install. При этом, данные, полученные после выполнения install, сохраняются в папке squashfs-root. После сборки ПО скомпилированные файлы необходимо скопировать в эту папку, в конце скрипта необходимо добавить эти строки
if [ $COMP_TYPE = «zstd» ]; then
time mksquashfs /squashfs-root /$MODULE.$BEXT -comp $COMP_TYPE -Xcompression-level 19 -b 1024K -always-use-fragments -noappend >>$OUTPUT 2>&1
else
time mksquashfs /squashfs-root /$MODULE.$BEXT -comp $COMP_TYPE -b 1024K -always-use-fragments -noappend >>$OUTPUT 2>&1
fi
Пакеты, установленые скриптом build не сохраняются в системе. Пример такого скрипта можно посмотреть здесь minios-live/linux-live/scripts/04-slax-desktop. Если вам необходимо установить модуль DKMS так, чтобы в системе не осталось пакетов, необходимых для сборки (заголовки ядра и прочие), создайте в папке скриптов модуля файл is_dkms_build, тогда в модуль после работы скрипта build будут скопированы только модули ядра. Пример: minios-live/linux-live/scripts/01-kernel. Для создания простого модуля, где необходима только установка пакетов, используйте в качестве примера скрипты модуля 10-galculator:
cd minios-live/linux-live/scripts
cp -r 10-galculator 10-openshot
замените в packages.list galculator на openshot. В packages.list можно в столбик указать любые пакеты из репозитория Debian, которые вы хотите иметь в модуле. В качестве имени модуля будет использоваться имя первого пакета в списке.
Сборка системы с включением своих модулей
Сборка системы с модулями осуществляется из папок в minios-live/linux-live/modules, где расположены ссылки на папки скриптов, из которых собираются модули. В minios-live/linux-live/modules есть скрипт create_symlinks.sh , с помощью которого можно создать структуру модулей. Например, мы хотим собрать MiniOS с Chromium вместо Firefox, для этого необходимо отредактировать create_symlinks.sh .
#!/bin/bash
if [ ! -d $1 ]; then
mkdir -p $1
fi
for file in $1/00-minios \
$1/01-kernel \
$1/02-firmware \
$1/03-xorg \
$1/04-xfce-desktop \
$1/05-xfce-apps \
$1/10-chromium; do
if [ -L $file ]; then
rm $file
fi
ln -s ../../scripts/$(basename $file) $file
done
Затем запустите скрипт:
create_symlinks.sh xfce-chromium
измените DESKTOP_ENVIRONMENT в buildconfig на xfce-chromium. Обратите внимание, сохранять «xfce», если вы используете XFCE, в наименовании варианта системы и в начале переменой DESKTOP_ENVIRONMENT обязательно.
Сборка модулей для собранной системы
Допустим, вы только что собрали собрали систему и вам необходимо внести изменения модуль. В папке minios-live/build/bullseye-standard-amd64/image/minios (для других вариантов папка может называться иначе) удалите модуль и все модули, которые по алфавиту располагаются после него, затем запустите сборку:
./install build_modules —
Для версии Frugal для модулей с порядковыми номерами 10 и выше удалять модули, располагающиеся по алфавиту после, не надо.
Надеюсь, у вас получится собрать систему под себя достаточно быстро. Если есть вопросы по сборке — пишите комментарии, буду рад помочь. А на сегодня всё. Надеюсь, этот первый пост не станет последним)