Eteindre son ESXI avec un onduleur USB

Bon, vous n’êtes pas sans savoir (si vous fouillez sur ce blog) que j’ai 2 ESXI qui font tourner un vingtaine de machine.
Elles sont toutes sauvegardées grâce à VEEAM (dont j’ai déjà parlé).
Les sauvegardes sont sur un NAS Synology vi un partage NFS.
Les sauvegardes sont régulièrement copiées sur un disque qui n’est pas chez moi.
Oui, je sais … on est jamais trop prudent !

MAIS quid de l’énergie électrique qui alimente tout ça ?
Forcément, pour assurer une certaine robustesse à l’ensemble, je me suis motivé pour acheter un UPS (un onduleur quoi) en USB.
Quelle erreur … sans carte réseau sur l’engin autant dire impossible de gérer les ESXI pour qu’ils s’éteignent normalement via un message de l’onduleur.
Mais ça c’était avant 😉

Il y a une petite méthode qui fonctionne pas mal.

Installation de CENTOS

Déjà, un petit téléchargement de CENTos.
Il faut créer une VM avec CENTos dessus et surtout pour la partie réseau ne pas oublier d’activer le DHCP sur eth0 (perso, je me suis fait avoir et j’ai oublié).
Au pire en post-install, via la console VMware :
Editer : /etc/sysconfig/network-scripts/ifcfg-eth0
Changer : set onboot to yes reboot
un yum upgrade
Puis vous accrocher via vsphere l’onduleur UPS en USB.
Un coup de yum install usbutils

Installation de APCUPSD

Ajout du repo epel :
rpm -Uvh http://ftp.osuosl.org/pub/fedora-epel/6/i386/epel-release-6-7.noarch.rpm
Un coup de :
yum install apcupsd
chkconfig apcupsd on
edit /etc/apcupsd/apcupsd.conf

Il faut alors modifier :
• UPSNAME – on choisit un nom – UPSNAME myups01
• UPSCABLE – usb – UPSCABLE usb
• UPSTYPE – usb – UPSTYPE usb
• DEVICE – on touche pas – DEVICE
service apcupsd start

On teste avec : apcaccess qui doit remonter des informations sur l’UPS (genre voltage, minutes restentes, etc …)

Installation des VMware TOOLS

Il est très important de les installer.
Via le menu vsphere Vm -> Guest -> Install Tools (mon Vsphere est en anglais).
• yum install gcc kernel-devel
• mount /dev/cdrom /mnt
• cp /mnt/VMwareTools* /tmp
• cd /tmp
• tar xzvf VMWareTools…
• cd vmware-tools-distrib
• ./vmware-install.pl
On reboot la VM et normalement les outils sont vu comme installés dans vsphere.

Installation du serveur web UPS

