Что такое формат .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, который помещает файл myprog в каталог /opt/bin на HDX BD-1. Вам понадобится скрипт ipkg-build.sh.
- Создайте структуру каталогов и файлов, как они должны быть расположены в системе. Для нашего примера мы создадим каталог foobar, который будет считаться корневым. С точки зрения ipk любой файл внутри foobar будет в /, таким образом, /foobar/opt/bin/myprog будет установлен в /opt/bin/myprog на HDX BD-1.
/foobar/opt/bin/myprog
- На верхнем уровне иерархии создайте каталог с именем CONTROL.
/foobar/opt/bin/myprog /foobar/CONTROL/
- Внутри каталога CONTROL создайте файл под названием control, в который запишите необходимые данные в формате “Поле: значение”. В файле должны присутствовать следующие поля: Package, Version, Architecture, Maintainer, Section и Description. Опционально можете включить следующие поля: Priority и Depends.
/foobar/opt/bin/myprog /foobar/CONTROL/control
Вот пример этого файла, который вы можете использовать в качестве шаблона:### Begin CONTROL/control example Package: foobar Priority: optional Section: Misc Version: 0.1 Architecture: mipsel 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 должен быть в секции Settings
Boa должен быть в секции Console
- Depends: указывает пакеты, которые должны быть установлены, чтобы данная программа работала. Пакеты должны быть перечислены в одной строке через запятую.
Некоторые не обязательные, но рекомендованные секции:
- Installed-Size: указывает примерный размер пакета после установки. Позволит пользователю оценить, сколько свободного места понадобится для установки данного паекта (например, 150KB).
- Cardinst: Параметр, показывающий возможна ли корректная работа пакета после установки его на внешние карты памяти. Например, пакет, содержащий в себе модули ядра будут корректно работать только при установки в основную напять. Возможные значения: yes, no.
- Если пакет имеет конфигурационные файлы, создайте файл CONTROL/conffiles, содержащий список таких файлов с указанием абсолютного пути для каждого (как они будут расположены в системе после установки). Тогда система управления пакетами не будет автоматически перезаписывать эти файлы когда пользователь будет обновлять пакет.
- Если требуется запустить скрипт в начале или конце установки, см. секцию 3 “Скрипты Ipk”.
- Теперь можно создать новый пакет:
$ 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 указывает на корневой каталог пакета, и может быть использована для ссылок на установленное содержимое пакета.
Дополнительные скрипты по управлению пакетами
Существует еще один скрипт, “mkipks”, но с ним могут быть проблемы, поэтому его не рекомендуется использовать.
Так же в Cacko feed (репозиторий для Zaurus) есть пакет ipkg-tools, который помимо скритпа ipkg-build содержит в себе другие необходимые инструменты для работы с IPK, такие как ipkg-expand (скрипт, для “разборки” пакета) и ipkg-make-index (генерация индекса для feed).
Данная статья с небольшими правками, учитывающими особенности HDX BD-1, взята отсюда http://oramezo.org/ru/man/ipk-howto.
Оригинал можно найти здесь: http://www.oesf.org/index.php?title=IPKG_Howto
Дополнительную информацию и более детальные объяснения можно найти по адресу http://handhelds.org/moin/moin.cgi/Ipkg