Linux Mint и его Cinnamon. Очерки применителя. Часть 11. Сборка своего образа

Алексей Федорчук aka Alv

Последний очерк посвящается апофеозу знакомства с дистрибутивом Mint и его Cinnamon — сборке индивидуализированной системы на его основе. Как сказал то ли один из премьер-министров Великобритании, то ли некий президент Франции (кому только это изречение ни приписывали?):

Тот, кто в (информационной) юности не мечтал собрать свой дистрибутив Linux’а, не имеет сердца. Тот, кто продолжает мечтать об этом в (информационной) зрелости — не имеет разума.

Однако применительно к Linux Mint вполне возможно сочетать сердечность и разумность даже в преклонные годы, ибо собрать свою индивидуализированную систему на базе этого дистрибутива и просто, и полезно.

Свой Mint: введение

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

В сети можно найти упоминания о нескольких инструментах для изготовления собственного дистрибутива на базе Ubuntu и её производных (а Mint, как известно, принадлежит к их числу):

  • oem-config-remaster — утилита командной строки, позволяющая сделать снапшот установленной системы;
  • remastersys — утилита для резервного копирования установленной системы и создания на её базе Live-носителя; именно таким образом собирается, например, дистрибутив Matuntu — отечественный вариант Ubuntu с MATE в качестве рабочей среды;
  • Ubuntu Builder— программа с графическим интерфейсом, позволяющая скомпоновать свой дистрибутив попакетно.

Однако первые две показались мне сложноватыми и избыточными для моих целей, а последняя, похоже, прекратила своё развитие — версии её для Ubuntu Trusty, на которой основываются текущие релизы Mint, в PPA-репозитории не обнаружилось.

И в итоге я остановился на программе Ubuntu Customization Kit (далее — UCK): гугление показало, что это примерно то, что мне нужно, ибо специально предназначается для коррекции состава пакетов в первую очередь.

UCK: обзор

Программа UCK в виде одноимённого пакета имеется в официальном репозитории, и потому может быть установлена любым из стандартных способов. После этого в секции Администрирование главного меню Cinnamon появляется пункт, который, как ни странно, называется Ubuntu Customization Kit, через который эту программу и можно запустить. Но прежде чем смотреть, что она после этого делает, попробуем представить, что у неё внутре.

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

  • монтирование образа как loop-устройства;
  • развёртывание её файловой системы — нынче все дистрибутивы используют какой-либо механизм компрессии, в частности в убунтоидах это SquashFS;
  • монтирование в loop-систему как связанных (bind) таких служебных, но абсолютно необходимых каталогов материнской системы, как /dev, /sys и, на всякий случай, /proc;
  • выполнение операции chroot в loop-каталог, становящийся таким образом корневым;
  • выполнение в chroot-окружении необходимых действий по удалению ненужных пакетов и установке необходимых;
  • выход из chroot-окружения и обратная запаковка loop-каталога;
  • размонтирование loop-устройства и создание из него загрузочного iso-образа с помощью isolinux.

Интуитивно понятно, что UCK не делает ничего иного, кроме перечисленного — он просто автоматизирует описанный процесс, делая его этапы почти незаметными для применителя.

Основные исполняемые файлы пакета uck (а их 16 штук) собраны, понятное дело, в каталоге /usr/bin и имеют префикс uck-*. Все они являются самыми обычными шелл-скриптами, причём по их именам легко догадаться о назначении каждого. «Головным», то есть запускающим весь процесс скриптом является /usr/bin/uck-gui — именно он вызывается через пункт меню Администрирование -> Ubuntu Customization Kit:

10-uck_000

А через редактор меню можно посмотреть на его свойства:

10-uck_000a

По скриншоту можно догадаться о присутствии в строке запуска опции --wait-before-exit, отвечающей за ожидание нажатия Enter перед выходом из программы после успешного завершения её работы.

Кстати говоря, при неуспешном завершении, то есть возникновении ошибки по любой причине (например, нехватке места на целевом устройстве), ничего не происходит, кроме остановки работы. Никаких возвратов назад не предусмотрено, остаётся только закрывать главное терминальное окно программы (о котором далее) и начинать всё сначала. Так что, учитывая длительность распаковки SquashFS и необходимость удаления образовавшихся в процессе файлов (а их — многие десятки тысяч, что на файловой системе, например, XFS затягивается очень надолго), лучше действовать аккуратно и по возможности не ошибаться.

