Сборка образа с пакетами AUR: Используем buildpkg

From Manjaro Linux
Jump to: navigation, search


В данном руководстве содержится информация о том, как создать свой собственный локальный репозиторий. Данный репозиторий можно использовать для загрузки (с помощью yaourt) и сборки (с помощью buildpkg) нужных пакетов. Впоследствии данные пакеты могут быть установлены на ваш модифицированный Manjaro ISO с помощью buildiso.


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

В качестве примера в данной ВИКИ будет использован тот же профиль XFCE ISO.

Замечание: На данный момент, использование локального репозитория больше не поддерживается. Вместо этого, загружайте пакеты, файлы баз данных и проч. в онлайн репозиторий. Это гарантирует, что все смогут собрать Manjaro ISO идентичный вашему тем же способом, что и вы.


Созданиие директорий

Возможно первое, что следует сделать, это создать директорию под локальный репозиторий. В данном руководстве локальный репозиторий будет называться local-repo. Репозиторий будет содержать две поддиректории для разных архитектур:

 mkdir -p ~/local-repo/i686 ~/local-repo/x86_64

Данный локальный репозиторий создается в домашнем каталоге, но можно создать его где угодно.


Следующим шагом нужно создать каталог сборки. В соответсвии с данным руководством в этот временный каталог будут помещать ся файлы из AUR:

 mkdir -p ~/local-build/

Каталог сборки создан в домашней папке, но можно создать его гду угодно.

Загрузка файлов пакетов AUR с помощью yaourt

Теперь нужно перейти локальный каталог сборки:

cd ~/local-build

Затем выполнить

yaourt -G <ИМЯ ПАКЕТА>

чтобы загрузить файлы пакета из AUR в каталог сборки. Появится новая директори с именем пакета, в которой размещены различные файлы и среди них файл PKGBUILDe.

Пример:

В образ ISO необходимо добавить пакет pcmanfm-qt-git. Для этого необходимо загрузить его в локальный репозиторий. Загрузка и распаковка происходит по команде

yaourt -G pcmanfm-qt-git

В локальном каталоге сборки появится файл PKGBUILD:

~/local-build/pcmanfm-qt-git/PKGBUILD

Сборка с помощью buildpkg

До этого шага в системе имелись только загруженные и распакованные файлы из AUR. Следующим шагом будет сборка этих файлов в соответствующие пакеты:

cd ~/local-build
buildpkg -p <package name>


Если требуется собрать 32-битные пакеты в 64-битной системе, необходимо указать это напрямую командой с атрибутом архитектуры:

buildpkg -a i686 -p <package name> 


Больше примеров того, как использовать buildpkg можно посмотреть здесь (англ.).

Пример:

Согласно инструкции выше попробуем собрать pcmanfm-qt-git:

buildpkg -p pcmanfm-qt-git

Сборка аварийно завершилась сообщением об ошибке:

==> Installing missing dependencies...
error: target not found: liblxqt-git
==> ERROR: 'pacman' failed to install missing dependencies.

Это означает отсутствие зависимости liblxqt-git для пакета pcmanfm-qt-git. Нужно загрузить и собрать liblxqt-git собирать pcmanfm-qt-git. Для этого нужно проделать те же шаги (с небольшим дополнением), что и для pcmanfm-qt-git:

yaourt -G liblxqt-git
buildpkg -n -p liblxqt-git

Заметьте, что появился дополнительный аргумент -n. Данный аргумент установит liblxqt-git в окружение сборки (pcmanfm-qt-git требует установленны liblxqt-git, чтобы использовать его).

Еще раз и снова ошибка:

==> Installing missing dependencies...
error: target not found: libqtxdg-git
==> ERROR: 'pacman' failed to install missing dependencies.

Так, liblxqt-git имеет свою зависимость: libqtxdg-git Следует повторить те же шаги и в отношении libqtxdg-git:

yaourt -G libqtxdg-git
buildpkg -n -p libqtxdg-git

Наконец, пакет успешно собран (и установлен в окружение сборки)!

Тем же манером собираются оставшиеся пакеты:

buildpkg -n -p liblxqt-git
buildpkg -p pcmanfm-qt-git

Копирование файлов пакетов в локальный репозиторий

В предыдущем разделе были собраны пакеты. Они созданы и находятся в этой директории системы:

/var/cache/manjaro-tools/

В 64-битных системах, использующих нестабильную ветку, путь к пакетам будет такой

/var/cache/manjaro-tools/pkg/unstable/x86_64

Перед вами предстанут сжатые файлы пакетов. Имена файлов должны оканчиваться на .pkg.tar.xz.


Переместите все файлы пакетов в свой локальный репозиторий:

~/local-repo/x86_64

Пример:

Ваш локалный репозиторий теперь будет выглядеть так:

liblxqt-git-0.8.0.23.g079768e-1-x86_64.pkg.tar.xz  
libqtxdg-git-1.0.0.7.g0503cf7-1-x86_64.pkg.tar.xz  
pcmanfm-qt-git-0.8.0.4.g99987af-1-x86_64.pkg.tar.xz

Сборка файлов .db

Воспользуйтесь командой repo-add для сборки файла базы данных. Запустите следующую команду в терминале:

cd ~/local-repo/x86_64
repo-add local-repo.db.tar.gz *.pkg.tar.*

Каждый раз при добавлении пакетов в свой локальный репозиторий следует снова выполнять эти команды! Every time you add packages to your local repositories, these commands need to be executed again! В противном случае buildiso будет жаловаться на отсутствие пакетов в вашем локальном репозитории.

Пример:

После запуска этих команд локальный репозиторий будет выглядеть так:

local-repo.db.tar
local-repo.db
liblxqt-git-0.8.0.23.g079768e-1-x86_64.pkg.tar.xz  
libqtxdg-git-1.0.0.7.g0503cf7-1-x86_64.pkg.tar.xz  
pcmanfm-qt-git-0.8.0.4.g99987af-1-x86_64.pkg.tar.xz

Добавление local-repo в файл pacman-XXXXX.conf

Внимание: Конфигурационные файлы pacman для 32-битной и 64-битной систем отличаются: в 64-битных системах включен репозиторий [multilib]. Сокопируйте и вставьте шаблон pacman-default.conf (для 32 бит) и/или pacman-multilib.conf из /usr/share/manjaro-tools/ в manjaro-tools-iso-profiles/xfce/

В самый низ своего нового файла pacman-XXXXX.conf добавьте:

[local-repo]
SigLevel = Never
Server = file:///home/<username>/$repo/$arch

Замените <username> своим именем пользователя в системе.

Пример:

Теперь модифицированный профиль вашего XFCE ISO будет выглядеть так (для собираемого 64-битного ISO):

xfce-overlay
isolinux -> ../shared/isolinux/
mkinitcpio.conf -> ../shared/mkinitcpio.conf
overlay -> ../shared/overlay/
overlay-livecd -> ../shared/overlay-livecd/
Packages -> ../shared/Packages-Systemd
Packages-Livecd -> ../shared/Packages-Livecd-Systemd
Packages-Xfce
Packages-Xorg -> ../shared/Packages-Xorg
pacman-multilib.conf
profile.conf

Вам нужны и файл pacman-multilib.conf, и файл pacman-default.conf в каталоге профиля. Файл pacman-default.conf будет использован buildiso для сборки 32-битных ISO, файл pacman-multilib.conf - для 64-битных.

Ваш новый файл pacman-multilib.conf выглядит так:

#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives

#
# GENERAL OPTIONS
#
[options]
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir     = /
#DBPath      = /var/lib/pacman/
#CacheDir    = /var/cache/pacman/pkg/
#LogFile     = /var/log/pacman.log
#GPGDir      = /etc/pacman.d/gnupg/
HoldPkg     = pacman glibc
# If upgrades are available for these packages they will be asked for first
SyncFirst    = manjaro-system
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
#UseDelta    = 0.7
Architecture = auto

# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg   =
#IgnoreGroup =

#NoUpgrade   =
#NoExtract   =

# Misc options
#UseSyslog
#Color
#TotalDownload
# We cannot check disk space from within a chroot environment
#CheckSpace
#VerbosePkgLists

# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel    = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required

# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Manjaro Linux
# packagers with `pacman-key --populate archlinux manjaro`.

#
# REPOSITORIES
#   - can be defined here or included from another file
#   - pacman will search repositories in the order defined here
#   - local/custom mirrors can be added here or in separate files
#   - repositories listed first will take precedence when packages
#     have identical names, regardless of version number
#   - URLs will have $repo replaced by the name of the current repo
#   - URLs will have $arch replaced by the name of the architecture
# 
# Repository entries are of the format:
#       [repo-name]
#       Server = ServerName
#       Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#

# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.

[core]
Include = /etc/pacman.d/mirrorlist

[extra]
Include = /etc/pacman.d/mirrorlist

[community]
Include = /etc/pacman.d/mirrorlist

# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.

[multilib]
Include = /etc/pacman.d/mirrorlist

#[infinality-bundle]
#SigLevel = Never
#Server = http://bohoomil.com/repo/$arch

# An example of a custom package repository.  See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs

[local-repo]
SigLevel = Never
Server = file:///home/excalibur/$repo/$arch

Можно заметить, что присутствует еще один репозиторий в файле pacman-multilib.conf: [infinality-bundle]. Но он закомментирован. С его помощью показан отличный способ добавлять дополнительный нелокальный репозиторий.

Дополнительный локальный репозиторий будет автоматически удален из этого файла прежде, чем будет скопирован в установленную систему, в то время как нелокальный репозиторий будет сохранен. Значит, пакеты AUR лучше устанавливать из собственного локального репозитория (как описано в руководстве по [local-repo]). Пакеты недостопные ни в репозиториях Manjaro repositories, ни в AUR лучше устанавливать из дополнительного нелокального репозитория (см. [infinality-bundle] в качестве примера).

Допавление названий пакетов в профиль ISO

Воспользовавшись примером, описанным здесь (англ.), можно добавить названия пакетов AUR в свой файл Packages-Xfce.

Внимание: Нужно добавить названия всех зависимостей раньше имен основных пакетов (только для зависимостей и репозитория AUR).

Пример:

Теперь можно добавить pcmanfm-qt-git в свой список пакетов своего профиля ISO. Т.е. ваш файл manjaro-tools-iso-profiles/xfce/Packages-Xfce будет выглядеть так:

## XFCE Main Packages
ffmpegthumbnailer
gconf # fix qt-theme
gnome-keyring # fix wlan segfault
gufw # firewall
accountsservice
lightdm-gtk-greeter
lightdm-gtk-greeter-settings
light-locker
manjaro-settings-manager
menulibre

...

## AUR packages
libqtxdg-git
liblxqt-git 
pcmanfm-qt-git

Порядок установки пакетов в ваш ISO - сверху вниз. Удостоверьтесь в правильной очередности трех последних пакетов в списке. pcmanfm-qt-git зависит от liblxqt-git, который в свою очередь зависит отn libqtxdg-git (см. раздел 4.1). Таким образом, liblxqt-git должен быть установлен в первую очередь!

Очистка окружения сборки

Для удаления окружения сборки с жесткого диска выполните:

sudo rm -r /var/lib/manjaro-tools/buildpkg

Дополнительно

Теперь можно продолжить править manjaro-tools.conf или собирать свой ISO.


Не забудьте установить yaourt, octopi, или pamac на свой ISO. Это единственные программы способные обновлять пакеты с AUR.