Fixer les règles : prendre le contrôle d’udev pour avoir votre disque externe là ou ont veux et au démarrage (si, si !)

Sur mon poste de travail j’utilise un disque externe, qui héberge les fichiers relatif à mes machines virtuelles kvm. Les machines elles-même, mais aussi les image iso.

Ce disque est soit branché au démarrage, ou pas. Sur ma debian, le daemon libvirt n’est pas lancé au boot pour cette raison.

J’ai donc décidé de rédiger une règle udev, qui effectue le montage de mon disque externe dans /media/dd_ext et qui démarre le daemon libvirt dans la foulée.

Première étape : Identifier le disque externe.
On va travailler sur l’UUID. Mon disque est actuellement connecté sous l’appellation /dev/sdd1.
Pour obtenir son uuid :

root@desktop# blkid /dev/sdd1
/dev/sdd1: UUID= »1e8aa98c-0839-4112-b1e9-832355a5c3fc » TYPE= »ext4″

Deuxième étape : écrire la règle udev
Les règles udev sont dans le répertoire /etc/udev/rules.d. Pour que notre règle soit prioritaire sur les règles générales, elle doit commencer par un nombre inférieur. La deuxième contrainte est que le nom de la règle finisse par rules. Entre les deux, c’est openbar.
Ma règle s’appelle : /etc/udev/rules.d/10-perso-hdd-ext.rules
Ainsi je suis sur de comprendre qu’elle n’est pas « officiel » et à quoi elle correspond.
Le contenu :
On commence par indiquer à udev dans quel cas il doit appliquer la règle.
Si l’évènement noyau ne fait pas allusion à l’expression régulière sd[a-z][0-9] alors file à la section hdd_end (nom arbitraire)
KERNEL!="sd[a-z][0-9]", GOTO="hdd_end"
Donc si on est bien en présence d’un sd[a-z][0-9], on récupère dans la variable IMPORT le contenu de l’exécution de la commande /sbin/blkid -o udev -p %N
Le chemin complet vers l’utilitaire est obligatoire. Ici, on va donc exécuter blkid en lui demandant d’envoyer les informations au format udev, pour le périphérique %N. %Nest une variable udev qui correspond au nom temporaire du périphérique, auquel on accède. Il s’agit du nom avant son affectation définitive. Avant qu’il ne deviennent sdd1 par exemple.
IMPORT{program}="/sbin/blkid -o udev -p %N"
Maintenant que udev à récupéré les informations importante de mon disque (comme l’uuid, mais aussi le type de filesystem) on va lui dire quoi faire :
Si le périphérique est de type filesystem, que son uuid est 1e8aa98c-0839-4112-b1e9-832355a5c3fc alors, crée un lien dans /dev avec comme nom dd_ext, et exécute le programme /etc/init.d/libvirt-bin start
En langue udev, ça donne :
ENV{ID_FS_USAGE}=="filesystem", ENV{ID_FS_UUID}=="1e8aa98c-0839-4112-b1e9-832355a5c3fc", SYMLINK+="dd_ext", RUN+="/etc/init.d/libvirt-bin start"
Voila c’est presque fini. Il nous reste à écrire la correspondance à notre GOTO, pour que dans les autres cas, udev aille directement à l’étiquette hdd_end et face ce qui la suit, c’est à dire ici : rien :
LABEL="hdd_end"
La règle complète est donc :

# cat /etc/udev/rules.d/10-perso-hdd-ext.rules
KERNEL!= »sd[a-z][0-9]« , GOTO= »hdd_end »
IMPORT{program}= »/sbin/blkid -o udev -p %N »
ENV{ID_FS_USAGE}== »filesystem », ENV{ID_FS_UUID}== »1e8aa98c-0839-4112-b1e9-832355a5c3fc », SYMLINK+= »dd_ext », RUN+= »/etc/init.d/libvirt-bin start »
LABEL= »hdd_end »

