Проблема сборки пакета app-shells/tcsh-6.17-r1 и ее решение. Проверка?! Критика?! Рекомендации?!
Добрый день коллеги!
Столкнулся с проблемой сборки пакета '=app-shells/tcsh-6.17-r1'. Если коротко, то ошибка сборки выглядит следующим образом:
[...skipped...] x86_64-pc-linux-gnu-gcc -o tcsh -Wl,-O1 -Wl,--as-needed -O2 -pipe -march=native -D_PATH_DOTCSHRC='"/etc/csh.cshrc"' -D_PATH_DOTLOGIN='"/etc/csh.login"' -D_PATH_DOTLOGOUT='"/etc/csh.logout"' -D_PATH_USRBIN='"/usr/bin"' -D_PATH_BIN='"/bin"' -I. -I. sh.o sh.dir.o sh.dol.o sh.err.o sh.exec.o sh.char.o sh.exp.o sh.file.o sh.func.o sh.glob.o sh.hist.o sh.init.o sh.lex.o sh.misc.o sh.parse.o sh.print.o sh.proc.o sh.sem.o sh.set.o sh.time.o glob.o mi.termios.o ma.setp.o vms.termcap.o tw.help.o tw.init.o tw.parse.o tw.spell.o tw.comp.o tw.color.o ed.chared.o ed.refresh.o ed.screen.o ed.init.o ed.inputl.o ed.defns.o ed.xmap.o ed.term.o tc.alloc.o tc.bind.o tc.const.o tc.defs.o tc.disc.o tc.func.o tc.nls.o tc.os.o tc.printf.o tc.prompt.o tc.sched.o tc.sig.o tc.str.o tc.vers.o tc.who.o -lcrypt ed.screen.o: In function `StopHighlight': ed.screen.c:(.text+0x5c6): undefined reference to `tputs' ed.screen.o: In function `StartHighlight': ed.screen.c:(.text+0x5f6): undefined reference to `tputs' ed.screen.o: In function `SetAttributes': ed.screen.c:(.text+0x678): undefined reference to `tputs' ed.screen.c:(.text+0x774): undefined reference to `tputs' ed.screen.c:(.text+0x7ac): undefined reference to `tputs' ed.screen.o:ed.screen.c:(.text+0x80d): more undefined references to `tputs' follow [...skipped...]
Как видно отсутствует в системе какая-то бибилиотека, с которой бы tcsh успешно слинковался.
Поиск такой бибилиотеки привел к ncurses, которая у меня собрана:
[I] sys-libs/ncurses Available versions: (5) 5.7-r7 5.9 ~5.9-r1 5.9-r2 {{ada +cxx debug doc gpm minimal profile static-libs tinfo trace unicode}} Installed versions: 5.9-r2(5)(17:21:02 16.04.2013)(cxx gpm tinfo unicode -ada -debug -doc -minimal -profile -static-libs -trace)
с флагом tinfo. Этот флаг нужен для nvidia-cuda-toolkit[debugger]
Флаг tinfo здесь ключевая штука. Наличие этого флага дополнительно создает библиотеку libtinfo.so в составе ncurses, в которой, собственно, и расположены те неразрешенные ссылки, на которые ругается tcsh. Убрать tinfo я не могу, ибо мне нужен nvidia-cuda-toolkit[debugger].
Исследование невозможности tcsh линковаться с libtinfo привели к файлу /usr/posrtage/app-shells/tcsh/files/tcsh-6.14-use-ncurses.patch, содержимое которого элементарно:
--- configure.in +++ configure.in @@ -257,7 +257,7 @@ dnl Checks for libraries AC_SEARCH_LIBS(crypt, crypt) AC_SEARCH_LIBS(getspnam, sec) -AC_SEARCH_LIBS(tgetent, termlib termcap curses ncurses) +AC_SEARCH_LIBS(tgetent, ncurses) AC_SEARCH_LIBS(gethostbyname, nsl) AC_SEARCH_LIBS(connect, socket) AC_SEARCH_LIBS([iconv], [iconv], [AC_DEFINE([HAVE_ICONV], [1],
Как мы видим, вследствие жизни ncurses какие-то вещи, связанные с ней, стали неактуальные и разрабы ebuild'а для tcsh тупо их убрали.
Но оказывается, если ncurses собрано c флагом tinfo, одной ncurses недостаточно, нужна еще и tinfo в кандидатах на внешние функции.
Итак сухой остаток решения проблемы состоит из двух шагов:
1. Исправляем /usr/posrtage/app-shells/tcsh/files/tcsh-6.14-use-ncurses.patch
+AC_SEARCH_LIBS(tgetent, ncurses tinfo)
2. Исправляем manifest
ebuild /usr/portage/app-shells/tcsh/tcsh-6.17-r1.ebuild manifest
Далее можем спокойно сделать emerge tcsh
Я уже давний пользователь gentoo, но именно пользователь! Как-то не приходилось заниматься исправлением portage'а. Хватало того, что делали другие люди.
Вопросы к общественности:
1. Является ли то, что я сделал действительно исправлением бага или это просто удачное решение проблемы?
2. Тянет ли весь этот пост на оформление баг-репорта?
3. Я никогда не делал баг-репорты и честно говорят не очень хочется тратить время на его правильное оформление. Может быть кто-то (у кого рука набита) сможет это дело туда запостить.
Буду благодарен за критику и комментарии.
p.s. Пост отнес к общим вопросам, ибо мои вопросы в конце - общие.
- Для комментирования войдите или зарегистрируйтесь
Мое мнение
В общем случае - нет.
Да. Думаю, оформить баг необходимо.
Лично мне лень воспроизводить этот баг у себя, только для того, чтобы оформить багрепорт. Кое-кому, может, будет не лень. В любом случае рекомендую освоить-таки багзиллу. Это несложно.
Всегда пожалуйста.
Раскритиковать это мы завсегда за :)
Есть мнение, что _ручками_ править файлы вне домашнего каталога (root'у --- +конфиги, т.е. /etc/, но не подряд) --- порочный подход.
В качестве workaround: user_patch (см. http://megabaks.blogspot.co.uk/2012/10/portage.html)
В таком случае второй шаг оказывается лишним.
Ну и, как было справедливо отмечено, в обязательном порядке в родную багзиллу.
:wq
--
Live free or die
Баг на данную
Баг на данную проблему(исправлено в tcsh-6.18.01-r1): https://bugs.gentoo.org/show_bug.cgi?id=459484
Нейтральность - высшее достижение сознания!
2Anarchist: спасибо за
2Anarchist: спасибо за информацию! пригодится!
2Pinkbyte: Блин, искал же на багзиле. Все-таки не врубаюсь как там правильно поиском пользоваться.
Думаю тема исчерпана
Дописывать ALL перед запросом
Дописывать ALL перед запросом
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Спасибо! В хелпе там все
Спасибо!
В хелпе там все разжевано, надо было сразу прочитать.