Немного предыстории
Недавно, после очередного неудобного сетапа Windows в университете, меня посетила мысль загружать Linux с флешки, которая всегда со мной, и использовать его при работе где бы то ни было. Казалось бы, всё просто – взять условный Debian/Alpine/Arch Linux, установить его в раздел в loop устройстве, записать получившийся сырой образ диска на флешку и всё готово, но это далеко не то, чего бы я хотел.
У данного подхода есть свои плюсы и минусы, пожалуй начну с минусов:
Разного рода компоненты, например Xorg и systemd-journald, могут писать свои логи на диск для долгосрочного хранения, а флеш-память, как мы знаем, не вечная.
Система не защищена от перезаписи – даже смонтировав rootfs в ReadOnly, никто не мешает перемонтировать его и натворить бед.
Такой линукс без танцев с бубном при надобности не установить на диск.
А так же плюсы:
Возможность хранить данные и всегда иметь какие-то документы с собой.
Устанавливать и удалять пакеты при надобности.
Полная свобода при создании своего рабочего окружения.
В моём случае я бы хотел Live-образ, так как преимущества обычной установки мне не нужны и хранить данные мне тоже не нужно. У этого подхода так же есть свои плюсы и минусы, но они в основном противоположные представленным выше к первому подходу.
Сам процесс создания образа
Изначально я планировал использовать pungi с его огромным функционалом и гибкостью, но он слишком сильно завязан на Koji, так что мой выбор пал на livemedia-creator, который вполне справляется с данной задачей.
Утилита livemedia-creator из пакета lorax использует установщик из семейства RHEL – Anaconda, которая в свою очередь использует сценарии Kickstart для формирования системы. Данная операция требует как минимум 10 Гб свободного пространства на диске. Для начала установим пакеты:
# dnf install lorax-lmc-novirt pykickstart
Эти пакеты необходимы для непосредственно создания Live-образа и формирования одного Kickstart файла, чтобы избежать ошибок в Anaconda. Далее необходимо определиться с релизом Fedora (или другого RHEL-подобного дистрибутива) для нашего Live-образа, в моём случае это Fedora 37. Так как моя версия 36-ая, сценарии Kickstart из пакета spin-kickstarts
от Fedora 36 для 37-ой не совсем подойдут, поэтому установим еще Git:
# dnf install git
Альтернативный вариант
Но если желаемая версия совпадает с той, где будет проводиться процесс создания образа, можно установить и сам пакет spin-kickstarts:
# dnf install spin-kickstarts
После установки вышеперечисленных пакетов переходим в любую директорию, где будет проводиться работа, и клонируем репозиторий со сценариями Kickstart:
$ git clone https://pagure.io/fedora-kickstarts --depth=1 -b f37
Так как моя цель не просто создать собственный Live-образ, который от представленного на сайте Fedora Linux будет отличаться лишь более свежими пакетами и датой создания, а заполучить полноценное окружение для работы с возможностью при необходимости установить его на диск, я перехожу в директорию клонированного репозитория и создаю файл fedora-live-custom.ks
с нужными мне программами, например GNOME Builder и Telegram Desktop. Вот его содержимое:
# Включим основной файл Fedora Workstation под LiveCD
%include fedora-live-workstation.ks
# Добавим репозиторий RPM Fusion Free
repo --name="rpmfusion-free" --metalink=https://mirrors.rpmfusion.org/metalink?repo=free-fedora-$releasever&arch=$basearch
%packages
# Добавим несколько пакетов
clapper
cntlm
gnome-builder
gnome-console
gimp
libasan
telegram-desktop
vim
# И группу пакетов для разработки
@development-tools
# А так же уберём несколько пакетов
-gnome-music
-gnome-terminal # gnome-console на gtk4 вполне его заменяет
-gnome-terminal-nautilus
-xterm # устанавлиивается вместе с каким-то пакетом
%end
Так же туда можно дописать ещё некоторые параметры, например часовой пояс (timezone
) или действия после установки пакетов (%post
), но это уже зависит от потребностей. Больше информации можно найти в документации сценариев Kickstart.
Далее необходимо сформировать один .ks файл для livemedia-creator
:
$ ksflatten -c fedora-live-custom.ks -o flat-fedora-live-custom.ks -v f37
А теперь самое главное – создание Live-образа. Перепроверьте ещё раз наличие достаточного количества свободного пространства на диске, оно может закончиться в самый неподходящий момент. Для начала отключим защиту SELinux, что необходимо для Lorax:
# setenforce 0
Само создание образа производится одной командой:
# livemedia-creator --make-iso --ks flat-fedora-live-custom.ks --no-virt --iso-only --iso-name Fedora-Workstation-custom-Live-x86_64.iso --volid Fedora-Workstation --releasever 37 --resultdir ./result --nomacboot --project "Fedora Workstation"
Для понимания написанного объясню значения параметров:
--make-iso
– сообщаемlivemedia-creator
о создании образа в формате загрузочного ISO--ks flat-fedora-live-custom.ks
– выбираем файл сценария Kickstart--no-virt
– сообщаем о ненадобности использовать виртуализацию--iso-only
– удалить все производные файлы, кроме конечного Live-образа--iso-name
– задаём название образа для предыдущего параметра--volid
– название корневого раздела в образе диска--releasever 37
– задаём версию дистрибутива--nomacboot
– не применяем изменения для загрузки на компьютерах Mac, для желающих есть так же параметр--macboot
--project
– задаём название проекта, используется к примеру в GRUB
После выполнения команды в директорию ./result/
будет помещён Fedora-Workstation-custom-Live-x86_64.iso
. Сам процесс у меня занял 35 минут и больше всего времени у меня ушло к большому удивлению не на медленный DNF, а на сжатие SquashFS и скачивание пакетов.
Заключение
Создание своего Live-образа Fedora не является чем-то сложным, если использовать достаточно дружелюбный livemedia-creator
. Это не единственный способ создать Live-образы, упомянутый ранее pungi
может создавать сразу несколько образов, rootfs в самых разных вариантах, с или без OSTree, с индивидуальными настройками, со своими RPM пакетами, фильтрами, репозиториями и прочим, но это уже тема для отдельной статьи.
Замечу, что на Хабре есть полезная статья о создании LiveCD CentOS, которую можно прочесть здесь в учебных целях.
Делитесь своими предложениями и жалобами в комментариях, а так же результатами ваших стараний и замечаниями к статье. Это моя первая статья и я буду рад прочесть все комментарии кому эта статья пригодилась на практике.
Всем peace!