Maniatux's Blog

Welcome to the internet

Sysadmin

Debian GNU/kFreeBSD Wheezy dans une jail FreeBSD 10

Rédigé par Xavier - - Aucun commentaire

Debian GNU/kFreeBSD peut être installé dans une jail sur un hôte FreeBSD. Intéressant si vous voulez garder votre serveur sous FreeBSD mais que vous voulez également profiter des jails pouvant puiser des paquets dans les dépôts Debian. Voici comment procéder.

Chargez les modules

# kldload fdescfs linprocfs linsysfs tmpfs

Ou, de manière permanente, éditez le fichier /boot/loader.conf :

fdescfs_load="YES"
linprocfs_load="YES"
linsysfs_load="YES"
tmpfs_load="YES"

Note : ces modules ne sont pas indispensables au fonctionnement de la jail Debian GNU/kFreeBSD. Mais si on installe cet OS à partir de l'ISO officielle, on voit qu'ils sont présents et liés aux points de montage que nous verrons par la suite. Mon hypothèse est qu'ils assurent une "compatibilité Linux" pour certains logiciels non pleinement fonctionnels. linprocfs est utilisé entre autres pour ps et df. En outre cela ne mange pas de pain de les activer :)

Création de la jail

Il va falloir utiliser debootstrap et installer également perl5 qui est une dépendance.

# pkg install debootstrap perl5

Puis on créé le répertoire de la jail :

# mkdir -p /usr/jails/debian

On installe le tout :

# debootstrap wheezy /usr/jails/debian http://cdn.debian.net/debian

Configuration de la jail

Editez le fichier /etc/jail.conf

# DEFAULT PARAMETERS
#
exec.start      = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
path = "/usr/jails/$name";
host.hostname = "$name";

# INDIVIDUAL JAIL PARAMETERS
#
debian {
        allow.mount;
        mount.devfs;
        mount.fstab="/usr/jails/debian/etc/fstab.debian";
        ip4.addr = re0|192.168.0.13;
        exec.start = "/etc/init.d/rc 3";
        exec.stop = "/etc/init.d/rc 0";
}

Editez ensuite /usr/jails/debian/etc/fstab.debian :

sys   /usr/jails/debian/sys         linsysfs  rw          0 0
proc  /usr/jails/debian/proc        linprocfs rw          0 0
tmpfs  /usr/jails/debian/run         tmpfs     rw,noexec,nosuid 0 0

Bidouille à faire pour les password, sinon la jail ne démarrera pas :

# cp /etc/master.passwd /usr/jails/debian/etc/
# pwd_mkdb -d /usr/jails/debian/etc -p /usr/jails/debian/etc/master.passwd

Démarrer la jail

# service jail start debian

On peut alors voir si la jail tourne :

# jls
   JID  IP Address      Hostname                      Path
    15  192.168.0.13    debian                      /usr/jails/debian

Et on visualise également nos points de montage :

# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ada0p2    140G     11G    118G     9%    /
devfs          1.0K    1.0K      0B   100%    /dev
devfs          1.0K    1.0K      0B   100%    /usr/jails/debian/dev
fdescfs        1.0K    1.0K      0B   100%    /usr/jails/debian/dev/fd
linsysfs       4.0K    4.0K      0B   100%    /usr/jails/debian/sys
linprocfs      4.0K    4.0K      0B   100%    /usr/jails/debian/proc
tmpfs          4.0G     24K    4.0G     0%    /usr/jails/debian/run
devfs          1.0K    1.0K      0B   100%    /usr/jails/debian/dev

Notez que les points affichés peuvent être différents selon votre système.

Configurer notre Debian/kFreeBSD

Entrez dans la jail :

# jexec debian bash

Commencez par reconstruire les utilisateurs et mots de passe, car nous avons du copier ceux de FreeBSD (l'hôte) mais cela pose des problèmes :

# dpkg-reconfigure base-passwd

Reconfigurez tzdata pour remettre les pendules à l'heure :

# dpkg-reconfigure tzdata

Configurez les locales :

# apt-get update
# apt-get install locales
# dpkg-reconfigure locales

Et voilà.

Notez que Debian GNU/kFreeBSD est encore relativement peu utilisé, et je n'ai pas encore trouvé de retour d'expérience sur cet OS, encore moins quand on l'utilise dans une jail FreeBSD. C'est un territoire peu exploré il faut donc être prudent surtout sur un environnement de production.

Se faire une "IPv6 Box" - avec FreeBSD

Rédigé par Xavier - - Aucun commentaire

Fin 2013 j'ai publié un article expliquant comment se faire facilement une "IPv6 Box" sous Debian, c'est à dire un serveur qui donne accès à l'IPv6 à toutes les machines de votre réseau, en exploitant deux choses : un tunnel qui encapsule l'IPv6 dans de l'IPv4 (vous permettant ainsi d'en profiter alors que votre FAI ne le propose pas) et radvd un daemon qui présente votre passerelle au reste du réseau (les périphériques se génèrent eux-même une IPv6 complète par la suite).

Avec ce nouvel article, voici comment faire la même chose sur FreeBSD !

Pré requis

Pour la théorie et la présentation du mode de fonctionnement, je vous redirige vers l'article Se faire une IPv6 Box dans lequel il y a les schémas et tout ce qui va avec. Ce que vous devez avoir, c'est :

  • Un tunnel chez Hurricane Electric en /48
  • Un serveur FreeBSD bien entendu, relié au même LAN que les machines que vous voulez desservir

Montage du tunnel

A ajouter au /etc/rc.conf.local :

#IPV6 HE tunnel
ipv6_gateway_enable="YES"
ipv6_interfaces="auto"
ipv6_activate_all_interfaces="YES"
ipv6_cpe_wanif="gif0"
ifconfig_re0_ipv6="inet6 2001:470:c851:192::1 prefixlen 64"
cloned_interfaces="gif0"
ifconfig_gif0="tunnel 192.168.0.10 216.66.84.42"
ifconfig_gif0_ipv6="inet6 2001:470:c851:10::1 2001:470:c851::1 prefixlen 128"
ipv6_defaultrouter="2001:470:c851::1"
rtadvd_enable="YES"
rtadvd_interfaces="re0"

A remplacer par les éléments dont vous disposez :

  • ifconfig_re0_ipv6 : Adresse IPv6 que vous donnez à votre interface de LAN (attention votre interface ne s'appelle pas forcément re0)
  • ifconfig_gif0 : Adresse du LAN et adresse du serveur chez HE (Server IPv4 Address)
  • ifconfig_gif0_ipv6 : Adresse IPv6 que vous donnez au gif0 et adresse du serveur chez HE (Server IPv6 Address)
  • ipv6_default_router : Adresse du serveur chez HE (Server IPv6 Address)

Ensuite redémarrez votre système (la commande netif ne monte pas les tunnels IPv6).

Configuration de rtadvd

Rtadvd va faire du router advertisement c'est à dire qu'il va signaler sa présence sur le LAN aux autres machines. Vos périphériques vont donc pouvoir se générer une adresse IPv6 à partir du préfixe dont ils disposent. Donc créez et éditez le fichier /etc/rtadvd.conf :

re0:\
        :addrs#1:addr="2001:470:c851:192::":prefixlen#64:tc=ether:

Comme vous l'avez deviné ce fichier contient le préfixe du LAN.

Prenez soin de démarrer rtadvd :

# service rtadvd start

Vérification

Sur une autre machine de votre LAN, reconnectez le réseau. Vous devez maintenant voir que vous récupérez une IPv6 :

Vous pouvez aussi utiliser le site test-ipv6.com

Note : J'ai masqué mon IPv6 en rouge sur la capture, par contre j'ai laissé tout ce qui est IPv4, car soit c'est du LAN, soit c'est l'adresse IP de maniatux que tout le monde peut déjà voir ;)

Ressources

Sauvegarde rsync avec roulement de 3 jours

Rédigé par Xavier - - Aucun commentaire

Pour sauvegarder mon serveur, j'ai choisi d'utiliser simplement rsync avec une tâche cron. En effet mon infra n'est pas assez grosse pour justifier la présence d'une machine de guerre telle que Bacula. Rsync va permettre, avec un peu d'astuce, une sauvegarde incrémentielle avec roulement sur 3 jours. Cela veut dire que je peux restaurer des choses en puisant au choix dans les sauvegardes des 3 derniers jours.

Note importante

Je ne suis pas l'auteur du script, il est assez répandu sur le web, je ne sais pas qui l'a fait le premier. Mais il est très pratique !

Notez aussi que dans le script, la sauvegarde se fait en local sur le disque dur, ce qui n'est pas très prudent. Il est préférable de le faire sur un serveur distant, ou sur un support USB. En effet en cas de perte du disque dur vous serez bien contents d'avoir vos données sous le coude :)

Le script

#!/bin/sh
TARGET=/usr/backup
SOURCE=/usr/jails
/bin/rm -Rf $TARGET/backup.2
/bin/mv $TARGET/backup.1 $TARGET/backup.2
/bin/mv $TARGET/backup.0 $TARGET/backup.1
/usr/local/bin/rsync -a --no-o --delete --safe-links --link-dest=$TARGET/backup.
1 $SOURCE $TARGET/backup.0/

Note : il est obligatoire d'utiliser le chemin complet pour rsync (/usr/local/bin/rsync) sinon le script ne fonctionnera pas lorsqu'il sera invoqué en cron. Pensez à créer le TARGET avec mkdir.

Ajout au cron

Avant tout n'oubliez pas de rendre le script exécutable :

# chmod +x backup.sh

Ensuite éditez vos tâches :

# crontab -e

Puis ajoutez la ligne suivante :

@daily /root/backup.sh

Comment restaurer

Pour restaurer il faut utiliser la commande cp tout simplement. Quelques exemples :

# POUR UN FICHIER DE LA VEILLE
# cp /usr/backup/xmpp/var/log/messages /usr/jails/xmpp/var/log/

# POUR RESTAURER UN DOSSIER D'IL Y A DEUX JOURS
# cp -R /usr/backup/xmpp/home/sqlite /usr/jails/xmpp/home

Rapport de maintenance du serveur (18/06/2014)

Rédigé par Xavier - - Aucun commentaire

Hier j'ai procédé à une maintenance sur mon serveur, normalement invisible pour tous car j'ai pris soin de déplacer maniatux.fr sur un serveur de secours (il y a juste le https qui ne marchait plus). But de l'intervention ? Réinstaller le serveur FreeBSD pour partir sur une architecture différente et propre. En effet :

  • Mes jails sont maintenant faites avec le fichier /etc/jail.conf et décompression du base.txz (que l'on trouve sur le FTP de FreeBSD) tout simplement. J'ai abandonné ezjail qui est certes très bon mais légèrement gênant au niveau des sauvegardes et restaurations de jails (car il utilise des points de montage et des liens symboliques).
  • Ma jail dédiée à Jabber était cassée depuis la fois où j'ai du la restaurer. En effet suite à un incident d'upgrade, j'ai du utiliser une archive .tar.gz pour la restaurer. Cependant on ne peut pas juste la décompresser et démarrer la jail, à cause des points de montage et des liens utilisés par ezjail (d'où le fait que je l'abandonne). J'ai donc du créer une nouvelle jail et copier les fichiers qui vont bien, ce qui a été laborieux et bancal (le daemon a fini par tourner, en revanche pkg était cassé, ssh ne fonctionnait plus, etc). J'ai maintenant une jail propre refaite de A à Z, tout va bien.
  • L'IPv6 arrive car j'ai monté un tunnel he, et un /48 s'il vous plait. J'ai activé le ratdvd ce qui me permet de profiter de l'IPv6 sur tout mon LAN. Par contre les jails sont encore en IPv4 only pour le moment, car je dois réfléchir aux problématiques de pare-feu. En effet l'IPv4 et son NAT font qu'il y a une protection minimale pour tout ce qui entre. En revanche en IPv6 pas de NAT et donc pas de filtrage, ce qui va donc nécessiter un pare-feu sur le serveur.
  • Lors de la réinstallation du serveur et des jails j'ai pris soin de noter chaque étape, chaque ligne de commande afin de ne pas oublier ce que j'ai fait 2 mois après. J'ai utilisé OneNote Online, je verrai si je peux exporter mon travail et le publier ici.

Je publierai des articles détaillés sur la mise en place du tunnel IPv6, du système de backup, et du serveur Poudriere à l'occasion. A bientôt !

Classé dans : Sysadmin - Mots clés : aucun

Upgrade du serveur FreeBSD 9.2 vers 10.0

Rédigé par Xavier - - Aucun commentaire

Je procède ce soir à l'upgrade de mon serveur FreeBSD vers la dernière version majeure (10). Le blog étant hébergé dessus, il peut devenir indisponible ou lent. Je ferme les commentaires pour éviter les doublons.

Allons-y !

EDIT: Bon voilà, c'est fait. Cela a été compliqué, j'ai du passer le blog sur une VM de secours le temps de me dépanner. Mais maintenant c'est bon. Les commentaires sont à nouveau ouverts.

Classé dans : Sysadmin - Mots clés : aucun