Введение
При создании автономных установочных носителей для автоматизированной установки ОС Lubuntu 14.04 с использованием preseed, я столкнулся с тем, что мне нужно добавить на установочный носитель пакеты, которые отсутствуют в исходном alternate-дистрибутиве. Я перепробовал много различных способов создания собственных автономных дистрибутивов, но они оказались:
- либо неподходящими (LiveCDCustomization), т.к. мне нужен не LiveCD, а установочный preseed-дистрибутив;
- либо очень сложными (DebianCustomCD);
- либо работали, не как ожидалось (Simple-CDD, DebianInstaller/Modify/CD), а может я не до конца разобрался.
В итоге остановился на способе, который описан в сообществе Ubuntu.
Хочу рассказать о том, что у меня получилось.
Подготовка
Для дополнения дистрибутива нам потребуется исходный alternate-дистрибутив, к которому будем добавлять пакеты. А также компьютер под управлением Ubuntu или Lubuntu, на котором мы будем это делать.
Создание структуры каталогов и копирование файлов
Создадим каталог, в котором мы будем работать с этим дистрибутивом:
mkdir -p /opt/cd-image
Скачаем дистрибутив:
wget http://cdimages.ubuntu.com/lubuntu/releases/trusty/release/lubuntu-14.04.1-alternate-i386.iso
Распакуем скачанный iso-образ:
mkdir /mnt/iso mount -o loop lubuntu-14.04.1-alternate-i386.iso /mnt/iso cp -rT /mnt/iso /opt/cd-image umount /mnt/iso
Создадим каталог для пакетов, которые мы хотим добавить в дистрибутив:
mkdir -p /opt/cd-image/pool/extras
tree -d -L 3 /opt /opt ├── apt-ftparchive ├── build │ └── ubuntu-keyring-2012.05.19 │ ├── debian │ └── keyrings ├── cd-image │ ├── boot │ │ └── grub │ ├── dists │ │ └── trusty │ ├── doc │ │ └── install │ ├── install │ │ └── netboot │ ├── isolinux │ ├── pics │ ├── pool │ │ ├── extras │ │ ├── main │ │ └── universe │ └── preseed └── indices
Подготовка ключей шифрования
Если у Вас нет пары публичный-приватный ключ, то нужно будет ее создать с помощью gpg. Ключу желательно задать комментарий вида «XXX Signing Key».
gpg --gen-key gpg (GnuPG) 1.4.16; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) Key does not expire at all Is this correct? (y/N) y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" Real name: Alexandr Petrenko Email address: *********@gmail.com Comment: My Signing Key You selected this USER-ID: "Alexandr Petrenko (My Signing Key) <*********@gmail.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key.
Приватный ключ будем использовать для подписывания Release-файлов репозитория.Для следующих действий потребуется пакет fakeroot, установите его, если он отсутствует в вашей системе.
mkdir /opt/build cd /opt/build # Скачаем исходники действующего пакета с ключами apt-get source ubuntu-keyring # Импортируем ключи из пакета cd ubuntu-keyring-2012.05.19/keyrings/ gpg --import < ubuntu-archive-keyring.gpg # Для просмотра ключей, содержащих "Signing Key" в комментарии, введите gpg --list-keys "Signing Key" pub 1024D/437D05B5 2004-09-12 uid Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com> sub 2048g/79164387 2004-09-12 pub 1024D/FBB75451 2004-12-30 uid Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com> pub 2048R/YOURKEYID 2015-01-28 uid My Signing Key <*********@gmail.com> sub 2048R/KEYID 2015-01-28 # Добавьте свой ключ в связку gpg --export FBB75451 437D05B5 YOURKEYID > ubuntu-archive-keyring.gpg # Перейдите на уровень выше в каталог ubuntu-keyring-2012.05.19 и соберите пакет с вашим ключом cd .. dpkg-buildpackage -rfakeroot -m"Ваше имя <your.email@your.host>" -kYOURKEYID # И скопируйте полученный пакета в репозиторий на диске cd .. cp ubuntu-keyring*deb /opt/cd-image/pool/main/u/ubuntu-keyring
Копирование файлов в репозиторий
Можно просто добавить несколько пакетов вручную в каталог /opt/cd-image/pool/extras.
Если требуется обновить модули ядра установщика, то это можно сделать так:
cd /opt/cd-image/pool/main/l/linux/ wget -r -nd --no-parent -A *-modules-3.13.0-67*i386.udeb ftp://security.ubuntu.com/ubuntu/pool/main/l/linux/
где вместо 3.13.0-67*i386 можно указать нужную версию ядра, которое вы используете для загрузки, и архитектуру модулей. В данном примере это 3.13.0-67, 3.16.0-52 или 3.19.0-32.
Чтобы скачать все пакеты, установленные в текущей ОС на эталонном компьютере, можно выполнить вот такой
#!/bin/bash dpkg --get-selections | while read line do package=`expr "$line" : '\(.*\)install'` echo $package apt-get download $package done for i in *; do mv $i ${i/'1%3a'/''}; done
И добавить скачанные пакеты из кэша apt в репозиторий.
Создание автономного локального репозитория с помощью apt-ftparchive
Утилита apt-ftparchive содержится в пакете apt-utils.
Все настройки даны для Lubuntu 14.04 Trusty и архитектуры i386. Если версия или архитектура вашего дистрибутива отличаются, то нужно поправить соответствующие значения в конфигурационных файлах и скриптах.
Описание репозитория для apt-ftparchive
В каталоге /opt/apt-ftparchive необходимо создать следующие конфигурационные файлы:
Настройки для карманов main и universe:
Dir { ArchiveDir "/opt/cd-image/"; }; TreeDefault { Directory "pool/"; }; BinDirectory "pool/main" { Packages "dists/trusty/main/binary-i386/Packages"; BinOverride "/opt/indices/override.trusty.main"; ExtraOverride "/opt/indices/override.trusty.extra.main"; }; BinDirectory "pool/universe" { Packages "dists/trusty/universe/binary-i386/Packages"; BinOverride "/opt/indices/override.trusty.universe"; }; Default { Packages { Extensions ".deb"; Compress ". gzip"; }; }; Contents { Compress "gzip"; };
Настройки для модулей установщика debian-installer в карманах main и universe:
Dir { ArchiveDir "/opt/cd-image/"; }; TreeDefault { Directory "pool/"; }; BinDirectory "pool/main" { Packages "dists/trusty/main/debian-installer/binary-i386/Packages"; BinOverride "/opt/indices/override.trusty.main.debian-installer"; }; BinDirectory "pool/universe" { Packages "dists/trusty/universe/debian-installer/binary-i386/Packages"; BinOverride "/opt/indices/override.trusty.universe.debian-installer"; }; Default { Packages { Extensions ".udeb"; Compress ". gzip"; }; }; Contents { Compress "gzip"; };
Настройки для нашего кармана extras:
Dir { ArchiveDir "/opt/cd-image/"; }; TreeDefault { Directory "pool/"; }; BinDirectory "pool/extras" { Packages "dists/trusty/extras/binary-i386/Packages"; }; Default { Packages { Extensions ".deb"; Compress ". gzip"; }; }; Contents { Compress "gzip"; };
Настройки для создания Release-файла репозитория:
APT::FTPArchive::Release::Origin "Ubuntu"; APT::FTPArchive::Release::Label "Ubuntu"; APT::FTPArchive::Release::Suite "trusty"; APT::FTPArchive::Release::Version "14.04"; APT::FTPArchive::Release::Codename "trusty"; APT::FTPArchive::Release::Architectures "i386"; APT::FTPArchive::Release::Components "main restricted extras"; APT::FTPArchive::Release::Description "Ubuntu 14.04 LTS";
Загрузка индексов
#!/bin/bash cd /opt/indices/ DIST=trusty for SUFFIX in extra.main main main.debian-installer universe universe.debian-installer; do wget http://archive.ubuntu.com/ubuntu/indices/override.$DIST.$SUFFIX done
Создание Packages и Release файлов репозитория
Скрипт, который запускает создание Packages и Release файлов репозитория утилитой apt-ftparchive с учетом наших настроек, после чего подписывает Release файл и записывает контрольные суммы файлов в md5sum.txt:
BUILD=/opt/cd-image APTCONF=/opt/apt-ftparchive/release.conf DISTNAME=trusty pushd $BUILD apt-ftparchive -c $APTCONF generate /opt/apt-ftparchive/apt-ftparchive-deb.conf apt-ftparchive -c $APTCONF generate /opt/apt-ftparchive/apt-ftparchive-udeb.conf apt-ftparchive -c $APTCONF generate /opt/apt-ftparchive/apt-ftparchive-extras.conf apt-ftparchive -c $APTCONF release $BUILD/dists/$DISTNAME > $BUILD/dists/$DISTNAME/Release gpg --default-key "YOURKEYID" --output $BUILD/dists/$DISTNAME/Release.gpg -ba $BUILD/dists/$DISTNAME/Release find . -type f -print0 | xargs -0 md5sum > md5sum.txt
Создание и использование ISO-образа
Создание ISO-образа
IMAGE=custom.iso BUILD=/opt/cd-image/ mkisofs -r -V "Custom Ubuntu Install CD" \ -cache-inodes \ --iso-level 3 -J -l -b isolinux/isolinux.bin \ -c isolinux/boot.cat -no-emul-boot \ -boot-load-size 4 -boot-info-table \ -o $IMAGE $BUILD
Загрузка с ISO-образа
Теперь можно загрузиться с помощью созданного ISO-образа, записав образ на CD/DVD-диск, или со сменного носителя.
Создание загрузочного USB диска
Для загрзуки нужно отформатировать диск в FAT32. Установить на диск загрузчик, например grub2:
sudo grub-install --no-floppy --root-directory=/media/multiboot /dev/sdb
где /media/multiboot — путь к смонтированному разделу загрузочного USB-диска; /dev/sdb — устройство загрузочного диска.
После этого настроить загрузчик. Примерный конфиг grub2:
# таймаут меню set timeout=10 # выбранный пункт по умолчанию set default=0 # загружаем модули insmod ext2 insmod loopback insmod iso9660 insmod fat insmod part_msdos menuentry "Boot from first hard disk" { set root=(hd1) chainloader +1 } set iso="/custom.iso" menuentry "Custom.iso" { linux /vmlinuz debconf/priority=high shared/ask_device=manual shared/enter_device=/dev/disk/by-label/DISKLABEL iso-scan/filename=$iso auto-install/enable=true debian-installer/language=ru debian-installer/locale=ru_RU.UTF-8 debian-installer/country=RU preseed/file=/cdrom/preseed/custom.seed DEBCONF_DEBUG=5 -- initrd /initrd.gz }
Также нужно добавить в корень USB-диска vmlinuz и initrd.
В файле udeb.list можно узнать версии модулей, которые требуются ядру, и которые нужно поместить в дистрибутив (см. выше).
Остается загрузиться с созданного диска, и запустить установку ОС.
- wiki.debian.org/DebianInstaller/Preseed
- help.ubuntu.com/community/Lubuntu/Alternate_ISO
- help.ubuntu.com/community/LiveCDCustomization
- wiki.debian.org/DebianCustomCD
- wiki.debian.org/Simple-CDD/Howto
- wiki.debian.org/DebianInstaller/Modify/CD
- help.ubuntu.com/community/InstallCDCustomization
- manpages.ubuntu.com/manpages/trusty/en/man1/apt-ftparchive.1.html
- manpages.ubuntu.com/manpages/trusty/en/man1/gpg.1.html
ссылка на оригинал статьи http://habrahabr.ru/post/273255/
Добавить комментарий