Команда uck-gui запускается от лица обычного пользователя — пароль для доступа к административным привилегиям запрашивается только тогда, когда они на самом деле потребуются. Кроме указанной --wait-before-exit, она имеет ещё как минимум две опции. Первая, -m, обеспечивающая кеширование модифицированных частей образа, работает, как сказано в man (1) uck-gui, не всегда, и потому в стандартной ситуации не используется.

Вторая опция также штатно не задействована, но она может оказаться важной для применителя. Это опция remaster-dir, определяющая рабочий каталог для UCK, отличный от умолчального ~/tmp. Через редактор меню Cinnamon я переопределил этот каталог как ~/data/my-mint, поэтому итоговая команда для запуска UCK через меню приобрела такой вид:

uck-gui --wait-before-exit /home/data/my-mint

Кроме запуска процесса, сценарий uck-gui отвечает, в том числе, и за выбор типа десктопа — unity, gnome, kde, или others. Однако попытки вносить здесь какие-либо изменения (например, пополнение списка доступных десктопов) никакого результата за собой не повлекут. То есть добавленные десктопы появятся в меню их выбора, но ничего не изменится.

Потому что на самом деле кроме исполняемых скриптов в каталоге /usr/bin, основным компонентом UCK является также каталог /usr/lib/uck/. А в нём, кроме всего прочего — файл /usr/lib/uck/customization-profiles/localized_cd/customize, представляющий собой исполняемый шелл-сценарий, который отвечает в том числе и за вызов терминальной программы. Запомним его — в некоторых случаях он подлежит ручному редактированию.

Впрочем, всё сказанное проще продемонстрировать на примере конкретной сборки своего варианта дистрибутива, чем мы сейчас и займёмся.

UCK: процесс

Сразу после запуска UCK перед нами появляется пустое терминальное окно и на фоне его — приглашение программы:

10-uck_001

В нём указаны системные требования, не являющие собой ничего сверхъестественного: 5 ГБ свободного пространства в каталоге ~/tmp (или его аналоге, определённом выше) и доступ в Интернет. Так что можно смело нажимать OK и приступать к кастомизации, которая начинается
с выбора локали — сначала для инсталлятора:

10-uck_002

Затем — для Live-носителя:

10-uck_003

И наконец — для и инсталлированной системы:

10-uck_004

Список всех доступных содержится в файле /usr/lib/uck/langlist. Причём, при желании иметь русифицированную систему, можно ограничиться отметкой боксика ru во всех трёх случаях. Впрочем, в Live-среде локаль всё равно останется en_US (о чём программа честно предупреждает). Однако язык инсталлтора будет русским. А в установленной системе локаль по умолчанию определится как надо:

~ $ locale
LANG=ru_RU.UTF-8
...

И к ней автоматически добавятся такие:

~ $ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
ru_RU.utf8
ru_UA.utf8

Правда в Mint, в отличие от Ubuntu, ни одна из многочисленных английских локалей не будет всплывать в самый неподходящий момент.

Следующий шаг кастомизации — выбор рабочей среды:

10-uck_005

На самом деле он определяет не среду, а терминальную программу, в которой будет жить chroot-окружение. При выборе первых трёх вариантов её будет соответствующий штатный терминал (Konsole, GNOME Terminal или Xfce Terminal), в случае варианта четвёртого будут просто перебраны они же плюс LXTerminal из LXDE. Соответственно, запустится тот, что найдётся первым, так что выбор пункта other подойдёт в подавляющем большинстве случаев, вне зависимости от десктопа, используемого на потрошимом Live-носителе.

На самый крайняк предусмотрен запуск XTerm, который, казалось бы, имеется в любом дистрибутиве. Но вот в Mint’е ни в одной официальной редакции его как раз нет. Поэтому при сборке системы с десктопом MATE потребуется редактирование того самого файла /usr/lib/uck/customization-profiles/localized_cd/customize, который я ранее предлагал запомнить. То есть в его секцию function run_console() следует вписать такие строки:

         if [ «$CONSOLE_APP» = «» ]; then
                 CONSOLE_APP=`which mate-terminal`
                 CONSOLE_APP_OPTIONS=(-t «UCK customization console» -e /bin/bash)

