Видео ролики бесплатно онлайн

Смотреть русский видео

Официальный сайт ysaa 24/7/365

Смотреть видео бесплатно

ava1ar 01.11.2009 20:02

Archlinuxyaourt+customizepkg или еще немного настраиваемости при установке пакетов

Продолжаю исследовать возможности Arch Linux в области сборки и установки пакетов и делиться находками и решениями с читателями Welinux.ru

Итак, сегодня я хочу продолжить тему, начатую в одной из последних моих заметок и посвящу ее customizepkg - небольшому, но удобному инструменту для модификации пакетов прямо во время их сборки. Интересно зачем это нужно и как этим пользоваться? - читаем дальше.

Сразу предупрежу, что для полного понимания внутренней "механики" описанного ниже нужно представлять себе структуру файла PKGBUILD и принципы сборки пакетов. Обо всем этом можно прочитать например тут, тут и тут.
Начну свой рассказ с описания ситуации, где такой инструмент мог бы быть полезен. А вот где. Как я уже рассказывал раньше, yaourt - популярная надстройка над pacman, дает возможность устанавливать пакеты в систему, предварительно произведя их сборку на локальной машине. Для AUR (Arch User Repository) это единственный метод сборки, для пакетов из основных репозиториев и community - опциональный. Данный режим будет особо интересен тем пользователям, которые хотят «подстроить» конкретный пакет под себя - например наложить патч(-и), изменить опции сборки, добавить ресурсы и прочее (понравится гентушникам, хотя это далеко до возможностей по кастомизации в gentoo).
С описанием ситуации разобрались, теперь определимся с инструментом. А им выступит... сам yaourt :) а также скрипт customizepkg от автора yaourt'a, поддержка которого в yaourt уже встроена.

Ну, а теперь самое интересное - как всем этим пользоваться. Что бы не быть голословным, после общего описания я приведу реальный пример из жизни.
Итак, сам customizepkg при запуске совершает следующие действия:
ищет в текущей папке файл PKGBUILD;
выбирает из этого файла имя пакета (значение параметра pkgname);
ищет в /etc/customizepkg.d файл с именем пакета, в котором содержаться инструкции для модификации файла PKGBUILD (о характере модификации - чуть позже);
сохраняет измененный PKGBUILD (предварительно делая резервную копию оригинального);
далее операции, которые я добавил в customizepkg-new (моя модификация customizepkg):
ищется ${pkgname}.files, сим-линки на файлы в которой создаются в дирктории с PKGBUILD;
имена файлов добавляются в спискок source, а их контрольные суммы в список md5sums в файле PKGBUILD, после чего эти файлы могут использоваться в процессе сборки пакета наравне с теми, которые изначально шли в пакете.
yaourt вызывает этот скрипт после закачивания и распаковки тарбола с файлами для сборки пакета, но перед самой сборкой (перед зануском makepkg), таким образом обеспечивая требуемую гибкость.

Теперь о характере и о формате файлов для модификации. По сути это обыкновенные текстовые файлы, которые содержат однострочные команды для модификации файла PKGBUILD - команды трех видов: add, replace and remove.
Начнем с команды add:

1
add#depends#git


Как легко догадаться эта команда добавит git в секцию depends файла PKGBUILD (и создаст новую секцию если ее нет). Назначение думаю понятно - используется когда нужно добавить новый параметр в одну из секций перед сборкой.
Далее, replace и remove. Назначение, думаю, тоже понятно - удаление и замена элементов в том же PKGBUILD. Отличия в том, что вторым параметром, кроме названия секции, можно указать global, что означает выполнение операции по всему документу. Примеры:

1
remove#depends#git


1
replace#global#replace#global#cd "${srcdir}\\/gnome-python-extras-${pkgver}"#cd "${srcdir}\\/gnome-python-extras-${pkgver}"\\nwget -O gnome-python-extras.patch http:\\/\\/bugzilla-attachments.gnome.org\\/attachment.cgi?id=135508 || return 1\\npatch -Np1 -i gnome-python-extras.patch || return 1\\nwget -O gnome-python-extras2.patch http:\\/\\/bugzilla-attachments.gnome.org\\/attachment.cgi?id=145634 || return 1\\npatch -Np1 -i gnome-python-extras2.patch || return 1


Первый пример понятен, но второй немного сложноват, хотя на самом деле, если разобраться, то просто представляет собой несколько строк, записанных в одну, разделенные символом /n и содержащих двойное экранирование для спецсимволов.

Для лучшего понимания советую рассмотреть примеры из /etc/customizepkg.d, которые идут с пакетом. И на это я заканчиваю с теорией и, как и обещал, перехожу к практическому примеру. Будем работать с пакетом gnome-python-extras из стандартного репозитория. Напомню - версия, в репозитории не работает, т.к. собрана со старой версией gdl, а пересборка в помощью команды

1
yaourt -Sb gnome-python-extras


не работает, т.к. изменился api со стороны gnome после выхода версии 2.28.

Теперь о том, как эту проблему решить, используя вышенаписанное:

пробуем

1
yaourt -S gnome-python-extras


и получаем ошибку при сборке. Что ж, неприятно, но решаемо :)
устанавливаем customizepkg-new

1
yaourt -S customizepkg-new


можно использовать и customizepkg, но я не уверен в его работоспособности, т.к. он не обновлялся более двух лет.
помещаем в файл /etc/customizepkg.d/gnome-python-extras следующую строку

