Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Прежде чем начать, убедитесь, что переменная LFS задана корректно. Для проверки выполните:

echo $LFS

Убедитесь, что вывод на экране соответствует точке монтирования раздела LFS (например /mnt/lfs).

Почему мы используем статические ссылки?

(Спасибо Plasmatic'у за разъяснение этого вопроса в одном из списков рассылки LFS.)

При компиляции программы, вместо того, чтобы при создании нового файла каждый раз переписывать все функции работы с ядром, аппаратными средствами, файлами, все базовые функции хранятся в библиотеках. glibc, которую мы установим позже,

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

Однако такие библиотеки могут оказаться довольно большими (например, libc.a обычно занимает 2.5 MB), и держать отдельную копию каждой библиотеки прикрепленной к программе не очень то и логично. Представьте себе простую команду вроде ls с лишними 2.5 MB, прикрепленными к ней! Вместо того, чтобы делать библиотеку частью программы, или связывать статической ссылкой, библиотеку можно хранить в отдельном файле, который будет подгружаться по мере необходимости. Это называется динамическими ссылками, т.к. библиотека загружается и выгружается динамически, по мере необходимости программы.

Итак, у нас есть файл размером 1 KB и файл размером 2.5 MB. Пока мы не сэкономили дискового пространства (разве что освободили оперативную память до того, как библиотека понадобится). Настоящая выгода от использования динамических ссылок состоит в том, что нам необходимо хранить лишь одну копию библиотеки. Если ls и rm используют одну и ту же библиотеку, то нам не нужно иметь две копии этой библиотеки. Обе команды могут пользоваться кодом из одного файла. Также и с оперативной памятью – две программы используют один код вместо того, чтобы загружать в память его дубликаты. Таким образом экономится не только место на диске, но и драгоценная оперативная память.

Если динамические ссылки позволяют сэкономить столько места, почему же мы везде используем статические ссылки? Потому что, когда вы входите в новую (и далекую от совершенства) систему LFS с помощью команды chroot, динамические библиотеки будут недоступны, т.к. они находятся в дереве старого дистрибутива (например в /usr/lib). Эти каталоги будут недоступны из корневой директории системы LFS ($LFS).

Для того чтобы скомпилированные программы работали в среде chroot, при компиляции убедитесь, что библиотеки связаны статическими ссылками, отсюда возникают опции –enable-static-link, –disable-shared, и – static в Главе 5. Первое, что описывает Глава 6, это компиляция основных библиотек системы, glibc. После этого, мы перекомпилируем все программы, собранные в Главе 5, но в этот раз с динамическими ссылками, чтобы воспользоваться всеми преимуществами экономии дискового пространства.

Именно поэтому мы и используем эти странные опции – static. Если скомпилировать пакеты без них, вы довольно быстро увидите, что случится, после того как вы войдете в парализованную систему LFS при помощи команды chroot.

Для получения более детальной информации по динамически связанным библиотекам, обратитесь к книгам и Linux-ориентированным сайтам по программированию.

Создаем директорию $LFS/static

Как уже говорилось во вступлении в данную главу, все, что будет инсталлировано в этой главе, попадет в директорию $LFS/static, чтобы не загрязнять раздел LFS кучей временных файлов. Нам необходимо лишь создать эту директорию:

mkdir $LFS/static

Для

удобства можно поместить загруженные пакеты в директорию $LFS/static, например сохранить их в подкаталоге $LFS/static/src.

Установка всех компонентов в режиме непривилегированного пользователя

Если при выполнении шагов, описанных в Главе 5, вы будете зарегистрированы в системе как root, есть вероятность, что некоторые файлы системы будут заменены файлами, которые будут скомпилированы в Главе 5. На это есть ряд причин, неопределенная переменная $LFS – одна из них. Замена файлов на вашей системе скорее всего приведет к возникновению всякого рода проблем, поэтому рекомендуется выполнять шаги Главы 5 от имени непривилегированного пользователя. Для чистоты эксперимента создадим новую учетную запись «lfs», которую будем использовать на стадии компиляции со статическими ссылками. Для добавления новой учетной записи, выполните следующие команды в режиме пользователя root:

useradd -s /bin/bash -m lfs && passwd lfs

Теперь скорректируем права на директорию $LFS/static, чтобы пользователь «lfs» имел к ней доступ на запись:

chown -R lfs $LFS/static

Теперь войдите в систему под учетной записью «lfs». Это можно сделать двумя способами: через новую виртуальную консоль или оконный менеджер, или командой su – lfs. После этого выполните следующие команды от имени пользователя «lfs» для создания благоприятной среды:

cat > ~/.bash_profile << «EOF» umask 022 LFS=/mnt/lfs LC_ALL=POSIX CC='gcc -s' export LFS LC_ALL CC EOF source ~/.bash_profile

Этот профиль устанавливает umask равным 022, чтобы созданные файлы и директории автоматически получали правильные права. Настоятельно рекомендуется использование этой установки на протяжении всей инсталляции LFS. Также были заданы переменные $LFS, $LC_ALL, и $CC. Про переменную $LFS мы уже не раз говорили. Переменная $LC_ALL используется для интернационализации.

Если на вашем базовом дистрибутиве установлена библиотека glibc версии 2.2.4 и ранее, и на протяжении Главы 5 переменная $LC_ALL определена не как "C" или «POSIX», могут возникнуть проблемы при выходе повторном входе в среду chroot в Главе 6. Для того чтобы быть уверенным в том, что в среде chroot все будет работать корректно, присвойте этой переменной значение «POSIX» ("C" is an alias for «POSIX»).

Использование переменной $CC вызвано необходимостью предотвратить компиляцию отладочных символов в статические пакеты. Таким образом экономится дисковое пространство и существенно сокращается время компиляции.

Установка Bash-2.05a

Приблизительное время компиляции: 1 SBU Необходимое дисковое пространство: 24 MB

Установка Bash

Перед тем как установить Bash, убедитесь, что в вашем базовом дистрибутиве есть файлы /usr/lib/libcurses.a и usr/lib/libncurses.a. Если ваш дистрибутив – LFS system, оба файла должны быть на месте при условии, что вы в точности следовали инструкциям книги.

Если этих файлов нет, следует установить пакет разработки Ncurses, его иногда называют ncurses-dev. Если этот пакет уже установлен, или вы только что его установили, проверьте наличие этих двух файлов еще раз. Зачастую файл libcurses.a отсутствует. В таком случае, создайте символическую ссылку libcurses.a, выполнив следующую команду в режиме пользователя root:

Поделиться:
Популярные книги

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Дурная жена неверного дракона

Ганова Алиса
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дурная жена неверного дракона

Вонгозеро

Вагнер Яна
1. Вонгозеро
Детективы:
триллеры
9.19
рейтинг книги
Вонгозеро

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма

Папина дочка

Рам Янка
4. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Папина дочка

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Как я строил магическую империю 7

Зубов Константин
7. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 7

Лучший из худший 3

Дашко Дмитрий
3. Лучший из худших
Фантастика:
городское фэнтези
попаданцы
аниме
6.00
рейтинг книги
Лучший из худший 3

Штурмовик из будущего 3

Политов Дмитрий Валерьевич
3. Небо в огне
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Штурмовик из будущего 3

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье