Как создать свой дистрибутив linux
Перейти к содержимому

Как создать свой дистрибутив linux

  • автор:

Как самому за один вечер собрать минимальную ОС Linux из исходного кода

image

В современном мире нас окружает огромное количество электронных устройств различной степени сложности. Если устройство более или менее сложное, например, телевизор, маршрутизатор, смартфон, то с большой долей вероятности оно работает под управлением операционной системы Linuх, и эта мысль не даёт мне покоя.

Ещё больше не даёт покоя мне тот факт, что все ядра операционной системы Linux, которые работают на различных устройствах и серверах, собраны из исходного кода, находящегося в репозитории на сайте kernel.org.

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

Мне всегда хотелось собрать операционную систему Linux самому из исходного кода, но процесс этот всегда казался сложным и запутанным, да и многого я не понимал. Но всё-таки в определённый момент времени я накопил достаточное количество знаний, чтобы осуществить свою мечту. В этой статье я хочу рассказать вам, как собрать минимальную Linux из исходного кода и запустить её у себя на компьютере.

Она не позволит использовать все возможности вашего компьютера, но будет иметь главное – интерфейс командной строки. Поверьте мне, получив работающий интерфейс командной строки Linux на вашем реальном компьютере, вы испытаете неповторимые ощущения.

Вы удивитесь, но минимальный набор, необходимый для получения командной строки Linux содержит всего два файла: файл ядра Linux и файл начального образа корневой файловой системы. Естественно, необходим загрузчик, который загрузит эти два файла и инициирует выполнение ядра, передав ему образ начальной корневой файловой системы и другие параметры, если они необходимы.

▍ Минимальная операционная система Linux

Чтобы вы как-то смогли работать с операционной системой, вам нужны четыре составляющие: загрузчик, ядро, начальная корневая файловая система и набор утилит, являющийся интерфейсом к ядру операционной системы.

Загрузчик — это специальная программа, которая позволяет процессору начать выполнение машинных инструкций, находящихся в файле ядра операционной системы.

  • aбстракции для различных физических устройств ввода-вывода, с которыми может работать процессор (драйвера устройств),
  • aбстракции структур данных для хранения (файловые системы),
  • aбстракции для разделения во времени выполнения программных инструкций (процессы, потоки),
  • другие абстракции.

Начальная корневая файловая система нужна для того, чтобы ядро выполнило начальную загрузку файлов, необходимую для дальнейшей загрузки операционной системы. Самыми важными являются модули ядра Linux, не вошедшие в состав файла ядра, но нужные для дальнейшей загрузки, и файл, на основании которого будет создан самый первый процесс при загрузке операционной системы (init).

Набор утилит позволяет вам работать с абстракциями, находящимися в ядре операционной системы. В зависимости от сложности и назначения устройства, на котором будет работать операционная система, этот набор может различаться. Утилиты определяют функциональность и интерфейс взаимодействия с пользователем. Например, для роутера они будут одни, для телефона другие, а для персонального компьютера третьи.

▍ Загрузка операционной системы Linux

  1. Происходит включение компьютера.
  2. BIOS или UEFI находит на компьютере загрузчик операционной системы и передаёт управление ему.
  3. Загрузчик операционной системы загружает в оперативную память файл ядра Linux и файл образа начальной файловой системы (файл initrd).
  4. Загрузчик операционной системы передаёт управление ядру операционной системы Linux.
  5. Ядро операционной системы проводит начальную инициализацию.
  6. Ядро операционной системы получает доступ к файлам, которые находятся в образе начальной файловой системы (монтирует образ).
  7. Ядро ищет файл init в начальной файловой системе и запускает самый первый процесс пользователя на его основе.
  8. Процесс init монтирует уже постоянную файловую систему, продолжает инициализацию операционной системы и переносит корень файловой системы Linux на смонтированную файловую систему и запускает другие процессы, которые необходимы для инициализации.

▍ Дистрибутивы Linux

