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: Подготовка пакета и сценария установки/удаления
Для начала, распакуем пакет:
Таким образом, распакуем все пакеты, удалив
оригиналы:
# 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/.
Шаг 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/:
Таким образом, собралось 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:
Еще раз проверьте каталог bin/ и убедитесь в
том, что он содержит только архив base_changes.tar, сценарии
установки/удаления, бинарные файлы и каталог lib/:
Шаг 6: Создаем PBI
PC-BSD предоставляет графический
инструментарий для создания PBI - Package Creator. Он преобразует
содержимое каталога bin/ в PBI. Для установки Package Creator просто
дважды щелкните на скачанном файле. По умолчанию, он разместит иконку на
рабочем столе и сделает запись в меню Programs.
Запустите Package Creator и на первом
экране введите описание пакета:
На следующем экране можно установить
значение "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. |