Записки IT специалиста

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Все началось вечером в пятницу, когда мне позвонил старый знакомый — начальник технического отдела фирмы специализирующейся на розничной продаже ПК. Они решили вместо DOS на компьютеры без ОС предустанавливать Ubuntu и он спросил меня, можно ли как нибудь сделать дистрибутив, чтобы все необходимое устанавливалось сразу.
Я решил, что данный вопрос будет интересен широкому кругу читателей и потратил вторую половину дня воскресенья на изучение данного вопроса. Все оказалось не просто, а очень просто. Нам понадобится установленный экземпляр Ubuntu, установочный образ и полчаса свободного времени.
Для создания собственного дистрибутива нам понадобится пакет Ubuntu Customization Kit, его можно установить через Центр приложений Ubuntu — Система — Набор для пользовательской настройки Ubuntu.
![]()
Либо с помощью команды:
Любители свежих версий ПО, всегда могут загрузить самую последнюю версию со страницы: http://sourceforge.net/projects/uck/files/.
Перед запуском UCK убедитесь, что установочный образ нужной вам архитектуры скачан и доступен на данном ПК. После запуска UCK предложит выбрать, какие именно локализации вы хотите включить в образ, выбираем русскую.
![]()
В следующем окне предстоит выбрать, какие языки будут доступны при запуске в режиме LiveCD, т.к. многоязыковой диск нам ни к чему, оставляем один русский. Затем выбираем, какой язык использовать по умолчанию, в данном случае вариант будет всего один.
![]()
После чего выбираем необходимые оконные менеджеры (можно выбрать сразу несколько) и на следующий вопрос («хотите ли настроить образ перед созданием») отвечаем утвердительно. Еще одно окно предложит нам удалить из образа программы для Windows (оболочка для запуска под этой ОС), можно ответить положительно, уменьшив итоговый размер образа, хотя это не критично, в большинстве случаев сохранить размер одного CD не удастся.
Закончив отвечать на вопросы выбираем образ и вводим название нового диска, начнется распаковка образа во временную папку, а вы пока можете сходить заварить кофе.
![]()
По окончании этого процесса вам будет предложено запустить пакетный менеджер или консоль, если вам привычней работать в командной строке, а также создать итоговый образ (последний пункт).
![]()
Пакетный менеджер ничем ни отличается от привычного нам Synaptic. Сразу подключим все репозитории Settings — Repositories.
![]()
Выходим по кнопке Close и обновляем список пакетов, нажав на кнопку Reload. После чего в нашем распоряжении привычный пакетный менеджер, можете выбирать необходимые вам пакеты. Мы выбрали:
- unrar — распаковщик популярных в нашей стране архивов RAR,
- mc — Midnight Commander для целей администрирования,
- f-spot — удобный менеджер фотографий,
- ubuntu-restricted-extras — пакет несвободных дополнений, включающий в себя шрифты, кодеки, флеш-плеер, java-машину и т.п.,
- samba — для работы с Windows сетью.
- openoffice.org-help-ru
- openoffice.org-hyphenation
- openoffice.org-l10n-ru
- openoffice.org-thesaurus-ru
![]()
По окончании процесса, закрываем пакетный менеджер и выбираем пункт Continue Building, программа создаст образ нашего дистрибутива, который можно найти в /home/имя_пользователя/tmp/remaster-iso. Прожигаем образ на болванку и пробуем установить систему на тестовый ПК. Вполне возможно, что потребуется доустановить какие-либо пакеты, чаще всего языковые. Фиксируем все, что требуется доустановить, и после всестороннего тестирования создаем новый дистрибутив, в котором учитываем все недочеты.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Создание собственного дистрибутива на базе Ubuntu с нуля
Конечно очень радостно, что существуют такие инструменты как Reconstructor и Ubuntu Customization Kit, однако они всё выполняют в автоматическом режиме и не очень-то подходят для тонкой настройки под себя. В этой статье я постараюсь рассказать как можно руками сделать всё то, что делают вышеназванные инструменты и как изменить многие недоступные им параметры.
Фронт работ
Для создания Ubuntu Custom Live CD нужно продумать три важных момента: 1) В какой системе мы будем строить наш диск. Надеюсь, все Вы прекрасно понимаете, что мы ведем речь про компьютер под управлением Ubuntu. Если Ubuntu у Вас не установлена, то Вы можете поставить ее на виртуальную машину и там уже строить образ диска. Помимо этого, нам нужно поставить следующие пакеты для создания живого диска: SYSLINUX, Squashfs-tools, genisoimage Первый пакет — загрузчик ядра, второй — файловая система SquashFS, а третий — создатель образа диска.
2) Папка для образа диска. Образ диска — это то, что будет записано на CD/DVD/BluRay/USB (в зависимости от того кому что нравится). Просто создайте отдельную папку для образа диска. Для образа нужно скопировать: — Загрузчик ISOLinux — Ядро с initrd и изолированной системой — Дополнительные файлы для указания времени загрузки и других важных (и не очень) параметров
Папка для образа диска создается отдельно от корня будущей изолированной системы.
3) Изолированная система
Изолированная система — это та система, которая будет загружена в LiveCD. Ей не нужны ни ядро, ни загрузчик, если Вы собираетесь устанавливать ОС с помощью установщика Ubiquity. Для того чтобы провести автоматическое определение и настройку оборудования, потребуется живая система под символичным названием Casper. Ее нужно установить в initrd, а ядро Casper скопировать в папку образа диска.
Изолированная система хранится и выполняется в виде файла, сжатого в файл SquashFS. На данный момент ИС будет сохранена в виде папки в хост-системе.
Создание изолированной системы
Для начала, установим debootstrap в хост-системе с помощью командной строки, после чего создадим папки «work» (для работы) и «image» (для изолированной системы). После установки запускаем debootstrap
Обратите внимание: Версия debootstrap для Ubuntu содержит файлы для загрузки только следующего релиза Ubuntu! Т. е. Вы не сможете скачать базовую систему для raring (Ubuntu 13.04) в precise (Ubuntu 12.04 LTS ). На наше счастье, обойти это ограничение легко обойти, скачав debootstrap из репозитория raring или взяв последнюю версию из папки pool и установив его с помощью dpkg. Помимо того, у debootstrap нет зависимостей, а значит его установка вручную не вызовет никаких проблем в Вашей системе
Обратите внимание: Если Вы хотите собрать следующий релиз Ubuntu, но не можете его загрузить, воспользуйтесь следующей хитростью:
Важно установить приложения вроде MySQL, Virtualbox после того как были скачаны ядро Linux (а оно у нас не скачано!(настолько у нас минимальна система)) и установлены общие настройки, потому что эти приложения требуют установки своих модулей ядра для полной настройки.
Если Вы планируете установить что-либо, использующее метапакеты окружений рабочего стола (например xfce4), Вам также потребуется связать файл в изолированной системе как следует (не только с помощью devpts). Иначе, GRUB при установке выдаст ошибку и Вы не сможете настроить пакеты. Чтобы этого избежать свяжите устройства с помощью команды:
Аналогично нужно примонтировать proc, sysfs и devpts Теперь скопируем системные файлы (их можно взять на любой машине с Ubuntu, подключенной к интернету):
Если Вам нужно, Вы можете подправить sources.list и добавить туда сторонний репозиторий. Если Вы добавляете PPA репозиторий, то Вам помимо самого репозитория нужно добавить еще и OpenPGP ключ для пакетного менеджера в изолированной системе. Его можно найти на странице описания репозитория (он может выглядеть вот так: 1024/12345678). Скопируйте или запишите часть после косой черты (как здесь: 12345678). Этот ключ нужно добавить как можно скорее, как только мы чрутнемся в изолированную систему.
Отсутствие этого файла вызывает массу проблем в изолированных системах во всех системах, начиная с Ubuntu 9.10: https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/430224
Решением может стать символическая ссылка на /bin/true:
Если Вы этого не сделаете, то консоль выругается:
Обновите пакеты, если хотите :
Установите пакеты, необходимые для живой системы:
Ранее, до Ubuntu 10.10 пакет discover назывался discover1.
Если Вы загружаете ОС Ubuntu 10.04, то Вам нужно поставить следующие пакеты: grub2 plymouth-x11
Для ранних релизов (заканчивая версией 9.04) была характерна следующая проблема: ОС вешала сеть, если был установлен Network Manager. На наше счастье, данная проблема была устранена в релизе 9.10. Команда для установки NM:
Далее, установите те программы какие Вы захотите. На данном этапе Вы создаете свою систему. Заполняйте ее тем, чем хотите. Однако перед этим поставьте программу ubuntu after install для установки тех программ, которые Вы добавить забыли. После наполнения ПО возвращайтесь к данному руководству.
Установка программы установки
Для GTK интерфейса — Unity, GNOME, XFCE и LXDE
Unity — стандартная ОРС для ubuntu, самая красивая ОРС (по моему мнению) GNOME — что-то по-новому от старого доброго Mac OS X XFCE и LXDE — это ОРС, не нагружающие ресурсы. Рекомендованы для установки на старых компьютерах
Для Qt интерфейса — KDE
KDE — это Windows-подобное окружение рабочего стола и пожалуй, во всем хочет походить на своего старшего собрата (например это ОРС самое большое по объему данных)
Дополнительная подготовка
На данном этапе я расскажу, как создать файлы initrd.lz и casper-uuid-generic, необходимые для нормальной работы образа. В chroot выполняем
В том же терминале открываем вторую вкладку и выполняем:
Возращаемся в первую вкладку и удаляем из /tmp все:
Очистка Чрута.
Если Вы установили все программы, то убедитесь что будет работать
Ранее в этом руководстве я просил Вас сделать бекап /sbin/initctl. Вы его сделали? Он сейчас может потребоваться. Если эта команда не сработает, восстановите /sbin/initctl из бекапа.
Если у Вас более одного ядра Linux, удалите старые ядра:
После чего проведите очистку:
Если у Вас все еще подключен /dev, отключите его:
То есть, Вы вошли в изолированную систему, установили пакеты, провели очистку и вышли.
Настройка окружающей среды по умолчанию
Данный пункт не является обязательным. При загрузке окружения рабочего стола (в моем случае Unity 7) хочется настроить программы на боковой панели, настроить часы, которые выглядят ужасно в обычной версии Unity. Поэтому здесь я расскажу как можно настроить unity 7. Общеизвестно, что Unity 7 настраивается через dconf. Файлы настроек по умолчанию находятся в папке
и имеют имена соответствующие иерархии в dconf-editor. Мы изменим некоторые из них:
Листинг com.canonical.Unity.gschema.xml
Листинг com.canonical.indicator.datetime.gschema.xml
Листинг org.gnome.nautilus.gschema.xml
Создание папки для CD диска и ее заполнение
Создайте папку для cd с тремя подкаталогами:
# То же самое можно сделать командой 'mkdir image image/casper image/isolinux image/install' Во-первых, Вам нужно скопировать ядро и initrd, созданное с помощью Casper в изолированной системе. Скопируйте их куда-нибудь вне изолированной системы и проведите следующее:
Во-вторых, если у Вас возникли проблемы с копированием ядра или инитрд — может быть, у Вас этот файл не один — тогда используйте следующие команды:
Теперь надо поставить ISOLinux и SBM командами:
Инструкции при загрузке при создании Remix
Для того чтобы дать какие-либо инструкции при загрузке пользователю нужно создать файл image/isolinux/isolinux.txt, например:
Графика во время загрузки может отсутвовать, но это не главное. Главное состоит в том, что в тексте сверху есть спецсимвол, указывающий на файл splash.rle. Чтобы создать этот хитрый символ нужно:
1. Скопировать текст и потом его изменить.
2. Использовать следующую команду:
и изменить файл emptyfile, используя любой текстовый редактор. Добавьте имя файла после символа и затем со следующей строки напишите то, что Вы хотите вывести на экран в качестве приветствия. Сохраните данный файл как isolinux.txt и дело в шляпе!
3. (Способ для Ъ-линуксоидов!) Используйте vi, нажмите Ctrl+v и затем Ctrl+x для того чтобы создать спецсимвол. Это не работает ни в nano, ни в gedit, ни в каком редакторе, похожем на них!
Для того чтобы создать файл splash.rle, создайте изображение 640*480, конвертируйте его в 15 цветов и сохраните файл в формате .bmp. После установите NetPBM и выполните команды:
Если Вы хотите использовать анимированные изображения, такие как Usplash, убедитесь в том что Вы добавили «VGA=RRR», где RRR — ширина изображения.
Настройка загрузчика
Создайте файл image/isolinux/isolinux.cfg для настройки загрузчика. Пожалуйста, прочтите инструкцию по созданию конфига в /usr/share/doc/syslinux для того чтобы узнать все возможности конфигурирования. Здесь я выложу образец конфига (если что, сверяйтесь с ним):
Не забудьте выбрать правильное расширение для initrd (initrd.gz или initrd.lz). Теперь в CD можно войти, по крайней мере после того, как мы создадим образ.
Помимо этого зададим нужную нам локаль при запуске с помощью стандартной темы ubuntu. Для этого выполним
Формальности.
Следующие действия нужны для нормальной работы LiveCD. Нравится Вам это или нет, это нужно сделать.
Создание манифеста.
Сжатие изолированной системы.
Для того чтобы сжать систему в один файл, нужно ввести команду:
Эта команда создаст на диске filesystem.squashfs с сжатой ОС. Если Вам нужно установить с LiveCD, оставьте раздел /boot в покое. Если Вы хотите создать LiveCD только для демонстрации, то /boot можно удалить. Тогда команда, указанная выше, будет иметь вид:
Да, и еще: если Вы создаете Убунту на версии, которая вышла раньше, то нужно установить пакет из той версии, какую Вы хотите создать! (Иначе Ваш LiveCD не загрузится) Например, у Вас установлена Ubuntu 12.04, а Вы хотите создать сборку Ubuntu 14.04. Тогда Вам потребуются инструменты из trusty (14.04) репозитория. Помимо файла сжатой файловой системы, нужно написать файл с размером этой ФС. Для этого выполним команду
Создание diskdefines
Признание LiveCD подлинной
Создайте жесткую ссылку ubuntu на папку с образом диска и папку «.disk». Без этого LiveCD будет загружаться но USB Creator работать не будет. На всякий пожарный, создайте файлы со следующей информацией:
Как самому за один вечер собрать минимальную ОС Linux из исходного кода