Дистрибутив – это ядро Linux, набор библиотек, утилит и программ, который устанавливается на компьютер или устройство.

На данный момент количество различных дистрибутивов огромно. Их перечень вы можете посмотреть на сайте DistroWatch.

Современные дистрибутивы Linux обычно распространяются в виде образов ISO и позволяют устанавливать обновления и дополнительные программы (пакеты), но мы делаем минимальный дистрибутив, поэтому, естественно, у нас такой возможности не будет.

Одна из самых полных инструкций, как собрать дистрибутив Linux с нуля, находится здесь. Сборка дистрибутива Linux — процесс интересный и позволит вам узнать много нового, но уж очень он долгий, а значит вам необходима огромная сила воли, чтобы выполнить его от начала до конца.

Когда ты получаешь такой огромный массив информации, не сильно разбираясь в теме, есть вероятность, что ты часть вещей выполнишь, не сильно вникая в суть.

Поэтому я стремился упростить создание дистрибутива до минимума: мы не будем монтировать постоянную файловую систему, а в качестве файла init будем использовать файл скрипта, который выполнит минимальную инициализацию и запустит оболочку sh.

▍ Загрузка операционной системы

За долгие годы своего существования Linux был портирован на множество аппаратных платформ. Загрузка Linux для каждой платформы отличается.

  1. Будет ли использоваться для загрузки BIOS или UEFI.
  2. На каком носителе (жёсткий диск, флеш-накопитель, оптический диск, компьютерная сеть) BIOS или UEFI будет искать загрузчик.
  3. Как размечен жёсткий диск или флеш-накопитель (MBR или GPT).
  4. На каком носителе и в какой файловой системе (FAT, NTFS, EXT, CDFS и др.) будут располагаться файл ядра и файл с образом начальной корневой файловой системы, называющийся initrd.

▍ Структура начальной корневой файловой системы

Начальная корневая файловая система содержит минимальное количество файлов и директорий, необходимых для дальнейшей работы Linux. В нашем случае это директории bin, dev, proc, sys. В директории bin cодержатся утилиты для работы с ядром Linux.

▍ Наборы утилит

Минимальный Linux — это ядро и набор утилит командной строки. Ядро и утилиты командной строки разрабатываются разными командами программистов.

▍ Создание среды для сборки Linux

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

Например, на Ubuntu 22.10 нам необходимо установить следующие пакеты: make, build-essential, bc, bison, flex, libssl-dev, libelf-dev, wget, cpio, fdisk, extlinux, dosfstools, qemu-system-x86. Для других систем набор пакетов может отличаться.

▍ Создание минимальной Linux в Ubuntu 22.10

1. Устанавливаем необходимые пакеты для сборки.

2. Загружаем из интернета исходный код для ядра Linux и BusyBox.

3. Распаковываем архивы с исходным кодом.

4. Собираем бинарные файлы BusyBox и для ядра Linux. Этот процесс займёт достаточно много времени, порядка 10 минут и даже больше, поэтому не пугайтесь.

5. Создаём файл init.

Вместо редактора vim (команда vi) вы можете использовать другой текстовый редактор, например gedit.

6. Cоздаём структуру директорий и файлов.

7. Помещаем структуру в файл initrd, который у нас является cpio-архивом.

8. Запускаем собранный образ в эмуляторе qemu.

9. Попробуем ввести известные вам команды Linux. Выходим из эмулируемой Linux, набрав команду exit.

▍ Создание загрузочного образа для флеш-накопителя

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

  • что будет инициировать загрузку (BIOS или UEFI),
  • какой накопитель вы будете использовать (CDROM, флеш-накопитель, жёсткий диск),
  • как вы разметите накопитель (MBR, GPT) и будете ли его размечать,
  • какой загрузчик вы будете использовать,
  • какая файловая система будет использоваться там, где будут располагаться файлы Linux и загрузчика.

Алгоритм создания образа загрузочного флеш-накопителя следующий:

1. Создаём файл образа.