Ça fait un petit plus pour voir en GUI ce qui se passe sur l’UPS.
• yum install apcupsd-cgi
• chkconfig httpd on
• service httpd start
• edit /etc/sysconfig/iptables (ajouté une ligne pour autoriser le port 80 – je copie la ligne ssh/22. Oui je suis une fainéant je sais.)
• service iptables restart
• edit /etc/httpd/conf.d/apcupsd.conf (commenter avec # Allow from lines et add Allow from all)
• service httpd reload

Naviguer avec une autre machine sur l’IP du CENTos
http://x.x.x.x/apcupsd

Autoriser l’accès SSH par certificat sans mot-de-passe

Il faut se loguer en SSH sur le centOS (pas besoin de détailler ça.. hein ?)

On commence par générer une clée
ssh-keygen -t rsa -b 4096 -C [email protected]
à la génération ne tapez surtout aucune mot de passe sinon aucun intérêt !

Puis on copie vers l’ESXI (dont le SSH doit évidemment être activé et surtout activé au reboot machine)
cat ~/.ssh/id_rsa.pub | ssh [email protected] ‘cat >> .ssh/authorized_keys’

Et on finit par du chmod:
chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Si tout a bien fonctionné, lorsque vous etes en console SSH sur le CENTos et que vous tapez :
ssh [email protected] « ls »

La commande LS s’exécute sans demande de password et renvoi le contenu du répertoire.

Paramétrage de l’extinction des machines

Je résume.
Votre UPS fonctionne en USB et est raccordé à la machine CENTOS.
Cette machine fait tourner APCUPSD et peut se connecter en SSH vers l’ESXI sans mot de passe grâce à un certificat.
Pour fermer les ESXI en cas de panne de courant. Il y a plusieurs méthodes. Perso je préfère un custom-script que le sh stop && shutdown.

Il faut modifier la ligne shutdown –h pour ajouter ssh [email protected] « disque/scripts/shutdown-all-vms.sh »
Disque étant un emplacement de disque dans l’ESXI (il suffit de copier un chemin accessible).

D’abord connectez vous en SSH sur l’ESXI.
Puis listez les VM :
vim-cmd vmsvc/getallvms

Après il faut écrire dans shutdown-all-vms.sh le script suivant : (le numéro après le # est ici fictif. Vous le récupérez de la commande juste au dessus)

#!/bin/sh
#Vmid Name File Guest OS Version Annotation
#156 nomdevm1
#157 nomdevm3

# shutdown VM in order
echo « Shutting down on essential… »
vim-cmd vmsvc/power.shutdown 157
vim-cmd vmsvc/power.shutdown 156

# leave the ups station running to continue exeuting this script

# sleep for X to ensure everything shutdown
echo « Sleeping for 180 seconds… »
sleep 180s

# shutdown the esx server
echo « Shutting down self… »
poweroff
Voila … tout le monde se ferme et l’ESXI en se fermant va couper correctement la VM CENTos si vous l’avez réglé dans vSphere :
HOST -> configuration -> virtual machine startup/shutdown -> Propertie -> allow VM to startup and shutdown with system
Dernier conseil.
Il faut branchez sur l’UPS : le ou les switch (sinon pas de communication réseau). Il faut ajouter dans le script de l’HOST la fermeture du NAS (et brancher le NAS sur l’UPS).

 

Newznab … un bon exercice de service : Installation

La suite du billet : Newznab … un bon exercice de service : Préparation du LAMP

Il s’agit maintenant d’installer proprement dit … NEWZNAB.

Le set de script est gratuit mais le service est payant (10$ une seule fois) pour que le serveur indexe.
(Il y a NZEDB qui lui est gratuit est pas mal du tout non plus).

On commence par ca:

mkdir -p /var/www/newznab chmod 777 /var/www/newznab
mkdir -p /var/www/newznab
chmod 777 /var/www/newznab

On installe les dépendances (dont certaines sont déjà dans le Turnkey … s’pas grave, on est certain de tout avoir du coup):

apt-get install -y php5 php5-dev php-pear php5-gd php5-mysql php5-curl
apt-get install -y lame
apt-get install -y unrar-free
apt-get install -y ffmpeg
apt-get install -y python-software-properties
apt-get install -y mediainfo
apt-get install -y subversion

 

Dans /etc/php5/apache2/php.ini  et /etc/php5/cli/php.ini

il faut changer ou ajouter ces éléments

register_globals = Off
max_execution_time = 120
memory_limit = 512MB
ou  memory_limit =  -1
date.timezone = Europe/Paris

On fait la petite manip suivante:

a2dissite default
a2ensite newznab
a2enmod rewrite

Petit redemarrage d’Apache:

/etc/init.d/apache2 restart
et on regarde dans son navigateur si le site mondomaine.com/phpinfo.php n’a pas eu de vapeur ….
MySQL est bon il fonctionne
Apache écoute en 8080
Nginx en 80 et va dans le répertoire var/www/newnzab
Jusqu’ici tout va bien !

On installe svn (subversion pour les intimes)

apt-get install subversion
Puis:
svn co svn://svn.newznab.com/nn/branches/nnplus /var/www/newznab

(les codes sont login:SVNPLUS et Password:SVNPLU5)

Après, c’est le drame 😉

chmod 777 /var/www/newznab/www/lib/smarty/templates_c
chmod 777 /var/www/newznab/www/covers/anime
chmod 777 /var/www/newznab/www/covers/console
chmod 777 /var/www/newznab/www/covers/movies
chmod 777 /var/www/newznab/www/covers/console
chmod 777 /var/www/newznab/www/covers/music
chmod 777 /var/www/newznab/www
chmod 777 /var/www/newznab/www/install
chmod 777 /var/www/newznab/nzbfiles/
chmod 777 /var/www/newznab/nzbfiles/
L’installation de NEWZNAB est terminé il faut passer au paramétrage qui ne necessite plus de tuto 🙂
http://localhost/newznab/www/install

Il reste une dernière difficulté. Faire démarrer les scripts avec le Turnkey:

Dans /etc/init.d , il faut faire un joli fichier newznabstart qui contient ça:

 ### BEGIN INIT INFO
# Provides:          newznab
# Required-Start:    
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: newznab plus update scripts.
# Description:       This script runs the scripts that periodically
#                    update the newznab indices.
### END INIT INFO
sleep 60
[ -c /dev/urandom ] || exit 0

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh

. /lib/lsb/init-functions

case "$1" in
  start)
        sudo -u nzb /usr/bin/screen -d -m -S newznab sh /var/www/newznab/misc/update_scripts/cron_scripts/newznab_screen_local.sh
    ;;
  stop)
        sudo -u nzb /usr/bin/screen -X -S newznab quit
    ;;
  status)
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  *)
    echo "Usage: nnplus [start|stop]" >&2
    exit 3
    ;;
