FreeBSD ошибка при сборке ядра

В середине лета решил собрать «свое» ядро на одном из серверов под FreeBSD, к тому же очень удачно получалось, что сервер ставил на профилактику и вывел его из работы, т.е. на него пользователи не ходили. Сервер стоит в одном московском ЦОД, систему на сервер ставил не сам, но тех. администратор, который устанавливал операционную систему сделал все согласно моим пожеланиям. Но не суть, вывел из работы и, как говорится, понеслась…

О системе: FreeBSD myserver 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Thu Feb 17 02:41:51 UTC 2011 root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64

Скачал исходники из сети. Все штатно, ни каких проблем. Создал свой конфигурационный файл, запустил сборку ядра. Пошел, так сказать, курить. Через какое-то время прихожу, на экране ошибка. Начинаю ее разбирать и понимаю, что дело не в моем конфигурационном файле. Для очистки совести запускаю сборку уже со штатной конфигурацией:

/usr/src> time make -s buildkernel KERNCONF=GENERIC

И снова ошибка:

—————————————————————
>>> stage 2.3: build tools
—————————————————————
cc1: warnings being treated as errors
aicasm_gram.c:546: warning: redundant redeclaration of ‘malloc’
aicasm_gram.c:553: warning: redundant redeclaration of ‘free’
/usr/include/stdlib.h:93: warning: previous declaration of ‘free’ was here
aicasm_gram.c:1692: warning: redundant redeclaration of ‘yyparse’
/usr/src/sys/dev/aic7xxx/aicasm/aicasm_gram.y:111: warning: previous
declaration of ‘yyparse’ was here
aicasm_gram.c: In function ‘yyparse’:
aicasm_gram.c:3529: warning: implicit declaration of function ‘yyerror’
aicasm_gram.c:3529: warning: nested extern declaration of ‘yyerror’
/usr/src/sys/dev/aic7xxx/aicasm/aicasm_gram.y: At top level:
/usr/src/sys/dev/aic7xxx/aicasm/aicasm_gram.y:1940: warning: conflicting
types for ‘yyerror’
/usr/src/sys/dev/aic7xxx/aicasm/aicasm_gram.y:1940: error: static
declaration of ‘yyerror’ follows non-static declaration
aicasm_gram.c:3529: error: previous implicit declaration of ‘yyerror’ was
here
*** Error code 1
Stop in /usr/obj/usr/src/sys/GENERIC.
*** Error code 1
Stop in /usr/src.
*** Error code 1
Stop in /usr/src.

Ищу описание ошибки в интернет. Там ссылки на man и что драйвер проблемный. Ухмыляюсь, у меня в системе нет такого устройства, исключаю его из конфигурационного файла, запускаю сборку и … опять та же самая ошибка.

Интернет особо не помогал, т.к. все или большинство администраторов, которые сталкивались с этой проблемой просто переустанавливали систему. Учитывая, что у меня нет прямого доступа к серверу и, честно сказать, все переустанавливать было лениво, начал смотреть, что и как.

Обратил внимание, что при сборке ядра должен работать парсер «yacc». А ошибки на экране от другого парсера. Посмотрел где «лежит» парсер. Смотрю, что внутри файла /bin/yacc:

#! /bin/sh
exec ‘/bin/bison’ -y «$@»

И сразу все встало на свои места. Другой парсер заменил yacc на себя, а работать со сборкой ядра парсер bison не умеет. Может, конечно и умеет, но промучившись со штатной операцией сборки своего ядра несколько дней мне было не до настроек bison-а да и сроки запуска сервера в эксплуатацию уже все были просрочены. В результате скопировал парсер из /usr/bin в каталог /bin, запустил сборку своего конфигурационного файла, покурил и в итоге все собралось без ошибок.

Сейчас сервер успешно работает с пересобранным ядром.

Реклама

7 thoughts on “FreeBSD ошибка при сборке ядра

  1. Допишите пожалуйста в посте о том что если выполнялась сборка и она была неудачной, обязательно после исправления по Вашему рецепту, нужно удалить всё из: /usr/obj/usr/src/sys/ — иначе эффекта не будет.

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

    cd /usr/src/usr.bin/yacc && make obj && make depend && make && make install

    ну для верности придварительно потереть всё в обж

    но скорейвсего после упрёмся в другую ошибу — правлельно решение пересобрать и проинсталить мир.

      • так говорю если «забили», а потом «забили» на воспоминания о том что «забили», а вообще это модно у «новых администраторов» не собирать мир — вот одни из граблей которые они сеят.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s