Кастомный LiveCD Ubuntu за 5 шагов / Ubuntu LiveCD Remastering

от автора

Предисловие

Последние года 3 я активный пользователь Linux. Мне нравится возможность полной настройки и экспериментов, которые позволяет эта система. Единственным неудобством, на мой взгляд, являлась невозможность сохранить свои изменения в сам LiveCD с системой. Это решалось послеустановочными скриптами, но хотелось сделать уже настроенную под себя систему прямиком в LiveCD. Потратив кучу времени, сил и нервов мне удалось реализовать эту цель. Далее постараюсь описать все шаги подробно, чтобы не оставлять «пустых» мест.

Я прикипел к дистрибутиву Lubuntu, на его примере и опишу кастомизацию, но вы можете использовать мои рекомендации для Debian, Ubuntu (любой редакции), Manjaro. На этих Linux мой алгоритм испробован с успехом. Вероятно с другими ОС он тоже сработает, но сам не проверял.

Приступим.

Шаг №0

Подготовим хостовую систему (у меня Lubuntu) для сборки кастомного LiveCD. Нам понадобится несколько дополнительных приложений.

sudo apt install -y squashfs-tools xorriso isolinux

Если у вас хостовая система Manjaro или Arch, вместо пакета isolinux установите syslinux

sudo pacman -Sy squashfs-tools xorriso syslinux

Шаг №1. Копирование файлов iso

Этот шаг до ужаса прост. Монтируем LiveCD, создаем каталог для копирования файлов и копируем.

# монтируем iso  sudo mkdir /mnt/iso sudo mount -o loop path/to/iso /mnt/iso  # создаем папку для копирования файлов iso sudo mkdir -p /home/$USER/livecd/iso  # копируем sudo cp -rf /mnt/iso/* /home/$USER/livecd/iso/  # отмонтируем iso и удаляем папку куда монтировали sudo umount /mnt/iso sudo rm -rf /mnt/iso

Шаг №2. Распаковываем систему

После копирования файлов iso образа нам необходимо найти запакованную систему. В Ubuntu это файл filesystem.sqashfs, находящийся в папке casper. Этот файл — и есть вся операционная система, сжатая в «архив». В iso других ОС название и расположение файла может отличаться.

# создаем папку для распаковки системы mkdir /home/$USER/livecd/rootfs  # распаковываем sudo unsquashfs -f -d /home/$USER/livecd/rootfs path/to/iso/casper/filesystem.squashfs

Шаг №3. Выполняем вход в систему и настраиваем ее

В папке rootfs у нас уже лежит операционная система. Теперь мы можем запустить ее в окружении chroot. По сути мы загружаем новую ОС в терминале, условно говоря. Если мы сейчас так и поступим, то все изменения нам придется вносить вручную. Вариант не лучший, на мой взгляд.

Предложу создать автоматизированный скрипт установки пакетов программ и настроек.

Маленькое отвлечение.

1. При настройке системы в chroot не рекомендую обновлять приложения (apt upgrade или pacman -Syu). Иначе придется возиться с настройкой нового ядра (точнее initramfs). Если умеете — в путь. Я предпочитаю не усложнять.

2. Чтобы перенести настроки рекомендую воспользоваться ленивым вариантом. Загружаетесь в нужной системе, можно даже в LiveCD. Выполняем настроки системы и приложений. После этого большинство из них можно найти в папке .config личного каталога пользователя. Просто находим файлы настроек приложений копируем их в любой каталог, я скопировал в каталог files. Туда же отправляем картинки, обои например, если вы их используете.

После «сбора» всех необходимых настроек, нам нужно знать куда их разместить. В Linux есть «чудо-католог» /etc/skel (от слова skeleton). Когда создается новый пользователь, файлы лежащие в этом каталоге будут закидываться в личную папку пользователя. Это нам и нужно. Просто создадим подкатологи /etc/skel/.config и другие если нам они нужны и скопируем настройки сюда. Таким образом, при создании любого пользователя в личную папку будут копироваться все наши настройки.

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

