355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Gerard Beekmans » Linux From Scratch » Текст книги (страница 4)
Linux From Scratch
  • Текст добавлен: 24 сентября 2016, 07:05

Текст книги "Linux From Scratch"


Автор книги: Gerard Beekmans


Жанр:

   

ОС и Сети


сообщить о нарушении

Текущая страница: 4 (всего у книги 18 страниц)

Создаем директорию $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:

ln -s libncurses.a /usr/lib/libcurses.a

Теперь можно продолжить инсталляцию Bash:

./configure –enable-static-link –prefix=$LFS/static –with-curses && make && make install

Если стадия make install выдает следующие сообщения об ошибках:

install-info: unknown option `–dir-file=/mnt/lfs/usr/info/dir' usage: install-info [–version] [–help] [–debug] [–maxwidth=nnn] [–section regexp title] [–infodir=xxx] [–align=nnn] [–calign=nnn] [–quiet] [–menuentry=xxx] [–info-dir=xxx] [–keep-old] [–description=xxx] [–test] [–remove] [–] filename make[1]: *** [install] Error 1 make[1]: Leaving directory `/mnt/lfs/usr/src/bash-2.05a/doc' make: [install] Error 2 (ignored)

это означает, что у вас Debian-2.2 (potato), в котором используется старая версия пакета texinfo. Данная ошибка не критична: страницы документации будут заново установлены в Главе 6, при перекомпиляции bash с динамическими ссылками. В текущем релизе Debian (3.0; известном под названием Woody) эта проблема отсутствует.

Пояснения команд

–enable-static-link: Эта опция configure указывает на использование статических ссылок.

–prefix=$LFS/static: Эта опция configure инсталлирует все файлы Bash в директорию $LFS/static, которая будет именоваться /static после того, как мы войдем в систему LFS с помощью команды chroot или перезагрузки.

–with-curses: Эта опция связывает bash с библиотекой curses вместо устаревающей библиотеки termcap.

Совершенно необязательно связывать статическую версию bash с libncurses (можно связать ее с termcap, т.к. в любом случае мы перекомпилируем Bash в Главе 6 с использованием libncurses), однако это хороший способ убедиться, что пакет Ncurses установлен корректно. В обратном случае, это повлечет за собой сбои при инсталляции пакета Texinfo, которому необходима библиотека ncurses, т.к. с termcap он ведет себя нестабильно.

Символы && в конце каждой строки указывают на то, что следующая команда должна быть выполнена лишь в том случае, если предыдущая команда возвратила значение 0 на выходе, т.е. успешно завершила операцию. В том случае если вы копируете и вставляете эти команды в оболочку, не забывайте убедиться, что если скрипт ./configure дал сбой, не выполняется команда make, а также, если команда make дала сбой, не выполняется команда make install, и т.д.

Содержание Bash

Последняя проверка: версия 2.05a.

Программы

bash, sh (ссылка на bash) и bashbug

Описания

bash

bash – Bourne-Again SHell, широко используемый в Unix системах командный интерпретатор. Bash считывает данные со стандартного ввода, с клавиатуры. Пользователь вводит что-либо, интерпретатор распознает введенное и выполняет это, например запускает программу.

bashbug

bashbug – скрипт, помогающий пользователю составлять и отправлять сообщения об ошибках bash в стандартном формате.

sh

sh – символическая ссылка на bash. Будучи вызванным как sh, bash имитирует запуск старых версий sh для лучшего соответствия стандартам POSIX.

Зависимости Bash

Последняя проверка: версия 2.05a.

Bash: bash, sh Binutils: ar, as, ld, ranlib, size Diffutils: cmp Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm Gcc: cc, cc1, collect2, cpp0, gcc Grep: egrep, grep Make: make Gawk: awk Sed: sed Sh-utils: basename, echo, expr, hostname, sleep, uname Texinfo: install-info Textutils: cat, tr, uniq

Установка Binutils-2.13

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

Установка Binutils

Этот пакет известен своим нестабильным поведением при компиляции с измененными опциями оптимизации (включая опции -march и -mcpu). Binutils рекомендуется компилировать с настройками по умолчанию. Следовательно, если вы задали переменные такие как CFLAGS или CXXFLAGS, изменяющие уровень оптимизации по умолчанию, рекомендуется убрать их при сборке пакета binutils. Изменяя оптимизации для binutils, вы действуете на свой страх и риск.

