вторник, 10 мая 2011 г.

ArchLinux GNOME build failed (большой неоконченный пост)

Несколько дней назад я начал писать большой пост о том, как обходить всякие засады и ставить костыли в систему для сборки GNOME 2.32 в ArchLinux, где уже есть GNOME 3. По неизвестной пока ещё для меня причине GNOME не собрался. Я и так пытался, и эдак - никак. Не думаю, что у меня в ближайшее время появится желание ещё повозиться, и без того половину выходных на это потратил, так что опубликую свои старания так.

Неудавшаяся сборка GNOME 2.32 в ArchLinux


Первым делом я убрал из списка запускаемых демонов GDM, чтоб он не мешался. Затем всё по инструкциям на сайте гнома: сделал папку ~/checkout/gnome/ полагая, что вдруг там что-то может быть захардкодено, и в ней забрал jhbuild из репозитария. jhbuild - это инструмент для сборки гнома.
$ git clone git://git.gnome.org/jhbuild

Мне известно два способа сборки jhbuild - с использованием некого скрипта gnome-autogen.sh или без оного (и в результате гном получится без gnome-doc-utils и, как следствие, без всех зависящих от gnome-doc-utils пакетов). Этот скрипт входит в пакет gnome-common и является по сути расширением autotools для среды GNOME. Я зашёл в соседнюю консоль по рутом и принялся доставлять необходимые пакеты: gnome-common, intltool и gnome-doc-utils. Всё, наверное, подойдёт от третьего гнома для сборки второго.
$ cd jhbuild
$ ./autogen.sh
$ make
$ make install
make install можно делать от ординарного пользователя, всё равно jhbuild гадит в папку ~/.local/bin. Кстати говоря, её надо добавить в PATH. Разные люди делают это по-разному, я добавляю строку PATH=$PATH:/home/axshavan/.local/bin себе в ~/.bashrc.

Теперь надо взять конфигурационный файл ~/checkout/gnome/jhbuild/examples/sample.jhbuildrc и скопировать его в ~/.jhbuildrc - это конфигурационный файл, без которого, возможно, ничего не получится. Более того, этот файл надо подредактировать, чтоб jhbuild собирал не ещё один третий гном посвежее имеющегося, а именно старый добрый GNOME 2. Там внутри написано английскими буквами: "если вы хотите собрать старый гном 2.32, раскомментируйте это", что я, собственно, и сделал. Всё прочие строчки я оставил нетронутыми, полагая, что излишняя кастомизация может негативно повлиять на исход эксперимента.

Но теперь нельзя ещё приступать к сборке GNOME 2.32. Надо выполнять команду
$ jhbuild sanitycheck
...и до тех пор, пока оно ругается, удовлетворять. Сразу дам совет - если sanitycheck думает, что у вас нет питона (/usr/bin/env: python: No such file or directory), то на самом деле это вовсе не означает, что его у вас нет, просто оно не может найти на него ссылку.
# cd /usr/bin
# ln -s /usr/bin/python2 python
Кстати говоря, если у вас параллельно установлены сразу python2 и python3, то эту ссылку всё равно надо сделать, потому что если она будет вести не на тот питон, то jhbuild всё равно будет ругаться (ImportError: No module named __builtin__), так как написано на python2:
# cd /usr/bin
# rm python
# ln -s /usr/bin/python2 python
И если это были ещё более-менее очевидные грабли, на которые может наступить только новичок вроде меня, то сообщение об ошибке типа "Could not find DocBook XSL Stylesheets in XML Catalog" означает то, что не хватает пакета docbook-xsl.

Когда jhbuild sanitycheck перестаёт выдавать сообщения об ошибках, можно приступать к собственно сборке, но перед этим неплохо бы скачать и установить все необходимые зависимости для всех пакетов гнома, чтоб не обнаруживать, что чего-то не хватает, посреди процесса конфигурирования очередного пакета:
jhbuild bootstrap
Конечно, гораздо быстрее было бы установить всё необходимое в бинарном виде через pacman, но на сайте гнома, к сожалению, простого списка всего необходимого нет для ArchLinux :( Как минимум понадобится gettext, он собирается довольно долго, а остальное вроде входит в пакет base-devel или собирается быстро.

Можно считать этот пост success ArchLinux JHBuild bootstraping report :)
Но не более того. Было бы слишком самонадеянно полагать, что теперь можно набрать jhbuild build, и к утру следующего дня иметь работоспособный GNOME 2.32 в папке /opt/gnome/. Предстоит ещё долго плясать с бубном и подставлять костыли. Корень всех проблем - пакет glib. Сначала он ругается на отсутствие libtool, хотя последний имеется. Дело в скрипте autogen.sh, в котором вхардкодена проверка на libtool-2.2* (я бы подозревал, что требуется именно 2.2, если бы сообщение об ошибке было не "You must have libtool >= 2.2 installed to compile GLib"), а так, как у меня в системе уже libtool-2.4, то такая проверка не проходит. Я исправил autogen.sh :)

Потом выясняется, что glib собирается версии 2.26.2, и это слишком старая версия для того, чтоб собрался пакет gdk-pixbuf (надо 2.27.2). Я заменил все соответсвующие симлинки в /opt/gnome/lib, /opt/gnome/bin и даже, на всякий случай, в /opt/gnome/share, чтоб они вели на glib из GNOME 3. А в файлах /opt/gnome/lib/pkg-config/glib.pc и /opt/gnome/lib/glib.la исправил номера версий.

Всё равно не прокатило :( На этом я сдался.

Комментариев нет:

Отправить комментарий

Ублюдочный Гугл поломал форму комментариев. Извините.