Installation Debian/Woody sur un Cobalt RaqX via réseau

Objectif:
Installer un serveur Cobalt Raq 3/3i/4/550 sans avoir besoin de démonter le disque dur, et donc via le réseau.

Moyens:
Les RaqX sont équipés de carte réseau PXE.
C’est à dire que le serveur peut booter à travers le réseau, et charger un mini système en mémoire.
A partir de là il est possible de préparer le disque du Raq en y installant un système de base.
Pour cet exercice nous allons utiliser une Debian.

NB:
Ce document reprend une partie des informations citées par Zone38 ici.
Pour les raq3/3i/4 il sera nécessaire de flasher la ROM du Raq, PAS LES 550.

Etapes:
Dans un premier temps nous allons configurer notre serveur debootstrap : bootp, dhcp, tftp.
Puis nous configurons un environement minimal sur ce serveur.
Enfin nous ferons booter le Raq à travers le réseau sur ce système minimal, ce qui nous permettra de le préparer pour un boot autonome.

1. Préparation du serveur debootstrap

Installation des packages nécessaires :


# apt-get install dhcp3-server syslinux tftpd-hpa

dhcp3-server :
Ce service nous permettra d’attribuer une IP à notre Raq, et d’indiquer le serveur bootp.

syslinux :
Ceci est un boot loader permettant l’installation de Linux sur des systèmes distants ayant des partitions MS-DOS/Windows FAT.
Il est concu pour simplifier l’instalalation de Linux, et la création de disquette de rescue, ou d’autre disque de boot.
Il peut notament être utilisé comme bootloader PXE pour des boot à travers le réseau.

tftpd-hpa :
Service TFTP dérivé de OpenBSD. Très utile dans le cas d’installation via PXE.
Ce service sera pris en charge par inetd.

1.1. Configuration du tftp et du PXE.

Copier /usr/lib/syslinux/pxelinux.0 dans /var/lib/tftpboot :


# cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/

Ensuite créer le dossier pxelinux.cfg dans /var/lib/tftpboot :


cd /var/lib/tftpboot
mkdir pxelinux.cfg

Puis créer le fichier /var/lib/tftpboot/pxelinux.cfg/default qui va contenir :


vim pxelinux.cfg/default

avec les lignes suivantes :

PROMPT 0
DEFAULT pxe
LABEL pxe
KERNEL vmlinuz
APPEND initrd=initrd.img root=/dev/nfs nfsroot=192.168.107.77:/nfsroot-x86
IPAPPEND 1

Explications :
On défini en fait le kernel, et les parametres à passer au noyau :

– KERNEL vmlinuz : donc il va chager le kernel nommé vmlinuz dans /var/lib/tftpboot.
– APPEND : listes des paramètres à passer au kernel :
. initrd=initrd.img : chargera initrd.img à partir de /var/lib/tftpboot
. root=/dev/nfs : le root sera sur un disque NFS
. nfsroot=192.168.107.77:/nfsroot-x86 : chemin d’accès au partage.

A noter qu’ici l’IP 192.168.107.77 correspond à celle de votre serveur debootstrap.

1.2. Installation et configuration du NFS.

Une fois que notre Raq aura booté, il cherchera à monter une partition NFS à travers le réseau.
Il faut donc installer un serveur NFS, et le configurer de manière à ce que le Raq y trouve un système complet.

1.2.1 Installation du serveur NFS.

Pour plus de simplicité on choisirat la version userland du NFS de la debian.


# aptitude install nfs-user-server

1.2.2. Configuration du NFS.


# mkdir /nfsroot-x86

Edition du fichier /etc/exports :


# vim /etc/exports

Ajouter la ligne suivante :

/nfsroot-x86 192.168.107.78 (rw,no_root_squash)

– /nfsroot-x86 : correspond au partage.
– 192.168.107.78 : l’ip du Raq après requète DHCP.
– rw : Read Write (c’est mieux de pouvoir ecrire)
– no_root_squash : parce que sinon toute action en root est transformé en nobody…

Relancer le service NFS :


# /etc/init.d/nfs-user-server restart

1.2.3. Installation du système minimal dans ls NFS.

Pour cela on utilise debootstrap, ce qui permet de faire une install de base Debian.


# apt-get install debootstrap
# debootstrap sarge /nfsroot-x86 http://archive.debian.org/debian/

debootstrap va alors télécharger, puis vérifier un ensemble de package, et enfin les installer.