Notre règle est terminée. Il ne reste plus qu’a modifier notre fichier fstab pour que le système puisse mounter notre disque au bon endroit avec les bon paramètres. On ajoute donc la ligne suivante au fichier /etc/fstab :
/dev/dd_ext /media/dd_ext auto user,atime,auto,rw,nodev,exec,suid 0 0

Il suffit de relancer udev par un petit :

/etc/init.d/udev restart

et de rebrancher notre disque pour constater que tout fonctionne.

Print Friendly

A lire sur le même sujet, ou presque :

Posted in debian, planet-libre, shell, virtualisation | Tagged , , , , , , , , , , | Leave a comment

Git, bitbucket et le retour des vielles branches

Alors que vous avez bien travaillé avec votre dépôt git, vous voulez donner un nouvel élan à votre projet.
Ou simplement, repartir de zero ou presque, sans pour autant tout perdre.
La solution réside dans les branches.

Le but ici, va être de renommer notre branche principale en « archive », publier sur le dépôt la branche archive, créer une nouvelle branche principale et vider d’un certains nombre de fichiers notre branche principale. Publier le tout. On aura ainsi sur notre dépôt git, une branche archive contenant notre ancien projet, et une branche master, contenant quelques fichiers issues de l’ancienne branche principale, mais à destination de notre nouvelle version majeur.

Cette manipulation peut-être particulièrement intéressante lorsque l’on veux utiliser git pour gérer les scripts d’administration de serveurs. On fait une branche par machine, et à chaque fois on ne va garder dans notre branche master que les fichiers/scripts de base à la construction d’une machine.

Transformer la branche master en branche archive

git branch -m master archive

Créer une nouvelle branche master

git branch -m master

Supprimer des fichiers sur la branche master

git commit -m « Creation de la branche archive et ménage dans master »

On publie les modifications sur le dépôt bitbucket

git push git@bitbucket.org:kywyxy/projet.git

Voila c’est tout.
Si on a besoin de retravailler sur archive, il suffit :
Se placer dans la branche archive:

git checkout archive

Mettre à jour notre branche par rapport à la branche archive (marche aussi pour mettre à jour une branche locale toto par rapport à la branche distante archive)

git pull git@bitbucket.org:kywyxy/projet1.git archive

Quelques commandes en plus :
Créer une branche à distance :

git remoote add archive git@bitbucket.org:kywyxy/projet1.git
get fetch archive

Pour lier votre branche archive à la branche principale d’un dépôt distant :

git push –set-upstream origin master

Ainsi lors d’un push vers le dépôt distant, c’est la branche master qui sera mise à jour et non l’archive (dans notre exemple).

Print Friendly

A lire sur le même sujet, ou presque :

Posted in git, planet-libre | Tagged , , , | Leave a comment

VM – perte de l’interface réseau

Migrer une machine virtuelle, de type serveur surtout, que ce soit d’un système de virtualisation à un autre (de VirtualBox à KVM par exemple) ou d’une machine physique à une autre crée un dysfonctionnement au niveau de la reconnaissance de l’interface réseau.

La cause du malheur : udev. udev crée un périphérique avec, mais ne le renouvelle pas lorsque c’est nécessaire (changement de carte réseau réel ou virtuel).
Sous debian, pour que la nouvelle interface réseaux soit prise en compte, il faut supprimer le fichier :
/etc/udev/rules.d/70-persistent-net.rules et redémarrer la machine.
Au reboot, udev aura recréé un fichier de règle adapté à la nouvelle interface réseau.

Print Friendly

A lire sur le même sujet, ou presque :

Posted in debian, planet-libre, virtualisation | Tagged , , , , , , , , , | Leave a comment

A la découverte de la ligne de fond de vim

Ce soir, un petit article sur la statusline de vim.

Pour commencer, il faut déterminer quand la faire apparaître. Dans votre .vimrc mettre :

1
set laststatus=2

Les autres valeurs sont :
0 = JAMAIS
1 = si on a plus de 2 fenêtres, exemple lors d’un split
2 = toujours afficher

