Archives 2011

Compilez votre propre noyau Linux

Kernel LogoCompiler votre propre noyau Linux est la première étape dans l’optimisation des performance de votre système. En le créant avec exactement ce dont vous avez besoin, vous diminuer votre temps de démarrage et votre utilisation mémoire. Ce sera également un bon moyen de prendre en charge des périphériques que le noyau de votre distribution ne gère pas encore. Néanmoins, il vous faudra une connaissance approfondie des capacités de votre ordinateur et des périphériques qu’il contiens. Comme exemple, je prendrais la famille de carte mère Intel DH67 avec un système Debian Squeeze de base correctement installé. Cette famille de carte utilise le nouveau chipset Sandy Bridge pour lequel la partie Ethernet n’est pris en charge que depuis la version 2.6.38 du noyau et la partie graphique la version 3.0.0. Pour pouvoir installer cette Debian Squeeze je fus donc forcé d’ajouter une carte réseau provisoire sur le seul port PCI de la carte (une carte de la famille RTL8139). Veuillez remarquer que certaine version de carte mère de cette famille ont un pont PCI-Express vers PCI non supportés (comme sur la DH67GD-B3, alors qu’il fonctionne sur une DH67BL-B3), vous pourriez donc avoir besoins d’une carte PCI-Express si vous êtes dans ce cas. Une autre possibilité pour installer le système de base et le nécessaire pour compiler votre propre noyau est de mettre votre disque dur dans un autre ordinateur avec des périphérique plus ancien et bien pris en charge. Notez que si vous procédez avec ce tutoriel sans modification vous devrez être super-utilisateur (root) en quasi-permanence. Par conséquent je recommande de vous logger en root maintenant soit avec « su » soit avec « sudo /bin/bash ». Tout ceci est complètement fonctionnel sur les distributions basés sur Debian (incluant Ubuntu).

Les seuls paquets que vous devrez installer sur un système Debian pour compiler un nouveau noyau sont build-essential et libncurses5-dev :

apt-get install build-essential libncurses5-dev

build-essential est un méta-paquet qui installera gcc, g++ (inutile pour le noyau), libc6-dev et make. libncurses5-dev vous permettra d’utiliser l’interface ncurses pour configurer vos options de compilation (optionel mais chaudement recommandé). Vous remarquerez que contrairement à la plupart des paquets source sous les systèmes Linux, autoconf, automake et libtool ne sont pas nécessaire pour le noyau. Si vous n’utilisez pas une Debian ils vous faudra l’outil GNU Make, le compilateur C GNU et les en-têtes de la GNU libc6 et de la bibliothèque NCurses. LA compilation peut fonctionner avec des outils non GNU mais ce sera plus risqué et requièrera une procédure différente de celle donné ici. Néanmoins, les outils BSD sont connu pour bien fonctionner. A présent il faut télécharger le code source du noyaux Linux. Le mieux est de télécharger la dernière version, à moins que vous ne soyez un paranoïaque de la stabilité et / ou de la sécurité. Si c’est votre cas, vous pourrez choisir un noyau à quatre nombres. Je m’explique : les nouvelles versions sont numérotés x.y.z alors que les révisions de sécurité ont un nombre supplémentaire x.y.z.r. Remarquez qu’il n’y a pas de gros changement dans les séries 3.0.0 du noyau. Le changement de version majeur a seulement été adopté pour fêter le 20ème anniversaire de Linux. C’est donc pour les packageurs une série 2.6. Vous trouverez les archives du code source du noyau ici : http://www.kernel.org ou sur des miroir (la liste des miroir est disponible ici : http://mirrors.kernel.org/). Pour la carte mère de mon exemple je recommande la version 3.0.4 du noyau. Les commandes seront donc :

# assurez vous d'être super-utilisateur avant de procéder
cd /usr/src
wget "ftp://ftp.free.fr/pub/linux/kernel/v3.0/linux-3.0.4.tar.bz2"
tar -xvf linux-3.0.4.tar.bz2
ln -sv linux-3.0.4 linux