# создаем скрипт настроек системы sudo tee /home/$USER/livecd/rootfs/settings.sh <<EOF #!/bin/bash  # prepare export LC_ALL=C dbus-uuidgen > /var/lib/dbus/machine-id  # устанавоиваем нужные приложения apt update apt install -y APP1 APP2  # удаляю лишнее apt -y purge sylpheed apt -y purge pidgin apt -y purge xpad apt -y purge transmission* transmission-gtk transmission-qt apt autoremove -y  # распаковываю из архивов свои темы и иконки tar -xzf /files/win-10-ico.tar.gz -C /usr/share/icons/ tar -xzf /files/themes.tar.gz -C /usr/share/themes/  ## Обновляем кэш иконок, шрифтов gtk-update-icon-cache /usr/share/icons/win-10-ico/ fc-cache -vf  # Сначала создаем папки для настроек в /etc/skel mkdir -p /etc/skel/{.local/share/applications,.config/audacious,.config/clipit,.config/geany,.config/gpicview,.config/gtk-3.0,.config/leafpad,.config/libfm,.config/lxpanel/Lubuntu/panels,.config/lxsession/Lubuntu,.config/lxsession-default-apps,.config/lxterminal,.config/Mousepad,.config/openbox,.config/pcmanfm/lubuntu,.config/smplayer,.config/vlc,.config/xfce4/xfconf/xfce-perchannel-xml}  # После кидаем настройки сохраненные в папке files ранее cat /files/bashrc | tee /etc/skel/.bashrc cat /files/clipit/clipitrc | tee /etc/skel/.config/clipit/clipitrc cp -f /files/shutdown.desktop /usr/share/applications/  ####### И ТАК ДАЛЕЕ, СО ВСЕМИ НАСТРОЙКАМИ #########  # Отключаем ненужные службы из автозапуска systemctl disable apt-daily.timer systemctl disable apt-daily-upgrade.timer systemctl disable apport  # удаляю из автозапуска программу проверки обновлений, предпочитаю вручную rm -f /etc/xdg/autostart/update-notifier.desktop  # clean and exit apt-get clean rm /var/lib/dbus/machine-id && rm -rf /tmp/* echo '' > /etc/resolv.conf  # exit from chroot exit  EOF  sudo chmod +x /home/$USER/livecd/rootfs/settings.sh  # копируем файл resolv.conf чтобы работала сеть в chroot sudo cp -f /etc/resolv.conf /home/$USER/livecd/rootfs/etc/resolv.conf  # копируем папку с нашими настройками в корень системы будущего LiveCD sudo cp -rf papka/files /home/$USER/livecd/rootfs/  # монтируем временные файловые системы sudo mount --bind /proc /home/$USER/livecd/rootfs/proc sudo mount --bind /dev /home/$USER/livecd/rootfs/dev sudo mount --bind /sys /home/$USER/livecd/rootfs/sys  # запускаем chroot с нашим скриптом sudo chroot  /home/$USER/livecd/rootfs su -lc /settings.sh  # после завершения работы скрипта "прибираемся"  # удалем файл скрипта и папку с настроками sudo rm -f /home/$USER/livecd/rootfs/settings.sh sudo rm -rf /home/$USER/livecd/rootfs/files  # отмонтируем временные файловые системы sudo umount -lR /home/$USER/livecd/rootfs/proc sudo umount -lR /home/$USER/livecd/rootfs/dev sudo umount -lR /home/$USER/livecd/rootfs/sys

Краткий комментарий к скрипту.

Чтобы не возиться с правами и владельцами файлов все настройки я переношу через следующую конструкцию: cat /files/файл-настроек | tee /etc/skel/.config/файл-настроек.

Все что написано между EOF ….. EOF передается цельным потоком в программу tee, которая все это записывает в файл.

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

Вот и все. Далее соберем все обратно.

Шаг №4. Сжимаем кастомизированную систему

Когда мы внесли все необходимые изменения, можно собирать систему обратно в squashfs. Тут никаких хитростей. Удаляем filesystem.squashfs из папки с файлами iso и создаем новый.

sudo rm -f /home/$USER/livecd/iso/casper/filesystem.squashfs  sudo mksquashfs /home/$USER/livecd/rootfs/ /home/$USER/livecd/iso/casper/filesystem.squashfs -comp lz4

Шаг №5. Собираем новый iso

ДОПОЛНЕНИЕ С УЧЕТОМ КОММЕНТАРИЕВ

Чтобы LiveCD работал без ошибок и сохранилась возможность установки с вашей сборки, необходимо обновить в исходных файлах iso сумму md5, файл filesystem.size и список установленных пакетов в файле filesystem.manifest.

# создаем filesystem.manifest sudo chroot /home/$USER/livecd/rootfs dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee /home/$USER/livecd/iso/casper/filesystem.manifest sudo cp -v /home/$USER/livecd/iso/casper/filesystem.manifest /home/$USER/livecd/iso/casper/filesystem.manifest-desktop  # удаляем список пакетов установщика для десктопной версии REMOVE='ubiquity ubiquity-frontend-gtk ubiquity-frontend-kde casper lupin-casper live-initramfs user-setup discover1 xresprobe os-prober libdebian-installer4' for i in $REMOVE do sudo sed -i "/${i}/d" /home/$USER/livecd/iso/casper/filesystem.manifest-desktop done  # обновляем файл filesystem.size printf $(sudo du -sx --block-size=1 /home/$USER/livecd/rootfs | cut -f1) > /home/$USER/livecd/iso/casper/filesystem.size  # считаем md5 hash сумму cd /home/$USER/livecd/iso sudo rm md5sum.txt find . -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt

Далее собираем образ iso.

Здесь есть одна тонкость. В зависимости от вашей хостовой системы путь к файлу isohdpfx.bin может отличаться. В Ubuntu он в каталоге /usr/lib/ISOLINUX, в Manjaro /usr/lib/syslinux/bios (если не ошибаюсь).

В коде ниже смените ISO_NAME во второй и предпоследней строках на свои названия вашей сборки.

sudo xorriso -as mkisofs \   -r -J -V "ISO_NAME" \   -b isolinux/isolinux.bin \   -c isolinux/boot.cat \   -no-emul-boot \   -partition_offset 16 \   -boot-load-size 4 \   -boot-info-table \   -isohybrid-mbr "/usr/lib/ISOLINUX/isohdpfx.bin" \   -o /home/$USER/ISO_NAME \   /home/$USER/livecd/iso

По итогу вы получаете свой кастомизированный LiveCD Ubuntu за 5 шагов. Все приведенные выше коды собраны мной в скрипты, которые вы можете взять на github.

Всем благ.


ссылка на оригинал статьи https://habr.com/ru/articles/571770/


Комментарии

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

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