Table des matières

Tuto NFS root avec démarrage depuis une clé USB

Création du nfsroot avec debootstrap (dans /nfsroot)

Le dossier

sudo mkdir /nfsroot

debootstrap

sudo apt-get install dchroot debootstrap 
sudo debootstrap --arch i386 `lsb_release -c -s` /nfsroot http://archive.ubuntu.com/ubuntu/

Config

sudo cp /etc/resolv.conf /nfsroot/etc/resolv.conf 
sudo cp /etc/apt/sources.list /nfsroot/etc/apt/ 

Mount (/dev et /proc)

sudo mount --bind /dev /nfsroot/dev 
sudo mount -t proc /proc /nfsroot/proc 

chroot

sudo chroot /nfsroot 

install

apt-get update 
apt-get install ubuntu-minimal ubuntu-standard ubuntu-desktop language-pack-fr language-pack-gnome-fr nfs-client # Installation d'Ubuntu
apt-get dist-upgrade 
dpkg-reconfigure locales 
dpkg-reconfigure console-setup 

Config pour boot avec nfs

config : /etc/hostname

echo "nfs-ub" > /etc/hostname 

config : /etc/hosts

127.0.0.1	localhost 
127.0.1.1	nfs-ub 

# The following lines are desirable for IPv6 capable hosts 
::1     localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
ff02::3 ip6-allhosts

config : user

adduser congelli501 
usermod -G admin -a congelli501

sudo

visudo # Permet d'éditer le fichier sudoers

⇒ Ajouter:

# Members of the admin group may gain root privileges 
%admin ALL=(ALL) ALL 

config : /etc/fstab

# /etc/fstab: static file system information. 
# 
# Use 'blkid -o value -s UUID' to print the universally unique identifier 
# for a device; this may be used with UUID= as a more robust way to name 
# devices that works even if disks are added and removed. See fstab(5). 
# 
# <file system> <mount point>   <type>  <options>       <dump>  <pass> 
proc            /proc           proc    defaults        0       0 
/dev/nfs        /               nfs     defaults        1       1 
none            /tmp            tmpfs   defaults        0       0 
none            /var/run        tmpfs   defaults        0       0 
none            /var/lock       tmpfs   defaults        0       0 
none            /var/tmp        tmpfs   defaults        0       0 

config : /etc/initramfs-tools/initramfs.conf

Il faut modifier l'initramfs pour pouvoir lancer le système depuis un server NFS.

Transformer

BOOT=local

en

BOOT=nfs 

Et

MODULES=most

en

MODULES=netboot 

Reconstruction de l' initramfs

apt-get install linux-image-generic 
#dpkg-reconfigure "linux-image-`uname -r`" 
update-initramfs -u 

config : /etc/network/interfaces

La connexion sera déjà initialisée lors du boot, si on tente de la reconfigurer, le système ne pourra plus accéder au server NFS. ⇒ Ajouter:

# eth0 ne doit pas être reconfigurée 
iface eth0 inet manual 

exit

On quitte le chroot.

exit

umount

On démonte proc et dev.

sudo umount /nfsroot/proc 
sudo umount /nfsroot/dev

Partage NFS

Installation

sudo apt-get install nfs-kernel-server 

Config

Ajouter dans le fichier /etc/exports :

/nfsroot             192.168.0.*(rw,no_root_squash,async,subtree_check) 
(Il peut être utile de changer "192.168.0.*") 

Reload

sudo service nfs-kernel-server reload 

Boot du client depuis une clé USB

Création du script d'installation

touch install_usb-boot 
chmod +x install_usb-boot 
nano install_usb-boot

Copier ce script dans install_usb-boot

#!/bin/bash 
# Script by Congelli501

# Help 
if [ -z "$1" ] || [ "$1" = '-h' ] || [ "$1" = '--help' ]; then 
	echo "Install linux kernel and grub on partition <device>." 
	echo "The partition should be formated in extX, fat32 or ntfs." 
	echo "Usage: install_usb-boot <device>" 
	exit 0 
fi 

# Config 
set -u 
set -e 

# Vars 
serverAdr='192.168.0.2' 
mountDir='/media/usbboot_tmp_mount' 

# Device 
device="$1" 
if [ ! -b "$device" ]; then 
	echo "Erreur: '$device' n'est pas de type 'bloc'" 
	exit 1 
fi 

#uuid=$(blkid -o udev "$device" | grep "ID_FS_UUID=" | cut -f2 -d'=') 
uuid=$(blkid -o value -s UUID "$device") 
device_vol=${device:0:8} 

# Mount 
umount "$device" | true 
mkdir -p "$mountDir" 
mount "$device" "$mountDir" 

rm -rf "$mountDir/boot" 
mkdir -p "$mountDir/boot/grub" 

# Grub 
echo "Installing grub2..." 
grub-install --root-directory="$mountDir" "$device_vol" 

# Copy kernel 
echo "Installing kernel..." 
cp "/boot/vmlinuz-$(uname -r)" "$mountDir/boot/vmlinuz" 
cp "/boot/initrd.img-$(uname -r)" "$mountDir/boot/initrd.img" 

# grub.cfg 
echo "Installing grub.cfg..." 
cfgFilename="$mountDir/boot/grub/grub.cfg" 
echo -n "" > "$cfgFilename" 

echo "echo '$(uname -rs)'" >> "$cfgFilename" 
echo "echo 'Loading modules...'" >> "$cfgFilename" 
echo "insmod ext2" >> "$cfgFilename" 
echo "insmod fat" >> "$cfgFilename" 
echo "insmod ntfs" >> "$cfgFilename" 
echo "echo 'Searching file system...'" >> "$cfgFilename" 
echo "search --no-floppy --fs-uuid --set $uuid" >> "$cfgFilename" 
echo "echo 'Loading linux...'" >> "$cfgFilename" 
echo "linux /boot/vmlinuz root=/dev/nfs nfsroot=$serverAdr:/nfsroot ip=dhcp rw quiet splash" >> "$cfgFilename" 
echo "echo 'Loading initrd...'" >> "$cfgFilename" 
echo "initrd /boot/initrd.img" >> "$cfgFilename" 
echo "echo 'Booting...'" >> "$cfgFilename" 
echo "boot" >> "$cfgFilename" 

# Umount 
umount "$device" 

# Exit 
exit 0

Connectez la clé usb

Elle doit contenir une partition formatée en extX, ntfs ou fat32

Installation

sudo ./install_usb-boot /dev/sdc1 /nfsroot

C'est fini

Il ne vous reste plus qu'à booter sur la clé.

congelli501 Le 27/06/2010, 13:04