Google Cloud Functions : Présentation

Google Cloud Functions

Google Cloud Functions est le dernier service ajouté sur la plateforme Google Cloud. Ce nouveau service permet de déclencher des petites actions en fonction d’évènements. Ces évènements peuvent venir du Google Cloud Storage, du Google Cloud Pub/Sub en mode asynchrone  ou par un appel HTTP de manière synchrone.

Ces fonctions seront écrites en Javascript car elles seront exécutées sur du Node.js de l’environnement Google Cloud Plateform.

Les évènements sont des « choses » qui se passent dans votre cloud, par exemple un upload sur le storage, une nouvelle instance … On choisit donc de répondre ou non à ces évènements. Les réponses sont faites à l’aide de « Trigger » qui vont capturer l’évènement et le transformer en action. Votre cloud functions seront donc du code  exécuté à la suite de ces « Trigger » .

On peut imaginer plusieurs cas pratiques comme par exemple faire des vignettes d’une image uploadée sur le Cloud Storage, modifier la base de données suite à un message sur le Cloud Pub/Sub.

Cette nouvelle offre ressemble beaucoup à l’offre d’AWS Lambda ou encore à celle de Microsoft Azure WebJobs.

Attention ! Cette nouvelle offre est pour le moment en version Alpha et n’est couverte par aucune SLA. Pour le moment ce nouveau service n’est disponible uniquement sur demande d’activation.

Linux: augmenter la taille de la swap

taille swap

Il peut arriver que la taille de la swap soit rapidement pleine.
Ce n’est généralement pas la meilleur idée que d’utiliser la swap mais dans le cas où l’on a pas le choix, il peut être intéressant de savoir l’augmenter.

1. Création d’un fichier

Pour créer ce fichier d’échange, il va falloir utiliser la commande dd pour convertir et copier des volumes de données.
Ensuite on va créer le fichier file.swap d’une taille de 512Mo à l’aide de la commande suivante:

dd if=/dev/zero of=/file.swap bs=1024 count=512000

Explication : la commande dd crée et copie des zéros dans le fichier file.swap contenant 512000 blocs de 1024 octets chacun,
soit un fichier approximatif de 512 Mo (voir 524 Mo).

2. Création du système de fichier

On utilise à présent « mkswap » pour formater le fichier en tant qu’espace d’échange ou de « swap ».

mkswap /file.swap 512000

Il ne faut pas oublier de passer la taille du fichier à la commande mkswap, de la même taille que celle définie lors de la création du fichier.

3. Activation ou désactivation du fichier d’échange à la volée

Activation de la partition de swap qui s’ajoute à l’existante si elle existe.

swapon /file.swap

la commande « more /proc/swaps » vue plus haut devrait vous montrer le nouvel espace de swap nommé file.swap.

Désactivation de la partition swap.

 swapoff /file.swap

4. Montage définitif de la partition swap

Pour ce la il faut éditer le fichier /etc/fstab et ajouter la ligne suivante:

/file.swap none swap sw 0 0

Centos 7 : Changer le nom du serveur / hostname

centos hostname

Il existe plusieurs méthodes pour changer le nom du serveur sur Centos7 mais l’utilisation de hostnamectl a le mérite d’être rapide et efficace.

On vérifie l’actuel nom :

# hostnamectl status
 Static hostname: serveur.cloud-devops.fr
 Icon name: computer-container
 Chassis: container
 Machine ID: 936a948dfe914bcf821f758a558efce0
 Boot ID: ccf4883b8b594680879a15ad132c7b1b
 Virtualization: openvz
 Operating System: CentOS Linux 7 (Core)
 CPE OS Name: cpe:/o:centos:centos:7

Et pour changer le nom :

# hostnamectl set-hostname nouveaunom.cloud-devops.fr

Et l’on vérifie :

# hostnamectl status
 Static hostname: nouveaunom.cloud-devops.fr
 Icon name: computer-container
 Chassis: container
 Machine ID: 936a948dfe914bcf821f758a558efce0
 Boot ID: ccf4883b8b594680879a15ad132c7b1b
 Virtualization: openvz
 Operating System: CentOS Linux 7 (Core)
 CPE OS Name: cpe:/o:centos:centos:7

Openbsd: redémarrer une interface réseau

openbsd

Comment redémarrer le service réseau sur un système OpenBSD ?

Supposons que l’on vient de modifier notre interface em0 via le fichier /etc/hostname.em0.  Comment prendre en compte nos modifications ?

1. via /etc/netstart

sh /etc/netstart em

La deuxième astuce consiste à désactiver l’interface puis de la réactiver

2. via ifconfig

ifconfig em0 down
ifconfig em0 up

rpmdb: Lock table is out of available locker entries

rpm-lock

