Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Beyond Linux From Scratch. Version 2011-12-30
Назад 2. Важная информация Вперед

Замечания, касающиеся сборки программ

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

В каждом наборе инструкций, описывающих установку, имеется URL, по которому вы можете скачать пакет. Впрочем, мы сохранили возможность выбора патчей, которые доступны через HTTP. Эти ссылки потребуются в инструкциях по установке.

Хотя вы можете хранить файлы с исходным кодом где угодно, мы предполагаем, что вы должны распаковывать пакет и хранить его в каталоге, созданном в процессе распаковки (каталог 'build'). Мы также предполагаем, что вы должны распаковать все требуемые патчи и хранить их в каталоге, на уровень выше каталога 'build'.

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

Сборка программ в роли непривилегированного пользователя (не root)

Золотое правило системного администрирования в Unix — пользоваться ролью суперпользователя только в случае, когда это действительно необходимо. Поэтому в BLFS рекомендуется собирать программы в роли непривилегированного пользователя и использовать роль root только при установке программы. Это правило используется во всех пакетах в данной книги. Если не указано иное, все инструкции следует выполнять в роли непривилегированного пользователя. В книге будет указано, для каких инструкций вам потребуются привилегии root.

Распаковка программного обеспечения

Если файл имеет формат .tar и он сжат, то его можно распаковать одной из следующих команд:

tar -xvf filename.tar.gz
tar -xvf filename.tgz
tar -xvf filename.tar.Z
tar -xvf filename.tar.bz2

Замечание

В командах, приведенных выше, и тех, что будут указаны далее, вы можете не пользоваться параметром v, если вы не хотите выдавать список всех файлов по мере того, как они будут распаковываться из архива. Это, возможно, ускорит распаковку, а также облегчит просмотр ошибок, возникающих при распаковке.

Вы также можете воспользоваться несколько иным способом:

bzcat filename.tar.bz2 | tar -xv

Наконец, вам иногда потребуется распаковывать патчи, в которых, как правило, формат .tar не используется. Лучший способ это сделать - скопировать файл патча в каталог, в котором находится каталог 'build', а затем в зависимости от того, является ли это файл файлом .gz или .bz2, выполнить одну из следующих команд:

gunzip -v patchname.gz
bunzip2 -v patchname.bz2

Проверка целостности файлов с помощью контрольной суммы md5sum

Как правило, чтобы убедиться, что загруженный файл является подлинным и скачан полностью, многие, кто осуществляет сопровождение пакетов, также предоставляют для файлов контрольные суммы md5sums. Чтобы проверить контрольную сумму md5sums загруженных файлов, поместите в один и тот же каталог файл и соответствующий ему файл с контрольной суммой md5sums (взятые в сети желательно из разных мест), и, при условии, что файл file.md5sum является контрольной суммой md5sum загруженного файла, выполните следующую команду:

md5sum -c file.md5sum

Если есть ошибки, то о них будет выданы сообщения. Обратите внимание, что в книге BLFS для всех файлов исходных кодов также указаны контрольные суммы md5sums. Чтобы использовать контрольные суммы md5sums , которые есть в BLFS, вы можете создать файл file.md5sum (поместите на той же самой строке контрольную сумму md5sum и, через пробел, точное имя загруженного файла) и запустить команду, приведенную выше. Либо просто запустите команду, приведенную ниже, и сравните результат со значением md5sum, указанным в книге BLFS.

md5sum <имя_загруженного_файла>

Создание журнальных файлов в процессе инсталляции

Для более крупных пакетов удобно создать журнальный файл, а не смотреть на экран в надежде не пропустить определенную ошибку или предупреждение. Журнальные файлы также удобны для отладки и сохранения результатов. Следующая команда позволит вам создать журнальный файл, который будет использоваться в процессе установки. Замените <command> на команду, которую вы намерены выполнить.

( <command> 2>&1 | tee compile.log && exit $PIPESTATUS )

2>&1 перенаправляет сообщения об ошибках туда же, куда направлен стандартный выходной поток. Команда tee позволит перехватить выходной поток и записать результат в файл. Скобки вокруг команды позволят запустить команду в отдельной подоболочке и, наконец, команда exit $PIPESTATUS обеспечит, чтобы результатом этой всей команды был результат команды <command>, а не результат команды tee.

Автоматизированные процедуры сборки

Есть моменты, когда может пригодиться автоматизированная сборка пакетов. У каждого есть свои собственные причины использовать автоматизировать сборку и каждый приходит к этому своим собственным путем. Создание файлов Makefile, скрипты Bash, скрипты Perl или просто список, из которого вы будете вырезать или в который вы будете добавлять команды, - это всего лишь некоторые из методов, которые можно использовать для автоматизизированной сборки пакетов BLFS. Подробное описание методов автоматизации и конкретные примеры многочисленных способов автоматизации сборки пакетов в этом разделе рассматриваться не будут. В этом разделе мы покажем вам, как использовать перенаправление файлов и как автоматически вводить команду yes, что должно должно помочь вам с идеями, как автоматизировать ваш процесс сборки.

Перенаправление файлов для автоматического ввода

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

Сборка пакета CUPS является хорошим примером, в котором показано, как перенаправлять файл во входной поток в качестве ответа на запросы. Этот пример поможет вам автоматизировать процесс сборки. Если вы запустите тестовый набор, вас попросят ответить на ряд вопросов, касающихся типа теста, который должен быть запущен, и наличия у вас каких-либо дополнительных программ, которые может использовать тест. Чтобы автоматизировать запуск тестов, вы можете создать файл с вашими ответами, по одному ответу в каждой строке, и использовать команду, наподобие той, что приведена ниже:

make check < ../cups-1.1.23-testsuite_parms

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

Использование команды yes для автоматического ввода

Иногда вам нужен только один ответ или один и тот же ответ нужно повторить много раз. Во всех этих случаях действительно хорошо воспользоваться командой yes. Команду yes можно использовать для формирования ответа (одного и того же) на один или на несколько запросов. Эту команду можно использовать просто для имитации нажатия клавиши Enter, ввода значения клавиши Y или ввода строки текста. Возможно, проще всего на примере показать использование этой команды.

Во-первых, создайте короткий скрипт Bash следующим образом:

cat > blfs-yes-test1 << "EOF"
#!/bin/bash

echo -n -e "\n\nPlease type something (or nothing) and press Enter ---> "

read A_STRING

if test "$A_STRING" = ""; then A_STRING="Just the Enter key was pressed"
else A_STRING="You entered '$A_STRING'"
fi

echo -e "\n\n$A_STRING\n\n"
EOF
chmod 755 blfs-yes-test1

Теперь запустите скрипт, набрав в командной строке команду ./blfs-yes-test1. Она будет ждать ответа, в качестве которого можно вести все, что угодно (или вообще ничего не вводить), а затем нажать клавишу Enter. То, что было введено, после ввода эхом будет выдано на экран. Теперь воспользуйтесь командой yes для автоматизации ввода ответа:

yes | ./blfs-yes-test1

Обратите внимание, что благодаря тому, что команда yes перенаправляет результаты в скрипт, нажатие клавиши y будет передано в скрипт. Теперь попробуйте использовать текстовую строку:

yes 'This is some text' | ./blfs-yes-test1

В качестве ответа скрипту будет использована именно эта строка. Наконец, попробуйте использовать пустую строку:

yes '' | ./blfs-yes-test1

Обратите внимание, что в результате в скрипт будет просто передано нажатие клавиши Enter. Это полезно в тех случаях, когда в ответе на запрос достаточно использовать значение, используемое по умолчанию. Этот синтаксис используется в инструкциях для пакета Net-tools, в которых во многих случаях в процессе конфигурации в качестве ответа на запросы используются значения, определяемые по умолчанию. Теперь, если захотите, вы можете удалить тестовый скрипт.

Перенаправление файлов на автоматический вывод

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

Опять же, самый простой способ продемонстрировать методику - привести пример. Во-первых, выполните команду:

ls -l /usr/bin | more

Конечно, поскольку был использован фильтр more, вам нужно будет просматривать выдаваемый текст по одной странице. Теперь используйте ту же команду, но на этот раз перенаправьте вывод в файл. Вместо того, чтобы указывать имя файла, можно использовать специальный файл /dev/null, но в этом случае у вас не будет журнального файла, который можно было бы просмотреть:

ls -l /usr/bin | more > redirect_test.log 2>&1

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

В последнем примере для того, чтобы обойти необходимость вывода страницы в выходной поток, а затем отвечать y на запрос, будет использована команды yes в сочетании с перенаправлением вывода. Эту технологию можно использовать в случае, если нужно пролистывать выдаваемый текст (например, лицензионный договор), а затем отвечать на вопрос "do you accept the above?" ("Принимаете ли вы указанное выше?"). Для этого примера потребуется еще один короткий скрипт Bash:

cat > blfs-yes-test2 << "EOF"
#!/bin/bash

ls -l /usr/bin | more

echo -n -e "\n\nDid you enjoy reading this? (y,n) "

read A_STRING

if test "$A_STRING" = "y"; then A_STRING="You entered the 'y' key"
else A_STRING="You did NOT enter the 'y' key"
fi

echo -e "\n\n$A_STRING\n\n"
EOF
chmod 755 blfs-yes-test2

Этот скрипт можно использовать для имитации программы, в которой прежде, чем программа что-либо установит, вам требуется прочитать лицензионное соглашение, а затем принять соглашение. Сначала запустите скрипт без какой-либо автоматизации, набрав для этого команду ./blfs-yes-test2.

Теперь введите следующую команду, в которой используется два способа автоматизации, что позволяет ее использовать в скрипте автоматической сборки:

yes | ./blfs-yes-test2 > blfs-yes-test2.log 2>&1

Если желаете, то наберите команду tail blfs-yes-test2.log чтобы увидеть последние строки выданной страницы и убедиться в том, что в скрипт было передано значение y. После того, как вы будете довольны работой команды, вы можете удалить скрипт и журнальный файл.

Наконец, имейте в виду, что есть много способов автоматизации и/или использования скриптов в процесса сборки пакетов. Нет единственного "правильного" способа. Вы ограничены только своим воображением.

Зависимости

Для каждого описываемого пакета в BLFS перечисляются известные зависимости. Они подразделяются на несколько групп с различными названиями, смысл которых в следующем:

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

Используйте самые последние пакеты с исходным кодом

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

Если вы обнаружите, что пакет не будет собираться или работать должным образом, вы должны посмотреть, есть ли более новая версия пакета. Обычно значит, что вы должны пойти на веб-сайт, на котором осуществляется поддержка этого пакета, скачать самый свежий архив tar и собрать пакет. Если вы не сможете по загрузочному URL определить веб-сайт пакета, то используйте Google и укажите в запросе имя пакета. Например, в строке запроса Google наберите: "имя_пакета download" (без кавычек) или нечто подобное. Иногда, если набрать "имя_пакета home page", вы в результате сможете найти веб-сайт пакета.

Перевод сделан с варианта оригинала, датированного 2009-09-25 10:52:41 +0000


Предыдущий раздел: Оглавление Следующий раздел:
2. Важная информация   Об использовании /usr или /usr/local