HOWTO Portage через NFS

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск
Вернуться в раздел руководства

Содержание

[править] Проблемы

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

[править] Решение

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

[править] Общее представление

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

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

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

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

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

[править] Выгоды

  • Только один сервер заботится о синхронизации portage (ночью по заданию cron'а).
  • Не нужен локальный rsync сервер.
  • Общий для всех каталог /usr/portage/distfiles означает, что вам не нужно скачивать одно и то же каждый раз, чтобы синхронизировать репозитарий portage на ваших компьютерах.
  • И вообще, NFS - это классная штука ;)


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

[править] Подробный процесс

[править] Поддержка ядра

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

Linux Kernel Configuration: Встроенная поддержка
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)                                                                   

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

Linux Kernel Configuration: Включение модулей
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 можно добавить по желанию.

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

Code: Пересборка ядра

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

[править] Включение поддержки

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

modprobe nfs

Если Вы используете модули, отредактируйте /etc/modules.autoload.d/kernel-version, добавив следующую строку:

nfs

[править] Установка и настройка

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

gentoo_server # emerge nfs-utils
gentoo_client # emerge nfs-utils

Запустите NFS на сервере:

gentoo_server # /etc/init.d/nfs start

Настраиваем автоматическое монтирование общего portage (на сервере и у клиента):

gentoo_server # rc-update add portmap default
gentoo_server # rc-update add nfs default
gentoo_client # rc-update add portmap default
gentoo_client # rc-update add nfsmount default
gentoo_client # /etc/init.d/nfsmount start

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

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

После изменений файла /etc/exports перезапустите NFS даемон:

gentoo_server # exportfs -ra
gentoo_server # /etc/init.d/nfs reload

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

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

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

SERVER_IP:/usr/portage  /usr/portage  nfs  bg,hard 0 0
Примечание: Кеш портежей не расшарен через nfs. Если каждый раз вас докучает обновление кеша при команде emerge сразу после синхронизации, попробуйте добавить следующее в crontab клиентов. Это обновит кеш на компьютерах ваших клиентов спустя 10 минут после старта синхронизации на сервере. Установите время согласно скорости вашего подключения.
10 0 * * * emerge --metadata 

[править] PORTAGE_TMPDIR

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

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

[править] Пояснение кода

Запись 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

[править] Comments

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

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

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

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

Личные инструменты
На других языках