Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
По памяти 13.06.08 13:17 Число просмотров: 1276
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
Сейчас не на работе, лезть за логами далеко... Расскажу по памяти, а завтра уже уточню, ибо как раз буду на работе.
> 1. Sysinstall точно ищет файл на NFS? Что об этом говорят > логи сервера, tcpdump? Поройся там, может он корёжит имя?
Имя и полный путь не глядел, но tcpdump'ом садился - обращение идет.
> 2. NFS путь начинается со слэша?
Нет. NFS путь начинается с имени сервера и имеет вид
nfs.server:/full/path/to/file
Я не пробовал играться с вариантами написания, ведь при установке указания пути к дистрибутиву в виде
nfs.server:/full/path/to/
вполне достаточно...
> ИМХО, > пока есть tcpdump можно не лазать в эти сорцы.
Ну, в сорцы придется лезть для модификации, а для диагностики, конечно, они не нужны :)
|
<sysadmin>
|
FreeBSD - загрузка сценариев установки по NFS 12.06.08 09:07
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
Итак, имеем:
- куча рабочих станций на FreeBSD (допустим, RELENG_7_0, не суть важно) с несколько разными параметрами, как то: материнки, имена дисковых устройств, способы разбиения дисков, набор устанавливаемых пакетов и т.п.;
- серевер для установки по сети операционной системы на вышеописанные рабочие станции (полностью настроен и работает - dhcp, pxeboot по tftp, установка по nfs).
Что нужно:
- манипуляция инсталляционными сценариями (пункт "Load Config" в sysinstall) для выбора сценария, "заточенного" для конкретной рабочей станции. При этом требуется, чтобы сами сценарии размещались на том же NFS-сервере, с которого устанавливается ОС.
Суть проблемы заключается в том, что за загрузку сценариев в sysinstall отвечает функция dispatch_load_floppy, описанная в
/usr/src/usr.sbin/sysinstall/dispatch.c
Функция жестко привязана к флопику (принудительно вызывается mediaSetFloppy). В принципе, путь решения понятен - заменить MEDIA_TYPE_FLOPPY на MEDIA_TYPE_NFS. Я сделал это путем выкусывания из исходников функции mediaSetFloppy и подмене ее функцией mediaSetNFS (все равно флопов у меня нет нигде, толку с этого legacy-кода - ноль).
Все собирается без ошибок, залил модифицированный sysinstall в mfsroot (естественно, собирать нужно с LDFLAGS="-static", иначе затолкать в mfsroot его будет слишком геморройно), после чего вызываемый диалог стал действительно обращаться к NFS. Проблема возникла, как говорится, откуда не ждали - сценарий на сервере не обнаруживается, хотя он совершенно точно лежит там, куда указывает значение переменной cp в этих исходниках (кто поковыряется в коде - поймет, о чем я). Возможно, проблема в том, что с NFS нужно работать несколько иначе, чем с floppy, однако как это реализовать в виде кода мне не очень понятно - я с си вообще не дружу. Точнее, подправить что-то могу, а вот написать - нихт :(
В связи с этим вопрос - может быть кто-то уже сталкивался с подобным? Ковырялся в исходниках? Или может быть есть какая-то замена этому древнему sysinstall, имеющая нужный мне функционал? Или вообще что-то иное посоветуете?
|
|
Поборол. 14.06.08 22:06
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
В общем, там в функции dispatch_load_floppy при изменении mediaSetFloppy на mediaSetNFS вызывались дополнительные функции (указание адреса и монтирование фс), которые переинициализировали первоначально введенное имя файла. После того, как определение имени сценария переместил за монтирование nfs - все заработало :)
В итоге пошел чуть дальше. Подсистему загрузки сценариев с флоппи трогать не стал - просто добавил в sysinstall еще один пункт меню, который будет вызывать другую функцию (назвал ее dispatch_load_nfs, создана на основе dispatch_load_floppy с вышеописанными изменениями). Все красиво и, что самое приятное - работает :)
|
|
Почему бы не использовать автомонтировщик? 13.06.08 14:16
Автор: :-) <:-)> Статус: Elderman
|
Просто сказать sysinstall, чтобы брал файл из /net/nfs_server/full/path/to/file
Обо всем остальном позаботится автомонтировщик.
P.S. Может глупость сказал, т.к. с FreeBSD практически дела не имел.
|
| |
Да сказал бы, если б знал, как :) 13.06.08 14:39
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
Там при загрузке конфигурационного файла перво-наперво принудительно вызывается функция, которая монтирует флоппик и проверяет, есть ли там такой файл. И уже на этапе монтирования выдает ошибку - ну еще бы, флопика-то нет... А до пути в тот момент еще даже не доходит дело.
|
|
Мысли вслух 13.06.08 13:06
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
|
1. Sysinstall точно ищет файл на NFS? Что об этом говорят логи сервера, tcpdump? Поройся там, может он корёжит имя?
2. NFS путь начинается со слэша? Кажется в функции dispatchCommand ищется символ ' / ' в команде, и от него ищется выкусывается имя файла. Но это я не уверен. ИМХО, пока есть tcpdump можно не лазать в эти сорцы.
|
| |
По памяти 13.06.08 13:17
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
Сейчас не на работе, лезть за логами далеко... Расскажу по памяти, а завтра уже уточню, ибо как раз буду на работе.
> 1. Sysinstall точно ищет файл на NFS? Что об этом говорят > логи сервера, tcpdump? Поройся там, может он корёжит имя?
Имя и полный путь не глядел, но tcpdump'ом садился - обращение идет.
> 2. NFS путь начинается со слэша?
Нет. NFS путь начинается с имени сервера и имеет вид
nfs.server:/full/path/to/file
Я не пробовал играться с вариантами написания, ведь при установке указания пути к дистрибутиву в виде
nfs.server:/full/path/to/
вполне достаточно...
> ИМХО, > пока есть tcpdump можно не лазать в эти сорцы.
Ну, в сорцы придется лезть для модификации, а для диагностики, конечно, они не нужны :)
|
|
|