Я на всякий случай дописал в него также определения для терминальных программ Sakura и Terminator, которые временами использую.

        if [ «$CONSOLE_APP» = «» ]; then
                CONSOLE_APP=`which terminator`
                CONSOLE_APP_OPTIONS=(-t «UCK customization console» -e /bin/bash)
        fi
	if [ «$CONSOLE_APP» = «» ]; then
		CONSOLE_APP=`which sakura`
		CONSOLE_APP_OPTIONS=(-t «UCK customization console» -e /bin/bash)
        fi

Теоретически тут можно переопределить и командную оболочку (например, /bin/zsh), но я этим заморачиваться не стал.

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

10-uck_006

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

Далее следует серия вопросов — о желании кастомизировать будущий образ мануально:

10-uck_007

Об удалении Windows-related файлов, типа autorun.inf (которых, впрочем, на установочном носителе Mint и так нет):

10-uck_008

О создании гибридного образа — то есть пригодного для записи как на OD, так и на USB:

10-uck_009

На все эти вопросы я, по понятным причинам, отвечал положительно, иначе и говорд городить бы не стоило.

Далее сообщается, что вся необходимая информация собрана, по введении пароля можно приступать к сборке диска, который будет помещён в path2/remaster-new-files под именем livecd.iso (спрашивается, зачем придумывать ему осмысленное имя?):

10-uck_010

А для начала процесса в исходном терминальном окне надо ввести пароль для доступа к адмнистративным привилегиям:

10-uck_011

Вслед за этим происходит монтирование исходного образа, его разворачивание и декомпрессии SquashFS, которая занимает немало времени:

10-uck_012

Когда же она закончится, каталог, определённый в качестве remaster-dir, будет выглядеть так:

ls [remaster-dir]
build.log
customization-scripts/
remaster-apt-cache/
remaster-new-files/
remaster-root/
remaster-root/home

Очевидно, что build.log содержит протоколирование хода процесса, а в каталоге customization-scripts/ собраны скрипты кастомизации, сгенерированные посредством сценариев из /usr/lib/uck/. В каталоге remaster-apt-cache/ будет помещён локальный кеш устанавливаемых пакетов, а сами они в подкаталоге remaster-apt-cache/archives — аналоге /var/cache/apt/archives установленной системы. Таким образом, скачанные пакеты не засоряют ни корень развёрнутой из Live-образа системы (он расположен в каталоге remaster-root/), ни, тем более, каталог для сборки уже непосредственно нового образа — remaster-new-files/. В последнем после успешного завершения всего предприятия этот самый образ, под именем livecd.iso, и окажется. Ну а remaster-root/home, ясное дело, является домашним каталогом администратора (аналог /root обычной файловой иерархии).

Далее предлагается выбрать»заказное» действие — Run console application или Continue building:

10-uck_013

Выбор первого пукта очевиден. Он влечёт за собой выполнение той самой команды chroot, о которой я говорил раньше, и запуск того самого терминала, который был неявным образом определён на стадии так называемого выбора десктопа:

10-uck_014

Обращаю внимание — командная оболочка в терминале — Bash, запущенная от лица администратора. То есть в дальнейшем для установки/удаления пакетов и прочих подобных мероприятий команда ыгвщ не понадобится.

Если предыдущие стадии завершились успешно, то начинается самое важное: собственно потрошение исходного образа. Тут требуется аккуратность и последовательность, нарушение которой влечёт ошибки, которые, как я уже говорил, крайне нежелательны. Так что в следуещем миниочерке процедура потрошения будет рассмотрена подробно. А пока завершу описание основного процесса.

По завершении потрошения опять возникает панель с предложением выбрать «заказное» действие — и теперь столь же очевиден выбор второго из них:

10-uck_015

После чего начнается исполнение сценариев кастомизации, плавно переходящее в компрессию системы в виде SquashFS — это будет самым долгим делом во всём процессе:

10-uck_016

Однако всё когда-нибудь кончается — и упаковка SquashFS закончится сообщением об успехе операции и напоминанием о том, где и под каким именем можно найти её результат:

10-uck_017

Приняв это к сведению, я узнал, что собранный образ не вместится на стандартный семисотмегабайтный CD:

10-uck_018

