Ubuntu est un système d'exploitation GNU/Linux basé sur Debian, il est donc paramètrable de la même manière que ce dernier, cependant à un usage plus personnel que professionel il a été préconfiguré afin de simplifier son installation et son utilisation. Il y a pourtant des personnes qui utilisent Ubuntu dans un cadre particulier et qui ont besoin de diagnostiquer le démarrage du système ou bien d'utiliser l'un des 6 terminaux virtuels (TTY1 à TTY6) sans avoir besoin de l'interface graphique (prenant des ressources supplémentaires). Cet article m'a été possible grâce au très enrichissant forum d'Ubuntu.





0x01. PREPARATION


La préparation à cette configuration, non prévue initialement (pour cause de conflit avec Compiz) concerne principalement la présence de quelques programmes. Les programmes suivant sont naturellement présent, mais pour une raison ou pour une autre, ce pourrait ne pas être le cas :


fichier           chemin                      somme de controle SHA1
-------           ------                      ----------------------
getopt            /sbin/getopt                097b77536b437b79f059c383352fdc634b1753f0
mknod             /bin/mknod                  d9f2e910e57cc0d7976bc1f48614cf319e8f9876
modprobe          /sbin/modprobe              7411feb489fe00bc009161dbed2807e6dd687746
update-initramfs  /usr/sbin/update-initramfs  

Le fichier "update-initramfs" étant dans un dossier utilisateur (/usr), peut avoir un checksum différent entre différent système





0x02. COMMANDES BASH


Pour les néophytes, comme pour les habitués, il est toujours bon de faire quelques rappeles. Les commandes bash utilisées sont donc celles prises ci-dessus. De plus il faut savoir ce que fait un programme avant d'avoir à le lancer.


mknod
 -----
La command "mknod" permet de créer des fichiers spéciaux de types blocage, caractères ou fifo.

Les fichiers de types "blocage" permettent un accès par bloc d'octets, c'est à dire que la lecture
ne se fait pas octet par octet, comme ça peut être le cas pour un fichier quelconque. C'est à dire
que pour ces fichiers, un buffer (idéaliement de la taille du fichier) est utilisé pour la lecture
et l'exploitation des données. On retrouve donc les fichiers concernant le disque et la mémoire vive
/dev/sda? /dev/ram?. En principe ces fichiers ne sont utilisé en écriture que par le noyau.

Les fichiers de type "caracteres" sont des noeuds entre des périphériques virtuels ou un pilote
représentant un périphérique accessible depuis le mode utilisateur, on retrouvera donc les
interfaces réseaux, audios, ...

Quant au type "fifo" il permet d'empiler les accès, comme par exemple la console
(konsole / gnome-terminal / xterm / ...) qui utilise un système de pile. Rien qu'à l'utilisation
de celle-ci ou bien même au démarrage de n'importe quel GNU/Linux on peut s'aperçevoir que la première
commande entrée est la première sortie (sous-entendue sur une sortie quelconque
(standard, erreur, imprimante, ...).


 modprobe
 --------
Cet outil permet de gérer des modules, en insertion ou en suppression.


 update-initramfs
 ----------------
Ce script permet de mettre à jour l'image du noyau, car certains systèmes GNU/Linux utilise une
"image" du noyau, ce script recompile le noyau avec les options précédemments fournies afin de
le mettre à jour en fonction des périphériques nouvellement installés. Dans le cadre du script,
il permettra le passage à une plus haute résolution que celles proposées par le BIOS. 



0x03. CONFIGURATION


Voici ce que fait le script :
- D'abord il créé un framebuffer qui permettra de garder en mémoire la résolution choisie (vga=xxx) dans /boot/grub/menu.lst
- Créé une sauvegarde des fichiers qui doivent être modifiés
- Permet au module "vesafb" (VESA Frame Buffer) de se charger, car c'est lui qui entre en conflit avec Compiz...
- Installe les modules VESAFB et FBCON au noyau, s'ils n'existent pas déjà
- Charge le module VESAFB et configure les dépendances de tout les modules
- Met à jour le noyau avec les paramètres précédents





0x04. INSTALLATION


 
#!/bin/bash
 
 
 
if [ $USER != "root" ]
then
	echo "Erreur: ce script doit etre lance depuis le superutilisateur"
	exit 1
fi
 
echo "[+] Creation des fichiers blocs du frame buffer"
mknod /dev/fb0 c 29 0 && mknod /dev/fb1 c 29 32 && \\
  mknod /dev/fb2 c 29 64 && mknod /dev/fb3 c 29 96 && \\
  mknod /dev/fb4 c 29 128 && mknod /dev/fb5 c 29 160 && \\
  mknod /dev/fb6 c 29 19
 
 
echo "[+] Sauvegarde de '/etc/initramfs-tools/modules'"
cp /etc/modprobe.d/blacklist-framebuffer /etc/modprobe.d/blacklist-framebuffer.copy
 
 
echo "[+] Changement des permissions pour le module 'vesafb'"
 
# Verifie si le motif n est pas deja commente
grep "## blacklist vesafb" /etc/modprobe.d/blacklist-framebuffer >/dev/null 2>/dev/null
if [ $? -eq 1 ]
then
  sed s/"blacklist vesafb"/"## blacklist vesafb"/g /etc/modprobe.d/blacklist-framebuffer > /etc/modprobe.d/.blacklist-framebuffer.tmp
  rm -f /etc/modprobe.d/blacklist-framebuffer
  mv /etc/modprobe.d/.blacklist-framebuffer.tmp /etc/modprobe.d/blacklist-framebuffer
fi
 
 
echo "[+] Sauvegarde de '/etc/initramfs-tools/modules'"
cp /etc/initramfs-tools/modules /etc/initramfs-tools/modules.copy
 
 
err1=0
err2=0
echo "[+] Ajout des modules 'vesafb' et 'fbcon'"
 
# Verifie si le module n est pas deja ajoute
grep "vesafb" /etc/initramfs-tools/modules >/dev/null 2>/dev/null
err1=$?
grep "fbcon" /etc/initramfs-tools/modules >/dev/null 2>/dev/null
err2=$?
 
# Ajoute le module s il n y est pas
[ $err1 -eq 1 ] && echo vesafb >> /etc/initramfs-tools/modules
[ $err2 -eq 1 ] && echo fbcon >> /etc/initramfs-tools/modules
 
 
echo "[+] Chargement du module 'vesafb'"
modprobe vesafb && depmod -a
 
 
echo "[+] Mise a jour du fichier d initialisation de boot"
echo -n "[-] "
update-initramfs -k all -u
 
 




0x05. VERIFICATION


 
#!/bin/bash
 
echo "[-] Module non blackliste 'vesafb'"
grep "vesafb" /etc/modprobe.d/blacklist-framebuffer
 
echo
echo "[-] Modules ajoutes au noyau"
grep "vesafb" /etc/initramfs-tools/modules
grep "fbcon" /etc/initramfs-tools/modules
 
echo
echo "[-] Module 'vesafb' charge"
lsmod | grep "vesafb"
 
echo
echo "[-] Verification des fichiers blocs 'fb0...fb6'"
ls /dev/fb?
 




0x06. CONCLUSION


Un grand merci au forum d'Ubuntu, cela m'a permis de centraliser les différents "indices" trouvés pour me permettre de transmettre ce que j'ai compris en écrivant ce script.




   =>   Écrit par : Nicolas, le 13 mai 2008


 
Mots clés :  
  linux 
  
  general 
    >   Articles connexes :

Cheat Sheet OpenSSL



Comment gagner du temps sur Internet



Geeks, nerds, hackers, pirates, ...



6211495