Pages

Affichage des articles dont le libellé est développement. Afficher tous les articles
Affichage des articles dont le libellé est développement. Afficher tous les articles

vendredi 14 septembre 2007

AUTORISER LA GENERATION DE FICHIER CORE EN CAS DE PLANTAGE

En cas de crash violent (message Segmentation fault) autoriser la production de fichiers core grâce à :

#Set user limit (accept core files and remove limit of stack size)
$ ulimit -c unlimited
$ ulimit -s unlimited

CREER UNE BIBLIOTHEQUE STATIQUE AVEC AR

Les noms des fichiers des logitèques doivent commencer par lib et se terminer par .a. Pour créer la logithèque, il faut compiler chacun de ses composants avec les option -c et -o, comme dans les exemples précédents, puis utiliser le programme ar pour construire la logithèque :
$ ar qvs libprog.a lire.o ecrire.o

Au moment de l'édition des liens du programme prog, il faudra spécifier à la commande gcc l'option -l pour lui indiquer le nom de la logithèque d'où gcc devra puiser les programmes objets référencés par le programme prog. Notez que la commande gcc extensionne automatiquement le nom suivant le paramètre -l en le faisant précéder de lib et le faisant suivre de .a (convertissant prog en libprog.a dans notre cas) :
$ gcc prog.o -lprog -o prog

COMPILER EN LIGNE DE COMMANDE AVEC GCC

Pour faire la compilation et l'édition des liens du programme prog.c et produire le fichier exécutable prog :
$ gcc -o prog prog.c
Pour compiler un fichier c en fichier objet :
$ gcc -c -o fichier1.o fichier1.c
$ gcc -c -o fichier2.o fichier2.c
Faire l'édition de lien de 2 fichiers objets (dont l'un contient un main) vers un executable 'prog':
$ gcc -o prog fichier1.o fichier2.o

COMPILER UN PROJET QT AVEC QMAKE

1) Se positionner dans le répertoire où se trouvent les sources et lancer
$ qmake -project
qui va générer un fichier nom_repertoire.pro

2) Editer le .pro pour le modifier et lancer
$ qmake
qui va générer le Makefile équivalent

3) Ne jamais éditer le Makefile, toujours repasser par le .pro

4) Si on veut regénérer le Makefile par la suite :
$ make distclean && qmake

5) Par défaut, Qt semble linker avec les librairies de debug, sin on ne le souhaite pas, ajouter une ligne au .pro :
CONFIG += release warn_on qt thread

VERIFIER UNE SIGNATURE MD5

Générer la signature :
$ md5sum mon_fichier > mon_fichier.md5

Vérifier :
$ md5sum -cv mon_fichier.md5

On peut contrôler un répertoire entier avec le script md5.sh suivant :

#!/bin/sh

# Calculate md5sum of each files or directories in argument
rm -f /tmp/archive.files
rm -f /tmp/archive.md5
find $@ -type f > /tmp/archive.files
for files in `cat /tmp/archive.files`
do
md5sum $files >> /tmp/archive.md5
done
echo "You can get the md5 file at : /tmp/archive.md5"
echo "To check your files, just do a : md5sum -cv /tmp/archive.md5"

CONNAÎTRE LES VARIABLES D'ENVIRONNEMENT D'UN PROCESSUS

Il faut utiliser le script ~/showenv.sh PID :

#!/bin/sh
# showenv - show environment of a process, by PID
# If second argument given, show just that one environment variable.

f=/proc/$1/environ

if [ ! -r "$f" ]; then
echo "`basename $0`: can't access process $1" 1>&2
exit 1
fi

case $# in
1) tr '\000' '\012' < $f | sort ;; 2) tr '\000' '\012' < $f | grep "^$2=" ;; *) echo "Usage: `basename $0` pid [envariable-name]" 1>&2; exit 1 ;;
esac

ANALYSER UN FICHIER CORE AVEC GDB

$ gdb fichier_programme fichier_core_généré
(gdb) bt

la commande bt (BackTrace) remontera la pile des appels de fonctions précédent le crash

SYNCHRONISATION DE TEMPS GUEST LINUX VMWARE/ HOTE WINDOWS

Il faut modifier le fichier /usr/src/kernel-source-2.6.8/include/asm-i386/param.h des sources du noyau 2.6.8 et le recompiler.
Trouver la définition de la fréquence du timer d'interruption :
#define HZ 1000
Passer sa valeur à 100 :
#define HZ 100

COMPILER UN NOYAU LINUX 2.6