esac

 

Et zou c’est parti !

Newznab … un bon exercice de service : Préparation du LAMP

OHhh la on s’attaque à du dur …

Petit récapitulatif sur les newsgroups : Usenet est un système en réseau de forums, inventé en 1979. En gros, ça date d’avant les inter-tubes. 😉

Normalement, ça sert donc à faire un forum. Mais Usenet semble connaitre un regain d’intérêt : avec l’HADOPI2, les systèmes d’échanges P2P étant surveillés, de nouvelles méthodes de téléchargement sont recherchées, et le réseau Usenet (principalement binaire) est de plus en plus fréquenté pour sa haute vitesse de téléchargement, la richesse des contenus et le respect de la neutralité du réseau4. (Wikipedia).

Donc il faut un fournisseur de newsgroup. Vous pouvez oublier votre FAI. « Hadopi c’est fini, c’était la ville de notre dernieeeeer amour ».
Par exemple, Giganews. Il est cher certes mais il offre plusieurs années de rétention, des VPN qui sortent sur la terre entière (qui a dit Netflix ? qu’il se dénonce !) et puis de la vitesse surtout avec un serveur Européen.

Après il faut trouver des fichiers à télécharger. C’est là que Newznab entre en jeu. C’est un peu le google des newsgroup. Un moteur de recherche qui va regarder des groups et en tirer les « releases ».

C’est bien expliqué ici chez Korben.

 

On commence avec Turnkey LAMP que l’on bidouille comme vu sur ce billet : Les Turnkeys de mon Labo

 

On va juste ajouter PHP en fast CGI sur Apache :

apt-get install apache2-mpm-worker libapache2-mod-fastcgi php5-fpm php-apc

Il faut valider MPM worker pour Apache.

a2enmod actions alias fastcgi rewrite

On edite /etc/apache2/conf.d/php5-fpm

