Migrer un système vers un Raid1

Le but de la manip est de passer d’une installation fonctionnelle en LVM sur un seul disque à une installation toujours avec LVM mais sur un raid 1 (sur deux disques).

Introduction

Dans la suite on admet que l’installation initialle est telle que :
/dev/sda:
/dev/sda1 -> /boot (200Mo)
/dev/sda2 -> old-server (reste du hdd)
root
tmp
var
swap

Mise en place

On commence par copier la table de partition sur le deuxième disque
sfdisk -d /dev/sda | sfdisk /dev/sdb
Puis avec mdadm (raid soft) on crée nos deux arrays, nous allons volontairement ne mettre qu’un seul disque dans chaque array.

Md0 sera notre raid pour le /boot
mdadm --create /dev/md0 --level 1 --raid-devices=2 missing /dev/sdb1 && mkfs.ext2 /dev/md0
Et Md1 le raid pour notre vg
mdadm --create /dev/md1 --level 1 --raid-devices=2 missing /dev/sdb2

On crée ensuite le pv sur /dev/md1 et le vg dans la foulée
pvcreate /dev/md1 && vgcreate vg-server /dev/md1

Puis nos lv et le filesystem (on répète l’opération pour les autres) :)
lvcreate -n root -L 6g vg-server && mkfs.ext3 /dev/vg-server/root

Copie du système actuel

On commence par monter notre nouveau boot
mount -t auto /dev/md0 /mnt/
et on lance la copie après si nécessaire avoir monté le fs d’origine en loop
mount -o loop /boot /root/boot
cp -vdprx /root/boot /mnt
Même opération pour nos lv
mount -t auto /dev/vg-server/root /mnt && mount -o loop /dev/old-server/root /root/root
cp -vdprx /root/root /mnt

Avant le reboot

Avant de rebooter il faut penser à modifier le fstab (/dev/md0 pour boot et le nouveau vg pour les autres moint-points).
:%s/sda1/md0/g
:%/old-server/vg-server/g

Il faut ensuite régénérer l’intird update-initramfs -u -k `uname -r`et bien sûr à installer grub sur notre nouveau disque (grub-install).

Et enfin créer un fichier de configuration pour mdadm
mdadm --detail --scan >> /mnt/etc/mdadm/mdadm.conf

Touche finale

Après reboot (si tout s’est bien passé), on peux intégrer l’ancien disque dans l’array :)
mdadm --add /dev/md0 /dev/sda1 && mdadm --add /dev/md1 /dev/sda2
Et observer la reconstruction
cap /proc/mdstat

Bon hack !

Puppet dashboard

Petit retour d’expérience sur mon utilisation de puppet/puppet dashboard.

Voila maintenant environ 2 mois que j’utilise puppet sur mon serveur perso, outre l’installation classique (puppetmaster/client) le tout signé par certificat (puppetca)

(voir Puppet install by Deimos et Puppet install by foaa).

J’ai rajouté l’implémentation de GIT pour la tracibilité des recettes, et des tâches Capistrano pour la « colle » entre tout ceci, et puppet Dashboard (module de visualisation).

Installation du dashboard. par recette puppet bien sûr ;) (version 1.2.3 de puppetlabs)

Pour la suite ça se passe dans dans /usr/share/puppet-dashboard, le Rakefile permet d’ajouter des noeuds/classes en ligne de commande (rake node:add, nodeclass:add), sinon vous pouvez vous rendre sur l’interface web, et créer vos noeuds depuis (les workers sont lancés par la recette).

Pour le reporting, il suffit d’activer (report = true sur les clients) et pour l’inventaire autoriser le puppetmasterd à accéder aux facts

path /facts
auth no
method find
allow *

Gitolite gestion des hooks

Je suis passé depuis un petit moment à Gitolite pour la gestion de mes repos git (aussi bien pour le boulot, que perso), je détailler aujourd’hui, un atout pas négligeable qui est la gestion centralisé des hooks.

Je suppose que vous avez fait votre install avec le paquet (ici Debian), et donc que gitolite est installé dans /var/lib/gitolite.

On commence donc par créer un hook /var/lib/gitolite/.gitolite/hooks/common/post-receive qui sera donc commun à tous les nouveaux repo crées.
#!/bin/sh
# sbadia
#
while read oldrev newrev refname
do
echo $oldrev $newrev $refname | . /usr/share/doc/git-core/contrib/hooks/post-receive-email
for i in $(git config xmpp.jabbernotif);do git log $oldrev..$newrev $refname | sendxmpp -t $i;done
done

Et on oublie pas de le rendre exécutable.

Il faut ensuite activer la modification dynamique de configuration, pour ça si vous ne souhaitez pas vous embêter, il suffit de mettre un « .* »
sed -e 's/^\$GL_GITCONFIG_KEYS\ =\ "";/#$GL_GITCONFIG_KEYS\ =\ "";/' -e 's/^#\$GL_GITCONFIG_KEYS\ =\ "\.\*";/$GL_GITCONFIG_KEYS\ =\ ".*";/' -i /var/lib/gitolite/.gitolite.rc

Afin d’éviter de créer des fichier description dans chaque repo, on peux maintenant utiliser les fonctions de création de conf dynamique. Je modifie donc le script d’envoi d’email du paquet git-core /usr/share/doc/git-core/contrib/hooks/post-receive-email
sed -e 's/^projectdesc=.*/projectdesc=$(git config repo.description)/' -i /usr/share/doc/git-core/contrib/hooks/post-receive-email

Tout ceci fait, on peux modifier la config de nos repos pour utiliser ces nouvelles siouxeries.

Dans la config gitolite coté client gitolite-admin/conf/gitolite.conf
@lestrois = riri fifi loulou
# Super projet top secret
repo projetsecret
RW+ = @lestrois
R = donald
config hooks.mailinglist = riri@duck.corp,fifi@duck.corp,loulou@duck.corp
config hooks.envelopesender = gitolite@git.fr
config hooks.emailprefix = "[projetsecret] "
config hooks.showrev = "git show -C %s; echo"
config repo.description = "Super projet git secret"
config xmpp.jabbernotif = riri@jabber.duck.corp fifi@jabber.duck.corp loulou@jabber.duck.corp

Et voila, riri fifi et loulou seront notifié par mail et par jabber à chaque commit sur le projet « projetsecret » ;)

Le lien symbolique du hook post-recieve n’est crée que pour les nouveaux repo, il doit y avoir un moyen de rejouer la conf gitolite, mais je n’ai pas cherché ;)
for i in $(ls /var/lib/gitolite/repositories/);do ln -sv /var/lib/gitolite/.gitolite/hooks/common/post-receive /var/lib/gitolite/repositories/$i/hooks/post-receive;done

Documentation gitolite (repo spécifique)

Linux sur disque SSD

Il y a quelque mois, j’ai eu un petit soucis de contrôleur mémoire sur mon SSD, heureusement la panne est passé sous garantie, mais depuis, je n’ai pas pris le temps de réinstaller, c’est chose faite maintenant, bon ok j’arrête de raconter ma vie ;)

Installation

Depuis la version 2.2 de parted, il réalise automatiquement un alignement sur 2048 secteur, ce qui correspond donc bien pour notre SSD (alignement des blocs).

Coté système de fichier j’ai choisi du ext4 pour les optimisation TRIM, et pour bénéficier de la journalisation quand même…
mkfs.ext4 -b 4096 -E stride=32 /dev/sda1

Optimisations

Ayant une machine avec 4Go de ram, j’ai désactivé le swap, d’une part, et j’ai placé quelque points de montage en ramfs, notamment un tmpfs,
none /tmp tmpfs defaults,nosuid,nodev,noexec 0 0
Ou pour les utilisateurs de iceweasel/firefox, le .mozilla
none /home/sbadia/.mozilla tmpfs defaults,uid=1000,gid=1000,mode=750 0 0
L’inconvénient c’est que les données sont perdues au démarrage (vu qu’elle sont dans la ram…), il suffit donc de synchroniser avec un autre répertoire au boot, et à l’extinction ;)
#!/bin/sh
### BEGIN INIT INFO
# Provides: Mozilla sbadia profile in a ramfs
# Required-Start: $local_fs $syslog $remote_fs
# Required-Stop: $local_fs $syslog $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Sbadia .morilla ramfs
# Description: Backup or Restore sbadia mozilla in a ramfs
### END INIT INFO
REF=/home/sbadia/.mozilla_ref/
DIR=/home/sbadia/.mozilla/
case "$1" in
start)
echo -n "Moz-ramfs: extract mozzila user profile..."
[ ! -d $DIR ] && mkdir -p $DIR
rsync -a $REF $DIR
echo "[OK]"
;;
stop)
echo -n "Moz-ramfs: backup mozilla user profile..."
rsync -a $DIR $REF
echo "[OK]"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac

et de mettre à jour les scripts d’init
update-rc.d moz-ramfs defaults

Options de montage

Une autre optimisation est d’ajouter l’option « noatime » à nos points de montage, cette option permet de ne pas mettre à jour les horodatages d’accès aux inœuds sur le système de fichiers.
/dev/sda1 / ext4 errors=remount-ro,noatime 0 1
Et si noyau superieur à 2.6.33 et installation en ext4, on peux activer le trim automatique, avec l’option « discard ».
/dev/sda1 / ext4 errors=remount-ro,noatime,discard 0 1
Une autre idée est de désactiver le logging…

Pour plus d’infos lisez le Tuto de Forum Hardware, il est de très bonne qualité !

Sources