pbuilder: настройка и использование

25 Jun 2012


...

Подготовка

> lsb_release -c 
Codename:       precise
> sudo apt-get install debhelper pbuilder
> mkdir -p ~/bin
> ln -s /usr/share/doc/pbuilder/examples/pbuilder-distribution.sh ~/bin/pbuilder-precise
> mkdir ~/pbuilder
> ~/bin/pbuilder-precise create
<...много текста...>

universe multiverse

см. https://wiki.ubuntu.com/PbuilderHowto#Universe_support

> touch ~/.pbuilderrc
> echo 'COMPONENTS="main restricted universe multiverse"' >> ~/.pbuilderrc
> ~/bin/pbuilder-precise update --override-config

Локальный репозиторий

При сборке новых пакетов по зависимости могут понадобится пакеты, которые тоже были собраны локально, и котрых нет во внешних репозиториях. Чтобы использовать такие пакеты, делается локальный репозиторий и подключается в базовый образ.

Рецептов много и разных: в Ubuntu-документации на pbuilder, StackOverflow, статьи в блогах. Простой, рабочий и легко контролируемый способ описывает debian’овая wiki (http://wiki.debian.org/PbuilderTricks):

1. Создаем каталог для пакетов (например, ~/pbuilder-local-deps) и каталог для хук-скриптов (например, ~/.pbuilder-hooks)

Названия каталогов произвольные. Главное – в дальнейших настройках ссылаться на них правильно.

> mkdir -p ~/pbuilder-local-deps
> mkdir -p ~/.pbuilder-hooks

2. Добавляем в конец конфига ~/.pbuilderrc (подставить свой логин):

OTHERMIRROR="deb file:///home/<user>/pbuilder-local-deps ./"
BINDMOUNTS="/home/<user>/pbuilder-local-deps"
HOOKDIR="/home/<user>/.pbuilder-hooks"
EXTRAPACKAGES="apt-utils"

3. Если базовый образ еще не создан – создаем, если создан – обновяем, чтобы локальный репозиторий попал в sources.list

> ~/bin/pbuilder-precise update --override-config

4. Добавляем хук в соответствующий каталог (/home/<user>/.pbuilder-hooks)

Назвать скрипт рекомендуют D05deps, не забыть сделать его исполняемым, в имя каталога подставить свой логин:

> touch ~/.pbuilder-hooks/D05deps
> chmod a+x ~/.pbuilder-hooks/D05deps
> cat <<EOF > ~/.pbuilder-hooks/D05deps
#!/bin/sh
(cd /home/<user>/pbuilder-local-deps; apt-ftparchive packages . > Packages)
apt-get update
EOF

Т.е. содержание скрипта:

#!/bin/sh
(cd /home/<user>/pbuilder-local-deps; apt-ftparchive packages . > Packages)
apt-get update

4a. Для надежности копируем какой-нибудь .deb в pbuilder-local-deps, делаем sudo ~/.pbuilder-hooks/D05deps и обновляем базовый образ.

5. Собираем “библиотеку” (пакет-1)

6. Копируем получившиеся .deb-файлы в /home/<user>/pbuilder-local-deps

7. Собираем “приложение” (пакет-2, зависящий от пакет-1)

В следующий раз начинать с пункта 5 :-).

sudo

Требуется.

untrusted packages

Можно разрешить всегда: ALLOWUNTRUSTED=yes в ~/.pbuilderrc