Cette semaine, j’ai recu un mail de cron de l’un de mes serveurs.

Subject: Cron <root@SERVERNAME>
run-parts /etc/cron.weekly
/etc/cron.weekly/makewhatis.cron:
rpmdb: Lock table is out of available locker entries
rpmdb: Unknown locker ID: b4a0
error: db4 error(22) from db->close: Invalid argument
error: cannot open Pubkeys index using db3 - Cannot allocate memory (12)
..

Il y avait au moins plus de 100 erreurs dans ce mail… Après une petite recherche sur google, je me suis rendu compte que le problème datait d’au moins 6 mois.

Voici la méthode pour réparer :

# tar cvzf rpmdb-backup.tar.gz /var/lib/rpm
# rm /var/lib/rpm/__db.00*
# rpm --rebuilddb
# rpm -qa | sort # pour vérifier que tout fonctionne

Après tout ca, je voulais vérifier que la tache cron fonctionnait.

# sh /etc/cron.weekly/makewhatis.cron

Voilà !

PHP: cacher la version dans les headers

php header
Comme pour Nginx, il peut aussi être intéressant de vouloir cacher la version de php dans les headers http de notre site web.

Par défaut la version est renvoyé dans les headers http. Ce qui peut donner ceci :

$ curl -I https://www.cloud-devops.fr/
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 05 Feb 2016 21:04:09 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.3

Pour ne plus afficher le X-Powered-By: PHP il suffit d’ouvrir le fichier /etc/php.ini
et de passer la variable expose_php à off

expose_php = Off

Si vous utilisez ph-fpm il faut relancer le service.

service php-fpm restart

On test que cela fonctionne :

$ curl -I https://www.cloud-devops.fr/
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 05 Feb 2016 21:04:09 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding

Il n’y a plus rien qui s’affiche cela fonctionne correctement !

Linux raid : mismatch_cnt is not 0 on /dev/md

Linux raid mismatch_cnt

Sur centos / RHEL :

le cron weekly lance ceci :

run-parts /etc/cron.weekly

ce qui produit de temps en temps l’erreur suivante :

/etc/cron.weekly/99-raid-check:
WARNING: mismatch_cnt is not 0 on /dev/md2

Cela provient du fait qu’il y a des blocs non synchronisés.
Pour le réparer il faut lancer en root :

echo repair >/sys/block/mdX/md/sync_action

attendre que sync_action revienne à idle puis

echo check >/sys/block/mdX/md/sync_action

Le prochain cron ne généra plus d’erreurs.

Iptables : Filtrer ftp avec le mode ip_conntrack

iptables ftp

Les services FTP ont toujours été difficile à filter.
Tout ceci à cause des modes ftp (actif / passif) qui change la donne.
Voici quelques explications :

1 -Les modes ftp :

Mode actif :

C’est le mode par défaut des clients FTP. Le client établi dans un premier temps une session TCP sur le port 21 (FTP) du serveur (« control channel »).
Une fois la session établie et l’authentification FTP acceptée, c’est le serveur qui établi une session TCP (avec le port source 20, FTP-DATA) vers un port dynamique du client (« data channel »).

Mode passif :
Le mode passif est conseillé à partir du moment où l’on est derrière un pare-feu.
Comme pour le FTP actif, le client établi une première session TCP sur le port 21 (FTP) du serveur (« control channel »). Une fois la session établie et l’authentification FTP acceptée,
On demande au serveur de se mettre en attente de session TCP grâce à la commande PASV. Alors le client peut établir une seconde session TCP sur un port dynamique vers le serveur (« data channel »).

2 – Les règles iptables pour le ftp

il faut d’abord charger le module ip_conntrack_ftp ( pour suivre les connexions ftp).

 modprobe ip_conntrack_ftp

Ensuite la commande suivantes pour que la connexion puisse s’établir :

iptables -A INPUT -i eth0 -p tcp \--sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp \--sport 21 -m state --state ESTABLISHED -j ACCEPT

Ensuite, c’est la que l’on a besoin de ip_conntrack_ftp, pour que le serveur puisse établir la connexion pour les données ( en mode actif).

iptables -A INPUT -i eth0 -p tcp \--sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp \--sport 20 -m state --state ESTABLISHED -j ACCEPT

Pour que le serveur puisse établir la connexion pour les données (en mode passif) ici le mode ip_conntrack_ftp est nécessaire.

iptables -A INPUT -i eth0 -p tcp \--sport 1024:65535 --dport 1024:65535 -m state ESTABLISHED -j ACCEPT
iptables -A OUTOUT -o eth0 -p tcp \--sport 1024:65535 --dport 1024:65535 -m state ESTABLISHED,RELATED -j ACCEPT

Voilà !