by Dru Lavigne
01/05/2006
Original
Перевод: Сгибнев Михаил
FreeBSD начала все больше и больше привлекать внимание пользователей в качестве операционной системы для рабочих станций.
В последние годы появилось несколько ОС, базирующихся на FreeBSD, позволяющих неквалифицированному
пользователю установить систему, настроить звук, сеть и необходимые приложения. В дополнение к легкости использования,
пользователь получает безопасность и стабильность, свойственную всем BSD системам, отсутствие какой-либо платы и
преимущества BSD license.
Одним из таких проектов является PC-BSD, который предоставляет две отличительные особенности, делающие его сильным
игроком на рынке настолькых систем. Первый - это
Online Update Manager, позволяющий пользователю одним щелчком мыши
задавать расписание или проверять в ручном режиме доступность обновлений системы и приложений. В случае наличия обновлений,
они загружаются и устанавливаются, делая это процесс легким и незамысловатым.
Второй особенностью является наличие GUI инсталлятора. В то время, как опытные пользователи могут работать с системой
портов FreeBSD и прекомпилированными пакетами, обычные люди могут скачать PBI (пакет PC-BSD) из
каталога
приложений PBI, дважды щелкнуть на нем и приложение будет установлено как по волшебству.
Преимущество PBI заключается в самодостаточности. Это значит, что пользователь случайно не перезапишет существующие библиотеки или
файлы, устанавливая или удаляя приложения.
В этой статье показано, как создать ваш собственный PBI, используя в качестве примера Digikam, поскольку это приложение содержит довольно
много зависимостей. Хотя, среднее PBI будет значительно проще, я хотела бы показать те подводные камни, с которыми
вам предстоит столкнуться.
Хотя вряд ли случайные пользователи будут собирать PBI, быть программистом для этого совсем не обязательно.
Если у вас есть некоторые навыки работы в Unix, вам нравится коллекция портов FreeBSD и вы обладаете достаточным
количеством настойчивости и упорства то легко можете создать ваш первый PBI в течение дня.
В данной статье мы предполагаем, что вы работаете в PC-BSD.
Шаг 1: Создаем рабочую область
Начните с поиска на
http://www.pbidir.com, чтобы удостовериться в отсутствии уже собранного
PBI. Так же удостоверьтесь, что необходимый пакет FreeBSD имеется в
каталоге пакетов FreeBSD.
Обратите внимание на то, что на момент написания статьи 6.0-RELEASE только вышла и для нее не было достаточного количества пакетов
в 6.0-RELEASE/packages/. Я рекомендую обратиться сначала туда, поскольку там находятся более новые версии пакетов, в случае неудачи,
используйте 5.4-RELEASE/packages/.
Затем создайте каталог приложения в вашем домашнем каталоге, при этом необходимо иметь права суперпользователя:
% pwd
/home/dru
% su
Password:
# mkdir -p pbi/digikam
# cd pbi/digikam
Шаг 2: Скачиваем пакет FreeBSD и необходимые библиотеки
Получаем пакет:
# fetch ftp.freebsd.org/pub/FreeBSD/releases/i386/5.4-RELEASE/packages/graphics/digikam-0.7.2.tbz
Затем, устанавливаем пакет, чтобы удостовериться, что не имеем неразрешенных зависимостей.
Если вы получите сообщение об ошибке, доустановите требуемые зависимости:
# pkg_add digikam-0.7.2.tbz
pkg_add: could not find package libltdl-1.5.10 !
pkg_add: could not find package libexif-0.6.10 !
# fetch ftp.freebsd.org/pub/FreeBSD/releases/i386/5.4-RELEASE/packages/All/libltdl-1.5.10.tbz
# fetch ftp.freebsd.org/pub/FreeBSD/releases/i386/5.4-RELEASE/packages/All/libexif-0.6.10.tbz
Снова делаем попытку установки пакета:
# pkg_add digikam-0.7.2.tbz
Не волнуйтесь, если получите предупреждение о несоответствии версий некоторых библиотек.
Вы можете проверить успешность установки следующей командой:
# pkg_info | grep digikam
digikam-0.7.2 Photo album manager for KDE with gphoto2 backend
Шаг 3: Подготовка пакета и сценария установки/удаления
Для начала, распакуем пакет:
# bunzip2 *.tbz
Таким образом, распакуем все пакеты, удалив оригиналы:
# tar xvf digikam-0.7.2.tbz && rm digikam-0.7.2.tbz
# tar xvf libltdl-1.5.10.tbz && rm libltdl-1.5.10.tbz
Обратите внимание на то, что в результате этих действий было создано несколько каталогов, один из которых
bin/. PBI, который вы создаете, будет сжатым снимком этого каталога. В остальной части статьи мы рассмотрим, как поместить в него
все необходимое.
Создадим новый тарбалл, называющийся
base_changes.tar, содержащий все, за исключением
bin/:
# tar cv --exclude bin -f bin/base_changes.tar .
Создаем сценарий установки и делаем его исполняемым:
# vi bin/PBI.SetupScript.sh
#!/bin/sh
cd /usr/local/MyPrograms/$1
tar xvjpf base_changes.tar
rm base_changes.tar
# chmod +x bin/PBI.SetupScript.sh
Аналогично со сценарием удаления PBI:
# vi bin/PBI.RemoveScript.sh
#!/bin/sh
cd /usr/local/MyPrograms
rm -Rf $1
# chmod +x bin/PBI.RemoveScript.sh
Обратите внимание на то, что во время установки PBI все необходимое (base_changes.tar) распаковывается в
/usr/local/MyPrograms/$1, где $1 означает имя PBI. При деинсталляции PBI этот каталог удаляется.
Поскольку вы можете использовать эти сценарии с любым PBI, то не стоит удалять их, лично я
сохраняю копию в моем каталоге
pbi/.
# cp bin/PBI.* ~dru/pbi
Шаг 4: Копирование библиотек
Создаем подкаталог
lib/ в каталоге
bin/:
# pwd
/home/dru/pbi/digikam/bin
# mkdir lib
Если приложение не самое простое, то может быть довольно большое число библиотек, которые необходимо будет
разместить в
lib/. ldd даст вам их имена, но процесс необходимо автоматизировать. Поскольку
этот сценарий пригодится вам еще не раз, сохраните его в
~user_account/pbi/.
# more ~dru/pbi/lib.sh
--- Cut here ---
#!/bin/sh
# this script requires you to input the name of an executable
# which is referred to as $1 in the script
# copy the output of ldd into a file
# ldd gives the paths to required libraries
ldd $1 > $1_lib.sh
# these statements clean up the output of ldd
# and transforms it into a series of "cp path lib" statements
cat $1_lib.sh | cut -d = -f 2 | cut -d '(' -f 1 > $1_tmp1
sed 's/\>/cp/g' $1_tmp1 > $1_tmp2 ; mv $1_tmp2 $1_tmp1
sed 's/$/ lib/g' $1_tmp1 > $1_tmp2 ; mv $1_tmp2 $1_lib.sh
# this transforms the first non-path line
# into a shebang
sed 's/.*\:.*/\#\!\/bin\/sh/'g $1_lib.sh > $1_tmp1 ; mv $1_tmp1 $1_lib.sh
# this makes the resulting file executable
chmod +x $1_lib.sh
echo "Run the script $1_lib.sh to copy the required libraries"
--- Cut here ---
Не забудьте сделать этот сценарий выполняемым:
# chmod +x ~dru/pbi/lib.sh
В качестве параметра сценарий берет имя бинарного файла:
# pwd
/home/dru/pbi/digikam/bin
# file * | grep LSB
dcraw: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for
FreeBSD 5.3-CURRENT (rev 5), dynamically linked (uses shared libs),
stripped
digikam: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for
FreeBSD 5.3-CURRENT (rev 5), dynamically linked (uses shared libs),
stripped
Наш проект содержит 38 исполняемых файлов, что потребует соответствующее число раз запустить lib.sh.
Сценарий lib.sh создает еще один сценарий, копирующий необходимые библиотеки, поэтому порядок действий представляется следующий:
# ~dru/pbi/lib.sh dcraw
Run the script dcraw_lib.sh to copy the required libraries
# ./dcraw_lib.sh && rm dcraw_lib.sh
# ~dru/pbi/lib.sh digikam
Run the script dcraw_lib.sh to copy the required libraries
# ./digikam_lib.sh && rm digikam_lib.sh
После того, как закончите этот увлекательный процесс, обратите внимание на каталог
lib/:
# ls lib | wc
79 79 1055
Таким образом, собралось 79 библиотек.
Затем проверьте, имеются ли какие-либо подкаталоги в
lib/:
# ls -F ~dru/pbi/digikam/lib | grep "/"
gphoto2/
gphoto2_port/
imlib2/
kde3/
Переносим их в
bin/lib/:
# pwd
/home/dru/pbi/digikam/bin/lib
# mkdir gphoto2 gphoto2_port imlib2 kde3
# cp -R ~dru/pbi/digikam/lib/gphoto2/* gphoto2
# cp -R ~dru/pbi/digikam/lib/gphoto2_port/* gphoto2_port
# cp -R ~dru/pbi/digikam/lib/imlib2/* imlib2
# cp -R ~dru/pbi/digikam/lib/kde3/* kde3
Шаг 5: Ищем иконку и очищаем bin/
Было бы здорово добавить к вашему PBI иконку. Проверьте, есть ли она в вашем пакете:
# grep -w icons ../+CONTENTS
share/apps/digikam/icons/hicolor/32x32/actions/addimagefolder.png
Этот пакет определенно шел со многими иконками, и это - та, которую я ищу:
# cp ../share/icons/crystalsvg/128x128/apps/digikam.png .
Если ваш пакет не имеет никаких иконок в своем составе, выберите себе любой из каталога
/usr/local/share/icons/crystalsvg/128x128/ и копируйте его в
bin/.
Когда вы закончите, удалите пакет со всеми зависимостями, чтобы они не мешали нам при
проверке PBI:
# pkg_delete -rx digikam
Еще раз проверьте каталог
bin/ и убедитесь в том, что он содержит только архив base_changes.tar,
сценарии установки/удаления, бинарные файлы и каталог
lib/:
Шаг 6: Создаем PBI
PC-BSD предоставляет графический инструментарий для создания PBI -
Package Creator.
Он преобразует содержимое каталога
bin/ в PBI. Для установки
Package Creator
просто дважды щелкните на скачанном файле. По умолчанию, он разместит иконку на рабочем столе и сделает запись в меню
Programs.
Запустите Package Creator и на первом экране введите описание пакета:
Package Name: Digikam
Package Version: -0.7.2
Author: Dru Lavigne
Website: http://www.theopensourceadvocate.org/
На следующем экране можно установить значение "No" для экрана отображения лицензии, если PBI не требует обратного.
На следующем экране укажите расположение каталога
bin/:
/home/dru/pbi/digikam/bin/
В разделе
Library Support выберите пункт
Specify Library Directory,
щелкните на кнопке
Browse и дважды кликните на
lib/.
На следующем экране выберите пункт
Default Program Icon и укажите расположение иконки PNG.
Нажмите
Add в пункте
Package Executables и укажите имя программы. Щелчок на кнопке
Browse
в пункте
Package Executables позволит выбрать программу (в данном примере digikam).
Некоторые программы (например Ethereal) требуют права суперпользователя для запуска.
Digikam к их числу не принадлежит, поэтому просто выбираем
Save и
Next для завершения.
Некоторые программы требуют указания типов Mime, которые вы можете добавить в следующем экране (Digikam не в их числе).
Создание PBI занимает некоторое время, которое зависит от количества и обьема библиотек и размера архива.
По завершенни работы утилита оповестит вас и поместит готовый PBI в ваш домашний каталог.
Если есть желание, то нажав кнопку
Save preset, вы можете сохранить введенные данные в файле .pbc.
Шаг 7: Проверяем PBI
Важно убедиться в работоспособности созданного PBI, в его корректной установке и последующем удалении.
Я поместила PBI на рабочий стол:
# mv ~dru/Digikam-0.7.2-PV.pbi ~dru/Desktop/
Теперь покинем учетную запись суперпользователя и убедимся, что приложение в настоящее время не установлено:
# exit
% pkg_info | grep digikam
%
Дважды щелкните на PBI. Система спросит у вас пароль суперпользователя, дважды нажмите Next и затем Finish.
На рабочем столе должна появиться иконка приложения, запустите его, чтобы убедиться в его работоспособности.
Тепрь убедитесь в корректном удалении.
Перейдите
Computer -> PC-BSD Settings -> Remove Programs и удалите программу. После завершения процесса
убедитесь, что каталог программы удален из
/usr/local/MyPrograms/.
Если что-то не работает
Если вы получаете ошибку при запуске программы, проверьте содержимое каталога
вашей программы в
/usr/local/MyPrograms/. Возможно вы пропустили подкаталоги или файлы,
допустили ошибку в сценарии установки, приведшей к нераспаковке архива. Соответственно, если после деинсталляции программы
остаются неудаленные файлы, то ошибка допущена в сценарии удаления.
Если, на первый взгляд, все файлы на месте, возможно вы не выполнили lib.sh для какого-нибудь бинарного файла и теперь не хватает библиотек.
Иногда может оказаться так,что приложение запустится, но будет неработоспособно.
В примере с Digikam оказалось бы недоступно большинство меню.
Это случается, когда приложение использует файлы совместно с существующими приложениями, такими как KDE.
Чтобы найти эти файлы я проверила список
пакетов для Digikam.
Это были общие файлы, которые я пропустила.
Поскольку я не хочу конфликтовать с существующими приложениями или копиями файлов
вне рабочего каталога программы, я использовала символические ссылки.
Я люблю добавлять ссылки по одной в командной строке и повторно запускать приложение, наблюдая, что из этого получится.
Как только я поняла, какие символические ссылки добавили недостающие особенности, я добавила их в PBI.SetupScript.sh и впересобрала PBI.
В случае Digikam недостающие особенности были добавлены следующими ссылками (в командной строке
замените 1$ названием каталога, поскольку 1$ будет работать только в сценарии):
% ln -s /usr/local/MyPrograms/$1/applications/kde/showfoto.desktop \
/usr/local/share/applications/kde
% ln -s /usr/local/MyPrograms/$1/share/applnk/Graphics/digikam.desktop \
/usr/local/share/applnk/Graphics
% ln -s /usr/local/MyPrograms/$1/share/apps/digikam/ \
/usr/local/share/apps/digikam
% ln -s /usr/local/MyPrograms/$1/share/icons/hicolor/ \
/usr/local/share/icons/hicolor
В заключение, если ваше приложение использует GTK+ или Pango, обратитесь к документу
GTK+ and Pango PBI packaging.
Шаг 8: Публикуем PBI
Если вы преодолели массу сложностей, чтобы сделать PBI, то вы могли бы отправить его
для включения на сайт PC-BSD, таким образом другие пользователи PC-BSD смогут его использовать.
Убедитесь, что полностью проверили работоспособность PBI, хотя разработчики PC-BSD еще раз оттестируют ваш пакет.
Перейдите в каталог PBI на сайте и нажмите ссылку "Submit PBI package for approval".
Сам процесс разбит на две части. Первая заключается в том, чтобы загрузить PBI на проверку через ftp:
% cd Desktop
% ftp ftp://pcbsd.homeunix.org
Name (ftp.pcbsd.homeunix.org:dru): anonymous
Password:
ftp> binary
ftp> put Digikam-0.7.2-PV.pbi
ftp> bye
Затем в окне браузера укажите ваше имя, email, имя PBI и его описание, при необходимости добавьте комментарии.
Ваш PBI теперь появится в списке пакетов, ждущих одобрения. Разработчики войдут в контакт с вами относительно состояния вашего PBI.