Ensuite, on définit le format de la ligne avec des paramètres, ou des fonctions que l’on a écrit.
Les paramètres disponibles sont :
%=Line : écrit Line à droite de l’écran
\ : ajoute un espace. Cet ajout est obligatoire pour mettre du texte entre 2 commandes.
Chaque élément de la ligne de statut est représentée par le caractère % suivi du code de la commande.
%% est utilisé pour écrire %
Parmi les commandes disponibles voici celles que j’utilise :
%F : chemin complet et nom du fichier (exemple /home/alexandre/test.sh)
%m : affiche [+] lorsque le buffer est modifié.
%r : affiche [RO] lorsque le statut du fichier chargé est readonly
%h : affiche [Aide] lorsque le buffer est ouvert sur un fichier aide.
%y : affiche le type de fichier en édition [VIM] ou [sh] par exemple
%n : Affiche le numéro du buffer actif.
%B : Affiche la correspondance hexadécimal du caractère situé au niveau du curseur (très utile lorsque l’on travail avec un mainframe)
%P : Affiche Haut, ou bas ou le pourcentage (avec le symbole) de la position du curseur par rapport au fichier.

Voici trois fonctions (la première n’est pas de moi) que l’on va appeler pour compléter notre ligne de fond :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function! HasPaste()
   if &paste
        return 'PASTE MODE'
   else
        return ''
   endif
endfunction          
function! FyleType()       
   let type = &fileformat
   return type
endfunction
function! TypeDist()
let DIST = matchstr( bufname('%'), '[a-z]\{3}')      
if DIST == 'ftp'                                     
    return '['.DIST.'] '                             
elseif DIST == 'scp'                                 
    return '['.DIST.'] '
else                                    
    let DIST = ''
    return DIST
endif                                                                                     
endfunction

La première affiche PASTE MODE lorsque l’on active le mode collage set paste utilisé pour coller du texte sans indentation ni autocommande, par exemple lorsque la source du « copier » est votre navigateur.
La deuxième fonction affiche le format du fichier que l’on édite, c’est à dire unix ou dos
La troisième, permet d’afficher dans le coin de gauche [ftp] ou [scp] si nous sommes entrain d’éditer un fichier distant.
Maintenant on va définir notre statusbar :

1
2
" Paramétrage de la statusline
set statusline=\ %{HasPaste()}\ %{TypeDist()}%f%m%r%h\ %w\ \ [%{FyleType()}]\ CWD:\ %r%{getcwd()}%h\ \ \ Hexa:\ %B\ %=Ligne:\ %l/%L\ %P\ Colonne:%c\ Buffer:%n

Le lecteur attentif, constatera que l’on appel une fonction vim nommée getcwd qui retourne le répertoire ou l’on se trouve.
En conclusion, on peut en déduire que cette ligne peut-être enrichie par toute les fonctions, personnelles ou interne à vim. On peux imaginer par exemple de préciser si on est entrain de travailler en ftp, en ssh ou en local, ou encore de récupérer la révision x d’un fichier dans le gestionnaire de source.

Print Friendly

A lire sur le même sujet, ou presque :

Posted in vim | Tagged , , , , , , | Leave a comment

mdadm, ou comment reconfigurer son raid sans réinstaller son serveur.

Voici un petit récapitulatif de commandes pour gérer un raid soft sous linux.
Ce topo est orienté gestion de serveur dédié de type OVH. Exemple : vous avez fait l’installation d’une nouvelle machine, mais à la fin vous vous dites, hum je transformerai bien la grosse patate raid1 en 2 belles patates raid1.

Voila comment faire :

Les disques sous linux se nomment sdxy ou hdxy. Un disque raid est défini sous l’appellation mdx
/dev/md0 sera donc un ensemble raid. La somme de 2 ou plus sdxx par exemple.

Pour savoir à quoi correspond notre md0, on va utiliser la commande suivante :

mdadm –detail /dev/md05

Ici on verra quels sont les partitions qui composent notre raid.

Pour supprimer un disque du raid :

mdadm –manage /dev/md05 –fail /dev/sda10

suivis d’un

mdadm –manage /dev/md05 –remove /dev/sda10

Arrivé au dernier disque il faut arrêter le raid, par :

mdadm –manage –stop /dev/md05

Si vous voulez repartitionner les disques qui composaient le raid, donc sda10 et sdb9 :

fdisk /dev/sda

supprimer la partition, puis créer les partition voulues et penser à choisir le type raid (t, puis fd).
w pour écrire les changement.
Faire de même pour notre sdb9.
Faire les modifications dans /etc/fstab pour mettre en commentaire la ligne de notre raid.
reboot.
Une fois la machine redémarrée, il faut recréer nos raid :

mdadm –create /dev/md05 –level=1 –raid-device=2 /dev/sda10 /dev/sdb9
mdadm –create /dev/md11 –level=1 –raid-device=2 /dev/sda11 /dev/sdb10

On les formates :

mkfs.xfs /dev/md05
mkfs.ext4 /dev/md11

pour que notre raid soit présent au démarrage :

mdadm –daemonise /dev/md05
mdadm –daemonise /dev/md11

Et enfin on remet à jour le fichier /etc/mdadm/mdadm.conf par :

mdadm –detail –scan > /etc/mdadm/mdadm.conf

On modifie le fichier /etc/fstab pour qu’il monte au démarrage les 2 raid.
On vérifie que tout va bien par un

mount -a

On reboot une dernière fois histoire d’être bien tranquille, et de s’assurer que la configuration est bonne. Ce redémarrage est facultatif.

Victoire, tout marche.
Donc comme vous l’aurez compris, vous décidez de la numérotation des raids. Ici nous avons un raid md05 et un raid md11.
Vous pouvez mélanger les partitions des différents disques. Tant qu’ils ont la même taille, sinon la taille disponible sera la plus petite des 2.

Bon raid.

Print Friendly

A lire sur le même sujet, ou presque :

Posted in planet-libre, shell | Tagged , , , , , , , , , | Leave a comment

Connaître la taille limite possible d’une table dans une base mysql

Le sujet du jour est comment connaître la taille limite possible d’une table dans une base mysql.

La réponse varie d’un système à l’autre.
Le premier point est le filesystem sur lequel sont stocké les fichiers de la base.
Le second point est le noyau utilisé. Les systèmes 32bits limitent fortement par rapport aux systèmes 64bits
A lire à ce sujet :
http://dev.mysql.com/doc/refman/4.1/en/full-table.html pour les anciennes bases et ici :http://dev.mysql.com/doc/refman/5.6/en/full-table.html pour les nouvelles.

Voila pour la théorie. Pour la pratique, il est possible de faire comme suit :
1 – se connecter à la base
2 – choisir sa base (use mabase)
3 – entrer la requète suivante :

mysql> show table status like ‘matable’ \G

Exemple :

# mysql -umonuser -p
use mabase;
mysql> show table status like 'matable' \G
*************************** 1. row ***************************
Name: stock
Engine: MyISAM
Version: 10
Row_format: Fixed
Rows: 338
Avg_row_length: 52
Data_length: 17576
Max_data_length: 14636698788954111
Index_length: 6144
Data_free: 0
Auto_increment: 339
Create_time: 2010-02-19 10:23:21
Update_time: 2012-01-26 16:07:56
Check_time: 2011-01-17 14:58:33
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

mysql>
La taille physique maximal ici est de Max_data_length: 14636698788954111 byte, soit 1,625 petabyte

Vous pouvez retrouver cet article sur le wiki : http://www.kywyxy.net/dokuwiki/doku.php?id=mysql:tips

Print Friendly

A lire sur le même sujet, ou presque :

  • A non, il n'y a rien de plus sur le sujet.
Posted in mysql, planet-libre | Tagged , , , , , | Leave a comment

Debian – phpmyadmin – multi serveur

Votre poste est sous debian, et vous voulez utiliser un phpmyadmin pour administrer plusieurs serveurs notamment des serveurs distant :
Installer :

