Сборник статей Handbook inside ! : Linux не для идиотов inside ! : Версия 1 от 15. 07. 2007 2007



Pdf просмотр
страница14/50
Дата14.11.2016
Размер5.65 Mb.
Просмотров8065
Скачиваний0
ТипСборник статей
1   ...   10   11   12   13   14   15   16   17   ...   50
2.c. USE-флаги отдельных пакетов
Просмотр доступных USE-флагов
Возьмем, к примеру, mozilla — какие USE-флаги она может использовать? Чтобы это выяснить, запустим emerge с параметрами --pretend и --verbose:
Листинг 10: Просмотр используемых USE флагов
# emerge --pretend --verbose mozilla
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild R ] www-client/mozilla-1.7.12-r2 USE="crypt gnome java mozsvg ssl truetype xprint -debug -ipv6 -ldap -mozcalendar -mozdevelop -moznocompose
-moznoirc -moznomail -moznoxft -postgres -xinerama" 0 kB
emerge — не единственное средство для решения этой задачи. Существует программа, специально предназначенная для вывода информация о пакетах. Она называется equery и находится в пакете gentoolkit. Для начала установим этот пакет:
Листинг 11: Установка gentoolkit
# emerge gentoolkit
Теперь для просмотра USE-флагов какого-нибудь пакета запустим equery с аргументом uses. Пусть это будет пакет gnumeric:
Листинг 12: Запуск equery для просмотра доступных USE-флагов
# equery uses =gnumeric-1.6.3 -a
[ Searching for packages matching =gnumeric-1.6.3... ]
[ Colour Code : set unset ]
[ Legend : Left column (U) - USE flags from make.conf ]
[ : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for app-office/gnumeric-1.6.3 ]
U I
145

- - debug : Tells configure and the makefiles to build for debugging.
Effects vary across packages, but generally it will at least add -g to CFLAGS. Remember to set FEATURES=nostrip too
- - gnome : Adds GNOME support
+ + python : Adds support/bindings for the Python language
- - static : !!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically
3. Возможности Portage
3.a. Возможности Portage
В Portage есть несколько дополнительных возможностей (features), которые значительно улучшат ваше впечатление от Gentoo. Многие из этих возможностей полагаются на определенные программы, повышающие производительность, надежность, безопасность и т.п.
Для включения и выключения определенных возможностей Portage нужно редактировать в файле /etc/make.conf переменную FEATURES, в которой перечислены ключевые слова, разделенные пробелами, обозначающие различные возможности. Иногда для использования соответствующих возможностей потребуется установка дополнительных утилит.
Здесь перечислены не все возможности, поддерживаемые Portage. Полный перечень представлен на странице справки make.conf:
Листинг 1: Вызов страницы справки make.conf
$ man make.conf
Чтобы узнать, какие возможности включены по умолчанию, запустите emerge --info и найдите переменную FEATURES (или отфильтруйте ее с помощью grep):
Листинг 2: Выявление уже включенных возможностей
$ emerge --info | grep FEATURES
3.b. Распределенная компиляция
Использование distcc distcc — программа, распределяющая компиляцию по нескольким, не обязательно одинаковым, машинам в сети. Клиент distcc посылает всю необходимую информацию на доступные серверы distcc (на которых выполняется distccd), чтобы они могли компилировать для клиента части исходного кода. Чистый выигрыш — более быстрая компиляция.
Подробная информация о distcc (и как заставить его заработать в Gentoo) находится в нашем описании distcc в Gentoo.
146

