[Sysadmins] Загрузка ALT Linux Rescue по PXE

Konstantin Lepikhov lakostis на unsafe.ru
Вт Апр 10 15:29:41 MSK 2018


Hi Alex!

On 04/10/2018, at 12:31:16 PM you wrote:

> > > На текущий момент положил vmlinuz и full.cz (с добавленными модулями
> > > для поддержки сетевых карт) на tftp-сервер, образ rescue - на
> > > ftp-сервер, прописал в pxelinux.cfg соответствующие параметры
> > > (fastboot live
> > > automatic=method:ftp,network:dhcp,server:192.168.1.1,directory:/rescue/32
> > > ramdisk_size=450000 stagename=rescue showopts). Начинается загрузка,
> > > которая останавливается на сообщении "No network device found".
> > > Переход на вторую консоль и выполнение там udevadm trigger
> > > --action=add; udevadm settle подгружает модуль для сетевой карты,
> > > после чего можно продолжить загрузку (rescue скачивается с ftp и
> > > далее все загружается обычным образом).
> > > 
> > > Никак не могу понять, каким образом заставить
> > > udev/propagator/кто-этим-должен-заниматься загружать модули для
> > > сетевой карты автоматически.  
> > Насколько я помню, propagator все делает сам, и если имя сетевого
> > интерфейса не совпадает с ожидаемым, то он выкидывает эту ошибку.
> > Посмотрите отладочную консоль, там должно быть все написано что ему не
> > нравится.
> > 
> 
> На 3й консоли есть следующее:
> * welcome to the ALT Linux install(alt-stage1, built ...)
> * opening /proc/cmdline...
> *   initrd=..... (строка APPEND из pxelinux)
> * AUTOMATIC MODE: got 4 params
> *      got 8 args
> * spawning a shell
> * unsetting automatic
> 
> Похоже, все ему нравится, просто модуля для сетевой карты никто не
> загружает. Интерфейс только lo. lsmod - пусто. После ручной загрузки
> модуля (через вторую консоль с шеллом) и нажатия Ok в propagator у него
> все получается - поднимается интерфейс, получается IP, загружается по
> FTP образ и т.д.
да, если по коду то все вываливается потому что в /sys/class/network пусто:

...
char ** get_net_devices(void)
{
	DIR * sys_net;
	char * tmp[50];
	struct dirent * ent;
	int i = 0;
	
	sys_net = opendir("/sys/class/net");
	if (sys_net == NULL) return(strdup("\0"));

	while ( ent = readdir(sys_net)){
		if( !strcmp("lo", ent->d_name))continue;
		if (net_device_available(ent->d_name)){
			tmp[i++] = strdup(ent->d_name);
		}
	}
	tmp[i++] = NULL;

	return memdup(tmp, sizeof(char *) * i);
}
#endif /* DISABLE_NETWORK */

> 
> Никак не могу понять, как и кого попросить грузить модуль для сетевой
> карты. Все нужное в initrd есть - модули, udev.
propagator запускает udev перед собственно поиском устройств, т.е. если
карта там не обнаружилась, то в dmesg должно быть что-то. Есть ли еще
сообщения на других консолях?

-- 
WBR et al.


Подробная информация о списке рассылки Sysadmins