I: Retrieving debootstrap.invalid_dists_sarge_Release
I: Validating debootstrap.invalid_dists_sarge_Release
I: Retrieving debootstrap.invalid_dists_sarge_main_binary-i386_Packages
I: Validating debootstrap.invalid_dists_sarge_main_binary-i386_Packages
I: Checking adduser...
I: Checking apt...
I: Checking apt-utils...
I: Checking aptitude...
I: Checking at...
I: Checking base-config...
I: Checking base-files...
I: Checking base-passwd...
I: Checking bash...
I: Checking bsdmainutils...
I: Checking bsdutils...
....
Setting up base-config (2.53.10) ...

I: Base system installed successfully.
umount: /nfsroot-x86/dev/pts: not mounted
umount: /nfsroot-x86/dev/shm: not mounted
umount: /nfsroot-x86/proc/bus/usb: not mounted

Puis nous modifions le /etc/fstab afin de luis rajouter une ligne pour


# vim /etc/fstab

proc            /nfsroot-x86/proc proc  defaults        0       0

Enfin nous monter /nfsroot-x86/proc :


# mount proc /nfsroot-x86/proc -t proc

Notre « boot-système » est presque prêt.
Nous allons apporter quelques mofication spécifique au Raq.

1.2.4 Quelques fichiers utiles

S’assurer que le fichier /nfsroot-x86/etc/resolv.conf existe et qu’il est semblable au votre, sinon le copier à partir de /etc/resolv.conf


# cp /etc/resolv.conf /nfsroot-x86/etc/resolv.conf

Copier votre fichier sources.list pour apt :


# cp /etc/apt/sources.list /nfsroot-x86/etc/apt/

Modifier le fichier /etc/inittab :


# vim /etc/inittab

...
# Example how to put a getty on a serial line (for a terminal)
#
T0:23:respawn:/sbin/getty -L ttyS0 115200 vt102
T1:23:respawn:/sbin/getty -L ttyS1 115200 vt102
...

Cela permettra d’accèder au Raq via un cable console, pour la suite de l’installation.

1.2.5. Installation de quelqueq paquets utiles :


{chroot}# aptitude install vim sudo
{chroot}# visudo

Si RAID soft :

{chroot}# aptitude install mdadm

Il y a la possibilité d’installer ssh, dans ce cas je vous conseille alors de modififer le fichier /etc/ssh/sshd_config pour qu’il écoute sur l’IP de votre


{chroo}# apt-get install ssh
{chroo}# vi /etc/ssh/sshd_config

- #ListenAddress 0.0.0.0
+ ListenAddress 192.168.107.78

Entrer dans /nfsroot-x86 avec chroot :


# chroot /nfsroot-x86 /bin/bash

Là vous pouvez lancer base-config pour finaliser l’installation du deboostrap.


{chroot}# base-config

1.3. Configuration du serveur DHCP

Nous allons récupérer l’adresse MAC du Raq.
Pour cela raccorder un cable série en 15200 n 8.

Puis lancer minicom avec les bons paramètres, et allumer le Raq.
Dans la séquence de boot du Raq vous devez voir ceci (exemple tiré d’un Raq550):

...
Initializing ethernet: 2 controller(s) found
  National Semiconductor DP83815 Found at port 0xfe00, MAC: 00:10:e0:05:ef:03
  National Semiconductor DP83815 Found at port 0xfd00, MAC: 00:10:e0:05:ef:c6
...

C’est la première ligne qui nous intéresse.

Editer le fichier de configuration de votre serveur DHCP :


# vim /etc/dhcp3/dhcpd.conf

Et ajouter les lignes suivantes :

host cobalt_pxe {
        hardware ethernet 00:10:e0:05:ef:03;
        filename "/pxelinux.0";
        server-name "backup";
        next-server 192.168.107.77;
        fixed-address 192.168.107.78;
}

Retirer les « \ » c’est WordPress qui les rajoute 🙁

Et relancer votre service dhcpd


# /etc/init.d/dhcp3-server restart

2. Configuration du Cobalt

Le processus de boot du Cobalt est le suivant :

  1. booter sur la ROM et charger en RAM un mini noyau Linux
  2. Selon l’option de boot (Net,Disk,etc ..) le Raq va alos chercher un faire un deuxième boot sur un kernel vmlinuz

Il est possible de configurer le Raq pour booter sur le réseau.
Pour cela, via minicom, dans la séquence de boot du Raq vous devez voir ceci :

IDE: stabilizing spinup: 100%
Checking Memory: done

Press spacebar to enter ROM mode

Taper sur la barre d’espace, et voilà vous êtes dans la ROM.

Maintenant nous allons dire au Raq qu’au prochain reboot il devra booter sur le réseau et sur l’IP de notre serveur :

Cobalt:Main Menu> boot

Cobalt:Boot Menu> read_boot_type
From disk

Cobalt:Boot Menu> read_boot_dev
md1

Cobalt:Main Menu> lowlevel

{si pas de dhcp}
Cobalt:Lowlevel Hardware Menu> cmos

Cobalt:CMOS Menu> btoip 192 168 107 77
{/fi}

Cobalt:CMOS Menu> main

Cobalt:Main Menu> bfn

Vérifier dans les logs de votre serveur bootstrap que le NFS est bien pris en compte :


# tail -f /var/log/syslog

May 11 13:59:21 localhost mountd[10989]: NFS mount of /nfsroot-x86 attempted from 192.168.107.78
May 11 13:59:21 localhost mountd[10989]: /nfsroot-x86 has been mounted by 192.168.107.78

Voilà, dans le minicom vous devez voir apparaitre un prompt Debian.

3. Installation du Cobalt

Nous allons préparer le disque du Raq pour accueillir une Debian.

3.1 Partitionner et formater le disque


{serial}# fdisk /dev/hda

Exemple :

   Device Boot         Start         End      Blocks   Id  System
   /dev/hda1               1       19842    10000336+  83  Linux                 /
   /dev/hda2           19843       21827     1000440   82  Linux swap / Solaris  swap
   /dev/hda3           21828       41669    10000368   82  Linux                 /var
   /dev/hda4           41670       77545    18081504   82  Linux                 /opt

Dans le cas d’une configuration de raid logiciel :

# fdisk /dev/hda

Command (m for help): p

Disk /dev/hda: 40.0 GB, 40020664320 bytes
16 heads, 63 sectors/track, 77545 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        7938     4000720+  fd  Linux raid autodetect
/dev/hda2            7939        9923     1000440   fd  Linux raid autodetect
/dev/hda3            9924       17841     3990672   fd  Linux raid autodetect
/dev/hda4           17842       77545    30090816   fd  Linux raid autodetect
# fdisk /dev/hdc

Command (m for help): p

Disk /dev/hdc: 40.0 GB, 40020664320 bytes
16 heads, 63 sectors/track, 77545 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1               1        7938     4000720+  fd  Linux raid autodetect
/dev/hdc2            7939        9923     1000440   fd  Linux raid autodetect
/dev/hdc3            9924       17841     3990672   fd  Linux raid autodetect
/dev/hdc4           17842       77545    30090816   fd  Linux raid autodetect

Puis formater les partitions :


{serial}# mke2fs -r 0 -O none /dev/hda1
{serial}# mke2fs /dev/hda3
{serial}# mke2fs /dev/hda4
{serial}# mkswap /dev/hda2
{serial}# swapon /dev/hda2

Ensuite on les monte dans /mnt :


{serial}# mount /dev/hda1 /mnt
{serial}# mkdir /mnt/var
{serial}# mount /dev/hda3 /mnt/var
{serial}# mkdir /mnt/opt
{serial}# mount /dev/hda4 /mnt/opt

Dans le cas d’un RAID 1 soft :

a. Création du raid

{serial}# mdadm --create /dev/md1 --level 1 --raid-devices=2 /dev/hda1 /dev/hdc1
{serial}# mdadm --create /dev/md2 --level 1 --raid-devices=2 /dev/hda2 /dev/hdc2
{serial}# mdadm --create /dev/md3 --level 1 --raid-devices=2 /dev/hda3 /dev/hdc3
{serial}# mdadm --create /dev/md4 --level 1 --raid-devices=2 /dev/hda4 /dev/hdc4

b. Vérification de la synchronisation

{serial}# cat /proc/mdstat

c. Configuration du RAID

{serial}# mdadm --detail --scan
{serial}# mdadm --detail --scan > /etc/mdadm.conf

d. Formatage des partitions et montage

{serial}# mke2fs -r 0 -O none /dev/md1
{serial}# mke2fs /dev/md3
{serial}# mke2fs /dev/md4
{serial}# mkswap /dev/md2
{serial}# swapon /dev/md2
{serial}# mount /dev/md1 /mnt/
{serial}# mkdir /mnt/var
{serial}# mount /dev/md3 /mnt/var
{serial}# mkdir /mnt/opt
{serial}# mount /dev/md4 /mnt/opt

3.2. Installation d’un système de base.

Maintenant nous allons lancer un debootstrap pour construire un system dans /mnt


{serial}# debootstrap sarge /mnt http://archive.debian.org/debian/

Nous allons copier quelques fichiers , i.e. les même qu’à l’étape 1.2.4.

Dans le cas d’un RAID soft, copier le fichier mdadm.conf


{serial}# cp /etc/mdadm.conf /mnt/etc/mdadm.conf

Il faut aussi penser à monter /mnt/proc :


{serial}# mount proc /mnt/proc -t proc

Puis nous entrons dans le nouveau système avec chroot :


{seria}# chroot /mnt /bin/bash

3.3. Configuration du système

Une fois dans le chroot je lance quelques commandes :


{serial-chroot}# base-config
{serial-chroot}# apt-get update
{serial-chroot}# apt-get dist-upgrade


{serial-chroot}# apt-get install vim sudo
{serial-chroot}# visudo

Si RAID soft :

{serial-chroot}# apt-get install mdadm

3.4. Compilation d’un kernel (selon la doc)

3.4.1. Récupération du kernel

{serial-chroot}# apt-get install vim libncurses5-dev kernel-package gcc make ncftp
{serial-chroot}# cd /usr/src
{serial-chroot}# ncftp ftp.free.fr

{serial-chroot}> cd pub/linux/kernel
{serial-chroot}> cd v2.4
{serial-chroot}> get linux-2.4.32.tar.gz
{serial-chroot}> quit

3.4.2. Décompression du kernel

{serial-chroot}# tar xfz linux-2.4.32.tar.gz

3.4.3. Récupération du patch et du fichier de configuration du kernel

{serial-chroot}# sync
{serial-chroot}# wget http://hugues.lepesant.com/stuff/cobalt/cobalt-2.4.32.patch
{serial-chroot}# wget http://hugues.lepesant.com/stuff/cobalt/conf_cobalt-RaqXXX_2432

XXX = 34 pour les Raq3, Raq3i, et Raq4
XXX = 550 pour le Raq550

3.4.4. Configuration et compilation du kernel

{serial-chroot}# ln -s linux-2.4.32 linux
{serial-chroot}# patch -p 0 < cobalt-2.4.32.patch
{serial-chroot}# cp conf_cobalt-RaqXXX_2432 linux/.config
{serial-chroot}# cd linux
{serial-chroot}# make menuconfig
{serial-chroot}# vim /etc/kernel-pkg.conf

Modifier les lignes maintainer et email.

{serial-chroot}# make-kpkg clean
{serial-chroot}# make-kpkg --revision=cobalt.1.0 kernel_image
{serial-chroot}# make-kpkg modules_image

3.4.5. Préparation du Cobalt

{serial-chroot}# vi /etc/kernel-img.conf

Ce fichier doit contenir les lignes suivantes:

do_symlinks = No
do_boot_enable = No
do_initrd = No
postinst_hook = /etc/cobalt/kernel_cobalt_install.sh
prerm_hook = /etc/cobalt/kernel_cobalt_remove.sh


{serial-chroot}# mkdir /etc/cobalt
{serial-chroot}# vi /etc/cobalt/kernel_cobalt_install.sh
{serial-chroot}# vi /etc/cobalt/kernel_cobalt_remove.sh
{serial-chroot}# chmod u+x /etc/cobalt/kernel_cobalt*.sh

3.4.5.1 /etc/cobalt/kernel_cobalt_install.sh

#!/bin/sh
ln -sf $2 /boot/vmlinux.gz

3.4.5.2 /etc/cobalt/kernel_cobalt_remove.sh

#!/bin/sh
rm -f /boot/vmlinux.gz

3.4.6. Installation du kernel

{serial-chroot}# cd /usr/src
{serial-chroot}# dpkg -i kernel-image-2.4.32_cobalt.1.0_i386.deb
{serial-chroot}# cd /boot
{serial-chroot}# ln -sf System.map-2.4.32 System.map

3.4.7. Configuration du Cobalt

{serial-chroot}# vim /etc/network/interface
{serial-chroot}# vim /etc/hosts
{serial-chroot}# vim /etc/inittab
{serial-chroot}# vim /etc/default/rcS
{serial-chroot}# exit

3.4.8. Reboot

{serial}# reboot

Et voilà, vous pouvez suivre le boot de votre Cobalt via le cable console et minicom.

Ce contenu a été publié dans Cobalt, linux, Mes docs. Vous pouvez le mettre en favoris avec ce permalien.