Для инсталляции Binutils выполните:

mkdir ../binutils-build && cd ../binutils-build && ../binutils-2.13/configure –prefix=$LFS/static –disable-nls && make LDFLAGS=-all-static && make install

Пояснения команд

mkdir ../binutils-build: В инструкциях установки Binutils рекомендуется создать отдельную директорию для сборки, вместо того, чтобы компилировать программу в директории исходников. Итак, мы создаем директорию binutils-build и будем работать из нее.

–disable-nls: Эта опция выключает поддержку интернационализации (или i18n), которая не нужна нам на стадии статически связанных программ, т.к. часто дает сбои при использовании статических ссылок.

LDFLAGS=-all-static: Присваиваем переменной LDFLAGS значение -all-static для того, чтобы использовать статические ссылки.

Содержимое Binutils

Последняя проверка: версия 2.12.1.

Программы

addr2line, ar, as, gasp, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings and strip

Описания

addr2line

addr2line переводит программные адреса в имена файлов и номера строк. Given an address and an executable, используется отладочная информация исполняемого файла, чтобы определить, какое имя файла и номер строки связаны с данным адресом.

ar

ar создает и изменяет архивы, а также производит их распаковку. Архив – файл, содержащий несколько файлов в виде, позволяющем восстановить оригинал.

as

as используется для ассемблирования вывода the GNU C Compiler, gcc для использования с линкером ld.

gasp

gasp – Assembler Macro Preprocessor.

gprof

gprof отображает статистику системных вызовов.

ld

ld объединяет несколько объектных и архивных файлов и устанавливает символьные отношения. Последний шаг в сборке скомпилированной программы – запуск ld.

nm

nm перечисляет символы из объектных файлов.

objcopy

objcopy utility копирует содержимое одного объектного файла в другой. objcopy использует библиотеку GNU BFD для чтения/записи объектных файлов. Возможна запись конечного объектного файла в формате, отличном от исходного.

objdump

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

ranlib

ranlib генерирует оглавление содержимого архива и сохраняет его в архиве. Список будет содержать все символы, определенные членами архива, that is a relocatable object file.

readelf

readelf выводит информацию об бинарных файлах типа elf.

size

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

strings

Для каждого заданного файла strings выводит последовательность отображаемых символов длиной минимум 4 знака (или указанной длины), завершающуюся непечатным символом. По умолчанию, выводятся лишь строки из инициализированных и загруженных частей объектных файлов. Для других типов файлов выводятся строки из всего файла.

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

strip

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

Библиотеки

libbfd.[a,so] и libopcodes.[a,so]

Описания

libbfd

libbfd – библиотека Binary File Descriptor.

libopcodes

libopcodes – библиотека для работы с опкодами, используется в сборке утилит вроде objdump. Опкоды – «читаемые» версии инструкций процессора.

Зависимости Binutils

Последняя проверка: версия 2.11.2.

Autoconf: autoconf, autoheader Automake: aclocal, automake Bash: sh Binutils: ar, as, ld, nm, ranlib, strip Diffutils: cmp Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, rmdir, touch Flex: flex Gcc: cc, cc1, collect2, cpp0, gcc Glibc: ldconfig Grep: egrep, fgrep, grep M4: m4 Make: make Gawk: gawk Sed: sed Sh-utils: basename, echo, expr, hostname, sleep, true, uname Texinfo: install-info, makeinfo Textutils: cat, sort, tr, uniq

Установка Bzip2-1.0.2

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

Установка Bzip2

Для инсталляции Bzip2 выполните:

make CC="gcc -static" && make PREFIX=$LFS/static install

Стоит заметить, что имеет смысл загрузить патч для программы Tar, который позволяет ей без труда запаковывать и распаковывать архивы с помощью bzip2/bunzip2. Однако этот патч не является частью базовой системы LFS. С обычной версией tar, для работы с bzip2/bunzip2 используются конструкции вида bzcat file.tar.bz | tar -xv или tar –use-compress-prog=bunzip2 -xvf file.tar.bz2. Вышеупомянутый патч предоставляет возможность использования опции -j, при помощи которой распаковать архив bzip2 командой tar -xvfj file.tar.bz2. Применение данного патча будет рассмотрено далее, при установке пакета Tar.