2. Создаём загрузочный раздел внутри файла образа.

3. Настраиваем loopback-устройство на загрузочный раздел внутри файла boot-disk.img.

4. Создаём файловую систему на loopback-устройстве.

5. Монтируем loopback-устройство.

6. Копируем файл ядра Linux и файл initrd на первый раздел внутри файла boot-disk.img.

7. Выполняем установку загрузчика EXTLINUX внутри файла boot-disk.img.

8. Создаём файл конфигурации для загрузчика, в котором указываем, что именно грузить.

9. Размонтируем loopback-устройство.

10. Выполняем установку загрузчика MBR в начало диска внутри файла boot-disk.im.

Файл boot-disk.img будет содержать загрузочный образ флеш-накопителя

▍ Использование Docker для сборки Linux

Описанные выше алгоритмы содержат много команд и параметров, в них достаточно просто ошибиться при наборе. Команды можно объединить в bash-скрипты, а чтобы можно было собрать Linux в операционной системе Windows 10 или 11, рационально использовать Docker Desktop.

  1. В файле Dockerfile вы описываете структуру окружения для вашей программы или скрипта.
  2. При помощи утилиты docker на основании Dockerfile вы создаёте образ этого окружения в определённом формате.
  3. При помощи этой же утилиты вы можете запустить на основе образа экземпляр вашей программы или скрипта, работающий в изолированном окружении и называемый Docker-контейнер в терминологии Docker.
  4. Созданные вами образы можно хранить в репозитории и повторно использовать.
    Docker-контейнеры, созданные на основании одного и того же образа, будут идентично выполняться на всех компьютерах, способных его выполнить.
  5. Dockerfile удобно читать и изучать, также его удобно распространять.

Ниже приведу содержимое Dockerfile:

Команда FROM является самой важной в нём, она указывает, на основании какого образа файловой системы будет строиться наш образ для сборки Linux. В данном случае это ubuntu:22.10.

Команда RUN запускает команды внутри создаваемого нами образа. Т. е. команды, которые следуют после RUN, будут выполнены так, как было бы, если бы вы работали в Ubuntu 22.10 и выполнили их в командной строке. В результате работы команды образ файловой системы у вас изменится, так как эти команды изменяют файловую систему внутри него.

Команда COPY копирует файлы из файловой системы нашей операционной системы внутрь создаваемого образа. Как и RUN, она изменяет файловую систему внутри образа.

Команды ARG и ENV вызывают путаницу. Не знаю, проясню я вам или нет, но ARG – это создание переменных, которые используются при создании образа, а ENV – это создание переменных, которые используются, когда уже на основании этого образа создан контейнер, и эти переменные будут видны внутри него.

Команда WORKDIR указывает, какая директория будет рабочей при запуске контейнера, созданного на базе нашего образа.

Команда CMD указывает, какая команда будет выполнена по умолчанию внутри контейнера при его запуске.

▍ Запуск и сборка минимальной Linux при помощи Docker

Вы можете поэкспериментировать с моим проектом. В Windows лучше всего запускать Docker в PowerShell.

1. Создание Docker-образа:

2. Запуск минимальной Linux:

В созданной вами директории linux будет находиться собранный файл ядра Linux и файл образа начальной корневой системы.

3. Создание загрузочного образа для флеш-накопителя.

Обратите внимание, что нужно использовать опцию —privileged в docker, так как скрипт image использует loopback-устройство.

Если вы будете использовать Docker Desktop for Linux, Docker придётся запускать, используя sudo и вместо $ нужно будет использовать $(pwd).

▍ Запись загрузочного образа для флеш-накопителя на носитель

Созданный файл образа для флеш-накопителя (linux-5.15.79-busybox-1.35.0-disk.img) вы можете записать на флеш-накопитель при помощи утилиты Win32DiskImager. Следует заметить, что при записи вы потеряете все данные, хранящиеся на флеш-накопителе, поэтому лучше использовать накопитель, на котором нет никаких файлов.

После записи образа на флеш-накопитель перезагрузите компьютер и выберите загрузку с USB-HDD, т. е. c созданного вами флеш-накопителя. Скорее всего, перед этим вам будет нужно выбрать Legacy Boot и отключить Secure Boot в BIOS.

▍ Выводы

Имея установленный Docker Desktop для Windows, посмотреть, как всё работает, и запустить сборку моей минимальной ОС Linux можно одной командой в PowerShell.

У вас появится командная строка моей минимальной Linux, а при выходе из неё вы увидите в текущей директории файл ядра Linux и initrd-файл.

В этой статье я привёл подробную инструкцию, как можно получить работающую систему Linux из исходного кода.

Кому-то эта статья может показаться сильно простой и не заслуживающей внимания. Но я, чтобы не отпугнуть вас подробностями, не углублялся в такие темы, как BIOS, UEFI, файловые системы, загрузчики, библиотека glibc, подробный процесс загрузки операционной системы, различные спецификации, динамическая и статическая линковка, модули ядра Linux… Я только привёл минимальное количество теории, которая позволит понять, что же, собственно, вы делали, и разобраться в теме гораздо быстрее меня, не собирая всю информацию по крупицам.

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

Cоздание своего дистрибутива Linux с помощью Remastersys

Прежде чем делать свою сборку, Вы должны определить цель и задачи своего творения. Иначе сборка может не получить своё предназначение в этом мире и остаться малоизвестной.Итак, цели и задачи определены и Вы решились сделать сборку своей системы.
Для начала Вы должны либо в Virtualbox (или в другой виртуальной машине), либо у себя на компьютере установить операционную систему со всеми настройками, со всеми программами, которые считаете нужными иметь в Вашей сборке.
Теперь, когда всё настроено и установлено, будем создавать свою сборку. Для этого нам в первую очередь необходимо свободное место на разделе с папкой /home не менее 6 ГБ.
Для создания сборки есть несколько инструментов. Мы будем говорить о Remastersys, который позволяет создать полноценную сборку даже не очень продвинутому пользователю.
Все действия дальше описаны для Ubuntu, но подходят для всех Debian совместимых дистрибутивов.

1. УСТАНОВКА

Для установки Remastersys необходимо скачать и установить вручную , например, через программу gdebi, 2 пакета: remastersys_3.0.x-2_all.deb и remastersys-gtk_3.0.x-2_all.deb
Для Ubuntu 10.04 — 14.04 скачать отсюда
Для Ubuntu 16.04 — 17.04 скачать отсюда
Для Ubuntu 17.10 скачать отсюда
Для Ubuntu 18.04 скачать отсюда

2. ПЕРВЫЕ ШАГИ

Запускаем Система ⇒ Администрирование ⇒ Remastersys (Я использую Мате 1.6. С другими рабочими столами расположение может отличаться). Видим вот такое окно:

Коротко об основных кнопках:
Backup — полная резервная копия установленной системы, включая пользовательские данные и настройки. Сохраняется полностью все файлы в домашних каталогах пользователей системы.
Dist — резервная копия только установленной системы, БЕЗ пользовательских данных. Самый оптимальный вариант для создания сборки системы. Создается структура загрузочного диска и образ диска(iso).
Distcdfs — то же, что и Dist, но создается структура загрузочного диска без создания образа диска(iso).
Distiso — создает образ диска(iso), при условии готовой структуры загрузочного диска. Применяется только после Dist или Distcdfs.
Очистить — очистить временную папку программы. Используется для очищения папки перед созданием нового образа.

Переходим во вкладку Settings:

Здесь мы видим параметры нашей будущей сборки. Рассмотрим самое необходимое.
Username — имя пользователя по-умолчанию при входе в систему LiveCD.
CD Label — метка диска. Высвечивается название при загрузке диска в CD-привод. Ограничение 32 символа, учитывая пробелы.
Filename — имя файла созданного образа.
Остальное пока трогать не будем.
Итак зададим:
— Имя пользователя в строке Username, скажем, alex;
— Придумаем название нашей сборки и запишем в CD Label, допустим, AlexBuntu;
— В строке Filename запишем имя файла сборки, AlexBuntu-12.04-x32.iso.
Должно получится следующее:

Галочка в строке Show install icon on Backup mode desktop создает иконку установки Вашей системы на рабочем столе. Опция работает на всех основных рабочих столах.

Теперь переходим на вкладку Actions:

Нажимаем кнопку Dist. Появится окно:

Жмем ОК. Появится окно:

Всё, теперь можете спокойно и не торопясь попить чай или кофе. Минут через 15 — 60 (всё зависит от мощности ПК) появится сообщение:

Поздравляю Вас с первой Вашей сборкой!
Файл сборки находится по адресу /home/remastersys/remastersys и имеет то имя, которое Вы дали своей сборке. В моем случае это файл AlexBuntu-12.04-x32.iso. В этой же папке есть еще текстовый файл контрольной суммы образа с расширением md5, в моем случае файл AlexBuntu-12.04-x32.iso.md5.
Теперь Вы можете записать свою сборку на диск и насладиться своим творением. Возможно при входе в систему с LiveCD придется ввести имя пользователя, которое было выбрано при создании образа, в моем случае это alex. Пароль оставьте пустым.

3. РАСШИРЕННЫЕ ВОЗМОЖНОСТИ

Многих устроят выше описанные главы. Если Вы всё еще читаете, то Вы действительно хотите познать все тонкости создания сборки, приближенной к профессиональной.
В первую очередь коснемся вкладки Settings и рассмотрим остальные нужные строки.
Working directory — рабочая папка программы. Вы можете ее переназначить в любое место и на любой раздел.
Ну и самая важная строчка настроек Squashfs options.
Remastersys использует для создания дистрибутива возможности SquashFS. Чтобы понять весь смысл данной строки предлагаю Вам рускоязычный блог , в котором прекрасно изложен весь смысл этого мощнейшего инструмента.
После изучения всех возможностей добавим в нашу строчку Squashfs options следующие опции: -comp xz.
Строчка должна иметь вид:

Эта опция устанавливает алгоритм компрессии xz вместо gzip по-умолчанию, что сожмет нашу сборку примерно на 20-25% лучше.Эта опция доступна с версии squashfs 4.2 и, например, в Ubuntu 10.04 она не доступна. В версии Ubuntu 12.04 установлена нужная версия 4.2 squashfs.
Чтобы проверить, доступна ли эта опция, наберите в терминале mksquashfs. Если вы видите похожее на следующее:

mksquashfs
SYNTAX:mksquashfs source1 source2 … dest [options] [-e list of exclude dirs/files]

Filesystem build options:
-comp <comp> select <comp> compression
Compressors available:
gzip (default)
lzo
xz

то всё в порядке и использовать опцию -comp xz можно смело.

4. ЗАГРУЗОЧНОЕ МЕНЮ

По-умолчанию Remastersys создает загрузочное меню сборки довольно-таки скучное и однообразное. Одно только радует, что меню достаточно функциональное. Я долго искал простой способ включения своего меню без пересборки всего образа. Все дальнейшие действия не были задуманы авторами Remastersys и являются своего рода моими уловками и обходными способами, к которым я шел несколько месяцев различными экспериментами. Поэтому этот раздел не претендует на правильную инструкцию по Remastersys.
Итак. Вот такое загрузочное меню мы имеем в стандартной установке:

Вот такое меню можно получить после некоторых манипуляций:

Такое загрузочное меню используется в одной из моих сборок. Как видим, картинка изменена и меню русифицировано. Кроме всего прочего я убрал название дистрибутива из меню и написал его в GIMPe яркими красками. Сейчас мы с Вами и займемся заменой картинки и русификацией меню. Для этого нам потребуется обратить внимание на содержимое файлов в папке /home/remastersys/remastersys:

