В начало → Система Portage
Gentoo-doc HOME В начало

Система Portage


1. Portage через NFS

1. Portage через NFS

1.1. Проблемы

  • Слишком долгое время выполнения 'emerge --sync' на всех серверах в LAN.

  • Согласно этикету gentoo, вы не можете синхронизироваться чаще одного раза в день.

1.2. Решение

Общий NFS portage. Одна машина синхронизируется под управлением cron, остальные машины монтируют свою директорию /usr/portage с помощью NFS.

1.3. Общее представление

  1. Обязательная поддержка nfs в ядре. В случае компиляции ее как модуля, добавить соответствующие строчки в modules.autoload

  2. Если потребуется, перезагрузить или загрузить модуль nfs

  3. Выполнить emerge nfs-utils

  4. Настроить NFS/fstab для автоматического монтирования общего репозитария portage.

  5. Установить локальный PORTAGE_TMPDIR на локальную файловую систему.

1.4. Выгоды

  • Только один сервер заботится о синхронизации portage (ночью по заданию cron'а).

  • Не нужен локальный rsync сервер.

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

  • И вообще, NFS — это классная штука ;)

Внимание

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

1.5. Подробный процесс

1.5.1. Поддержка ядра

У вас ДОЛЖНА быть включена поддержка NFS в вашем ядре, либо вкомпиленная в ядро (в таком случае необходимо будет перезагрузиться):

Листинг 1. Конфигурация ядра Linux: Встроенная поддержка

File systems --->
  Network File Systems --->
    <*> NFS file system support
    [*]   Provide NFSv3 client support
    [ ]   Provide NFSv4 client support (EXPERIMENTAL)
    [ ]   Allow direct I/O on NFS files (EXPERIMENTAL)
    <*> NFS server support
    [*]   Provide NFSv3 server support
    [ ]     Provide NFSv4 server support (EXPERIMENTAL)
    [ ]   Provide NFS server over TCP support (EXPERIMENTAL)


либо в качестве модулей:

Листинг 2. Конфигурация ядра Linux: Включение модулей

File systems --->
  Network File Systems --->
    <M> NFS file system support
    [*]   Provide NFSv3 client support
    [ ]   Provide NFSv4 client support (EXPERIMENTAL)
    [ ]   Allow direct I/O on NFS files (EXPERIMENTAL)
    <M> NFS server support
    [*]   Provide NFSv3 server support
    [ ]     Provide NFSv4 server support (EXPERIMENTAL)
    [ ]   Provide NFS server over TCP support (EXPERIMENTAL)


Добавляем NFS server support, так как на данной машине будет размещаться общий каталог portage. Поддержку клиента NFS можно добавить по желанию.

Сохраните конфиг вашего ядра и пересоберите его.

Листинг 3. Пересборка ядра

gentoo # mount /boot //если это еще не сделано
gentoo # cd /usr/src/linux
Для ядер 2.4:
gentoo # make dep && make bzImage modules modules_install install
Для ядер 2.6:
gentoo # make && make modules_install


1.5.2. Включение поддержки

Перезагрузитесь, если включили поддержку NFS в ядро, или, если вы собрали ее как модули, просто запустите: modprobe nfs

1.5.3. Установка и настройка

Установите пакет nfs-utils:

# emerge nfs-utils

Настраиваем автоматическое монтирование общего portage

# rc-update add portmap default
# rc-update add nfs default

Отредактируйте crontab на сервере (метод зависит от того, какой cron вы используете). Для vixie-cron и dcron команда выглядит так: crontab -e

Добавьте код:

0 0 * * * emerge --sync > /dev/null 2>&1 || true --nospinner && emerge world -vup

Отредактируйте файл /etc/exports на сервере, чтобы в нем были следующие строчки:

/usr/portage    ip_range/subnet(sync,no_root_squash,rw)

Отредактируйте /etc/fstab на клиентах, добавив в него следующий код:

SERVER_IP:/usr/portage  /usr/portage  nfs  bg,hard 0 0

Отредактируйте /etc/modules.autoload.d/kernel-version, добавив следующую строку:

nfs

Примечание

Кеш портежей не расшарен через nfs. Если каждый раз вас докучает обновление кеша при команде emerge сразу после синхронизации, попробуйте добавить следующее в crontab клиентов. Это обновит кеш на компьютерах ваших клиентов спустя 10 минут после старта синхронизации на сервере. Установите время согласно скорости вашего подключения.

10 0 * * * emerge --metadata 

1.5.4. PORTAGE_TMPDIR

PORTAGE_TMPDIR должен быть локальным каталогом (для скорости).

Переменная PORTAGE_TMPDIR устанавливается в файле /etc/make.conf и по умолчанию указывает на /var/tmp, то есть на локальную файловую систему, но просто для того, чтобы увериться в том, что это так, а не иначе, сделайте: emerge info Если всё прошло успешно (а всё так и должно быть), вы спокойно можете очистить содержимое каталога /usr/portage на КЛИЕНТСКОЙ машине (например, чтобы освободить дополнительное свободное место на диске)

1.6. Пояснение кода

Запись crontab'а

0 0 * * * emerge --sync > /dev/null 2>&1 || true --nospinner && emerge world -vup

говорит о том, что раз в сутки, в полночь будут выполнятся синхронизация с перенаправлением вывода в мусор и без бегунка и emerge world -vup и отправка письма root'у о том, что должно быть обновлено — настройте корректно почту).

/etc/exports:

"/usr/portage" — каталог для экспорта

"ip_range/subnet" — только компьютеры из этого диапазона могут подключать его по сети

"(sync,no_root_squash,rw)" — полезные параметры, всегда мною используемые

/etc/fstab:

"SERVER_IP:/usr/portage" — что вы хотите подключить

"/usr/portage" — куда вы хотите подключить

"nfs" — ФС ресурса

"bg,hard 0 0" — полезные параметры, всегда мною используемые

/etc/modules.autoload.d/kernel-version:

"nfs" сообщает какой модуль загружать при загрузке ядра версии kernel-version

1.7. Комментарии

Советы? Пожелания? Похвала? Дайте нам знать.

Если вы получаете ошибку "Error starting NFS daemon" попробуйте

# mount -t nfsd nfsd /proc/fs/nfsd

это работает для меня.

В начало
В начало → Система Portage