# Configure all that stuff needed for using PHP-FPM as FastCGI
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
# application/x-httpd-php-source                 phps
<FilesMatch ".+\.phps$">
    SetHandler application/x-httpd-php-source
    # Deny access to raw php sources by default
    # To re-enable it's recommended to enable access to the files
    # only in specific virtual host or directory
    Order Deny,Allow
    Deny from all
</FilesMatch>
 # Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>
 # Define Action and Alias needed for FastCGI external server.
Action application/x-httpd-php /fcgi-bin/php5-fpm virtual
Alias /fcgi-bin/php5-fpm /fcgi-bin-php5-fpm
<Location /fcgi-bin/php5-fpm>
  # here we prevent direct access to this Location url,
  # env=REDIRECT_STATUS will let us use this fcgi-bin url
  # only after an internal redirect (by Action upper)
  Order Deny,Allow
  Deny from All
  Allow from env=REDIRECT_STATUS
</Location>
FastCgiExternalServer /fcgi-bin-php5-fpm -socket /var/run/php5-fpm.sock -idle-timeout 250 -pass-header Authorization

 

On édite /etc/php5/fpm/php-fpm.conf


emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s

 

On édite /etc/php5/fpm/pool.d/www.con

 

pm = dynamic
pm.max_children = 100
pm.start_servers = 25
pm.min_spare_servers = 25
pm.max_spare_servers = 50
pm.max_requests = 500

 

Et on relance PHP-FPM :

/etc/init.d/php5-fpm reload

 

Petite bidouille d’Apache dans  /etc/apache2/conf.d/security :

 

ServerTokens Prod
ServerSignature Off
TraceEnable Off

 

Un petit reload d’Apache:

/etc/init.d/apache2 reload


Et perso je reboot:

Sudo reboot

 

Théoriquement au reboot si vous avez un phpinfo.php dans var/www, vous devez voir fast-cgi comme handler.

On est bon donc : Apache en port 8080, NGINX en port 80 et du fast-cgi avec APC.
Sauf que Nginx a besoin d’etre un peu modifier pour supporter Newznab.

