Cloudstack : Paquets Ubuntu et support VMware

Le Contexte

Dans le cadre d’un projet professionel, je désire fournir à mes clients une interface de gestion de machines virtuelles, leur permettant de créer et démarrer des VM à la demande. J’ai, par le passé, déjà eu l’occasion de fournir ce genre d’interface. Que ce soit une solution complètement développée en interne, ou achetée très cher chez un éditeur (VMware vCloud Director).

Cette fois-ci, pas question de réinventer la roue (nous sommes en 2014!), ni de payer des sommes folles (nous ne sommes plus en 2000!).

Mon choix, qui reste personnel, s’est tourné vers Cloudstack. De part son coté agnostique dans le choix de l’hyperviseur, sa communauté et les retours que j’en ai eu à travers les rencontres lors des journées Build A Cloud.

Le Problème

Je suis parti sur une infra full Ubuntu 12.04.3 LTS pour Cloudstack.
Jusque là rien d’anormale, sauf que je veux pouvoir gérer aussi bien des clusters KVM que des clusters VMware ESXi.

Les paquets Ubuntu ne sont pas construits avec le support de VMware. En effet une restriction de la licence Apache font que les librairies java nécessaires à la prise en charge de certains modules ne sont pas fournies dans les sources de Cloudstack, et donc encore moins compilées dans les paquets.

La Solution

Rien de plus simple *khof*, créer ses propres paquets.

Installer Maven3

sudo -i
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:natecarlson/maven3
apt-get update
apt-get install ant debhelper openjdk-6-jdk tomcat6 libws-commons-util-java genisoimage python-mysqldb libcommons-codec-java libcommons-httpclient-java liblog4j1.2-java maven3
ln -s /usr/bin/mvn3 /usr/bin/mvn

Récupération des sources

wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.asc
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.md5
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.sha

Vérifier les sources

wget http://www.eu.apache.org/dist/cloudstack/KEYS
gpg --import KEYS
gpg --verify apache-cloudstack-4.2.1-src.tar.bz2.asc
gpg --print-md MD5 apache-cloudstack-4.2.1-src.tar.bz2 | diff - apache-cloudstack-4.2.1-src.tar.bz2.md5
gpg --print-md SHA512 apache-cloudstack-4.2.1-src.tar.bz2 | diff - apache-cloudstack-4.2.1-src.tar.bz2.sha

Extraire les sources

tar -jxvf apache-cloudstack-4.2.1-src.tar.bz2

Résoudre les dépendances

cd apache-cloudstack-4.2.1-src/
mvn3 -P deps

Installer les dépendances non librement disponibles ou avec une licence incompatible (avec celle d’Apache)

Heureusement elles sont pour la plus part dans le repository Github vogxn/cloudstack-nonoss ou sur le site http://zooi.widodh.nl/cloudstack/build-dep/

cd deps
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-iControl.jar -O cloud-iControl.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-manageontap.jar -O manageontap.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-vim.jar -O vim.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-vim25.jar -O vim25_51.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-apputils.jar -O apputils.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-netscaler-sdx.jar -O cloud-netscaler-sdx.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-netscaler.jar -O cloud-netscaler.jar
./install-non-oss.sh

Nota Bene
Vous pouvez devez récupérer les jar Netscaler et VMware chez leur éditeur respectif.

  • Vmware 5.1 SDK : https://my.vmware.com/group/vmware/get-download?downloadGroup=VSP510-WEBSDK-510
  • Citrix Netscaler : http://community.citrix.com/download/attachments/37847122/cloud-netscaler-jars.zip

Construction du paquet

mvn3 clean install -P deps -Dnonoss; export ACS_BUILD_OPTS="-Dnonoss"; dpkg-buildpackage -us -uc

El là ça plante.