Установка distcc
Distcc поставляется с графическим монитором (средством контроля), позволяющим отслеживать задачи, которые ваш компьютер отсылает на компиляцию. Если вы используете Gnome, тогда добавьте «gnome» к переменной USE. А если вы не пользуетесь Gnome, но при этом хотите пользоваться монитором, добавьте «gtk» к переменной USE.
Листинг 3: Установка distcc
# emerge distcc
Подключение поддержки Portage
Добавьте distcc к переменной FEATURES в файле /etc/make.conf. Затем отредактируйте переменную MAKEOPTS, как вам нравится. Известная рекомендация — указывать директиву «-jX», где X — число центральных процессоров, на которых работает distccd (включая текущий компьютер) плюс один; у вас могут получиться лучшие результаты и с другими значениями.
Теперь запустите distcc-config и введите список доступных серверов distcc. Для простоты примера, предположим, что доступные серверы DistCC — 192.168.1.102
(текущий компьютер), 192.168.1.103 и 192.168.1.104 (два «удаленных» компьютера):
Листинг 4: Настройка distcc для использования трех доступных серверов distcc
# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"
Не забудьте также запустить демон distccd:
Листинг 5: Запуск демонов distccd
# rc-update add distccd default
# /etc/init.d/distccd start
3.c. Кэширование компиляции
О средстве ccache ccache — это быстрый кэш компилятора. Когда вы компилируете программу, он кэширует промежуточные результаты так, что всякий раз, когда вы перекомпилируете ту же самую программу, время компиляции значительно сокращается. В типичных случаях общее время компиляции может сокращаться в 5
—10 раз.
Если вы интересуетесь подробностями ccache, пожалуйста, посетите домашнюю страницу ccache.
Установка ccache
Для установки ccache, выполните emerge ccache:
147

Листинг 6: Установка ccache
# emerge ccache
Подключение поддержки Portage
Откройте /etc/make.conf и добавьте ccache к переменной FEATURES. Затем добавьте новую переменную по имени CCACHE_SIZE (размер кэша), и установите её равной «2G»:
Листинг 7: Редактирование CCACHE_SIZE в /etc/make.conf
CCACHE_SIZE="2G"
Для проверки работоспособности ccache, запросите статистику ccache. Из-за того, что Portage использует другой домашний каталог ccache, вам также потребуется установить переменную CCACHE_DIR:
Листинг 8: Просмотр статистики ccache
# CCACHE_DIR="/var/tmp/ccache" ccache -s
Домашний каталог ccache по умолчанию — /var/tmp/ccache; изменить это назначение можно, определив переменную CCACHE_DIR в /etc/make.conf.
Однако, при запуске ccache используется каталог по умолчанию, ${HOME}/.ccache, вот почему при запросе статистики (Portage) ccache требуется определять переменную CCACHE_DIR.
Использование ccache для компиляции Си не в Portage
Если вы хотите использовать ccache для компиляций не в Portage, добавьте
/usr/lib/ccache/bin в начало вашей переменной PATH (перед /usr/bin). Это можно сделать, отредактировав /etc/env.d/00basic, который является первым файлом среды, где определяется переменная PATH:
Листинг 9: Редактирование /etc/env.d/00basic
PATH="/usr/lib/ccache/bin:/opt/bin"
3.d. Поддержка двоичных пакетов
Создание готовых (заранее собранных) пакетов
Portage поддерживает установку заранее собранных готовых пакетов. Несмотря на то, что в саму Gentoo не входят заранее собранные пакеты (за исключением снимков
GRP), Portage можно настроить на полноценное управление готовыми пакетами.
Чтобы создать двоичный пакет, можно использовать quickpkg, если пакет уже установлен в вашей системе, или emerge с параметрами --buildpkg или -- buildpkgonly.
148

