Paquets debug

De Wiki de la communauté Mandriva.


Sommaire

A qui s'adresse cette page ?

Cette page s'adresse avant tout aux utilisateurs de cooker et aux personnes désirant rapporter un bug.

Qu'est ce qu'un paquet debug ?

Installer l'ensemble des paquets debugs nécessaires

Il est assez fastidieux de devoir installer les paquets debug à la main suite à la réponse de gdb "You should install" suivis de 50 paquets. Installer les paquets debug pertinents est donc un gain de temps pour les utilisateurs de cooker. C'est l'objet de ce script.

Dépots debug

N'oubliez pas d'activer les dépôts debug.

Par exemple, ces deux lignes executées en root permettront de les ajouter.

urpmi.addmedia main_debug ftp://ftp.proxad.net/pub/Distributions_Linux/MandrivaLinux/devel/cooker/i586/media/debug_main/release/
urpmi.addmedia contrib_debug ftp://ftp.proxad.net/pub/Distributions_Linux/MandrivaLinux/devel/cooker/i586/media/debug_contrib/release/


ou passer par le CCM en éditant les média.

Déboguer les applications KDE

Si vous utilisez KDE4 et qu'une application a planté, l'outil de rapport de bogues génère les informations du crash qui seront utiles aux développeurs pour qu'ils corrigent le problème. Pour cela, il est nécessaire d'installer les paquets debug propres à KDE. Il est donc nécessaire d'installer :

  • les paquets systèmes : qt4-debug, kdelibs4-debug, kdepimlibs4-debug, kdebase4-runtime-debug, kdebase4-workspace-debug, kdemultimedia4-debug, kdenetwork4-debug, kdeplasma-addons-debug
  • ainsi que le paquet debug correspondant à l'application qui a planté (par exemple k3b-debug).

Cette méthode présente l'avantage de n'installer que les paquets debug nécessaires au débogage d'une application KDE. Cela peut être intéressant si vous disposez d'un espace disque restreint et que vous n'avez pas la place d'installer tous les paquets debug.

Pour les applications kdesdk4

Il est également nécessaire d'installer kdesdk4-debug si vous utilisez une application faisant partie de kdesdk telles que cervisia, kate, kompare, lokalize par exemple.

Idée du script

Comment ce script fonctionne-t-il dans les grandes lignes ?

  • On cherche les paquets debugs disponibes sur les miroirs.
  • On enlève ceux qui sont déjà installés sur la machine.
  • On compare cette liste à la liste des paquets déjà installés sur la machine pour ne prendre que les paquets debug pertinent.
  • On génère un fichier avec l'ensemble des résultats avec une présentation clair.
  • On ajoute, si besoin, gdb ainsi que quelques autres paquets connu pour passer au travers du script.
  • Il ne reste plus qu'à exécuter le fichier généré.

Une liste de paquets délibérément écarté par le script est générée aussi, au cas où...

Ce script n'a pas pour prétention d'être 100% auto-suffisant, mais il installera sans problème 95% des paquets nécessaires.

En outre, il faut prévoir un espace disque assez conséquent. En effet, vous pouvez estimer que votre racine va quasiment doubler (chaque programme a sa copie debug).

Le script

#!/bin/sh
###########################################################
# This script is developped for Mandriva
# It allows you to install all needed debug packages
# for your system
###########################################################
#     This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
############################################################
#
# Written by Spip <unpeudescience at gmail dot com>
# Version 0.1
#
############################################################


installed_pkg='/tmp/installed_pkg'
toinstall='./toinstall'
list_debug='/tmp/list_debug'
list_debug_clean='/tmp/list_debug_clean'
installed_debug='/tmp/installed_debug'
ignored_debug_pkg='./ignored_debug_packages'



function add_pkg()
{
     for pkg in $@   
     do
	  check=`rpm -qa $pkg`
	  if [[ $check = '' ]]
	  then
	       echo "urpmi --force $pkg" >> $toinstall  
	  fi
     done
}