Dans /etc/nginx/sites-available on va créer un fichier newznab :

 server {
    listen 80;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    root /var/www/newznab/www/;
    index index.html index.htm index.php;
    server_name mondomaine.com;
         location ~* \.(?:ico|css|js|gif|inc|txt|gz|xml|png|jpe?g) {
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";    }
         location /admin { }
        location /install { }
         location ~ \.php$ {   
         proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8080;
         }
         location / { try_files $uri $uri/ @rewrites; }
        location @rewrites {
            rewrite ^/([^/\.]+)/([^/]+)/([^/]+)/? /index.php?page=$1&id=$2&subpage=$3 last;
            rewrite ^/([^/\.]+)/([^/]+)/?$ /index.php?page=$1&id=$2 last;
            rewrite ^/([^/\.]+)/?$ /index.php?page=$1 last;
    }
          location ~ /\.ht {
                deny all;
        }
}

 

Et aussi une petite modif dans /etc/nginx/nginx.conf

user www-data;
worker_processes  1;
 error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 events {
    worker_connections  1024;
}
 http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
     access_log  /var/log/nginx/access.log  main;
     sendfile        on;
    #tcp_nopush     on;
     keepalive_timeout  65;
     #gzip  on;
     include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

 

 

(A SUIVRE)

Les Turnkeys de mon Labo …

Alors un turnkey, c’est assez simple. C’est soit une image ISO (un CD mais sous forme de fichier à telecharger) soit carrement une machine virtuelle. Dans les deux cas, tout est pré-installé pour par exemple (c’est ce que j’utilise le plus un serveur Linux Apache MySQL PHP ou LAMP).

Au final, je ne configure plus de serveur LAMP je déploie des ISO.
Evidemment, cela va plus vite mais …. Pas toujours (par exemple si vous voulez ajouter des éléments NGINX pour ne pas le nommer, la version est un peu vieille).

Dans mon labcav, j’ai plusieurs LAMP : un lamp multi-site, un observium et un newznab.

Le LAMP multisite : il contient Fever (un agrégateur RSS qui peut classer les informations par importance. Une information qui se répète est une information plutôt importante. Il  contient aussi TTRSS qui fait la meme chose mais en plus classique façon Feedly. Il y a aussi pocket qui est un read-it-later like (je stocke une information généralement de flux RSS pour la lire plus tard).

LAMP Observium : j’avoue ce dernier est tout fait. Il sert a fabriquer une carte d’administration de machine qui renvoi les informations SNMP. En gros, c’est un indicateur de supervision de mon LabCave.

LAMP Newznab : Vaste sujet, je ferais un billet rien que sur ce Turnkey.

 

Tout ça est bien beau MAIS sorti du LAMP, il y a deux chose dont j’ai besoin : APC cache et NGINX.
Tous les LAMP déployés viennent avec Xcache qui est mieux que rien … c’est sûr.
Personnellement, je préfère APC cache qui est plus efficace et surtout qui a un joli panneau de supervision.

Il faut donc installer tout ça sur chacun des LAMP. Pour se faire, j’aime utiliser PuTTY et WinSCP le tout sous un windows par exemple en RDP 😉

Apt-get update && apt-get install php-apc

ET CA NE FONCTIONNE PAS. Forcément, le système cherche Xcache qui a été effacé par l’installation d’APC.
Il suffit d’aller ici :
/etc/php5/conf.d

Et de supprimer le 20-xcache.ini

Et petit redemarrage d’Apache …
sudo service apache2 restart

(si sudo n’est pas présent … ce qui est le cas dans un Turnkey : apt-get install sudo)

Voilà, APC fonctionne et il suffit de mettre le apc.php dans var/www pour avoir le panneau de supervision APC.

NGINX c’est un peu plus compliqué (surtout sur Newznab mais on verra ca ultérieurement). Alors en gros, NGINX c’est un serveur web comme Apache sauf qu’il va super mais alors super vite (ce que doit faire Apache 2.4 aussi d’ailleurs).

D’abord, il faut qu’Apache cesse d’écouter sur le port 80 (bah oui c’est NGINX qui va ecouter les demandes à sa place).

On édite :
/etc/apache2/ports.conf

On change le :
Listen 80 En Listen 8080

Après, petite installation de NGINX (s’pas difficile et c’est lui qui va piquer le port 80) :

sudo apt-get install nginx

Normalement dans /etc/nginx/ , il y a sites-available et sites-enabled. Si ce n’est pas le cas, il faut juste les créer.

Dans sites-available, je créer un fichier LAMP (super original).

Qui contient ça :

server {
listen   80;
root /var/www/;
index index.php index.html index.htm;
server_name mydomain.com;

         location / {
try_files $uri $uri/ /index.php;
}

         location ~ \.php$ {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}

          location ~ /\.ht {
deny all;
}
}

Après un petit coup de :
sudo ln -s /etc/nginx/sites-available/LAMP /etc/nginx/sites-enabled/LAMP

En gros, j’active avec cette commande le fichier de config qui ecoute en 80 et qui sert du PHP qu’il va chercher en boucle locale sur le port 8080 … le port HTTP d’Apache. Et la boucle est bouclée.

On supprime le site par défaut de NGINX :
sudo rm /etc/nginx/sites-enabled/default

On redémarre tout ca :
sudo service apache2 restart && sudo service nginx restart

Et si ça ne fonctionne pas on redémarre tout le serveur.

Voila, vous avez un serveur qui sert du PHP sur Apache avec le cache APC et accéléré par NGINX. C’est-à-dire le pas loin du fin du fin en matière de serveur WEB PHP.

Je n’ai pas ajouté PHP Fast-CGI (qui accélère de beaucoup le traitement PHP) parce que Fever ne le supporte pas et qu’Observium n’en a pas besoin. Mais ce sera dans le billet sur NewzNAB.