Télécharger le code source du noyau
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.tar.bz2
ou sur debian :
# apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)

Décompresser le code source
$ tar xvjf linux-2.6.8.tar.bz2

Nettoyer les anciennes compilations (si besoin)
$ make mrproper

Configurer le noyau
(Cette opération va générer un fichier .config qui contiendra toutes les options paramétrées pour la compilation du nouveau noyau)
$ make menuconfig (ou xconfig ou config)
A noter que si l'on souhaite compiler le noyau avec les mêmes options que son noyau actuel, il suffit de remplacer l'opération précédente par :
$ cp /boot/config- .config
$ make oldconfig # repondre a toute question par entree

Compiler le noyau
$ make bzImage

Compiler les modules
$ make modules

Déplacer le noyau vers /boot
$ cp ./arch/i386/boot/bzImage /boot/vmlinuz-2.6.8-cmp

Déplacer la table de symboles vers /boot
$ cp System.map /boot/System.map-2.6.8-cmp

Installer les modules
$ make modules_install

Créer un fichier "RAM disk" si on n'a pas de disque dur IDE
$ cd /lib/modules/2.6.8
$ mkinitrd -o /boot/initrd-2.6.8-cmp 2.6.8

Configurer GRUB, le chargeur de boot avec le nouveau noyau :

title Debian GNU/Linux, new recompiled kernel
root (hd0,0)
kernel /boot/vmlinuz-2.6.8-cmp root=/dev/hda1 ro
initrd /boot/initrd-2.6.8-cmp
savedefault
boot

UTILISER SUBVERSION (SVN)

L'argument d'une révision peut être :
NUMÉRO numéro de la révision
'{' DATE '}' révision disponible à cette date au format {aaaa-mm-jjThh:mm:ss}
'HEAD( dernière révision du dépôt
'BASE' rév. de base de la copie de travail
'COMMITTED' dernière propagation à ou avant BASE
'PREV' révision juste avant COMMITTED


Ajouter un répertoire et son arborescence
-----------------------------------------
svn add mon_rep
svn commit mon_rep -m "Ceci est la description de ce répertoire"

Récupérer une copie de travail SVN
----------------------------------
Se placer à l'endroit de la partition où on souhaite récupérer l'arborescence :
cd ~/svn/dev
récuperer l'arborescence Tracking :
svn co http://rd-cvs/svn/gc/CURRENT/dev/Tracking

Connaître les informations sur une arborescence locale
------------------------------------------------------
svn info

Connaître les révisions et leur auteur sur un fichier donné
-----------------------------------------------------------
svn blame monFichier.cpp > /tmp/monFichier.cpp.svn && kate /tmp/monFichier.cpp.svn

Connaître le status d'un fichier
--------------------------------
svn status mon_fichier

Revenir en arrière les fichiers locaux non commités
---------------------------------------------------
svn revert mon_fichier

Déverrouiller un fichier verrouillé au niveau .svn
--------------------------------------------------
svn cleanup mon_fichier

Trouver les 5 derniers changements effectués sur le repository
-------------------------------------------------------------
svn log -v --limit=5

Comparer un fichier de la copie de travail par rapport au dépot
---------------------------------------------------------------
svn diff mon_fichier
l'option diff-cmd peut être définie dans ~/.subversion/config pour utiliser un outil de diff externe (comme kdiff3)

Déterminer les fichiers modifiés d'une arborescence entre 2 révisions
---------------------------------------------------------------------
svn di -r 74247:74332 --summarize

Revenir à une version précédente des fichiers
---------------------------------------------
svn sw http://rd-cvs/svn/gc/CURRENT/dev/K2/K2 -r 72724

AVOIR DES INFORMATIONS SUR UN BINAIRE

LISTER LES DEPENDANCES DE BIBLIOTHEQUES D'UN BINAIRE

Définir le chemin vers les librairies partagées (shared libraries) chargées dynamiquement s'il y en a
$ export LD_LIBRARY_PATH=./lib/
$ ldd ./bin/gcis

========================================
LISTER LES FONCTIONS ET SYMBOLES D'UNE BIBLIOTHEQUE

$ nm ./libgcis.so

PATCHER UN FICHIER SOURCE

* Créer un patch -- (pour representer l'addition d'un nouveau fichier,
faire un diff avec /dev/null.)
$diff -Naur test.old test.cpp > test.patch

* Appliquer un patch
$patch test.cpp test.patch

* Annuler un patch
$patch -R test.cpp test.patch