FreeNAS: ZFS et zpool v28 dans la 8.0.4

Bonjour,

J’ai mis en ligne il y a quelques jours un article qui expliquait l’installation de FreeNAS pour faire du stockage sur le réseau. Cet article se trouve à la page FreeNAS: Installation simplifiée d’un nas.

Parmis les fonctionnalités proposées par FreeNAS, il a en a une qui m’interèsse énormement c’est le support de zfs. Parce qu’il y’a un mais, la version de zfs utilisée par la version de FreeBSD servant de base à FreeNAS 8.0.4 est la version 15. Or, zfs est déjà en version 28 sur les versions plus à jour de FreeBSD. Dans les nouveautés de cette nouvelle version de zfs, on trouve la deduplication, le raidz3, le remove des log devices.

La démonstration d’aujourd’hui portera sur l’intégration de la version 28 de zfs dans FreeNAS 8.0.4. Ce billet peut également servir pour l’intégration d’autres patches/modifications à apporter au système.

Prérequis

FreeNAS est un système d’exploitation orienté stockage basée sur FreeBSD et plus précisement sur nanobsd. La construction de l’ensemble oblige à avoir un système FreeBSD opérationnel. Un autre de mes articles peut être utilisé pour l’instalation de FreeBSD. Cet article est disponible ici FreeBSD: Procédure pour l’installation du système d’exploitation. Dans cet article, la version utilisée est la 7.1. FreeNAS 8.0.4 repose sur la version 8.2 RELEASE de FreeBSD, je recommande de faire l’installation avec celle ci. Je n’ai pas testé la compilation sur une autre version que la 8.2 RELEASE.

Logiciels

A partir de ce moment, il est considéré que le travail se fait sur un système d’exploitation FreeBSD opérationnel.

Afin de pouvoir reconstruire FreeNAS depuis les sources, il faut avoir quelques logiciels d’installés. Ceux ci ne sont pas nombreux puisqu’il s’agit de subversion, cdrtools et python. Si ces logiciels ne sont pas déjà installés, il faut le maintenant. Pour cela :

# pkg_add -r subversion
# pkg_add -r cdrtools
# pkg_add -r python

Un petit coup de rehash pour actualiser la liste des commandes utilisables.

# rehash

Compilation

On poursuit avec la creation d’un répertoire de travail pour la compilation de FreeNAS. On rentre dans celui ci ensuite.

# mkdir /usr/local/freenas
# cd /usr/local/freenas

On va chercher ensuite les sources pour la version 8.0.4.

# svn co https://freenas.svn.sourceforge.net/svnroot/freenas/branches/8.0.4/

On remplace ensuite les patches existants dans FreeNAS pour zfs par le patch de la version 28.

# cd 8.0.4
# rm patches/freebsd-zfs-*
# fetch 'http://people.freebsd.org/~mm/patches/zfs/v28/releng-8.2-zfsv28-20110616.patch.xz'
# xz -d releng-8.2-zfsv28-20110616.patch.xz
# mv releng-8.2-zfsv28-20110616.patch patches/freebsd-zfs-v28.patch

Ci dessous un petit patch pour la génération correcte du nom en fonction des paramètres utilisés. Ce patch inclus également l’activation ou nom du mode Multimedia. Dans un cadre professionnel, le mode multimedia n’est pas du tout indispensable, dans le cadre personnel, il peut l’être.

--- ../build/create_iso.sh      2012-07-17 20:00:06.211479988 +0200
+++ build/create_iso.sh 2012-07-17 20:02:30.698497751 +0200
@@ -29,7 +29,19 @@

     export FREENAS_ARCH
     export NANO_OBJ=${root}/obj.${FREENAS_ARCH}
-    REVISION="8.0.4-RELEASE_MULTIMEDIA-p2"
+    if [ "$MULTIMEDIA" = 0 ]; then
+        if [ "$ZFSV28" = 0 ]; then
+                REVISION="8.0.4-RELEASE-p2"
+        else
+                REVISION="8.0.4-RELEASE-p2-zfsv28"
+        fi
+    else
+        if [ "$ZFSV28" = 0 ]; then
+                REVISION="8.0.4-RELEASE_MULTIMEDIA-p2"
+        else
+                REVISION="8.0.4-RELEASE_MULTIMEDIA-p2-zfsv28"
+       fi
+    fi
     export NANO_NAME="FreeNAS-${REVISION}-${NANO_ARCH_HUMANIZED}"
     export NANO_IMGNAME="$NANO_NAME"