Здесь нас интересует папка ISOTMP. В этой папке хранятся временные файлы программы Remastersys. Этим мы и воспользуемся. Переходим в эту папку:

Структура данной папки очень похожа на структуру образа диска. Не хватает только папки .disk. В папке isolinux хранятся файлы загрузочного меню. Заходим в нее:

Рассмотрим файлы загрузочного меню:
splash.png — фоновое изображение. Размер изображения 640х480 точек на дюйм.
isolinux.cfg — конфигурационный файл загрузочного меню.
vesamenu.c32, isolinux.bin — системные файлы.
Смело меняем фон загрузочного меню на свой. Тип файла и название должно остаться таким же. Размер изображения обязательно 640х480 точек на дюйм.
Далее я выложил листинг отредактированного конфигурационного файла isolinux.cfg. За основу взят стандартный конфигурационный файл Remastersys. Я постарался максимально понятно написать комментарии к строкам. Почти вся информация в интернете на английском языке и очень краткая, поэтому много времени потратил на эксперименты, чтобы узнать, что и как работает.

Кодировка файла isolinux.cfg должна быть обязательно CP 866. Можно сохранять и редактировать в Cooledit (текстовый редактор Midnight Commandera), в OpenOffice и др. Взять мой отредактированный файл isolinux.cfg можно здесь.
Кроме этого нужно положить в папку isolinux шрифты поддерживающие русский язык. Взять можно отсюда.
В папке должно получится следующее:

Проверьте права доступа файлов должно быть следующее для всех 5 файлов:

Теперь все приготовления закончены. Запускаем Remastersys:

Нажимаем кнопку Distiso. Процесс пересборки образа пойдет намного быстрее, всего 1 — 5 минут, потому что основные файлы системы пересобираться не будут. На выходе будут те же файлы образа и контрольной суммы, но уже с Вашим неповторимым красивым меню.

5. ОЧИСТКА СБОРКИ ОТ "ЛИШНЕГО"

Прежде всего уточню, что речь пойдет не об удалении приложений из сборки, а об удалении временных файлов из кэша, коих великое множество на сотни мегабайт.
Перед очисткой системы установите пакет ubiquity-frontend-gtk.
В первую очередь воспользуемся стандартными инструментами очистки системы. Открываем терминал и пишем:

Первая команда автоматически удалит все неиспользуемые пакеты.
Вторая команда удалит скачанные файлы пакетов в архиве.

Теперь воспользуемся программой Synaptic и удалим все ненужные настройки, оставшиеся после удаленных пакетов. Открываем Synaptic. В открывшемся окне внизу выбираем группу фильтров «Состояние».
Выбираем фильтр «Не установленные (остались файлы настроек)», выделяем все пакеты, попавшие в этот фильтр. Правой клавишей мыши на выделенном выбираем в меню «отметить для полного удаления» и жмем «Применить».

Здесь же в этой группе фильтров удалите пакеты под фильтром «Установленные (авто удаляемые)«
Если фильтры «Не установленные (остались файлы настроек)» и «Установленные (авто удаляемые)» отсутствуют, значит система уже прошла чистку и под данные фильтры ничего не попадает.

Следующий инструмент очистки — программа BleachBit из стандартного репозитория. Интерфейс программы на русском языке, очень доступен для понятия, что Вы будете делать. Также перед очисткой есть кнопка «Предпросмотр», которая покажет, что будет удаляться, и позволяет сделать изменения до удаления. Программа очень эффективно чистит систему от ненужных файлов , а также умеет удалять неиспользуемые языковые файлы. В моей сборке программа удалила около 300 МБ.

После удаления языковых файлов рекомендую переустановить пакет locales, иначе возникнут проблемы при установке языковых пакетов в сборке. Переустановка вернет лишь настройки локалей с возможностью установки других языков. Никаких языковых пакетов скачиваться не будет.

