Сайт | Скачать | Видео | Wiki

Автор Тема: [PET пакеты]  (Прочитано 7499 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
[PET пакеты]
« : 12 Апрель 2009, 11:41:28 »
Мощная статья по пакетам со старого форума.

PET пакеты

Только для дистрибутивов Puppy v2.14+

PET (Puppy's Extra Treats)(дополнительное расширение в Puppy) это уникальная система управления пакетами встраиваемая и используемая Puppy начиная с версии 2.14.

Если вы скомпилировали приложение из исходников или скачали уже скомпилированную версию, затем протестировали приложение в Puppy и теперь хотите сделать его доступным для остальных пользователей...
Хотите узнать что внутри PET пакета? Хотите узнать как его устанавливать 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 в a 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.

Перевел статью: zulman
Оригинал здесь http://www.puppylinux.com/development/createpet.htm
« Последнее редактирование: 05 Май 2009, 16:06:36 от Zloy_T »