mornik@server:$
aptitude install phpmyadmin

Laissez-vous guider et lorsque l’installation est terminée, il suffit d’aller éditer le fichier suivant :
/etc/phpmyadmin/config.inc.php
Apres les lignes :
67 /* Advance to next server for rest of config */
68 i++;
69 }

Ajoutez :
70 /* Server: Distant */
71 $i++;
72 $cfg['Servers'][$i]['connect_type'] = 'tcp';
73 $cfg['Servers'][$i]['extension'] = 'mysqli';
74 $cfg['Servers'][$i]['auth_type'] = 'cookie';
75 $cfg['Servers'][$i]['user'] = '';
76 $cfg['Servers'][$i]['password'] = '';
77 $cfg['Servers'][$i]['AllowNoPassword'] = true;
78 $cfg['Servers'][$i]['host'] = 'monautreserveur';
79 $cfg['Servers'][$i]['connect_type'] = tcp';
80 $cfg['Servers'][$i]['compress'] = false;

Et c’est tout !

Print Friendly

A lire sur le même sujet, ou presque :

Posted in debian, planet-libre | Tagged , , , , , | Leave a comment

Installer yakuake sur debian squeeze

Voila un petit mémo pour installer yakuake sur sa debian squeeze.

Etape n°1 : les sources.
On les télécharge la :

mornik@desktop:$ wget http://www.kde-apps.org/content/show.php?content=29153 -O yakuake-2.9.8.tar.bz2

Décompression :

mornik@desktop:$ tar xjf yakuake-2.9.8.tar.bz2

Préparation de l’environnement :
Etape 1 : Positionnement

mornik@desktop:$ cd yakuake-2.9.8
mornik@desktop:$ mkdir build;cd build

Etape 2 : dépendances :
Avant de compiler le programme, il nous faut installer les éléments suivants :

mornik@desktop:$ aptitude install gettext kdelibs5-dev

On configure et on compile :

mornik@desktop:$ cmake -DCMAKE_INSTALL_PREFIX=/usr/ ../
mornik@desktop:$ make

et pour terminer on installe :

mornik@server:$ su
mornik@server:$ make install

Et voila, c’est terminé.

Petite note : le paquet gettext est nécessaire, car il contient le programme msgfmt utilisé pour la configuration. Son absence provoque l’erreur suivante :
CMake Error at /usr/share/kde4/apps/cmake/modules/FindMsgfmt.cmake

Print Friendly

A lire sur le même sujet, ou presque :

Posted in shell | Tagged , , , | Leave a comment

Problème de caractères spéciaux lors de connexions sur HP-UX

La solution passe par la commande :

mornik@server:$ stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z"

Pour rendre pérenne la chose, il suffit de l’ajouter à votre fichier .profile

L’explication ? Sur HP-UX l’affectation de caractères particuliers comme la fin de ligne n’est pas la même que sur les autre OS.
Certains émulateur de terminal corrige directement cette interprétation, putty non.

Dans le même genre, on a Aix et le backspace. Cette fois c’est dans le .kshrc et la ligne magique est :

mornik@server:$ stty erase $(print -n "177")

Les sources :
http://www.ibm.com/developerworks/wikis/display/WikiPtype/AIXV53AdminBPFiles
et : http://codesnippets.joyent.com/posts/show/909

Print Friendly

A lire sur le même sujet, ou presque :

Posted in planet-libre, shell | Tagged , , , , , , , , | Leave a comment

Une p’tite brève …

Envoyer un répertoire sur une machine distante :

mornik@server:$ tar cf - tmp/* |ssh alexandre@desktop "tar xf - "

La commande ci dessus demande à tar d’envoyer sur la sortie standard (ls -) le répertoire tmp/ en ssh sur la machine desktop, avec le user alexandre et arrivé sur desktop, àn demande à tar de désarchiver le flux.

Print Friendly

A lire sur le même sujet, ou presque :

Posted in shell | Tagged , | Leave a comment