[INFO] Apache CloudStack Console Proxy Plugin ............ SUCCESS [1.490s]
[INFO] Apache CloudStack AWS API Bridge .................. FAILURE [3:22.968s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9:14.630s
[INFO] Finished at: Mon Jan 06 20:08:40 CET 2014
[INFO] Final Memory: 57M/269M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project cloud-awsapi: Compilation failure: Compilation failure:
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/axis2/mex/1.5.4/mex-1.5.4-impl.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/ws/commons/axiom/axiom-dom/1.2.10/axiom-dom-1.2.10.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/opensaml/opensaml1/1.1/opensaml1-1.1.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/commons-lang/commons-lang/2.3/commons-lang-2.3.jar; error in opening zip file
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :cloud-awsapi
make: *** [build-indep-stamp] Error 1
dpkg-buildpackage: error: debian/rules build gave error exit status 2

En effet certaines dépendances pour la compilation de l’AWSAPI sont corrompues.
Une tentative de « unzip -l » d’un jar nous le montre.

unzip -l /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar
Archive:  /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar or
        /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar.zip, and cannot find /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.
5.4.jar.ZIP, period.

Pour résoudre ce problème, voici un script bash.

cd ${HOME}/.m2/repository/org/apache/axis2/mex/1.5.4/ && \
wget http://repo1.maven.org/maven2/org/apache/axis2/mex/1.5.4/mex-1.5.4-impl.jar -O mex-1.5.4-impl.jar

cd ${HOME}/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/ && \
wget http://repo1.maven.org/maven2/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar -O axis2-mtompolicy-1.5.4.jar

cd ${HOME}/.m2/repository/org/apache/ws/commons/axiom/axiom-dom/1.2.10 && \
wget http://repo1.maven.org/maven2/org/apache/ws/commons/axiom/axiom-dom/1.2.10/axiom-dom-1.2.10.jar -O axiom-dom-1.2.10.jar

cd ${HOME}/.m2/repository/org/opensaml/opensaml1/1.1 && \
wget http://repo1.maven.org/maven2/org/opensaml/opensaml/1.1/opensaml-1.1.jar -O opensaml1-1.1.jar

cd ${HOME}/.m2/repository/commons-lang/commons-lang/2.3 && \
wget http://repo1.maven.org/maven2/commons-lang/commons-lang/2.3/commons-lang-2.3.jar -O commons-lang-2.3.jar

cd ${HOME}/.m2/repository/bouncycastle/bcprov-jdk14/140 && \
wget http://repo1.maven.org/maven2/bouncycastle/bcprov-jdk14/140/bcprov-jdk14-140.jar -O bcprov-jdk14-140.jar

Ensuite il est important de lancer la commande « dpkg-buildpackage » comme ceci :

mvn3 clean install -P deps -Dnonoss; export ACS_BUILD_OPTS="-Dnonoss"; dpkg-buildpackage -uc -us

Cela nous évite de modifier le fichier debian/rules.
C’est aussi pour cette raison que je crée un lien symbolique « ln -s /usr/bin/mvn3 /usr/bin/mvn ».

Le Finale

Quelques jolis paquets Cloudstack

ls -l *.deb
-rw-r--r-- 1 hugues hugues  40439660 Jan  7 09:43 cloudstack-agent_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  78176924 Jan  7 09:43 cloudstack-awsapi_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues     51964 Jan  7 09:43 cloudstack-cli_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  45586934 Jan  7 09:42 cloudstack-common_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues     51948 Jan  7 09:43 cloudstack-docs_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues 158098852 Jan  7 09:43 cloudstack-management_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  40896288 Jan  7 09:43 cloudstack-usage_4.2.1-snapshot_all.deb

LSI mon amour

Dans un récent article je vous ai parlé de la création d’un SAN iSCSI à base de OmniOS sur un serveur Dell PowerEdge R515.
Et notamment de cette @#!@# de carte PERC H700 qui ne supporte pas le JBOD, ce qui complique la gestion à chaud du remplacement de disques défectueux de notre zpool.

Ces cartes sont des cartes LSI re-brandées Dell (et donc avec un firmware et un bios bridés).
Il est donc possible de gérer ces cartes avec les outils LSI.
Ce que je vais vous détailler tout de suite.

MegaRaid Storage Manager sous Solaris et dérivés

Téléchargement

La dernière version du logiciel est disponible chez LSI.

Il faut donc récupérer :

  1. 13.08.04.01_Solaris_11_MSM.tar.gz
  2. CSA1.5-MegaCli_REL80571.zip

Dans l’archive 13.08.04.01_Solaris_11_MSM.tar.gz il y a l’utilitaire storecli qui est le remplaçant de MegaCLI.
Cependant celui-ci nous remonte des erreurs avec les controlleurs PERC.

Nous installons donc MegaCLI, en lieu et place de storecli.

Installation

Ici sous OmniOS, mais fonctionne de la même manière sous Linux.

$ tar tvfz 13.08.04.01_Solaris_11_MSM.tar.gz

Cela vous donne en sortie :

drwxr-xr-x   0/0        0 May 13 05:10 2013 ./
-rw-r--r--   0/0    24088 Jul 25 07:18 2013 ./readme.txt
drwxr-xr-x   0/0        0 Jul 25 07:23 2013 ./disk/
-rw-r--r--   0/0   35738624 Jul 25 07:19 2013 ./disk/storcli.pkg
-rwxr-xr-x   0/0     5634 Jun  4 08:30 2013 ./disk/install.sh
-rwxr-xr-x   0/0     7086 May 13 05:10 2013 ./disk/license-agreement.txt
-rwxr--r--   0/0   684728 Jul 25 07:19 2013 ./disk/libstorelibir-2.so.17.00-0
-rwxr--r--   0/0   520324 Jul 25 07:19 2013 ./disk/libstorelibir-3.so.2.00-0
-rwxr-xr-x   0/0   147108 Jun 25 05:14 2013 ./disk/libstorelib.so.4.07-0
-rw-r--r--   0/0   1928704 Jul 25 07:20 2013 ./disk/sassnmp-SOL11X86-13.08-0401.pkg
-rwxr-xr-x   0/0   416104 Jun 25 05:14 2013 ./disk/libstorelibir.so.5.06-0
-rw-r--r--   0/0   266143232 Jul 25 07:24 2013 ./disk/MegaRaidStorageManager-SOL11X86-13.08.04.01.pkg
-rw-r--r--   0/0   3421184 Jul 25 07:20 2013 ./disk/sasirsnmp-SOL11X86-13.08-0401.pkg

Les fichiers intéressants sont :

  1. MegaRaidStorageManager-SOL11X86-13.08.04.01.pkg
  2. readme.txt

Pour les extraires :

$ tar xvfz 13.08.04.01_Solaris_11_MSM.tar.gz ./disk/MegaRaidStorageManager-SOL11X86-13.08.04.01.pkg ./readme.txt
$ unzip CSA1.5-MegaCli_REL80571.zip

Puis installations des pkg

sudo pkgadd -d ./disk/MegaRaidStorageManager-SOL11X86-13.08.04.01.pkg
sudo pkgadd -d ./MegaCLI/MegaCli_Solaris/x86/MegaCli.pkg

Lancement du service MSMFramework

$ sudo svcadm disable -t MSMFramework
$ sudo svcadm enable MSMFramework
$ svcs -a | grep -i msm

Le service doit apparaitre online

online         10:00:48 svc:/application/network/vivaldiframework:MSMFramework

Si ce n’est pas le cas, lancer un clear des events

$ sudo svcadm clear MSMFramework

Maintenant avec le client (tous les OS sont supportés) MegaRAID Storage Manager vous devez pouvoir vous connecter sur le serveur pour gérer la carte.
Pour cela renseigner l’IP du serveur contenant la carte PERC, le compte « root » et son mot de passe.
Cet utilitaire vous permetra de gérer vos disques durs et les virtual disks en cas de défaillance d’un disque.

Nota Bene

  • Les ports d’écoute du service sont les suivants : 3071 et 5571 en TCP.
  • Lors de l’installation de la version Windows sur votre poste, n’installer que le client.
  • La version serveur est à réserver pour les serveurs !!

Test MegaCLI

Il y a plein de page sur Google qui vous donnerons une idée de la puissance de MegaCLI pour la gestion des carte LSI (et PERC).

$ sudo /opt/MegaRAID/CLI/MegaCli -adpCount

Retourne le nombre de controlleur PERC LSI.

Activation des Jumbo Frame sous OmniOS

Pour faire suite à l’article sur la création d’un SAN ZFS sous OmniOS, voici comment activer les Jumbo Frame sous OmniOS

Je pars des hypothèses suivantes :

  • les cartes sont des Broadcom Gigabit Ethernet (Broadcom 5709C, driver bnx)
  • les carte bnx0 et bnx1 sont utilisées pour la partie iSCSI.

Activer le Jumbo Frame revient à passer le <a href="http://fr viagra en allemagne.wikipedia.org/wiki/Maximum_Transmission_Unit » title= »MTU »>MTU à 9000 en modifiant le fichier /kernel/drv/bnx.conf.
Ainsi la ligne :

#mtu=1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500;

Devient :

mtu=9000,9000,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500;

Ici on ne modifie que les MTU des cartes bnx0 et bnx1.
Les autres cartes restent avec un MTU de 1500.

Un reboot et un ifconfig plus tard vous affiche :

bnx0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 9000 index 3
        inet 10.10.2.4 netmask ffffff00 broadcast 10.10.2.255
bnx1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 9000 index 4
        inet 10.10.3.4 netmask ffffff00 broadcast 10.10.3.255
bnx2: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 10.10.1.21 netmask ffffff00 broadcast 10.10.1.255

On voit bien que les MTU des cartes bnx0 et bnx1 sont passés à 9000 et celui de la bnx2 est toujours à 1500.

GNU/Linux et Multipath IO (MPIO)

Configuration des serveurs initiateurs

Rappel

Dans notre architecture, le service SAN est assuré par un serveur OmniOS, offrant un partage iSCSI d’un volume ZFS.

  • Les initiateurs (client iSCSI) sont des serveurs Linux (Host CloudStack)
  • Le volume ZFS constitue le « Primary Storage » du cluster CloudStack.

Schema


|-----------|                    |----------|                     |--------------|
|           |--10.10.12.1.2 -----| SWITCH 1 |-------10.10.12.1.1--|              |
|           |                    |----------|                     |              |
|  Host 1   |                                                     |   Primary    |
|           |                    |----------|                     |   Storage    |
|           |--10.10.12.2.2 -----| SWITCH 2 |-------10.10.12.2.1--|              |
|-----------|                    |----------|                     |--------------|

iSCSI

Installation des paquets

# apt-get install open-iscsi
# service open-iscsi restart

Découverte des targets

# iscsiadm  -m discovery -t st -p 10.12.1.1
10.12.1.1:3260,2 iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b
10.12.2.1:3260,2 iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b
# iscsiadm  -m discovery -t st -p 10.12.2.1
10.12.2.1:3260,2 iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b
10.12.1.1:3260,2 iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b

Ces commandes ont pour effet de créer les répertoires correspondant aux targets trouvés dans le répertoire « /etc/iscsi/nodes/ ».
C’est à partir des infos contenus que les targets pourront être montées automatiquement à chaque reboot.

Connexion aux targets

# iscsiadm -m node --targetname "iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b" --portal "10.12.1.1:3260" --login

Configuration du Multipathing (MPIO)

Une fois vos disques iSCSI attachés, nous allons configurer le « multipath IO (MPIO).

Installation du paquet

# apt-get install multipath-tools
# service multipath-tools restart

Configuration du multipathing

Editer le fichier /etc/multipath.conf
En voici une configuration minimale

devices {
        device {
                vendor                  "SUN"
                product                 "COMSTAR"
                path_grouping_policy    multibus
        }
}

multipaths {
        multipath {
                wwid 3600144f0000000000000527263940001
                alias PrimaryStorage
        }
}

Pour connaitre les paramètres vendor, product et wwid de votre disque iSCSI, lancez la commande :

# multipath -ll
3600144f0000000000000527263940001 dm-0 SUN,COMSTAR
size=3.1T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:0 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 8:0:0:0 sdc 8:32 active ready running

L’instruction *alias* vous permet une utilisation human friendly du device.

Une fois cette configuration terminée, relancez le service multipath-tools.
Puis la commande :

# multipath -ll
PrimaryStorage (3600144f0000000000000527263940001) dm-0 SUN,COMSTAR
size=3.1T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:0 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 8:0:0:0 sdc 8:32 active ready running
root@host-kvm-01:~#

Utilisation du « disque »

Montage du disque et formatage

# dmesg
# cfdisk /dev/dm-0
# mkfs.ext4 /dev/dm-1
# mount /dev/dm-1 /opt/primary

Check devmapper

# ls -al /dev/mapper/
total 0
drwxr-xr-x  2 root root     100 Nov  7 17:43 .
drwxr-xr-x 13 root root    3220 Nov  7 17:43 ..
crw------T  1 root root 10, 236 Nov  7 17:42 control
lrwxrwxrwx  1 root root       7 Nov  7 17:43 PrimaryStorage -> ../dm-0
lrwxrwxrwx  1 root root       7 Nov  7 17:43 PrimaryStorage-part1 -> ../dm-1

On voit bien que notre disque iSCSI est présenté par son alias PrimaryStorage.
La partition créée est PrimaryStorage-part1.

Configuration automatique à chaque boot

Si tout ce passe bien, vous pouvez :

  1. Modifier la configuration de /etc/iscsi/iscsid.conf et mettre node.startup = automatic
  2. Modifier votre /etc/fstab en y ajoutant la ligne :
# iSCSI
/dev/mapper/PrimaryStorage-part1          /opt/primary    ext4    defaults,auto,_netdev 0 0

Monter un serveur de stocakge iSCSI rapidement (avec du MPIO)

Ici je détail la procédure pour installer très rapidement, et donc en laissant de coté la sécurité un serveur de stockage sous OmniOS (un autre dérivé de OpenSolaris)
Pour la sécurité allez voir ici

Configuration Matérielle :

  • Le serveur : Dell PowerEdge R515
  • Carte RAID : Perc H700, 512Mo de cache
  • Disques système : 2 disques 300G SAS 10K RPM
  • Disques zpool : 9 disques 3To SAS 6Gb/s 7.2K RPM et 2 SSD Crucial M500 120Gb

A propos de la carte Perc H700:
Ce n’est pas le meilleur choix. En effet elle ne permet pas de présenter les disques en JBOD. Il faut donc créer autant de « virtual disk » en RAID0 qu’il y a de disques. Donc à priori quelques pertes de performances.

Installation du serveur

Télécharger le CD d’installation sur le site d’OmniOS.
Une fois installé, loggez-vous en root (sans mot de passe) via une console.

Configuration des interface réseaux

Liste des interfaces réseaux

# dladm show-phys
Configuration de la première interface (réseau de management)
# ipadm create-if bnx2
# ipadm create-addr -T static -a 10.10.1.1/24 bnx2/v4static
Configuration de la route par défaut
# route -p add default 10.10.1.254
Modification de la configuration de SSH

Pour pouvoir faire le reste de la configuration à distance …

# vi /etc/ssh/sshd_config

Changez « PermitRootLogin no » to « PermitRootLogin yes ».
Relancer ssh

# svcadm restart ssh

Maintenant vous pouvez vous logger en ssh sur le serveur

  • Login : root
  • Passord : y’en a pas. Taper entrer.
Configuration de la deuxième interface (réseau SAN)
# ipadm create-if bnx0
# ipadm create-addr -T static -a 10.10.2.1/24 bnx0/v4static
Configuration de la troisième interface (réseau SAN)
# ipadm create-if bnx1
# ipadm create-addr -T static -a 10.10.3.1/24 bnx1/v4static
Configuration de la résolution DNS
# echo "nameserver 192.168.100.1" >> /etc/resolv.conf
# echo "nameserver 192.168.100.2" >> /etc/resolv.conf
# cp /etc/nsswitch.conf{,.bak}
# cp /etc/nsswitch.{dns,conf}
Création d’un utilisateur non root

Référence : OmniOS : Adding local users

# echo "* localhost:/export/home/&" > /etc/auto_home
# svcadm refresh autofs
# useradd -u 2000 -m -d /export/home/weldone weldone
# usermod -d /home/weldone weldone
# passwd weldone
Configuration sudo pour cet utilisateur
# grep ^root /etc/sudoers | sed -e 's/^root/weldone/' > /etc/sudoers.d/weldone
# chmod 0440 /etc/sudoers.d/weldone

Création du Zpool

Identification des disques
# format < /dev/null 
Création d’un zpool avec les disques disponibles
# zpool create -f vmpool raidz2 c1t1d0 c1t2d0 c1t3d0 c1t4d0 c1t5d0 c1t6d0 c1t7d0 c1t8d0 spare c1t9d0 log mirror c1t11d0 c1t12d0
# zpool status 
# zfs get available vmpool 
Création d’un zvolume
# zfs create -V 15T vmpool/datastore01

ou

# zfs create -V 15899G vmpool/datastore01

ou

# zfs create -V 16280995M vmpool/datastore01

En « M », vous perdez le moins d’espace…

C’est la commande suivante qui vous permet de vérifier l’espace disponible dans votre zpool, et donc d’affiner la taille du zvolume.

# zfs get available vmpool

Attention:
Ne pas donner une taille trop petite, sinon à la création du zvolume vous aurez un message d’erreur car les Metadata ne pourront pas être écrites.

Installation et lancement des services iSCSI et serveur de stockage

Avec la configuration d’un proxy si vous devez en utiliser un.

# echo "export http_proxy=\"http://192.168.100.10:8080/\"" >> /root/.profile
# . .profile
# pkg install storage-server
# svcadm enable stmf
# svcs stmf
# svcadm enable -r svc:/network/iscsi/target:default
# svcs -l iscsi/target
Création d’un Logic Unit (LU) pour notre « vmpool/datastore01 »
# stmfadm create-lu /dev/zvol/rdsk/vmpool/datastore01

En retour nous avons l’ID du LU, par exemple : 600144F0000000000000523AC3FA0001

# stmfadm list-lu
# stmfadm add-view 600144F0000000000000523AC3FA0001
# stmfadm list-view --lu-name 600144F0000000000000523AC3FA0001
# itadm create-target

En retour nous avons l’ID de la target, par exemple : iqn.2010-08.org.illumos:02:2303d8d3-75f9-c341-c389-ff982528211c

# itadm create-tpg tpg01 10.10.2.1:3260 10.10.3.1:3260

Et cerise sur le gâteau !!
Cette commande nous permet d’activer le MPIO

# itadm modify-target -t tpg01 iqn.2010-08.org.illumos:02:2303d8d3-75f9-c341-c389-ff982528211c

Et voilà, mettez un client iSCSI dans le même réseau, ça devrait marcher sans problème.

NoNoseOnTV, un projet animé par Arduino

Ce projet est né du constat que nos enfants sont bien souvent le nez collé sur l’écran.
Afin de corriger ce comportement j’ai pris l’habitude d’éteindre la télé avec la télécommande.
C’est rapidement fatiguant de faire le surveillant. Même si j’ai obtenu quelques succès.

Et la je me dis que si le truc pourrait être fait par un petit montage électronique.
Problème, mes notions d’électronique sont proche de zéro.
Par contre il y a les cartes Arduino qui peuvent être programmées et vous donnent accès à tout un tas de capteurs de l’environnement extérieur.

Armé d’une bonne dose de motivation j’achète le Arduino Starter Kit et quelques composants non inclus chez Arobose.

Voici la première version, les composants sont les suivants :

  • Arduino Uno rev 3
  • Capteur de distance par ultrasons URM 37 V3.2
  • 3 LEDs rouge, jaune, verte, avec des résistances 1kOhm pour pas les cramer
  • Platine de montage


Sensor_bb

 
 

Le fonctionnement de cette version 0.1 est simple.
Si une présence est détectée à plus de 1.5 m la LED verte s’allume.
Si une présence est détectée à moins de 1.5 m la LED jaune s’allume.
Si une présence est détectée à moins de 1 m la LED rouge s’allume.

Pour le code le voici :

// # Author  : Hugues Lepesant
// # Date    : 11/04/2013
// # Version : 0.1

// # URM Code based on Jiang's work from DFRobot
// # Product name:ultrasonic scanner Kit
// # Product SKU:SEN0001
 
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
 
// # Connection:
// #       Pin 1 VCC (URM V3.2) -&gt; VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -&gt; GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -&gt; Pin 3 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -&gt; Pin 5 (Arduino)
// # Pin mode: PWM
// # Working Mode: PWM passive control mode.
// # If it is your first time to use it,please make sure the two jumpers to the right hand
// # side of the device are set to TTL mode. You'll also find a secondary jumper on
// # the left hand side, you must break this connection or you may damage your device.
 
int URPWM=3;        // PWM Output 0-25000us,every 50us represent 1cm
int URTRIG=5;       // PWM trigger pin

int pinGreen = 2;
int pinYellow = 6;
int pinRed = 7;

int distMinimum = 100; // 100 cm
int distMedium = 150;  // 150 cm

boolean up=true;       // create a boolean variable
unsigned long time;    // create a time variable
unsigned long urmTimer = 0; // timer for managing the sensor reading flash rate
 
unsigned int Distance=0;

uint8_t EnPwmCmd[4]={0x44,0x22,0xbb,0x01}; // distance measure command
 
void setup() {             // Serial initialization
    Serial.begin(9600);    // Sets the baud rate to 9600

    pinMode(pinGreen, OUTPUT);
    digitalWrite(pinGreen, LOW);
    
    pinMode(pinYellow, OUTPUT);
    digitalWrite(pinYellow, LOW);
    
    pinMode(pinRed, OUTPUT);
    digitalWrite(pinRed, LOW);

    PWM_Mode_Setup();
}
 
void loop() {
  Distance = PWM_Mode();
  Serial.print("Distance = ");
  Serial.print(Distance);
  Serial.println(" cm");
  
  if ( Distance &gt; distMedium ) {
    digitalWrite(pinGreen, HIGH);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, LOW);
  }

  if ( Distance &gt; distMinimum &amp;&amp; Distance &lt; distMedium ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, HIGH);
    digitalWrite(pinRed, LOW);
  }

  if ( Distance &lt; distMinimum ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, HIGH);
  }
  
  delay(2000);
}

 
void PWM_Mode_Setup(){
    pinMode(URTRIG,OUTPUT);       // A low pull on pin COMP/TRIG
    digitalWrite(URTRIG,HIGH);    // Set to HIGH
 
    pinMode(URPWM, INPUT);        // Sending Enable PWM mode command
    
    for (int i=0;i&lt;4;i++) {
        Serial.write(EnPwmCmd[i]);
    }
}
 
