воскресенье, 31 марта 2013 г.

тестирование UNetbootin

Я решил проверить насколько мой LiveCD совместим с таким популярным инструментом создания загрузочных флешек как UNetbootin.

1) Сначала я захотел узнать может ли он, то чего быть не может.
Я отформатировал флешку в ext3 и попробавал сделать LiveUSB из версии 3.1 Recovery( эта версия в принципе не поддерживает старт с журналируемых ФС). В итоге компьютер даже не увидел загрузчик флешки. Провал.

2) В следующей попытке я 'правильно' отформатировал носитель командой
mkfs.msdos -I -F32 /dev/sdx

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

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

минусы:
- QT

суббота, 30 марта 2013 г.

К вопросу о создании LiveUSB

Преамбула. Я откладывал этот пост с лета прошлого года, потому-что он не предлагает готовых решений «бери и ешь», он наполнен догадками и предположениями. Но в целом, здесь приведен перечень вопросов, которые возникают при создании универсального LiveUSB.

Проблема создания загрузочной флешки, думаю всем знакома. Даже если такую флешку удалось сделать, то на одних компах она работает, на других нет. Другая флешка работает на тех и других, но не работает на третьих, где без проблем загружается первая. Почему так происходит? Когда я делал LiveCD по типу RIPLinux упаковывая системный раздел в initrd, то заметил, что читается такой архив очень медленно, в разы медленнее даже спецификации USB 1.0 при том, что при загрузке системы порт работает вполне сносно. Это собственно и является главным препятствием для LiveUSB такого типа. Initrd весом в 56Мб на GA-6OXT загружался 20 минут. Если кто перебирал ядро, должны помнить модули необходимые для работы флешек. Это хост-контроллер uhci/ohci, модуль usb2.0 ehci, модуль поддержки usb-носителей usb-storage. Так вот, насколько я понял, BIOS пытается реализовать данный функционал, при том, что сама флешка BIOS'а имеет емкость максимум 1Мб. Т.е. В итоге мы и получаем то, что имеем: какую-то сильно урезанную реализацию поддержки USB. У кого-то вендора эта реализация получается лучше, у кого-то хуже. Одно время в сети был проект BIOSpacher, где разбиралась работа BIOS. Рекомендую для ознакомления.

При создании загрузочной флешки я предполагал, что на современных компах с большими флешками BIOS поддержка загрузочных usb-носителей уже на приемлемом уровне, и приспосабливаться надо под старые компьютеры. Камнем преткновения стала материнка ASRock K7VTA PRO, которая никак не хотела принимать мою флешку. В итоге, я задался очередным вопросом, как BIOS отличает USB-HDD от USB-FDD и от USB-ZIP? Если конечно отбросить сортировку по device id, конечно. «Главным отличием дискеты от жесткого диска является отсутствие главной загрузочной записи». Т.е. Достаточно было отформатировать флешку не создавая таблицу разделов. И да, это сработало. ASRock приняла мою флешку за USB-FDD и без проблем загрузилась. В целом, у меня сложилось впечатление, что без загрузочной записи компьютеру легче загрузиться с флешки. Кто-то принимает такие флешки за USB-HDD, кто-то за USB-ZIP, кто-то за USB-FDD.

среда, 27 марта 2013 г.

Структура LiveCD

Корневой раздел LiveCD содержит с дюжину файлов назначение которых с первого взгляда совсем не очевидно. Это краткая справка по служебным файлам текущего и будущим релизам.

*.sfs — дефолтные модули LiveCD сжатые в SquashFS архивы. Это base.sfs — модуль базовой консольной системы, develop.sfs – содержит пакеты разработки приложений, openbox.sfs – модуль содержащий графический сервер, плюс firefox, full.sfs — модуль с дополнительными приложениями. `uname -r`.sfs – модули с модулями ядра.

*.cgz – cpio/gzip архивы initrd соответствующие уровням запуска.

op – скрипт распаковки *.sfs файлов. Запущенный без параметров распаковывает все файлы, запущенный с sfs файлом в качестве параметра распаковывает только указанный файл.

