• Название:

    Gentoo x 86 Handbook


  • Размер: 0.18 Мб
  • Формат: ODT
  • или
  • Сообщить о нарушении / Abuse

    Осталось ждать: 10 сек.

Установите безопасный браузер



Gentoo Linux x86 Handbook


Версия от 04 августа 2012

Содержание:

  • Установка Gentoo
    В данной части вы научитесь, как установить Gentoo на вашу систему.

  • О установке Gentoo Linux
    Данная глава описывает подход к установке, который будет описан в данной книге.

  • Выбор правильного источника установки
    Вы можете установить Gentoo множеством способов. Данная глава описывает, как установить Gentoo с использованием минимального установочного CD.

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

  • Подготовка дисков
    Чтобы иметь возможность установить Gentoo, вы должны создать необходимые разделы. Эта глава описывает, как разбить диск для будущего использования.

  • Установка файлов Gentoo
    Установка Gentoo рабтает через архив stage3. В данной главе мы опишем, как можно распаковать архив stage3 и сконфигурировать Portage.

  • Установка базовой системы Gentoo
    После установки и конфигурирования stage3, у вас есть базовая система Gentoo. Данная глава описывает, как дойти до данного состояния.

  • Конфигурация ядра
    Ядро Linux это сердце каждого дистрибутива. Данная глава описывает, как сконфигурировать ваше ядро.

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

  • Установка необходимых системных приложений
    В данной главе мы поможем вам выбрать и установить некоторые важные приложения.

  • Конфигурация загрузчика
    Для архитектуры x86 существует несколько загрузчиков. Каждый из них имеет свой путь для конфигурации. Мы проведем вас через процесс конфигурации загрузчика, так, как вам нужно.

  • Окончание установки Gentoo
    Вы почти закончили. Мы только создадим одного (или более) пользователей для вашей системы.

  • Куда идти дальше?
    Теперь у вас есть система Gentoo, но что дальше?

  • Работа с Gentoo
    Научитесь, как работать с Gentoo: установка приложений, изменение переменных, изменение поведения Portage, и так далее.

  • Введение в Portage
    Данная глава описывает «простые» шаги, которые пользователю определенно нужно знать, чтобы поддерживать программное обеспечение на своей системе.

  • USE-флаги
    USE-флаги это очень важный аспект Gentoo. В данной главе вы научитесь работать с USE-флагами, и поймете, как USE-флаги взаимодействуют с вашей системой.

  • Возможности Portage
    Узнайте, какие возможности имеет Portage, такие как поддержка распределенной компиляции, ccache, и многое другое.

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

  • Переменные окружения
    В Gentoo вы легко можете настроить переменные окружения для вашей системы. Данная глава описывает, как это делать, а также описывает часто используемые переменные.

  • Расширенные возможности Portage

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

  • Работа с Portage
    Глава «Работа с Portage» дает полное описание Portage, приложение для работы с программами в Gentoo.

  • Файлы и каталоги
    Так как вы хотите полностью узнать Portage, вы должны знать, где он хранит свои файлы и данные.

  • Конфигурирование через переменные
    Portage можно полностью конфигурировать через различные переменные, которые вы можете установить в файле конфигурации, или как переменные окружения.

  • Смешение веток приложений
    Gentoo дает приложения, разделенные на несколько веток, в зависимости от стабильности и поддержки архитектур. Глава «Смешение веток приложений» объясняет, как данные ветки могут быть сконфигурированы, и как вы можете обойти данное разделение в отдельно взятом случае.

  • Дополнительные программы для Portage
    С Portage идут некоторые дополнительные программы, которые могут сделать ваш опыт с Gentoo еще лучше. Прочитайте, как использовать dispatch-conf и другие приложения.

  • Отход от официального дерева.
    Глава «Отход от официального дерева» дает вам некоторые подсказки по тому, как использовать свое собственное дерево Portage, как синхронизировать только те категории, которые вам нужны, вставлять пакеты, и многое другое.

  • Конфигурация сети Gentoo
    Подробное описание работы с сетью на Gentoo.

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

  • Расширенная конфигурация.
    Здесь мы научимся, как работает конфигурация, вам нужно это знать, прежде чем изучать главу «модульная сеть».

  • Модульная сеть
    Gentoo дает настраиваемую сеть — здесь вам расскажут, как выбирать различные клиенты DHCP, настраивать связи, мосты, VLANы и многое другое.

  • Беспроводные сети
    Конфигурация безпроводной сети может быть неочевидной. Мы надеемся, что вы заставите ее заработать!

  • Добавление функциональности
    Если вы хотите приключений, вы можете добавить свои функции к сети.

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

  • А. Установка Gentoo1. Об установке Gentoo Linux

    1.а. Введение.

    Добро пожаловать!

    Прежде всего, добро пожаловать в Gentoo. Вы входите в мир выбора и быстродействия. Gentoo полна выборов. Когда вы устанавливаете Gentoo, это становится ясно несколько раз — вы можете выбирать, сколько вы хотите компилировать сами, как устанавливать Gentoo, какой системный логгер вы хотите, и так далее.

    Gentoo это быстрый, современный метадистрибутив с чистым и настраиваемым дизайном. Gentoo построен на свободном программном обеспечении, и не скрывает от пользователей то, что находится под одеялом. Portage, система обслуживания пакетов, которую использует Gentoo, написана на Python, что означает, что вы запросто можете посмотреть и изменить исходный код. Система пакетов Gentoo использует исходный код (хотя поддержка для заранее скомпилированных пакетов тоже есть) и конфигурирование Gentoo производится через обычные текстовые файлы. Другими словами, открытость везде.

    Очень важно, чтобы вы представляли, какими могут быть выборы, которые заставляют работать Gentoo. Мы стараемся не заставлять вас делать ничего, чего бы вам не хотелось. Если вы все же считаете, что заставляем, напишите нам багрепорт.

    Структура установки

    Установка Gentoo может быть представлена как 10-шаговая процедура, описанная в главах
    2-11. Каждый шаг приводит систему к некоторому состоянию:

  • После шага 1, у вас будет рабочее окружение для установки Gentoo

  • После шага 2, ваше Интернет-соединение готово для установки Gentoo

  • После шага 3, ваши жесткие диски инициализированы для помещения на них вашей установки Gentoo.

  • После шага 4, ваше установочное окружение готово, и вы готовы сделать chroot в новое окружение.

  • После шага 5, базовые пакеты, которые одинаковы на всех установках Gentoo, будут установлены.

  • После шага 6, вы скомпилируете ваше ядро Linux.

  • После шага 7, вы написали большинство из ваших файлов конфигурации Gentoo.

  • После шага 8, необходимые системные приложения (которые вы сможете выбрать из красивого списка) установлены.

  • После шага 9, выбранный вами загрузчик был установлен и сконфигурирован, и вы залогинились в вашу новую установку Gentoo.

  • После шага 10, ваше окружение Gentoo Linux готово к работе.

  • Когда мы даем вам некоторый выбор, мы пытаемся объяснить вам, в чем состоят достоинства и недостатки. Мы затем даем выбор по умолчанию, и пишем «По умолчанию» в заголовке. Другие возможности обозначаются как «Альтернатива». Не думайте, что то, что мы предлагаем по умолчанию, это то, что мы рекомендуем. Однако это то, что, как мы думаем, будет использовать большинство пользователей.

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

    Какой мой выбор?

    Вы можете установить Gentoo множеством различных способов. Вы можете скачать и установить один из установочных CD, установить с уже установленной системы, установить с загрузочного CD не-Gentoo (например Knoppix), с помощью загрузки по сети, с восстановительной дискеты, и так далее.

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

    Заметка: Для помощи по другим возможностям установки, включая использование не-Gentoo CD, прочитайте документ «Альтернативное описание установки» - http://www.gentoo.org/doc/en/altinstall.xml?style=printable.

    Если вы хотите выполнить установку без сети, вам нужно прочитать Хэндбук по адресу http://www.gentoo.org/doc/en/handbook/2008.0/?style=printable, где содержатся инструкции для установки в отсутствие сети.

    Также, если вы планируете использовать GRP (Платформа Gentoo, коллекция заранее собранных пакетов, для немедленного использования после установки Gentoo), вам нужно выполнить инструкции из Хэндбука по адресу http://www.gentoo.org/doc/en/handbook/2008.0/?style=printable.

    Мы также предоставляем документ «Секреты установки Gentoo» по адресу http://www.gentoo.org/doc/en/gentoo-x86-tipsntricks.xml?style=printable, который может быть полезно прочитать. Если вы опытный пользователь Gentoo, и вам нужно лишь краткое описание установки, используйте наш документ по быстрой установке с нашей страницы с документацией по адресу http://www.gentoo.org/doc/en/index.xml?style=printable, если ваша архитектура имеет такой документ.

    Также у вас есть несколько возможностей: Вы можете скомпилировать всю систему с нуля, или использовать заранее собранное окружение, чтобы запустить окружение Gentoo моментально. И, конечно, у вас есть промежуточные решения, в которых вы не компилируете все, а начинаете с некоторой полуготовой системы.

    Проблемы?

    Если вы найдете проблему в установке (или в документации по установке), пожалуйста, посетите нашу систему багтрекинга по адресу http://bugs.gentoo.org/, и проверьте, не известен ли уже баг. Если нет, пожалуйста, создайте багрепорт, чтобы мы могли об этом позаботиться. Не бойтесь разработчиков, которые будут закреплены за вашим багом/багами — они обычно не едят людей.

    Заметьте, что, хотя документ, который вы читаете, зависит от архитектуры, он будет содержать ссылки и на другие архитектуры тоже. Это потому что большая часть Gentoo Handbook использует исходный код, который одинаков для всех архитектур (чтобы избежать лишней работы и поддержания ресурсов разработки). Мы попытаемся свести это к минимуму, чтобы избежать недопониманий.

    Если вы не уверены, является ли проблема проблемой пользователя (то есть, некоей ошибкой, которую вы совершили, несмотря на тщательное прочтение документации), или проблемой некоторой программы (то есть, некоторой ошибки, которую допустили мы, несмотря на тщательное тестирование установки/документации), вы можете присоединиться к #gentoo на irc.freenode.net. Конечно, даже если ошибок у вас нет, вы все равно можете присоединиться.

    Если у вас есть вопрос, касающийся Gentoo, проверьте наши частозадаваемые вопросы, находящиеся по адресу http://www.gentoo.org/doc/en/faq.xml?style=printable, то есть, в нашей документации http://www.gentoo.org/doc/en/?style=printable. Вы также можете посмотреть FAQ по адресу http://forums.gentoo.org/viewforum.php?f=40, находящийся на наших форумах http://forums.gentoo.org/. Если вы не сможете найти там ответа, тогда спросите на #gentoo, нашем IRC-канале на irc.freenode.net. Да, некоторые из нас фрики, сидящие на IRC.

    2. Выбор правильного источника установки.

    2.а. Требования к железу

    Введение

    Прежде чем мы начнем, сначала перечислим, какие требования к железу предъявляются, чтобы успешно установить Gentoo на ваш компьютер.

    Требования к железу

    CPU

    Память

    Дисковое пространство

    Пространство под Swap

    Минимальный CD

    LiveCD

    i486 или позже

    i686 или позже

    64 MB

    256 MB

    1.5 GB (не считая пространства под swap)

    По крайней мере 256Мб

    2.b. Установочные CD Gentoo

    Введение

    Установочные CD Gentoo это загрузочные CD, которые содержат самодостаточное окружение Gentoo. Они позволяют вам загрузить Linux с CD. В течение процесса загрузки определяется ваше аппаратное обеспечение и загружаются необходимые драйвера. Они поддерживаются разработчиками Gentoo.

    Все установочные CD позволяют вам загрузиться, настроить сеть, разбить разделы и начать установку Gentoo из Интернет.

    Минимальный установочный CD Gentoo

    Минимальный установочный CD называется install-x86-minimal-<release>.iso и занимает только 104Мб места. Вы можете использовать данный установочный CD для установки Gentoo, но только с уже рабочим Интернет-соединением.

    LiveDVD c Gantoo Linux

    Каждые 6 месяцев (или около того) проектом Gentoo Ten выпускается специальный DVD который тоже может использоваться для установки Gentoo. Инструкции, описанные ниже подразумевают что вы используете минимальный установочный CD, поэтому в случае DVD могут быть немного неверными. Однако LiveDVD (или любое другое загружаемое окружение Linux) поддерживает выход в командую строку просто командой su — или sudo -i в терминале.

    Архив tar со Stage3

    Архив tar со stage3 это архив, содержащий минимальное окружение Gentoo, подходящее для продолжения установки Gentoo, используя инструкции из данного документа. Ранее Хэндбук Gentoo описывал установку с использованием одного из трех таких архивов. Хотя Gentoo все еще предлагает архивы со Stage1 и Stage2, официальный метод установки использует архив tar со Stage3. Если вы заинтересованы в установке Gentoo с использованием архива Stage1 или Stage2, прочитайте FAQ по Gentoo на странице http://www.gentoo.org/doc/en/faq.xml?style=printable#stage12, раздел «How do I Install Gentoo Using a Stage1 or Stage2 Tarball?»

    Архивы tar со Stage3 могут быть скачаны с releases/x86/autobuilds/current-stage3/ на любом из официальных зеркал Gentoo (http://www.gentoo.org/main/en/mirrors.xml?style=printable) и не присутствуют на LiveCD.

    2.с. Скачайте, запишите, и загрузитесь с установочного CD Gentoo

    Скачивание и запись установочных CD

    Вы выбрали использовать установочный CD Gentoo. Мы начнем с загрузки и записи выбранного установочного CD. Ранее мы обсудили, что есть несколько установочных CD, но где их найти?

    Вы можете скачать любой установочный CD с одного из наших зеркал (http://www.gentoo.org/main/en/mirrors.xml?style=printable). Установочные CD находятся в каталоге releases/x86/autobuilds/current-iso/.

    В данном каталоге вы найдете файлы ISO. Это полные CD-образы, которые вы можете записать на CD-R.

    В случае, если вы хотите проверить, правильно ли скачался файл или нет, вы можете проверить его контрольную сумму MD5, и сравнить ее с контрольной суммой MD5, которую даем мы (такой, как install-x86-minimal-<release>.iso.DIGESTS). Вы можете проверить контрольную сумму с помощью программы md5sum под Linux/Unix и md5sum (http://www.etree.org/md5com.html) под Windows.

    Другим способом проверить правильность скачанного файла будет использование GnuPG для проверки криптографической сигнатуры, которую мы предоставляем (файлы, оканчивающиеся на .asc). Скачайте файл с сигнатурой, и получите публичные ключи, ID которых вы можете найти на сайте http://gentoo.org/proj/en/releng/index.html.

    Код 3.1. Получение публичного ключа.

    (… Подставьте ID ключа тем значением, которое вы нашли на вышеозначенном сайте)

    $ gpg --keyserver subkeys.pgp.net --recv-keys 96D8BF6D 2D182910 17072058

    Теперь проверьте сигнатуру

    Код 3.2. Проверка файлов.

    (Проверяем криптографическую сигнатуру)

    $ gpg --verify <downloaded iso.DIGESTS.asc>

    (Проверяем контрольную сумму)

    $ sha1sum -c <downloaded iso.DIGESTS.asc>

    Чтобы записать скачанные ISO, вам нужно выбрать прямую запись. Как это сделать сильно зависит от программы. Мы обсудим cdrecord и K3B здесь, для более подробной информации обратитесь к FAQ (http://www.gentoo.org/doc/en/faq.xml?style=printable#isoburning)

  • В cdrecord вы просто набираете cdrecord dev=/dev/hdc <downloaded iso file> (замените /dev/hdc на путь к вашему устройству CD-RW)

  • В K3B выберите Tools > Burn CD Image. Затем вы выбираете ваш файл ISO в области «Image to Burn». Затем нажмите Start.

  • Загрузка с установочного CD

    Как только вы записали ваш установочный CD, самое время загрузиться с него. Выньте все CD из вашего CD-привода, перезагрузите систему и войдите в BIOS. Это обычно делается нажатием DEL, F1 или ESC, в зависимости от вашего BIOS. Внутри BIOS измените порядок загрузки так, чтобы CD-ROM опрашивался раньше, чем жесткий диск. Это часто находится в разделе CMOS Setup. Если вы этого не сделаете, ваша система просто перезагрузится с жесткого диска, игнорируя CD-ROM.

    Теперь поместите установочный CD в устройство CD-ROM и перезагрузитесь. Вы увидете подсказку (>). В этом месте вы можете нажать Enter и продолжить процесс загрузки с опциями загрузки по умолчанию, или загрузить установочный CD со своими опциями загрузки, указав ядро, за которым следуют опции загрузки, и затем, нажать Enter.

    Когда подсказка будет показано, у вас есть выбор — показать все доступные ядра (F1) и загрузочные опции (F2). Если вы не сделаете выбор в течение 20 секунд (не запросите отображение информации или использование ядра), то LiveCD продолжит загрузку с диска. Это позволяет установке перезагружаться и пробовать установленное окружение без необходимости удалять CD из привода (что есть очень хорошо для удаленных установок).

    Мы упомянули, что можно задавать ядро. На нашем установочном CD существует несколько ядер. По умолчанию загружается gentoo. Другие ядра нужны для специфического железа, и варианты -nofb с отключенным фреймбуфером.

    Ниже вы найдете короткий обзор существующих ядер:

    Ядро

    gentoo

    gentoo-nofb

    memtest86

    Описание

    Ядро 2.6 по умолчанию с поддержкой нескольких CPU

    То же, что и Gentoo, но без поддержи фреймбуфера

    Проверка вашей оперативной памяти на ошибки.

    Также вы можете задать опции ядра. Они отражают необязательные настройки, которые вы можете (де)активировать по желанию.

    Опции по железу:

    acpi=on

    Это загружает поддержку ACPI, а также запускает демон acpid при загрузке. Это необходимо только если ваша система требует ACPI для нормальной работы. Это не необходимо для поддержки Hyperthreading.

    acpi=off

    Полностью отключает ACPI. Это полезно на некоторых старых системах, а также необходимо для использования APM. Это также отключит любую поддержку HyperThreading вашего процессора.

    console=X

    Эта опция устанавливает доступ по последовательной консоли. Первая опция это устройство, обычно ttyS0 на x86, за которой следуют любые опции соединения, разделенные запятами. Опции по умолчанию 9600,8,n,1.

    dmraid=X

    Это позволяет передавать опции в устройствораспределяющую RAID-подсистему. Опции должны находиться в кавычках.

    doapm

    Это загружает поддержку APM драйвера. Для этого вы также должны использовать acpi=off.

    dopcmcia

    Это загружает поддержку для PCMCIA и железа Cardbus, а также запускает cardmgr для PCMCIA при загрузке. Это необходимо только при загрузке с устройств PCMCIA/Cardbus.

    doscsi

    Это загружает поддержку для большинства SCSI-контроллеров. Также это требование для загрузки большинства USB-устройств, так как они используют подсистему SCSI ядра.

    sda=stroke

    Это позволяет вам распределять место на всем жестком диске, даже если BIOS не поддерживает большие диски. Данная опция используется только на машинах со старым BIOS. Замените sda на устройство, для которого нужно включить данную опцию.

    ide=nodma

    Это заставляет отключить DMA в ядре, а необходимо некоторым чипсетам IDE, а также некоторым устройствам CDROM. Если ваша система испытывает трудности при чтении с вашего IDE CDROM, попробуйте данную опцию. Кроме того, это также отключает выполнение настроек hdparm по умолчанию.

    noapic

    Это отключает Advanced Programmable Interrupt Controller (APIC), который присутствует на новых материнских платах. Известно, что это вызывает некоторые проблемы на старом железе.

    nodetect

    Это отключает все автоопределение, проводимое при загрузке с CD, включая автоопределение устройств и опрос DHCP. Это полезно для выполнения дебага неработающего CD или драйвера.

    nodhcp

    Это отключает опрос DHCP на найденных сетевых картах. Это полезно в сетях только со статическими адресами.

    nodmraid

    Отключает поддержку устройствораспределителя RAID, такого, который используется для IDE/SATA RAID-контроллеров.

    nofirewire

    Это отключает загрузку модулей Firewire. Это должно быть необходимо только если ваше железо FireWire вызывает проблемы при загрузке с CD.

    nogpm

    Это отключает поддежку мыши консоли gpm.

    nohotplug

    Это отключает загрузку инициализационных скриптов hotplug и coldplug при загрузке. Это полезно для выполнения дебага не работающего CD или драйвера.

    nokeymap

    Это отключает выбор раскладки клавиатуры, используемой для выбора не-US раскладок.

    nolapic

    Это отключает локальный APIC на однопроцессорных ядрах.

    nosata

    Это отключает загрузку модулей Serial ATA. Это используется, если ваша система испытывает проблемы с подсистемой SATA.

    nosmp

    Это отключает SMP, или Symmetric Multiprocessing, на ядрах, которые поддерживают SMP. Это полезно для отладки проблем, связанных с SMP на некоторых драйверах и материнских платах.

    nosound

    Это отключает поддержку звука и настроек громкости. Это полезно для систем, где поддержка звука вызывает проблемы.

    nousb

    Это отключает автозагрузку USB-модулей. Это полезно для отладки проблем с USB.

    slowusb

    Это добавляет некоторые дополнительные паузы в процесс загрузки для медленных USB-CDROM'ов, например в IBM BladeCenter.

    Работа с томом/устройством:

    dolvm

    Это включает поддержку Linux's Logical Volume Management (LVM).

    Другие опции:

    debug

    Включает отладочный код. Это может стать проблемой, так как выводит множество данных на экран.

    docache

    Это кэширует всю запускаемую часть CD в ОЗУ, что позволяет вам umount /mnt/cdrom, и смонтировать другой CDROM. Данная опция требует, чтобы у вас было по крайней мере в два раза больше памяти, чем размер CD.

    doload=X

    Это заставляет начальный рамдиск загрузить любой обозначенный модуль, а также его зависимости. Замените X на имя модуля. Несколько модулей можно задать через запятую.

    dosshd

    Запускает при загрузке sshd, что полезно для автоматических установок.

    passwd=foo

    Устанавливает то, что следует за знаком равенства как пароль root, что необходимо для dosshd, так как мы выбираем случайный пароль root.

    noload=X

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

    nonfs

    Отключает запуск portmap/nfsmount при загрузке

    nox

    Это заставляет LiveCD, в котором есть X-сервер не запускать X автоматически, а перейти в командную строку.

    scandelay

    Это заставляет CD остановиться на 10 секунд в некоторых местах загрузочного процесса, чтобы позволить медленным устройствам инициализироваться и быть доступными для использования.

    scandelay=X

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

    Заметка: CD проверит «no*» опции перед «do*» опциями, так что вы можете переназначить любую опцию в том порядке, каком хотите.

    Теперь загрузитесь с вашего CD, выберите ядро (если выс не устраивает ядро gentoo по умолчанию) и опции загрузки. Как пример, мы покажем вам, как загрузить ядро gentoo с dopcmcia как параметры ядра:

    Код 3.3: Загрузка с установочного CD

    boot: gentoo dopcmcia

    Затем вы увидете загрузочный экран и прогрессбар. Если вы устанавливаете Gentoo на систему с не-американской клавиатурой, удостоверьтесь, что вы сразу же нажали Alt-F1, чтобы переключиться на расширенный режим, и проследовали подсказке. Если никакого выбора не было сделано за 10 секунд, то настройка по умолчанию (клавиатура US) будет выбрана, и процесс загрузки продолжится. Как только процесс загрузки завершится, вы автоматически зайдете в «Живой» Gentoo Linux как «root», суперпользователь. Вы должны иметь подсказку root («#») на текущей консоли, а также можете переключиться на другие консоли, нажимая Alt-F2, Alt-F3 и Alt-F4. Вернитесь на ту консоль, с которой вы начали, нажав Alt-F1.

    Дополнительная конфигурация железа

    Когда установочный CD загрузится, он попытается определить все ваши устройства, и загрузить необходимые модули ядра для поддержки вашего железа. В большинстве случаев, это работает хорошо. Однако, в некоторых случаях он может не загрузить модули ядра, которые вам нужны. Если автодетект PCI пропустил некоторое ваше оборудование, вам необходимо загрузить необходимые модули ядра вручную.

    В следующем примере мы попытаемся загрузить модуль 8139too (поддержка некоторых видов сетевых интерфейсов)

    Код 3.4: Загрузка модулей ядра

    # modprobe 8139too

    Необязательно: Пользовательские аккаунты

    Если вы планируете давать другим людям доступ к вашему установочному окружению, либо вы хотите вступить в беседу с использованием Irssi без привилегий root (по соображениям безопасности), вам нужно создать необходимые пользовательские аккаунты и изменить пароль root.

    Чтобы изменить пароль root, используйте утилиту passwd:

    Код 3.5: Изменяем пароль root

    # passwd

    New password: (Enter your new password)

    Re-enter password: (Re-enter your password)

    Чтобы создать аккаунт пользователя, сначала мы вводим их данные, за которыми следует пароль. Мы используем useradd и passwd для этих целей. В следующем примере, мы создаем пользователя, называемого «john».

    Код 3.6: Создаем аккаунт пользователя

    # useradd -m -G users john

    # passwd john

    New password: (Enter john's password)

    Re-enter password: (Re-enter john's password)

    Вы можете изменить вашего пользователя с root на заново созданный, используя su:

    Код 3.7: Меняем пользователя

    # su - john

    Необязательно: Просмотр документации во время установки

    Если вы хотите просматривать Gentoo Handbook в процессе установки, удостоверьтесь, что вы создали аккаунт пользователя (смотри «Необязательно: Пользовательские аккаунты»). Затем нажмите Alt-F2, чтобы перейти в новый терминал.

    Вы можете смотреть данный документ, используя links, как только вы завершите главу «Конфигурация сети» (иначе вы не сможете выйти в Интернет, чтобы просмотреть документ).

    Код 3.8: Просмотр онлайн-документации

    # links http://www.gentoo.org/doc/en/handbook/handbook-x86.xml

    Вы можете вернуться в изначальный терминал, нажав Alt-F1.

    Необязательно: Запуск демона SSH

    Если вы хотите позволить другим пользователям иметь доступ к вашему компьютеру в процессе установки Gentoo (возможно, потому что эти пользователи будут помогать вам устанавливать Gentoo, или, даже, делать это для вас), вам нужно создать пользовательский аккаунт для них и, возможно, даже дать им ваш пароль root (делайте это только если вы полностью доверяете этому пользователю).

    Чтобы запустить демон SSH, запустите следующую команду:

    Код 3.9: Запускаем демон SSH

    # /etc/init.d/sshd start

    Чтобы иметь возможность использовать SSHD, сначала вам нужно настроить вашу сеть. Продолжайте со следующей главы «Конфигурация сети».

    3. Конфигурация сети

    3.a. Автоматическое определение сети

    Может оно уже работает?

    Если ваша система подключена к сети Ethernet с помощью сервера DHCP, очень вероятно, что ваша сетевая конфигурация была настроена для вас автоматически. Если так, вы можете использовать преимущество множества команд, использующих сеть на установочном CD, таких как ssh, scp, ping, irssi, wget и links, а также множество других.

    Если сеть была сконфигурирована для вас, то команда /sbin/ifconfig должна отобразить некоторые сетевые интерфейсы, кроин lo0, например eth0:

    Код 1.1: /sbin/ifconfig для работающей сетевой конфигурации.

    # /sbin/ifconfig

    (...)

    eth0 Link encap:Ethernet HWaddr 00:50:BA:8F:61:7A

    inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0

    inet6 addr: fe80::50:ba8f:617a/10 Scope:Link

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0

    TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0

    collisions:1984 txqueuelen:100

    RX bytes:485691215 (463.1 Mb) TX bytes:123951388 (118.2 Mb)

    Interrupt:11 Base address:0xe800

    Необязательно: Сконфигурируйте прокси

    Если вы выходите в Интернет через прокси, вам может понадобиться указать информацию о прокси в течение инсталляции. Определить прокси очень просто: вам только нужно определить переменную, которая содержит информацию о прокси-сервере.

    В большинстве случаев, вы можете просто определить переменные, указав имя хоста сервера. В примере мы предполагаем, что прокси называется proxy.gentoo.org и работает на порту 8080.

    Код 1.2: Определение прокси-серверов.

    (If the proxy filters HTTP traffic)

    # export http_proxy="http://proxy.gentoo.org:8080"

    (If the proxy filters FTP traffic)

    # export ftp_proxy="ftp://proxy.gentoo.org:8080"

    (If the proxy filters RSYNC traffic)

    # export RSYNC_PROXY="proxy.gentoo.org:8080"

    Если ваша прокси требует имени пользователя и пароля, вы должны использовать следующий синтаксис для переменной:

    Код 1.3: Добавление имени пользователя/пароля к переменной с прокси.

    http://username:password@proxy.gentoo.org:8080

    Проверка сети

    Вы можете захотеть попробовать пропинговать DNS-сервер вашего провайдера (который находится в /etc/resolv.conf) и веб-сайт по вашему выбру, просто, чтобы удостовериться, что ваши пакеты достигают сети, разрешение имен DNS работает корректно, и так далее.

    Код 1.4: Дальнейший тест сети

    # ping -c 3 www.gentoo.org

    Если теперь вы можете использовать сеть, вы можете пропустить остаток данной главы, и продолжить читать следующую главу «Подготовка дисков». Если нет — продолжайте читать.

    3.b. Автоматическая конфигурация сети

    Если ваша сеть не начала работать сразу, некоторые диски для установки позволяют вам использовать net-setup (для обычных или беспроводных сетей), pppoe-setup (для пользователей ADSL) или pptp (для пользователей PPTP — существует на x86, amd64, alpha, ppc и ppc64).

    Если ваш установочный диск не содержит никакой из этих инструментов, или ваша сеть все еще не функционирует, продолжайте с раздела «Ручная настройка сети».

  • Обычные пользователи Ethernet должны продолжить с раздела «По умолчанию: Используем net-setup»

  • Пользователи ADSL должны продолжить с раздела «Альтернатива: Используем PPP»

  • Пользователи PPTP должны продолжить с раздела «Альтернатива: Используем PPTP»

  • По умолчанию: Используем net-setup

    Самым простым вариантом настроить сеть, если она не настроилась автоматически, будет запустить скрипт net-setup.

    Код 2.1: Запускаем скрипт net-setup

    # net-setup eth0

    net-setup спросит вас некоторые вопросы про окружение вашей сети. Когда все закончено, у вас должно быть рабочее сетевое соединение. Проверьте ваше сетевое соединение, как было показано раньше. Если тесты закончились успешно, поздравляем! Теперь вы готовы устанавливать Gentoo. Пропустите остальную часть данной главы, и продолжайте читать, начиная с главы «Подготовка дисков».

    Если ваша сеть все еще не работает, продолжайте читать раздел «Ручная настройка сети».

    Альтернатива: Используем PPP

    Так как вам может понадобится PPPoE для соединения с Интернетом, установочный CD (любая версия) упростил для вас это, включив ppp. Используйте скрипт pppoe-setup для конфигурации вашего соединения. Вас спросят имя устройства, которое подключено к вашему adsl-модему, ваше имя пользователя и пароль, IP адрес DNS-серверов, и нужен ли вам базовый файрвол, или нет.

    Код 2.2: Используем ppp

    # pppoe-setup

    # pppoe-start

    Если что-то пойдет не так, дважды проверьте, что вы правильно ввели ваше имя пользователя и пароль, заглянув в /etc/ppp/pap-secrets или /etc/ppp/chap-secrets, а также удостоверьтесь, что вы используете правильное ethernet-устройство. Если ваше ethernet-устройство не существует, вам может понадобиться загрузить необходимые сетевые модули. В этом случае, вам следует продолжить читать раздел «Ручная настройка сети», так как мы объясним, как загружать необходимые модули там.

    Если все заработало, продолжайте читать с главы «Подготовка дисков».

    Альтернатива: Используем PPTP

    Если вам нужна поддержка PPTP, вы можете использовать pptpclient, который находится на нашем установочном CD. Но сперва нужно удостовериться, что ваша конфигурация правильна. Отредактируйте /etc/ppp/pap-secrets или /etc/ppp/chap-secrets, чтобы они содержали правильную комбинацию имя пользователя/пароль:

    Код 2.3: Редактируем /etc/ppp/chap-secrets

    # nano -w /etc/ppp/chap-secrets

    Затем измените /etc/ppp/options.pptp, если необходимо:

    Код 2.4: Редактируем /etc/ppp/options.pptp

    # nano -w /etc/ppp/options.pptp

    Когда все это сделано, просто запустите pptp (вместе с опциями, которые вы не могли установить в options.pptp), чтобы соединиться с сервером:

    Код 2.5: Соединяемся с dial-in сервером

    # pptp <server ip>

    Теперь продолжайте с главы «Подготовка дисков»

    3.с. Ручная настройка сети

    Загрузка необходимых сетевых модулей

    Когда установочный CD загружается, он пытается определить все ваше железо, и загрузить необходимые модули ядра (драйвера) для поддержки вашего железа. В большинстве случаев он работает очень хорошо. Однако, в некоторых случаях, он может не загрузить все модули ядра, которые вам нужны.

    Если net-setup или pppoe-setup не сработали, то возможно, что ваша сетевая карта не была автоматически найдена. Это означает, что вам необходимо загрузить нужные модули ядра вручную.

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

    Код 3.1: Поиск модулей

    # ls /lib/modules/`uname -r`/kernel/drivers/net

    Если вы найдете драйвер для вашей сетевой карты, используетй modprobe, чтобы загрузить модуль ядра:

    Код 3.2: Используем modprobe для загрузки модуля ядра

    (Например, загрузим модуль pcnet32)

    # modprobe pcnet32

    Для проверки того, что ваша сетевая карта теперь определяется, используйте ifconfig. Определившаяся сетевая карта даст вывод, похожий на этот:

    Код 3.3: Проверка существования вашей сетевой карты, успешная.

    # ifconfig eth0

    eth0 Link encap:Ethernet HWaddr FE:FD:00:00:00:00

    BROADCAST NOARP MULTICAST MTU:1500 Metric:1

    RX packets:0 errors:0 dropped:0 overruns:0 frame:0

    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:0

    RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

    Если, однако, вы получите следующую ошибку, ваша сетевая карта не определилась:

    Код 3.4: Проверка существования вашей сетевой карты, не успешная.

    # ifconfig eth0

    eth0: error fetching interface information: Device not found

    Если у вас несколько сетевых карт в вашей системе, они будут названы eth0, eth1 и т. д. Удостоверьтесь, что сетевая карта, которую вы хотите использовать, хорошо работает, и помните, что нужно использовать именно ее название в оставшейся части документа. Мы предположим, что используется сетевая карта eth0.

    Предположив, что теперь у вас есть определяющаяся сетевая карта, вы можете повторить net-setup или pppoe-setup еще раз (они сейчас должны заработать), но для «крутых перцев» среди вас, мы объясним, как сконфигурировать свою сеть вручную.

    В зависимости от настроек вашей сети, прочитайте один из следующих разделов:

  • Использование DHCP, для автоматического получения IP

  • Готовимся к беспроводному доступу, если у вас есть беспроводная карта

  • Понимание сетевой терминологии — объясняет вам то, что вы должны знать о сети.

  • Использование ifconfig и route объясняет, как настроить вашу сеть вручную

  • Использование DHCP

    DHCP (Протокол динамического конфигурирования хоста) позволяет автоматически получать информацию о сети (IP адрес, сетевую маску, широковещательный адрес, шлюзы, серверы имен, и т. д.). Это работает только если в вашей сети есть DHCP сервер (или если ваш провайдер предоставляет сервис DHCP). Чтобы сетевой интерфейс получил эту информацию автоматически, используйте dhcpd:

    Код 3.5: Используем dhcpcd

    # dhcpcd eth0

    Some network admins require that you use the

    hostname and domainname provided by the DHCP server.

    In that case, use

    # dhcpcd -HD eth0

    Если это работает (попробуйте выполнить пинг до некоторого интернет-сервера, например Google), тогда все установлено и готово к продолжению. Пропустите остаток данного раздела, и переходите к главе «Подготовка дисков».

    Готовимся к беспроводному доступу

    Заметка: Поддержка команды iwconfig существует только на установочных CD на x86, amd64 и ppc. Вы все равно можете заставить сеть работать, следуя инструкциям проекта linux-wlan-ng (ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/README)

    Если вы используете беспроводную (802.11) карту, вам может понадобиться сконфигурировать ваши беспроводные настройки перед дальнейшим продвижением. Чтобы посмотреть текущие беспроводные настройки на вашей карте, вы можете использовать iwconfig. Запуск iwconfig может показать что-то вроде:

    Код 3.6: Вывод текущих беспроводных настроек

    # iwconfig eth0

    eth0 IEEE 802.11-DS ESSID:"GentooNode"

    Mode:Managed Frequency:2.442GHz Access Point: 00:09:5B:11:CC:F2

    Bit Rate:11Mb/s Tx-Power=20 dBm Sensitivity=0/65535

    Retry limit:16 RTS thr:off Fragment thr:off

    Power Management:off

    Link Quality:25/10 Signal level:-51 dBm Noise level:-102 dBm

    Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx

    excessive retries:237 Invalid misc:350282 Missed beacon:84

    Заметка: Некоторые беспроводные карты имеют имя устройство wlan0 или ra0, вместо eth0. Запустите iwconfig без всяких параметров командной строки, чтобы определить правильное имя устройства.

    Для большинства пользователей здесь есть только две настройки, которые может быть необходимо изменить, ESSID (то есть, имя беспроводной сети) и ключ WEP. Если ESSID и точка доступа уже соответствуют тому, какая точка доступа у вас, и вы не используете WEP, то ваше беспроводное соединение работает. Если вам нужно изменить ваш ESSID или добавить ключ WEP, вы можете выполнить следующие команды:

    Заметка: Если ваша беспроводная сеть установлена с использованием WPA или WPA2, вам нужно использовать wpa_supplicant. Для более детальной информации по конфигурации беспроводной сети в Gentoo Linux, прочитайте главу «Беспроводные сети» в Gentoo Handbook.

    Код 3.7: Изменение ESSID и/или добавление ключа WEP

    (Это установит имя сети в GentooNode)

    # iwconfig eth0 essid GentooNode

    (Это устанавливает шестнадцатеричный ключ WEP)

    # iwconfig eth0 key 1234123412341234abcd

    (Это установит ASCII-ключ — добавьте к нему s: в начале)

    # iwconfig eth0 key s:some-password

    Затем вы можете подтвердить ваши беспроводные настройки, снова использовав iwconfig. Как только вы настроили беспроводную сеть, вы можете продолжить конфигурацию сети на уровне IP, как описано в следующем разделе «Понимание сетевой терминологии», или используйте программу net-setup, как было описано выше.

    Понимание сетевой терминологии

    Заметка: Если вы знаете ваш IP адрес, широковещательный адрес, сетевую маску и серверы имен, то вы можете пропустить данный раздел, и продолжить, начиная с «Использование ifconfig и route»

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

    В сети, хосты определяются по их IP адресам. Такой адрес является комбинацией четырех чисел между 0 и 255. Ну, так мы его воспринимаем. На самом деле, IP адрес состоит из 32 бит (единиц и нулей). Посмотрим на пример:

    Код 3.8: Пример IP адреса

    IP адрес (числа): 192.168.0.2

    IP адрес (биты): 11000000 10101000 00000000 00000010

    -------- -------- -------- --------

    192 168 0 2

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

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

    Код 3.9: Пример разделения сети/хоста.

    IP адрес : 192 168 0 2

    11000000 10101000 00000000 00000010

    Маска: 11111111 11111111 11111111 00000000

    255 255 255 0

    +--------------------------+--------+

    Сеть Хост

    Другими словами, 192.168.0.14 это все еще часть нашей сети, а 192.168.1.2 — нет.

    Широковещательный адрес это IP адрес в той же сетевой части вашей сети, но с одними единицами в части хоста. Каждый хост в вашей сети прослушивает этот IP адрес. Он действительно используется для широковещательных пакетов.

    Код 3.10: Широковещательный адрес

    IP адрес : 192 168 0 2

    11000000 10101000 00000000 00000010

    Ш. адрес: 11000000 10101000 00000000 11111111

    192 168 0 255

    +--------------------------+--------+

    Сеть Хост

    Чтобы иметь возможность бродить по Интернету, вы должны знать, какой хост раздает в вашей сети соединение к Интернету. Этот хост называется «Шлюз». Так как это обычный хост, у него есть обычный IP адрес (например 192.168.0.1).

    Раньше мы сказали, что каждый хост имеет свой IP адрес. Чтобы достичь этого хоста по имени (а не IP адресу), вам нужен сервис, который преобразует имя (такое как dev.gentoo.org) в IP адрес (такой как 64.5.62.82). Такой сервис называется «сервис имен». Чтобы использовать такой сервис, вы должны определить необходимые серверы имен в файле /etc/resolv.conf.

    В некоторых случаях, ваш шлюз одновременно является сервером имен. Если это не так, вам нужно ввести сервера имен, которые вам даст ваш провайдер.

    В общем, вам нужна следующая информация, прежде чем продолжать:

    Что нужно

    Ваш IP адрес

    Сетевая маска

    Широковещательный адрес

    Шлюз

    Сервер(а) имен

    Пример

    192.168.0.2

    255.255.255.0

    192.168.0.255

    192.168.0.1

    195.130.130.5, 195.130.130.133

    Использование ifconfig и route

    Установка вашей сети состоит из трех шагов. Сначала мы назначаем себе IP адрес, используя ifconfig. Затем мы настраиваем местонахождение шлюза, используя route. Затем мы заканчиваем, помещая IP адреса серверов имен в /etc/resolv.conf.

    Чтобы назначить IP адрес, вам понадобится ваш IP адрес, широковещательный адрес и сетевая маска. Затем, выполните следующую команду, подставляя вместо ${IP_ADDR} ваш IP адрес, вместо ${BROADCAST} ваш широковещательный адрес и вместо ${NETMASK} вашу сетевую маску:

    Код 3.11: Используем ifconfig

    # ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up

    Теперь установим путь до шлюза, используя route. Подставьте вместо ${GATEWAY} IP адрес вашего шлюза:

    Код 3.12: Используем route

    # route add default gw ${GATEWAY}

    Теперь откройте /etc/resolv.conf вашим любимым редактором (в нашем примере мы используем nano):

    Код 3.13: Создаем /etc/resolv.conf

    # nano -w /etc/resolv.conf

    Теперь заполните ваши сервера имен, используя следующее, как шаблон. Удостоверьтесь, что вы заменили ${NAMESERVER1} и ${NAMESERVER2} на необходимые адреса серверов имен.

    Код 3.14: Шаблон /etc/resolv.conf

    nameserver ${NAMESERVER1}

    nameserver ${NAMESERVER2}

    Вот и все. Теперь проверьте вашу сеть, выполнив пинг какого-нибудь Интернет-сервера (например, Google). Если это сработает, поздравляем. Вы готовы к установке Gentoo. Продолжайте читать дальше главу «Подготовка дисков»

    4. Подготовка дисков

    4.a. Введение в блочные устройства

    Блочные устройства

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

    Вначале мы расскажем о блочных устройствах. Самое известное блочное устройство, наверное, то, которое отображает первый диск в Linux-системе, то есть /dev/sda. SCSI и Serial-ATA жесткие диски называются /dev/sd*, даже устройства IDE называются /dev/sd* в новом фреймворке ядра libata. Если вы используете старый фреймфорк, тогда ваше первое устройство IDE будет /dev/hda.

    Блочные устройства, перечисленные выше, представляют абстрактный интерфейс к диску. Программы пользователя могут использовать эти блочные устройства чтобы взаимодействовать с вашим диском, не обращая внимания на то, какой он — IDE, SCSI, или что-то еще. Программы могут просто адресовать данные на диске как последовательность 512-байтных блоков, доступных в произвольном порядке.

    Разделы

    Хотя теоретически возможно использовать весь диск, чтобы разместить вашу Linux-систему, это почти не применяется на практике. Вместо этого, полные дисковые блочные устройства разбиваются на более маленькие, более управляемые блочные устройства. На системах x86 они называются «разделы».

    Разделы делятся на три типа: главные (primary), расширенные (extended) и логические (logical)

    Главный раздел это раздел, который имеет свою информацию, сохраненную в MBR (главной загрузочной записи). Так как MBR это очень маленькая (512 байт), только четыре главные раздела могут быть определены (например, от /dev/sda1 до /dev/sda4).

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

    Логический раздел это раздел внутри расширенного раздела. Их определения не находятся в MBR, а определяются внутри расширенного раздела.

    Дополнительные опции

    Установочные CD x86 имеют поддержку LVM2. LVM2 увеличивает гибкость вашей настройки разделов. В течение дальнейшего изложения мы будем концентрироваться на «обычных» разделах, но все равно, хорошо знать, что LVM2 тоже поддерживается.

    4.b. Разрабатываем схему разделов

    Определяем схему разделов

    Если вы не заинтересованы в разработке схемы разделов для вашей системе, вы можете использовать схему разделов, которую мы используем в данной книге:

    Раздел

    /dev/sda1

    /dev/sda2

    /dev/sda3

    Файловая система

    Размер

    Описание

    ext2

    32M

    Загрузочный раздел

    (swap)

    512M

    Раздел swap

    ext3

    Оставшаяся часть диска

    Раздел root

    Если вы заинтересованы в том, чтобы узнать, насколько большим должен быть раздел, или, даже, узнать, сколько разделов вам нужно, читайте дальше. Иначе читайте «Использование fdisk для разбивки вашего диска» или «Использование parted для разбивки вашего диска» (и то и другое — средства разбивки, fdisk хорошо известен и стабилен, parted более новый, но поддерживает разделы большие 2TB).

    Сколько и какого размера?

    Число разделов сильно зависит от вашего окружения. Например, если у вас много пользователей, вы, скорее всего, захотите иметь /home отдельно, так как это увеличивает безопасность и делает проще бэкапы. Если вы устанавливаете Gentoo как почтовый сервер, ваш /var должен быть отдельным, так как вся почта сохраняется внутри /var. Хороший выбор файловой системы увеличит ваше быстродействие. Игровые сервера будут иметь отдельный /opt, так как большинство игровых серверов устанавливаются туда. Причина — похожа на ту, что мы указывали для /home — безопасность и бэкапы. Вы явно захотите сделать /usr большим — там не только находится большинство приложений, но и дерево Portage занимает около 500 мегабайт, не считая скачанных исходников, которые хранятся там же.

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

  • Вы можете выбрать наилучшую файловую систему для каждого раздела или диска

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

  • Если необходимо, проверки файловой системы будут быстрее, так как несколько проверок могут выполняться параллельно (хотя это больше относится к нескольким дискам, а не к нескольким разделам).

  • Безопасность может быть увеличена монтированием некоторых разделов или дисков только для чтения, с флагом nosuid (игнорируются биты setuid) или noexec (игнорируются биты запуска), и так далее.

  • Однако множественные разделы также имеют недостатки. Если они не сконфигурированы правильно, у вас будет система с огромным количеством свободного места на одном разделе и отсутствием его на другой. Другой проблемой является то, что отдельные разделы, особенно для важных точек монтирования, например /usr или /var, часто требуют загрузки некоторого кода в ОЗУ, чтобы смонтировать разделы прежде чем запустятся другие загрузочные скрипты. Это не всегда является проблемой, так что, учитывайте вашу ситуацию.

    Также существует лимит в 15 разделов для SCSI и SATA, если только вы не используете метки GPT.

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

    Код 2.1. Пример использования файловых систем

    $ df -h

    Filesystem Type Size Used Avail Use% Mounted on

    /dev/sda5 ext3 509M 132M 351M 28% /

    /dev/sda2 ext3 5.0G 3.0G 1.8G 63% /home

    /dev/sda7 ext3 7.9G 6.2G 1.3G 83% /usr

    /dev/sda8 ext3 1011M 483M 477M 51% /opt

    /dev/sda9 ext3 2.0G 607M 1.3G 32% /var

    /dev/sda1 ext2 51M 17M 31M 36% /boot

    /dev/sda6 swap 516M 12M 504M 2% <not mounted>

    (Неразбитое место для будущих использований: 2 GB)

    /usr почти заполнен (используется 83%), однако как только все программы установлены, /usr обычно сильно не растет. Хотя выделение нескольких гигабайт места под /var может показаться излишком, помните, что Portage использует этот раздел по умолчанию для компиляции пакетов. Если вы хотите держать /var с более приемлемым размером, таким как 1GB, вам нужно изменить вашу переменную PORTAGE_TMPDIR в /etc/portage/make.conf, чтобы она указывала на раздел с достаточным количеством свободного места для компиляции очень больших пакетов, таких, как OpenOffice.

    4.c. Использование fdisk для разбивки вашего диска

    Важно: Если ваше окружение будет работать с разделами больше чем 2TB, пожалуйста, используйте инструкции из раздела «Использование parted для разбивки вашего диска». Fdisk не умеет работать с такими большими разделами.

    Следующие части объясняют, как создать примерную схему разделов, используя fdisk. Мы говорили про то, что представляет из себя примерная схема раньше:

    Раздел

    /dev/sda1

    /dev/sda2

    /dev/sda3

    Описание

    Загрузочный раздел

    Раздел swap

    Раздел root

    Вы можете изменить схему разделов так, как вам необходимо.

    Просмотр текущей схемы разделов

    fdisk это популярный и мощный инструмент для разбивки вашего диска на разделы. Запустите fdisk с вашим диском (в нашем примере мы используем /dev/sda).

    Код 3.1: Запускаем fdisk

    # fdisk /dev/sda

    Как только вы попадете в fdisk, вас поприветствуют подсказкой, которая выглядит примерно так:

    Код 3.2. Подсказка fdisk

    Command (m for help):

    Нажмите p чтобы отобразить текущую конфигурацию разделов вашего диска:

    Код 3.3. Пример конфигурации разделов.

    Command (m for help): p

    Disk /dev/sda: 240 heads, 63 sectors, 2184 cylinders

    Units = cylinders of 15120 * 512 bytes

    Device Boot Start End Blocks Id System

    /dev/sda1 * 1 14 105808+ 83 Linux

    /dev/sda2 15 49 264600 82 Linux swap

    /dev/sda3 50 70 158760 83 Linux

    /dev/sda4 71 2184 15981840 5 Extended

    /dev/sda5 71 209 1050808+ 83 Linux

    /dev/sda6 210 348 1050808+ 83 Linux

    /dev/sda7 349 626 2101648+ 83 Linux

    /dev/sda8 627 904 2101648+ 83 Linux

    /dev/sda9 905 2184 9676768+ 83 Linux

    Command (m for help):

    Данный конкретный диск сконфигурирован на семь файловых систем Linux (каждая в своем разделе, записанная как «Linux»), а также раздел swap (записана как «Linux swap»).

    Удаление всех разделов

    Сначала мы удалим все имеющиеся разделы с диска. Нажмите d чтобы удалить раздел. Например, чтобы удалить уже существующий /dev/sda1:

    Код 3.4. Удаление раздела.

    Command (m for help): d

    Partition number (1-4): 1

    Раздел был помечен на удаление. Он больше не будет отображаться, если вы нажмете p, но он не будет удален, пока вы не запишете изменения. Если вы допустили ошибку, и хотите отменить разбивку без записи изменений, нажмите q и enter, и ваш раздел не будет удален.

    Теперь, предполагая, что вы, все же, хотите удалить все разделы на вашей системе, повторяйте нажимать p для вывода списка разделов, а затем нажимайте d и номер раздела, чтобы его удалить. В конце концов вы получите пустую таблицу разделов:

    Код 3.5. Пустая таблица разделов.

    Disk /dev/sda: 30.0 GB, 30005821440 bytes

    240 heads, 63 sectors/track, 3876 cylinders

    Units = cylinders of 15120 * 512 = 7741440 bytes

    Device Boot Start End Blocks Id System

    Command (m for help):

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

    Создаем загрузочный раздел

    Сначала мы создадим маленький загрузочный раздел. Нажмите n, чтобы создать новый раздел, затем p, чтобы выбрать главный раздел, затем 1, чтобы выбрать первый главный раздел. Когда вас спросят про первый цилиндр, нажмите enter. Когда вас спросят про последний цилиндр, введите +32M, чтобы создать раздел размером 32 мегабайта и установить его как загрузочный.

    Код 3.6. Создаем загрузочный раздел.

    Command (m for help): n

    Command action

    e extended

    p primary partition (1-4)

    p

    Partition number (1-4): 1

    First cylinder (1-3876, default 1): (Hit Enter)

    Using default value 1

    Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M

    Теперь, когда вы введете p, вы должны увидеть следующий список разделов:

    Код 3.7. Созданный загрузочный раздел

    Command (m for help): p

    Disk /dev/sda: 30.0 GB, 30005821440 bytes

    240 heads, 63 sectors/track, 3876 cylinders

    Units = cylinders of 15120 * 512 = 7741440 bytes

    Device Boot Start End Blocks Id System

    /dev/sda1 1 14 105808+ 83 Linux

    Нам нужно сделать этот раздел загрузочным. Нажмите a, чтобы установить флаг загрузки на раздел, и выберите 1. Если вы нажмете p снова, вы увидите, что * была помещена в колонку «Boot».

    Создаем swap раздел

    Теперь создадим раздел swap. Чтобы это сделать, введите n, чтобы создать новый раздел, затем p, чтобы сказать fdisk, что это главный раздел. Затем введите 2, чтобы создать второй главный раздел, /dev/sda2 в нашем случае. Когда вас спросят про последний цилиндр, введите +512M, чтобы создать раздел размером 512 Мб. После того, как вы это сделаете, нажмите t, чтобы установить тип раздела, 2, чтобы выбрать раздел, который вы только что создали, и введите 82, чтобы установить тип раздела в «Linux Swap». После выполнения данных шагов, при нажатии p должна показываться таблица разделов, которая будет выглядеть примерно так:\

    Код 3.8. Список разделов после создания раздела Swap.

    Command (m for help): p

    Disk /dev/sda: 30.0 GB, 30005821440 bytes

    240 heads, 63 sectors/track, 3876 cylinders

    Units = cylinders of 15120 * 512 = 7741440 bytes

    Device Boot Start End Blocks Id System

    /dev/sda1 * 1 14 105808+ 83 Linux

    /dev/sda2 15 81 506520 82 Linux swap

    Создаем root-раздел

    Наконец, давайте создадим root-раздел. Чтобы это сделать, нажмите n, чтобы создать новый раздел, затем p, чтобы сказать fdisk, что мы хотим главный раздел. Затем введите 3, чтобы создать третий главный раздел, в нашем случае /dev/sda3. Когда вас спросят про первый цилиндр, нажмите enter. Когда спросят про последний цилиндр, нажмите enter, чтобы создать раздел, который займет остаток пространства на вашем диске. После данных шагов, нажатие p должно показывать таблицу разделов, похожую на это:

    Код 3.9. Список разделов после создания root-раздела

    Command (m for help): p

    Disk /dev/sda: 30.0 GB, 30005821440 bytes

    240 heads, 63 sectors/track, 3876 cylinders

    Units = cylinders of 15120 * 512 = 7741440 bytes

    Device Boot Start End Blocks Id System

    /dev/sda1 * 1 14 105808+ 83 Linux

    /dev/sda2 15 81 506520 82 Linux swap

    /dev/sda3 82 3876 28690200 83 Linux

    Сохранение списка разделов

    Чтобы сохранить разбивку на разделы и выйти из fdisk, нажмите w.

    Код 3.10. Сохраняемся и выходим из fdisk.

    Command (m for help): w

    Теперь, когда ваши разделы созданы, вы можете продолжить с главы «Создаем файловые системы».

    4.d. Использование parted для разбивки вашего диска

    В данной главе, мы проведем вас через создание примерной компоновки разделов, о которой мы говорили раньше в данной главе. В отличие от предыдущего раздела, мы опишем метод использования приложения parted. Как parted, так и fdisk предлагают одинаковые функции, так что если вы разбили вашу систему на разделы, используя fdisk, вы можете пропустить данный раздел, и продолжить с главы «Создаем файловые системы».

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

    Раздел

    /dev/sda1

    /dev/sda2

    /dev/sda3

    Описание

    Загрузочный раздел

    Раздел swap

    Раздел root

    Вашу компоновку разделов вы можете сделать такой, как вам угодно.

    Просмотр текущей компоновки разделов

    Приложение parted это несколько более современный вариант fdisk. Оно предлагает более простой интерфейс для разбивки ваших дисков и поддерживает очень большие разделы (более чем 2Тб). Запустите parted с вашим дисков (в нашем примере мы используем /dev/sda).

    Пример 4.1. Запускаем parted

    # parted /dev/sda

    GNU Parted 2.3

    Using /dev/vda

    Welcome to GNU Parted! Type 'help' to view a list of commands.

    Чтобы прочитать про все опции, поддерживаемые parted, введите help и нажмите enter. А пока мы просто продолжим, попросив parted показать разделы, которые уже есть на выбранном диске. Для этого можно использовать команду print.

    Код 4.2. Примерный список разделов, показываемый parted

    (parted) print

    Model: SCSI Block Device

    Disk /dev/sda: 21.5GB

    Sector size (logical/physical): 512B/512B

    Partition Table: msdos

    Number Start End Size Type File system Flags

    1 512B 2148MB 2148MB primary ext4

    2 2148MB 3222MB 1074MB primary linux-swap(v1)

    3 3222MB 21.5GB 18.3GB primary lvm

    Необязательно: Установка метки GPT

    Большинство дисков на x86/amd64 используют метку msdos. Однако, если вы планируете создавать большие разделы (2Тб и больше), вам нужно использовать метку gpt (GUID Partition Type) для вашего диска. Используя parted, это можно выполнить с помощью команды mklabel gpt:

    Предупреждение: Измение типа раздела удалит все разделы с вашего диска. Все данные на диске будут потеряны.

    Код 4.3. Установка метки GPT

    (parted) mklabel gpt

    Удаляем все разделы

    Если это еще не выполнено (например через операцию mklabel, про которую рассказано выше, или потому что диск только что отформатированный), сначала нам нужно удалить все существующие разделы с диска. Введите rm <номер>, где <номер> это раздел, который вы хотите удалить.

    Код 4.4. Удаление раздела с диска.

    (parted) rm 2

    Повторите то же самое для всех остальных разделов, которые вам не нужны. Однако удостоверьтесь, что вы не допустили никаких ошибок — parted запускает изменения сразу (в отличие от fdisk, который накапливает их, позволяя пользователю отменить свои изменения прежде чем записать их или выйти из fdisk).

    Создаем разделы

    Сначала давайте создадим разделы, про которые мы говорили ранее. Создание разделов с помощью parted не очень сложно — все, что нам нужно — это дать parted следующие настройки:

  • Тип раздела для использования. Это обычно «primary», если только вы не хотите использовать более 4 разделов (с меткой раздела msdos). В остальных случаях, вам нужно сделать четвертый раздел расширенным, в котором будет содержаться оставшаяся часть диска, и создать логические разделы в нем. Если вы используете gpt, то не существует лимита на число главных разделов.

  • Файловую систему, которую вы будете использовать. Приложение parted поддерживает большинство частоиспользуемых файловых систем, и знает, какой ID раздела подставлить для этих разделов. Это не значит, что parted сразу же и создаст файловую систему на разделе (вы можете это сделать с помощью команды mkpartfs, но мы будем использовать обычные команды mkfs.* далее в этой главе для этой цели). ID раздела часто используется программами автодетектирования, чтобы знать, что делать с конкретным разделом.

  • Начальное положение раздела (которое может быть выражено в Мб или Гб)

  • Конечное положение раздела (которое может быть выражено в Мб или Гб)

  • Одним из преимуществ parted является то, что вы можете легко использовать только размеры разделов, чтобы автоматически найти начальное и конечное положение, как вы увидите в следующем примере.

    Код 4.5. Создаем разделы.

    # Создаем 32Мбайт раздел /boot

    (parted) mkpart primary ext2 0 32mb

    Warning: The resulting partition is not properly aligned for best performance.

    Ignore/Cancel? i

    # Создаем 512Мбайт раздел swap

    (parted) mkpart primary linux-swap 32mb 542mb

    # Создаем раздел, который занимает оставшуюся часть диска

    # -1s (минус один эс) означает «конец диска»

    (parted) mkpart primary ext4 542mb -1s

    Warning: You requested a partition from 542MB to 21.5GB.

    The closest location we can manage is 542MB to 21.5GB.

    Is this still acceptable to you?

    Yes/No? y

    Теперь вы можете просмотреть список разделов снова, чтобы проверить, что все так, как ожидается. Когда вы будете удовлетворены, используйте команду quit, чтобы выйти из parted.

    4.e. Создаем файловые системы

    Введение

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

    Файловые системы

    Ядро Linux поддерживает многие файловые системы. Мы объясним ext2, ext3, ext4, ReiserFS, XFS и JFS, так как они являются наиболее частоиспользуемыми на системах Linux.

    ext2 это проверенная временем файловая система Linux, но в ней нет журналирования, что означает, что рутинные проверки файловой системы ext2 при загрузке системы могут быть достаточно долгими. Сейчас есть большой выбор более новых журналируемых файловых систем, которые можно проверить очень быстро, поэтому, обычно их предпочитают перед их нежурналируемыми аналогами. Журналируемые файловые системы убирают долгие ожидания при загрузке вашей системы, когда ваша файловая система находится в ошибочном состоянии. Если вы ставите Gentoo на очень маленький диск (менее 4Гб), тогда вам нужно указать ext2 зарезервировать достаточно инодов, когда вы создаете файловую систему. Приложение mke2fs использует настройку «bytes-per-inode» для вычисления, сколько инодов должна иметь файловая система. Если запустить mke2fs -T small /dev/<device>, число инодов, обычно, будет в 4 раза больше для конкретной файловой системы, так как настройка «bytes-per-inode» уменьшится с одного на 16Кб до одного на 4Кб. Вы можете изменить это еще больше, используя mke2fs -i соотношение /dev/<device>.

    ext3 это журналируемая версия файловой системы ext2. Она имеет возможность журналирования метаданных для быстрого восстановления, а также дополнительные режимы журналирования, такие как журналирование данных и журналирование упорядоченных данных. Она использует индекс HTree, который дает высокую производительность почти во всех ситуациях. Если кратко, ext3 это очень хорошая и надежная файловая система. Ext3 это рекомендованная всеплатформенная файловая система на любой случай. Если вы ставите Gentoo на очень маленький диск (менее 4Гб), тогда вам нужно указать ext3 зарезервировать достаточно инодов, когда вы создаете файловую систему. Приложение mke2fs использует настройку «bytes-per-inode» для вычисления, сколько инодов должна иметь файловая система. Если запустить mke2fs -T small /dev/<device>, число инодов, обычно, будет в 4 раза больше для конкретной файловой системы, так как настройка «bytes-per-inode» уменьшится с одного на 16Кб до одного на 4Кб. Вы можете изменить это еще больше, используя mke2fs -i соотношение /dev/<device>.

    ext4 это файловая система, созданная как ветка ext3. Она имеет новые возможности, улучшения скорости, а также не имеет лимита на размеры, с не очень большими изменениями формата на диске. Она может работать с дисками до 1 Эб, и максимальным размером файла 16Тб. Вместо классической карты выделения блоков, как в ext2/3, в ext4 используются экстенты, которые улучшают производительность на больших файлах и уменьшают фрагментацию. Кроме того, ext4 также имеет более сложные алгоритмы выделения блока (отложенное выделение и многоблоковое выделение), что дает драйверу файловой системы больше возможностей для оптимизации распределения данных на диске. Файловая система ext4 это компромисс между стабильностью кода и желанием ввести расширения в почти десятилетнюю файловую систему.

    JFS это высокопроизводитиельная журналируемая файловая система от IBM. JFS это маленькая, быстрая и надежная файловая система, основанная на B+tree, с хорошей производительностью в различных условиях.

    ReiserFS это основанная на B+tree журналируемая файловая система с хорошей общей производительностью, особенно, когда происходит работа со множеством маленьких файлов за счет большей нагрузки на ЦП. ReiserFS хуже поддерживается, чем другие файловые системы.

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

    Устанавливаем файловую систему на раздел

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

    Файловая система

    ext2

    ext3

    ext4

    reiserfs

    xfs

    jfs

    Команда для создания

    mkfs.ext2

    mkfs.ext3

    mkfs.ext4

    mkreiserfs

    mkfs.xfs

    mkfs.jfs

    Например, чтобы наш загрузочный раздел (в нашем примере /dev/sda1) был в ext2, а раздел root (в нашем примере /dev/sda3) в ext3, вы должны использовать:

    Код 5.1: Устанавливаем файловую систему на раздел

    # mkfs.ext2 /dev/sda1

    # mkfs.ext3 /dev/sda3

    Теперь создайте файловые системы на ваших новых созданных разделах (или логических томах).

    Активация своп-раздела

    Для инициализации своп-разделов используется команда mkswap:

    Код 5.2: Создаем сигнатуру Swap

    # mkswap /dev/sda2

    Чтобы активировать своп-раздел, используйте swapon:

    Код 5.3: Активируем своп-раздел

    # swapon /dev/sda2

    Создайте и активируйте своп с помощью команд, описанных выше.

    4.f. Монтирование

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

    Код 6.1: Монтирование разделов

    # mount /dev/sda3 /mnt/gentoo

    # mkdir /mnt/gentoo/boot

    # mount /dev/sda1 /mnt/gentoo/boot

    Заметка: Если вы хотите, чтобы /tmp находился на отдельном разделе, удостоверьтесь, что вы изменили его права после монтирования: chmod 1777 /mnt/gentoo/tmp. Это также применимо к /var/tmp.

    Мы также должны смонтировать файловую систему proc (виртуальную файловую систему ядра) в каталог /proc. Но сперва нам нужно разместить наши файлы в наших разделах.

    5. Установка файлов Gentoo

    5.a. Устанавливаем tar-архив Stage3

    Устанавливаем правильную дату/время

    Прежде, чем продолжить, вам необходимо проверить вашу дату/время и установить их. Неправильно сконфигурированные часы могут привести к странным результатам в будущем!

    Чтобы проверить текущие дату/время, выполните команду date:

    Код 1.1: Проверяем дату/время

    # date

    Fri Mar 29 16:21:18 UTC 2005

    Если дата/время, которые были вам показаны неверны, измените их, используя синтаксис даты MMDDhhmmYYYY (Месяц, День, Час, Минута и Год). На данном этапе вам нужно установить время UTC. Вы сможете определить вашу временную зону позже. Например, чтобы установить дату на 29 марта 16:21 2005 года:

    Код 1.2: Устанавливаем дату/время UTC

    # date 032916212005

    Делаем выбор

    Следующий шаг, который вам нужно выполнить — это установить архив tar со stage3 на вашу систему. У вас есть выбор — скачать необходимый архив из Интернета, или, если вы загрузились с одного из Универсальных CD Gentoo, скопировать его прямо с диска. В большинстве случаев, команда uname -m может быть использована, чтобы помочь вам решить, какой файл stage3 скачивать.

    Минимальные CD и LiveDVD не содержат архива stage3.

    5.b. по умолчанию: Используем Stage3 из Интернета

    Скачиваем архив tar со Stage3

    Зайдите в точку монтирования Gentoo, куда вы смонтировали ваши файловые системы (скорее всего /mnt/gentoo):

    Код 2.1: Идем в точку монтирования Gentoo

    # cd /mnt/gentoo

    В зависимости от вашего установочного диска, у вас есть несколько программ, чтобы скачать stage3. Если у вас есть links, вы сразу можете перейти к списку зеркал Gentoo (http://www.gentoo.org/main/en/mirrors.xml?style=printable) и выбрать зеркало, наиболее близкое к вам. Наберите «links http://www.gentoo.org/main/en/mirrors.xml» и нажмите enter.

    Если у вас нет links, вы должны использовать lynx. Если вам необходимо работать через прокси, экспортируйте переменные http_proxy и ftp_proxy:

    Код 2.2: Устанавливаем информацию о прокси для lynx

    # export http_proxy="http://proxy.server.com:port"

    # export ftp_proxy="http://proxy.server.com:port"

    Теперь мы будем считать, что у вас есть программа links.

    Выберите зеркало неподалеку. Обычно достаточно HTTP-зеркал, но другие протоколы тоже существуют. Зайдите в каталог releases/x86/autobuilds/. Здесь вы должны увидеть все файлы stage для вашей архитектуры (они могут быть сохранены в поддиректориях, названных по «подархитектурам»). Выберите один файл и нажмите D для скачивания. Как только скачивание закончится, нажмите Q для выхода из браузера.

    Большинству пользователей PC понадобится архив stage3-i686-<release>.tar.bz2. Все современные PC считаются i686. Если вы используете старую машину, вы можете проверить, входит ли она в список совместимых с i686 процессоров на Википедии (http://en.wikipedia.org/wiki/I686). Старе процессоры, такие как Pentium, K5, K6, или Via C3 и похожие, потребуют более общий x86 Stage3. Процессоры, старее чем i486 не поддерживаются.

    Код 2.3: Загрузаем список зеркал с links

    # links http://www.gentoo.org/main/en/mirrors.xml

    (Если вам необходима поддержка прокси с links)

    # links -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml

    Удостоверьтесь, что вы скачали архив tar со stage3 — установки с использованием stage1 или stage2 больше не поддерживаются.

    Если вы хотите проверить целостность скачанного архива tar со stage3, используйте md5sum и сравните вывод с контрольной суммой MD5, которая есть на зеркале.

    Код 2.4: Проверяем целостность tar архива со stage3

    # md5sum -c stage3-i686-<release>.tar.bz2.DIGESTS

    stage3-i686-<release>.tar.bz2: OK

    Распаковка tar-архива со Stage3

    Теперь распакуйте ваш скачанный stage3 на вашу систему. Мы используем tar, так как это самый легкий метод:

    Код 2.5: Распаковываем stage3

    # tar xvjpf stage3-*.tar.bz2

    Удостоверьтесь, что вы используете те же опции (xvjpf). X означает «распаковать», v для детальной информации, чтобы видеть, что происходит в течениее процесса распаковки (не обязательно), j для распаковки по алгоритму bzip2, p для сохранения прав, и f для указания того, что мы распаковываем файл, а не то, что придет со стандартного ввода.

    5.c. Устанавливаем Portage

    Распаковываем образ Portage

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

    Скачивание и установка образа Portage

    Перейдите к точке монтирования, куда вы смонтировали вашу файловую систему (скорее всего /mnt/gentoo):

    Код 3.1: Переходим к точке монтирования Gentoo

    # cd /mnt/gentoo

    Запустите links (или lynx) и перейдите к списку зеркал Gentoo (http://www.gentoo.org/main/en/mirrors.xml?style=printable). Выберите зеркало, ближайшее к вам, и откройте каталог snapshots/. Там скачайте последний образ Portage
    (portage-latest.tar.bz2), выбрав его и нажав D.

    Код 3.2: Смотрим на список зеркал Gentoo.

    # links http://www.gentoo.org/main/en/mirrors.xml

    Теперь выйдите из вашего браузера, нажав Q. Теперь у вас есть образ Portage, сохраненный в /mnt/gentoo.

    Если вы хотите проверить целостность скачанного образа, используйте md5sum и сравните вывод с контрольной суммой MD5, которая дана на зеркале.

    Код 3.3: Проверка целостности образа Portage

    # md5sum -c portage-latest.tar.bz2.md5sum

    portage-latest.tar.bz2: OK

    На следующем шаге мы распакуем образ Portage на вашу файловую систему. Удостоверьтесь, что вы используете точно такую же команду, последняя опция — большая C, не c.

    Код 3.4: Распаковываем образ Portage

    # tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr

    5.d. Настройка опций компиляции

    Введение

    Чтобы оптимизировать Gentoo, вы можете настроить несколько переменных, которые влияют на поведение Portage. Все эти переменные могут быть установлены как переменные окружения (используя команду export), но это будет не постоянно. Чтобы хранить ваши настройки, Portage дает вам файл /etc/portage/make.conf, конфигурационный файл для Portage. Именно этот файл мы теперь будем редактировать.

    Заметка: Прокомментированный список всех возможных переменных можно найти в /mnt/gentoo/usr/share/portage/config/make.conf.example. Для успешной установки Gentoo вам нужно установить только те переменные, о которых сказано ниже.

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

    Код 4.1: Открываем /etc/portage/make.conf

    # nano -w /mnt/gentoo/etc/portage/make.conf

    Как вы наверное заметили,файл make.conf.example структурирован в общем виде: комментированные строки начинаются с «#», остальные строки определяют переменные, используя синтаксис ПЕРЕМЕННАЯ=«содержание». Файл make.conf использует такой же синтаксис. Некоторые из этих переменных обсуждаются ниже.

    CFLAGS и CXXFLAGS

    Переменные CFLAGS и CXXFLAGS определяют флаги оптимизации для gcc C и C++ компиляторов, соответственно. Хотя мы определяем их здесь, вы получите максимальную производительность только если оптимизируете эти флаги для каждой программы отдельно. Причина этого в том, что каждая программа различна.

    В файле make.conf вы должны определить флаги оптимизации, которые, как вы считаете, сделают вашу систему наиболее отзывчивой «в общем». Не помещайте в данную переменную экспериментальные установки, слишком много оптимизации может заставить программы вести себя плохо (падать, или, еще хуже, неправильно работать).

    Мы не будем объяснять все возможные опции оптимизации. Если вы хотите узнать их все, прочитайте документацию (http://gcc.gnu.org/onlinedocs/) или просмотрите info-страничку gcc (команда info gcc, но она работает только уже на установленной системе Linux). Сам файл make.conf.example тоже содержит много примеров и информации, не забудьте его тоже почитать.

    Первая настройка это флаг -march= или -mtune=, который определяет название архитектуры. Возможные опции описаны в make.conf.example (как комментарии).

    Второе — это флаг -O (это большая O, а не ноль), который определяет класс оптимизации gcc. Возможные классы это s (для оптимизации по размеру), 0 (никаких оптимизаций), 1, 2, или даже 3 для оптимизации на скорость (каждый класс оптимизирует так же, как предыдущий, плюс имеет некоторые дополнения). -O2 это рекомендованное значение по умолчанию, -O3бывает вызывает проблемы, когда используется на общесистемном уровне, поэтому мы рекомендуем вам остаться на -O2.

    Другим популярным флагом оптимизации является -pipe (использовать пайпы вместо временных файлов для взаимодействия между различными этапами компиляции). Он не воздействует на генерируемый код, но использует больше памяти. На системах с малым объемом памяти, gcc может быть убит. В этом случае не используйте этот флаг.

    Использование -fomit-frame-pointer (не заносить указатель фрейма стека в регистр для функций, которым это не необходимо) может иметь серьезные последствия в случае дебага приложений.

    Когда вы определяете CFLAGS и CXXFLAGS, вы должны выбрать несколько флагов оптимизации. Значения по умолчанию, которые находятся в распакованном вами архиве stage3 доолжны быть достаточно хороши. Следующий пример это просто пример:

    Код 4.2: Определение переменных CFLAGS и CXXFLAGS

    CFLAGS="-O2 -march=i686 -pipe"

    # Use the same settings for both variables

    CXXFLAGS="${CFLAGS}"

    Заметка: Вы также можете захотеть просмотреть «Гайд по оптимизации компиляции» (http://www.gentoo.org/doc/en/gcc-optimization.xml?style=printable) для большего количества информации о том, как разные опции компиляции могут повлиять на вашу систему.

    MAKEOPTS

    С помощью MAKEOPTS вы определяете, сколько параллельных компиляций должно проходить при установке пакета. Хорошим выбором будет число CPU (или ядер CPU) в вашей системе, плюс один. Но этот совет не всегда бывает идеален.

    Код 4.3: MAKEOPTS для обычной, однопроцессорной системы.

    MAKEOPTS="-j2"

    Пристегнулись, сели, поехали!

    Измените ваш файл /mnt/gentoo/etc/portage/make.conf так, как вам нужно, и сохраните его (пользователи nano нажали бы Ctrl-X). Теперь вы готовы установить базовую систему Gentoo.

    6. Установка базовой системы Gentoo

    6.a. Чрутинг

    Опционально: Выбор зеркал

    Чтобы быстро скачать исходный код, рекомендуется выбрать быстрое зеркало. Portage посмотрит в ваш файл make.conf за переменной GENTOO_MIRRORS и будет использовать зеркала, описанные там. Вы можете перейти в браузере на наш список зеркал (http://www.gentoo.org/main/en/mirrors.xml?style=printable), и выбрать зеркало (зеркала) ближайшие к вам (так как часто они самые быстрые), но мы даем вам хорошую программу, называемую mirrorselect, которая даст вам красивый интерфейс для выбора зеркал, которые вам нужны. Просто перейдите к зеркалам, которые хотите выбрать, и нажмите пробел, чтобы выбрать одно или более зеркал.

    Код 1.1: Используем mirrorselect для настройки переменной GENTOO_MIRRORS

    # mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

    Второй важной настройкой является настройка SYNC в make.conf. Эта переменная содержит сервер rsync, который вы хотите использовать, когда будете обновлять дерево Portage (коллекция файлов .ebuild, скриптов, содержащих всю информацию, необходимую Portage для скачивания и установки приложений). Хотя вы можете вручную ввести сервер SYNC сами, программа mirrorselect может упростить вам эту операцию:

    Код 1.2: Выбираем зеркало rsync, используя mirrorselect.

    # mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf

    После запуска mirrorselect, мы рекомендуем вам дважды проверить настройки в /mnt/gentoo/etc/portage/make.conf !

    Заметка: Если вы хотите вручную настроить сервер SYNC в make.conf, вы должны проверить адрес http://www.gentoo.org/main/en/mirrors-rsync.xml?style=printable для списка зеркал, ближайших к вам. Мы рекомендуем использовать ротацию, например rsync.us.gentoo.org, а не выбирать одно зеркало. Это поможет распределить нагрузку и все будет работать, в случае если какое-то отдельное зеркало будет в оффлайне.

    Копируем информацию DNS

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

    Код 1.3: Копируем информацию DNS

    (Опция -L необходима, чтобы удостовериться, что мы копируем не символическую ссылку, а настоящий файл)

    # cp -L /etc/resolv.conf /mnt/gentoo/etc/

    Монтируем необходимые файловые системы

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

    Смонтируем файловую систему /proc на /mnt/gentoo/proc, чтобы позволить установке использовать информацию, даваемую ядром внутри окружения в чруте, а затем смонтируем файловые системы /dev и /sys.

    1.4: Монтируем /proc и /dev

    # mount -t proc none /mnt/gentoo/proc

    # mount --rbind /sys /mnt/gentoo/sys

    # mount --rbind /dev /mnt/gentoo/dev

    Входим в новое окружение

    Теперь все разделы инициализированы и базовое окружение установлено. Настало время войти наше новое установочное окружения, путем чрута в него. Это означает, что мы перейдем от нашего текущего установочного окружения (Установочного CD или другого установочного устройства) в нашу устанавливаемую систему (то есть, в инициализированные разделы).

    Этот чрутинг делается в три шага. Сначала мы изменим корневой каталог с / (на установочном устройстве) на /mnt/gentoo (на ваших разделах), используя команду chroot. Затем мы создадим новое окружение, используя env-update, которая, на самом деле, создает переменные окружения. В конце концов, мы загрузим эти переменные в память, используя команду source.

    Код 1.5: Чрутинг в новое окружение

    # chroot /mnt/gentoo /bin/bash

    # env-update

    >> Regenerating /etc/ld.so.cache...

    # source /etc/profile

    # export PS1="(chroot) $PS1"

    Поздравляем! Теперь вы внутри вашего собственного окружения Gentoo Linux. Конечно, оно еще далеко не закончено, собственно поэтому в этом разделе есть еще несколько глав.

    Если в любое время вам понадобится еще один терминал или консоль для доступа к чрутингу, все что вам нужно — это снова повторить вышеприведенные шаги.

    6.b. Конфигурируем Portage

    Обновляем дерево Portage

    Вы должны обновить ваше дерево Portage до последней версии. Команда emerge --sync сделает это для вас.

    Код 2.1: Обновляем дерево Portage

    # emerge --sync

    (Если вы используете медленный терминал, или последовательную

    консоль, вы можете добавить опцию --quiet для ускорения процесса:)

    # emerge --sync --quiet

    Если вы находитесь за файрволом, который блокирует трафик rsync, вы можете использовать emerge-webrsync, которая скачает и установит образ Portage для вас.

    Если вас предупредили, что существует новая версия Portage, и что вы должны обновить Portage, вам нужно это сделать, используя команду emerge --oneshot portage.

    Выбор правильного профиля

    Сначала, небольшое определение.

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

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

    Вы можете посмотреть, какой профиль вы сейчас используете с помощью следующей команды:

    Код 2.2: Проверка системного профиля

    # eselect profile list

    Available profile symlink targets:

    [1] default/linux/x86/10.0 *

    [2] default/linux/x86/10.0/desktop

    [3] default/linux/x86/10.0/server

    Как вы можете видеть, для некоторых архитектур существуют субпрофили desktop и server. Запуск eselect profile list покажет все существующие профили.

    После обзора существующих профилей для вашей архитектуры, вы можете выбрать другой (если хотите):

    Код 2.3: Изменяем профили

    # eselect profile set 2

    Заметьте: Субпрофиль developer создан специально для задач разработки Gentoo Linux. Он не поможет вам, если вы просто разрабываете какие-то программы.

    Конфигурируем переменную USE

    USE это одна из самых мощных переменных, которую дает Gentoo своим пользователям. Некоторые программы могут быть скомпилированы с- или без- некоторой поддержки. Например, некоторые программы могут быт скомпилированы с поддержкой gtk, либо поддержкой qt. Другие могут быть скомпилированы с- или без- поддержки SSL. Некоторые программы даже могут быть скомпилированы с поддержкой фреймбуфера (svgalib) вместо поддержки X11 (X-сервер).

    Большинство дистрибутивов компилируют свои пакеты с поддержкой всего, чего только можно, что увеличивает размеры программ и время запуска, даже если не принимать во внимание огромный объем зависимостей. С Gentoo вы можете определить, с какими опциями должен быть скомпилирован пакет. Здесь в игру и входит USE.

    В переменной USE вы определяете ключевые слова, которые определяют опции компилирования. Например, слово ssl скомпилирует поддержку ssl в программах, которые ее поддерживают. -X уберет поддержку X-сервера (заметьте знак минус перед буквой). Gnome gtk -kde -qt4 скомпилирует ваши программы с поддержкой gnome (и gtk), и без поддержки kde (и qt), что сделает вашу систему полностью настроенной на GNOME.

    Значения USE по умолчанию размещены в файлах make.defaults вашего профиля. Вы найдете эти файлы в каталоге, на который указывает /etc/portage/make.profile, а также такие файлы будут во всех родительских каталогах данного каталога. Значения USE по умолчанию это сумма всех значений USE во всех файлах make.defaults. То, что вы поместите в /etc/portage/make.conf вычисляется на основании этих настроек. Если вы добавите что-то к переменной USE, оно будет добавлено в список по умолчанию. Если вы уберете что-то из переменной USE (поместив знак минус перед настройкой), оно будет убрано из списка по умолчанию (если оно вообще там было). Никогда не меняйте ничего в каталоге /etc/portage/make.profile, так как это будет перезаписано при обновлении Portage!

    Полное описание USE может быть найдено во второй части данной книги, в разделе USE-флаги. Полное описание существующих USE-флагов вы можете найти в вашей системе в /usr/portage/profiles/use.desc.

    Код 2.4: Просмотр существующих USE-флагов

    # less /usr/portage/profiles/use.desc

    (Вы можете передвигаться по списку, используя стрелки, выход по нажатию 'q')

    Как пример, мы покажем настройки USE для основанной на KDE системе с поддержкой DVD, ALSA и записи CD.

    Код 2.5: Открываем /etc/portage/make.conf

    # nano -w /etc/portage/make.conf

    Код 2.6: Настройки USE

    USE="-gtk -gnome qt4 kde dvd alsa cdr"

    Необязательно: Локали glibc

    Наверняка вы будете использовать только одну, или, может быть, две локали на вашей системе. Вы можете определить локали, которые вам нужны в /etc/locale.gen.

    Код 2.7: Открываем /etc/locale.gen

    # nano -w /etc/locale.gen

    Следующие локали являются примером, когда надо получить как Английский (Соединенные Штаты), так и Немецкий (Германия) с соответствующими форматами символов (как UTF-8).

    Код 2.8: Определяем ваши локали

    en_US ISO-8859-1

    en_US.UTF-8 UTF-8

    de_DE ISO-8859-1

    de_DE@euro ISO-8859-15

    Следующий шаг состоит в запуске locale-gen. Эта программа сгенерирует все локали, которые вы определилил в файле /etc/locale.gen.

    Код 2.9: Запускаем locale-gen

    # locale-gen

    7. Конфигурация ядра

    7.a. Временная зона

    Сначала вам нужно выбрать вашу временную зону, чтобы ваша система знала, где она находится. Посмотрите свою временную зону в /usr/share/zoneinfo, затем скопируйте ее в /etc/localtime. Не используйте временные зоны /usr/share/zoneinfo/Etc/GMT*, так как их имена не указывают на ожидаемые зоны. Например, GMT-8 на самом деле является GMT+8.

    Код 1.1: Устанавливаем информацию о временной зоне

    # ls /usr/share/zoneinfo

    (Допустим, что вам понравилась временная зона Europe/Brussels)

    # cp /usr/share/zoneinfo/Europe/Brussels > /etc/localtime

    (Далее обновите файл timezone)

    # echo "Europe/Brussels" > /etc/timezone

    7.b. Устанавливаем исходники

    Выбираем ядро

    Главной вещью, вокруг которой построены все дистрибутивы является ядро. Это слой между программами пользователей и вашим системным железом. Gentoo дает своим пользователям несколько возможных исходников ядра. Полный список с описанием находится в «Gentoo Kernel Guide» (http://www.gentoo.org/doc/en/gentoo-kernel.xml?style=printable)

    Для систем, основанных на x86, у нас есть gentoo-sources (исходники ядра, с патчами для дополнительных возможностей).

    Выберите исходник вашего ядра и установите его, используя emerge.

    Код 2.1: Устанавливаем исходный код ядра

    # emerge gentoo-sources

    Когда вы посмотрите в /usr/src, вы увидите ссылку, называемую linux, которая указывает на исходник вашего ядра. В нижеприведенном случае, установленный исходник ядра указывает на gentoo-sources-2.6.34-r1. Ваша версия может отличаться, помните об этом.

    Код 2.2: Просматриваем ссылку на исходник ядра

    # ls -l /usr/src/linux

    lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-2.6.34-r1

    Теперь пришловремя сконфигурировать и скомпилировать ваш исходник ядра. Вы можете использовать для этого genkernel, который построит общее ядро, такое, как на установочном CD. Но сначала мы все же объясним «ручную» конфигурацию, так как это лучший способ оптимизировать ваше окружение.

    Если вы хотите вручную сконфигурировать ваше ядро, продолжайте читать раздел «По умолчанию: Ручная конфигурация». Если вы хотите использовать genkernel, вы должны прочитать раздел «Альтернатива: Используем genkernel».

    7.c. По умолчанию: Ручная конфигурация

    Введение

    Ручная настройка ядра часто видится как самая сложная процедура, которую пользователь Linux должен когда-то делать. В этом нет ни капли правды — после сборки нескольких ядер, вы даже не вспомните, что это было сложно.

    Однако, одна вещь все же является правдой: вы должны знать вашу систему, когда вы начнете конфигурацию ядра вручную. Большинство информации можно получить, установив pciutils (emerge pciutils), который содержит lspci. Теперь вы сможете использовать lspci в новом окружении. Вы можете игнорировать любые сообщения pcilib (вроде pcilib: cannot open /sys/bus/pci/devices), которые выбрасывает lspci. Либо вы можете запустить lspci из исходного окружения, результаты будут одинаковыми. Также вы можете запустить lsmod, чтобы посмотреть, какие модули использует установочный CD (это может дать вам прекрасную подсказку, что необходимо включить).

    Теперь идите в каталог с исходниками вашего ядра и запустите make menuconfig. Это запустит конфигурационное меню, основанное на ncurses.

    Код 3.1: Запускаем menuconfig

    # cd /usr/src/linux

    # make menuconfig

    Вам покажут несколько секций, которые нужно сконфигурировать. Сначала мы покажем вам некоторые опции, которые вы должны активировать (иначе Gentoo не заработает, или заработает неправильно без дополнительных телодвижений).

    Активация необходимых опций

    Удостоверьтесь, что каждый драйвер, который необходим для загрузки системы (например, SCSI-контроллер) скомпилирован в ядре, и не загружается, как модуль, иначе ваша система не сможет полностью загрузиться.

    Теперь выберите правильное семейство процессора:

    Код 3.2: Выбираем правильное семейство процессора

    Processor type and features --->

    (Change according to your system)

    (Athlon/Duron/K7) Processor family

    Далее выберите Maintain a devtmpfs file system to mount at /dev, чтобы критические файлы устройств уже существовали во время процесса загрузки.

    Код 3.3: Включаем поддержку devtmpfs

    Device Drivers --->

    Generic Driver Options --->

    [*] Maintain a devtmpfs filesystem to mount at /dev

    [ ] Automount devtmpfs at /dev, after the kernel mounted the rootfs

    Теперь зайдите в File Systems и выберите поддержку файловых систем, которые вы используете. Не компилируйте их как модули, иначе ваша система Gentoo не сможет смонтировать ваши разделы. Также выберите Virtual memory и /proc file system.

    Код 3.4: Выбираем необходимые файловые системы

    File systems --->

    (Select one or more of the following options as needed by your system)

    <*> Second extended fs support

    <*> Ext3 journalling file system support

    <*> The Extended 4 (ext4) filesystem

    <*> Reiserfs support

    <*> JFS filesystem support

    <*> XFS filesystem support

    ...

    Pseudo Filesystems --->

    [*] /proc file system support

    [*] Virtual memory file system support (former shm fs)

    (Enable GPT partition label support if you used that previously)

    Partition Types --->

    [*] Advanced partition selection

    ...

    [*] EFI GUID Partition support

    Если вы используете PPPoE для соединения с Интернетом, или вы используете диалап-модем, вам будет необходимы следующие опции в ядре:

    Код 3.5: Выбраем необходимые драйвера PPPoE

    Device Drivers --->

    Network device Support --->

    <*> PPP (point-to-point protocol) support

    <*> PPP support for async serial ports

    <*> PPP support for sync tty ports

    Две опции сжатия не повредят, но они не обязательно нужны, точно так же, как и опция PPPoE over Ethernet, которая используется только программой ppp, если ее сконфигурировать выполнять PPPoE в режиме ядра.

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

    Если у вас есть Intel CPU, который поддерживает HyperThreading ™, или у вас система с несколькими CPU, вы должны активировать опцию "Symmetric multi-processing support":

    Код 3.6: Активируем поддержку SMP

    Processor type and features --->

    [*] Symmetric multi-processing support

    Заметка: В многоядерных системах каждое ядро считается за один процессор.

    Если у вас более 4Гб памяти, вам нужно включить опцию "High Memory Support (64G)".

    Если вы используете устройства ввода USB (например, клавиатуру или мышь), не забудьте включить и их тоже:

    Код 3.7: Активируем поддержку USB для устройств ввода.

    Device Drivers --->

    [*] HID Devices --->

    <*> USB Human Interface Device (full HID) support

    Если вы хотите поддержку PCMCIA для вашего лаптопа, не забудьте включить поддержку для моста PCMCIA, который присутствует в вашей системе:

    Код 3.8: Включаем поддержку PCMCIA

    Bus options (PCI etc.) --->

    PCCARD (PCMCIA/CardBus) support --->

    <*> PCCard (PCMCIA/CardBus) support

    (select 16 bit if you need support for older PCMCIA cards. Most people want this.)

    <*> 16-bit PCMCIA support

    [*] 32-bit CardBus support

    (select the relevant bridges below)

    *** PC-card bridges ***

    <*> CardBus yenta-compatible bridge support (NEW)

    <*> Cirrus PD6729 compatible bridge support (NEW)

    <*> i82092 compatible bridge support (NEW)

    Компиляция и установка

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

    Код 3.9: Компилируем ядро

    # make && make modules_install

    Когда ядро закончит компилироваться, скопируйте образ ядра в /boot. Используйте любое имя, которое вам покажется приемлемым для вашего выбора ядра, и запомните его, потому что оно понадобится вам позже, когда вы будете конфигурировать ваш загрузчик. Помните, что вам нужно заменить kernel-2.6.34-gentoo-r1 на имя и версию вашего ядра.

    Код 3.10: Устанавливаем ядро

    # cp arch/x86/boot/bzImage /boot/kernel-2.6.34-gentoo-r1

    (Опционально) Компилируем Initramfs

    Если вы используете особую разбивку на разделы, в которой важные для файловой системы каталоги (вроде /usr или /var) находятся на отдельных разделах, вам нужно будет настроить initramfs так, чтобы эти разделы могли быть смонтированы до того, как они понадобятся.

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

    Чтобы установить initramfs, сначала установите genkernel, и позвольте ей сгенерировать initramfs для вас.

    Код 3.11: Компилируем initramfs

    # emerge genkernel

    # genkernel --install initramfs

    Если вам нужна поддержка чего-то специфического в initramfs, например lvm или raid, добавьте необходимые опции при вызове genkernel. Посмотрите genkernel —help для более детальной информации, или посмотрите на следующий пример, который добавляет поддержку LVM и программного raid (mdadm).

    Код 3.12: Компилируем initramfs с поддержкой LVM и программного raid

    # genkernel --lvm --mdadm --install initramfs

    Initramfs будет сохранен в /boot. Вы можете найти этот файл просто просмотрев список файлов, начинающихся с initramfs:

    Код 3.13: Проверяем имена файлов initramfs

    # ls /boot/initramfs*

    Теперь продолжайте с раздела «Модули ядра»

    7.d. Альтернатива: Используем genkernel

    Если вы читаете этот раздел, значит вы решили использовать наш скрипт genkernel для конфигурации вашего ядра за вас.

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

    Итак, давайте посмотрим, как использовать genkernel. Сначала, собственно, установите сам genkernel:

    Код 4.1: Устанавливаем genkernel

    # emerge genkernel

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

    Заметьте, что если ваш загрузочный раздел не использует ext2 или ext3 как файловую систему, вам может понадобиться вручную сконфигурировать ваше ядро, используя команду genkernel --menuconfig all, и добавить поддержку вашей файловой системы в ядре (то есть, не как модуль). Пользователи LVM2, скорее всего, захотят добавить аргумент --lvm2.

    Код 4.2: Запускаем genkernel

    # genkernel all

    Как только genkerlen закончит работу, ядро, полный набор модулей и начальный рамдиск (initramfs) будут созданы. Мы будем использовать ядро и рамдиск, когда будем конфигурировать загрузчик, далее в этом документе. Запишите имена ядра и остальных файлов, так как они понадобятся вам, когда вы будете писать конфигурационный файл загрузчика. Рамдиск запустится сразу после включения, чтобы выполнить автодетектирование железа (примерно как на установочном CD), прежде чем ваша «настоящая» система запустится.

    Код 4.3: Проверяем созданный образ ядра и рамдиск.

    # ls /boot/kernel* /boot/initramfs*

    7.e. Модули ядра

    Конфигурируем модули

    Вы должны описать модули, которые вы хотите запускать автоматически, в /etc/conf.d/modules. Вы можете добавить дополнительные опции к модулям, если вам это необходимо.

    Чтобы увидеть все существующие модули, запустите следующую команду find. Не забудьте подставить вместо «<kernel version>» версию ядра, которую вы только что скомпилировали:

    Код 5.1: Просмотр всех существующих модулей

    # find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' | less

    Например, чтобы автоматически загрузить модуль 3c59x.ko (который является драйвером для специфического семейства сетевых карт 3Com), отредактируйте файл /etc/conf.d/modules и добавьте имя модуля в него.

    Код 5.2: Редактируем /etc/conf.d/modules

    # nano -w /etc/conf.d/modules

    modules_2_6="3c59x"

    8. Конфигурация системы

    8.a. Информация о файловой системе

    Что такое fstab?

    В Linux все разделы, используемые системой, должны быть описаны в /etc/fstab. Данный файл содержит точки монтирования этих разделов (как они видятся в структуре файловой системы), как они должны монтироваться, и с какими специальными опциями (автоматически или нет, могут пользователи их монтировать или нет, и т. д.)

    Создаем /etc/fstab

    /etc/fstab использует специальный синтаксис. Каждая строка состоит из шести полей, разделенных пустым местом (пробелы, табы, или их смесь). Каждое поле имеет свое собственное значение:

  • Первое поле описывает раздел (путь к файлу устройства)

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

  • Третье поле описывает файловую систему, используемую разделом.

  • Четвертое поле описывает опции монтирования, используемые командой mount, когда она хочет смонтировать раздел. Так как каждая файловая система имеет свои собственные опции монтирования, вам лучше прочитать man страницу команды mount (man mount) для полного списка. Если вы укажете несколько опций, то они разделяются запятыми.

  • Пятое поле используется командой dump, чтобы определить, нужно ли делать дамп разела или нет. Вы можете обычно оставить это поле равным 0 (нулю).

  • Шестое поле используется fsck, чтобы определить, в каком порядке файловые системы должны проверяться, если система не была правильно выключена. Файловая система root должна иметь значение 1, а остальные значения 2 (или 0, если проверки файловой системы не обязательны).

  • Важно: Файл /etc/fstab, который дается Gentoo по умолчанию, не является правильным файлом fstab. Вам нужно созать свой собственный файл /etc/fstab.

    Код 1.1: Открываем /etc/fstab

    # nano -w /etc/fstab

    Давайте посмотрим на то, как мы запишем опции для раздела /boot. Это только пример, если вы не хотите или не можете создавать /boot, не копируйте его.

    В нашем примере по умолчанию разбиения x86, /boot это обычно раздел /dev/sda1, с ext2 как файловой системой. Ее нужно проверять при загрузке, так что мы можем написать:

    Код 1.2: Пример записи для /boot в файле /etc/fstab

    /dev/sda1 /boot ext2 defaults 1 2

    Некоторые пользователи не хотят, чтобы их раздел /boot автоматически монтировался, для того, чтобы улучшить безопасность своей системы. Эти люди должны подставить вместо defaults — noauto. Это означает, что вам будет нужно вручную монтировать этот раздел каждый раз, как он вам понадобится.

    Добавьте правила, которые совпадают с вашей схемой разбивки, а также добавьте правила для вашего CD-ROM, и, конечно, если у вас есть другие разделы или диски, для них тоже.

    Теперь используйте пример ниже, чтобы создать ваш файл /etc/fstab:

    Код 1.3: Полный пример /etc/fstab

    /dev/sda1 /boot ext2 defaults,noatime 1 2

    /dev/sda2 none swap sw 0 0

    /dev/sda3 / ext3 noatime 0 1

    /dev/cdrom /mnt/cdrom auto noauto,user 0 0

    Опция auto заставляет команду mount догадываться о файловой системе (рекомендуется для извлекаемых устройств, так как на них могут быть различные файловые системы), и позволяет не-root пользователям монтировать CD.

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

    Дважды проверьте ваш /etc/fstab, сохраните, и выйдите для продолжения.

    8.b. Информация о сети

    Имя хоста, имя домена, и т.д.

    Одним из выборов, который нужно сделать пользователю — это придумать имя для его/ее PC. Это кажется очень простым, но большинство пользователей испытывают проблемы с нахождением приемлемого имени для их Linux PC. Чтобы ускорить данный шаг, сообщим, что какое бы имя вы не выбрали, его можно потом сменить. Для нашего примера, вы можете назвать систему tux, а домен homenetwork.

    Код 2.1: Устанавливаем имя хоста

    # nano -w /etc/conf.d/hostname

    (Установите имя хоста в ваше имя)

    hostname="tux"

    Далее, если вам нужно имя домена, установите его в /etc/conf.d/net. Вам нужен домен только если ваш провайдер или сетевой администратор так говорят, или если у вас есть сервер DNS, но нет сервера DHCP. Вам не нужно беспокоиться о DNS или имени домена, если ваша сеть сконфигурирована для DHCP.

    Код 2.2: Устанавливаем имя домена

    # nano -w /etc/conf.d/net

    (Устанавливаем переменную dns_domain в ваше имя домена)

    dns_domain_lo="homenetwork"

    Заметка: Если вы выберете не устанавливать имя домена, вы можете избавиться от сообщений "This is hostname.(none)" при входе в систему, отредактировав /etc/issue. Просто удалите строку .\O из данного файла.

    Если у вас есть домен NIS (если вы не знаете, что это, значит у вас его нет), вам нужно определить его также.

    Код 2.3: Устанавливаем имя домена NIS

    # nano -w /etc/conf.d/net

    (Установите переменную nis_domain в ваше имя домена NIS)

    nis_domain_lo="my-nisdomain"

    Заметка: Для большей информации о конфигурации DNS и NIS, прочитайте примеры, которые приведены в файле /usr/share/doc/openrc-*/net-example.bz2, который можно прочитать, используя команду bzless. Также вы можете захотеть установить openresolv, чтобы помочь в настройке ваших DNS/NIS.

    Конфигурация вашей сети

    Прежде чем вы скажете «Эй, мы это уже делали», вы должны вспомнить, что сеть, которую вы установили в начале установки Gentoo, была только для установки. Теперь вы собираетесь сконфигурировать сеть для вашей системы Gentoo насовсем.

    Заметки: Более детальная информация о сети, включая более сложные вопросы, вроде связи, мостов, 802.1Q VLAN, или беспроводных сетей, находится в разделе «Конфигурация сети Gentoo».

    Вся информация о сети собирается в /etc/conf.d/net. Этот файл использует простой, но пока не интуитивный синтаксис, если вы не знаете, как настроить сеть вручную. Но не волнуйтесь, мы все объясним. Полностью прокомментированный пример, который покрывает много различных конфигураций, находится в /usr/share/doc/openrc-*/net.example.bz2.

    По умолчанию используется DHCP. Для работы DHCP вам необходимо установить DHCP клиент. Это описывается позже в разделе «Установка необходимых системных приложений». Не забудьте установить DHCP клиент.

    Если вам нужно сконфигурировать сетевое соединение, либо потому что вам нужны специфические опции DHCP, либо вам вообще не нужно DHCP, откройте /etc/conf.d/net вашим любимым редактором (в этом примере используется nano):

    Код 2.4: Открываем /etc/conf.d/net для редактирования

    # nano -w /etc/conf.d/net

    Вы увидите следующий файл:

    Код 2.5: Файл /etc/conf.d/net по умолчанию

    # This blank configuration will automatically use DHCP for any net.*

    # scripts in /etc/init.d. To create a more complete configuration,

    # please review /usr/share/doc/openrc-*/net.example.bz2 and save

    # your configuration in /etc/conf.d/net (this file :]!).

    Чтобы ввести ваш собственный IP адрес, сетевую маску и шлюз, вам нужно задать переменные config_eth0 и routes_eth0:

    Код 2.6: Ручная настройка информации об IP для eth0

    config_eth0="192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255"

    routes_eth0="default via 192.168.0.1"

    Для использования DHCP, определите config_eth0:

    Код 2.7: Автоматически получаем IP адрес для eth0

    config_eth0="dhcp"

    Пожалуйста, прочитайте файл /usr/share/doc/openrc-*/net.example.bz2 для списка всех существующих опций. Удостоверьтесь, что вы также прочитали страницу man вашего клиента DHCP, если вам нужно установить специфические опции DHCP.

    Если у вас есть несколько сетевых интерфейсов, повторите вышеприведенные шаги для config_eth1, config_eth2, и т.д.

    Теперь сохраните конфигурацию, и выйдите для продолжения.

    Автоматический запуск сети при загрузке

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

    Код 2.8: Добавляем net.eth0 к уровню запуска по умолчанию

    # cd /etc/init.d

    # ln -s net.lo net.eth0

    # rc-update add net.eth0 default

    Если у вас есть несколько сетевых интерфейсов, вам нужно создать соответствующие net.eth1, net.eth2 и т.д, точно так же, как вы сделали с net.eth0.

    Записываем информацию о сети

    Вам нужно сообщить Linux о вашей сети. Это определяется в /etc/hosts и помогает в преобразовании имет хостов в IP адреса хостов, которые не преобразуются вашим сервером имен. Вам нужно определить свою систему. Также вы можете определить другие системы в сети, если вы не хотите настроить свою собственную, встроенную систему DNS.

    Код 2.9: Открываем /etc/hosts

    # nano -w /etc/hosts

    Код 2.10: Заносим сетевую информацию

    (Определим свою систему)

    127.0.0.1 tux.homenetwork tux localhost

    (Определим дополнительные системы в нашей сети,

    у них должен быть постоянный IP, чтобы их можно было определить

    таким образом)

    192.168.0.5 jenny.homenetwork jenny

    192.168.0.6 benny.homenetwork benny

    Сохраните и выйдите из редактора для продолжения.

    Если у вас нет PCMCIA, вы можете продолжить с раздела «Системная информация». Пользователс PCMCIA должны прочитать следующий раздел про PCMCIA.

    Опционально: Запускаем PCMCIA

    Пользователи PCMCIA сначала должны установить пакет pcmciautils.

    Код 2.11: Устанавливаем pcmciautils

    # emerge pcmciautils

    8.c. Системная информация

    Пароль root

    Сначала мы устанавливаем пароль root, набирая:

    Код 3.1: Устанавливаем пароль root

    # passwd

    Системная информация

    Gentoo использует /etc/rc.conf для конфигурации сервисов, запуска системы и завершения работы. Откройте /etc/rc.conf и радуйтесь всем комментариям в этом файле :)

    Код 3.2: Конфигурируем сервисы

    # nano -w /etc/rc.conf

    Когда вы закончите конфигурировать /etc/rc.conf, сохраните его и выйдите.

    Gentoo использует /etc/conf.d/keymaps для работы с конфигурацией клавиатуры. Отредактируйте этот файл для настройки вашей клавиатуры.

    Код 3.3: Открываем /etc/conf.d/keymaps

    # nano -w /etc/conf.d/keymaps

    Проявите особую осторожность при работе с переменной keymap. Если вы выберете неправильную раскладку, вам может быть очень сложно набирать на вашей клавиатуре.

    Когда вы закончите конфигурировать /etc/conf.d/keymaps, сохраните файл и выйдите.

    Gentoo использует /etc/conf.d/hwclock для установки опций часов. Отредактируйте этот файл так, как вам необходимо.

    Код 3.4: Открываем /etc/conf.d/hwclock

    # nano -w /etc/conf.d/hwclock

    Если ваши часы не используют UTC, вам нужно добавить clock="local" в файл, иначе вы заметите некоторое несоответствие часов.

    Когда вы закончите конфигурировать /etc/conf.d/hwclock, сохранитесь и выйдите.

    Вы должны определить временную зону, которую вы ранее копировали в /etc/localtime, в файле /etc/timezone, чтобы последующие апдейты пакета sys-libs/timezone-data могли обновлять /etc/localtime автоматически. Например, если вы используете временную зону GMT, вам нужно написать GMT в файле /etc/timezone.

    Конфигурация локалей

    Скорее всего вы будете использовать одну или, может быть, две локали на вашей системе. Вам нужно указать, какие локали вам нужны в /etc/locale.gen.

    Код 3.5: Открываем /etc/locale.gen

    # nano -w /etc/locale.gen

    Следующие локали являются примером, для того, чтобы получить как Английский (Соединенные Штаты), так и Немецкий (Германия), с нужным форматом символов (вроде UTF-8).

    Код 3.6: Укажите ваши локали

    en_US ISO-8859-1

    en_US.UTF-8 UTF-8

    de_DE ISO-8859-1

    de_DE@euro ISO-8859-15

    Заметка: Вы можете выбрать нужные локали в виде списка, запустив locale -a

    Предупреждение: Мы настоятельно рекомендуем, чтобы вы использовали по крайней мере одну локаль UTF-8, так как некоторые приложения могут ее требовать.

    Следующим шагом будет запуск locale-gen. Эта программа сгенерирует все локали, которые вы указали в файле /etc/locale.gen.

    Код 3.7: Запускаем locale-gen

    # locale-gen

    Как только эта команда будет выполнена, вы можете указать настройки общесистемной локали в файле /etc/env.d/02locale:

    Код 3.8: Устанавливаем системную локаль по умолчанию в /etc/env.d/02locale

    LANG="de_DE.UTF-8"

    LC_COLLATE="C"

    Затем перезагрузите ваше окружение:

    Код 3.9: Перезагружаем окружение оболочки

    # env-update && source /etc/profile

    Мы создали полное руководство по локализации (http://www.gentoo.org/doc/en/guide-localization.xml#doc_chap3), чтобы помочь вам в данном процессе. Вы, также, можете прочитать наше детальное руководство по UTF-8 (http://www.gentoo.org/doc/en/utf-8.xml#doc_chap2), для получения очень специфичной информации по включению UTF-8 на вашей системе.

    Продолжайте со следующей главы «Установка необходимых системных приложений».

    9. Установка необходимых системных приложений

    9.a. Системный логгер

    Некоторые программы отсутствуют в архиве stage3, потому что несколько пакетов дают одинаковую функциональность. Теперь вам необходимо выбрать, какие из них установить.

    Первое, что вам необходимо выбрать, это программа, дающая возможности логгирования вашей системе. У Unix и Linux есть отличная история возможностей логгинга — вы можете логгировать все, что происходит на вашей системе в файлах логов. Это происходит через системный логгер.

    Gentoo предлагает несколько системных логгеров для выбора. Это sysklogd, который является обычным набором демонов логгирования, syslog-ng, расширенный системный логгер, и metalog, который является высоконастраиваемым системным логгером. Другие пакеты тоже могут быть доступны через Portage — число существующих пакетов увеличивается каждый день.

    Если вы планируете использовать sysklogd или syslog-ng, вы можете также захотеть установить logrotate после них, так как у этих системных логгеров нет встроенного механизма ротации для файлов логов.

    Чтобы установить системный логгер по вашему выбору, установите его, и добавьте к уровню запуска по умолчанию, используя rc-update. Следующий пример устанавливает syslog-ng. Конечно, вы можете заменить его на свой системный логгер:

    Код 1.1: Устанавливаем системный логгер

    # emerge syslog-ng

    # rc-update add syslog-ng default

    9.b. Опционально: Демон Cron

    Следующим идет демон cron. Хотя он опционален, и не необходим для вашей системы, будет мудро установить его. Но что такое демон cron? Демон cron запускает команды по расписанию. Это очень полезно, если вы хотите выполнять некоторые команды регулярно (например, каждый день, неделю или месяц).

    Gentoo предоставляет три возможных демона cron: dcron, fcron и vixie-cron. Установка одного из них похожа на установку системного логгера. Однако dcron и fcron требуют дополнительной конфигурационной команды, а именно «crontab /etc/crontab». Если вы не знаете, какой выбрать, используйте vixie-cron.

    Для установок без использования сети мы предоставляем только vixie-cron. Если вы хотите другой демон cron, вы можете подождать, и установить его позже.

    Код 2.1: Устанавливаем демон cron

    # emerge vixie-cron

    # rc-update add vixie-cron default

    (Если вы выбрали dcron или fcron) # crontab /etc/crontab

    9.c. Опционально: Индексация файлов

    Если вы хотите проиндексировать ваши системные файлы, чтобы их можно было быстро находить с использованием команды locate, вам нужно установить sys-apps/mlocate.

    Код 3.1: Устанавливаем mlocate

    # emerge mlocate

    9.d. Опционально: Удаленный Доступ

    Если вам нужен доступ к вашей системе удаленно после установки, не забудьте добавить sshd на уровень запуска по умолчанию:

    Код 4.1: Добавляем sshd к уровню запуска по умолчанию.

    # rc-update add sshd default

    Если вам нужен доступ по последовательной консоли (что возможно в случае удаленных серверов), вам нужно раскомментировать раздел последовательных консолей в /etc/inittab.

    Код 4.2: Редактируем /etc/inittab.

    # nano -w /etc/inittab

    Следующая выдержка показывает раскомментированный раздел:

    Код 4.3: Раскомментирование последовательных консолей в inittab

    # SERIAL CONSOLES

    s0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100

    s1:12345:respawn:/sbin/agetty 9600 ttyS1 vt100

    9.e. Программы работы с файловой системой

    В зависимости от того, какие файловые системы вы используете, вам нужно установить необходимые системные утилиты (для проверки файловых систем на целостность, создания дополнительных файловых систем, и так далее). Заметьте, что программы для работы с файловыми системами ext2/ext3 (e2fsprogs) на вашей системе уже установлены как часть системы.

    Следующая таблица дает список программ, которые вам необходимо установить, если вы используете определенную файловую систему:

    Файловая система

    XFS

    ReiserFS

    JFS

    Программа

    Команда для установки

    xfsprogs

    emerge xfsprogs

    reiserfsprogs

    emerge reiserfsprogs

    jfsutils

    emerge jfsutils

    9.f. Программы работы с сетью

    Если вам не нужно дополнительных программ, связанных с сетью (например, ppp или dhcp клиента), продолжайте с раздела «Конфигурация загрузчика».

    Опционально: Устанавливаем DHCP клиент

    Если вам нужно, чтобы Gentoo автоматически получал IP адреса для ваших сетевых интерфейсов, вам нужно установить dhcpd (либо любой другой клиент DHCP, смотрите раздел «Модульная сеть» для списка существующих клиентов DHCP). Если вы не сделаете этого сейчас, то после установки вы можете не попасть в Интернет.

    Код 6.1: Устанавливаем dhcpd

    # emerge dhcpcd

    Опционально: Устанавливаем клиент PPPoE

    Если вам нужен ppp для соединения с сетью, вам нужно установить его.

    Код 6.2: Устанавливаем ppp

    # emerge ppp

    10. Конфигурация загрузчика

    10.a. Делаем выбор

    Введение

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

    Для x86, Gentoo Linux имеет программы GRUB и LILO.

    Но прежде чем мы установим загрузчик, мы расскажем вам, как настроить фреймбуфер (имеетсяв виду, что вы его, конечно, хотите). С фреймбуфером вы можете запускать командную строку Linux, и она будет иметь некоторые (ограниченные) графические возможности (например, красивая картинка при загрузке Gentoo).

    Опционально: Фреймбуфер

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

    Прежде всего, вам нужно узнать устройство вашего фреймбуфера. Вы должны использовать uvesafb как драйвер VESA.

    Слово video контролирует опции показа фреймбуфера. Ему нужно указать драйвер фреймбуфера, за которым находятся опции, которые вы хотите включить. Все они перечислены в файле /usr/src/linux/Documentation/fb/uvesafb.txt. Самые часто используемые опции это:

    Опция

    ywrap

    mtrr:n

    mode

    Описание

    Предполагать, что графическая карта имеет кольцевую память (то есть, продолжает сначала, когда дошла до конца)

    Определить регистры MTRR. n может быть 0 — отключено, 1 — некешируемый, 2 — write-back, 3 — write-combining, 4 - write-through

    Установить разрешение, количество цветов и частоту обновления. Например, 1024x768-32@86 для разрешения1024x768, 32-битного цвета и частоты обновления 85 Гц.

    Результат может получиться что-то вроде video=uvesafb:mtrr:3,ywrap,1024x768-32@85. Запишите это значение, скоро оно вам понадобится.

    Теперь продолжайте устанавливать GRUB или LILO.

    10.b. по умолчанию: Используем GRUB

    Понимание терминологии GRUB

    Самой главной частью понимания GRUB является понимание того, как GRUB называет жесткие диски и разделы. Ваш раздел Linux /dev/sda1 скорее всего будет назван (hd0,0) в GRUB. Заметьте, что вокруг hd0,0 скобки — они необходимы.

    Жесткие диски начинают считаться с нуля, а не с «a», и разделы начинаются с нуля, а не с одного. Также помните, что за устройства hd считаются только жесткие диски, но не ide-устройства, не являющиеся atapi, например проигрыватели и пишущие cdrom. Также, такая же конструкция используется для устройств SCSI (обычно у них большие номера, чем у устройств IDE, если только BIOS не сконфигурирован для загрузки со SCSI-устройств). Когда вы просите BIOS загрузиться с другого жесткого диска (например, вашего primary slave), этот жесткий диск будет видеться как hd0.

    Если предположить, что вы имеете жесткий диск на /dev/sda, и два еще на /dev/sdb и /dev/sdc, то /dev/sdb1 станет (hd1,6). Это может показаться странным (оно и есть странно), но, как мы увидим, у GRUB есть механизм автодополнения, который может помочь тем из вас, у которых есть множество жестких дисков и разделов, и кто потерялся в схеме нумерации GRUB.

    Теперь, когда вы прочувствовали все это, пришло время установить GRUB.

    Установка GRUB

    Чтобы установить GRUB, сначала давайте скачаем его:

    Код 2.1: Установка GRUB

    # emerge grub

    Хотя GRUB теперь установлен, нам все еще нужно написать конфигурационный файл для него, и разместить GRUB в нашем MBR, чтобы GRUB автоматически загружал наше новое ядро. Создайте /boot/grub/grub.conf с помощью nano (или, если нужно, другого редактора).

    Код 2.2: Создаем /boot/grub/grub.conf

    # nano -w /boot/grub/grub.conf

    Теперь мы собираемся написать grub.conf. Удостоверьтесь, что вы используете имя файла вашего образа ядра и, если нужно, файла загрузочного образа.

    Заметка: Grub назначает устройства по данным BIOS. Если вы измените настройки BIOS, ваши устройства (и их номера) могут измениться. Например, если вы измените порядок устройств при загрузке, вам может понадобиться изменить конфигурацию grub.

    Заметка: Если ваша корневая файловая система JFS, вам нужно добавить «ro» к ядру, так как JFS нужно «переиграть» свой лог, прежде чем она разрешит работать с ней на чтение-запись.

    Код 2.3: Пример файла grub.conf

    # Какое ядро загружать по умолчанию. 0 — первое, 1 — второе, и т.д.

    default 0

    # Сколько секунд ждать, прежде чем ядро по умолчанию загрузится

    timeout 30

    # Красивая картинка при загрузке

    # Закомментируйте ее, если у вас нет видеокарты

    splashimage=(hd0,0)/boot/grub/splash.xpm.gz

    title Gentoo Linux 2.6.34-r1

    # Раздел, где расположен образ ядра (или операционная система).

    root (hd0,0)

    kernel /boot/kernel-2.6.34-gentoo-r1 root=/dev/sda3

    title Gentoo Linux 2.6.34-r1 (rescue)

    # Раздел, где расположен образ ядра (или операционная система).

    root (hd0,0)

    kernel /boot/kernel-2.6.34-gentoo-r1 root=/dev/sda3 init=/bin/bb

    # Следующие 4 строки нужны только, если у вас есть еще система Windows.

    # В данном случае, Windows находится на /dev/sda6.

    title Windows XP

    rootnoverify (hd0,5)

    makeactive

    chainloader +1

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

    Код 2.4: Выдержка для GRUB в случае ядер со включенным initramfs

    title Gentoo Linux 2.6.34-r1

    root (hd0,0)

    kernel /boot/2.6.34-r1 real_root=/dev/sda3

    initrd /boot/initramfs-genkernel-x86-2.6.34-gentoo-r1

    Если вы использовали другую схему разбивки и/или образ ядра, подправьте, соответственно, этот файл. Однако удостоверьтесь, что все, что идет за устройством GRUB (таким, как (hd0,0)) записано относительно точки монтирования, а не корню. Например, (hd0,0)/grub/splash.xpm.gz в реальности это /boot/grub/splash.xpm/gz, так как (hd0,0) это /boot.

    Однако, если вы выберете использовать другую схему разбивки, и не выделите /boot в отдельный раздел, то префикс /boot, который мы использовали в вышеприведенном коде будет действительно необходим. Если вы следовали предложенному плану разбивки, то префикс /boot не необходим, потому что будет работать ссылка на /boot. Вкратце, вышеприведенные примеры должны работать независимо от того, определили ли вы отдельный /boot раздел или нет.

    Если вам нужно передать любые дополнительные параметры ядру, просто добавьте их к конце команды. Мы уже передали одну опцию (root=/dev/sda3 или real_root=/dev/sda3), но вы можете передать и другие, например параметр video для фреймбуфера, так, как мы обсуждали ранее.

    Если ваш конфигурационный файл загрузчика содержит параметр real_root, используйте параметр real_rootflags для установки опций монтирования корневой файловой системы.

    Если вы используете 2.6.7 или более новое ядро, и вы поставили джамперы на жестком диске, так как BIOS не умеет работать с большими жесткими дисками, вам нужно добавить sda=stroke. Замените sda на устройство, которому нужна данная опция.

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

    Теперь сохраните файл grub.conf и выйдите. Вам все еще надо установить GRUB в MBR (Master Boot Record), чтобы GRUB автоматически выполнялся при загрузке вашей системы.

    Разработчики GRUB рекомендуют использовать grub-install. Однако, если по какой-то причине grub-install не сможет выполниться корректно, у вас все еще есть возможность вручную установить GRUB.

    Продолжайте читать либо «по умолчанию: устанавливаем GRUB, используя grub-install», либо «Альтернатива: Устанавливаем GRUB вручную».

    по умолчанию: устанавливаем GRUB, используя grub-install

    Чтобы установить GRUB вам нужно выполнить команду grub-install. Однако, grub-install не заработает сразу же, так как вы находитесь в чрут-окружении. Нам нужно создать /etc/mtab, в котором будет список всех смонтированных файловых систем. Радует то, что существует простой путь это сделать — просто скопировать /proc/mounts в /etc/mtab, за исключением строчки с rootfs, если вы не создавали отдельный загрузочный раздел. Следующая команда будет работать в любом случае.

    Код 2.5: Создаем /etc/mtab

    # grep -v rootfs /proc/mounts > /etc/mtab

    Теперь мы можем установить GRUB, используя grub-install:

    Код 2.6: Запускаем grub-install

    # grub-install --no-floppy /dev/sda

    Если у вас остались вопросы, касающиеся GRUB, проконсультируйтесь в GRUB FAQ (по адресу http://www.gnu.org/software/grub/grub-faq.html), GRUB Wiki (по адресу http://grub.enbug.org/GrubLegacy), или прочитайте info grub в вашем терминале.

    Продолжайте читать с раздела «Перезагрузка системы»

    Альтернатива: Устанавливаем GRUB вручную

    Чтобы начать конфигурацию GRUB, вы пишете grub. Вам покажут подсказку grub>. Теперь вы должны ввести правильные команды, чтобы установить загрузочную запись GRUB на ваш жесткий диск.

    Код 2.7: Запускаем оболочку GRUB

    # grub --no-floppy

    Заметка: Если в вашей системе нет флоппи-дисководов, добавьте опцию --no-floppy к вышеприведенной команде, чтобы grub не попытался просканировать (несуществующие) флоппи-дисководы.

    В конфигурации для примера, мы хотим установить GRUB так, чтобы он читал свою информацию из загрузочного раздела /dev/sda1, и установить загрузчик GRUB в MBR жесткого диска (master boot record), чтобы первое, что мы увидели, когда включили компьютер, была подсказка GRUB. Конечно, если вы не следовали конфигурации для примера в течении установки, то вам нужно соответствующим образом изменить команды.

    Механизм автодополнения по tab может использоваться в GRUB. Например, если вы наберете «root (», и нажмете TAB, вам покажут список устройств (таких, как hd0). Если вы наберете «root (hd0,», и нажмете TAB, вы получите список существующих разделов, из которых можно выбрать (например hd0,0).

    Используя автодополнение по tab, настроить GRUB не должно быть сложно. Теперь нужно идти конфигурировать GRUB, правда? :-)

    Код 2.8: Устанавливаем GRUB в MBR

    grub> root (hd0,0) (Specify where your /boot partition resides)

    grub> setup (hd0) (Install GRUB in the MBR)

    grub> quit (Exit the GRUB shell)

    Заметка: Если вы хотите установить GRUB в некоторый раздел, а не в MBR, вам нужно изменить команду setup, чтобы она указывала на нужный раздел. Например, если вы хотите установить GRUB в /dev/sda3, то команда будет setup (hd0,2). Однако так захотят делать очень немногие пользователи.

    Если у вас остались вопросы, касающиеся GRUB, проконсультируйтесь в GRUB FAQ (по адресу http://www.gnu.org/software/grub/grub-faq.html), GRUB Wiki (по адресу http://grub.enbug.org/GrubLegacy), или прочитайте info grub в вашем терминале.

    Продолжайте читать с раздела «Перезагрузка системы»

    10.c. Альтернатива: Используем LILO

    Устанавливаем LILO

    LILO, или LInuxLOader, это испытанная рабочая лошадка загрузчиков Linux. Однако в нем недостает некоторых возможностей, которые есть у GRUB (поэтому GRUB в настоящее время и набирает популярность). Причина, по которой LILO все еще используется состоит в том, что на некоторых системах GRUB не работает, а LILO работает. Конечно, он используется еще и потому, что некоторые люди знают LILO, и хотят на нем остаться. В любом случае, Gentoo поддерживает и то, и другое, и, вы решили выбрать LILO.

    Устанавливается LILO очень просто, просто используйте emerge.

    Код 3.1: Устанавливаем LILO

    # emerge lilo

    Конфигурация LILO

    Чтобы сконфигурировать LILO, вы должны создать /etc/lilo.conf. Запустите ваш любимый редактор (в данной книге мы будем использовать nano) и создайте файл.

    Код 3.2: Создаем /etc/lilo.conf

    # nano -w /etc/lilo.conf

    Несколько разделов назад мы попросили вас запомнить имя образа ядра, которое вы создали. В следующем примере lilo.conf мы используем схему разбивки для примера. Есть две разных части:

  • Одна для тех, кто не использовал genkernel для создания своего ядра

  • Одна для тех, кто использовал genkernel для создания своего ядра

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

    Заметка: Если ваша корневая файловая система JFS, вам нужно добавить «ro» к ядру, так как JFS нужно «переиграть» свой лог, прежде чем она разрешит работать с ней на чтение-запись.

    Код 3.3: Пример /etc/lilo.conf

    boot=/dev/sda # Установим LILO в MBR

    prompt # Дадим пользователю возможность выбрать то, что ему

    # нужно

    timeout=50 # Ждем 5 секунд перед загрузкой

    default=gentoo # Что загружать если пользователь ничего не выбрал

    # Для не-genkernel пользователей

    image=/boot/kernel-2.6.34-gentoo-r1

    label=gentoo # Имя раздела

    read-only # Стартуем в режиме «только чтение». Не менять!

    root=/dev/sda3 # Расположение корневой файловой системы

    image=/boot/kernel-2.6.34-gentoo-r1

    label=gentoo.rescue # Имя раздела

    read-only # Стартуем в режиме «только чтение». Не менять!

    root=/dev/sda3 # Расположение корневой файловой системы

    append="init=/bin/bb" # Запускаем оболочку восстановления Gentoo

    # Для пользователей genkernel

    image=/boot/kernel-genkernel-x86-2.6.34-gentoo-r1

    label=gentoo

    read-only

    append="real_root=/dev/sda3"

    initrd=/boot/initramfs-genkernel-x86-2.6.34-gentoo-r1

    # Следующие две строки нужны только если у вас есть вторая система

    # Windows. В данном случае, Windows находится на /dev/sda6.

    other=/dev/sda6

    label=windows

    Заметка: Если вы разбили свой диск по-другому, или используете другое ядро, измените файл так, как вам нужно.

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

    Код 3.4: Выдержка для LILO в случае ядер со включенным initramfs

    image=/boot/kernel-2.6.34-gentoo-r1

    label=gentoo

    read-only

    append="real_root=/dev/sda3"

    initrd=/boot/initramfs-genkernel-x86-2.6.34-gentoo-r1

    Если вам нужно передать любые дополнительные опции в ядро, добавьте команду append к разделу. Как пример, мы добавим команду video для включения фреймбуфера.

    Код 3.5: Используем append, чтобы добавить опции ядра.

    image=/boot/kernel-2.6.34-gentoo-r1

    label=gentoo

    read-only

    root=/dev/sda3

    append="video=uvesafb:mtrr,ywrap,1024x768-32@85"

    Если вы используете 2.6.7 или более новое ядро, и вы поставили джамперы на жестком диске, так как BIOS не умеет работать с большими жесткими дисками, вам нужно добавить sda=stroke. Замените sda на устройство, которому нужна данная опция.

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

    Теперь сохраните файл и выйдите. Чтобы закончить, вам нужно запустить /sbin/lilo, чтобы LILO могло применить /etc/lilo.conf к вашей системе (то есть, установить себя на диск). Помните, что вам нужно будет запускать /sbin/lilo каждый раз, когда вы устанавливаете новое ядро, или вносите любые изменения в меню.

    Код 3.6: Заканчиваем установку LILO

    # /sbin/lilo

    Если у вас остались вопросы, касающиеся LILO, посмотрите на ее страницу в Википедии (http://en.wikipedia.org/wiki/LILO_%28boot_loader%29)

    10.d. Перезагружаем систему

    Выйдите из окружения с чрутом, и размонтируйте все смонтированные разделы. Затем введите одну магическую команду, которую вы так ждали — reboot.

    Код 4.1: Размонтируем все разделы и перезагружаемся.

    # exit

    cdimage ~# cd

    cdimage ~# umount -l /mnt/gentoo/dev{/shm,/pts,}

    cdimage ~# umount -l /mnt/gentoo{/boot,/proc,}

    cdimage ~# reboot

    Конечно, не забудьте убрать загрузочный CD, иначе CD загрузится снова, вместо вашей новой системы Gentoo.

    После перезагрузки читайте раздел «Окончание установки Gentoo».

    11. Окончание установки Gentoo

    11.a. Работа с пользователями

    Добавляем пользователя для повседневного использования

    Работать как root в системе Unix/Linux опасно, и этого нужно избегать, как только возможно. Поэтому строго рекомендуется добавить пользователя для повседневного использования.

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

    Группа

    audio

    cdrom

    floppy

    games

    portage

    usb

    video

    wheel

    Описание

    Имеет доступ к аудио-устройствам

    Имеет доступ к оптическим устройствам

    Имеет доступ к флоппи-устройствам

    Может играть в игры

    Может использовать emerge --pretend как обычный пользователь

    Может работать с USB устройствами

    Имеет доступ к железу, связанному с видеозахватом, а также к видеоускорителям (железным).

    Может использовать su

    Например, создайте пользователя с именем john, который член групп wheel, users и audio. Сначала залогиньтесь под root (так как только root может создавать пользователей), и запустите useradd:

    Код 1.1: Добавляем пользователя для повседневного использования

    Login: root

    Password: (Ваш пароль root)

    # useradd -m -G users,wheel,audio -s /bin/bash john

    # passwd john

    Password: (Введите пароль для john)

    Re-enter password: (Повторите пароль для проверки)

    Если пользователю понадобится выполнить какую-то задачу от лица root, он может использовать команду su -, чтобы временно получить права root. Другим путем может быть использование пакета sudo, который очень безопасен (если правильно сконфигурирован).

    11.b. Очистка диска

    Удаляем архивы tar

    Теперь, когда вы закончили устанавливать Gentoo и перезагрузились, если все пошло хорошо, можно удалить скачанный архив stage3 и образ Portage с вашего жесткого диска. Помните, что они были скачаны в вашу директорию /.

    Код 2.1: Удаляем архив tar со stage3

    # rm /stage3-*.tar.bz2*

    Код 2.2: Удаляем образ Portage

    # rm /portage-latest.tar.bz2*

    12. Куда идти дальше?

    12.a. Документация

    Поздравляем! Теперь у вас есть работающая система Gentoo. Но куда идти дальше? Какие теперь ваши возможности? Что исследовать первым делом? Gentoo дает своим пользователям множество возможностей, поэтому, существует множество документированных (и не очень документированных) особенностей.

    Вы точно должны заглянуть в следующую часть данного документа, которая называется «Работа с Gentoo», которая объясняет, как поддерживать ваши приложения новыми, как устанавливать больше приложений, что такое USE-флаги, как работает система инициализации Gentoo, и так далее.

    Если вы заинтересованы в оптимизации вашей системы для использования на десктопе, или вы хотите научиться, как сконфигурировать вашу систему, чтобы она была рабочей десктопной системой, загляните на наши ресурсы с документацией (http://www.gentoo.org/doc/en/index.xml?style=printable&catid=desktop). Кроме того, вы можете захотеть использовать наш гайд по локализации (http://www.gentoo.org/doc/en/guide-localization.xml?style=printable), чтобы вы чувствовали себя в своей системе как дома.

    У нас также есть книга о безопасности Gentoo (http://www.gentoo.org/doc/en/security/?style=printable), которую тоже стоит прочитать.

    Для полного списка всей существующей документации, проверьте нашу страницу с документацией (http://www.gentoo.org/doc/en/index.xml?style=printable)

    В конце, у нас также есть официальная Gentoo Wiki (http://wiki.gentoo.org/), где можно найти дополнительную документацию, предоставленную сообществом.

    12.b. Gentoo в сети

    Вы, конечно, всегда желанны на наших форумах Gentoo (http://forums.gentoo.org/), или на одном из наших Gentoo-IRC каналов (http://www.gentoo.org/main/en/irc.xml?style=printable).

    У нас также есть несколько почтовых списков рассылки (http://www.gentoo.org/main/en/lists.xml?style=printable), открытых для всех наших пользователей. Информация о том, как присоединиться к ним, содержится в вышеприведенной ссылке.

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

    B. Работа с Gentoo1. Введение в Portage

    1.a. Добро пожаловать в Portage

    Portage — это, наверное, самое заметная инновация Gentoo в работе с приложениями. С ее высокой гибкостью и огромным количеством возможностей, ее часто называют лучшей программой для работой с приложениями в Linux.

    Portage полностью написана на на Python и Bash, и, поэтому, полностью видима пользователем, так как оба этих языка являются скриптовыми.

    Большинство пользователей будут работать с Portage через приложение emerge. Эта глава не предназначена для дублирования информации, которую можно получить через man-страницу emerge. Для полного обзора опций emerge, просмотрите man-страницу:

    Код 1.1: Читаем man-страницу emerge

    $ man emerge

    1.b. Дерево Portage

    Ebuild'ы (Ебилды)

    Когда мы говорим о пакетах, мы часто имеем в виду названия приложений, которые существуют для пользователя Gentoo в дереве Portage. Дерево Portage это коллекция ebuild'ов (ебилдов), то есть, файлов, содержащих всю информацию, которая нужна Portage для поддержки приложений (установки, поиска, запросов, и т. д.). Эти ебилды находятся по умолчанию, в /usr/portage.

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

    Обновление дерева Portage

    Дерево Portage обычно обновляется с помощью rsync, быстрой инкрементальной утилиты передачи файлов. Обновление достаточно просто, так как команда emerge дает пользователю фронтенд для rsync:

    Код 2.1: Обновление дерева Portage

    # emerge --sync

    Если вы не можете запустить rsync из-за ограничений файрвола, вы все равно можете обновить ваше дерево Portage, используя наши образы дерева Portage, генерируемые каждый день. Утилита emerge-webrsync автоматически загрузит и установит последний образ на вашу систему.

    Код 2.2: Запускаем emerge-webrsync

    # emerge-webrsync

    Дополнительным преимуществом использования emerge-webrsync является то, что эта утилита позволяет администратору загружать только те образы дерева Portage, которые подписаны ключом GPG команды Gentoo. Более подробная информация по этому вопросу может быть найдена в разделе «Возможности Portage» в подразделе «Загрузка проверенных образов дерева Portage».

    1.c. Поддержка приложений

    Поиск программ

    Чтобы найти что-либо в названиях приложений в дереве Portage, вы можете использовать встроенные возможности поиска команды emerge. по умолчанию, emerge --search вернет имена пакетов, названия которых (полностью или частично) заданному критерию поиска.

    Например, чтобы найти все пакеты, в имени которых есть «pdf»:

    Код 3.1: Ищем пакеты с pdf в названии

    $ emerge --search pdf

    Если вы хотите найти что-то также и в описаниях, вы можете использовать ключ --searchdesc (или -S):

    Код 3.2: Поиск пакетов, связанных с pdf

    $ emerge --searchdesc pdf

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

    Код 3.3: Пример вывода «emerge --search»

    * net-print/cups-pdf

    Latest version available: 1.5.2

    Latest version installed: [ Not Installed ]

    Size of downloaded files: 15 kB

    Homepage: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/

    Description: Provides a virtual printer for CUPS to produce PDF files.

    License: GPL-2

    Установка приложений

    Как только вы нашли название приложения, которое вам нравится, вы можете установить его достаточно просто с помощью emege — просто добавьте имя пакета. Например, чтобы установить gnumeric:

    Код 3.4: Устанавливаем gnumeric

    # emerge gnumeric

    Так как многие приложения зависят друг от друга, любая попытка установить пакет с приложением может вылиться в установку и некоторых зависимостей. Не волнуйтесь, Portage хорошо работает с зависимостями. Если вы хотите определить, что поставит Portage, когда вы попросите его установить некоторый пакет, добавьте опцию --pretend. Например:

    Код 3.5: Что установится с gnumeric

    # emerge --pretend gnumeric

    Когда вы просите Portage установить пакет, он скачает необходимый исходный код из Интернета (если нужно) и сохранит его (по умолчанию) в /usr/portage/distfiles. После этого, он распакует, скомпилирует и установит пакет. Если вы хотите, чтобы Portage только скачал исходники, но не устанавливал их, добавьте опцию --fetchonly к команде emerge:

    Код 3.6: Скачиваем исходный код для gnumeric

    # emerge --fetchonly gnumeric

    Ищем документацию для установленного пакета

    Многие пакеты имеют свою собственную документацию. Иногда USE флаг doc определяет, нужно ли устанавливать документацию с пакетом, или нет. Вы можете проверить существование USE флага doc с помощью команды emerge -vp <имя пакета>.

    Код 3.7: Проверяем наличие USE флага doc

    (alsa-lib, конечно, тут только для примера)

    # emerge -vp alsa-lib

    [ebuild N ] media-libs/alsa-lib-1.0.14_rc1 -debug +doc 698 kB

    Лучшим способом включения USE флага doc будет работа с ним для каждого пакета отдельно, через /etc/portage/package.use, так, что вы получите документацию только для интересующих вас пакетов. Включение этого флага глобально иногда вызывает проблемы с круговыми зависимостями. Для большего количества информации, пожалуйста прочитайте главу «USE-флаги»

    Как только пакет установлен, его документация обычно находится в поддиректории, совпадающей с именем пакета в директории /usr/share/doc. Вы также можете получить список всех установленных файлов с помощью приложения equery, которое является частью пакета app-portage/gentoolkit.

    Код 3.8: Находим документацию к пакету

    # ls -l /usr/share/doc/alsa-lib-1.0.14_rc1

    total 28

    -rw-r--r-- 1 root root 669 May 17 21:54 ChangeLog.gz

    -rw-r--r-- 1 root root 9373 May 17 21:54 COPYING.gz

    drwxr-xr-x 2 root root 8560 May 17 21:54 html

    -rw-r--r-- 1 root root 196 May 17 21:54 TODO.gz

    (Или вы можете использовать equery, чтобы найти нужные вам файлы)

    # equery files alsa-lib | less

    media-libs/alsa-lib-1.0.14_rc1

    * Contents of media-libs/alsa-lib-1.0.14_rc1:

    /usr

    /usr/bin

    /usr/bin/alsalisp

    (Вывод обрезан)

    Удаление программ

    Когда вы хотите удалить программный пакет из вашей системе, используйте emerge --unmerge. Это скажет Portage удалить все установленные этим пакетом файлы, кроме тех конфигурационных файлов этого приложения, которые вы меняли после установки. Это позволяет продолжить работать с пакетом, если вы когда-нибудь решите установить его снова.

    Однако существует большая опасность: Portage не проверяет, требуется ли приложение, которое вы удаляете какому-либо другому приложению. Однако он предупредит вас, когда вы захотите удалить важный пакет, который сломает вашу систему, если вы его удалите.

    Код 3.9: Удаляем gnumeric из системы

    # emerge --unmerge gnumeric

    Когда вы удаляете пакет из системы, зависимости этого пакета, которые были автоматически установлены при установки пакета, остаются. Чтобы Portage нашел все зависимости, которые теперь тоже можно удалить, используйте ключ --depclean программы emerge. Мы поговорим об этом позже.

    Обновляем вашу систему

    Чтобы держать вашу систему в превосходном состоянии (и не забывать ставить последние обновления безопасности), вам нужно регулярно обновлять вашу систему. Так как Portage проверяет только ебилды в вашем дереве Portage, сначала вам нужно обновить ваше дерево Portage. Когда ваше дерево Portage обновлено, вы можете обновить вашу систему с помощью команды emerge --update world. В следующем примере мы также используем ключ —ask, который скажет Portage отображать список пакетов, которые он хочет обновить, и спросить вас для продолжения:

    Код 3.10: Обновляем вашу систему

    # emerge --update --ask world

    Затем Portage найдет новые версии приложений, которые вы установили. Однако он проверит только версии для приложений, которые вы установили явно (приложения, находящиеся в списке /var/lib/portage/world) — он не проверяет все их зависимости. Если вы хотите обновить и зависимости этих пакетов тоже, добавьте аргумент --deep:

    Код 3.11: Обновляем вашу систему с зависимостями

    # emerge --update --deep world

    Но это все еще не означает «все пакеты». Некоторые пакеты на вашей системе были нужны в течении процесса компиляции и сборки пакетов, но как только пакет установлен, эти зависимости больше не нужны. Portage называет такие зависимости «build»-зависимости. Чтобы включить и их в цикл обновления, добавьте --with-bdeps=y:

    Код 3.12: Обновляем вашу систему целиком.

    # emerge --update --deep --with-bdeps=y world

    Так как обновления безопасности также случаются и в пакетах, которые вы не устанавливали явно (но они установились как зависимости других программ), то рекомендуется запускать эту команду время от времени.

    Если вы изменили какой-нибудь из USE-флагов недавно, вы можете захотеть добавить флаг --newuse. Portage тогда проверит, требует ли это изменение установки новых пакетов, или перекомпиляции существующих:

    Код 3.13: Делаем полный апдейт

    # emerge --update --deep --with-bdeps=y --newuse world

    Метапакеты

    Некоторые пакеты в дереве Portage не имеют никакого реального содержимого, но используются для установки набора пакетов. Например, пакет kde-meta установит полное KDE окружение на вашей системе, установив различные, связанные с KDE пакеты как свои зависимости.

    Если вы когда-нибудь захотите удалить такой пакет с вашей системы, то запуск emerge --unmerge на пакет, не будет иметь большого эффекта, так как зависимости останутся в системе.

    У Portage есть функциональность, чтобы удалить такие зависимости, но так как наличие приложений динамично, сначала вам нужно обновить полностью вашу систему, включая новые изменения, появившиеся при изменении USE-флагов. Потом вы можете запустить emerge --depclean, чтобы удалить более ненужные зависимости. Когда это сделано, вам нужно пересобрать приложения, которые были динамически слинкованы с приложениями, которые теперь были удалены (и которые им больше не нужны).

    Все это выполняется следующими тремя командами:

    Код 3.14: Удаляем ненужные зависимости

    # emerge --update --deep --newuse world

    # emerge --depclean

    # revdep-rebuild

    revdep-rebuild находится в пакете gentoolkit. Не забудьте установить его вначале:

    Код 3.15: Устанавливаем пакет gentoolkit

    # emerge gentoolkit

    1.d. Лицензии

    Начиная с Portage версии 2.1.7, вы можете принять или отклонить приложения, в зависимости от его лицензии. Все пакеты в дереве содержат запись LICENSE в своих ебилдах. Запуск команды emerge --search имя_пакета покажет вам лицензию пакета.

    по умолчанию, Portage разрешает все лицензии, кроме Соглашения с Конечным Пользователем (EULA), потому что она требует прочтения и соглашения с ней.

    Переменная, которая контролирует разрешенные лицензии, называется ACCEPT_LICENSE, и ее можно установить в /etc/portage/make.conf:

    Код 4.1: Значение ACCEPT_LICENSE по умолчанию в /etc/portage/make.conf

    ACCEPT_LICENSE="* -@EULA"

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

    Вы можете установить ACCEPT_LICENSE глобально, в /etc/portage/make.conf, либо можете указать ее для каждого пакета в /etc/portage/package.license.

    Например, если вы хотите позволить лицензию truecrypt-2.7 для app-crypt/truecrypt, добавьте следующее в /etc/portage/package.license:

    Код 4.2: Определяем лицензию truecrypt в package.license

    app-crypt/truecrypt truecrypt-2.7

    Это разрешит установку версий truecrypt, имеющих лицензию truecrypt-2.7, но не версий с лицензией truecrypt-2.8.

    Важно: Лицензии сохраняются в /usr/portage/licenses, а группы лицензий находятся в /usr/portage/profiles/license_groups. Первая запись на каждой строке (заглавными буквами) это имя группы лицензий, а затем каждая запись это индивидуальная лицензия.

    Группы лицензий, определенные в ACCEPT_LICENSE, предваряются знаком @. Вот пример системы, которая глобально разрешает группу GPL-совместимых лицензий, а также несколько других групп и индивидуальных лицензий.

    Код 4.3: ACCEPT_LICENSE в /etc/make.conf

    ACCEPT_LICENSE="@GPL-COMPATIBLE @OSI-APPROVED @EULA atheros-hal BitstreamVera"

    Если вы хотите только свободное программное обеспечение и документацию на вашей системе, вы можете использовать следующую настройку:

    Код 4.4: Используем только свободные лицензии

    ACCEPT_LICENSE="-* @FREE"

    В данном случае «свободная» по определению FSF и OSI. Любой пакет, чья лицензия не отвечает этим требованиям, не будет установлен на вашей системе.

    1.e. Когда Portage ругается...

    Про слоты, виртуальные пакеты, ветки, архитектуры и профили

    Как мы уже говорили, Portage очень мощная программа, и поддерживает многие возможности, которых нет у других программ менеджмента приложений. Чтобы понять это, мы объясним некоторые аспекты Portage, не обращая внимания на слишком большие детали.

    При использовании Portage, различные версии одного и того же пакета могут существовать на одной и той же системе. Другие дистрибутивы обычно именуют их пакеты вместе с версиями (например freetype и freetype2), но Portage использует технологию, называемую слотами. Ебилд определяет некоторый слот для своей версии. Ебилды, у которых слоты различны, могут существовать на одной и той же системе. Например, пакет freetype имеет ебилды с SLOT=«1» и SLOT=«2».

    Также существуют пакеты, которые дают одну и ту же функциональность, но реализованы по-разному. Например, metalogd, sysklogd и syslog-ng это все системные логгеры. Приложения, которые опираются на существование «системного логгера» не могут зависеть, например, от metalogd, так как и другие системные логгеры тоже будут хорошим выбором. Portage позволяет виртуальные пакеты: каждый системный логгер описан как «провайдер» сервисов логгинга в виртуальном пакете logger категории virtual, поэтому приложения могут зависеть от пакета virtual/logger.

    Приложения в дереве Portage могут находится в различных ветках. по умолчанию, ваша система принимает только пакеты, которые Gentoo считает стабильными. Большинство новых приложений, когда они попадают в дерево, добавляются в тестовую ветку, что означает, что необходимо больше тестирования, прежде чем приложение будет помечено как стабильное. Хотя вы будете видеть ебилды для этих приложений в дереве Portage, но Portage не будет их видеть, пока они не будут помещены в стабильную ветку.

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

    Каждая установка Gentoo относится к некоторому профилю, который содержит (кроме иной информации), список пакетов, которые нужны системе для нормального функционирования.

    Блокированные пакеты

    Код 5.1: Portage предупреждает о блокированных пакетов (c --pretend)

    [blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)

    Код 5.2: Portage предупреждает о блокированных пакетов (без --pretend)

    !!! Error: the mail-mta/postfix package conflicts with another package.

    !!! both can't be installed on the same system together.

    !!! Please use 'emerge --pretend' to determine blockers.

    Ебилды содержат специфические поля, которые информируют Portage о своих зависимостях. Есть два вида зависимостей - «build»-зависимости, определяемые в DEPEND и «run-time»-зависимости, определяемые в RDEPEND. Когда одна из этих зависимостей явно помечает пакет (возможно виртуальный), как несовместимый, то включается блокировка.

    Хотя новые версии Portage достаточно умны, чтобы обойти маленькие блокировки без вмешательства пользователя, может случиться, что вам нужно будет починить их самим, как объяснено ниже.

    Чтобы починить блокировку, вы можете выбрать не устанавливать пакет, либо деинсталлировать конфликтующий пакет. В приведенном примере, вы можете не устанавливать postfix, либо вначале удалить ssmtp.

    Вы также можете увидеть блокирующие пакеты с определенной версией, например <media-video/mplayer-1.0_rc1-r2. В данном случае, обновление до более новой версии блокирующего пакета уберет блокировку.

    Возможно также, что два пакета, которые только должны установиться, блокируют друг друга. В этом редком случае, вы должны определить, почему вам необходимы именно оба. В большинстве случаев вы можете обойтись и одним из пакетов. Если же это не так, отправьте баг в систему багтрекинга Gentoo (http://bugs.gentoo.org/)

    Замаскированные пакеты

    Код 5.3: Portage предупреждает о замаскированных пакетах

    !!! all ebuilds that could satisfy "bootsplash" have been masked.

    Код 5.4: Portage предупреждает о замаскированных пакетах - причина

    !!! possible candidates are:

    - gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)

    - lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)

    - sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)

    - dev-util/cvsd-1.0.2 (masked by: missing keyword)

    - games-fps/unreal-tournament-451 (masked by: package.mask)

    - sys-libs/glibc-2.3.2-r11 (masked by: profile)

    - net-im/skype-2.1.0.81 (masked by: skype-eula license(s))

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

  • Ключевое слово ~arch означает, что приложение недостаточно протестировано, чтобы поместить его в стабильную ветку. Подождите несколько дней или недель, и попробуйте снова.

  • Ключевое слово -arch или -* означает, что приложение не работает на вашей архитектуре. Если вы верите, что пакет работает, напишите баг на нашем сайте (http://bugs.gentoo.org)

  • Ключевое слово missing означает, что приложение не было протестировано для вашей архитектуры. Попросите команду портирование архитектуры протестировать пакет, либо протестируйте сами и доложите о ваших находках на нашем сайте (http://bugs.gentoo.org)

  • package.mask означает, что пакет был определен как нерабочий, нестабильный, и был помечен как «лучше не использовать»

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

  • license означает, что лицензия приложения не совместима с вашей настройкой ACCEPT_LISENSE. Вы должны явно разрешить лицензию или группу лицензий приложения, прописав ее в /etc/make.conf, либо в /etc/portage/package.license. Обратитесь к разделу «Лицензии» для того, чтобы понять, как работают лицензии.

  • Необходимость изменить USE-флаги

    Код 5.5: Portage предупреждает о необходимости изменить USE-флаг

    The following USE changes are necessary to proceed:

    #required by app-text/happypackage-2.0, required by happypackage (argument)

    >=app-text/feelings-1.0.0 test

    Ошибка может быть показана и так, если флаг --autounmask не установлен:

    Код 5.6: Portage показывает ошибку, требующую изменить USE-флаг

    emerge: there are no ebuilds built with USE flags to satisfy "app-text/feelings[test]".

    !!! One of the following packages is required to complete your request:

    - app-text/feelings-1.0.0 (Change USE: +test)

    (dependency required by "app-text/happypackage-2.0" [ebuild])

    (dependency required by "happypackage" [argument])

    Такое предупреждение, либо ошибка возникает, когда вы хотите установить пакет, который не только зависит от другого приложения, но и требует, чтобы это приложение было установлено с некоторым USE-флагом (либо набором USE-флагов). В данном примере, пакет app-text/feelings требуется собрать с USE=«test», но данный USE-флаг в системе не установлен.

    Чтобы решить данную проблему, либо добавьте данный USE-флаг в ваши глобальные USE-флаги, в /etc/make.conf, либо установите его для отдельного пакета в /etc/portage/package.use.

    Отсутствующие зависимости

    Код 5.7: Portage предупреждает об отсутствующей зависимости

    emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".

    !!! Problem with ebuild sys-devel/gcc-3.4.2-r2

    !!! Possibly a DEPEND/*DEPEND problem.

    Приложение, которое вы пытаетесь установить, зависит от другого пакета, который не существует для вашей системы. Пожалуйста, проверьте список багов (http://bugs.gentoo.org/), чтобы определить, известно ли об этой ошибке, и если нет, то сообщите об этом. Если только вы не смешиваете различные ветки, это не должно произойти, и, поэтому, является багом.

    Неоднозначное имя ебилда

    Код 5.8: Portage предупреждает о неоднозначном имени ебилда

    [ Results for search key : listen ]

    [ Applications found : 2 ]

    * dev-tinyos/listen [ Masked ]

    Latest version available: 1.1.15

    Latest version installed: [ Not Installed ]

    Size of files: 10,032 kB

    Homepage: http://www.tinyos.net/

    Description: Raw listen for TinyOS

    License: BSD

    * media-sound/listen [ Masked ]

    Latest version available: 0.6.3

    Latest version installed: [ Not Installed ]

    Size of files: 859 kB

    Homepage: http://www.listen-project.org

    Description: A Music player and management for GNOME

    License: GPL-2

    !!! The short ebuild name "listen" is ambiguous. Please specify

    !!! one of the above fully-qualified ebuild names instead.

    Приложение, которое вы хотите установить имеет имя, которое принадлежит более чем одному пакету. Вам нужно указать также и имя категории. Portage сообщит вам о возможных совпадениях, из которых можно выбрать.

    Круговые зависимости

    Код 5.9: Portage предупреждает о круговых зависимостях

    !!! Error: circular dependencies:

    ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1

    ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2

    Два (или более) пакетов, которые вы хотите установить, зависят друг от друга, и, поэтому, не могут быть установлены. Скорее всего это баг в дереве Portage. Пожалуйста, обновите дерево после небольшой паузы, и попробуйте снова. Вы можете также проверить наш сайт (http://bugs.gentoo.org/), чтобы узнать, знают ли про этот случай, и если нет, то сообщить о нем.

    Ошибка загрузки

    Код 5.10: Portage предупреждает об ошибке загрузки

    !!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...

    (...)

    !!! Some fetch errors were encountered. Please see above for details.

    Portage не смог скачать исходники данного приложения и попытается продолжить устанавливать другие приложения (если это возможно). Эта ошибка может быть из-за зеркала, которое некорректно синхронизировалось, или потому что ебилд показывает на неправильное место. Сервер, где находятся исходники, также, может упасть по какой-то причине.

    Повторите попытку через час, чтобы посмотреть, осталась ли проблема.

    Защита системного профиля

    Код 5.11: Portage предупреждает о пакете, защенном профилем

    !!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'

    !!! This could be damaging to your system.

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

    Ошибки проверки дайджеста

    Иногда, когда вы пытаетесь установить пакет, этого не происходит, и появляется ошибка:

    Код 5.12: Ошибка проверки дайджеста

    >>> checking ebuild checksums

    !!! Digest verification failed:

    Это является знаком, что с деревом Portage что-то не так — часто это потому, что разработчик допустил ошибку при коммите пакета в дерево.

    Когда проверка дайджеста не проходит, не пробуйте обновить дайджест пакета сами. Запуск «ebuild foo manifest» не починит проблему, а почти наверняка сделает еще хуже!

    Вместо этого, подождите час или два, чтобы дерево обновилось. Скорее всего, ошибку уже заметили, но может понадобиться некоторое время, чтобы починить дерево Portage. Пока вы ждете, проверьте страницу с багами (http://bugs.gentoo.org/), и посмотреть, не написал ли кто-нибудь про этот баг. Если нет, не стесняйтесь, и напишите баг для сломанного пакета.

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

    Важно: Это не означает, что вы можете ресинхронизировать ваше дерево несколько раз! Как сказано в полиси rsync (когда вы запускаете emerge --sync), пользователи, которые запускают синхронизацию слишком часто будут забанены! Вообще, лучше просто подождать до следующей синхронизации по расписанию, так что вы не перегрузите серверы rsync.

    2. USE-флаги

    2.a. Что такое USE-флаги?

    Идея, стоящая за USE-флагами

    Когда вы устанавливаете Gentoo (или любой другой дистрибутив, или даже операционную систему в данном случае), вы делаете выбор, в зависимости от окружения, в котором вы работаете. Настройка для сервера отличается от настройки для рабочей станции. Игровая рабочая станция отличается от рабочей станции для 3D-рендеринга.

    Это правильно не только для того, чтобы выбрать, какие пакеты установить, но и какие возможности должен поддерживать конкретный пакет. Если вам не нужен OpenGL, зачем вам маяться с установкой OpenGL, и включать поддержку OpenGL в большинство ваших приложений? Если вы не используете KDE, зачем вам маяться с компиляцией пакетов с поддержкой KDE, если эти пакеты нормально работают и без нее?

    Чтобы помочь пользователям в решении, что они хотят установить/активировать, а что нет, мы хотим, чтобы пользователи могли описать его/ее окружение простым способом. Это заставит пользователя решить, что им реально необходимо, и упростит процесс для Portage, нашей системе менеджмента пакетов, в части принятия полезных решений.

    Определение USE-флага

    Вступайте в мир USE-флагов. Такой флаг это ключевое слово, которое включает в себя поддержку и информацию о зависимостях для некоторой концепции. Если вы определите некоторый USE-флаг, Portage будет знать, что вы хотите поддержку выбранного ключевого слова. Конечно, это также изменит информацию о зависимостях пакета.

    Давайте посмотрим на конкретный пример: ключевое слово kde. Если у вас нет этого ключевого слова в вашей переменной USE, все пакеты, в которых есть возможная поддержка KDE, будут скомпилированы без поддержки KDE. Все пакеты, в которых есть возможная зависимость от KDE будут установлены без установки библиотек KDE по зависимости. Если вы определили ключевое слово kde, тогда эти пакеты будут скомпилированы с поддержкой KDE, а библиотеки KDE будут установлены как зависимости.

    Правильно определив ключевые слова, вы получите систему, разработанную специально по вашим нуждам.

    Какие USE-флаги сущестувуют?

    Существует два типа USE-флагов: глобальные и локальные USE-флаги.

  • Глобальный USE-флаг используется несколькими пакетами, на уровне системы. Это то, что большинство людей и назовет USE-флагами.

  • Локальный USE-флаг используется одним пакетом, чтобы принимать решения для каждого пакета отдельно.

  • Список существующих глобальных USE-флагов можно найти онлайн (http://www.gentoo.org/dyn/use-index.xml?style=printable), или локально в /usr/portage/profiles/use.desc.

    Список существующих локальных USE-флагов может быть найден локально в /usr/portage/profiles/use.local.desc.

    2.b. Использование USE-флагов

    Определение постоянных USE-флагов

    В надежде на то, что вы прониклись важностью USE-флагов, мы расскажем вам, как определять USE-флаги.

    Как уже говорилось ранее, все USE-флаги определяются в переменной USE. Чтобы упростить пользователям поиск и выбор USE-флагов, мы уже даем настройки USE по умолчанию. Эта настройка — это коллекция USE-флагов, которая, как мы думаем, часто используется пользователями Gentoo. Эта настройка по умолчанию определена в make.defaults части вашего профиля.

    На профиль, который использует ваша система, указывает символическая ссылка /etc/make.profile. Каждый профиль работает на базе другого, более широкого профиля, и конечный результат это сумма всех профилей. Самый широкий профиль — это базовый профиль (/usr/portage/profiles/base).

    Давайте посмотрим на значение по умолчанию для профиля 10.0:

    Код 2.1: Кумулятивное значение переменной USE для профиля 10.0 из файла make.deafults

    (This example is the sum of the settings in base, default/linux,

    default/linux/x86 and default/linux/x86/10.0/)

    USE="a52 aac acpi alsa branding cairo cdr dbus dts dvd dvdr emboss encode exif

    fam firefox flac gif gpm gtk hal jpeg lcms ldap libnotify mad mikmod mng mp3

    mp4 mpeg ogg opengl pango pdf png ppds qt3support qt4 sdl spell

    startup-notification svg tiff truetype vorbis unicode usb X xcb x264 xml

    xulrunner xv xvid"

    Как вы можете видеть, данная переменная уже содержит много ключевых слов. Не меняйте никакой файл make.defaults, чтобы изменить переменную USE так, как вам нужно. Любые изменения в этом файле отменятся, если вы обновите Portage!

    Чтобы изменить эту настройку по умолчанию, вам нужно добавить или убрать ключевые слова в переменной USE. Это делается глобально определением переменной USE в /etc/make.conf. В данной переменной вы добавляете дополнительные USE-флаги, которые вам необходимы, или удаляете USE-флаги, которые вы не хотите. Последнее делается добавлением минуса («-») перед ключевым словом.

    Например, чтобы убрать поддержку KDE и QT, но оставить поддержку ldap, следующая переменная USE может быть определена в /etc/make.conf.

    Код 2.2: Пример настройки USE в /etc/make.conf

    USE="-kde -qt4 ldap"

    Определение USE-флагов для конкретных пакетов

    Иногда вы хотите определить некоторый USE-флаг для одного (или нескольких) приложений, но не на общесистемном уровне. Чтобы сделать это, вам нужно создать каталог /etc/portage (если он еще не существует), и отредактировать /etc/portage/package.use. Это обычно один файл, но может быть и каталогом (смотри man portage для более детальной информации). Следующие примеры предполагают, что package.use это один файл.

    Например, если вы не хотите поддержку berkdb глобально, но вы хотите ее для mysql, вы добавите:

    Код 2.3: Пример /etc/portage/package.use

    dev-db/mysql berkdb

    Вы можете, конечно, явно выключать USE-флаги для некоторого приложения. Например, если вы не хотите поддержку java в PHP:

    Код 2.4: Второй пример /etc/portage/package.use

    dev-php/php -java

    Определение временных USE-флагов

    Иногда вы хотите установить некоторый USE-флаг только один раз. Вместо редактирования /etc/make.conf дважды (чтобы сделать, и чтобы отменить изменения USE), вы можете определить переменную USE как переменную окружения. Помните, что когда вы переустановите, или обновите это приложение (или явно, или как часть обновления системы), ваши изменения будут потеряны!

    Как пример, мы временно уберем java из настройки USE в течение установки seamonkey.

    Код 2.5: Используем USE как переменную окружения

    # USE="-java" emerge seamonkey

    Последовательность

    Конечно, существует некоторая последовательность, какие настройки имеют приоритет в настройке USE. Вы не захотите определять USE=«-java» только для того, чтобы увидеть, что java все еще используется из-за настройки, у которой более высокий приоритет. Приоритет настройки USE, упорядоченный по приоритету таков (по возрастанию приоритета).

  • USE значение по умолчанию, определенный в make.defaults-части вашего профиля

  • Определенный пользователем USE в /etc/make.conf

  • Определенный пользователем USE в /etc/portage/package.use

  • Определенный пользователем USE как переменная окружения

  • Чтобы посмотреть конечную настройку USE, как ее увидит Portage, запустите emerge --info. Это покажет все важные переменные (включая переменную USE) с таким содержимым, с которым ее будет использовать Portage.

    Код 2.6: Запускаем emerge --info

    # emerge --info

    Адаптируем вашу систему к новым USE-флагам

    Если вы изменили USE-флаги, и вы хотите обновить всю вашу систему для использования новых USE-флагов, используйте опцию emerge --newuse:

    Код 2.7: Перестраиваем всю вашу систему

    # emerge --update --deep --newuse world

    Далее запустите опцию Portage --depclean, чтобы удалить зависимости, которые установились на вашу «старую» систему, но которые уже не нужны с новыми USE-флагами.

    Осторожно: Запуск emerge --depclean это опасная операция, и ее нужно выполнять осторожно. Дважды проверьте список «устаревших» пакетов, чтобы удостовериться, что не удалятся пакеты, которые вам нужны. В следующем примере мы добавляем ключ -p, чтобы только посмотреть на список пакетов, но не удалить их.

    Код 2.8: Удаляем устаревшие пакеты

    # emerge -p --depclean

    Когда depclean закончится, запустите revdep-rebuild, чтобы перекомпилировать приложения, которые динамически слинкованы с библиотеками, которые принадлежали (возможно) удаленным пакетам. revdep-rebuild это часть пакета gentoolkit, не забудьте сначала установить его.

    Код 2.9: Запускаем revdep-rebuild

    # revdep-rebuild

    Когда все это выполнено, ваша система использует новые настройки USE-флагов.

    2.c. USE-флаги, специфичные для каждого пакета

    Просмотр существующих USE-флагов

    Давайте возьмем как пример seamonkey. Какие USE флаги на него влияют? Чтобы это определить, мы будем использовать emerge с опциями --pretend и --verbose.

    Код 3.1: Просматриваем используемые USE-флаги

    # emerge --pretend --verbose seamonkey

    These are the packages that I would merge, in order:

    Calculating dependencies ...done!

    [ebuild R ] www-client/seamonkey-1.0.7 USE="crypt gnome java -debug -ipv6

    -ldap -mozcalendar -mozdevelop -moznocompose -moznoirc -moznomail -moznopango

    -moznoroaming -postgres -xinerama -xprint" 0 kB

    emerge это не единственная утилита для этой работы. Вообще, у нас есть приложение, специально для информации о пакетах, называемое equery, которое находится в пакете gentoolkit. Сначала устанавливаем gentoolkit:

    Код 3.2: Устанавливаем gentoolkit

    # emerge gentoolkit

    Теперь запустим equery с аргументом uses, чтобы посмотреть USE-флаги конкретного пакета. Например, для пакета gnumeric:

    Код 3.3: Используем equery чтобы просмотреть используемые USE-флаги

    # equery --nocolor 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

    - - debug : Enable extra debug codepaths, like asserts and extra output.

    If you want to get meaningful backtraces see

    http://www.gentoo.org/proj/en/qa/backtraces.xml .

    + + 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 есть несколько дополнительных возможностей, которые делают опыт вашего взаимодействия с Gentoo еще лучше. Многие из этих возможностей зависят от некоторых программ, которые улучшают производительность, надежность, безопасность, ...

    Чтобы включить или отключить возможности Portage, вам нужно отредактировать переменную FEATURES в /etc/make.conf, которая содержит различные ключевые слова возможностей, разделенные пробелами. В некоторых случаях вам потребуется также установить дополнительные программы, на которых основана возможность.

    Не все возможности, которые поддерживает Portage, описаны здесь. Для полного обзора откройте man-страницу make.conf.

    Код 1.1: Открываем man-страницу make.conf

    $ man make.conf

    Чтобы найти, какие возможности находятся в наборе по умолчанию, запустите emerge --info, и поищите переменную FEATURE, либо найдите ее командой grep:

    Код 1.2: Найдем, какие возможности уже установлены

    $ emerge --info | grep FEATURES

    3.b. Распределенная компиляция

    Используем distcc

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

    Вы можете найти более подробную информацию о distcc (и как с ней работать в Gentoo) в нашей документации (http://www.gentoo.org/doc/en/distcc.xml?style=printable)

    Установка distcc

    Distcc имеет графический монитор, чтобы просматривать задания, который ваш компьютер посылает для компиляции. Если вы используете Gnome, то поместите 'gnome' в вашу переменную USE. Однако, если вы не используете Gnome, но все равно хотите иметь монитор, тогда вы должны поместить 'gtk' вашу переменную USE.

    Код 2.1: Устанавливаем 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 (два других хоста):

    Код 2.2: Конфигурируем distcc для использования трех серверов distcc

    # distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"

    Не забудьте также запустить демон distccd:

    Код 2.3: Запускаем демоны distccd

    # rc-update add distccd default

    # /etc/init.d/distccd start

    3.c. Кэширование компиляции

    О ccache

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

    Если вы заинтересованы в работе ccache, посетите домашнюю страницу ccache (http://ccache.samba.org/)

    Предупреждение: Известно, что ccache вызывает некоторые ошибки компиляции. Иногда она оставляет ненужные, или испорченные файлы, что может привести к пакетам, которые не могут быть установлены. Если это случится (если вы получите ошибки типа «File not recognized. File truncated»), попробуйте перекомпилировать приложение с отключенным ccache (FEATURES="-ccache" в /etc/make.conf) прежде чем писать о баге. Если вы не делаете какую-то разработку, не включайте ccache.

    Устанавливаем ccache

    Чтобы установить ccache, запустите emerge ccache:

    Код 3.1: Устанавливаем ccache

    # emerge ccache

    Активируем поддержку Portage

    Откройте /etc/make.conf и добавьте ccache к переменной FEATURES. Затем добавьте новую переменную, названную CCACHE_SIZE и установите ее в «2G»:

    Код 3.2: Редактируем CCACHE_SIZE в /etc/make.conf

    CCACHE_SIZE="2G"

    Чтобы проверить, работает ли ccache, попросите ccache дать вам статистику. Так как Portage использует другую домашнюю директорию ccache, вам нужно будет установить также переменную CCACHE_DIR:

    Код 3.3: Смотрим статистику ccache

    # CCACHE_DIR="/var/tmp/ccache" ccache -s

    /var/tmp/ccache это домашняя директория по умолчанию для ccache, которую устанавливает Portage. Если вы хотите изменить эту настройку, вы можете установить переменную CCACHE_DIR в /etc/make.conf.

    Однако, если вы запустите ccache, программа будет использовать положение по умолчанию, ${HOME}/.ccache, поэтому вам и нужно устанавливать переменную CCACHE_DIR, когда вы просите статистику ccache для Portage.

    Используем ccache для компилирования без Portage

    Если вы хотите использовать ccache для компиляции без использования Portage, добавьте /usr/lib/ccache/bin к началу вашей переменной PATH (перед /usr/bin). Это может быть выполнено редактированием .bash_profile в домашней директории вашего пользователя. Использование .bash_profile это один из способов определить переменные PATH.

    Код 3.4: Редактируем .bash_profile

    PATH="/usr/lib/ccache/bin:/opt/bin:${PATH}"

    3.d. Поддержка бинарных пакетов

    Создание заранее собранных пакетов

    Portage поддерживает установку заранее собранных пакетов. Хотя Gentoo не дает заранее собранных пакетов сам (кроме образов GRP), но Portage умеет с такими работать.

    Чтобы создать заранее собранный пакет, вы можете использовать quickpkg, если пакет уже установлен на вашей системе, или установите его с опциями --buildpkg или --buildpkgonly.

    Если вы хотите, чтобы Portage создавал заранее собранные пакеты для каждого пакета, который вы устанавливаете, добавьте buildpkg к переменной FEATURES.

    Более полную поддержку в создании заранее собранных наборов пакетов можно получить с помощью catalyst. Более полную информацию по catalyst можно получить по адресу http://www.gentoo.org/proj/en/releng/catalyst/faq.xml?style=printable

    Устанавливаем заранее собранные пакеты

    Хотя Gentoo и не дает такие пакеты, вы можете создать центральный репозиторий, где вы будете сохранять заранее собранные пакеты. Если вы хотите использовать такой репозиторий, вам нужно рассказать Portage, задав переменную PORTAGE_BINHOST, которая будет указывать на него. Например, если заранее собранные пакеты находятся на ftp://buildhost/gentoo:

    Код 4.1: Устанавливаем PORTAGE_BINHOST в /etc/make.conf

    PORTAGE_BINHOST="ftp://buildhost/gentoo"

    Когда вы захотите установить заранее собранный пакет, добавьте опцию --getbinpkg к команде emerge, вместе с опцией --usepkg. Первая говорит emerge скачать заранее собранный пакет с определенного сервера, а вторая просит emerge попытаться установить заранее собранный пакет, а не скачивать его исходники и устанавливать их.

    Например, чтобы установить gnumeric из заранее собранного пакета:

    Код 4.2: Устанавливаем заранее собранный пакет gnumeric.

    # emerge --usepkg --getbinpkg gnumeric

    Более подробную информацию об опциях, касающиеся заранее собранных пакетов в emerge можно найти на man странице emerge:

    Код 4.3: Читаем man-страницу emerge

    $ man emerge

    3.e. Скачивание файлов

    Параллельная загрузка

    Когда вы устанавливает набор пакетов, Portage может скачивать исходные файлы для следующего пакета в списке даже пока компилируется предыдущий пакет. Это приводит к сокращению времени компиляции. Чтобы использовать эту возможность, добавьте «parallel-fetch» к переменной FEATURES. Заметьте, что она включена по умолчанию, так что вам не нужно делать что-либо специальное, чтобы ее включить.

    Userfetch

    Когда Portage запущен как root, FEATURES=«userfetch» позволит Portage опустить привилегии root при скачивании исходников пакетов. Это приводит к маленькому увеличению безопасности.

    3.f. Загрузка проверенных образов дерева Portage

    Как администратор, вы можете захотеть обновлять ваше локальное дерево Portage только с использованием криптографически проверенного образа дерева Portage, которое выпускается инфраструктурой Gentoo. Это удостоверяет, что никакое небезопасное зеркало rsync не добавит нежелательный код или пакеты в дерево, которое вы скачиваете.

    Чтобы сконфигурировать Portage, сначала создайте каталог с доверенными ключами, в который вы скачаете и примете ключи Инфраструктуры Gentoo, ответственной за подпись образов дерева Portage. Конечно, если вы хотите, вы можете проверить этот GPG-ключ, как описано в соответствующих документах (http://www.gentoo.org/doc/en/gnupg-user.xml?style=printable#doc_chap2_sect4) (например, проверить эти отпечатки пальцев ключа AE54 54F9 67B5 6AB0 9AE1 6064 0838 C26E 239C 75C4 для ключа 0x239C75C4 или DCD0 5B71 EAB9 4199 527F 44AC DB6B 8C1F 96D8 BF6D для ключа 0x96D8BF6D).

    Код 6.1: Создаем каталог с доверенными ключами Portage

    # mkdir -p /etc/portage/gpg

    # chmod 0700 /etc/portage/gpg

    # gpg --homedir /etc/portage/gpg --keyserver subkeys.pgp.net --recv-keys 0x239C75C4 0x96D8BF6D

    # gpg --homedir /etc/portage/gpg --edit-key 0x239C75C4 trust

    # gpg --homedir /etc/portage/gpg --edit-key 0x96D8BF6D trust

    Далее отредактируйте /etc/make.conf и включите поддержку для проверки подписанных образов дерева Portage (используйте FEATURES=«webrsync-gpg»), и отключите обновление дерева Portage, используя обычный метод emerge --sync.

    Код 6.2: Обновление Portage для проверки подписанного дерева

    FEATURES="webrsync-gpg"

    PORTAGE_GPG_DIR="/etc/portage/gpg"

    SYNC=""

    Вот и все. Теперь когда вы запустите emerge-webrsync, только образы с правильной сигнатурой будут установлены в вашу файловую систему.

    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

    4.b. Работаем с rc-update

    Что такое rc-update?

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

    С помощью rc-update вы можете добавлять и удалять инициализационные скрипты к уровню доступа. Программа rc-update затем автоматически попросит depscan.sh перестроить дерево зависимостей.

    Добавляем и удаляем сервисы

    Вы уже добавляли инициализационные скрипты к уровню запуска «default» в течение установки Gentoo. В то время вы, наверное, не знали, что означает «default», но теперь вы знаете. Скрипт rc-update требует второй аргумент, который определяет действие — add, del или show.

    Чтобы добавить или удалить инициализационный скрипт, просто дайте rc-update аргумент add или del, за которым идет имя инициализационного скрипта и уровень запуска. Например:

    Код 2.1: Удаляем Postfix с уровня запуска Default

    # rc-update del postfix default

    Команда rc-update -v show покажет все существующие инициализационные скрипты, и список, на каких уровнях запуска они будут выполнены:

    Код 2.2: Получаем информацию об инициализационных скриптах

    # rc-update -v show

    Вы также можете запустить rc-update show (без -v) чтобы просто просмотреть включенные инициализационные скрипты и их уровни запуска.

    4.c. Конфигурирование сервисов

    Зачем нужна дополнительная конфигурация?

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

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

    Каталог /etc/conf.d

    Gentoo дает легкий способ для конфигурации сервиса: каждый инициализационный скрипт, который может быть сконфигурирован, имеет файл в /etc/conf.d. Например, инициализационный скрипт apache2 (называемый /etc/init.d/apache2) имеет конфигурационный файл, называемый /etc/conf.d/apache2, который может содержать опции, которые вы хотите передать серверу Apache2 при запуске:

    Код 3.1: Переменная, определенная в /etc/conf.d/apache2

    APACHE2_OPTS="-D PHP5"

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

    4.d. Пишем инициализационные скрипты

    А мне нужно?

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

    Не используйте инициализационный скрипт, который идет с сервисом, если он не написан специально для Gentoo: инициализационные скрипты Gentoo не совместимы с инициализационными скриптами, используемыми другими дистрибутивами!

    Структура

    Базовая структура инициализационного скрипта показана ниже:

    Код 4.1: Базовая структура инициализационного скрипта

    #!/sbin/runscript

    depend() {

    (Информация о зависимостях)

    }

    start() {

    (Команды, необходимые для запуска сервиса)

    }

    stop() {

    (Команды, необходимые для остановки сервиса)

    }

    Любой инициализационный скрипт требует определения функции start(). Все остальные секции являются опциональными.

    Зависимости

    Существует две настройки, работающие с зависимостями, которые вы можете определить, и они будут влиять на порядок запуска инициализационных скриптов: use и need. Кроме этих двух, существует также еще два влияющих на порядок загрузки метода, называющиеся before и after. Последние два, в общем, определяют даже и не зависимости, они не заставят выдать ошибку скрипт, если тот скрипт, что в них описан вообще не должен запуститься (или не запустится).

  • Настройка use информирует систему init, что данный скрипт использует функциональность некоторого скрипта, но не строго от него зависит. Хорошим примером будет use logger или use dns. Если эти сервисы есть, они будут хорошо использоваться, но если у вас нет логгера, или DNS-сервера, сервисы все равно будут работать. Если сервисы существуют, они будут запущены до того, как запустится скрипт, использующий их.

  • Настройка need это жесткая зависимость. Она означает, что скрипт, которому нужен другой скрипт, не запустится, пока другой скрипт не запустится успешно. Также, если другой скрипт будет перезапущен, то этот тоже будет перезапущен.

  • При использовании before, данный скрипт запускается до некоторого скрипта, если выбранный скрипт это часть того же уровня. Так, инициализационный скрипт xdm, который определен до alsasound будет запущен до скрипта alsasound, но только если alsasound запланирован запуститься на том же уровне. Если alsasound не запланирована запуститься, то эта конкретная настройка не будет иметь эффекта, и xdm запустится в тот момент времени, который система init посчитает лучшим вариантом.

  • Похожим образом, after информирует систему init, что данный скрипт нужно запустить после некоторого скрипта, если выбранный скрипт является частью того же уровня. Если нет, то настройка не имеет эффпекта, и скрипт будет запущен системой init в момент времени, который, как она посчитает, будет наилучшим.

  • Из вышенаписанного должно быть ясно, что need это единственная «действительная» настройка о зависимостях, так как она влияет на то, будет ли запущен скрипт или нет. Все остальные являются больше указателями системе init, говорящими в каком порядке скрипты могут (или должны) запускаться.

    Теперь, если вы посмотрите на многие из существующих инициализационных скриптов Gentoo, вы заметите, что некоторые из них имеют зависимости от вещей, которые не являются инициализационными скриптами. Эти «вещи» мы называем виртуалами.

    Виртуальная зависимость это зависимость, которую дает сервис, но она не дается только этим сервисом. Ваш инициализационный скрипт может зависеть от системного логгера, но существует много системных логгеров (metalogd, syslog-ng, sysklogd, …). Так как вы не можете хотеть какой-то один из них (ни одна система не имеет все эти логгеры установленными и запущенными), мы удостоверились, что все эти сервисы дают виртуальную зависимость.

    Давайте посмотрим на информацию о зависиости для сервиса postfix:

    Код 4.2: Информация о зависимостях для 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 (которая является общей для всех почтовых серверов)

  • Контроль порядка загрузки

    Как мы описали в предыдущем разделе, вы можете сказать системе init, в каком порядке она должна запускать (или останавливать) скрипты. Этот порядок поддерживается как через настройки зависимостей use и need, так и через настройки порядка before и after. Так как мы описали их ранее, давайте посмотрим на сервис Portmap как на пример такого инициализационного скрипта.

    Код 4.3: Функция depend() в сервисе Portmap

    depend() {

    need net

    before inetd

    before xinetd

    }

    Вы также можете использовать «*». Это будет означать все сервисы на том же уровне запуска, хотя это и не рекомендуется.

    Код 4.4: Запускаем инициализационный скрипт как первый скрипт на уровне запуска

    depend() {

    before *

    }

    Если ваш сервис должен писать на локальные диски, он должен потребовать localmount. Если он что-либо поместит в /var/run, например пид-файл, тогда он должен запускаться после bootmisc:

    Код 4.5: Пример функции depend()

    depend() {

    need localmount

    after bootmisc

    }

    Стандартные функции

    Кроме функции depend() вам нужно также определить функцию start(). Она будет содержать все команды, необходимые для инициализации вашего сервиса. Рекомендуется использовать функции ebegin и eend, чтобы проинформировать пользователя о том, что происходит.

    Код 4.6: Пример функции start()

    start() {

    if [ "${RC_CMD}" = "restart" ];

    then

    # Do something in case a restart requires more than stop, start

    fi

    ebegin "Starting my_service"

    start-stop-daemon --start --exec /path/to/my_service \

    --pidfile /path/to/my_pidfile

    eend $?

    }

    Как --exec, так и --pidfile должны использоваться в функциях start и stop. Если сервис не создает пид-файл, тогда используйте --make-pidfile, если возможно, хотя вы должны протестировать это, чтобы быть уверенным. Иначе, не используйте пид-файлы. Вы также можете добавить --quiet к опциям start-stop-daemon, но это не рекомендуется, если только сервис не очень многословный. Использование --quiet может скрыть информацию если сервис не сможет запуститься.

    Другой интересной настройкой, используемой в вышеприведенном примере является проверка содержимого переменной RC_CMD. В отличие от предыдущей инициализационной системы, новая система openrc не поддерживает отдельную функциональность restart для каждого скрипта. Вместо этого, скрипт должен проверить содержимое переменной RC_CMD, чтобы проверить, вызывается ли функция (как start(), так и stop()) как часть restart, или нет.

    Заметка: Удостоверьтесь, что --exec действительно вызывает сервис, а не шелл-скрипт, который запускает сервисы и выходит — это должен делать сам инициализационный скрипт.

    Если вам нужно больше примеров функции start(), пожалуйста, прочитайте исходный код существующих инициализационных скриптов в вашей директории /etc/init.d.

    Другой функцией, которую вы можете определить, является stop(). Вы не обязаны определять эту функцию! Наша система инициализации достаточно умна, чтобы заполнить эту функцию сама, если вы использовали start-stop-daemon.

    Вот пример функции stop():

    Код 4.7: Пример функции stop()

    stop() {

    ebegin "Stopping my_service"

    start-stop-daemon --stop --exec /path/to/my_service \

    --pidfile /path/to/my_pidfile

    eend $?

    }

    Если ваш сервис запускает некоторый другой скрипт (например, на bash, python или perl), и этот скрипт позднее изменяет имя (например, с foo.py на foo), тогда вам нужно добавить --name к start-stop-daemon. Вы должны определить имя, на которое имя файла изменится. В приведенном примере, сервис запускает foo.py, а потом это имя меняется на foo:

    Код 4.8: Сервис, который запускает скрипт foo

    start() {

    ebegin "Starting my_script"

    start-stop-daemon --start --exec /path/to/my_script \

    --pidfile /path/to/my_pidfile --name foo

    eend $?

    }

    start-stop-daemon имеет отличную man-страницу, которую вы можете посмотреть, если вам нужна дополнительная информация.

    Код 4.9: Получаем man-страницу для start-stop-daemon

    $ man start-stop-daemon

    Синтаксис инициализационных скриптов Gentoo основан на Bourne Again Shell (bash), так что вы вольны использовать bash-совместимые конструкции в вашем инициализационном скрипте. Однако вы можете захотеть написать ваши инициализационные скрипты, чтобы они были POSIX-совместимыми. Будущие системы инициализационных скриптов могут позволить изменить символическую ссылку /bin/sh, чтобы она указывала на другие шеллы, кроме bash. Инициализационные скрипты, которые основаны на возможностях только bash на таких конфигурациях могут отказаться работать.

    Добавляем дополнительные опции

    Если вы хотите, чтобы ваш инициализационный скрипт поддерживал больше опций, чем те, которые мы уже описали, вам нужно добавить опцию к переменной extra_commands, и создать функцию с тем же именем, как и опция. Например, чтобы поддерживать опцию с именем restartdelay:

    Код 4.10: Поддержка опции restartdelay

    extra_commands="restartdelay"

    restartdelay() {

    stop

    sleep 3 # Wait 3 seconds before starting again

    start

    }

    Важно: Функция restart() не может быть переназначена в openrc!

    Переменные конфигурирования сервиса

    Вам не нужно ничего делать, чтобы появилась поддержка файла конфигурации в /etc/conf.d: если ваш инициализационный скрипт выполняется, следующие файлы автоматически подключаются (то есть, переменные становятся возможными для использования):

  • /etc/conf.d/<ваш_инициализационный_скрипт>

  • /etc/conf.d/basic

  • /etc/rc.conf

  • Кроме того, если ваш инициализационный скрипт имеет виртуальную зависимость (такую как net), то файл, ассоциированный с этой зависимостью (такой, как /etc/conf.d/net) тоже можно будет использовать.

    4.e. Изменение поведения уровня запуска

    Кто может выиграть от этого?

    Многие пользователи лаптопов знают ситуацию: дома вам нужно запустить net.eth0, хотя вы не захотите запускать net.eth0, когда вы в дороге (так как там нет сети). В Gentoo вы можете изменить поведение уровня запуска так, как вам нужно.

    Например, вы мрожете создать второй уровень запуска «default», который вы можете загрузить, но с которым не связано никаких инициализационных скриптов. Затем вы можете выбрать при загрузке, какой уровень запуска default вы хотите использовать.

    Используем softlevel

    Прежде всего, создайте директорию для вашего второго уровня запуска «default». Для примера мы создаем уровень запуска offline:

    Код 5.1: Создаем директорию уровня запуска

    # mkdir /etc/runlevels/offline

    Добавим необходимые инициализационные скрипты к заново созданному уровню запуска. Например, если мы хотим полную копию текущего уровня запуска «default», но без net.eth0:

    Код 5.2: Добавляем необходимые инициализационные скрипты

    (Скопируем все сервисы с уровня запуска default в уровень запуска offline)

    # cd /etc/runlevels/default

    # for service in *; do rc-update add $service offline; done

    (Убираем ненужный сервис с уровня запуска offline)

    # rc-update del net.eth0 offline

    (Просмотрим активные сервисы уровня запуска offline)

    # rc-update show offline

    (Примерное начало вывода)

    acpid | offline

    domainname | offline

    local | offline

    net.eth0 |

    Даже несмотря на то, что net.eth0 был удален с уровня запуска offline, но udev может попытаться запустить любые устройства, которые он найдет, и запустить соответствующие сервисы. Эта функциональность называется hotplugging. по умолчанию, Gentoo не поддерживает hotplugging.

    Если вы хотите включить hotplugging только для определенного набора скриптов, используйте переменную rc_hotplug в /etc/rc.conf:

    Код 5.3: Отключаем сервисы, инициируемые устройствами в /etc/rc.conf

    # Позволяем net.wlan и любому другому сервису, кроме тех, которые

    # соответствуют net.* быть hotplugged.

    rc_hotplug="net.wlan !net.*"

    Заметка: Для более детальной информации о сервисах, инициируемых устройствами, просмотрите комментарии в /etc/rc.conf.

    Теперь измените конфигурацию вашего загрузчика и добавьте новую запись для уровня запуска offline. Например, в /boot/grub/grub.conf:

    Код 5.4: Добавляем запись для уровня запуска offline

    title Gentoo Linux Offline Usage

    root (hd0,0)

    kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline

    Ура, теперь все настроено. Если вы загрузите вашу систему, и выберите эту новую запись при загрузке, будет использоваться уровень запуска offline вместо default.

    Использование bootlevel

    Использование bootlevel полностью аналогично softlevel. Единственная разница в том, что вы определяете второй уровень запуска «boot» вместо второго уровня запуска «default».

    5. Переменные окружения

    5.a. Переменные окружения?

    Что это такое?

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

    Важные примеры

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

    Переменная

    PATH

    ROOTPATH

    LDPATH

    MANPATH

    INFODIR

    PAGER

    EDITOR

    KDEDIRS

    CONFIG_PROTECT

    CONFIG_PROTECT_MASK

    Описание

    Данная переменная содержит разделенный двоеточиями список директорий, в которых ваша система смотрит за исполняемыми файлами. Если вы введете имя программы (например ls, rc-update или emerge), но эта программа не находится в этом списке, ваша система не выполнит ее (если только вы не введете полный путь как команду, например /bin/ls).

    Данная переменная делает то же, что и PATH, но описывает только директории, которые проверяются, когда команду вводит пользователь root.

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

    Данная переменная содержит разделенный двоеточиями список директорий, в которых команда man ищет man-страницы.

    Данная переменная содержит разделенный двоеточиями список директорий, в которых команда info ищет info-страницы.

    Эта переменная содержит путь к программе, используемой для вывода списка содержимого файлов (например, less или more)

    Данная переменная содержит путь к программе, которая используется для изменения содержания файлов (например nano или vi)

    Данная переменная содержит разделенный двоеточиями список директорий, в которых находится специфичные для KDE файлы

    Данная переменная содержит разделенный пробелами список директорий, которые должны быть защищены Portage в процессе обновления

    Данная переменная содержит разделенный пробелами список директорий, которые не должны защищаться Portage в процессе обновления

    Ниже вы найдете пример определения всех этих переменных:

    Код 1.1: Пример определения

    PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"

    ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"

    LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"

    MANPATH="/usr/share/man:/usr/local/share/man"

    INFODIR="/usr/share/info:/usr/local/share/info"

    PAGER="/usr/bin/less"

    EDITOR="/usr/bin/vim"

    KDEDIRS="/usr"

    CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \

    /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \

    /usr/share/texmf/tex/platex/config/ /usr/share/config"

    CONFIG_PROTECT_MASK="/etc/gconf"

    5.b. Определение переменных глобально

    Каталог /etc/env.d

    Чтобы определять эти переменные в одном месте, Gentoo ввел каталог /etc/env.d. Внутри данного каталога вы найдете множество файлов, таких как 00basic, 05gcc, и т. д., которые содержат переменные, необходимые приложению, отраженному в названии.

    Например, когда вы установите gcc, ебилдом будет создан файл 05gcc, который будет содержать определения следующих переменных:

    Код 2.1: /etc/env.d/05gcc

    PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"

    ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"

    MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"

    INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"

    CC="gcc"

    CXX="g++"

    LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"

    Другие дистрибутивы говорят, что вы можете изменять или добавлять такие определения переменых окружения в /etc/profile или других месторасположениях. С другой стороны, Gentoo делает легким для вас (и для Portage) поддерживать переменные окружения без необходимости обозревать множество файлов, которые могут содержать переменные окружения.

    Например, когда обновляется gcc, файл /etc/env.d/05gcc также обновляется, без необходимости какого-то взаимодействия с пользователем.

    Это не только полезно для Portage, но и для вас, как пользователя. Иногда может быть, что вам нужно установить некоторую переменную окружения на уровне системы. Например, мы возьмем переменную http_proxy. Вместо того, чтобы писать ее в /etc/profile, вы можете теперь просто создать файл (/etc/env.d/99local) и ввести свои определения туда:

    Код 2.2: /etc/env.d/99local

    http_proxy="proxy.server.com:8080"

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

    Скрипт env-update

    Несколько файлов в /etc/env.d определяют переменную PATH. Это не ошибка: когда вы запустите env-update, она склеит несколько определений, прежде чем обновит переменные окружения, так что для пакетов (и пользователей) будет просто добавить свои собственные настройки переменных окружения без пересечения с уже существующими значениями.

    Скрипт env-update добавит значения в алфавитном порядке файлов /etc/env.d. Имена файлов должны начинаться с двух десятичных цифр.

    Код 2.3: Порядок обновления, используемый env-update

    00basic 99kde-env 99local

    +-------------+----------------+-------------+

    PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

    Соединение переменных происходит не всегда, а только со следующими переменными: ADA_INCLUDE_PATH, ADA_OBJECTS_PATH, CLASSPATH, KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH, PRELINK_PATH_MASK, PKG_CONFIG_PATH и PYTHONPATH.. Для всех остальных переменных используется последнее определенное значение (в алфавитном порядке файлов /etc/env.d)

    Вы можете добавить в этот список соединяемых переменных больше значений, добавив имя переменной либо к переменной COLON_SEPARATED, либо к переменной SPACE_SEPARATE (они также находятся в env.d).

    Когда вы запускаете env-update, скрипт создаст все переменные окружения, и поместит их в /etc/profile.env (который используется /etc/profile). Он также возьмет информацию из переменной LDPATH и использует ее для создания /etc/ld.so.conf. После этого он запустит ldconfig чтобы пересоздать файл /etc/ld.so.cache, используемый динамическим линкером.

    Если вы хотите посмотреть эффект, оказанный env-update сразу же после ее запуска, выполните следующую команду для обновления вашего окружения. Пользователи, которые сами устанавливали Gentoo, наверное, вспомнят эту команду из инструкций по установке:

    Код 2.4: Обновление окружения

    # env-update && source /etc/profile

    Заметка: Вышеприведенная команда обновляет переменные только в вашем текущем терминале, новых консолях, а также их детям. Поэтому, если вы работаете в X11, вам нужно либо ввести source /etc/profile в каждом новом терминале, который вы откроете, либо перестартовать X, чтобы все терминалы начила работать с новыми переменными. Если вы используете менеджер логина, станьте root, и наберите /etc/init.d/xdm restart. Если не используете, вам нужно сделать логаут, и затем снова залогиниться, чтобы X создал новых детей с новыми занчениями переменных.

    Важно: Вы не можете использовать переменные окружения при определении новых переменных. Это означает, что вещи, вроде FOO="$BAR" (где $BAR это другая переменная) запрещены.

    5.c. Определение переменных локально

    Специфичные для пользователя

    Вы не всегда захотите определять переменные окружения глобально. Например, вы можете захотить добавить /home/my_user/bin и текущую рабочую директорию (директорию, где вы сейчас находитесь) к переменной PATH, но не хотите, чтобы остальные пользователи на вашей системе имели такой PATH. Если вы хотите определить переменную окружения локально, вы должны использовать ~/.bashrc или ~/.bash_profile:

    Код 3.1: Расширяем PATH для локального использования в ~/.bashrc

    (A colon followed by no directory is treated as the current working directory)

    PATH="${PATH}:/home/my_user/bin:"

    Когда вы перелогинитесь, ваша переменная PATH будет обновлена.

    Специфичные для сессии

    Иногда требуются даже более строгие определения. Вы можете захотеть использовать бинарные файлы из временной директории, которую вы создали, без использования пути к бинарным файлам, или редактирования ~/.bashrc, так как вам нужно это только на короткое время.

    В этом случае вы можете просто определить переменную PATH в вашей текущей сессии, используя команду export. До того времени, как пока вы не сделаете логаут, переменная PATH будет использовать временные значения.

    Код 3.2: Определяем переменные окружения, специфичные для сессии

    # export PATH="${PATH}:/home/my_user/tmp/usr/bin"

    C. Работа с Portage1. Файлы и каталоги

    1.a. Файлы Portage

    Конфигурационные директивы

    Portage имеет конфигурацию по умолчанию, сохраненную в /etc/make.globals. Когда вы посмотрите на содержимое это файла, вы заметите, что вся конфигурация Portage происходит через переменные. Какие переменные Portage слушает, и что они знают, описано позже.

    Так как многие конфигурационные директивы отличаются в различных архитектурах, Portage также имеет конфигурационные файлы по умолчанию, которые являются частью вашего профиля. Ваш профиль указан в симлинке /etc/make.profile, конфигурация Portage устанавливается в файлах make.defaults вашего профиля, и всех родительских профилей. Мы объясним больше о профилях и каталоге /etc/make.profile позже.

    Если вы планируете изменить конфигурационную переменную, не меняйте ничего в /etc/make.global или в make.defaults. Вместо этого, используйте /etc/make.conf, который имеет приоритет перед предыдущими файлами. Вы также найдете пример в /usr/share/portage/config/make.conf.example. Как указывает имя, это скорее файл для примера — Portage не читает из этого файла.

    Вы также можете определить конфигурационные переменные Portage как переменные окружения, но мы это не рекомендуем.

    Информация, специфичная для профиля

    Мы уже встречались с каталогом /etc/make.profile. Ну, это не совсем каталог, а символическая ссылка на профиль, которые находятся по умолчанию, в /usr/portage/profiles, хотя вы можете создать свои собственные профили в друго месте, и указать на них. Профиль, на который указывает этот симлинк, является именно тем, к которому принадлежит ваша система.

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

    Конфигурация, специфичная для пользователя

    Когда вам нужно переопределить поведение Portage, касающееся установки программ, вы будете редактировать файлы в /etc/portage. Мы очень рекомендуем использовать файлы в /etc/portage, и очень не рекомендуем переопределять поведение через переменные окружения!

    В /etc/portage вы можете создать следующие файлы:

  • package.mask, в котором будет список пакетов, которые вы бы не хотели, чтобы Portage устанавливал.

  • package.unmask, в котором будет список пакетов, которые вы хотите установить, несмотря на то, что разработчики Gentoo очень не советовали вам их устанавливать.

  • package.accept_keywords, в котором будет список пакетов, которые вы хотите иметь возможность установить, несмотря на то, что пакет был признан неподходящим для вашей системы или архитектуры (пока).

  • package.use, в котором будет список USE-флагов, которые вы хотите использовать для конкретных пакетов без необходимости использовать эти USE-флаги глобально, во всей системе.

  • Вообще, это не обязательно должны быть файлы, это могут быть и каталоги, которые содержат по одному файлу на каждый пакет. Более детальную информацию о каталоге /etc/portage и полному списку возможных файлов, которые вы можете создать, можно найти на man-странице Portage:

    Код 1.1: Читаем man-страницу Portage

    $ man portage

    Изменяем положение файлов и каталогов Portage

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

    Все эти места расположены по известным местам по умолчанию, но их можно изменить по вашему вкусу через /etc/make.conf. Остаток данной главы объясняет, какие специальные места использует Portage, и как изменить их расположение на вашей файловой системе.

    Этот документ не предназначен, однако, для использования как справочник. Если вам нужно стопроцентное объяснение, проконсультируйтесь с man-страницами Portage и make.conf.

    Код 1.2: Читаем man-страницы Portage и make.conf

    $ man portage

    $ man make.conf

    1.b. Сохраненные файлы

    Дерево Portage

    Положение дерева Portage по умолчанию это /usr/portage. Это определяется переменной PORTDIR. Когда вы сохраняете дерево Portage в другое место (изменяя эту переменную), не забудьте изменить символическую ссылку /etc/make.profile соответственно.

    Если вы измените переменную PORTDIR, вы можете также захотеть изменить следующие переменные, так как они не заметят того, что PORTDIR изменился. Это из-за того, как Portage работает с переменными: PKGDIR, DISTDIR, RPMDIR.

    Заранее скомпилированные пакеты

    Хотя Portage не использует заранее скомпилированные пакеты по умолчанию, он имеет большую поддержку таких пакетов. Когда вы просите Portage работать с заранее скомпилированными пакетами, он будет смотреть за ними в /usr/portage/packages. Это положение определяется переменной PKGDIR.

    Исходный код

    Исходный код приложения сохраняется в /usr/portage/distfiles по умолчанию. Это положение определяется переменной DISTDIR.

    База данных Portage

    Portage сохраняет состояние вашей системы (какие пакеты установлены, какие файлы относятся к какому пакету, …) в /var/db/pkg. Не меняйте эти файлы сами! Это может разрушить знание вашей системы Portage.

    Кеш Portage

    Кеш Portage (с временами изменения, виртуальными пакетами, информацией о дереве зависимостей, …) хранится в /var/cache/edb. Это положение действительно является кешем: вы можете удалить его, если вы не запускаете в настоящий момент какое-либо связанное с Portage приложение.

    1.c. Компиляция приложений

    Временные файлы Portage

    Временные файлы Portage хранятся в /var/tmp по умолчанию. Это определяется переменной PORTAGE_TMPDIR.

    Если вы измените переменную PORTAGE_TMPDIR, вы можете также захотеть изменить и следующие переменные, так как они не заметят изменение PORTAGE_TMPDIR. Это из-за того, как Portage работает с переменными: BUILD_PREFIX.

    Каталог компиляции

    Portage создает специяические каталоги для компиляции для каждого пакета, который она устанавливает в /var/tmp/portage. Это положение определено переменной BUILD_PREFIX.

    Положение живой файловой системы

    по умолчанию, Portage устанавливает все файлы на текущую файловую систему (/), но вы можете изменить это, настроив переменную окружения ROOT. Это полезно, когда вы хотите создать новые образы для установки.

    1.d. Возможности логгинга

    Логгинг ебилдов

    Portage может создавать логи на каждый ебилд, но только когда переменная PORT_LOGDIR установлена в положение, в которое может записать Portage (пользователь portage). по умолчанию, данная переменная не определена. Если вы не установите переменную PORT_LOGDIR, вы не получите никаких логов о компиляции с текущей системой логгинга, хотя вы можете получить некоторые логи с помощью нового elog. Если у вас определена переменная PORT_LOGDIR, и вы используете elog, вы можете получить логи о компиляции и любые логи, сохраненные программой elog, как объясняется ниже.

    Portage предлагает множество вариантов логгинга при использовании elog:

  • PORTAGE_ELOG_CLASSES: Здесь вы описываете, какие виды сообщений нужно логгировать. Вы можете использовать любой набор из следующих величин, разделенных пробелами.

  • info: Логгирует сообщения einfo, напечатанные ебилдом

  • warn: Логгирует сообщения ewarn, напечатанные ебилдом

  • error: Логгирует сообщения eerror, напечатанные ебилдом

  • log: Логгирует сообщения elog, напечатанные ебилдом

  • qa: Логгирует сообщения QA Notice, напечатанные ебилдом

  • PORTAGE_ELOG_SYSTEM: Это выбирает модуль(ли), которые будут обрабатывать сообщения логов. Если его оставить пустым, логгинг будет выключен. Вы можете использовать любую комбинацию из следующих значений, разделенных пробелами. Хотя бы одно значение нужно выбрать, чтобы использовать elog.

  • save: Это сохраняет один лог на каждый пакет в $PORT_LOGDIR/elog или /var/log/portage/elog, если $PORT_LOGDIR не определена.

  • custom: Передает все сообщения определенной пользователем команде в $PORTAGE_ELOG_COMMAND, которая будет обсуждаться позже.

  • syslog: Посылает все сообщения на установленный системный логгер

  • mail: Передает все сообщения на определенный пользователем почтовый сервер в $PORTAGE_ELOG_MAILURI, это будет обсуждаться позже. Возможности mail появились в portage 2.1.1.

  • save_summary: Похоже на save, но он сохраняет все сообщения в $PORT_LOGDIR/elog/summary.log, или в /var/log/portage/elog/summary.log, если $PORT_LOGDIR не определена.

  • mail_summary: Похоже на mail, но посылает все сообщения в одном письме, когда emerge завершает работу.

  • PORTAGE_ELOG_COMMAND: Эта переменная используется только когда включен модуль custom. Именно здесь вы определяете команду для работы с сообщениями лога. Заметьте, что вы можете использовать две переменные: ${PACKAGE} — это имя и версия пакета и ${LOGFILE}, это абсолютный путь к файлу лога. Вот один из возможных способов использования:

  • PORTAGE_ELOG_COMMAND="/path/to/logger -p '\${PACKAGE}' -f '\${LOGFILE}'"

  • PORTAGE_ELOG_MAILURI: Это содержит настройки для модуля mail, такие как адрес, пользователь, пароль, почтовый сервер и номер порта. Значение по умолчанию - «root@localhost localhost»

  • Вот пример для smtp-сервера, который требует имя пользователя и пароль на конкретный порт (по умолчанию порт 25):

  • PORTAGE_ELOG_MAILURI="user@some.domain username:password@smtp.some.domain:995"

  • PORTAGE_ELOG_MAILFROM: Позволяет вам настроить поле отправителя адресов писем с логами. Обычно это «portage», если данная переменная пуста.

  • PORTAGE_ELOG_MAILSUBJECT: Позволяет вам настроить поле «тема» для писем с логами. Заметьте, что вы можете использовать две переменных: ${PACKAGE} — покажет название пакета и версию, и ${HOST}, который является полным именем домена на котором Portage работает.

  • Вот один из примеров использования:

  • PORTAGE_ELOG_MAILSUBJECT="package \${PACKAGE} was merged on \${HOST} with some messages"

  • Важно: Если вы использовали enotice в Portage-2.0.*, вы должны полностью убрать enotice, так как она несовместима с elog.

    2. Конфигурирование через переменные

    2.a. Конфигурация Portage

    Как уже упоминалось выше, Portage можно сконфигурировать с помощью многихпеременных, которые вы должны определить в /etc/make.conf. Прочитайте man-страницу make.conf для более полной информации:

    Код 1.1: Читаем man-страницу make.conf

    $ man make.conf

    2.b. Опции, специфичные для компиляции

    Опции для конфигурирования и компиляции

    Когда Portage компилирует приложения, он передает значения следующих переменных компилятору и скрипту configure:

  • CFLAGS & CXXFLAGS определяют нужные флаги компилятора для компиляции C и C++

  • CHOST определяет информацию о хосте для скрипта configure приложения

  • MAKEOPTS передается команде make и обычно настраивается, чтобы указать количество параллелизма, используемое в течение компиляции. Более подробная информация об опциях make может быть найдена на man-странице make.

  • Переменная USE также используется в течение работы скрипта configure и компиляции, но она объяснялась очень подробно в предыдущих главах.

    Опции замены

    Когда Portage компилирует новую версию некоторого приложения, он удаляет устаревшие файлы старой версии с вашей системы. Portage дает пятисекундную задержку перед удалением старой версии. Эти 5 секунд могут быть определены переменной CLEAN_DELAY.

    Вы можете сказать emerge использовать некоторые опции каждый раз, когда вы ее запускаете, установив EMERGE_DEFAULT_OPTS. Некоторые полезные опции могут быть --ask, --verbose, --tree, и так далее.

    2.c. Защита файлов конфигурации

    Защищенные места Portage

    Перезаписанные Portage файлы, пришедшие из новой версии какого-то приложения, не сохраняются в защищенных местах. Эти защищенные места определяются переменной CONFIG_PROTECT, и обычно это места конфигурационных файлов. Списки каталогов отделяются друг от друга пробелом.

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

    Вы можете определить текущее значение переменной CONFIG_PROTECT с помощью команды emerge --info.

    Код 3.1: Получаем значение CONFIG_PROTECT

    $ emerge --info | grep 'CONFIG_PROTECT='

    Более подробную информацию о защите конфигурационных файлов Portage находится в разделе CONFIGURATION FILES man-страницы emerge:

    Код 3.2: Более подробная информация о защите конфигурационных файлов

    $ man emerge

    Убираем каталоги

    Чтобы обратно не защищать некоторые поддиректории защищенных мест, вы можете использовать переменную CONFIG_PROTECT_MASK.

    2.d. Опции скачивания

    Положение серверов

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

  • GENTOO_MIRRORS определяет список положений серверов, которые содержат исходный код (distfiles)

  • PORTAGE_BINHOST определяет положение сервера, который содержит заранее собранные пакеты для вашей системы.

  • Третья настройка включае положение сервера rsync, который будет использоваться для обновления вашего дерева Portage:

  • SYNC определяет конкретный сервер, который использует Portage, чтобы загрузить дерепо Portage.

  • Переменные GENTOO_MIRRORS и SYNC могут быть установлены автоматически с помощью приложения mirrorselect. Вам нужно скачать mirrorselect, прежде чем вы сможете его использовать. Для более подробной информации смотрите помощь по mirrorselect:

    Код 4.1: Более подробная информация о mirrorselect

    # mirrorselect --help

    Если ваше окружение требует использование прокси-сервера, вы можете использовать переменные http_proxy, ftp_proxy и RSYNC_PROXY, чтобы определить прокси-сервер.

    Команды скачивания

    Когда Portage нужно скачать исходный код, по умолчанию он будет использовать wget. Вы можете изменить это через переменную FETCHCOMMAND.

    Portage может продолжить скачивание частично скачанного исходного кода. по умолчанию он использует wget, но это может быть изменено с помощью переменной RESUMECOMMAND.

    Проверьте, что ваши FETCHCOMMAND и RESUMECOMMAND сохраняют исходный код в правильное место. Внутри данных переменных вы должны использовать \${URI} и
    \${DISTDIR}, чтобы указать на положение исходного кода и положение distfiles, соответственно.

    Вы также можете определить обработчики для конкретного протокола, с помощью переменных FETCHCOMMAND_HTTP, FETCHCOMMAND_FTP, RESUMECOMMAND_HTTP, RESUMECOMMAND_FTP, и так далее.

    Настройки Rsync

    Вы не можете изменить команду rsync, используемую Portage для обновления дерева Portage, но вы можете настроить некоторые переменные, касающиеся команды rsync:

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

  • PORTAGE_RSYNC_EXTRA_OPTS может использоваться для настройки дополнительных опций в процессе синхронизации. Опции должны отделяться пробелом.

  • --timeout=<число>: Это определяет число секунд, в течении которых соединение rsync может ждать, прежде чем rsync будет считать, что соединение окончилось по таймауту. по умолчанию, эта переменная имеет значение 180, но диалап-пользователи, или пользователи с медленными компьютерами могут установить эту переменную в 300 или еще выше.

  • --exclude-from=/etc/portage/rsync_excludes: Это указывает на файл, в котором находится список пакетов и/или категорий, которые rsync должен игнорировать в процессе обновления. В этом случае, переменная указывает на /etc/portage/rsync_excludes. Прочитайте «Использование поднабора дерева Portage» для синтаксиса данного файла.

  • --quiet: Уменьшает вывод на экран

  • --verbose: Выводит полный список файлов

  • --progress: Показывает прогресс для каждого файла

  • PORTAGE_RSYNC_RETRIES определяет, сколько раз rsync должен пытаться соединиться с зеркалом, на который указывает переменная SYNC, прежде чем сообщить об ошибке. по умолчанию, значение этой переменной 3.

  • Для более детальной информации об этих и других опциях, прочитайте man rsync.

    2.e. Конфигурация Gentoo

    Выбор ветки

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

    Возможности Portage

    Вы можете активировать некоторые возможности Portage через переменную FEATURES. Возможности Portage обсуждались в предыдущих главах, таких как «Возможности Portage».

    2.f. Поведение Portage

    Работа с ресурсами

    С помощью переменной PORTAGE_NICENESS, вы можете повысить, или понизить значение nice, с которым запускается программа Portage. Значение PORTAGE_NICENESS добавляется к текущему значению nice.

    Для более детальной информации о значениях nice, смотрите man-страницу nice:

    Код 6.1: Более детальная информация о nice

    $ man nice

    Вывод результатов

    NOCOLOR, значение которой по умолчанию равно «false», определяет, должен ли Portage выключить использование цветного вывода.

    3. Смешение веток приложений

    3.a. Использование одной ветви

    Стабильная ветка

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

    Мы рекомендуем, чтобы вы использовали только стабильную ветку. Однако если вы не сильно заботитесь о стабильности, и хотите помочь Gentoo, отправляя багрепорты на http://bugs.gentoo.org, читайте далее.

    Ветка для тестирования

    Если вы хотите использовать более новые приложения, вы можете захотить использовать ветку для тестирования. Чтобы сказать Portage использовать ветку для тестирования, добавьте ~ перед названием своей архитектуры.

    Ветка для тестирования это точно то, что она говорит — тестирование. Если пакет в тестировании, это означает, что разработчик думает, что он функционален, но он не был полностью протестирован. Вы можете очень просто первым обнаружить баг в пакете, в случае этого вы должны написать багрепорт (http://bugs.gentoo.org/), чтобы позволить разработчикам узнать о нем.

    Но помните, что мы можете заметить некоторые проблемы со стабильностью, не совсем правильная работа с пакетами (например неправильные/отсутствующие зависимости), слишком частые обновления (что приведет к большому числу компиляций) или сломанные пакеты. Если вы не знаете, как работает Gentoo и как решать проблемы, мы рекомендуем вам остаться на стабильной и протестированной ветке.

    Например, чтобы выбрать ветку для тестирования для архитектуры x86, отредактируйте /etc/portage/make.conf и допишите:

    Код 1.1: Устанавливаем переменную ACCEPT_KEYWORDS

    ACCEPT_KEYWORDS="~x86"

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

    3.b. Смешиваем стабильную ветку и ветку для тестирования

    Файл package.accept_keywords

    Вы можете попросить Portage позволить использовать ветку для тестирования для некоторых пакетов, но использовать стабильную ветку для остальной части системы. Чтобы достичь этого, добавьте категорию и имя пакета, для которого вы хотите использовать ветку для тестирования, в файл /etc/portage/package.accept_keywords. Вы можете также создать каталог (с тем же именем) и прописать пакеты в виде файлов в том же каталоге. Например, чтобы использовать ветку для тестирования для gnumeric:

    Код 2.1: Настройка /etc/portage/package.accept_keywords для gnumeric

    app-office/gnumeric

    Тестируем конкретные версии

    Если вы хотите использовать определенную версию приложения из ветки для тестирования, но вы не хотите, чтобы Portage использовал ветку для тестирования для последующих версий, вы можете добавить версию в package.accept_keywords. В этом случае вы должны использовать оператор =. Также вы можете ввести некоторую область версий с использованием операторов <=, <, > или >=.

    В любом случае, если вы добавите информацию о версии, вы должны использовать оператор. Если вы не добавите информацию о версии, вы не можете использовать оператор.

    В следующем примере мы просим Portage разрешить использование gnumeric-1.2.13:

    Код 2.2: Разрешаем определенную версию для тестирования gnumeric

    =app-office/gnumeric-1.2.13

    3.c. Используем замаскированные пакеты

    Файл package.unmask

    Важно: Разработчики Gentoo не поддерживают использование этого файла. Делайте это на свой страх и риск. Требования поддержки, касающиеся package.unmask и/или package.mask останутся без ответа. Вас предупредили.

    Когда пакет был замаскирован разработчиками Gentoo, а вы все еще хотите использовать его, несмотря на причину, озвученную в файле package.mask (который по умолчанию расположен в /usr/portage/profiles), добавьте нужную версию (обычно это будет точно такая же строчка, как и в профиле), в файл /etc/portage/package.unmask (или в файл в этом каталоге, если это каталог).

    Например, если =net-mail/hotwayd-0.8 замаскирован, вы можете его размаскировать, добавив такую же строку в файл package.unmask.

    Код 3.1: /etc/portage/package.unmask

    =net-mail/hotwayd-0.8

    Заметка: Если в файле /usr/portage/profiles/package.mask замаскировано сразу несколько версий пакета, вам нужно размаскировать только версии, которые вам действительно нужны. Прочитайте предыдущие разделы, чтобы понять, как определять номера версий в package.unmask.

    Файл package.mask

    Когда вы не хотите, чтобы Portage работал с каким-то пакетом, или специфической версией пакета, вы можете замаскировать ее сами, добавив нужную строку в файл /etc/portage/package.mask (или в файл, или в файл в данном каталоге).

    Например, если вы не хотите, чтобы Portage устанавливал исходники ядра, новее, чем
    gentoo-sources-2.6.8.1, вам нужно добавить следующую строку к файлу package.mask:

    Код 3.2: Пример файла /etc/portage/package.mask

    >sys-kernel/gentoo-sources-2.6.8.1

    4. Дополнительные программы для Portage

    4.a. dispatch-conf

    dispatch-conf это программа, которая помогает объединять файлы вида _cfg0000_<имя>. Такие файлы генерируются Portage, когда он хочет перезаписать файл в каталоге, который защищен переменной CONFIG_PROTECT.

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

    При использовании dispatch-conf, вы можете попросить оставить конфигурационный файл как есть, использовать новый конфигурационный файл, отредактировать текущий. Или заменить изменения между ними интерактивно. dispatch-conf также имеет некоторые дополнительные возможности:

  • Автоматически обновить конфигурационный файл, если обновляются только комментарии

  • Автоматически обновить конфигурационный файл, если обновляются только пробелы и табуляции

  • Удостоверьтесь, что сначала вы отредактировали файл /etc/dispatch-conf.conf и создали каталог, который определен в переменной archive-dir.

    Код 1.1: Запускаем dispatch-conf

    # dispatch-conf

    При запуске dispatch-conf вас проведут через каждый измененный файл конфигурации, по одному. Нажмите u для обновления (замены) текущего конфигурационного файла новым и показа следующего файла. Нажмите z, чтобы удалить новый конфигурационный файл и показу следующего файла. Как только все конфигурационные файлы будут просмотрены, dispatch-conf закончит работу. Вы также можете нажать q чтобы выйти в любое время.

    Для более детальной информации проверьте man-страницу dispatch-conf. Она расскажет вам, как интерактивно слить текущий и новый конфигурационный файл, отредактировать новые конфигурационные файлы, просмотреть разницу между файлами, и многое другое.

    Код 1.2: Читаем man-страницу dispatch-conf

    $ man dispatch-conf

    4.b. etc-update

    Вы также можете использовать etc-update для работы с файлами конфигурации. Она не так проста в использовании, как dispatch-conf, и имеет не так много возможностей, но она тоже дает возможность инерактивной работы, и тоже может автоматически обрабатывать тривиальные изменения.

    Однако, в отличие от dispatch-conf, etc-update не сохраняет старые версии ваших конфигурационных файлов. Как только вы обновили файл, старая версия навсегда ушла! Поэтому будьте очень осторожны, так как использование etc-update гораздо менее безопасно, чем использование dispatch-conf.

    Код 2.1: Запускаем etc-update

    # etc-update

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

    Код 2.2: Опции etc-update

    Please select a file to edit by entering the corresponding number.

    (-1 to exit) (-3 to auto merge all remaining files)

    (-5 to auto-merge AND not use 'mv -i'):

    Если вы введете -1, etc-update выйдет и не будет обрабатывать никакие другие изменения. Если вы введете -3 или -5, все конфигурационные файлы будут обновлены на новые версии. Часто очень важно вначале выбрать конфигурационные файлы, которые должны быть автоматически обновлены. Для этого просто нужно ввести номер, который находится слева от имени конфигурационного файла.

    Например, мы выберем конфигурационный файл /etc/pear.conf:

    Код 2.3: Обновляем конкретный файл конфигурации

    Beginning of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf

    [...]

    End of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf

    1) Replace original with update

    2) Delete update, keeping original as is

    3) Interactively merge original with update

    4) Show differences again

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

    Здесь мы не будем распространяться по интерактивному обновлению. Однако для полноты картины, мы опишем возможные команды, которые вы можете использовать при сравнении двух файлов. Вам покажут две строки (оригинальную и ту, которая может стать новой), и подсказку, в которую вы можете ввести следующие команды:

    Код 2.4: Команды, существующие для интерактивного обновления

    ed: Отредактировать и использовать обе версии, к каждой добавить заголовок

    eb: Отредактировать и использовать обе версии

    el: Отредактировать и использовать левую версию

    er: Отредактировать и использовать правую версию

    e: Отредактировать новую версию

    l: Использовать левую версию

    r: Использовать правую версию

    s: Тихо добавить одинаковые строки

    v: Добавить одинаковые строки

    q: Выйти

    Когда вы закончили обновлять важные конфигурационные файлы, вы можете автоматически обновить все остальные конфигурационные файлы. etc-update закончит работу, если он не найдет больше конфигурационных файлов, которые можно обновить.

    4.c. quickpkg

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

    Например, чтобы заархивировать curl, orage и procps:

    Код 3.1: Пример использования quickpkg

    # quickpkg curl orage procps

    Заранее собранные пакеты будут сохранены в $PKGDIR (по умолчанию, в /usr/portage/packages/). Эти пакеты помещаются в $PKGDIR/<категория>.

    5. Отход от официального дерева

    5.a. Использование поднабора дерева Portage

    Исключение пакетов/категорий

    Вы можете селективно обновить некоторые категории/пакеты, и игнорировать остальные категории/пакеты. Мы сделали это возможным, позволив rsync исключать категории/пакеты в течение шага emerge --sync.

    Вам нужно определить имя файла, который содержит то, что надо исключить, в переменной --exclude-from в вашем /etc/make.conf.

    Код 1.1: Определяем файл с исключениями в /etc/make.conf

    PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"

    Код 1.2: Исключаем все игры в /etc/portage/rsync_excludes

    games-*/*

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

    5.b. Добавляем неофициальные ебилды

    Определение каталога с оверлеями Portage

    Вы можете попросить Portage использовать ебилды, которые не существуют в официальном дереве Portage. Создайте новый каталог, например /usr/local/portage, в котором вы будете сохранять такие ебилды. Используйте такую же структуру каталогов, как и в официальном дереве Portage!

    Затем определите PORTDIR_OVERLAY в /etc/make.conf, и сделайте так, чтобы она указывала на ранее определенный каталог. Теперь, когда вы будете использовать Portage, он будет брать во внимание эти ебилды без удаления/перезаписи этих ебилдов, когда вы в следующий раз запустите emerge --sync.

    Работаем с несколькими оверлеями

    Для продвинутых пользователей, которые проводят разработку в нескольких оверлеях, тестируют пакеты, прежде чем они попадут в дерево Portage, или просто хотят использовать неофициальные ебилды из различных источников, существует пакет app-portage/layman, в котором есть приложение layman. Он позволяет вам легко работать с репозиториями оверлеев.

    Сначала установите и сконфигурируйте layman, как показано в «Руководстве пользователя по оверлеям» (http://www.gentoo.org/proj/en/overlays/userguide.xml?style=printable), и добавьте необходимые вам репозитории с помощью команды layman -a <имя-оверлея>.

    Допустим, у вас есть два репозитория, названных java (для новых ебилдов, разработанных на java), и entapps (для приложений, разработанных только что для вашего предприятия). Вы можете обновить эти репозитории следующей командой:

    Код 2.1: Используем layman для обновления всех репозиториев

    # layman -S

    Для более детальной информации по работе с оверлеями, прочитайте man-страницу layman и «Руководство пользователя по оверлеям».

    5.c. Приложения, не обрабатываемые Portage

    Используем Portage с самоподдерживаемыми приложениями

    В некоторых случаях вы хотите конфигурировать, устанавливать и поддерживать приложения сами, без необходимости, чтобы Portage автоматизировал этот процесс для вас, но вы хотите, чтобы эти приложения были в дереве Portage. Известные случаи этого — исходники ядра и драйвера nvidia. Вы можете сконфигурировать Portage, чтобы он знал, что некоторый пакет устанавливается в вашей системе вручную. Этот процесс называется «инжектирование» и поддерживается Portage с помощью файла /etc/portage/profile/package.provided.

    Например, если вы хотите сказать Portage о gentoo-sources-2.6.11.6, который вы установили вручную, добавьте следующую строку к /etc/portage/profile/package.provided:

    Код 3.1: Пример строки для package.provided

    sys-kernel/gentoo-sources-2.6.11.6

    6. Расширенные возможности Portage

    6.a. Введение

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

    Конечно, из-за большой гибкости, может появиться огромный список потенциальных случаев. Невозможно рассмотреть здесь все. Вместо этого мы планируем сфокусироваться на некоторых общих случаях, которые вы можете использовать, чтобы справиться с вашими задачами. Если вам нужно более специфически подсказки, вы можете найти их в нашей вики (https://wiki.gentoo.org/)

    Большинство (а может и все) из этих дополнительных возможностей можно легко найти прочитав страницу man, которая идет с Portage:

    Код 1.1: Читаем man-страницу Portage

    $ man portage

    $ man make.conf

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

    6.b. Переменные окружения для каждого пакета

    Используем /etc/portage/env

    По умолчанию, Package использует при сборке переменные окружения, определенные в /etc/make.conf. Это такие переменные, как CFLAGS, MAKEOPTS и другие. В некоторых случаях, однако, вы можете захотеть использовать различные переменные для конкретных пакетов. Чтобы это сделать, Portage поддерживает использование /etc/portage/env и /etc/portage/package.env.

    Файл /etc/portage/package.env содержит список пакетов, для которых вы хотите изменить переменные, а также специальный идентификатор, который говорит Portage, какие вы хотите изменения. Имя идентификатора вы выбираете сами. Portage будет смотреть переменные в файле /etc/portage/env/<идентификатор>.

    Пример: Используем режим отладки для конкретных пакетов

    Как пример, мы включим отладку для пакета media-video/mplayer:

    Прежде всего, мы настроим переменные для отладки в файле, называемом /etc/portage/env/debug-cflags. Имя выбрано наугад, но оно, конечно, отражает причину отклонения, чтобы потом было понятнее, почему отклонение было сделано.

    Код 2.1: Содержимое /etc/portage/env/debug-cflags

    CFLAGS="-O2 -ggdb -pipe"

    FEATURES="${FEATURES} nostrip"

    Затем мы помечаем пакет media-video/mplayer, чтобы он использовал этот файл:

    Код 2.2: Содержимое /etc/portage/package.env

    media-video/mplayer debug-cflags

    6.c. Вмешиваемся в процесс установки

    Используем /etc/portage/bashrc и связанные с ним файлы

    Когда Portage работает с ебилдами, он использует окружение bash, в котором он вызывает различные функции компиляции (например src_prepare, src_configure, pkg_postinst, и т. д.). Но Portage также позволяет вам настроить окружение bash самому.

    Преимущество использования своего собственного окружения bash в том, что вы можете вклиниться в процесс установки на любом его шаге. Это может быть сделано для каждой установки (через /etc/portage/bashrc) или используя окружения для каждого пакета (через /etc/portage/env, как это описано выше).

    Чтобы вмешаться в процесс, окружение bash может слушать переменные EBUILD_PHASE, CATEGORY, а также переменные, которые всегда существуют в процессе установки (такие как P, PF, …). На основании этих переменных вы можете выполнять дополнительные шаги.

    Пример: Обновляем базу данных файлов

    В данном примере мы используем файл /etc/portage/bashrc для вызова некоторых приложений с базами данных файлов, чтобы удостовериться, что их база данных синхронизирована с системой. Приложения, которые использованы в примере это aide (инструмент обнаружения вторжений) и updatedb (для использования с командой locate), но это только для примера. Не считайте этот пример как HOWTO для программы AIDE ;-).

    Чтобы в данном случае использовать /etc/portage/bashrc, нам нужно «перехватить» функции postrm (после удаления файлов) и postinst (после установки файлов), так как именно тогда изменяются файлы на нашей файловой системе.

    Код 3.1: Пример /etc/portage/bashrc

    if [ "${EBUILD_PHASE}" == "postinst"] || [ "${EBUILD_PHASE}" == "postrm" ];

    then

    echo ":: Calling aide --update to update its database";

    aide --update;

    echo ":: Calling updatedb to update its database";

    updatedb;

    fi

    6.d. Выполняем задачи после --sync

    /etc/portage/postsync.d

    До этого момента мы говорили о вмешательстве в процесс компиляции. Однако Portage имеет также еще одну важную функцию — обновление дерева Portage. Чтобы выполнять задачи после обновления дерева Portage, поместите скрипт в /etc/portage/postsync.d и удостоверьтесь, что он помечен как исполняемый.

    Пример: Запускаем eix-update

    Если вы не используете eix-sync для обновления дерева, вы все еще можете обновлять его базу данных после запуска emerge —sync (или emerge-webrsync) добавив симлинк к /usr/bin/eix, и назвав ее eix-update в каталоге /etc/portage/postsync.d.

    Код 4.1: Запускаем eix-update после операции sync

    # ln -s /usr/bin/eix /etc/portage/postsync.d/eix-update

    Заметка: Если вы хотите использовать другое имя, вам нужно сделать скрипт, который будет запускать /usr/bin/eix-update. Приложение eix смотрит, по какому имени его вызвали, чтобы определить, что ему нужно выполнить. Если вы разместите ссылку на eix, которая не будет называться eix-update, то программа будет работать некорректно.

    6.e. Изменяем настройки профиля

    /etc/portage/profile

    По умолчанию, Gentoo использует настройки, находящиеся в профиле, на который указывает /etc/make.profile (символическая ссылка на нужную папку с профилем). Эти профили определяют как свои собственные настройки, так и наследуют настройки из других профилей (через свой родительский файл).

    Используя /etc/portage/profile вы можете изменить настройки профиля, такие как пакеты (какие пакеты считаются частью системного набора), виртуалы (пакеты по умолчанию, при установке виртуального пакета), и много чего еще.

    Пример: Добавляем nfs-utils к системному набору

    Если вы используете файловые системы, основанные на NFS, и они для вас являются критичными, вы можете захотеть добавить net-fs/nfs-utils в системные пакеты, что заставит Portage предупреждать вас, если он вдруг должен быть удален.

    Чтобы достичь этой цели, мы добавим пакет в /etc/portage/profile/packages, и добавим перед его именем звездочку:

    Код 5.1: Содержимое /etc/portage/profile/packages

    *net-fs/nfs-utils

    6.f. Применение нестандартных патчей

    Используем epatch_user

    Чтобы работать с несколькими ебилдами похожим образом, разработчики ебилдов используют eclasses (что-то вроде библиотек оболочки), в которых определены частоиспользуемые функции. Один из этих eclass'ов это eutils.eclass, в котором есть одна интересная функция, epatch_user.

    Функция epatch_user применяет патчи к исходному коду, которые находятся в /etc/portage/patches/<category>/<package>[-<version>[-<revision>]], смотря какой каталог будет найден первым. К сожалению, не все ебилды автоматически вызывают данную функцию, поэтому простое добавление своего патча в это место не всегда вызовет его применение.

    К счастью, с информацией, приведенной выше, вы можете вызывать эту функцию, вмешавшись, например, в фазу prepare. Эту функцию можно вызывать столько раз, сколько хотите, она применит патчи только один раз.

    Пример: Добавляем патчи к Firefox

    Пакет www-client/firefox это один из тех немногих пакетов, который уже вызывает epatch_user из ебилда, поэтому нам не нужно будет ничего переопределять.

    Если вам нужно пропатчить firefox (например потому что разработчик попросил вас помочь ему протестировать патч для бага, который вы нашли), поместите патч в /etc/portage/patches/www-client/firefox (хотя, наверное, будет лучше использовать полное имя, включая версию, чтобы патч не вступил в противоречие с последующими версиями) и пересобрать firefox.

    D. Конфигурация сети Gentoo1. Начинаем

    1.a. Начинаем

    Заметка: Данный документ предполагает, что вы правильно сконфигурировали ваше ядро, его модули для железа, и вы знаете имя интерфейса вашего железа. Мы подразумеваем, что вы конфигурируете eth0, но это может быть и eth1, wlan0 и т.д.

    Чтобы начать конфигурировать вашу сетевую карту, вам нужно рассказать системе Gentoo RC о ней. Это делается созданием символической ссылки с net.lo к net.eth0 в /etc/init.d.

    Код 1.1: Символическая ссылка net.eth0 к net.lo

    # cd /etc/init.d

    # ln -s net.lo net.eth0

    Теперь система Gentoo RC знает об этом интерфейсе. Ей также нужно знать, как конфигурировать новый интерфейс. Все сетевые интерфейсы конфигурируются в /etc/conf.d/net. Ниже приведены примерные конфигурации для DHCP и статического адреса.

    Код 1.2: Примеры для /etc/conf.d/net

    # Для DHCP

    config_eth0="dhcp"

    # Для статического IP используя нотацию CIDR

    config_eth0="192.168.0.7/24"

    routes_eth0="default via 192.168.0.1"

    dns_servers_eth0="192.168.0.1 8.8.8.8"

    # Для статического IP, используя нотацию с сетевыми масками

    config_eth0="192.168.0.7 netmask 255.255.255.0"

    routes_eth0="default via 192.168.0.1"

    dns_servers_eth0="192.168.0.1 8.8.8.8"

    Заметка: Если вы не опишете конфигурацию вашего интерфейса, то будет предполагаться, что ваш интерфейс конфигурируется по DHCP

    Заметка: CIDR означает «бесклассовый междоменный роутинг». Изначально адреса IPv4 классифицировались как A, B и C. Ранняя система классификации не учитывала массовой популярности Интернета и угрозы того, что адреса когда-нибудь кончатся. CIDR это схема адресации, которая позволяет одному IP адресу описать множество IP адресов. IP адрес по системе CIDR выглядит как обычный адрес, за исключением того, что он оканчивается на слеш, за которым следует число, например 192.168.0.0/16. CIDR описан в RFC 1519 (http://tools.ietf.org/html/rfc1519).

    Теперь, когда мы сконфигурировали наш интерфейс, мы можем его запускать и останавливать, используя следующие команды:

    Код 1.3: Запускаем и останавливаем сетевые скрипты

    # /etc/init.d/net.eth0 start

    # /etc/init.d/net.eth0 stop

    Важно: Когда вы испытываете проблемы с сетью, посмотрите на /var/log/rc.log. Если только у вас нет строки rc_logger=«NO» в /etc/rc.conf, в этом log-файле вы найдете информацию о загрузочной активности.

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

    Код 1.4: Конфигурируем сетевой интерфейс для запуска при загрузке

    # rc-update add net.eth0 default

    # rc

    2. Расширенная конфигурация

    2.a. Расширенная конфигурация

    Переменная config_eth0 это сердце конфигурации интерфейса. Это высокоуровневый список инструкций для конфигурирования интерфейса (в данном случае eth0). Каждая команда в списке инструкций выполняется последовательно. Интерфейс считается настроенным, если последняя команда отработает.

    Вот список встроенных инструкций:

    Команда

    null

    noop

    IPv4 или IPv6 адрес

    dhcp, adsl или apipa (или какая-то пользовательская команда при использовании стороннего модуля)

    Описание

    Ничего не делать

    Если интерфейс работает, и у него существует какой-то адрес, то отменить дальнейшую настройку, и считать, что она окончена успешно.

    Добавить соответствующий адрес к интерфейсу.

    Запускает модуль, который выполняет данную команду. Например, dhcp запустит модуль, который дает функциональность DHCP. Это может быть либо dhcpd, либо dhclient, либо pump.

    Если команда закончится неудачей, вы можете определить какую команду выполнять в этом случае. Такая «команда в случае неудачи» должна точно совпадать со структурой конфигурации.

    Вы можете соединять эти команды в цепь. Вот несколько примеров из реальной жизни.

    Код 1.1: Примеры конфигурации

    # Добавляем три адреса IPv4

    config_eth0="192.168.0.2/24

    192.168.0.3/24

    192.168.0.4/24"

    # Добавляем адрес IPv4 и два адреса IPv6

    config_eth0="192.168.0.2/24

    4321:0:1:2:3:4:567:89ab

    4321:0:1:2:3:4:567:89ac"

    # Оставить назначенный ядром адрес, если только интерфейс не упадет

    # тогда настроить его через DHCP. Если DHCP закончится наудачей,

    # то добавить статический адрес, определенный APIPA

    config_eth0="noop

    dhcp"

    fallback_eth0="null

    apipa"

    Заметка: Когда вы используете модуль ifconfig и добавляете более чем один адрес, создаются алиасы интерфейсов, для каждого из таких дополнительных адресов. Так, с вышеприведенными двумя примерами, вы получите интерфейсы eth0, eth0:1 и eth0:2. Вы не сможете ничего сделать с этими интерфейсами, так как и ядро, и остальные программы будут считать eth0:1 и eth0:2 за eth0.

    Важно: Порядок обработки важен! Если бы мы не указали опцию null, то команда apipa выполнилась бы только когда не выполнилась бы команда noop.

    Заметка: APIPA и DHCP обсуждаются позже.

    2.b. Сетевые зависимости

    Инициализационные скрипты в /etc/init.d могут зависеть от специфического сетевого интерфейса, или просто от net. Все сетевые интерфейсы в инициализационной системе Gentoo дают то, что называется net.

    Если в /etc/rc.conf переменная rc_depend_strict=«YES», то все сетевые интерфейсы, которые дают net должны быть активными, прежде чем зависимость на «net» будет считаться выполненной. Другими словами, если у вас есть net.eth0 и net.eth1, и инициализационный скрипт зависит от «net», то оба должны быть включены.

    С другой стороны, если rc_depend_strict=«NO», то зависимость «net» считается выполненной, если в этот момент хотя бы один сетевой интерфейс работает.

    Но что будет с net.br0, который зависит от net.eth0 и net.eth1? net.eth1 может быть беспроводным или PPP-устройством, которое должно быть сконфигурировано, прежде чем добавить его к мосту. Это не может быть сделано в /etc/init.d/net.br0, так как это просто символическая ссылка на net.lo.

    Ответ заключается в определении настройки rc_need_ в /etc/conf.d/net.

    Код 2.1: Зависимость net.br0 в /etc/conf.d/net

    rc_need_br0="net.eth0 net.eth1"

    Этого, однако, недостаточно. Инициализационные сетевые скрипты Gentoo используют виртуальную зависимость, называемую net, чтобы проинформировать систему, когда есть сеть. Ясно, в вышеприведенном случае, сеть можно обозначить как работающую только когда net.br0 будет запущена, а не все остальные. Поэтому это нужно тоже записать в /etc/conf.d/net.

    Код 2.2: Обновляем виртуальные зависимости и разрешения для сети

    rc_net_lo_provide="!net"

    rc_net_eth0_provide="!net"

    rc_net_eth1_provide="!net"

    Для более детального обсуждения зависимостей, проконсультируйтесь с разделом «Инициализационные скрипты» данной книги. Больше информации о /etc/rc.conf приведено в примерах данной главы.

    2.c. Имена и значения переменных

    Имена переменных динамические. Обычно они соответствуют структуре variable_${interface|mac|essid|apmac}. Например, переменная dhcpd_eth0 содержит значение опций dhcpd для eth0, а dhcpcd_essid содержит значение для опций dhcpd, когда какой-то интерфейс соединяется с ESSID «essid».

    Однако не существует явного и четкого правила, которое говорит, что интерфейсы должны обязательно называться ethx. Вообще, многие беспроводные интерфейсы имеют имена вроде wlanx, rax, как и ethx. Также, некоторые интерфейсы, определенные пользователем, такие как мосты, могут быть с любым именем, например foo. Чтобы сделать жизнь еще интереснее, беспроводные точки доступа могут иметь имена с не-буквенно-цифровыми символами в них — это важно, так как вы можете конфигурировать параметры сети на каждый ESSID.

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

    Другой проблемой bash является содержимое переменных — некоторые символы нужно «защитить». Это можно сделать добавив символ \ перед символом, который необходимо защитить. Следующий список символов нужно защищать таким образом - ", ' и \.

    В следующем примере мы используем беспроводной ESSID, так как они могут содержать больше всех символов. Мы будем использовать ESSID My "\ NET:

    Код 3.1: Пример имени переменной

    (Это будет работать, но такой домен не является правильным)

    dns_domain_My____NET="My \"\\ NET"

    (Данная команда устанавливает домен DNS в My "\ NET, когда беспроводная

    карта соединяется с точкой доступа, ESSID которой My "\ NET)

    3. Модульная сеть

    3.a. Сетевые модули

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

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

    Заметка: Все настройки, обсуждаемые здесь, сохраняются в /etc/conf.d/net, если не сказано иное.

    Код 1.1: Настройки модулей

    # Предпочесть ifconfig перед iproute2

    modules="ifconfig"

    # Вы также можете указать другие модули для интерфейса

    # В данном случае мы предпочитаем pump перед dhcpd

    modules_eth0="pump"

    # Вы также можете указать, какие модули не использовать. Например, вы можете

    # использовать supplicant или linux-wlan-ng для контроля беспроводной

    # конфигурации, но вы все равно хотите конфигурировать настройки сети

    # по ассоциированной с ней ESSID

    modules="!iwconfig"

    3.b. Обработчики интерфейсов

    Мы предлагаем два обработчика интерфейсов в настоящий момент: ifconfig и iproute2. Вам нужно выбрать один из них, чтобы выполнить хоть какую-то конфигурацию сети.

    ifconfig установлен по умолчанию (пакет net-tools это часть системного профиля). iproute2 это более мощный и гибкий пакет, но он не включен по умолчанию.

    Код 2.1: Чтобы установить iproute2

    # emerge sys-apps/iproute2

    # Чтобы предпочесть ifconfig перед iproute2 в случае, если установлены

    # оба из них, нужно написать следующее (так как openrc при этом предпочтет

    # iproute2 по умолчанию):

    modules="ifconfig"

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

    Код 2.2: Примеры ifconfig и iproute2

    config_eth0="192.168.0.2/24"

    config_eth0="192.168.0.2 netmask 255.255.255.0"

    # Также мы можем указать широковещательный адрес

    config_eth0="192.168.0.2/24 brd 192.168.0.255"

    config_eth0="192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255"

    3.c. DHCP

    DHCP это получение сетевой информации (IP адрес, DNS сервера, шлюзы, и т. д.) с DHCP-сервера. Это означает, что если существует DHCP-сервер в сети, то вам просто нужно сказать каждому клиенту использовать DHCP, и сеть настроится сама. Конечно, вам нужно будет сконфигурировать все остальные вещи, вроде беспроводных соединений, PPP, или других вещей, если необходимо, прежде чем вы сможете использовать DHCP.

    DHCP может работать с dhclient, dhcpcd или pump. Каждый модуль DHCP имеет свои плюсы и минусы — вот краткий обзор.

    Модуль DHCP

    dhclient

    dhcpcd

    pump

    Пакет

    Плюсы

    Минусы

    net-misc/dhcp

    Создан ISC, теми же людьми, которые придумали программы BIND DNS. Очень конфигурируем.

    Конфигурация слишком подробная, программы очень раздутые, не умеет получать NTP-сервера по DHCP, по умолчанию не посылает hostname.

    net-misc/dhcpcd

    Долгое время был в Gentoo по умолчанию, не зависит от сторонних программ, активно разрабатывается Gentoo

    Иногда может быть медленным, пока не умеет переходить в режим демона, если время выдачи адреса бесконечно

    net-misc/pump

    Легковесный, не зависит от других программ

    Больше не разрабатывается, ненадежный, особенно через модемы, не умеет получать сервера NIS по DHCP

    Если у вас есть более одного DHCP-клиента, вам нужно определить, какой использовать. Иначе мы будем использовать dhcpcd, если он есть.

    Чтобы послать специфические опции модулю DHCP, используйте модуль_eth0="..." (измените модуль на модуль DHCP, который вы используете, например dhcpcd_eth0).

    Мы попытались сделать DHCP относительно независимым — поэтому мы поддерживаем следующие команды, используя переменную dhcp_eth0. по умолчанию не включена ни одна опция:

  • release — отдать IP адрес для повторного использования

  • nodns — не перезаписывать /etc/resolv.conf

  • nontp — не перезаписывать /etc/ntp.conf

  • nonis — не перезаписывать /etc/yp.conf

  • Код 3.1: Примерная конфигурация DHCP в /etc/conf.d/net

    # Нужно только если у вас установлено более одного модуля DHCP

    modules="dhcpcd"

    config_eth0="dhcp"

    dhcpcd_eth0="-t 10" # Таймаут после 10 секунд

    dhcp_eth0="release nodns nontp nonis" # Только получить адрес

    Заметка: dhcpcd и pump посылают текущее имя хоста DHCP-серверу по умолчанию, так что вам не нужно это указывать.

    3.d. ADSL с PPPoE/PPPoA

    Сначала нам нужно установить программы для ADSL.

    Код 4.1: Устанавливаем пакет ppp

    # emerge net-dialup/ppp

    Потом, создайте сетевой скрипт PPP и сетевой скрипт для ethernet-интерфейса, который будт использоваться PPP:

    Код 4.2: Создаем скрипты PPP и ethernet

    # ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0

    # ln -s /etc/init.d/net.lo /etc/init.d/net.eth0

    Удостоверьтесь, что вы выставили rc_depend_strict в «YES» в /etc/rc.conf.

    Теперь нам нужно сконфигурировать /etc/conf.d/net.

    Код 4.3: Базовая настройка PPPoE

    config_eth0=null (Определите ваш ethernet интерфейс)

    config_ppp0="ppp"

    link_ppp0="eth0" (Определите ваш ethernet интерфейс)

    plugins_ppp0="pppoe"

    username_ppp0='user'

    password_ppp0='password'

    pppd_ppp0="

    noauth

    defaultroute

    usepeerdns

    holdoff 3

    child-timeout 60

    lcp-echo-interval 15

    lcp-echo-failure 3

    noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp"

    rc_need_ppp0="net.eth0"

    Вы также можете установить ваш пароль в /etc/ppp/pap-secrets.

    Код 4.4: Пример файла /etc/ppp/pap-secrets

    # Звездочка важна

    "username" * "password"

    Если вы используете PPPoE с USB-модемом, вам нужно установить br2684ctl. Пожалуйста, прочитайте /usr/portage/net-dialup/speedtouch-usb/files/README для информации о том, как ее правильно сконфигурировать.

    Важно: Внимательно прочитайте раздел по ADSL и PPP в /usr/share/doc/openrc-0.8.3-r1/net.example.bz2. В этом файле находятся более детальные объяснения всех настроек, которые скорее всего понадобятся вашему PPP. Конечно, измените версию 0.8.3-r1 на версию OpenRC, установленную на вашей системе.

    3.e. APIPA (Automatic Private IP Addressing)

    APIPA пытается найти свободный адрес в диапазоне 169.254.0.0-169.254.255.255, пробуя по протоколу arp случайный адрес в этом диапазоне. Если ответа нет, значит мы назначаем этот адрес интерфейсу.

    Это полезно только для локальных сетей без сервера DHCP, вы не подключены напрямую к Интернету, и все остальные компьютеры используют APIPA.

    Для поддержки APIPA установите net-misc/iputils или net-analyzer/arping.

    Код 5.1: Конфигурация APIPA в /etc/conf.d/net

    # Попробуем сначала DHCP — если не поможет, попробуем APIPA

    config_eth0="dhcp"

    fallback_eth0="apipa"

    # Просто используем APIPA

    config_eth0="apipa"

    3.f. Связывание

    Для связывания установите net-misc/ifenslave.

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

    Код 6.1: Конфигурация связывания в /etc/conf.d/net

    # Чтобы связать два интерфейса вместе

    slaves_bond0="eth0 eth1 eth2"

    # Можно не назначать IP связанному интерфейсу

    config_bond0="null"

    # Зависеть от eth0, eth1, eth2, так как их может понадобиться

    # конфигурировать дополнительно

    rc_need_bond0="net.eth0 net.eth1 net.eth2"

    3.g. Мосты (Поддержка 802.1d)

    Для использования мостов установите net-misc/bridge-utils.

    Мосты используются для объединения сетей вместе. Например, у вас может быть сервер, который соединяется с Интернетом по ADSL-модему и беспроводная точка доступа, чтобы другие компьютеры могли подсоединяться к Интернету по ASDL-модему. Вы должны создать мост, чтобы соединить два интерфейса вместе.

    Код 7.1: Конфигурация моста в /etc/conf.d/net

    # Конфигурируем мост. Для более подробной информации man brctl

    brctl_br0="setfd 0" "sethello 0" "stp off"

    # Добавляем порты к мосту br0

    bridge_br0="eth0 eth1"

    # Вам нужно сконфигурировать порты в null, чтобы на них не запустилось DHCP

    config_eth0="null"

    config_eth1="null"

    # В конце концов дайте мосту адрес — можете использовать и DHCP, если хотите

    config_br0="192.168.0.1/24"

    # Зависеть от eth0 и eth1, так как их может понадобиться настраивать отдельно

    rc_need_br0="net.eth0 net.eth1"

    Важно: Для использования некоторых настроек с мостами, вам может понадобиться вспомнить как именуются переменные (раздел 2.c выше).

    3.h. MAC-адрес

    Если вам необходимо, вы можете изменить MAC-адрес ваших интерфейсов через файл конфигурации сети.

    Код 8.1: Пример изменения MAC-адреса

    # Чтобы установить MAC-адрес интерфейса

    mac_eth0="00:11:22:33:44:55"

    # Чтобы выбрать случайные последних 3 байта

    mac_eth0="random-ending"

    # Чтобы выбрать случайное значение, но с тем же типом соединения

    # (оптоволокно, медь, беспроводное), все фирмы

    mac_eth0="random-samekind"

    # Чтобы выбрать случайное значение, с любмы типом соединения

    # (оптоволокно, медь, беспроводное), все фирмы

    mac_eth0="random-anykind"

    # Полностью случайное значение. Предупреждаем: некоторые MAC-адреса

    # полученные данным путем могут НЕ работать как ожидалось

    mac_eth0="random-full"

    3.i. Туннелирование

    Вам не нужно устанавливать чего-то особенного для туннелирования. Так как обработчик интерфейса может сделать это для вас.

    Код 9.1: Информация о туннелировании в /etc/conf.d/net

    # Для туннелей GRE

    iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"

    # Для туннелей IPIP

    iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"

    # Для конфигурации интерфейса

    config_vpn0="192.168.0.2 peer 192.168.1.1"

    3.j. VLAN (Поддержка 802.1q)

    Для поддержки VLAN, установите net-misc/vconfig.

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

    Код 10.1: Конфигурация VLAN в /etc/conf.d/net

    # Определите числа VLAN для ваших интерфейсов, вроде таких

    # Удостоверьтесь, что ваши VLAN ID не начинаются с нуля

    vlans_eth0="1 2"

    # Вы можете также сконфигурировать VLAN

    # смотри man-страницу vconfig для более детальной информации

    vconfig_eth0="set_name_type VLAN_PLUS_VID_NO_PAD"

    vconfig_vlan1="set_flag 1" "set_egress_map 2 6"

    # Сконфигурируйте интерфейс как обычно

    config_vlan1="172.16.3.1 netmask 255.255.254.0"

    config_vlan2="172.16.2.1 netmask 255.255.254.0"

    Важно: Для использования некоторых настроек VLAN, вам может понадобиться вспомнить как именуются переменные (раздел 2.c выше).

    4. Беспроводные сети

    4.a. Введение

    Беспроводная сеть на Linux обычно просто настраивается. Существует два пути конфигурации wifi: либо с использованием графического клиента, либо из командной строки.

    Самым простым путем является использование графического клиента, как только вы установили графическое окружение (http://www.gentoo.org/doc/en/?catid=desktop?style=printable). Большинство графических клиентов, такие как wicd или NetworkManager достаточно понятны. Они дают вам простой интерфейс «покажите-и-кликните», и вы сможете настроить сеть за несколько секунд.

    Заметка: Программа wicd дает вам утилиту для работы в командной строке, в дополнение к главному графическому интерфейсу. Вы можете получить ее установив wicd с USE-флагом ncurses. Утилита wicd-curses особенно полезна для тех людей, которые не используют окружение, основанное на gtk, однако все еще хотят простую утилиту командной строки, которая не требует ручного редактирования конфигурационных файлов.

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

    Вы можете настроить беспроводную сеть из командной строки, установив wireless-tools или wpa_supplicant. Важно запомнить, что вы конфигурируете беспроводные сети глобально, а не на каждый интерфейс.

    wpa_supplicant будет лучшим выбором. Для списка поддерживаемых драйверов прочитайте сайт wpa_supplicant (http://hostap.epitest.fi/wpa_supplicant).

    wireless-tools поддерживает практически все карты и драйвера, но эта программа не может соединяться к точкам доступа со стандартом WPA. Если ваши сети предоставляют только шифрование WEP или вообще открыты, тогда вы можете предпочесть простоту wireless-tools.

    Предупреждение: Драйвер linux-wlan-ng не поддерживается в данное время. Это потому, что linux-wlan-ng имеет свою собственную настройку и конфигурационные файлы, которые полностью отличны от чего бы то ни было еще. Разработчики linux-wlan-ng вроде бы изменяют свою настройку, чтобы она была похожа на wireless-tools, так что, когда это произойдет, вы сможете использовать linux-wlan-ng с Gentoo.

    4.b. WPA Supplicant

    WPA Supplicant это пакет, который позволяет вам соединяться с точками доступа со стандартом шифрования WPA.

    Код 2.1: Устанавливаем wpa_supplicant

    # emerge net-wireless/wpa_supplicant

    Важно: Вы должны включить CONFIG_PACKET в вашем ядре для работы wpa_supplicant. Попробуйте запустить grep CONFIG_PACKET /usr/src/linux/.config для проверки того, включено ли это в вашем ядре.

    Заметка: В зависимости от ваших USE-флагов, wpa_supplicant может установить графический интерфейс, написпнный на Qt4, что будет способствовать хорошей интеграции с KDE. Чтобы получить его, запустите echo "net-wireless/wpa_supplicant qt4" >> /etc/portage/package.use как root, прежде чем устанавливать wpa_supplicant.

    Теперь мы должны сконфигурировать /etc/conf.d/net так, чтобы предпочесть wpa_supplicant над wireless-tools (если оба установлены, по умолчанию выберется wireless-tools).

    Код 2.2: Конфигурация /etc/conf.d/met для wpa_supplicant

    # Предпочесть wpa_supplicant над wireless-tools

    modules="wpa_supplicant"

    # Важно сказать wpa_supplicant какой драйвер использовать

    # так как сама программа еще не очень хорошо догадывается

    wpa_supplicant_eth0="-Dmadwifi"

    Заметка: Если вы используете драйвер host-ap, вам нужно перевети карту в Managed-режим, прежде чем ее можно будет использовать с wpa_supplicant. Вы можете использовать iwconfig_eth0="mode managed" в /etc/conf.d/net чтобы достичь этого.

    Это было просто, не правда ли? Однако, нам все еще надо сконфигурировать сам wpa_supplicant, что может быть немного неочевидно. Все зависит от того, насколько безопасна точка доступа, к которой вы пытаетесь подсоединиться. Нижеследующий пример был взят и упрощен из /usr/share/doc/wpa_supplicant-<версия>/wpa_supplicant.conf.gz, который устанавливается вместе с wpa_supplicant.

    Код 2.3: Пример /etc/wpa_supplicant/wpa_supplicant.conf

    # Следующую строчку не изменять, а то не будет работать

    ctrl_interface=/var/run/wpa_supplicant

    # Удостоверимся, что только root сможет прочитать конфигурацию WPA

    ctrl_interface_group=0

    # Пусть wpa_supplicant сканирует и выбирает точки доступа

    ap_scan=1

    # Простой случай: WPA_PSK, и PSK это парольная фраза из ASCII

    network={

    ssid="simple"

    psk="очень секретный пароль"

    # Чем выше приоритет, тем скорее выберут именно эту точку

    priority=5

    }

    # Так же как и предыдущая, но потребовать основанного на SSID

    # сканирования (для точек доступа, которые не отвечают на

    # широковещательный SSID)

    network={

    ssid="second ssid"

    scan_ssid=1

    psk="очень секретный пароль"

    priority=2

    }

    # Используется только WPA-PSK. Любая допустимая парольная комбинация

    # принимается

    network={

    ssid="example"

    proto=WPA

    key_mgmt=WPA-PSK

    pairwise=CCMP TKIP

    group=CCMP TKIP WEP104 WEP40

    psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb

    priority=2

    }

    # Соединение открытым текстом (без WPA, без IEEE 802.1X)

    network={

    ssid="plaintext-test"

    key_mgmt=NONE

    }

    # Соединение с WEP-ключом (без WPA, без IEEE 802.1X)

    network={

    ssid="static-wep-test"

    key_mgmt=NONE

    # Ключи в кавычках это ключи ASCII

    wep_key0="abcde"

    # Ключи без кавычек — 16ричные значения

    wep_key1=0102030405

    wep_key2="1234567890123"

    wep_tx_keyidx=0

    priority=5

    }

    # Соединение с WEP-ключом (без WPA, без IEEE 802.1X) с использованием

    # разделяемого ключа, аутентификация IEEE 802.11

    network={

    ssid="static-wep-test2"

    key_mgmt=NONE

    wep_key0="abcde"

    wep_key1=0102030405

    wep_key2="1234567890123"

    wep_tx_keyidx=0

    priority=5

    auth_alg=SHARED

    }

    # IBSS/ad-hoc network with WPA-None/TKIP

    network={

    ssid="test adhoc"

    mode=1

    proto=WPA

    key_mgmt=WPA-NONE

    pairwise=NONE

    group=TKIP

    psk="секретный пароль"

    }

    4.c. Wireless Tools

    Начальная настройка и Managed-режим

    Программа Wireless Tools дает общий способ сконфигурировать базовые беспроводные интерфейсы вплоть до уровня безопасности WEP. Хотя WEP это слабый метод безопасности, однако он наиболее распространен.

    Конфигурация Wireless Tools контролируется несколькими главными переменными. Конфигурационный файл для примера, приведенный ниже, должен описать все, что вам нужно. Нужно только помнить, что нет конфигурации, которая означала бы «соединись с самой сильной незашифрованной точкой доступа» - мы всегда будем пытаться и соединим вас с чем-нибудь.

    Код 3.1: Устанавливаем wireless-tools

    # emerge net-wireless/wireless-tools

    Заметка: Хотя вы можете сохранять настройки беспроводной сети в /etc/conf.d/wireless, данный документ рекомендует вам сохранять их в /etc/conf.d/net.

    Важно: Вам понадобится вспомнить как именуются переменные (раздел 2.c выше).

    Код 3.2: Примерная настройка iwconfig в /etc/conf.d/net

    # Предпочесть iwconfig перед wpa_supplicant

    modules="iwconfig"

    # Сконфигурировать WEP-ключи для точек доступа, названных ESSID1 и ESSID2

    # Вы можете сконфигурировать до четырех WEP-ключей, но только один ключ

    # может быть активен в какой-то момент времени, поэтому мы ставим индекс

    # по умолчанию в [1] чтобы установить ключ [1], а затем снова, чтобы

    # изменить активный ключ в [1].

    # Мы делаем это на случай, если вы определите другие ESSID, которые

    # будут использовать другие ключи, а не только 1

    # Если перед ключом чтоит s, это означает, что это ASCII-ключ

    # Иначе это HEX-ключ

    # enc open означает open security (наиболее безопасно)

    # enc restricted означает restricted security (менее безопасно)

    key_ESSID1="[1] s:yourkeyhere key [1] enc open"

    key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"

    # То, что написано ниже работает только когда мы сканируем

    # существующие точки доступа

    # Иногда более одной точки доступа доступно, и нам нужно определить

    # предпочтительный порядок, в котором нужно соединяться

    preferred_aps="'ESSID1' 'ESSID2'"

    Тонкая настройка выбора точки доступа

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

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

    Значение

    any

    preferredonly

    forcepreferred

    forcepreferredonly

    forceany

    Описание

    Поведение по умолчанию

    Мы соединяемся только с теми точками доступа, которые мы видим, и которые находятся в списке предпочтительных

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

    Не сканировать точки доступа — просто попытаться подсоединиться к каждой по-порядку.

    Так же, как forcepreferred, но еще попытаться подсоединиться к любой другой существующей точке доступа.

    Более того, у нас есть выбор blacklist_aps и unique_ap. blacklist_aps работает примерно так же, как и preferred_aps. unique_ap это значение yes или no, которое говорит, может ли второй беспроводной интерфейс подсоединиться к той же точке доступа, что и первый интерфейс.

    Код 3.3: Пример blacklist_aps и unique_ap

    # Иногда вы не хотите соединяться с некоторыми точками доступа

    blacklist_aps="'ESSID3' 'ESSID4'"

    # Если у вас более одной беспроводной карты, вы можете сказать, хотите ли вы

    # позволить каждой карте соединяться с той же точкой доступа, или нет

    # Значения - «yes» или «no»

    # по умолчанию «yes»

    unique_ap="yes"

    Режимы Ad-Hoc и Master

    Если вы хотите настроить себя как ноду Ad-Hoc, если вы не сумели соединиться с какими-либо точками доступа в режиме managed, вы тоже можете это сделать.

    Код 3.4: Входим в режим ad-hoc

    adhoc_essid_eth0="This Adhoc Node"

    Что насчет соединения с Ad-Hoc сетями, или работы в режиме Master, чтобы стать точкой доступа? Вот конфигурация для такого случая! Вам может понадобиться указать WEP-ключи, как было показано ранее.

    Код 3.5: Пример конфигурации ad-hoc/master

    # Название режима — может быть managed (по умолчанию), ad-hoc или master

    # Не все драйвера поддерживают все режимы

    mode_eth0="ad-hoc"

    # Установить ESSID интерфейса

    # В режиме managed это заставит интерфейс попытаться соединиться с

    # указанным ESSID и ничего больше

    essid_eth0="This Adhoc Node"

    # Мы используем канал 3, если вы не укажете другой

    channel_eth0="9"

    Важно: То, что написано ниже было взято из документации BSD, которую можно найти здесь: http://www.netbsd.org/Documentation/network/wavelan.html. Существует 14 каналов. Для Северной Америки легальными являются 1-11, для большей части Европы 1-13, 10-13 для Франции, и только канал 14 для Японии. Если вы сомневаетесь, проконсультируйтесь с документацией, которая идет в комплекте с вашей картой или точкой доступа. Удостоверьтесь, что канал, который вы выбрали тот же, как и канал на вашей точки доступа (или другой карты в сети ad-hoc). по умолчанию, для карт, продаваемых в Северной Америке и большей части Европы он равен 3, для карт, продаваемых во Франции 11, и для карт, продаваемых в Японии 14.

    Средства для решения проблем с беспроводным подключением

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

    Переменная

    iwconfig_eth0

    iwpriv_eth0

    sleep_scan_eth0

    sleep_associate_eth0

    associate_test_eth0

    scan_mode_eth0

    iwpriv_scan_pre_eth0

    iwpriv_scan_post_eth0

    Значение по умолчанию

    Описание

    Смотрите man-страницу iwconfig для деталей того, что посылать iwconfig

    Смотрите man-страницу iwpriv для деталей того, что посылать iwpriv

    0

    Число секунд, которые нужно подождать, прежде чем начинать сканирование. Это необходимо, если драйверу/прошивке необходимо больше времени на активацию, прежде чем он может быть использован

    5

    Число секунд, которые нужно подождать интерфейсу в попытке соединиться с точкой доступа, прежде чем идти к следующей

    MAC

    Некоторые драйвера не сбрасывают те MAC-адреса, с которыми они не смогли соединиться, или с которыми пытались соединиться. Некоторые драйвера не сбрасывают уровень качества, когда они теряют сигнал или пытаются подсоединиться. Возможные значения — MAC, quality, или all

    Некоторые драйвера сканируют в режиме ad-hoc, так что если сканирование не удастся, попробуйте установить здесь ad-hoc

    Посылает некоторые iwpriv-команды интерфейсу перед сканированием. Смотрите man-страницу iwpriv для более детальной информации.

    Посылает некоторые iwpriv-команды интерфейсу после сканирования. Смотрите man-страницу iwpriv для более детальной информации.

    4.d. Определение конфигурации сети на каждый ESSID

    Иногда вам нужен статический IP, когда вы соединяетесь с ESSID1, и нужен DHCP, когда вы соединяетесь с ESSID2. Вообще, большинство переменных модуля может быть определено на каждый ESSID. Вот как это делается:

    Заметка: Это будет работать если вы используете WPA Supplicant или Wireless Tools

    Важно: Вам понадобится вспомнить как именуются переменные (раздел 2.c выше).

    Код 4.1: Изменить настройки сети для каждого ESSID

    config_ESSID1="192.168.0.3/24 brd 192.168.0.255"

    routes_ESSID1="default via 192.168.0.1"

    config_ESSID2="dhcp"

    fallback_ESSID2="192.168.3.4/24"

    fallback_route_ESSID2="default via 192.168.3.1"

    # Мы можем определить серверы имен и другие вещи тоже

    # Заметка: DHCP переопределит эти значения, если ей не сказать так не делать

    dns_servers_ESSID1="192.168.0.1 192.168.0.2"

    dns_domain_ESSID1="some.domain"

    dns_search_domains_ESSID1="search.this.domain search.that.domain"

    # Вы переопределяете MAC-адрес точки доступа

    # Это полезно, если вы переходите в различные места, у которых

    # одинаковый ESSID

    config_001122334455="dhcp"

    dhcpcd_001122334455="-t 10"

    dns_servers_001122334455="192.168.0.1 192.168.0.2"

    5. Добавление функциональности

    5.a. Хуки стандартных функций

    Четыре функции может быть определено в /etc/conf.d/net, и они будут вызваны в течение операций start/stop. Эти функции вызываются с наименованием интерфейса, так что одна функция может контролировать несколько адаптеров.

    Возвращаемые значения для функций preup() и predown() должны быть 0 (удача), чтобы показать, что конфигурация или деконфигурация интерфейса может быть продолжена. Если preup() возвратит ненулевое значение, то конфигурация интерфейса будет отменена. Если predown() возвратит ненулевое значение, то интерфейсу не будет разрешено продолжить деконфигурацию.

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

    ${IFACE} устанавливается в имя интерфейса, который необходимо включить/выключить.
    ${IFVAR} это ${IFACE}, сконвертированный в такое имя, которое разрешает bash.

    Код 1.1: Примеры функций pre/post up/down в /etc/conf.d/net

    preup() {

    # Протестируем сигнал на интерфейсе, прежде чем его включать. Это

    # работает только на некоторых сетевых адаптерах и требует установленного

    # пакета ethtool

    if ethtool ${IFACE} | grep -q 'Link detected: no'; then

    ewarn "No link on ${IFACE}, aborting configuration"

    return 1

    fi

    # Вернем 0, если все получилось

    return 0

    }

    predown() {

    # По умолчанию скрипт проверит NFS root, и запретит выключать

    # интерфейсы в этом случае. Помните, что если вы определите

    # функцию predown(), вы переопределите эту логику. Вот она,

    # если вы все еще ее хотите.

    if is_net_fs /; then

    eerror "root filesystem is network mounted -- can't stop ${IFACE}"

    return 1

    fi

    # Возвратим 0 если все нормально

    return 0

    }

    postup() {

    # Данная функция может использоваться, например, для регистрации

    # с помощью сервиса динамического DNS. Другой возможностью будет

    # послать/получить почту как только интерфейс будет включен

    return 0

    }

    postdown() {

    # Эта функция здесь больше для комплектности. Я не думаю, что

    # что-то полезное можно сделать с помощью нее пока ;-)

    return 0

    }

    Заметка: Для более подробной информации о написании своих собственных функций, прочитайте /usr/share/doc/openrc-*/net.example.bz2.

    5.b. Хуки функций Wireless Tools

    Заметка: Это не будет работать с WPA Supplicant, однако переменные ${ESSID} и
    ${ESSIDVAR} существуют в функции postup()

    В /etc/conf.d/net могут быть определены две функции, которые будут вызваны перед и после функции соединения. Эти функции вызываются с именем интерфейса, так что одна функция может контролировать несколько адаптеров.

    Возвращаемое значение для функции preassociate() должно быть 0 (удача), чтобы показать, что конфигурация или деконфигурация интерфейса может продолжиться. Если preassociate() вернет ненулевое значение, то конфигурация интерфейса будет отменена.

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

    ${ESSID} устанавливается равной ESSID точки доступа, к которой вы подсоединяетесь.
    ${ESSIDVAR} это ${ESSID} сконвертированная к имени переменной, которое понимает bash.

    Код 2.1: Функции pre/post association в /etc/conf.d/net

    preassociate() {

    # Нижеследующее добавляет две конфигурационные переменные leap_user_ESSID

    # и leap_pass_ESSID. Когда они обе сконфигурированы для того ESSID,

    # к которому мы подсоединяемся, тогда мы запустим скрипт CISCO LEAP

    local user pass

    eval user=\"\$\{leap_user_${ESSIDVAR}\}\"

    eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"

    if [[ -n ${user} && -n ${pass} ]]; then

    if [[ ! -x /opt/cisco/bin/leapscript ]]; then

    eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"

    return 1

    fi

    einfo "Waiting for LEAP Authentication on \"${ESSID//\\\\//}\""

    if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then

    ewarn "Login Failed for ${user}"

    return 1

    fi

    fi

    return 0

    }

    postassociate() {

    # Эта функция здесь больше для комплектности. Я не думаю, что

    # что-то полезное можно сделать с помощью нее пока ;-)

    return 0

    }

    Заметка: ${ESSID} и ${ESSIDVAR} не существуют в функциях predown() и postdown().

    Заметка: Для более подробной информации о написании своих собственных функций, прочитайте /usr/share/doc/openrc-*/net.example.bz2.

    6. Обслуживание сети

    6.a. Обслуживание сети

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

    Здесь вы найдете некоторые инструменты, которые помогут вам это сделать.

    Заметка: Этот документ рассказывает только про ifplugd, но существуют альтернативы, например netplug. netplug это более легковесная альтернатива ifplugd, но она работает на основе правильно работающих сетевых драйверов ядра, а многие драйвера не работают правильно.

    6.b. ifplugd

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

    Код 2.1: Устанавливаем ifplugd

    # emerge sys-apps/ifplugd

    Кофигурация для ifplugd достаточно проста. Конфигурационный файл находится в /etc/conf.d/net. Запустите man ifplugd для более детальной информации о существующих переменных. Также просмотрите файл /usr/share/doc/openrc-*/net.example.bz2 для большего числа примеров.

    Код 2.2: Примерная конфигурация ifplugd

    (Замените eth0 на интерфейс, за которым нужно следить)

    ifplugd_eth0="..."

    (Чтобы следить за беспроводным интерфейсом)

    ifplugd_eth0="--api-mode=wlan"

    В дополнение к обслуживанию нескольких сетевых соединений, вы можете захотеть программу, которая позволяет работать с несколькими DNS-серверами и конфигурациями. Это очень полезно, если вы получаете свой IP адрес по DHCP. Просто установите openresolv.

    Код 2.3: Устанавливаем openresolv

    # emerge openresolv

    Просмотрите man-страницу openresolv, чтобы узнать больше о его возможностях.

    Содержимое данного документа, если другое явно не указано, лицензируется по лицензии CC-BY-SA-2.5 (http://creativecommons.org/licenses/by-sa/2.5). Также применяется документ по импользованию имени и логотипа Gentoo (http://www.gentoo.org/main/en/name-logo.xml?style=printable)