
- •Расширенные возможности Portage
- •А. Установка Gentoo
- •1. Об установке Gentoo Linux
- •1.А. Введение.
- •2. Выбор правильного источника установки.
- •2.А. Требования к железу
- •2.B. Установочные cd Gentoo
- •2.С. Скачайте, запишите, и загрузитесь с установочного cd Gentoo
- •3. Конфигурация сети
- •3.A. Автоматическое определение сети
- •3.B. Автоматическая конфигурация сети
- •3.С. Ручная настройка сети
- •4. Подготовка дисков
- •4.A. Введение в блочные устройства
- •4.B. Разрабатываем схему разделов
- •4.C. Использование fdisk для разбивки вашего диска
- •4.D. Использование parted для разбивки вашего диска
- •4.E. Создаем файловые системы
- •4.F. Монтирование
- •5. Установка файлов Gentoo
- •5.A. Устанавливаем tar-архив Stage3
- •5.B. По умолчанию: Используем Stage3 из Интернета
- •5.C. Устанавливаем Portage
- •5.D. Настройка опций компиляции
- •6. Установка базовой системы Gentoo
- •6.A. Чрутинг
- •6.B. Конфигурируем Portage
- •7. Конфигурация ядра
- •7.A. Временная зона
- •7.B. Устанавливаем исходники
- •7.C. По умолчанию: Ручная конфигурация
- •7.D. Альтернатива: Используем genkernel
- •7.E. Модули ядра
- •8. Конфигурация системы
- •8.A. Информация о файловой системе
- •8.B. Информация о сети
- •8.C. Системная информация
- •9. Установка необходимых системных приложений
- •9.A. Системный логгер
- •9.B. Опционально: Демон Cron
- •9.C. Опционально: Индексация файлов
- •9.D. Опционально: Удаленный Доступ
- •9.E. Программы работы с файловой системой
- •9.F. Программы работы с сетью
- •10. Конфигурация загрузчика
- •10.A. Делаем выбор
- •10.B. По умолчанию: Используем grub
- •10.C. Альтернатива: Используем lilo
- •10.D. Перезагружаем систему
- •11. Окончание установки Gentoo
- •11.A. Работа с пользователями
- •11.B. Очистка диска
- •12. Куда идти дальше?
- •12.A. Документация
- •12.B. Gentoo в сети
- •B. Работа с Gentoo
- •1. Введение в Portage
- •1.A. Добро пожаловать в Portage
- •1.B. Дерево Portage
- •1.C. Поддержка приложений
- •1.D. Лицензии
- •1.E. Когда Portage ругается...
- •2.A. Что такое use-флаги?
- •2.B. Использование use-флагов
- •3. Возможности Portage
- •3.A. Возможности Portage
- •3.B. Распределенная компиляция
- •3.C. Кеширование компиляции
- •3.D. Поддержка бинарных пакетов
- •3.E. Скачивание файлов
- •3.F. Загрузка проверенных образов дерева Portage
- •4. Инициализационные скрипты
- •4.A. Уровни запуска
- •4.B. Работаем с rc-update
- •4.C. Конфигурирование сервисов
- •4.D. Пишем инициализационные скрипты
- •4.E. Изменение поведения уровня запуска
- •5. Переменные окружения
- •5.A. Переменные окружения?
- •5.B. Определение переменных глобально
- •5.C. Определение переменных локально
- •C. Работа с Portage
- •1. Файлы и каталоги
- •1.A. Файлы Portage
- •1.B. Сохраненные файлы
- •1.C. Компиляция приложений
- •1.D. Возможности логгинга
- •2. Конфигурирование через переменные
- •2.A. Конфигурация Portage
- •2.B. Опции, специфичные для компиляции
- •2.C. Защита файлов конфигурации
- •2.D. Опции скачивания
- •2.E. Конфигурация Gentoo
- •2.F. Поведение Portage
- •3. Смешение веток приложений
- •3.A. Использование одной ветви
- •3.B. Смешиваем стабильную ветку и ветку для тестирования
- •3.C. Используем замаскированные пакеты
- •4. Дополнительные программы для Portage
- •5. Отход от официального дерева
- •5.A. Использование поднабора дерева Portage
- •5.B. Добавляем неофициальные ебилды
- •5.C. Приложения, не обрабатываемые Portage
- •6. Расширенные возможности Portage
- •6.A. Введение
- •6.B. Переменные окружения для каждого пакета
- •6.C. Вмешиваемся в процесс установки
- •6.D. Выполняем задачи после --sync
- •6.E. Изменяем настройки профиля
- •6.F. Применение нестандартных патчей
- •D. Конфигурация сети Gentoo
- •1. Начинаем
- •1.A. Начинаем
- •2. Расширенная конфигурация
- •2.A. Расширенная конфигурация
- •2.B. Сетевые зависимости
- •2.C. Имена и значения переменных
- •3. Модульная сеть
- •3.A. Сетевые модули
- •3.B. Обработчики интерфейсов
- •3.F. Связывание
- •3.G. Мосты (Поддержка 802.1d)
- •3.I. Туннелирование
- •3.J. Vlan (Поддержка 802.1q)
- •4. Беспроводные сети
- •4.A. Введение
- •4.D. Определение конфигурации сети на каждый essid
- •5. Добавление функциональности
- •5.A. Хуки стандартных функций
- •5.B. Хуки функций Wireless Tools
- •6. Обслуживание сети
- •6.A. Обслуживание сети
4. Инициализационные скрипты
4.A. Уровни запуска
Загрузка вашей системы
Когда вы загружаете вашу систему, вы можете заметить много текста. Если вы изучите его поближе, вы увидите, что этот текст одинаковый каждый раз, когда вы перезагружаете вашу систему. Последовательных всех этих действий называется последовательностью загрузки и (более или менее) статически определено.
Вначале ваш загрузчик загружает образ ядра, который вы указали в конфигурации загрузчика, в память, после чего говорит процессору запустить ядро. Когда ядро загружено и запущено, оно инициализирует все относящиеся к ядру структуры и задачи, и запускает процесс 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.1: Строка с инициализацией системы в /etc/inittab |
si::sysinit:/sbin/rc sysinit |
Эта строка говорит init, что он должен запустить /sbin/rc, чтобы инициализировать систему. Скрипт /sbin/rc выполняет инициализацию, так что вы можете сказать, что init, в общем-то, не так уж и много делает — он передает задачу инициализации системы другому процессу.
Далее init выполняет все скрипты, на которые есть символические ссылки в /etc/runlevels/boot. Это определяется следующей строкой:
Код 1.2: Инициализация системы, продолжение |
rc::bootwait:/sbin/rc boot |
И опять, скрипт rc выполняет необходимые задачи. Заметьте, что опция, которую передают программе rc (boot) та же самая, как и поддиректория каталога /etc/runlevels, которая используется.
Теперь init проверяет свой конфигурационный файл, чтобы посмотреть, на каком уровне запуска он должен работать. Чтобы решить это, он читает следующую строку из /etc/inittab:
Код 1.3: Строка с initdefault |
id:3:initdefault: |
В данном случае (которую будут использовать большинство пользователей Gentoo), уровень запуска равен 3. Используя данную информацию, init проверит, что ему нужно запустить на уровне запуска 3:
Код 1.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 решает, какие виртуальные консоли ему нужно активировать, и какие команды нужно запустить в каждой консоли:
Код 1.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 использут схему с номерами, чтобы решить, какой уровень запуска он должен активировать. Уровень запуска это состояние, в котором ваша система запущена, и содержит коллекцию скриптов (скриптов уровня запуска, или инициализационных скриптов), которые нужно запустить, когда вы входите или покидаете уровень запуска.
В Gentoo существует семь определенных уровней запуска: три встроенных уровней запуска, и четыре уровня запуска определенных пользователем. Встроенные уровни запуска называются sysinit, shutdown и reboot, и делают именно то, что означают их имена — инициализируют систему, выключают систему и перезагружают систему.
Уровни запуска определенные пользователем это скрипты с соответствующей поддиректорией /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:
Код 1.6: Запускаем Postfix |
# /etc/init.d/postfix start |
Заметка: Только сервисы, которым нужен данный сервис будут остановлены или перезапущены. Другие зависимые сервисы (которые используют сервис, но не требуют его) будут оставлены нетронутыми. |
Если вы хотите остановить сервис, но не сервисы, которые от него зависит, вы можете использовать аргумент pause:
Код 1.7: Остановим Postfix, но оставим запущенными зависимые сервисы |
# /etc/init.d/postfix pause |
Если вы хотите посмотреть, какой статус у сервиса (started, stopped, paused,...), вы можете использовать аргумент status:
Код 1.8: Информация о статусе для postfix |
# /etc/init.d/postfix status |
Если информация о статусе говорит вам, что сервис запущен, но вы знаете, что он не запущен, то вы можете сбросить информацию о статусе в «stopped» с помощью аргумента zap:
Код 1.9: Сбрасываем информацию о статусе для postfix |
# /etc/init.d/postfix zap |
Чтобы также спросить, какие зависимости имеет сервис, вы можете использовать iuse или ineed. С помощью ineed вы можете увидеть сервисы, которые действительно необходимы для правильного функционирования сервиса. iuse, с другой стороны, показывает сервисы, которые могут быть использованы сервисом, но не необходимы для корректного функционирования.
Код 1.10: Требуем список всех необходимых сервисов, от которых зависит Postfix |
# /etc/init.d/postfix ineed |
Похожим образом, вы можете спросить, какие сервисы требуют какой-то сервис (needsme) или могут его использовать (usesme):
Код 1.11: Требуем список всех сервисов, которые требуют Postfix |
# /etc/init.d/postfix needsme |
Вы можете также спросить, какие зависимости необходимые сервису отсутствуют:
Код 1.12: Требуем список отсутствующих зависимостей для Postfix |
# /etc/init.d/postfix broken |