Следующим этапом будет очистка кэша программ. В корне системы есть папка /var. В ней программы оставляют свои временные файлы, нужные до поры до времени. Дальше я перечислю папки, в которых можно удалить все файлы, не причинив вреда системе, и тем самым уменьшить размер сборки.

/var/backups
/var/cache/apt/ — не удалять папку archives
/var/cache/apt/archives — не удалять папку partial и файл lock
/var/cache/apt-xapian-index
/var/cache/flashplugin-installer
/var/crash
/var/lib/apt/lists — не удалять папку partial и файл lock
/var/lib/update-notifer/ — не удалять папки package-data-downloads и user.d
/var/lib/update-notifer/package-data-downloads — не удалять папку partial и файл lock
/var/lib/update-notifer/user.dудалять все файлы обязательно, иначе выдает окно ошибки
/var/tmp

Remastersys в начале установки копирует содержимое папки /var в свою временную папку /home/remastersys/remastersys/dummysys/var, откуда потом и включает в сборку файлы. Учитывая, что после копирования Remastersys проводит еще подготовительные операции, у нас есть примерно 5 минут удалить лишнее из папки /home/remastersys/remastersys/dummysys/var. Тем более, что даже, если мы удалили из папки /var/cache/apt файлы, они всё-равно создаются и копируются в папку /home/remastersys/remastersys/dummysys/var/cache/apt , утяжеляя сборку.
В эти же 5 минут у Вас есть возможность почистить папку /root. В ней оставляйте только те файлы, которые есть в папке /etc/skel и папку Desktop.

6. СОВЕТЫ И РЕКОМЕНДАЦИИ

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

Восемь утилит для создания своего собственного дистрибутива Linux

Компьютерное

Все пользователи Linux начиная знакомиться с этой операционной системой рано или поздно начинают подыскивать себе дистрибутив который бы их устраивал в большей степени. Кому-то не нравится пакетный менеджер, кому-то ограниченность в настройках, кому-то требуется чтобы предустановленные пакеты были только те которые нужны самому пользователю, а не те которые выбрали разработчики дистрибутива, кто-то хочет готовый Live-образ или дистрибутив для быстрого развертывания на парке машин. Рано или поздно каждый задумывается — раз уж Linux такой открытый. А не попробовать ли мне самому создать дистрибутив своей мечты?

Ниже я расскажу о 8 утилитах которые помогут и облегчат работу по созданию собственного дистрибутива.

1. Linux Respin

Иллюстрация 1

Linux Respin это форк более неподдерживаемого Remastersys. Год назад Remastersys был самым популярным инструментом для создания собственного дистрибутива Linux и/или создания резервной копии вашей операционной системы. Linux Respin не даёт тех же возможностей что и Remastersys, но всё еще великолепно вам подойдет, если вы используете один из дистрибутивов которые им поддерживаются. Linux Respin доступен только для Debian, Mint и Trisquel, что, конечно, ограничивает его популярность. Еще один жирный минус в этом инструменте — практически полное отсутствие документации.

2. Linux Live Kit

Картинка 2

Linux Live Kit другой инструмент который вы можете использовать для создания своего дистрибутива или создания резервной копии ОС. Предпочитает Debian но к счастью замечательно работает и на других дистрибутивах если они обеспечивают поддержку ядерных модулей aufs и squashfs. Linux Live Kit очень короткий и удобный мастер по созданию дистрибутива – просто выполняйте инструкции шаг за шагов и всё будет готово.

3. Ubuntu Imager

Иллюстрация 3

Ubuntu Imager хороший инструмент для создания своего дистрибутива основанного на Ubuntu. Это не единственное такое приложение для Ubuntu, но так как оно хорошее, нельзя было его не упомянуть. Не буду детально останавливаться на его работе, так как для него есть ЧаВо с инструкциями по установке и работе.

4. Linux from Scratch

Иллюстрация 4

