Archiso (Українська)
Contents
Що це?
Archiso - набір bash скриптів, призначених для створення повністю функціональних Live-CD/DVD і Live-USB на базі Arch Linux. Це досить гнучкий інструмент, який може бути використаний як для створення дисків відновлення або встановлення, так і для спеціалізованих live-CD/DVD/USB систем. Центр Archiso - mkarchiso. Для отримання детального опису всіх його опцій досить викликати його без параметрів, так що тут буде описано тільки створення live диска своїми руками.
Завдяки останнім доробкам Archiso тепер створює такі ISO образи, котрі можна записати як на диск, так і на USB flash носій.
Установка Archiso
Archiso можна встановити двома способами:
$ git clone git://projects.archlinux.org/archiso.git $ cd archiso/archiso $ sudo make install $ sudo pacman -S mkinitcpio cdrkit squashfs-tools devtools syslinux mkinitcpio-nfs-utils nbd
Конфігурація створюваної системи
Makefile
Спочатку створимо окрему директорію для роботи і перейдемо до неї.
$ mkdir myarch && cd myarch
Тепер створимо Makefile та пропишемо туда наступні інструкції.
$ vim Makefile
Нижче ви знайдете приклад Makefile.
#### Редагуйте даний файл для модифікації кінцевої системи. # Рабочая директория для построения системы. WORKDIR=work # Список устанавливаемых приложений, either space separated in a string or line separated in a file. Может включать группы. PACKAGES="$(shell cat packages.list) syslinux" # Имя дистрибутива. Не зависит от/не определяет целевую архитектуру. NAME=myarch # Версия дистрибутива. VER=1.00 # Версия ядра. KVER=2.6.32-ARCH # Архитектура. ARCH?=$(shell uname -m) # Директория, в которой находился пользователь, запустивший скрипт PWD:=$(shell pwd) # Полное (финальное) имя образа. FULLNAME="$(PWD)"/$(NAME)-$(VER)-$(ARCH) # Умолчальная инструкция make'у, для компиляции всего(?) (оригинал:"Default make instruction to build everything.") all: myarch # Запуск base-fs перед сборкой финального ISO образа. myarch: base-fs mkarchiso -p syslinux iso "$(WORKDIR)" "$(FULLNAME)".iso # Основное правило для процесса создания файловой системы образа. Приложения отрабатывают слева на право. # Тоесть, сначала root-image в конце - syslinux. base-fs: root-image boot-files initcpio overlay iso-mounts syslinux # root-image всегда запускается первым. # Скачивание и установка приложений в $WORKDIR. root-image: "$(WORKDIR)"/root-image/.arch-chroot "$(WORKDIR)"/root-image/.arch-chroot: root-image: mkarchiso -p $(PACKAGES) create "$(WORKDIR)" # Правило для создания /boot boot-files: root-image cp -r "$(WORKDIR)"/root-image/boot "$(WORKDIR)"/iso/ cp -r boot-files/* "$(WORKDIR)"/iso/boot/ # Правило для образов initcpio initcpio: "$(WORKDIR)"/iso/boot/myarch.img "$(WORKDIR)"/iso/boot/myarch.img: mkinitcpio.conf "$(WORKDIR)"/root-image/.arch-chroot mkdir -p "$(WORKDIR)"/iso/boot mkinitcpio -c ./mkinitcpio.conf -b "$(WORKDIR)"/root-image -k $(KVER) -g $@ # Подробнее см.: Overlay overlay: mkdir -p "$(WORKDIR)"/overlay/etc/pacman.d cp -r overlay "$(WORKDIR)"/ wget -O "$(WORKDIR)"/overlay/etc/pacman.d/mirrorlist https://www.archlinux.org/mirrorlist/$(ARCH)/all/ sed -i "s/#Server/Server/g" "$(WORKDIR)"/overlay/etc/pacman.d/mirrorlist # Правило для создания isomounts. iso-mounts: "$(WORKDIR)"/isomounts "$(WORKDIR)"/isomounts: isomounts root-image sed "s|@ARCH@|$(ARCH)|g" isomounts > $@ # Исполняется перед генерацией финального образа. syslinux: root-image mkdir -p $(WORKDIR)/iso/boot/isolinux cp $(WORKDIR)/root-image/usr/lib/syslinux/*.c32 $(WORKDIR)/iso/boot/isolinux/ cp $(WORKDIR)/root-image/usr/lib/syslinux/isolinux.bin $(WORKDIR)/iso/boot/isolinux/ # При вызове "make clean" отчищает систему от вчего, созданного в процессе создания образа. clean: rm -rf "$(WORKDIR)" "$(FULLNAME)".img "$(FULLNAME)".iso .PHONY: all myarch .PHONY: base-fs .PHONY: root-image boot-files initcpio overlay iso-mounts .PHONY: syslinux .PHONY: clean
Тоесть, при исполнении "make myarch" из под рута,происходит следующее:
- root-image скачивает и устанавливает выбранные приложения в $WORKDIR
- boot-files готовит загрузочные файлы и копирует загрузочные скрипты
- initcpio работает с initcpio
- overlay копирует файлы, перекрывающие базовую конфигурацию в root-image в $WORKDIR
- iso-mounts немного уличной магии с применением sed, чтобы AUFS знала, куда ей монтироваться при загрузке
- syslinux копирует загрузчик
- myarch создаёт конечный образ, пригодный для записи на CD/DVD/флешку.
Одного Makefile буде недостатньо, так що потрібно буде створити файли, описані нижче.
mkinitcpio.conf
initcpio необходим для создания системы,способной загружаться с CD/DVD/USB.
Создайте mkinitcpio.conf:
$ vim mkinitcpio.conf
Обычно он содержит следующую информацию:
HOOKS="base udev archiso block usb fw filesystems usbinput"
Благодаря этому ваша система сможет загружаться с CD/DVD или USB. Стоит отметить, что автоопределение железа и прочее настраивается не здесь.
packages.list
Вам так-же понадобится список приложений, устанавливаемых на вашу live-систему. Как минимум вам понадобятся base и kernel26, но, вы вольны дополнять список приложениями на ваше усмотрение.
$ vim packages.list
В список устанавливаемых пакетов будет разумно вставить, как минимум, следующее:
aufs2 aufs2-util base bash coreutils cpio dhcpcd dnsutils file fuse kernel26 syslinux nano
Этот список должен дать вам минимальную рабочую систему. Но не забывайте, что в ней не будет драйверов свыше включённых в ядро (видео, вай-фай, специализированные - их нужно будет добавить в список).
isomounts
Вам понадобится файл, содержащий информацию о файловых системах, монтируемых при загрузке системы.
$ vim isomounts
Пример isomounts:
# archiso isomounts file # img - location of image/directory to mount relative to addons directory # arch - architecture of this image # mount point - absolute location on the post-initrd root # type - either 'bind' or 'squashfs' for now # syntax: <img> <arch> <mount point> <type> # ORDER MATTERS! Files take top-down precedence. Be careful overlay.sqfs @ARCH@ / squashfs root-image.sqfs @ARCH@ / squashfs
boot-files
Вам нужно будет добавить директорию "boot-files" и поддиректорию "isolinux/" содержащую "isolinux.cfg".
Использование isolinux
Использовать isolinux просто:
$ mkdir -p boot-files/isolinux/ $ vim boot-files/isolinux/isolinux.cfg
Образец:
prompt 1 timeout 0 display myarch.msg DEFAULT myarch LABEL myarch KERNEL /boot/vmlinuz26 APPEND initrd=/boot/myarch.img archisolabel=XXX tmpfs_size=75% locale=en_US.UTF-8 LABEL memtest86+ KERNEL /boot/memtest86+-2.10.bin
Возможно, вы захотите отображать сообщение над меню загрузки:
$ vim boot-files/isolinux/myarch.msg
Это может быть любое сообщение в ASCII:
HI GENTLEMEN LOL WELCOME TO MY DISTRO I HOPE U ENJOY MAKE UR TIME HA-HA-HA (ПРЕВЕД ДЖЕНТЕЛЬМЕНЫ Ы ДОБРО ПОЖАЛОВАТЬ В МОЙ ДИСТРИБУТИВЧЕГ НАДЕЮСЬ, ВАМ ПОНРАВИТСЯ ВРЕМЯ, КОТОРОЕ ВЫ НА НЕГО ПОТРАТИТЕ ГЫ-ГЫ-ГЫ)
Обратите внимание, что вам нужно будет где-нибудь достать memtest*.bin потому как в "поставку по умолчанию" он не входит. Если вы не хотите его использовать - закоментируйте.
Благодаря модульной структуре isolinux вы можете использовать большое колличество аддонов, потому что все *.c32 файлы скопированны и доступны вам. Подробней можете посмотреть официальный сайт syslinux и archiso git-репозитарий. Использование вышеперечисленных аддонов позволяет создавать красивые и сложные меню. Подробнее см. тут.
overlay
overlay предназначен для включения в дистрибутив бинарных репозитариев, конфигов, отличающихся от умолчальных и прочего. mkarchiso требует помещения всех файлов, предназначенных для оверлея, в одну директорию. Оверлей будет наложен на систему во время загрузки используя AUFS. Структура папки, содержащей файлы оверлея, должна повторять корневую систему.
Все файлы и директории, не существующие в оригинальной системе, но существующие в оверлее, будут созданы. Все файлы и директории существующие в оригинальной системе и в оверлее, будут перезаписаны оверлеем.
Создаём overlay:
$ mkdir overlay && cd overlay/
Это было легко, теперь надо наполнить оверлей полезняшками. Несколько примеров:
Note: Важно, чтобы всем файлам в оверлее были назначены правильные права доступа.Поэтому все изменения в директории оврелея рекомендуется производить из под рута.
Добавление fstab
Если нужно добавить fstab:
$ mkdir etc $ vim etc/fstab
aufs / aufs noauto 0 0 none /dev/pts devpts defaults 0 0 none /dev/shm tmpfs defaults 0 0
Добавление пользователя
Вручную
Так или иначе, но вам понядобятся пользователи в вашей live-системе. Есть много способов их добавления.Один из - скопировать файлы, для этого требуемые из корневой системы, и привести их в вид, удовлетворяющий вашим требованиям:
$ cp /etc/group etc/group $ cp /etc/passwd etc/passwd $ cp /etc/shadow etc/shadow
Note: Не оставляёте зашифрованный пароль passwd или shadow файле! Пароль находится на второй позиции (после первого ':').
Пример безпарольного пользователя:
root::99999::::::
Так-же не забудьте создать домашнюю папку для пользователя (не забудьте изменить домашнюю папку в passwd). Для создания домашней папки во время загрузки и добавления туда /etc/skel пользовательской папки можно использовать rc.local. Если про /etc/skel в слышите впервые, вам, и правда, следует об этом прочесть.
$ vim etc/rc.local mkdir /home/archie && chown archie:archie /home/archie su -c "cp -r /etc/skel/.[a-zA-Z0-9]* /home/archie/" archie
Используя useradd
Другим способом добавления пользователя является использование etc/rc.local для создания пользователя при загрузке:
$ vim etc/rc.local
useradd -u 1000 -g users -G storage,floppy,optical,audio,video,network,games,wheel,disk -d /home/archie archie
Это создаст пользователя и домашнюю директорию для него.
Добавление чего-либо в домашнюю директорию пользователя при загрузке
Возможно, вы захотите добавить какие-то файлы кофигурации для пользователя live-системы.
Вам нужно будет создать следующую директорию, и поместить желаемое туда:
$ mkdir etc/skel
Для примера:
$ vim etc/skel/.bashrc
alias ls='ls --color=auto' PS1='[\u@\h \W]\$ '
Описание всего, что можно сделать таким образом, значительно выходит за рамки данной статьи.
Note: Не пытайтесь использовать оверлей для прямого изменения /home/user/, это вызовет ошибки в правах доступа! Используйте /etc/skel/.
Закрытие темы оверлея
Некоторые темы, не рассмотренные в данной статье (потому как рассмотрены в вики):
- Конфигурация inittab для старта Х во время загрузки
- Конфигурация hosts
- Конфигурация rc.conf
- Конфигурация sudoers
- Конфигурация rc.local
- Добавление большего колличества полезняшек etc/skel
- Добавление большего колличества графического оформления
- Добавление разнообраных бинарников в opt/
Генерация образа
После всего времени, потраченного на конфигурацию, осталась самая приятная часть: Создание образа.
Это легко: Из под рута (это важно!) выполните следующую команду в директории вашего проекта (там, где лежит Makefile):
$ make all
На выходе вы получите .iso, готовый для записи на CD/DVD или USB:
dd if=my-image.iso of=/dev/some-usb-drive bs=8M