В современном мире нас окружает огромное количество электронных устройств различной степени сложности. Если устройство более или менее сложное, например, телевизор, маршрутизатор, смартфон, то с большой долей вероятности оно работает под управлением операционной системы Linuх, и эта мысль не даёт мне покоя.
Ещё больше не даёт покоя мне тот факт, что все ядра операционной системы Linux, которые работают на различных устройствах и серверах, собраны из исходного кода, находящегося в репозитории на сайте kernel.org.
Такие разные устройства, а операционная система, работающая на них, собрана из одного и того же исходного кода! Это утверждение, конечно, верно лишь отчасти, так как фактически ядро обычно расширено и модифицировано разработчиками конкретных дистрибутивов Linux, а также разработчиками конкретных устройств, но общего исходного кода достаточно много.
Мне всегда хотелось собрать операционную систему Linux самому из исходного кода, но процесс этот всегда казался сложным и запутанным, да и многого я не понимал. Но всё-таки в определённый момент времени я накопил достаточное количество знаний, чтобы осуществить свою мечту. В этой статье я хочу рассказать вам, как собрать минимальную Linux из исходного кода и запустить её у себя на компьютере.
Она не позволит использовать все возможности вашего компьютера, но будет иметь главное – интерфейс командной строки. Поверьте мне, получив работающий интерфейс командной строки Linux на вашем реальном компьютере, вы испытаете неповторимые ощущения.
Вы удивитесь, но минимальный набор, необходимый для получения командной строки Linux содержит всего два файла: файл ядра Linux и файл начального образа корневой файловой системы. Естественно, необходим загрузчик, который загрузит эти два файла и инициирует выполнение ядра, передав ему образ начальной корневой файловой системы и другие параметры, если они необходимы.
▍ Минимальная операционная система Linux
Чтобы вы как-то смогли работать с операционной системой, вам нужны четыре составляющие: загрузчик, ядро, начальная корневая файловая система и набор утилит, являющийся интерфейсом к ядру операционной системы.
Загрузчик — это специальная программа, которая позволяет процессору начать выполнение машинных инструкций, находящихся в файле ядра операционной системы.
- aбстракции для различных физических устройств ввода-вывода, с которыми может работать процессор (драйвера устройств),
- aбстракции структур данных для хранения (файловые системы),
- aбстракции для разделения во времени выполнения программных инструкций (процессы, потоки),
- другие абстракции.
Начальная корневая файловая система нужна для того, чтобы ядро выполнило начальную загрузку файлов, необходимую для дальнейшей загрузки операционной системы. Самыми важными являются модули ядра Linux, не вошедшие в состав файла ядра, но нужные для дальнейшей загрузки, и файл, на основании которого будет создан самый первый процесс при загрузке операционной системы (init).
Набор утилит позволяет вам работать с абстракциями, находящимися в ядре операционной системы. В зависимости от сложности и назначения устройства, на котором будет работать операционная система, этот набор может различаться. Утилиты определяют функциональность и интерфейс взаимодействия с пользователем. Например, для роутера они будут одни, для телефона другие, а для персонального компьютера третьи.
▍ Загрузка операционной системы Linux
- Происходит включение компьютера.
- BIOS или UEFI находит на компьютере загрузчик операционной системы и передаёт управление ему.
- Загрузчик операционной системы загружает в оперативную память файл ядра Linux и файл образа начальной файловой системы (файл initrd).
- Загрузчик операционной системы передаёт управление ядру операционной системы Linux.
- Ядро операционной системы проводит начальную инициализацию.
- Ядро операционной системы получает доступ к файлам, которые находятся в образе начальной файловой системы (монтирует образ).
- Ядро ищет файл init в начальной файловой системе и запускает самый первый процесс пользователя на его основе.
- Процесс init монтирует уже постоянную файловую систему, продолжает инициализацию операционной системы и переносит корень файловой системы Linux на смонтированную файловую систему и запускает другие процессы, которые необходимы для инициализации.
▍ Дистрибутивы Linux
Дистрибутив – это ядро Linux, набор библиотек, утилит и программ, который устанавливается на компьютер или устройство.
На данный момент количество различных дистрибутивов огромно. Их перечень вы можете посмотреть на сайте DistroWatch.
Современные дистрибутивы Linux обычно распространяются в виде образов ISO и позволяют устанавливать обновления и дополнительные программы (пакеты), но мы делаем минимальный дистрибутив, поэтому, естественно, у нас такой возможности не будет.
Одна из самых полных инструкций, как собрать дистрибутив Linux с нуля, находится здесь. Сборка дистрибутива Linux — процесс интересный и позволит вам узнать много нового, но уж очень он долгий, а значит вам необходима огромная сила воли, чтобы выполнить его от начала до конца.
Когда ты получаешь такой огромный массив информации, не сильно разбираясь в теме, есть вероятность, что ты часть вещей выполнишь, не сильно вникая в суть.
Поэтому я стремился упростить создание дистрибутива до минимума: мы не будем монтировать постоянную файловую систему, а в качестве файла init будем использовать файл скрипта, который выполнит минимальную инициализацию и запустит оболочку sh.
▍ Загрузка операционной системы
За долгие годы своего существования Linux был портирован на множество аппаратных платформ. Загрузка Linux для каждой платформы отличается.
- Будет ли использоваться для загрузки BIOS или UEFI.
- На каком носителе (жёсткий диск, флеш-накопитель, оптический диск, компьютерная сеть) BIOS или UEFI будет искать загрузчик.
- Как размечен жёсткий диск или флеш-накопитель (MBR или GPT).
- На каком носителе и в какой файловой системе (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.
- В файле Dockerfile вы описываете структуру окружения для вашей программы или скрипта.
- При помощи утилиты docker на основании Dockerfile вы создаёте образ этого окружения в определённом формате.
- При помощи этой же утилиты вы можете запустить на основе образа экземпляр вашей программы или скрипта, работающий в изолированном окружении и называемый Docker-контейнер в терминологии Docker.
- Созданные вами образы можно хранить в репозитории и повторно использовать.
Docker-контейнеры, созданные на основании одного и того же образа, будут идентично выполняться на всех компьютерах, способных его выполнить. - 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 и вместо $
▍ Запись загрузочного образа для флеш-накопителя на носитель
Созданный файл образа для флеш-накопителя (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 у вас превратятся в понимание и умение.
Как создать свой дистрибутив на базе Linux Mint (Ubuntu)? Легко!
Представьте, что у вас есть несколько компьютеров в вашем доме, лаборатории или учреждении. И все они должны иметь одинаковые конфигурации и приложения.
А теперь представьте, Вы скачиваете Linux (Mint), делаете живой USB и устанавливаете его на все системы. И тогда вы должны сделать одну и ту же конфигурацию и установить один и тот же набор приложений на все из них.
Что, если я скажу вам, что есть способ сэкономить ваше время от выполнения этих повторяющихся задач? Как насчет создания модифицированного ISO и размещения этого настроенного Linux Mint на живом USB? Таким образом, он устанавливает один и тот же настроенный дистрибутив Linux на всех системах.
Существует удобный инструмент GUI под названием Cubic, который позволяет предварительно настроить ваши установки самым простым способом.
Позвольте мне рассказать вам о его функциях и о том, как вы можете использовать его для настройки Linux Mint 21 ISO.
Обратите внимание, что Cubic должен работать с другими дистрибутивами, такими как Ubuntu, Fedora и т. д. Я протестировал его с Mint, но вы можете попытаться выполнить шаги для других дистрибутивов.
Cubic: самый простой способ создания пользовательских ISO-образов

Cubic (Custom Ubuntu ISO Creator) – это инструмент с графическим интерфейсом, созданный для настройки дистрибутивов на основе Ubuntu.
Это дает вам доступ к среде chroot ISO, где вы будете вносить значительные изменения, а также позволяет вам принимать решения о пакетах отдельно для минимальной и нормальной установки.
Но прежде чем перейти к процедуре, давайте посмотрим на некоторые особенности Cubic.
Ключевые особенности Cubic:
- Простой в использовании графический интерфейс.
- Позволяет подбирать пакеты для минимальной и нормальной установки отдельно.
- Он имеет три вкладки по определенным причинам:
- Вкладка ядра: Если вы пошли с установкой нескольких ядер, вы можете указать загрузочное ядро отсюда.
- Вкладка загрузки: Если вы заинтересованы в изменении параметров загрузки, это место, откуда вы можете настроить, как будет загружаться измененный ISO.
- Предлагает различные типы форматов сжатия для сжатия измененных файлов ISO.
- Поставляется с QEMU (эмулятор машины с открытым исходным кодом и виртуализация) для тестирования модифицированных ISO.
Кажется слишком многообещающим, не так ли? Итак, давайте продолжим процесс установки.
Установка Cubic в дистрибутивах на базе Ubuntu
Cubic недоступен в репозитории Ubuntu по умолчанию, поэтому вам нужно добавить PPA, чтобы установить программное обеспечение, недоступное в репозитории по умолчанию:
Теперь давайте обновим репозиторий и установим Cubic:
Итак, теперь давайте перейдем к тому, как вы можете использовать Cubic для настройки ISO.
Использование Cubic для создания пользовательских ISO-образов
Для этого руководства я собираюсь использовать Linux Mint 21 ISO. Чтобы сделать это руководство более актуальным, я выполню следующие операции:
- Удаление ненужных пакетов, что делает его минимальным ISO Linux Mint.
- Обновите оставшиеся пакеты до последней версии.
- Добавление новых фоновых изображений.
- Установлю последнюю версию ядра Linux (6.0).
Вы можете сделать свою собственную модификацию в зависимости от вашего вкуса.
1. Добавление/создание каталога проекта

Когда вы откроете Cubic, он попросит вас выбрать каталог проекта. Это будет папка где будут лежать, все связанные с созданием пользовательских ISO-образов файлы.
Здесь я создал новый подкаталог внутри моего каталога HOME. Убедитесь, что у вас есть отдельный каталог для каждого проекта Cubic, который вы делаете. Как только вы закончите выбор каталога проекта, нажмите кнопку Далее.
2. Выберите исходный ISO-образ
Здесь вы должны выбрать исходный ISO-образ, с которым вы хотите работать.

Как вы можете видеть, я выбрал Linux Mint 21, и он автоматически получал всю остальную информацию.
3. Работа с средой chroot
Как только вы выберете ISO, он извлечет ISO-образ, и вы войдете в среду chroot.

Это обычный терминал, а также это место, где я собираюсь выполнять большинство операций, связанных с настройками.
Удаление пакетов
Все зависит от вас, сколько пакетов вы хотите удалить, или вы также можете пропустить раздел удаления пакетов. Чтобы удалить пакет, вам не нужно использовать sudo, который вы обычно используете, поскольку удаление пакетов требует привилегий суперпользователя.
Итак, предположим, что вы хотите удалить thunderbird:
Но, как я уже говорил вам ранее, я собираюсь использовать минимальный рабочий стол, я удалю большинство дополнительных приложений с графическим интерфейсом, включая Libreoffice. И если вы хотите сделать то же самое:

Да, это так просто!
Обновление существующих пакетов
Если вы хотите иметь самые последние пакеты в вашей следующей установке Ubuntu, это шаг, который вы должны рассмотреть следующее:
Добавление фоновых изображений
Во-первых, давайте изменим текущий рабочий каталог на /usr/share/backgrounds:
Поскольку Cubic позволяет пользователям копировать файлы путем перетаскивания в текущий рабочий каталог (/usr/share/backgrounds в нашем случае), я собираюсь использовать копирование моих обоев (которые я локально скачал).
Это должно быть так, если вы хотите изменить фон из файлового менеджера, но если вы хотите, чтобы они были перечислены в диалоговом окне изменения фона, вам придется добавить каждый из них в XML-файл, расположенный по адресу /usr/share/gnome-background-properties.
Добавление ядра Linux 6.0
В этом разделе я собираюсь загрузить .deb пакет заголовков и модулей ядра, а затем установлю их с помощью команды dpkg.
Используйте заданные 4 команды одну за другой, и он загрузит модули ядра и заголовки:
Как только вы закончите с загрузками, вы можете использовать команду dpkg для их установки:

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

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

Если вам интересно, почему он показывает 3 варианта, позвольте мне рассказать вам, как:
- 5.15.0-41 – предустановленное ядро
- 5.15.0-52 – установлено при обновлении
- 6.0 – установлен мной вручную.
Я иду с ядром Linux 6.0 здесь!
6. Выберите тип сжатия ISO
Это последний шаг в конфигурации, где вы должны выбрать алгоритм сжатия.

Вам не обязательно иметь знания о каждом типе сжатия, так как он уже дал график, с помощью которого вы можете выбрать степень сжатия.
И я иду с одним вариантом по умолчанию, выбираю: gzip
Как только вы закончите выбор типа сжатия, нажмите кнопку «Создать», и ваш ISO будет создан!
7. Тестирование ISO-файла с помощью встроенного эмулятора QEMU
После того, как Cubic завершен с построением ISO, который вы проинструктировали, он позволяет вам протестировать ISO-файл. Для тестирования файла необходимо нажать на нижнюю часть, расположенную в левом верхнем углу: Test

И он запустит QEMU:

И я столкнулся с проблемой, когда пытался обновить репозитории, сказав: Please use apt-cdrom to make this CD-ROM recognized by APT.
Как решить проблему “please Use apt-cdrom to make this CD-ROM recognized by APT”

Чтобы решить эту проблему, вам просто нужно отключить установочный диск (CD-ROM) от программных ресурсов.
Откройте программные ресурсы в Linux Mint, и если вы используете Ubuntu, вам придется использовать инструмент «Программное обеспечение и обновления».

Как только вы отключите CD-ROM, все должно заработать так как будто вы скачали ISO с официальной страницы!

Это было быстро. Правильно?
Заключительные слова
Это был мой взгляд на то, как вы можете легко создавать пользовательские ISO-образы Ubuntu или других дистрибутивов Linux, используя Cubic с его практическим использованием.