Maintenant expliquons ceci. Nous allons dans le répertoire /usr/src ou de nombreux module externe du noyau s’attendent à trouver le code source (par ex. les pilotes propriétaire NVidia). Nous téléchargeons ensuite l’archive du code source du noyau et l’extrayons. La dernière ligne est un lien de compatibilité vers la version du noyau que nous utiliserons (ceci suppose que ce sera notre version par défaut du noyau) pour permettre la compilation de modules externes (certains paquet peuvent également avoir besoin d’accéder au code source du noyau pour se compiler). Si vous n’envisagez pas de compiler autre chose vous pouvez placer en toute sécurité les sources de votre noyau dans un répertoire personnel et ne pas être en super-utilisateur (sautez les deux premières lignes).&

Nous allons maintenant aborder le moment délicat… vous allez devoir configurer votre noyau en fonction de ce que vous avez besoin. Il existe des moyens pour obtenir des informations sur votre système : des commandes comme lspci et lsmod vous donnerons respectivement les noms des périphériques de la cartes mère et lsmod la liste des modules que le noyau actuel utilise (mais vous pourriez avoir besoin de plus). Le plus utile est lsmod mais il ne vous aidera pas si votre noyau actuel ne prend pas en charge une partie du matériel ou si une partie de ce matériel n’est pas géré par des modules. Pour cette seconde raison, je recommande de commencer ainsi :

cd /usr/src/linux
make mrproper
cp /boot/config- ./.config
lsmod > hard-infos.txt
echo > "--------------------------------------------------------------------" >> hard-infos.txt
lspci >> hard-infos.txt
#vous devriez imprimer le fichier hard-infos.txt maintenant ou l'afficher sur un autre écran à l'aide de ssh ou d'une nouvelle console (alt+f1 à alt+f6 pour changer de console)
make menuconfig

La ligne « make mrproper » nettoiera en profondeur l’arborescence du code source et toute configuration prédéfinie. Si vous voulez conserver une ancienne configuration pour recompiler le noyau, remplacez seulement mrproper par clean. La ligne cp nous permet de récupérer la configuration réelle du noyau en cour d’utilisation. Ceci est une bonne idée pour permettre de récupérer des options de configurations spécifique à votre distribution. Toutes les lignes se terminant avec hard-infos.txt servent à créer un fichier contenant toutes les informations utiles dont vous pourriez avoir besoin sur votre matériel. Dernier point mais non des moindres la ligne make menuconfig vous montrera le menu de configuration du noyau après un court moment de compilation.

