Простая кастомизация Ubuntu LiveCD

    Данный топик описывает простую и быструю кастомизацицию Ubuntu LiveCD.
    Включает в себя:
    — установку дополнительных пакетов
    — настройку прокси сервера и TimeZone

    Несколько раз мне уже приходилось собирать свой LiveCD. Один для загрузки по сети с набором необходимых инструментов, другой для записи на DVD с полной поддержкой японского языка и дополнительного ПО. При сборке я руководствовался вот этой ссылкой https://help.ubuntu.com/community/LiveCDCustomization. Всё выходило замечательно за исключением затраченного времени. Такая ручная сборка иногда может занять несколько часов, особенно если предыдущая делалась достаточно давно.

    В последний раз я решил не собирать руками а воспользоваться описанной на Хабре Ubuntu Customization Kit (http://habrahabr.ru/blogs/ubuntu/77331). К сожалению на тот момент, а это было несколько дней назад, версия 2.0.12 не заработала (ругается на отмонтирование .gvfs) на Ubuntu 10.04. Версия из trunk-а, на которую я возлагал надежды, так же не заработала, но уже с другой ошибкой.

    В результате я решил больше не возиться с Ubuntu Customization Kit, а написать свой скрипт на основе WIKI статьи с help.ubuntu.com, который покрывает мои потребности и следует принципу KISS. Рабочая версия скрипта и описание под катом.


    ubuntu-iso-customization.sh


    #!/bin/bash
    
    # get configuration from the file
    [ -n "$1" ] && [ -f "$1" ] && source "$1" || exit 1
    
    # prepare
    trap "exit 1" INT
    ISOMNTDIR=$LIVEDIR/mnt
    EXTRACTDIR=$LIVEDIR/extract-cd
    EDITDIR=$LIVEDIR/edit
    sudo aptitude install -y squashfs-tools genisoimage || exit 1
    
    # mount livecd
    mkdir $LIVEDIR && cd $LIVEDIR || exit 1
    mkdir $ISOMNTDIR || exit 1
    sudo mount -o loop $ISODIR/ubuntu-${VERSION}.iso $ISOMNTDIR || exit 1
    
    # extract squashfs
    mkdir $EXTRACTDIR || exit 1
    rsync --exclude=/casper/filesystem.squashfs -a $ISOMNTDIR/ $EXTRACTDIR
    sudo unsquashfs $ISOMNTDIR/casper/filesystem.squashfs
    sudo mv squashfs-root $EDITDIR
    
    # umount livecd
    sudo umount $ISOMNTDIR
    
    # copy resolv.conf
    sudo cp /etc/resolv.conf $EDITDIR/etc/
    
    # mount dev
    sudo mount --bind /dev/ $EDITDIR/dev
    
    # configure new live cd
    [ -n "$PROXY" ] && echo -e "$PROXY" | sudo tee -a $EDITDIR/etc/environment
    [ -n "$TIMEZONE" ] && echo "TZ=$TIMEZONE" | sudo tee -a $EDITDIR/etc/environment
    
    # create customization script and run it in chroot
    cat >> $EDITDIR/tmp/customize.sh << EOF
    #!/bin/bash
    
    # mount proc, sysfs, devpts
    mount -t proc none /proc
    mount -t sysfs none /sys
    mount -t devpts none /dev/pts
    
    # prepare choot
    export HOME=/root
    export LC_ALL=C
    dpkg-divert --local --rename --add /sbin/initctl
    ln -s /bin/true /sbin/initctl
    
    # install packages
    ( which software-properties-gtk && software-properties-gtk -e universe && software-properties-gtk -e multiverse ) || \
    ( which software-properties-kde && software-properties-kde -e universe && software-properties-kde -e multiverse ) || \
    sudoedit /etc/apt/sources.list
    aptitude update
    [ "$UPTODATE" -eq "1" ] && aptitude full-upgrade -y
    aptitude install -Ry $PACKAGES
    
    # clean
    aptitude clean
    rm -rf /tmp/* ~/.bash_history
    rm /etc/resolv.conf
    rm /sbin/initctl
    dpkg-divert --rename --remove /sbin/initctl
    
    # umount proc, sysfs, devpts
    umount /proc
    umount /sys
    umount /dev/pts
    
    # exit from chroot
    exit
    EOF
    
    # make customization script executable
    chmod +x $EDITDIR/tmp/customize.sh
    
    # chroot and run customization script
    sudo chroot $EDITDIR su -lc /tmp/customize.sh
    
    # umount dev
    sudo umount $EDITDIR/dev
    
    # regenerate manifest
    chmod +w $EXTRACTDIR/casper/filesystem.manifest
    sudo chroot $EDITDIR dpkg-query -W --showformat='${Package} ${Version}\n' > $EXTRACTDIR/casper/filesystem.manifest
    sudo cp $EXTRACTDIR/casper/filesystem.manifest $EXTRACTDIR/casper/filesystem.manifest-desktop
    sudo sed -i '/ubiquity/d' $EXTRACTDIR/casper/filesystem.manifest-desktop
    sudo sed -i '/casper/d' $EXTRACTDIR/casper/filesystem.manifest-desktop
    
    # compress filesystem
    [ -f $EXTRACTDIR/casper/filesystem.squashfs ] && \
    	 sudo rm $EXTRACTDIR/casper/filesystem.squashs
    sudo mksquashfs $EDITDIR $EXTRACTDIR/casper/filesystem.squashfs
    
    # set an image name in $EXTRACTDIR/README.diskdefines
    sudoedit $EXTRACTDIR/README.diskdefines
    
    # remove old md5sum.txt and calculate new md5 sums
    cd $EXTRACTDIR
    sudo rm md5sum.txt
    find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt
    
    # create iso
    sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-$VERSION-custom.iso .
    


    config_example


    VERSION=10.04-desktop-i386		# Ubuntu LiveCD version
    ISODIR=/mnt/iso				# Path to original ISO
    LIVEDIR=/mnt/live			# Directory for building
    
    PACKAGES="mc htop testdisk chntpw"	# Packages that have to be installed
    UPTODATE=0				# Whether "aptitude full-upgrade" have to be done
    TIMEZONE="Europe/Moscow"		# Time Zone
    
    PROXY="http_proxy=http://172.18.0.1:3128\nftp_proxy=http://172.18.0.1:3128"   # Proxy server configuration
    


    Описание



    Запуск:
    1. Необходимо загрузиться с LiveCD (хотя с LiveCD вовсе необязательно).
    2. Примонтировать файловую систему ext3 или ext4, на которой свободно хотя бы 5Gb.
    3. Сделать себя владельцем директории в которой будем собирать новый образ (LIVEDIR).
    4. Изменить config_example под свои нужды.
    5. Запустить: ubuntu-iso-customization.sh config_example.


    Конфиг содержит:
    1. Версию LiveCD.
    2. Директорию где лежит оригинальный ISO.
    3. Директорию для сборки (дожна быть примонтирована с опциями exec и dev, команда mount делает это по умолчанию).
    4. Список пакетов, которые необходимо установить.
    5. Ключ UPTODATE, который говорит о том, нужно ли обновить все пакеты до текущих версий в репозитории.
    6. Time Zone


    Как работает:
    1. Монтирует образ.
    2. Копирует filesystem.squashfs и распаквывает.
    3. Chroot-тится в распакованный filesystem.squashfs, выполняет установку пакетов, настройку прокси и Time Zone.
    4. Запаковывает то, что у нас получилось в новый filesystem.squashfs.
    5. Собирает новый iso.


    Проверено в Ubuntu 10.04 Desktop i386

    Комментарии, пожелания, предложения?
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 42

    • НЛО прилетело и опубликовало эту надпись здесь
        +3
        Проще чем с UCK, а главное работает :)
        0
        Пошел делать свой Ubuntu LiveCD
          0
          +1 в карму
            +1
            Список пакетов, которые необходимо установить, есть.
            А где список пакетов, которые необходимо снести?
            Так, мне, например, сто лет не нужны Evolution и Empathy — я всегда их сразу же после установки удаляю.

            Ещё хотелось бы сразу добавлять доп. репозитории и пакеты из них (например, Skype).
              0
              У меня не было такой необходимости, но могу всё это добавить со временем (или кто-нибудь ещё добавит :)).
              Суть в том, что при использовании LiveCD мне всё время приходилось настраивать интернет и устанавливать необходимый софт (будь то chntpw, testdisk, smartmontools или ещё что-нибудь) и задача была в том, чтобы этот софт просто был на CD (или в моём случае — в сети) и скачивать его не нужно было.
                0
                Только не на CD, а в данном случае на DVD, т.к. если из образа ничего не удалять, то он получится больше 700Мб.
                +1
                Чисто в качестве предположения: попробуйте добавить пакеты для удаления в тот же список, добавив минус в конце имени пакета. Я исхожу из того, что
                $ sudo aptitude install evolution-
                удалит пакет evolution.

                Как и наоборот:
                $ sudo aptitude remove thunderbird+
                установит thunderbird.
                  0
                  Не знал, спасибо.
                    0
                    Если будете пробовать — отпишитесь, пожалуйста, получилось ли. Самому интересно :)
                    0
                    Супер :)))
                    Но я рекомендую удалять с помощью purge.
                  0
                  Предложение-вопрос. Можно ли сделать чтоб было так?

                  Грузишься с лайвсиди, настраиваешь её любым удобным способом, даёшь указание создать обновлённый iso-образ. Финиш.

                  (Это если с флэшки грузиться нельзя; а если можно, то все эти операции бесмысленны, так ведь?)
                    0
                    Теоретически да, возможно, но это не совсем то, что было нужно.
                    Например у меня есть кастомизованная Ubuntu 9.10 и вышла 10.04, мне так же её нужно кастомизовать. В случае с этим скриптом всё, что мне нужно сделать, это заменить в файле конфигурации версию. В случае же с ручной кастомизацией — это пол дня времени.
                    0
                    «кастомизация» — звучит просто ужасно.
                      0
                      В общем-то согласен :) Есть более подходящее русское слово?
                        0
                        тюнинг — нормальное русское слово ;)
                          +1
                          «Прокачиваем свой Ubuntu Live CD» )))
                            –3
                            — Фууу, ребята, посмотрите на этот ужасный Live CD!!! Чувак, ты правильно сделал что заехал к нам! Иди, выпей кофе, съешь французских булок, а мы пока прокачаем твой компакт! \m/
                      +1
                      Спасибо, очень интересно, узнал нового для себя :)

                      Кстати, есть сервис Reconstructor, прямо в онлайне можно собрать свой LiveCD/DVD Ubuntu/Debian. Т.ж. есть прога, для сборки в оффлайне.
                        0
                        Онлайн не пробовал, про офлайн не знал. Спасибо, обязательно посмотрю.
                        0
                        Несколько обновлённый скрипт выложен здесь: www.helplinux.ru/ubuntu-livecd-customization
                        Обновляться будет там же.
                          0
                          Прошу прощения, но не понимаю как мне воспользоваться Вашим скриптом.
                          Моя попытка собрать дистрибутив с помощью UCK провалилась и я решил попробовать Ваш способ. Какие команды и в какой последовательности мне потребуется ввести в консоли, чтобы получить желаемый результат. Также интересует как использовать config? Создается пустой файл и туда я копирую текст из примера, который Вы описали выше, а потом редактирую? А если я уже скачал пакеты, то можно как-то упростить их установку указав например что-то типа «ставим все из директории /packages/*» А если не грузиться с LiveCD, а производить все действия из под Ubuntu 10.04 уже установленной, то что мне нужно сделать, чтобы примонтировать раздел? Я так понимаю, что мне потребуется произвести переразметку своего раздела, чтобы выделить необходимое пространство, которое потом я буду монтировать?
                          Еще раз извиняюсь за столь делитанские вопросы, но я очень рассчитываю на помощь автора и всего сообщества.
                          Пожалуйста, как можно подробнее опишите процесс кастомизации, так как никакие другие интструменты не работают (может быть руки кривые, может мозгов не хватает у меня). Попробовал UCK, remaister (вроде бы так назвается, там используют бекап системы), reconstructor (оффлайн версия так и не запустилась ссылаясь на то, что мне нужно выбрать какой-то проект — это самая первая вкладка перед выбором пути к ISO, а оннлайн версия не доступна в данный момент).
                          Заранее благодарен за помощь!
                            0
                            Прошу прощения, давайте по порядку.
                            В разделе «Описание» написано что нужно делать. Что из этого непонятно?
                              0
                              1. Загружаюсь с LiveUSB
                              2. Сейчас подготовлю файловую систему и примонтирую ее.
                              3. Создаю в примонтированной ФС директорию LIVEDIR владельцем которой я буду являться
                              4. Как мне нужно изменить config_example?

                              хочу удалить: evolution, gwibber, emphaty, games, transmission, brasero, pitivi, rhythmbox

                              хочу добавить: flash player, полную поддержку воспроизведения форматов AMR и 3GP, как это сделано в linux mint (там totem их воспроизводит и mplayer), проприетарные драйвера для видеокарт ATI и беспроводных сетевых карт broadcom, добавить шрифты Arial, Verdana, Timew New Roman в общем все MS Fonts, добавить samba, полная поддержка русского языка, распаковка архивов RAR

                              полностью обновить все пакеты до последней стабильной версии.
                              5. Какой командной запускается?
                                +1
                                На счёт обновления: UPTODATE=1
                                По первому вопросу — в скрипте не предосмотрено удаление пакетов, но можно его добавить. Для этого в скрипте перед командой aptitude install можно добавить aptitude purge.

                                Про запуск:
                                bash ubuntu-iso-customization.sh config_example
                                или
                                chmod +x ubuntu-iso-customization.sh
                                ./ubuntu-iso-customization.sh config_example
                                0
                                А еще не понятно как это конфиг содержит версию LiveCD. Получается, что файл конфига берет все необходимые файлы с LiveCD, который в данный момент работает в приводе? Запутался окончательно %)
                                  +1
                                  Да, всё верно, но проверялось всё на 10.04.
                                    0
                                    Спасибо огромное! Сейчас попробую все это реализовать под 10.04.1
                                    Еще раз прошу прощения за столь глупые вопросы.
                                      0
                                      Эх, неправильно смонтировал ФС. Пишет, что не может создать директорию '/mnt/live': Permission denied.
                                      Подскажите пожалуйста, как правильно смонтировать ФС.
                                      У меня есть раздел на 21 Гигабайт, который я подключил.
                                        0
                                        sudo chown $USER /mnt/live
                                          0
                                          нет, не так, вот так
                                          sudo chown $USER /mnt
                                            0
                                            mkdir: cannot create directory '/mnt/live': File exists

                                            теперь вот такая беда
                                              0
                                              перед запуском скрипта директория должна быть пустая
                                                0
                                                она пустая
                                                  0
                                                  Я имею ввиду подмонтированную директорию.
                                                  rm -r /mnt/*
                                                    0
                                                    в случае, когда требуется установить пакеты, которых нет в репозиториях убунту, как следует поступить? я могу добавить репы в liveCD, чтобы скрипт скачал необходимые пакеты?
                                                      0
                                                      Вся установка софта идёт в разделе "# install packages". Там можно добавить своё. Кроме того строка в скрипте sudoedit /etc/apt/sources.list открывает открывает редактор источников, туда можно добавить свои.
                                                        0
                                                        Спасибо! Почти закончил вписывать пакеты. Скоро буду собирать ISO. Отпишусь, когда будет результат :)
                                                          0
                                                          /mnt/iso/ubuntu-10.04.1-desktop.iso: No such file or directory

                                                          теперь вот это мучает :(
                                                            0
                                                            Я ведь загрузился с LiveUSB… Можно как-то отредактировать скрипт, чтобы он взял исходные файлы с флешки? Или лучше указать ему на файл iso, который я могу скинуть на подключенную ФС.
                                                              0
                                                              вручную сделал папку iso и закинул туда файл с образом системы, запустил скрипт еще раз и теперь ошибка такая:

                                                              mkdir: cannot create directory '/mnt/live': File exists

                                                              данная папка там есть и она пустая
                                                                0
                                                                Просто удали папку live. В скрипте идёт проверка на существование этой директории, чтобы случайно второй раз скрипт не запустить.
                                                                Вот в этой строке:
                                                                mkdir $LIVEDIR && cd $LIVEDIR || exit 1

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

                                  Самое читаемое