Если вы хотите, чтобы Portage создавал двоичные пакеты из каждого пакета, который вы будете устанавливать, добавьте buildpkg к переменной FEATURES.
Расширенная поддержка создания наборов готовых пакетов имеются в catalyst. Для получения подробной информации о catalyst, пожалуйста, прочитайте справочное руководство по catalyst (англ.) и распространенные вопросы о catalyst (англ.).
Установка двоичных пакетов
Хотя в Gentoo такого хранилища нет, вы можете создать централизованное хранилище для заранее скомпилированных двоичных пакетов. Чтобы использовать такое хранилище, потребуется указать Portage путь к нему с помощью переменной
PORTAGE_BINHOST. Например, если двоичные пакеты находятся на ftp://buildhost/gentoo:
Листинг 10: Установка PORTAGE_BINHOST в /etc/make.conf
PORTAGE_BINHOST="ftp://buildhost/gentoo"
При установке двоичных пакетов, указывайте в команде emerge параметр --getbinpkg вместе с параметром --usepkg. Первый указывает emerge загрузить двоичный пакет c сервера, определенного раньше, а второй сообщает emerge, что до загрузки исходных кодов и их компиляции сначала нужно попытаться установить этот двоичный пакет.
Например, чтобы установить gnumeric из двоичных пакетов:
Листинг 11: Установка двоичного пакета gnumeric
# emerge --usepkg --getbinpkg gnumeric
Подробную информацию о параметрах установки двоичных пакетов можно найти на странице справки emerge:
Листинг 12: Чтение справки по emerge
$ man emerge
4. Сценарии инициализации
4.a. Уровни запуска
Процесс загрузки системы
При загрузке вашей системы по экрану пробегает много текста. Если присмотреться, заметно, что этот текст не меняется от загрузки к загрузке. Последовательность всех этих действий называется последовательностью загрузки и в той или иной степени постоянна.
Во-первых, загрузчик размещает в памяти образ ядра, который вы указали в файле его конфигурации. После этого ядро запускается. Когда ядро загружено и запущено,
149
оно инициализирует относящиеся к ядру структуры и задания, и запускает процесс init.
Этот процесс удостоверяется, что все файловые системы (определенные в
/etc/fstab) смонтированы и готовы к использованию. Затем он выполняет несколько сценариев, находящихся в каталоге /etc/init.d, которые запускают службы, необходимые для нормального запуска системы.
И, наконец, когда все сценарии выполнены, init подключает терминалы (чаще всего просто виртуальные консоли, которые видны при нажатии ALT+F1, ALT+F2 и т.д.), прикрепляя к каждой консоли специальный процесс под названием agetty. Этот процесс впоследствии обеспечивает возможность входа в систему с помощью login.
Сценарии инициализации
Сейчас процесс init запускает сценарии из каталога /etc/init.d не просто в случайном порядке. Более того, запускаются не все сценарии из /etc/init.d, а только те, которые предписано исполнять. Решение о запуске сценария принимается в результате просмотра каталога /etc/runlevels.
Во-первых, init запускает все сценарии из /etc/init.d, на которые есть символьные ссылки из /etc/runlevels/boot. Обычно сценарии запускаются в алфавитном порядке, но в некоторых сценариях имеется информация о зависимостях от других сценариев, указывающая системе на необходимость их предварительного запуска.
Когда все сценарии, указанные в /etc/runlevels/boot, будут выполнены, init переходит к запуску сценариев, на которые есть символьные ссылки из /etc/runlevels/default. И снова запуск происходит в алфавитном порядке, пока в сценарии не встретится информация о зависимостях; тогда порядок изменяется для обеспечения правильного порядка запуска.
Как работает init
Конечно, init не принимает решений сам по себе. Ему необходим конфигурационный файл, где описаны необходимые действия. Этот файл — /etc/inittab.
Если вы запомнили последовательность загрузки, описанную чуть ранее, вы вспомните, что первое действие init — это монтирование всех файловых систем. Это определяется в строке /etc/inittab, приведенной ниже:
Листинг 1: Строка инициализации системы из /etc/inittab si::sysinit:/sbin/rc sysinit
Этой строкой процессу init предписывается выполнить /sbin/rc sysinit для инициализации системы. Самой инициализацией занимается сценарий /sbin/rc, так что можно сказать, что init делает не слишком много — он просто делегирует задачу по инициализации системы другому процессу.
Во-вторых, init выполняет все сценарии, на которые есть символьные ссылки из
/etc/runlevels/boot. Это определяется следующей строкой:
Листинг 2: Инициализация системы, продолжение rc::bootwait:/sbin/rc boot
150