--- ../nanobsd/freenas-common   2012-07-17 20:00:00.964479322 +0200
+++ nanobsd/freenas-common      2012-07-17 19:59:51.386478207 +0200
@@ -55,7 +55,19 @@
 # us to kleep the SVN revision number even when the version string is
 # overloaded with a name.
 : ${SVNREVISION=`svnversion ${NANO_CFG_BASE}`}
-REVISION="8.0.4-RELEASE_MULTIMEDIA-p2"
+if [ "$MULTIMEDIA" = 0 ]; then
+       if [ "$ZFSV28" = 0 ]; then
+               REVISION="8.0.4-RELEASE-p2"
+       else
+               REVISION="8.0.4-RELEASE-p2-zfsv28"
+       fi
+else
+       if [ "$ZFSV28" = 0 ]; then
+               REVISION="8.0.4-RELEASE_MULTIMEDIA-p2"
+       else
+               REVISION="8.0.4-RELEASE_MULTIMEDIA-p2-zfsv28"
+       fi
+fi
 NANO_NAME="FreeNAS-${REVISION}-${NANO_ARCH_HUMANIZED}"
 NANO_IMGNAME="${NANO_NAME}"
 NANO_KERNEL=${NANO_CFG_BASE}/FREENAS.${NANO_ARCH}
@@ -64,7 +76,7 @@
 NANO_BOOT0CFG="-o packet -s 1 -m 3 -t 18"

 DEBUG="0"
-MULTIMEDIA="1"
+MULTIMEDIA=${MULTIMEDIA:-"0"}
 REPORTING="1"

 # /var -> ~150MB (look through rc.initdiskless for the formula of how this

Copiez collez ce qui se trouve dans le cadre précédent dans un fichier nommé par exemple freenas.patch dans le dossier courant puis appliqué le patch avec la commande ci dessous.

# patch < freenas.patch

On définit les variables suivantes FREEBSD_CVSUP_HOST, MULTIMEDIA, ZFSV28 et FREENAS_ARCH pour respectivement indiqué le serveur pour la récupération des sources de FreeBSD, l’activation du mode MULTIMEDIA, savoir si le patch de la version 28 de zfs va être appliqué et l’architecture pour laquelle on veut reconstruire FreeNAS.

# setenv FREEBSD_CVSUP_HOST cvsup2.fr.freebsd.org
# setenv MULTIMEDIA 0
# setenv ZFSV28 1
# setenv FREENAS_ARCH amd64

Il est temps maintenant de passer aux choses sérieuses, à savoir si tout ceci va fonctionner ou pas. La commande suivante permet de lancer la création de notre FreeNAS personnalisé.

# sh build/do_build.sh

La construction de l’ensemble prends un certain temps. Pour l’occasion, j’ai fait le tout sur un portable core2duo T6670 et le temps nécessaire pour arriver au bout est de trois heures environ.

Si tout c’est passé sans encombre, on a droits à la fin de la compilation à un message de ce type :

02:10:07 ## configure nanobsd setup
02:10:07 ### log: /usr/local/freenas/8.0.4/obj.amd64/_.dl
02:10:14 ## run late customize scripts
02:10:14 ## [1/1] late customize "freenas_custom"
02:10:14 ### log: /usr/local/freenas/8.0.4/obj.amd64/_.late_cust.freenas_custom
02:10:21 ## build diskimage
02:10:21 ### log: /usr/local/freenas/8.0.4/obj.amd64/_.di
02:24:54 ## Compressing GUI upgrade image
02:24:54 ### log: /usr/local/freenas/8.0.4/obj.amd64/_.gui_image
02:32:24 ## Compressing full disk image
02:32:24 ### log: /usr/local/freenas/8.0.4/obj.amd64/_.full_image
02:42:20 ## Creating ISO image
02:42:20 ### log: /usr/local/freenas/8.0.4/obj.amd64/_.cd_iso
02:42:44 # NanoBSD image FreeNAS-8.0.4-RELEASE-p2-zfsv28-x64 completed
FreeNAS build PASSED

L’image iso de la version de FreeNAS qui vient d’être faite, nommée FreeNAS-8.0.4-RELEASE-p2-zfsv28-x64.iso est récupérable dans le dossier suivant /usr/local/freenas/obj.amd64. Celle ci peut être récupérée avec un client ftp si un serveur ftp à été installé ou alors tout simplement scp ou sftp.

Il ne reste maintenant plus qu’a mettre sur galette ce fichier et relancer une installation basique comme expliqué dans le billet FreeNAS: Installation simplifiée d’un nas.

A bientot pour de nouvelles aventures.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


sept × = 49

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>