[SOLVED] Восстановление gcc
vanger 24 января, 2015 - 12:55
Здравствуйте!
Настраивая систему кросскомпиляции случайно удалил gcc основной системы. А именно, выполнил
crossdev --clean x86_64-pc-linux-gnu
Как исправить содеянное?
Видимо, надо скачать бинарный gcc под мою архитектуру, как-нибудь сказать gcc-config, чтоб использовал его, и, с его помощью, собрать gcc с помощью emerge.
Но пока не ясен текущий статус gcc. Что-то же от него в системе осталось, т.к. он не был удалён канонически -- с помощью emerge. gcc-config, например, про него помнит:
vanger@localhost /home/vanger % gcc-config -l
* gcc-config: No gcc profile is active!
/usr/bin/gcc-config: line 72: /etc/env.d/gcc/config-x86_64-pc-linux-gnu: No such file or directory
[1] x86_64-pc-linux-gnu-4.8.3
»
- Для комментирования войдите или зарегистрируйтесь
Ну почему Gentoo Community не
Ну почему Gentoo Community не добавит
FEATURES="buildsyspkg"
по умолчанию...зы Попросить у кого-нибудь, или найти в инете, готовый gcc-4.8.3.tbz2 под вашу архитектуру (после - переемерджить). Я могу дать, но у меня hardened и я не уверен, что оно подойдёт для вас (если, конечно, у вас не аналогичнй профиль).
Я скачал
Я скачал tinderbox.dev.gentoo.org/default-linux/amd64/sys-devel/gcc-4.8.3.tbz2 и выполнил
tar -xjpf gcc-4.8.3.tbz2 -C /
gcc-config почему-то говорит, что
root@localhost /home/vanger/downloads % gcc-config -l
* gcc-config: Could not get portage CHOST!
* gcc-config: You should verify that CHOST is set in one of these places:
* gcc-config: - //etc/portage/make.conf
* gcc-config: - active environment
хотя CHOST прописан:
root@localhost /home/vanger % cat /etc/portage/make.conf
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j9"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="x86_64-pc-linux-gnu"
# These are the USE flags that were used in addition to what is provided by the
# profile used for building.
# default:
USE="bindist mmx sse sse2 sse3 ssse3 sse4 sse4a sse4_1 \
unicode nls \
bash-completion zsh-completion \
dbus consolekit policykit udev udisks X \
cmake mercurial valgrind"
LINGUAS="en ru"
VIDEO_CARDS="intel nvidia"
#VIDEO_CARDS="intel"
#VIDEO_CARDS="nvidia"
#VIDEO_CARDS="nouveau"
INPUT_DEVICES="evdev synaptics"
PORTDIR="/usr/portage"
#PORTDIR_OVERLAY="/usr/local/overlays/crossdev"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
#source /var/lib/layman/make.conf
#PORTDIR_OVERLAY="/usr/local/portage-crossdev ${PORTDIR_OVERLAY} /usr/local/portage"
#PORTDIR_OVERLAY="/usr/local/portage-crossdev /usr/local/portage"
GENTOO_MIRRORS="http://mirror.yandex.ru/gentoo-distfiles/"
SYNC="rsync://rsync.ru.gentoo.org/gentoo-portage"
Да, и почему-то env-update не работает:
root@localhost /home/vanger/downloads % env-update
zsh: command not found: env-update
Странно, localhost # portageq
Странно,
утилита портежевская. Если она не работает, то не сломан ли у вас ещё и портеж?
ps И зачем было работать под рутом...
Даже не знаю. Распаковывание
Даже не знаю. Распаковывание tar не могло повлиять? Других причин не вижу.
Под рутом: а разве
-crossdev --target
и т.п. рута не требует?vanger написал(а): Даже не
Проверьте наличие env-update в /var/db/pkg/sys-apps/portage-2.2.14/CONTENTS
Я имел в виду весь кросс-тулчейн создавать под пользователем (отдельно от системного).
sspphheerraa
root@localhost /home/vanger % grep env-update /var/db/pkg/sys-apps/portage-2.2.14/CONTENTS
obj /usr/share/man/ru/man1/env-update.1.bz2 8cdd4c9e41fa2ddd5e1e7507550d4fd5 1417937979
obj /usr/share/man/man1/env-update.1.bz2 3233912d05fb365798daed6935efa151 1417937979
sym /usr/sbin/env-update -> ../lib/python-exec/python-exec2 1417937984
obj /usr/lib/python-exec/python3.3/env-update 3ab9024432526f5f9ddb3b62641d00e8 1417937979
obj /usr/lib/python-exec/python2.7/env-update 6e8d1af2380e7c9f869689c34b9f0b42 1417937979
При этом '/usr/lib64/python-exec/python3.3/env-update' есть, а '/usr/lib/python-exec/python3.3/env-update' нет.
А чё, так можно было? :facepalm: Я создавал оный не особо разобравшись...
vanger написал(а): При этом
Ну вот, хотя согласно данным портежа, он должен быть. Попробуйте сделать симлинк.
А почему нет? :)
sspphheerraa написал(а): Ну
Смущает, что это как-то костыльно -- непонятно что вызвало эту поломку. Скорее всего, crossdev, но что именно он делал при 'crossdev --clean' системного тулчейна непоянтно. Кстати, это нормально, что в '/usr/lib' только 'gcc'?
vanger@localhost /home/vanger % ls /usr/lib
gcc
Чувствую, после этой темы будет создана другая :)
/
Нет.
Ибо здесь вам не тут.
:wq
--
Live free or die
А есть идеи, от чего этот
А есть идеи, от чего этот симлинк мог попортиться? И, кстати, как правильно откатить раскаковывание тара с gcc?
Вот как вариант:Раз система
Вот как вариант:
Раз система сама по себе рабочая - делаем в ней каталог и распаковываем в него stage3. Чрутимся туда, копируем /etc/make.conf,profile и т.п. из основной системы, emerge --sync, и собираем текущий gcc из портежа в bin пакет. Потом его устанавливаем в основной системе.
PS. Скажу честно, на заре своей гентушности (эдак годов 10-12 назад) сотворил нечто подобное. Тогда тупо распаковал stage3 прямо в корень. Как ни странно - особых проблем не поимел (кроме времени на emerge -e system/world). Однако подвиг повторять не рекомендую. Предложенное выше много безопасней.
Да пребудет с тобой великий Linux.
.
Мой опыт указывает на практическую недостаточность данной фичи.
Ибо зависимости.
Тебе к сведению, ТС к исполнению — изящный подход к решению описанной проблемы:
http://www.gentoo.ru/content/ya-udalilslomal-sistemnyy-paket-i-teper-gentoo-ne-gruzitsya-neuzheli-pereustanavlivatsya
:wq
--
Live free or die
Спасибо, звучит интересно. А
Спасибо, звучит интересно. А можете поставить диагноз, что именно сломалось и вообще произошло после выполнения
crossdev --clean x86_64-pc-linux-gnu
?
Да, и, видимо, надо откатить результат распаковывания тара с бинарным gcc, да?
А ну-ка что есть, к примеру,
А ну-ка что есть, к примеру, в /usr, /usr/bin, /usr/lbi64? Вообще кроссдев при очистке кросс-тулчейна грохает всю его директорию "корневую". В ней он создает иерархию каталогов, аналогичную корню. Так вот, есть мнение, что при очистке твоего родного тулчейна кроссдев проехался по твоей же корневой ФС. О чем ненавязчиво говорит пустота в /usr/lib.
Пользуясь моментом, хочу передать привет друзьям, которые также пользуются "Моментом"
vanger@localhost /home/vanger
vanger@localhost /home/vanger % ls -a /usr
. bin games lib lib64 local sbin src x86_64-pc-linux-gnu
.. fakelib include lib32 libexec portage share tmp
В '/usr/bin' и в '/usr/lib64' полно всего.
я бы начал
я бы начал с
У меня проблемы с тем, что
У меня проблемы с тем, что 'crossdev --clean' потёр часть скриптов и попортил симлинки. Что выливается, в частности, в
root@localhost / % emerge
zsh: correct 'emerge' to 'merge' [nyae]? n
zsh: command not found: emerge
Если явно указать, откуда запускать 'emerge', то после скачивания вышеописанная проблема снова даёт о себе знать
root@localhost / % PORTAGE_BINHOST=http://tinderbox.dev.gentoo.org/default/linux/amd64/ /usr/lib64/python-exec/python3.3/emerge -av1tG sys-devel/gcc
...
[sys-devel/gcc-4.8.3] bash: /usr/lib/portage/python3.3/ebuild.sh: No such file or directory
Попробуйте так, развернуть
Попробуйте так, развернуть stage3 в отдельную папку(замонтировать необходимое) chroot туда и из этого окружения делать emerge в основную систему(опции --root= --root-deps= и возможно --config-root=)
Так и сделал. chroot'нулся по
Так и сделал. chroot'нулся по инструкции: http://wiki.gentoo.org/wiki/Chroot#Configuration, примонтировал хостовую систему и установил в неё gcc:
mount dev/sda9 mnt/broken
ROOT="/mnt/broken" emerge -1 -a sys-devel/gcc
Оно поставилось, поворчав про "Package 'sys-devel/gcc-4.8.3' merged despite file collisions." Теперь, если верить eix, gcc у меня установлен (eix, кажется, кстати, не запускался раньше, сетуя на отсутсвие чего-то). Правда, скомпилировать что-либо я не могу:
vanger@localhost /home/vanger/tmp % g++ h.cpp -o h
g++: error trying to exec 'as': execvp: No such file or directory
emerge система по-прежнему не видит:
vanger@localhost /home/vanger/tmp % emerge
zsh: command not found: emerge
Как и прочие скрипты. В какую сторону копать здесь? Не вручную ж симлинк прописывать?
Кстати, KDE'шная battery monitor не работает, как и сразу после случайного удаления gcc.
лучше весь system, а не
лучше весь system, а не только gcc
Для начала - sys-apps/portage
Для начала -
sys-apps/portage
portage установил. Ничего не
portage установил. Ничего не изменилось. При попытке установки всего system:
ROOT="/mnt/broken" emerge -1 -a @system
получаю
>>> Failed to emerge sys-apps/baselayout-2.2 for /mnt/broken/, Log file:
>>> '/var/tmp/portage/sys-apps/baselayout-2.2/temp/build.log'
* Messages for package sys-apps/baselayout-2.2 merged to /mnt/broken/:
* Your system profile has SYMLINK_LIB=yes, so that means you need to
* have these paths configured as follows:
* symlinks to 'lib64': /mnt/broken/usr/lib
* The ebuild will attempt to fix these, but only for trivial conversions.
* If things fail, you will need to manually create/move the directories.
* Converting /mnt/broken/usr/lib from a dir to a symlink
* ERROR: sys-apps/baselayout-2.2::gentoo failed (setup phase):
* non-empty dir found where we needed a symlink: /mnt/broken/usr/lib
*
* Call stack:
* ebuild.sh, line 93: Called pkg_setup
* baselayout-2.2.ebuild, line 18: Called multilib_layout
* baselayout-2.2.ebuild, line 78: Called die
* The specific snippet of code:
* die "non-empty dir found where we needed a symlink: ${prefix}lib"
*
* If you need support, post the output of `emerge --info '=sys-apps/baselayout-2.2::gentoo'`,
* the complete build log and the output of `emerge -pqv '=sys-apps/baselayout-2.2::gentoo'`.
* The complete build log is located at '/var/tmp/portage/sys-apps/baselayout-2.2/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/sys-apps/baselayout-2.2/temp/die.env'.
* Working directory: '/usr/lib64/portage/pym'
* S: '/var/tmp/portage/sys-apps/baselayout-2.2/work/baselayout-2.2'
Всё-таки руками что-то придётся править?
/
Думаю, стоит начать с того, что внимательно прочитать (в том числе обсуждение) по приведённой мной ссылке.
Как минимум: конфиги (включая разные флаги) по-хорошему брать надо из восстанавливаемой системы.
:wq
--
Live free or die
Спасибо. Я явно заменял
Спасибо. Я явно заменял make.conf, думал этого достаточно. Но хорошо, PORTAGE_CONFIGROOT не помешает.
Из ещё одного чтения той темы сделал вывод, что хорошо бы установить portage в хостовую систему с флагом '--emptytree'. Что я и сделал. Это определённо улучшило дела: emerge, env-update и т.п. в основной системе заработали. gcc, правда, по-прежнему не может что-либо скомпилировать. Установка его с '-e' из stage3 ситуации не изменило.
Пытаясь сделать установить весь @system с '-e' наткнулся на явно простое препятствие, но мною не вполне понятое. А именно use-флаги:
(chroot) localhost / # ROOT="/mnt/broken" PORTAGE_CONFIGROOT="/mnt/broken" USE="qt3support $USE" emerge -1ae --pretend @system
These are the packages that would be merged, in order:
Calculating dependencies... done!
emerge: there are no ebuilds built with USE flags to satisfy ">=dev-qt/qtsql-4.8.5:4[qt3support]".
!!! One of the following packages is required to complete your request:
- dev-qt/qtsql-4.8.5::gentoo (Change USE: +qt3support)
(dependency required by "sys-auth/polkit-kde-agent-0.99.0-r1" [ebuild])
(dependency required by "sys-auth/polkit-0.112-r2[kde]" [ebuild])
(dependency required by "sys-auth/consolekit-0.4.6" [ebuild])
...
Во-первых, почему вообще emerge требует явно указанного 'qt3support', если в основной системе я ни в 'make.conf', ни в 'portage.use' такого никогда не писал?
А во-вторых, почему что
USE="qt3support $USE" ROOT="/mnt/broken" PORTAGE_CONFIGROOT="/mnt/broken" emerge -1ae --pretend @system
что прописывание в хостовом portage.use '>=dev-qt/qtsql-4.8.5 qt3support' не приводит к решению проблемы?
Вот, например:
(chroot) localhost / # USE="qt3support ssl $USE" ROOT="/mnt/broken" PORTAGE_CONFIGROOT="/mnt/broken" emerge -1ae --pretend @system
These are the packages that would be merged, in order:
Calculating dependencies... done!
emerge: there are no ebuilds built with USE flags to satisfy ">=dev-qt/qtsql-4.8.5:4[qt3support]".
!!! One of the following packages is required to complete your request:
- dev-qt/qtsql-4.8.5::gentoo (Change USE: +qt3support)
...
Обновил sys-devel/binutils и
Обновил sys-devel/binutils и теперь gcc компилит. Даже успешно выполнил emerge consolekit в основной системе. Последний не работал как надо после поломки. Теперь OK.
Так что на первый всзляд, практически всё хорошо. Из бросающегося в глаза -- только то, что KDE'шный Battery Monitor не работает. Кстати, если разлогиниться и залогиниться снова, выдаётся Warning: "KDE Power Management System could not be initialized. The backend reported the following error: No valid Power Management backend plugins are..." (всё не влазит). Т.е. что-то в системе по-прежнему не так. Так что кажется разумным взять всё и пересобрать.
Безопасно ли работать с emerge в основной системе, в которой что-то по-прежнему не так?
И имеет ли смысл, если уж переустанавливать, так с флагом --emptytree, или это уже слишком?
Если emerge работает и
Если emerge работает и собирает system без ошибок, то им можно пользоваться. Сборка world с --emptytree гарантирует, что все файлы всех пакетов будут правильными, хотя может быть некоторое кол-во левых файлов. Так, если что хотите быть уверенным в целостности, то без --emptytree не обойтись
Вот со сборкой system
Вот со сборкой system проблемы. Снова с симлинками:
* Your system profile has SYMLINK_LIB=yes, so that means you need to
* have these paths configured as follows:
* symlinks to 'lib64': /usr/lib
* The ebuild will attempt to fix these, but only for trivial conversions.
* If things fail, you will need to manually create/move the directories.
* Converting /usr/lib from a dir to a symlink
* ERROR: sys-apps/baselayout-2.2::gentoo failed (setup phase):
* non-empty dir found where we needed a symlink: /usr/lib
*
* Call stack:
* ebuild.sh, line 93: Called pkg_setup
* baselayout-2.2.ebuild, line 18: Called multilib_layout
* baselayout-2.2.ebuild, line 78: Called die
* The specific snippet of code:
* die "non-empty dir found where we needed a symlink: ${prefix}lib"
*
* If you need support, post the output of `emerge --info '=sys-apps/baselayout-2.2::gentoo'`,
* the complete build log and the output of `emerge -pqv '=sys-apps/baselayout-2.2::gentoo'`.
* The complete build log is located at '/var/tmp/portage/sys-apps/baselayout-2.2/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/sys-apps/baselayout-2.2/temp/die.env'.
* Working directory: '/var/tmp/portage/._portage_reinstall_._kg1s4/pym'
* S: '/var/tmp/portage/sys-apps/baselayout-2.2/work/baselayout-2.2'
Так что хорошо бы, видимо, установить system из chroot'нутой системы. А там непонятность с use-флагами.
создай симлинк руками:# cd
создай симлинк руками:
Спасибо! Это позволило
Спасибо! Это позволило пересобрать @system! Действительно, lib у меня был именно директорией, а не симлинком, и пакеты, такие как gcc и python-exec, лежали там.
Правильно ли я понимаю, что после успешного выполнения
emerge -auvDNe @system
жизнеспособность всех системных пакетов (с системы вообще) возвращена к исходному состоянию?
Как вариант: Уж легче все
Как вариант:
Уж легче все собрать из стейджа 1 - http://www.gentoofan.org/gentoo/stage1
а потом туда перекинуть старые пакеты. Все собирается(проверено и ни раз!) и вразы быстрее чем третий. При должном понимании и шустрой машинке - делов часа на 2.
知る者は言わず言う者は知らず
"Бабло, побеждает даже зло"
По пониманию у меня,
По пониманию у меня, определённо, просадка. Можно ли поподробней? Из любопытства -- вроде, починилось.
Спасибо огромное всем
Спасибо огромное всем участникам темы за помощь!