Bon, pas de solution, mais un work-around: exporter par NFS tous les systèmes possibles. Ce qui donne:
Code :
- cat >> syslinux.cfg
- DEFAULT linux
- IPAPPEND 1
- PROMPT 1
- TIMEOUT 50
- LABEL linux
- KERNEL console/vmlinuz-2.6.11.9
- APPEND initrd=console/ramdisk-2.6.11.9.squash nfs=192.168.3.15:/mnt/systems/console/ boot=default
- LABEL mandrake
- KERNEL console/vmlinuz-2.6.11.9
- APPEND initrd=console/ramdisk-2.6.11.9.squash nfs=192.168.3.15:/mnt/systems/console/ boot=Mandrake
- LABEL gentoo
- KERNEL console/vmlinuz-2.6.11.9
- APPEND initrd=console/ramdisk-2.6.11.9.squash nfs=192.168.3.15:/mnt/systems/console/ boot=Gentoo
- LABEL kubuntu
- KERNEL console/vmlinuz-2.6.11.9
- APPEND initrd=console/ramdisk-2.6.11.9.squash nfs=192.168.3.15:/mnt/systems/console/ boot=Kubuntu
|
et le script d'initialisation qui lit les variables "nfs" et "boot" et du coup chroot directement dedans:
Code :
- cat >> ramdisk/linuxrc << EOF
- #!/bin/sh
- # Chain loader startup script automatically generated on mar déc 30 02:41:30 CET 2003 for console
- if [ "$$" != '1' ]; then
- echo "WARNING: $0 should be run with a PID of one instead of $$";
- fi
- getValue() {
- case "$1" in
- *\=*)
- echo "$1" | cut -f2 -d=
- ;;
- esac
- }
- # This is if we want the kernel to automagically mount the NFS root when we exit
- echo "Finding root file system"
- /bin/mount -n -t proc none /proc
- echo 0x100 > /proc/sys/kernel/real-root-dev
- for x in `cat /proc/cmdline` ; do
- case "${x}" in
- boot\=*)
- SYSTEM=`getValue "${x}"`
- ;;
- ip\=*)
- IP_CONFIGURATION=`getValue "${x}"`
- IP=`echo "${IP_CONFIGURATION}" | cut -f1 -d:`
- DHCP_SERVER=`echo "${IP_CONFIGURATION}" | cut -f1 -d:`
- GATEWAY=`echo "${IP_CONFIGURATION}" | cut -f1 -d:`
- NETMASK=`echo "${IP_CONFIGURATION}" | cut -f1 -d:`
- ;;
- nfs\=*)
- NFS=`getValue "${x}"`
- ;;
- *)
- echo "Skipping unrecognized parameter \"${x}\""
- ;;
- esac
- done
- /bin/umount /proc
- echo "Setting network address to ${IP}:${NETMASK} with gateway ${GATEWAY} and connecting to ${NFS} to launch ${SYSTEM}"
- function loadModule() { if /sbin/insmod /modules/`uname -r`/${1}.ko; then echo " (OK)"; else echo "FAILED !"; fi ; }
- echo -n "Loading network drivers: "
- for driver in exportfs sunrpc lockd nfsd nfs 8139too sis900; do
- echo -n $driver && loadModule ${driver}
- done
- echo "Configuring network interface"
- /sbin/ifconfig eth0 ${IP} up
- /sbin/route add ${IP} dev eth0
- /sbin/route add default gw ${GATEWAY}
- echo -n "Connecting to remote server: "
- if /bin/mount -n -o rw -o nolock,rsize=4096,wsize=4096 -t nfs ${NFS}/${SYSTEM} /boot ;
- then echo "OK." ;
- else echo "FAILED!"; echo "Please mount it to /boot and exit"; /bin/sh ;
- fi
- echo "Entering ${SYSTEM}"
- cd /boot/
- /sbin/pivot_root . initrd/
- echo "Booting remote system"
- exec chroot . sh -c 'umount /initrd; exec /sbin/init' < dev/console > dev/console 2>&1
- echo "Real file system exited, last-ditch is a shell ..."
- /bin/sh
- EOF
- mksquashfs initrd/ ramdisk-2.6.11.9.squash -2.0
|
qui suppose que j'ai préalablement copié les modules qui vont bien dans "initrd/modules/2.6.11.9" avec un
Code :
- mkdir -p initrd/modules/2.6.11.9/
- for i in exportfs sunrpc lockd nfsd nfs 8139too sis900 ; do find /lib/modules/2.6.11.9/ -name ${i}.ko -exec cp -v {} initrd/modules/2.6.11.9/ ; done
|
et que j'ai exporté tous les systèmes mentionnés:
Code :
- cat /etc/exports
- ...
- /mnt/systems/console/default console(async,rw,no_root_squash,async)
- /mnt/systems/console/Mandrake console(async,rw,no_root_squash,async)
- /mnt/systems/console/Gentoo console(async,rw,no_root_squash,async)
- /mnt/systems/console/Kubuntu console(async,rw,no_root_squash,async)
- ...
|
Pour que ma réponse soit complète, j'utilise tftp lancé automatiquement par dhcpd3-server avec cette configuration:
Code :
- cat /etc/dhcp3/dhcpd.conf
- ...
- allow booting;
- allow bootp;
- ...
- host console {
- hardware ethernet 00:0B:xx:xx:xx:xx ;
- fixed-address console;
- option routers datajet;
- option domain-name-servers 213.228.0.168, 212.27.32.176, 212.27.32.177;
- server-name "data";
- filename "pxelinux.0";
- default-lease-time 6000;
- max-lease-time 72000;
- }
- ...
|
Et voilà, boot sur le réseau comme avec un lilo, le bruit du disque dur en moins. Ce qui permet notamment de mettre les pilotes ide en module, ce qui permet de faire de l'ide hot-plug en prenant soin de rmmod ide_generic && modprobe ide_generic mais c'est une autre histoire.
Hope it helps those coming here through the "search" button!
Message édité par glacote le 22-05-2005 à 19:01:57