Если вы хотите иметь абсолютный контроль над тем, что включено в ваш дистрибутив, и у вас много свободного времени, вы можете взглянуть на проект Linux from Scratch. LFS имеет очень обширную документацию и является отличным учебным ресурсом про Linux в целом, а не только о том, как создать собственный дистрибутив. Linux from Scratch позволяет вам создать собственную систему Linux из исходных кодов. LFS это не совсем инструмент, как остальные в этом списке, но вы все равно можете использовать его с той же целью — создать свой собственный дистрибутив Linux (и много узнать о Linux в целом).

5. Slax Modules Tool

Изображение 5

Если вы ищете простой в использовании инструмент, и вам нравится легковесный дистрибутив Slax — в основе которого Slackware, то вам повезло! Потому что у Slax есть онлайн-инструмент, который вы можете использовать для выбора модулей, которые вы хотели бы включить в свой дистрибутив. Я использовал этот инструмент в прошлом много раз, когда я хотел создать легкую живую систему для моих друзей, и она работает просто удивительно. Просмотрите категории программного обеспечения и выберите нужные приложения. Добавьте их в сборку. Не беспокойтесь, если вы пропустите что-то, так как всегда сможете добавить больше приложений после создания и запуска дистрибутива.

6. Live Magic

Картинка 6

Live Magic еще одна утилита Debian для создания дистрибутива. Она может создавать CD, USB, и сетевые образы. Его гораздо проще использовать, чем некоторые другие приложения в этом списке, такие как Remastersys, но он не использует вашу работающую систему как основу для создания образа. Вместо этого следуйте указаниям мастера и выберите свои параметры конфигурации. Программа вытащит пакеты из ваших репозиториев и добавит их в ваш образ.

7. Instalinux

Иллюстрация 7

Изюминка Instalinux в том, что он позволяет создавать образы ISO онлайн. На сайте можно выбрать на каком дистрибутиве будет основан ваш (это CentOS, Debian, Fedora, Mint, OpenSUSE, Scientific, и Ubuntu), какую версию это дистрибутива использовать и какие пакеты. Instalinux создает небольшой загрузочный ISO (в среднем 30mb) который после загрузки начнет установку и получит все остальные необходимые пакеты из интернета. Это самый универсальный инструмент из списка, к тому же веб-интерфейс прост в использовании. Однако он не предоставит вам live-образ с готовым рабочим окружением и рабочим столом.

8. SUSE Studio

Изображение 8

Для пользователей SUSE лучший выбор SUSE Studio. Немного похоже на Instalinux, SUSE studio позволяет вам используя веб-интерфейс создать свой собственный дистрибутив на основе SUSE. Доступно создание образов для CD, DVD, USB, жестких дисков, VMware, VirtualBox, и Xen. Перед использованием вам потребуется создать аккаунт – это просто, так как используется Single Sign On, и вы быстро можете зарегистрироваться используя ваш аккаунт Google, Facebook, и т.п. Вы сможете выбрать какая версия SUSE будет использована как основа, серверная редакция или нет, и какое окружение рабочего стола будет включено в сборку.

В заключении.

Я надеюсь, что эти инструменты для создания собственного дистрибутива Linux помогут вам. Их уровень сложности (и мощности) варьируется, но я попытался включить как простые в использовании приложения, так и приложения, которые дают вам больше возможностей. В дополнение к этим приложениям многие дистрибутивы имеют свои собственные инструменты, которые были упомянуты здесь, поэтому, если вы используете другой дистрибутив, лучше сначала проверить, какие инструменты доступны в частности для него , а затем, если вас не устроит то что вы найдете, попробуйте универсальные.

Собираем свой дистрибутив 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.
Вот что у нас получится в итоге:

Собираем свой дистрибутив Linux на флешке Linux, Debian, Livecd, Liveusb, IT, Длиннопост

Основной файл конфигурации сборки 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 и выше удалять модули, располагающиеся по алфавиту после, не надо.

Надеюсь, у вас получится собрать систему под себя достаточно быстро. Если есть вопросы по сборке — пишите комментарии, буду рад помочь. А на сегодня всё. Надеюсь, этот первый пост не станет последним)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *