Environnement: j'ai un serveur patché vserver (http://linux-vserver.org) qui tourne 24/24. Sur celui-ci sont installés 7 vservers dont 1 pratiquement pas sollicité. Disposant d'un notebook de vieille génération (HP 6000) j'ai pensé qu'il pouvait être utilisé plus souvent et plus efficacement s'il bootait sur le réseau et chargeait une image nbd depuis ce vserver.
Cela évite de démarrer le notebook sur le disque dur qui commence à donner des signes de faiblesse et qui n'est pas une bête de course.

De plus l'arrêt/démarrage d'un vserver demande moins de 5 secondes et il est dès lors possible de ne le démarrer qu'en cas de besoin.


Chez debian l'install du serveur ltsp provoque l'install d'un serveur nfs. Je ne souhaitais pas mettre en route une usine à gaz sur le vserver et je suis donc reparti d'une machine tournant sur ubuntu sur laquelle j'avais déjà procédé à l'install du paquet ltsp-server-standalone. En effet ubuntu utilise une image nbd pour les stations diskless.

J'ai recopié l'image /opt/ltsp/images/i386.img sur le vserver et ai ensuite installé sur celui-ci le minimum de paquets requis: nbd-server, dhcp3-server, tftpd-hpa, ssh (pour "voir" ce qui se passait sur cette machine mais cela n'est pas obligatoire.)

L'image étant générée depuis une install ltsp, il a fallu modifier les scripts de démarrage AVANT de la construire. En effet le script ltsp-client-core qui est lancé sur la station diskless me proposait un écran de connexion qui ne m'a jamais lancé une session X. Les logs sur la machine m'indiquant un problème d'autorisation xauth.... (à priori je ne suis pas le seul cf google).


J'ai donc procédé comme suit:

1) Construction du serveur et du client ltsp sur une machine
2) Sur le serveur ltsp: chroot /opt/ltsp/i386  et modif des scripts de démarrage (suppression de ltsp-client-core)
3) Reconstruction de l'image par ltsp-update-image
4) Récupération de l'image générée par la commande ltsp-update-image sur le vserver.
5) Démarrage des services dhcp, nbd, tftpd sur le vserver
6) Boot depuis le portable

Evidemment l'inconvénient de cette solution est qu'il faudra reconstruire l'image sur la machine d'origine suite à une mise à jour de sécu importante par exemple et la rebalancer sur le vserver ou mieux, disposer d'une machine assez rapide et de préférence avec un noyau >= 2.6.29 sur lequel on aura activé le module squashfs (j'ai en effet tenté de passer le patch sur un 2.6.28 sans succès: soit on se cantonne au 2.6.27 soit on passe au 2.6.29). Il suffira dès lors d'installer les squashfs-tools et d'unsquasher le fichier image :  unsquashfs /<repertoire>/<sortie>/  i386.img.

Ensuite un simple chroot dans l'arborescence: chroot /<repertoire>/<sortie> . Puis install de paquets ou modif de la conf. Il suffit ensuite de refaire l'opération inverse:

mksquashfs /<repertoire>/<sortie>/  /home/newimage.img


Dans la mesure où c'est pour une utilisation perso et vraiment ponctuelle je considèreque ça n'est pas bloquant.


Détails sur le serveur maître (que vous consultez actuellement)

srvweb:/# uname -a
Linux srvweb 2.6.27.21-vs2.3.0.36.4 #1 SMP Wed Mar 25 17:10:58 CET 2009 i686 GNU/Linux

srvweb:/# cat /etc/issue.net
Debian GNU/Linux 5.0

srvweb:/# vserver-stat
CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
20     113 907.9M   106M  29m26s54  18m43s46  37d06h28 vweb1
21      23   616M  85.3M   6m35s26   0m35s66  37d06h28 vweb2
22      10 125.3M  27.6M   8m11s79   1m55s45  37d06h28 vweb3
23      58 488.6M    13M   3m54s86   0m55s21  37d06h28 vweb4
24      11 395.9M  32.1M   1m52s77   0m43s88  30d01h52 vweb5
25       6 149.5M  97.2M   3m58s94   0m55s14  37d06h28 vweb6
26       7  34.5M   5.7M   0m19s63   0m10s14   3h02m20 vweb7

L'image ltsp étant sur vweb7 on va aller voir sur celui-ci mais auparavant un détail à noter: certains services nécessaires à l'exécution de nbd-server ou dhcp-server nécessite de modifier certaines capabilities sur l'hôte: en cherchant un peu sur la doc de vserver j'ai mis le minimum:

srvweb:/usr/local/etc/vservers/vweb7# ll
total 40
drwxr-sr-x  6 root staff 4096 mai  3 11:38 .
drwxr-sr-x 11 root staff 4096 mai  3 11:32 ..
drwxr-sr-x  4 root staff 4096 mai  3 11:32 apps
-rw-r--r--  1 root staff   22 mai  3 11:38 bcapabilities
lrwxrwxrwx  1 root staff   49 mai  3 11:32 cache -> /usr/local/etc/vservers/.defaults/cachebase/vweb7
-rw-r--r--  1 root staff    3 mai  3 11:44 context
drwxr-sr-x  2 root staff 4096 mai  3 11:32 cpuset
-rw-r--r--  1 root staff  112 mai  3 11:32 fstab
drwxr-sr-x  3 root staff 4096 mai  3 11:32 interfaces
-rw-r--r--  1 root staff    6 mai  3 11:32 name
lrwxrwxrwx  1 root staff   33 mai  3 11:32 run -> /usr/local/var/run/vservers/vweb7
drwxr-sr-x  2 root staff 4096 mai  3 11:32 uts
lrwxrwxrwx  1 root staff   48 mai  3 11:32 vdir -> /usr/local/etc/vservers/.defaults/vdirbase/vweb7

srvweb:/usr/local/etc/vservers/vweb7# cat bcapabilities
CAP_MKNOD
CAP_NET_RAW



srvweb:/# vserver vweb7 enter

vweb7:/#

vweb7:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:17:1a:69:87 
          inet adr:192.168.0.236  Bcast:192.168.0.255  Masque:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5757224 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6574316 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:2429432465 (2.2 GiB)  TX bytes:1284879474 (1.1 GiB)
          Interruption:20 Adresse de base:0xcc00

lo        Link encap:Boucle locale 
          inet adr:127.0.0.1  Masque:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2437124 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2437124 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:462165284 (440.7 MiB)  TX bytes:462165284 (440.7 MiB)

vweb7:~# df -hT
Sys. de fich. Type     Tail. Occ. Disp. %Occ. Monté sur
/dev/hdv1      ufs     65G   16G   46G  27% /
none         tmpfs     16M     0   16M   0% /tmp


Configuration des services:

vweb7:/etc/dhcp3# cat dhcpd.conf
# Default LTSP dhcpd.conf config file.
#

authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.200 192.168.0.201;
    option domain-name "net.pat";
    option domain-name-servers 192.168.0.23;
    option broadcast-address 192.168.0.255;
    option routers 192.168.0.254;
    next-server 192.168.0.236;
#    get-lease-hostnames true;
    option subnet-mask 255.255.255.0;
    option root-path "/opt/ltsp/i386";
    if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
        filename "/ltsp/i386/pxelinux.0";
    } else {
        filename "/ltsp/i386/nbi.img";
    }
}

host ltsp {
    hardware ethernet 00:01:03:88:6d:83;      ==> carte réseau du portable
    fixed-address 192.168.0.200;
}


vweb7:/etc/dhcp3# cat /etc/inetd.conf
# /etc/inetd.conf:  see inetd(8) for further informations.
tftp           dgram   udp     wait    root  /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

vweb7:/etc/nbd-server# cat config
[generic]
# If you want to run everything as root rather than the nbd user, you
# may either say "root" in the two following lines, or remove them
# altogether. Do not remove the [generic] section, however.
        user = nbd
        group = nbd

# What follows are export definitions. You may create as much of them as
# you want, but the section header has to be unique.
[export]
        exportname = /opt/ltsp/images/i386.img
        port = 2000

L'image exportée n'est pas énorme:

vweb7:/# ll /opt/ltsp/images/
total 216204
drwxr-xr-x 2 root root      4096 mai  3 10:08 .
drwxr-xr-x 4 root root      4096 mai  3 09:56 ..
-rwxr--r-- 1 root root 221163520 mai  3 11:56 i386.img

C'est un fichier squashfs. Le noyau 2.6.27 ne l'intègre pas la gestion de ce type de fichier mais il existe un patch que j'ai appliqué pour tester sur la machine sur laquelle je l'ai construit, machine qui tourne avec un noyau perso 2.6.27.19.
Détails ici


Lorsque tout ce petit monde est bien configuré je démarre les services: nbd-server, dhcp3-server et openbsd-inetd et je vérifie:


vweb7:/# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:17 init [2] 
 1317 ?        Ss     0:00 /bin/nbd-server
 2211 ?        S      0:00 /bin/nbd-server
 2758 ?        Ss     0:00 /usr/sbin/dhcpd3 -q eth0
 3249 ?        S      0:00 /bin/nbd-server
 6434 ?        S+     0:00 login                                                                                            
 6472 pts/3    Ss     0:00 /bin/bash -login
 6478 pts/3    R+     0:00 ps ax
22606 ?        Sl     0:00 /usr/sbin/rsyslogd -c3
25778 ?        Ss     0:00 /usr/sbin/inetd

vweb7:/# netstat -lnp
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      1317/nbd-server
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2758/dhcpd3    
udp        0      0 0.0.0.0:69              0.0.0.0:*                           25778/inetd    
raw        0      0 0.0.0.0:1               0.0.0.0:*               7           2758/dhcpd3    
Sockets du domaine UNIX actives(seulement serveurs)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Chemin

Je boote ensuite le portable sur le réseau:

Copies d'écrans


Une petite doc ltsp (mes excuses auprès de son auteur j'ai oublié de noter l'origine)