Создание дистрибутивов для Зауруса

Перевод http://oesf.org/index.php?title=IPKG_Howto IPKG Howto

На Заурусе используются пакеты в формате ipk. IPKG – это очень облегченная (lightweight) система управления пакетами, разработанная для Линукс-систем с серьезными ограничениями на памить, например, карманных компьютеров. В данном документе представлена основная информация о том, как создавать ipk-пакеты.Дополнительную информацию и более детальные объяснения можно найти по адресу http://handhelds.org/moin/moin.cgi/Ipkg

Что такое формат .ipk?

Файлы в формате .ipk являются архивами tar, сжатыми gzip (.tar.gz), которые содержат три части:

  • ./data.tar.gz: содержит собственно сами файлы, составляющие пакет. При установке эта часть распаковывается в корневой каталог /. То есть, имена файлов и каталогов, входящие в этот архив, должны начинаться с ./usr или ./opt.
  • ./control.tar.gz: содержит метаданные и скрипты пакета. Он должен содержать файл с названием control. Также он может содержать следующие файлы: conffiles, preinst, postinst, prerm, postrm. Кроме этого, в него могут входить другие файлы и каталоги, нужные для установки, но это не будет особо полезным в настоящее время. См. секцию 3 “Скрипты Ipk”.
  • ./debian-binary: в настоящее время игнорируется ipkg. Это должен быть текстовый файл, содержащий единственную строку: “2.0”

Сборка ipk

Ниже приведен пример как собрать пакет с названием foobar, который помещает файл test.txt в каталог /home/ на Заурусе. Вам понадобится скрипт ipkg-build.sh

Существует еще один скрипт, “mkipks”, но с ним могут быть проблемы, поэтому его не рекомендуется использовать.

Так же в Cacko feed есть пакет ipkg-tools, который помимо скритпа ipkg-build содержит в себе другие необходимые инструменты для работы с IPK, такие как ipkg-expand (скрипт, для “разборки” пакета) и ipkg-make-index (генерация индекса для feed).

1. Создайте структуру каталогов и файлов, как они должны быть расположены в системе. Для нашего примера мы создадим каталог foobar, который будет считаться корневым. С точки зрения ipk любой файл внутри foobar будет в /, таким образом, /foobar/home/text.txt будет установлен в /home/text.txt на Заурусе.

foobar/home/text.txt

2. На верхнем уровне иерархии создайте каталог с именем CONTROL.

foobar/home/text.txt
foobar/CONTROL/

3. Внутри каталога CONTROL создайте файл под названием control, в который запишите необходимые данные в формате “Поле: значение”. В файле должны присутствовать следующие поля: Package, Version, Architecture, Maintainer, Section и Description. Опционально можете включить следующие поля: Priority и Depends.

foobar/home/text/txt
foobar/CONTROL/control

Вот пример этого файла, который вы можете использовать в качестве шаблона:

 ### Begin CONTROL/control example
 Package: foobar
 Priority: optional
 Section: Misc
 Version: 0.1
 Architecture: arm
 Maintainer: Familiar User famuser@foo.org
 Depends: libc6
 Description: foo is the ever-present example program -- it does
everything foo is not a real package. This is simply an example.
.

Значения полей в файле CONTROL/control:

  • Package: название пакета, которое может состоять из строчных символов английского алфавита, цифр и дефиса (т.е. совпадать со следующим регулярным выражением: [[a-z0-9.+-]+)
  • Version: версия, должна содержать по крайней мере одну цифру и совпадать с регулярным выражением [[a-zA-Z0-9.+]*. Версия также может содержать в конце номер ревизии (ревизия должна сообтветствовать регулярному выражению ”-fam![[0-9]\+”. Ревизия должна увеличиваться каждый раз, когда пакет изменяется, а версия – нет (a packaging tweak). Она может сбрасываться (или просто опускаться) каждый раз, когда увеличивается номер версии.
  • Architecture: это поле должно специфицировать архитектуру, под которую собран пакет. Допустимые значения: “arm” и “all”.
  • Maintainer: должно содержать имя и адрес электронной почты ответственного за этот пакет (не обязательно автора самой программы).
  • Description: короткое (до 80 символов) описание программы. Оно также может включать длинное описание на следующих строках (каждая с отступом в один пробел). Пустые строки в длинном описании могут быть заданы как строки, состоящие из одного пробела и точки (т.е. ” .”).
  • Priority: должно быть одно из следующих значений: required, standard, important, optional или extra. Большинство программ должны использовать optional.
  • Section: категория, которой соответствует пакет.
    • Games (игры)
    • Multimedia (графика, видео, аудио, mp3-плеер)
    • Communications (коммуникации, эл. почта и т.п.)
    • Settings (утилиты резервного копирования, программа настройки беспроводной сети, короче, все, что модифицирует саму систему)
    • Utilities (база паролей, калькулятор) - чаще всего небольшие приложения
    • Applications (остальные приложения, не попадающие в другие категории)

Не имеют собственной закладки, но нуждаются в категоризации:

  • Console (fdisk, kismit, perl, boa, apache, smb и т.д.)
  • Misc (если невозможно отнести ни к какой другой категории, как например, Zaurus faq)

Например:SeverManager должен быть в секции SettingsBoa должен быть в секции Console

  • Depends: указывает пакеты, которые должны быть установлены, чтобы данная программа работала. Пакеты должны быть перечислены в одной строке через запятую.

Некоторые не обязательные, но рекомендованные секции:

  • Installed-Size: указывает примерный размер пакета после установки. Позволит пользователю оценить, сколько свободного места понадобится для установки данного паекта (например, 150KB).
  • Cardinst: Параметр, показывающий возможна ли корректная работа пакета после установки его на внешние карты памяти. Например, пакет, содержащий в себе модули ядра будут корректно работать только при установки в основную напять. Возможные значения: yes, no.

4. Если пакет имеет конфигурационные файлы, создайте файл CONTROL/conffiles, содержащий список таких файлов с указанием абсолютного пути для каждого (как они будут расположены в системе после установки). Тогда система управления пакетами не будет автоматически перезаписывать эти файлы когда пользователь будет обновлять пакет.

5. Если требуется запустить скрипт в начале или конце установки, см. секцию 3 “Скрипты Ipk”.6. Теперь можно создать новый пакет:

ipkg-build.sh directory [destination_directory]

где directory – каталог, который должен быть создан. Второй параметр, destination_directory, является опциональным и если опущен, считается равным текущему каталогу. Скрипт ipkg-build.sh производит некоторые проверки целостности и правильности данных в каталоге пакета и должен помочь вам справиться с возможными проблемами.

Скрипты Ipk

Если нужно, пакет может включать скрипты, которые будут вызваны системой управления пакетами. Вызов скрипта возможен непосредственно перед установкой пакета, после установки, перед удалением пакета и после удаления. Эти скрипты называются, соответственно, preinst, postinst, prerm и postrm, и должны располагаться в каталоге CONTROL. Они должны возвращать 0 в случае успешного завершения (ненулевое значение, возвращаемое preinst отменяет установку пакета – иногда это может быть полезным). Поэтому рекомендуется явно вызывать exit 0 в конце пакета, иначе наружу будет передан код возврата последней выполненой команды, а он может быть и не нулевым. Типичный пример - вызыв команды depmod, которая может отработать нормально, но при этом выдать несколько предупреждений.

Эти скрипты не должны полагать, что доступен tty, т.е. они не должны ничего запрашивать у пользователя.

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

Пользовательские приложения

Чтобы создать иконку для запуска приложения на закладке рабочего стола Кутопии нужно создать файл описания для рабочего стола (desktop file), запускаемый файл и иконку. Продолжая наш пример с пакетом foobar, файл для рабочего стола должен находиться здесь:

foobar/opt/QtPalmtop/apps/Applications/foobar.desktop

Вот его содержимое:

[Desktop Entry]
Comment=Don't really do much, just an example.
Exec=foobar
Icon=foobar
Type=Application
Name=FooBar

Запускаемый файл и изображение (иконка) располагаются, соответственно:

foobar/opt/QtPalmtop/bin/foobar
foobar/opt/QtPalmtop/pics/foobar.png

Для того, чтобы программа сразу запускалась в VGA режиме (без необходимости выключения опции “Display with magnified screen”), добавте в файл .desktop следующую строку:

Display=640x480/144dpi,480x640/144dpi

Для включения возможности пред-загрузки программы в память добавьте:

CanFastload=1

Для отключения возможности запуска приложения из-под пользователя root:

HidePrivilege=1

Для указания на список поддерживаемых типов Mime:

MimeType=video/avi;audio/mp3
MimeTypeIcons=VideoIcon;AudioIcon

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

Для поддержки локализованных приложений, добавте соотвествующие строки (в кодировке UTF-8):

Type[de]=Anwendung
Name[ru]=Адресная Книга

Для Java-программ: Скрипт, запускающий приложение, должен определять для джавы следующий параметр:

-XappName=$0

Типы Mime

Чтобы добавить новый тип MIME в систему, используйте команду qtopia-addmimetype в файле .postinst. Например:

qtopia-addmimetype type/subtype myextension