int PWM_Mode(){                   // a low pull on pin COMP/TRIG  triggering a sensor reading
    digitalWrite(URTRIG, LOW);
    digitalWrite(URTRIG, HIGH);   // reading Pin PWM will output pulses
     
    unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
     
    if (DistanceMeasured==50000) { // the reading is invalid.
      return 0;
    } else {
        return DistanceMeasured/50; // every 50us low level stands for 1cm
    }
}

La roadmap du projet est la suivante :

Version 0.2 :
Un signal sonore (façon « dernière sommation ») est joué.

Version 0.3 :
Après la sommation, la télé est éteinte.

Version 0.4 :
Si aucune présence n’est détectée à moins de 1.5 m pendant 10 secondes la télé est rallumée.

Version 0.5 :
Pouvoir programmer le code d’extinction de la télé avec la télécommande de celle-ci.

Version 0.6 :
Réalisation d’un boitier pour placer le NoNoseOnTV sous la télé.

Version 0.7 :
Réalisation d’un PCB.

Version 0.8 :
Réalisation d’un boitier pour une diffusion en masse.

Version 0.9 :
Vendre le truc à Sony, Samsung, Toshiba, Philips,

Version 1.0 :
Aller se coucher ou partir en vacances.

Blog zero Carbone

Parce que derrière chaque blog, il y a un serveur qui consomme de l’électricité. A défaut de faire autrement, l’initiative « Blog Zéro Carbone » nous lave un peu la conscience.