À présent pas de secret, prenez votre temps et visitez tout les menus. Vous aurez besoin d’environ deux heures de torture cérébrale (et d’un niveau correct d’anglais) pour configurer ça correctement et en profondeur. Si vous ne comprenez pas une option de configuration essayez le bouton « Help » ou faite une recherche avec votre moteur de recherche préféré. Si vous ne comprenez toujours pas, laissez la valeur présélectionné. Voici quelques conseils :

  • Dans « Processor type and feature » choisissez le processeur le plus proche de celui que vous avez. En fonction de votre architecture 64 bits ou 32 bits (ou une architecture non Intel) la liste changera en fonction de ce qu’il est possible pour vous (mais pas forcement fonctionnel). En cas de doute, choisissez l’option commençant par « Generic ».
  • Pour de meilleurs performances c’est une bonne chose de basculer tout les modules des périphérique dont vous avez besoin dans leur version intégré. Ceci dit vous perdrez en flexibilité de telle sorte que le noyau que vous obtiendrez sera spécifique à votre carte mère et aux périphériques qui lui sont associés . Si vous changez de matériel, il vous faudra un noyau générique (par ex. celui de votre distribution). [ ] signifie non compilé (désactivé), [M] compilé sous forme de module et [*] compilé comme intégré dans le noyau central (généralement appelé vmlinuz- dans le répertoire /boot. Quelque fois vous aurez <>, ou < *> au lieu de [ ], [M] ou [*] : cela signifie que cette option permettra l’accès à d’autres options soit dans un autre menu soit dans un sous-menu de cette option. Attention, n’essayez jamais de tout mettre en intégré, le noyau serait trop gros et serait incapable de démarrer. Quelque fois vous n’arriverez pas à faire passer des modules en intégré. Ceci s’explique par des problème de dépendances : vous ne pouvez pas intégrer des modules qui dépendent d’un autre module. Il vous faudra d’abord faire passer le module parent en intégré. C’est pourquoi je recommande deux passe pour faire cette configuration.
  • Pour savoir quel périphérique vous devrez activer dans le noyau le fichier hard-info.txt vous fournira une bonne aide. La partie lsmod vous donnera le nom des modules. Dans la configuration le bouton « Help » vous donnera des information sur l’option. Vous trouverez à la fin de la description une ligne commençant par ceci : « Symbol: ». Ce qui suit est soit le nom du module soit une partie du nom (il peu y avoir un préfixe commun dans certains sous-menus).
  • Je pense que c’est une bonne idée de laisser la partie USB inchangé. De cette façon tout les périphérique USB que vous pourriez brancher seront reconnu correctement et le module correspondant chargé à la volée.
  • Même si vous n’avez pas de périphériques SCSI, n’essayez pas de désactiver le sous-système SCSI car toutes les technologies de disque dur (ou lecteur CD-ROM) utilisent une émulation SCSI depuis les séries 2.6 du noyau. Autrement vous ne pourriez pas démarrer.
  • La partie « network feature » est de loin la plus complexe. Il est sure de faire passer les modules dans leurs versions intégrés mais je ne recommande pas de faire le moindre changement a moins que vous sachiez exactement ce que vous faites.
  • Si vous projetez de compiler un noyaux pour un serveur dans une zone critique en terme de sécurité ou de stabilité, vous devriez désactiver toutes fonctionnalités expérimentale. Néanmoins,certains périphériques récent pourrait être inutilisable.
  • Si vous avez la chance d’avoir une carte mère de la famille Intel DH67 vous pouvez directement télécharger mon fichier .config (75 KB) et sauter la configuration… Si vous êtes vraiment feignant vous pouvez même télécharger un version précompilé (30.2 MB). Décompressez seulement le fichier depuis votre répertoire racine et sautez le prochain paragraphe. Attention : ces deux fichiers sont pour des cartes mères de la série Intel DH67 SEULEMENT et sans matériel additionnel à l’exception d’éventuels périphériques USB. Cela ne fonctionnera pas sur tout autre carte mère.

Quand la configuration est effectué, vous pouvez lancer la compilation. Tapez simplement la commande « make » pour commencer. Ceci prendra un certain temps donc vous pourrez prendre une pause bien mérité. Si la compilation échoue (dans quelques rare cas) cela signifie que quelque chose ne va pas avec votre configuration. Une fois la compilation effectué sans erreur, il vous faudra installer le fraîchement compilé noyau correctement de la manière suivante (je suppose que vous êtes super-utilisateur et dans le répertoire source de votre noyau) :

make modules_install
cp -fv arch/x86_64/boot/bzImage /boot/vmlinuz-3.0.4
cp -fv .config /boot/config-3.0.4
cp -fv System.map /boot/System.map-3.0.4
mkinitramfs -o /boot/initrd.img-3.0.4 3.0.4

La première ligne installera les modules dans une zone prédéfinie et correcte de la hiérarchie de fichier (ie. /lib/modules/). La seconde ligne installera le noyau lui-même mais peut changer si vous n’avez pas une architecture Intel ou AMD 64 bits. Dans ce cas, vous devrez remplacer x86_64 avec le bon répertoire correspondant à votre architecture. Les lignes suivantes copies les fichiers nécessaire au chargeur de démarrage et au noyau pour démarrer correctement. Notez que si vous avez fait une configuration correcte sans modules (excepté l’USB) la commande mkinitramfs ne sera pas nécessaire (sauf si vous avez un clavier USB). mkinitramfs crée une l’image d’un disque RAM monté par le noyau lui permettant de trouver les modules nécessaire au démarrage avant que le système de fichier racine ne soit monté.

Maintenant il ne reste plus qu’a rendre le nouveau noyau bootable. Malheureusement, la procédure et/ou les fichiers de configuration peuvent être très différents en fonction de votre distribution. Si votre distribution est basé sur Debian c’est toutefois très simple. Lancez juste :

update-grub2

Cette commande générera un nouveau jeu de fichiers de configuration pour Grub et réinstallera le chargeur de démarrage. Le noyau par défaut sera le plus récent (par date de modification) du répertoire /boot. Des entrée de menu seront en principe généré pour tout autre système d’exploitation installé. Même si votre noyau est complètement fonctionnel, je recommande de conserver un noyau générique provenant de votre distribution en cas de problème ou de modification de votre matériel.

Si malgré l’avertissement précédant vous avez choisi de désinstaller le noyau de votre distribution, ou si vous avez besoin d’en-tête du noyau à jour vous devriez installer les en-tête de vôtre noyau Linux de manière à pouvoir compiler d’autre choses (la plupart des paquets source en auront besoin). Soyez certain d’avoir désinstallé toutes versions précédente des en-têtes du noyau avant de continuer avec les instructions qui vont suivre. Sur Debian:

apt-get remove linux-headers-2.6

Soyez attentif au fait que la fin du nom du paquet peut changer (2.6) en fonction de la version de Debian que vous utilisez : celle-ci est pour la Squeeze seulement. Veuillez le modifier en conséquences. Pour installer les en-têtes du noyau correctement vous devez saisir les lignes suivante dans une console :

make headers_check
make INSTALL_HDR_PATH=dest headers_install
find dest/include \( -name .install -o -name ..install.cmd \) -delete
#vous devez être super-utilisateur pour la ligne suivante
cp -rv dest/include/* /usr/include

La première ligne ferra un recensement des fichiers à installer et préparera un script pour la future installation. La seconde ligne installera les fichiers nécessaire dans le sous-répertoire « dest ». La ligne « find » effacera certains fichiers inutiles et la ligne « cp » les copiera à l’endroit attendu par les paquet sources habituel.

RMLL 2011 à Strasbourg

Rencontres Mondiales du Logiciel Libre 9 au 14 juillet 2011 Strasbourg Comme l’année dernière je suis allé au RMLL et je suis revenu avec quelques histoires à partager avec la communauté. Je ne vais pas répéter ce que j’ai déjà dit l’année dernière à propos de KDE car ceci est toujours applicable. Néanmoins, la situation avec les environnements de bureau est maintenant très différente de celle de l’année dernière. La disponibilité de Gnome 3 et du nouvel environnement de bureau par défaut d’Ubuntu, Unity, change la vision qu’on les gens de KDE. Ceci entraîne une redistribution des cartes pour les utilisateurs. Un fait indéniable est le très mauvais accueil de Unity de la part des utilisateurs traditionnels de logiciels libres. Cela se traduit par une perte d’intérêt criante d’Ubuntu pour beaucoup d’entre eux et donc la recherche de nouvelles solutions. D’autre part, la réception de Gnome 3 est inégale. Si certains utilisateurs traditionnels de Gnome apprécient toujours le nouveau look et la nouvelle approche, certains autres ne l’aiment pas vraiment. Bien d’autres encore pensent que le nouveau bureau n’est pas fini, comparant parfois avec l’état inachevé qui était attribué à KDE 4.0 quand il est sorti il y a maintenant quelques années. Mais il y a aussi quelques utilisateurs de KDE (il faut avouer qu’ils sont peu nombreux) séduient par le nouveau (et quelque peu inhabituel) look and feel de Gnome 3.

À propos de KDE directement, les utilisateurs sont généralement plus satisfaits par l’environnement et la qualité de la compilation de logiciels qu’ils ne l’étaient l’année dernière, et nous avons eu assez peu de remarques négatives (sauf évidemment celles peux constructives de ceux qui ne l’utilise pas…) . Les plus négatives qui viennent encore et fréquemment, concernent l’utilisation de nouvelles fonctionnalités. Permettez-moi de développer ce point …

Je vais prendre un exemple : les « Activités ». Cette fonctionnalité est très puissante, mais une question récurrente était : « C’est quoi ? Pourquoi devrais-je l’utiliser ? ». Une fois que je fait la démonstration, ils ont rapidement compris combien cette nouvelle fonctionnalité est pratique. Mais ceci montre un vrai problème de communication : les utilisateurs ne savent pas comment utiliser une nouvelle fonction ou pire ne comprenne pas de quoi il s’agit (quand ils savent que ça existe) ! Lorsque je demandais comment résoudre ce problème, la réponse était claire : chaque fois qu’une mise à jour de l’environnement KDE est faite (en particulier KDE-base), nous devrions afficher une fenêtre « Quoi de neuf ? » avec (et ceci semblait important) des liens vers la vidéo de démonstration. Ceci pourrait être généralisé pour chaque logiciel important.

Une préoccupation plus technique est la possibilité de nettoyer les fichiers de configuration de KDE des entrées ou clés obsolètes, évitant ainsi la nécessité d’effacer le répertoire .kde de l’utilisateur de temps en temps (environ tous les deux ans ou un an avec des systèmes mis à jour fréquemment).

Le dernier (mais non des moindres) point concerne la communication de KDE en France. En parlant avec certains contributeurs français de KDE (ou des contributeurs d’autre projets qui aime KDE), le problème de mauvaise représentation de KDE en France est très important. Nous avons besoin de plus d’événements KDE donc plus de personne pour travailler sur la communication (et pas besoin de compétences techniques donc tout fan de KDE peut le faire). Le nouvel évènement Akademy-fr calqué sur le concept espagnol Akademy-es est un bon début mais nous avons besoin de perpétuer l’événement et ce n’est pas encore gagné !

Get Hot New Stuff pour Yakuake

Internet IconEn résultat à la KDE Release Party de Toulouse, j’ai décidé de m’engager dans le code source de KDE. Vu que je ne suis pas familié avec, je devait commencer avec quelque chose de simple. Un bon début était d’intégré une fonctionnalité « Get Hot New Stuff » (c’est à dire obtenir des nouveautés) à la page de configuration des thèmes de Yakuake. Yakuake est un terminal déroulant inspiré par la console de Quake 3 et « Get hot new stuff » (le lien vous mènera à la documentation développeur en anglais) est un moyen simple d’installer graphiquement des éléments supplémentaire aux applications KDE.

Le patch est maintenant prèt et ressemble à ça :

diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index 9b34cf3..f46592e 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -33,7 +33,7 @@ kde4_add_app_icon(yakuake_SRCS "icons/hi*-app-yakuake.png")

 kde4_add_executable(yakuake ${yakuake_SRCS})

-target_link_libraries(yakuake ${KDE4_KPARTS_LIBS})
+target_link_libraries(yakuake ${KDE4_KPARTS_LIBS} ${KDE4_KNEWSTUFF3_LIBS})

 if(Q_WS_X11)
   target_link_libraries(yakuake ${X11_X11_LIB})
@@ -42,3 +42,5 @@ endif(Q_WS_X11)
 install(TARGETS yakuake ${INSTALL_TARGETS_DEFAULT_ARGS})

 install(PROGRAMS yakuake.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
+
+install(FILES config/yakuake.knsrc DESTINATION ${CONFIG_INSTALL_DIR} )
diff --git a/app/config/appearancesettings.cpp b/app/config/appearancesettings.cpp
index 7ae00e9..a4b645c 100644
--- a/app/config/appearancesettings.cpp
+++ b/app/config/appearancesettings.cpp
@@ -37,6 +37,8 @@

 #include 

+#include 
+
 AppearanceSettings::AppearanceSettings(QWidget* parent) : QWidget(parent)
 {
     setupUi(this);
@@ -55,7 +57,10 @@ AppearanceSettings::AppearanceSettings(QWidget* parent) : QWidget(parent)
     connect(skinList->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex&)),
         this, SLOT(updateRemoveSkinButton()));
     connect(installButton, SIGNAL(clicked()), this, SLOT(installSkin()));
+    connect(getnewButton, SIGNAL(clicked()), this, SLOT(getnewSkin()));
     connect(removeButton, SIGNAL(clicked()), this, SLOT(removeSelectedSkin()));
+
+    getnewButton->setIcon(KIcon("get-hot-new-stuff"));

     m_selectedSkinId = Settings::skin();

@@ -223,6 +228,17 @@ void AppearanceSettings::installSkin()
         failInstall(i18nc("@info", "The installer was given a directory, not a file."));
 }

+void AppearanceSettings::getnewSkin()
+{
+  KNS3::DownloadDialog dialog("yakuake.knsrc", this);
+  dialog.exec();
+  KNS3::Entry::List entries = dialog.changedEntries();
+    if (entries.size() > 0) {
+      populateSkinList();
+    }
+
+}
+
 void AppearanceSettings::listSkinArchive(KIO::Job* /* job */, const KIO::UDSEntryList& list)
 {
     if (list.count() == 0) return;
diff --git a/app/config/appearancesettings.h b/app/config/appearancesettings.h
index 1363f70..02397ec 100644
--- a/app/config/appearancesettings.h
+++ b/app/config/appearancesettings.h
@@ -70,6 +70,7 @@ class AppearanceSettings : public QWidget, private Ui::AppearanceSettings
         void updateSkinSetting();

         void installSkin();
+       void getnewSkin();
         void listSkinArchive(KIO::Job* job, const KIO::UDSEntryList& list);
         void validateSkinArchive(KJob* job);
         void installSkinArchive(KJob* deleteJob = 0);
diff --git a/app/config/appearancesettings.ui b/app/config/appearancesettings.ui
index a951568..fa7754a 100644
--- a/app/config/appearancesettings.ui
+++ b/app/config/appearancesettings.ui
@@ -6,8 +6,8 @@
    
     0
     0
-    307
-    355
+    467
+    435
    
   
   
@@ -154,17 +154,7 @@
       Skin
      
      
-      
-       
-        
-         Qt::NoContextMenu
-        
-        
-         Qt::ScrollBarAlwaysOff
-        
-       
-      
-      
+      
        
         
          true
@@ -174,7 +164,7 @@
         
        
       
-      
+      
        
         
          false
@@ -184,13 +174,30 @@
         
        
       
-      
+      
        
         
          false
         
        
       
+      
+       
+        
+         Get New Skin...
+        
+       
+      
+      
+       
+        
+         Qt::NoContextMenu
+        
+        
+         Qt::ScrollBarAlwaysOff
+        
+       
+      
      
     
    
@@ -198,15 +205,15 @@
  
  
   
-   KColorButton
-   QPushButton
-   
kcolorbutton.h
-
- KLineEdit QLineEdit
klineedit.h
+ + KColorButton + QPushButton +
kcolorbutton.h
+
kcfg_TerminalHighlightOnManualActivation @@ -214,6 +221,7 @@ kcfg_Translucency kcfg_BackgroundColorOpacity skinList + getnewButton installButton removeButton kcfg_Skin

Un fichier appelé yakuake.knsrc doit être ajouté au répertoire app/config du répertoire source de Yakuake. Voici son contenu :

[KNewStuff3]
ProvidersUrl=http://download.kde.org/ocs/providers.xml
Uncompress=always
TargetDir=yakuake/skins
Categories=Yakuake Skin

J’espère que cela sera bientôt ajouté au code source officiel de Yakuake. Pour l’instant vous pouvez essayer d’appliquer le patch et de compiller et installer Yakuake si vous voulez « Get Hot New Stuff » avant que la prochaine version de Yakuake ne sorte. Pour le faire, essayez ceci :

git clone git://anongit.kde.org/yakuake
cd yakuake
wget http://www.geoffray-levasseur.org/files/yakuake-gethotnewstuff.patch
wget http://www.geoffray-levasseur.org/files/yakuake.knsrc
mv -fv yakuake.knsrc app/config/
patch -Np1 -i yakuake-gethotnewstuff.patch
mkdir build && cd build
cmake ./ ../ -DCMAKE_INSTALL_PREFIX=$KDEDIR
make
su -c "make install"

Assurez-vous d’abord que le paquet Yakuake de votre distribution est désinstallé et que la variable d’environnement KDEDIR pointe correctement vers votre préfixe d’installation de KDE (la plupart du temps /usr ou /opt/kde4). Vous devrez taper votre mot de passe root après avoir validé la dernière ligne. Amusez-vous !