LINUX.ORG.RU

Создание символьнольной ссылки

 ,


0

1

Осваиваю линух устанавливая LFS по книге и на странице http://rus-linux.net/nlib.php?name=/MyLDP/BOOKS/LFS-BOOK-6.8-ru/lfs-6.8-ru-chapter05-05.html дано что:

Использование параметра --disable-shared означает, что файл libgcc_eh.a не будет создан и установлен. Пакет Glibc зависит от этой библиотеки, поскольку в процессе сборки этой библиотеки используется функция -lgcc_eh. Эту зависимость можно разрешить с помощью создания символической ссылки на файл libgcc.a, поскольку в этом файле, в конце концов, будут храниться объекты, которые обычно находятся в libgcc_eh.a:

 ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'`

Однако выполнение этой команды выдаёт

$ ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'`
ln: failed to create symbolic link `/mnt/lfs/tools/bin ../lib/gcc/i686-lfs-linux-gnu/4.5.2/libgcc_eh.a': Permission denied

Все прежние шаги описанные в книге были успешно пройдены. Чтение мануалов дало знания бесполезные (на мой взгляд) в данной ситуации. ЧЯДНТ?

Ответ на: комментарий от Kroz

Если бы всё было так просто на этом форуме было бы одним постом меньше.

# ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'`
bash:i686-lfs-linux-gnu-gcc: command not found
ln: accessing `libgcc.a': No such file or directory
uberalles
() автор топика
Ответ на: комментарий от Begemoth

Непривилигированный пользователь lfs

 
$ echo ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'`
ln -vs libcc.a /mnt/lfs/tools/bin/ ../lib/gcc/i686-lfs-linux-gnu/4.5.2/libgcc_eh.a
$ echo $PATH
/tools/bin:/bin:/usr/bin

Пользователь root

 
# echo ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | \
    sed 's/libgcc/&_eh/'`
bash: i686-lfs-linux-gnu-gcc: command not found
ln libcc.a
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Что всё это значит?

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

Если бы всё было так просто на этом форуме было бы одним постом меньше.

Одним постом было бы меньше, если бы ты читал сообщения об ошибках и вникал в их смысл.
«Permission denied» - нет прав. Если ты не наворотил какой-нибудь SELinux, то запуск команды под рутом решает эту проблемы.
«command not found» - команда не найдена.

Не находишь, что это уже новая проблема?

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Что всё это значит?

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

И в выводе PATH у рута что-то не замечается /tools/bin , в отличии от обычного пользователя. В этом, скорее всего, и проблема.

Чтобы подтвердить это дай вывод такого:

# Обычный пользователь:
$ echo "$LFS_TGT"
$ $LFS_TGT-gcc -print-libgcc-file-name
$ whereis `$LFS_TGT-gcc -print-libgcc-file-name  | sed 's/libgcc/&_eh/' `
$ sudo -
# Под рутом
$ ls -1 /tools/bin | grep gcc

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

Таки я с вами согласен. Прошу заметить что ещё в первом посте я прямо недвусмысленно указал на свой низкий уровень компетентности в линупсе. Я только начал его осваивать. Парадоксально, но после 2х лет стажа в Debian я ничего не освоил. Знатоки посоветовали LFS как максимально эффективный и педагогичный способ приобрести приятный, красноватый оттенок глаз. Итак:

Обычный пользователь:

$ echo "$LFS_TGT"
i686-lfs-linux-gnu
$LFS_TGT-gcc -print-libgcc-file-name
/mnt/lfs/tools/bin/ ../lib/gcc/i686-lfs-linux-gnu/4.5.2/libgcc.a
$ whereis `$LFS_TGT-gcc -print-libgcc-file-name  | sed 's/libgcc/&_eh/' `
libgcc_eh
$su
#ls -1 /tools/bin | grep gcc
i686-lfs-linux-gnu-gcc
i686-lfs-linux-gnu-gcc-4.5.2
i686-lfs-linux-gnu-gccbug

Будьте добры, поясните, что я сейчас сделал и что это значит?

uberalles
() автор топика

Осваиваю линух собирая LFS

АФФФТТАР ЖЖОТ ДОВАЙ ИСЧО.
А по делу: от какого пользователя делаешь? Да и измени права на rwx там для всех - 777.
Или... А ты не на FAT32 это делаешь?

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

Парадоксально, но после 2х лет стажа в Debian я ничего не освоил. Знатоки посоветовали LFS как максимально эффективный и педагогичный способ приобрести приятный, красноватый оттенок глаз.

Ну, это примерно как чтобы освоить таблицу умножения тебе посоветовали прочитать книгу по интерполяции нелинейных функций в гильбертовом пространстве. Или и вправду прокачаешься, или охоту отобьет навсегда.

Кроме того lfs - не рабочее окружение. То есть даже если ты его ты поставишь и настроишь до более-менее рабочего состояния, обновлять нормально все равно не сможешь (точнее это будет очень накладно). Смотри сам. Поддержу рекомендацию Gentoo: и прокачаешься (хотя чуть меньше, чем lfs), и чуть попроще, и многие живут на этом дистре. Я, например, лет 5 им пользуюсь, нарадоваться не могу.

Будьте добры, поясните, что я сейчас сделал и что это значит?

Никогда больше так не делай: не запускай строки, если хотя бы примерно не понимаешь что они делают. В наказание читать первые 20 постов здесь: http://linuxhacker.ru/~shaman/perl-one.html

Кроме того, если ты втупую выполняешь команды из мануала по lfs и не вникаешь в свои действия, ты ни чему не научишься.

Будьте добры, поясните, что я сейчас сделал и что это значит?

У тебя было

$ ln -vs libgcc.a `$LFS_TGT-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'`
В качестве последнего аргумента оно подставит результат выполнения команды в обратных кавычках. Вот мне и стало интересно что оно выдает. Часть команды в обратных кавычках - это содержимое переменной LFS_TGT. Соответственно, первая команда выводит значение этой переменной.

Далее мне было интересно что же выдает эта команда. sed немного редактирует вывод, поэтому я его убрал.

whereis, на самом деле здесь не нужен. Он выдает где на самом деле находится программа/внешняя команда, которую ты запускаешь. Она находится в одном из каталогов из переменной $PATH, но в каком? Короче, попробуй сделать что-то типа whereis bash , все поймешь.

Что такое ls, думаю, знаешь; grep фильтрует вывод, выдает только те строки, которые содержат строку 'gcc'. На самом деле это тоже не нужно, я про другое подумал.

Короче, файл, на который нужно делать ссылку, - ../lib/gcc/i686-lfs-linux-gnu/4.5.2/libgcc_eh.a То есть твоя команда:

$ ln -vs libgcc.a ../lib/gcc/i686-lfs-linux-gnu/4.5.2/libgcc_eh.a

Сама команда должна запускаться из определенного каталога (тебе лучше знать в каком). При этом файл libgcc.a должен существовать в этом каталоге - проверяй.

Еще раз рекомендую отказаться от lfs и попробовать Gentoo.
https://www.gentoo.org/doc/en/handbook/handbook-x86.xml?style=printable&f...
https://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?style=printable&f...

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от DeadEye

Да и измени права на rwx там для всех - 777.

Таки помогло, спасибо. А про FAT тоже смешно.

uberalles
() автор топика
Ответ на: комментарий от Kroz

Полностью согласен с вами насчёт Gentoo, я намере перейти на него после того как досыта наиграюсь с LFS. Спасибо вам за продуктивно потраченые усилия.

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

Прошу заметить что ещё в первом посте я прямо недвусмысленно указал на свой низкий уровень компетентности в линупсе. Я только начал его осваивать.

начни с визита к логопеду.

Пока тебе только телепаты и маги помогут.

Будьте добры, поясните, что я сейчас сделал и что это значит?

пытался понять, что у тебя с gcc. Ну система ответила.

Типа «Приборы?!» — «17!» — «что 17?» — «а что „приборы?“»

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

В чём хамство? В направлении в сторону логопеда? Вообще-то, это принятый на ЛОРе ответ на употребление слов «линупс», «линюх» и др., так что обижаться не на что.

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

HAM

В чём хамство?

навреное, он имел в виду «Home AMateur» бгг

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