Что, как выяснилось, соотвтетствовало действительности, о чём скажу в следующем миниочерке. А пока оставалось только нажать OK, что повлекло закрытие окна сборки. А в первом терминале — нажать Enter, в результате закроется и он:

10-uck_019

А итоговый образ, как уже говорилось, можно найти в каталоге /home/data/my-mint/remaster-new-files под именем livecd.iso.

«Потрошение» образа

А теперь я вернусь назад и расскажу о своём опыте «потрошения» исходного образа Cinnamon-редакции Mint. Не как пример для подражания или, тем более, копирования, но как вариант возможных действий. И себе на память — в качестве шпаргалки, тоже пригодится.

«Потрошению» подвергся образ Cinnamon-редакции Mint 17.1 Rebecca в 64-битном варианте:

10-uck_020

Для начала я подключил PPA-репозитории, которые предполагал использовать:

# add-apt-repository -y ppa:mystic-mirage/komodo-edit && add-apt-repository -y  ppa:zfs-native/stable && add-apt-repository -y ppa:andrew-crew-kuznetsov/crew

Напоминаю, что командная оболочка запущена от имени администратора, что символизиуется видом приглашения командной строки в виде решётки #.

Подключение репозиториев можно проделать и с помощью mintsources, запустив его из командной строки. И тут только не следует тянуть с этим делом — после удаления ненужных (мне) программ он может работать с ошибками. Если же прибегнуть к стандартному add-apt-repository, то этой проблемы не возникает, и подключение PPA-репозиториев можно отложить.

Как обычно, подключение репозиториев надо завершить обновлением кеша пакетов:

# apt update

И теперь, казалось бы, самое время выполнить общее обновление системы. Однако — увы: у меня оно ни разу не проходило ни через mintupdate, ни через apt upgrade ни в каких вариантах: ни с отключением Менеджера обновлений в хост-системе в первом случае, ни с ручной фиксацией версий пакетов, не обновляемых mintupdate — во втором. Так что попытки эти я оставил, переходя сразу к удалению пакетов, которые полагаю лишними — Libreoffice, GIMP, все мультимедийные, Thunderbird и всякие мелочи, типа Tomboy:

# apt purge tomboy gimp thunderbird libreoffice* banshee brasero totem vlc gimp-data libgimp2.0

Далее настала очередь шрифтов — удалению подверглись кхмерские, таиландские и прочие шрифты, столь необходимые в наших широтах:

# apt purge fonts-kacst fonts-kacst-one fonts-khmeros-core fonts-lao fonts-lklug-sinhala fonts-nanum fonts-sil-abyssinica fonts-sil-padauk fonts-takao-pgothic fonts-thai-tlwg fonts-tibetan-machine fonts-tlwg-garuda fonts-tlwg-kinnari fonts-tlwg-loma fonts-tlwg-mono fonts-tlwg-purisa fonts-tlwg-sawasdee fonts-tlwg-typewriter fonts-tlwg-typist fonts-tlwg-typo fonts-tlwg-umpush fonts-tlwg-waree ttf-indic-fonts-core ttf-punjabi-fonts

И напоследок — удаление драйверов видеокарт, последние представители которых были списаны в утиль много лет назад:

# apt purge
xserver-xorg-video-cirrus xserver-xorg-video-mga xserver-xorg-video-neomagic xserver-xorg-video-openchrome xserver-xorg-video-qxl xserver-xorg-video-s3 xserver-xorg-video-savage xserver-xorg-video-siliconmotion xserver-xorg-video-sis xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident xserver-xorg-video-ati xserver-xorg-video-mach64 xserver-xorg-video-vmware xserver-xorg-video-vmware

Массовое удаление пакетов по традции следует завершать командой

# apt autoremove

Она удаляет «осиротелые» зависимости, от которых больше ничего не зависит. Впрочем, в моём случае таковых не оказалось.

Теперь настало время собирать камни устанавливать пакеты. Каковых оказалось не так много:

# apt install zsh gprename hunspell-ru-ie-yo mc mdadm uck shutter komodo-edit komodo-edit-ru gnumeric abiword gnome-mplayer asunder lame flac terminator tilda yagf system-config-lvm f2fs-tools nilfs-tools btrfs-tools ubuntu-zfs google-earth-stable virtualbox-4.3

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

Напоследок была установлена новая Opera, предварительно скачанная и помещённая в каталог path2/remaster-root/tmp:

# apt deb path2/remaster-root/tmp

После установки пакетов остались последние штрихи — обеспечить «нескучные обои» некоторые мелочи. Первая задача была решена лобовым копированием с хост-системы (и в её среде) каталога с моими любимыми фоновыми картинками в каталог path2/remaster-root/usr/share/backgrounds. И созданием (уже в chroot-окружении) символической ссылки:

# ln -s ../linuxmint-alv/Mount_of_the_Rising_Sun.jpg default_background.jpg

Далее, с хост системы же были перенесены настроечные файлы:

мои конфиги для Zsh — ~/.zshrc и ~/.zshenv — в каталог /etc/zsh под именами newuser.zshrc.recommended и zshenv, соответственно;

файла customize, описывающего доступные для UNC терминалы — в каталог path2/remaster-root/usr/lib/uck/customization-profiles/localized_cd/ (с тем же именем);

файлов словаря для русского спеллинга в Komodo Edit (ru_RU.aff и ru_RU.dic) — в калалог path2/remaster-root/usr/lib/komodo-edit/mozilla/dictionaries.

И теперь оставалось только выйти из chroot-окружения и дождаться окончания сборки нового образа. Объём которого составил 1484 МБ — против 1478 МБ образа исходного. Но я и не ставил своей целью его уменьшение.

Получившийся образ был скопирован куда надо, получил нормальное имя alv-rebecca.02.iso и контрольную сумму командой

$ md5sum alv-rebecca.02.iso > alv-rebecca.02.md5

После этого образ подвергся проверке сначала в Live-режиме, а затем был установлен в виртуальной машине — проверять его на реальном железе мне в данный момент негде. Тем не менее, поскольку все предыдущие опыты такого рода заканчивались успешно, я решил поделиться своим образом с народом — вдруг кому пригодится. Так что скачать его можно с Яндекс.Диска.

Заключение

В заключение этого очерка скажу пару слов о том, зачем всё это делалось и делается — хтя, возможно, с этого следовало начать. Ибо вопрос этот возникает возникает довольно часто. Правда, я обычно отвечаю на него не вполне политкорректно:

Если вы не знаете, зачем это — значит, вам это не нужно.

Но можно попробовать ответить и иначе. Собирал я образы, разумеется, в первую очередь для себя, любимого, дабы иметь возможность устанавливать Mint с его Cinnamon в той комплектации, которая устраивает меня на 146%.

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

В-третьих, образ может быть использован для не совсем стандартных инсталляций, например, с подключением softRAID, что штатно его инсталлятором не поддерживается, на файловую систему Ext4 с отключённым журналирование (что до недавнего времени пропагандировалось Google как самое быстрое решение), для подключения существующего пула ZFS или создания нового.

В четвёртых, просто для экспериментов с дисковыми разделами и файловыми системами, в том числе и с относительно экзотическими, такими, как f2fs или nilfs2.

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

Оглавление

Linux Mint и его Cinnamon. Очерки применителя. Часть 11. Сборка своего образа: 5 комментариев

  1. Здравствуйте alv!

    А почему Вы не появляетесь на mintlinux.ru?
    Вы бы могли оказать большую помощь сообществу.

  2. 2 marta
    Вы меня извините, но вот открываю я там последние сообщения и читаю (цитаты):
    > мож в BIOSе у тя чо нитак или образ на флешке нипральна записал
    или
    > шо значит в БИОСе все хорошо? Менял фтама приоритеты возможностей загрузки и аще включена ли такая возможность? Потому как какда фсьо харашо, то ано грузица само.

    Я уже почти полвека как вышел из возраста общения в таком стиле

  3. Это, скорее исключение, чем правило.

    Залетный парень — без году неделя на форуме. К тому же не знает, как иначе привлечь внимание.

  4. Возможно.
    Однако: я регистрировался на mintlinux.ru пару месяцев назад первый раз.
    И второй — после Вашего поста.
    Под одним ником, с одним адресом.
    Оба раза обещанного письма для активизации аккаунта не получил — со всеми вытекающими.
    Что не лучшим образом характеризует ресурс, представляющийся как официальный от имени русскоязычного сообщества.
    Что же до пользы — я пишу беллетристику, а не документалистику.
    И всё, что я знаю и умею, описывается на этих страницах.
    К написанному здесь мне добавить нечего…

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