cl – скрипт сжатия директорий в sfs архивы. Запущенный без параметров сжимает все директории, запущенный с именем директории в качестве параметра, сжимает только эту директорию. Служебные директории: conf, mod, flags — игнорируются.

opinit – скрипт аналогичный op, но для *.cgz — файлов.

clinit – скрипт аналогичный cl, но для *.cgz — файлов.

mk — скрипт, создающий ISO образ текущей директории и записывающий его на болванку.

*.c32, isolinux.*, syslinux.*, pci.ids - файлы загрузчика syslinux/isolinux.

memtest — бинарник memtest86+

conf — директория, содержимое которой копируется в директорию /etc. Для своих конфигов. Здесь есть проблема и использованием vfat на флешке, которая как известно не поддерживает аттрибуты linux-файлов. sshd например, ключи с такими атрибутами не принимает.

linux32/linux64 – ядра linux

slavanka.sh – скрипт которым был собран данный LiveCD

Это те файлы которые есть в настоящее время. Теперь о том, что появится в ближайшее время.

usb – инсталятор на флешку.

README — актуальная выжимка этого поста.

mod – директория для дополнительных модулей.

flags – директория для опций загрузки, управляя которыми можно будет управлять параметрами загрузки: какие модули загружать, а какие нет, загружать ли модуль в оперативку или монтировать с носителя.

Остается вопрос толерантного отношения к тем пользователям, для которых русский язык не является родным. Появится вариант загрузочного меню с которого можно будет загрузиться в английскую локаль. Соответственно появятся файлы обслуживавшие это меню. Конфиги русификации будут вынесены в отдельный модуль: ru.sfs

Я извиняюсь за «урезанные» малоговорящие имена файлов, но в командной строке, это реально упрощает жизнь.

понедельник, 11 марта 2013 г.

Если закончилось место на AUFS

то в kernel message можно увидеть сообщения вида:
[ 3634.633153] aufs au_xino_do_write:381:firefox[2046]: I/O Error, write failed (-28)
[ 3634.633155] aufs au_xino_write:417:firefox[2046]: I/O Error, write failed (-5)
[ 3634.653291] aufs au_xino_do_write:381:terminal[2112]: I/O Error, write failed (-28)
[ 3634.653320] aufs au_xino_do_write:381:terminal[2112]: I/O Error, write failed (-28)
[ 3634.872672] aufs au_xino_do_write:381:firefox[2046]: I/O Error, write failed (-28)
[ 3634.873449] aufs au_xino_do_write:381:firefox[2046]: I/O Error, write failed (-28)
[ 3634.873452] aufs au_xino_write:417:firefox[2046]: I/O Error, write failed (-5)
[ 3683.045600] aufs au_xino_do_write:381:ls[31379]: I/O Error, write failed (-28)
[ 3683.045604] aufs au_xino_write:417:ls[31379]: I/O Error, write failed (-5)
[ 4662.168914] aufs au_xino_do_write:381:tar-1.13[32042]: I/O Error, write failed (-28)
[ 4662.168925] aufs au_xino_write:417:tar-1.13[32042]: I/O Error, write failed (-5)
[ 4662.174135] aufs au_xino_do_write:381:tar-1.13[32042]: I/O Error, write failed (-28)
[ 4662.174144] aufs au_xino_write:417:tar-1.13[32042]: I/O Error, write failed (-5)
[ 4662.174374] aufs au_xino_do_write:381:tar-1.13[32042]: I/O Error, write failed (-28)
[ 4662.174380] aufs au_xino_write:417:tar-1.13[32042]: I/O Error, write failed (-5)
[ 4662.175225] aufs au_xino_do_write:381:tar-1.13[32042]: I/O Error, write failed (-28)
[ 4662.175230] aufs au_xino_write:417:tar-1.13[32042]: I/O Error, write failed (-5)
[ 4662.176692] aufs au_xino_do_write:381:tar-1.13[32042]: I/O Error, write failed (-28)
означает, что в RW-слое aufs исчерпалось свободное пространство. Хотя, строго говоря, мы видим только сообщение об ошибке записи. Что именно послужило причиной ошибки выяснять предстоит пользователю.