#I make lists
echo "I make lists of packages..."
rpm -qa --queryformat '%{name}\n'| grep -v 'debug' > $installed_pkg
rpm -qa --queryformat '%{name}\n'| grep 'debug' > $installed_debug
urpmq -y "debug" | grep "debug$" > $list_debug



#now we create toinstall list.
#initialisation
>$toinstall
>$list_debug_clean

# are there debug packages on the system?
echo "I check if some debug packages are already installed..."
while read line
do
  	#debug package does exist?
        check=`grep $line $installed_debug`

        if [[ $check == '' ]]
        then
	       echo $line >>$list_debug_clean
	fi
done < $list_debug


#remove undesired debug pkg.
echo "I check needed debug packages"
bool=0
while read line
do
	name=`echo $line | sed "s/-debug//" `
	check=`grep "^$name$" $installed_pkg`
	if [[ $check != '' ]]
        then
        	if [[ $bool == '0' ]]
		then
			 echo -n "urpmi --force $line" > $toinstall
			 bool=1
		else
			 echo ' \' >> $toinstall
			 echo -n "$line" >> $toinstall
	       fi
     fi
done < $list_debug_clean
echo -e "\n" >> $toinstall


add_pkg gdb qt4-debug kdepim4-debug kdeplasma-addons-debug kdepimlibs4-debug kdebase4-debug kdemultimedia4-debug kdenetwork4-debug kdelibs4-debug 


#ignored packages
urpmq -y "debug" | grep -v "debug$" > $ignored_debug_pkg
echo "These packages:"
cat $ignored_debug_pkg
echo 'were ignored by the script but they contain a "debug" string. Check if you need some of them.'
echo -e "this list is saved in $ignored_debug_pkg \n\n"


nb_pkg=`wc -l $toinstall | awk '{print $1}'`
echo "$nb_pkg -debug packages were found."
echo "Please, run as root: ./toinstall in order to install all of them."

chmod +x $toinstall

#Mr Proper
rm -rf $installed_pkg $list_debug $list_debug_clean $installed_debug

exit 0


Utilisation

Copier coller le script ci-dessus dans un fichier texte de nom install_debug.sh par exemple

Rendre le script exécutable. Bouton droit > propriété ou

Image:Konsole.png
[utilisateur@ordi ~]$ chmod +x install_debug.sh

Puis on lance le script en tant qu'utilisateur :

Image:Konsole.png
[utilisateur@ordi ~]$ ./install_debug.sh

Après une minute ou deux, le script se termine. On obtient un fichier toinstall qui doit déjà être exécutable.

Comme le message dans la console l'indique, on se loggue en root et on lance ce script d'installation :

Image:Konsole.png
[root@ordi ~]# ./toinstall

L'installation commence... Vous pouvez pendre un café :)

Remarques supplémentaires

Si vous rencontrez certains problèmes avec certains paquets debug de la liste, relancer le script pour générer une nouvelle liste, et supprimez les paquets posant problème. Si au cours de l'utilisation de votre cooker, vous êtes amené à installer de nouveau paquet, rien ne vous empêche de relancer ce script.

Utilisation de gdb

Voir gdb

Désinstallation des paquets debug

Méthode brutale

On désinstalle l'ensemble des paquets ayant la chaîne debug.

Image:Konsole.png
[root@ordi ~]# urpme -a debug

Attention. Des paquets comme php-xdebug seront désinstallés aussi alors que ce ne sont pas des paquets debug.

Méthode fine

Cette commande ne devrait désinstaller que les vrais paquets -debug

Image:Konsole.png
[root@ordi ~]# urpme `rpm -qa | grep .*-debug `


Toutefois, vous pouvez vérifier la liste au préalable avec la commande rpm -qa | grep .*-debug

en recherche d’emploi ?