PET-пакеты

15 февраля 2011 - Александр Д.

Перенёс: Александр Д.

 

Автор - 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
Если убрать контрольную сумму md5sum в файле "torsmo-1.0.pet" :
Код:
# 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.