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 //если это еще не сделано |
[править] Включение поддержки
Перезагрузитесь, если включили поддержку 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
это работает для меня.