И снова все необходимые действия выполняются сценарием rc. Заметьте, что параметр, переданный rc (boot), совпадает с названием используемого подкаталога в /etc/runlevels.
Теперь init проверяет свой конфигурационный файл, чтобы определить, какой уровень запуска использовать. Для этого из /etc/inittab считывается строка:
Листинг 3: Строка initdefault id:3:initdefault:
В приведенном примере (который подходит для подавляющего большинства пользователей Gentoo) номер уровня запуска — 3. Пользуясь этой информацей, init проверяет, что нужно выполнить для запуска уровня запуска 3:
Листинг 4: Определение уровней запуска l0:0:wait:/sbin/rc shutdown l1:S1:wait:/sbin/rc single l2:2:wait:/sbin/rc nonetwork l3:3:wait:/sbin/rc default l4:4:wait:/sbin/rc default l5:5:wait:/sbin/rc default l6:6:wait:/sbin/rc reboot
В строке, определяющей уровень 3, для запуска служб снова используется сценарий rc (на этот раз с аргументом default). Опять-таки, обратите внимание, что аргумент, передаваемый сценарию rc, совпадает с названием подкаталога из /etc/runlevels.
По окончании работы rc, init принимает решение о том, какие виртуальные консоли включить и какие команды выполнить в каждой из них:
Листинг 5: Определение виртуальных консолей c1:12345:respawn:/sbin/agetty 38400 tty1 linux c2:12345:respawn:/sbin/agetty 38400 tty2 linux c3:12345:respawn:/sbin/agetty 38400 tty3 linux c4:12345:respawn:/sbin/agetty 38400 tty4 linux c5:12345:respawn:/sbin/agetty 38400 tty5 linux c6:12345:respawn:/sbin/agetty 38400 tty6 linux
Что такое уровень запуска?
Как вы заметили, init применяет нумерацию для определения уровня запуска, который надо использовать. Уровень запуска — это то состояние, в котором запускается ваша система, он содержит набор сценариев (сценариев уровня запуска или сценариев инициализации [initscript]), которые следует выполнять, при входе и выходе из определенного уровня запуска.
В Gentoo определено семь уровней запуска: три служебных и четыре определяемых пользователем. Служебные называются sysinit, shutdown и reboot. Действия, совершаемые ими, в точности соответствуют их названиям: инициализация
151
системы, выключение системы и ее перезагрузка.
Определяемые пользователем уровни — это те, которым соответствуют подкаталоги в /etc/runlevels: boot, default, nonetwork и single. Уровень boot запускает все службы, необходимые системе и используемые всеми остальными уровнями.
Остальные уровни отличаются друг от друга запускаемыми службами: default используется для повседневной работы, nonetwork — для тех случаев, когда не требуется сеть, а single — при необходимости восстановления системы.
Работа со сценариями инициализации
Сценарии, запускаемые процессом rc, называются сценариями инициализации.
Каждый сценарий из /etc/init.d может запускаться с аргументами start, stop, restart, pause, zap, status, ineed, iuse, needsme, usesme и broken.
Для запуска, остановки или перезапуска службы (и всех, зависящих от нее) следует использовать start, stop и restart:
Листинг 6: Запуск postfix
# /etc/init.d/postfix start
Примечание: Останавливаются или перезапускаются только те службы, которым необходима данная служба. Остальные зависимые службы (те, которые используют службу, но не нуждаются в ней) эта операция не затрагивает.
Если вы хотите остановить службу, но оставить зависимые от нее работающими, можно использовать аргумент pause:
Листинг 7: Остановка postfix без остановки зависимых служб
# /etc/init.d/postfix pause
Чтобы узнать текущее состояние службы (запущена, остановлена, приостановлена и т.д.), можно использовать аргумент status:
Листинг 8: Информация о состоянии postfix
# /etc/init.d/postfix status
Если указано, что служба работает, но вы знаете, что это не так, можно сбросить состояние на stopped (остановлена), используя аргумент zap:
Листинг 9: Сброс информации о состоянии postfix
# /etc/init.d/postfix zap
Для того, чтобы выяснить зависимости службы, можно использовать аргументы iuse или ineed. С помощью ineed вы увидите те службы, которые действительно необходимы для правильного функционирования интересующей вас службы. С другой стороны, iuse покажет те службы, которые могут использоваться нашей службой, но не обязательны для ее работы.
Листинг 10: Запрос списка всех необходимых служб, от которых зависит Postfix
152