Vous aussi, prenez part au mouvement !

En participant à l’initiative Blog zéro Carbone vous pouvez les aider à protéger l’environnement. Pour participer, c’est très simple : voici comment faire, en trois étapes !

  1. Un petit badge sur une page (le mieux étant dans la barre de navigation de gauche, pour que le badge soit visible sur toutes les pages), et
  2. un petit article pour expliquer votre démarche, et voilà votre Blog zéro Carbone.
  3. Envoyez nous ensuite un lien vers votre blog à blog-zerocarbone@bonial.fr et ils se chargeront, avec leur partenaire, de planter votre arbre. Celui-ci compensera tout au long de sa vie les émissions de CO2 dérivant de votre blog.

C’est simple !

Tips en tout genre

Sendmail :

echo '3,0 peter@imap.local' | sendmail -d21.12 -d8.20 -d60.5 -bt

  • -d21.12 – tracking R lines processing in sendmail.cf
  • -d8.20 – tracking DNS queries
  • -d60.5 – tracking map lookups

Solaris/OpenIndiana/Nexenta : SSH mais un temps fou à répondre

Et comme c’est un Solaris, l’option « UseDNS = no » ne fonctionne pas.
L’astuce en 3 lignes :

echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
echo "LookupClientHostnames no" >> /etc/ssh/sshd_config
svcadm restart ssh


VMWare : install vmware-tool sous debian squeeze

apt-get install build-essential make linux-headers-`uname -r` -y
mount /media/cdrom0
cd /usr/local/src/
tar xfz /media/cdrom/VMwareTools-8.6.5-621624.tar.gz
sync
umount /media/cdrom0
cd vmware-tools-distrib/
./vmware-install.pl


Windows 2008 R2 : Autoriser les réponses au PING

Avec du PowerShell, parce que quand même faudrait voire à pas déconner de trop quand même…

netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow

Et quand ça passe pas (version antèrieur) :

netsh firewall set icmpsetting 8


Network Manager : Démarrer un VPN en cli

Identification du VPN
nmcli connection

Lancement du VPN
nmcli --ask connection up id <VPN_ID>