LINUX.ORG.RU

Сборка grub из srcrpm в CENTOS 6 x86_64


0

2

Пытаюсь собрать из исходников grub, чтобы наложить вот этот патч
--- grub-0.97/stage2/common.c 2008-02-07 07:56:16.000000000 -0800
+++ grub-0.97/stage2/common.c.new 2008-02-07 07:59:06.000000000 -0800
@@ -142,7 +142,8 @@
init_bios_info (void)
{
#ifndef STAGE1_5
- unsigned long cont, memtmp, addr;
+ unsigned long memtmp, addr;
+ volatile unsigned long cont;
int drive;
#endif

Для начала просто пытаюсь собрать rpm из вот єтого пакета без изменений
ftp://ftp.muug.mb.ca/pub/centos/6.0/os/SRPMS/Packages/grub-0.97-68.el6.src.rpm
Пробовл делать и под простым пользователем и под рутом. Вот последовательность действий
~ cd
~ wget ftp://ftp.muug.mb.ca/pub/centos/6.0/os/SRPMS/Packages/grub-0.97-68.el6.src.rpm
~ rpm -ivh grub-0.97-68.el6.src.rpm
~ cd rpmbuild
После этого правлю grub.cpec, заменяю строку
BuildRequires: autoconf /usr/lib/crt1.o automake
на

%ifarch %{sparc} x86_64
BuildRequires: autoconf /usr/lib64/crt1.o automake
%else
BuildRequires: autoconf /usr/lib/crt1.o automake
%endif

~ rpmbuild -ba SPECS/grub.spec

И в результате получаю ошибку

configure:3331: error: in `/root/rpmbuild/BUILD/grub-0.97':
configure:3334: error: C compiler cannot create executables
See `config.log' for more details.

вот вывод config.log
http://pastebin.com/raw.php?i=NKFgNbtW

> заменяю строку

А зачем ?

Это готовый src.rpm от centos. Из него собираются пакеты под любую из архитектур i686 x86_64 ia64

Зачем править ?

alpha ★★★★★ ()
Ответ на: комментарий от Casufi

у тебя 64битная система ? центос? на ней стоит груб-0.97 ? из какого пакета он собран ? вот тот src.rpm и бери.

И он физически не может не собраться. Просто перед сборкой поставь все зависимости в систему:

su -c «yum-builddep ~/rpmbuild/grub.spec»

alpha ★★★★★ ()
Ответ на: комментарий от Casufi

> yum-builddep ~/rpmbuild/grub.spec не проовал делать

сейчас попробовал ?

BuildRequires - это зависимости, необходимые для сборки пакета на системе. Все перечисленные там вещи должны быть установлены до запуска сборки. Команда yum-builddep аавтоматически анализирует спек-файл и устанавливает нужные пакеты из репозиториев.

На правах рекламы, мое:

http://wiki.russianfedora.ru/index.php/Как_пересобрать_RPM-пакет

alpha ★★★★★ ()
Ответ на: комментарий от Casufi

не поняла смысла этого «проще»

Тебе нужны были зависимости, их нужно было просто поставить. Зачем жонглировать архитектурами для этого ?

alpha ★★★★★ ()
Ответ на: комментарий от alpha

сейчас попробовал ?

Естественно попробовал, но юм неустановил никаких пакетов, а rpm так и не собрался. Если вам не сложно, установите CentOS Linux release 6.0 (Final) 64 битный на виртуалку и попробуйте пересобрать пакет, я не уверен что это можно сделать без плясок с бубном.

Кроме этого, у меня получилось наложить патч и собрать пакет для 64 битной системы на виртуалке с 32х битной системой, получилось его проинсталировать, но система все равно видит только ~2900 оперативки, так что усилия не стоили результата.

Casufi ()
Ответ на: комментарий от Casufi

Все вроде собралось, хоть и с некоторыми отклонениями.

Федора - очень удобная система для разработки именно потому, что позволяет кучу всего делать без виртуалок. В частности собрать пакет под центос можно с помощью mock.

Делается в два этапа. Сначала собираем правильный src.rpm

  • качаем src.rpm, распаковываем все в /home/$USER/rpmbuild как положено:
    $ cd
    $ wget ftp://ftp.muug.mb.ca/pub/centos/6.0/os/SRPMS/Packages/grub-0.97-68.el6.src.rpm
    $ rpm -ivh grub-0.97-68.el6.src.rpm
    
  • кладем патч в ~/rpmbuild/SOURCES/grub-lor.patch
  • правим ~/rpmbuild/SPECS/grub.spec соответственно
  • собираем новый src.rpm без установки каких-либо зависимостей командой
     $ rpmbuild --nodeps -bs ~/rpmbuild/SPECS/grub.spec

Теперь у нас есть патченный src.rpm: ~/rpmbuild/SRPMS/grub-0.97-69.fc16.lor.src.rpm и вторым шагом нужно из него получить бинарный пакет.

Если бы это был нормальный пакет команда нужна была бы ровно одна:

mock -r epel-6-x86_64  ~/rpmbuild/SRPMS/grub-0.97-69.fc16.lor.src.rpm

mock автоматически создает chroot и там устанавливает базовый центос с подключенными стандартными репозиториями. Потом сам скачивает зависимости пакета, выполняет всю сборку, складывает результат в кучку и чистит за собой весь мусор.

Но есть одно но: 64-битному грубу для сборки нужен пакет glibc-statis.i686, которого нет с репозиториях стандартной 64-битной системы. Поэтому автоматически mock его найти и установить не может, ему нужно помочь. Вместо одной команды в итоге получаем три:

$ mock -r epel-6-x86_64 --init
$ mock -r epel-6-x86_64 --install http://mirror.its.sfu.ca/mirror/CentOS/6/updates/i386/RPMS/glibc-static-2.12-1.7.el6_0.5.i686.rpm
$ mock -r epel-6-x86_64 --no-clean ~/rpmbuild/SRPMS/grub-0.97-69.fc16.lor.src.rpm

Готово.

То, что собралось у меня, выложено тут

alpha ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.