Перенёс: Александр Д.
Автор - Zloy_T
(12.04.2009: Zloi_T: "Мощная статья по пакетам со старого форума. Перевел статью zulman. Оригинал здесь http://www.puppylinux.com/development/createpet.htm ")
Только для дистрибутивов Puppy v2.14+
PET (Puppy's Extra Treats) (дополнительное расширение в Puppy) - это уникальная система управления пакетами, встраиваемая и используемая Puppy, начиная с версии 2.14.
Если вы скомпилировали приложение из исходников или скачали уже скомпилированную версию, затем протестировали приложение в Puppy и теперь хотите сделать его доступным для остальных пользователей...
Хотите узнать что внутри PET-пакета? Хотите узнать как его устанавливать? Тогда эта статья для вас...
Для начала прочтите управление пакетами в Puppy, чтобы иметь представление о системе управления пакетами.
Установка PET-пакетов
Навсегда запомните, что существует две версии PET-пакетов - "официальные" и "неофициальные".
Официальные PET-пакеты, которые можно найти в Unleashed сборке, можно установить с помощью менеджера пакетов PETget (смотрите иконку с подписью "install" (“Установить”) на рабочем столе или в "Setup" (“Установка”) в меню). После запуска программы перед вами предстанет список доступных пакетов.
С другой стороны, PET-пакеты, как официальные, так и неофициальные, могут быть установлены просто двойным щелчком на их иконке.
Файловый менеджер ROX-Filer распознает все файлы, имеющие разрешение '.pet' и, если вы щелкните на их изображении, ROX-Filer сам запустит PETget. Некоторые PET-пакеты, как официальные, так и неофициальные, могут быть установлены таким способом.
Кроме того, SeaMonkey -- веб-браузер, не так ли? Щелкните на ссылке на pet-файл на какой-нибудь веб-странице, и SeaMonkey предложит вам скачать пакет к себе на компьютер или же открыть непосредственно в PETget. Последнее означает, что вы просто щелкаете на пакет в интернете, и вуаля -- он установлен!
В действительности некоторые приложения, которые в ходе работы читают информацию mime-типа из /etc/mailcap and /etc/mime.type, распознают pet-файл и запустят PETget. Тоже самое -- для баз данных mime-типа в /usr/share/mime.
Как создавать PET-пакеты
Это задача "PET tools" - скриптов создания PET-пакетов и конвертирования в PET-формат других пакетов.
Во-первых, для ответа на самый важный вопрос: допустим, вы скачали нужные вам исходники из интернета и хотите скомпилировать PET-пакет. Как?
Это очень просто: после компиляции необходимо сделать всего один шаг "make install" такой:
# new2dir make install
"new2dir" - это аргумент скрипта "make install", в результате выполнения он создаст директорию во всеми файлами и папками в ней(new2dir). Сейчас нет необходимости более детально рассматривать этот процесс, что и как делает этот скрипт. Например, если вы скомпилировали "abiword-2.5.6", тогда будет создана директория "abiword-2.5.6-i486" со всеми установочными файлами.
Следущий шаг тоже прост:
# dir2pet abiword-2.5.6-i486
Это создаст PET-пакет -- файл "abiword-2.5.6-i486.pet". Вот и все.
Создав PET-пакет, вы можете сделать его доступным для других пользователей. PET пакет даже может быть отправлен мне для включения в список "официальных" пакетов Unleashed сборки.
PET-утилиты
Puppy имеет набор скриптов, предназначенных для работы с PET-пакетами:
Цитировать
dir2pet...........dir2pet abiword-2.5.6-i486............Конвертирует директорию в PET-пакет
new2dir...............new2dir make install...............Создает директорию установочных файлов
pet2tgz..........pet2tgz abiword-2.5.6-i486.pet......Конвертирует .pet в архив .tar.gz
pup2pet...........pup2pet abiword-2.5.6.pup..........Конвертирует DotPup в PET-пакет
tgz2pet..........tgz2pet abiword-2.5.6.tar.gz..........Конвертирует .tar.gz файл в PET-пакет
Все они находятся в /usr/bin. Все они просты в использовании. Большинство будут просто задавать вам простые вопросы и информировать о действиях на каждом шаге.
На самом деле pet-файл это архив ".tar.gz" за исключением 32-х байт md5sum (контрольная сумма файла), дописанных в конец файла.
Все, что скрипт "pet2tgz" удаляет, это md5sum. Все, что "tgz2pet" добавляет, это md5sum.
Скрипт "pup2pet" куда более специфичен. Он конвертирует DotPup в PET-пакеты. Он задает несколько вопросов, проверяющих то, что отвечающий и создатель DotPup -- одно лицо. Вопросы несложные, и кто угодно сможет понять и выбрать правильные ответы.
Скрипт "new2dir" очень функционален. Он будет делать все, что указывается в командной строке, обычно при команде "make install" он будет контролировать все установочные файлы и копировать их в раздельные директории.
Например, пакет "abiword-2.5.6": будет создана директория "abiword-2.5.6-i486", и установочные файлы будут скопированы нее. Постфикс "-i486" - это тип CPU, для которого компилируется пакет – есть еще "-i586" и "-i686".
"new2dir" может больше. Он может разъединять компоненты "development", "documentation" и "international" установочных файлов по разным директориям. Существует одна главная целевая директория, например "abiword-2.5.6-i486", но опционально некоторые компоненты могут быть помещены в "abiword_DEV-2.5.6-i486", "abiword_DOC-2.5.6-i486" или "abiword_NLS-2.5.6-i486". Где сделать это распределение -- вопрос для создателя PET-пакета, это делается для сокращения размера пакета. Обычно, если в пакете разделены библиотеки, это лучше для последующей разработки.
Скрипт "dir2pet" может быть применен к каждой их этих директорий, преобразуя их в PET.
Как конвертировать DotPup в PET
Я создал скрипт 'pup2pet', описанный выше. Однако, это нереально -- конвертировать DotPup, просто упакуем его в PET. Скажем, у вас есть "abiword-2.5.6.pup", и вы выполняете команду:
# pup2pet abiword-2.5.6.pup
Это изменит исходный пакет на "abiword-2.5.6.pet", но если вы заглянете внутрь PET-пакета (о том как открыть PET-пакет читайте далее), вы увидите два или три файла: "abiword-2.5.6.pup", "abiword-2.5.6.pet.specs" и по возможности "abiword.desktop" – таким образом, DotPup теперь здесь.
Когда PETget устанавливает такие PET-пакеты, он вызывает встроенный DotPup менеджер, dotpuprox.sh. Таким образом, DotPup устанавливается точно так же, как стандартный.
Одна незначительная проблема в данном методе: установщик DotPup включает всплывающие подсказки, которые высвечиваются в меню, однако PETget не позволяет установщику DotPup работать с меню оконного менеджера, как это делают ".desktop"-файлы.
Данная техника имеет преимущество, заключающееся в том, что DotPup устанавливается абсолютно так же, как нековертированный PET-пакет. Однако, существует другой способ сделать это -- по сущности, полная переделка в PET-формат:
# new2dir dotpuprox.sh `pwd`/abiword-2.5.6.pup # dir2pet abiword-2.5.6-i486
Несмотря на то что установщик DotPup используется для установки DotPup-пакетов, контроль устанавливаемых файлов проводится с помощью "new2dir", который создает папку "abiword-2.5.6-i486" с устанавливаемыми файлами и каталогами. Затем конвертируется папка "abiword-2.5.6-i486" в PET-пакет.
Внутри PET-пакета
Откройте PET-пакет взгляните на файлы и каталоги, это больше похоже на обычный бинарный архив. В Puppy package management я показал на примере Torsmo пакета – давайте проследуем внутрь пакета и взглянем как это выглядит изнутри PET пакета.
Для подтверждения, Torsmo пакет содержит только 2 файла:
/usr/local/bin/torsmo /usr/local/lib/X11/mini-icons/torsmo.xpm
# pet2tgz torsmo-1.0.pet
# tar -zxf torsmo-1.0.tar.gz
Директория "usr" содержит поддиректории и файлы.
Большинство PET пакетов имеют "specs"(данные) файл который содержит файл с текстовой информацией которую использует PETget для управления целями пакетов. Скрипты "dir2pet" и "pup2pet" создают этот файл.
Отметим что вы также можете поместить 16x16 XPM изображение в "specs" файл и PETget переместит его в /usr/local/lib/X11/mini-icons (стандартное место расположения иконок меню 16x16).
Также вы можете разместить 48x48 XPM или PNG изображение в "specs" файл и он будет перемещен в /usr/local/lib/X11/pixmaps (важное замечание: он должен быть назван 'something48.xpm' или 'something48.png', тоесть он должен иметь символы '48' в имени для корректного распознавания PETget менеджером).
В случае с Torsmo, вместо перемещения файла "torsmo.xpm" внутрь "usr/local/lib/X11/mini-icons" каталога, мы можем поместить его сюда:
На этом скриншоте видно еще 2 файла: "pinstall.sh" который выполняется сразу после установки и "puninstall.sh" который выполняется сразу после удаления файлов. (Отметим что PETget скопирует скрипт удаления в /root/.packages/ и переименует его в "torsmo-1.0.remove")
Просто чобы завершить цикл, откройте Torsmo PET пакет, если что нибудь в нем изменилось то мы можем очень просто все восстановить обратно:
# tar -c -f torsmo-1.0.tar torsmo-1.0/ # gzip torsmo-1.0.tar # tgz2pet torsmo-1.0.tar.gz
Пост-инсталляционный скрипт
Это опциональный скрипт который вы можете создать сами. Очень немногие PET пакеты нуждаются в нем. Тоже самое для пост-деинсталяционного скрипта .
Но, если вам нужно создать "pinstall.sh" скрипт, здесь несколько подсказок:
Пост-инсталяционный скрипт требует дополнительных разъяснений. Нет различий в стандартных PET пакетах и PET package в Unleashed сборке, кроме их областей применения. Unleashed пакеты используются при создании Puppy live-CD ISO образа, в то время как стандартные PET пакеты доступны для свободного скачивания в интернете и установке с помощью PETget менеджера.
В обоих случаях, пост-инсталяционный скрипт будет выполнен после установки пакета.
Здесь приведен базовый формат, для случая установки пакета браузера Dillo:
#!/bin/sh #post-install script. #creatuppy: current directory is rootfs-complete, which has the final filesystem. #pupget: current directory is /. #dillo is by default the default internal html viewer. #if no other browser, then dillo will also have to be the default web browser... if [ "`ls -1 ./usr/local/bin/ | grep --extended-regexp "opera|mozstart|links|hv3"`" = "" ];then echo "Configuring Dillo as the default web browser..." echo '#!/bin/sh' > ./usr/local/bin/defaultbrowser echo 'exec dillo "$@"' >> ./usr/local/bin/defaultbrowser echo -n "dillo" > /tmp/rightbrwsr.txt fi
Важно знать какая директория установлена по умолчанию("current directory") когда выпоняется скрипт. В Unleashed среде, директория "rootfs-complete" создается файловой системой Puppy, и rootfs-complete/ и является директорией по умолчанию для скрипта.
Однако, когда пакет загружается и устанавливается с помощью PETget менеджера, текущая директория это головная директория Puppy, тоесть "/".
Вот почему скрипт ставит точку в начале "/usr/local/bin", потому что это работает в любом случае.
Эта "точка в начале" одна из специальных вещей которую вы должны запомнить перед тем как создавать "pinstall.sh" скрипт.
.desktop файл меню
PET пакет который имеет пункт в меню должен иметь файл '.desktop'. Стандартная директория для таких файлов /usr/share/applications/.
Возьмем Torsmo пакет в качестве примера. Если необходимо отображать его в меню (имеется в виду меню в нижнем левом углу экрана) тогда этот файл должен входить в пакет:
/usr/local/bin/torsmo /usr/local/lib/X11/mini-icons/torsmo.xpm /usr/share/applications/torsmo.desktop
Скрипты создания PET пакетов 'pup2pet' и 'dir2pet' сами создадут '.desktop' файл.
Начиная с Puppy v2.14, меню всегда создается динамически, a PET пакет устанавливается или удаляется, или когда загружается новая версия Puppy (или загружается с параметром "pfix=clean" ). Это маленькая программа которая читает '.desktop' файлы и генерирует меню . Рауль (ник rarsa на Puppy Forum) сделал инфраструктуру '.desktop' файлов в Puppy и также написал генератор программ (одна из которых именно менеджер меню).
Эта динамика творит великие вещи. Установите пакет, перезапустите оконный менеджер, и вуаля – новые пункты меню, все работает! Удалите пакет, перезапустите оконный менеджер, и менюудалит лишнюю вкладку.
Вы можете открыть '.desktop' файл и посмотреть для себя, но как правило он содержит текст для генератора об отображаемом тексте и картинке, месторасположении в иерархии меню.
Эта '.desktop' система часть XDG спецификации меню.
Дополнительную информацию можно найти здесь: http://www.freedesktop.org/Standards/desktop-entry-spec
и: http://www.freedesktop.org/wiki/Standards_2fmenu_2dspec
Конфигурационный фал меню
Стандартный оконый менеджер в "стандартной" комплектации Puppy это JWM. Его конфигурационный файл /root/.jwmrc, среди прочего есть все спецификации меню компоновки и записи. Как упоминалось, этот файл позволяет автоматически генерировать меню и обновлять его в режиме работы. Таким образом, что если мы хотим кое что изменить в нем?
В остальных оконных менеджерах так же есть конфигурационный файлы, например у IceWM это /root/.icewm/menu и для Fvwm95 это /root/.fvwm95. Они могут содержать не только спецификацию меню, но вы все равно можете редактировать их.
Некоторые окнные менеджеры не поддерживают всплывающие окна, в этом случае можно использовать дополнительные программы, например "fbpanel" – которая в свою очередь также имеет конфигурационный файл.
Когда PET пакет установлен или удален, PETget запускает маленькую программу "fixmenus" (вот отсюда /usr/sbin). Она читает конфигурацию оконного менеджера (или fbpanel) из /etc/xdg/templates и создает свежие конфигурационные файлы.
Например, шаблонный файл для JWM это /etc/xdg/templates/_root_.jwmrc и будет сгенерирован /root/.jwmrc. Между прочим, если вы хотите вручную изменить JWM конфигурационный файл, измените файл шаблона.
Имя файла шаблона содержит некотрые символьные замены. Например символ "_" будет сконвертирован в "/" символ. Таким образом, the "_root_.jwmrc" создастся как "/root/.jwmrc".
Файлы шаблонов могут содержать пояснения для самих себя. Если вы знакомы с самим приложением то и файл шаблона будет вам понятен.
Для разработчиков, если вы создаете PET пакет для оконного менеджера, например FluxBox, пожалуйста создавайте шаблон в /etc/xdg/templates.