Пояснения команд

make CC="gcc -static": Таким образом мы сообщаем gcc, что компиляция bzip2 должна быть выполнена с использованием статических ссылок.

Содержимое Bzip2

Последняя проверка: версия 1.0.2

Программы

bunzip2 (ссылка на bzip2), bzcat (ссылка на bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless и bzmore

Описания

bunzip2

bunzip2 распаковывает файлы, сжатые bzip2.

bzcat

bzcat (или bzip2 -dc) распаковывает указанные файлы на стандартный вывод.

bzcmp, bzdiff

bzcmp и bzdiff позволяют использовать cmp и diff для файлов, сжатых bzip2.

bzegrep, bzfgrep, bzgrep

bzegrep, bzfgrep, и bzgrep позволяют использовать egrep, fgrep, or grep для файлов, сжатых bzip2.

bzip2

bzip2 сжимает файлы, используя Burrows-Wheeler block sorting алгоритм сжатия текста и код Huffman. Сжатие, обычно: значительно лучше, чем достигаемое традиционными архиваторами, основанными на LZ77/LZ78, и достигает производительности PPM семейства статистических архиваторов.

bzip2recover

bzip2recover восстанавливает данные из поврежденных файлов bzip2.

bzless

bzless – подобный less фильтр, позволяющий поэкранный просмотр сжатых или текстовых файлов.

bzmore

bzmore – подобный more фильтр, позволяющий поэкранный просмотр сжатых или текстовых файлов.

Библиотеки

libbz2.a, libbz2.so (ссылка на libbz2.so.1.0), libbz2.so.1.0 (ссылка на libbz2.so.1.0.2) и libbz2.so.1.0.2

libbz2

libbz2 – библиотека, реализующая сжатие данных без потерь, используя block-sorting алгоритм Burrows-Wheeler.

Зависимости Bzip2

Последняя проверка: версия 1.0.1.

Bash: sh Binutils: ar, as, ld, ranlib Fileutils: cp, ln, rm Gcc: cc1, collect2, cpp0, gcc Make: make

Установка Diffutils-2.8.1

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

Инсталляция Diffutils

Для инсталляции Diffutils выполните:

LDFLAGS=-static CPPFLAGS=-Dre_max_failures=re_max_failures2 ./configure –prefix=$LFS/static –disable-nls && make && make install

Пояснения команд

CPPFLAGS=-Dre_max_failures=re_max_failures2: Переменная CPPFLAGS считывается программой cpp (препроцессор Си). Значение этой переменной дает указание препроцессору заменить re_max_failures на re_max_failures2 во всех случаях перед тем, как передать файл исходного кода компилятору для компиляции. Известны случаи, когда этот пакет ведет себя некорректно при попытке использовать статические ссылки на системах со старой версией Glibc. Данная конструкция устраняет проблему.

Содержимое Diffutils

Последняя проверка: версия 2.8.1.

Программы

cmp, diff, diff3 и sdiff

Описания

cmp и diff

cmp и diff сравнивают пару файлов и сообщают об их различиях. Обе программы имеют дополнительные опции сравнения файлов в различных ситуациях.

diff3

Разница между diff и diff3 состоит в том, что diff сравнивает 2 files, а diff3 – 3.

sdiff

sdiff выполняет слияние 2 файлов и интерактивно выводит результаты.

Зависимости Diffutils

Последняя проверка: версия 2.7.

Bash: sh Binutils: ld, as Diffutils: cmp Fileutils: chmod, cp, install, mv, rm Gcc: cc1, collect2, cpp0, gcc Grep: egrep, grep Make: make Sed: sed Sh-utils: date, hostname Textutils: cat, tr

Установка Fileutils-4.1

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

Инсталляция Fileutils

Некоторые программы из статически слинкованного пакета Fileutils могут вызвать ошибку сегментации на системах, где используется Glibc-2.2.3. Чаще всего эта проблема встречается на системах с процессорами AMD, однако было зафиксировано несколько случаев на Intel-системах. Если ваша система попадает под данную категорию, примените патч.

В некоторых случаях после применения патча компиляция пакета будет невозможна, даже если у вас процессор AMD и библиотеки Glibc-2.2.3 (или новее). В таком случае удалите директорию fileutils-4.1 и заново распакуйте tar-архив. Предполагается, что это связано с тем, что ваш базовый дистрибутив каким-то образом изменил библиотеки Glibc-2.2.3, однако на данный момент подробности недоступны.

Для того чтобы данный пакет корректно компилировался на системах с процессорами AMD и библиотеками Glibc-2.2.3, выполните следующую команду. Не делайте этого, если у вас не установлена Glibc-2.2.3. Более чем вероятно, это вызовет различные сбои при компиляции.

patch -Np1 -i ../fileutils-4.1.patch

Для инсталляции Fileutils выполните:

LDFLAGS=-static ./configure –disable-nls –prefix=$LFS/static && make && make install

Теперь можно проверить, удалось ли избежать проблемы с ошибкой сегментации. Выполните $LFS/static/bin/ls. Если программа работает, все в порядке. Если нет, повторите инсталляцию с применением патча, если вы инсталлировали пакет без него, или без применения патча, если до этого вы инсталлировали пакет с его применением.

Пояснения команд

patch -Np1 -i ../fileutils-4.1.patch: Эта команда решает проблему компиляции fileutils с использованием статических ссылок на системах с библиотеками glibc 2.2.3. Если этого не сделать, то впоследствии вы вероятно столкнетесь с ошибками сегментации при выполнении программ из пакета fileutils, когда войдете в систему LFS с помощью chroot в Главе 6.

Содержимое Fileutils

Последняя проверка: версия 4.1.

Программы

chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, shred, sync, touch и vdir

Описания

chgrp

chgrp группу владельца указанных файлов, возможно указание как имени группы, так и ее номера.

chmod

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

chown

chown изменяет владельца и/или группу указанных файлов.

cp

cp копирует файлы.

dd

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

df

df показывает количество свободного места на файловых системах, содержащих указанные файлы. Если файлы не заданы, показывается свободное место на всех смонтированных файловых системах.

dir, ls and vdir

dir и vdir – версии ls с разными форматами вывода по умолчанию. Эти программы выводят список заданных файлов и каталогов. Содержимое каталога сортируется по алфавиту. ls, по умолчанию, перечисляет файлы в столбцах если стандартный вывод – терминал, иначе идет перечисление по одному в строке. dir, по умолчанию, перечисляет файлы в столбцах. vdir, по умолчанию перечисляет файлы в полном формате.

dircolors

dircolors выводит значение LS_COLOR. Переменная LS_COLOR используется для установки цветовой схемы, используемой ls и прочими утилитами.

du

du выводит количество дискового пространства, занятого указанными файлами и каталогами (включая подкаталоги).

install

install копирует файлы, устанавливает права доступа и, если возможно, владельца и группу.

ln

ln создает жесткие или мягкие (символические) ссылки на файлы.

mkdir

mkdir создает каталог с заданным именем.

mkfifo

mkfifo создает FIFO с заданным именем.

mknod

mknod создает FIFO, символьный или блочный файл с заданным именем.

mv

mv перемещает файлы из одного каталога в другой или переименовывает их, в зависимости от заданных параметров.

rm

rm удаляет файлы или каталоги.

rmdir

rmdir удаляет пустые каталоги.

shred

shred безопасно удаляет файл, перезаписывая занимаемые им блоки, так что содержимое невозможно восстановить.

sync

sync принудительно записывает изменившиеся блоки на диск и обновляет superblock.

touch

touch изменяет время доступа и изменения каждого заданного файла на текущее время. Если файл не существует, то создается пустой файл.

Зависимости Fileutils

Последняя проверка: версия 4.1.

Bash: sh Binutils: ar, as, ld, ranlib Diffutils: cmp Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir Gettext: msgfmt, xgettext Gcc: cc, cc1, collect2, cpp0, gcc Grep: egrep, fgrep, grep Make: make Perl: perl Sed: sed Sh-utils: basename, echo, expr, hostname, sleep, uname Texinfo: install-info Textutils: cat, tr


    Ваша оценка произведения:

Популярные книги за неделю