# /etc/init.d/postfix ineed
Аналогично вы можете узнать, какие службы нуждаются в данной службе (needsme) или могут ее использовать (usesme):
Листинг 11: Запрос списка всех служб, которым необходим Postfix
# /etc/init.d/postfix needsme
Наконец, можно просмотреть список служб, требующихся для данной, но отсутствующих в системе:
Листинг 12: Запрос списка служб, необходимых Postfix, но отсутствующих
# /etc/init.d/postfix broken
4.b. Использование rc-update
Что такое rc-update?
Система инициализации Gentoo использует дерево зависимостей для определения служб, которые запускаются в первую очередь. Т. к. это очень утомительное занятие, и мы не хотели, чтобы пользователь занимался этим вручную, мы разработали инструменты, упрощающие управление уровнями запуска и сценариями инициализации.
Используя rc-update, можно включать и исключать сценарии инициализации из уровней запуска. Из rc-update автоматически запускается сценарий depscan.sh для перестроения дерева зависимостей.
Добавление и удаление служб
В процессе установки Gentoo вы уже добавляли сценарии инициализации в уровень запуска «default». В тот момент вы, возможно, не имели понятия, что такое «default» и зачем он нужен, но теперь вы все это знаете. Сценарию rc-update требуется второй аргумент, определяющий действие: add (добавить), del (удалить) или show
(показать).
Для того, чтобы добавить или удалить сценарий, просто введите rc-update с аргументом add или del, затем название сценария и уровня запуска. Например:
Листинг 13: Удаление Postfix из уровня запуска default
# rc-update del postfix default
По команде rc-update show выводится список всех доступных сценариев с указанием соответствующих уровней запуска:
Листинг 14: Получение информации о сценариях инициализации
# rc-update show
153

4.c. Настройка служб
Почему нужна дополнительная настройка?
Сценарии инициализации могут быть весьма сложны. Поэтому нежелательно допускать непосредственное редактирование сценария пользователями, т.к. это может привнести в систему множество ошибок. Но, с другой стороны, необходимо правильно настроить службу. Например, может понадобиться передать службе дополнительные параметры.
Вторая причина, по которой настройки хранятся отдельно от самого сценария — это возможность обновления сценария без опасения, что все ваши настройки будут утеряны.
Каталог /etc/conf.d
В Gentoo предусмотрен очень простой способ настройки служб: для каждого сценария, предполагающего настройку, в каталоге /etc/conf.d есть конфигурационный файл. Например, у сценария, запускающего apache2 (под названием /etc/init.d/apache2) есть конфигурационный файл /etc/conf.d/apache2, где могут храниться нужные вам параметры, передаваемые серверу Apache 2 при запуске:
Листинг 15: Переменная, определенная в /etc/conf.d/apache2
APACHE2_OPTS="-D PHP4"
Такие файлы настроек содержат одни переменные (наподобие /etc/make.conf), облегчая настройку служб. Это также позволяет нам давать больше информации о переменных (в комментариях).
4.d. Написание сценариев инициализации
Мне тоже придется?..
Нет, написание сценариев инициализации обычно не требуется, т.к. Gentoo содержит готовые сценарии для всех поддерживаемых служб. Однако, вы можете установить какую-либо службу, не используя систему Portage; в таком случае, вероятно, вам придется создавать сценарий инициализации самостоятельно.
Не используйте сценарий, идущий со службой, если он не написан специально для
Gentoo: сценарии инициализации Gentoo не совместимы со сценариями, используемыми в других дистрибутивах!
Структура
Основная структура сценария инициализации показана ниже.
Листинг 16: Основная структура сценария
#!/sbin/runscript
154
depend() {
(информация о зависимостях)
}
start() {
(команды, необходимые для запуска службы)
}
stop() {
(команды, необходимые для остановки службы)
}
restart() {
(команды, необходимые для перезапуска службы)
}
В любом сценарии должна быть определена функция start(). Все остальные разделы необязательны.
Зависимости
Можно определять два типа зависимостей: use (использую) и need (нуждаюсь). Как упоминалось ранее, need-зависимость более строга, чем use-зависимость. Вслед за типом зависимости указывается название службы, от которой существует зависимость, или ссылка на виртуальную (virtual) зависимость.
Виртуальная зависимость — это зависимость от функций, предоставляемых службой, но не какой-то единственной службой. Сценарий может зависеть от службы системного журнала, но таких достаточно много (metalogd, syslog-ng, sysklogd и т.п.).
Поскольку нельзя нуждаться в каждой из них (ни в одной вразумительной системе они не запущены все сразу), мы обеспечили предоставление виртуальной зависимости всеми этими службами.
Давайте взглянем на информацию о зависимостях postfix.
Листинг 17: Информация о зависимостях Postfix depend() {
need net use logger dns provide mta
}
Как можно увидеть, postfix: требует сеть (net): виртуальная зависимость, удовлетворяемая, например,
/etc/init.d/net.eth0 использует журнал (logger): виртуальная зависимость, удовлетворяемая, например,
/etc/init.d/syslog-ng использует службу имен (dns): виртуальная зависимость, удовлетворяемая, например, /etc/init.d/named) предоставляет почтовый агент (mta): виртуальная зависимость, общая для всех программ — почтовых серверов
155