replace#global#cd "${srcdir}\\/gnome-python-extras-${pkgver}"#cd "${srcdir}\\/gnome-python-extras-${pkgver}"\\nwget -O gnome-python-extras.patch http:\\/\\/bugzilla-attachments.gnome.org\\/attachment.cgi?id=135508 || return 1\\npatch -Np1 -i gnome-python-extras.patch || return 1\\nwget -O gnome-python-extras2.patch http:\\/\\/bugzilla-attachments.gnome.org\\/attachment.cgi?id=145634 || return 1\\npatch -Np1 -i gnome-python-extras2.patch || return 1

снова пробуем

1
yaourt -S gnome-python-extras


и видим, что нужные нам патчи наложились и сборка прошла без эксцессов - что и требовалось.

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


Тэги: ArchLinux ArchWay yaourt
+ 8 -
Похожие Поделиться

bosha 01.11.2009 22:10 #
+ 0 -
И правда крайне специфично, но полезно =)
Denis 01.11.2009 22:57 #
+ 0 -
Довольно интересная статья и программа, однозначно плюс и в закладки, вдруг пригодится. А пока все таки предпочитаю yaourt -G && cd && gvim PKGBUILD && makepkg -i.
ava1ar 01.11.2009 23:09 #
+ 1 -
Да, согласен. Но по такому способу есть вопрос - после такой вот установки пакет устанавливается как локально собранный? Если да, то в таком случае теряется возможность получать апдейты на пакеты через yaourt (он перестает быть установленным из репозитория), а это минус.
Denis 02.11.2009 16:53 #
+ 0 -
Да, об этом я не подумал. Но в основном больше люблю все "чужие" (т.е. не из основного репозитория) пакеты ставить и обновлять вручную, т.к. бывали случаи долгого лечения после бездумной установки какой-нибудь софтины. Вот теперь почти все устанавливаю ручками и стараюсь следить, по крайней мере, за основными зависимостями.
h31 02.11.2009 13:26 #
+ 1 -
А нет ли какой-нибудь штуковины которая сама бы генерировала разницу между 2 PKGBUILD'ами? Ручками как-то лень делать, проще через yaourt -G, как было выше написано.
ava1ar 02.11.2009 14:49 #
+ 0 -
А сценарий использования такой штуковины привести можете? Я на самом деле сейчас буду потихоньку допиливать customizepkg новыми фичами - могу и на этот счет подумать.
h31 02.11.2009 16:01 #
+ 1 -
В смысле? Подправил PKGBUILD как хочешь, сделал разницу как с помощью diff и закинул в /etc/customizepkg.d получившийся "diff". И не нужно разбираться с этим странным синтаксисом.
ava1ar 02.11.2009 17:46 #
+ 0 -
Да, я думал об этом, но использование diff тут не очень поможет, т.к. в следующий раз текущий патч будет накладываться на новый PKGBUILD, который будет заведомо отличаться от текущего (хотя бы версией, контрольными суммами,... ), так что использование собственного синтаксиса более универсально. Единственное, что создавать его приходится самому и руками. Хотя о накладывании патчей на сам PKGBUILD как об опции можно подумать...
ava1ar 03.11.2009 03:25 #
+ 0 -
C поддержкойй накладывания патчей еще не опеределился - пока допиливаю тот функционал, который уже есть. Сегодня выложу версию 0.4, в которой добавил корректную обработку pkgbase'ов (это набор pkgbuild'ов, например vlc, mesa, etc). Теперь если патчится одноименный пакет из pkgbase то все работает по умолчанию, если же патчится просто пакет из состава, то сборку нужно инициировать командой

yaourt -Sb

В ауре апдейт будет в ближайшее время - пока тестирую :)
xandry 22.12.2009 17:30 #
+ 0 -
customizepkg вещь, конечно, хорошая, но как бы туда прикрутить работу с полями source и md5sums? Требуется для таких PKGBUILD как у extra/firefox-i18n
ava1ar 22.12.2009 17:43 #
+ 0 -
Отпишите конкретно, что сейчас не работает, и как хотелось бы видеть работу customizepkg в идеале, применительно к этому случаю.
xandry 22.12.2009 18:24 #
+ 0 -
Сейчас работает всё из того, что должно. Но есть предложение по дополнительному функционалу. Рассмотрим на примере PKBUILD из extra/firefox-i18n. Там происходит скачивание языковых расширений с сервера mozilla (файлы с расширением .xpi), после чего следует md5sums всех этих файлов. При редактировании PKBUILD вручную, легко получаем удаление ненужных языковых расширений (я оставил только русский) и удаление всех значений md5sums этих самых ненужных расширений. Так вот, хотелось бы чтобы с помощью customizepkg можно было это делать. Если сходу, то добавить опции типа remove#md5sums/add#md5sums и remove#url/add#url
После чего можно будет по средством customizepkg в автоматическом режиме добавлять и удалять какие-либо файлы (даже может быть сторонние патчи).
ava1ar 22.12.2009 19:36 #
+ 0 -
подумаю на этим, пасиба за идею!
ava1ar 22.12.2009 23:44 #
+ 0 -
Добрался домой, посмотрел что можно сделать. Красивого способа на текущий момент не нашел, но вполне работоспособный есть. Просто нужно помнить что customizepkg-new работает с регулярными выражениями, что позволяет пользоваться их возможностями в своих целях. В данном случае, у меня отработал следующий кастомайз скрипт
replace#global#'<0-9,a-f>*'#
replace#global#\\$_url\\/*.xpi#
add#source#$_url\\/ru.xpi
add#md5sums#2855308133fbfdc2500aafd49120ddd1

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

yaourt -Sb --skipinteg firefox-i18n
Последний вариант работает вполне неплохо.

P.S. для тестов испольовались последние версии yaourt-abs и customisepkg-new из AUR.
xandry 23.12.2009 14:43 #
+ 0 -
Спасибо, получилось. Плюс спасибо за то, что делаете.

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн