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