Порядок запуска
Иногда вам нужна не сама служба, а запуск вашей службы до (или после) другой службы, если та присутствует в системе (обратите внимание на условие: это уже не зависимость) и запускается на том же уровне запуска (отметьте условие: это относится только к службам из одинакового уровня запуска). Такую очередность можно указать, используя значения before (до) или after (после).
Например, рассмотрим значения для службы Portmap:
Листинг 18: Функция depend() службы Portmap depend() {
need net before inetd before xinetd
}
Также можно использовать знак «*«, чтобы охватить все службы данного уровня запуска, хотя это не рекомендуется.
Листинг 19: Запуск сценария первым на уровне запуска depend() {
before *
}
Стандартные функции
Следом за разделом depend() вам потребуется определить функцию start(). В ней содержатся все команды, необходимые для запуска вашей службы. Рекомендуется применять функции ebegin и eend для сообщений пользователю о том, что происходит:
Листинг 20: Пример функции start()
start() {
ebegin "Запуск - моя_служба"
start-stop-daemon --start --quiet --exec /path/to/my_service eend $?
}
Если вам нужны дополнительные примеры функции start(), пожалуйста, прочитайте исходные коды сценариев инициализации, находящихся в каталоге /etc/init.d. Что касается команды start-stop-daemon, то на случай, если вам нужны дополнительные сведения, есть превосходная страница справки:
Листинг 21: Вызов страницы справки по start-stop-daemon
# man start-stop-daemon
Другими функциями, которые можно определить — stop() и restart(). От вас не требуется определение этих функций! Система инициализации, применяемая нами,
156
достаточно развита и в состоянии самостоятельно заполнить эти функции, если вы используете start-stop-daemon.
Синтаксис сценариев инициализации, применяемых в Gentoo, основан на оболочке
Борна (Bourne Again Shell — bash), поэтому вы можете свободно использовать внутри своих сценариев bash-совместимые конструкции.
Добавление дополнительных параметров
Если вы хотите ввести в сценарий дополнительные параметры, кроме упоминавшихся, нужно добавить к переменной opts название параметра и создать функцию с названием, соответствующим параметру. Например, для поддержки параметра restartdelay:
Листинг 22: Создание дополнительной функции restartdelay opts="${opts} restartdelay"
restartdelay() {
stop sleep 3 # пауза в 3 секунды перед повторным запуском start
}
Переменные для настройки служб
Для поддержки конфигурационного файла в каталоге /etc/conf.d ничего дополнительно делать не нужно: при запуске вашего сценария инициализации автоматически включаются следующие файлы (т.е., переменные из них становятся доступны):
/etc/conf.d/<ваш сценарий инициализации>
/etc/conf.d/basic
/etc/rc.conf
Если ваш инициализационный сценарий предоставляет виртуальную зависимость
(например, net), то также включается файл, соответствующий этой зависимости
(например, /etc/conf.d/net).

Каталог: pub -> docs books -> Linux -> Linux 2
pub -> Буланов С. В. Кудрявцева Е. Л. Развитие креативности билингвов: путь от интеркультурности к формированию «человека мира»
pub -> «октябрьский лицей»
pub -> Самообследование гоу сош «Школа надомного обучения» №196 по направлениям деятельности. Общие вопросы
pub -> Занятие для математического кружка. Задачи работы
pub -> Доклад муниципальное образовательное
pub -> Публичный доклад. 2013 год Общая характеристика образовательного учреждения. Место расположения
pub -> Публичный доклад муниципального общеобразовательного учреждения средней общеобразовательной школы №13


Поделитесь с Вашими друзьями:
1   ...   10   11   12   13   14   15   16   17   ...   50


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал