bmc_bem

#BMC Patrol

1
phmColl -s tcp:<RTPRIMIARE>:<PORT> -c getReport | sed 's/^[ \t]*//;s/[ \t]*$//' | sed -n '/\(Agents:\)/,/\Agents:/p'
1
2
3
4
5
6
7
mquery -q -d -n $MCELL -f CSV -a MAINTENANCE -w "hostname: == $serveur"```

```bash
mquery -q -d -n $MCELL -f XML -a MAINTENANCE -s "mc_creation_time,maintenance,hostname,time_min,time_max,days_list,commentaire"```

```bash
mquery -n $MCELL -q -f CSV -s "edf_1_organisation,edf_1_application,msg" -w "CLASS: equals PATROL_EV AND mc_arrival_time: greater_or_equals $START_DATE AND mc_arrival_time: smaller_or_equals $END_DATE AND mc_parameter: contains Blackout"
1
2
ddelete " $1"; END
mposter -q -n $MCELL -d fichier.baroc
1
echo "$DDA; data_handle=$DEF_ID;hostname=$Hostname; organisation=$Organisation; application=$Appli ; plage_dispo=$Dispo; commentaire=$NNI-$Comment;environnement=$Env ;END"| mposter -q -n $MCELL -d -

Test de GlusterFS

Présentation

C’est un outil de file system distribué qui se situe au dessus de la couche FS. A ne pas confondre avec les FS partagés tels que GFS2 ou ocfs2 par exemple. Ici un FS distribué serat en XFS, ext3, …
Il permet de faire de la concaténation ou du réplica entre des FS de plusieurs serveurs. Et gére les accés clients concurents.

Mise en place

J’ai mis en place deux VM qui serviront de serveur de fichiers: node1 et node2

Installation du cluster

  • Packages à installer:
    • serveurs
      via yum il suffit d’installer
      1
      2
      yum install glusterfs{-fuse,-server}
      service glusterd start
    • clients:
      1
      yum install glusterfs-fuse
  • Mise en place du cluster
    A cette étape glusterfsd tourne sur chaque serveur. Maintenant il les faut les associer en cluster:
1
2
3
4
5
6
# Attacher une machine au pool de stockage (a faire sur les 2)
gluster peer probe node1
gluster peer probe node2

# Afficher les machines reconnus sur le cluster
gluster peer status

ATTENTION: pour que cela marche il faut bien sur désactiver le firewall ou ouvrir les ports utilisés par gluster fs. Sinon “gluster peer probe” retournerat ue impossibilité de se connecter au noeux.

Création d’un volume partagé

Glusterfs permet trois types de volume (ou une association des 3)

  • Volumes distribués: Les fichiers sont répartis aléatoirement entre chaque brique de stockage du volume.

  • Volumes repliqués: Une ou plusieurs copies des fichiers sont disponibles sur plusieurs briques du volume

  • Volumes agrégés par bande (striped): Les données sont découpées et réparties entre plusieurs briques du volume.

Pour mes besoins, je ne m’interesserait qu’aux volumes repliqués.

  • Préparation des FS:
    Il faut créer les FS à partager sur l’ensemble des noeuds
    1
    2
    3
    4
    5
    pvcreate /dev/vdb
    vgcreate node*_data /dev/vdb
    lvcreate -L 1G -n lvexport node*_data
    mkfs.ext4 /dev/mapper/node*_data-lvexport
    mkdir -p /export && mount /dev/mapper/node*_data-lvexport /export
    Création d’un volume gvol1 de type replica (2 replica):
    1
    2
    gluster volume create gvol1 replica 2 transport tcp node1.hedwy.fr:/export/ node2.hedwy.fr:/export/
    gluster volume start gvol1
    On peut ajouter des acl sur le volume pour éviter un montage par n’importe qui:
    1
    gluster volume set gvol1 auth.allow 192.168.*
    Etat de gvol1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    gluster volume info
    Volume Name: gvol1
    Type: Replicate
    Volume ID: c5111d8c-58e1-40f4-9ebc-ab362cebbfcf
    Status: Started
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: node1.hedwy.fr:/export
    Brick2: node2.hedwy.fr:/export
    Options Reconfigured:
    auth.allow: 192.168.*
  • Montage sur le client:
    1
    mount.glusterfs  192.168.100.191:/gvol1 /mnt/glusterfs
  • Note: erreur lors de la création du volume
    lors de la création glusterfsd peut se bloquer en affirmant que le FS est déja un volume glusterfs ou est contenu dans un volume alors que ce n’est pas le cas:
    1
    2
    3
    4
    setfattr -x trusted.glusterfs.volume-id /export
    setfattr -x trusted.gfid $brick_pat
    setfattr -x trusted.gfid /export
    rm /export/.glusterfsd

    Tests

    Le volume créé c’est comporté exactement comme attendu lors de mes tests:
  • Agrandissement: Aprés un agrandissement classique des deux FS /export, le volume monté à eut sa taille également augmentée
  • Ecriture:
    Ras lors de l’écriture/suppression/modification dans /mnt/glusterfs ou dans /export. Il faut juste noter que la synchro n’est réalisée qu’a partir du momment ou le volume glusterfs est monté au moins une fois (sinon les modif faites dans /export ne sont pas repercutées sur l’autre noeud).
  • Tolérance aux pannes: RAS de ce coté aussi. Tout se passe bien tant que l’on fait attention lors du redémarrage (si les deux noeuds sont HS).

Conclusions

Plutôt simple à mettre en place et à administrer (malgrés les problèmes liés aux différences de versions entre serveurs et clients). Ce n’est pourtant pas ce que je cherche.
En effet, lorsqu’un serveur est également client on se retrouve avec deux arborescence de montées.

Sources

Pour mon test j’ai utilisé ensentiellement deux tuto:
http://www.howtoforge.com/high-availability-storage-with-glusterfs-3.2.x-on-centos-6.3-automatic-file-replication-mirror-across-two-storage-servers
http://petitcodeur.fr/sysadmin/installation-glusterfs-centos.html

serveur dédié - partie 5 - sauvegarde

Malheureusement je n’ai pas de serveur de sauvegarde. La sauvegarde se fera donc en locale. Puis serat transférée régulièrement vers un DD externe via rsync

RDIIF-BACKUP

rdiff-backup permet de faire des sauvegardes incrémentales via la librsync. Et peut être utilisé en mode client/serveur, à travers un réseau via ssh.
J’ai déjà eut quelques soucis avec cet outil, notamment les différences de versions entre client et serveur. Mais dans le cas d’une sauvegarde locale, ça ne devrait pas poser de problème.
Sur une appli fortement chargée, un snapshot LVM pourrait être utilisé le temps de la sauvegarde.

L’utilisation est assez simple. Il faut juste faire attention à l’ordre des inclusions/exclusions

1
2
3
rdiff-backup  --print-statistics --terminal-verbosity 2 \
--include-globbing-filelist /exploit/etc/include-list \
--exclude / / /backup/data/ 2>&1

MySQL

Création d’un user backup

Je ne veux pas faire les sauvegardes avec le compte root mysql. On va donc créer un utilisateur et lui donner les droits nécessaires:

1
2
3
$ mysql -u root -p 
mysql> CREATE USER 'dump'@'localhost' IDENTIFIED BY 'PASSWORD';
mysql> GRANT SELECT , RELOAD, SHOW DATABASES , LOCK TABLES , SHOW VIEW ON * . * TO 'dump'@'localhost' IDENTIFIED BY 'PASSWORD';

Le reste du script est assez simple:

  • on récupére la liste des bases avec un
    1
    mysql -u $USER -p$PWD -Bse 'show databases'
  • Puis pour chaque bases on fait un
    1
    mysqldump -u $USER -p$PWD --quick --add-locks --lock-tables --extended-insert $database 2>>$LOG|gzip  > $bckp_dir/${database}.sql.gz

serveur dédié - partie 4 - Performances apache

Performances de base

Voyons ce que donne ApacheBench (package httpd-tools) avec la configuration de base:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
root@ks vhost.d$ ab -kc 10 -t 30 https://wiki.hedwy.fr/
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking wiki.hedwy.fr (be patient)
Finished 193 requests


Server Software: Apache/2.2.15
Server Hostname: wiki.hedwy.fr
Server Port: 443
SSL/TLS Protocol: TLSv1/SSLv3,DHE-RSA-AES256-SHA,1024,256

Document Path: /
Document Length: 0 bytes

Concurrency Level: 10
Time taken for tests: 30.086 seconds
Complete requests: 193
Failed requests: 0
Write errors: 0
Non-2xx responses: 193
Keep-Alive requests: 0
Total transferred: 105821 bytes
HTML transferred: 0 bytes
Requests per second: 6.41 [#/sec] (mean)
Time per request: 1558.854 [ms] (mean)
Time per request: 155.885 [ms] (mean, across all concurrent requests)
Transfer rate: 3.43 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 47 118 113.4 91 1294
Processing: 925 1395 131.1 1396 1763
Waiting: 925 1391 132.2 1391 1763
Total: 1100 1513 160.7 1505 2441

Percentage of the requests served within a certain time (ms)
50% 1505
66% 1567
75% 1601
80% 1620
90% 1671
95% 1756
98% 1911
99% 2027
100% 2441 (longest request)

J’obtient quelque chose de similaire à ma VM de dev … On doit pouvoir faire mieux.

Tuning Apache

httpd.conf

La première chose à faire est de supprimer le “HostnameLookups” et de configurer le KeepAlive

1
2
3
4
5
6
7
8
# HostnameLookups: Log the names of clients or just their IP addresses
HostnameLookups Off
# KeepAlive: Whether or not to allow persistent connections
KeepAlive On
# MaxKeepAliveRequests: The maximum number of requests to allow
MaxKeepAliveRequests 100
# KeepAliveTimeout: Number of seconds to wait for the next request from the
KeepAliveTimeout 15

La seconde est de configurer le moteur utilisé. Dans mon cas c’est prefork

1
2
3
4
5
6
7
8
< IfModule prefork.c >
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 1000
< /IfModule >

Ces modifs sont assez importantes dans le cas d’un serveur dédié à une appli et fortement utilisé. Il faut alors paramèterer ces valeurs en fonction de la quantité de mémoire du serveur, du nombre de requête, et de la mémoire prise par une requête.

Virtualhosts

C’est la partie “Directory” des virtualhost qui nous interesse.
Ici nous allons supprimer les .htaccess (AllowOverrides None) et supprimer les vérifications sur les liens symboliques (Options FollowSymLinks)

1
2
3
4
< Directory / >
AllowOverride None
Options FollowSymLinks
< /Directory >

L’ensemble des modifications apache seront prises en comptes après un restart.
Dans le cas du wiki les gains seront faibles (le .htaccess était déjà désactivé et pas de liens symboliques). Mais sur d’autres le gain a été appréciable.

Tuning système

Au niveau du sysconfig j’ai suivi les précOS trouvées sur le site d’IBM

1
2
3
4
5
6
7
8
9
10
11
12
13
root@ks $ cat /etc/sysctl.conf 
# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
# Enable TCP window scaling
net.ipv4.tcp_window_scaling = 1
# Increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Increase Linux autotuning TCP buffer limits
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Increase number of ports available
net.ipv4.ip_local_port_range = 1024 65000

cache opcode PHP

Jusqu’à présent les gains n’ont rien de spectaculaires. Et pour cause: le serveur est peu sollicitées, les appli ne sont pas bien lourdes et “ab” montre bien que c’est le traitement PHP qui ralenti les pages.

Je voulais utiliser php-eaccelerator au départ. Mais il y a un problème de dépendances dans le déport REMI. Je suis donc partis sur un des composants de pecl: APC.

1
2
root@ks $ yum --enablerepo=remi install php-pecl-apc
root@ks $service httpd restart

C’est donc un module PHP. Son fichier de conf se trouve dans /etc/php.d/apc.ini, mais je n’y ai pas touché.

Cette fois ci le gain est nettement sensible:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
root@ks $ ab -kc 10 -t 30 https://wiki.hedwy.fr/
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking wiki.hedwy.fr (be patient)
Finished 894 requests


Server Software: Apache/2.2.15
Server Hostname: wiki.hedwy.fr
Server Port: 443
SSL/TLS Protocol: TLSv1/SSLv3,DHE-RSA-AES256-SHA,1024,256

Document Path: /
Document Length: 0 bytes

Concurrency Level: 10
Time taken for tests: 30.003 seconds
Complete requests: 894
Failed requests: 0
Write errors: 0
Non-2xx responses: 894
Keep-Alive requests: 894
Total transferred: 523346 bytes
HTML transferred: 0 bytes
Requests per second: 29.80 [#/sec] (mean)
Time per request: 335.605 [ms] (mean)
Time per request: 33.561 [ms] (mean, across all concurrent requests)
Transfer rate: 17.03 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 24.5 0 302
Processing: 228 332 44.5 329 542
Waiting: 227 331 44.6 329 542
Total: 228 334 49.8 331 650

Percentage of the requests served within a certain time (ms)
50% 331
66% 351
75% 364
80% 370
90% 387
95% 407
98% 469
99% 511
100% 650 (longest request)

Note

http://blog.monitis.com/index.php/2011/07/05/25-apache-performance-tuning-tips/
http://www.ibm.com/developerworks/library/l-tune-lamp-1/index.html
http://www.ibm.com/developerworks/library/l-tune-lamp-2/index.html

serveur dédié - partie 3 - VsFTPd

Pourquoi VsFTPd?

Je ne veux pas que mes utilisateurs FTP soient des utilisateurs systèmes. Pour avoir utiliser proftpd je sais qu’il peut utiliser une base d’utilisateurs externe. Je pensais donc l’utiliser avec un serveur LDAP pour gérer les utilisateurs et les groupes.
En pratique le module LDAP est plus compliqué que prévu. Surtout vu mes besoins. De plus la plupart des tuto partent sur l’utilisation d’un LDAP avec pam et des users également système ….
Je vais donc utiliser VsFTPd avec des utilisateurs virtuels.

Pré-requis

Il faut installer vsftpd et db4-utils (pour la bd user)

Paramétrage de VsFTPD

/etc/vsftpd/vsftpd.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# Interdire les connexions anonymes au serveur
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

# Autoriser les utilisateurs locaux (obligatoire même si on ne veut que des utilisateurs virtuels)
local_enable=YES

# Autoriser les utilisateurs virtuels
guest_enable=YES
guest_username=userftp11

# Activer les droits spécifiques par utilisateur
user_config_dir=/etc/vsftpd/vsftpd_user_conf

# activation de logs
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.xfer.log
xferlog_std_format=YES
log_ftp_protocol=YES
vsftpd_log_file=/var/log/vsftpd.log

# Configuration du serveur en standalone
listen=YES
tcp_wrappers=YES
connect_from_port_20=YES
ftpd_banner= »Bienvenue sur le serveur FTP »

# Configuration de l’authentification
pam_service_name=vsftpd
userlist_enable=YES

Attribution des droits utilisateurs

Chaque utilisateur a un fichier dans /etc/vsftpd/vsftpd_user_conf définissant ses droits:
par ex:

1
2
3
cat /etc/vsftpd/vsftpd_user_conf/40k
anon_world_readable_only=NO
local_root=/data/40k

Modification de pam

Pour que PAM aille cherche les utilisateurs dans un fichier donné il faut utiliser cette conf:

/etc/pam.d/vsftpd

1
2
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/login

Création de la base de données utilisateurs

Pour peupler la base login.db, on va utilsier un fichier texte puis db_load login.txt

login.txt

1
2
3
4
user1
password1
user2
password2
1
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

Note

  • Pour activer également les comptes systèmes il faut ajouter dans lignes dans la conf pam (avant celles pour login.db):
    1
    2
    auth sufficient pam_unix.so
    account sufficient pam_unix.so
  • Attention aux deux fichiers suivant qui sont la pour autoriser/interdire un utilisateur:
    • /etc/vsftpd/ftpusers
    • /etc/vsftpd/user_list

serveur dédié - partie 2 - configuration d'Apache, MySQL et PHP

Named VirtualHosts Apache

Je ne veux pas utiliser des ports différents pour chaque applis. J’ai un nom de domaine. Autant utiliser des sous domaines

Déclaration des noms DNS

La première étape consiste à déclarer chaque sous domaine dans les DNS. OVH permettant depuis quelques temps les wildcard DNS autant en profiter et ne faire la déclaration qu’une seule fois

Modification de /etc/httpd/conf/httpd.conf

C’est le fichier de conf principal d’Apache. Sous CentOs tout se fait quasiment ici…

1
2
3
4
5
6
7
# on vérifie que l'UTF-8 est utilisé par défaut:
AddDefaultCharset UTF-8
# On déclare les named virtual host
NameVirtualHost *:80
NameVirtualHost *:443
# on utilisera un répertoire spécifique
Include conf.d/vhost.d/*.conf

Déclaration des sites

C’est la directive “ServerName” qui est importante.
Il faut juste faire attention à deux points:

  • Le premier VirtualHost déclaré serat celui utilisé par défaut. Je l’ai donc appelé “00-default.conf”
  • Le DocumentRoot doit exister et être accessible par apache ;)
    La déclaration d’un site ressemble donc à
1
2
3
4
5
< VirtualHost *:80 >
ServerName monsite.acme.com
DocumentRoot /srv/monsite
ErrorLog /var/log/httpd/error_monsite
< /VirtualHost >

MySQL

Installation classique. Le dépôt remi donne accès à la version 5.5 au lieu de la 5.1
J’ai un peu modifier /etc/my.cnf. Notamment pour modifier le stockage des bases
Une fois l’install terminée deux étapes sont nécessaires:

  • lancer /usr/bin/mysql_secure_installation
    qui va entre autre changer le mot de passe admin et supprimer les users anonymes (sinon on peut avoir des problèmes de connections)
  • Lancer MySQL automatiquement au reboot
    1
    chkconfig --levels 235 mysqld on

    PHP

    De base CentOs fournit une version de PHP qui est non maintenue et pourvue de failles de sécurités….;
    Il est nécessaire d’utiliser une source externe pour avoir des packages plus récents.
    J’ai donc utilisé le dépôt REMI

serveur dédié - partie 1 - commande et réception

Prendre un dédié

Vu l’augmentation de 1&1 et les nouvelles offres kimsufi d’ovh je me suis décidé à passer le pas et à avoir mon propre dédié

  • Avantages:
    • J’ai les version de php, ruby, tomcat… que je veux
    • Je peux avoir autre chose que des services web (openvpn)
  • Inconvénients:
    • Je dois tout paramétrer et sécuriser

Quelle offre choisir?

Au départ deux KS 2G me semblaient être une bonne idée. Ça fait une puissance correcte pour ce que je veux faire. Et avec deux fois 500G de DD je peux faire du backup (pourquoi pas avec DRBD, vu l’utilisation du dédié ce ne sera pas la bande passante le facteur limittant)
Bon … au momment de passer commande ils passent “sold out”. Et vu le forum de toute façons il m’aurait fallut 2 mois pour être livré. Ce n’était pas prévu, mais un KS 4G fera l’affaire (pour le même tarif que mon mutualisé actuel)

Réception du serveur

Matériel

Les spécif du serveur ayant changé depuis ma commande (j’avais 2 cores de garanti, ce qui n’est plus le cas). J’avais un peu peur:

  • Nb de cores:
    1
    2
    3
    4
    5
    [root@ks ~]$ cat /proc/cpuinfo|grep "core id"
    core id : 0
    core id : 0
    core id : 1
    core id : 1
    2 coeurs et 4 threads :)
1
2
[root@ks ~]$ cat /proc/cpuinfo|grep "model name"
model name : Intel(R) Atom(TM) CPU N2800 @ 1.86GHz
  • perf dd
    1
    2
    3
    root@ks3287966 ~$ hdparm -t /dev/sda1 
    /dev/sda1:
    Timing buffered disk reads: 524 MB in 3.00 seconds = 174.60 MB/sec

    L’OS

    J’ai commandé une centos6. Voyons voir a quoi ressemble cette souche ovh

le kernel

1
2
root@ks ~$ ls /boot/|grep bzImage
bzImage-3.8.13-xxxx-grs-ipv6-64

J’en avais vaguement entendu parler: ovh utilise son propre noyau. Plus récent que celui de centos. Ce qui explique certains messages d’erreurs, comme lors de la relance d’IPtables.

De plus grub semble être aussi personnalisé. Un “update-grub2” après un “yum update” du kernel me laisse le kernel d’ovh (car plus récent) -> cf ftp d’ovh

partitionnement

De base

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@ks3287966 ~$ df -k
Sys. de fichiers 1K-blocs Utilisé Dispo. Uti% Monté sur
rootfs 10190136 1055240 8610608 11% /
/dev/root 10190136 1055240 8610608 11% /
devtmpfs 2011556 328 2011228 1% /dev
tmpfs 2012020 0 2012020 0% /dev/shm
/dev/root 10190136 1055240 8610608 11% /var/named/chroot/etc/named
/dev/root 10190136 1055240 8610608 11% /var/named/chroot/var/named
/dev/root 10190136 1055240 8610608 11% /var/named/chroot/etc/named.conf
/dev/root 10190136 1055240 8610608 11% /var/named/chroot/etc/named.rfc1912.zones
/dev/root 10190136 1055240 8610608 11% /var/named/chroot/etc/rndc.key
/dev/root 10190136 1055240 8610608 11% /var/named/chroot/usr/lib64/bind
/dev/root 10190136 1055240 8610608 11% /var/named/chroot/etc/named.iscdlv.key
/dev/root 10190136 1055240 8610608 11% /var/named/chroot/etc/named.root.key
/dev/sda2 950190136 23084 950167052 1% /home

Je verrais pour l’instance bind chrootée plus tard.
On vois un partitionnement à l’ancienne. Avec 950Go dans /home!!!
C’est vraiment étrange. Tant qu’à avoir ses propres souches avec un kickstart, autant faire quelque chose de plus “pro” avec du LVM.
La première étape consistera donc à supprimer /dev/sda2 pour un faire un pv!

Le compte root

Avant le premier reboot une clés ssh est présents dans .ssh/authorized_keys. Elle a disparue après un reboot.
Le compte root est accessible directement depuis ssh. J’ai donc ajoute le “PermitRootLogin no” dans sshd_config. J’ai créé un utilisateur et je lui ai donné les droits sudo qui vont bien.

J’aurais aussi pu déplacer ssh vers un autre port pour sécuriser le tout. Mais ce n’est pas efficace. Je verrais peut être plus tard pour du port knocking

La crontab

Une petite particularité: ovh insère une ligne “*/1 * * * * root /usr/local/rtm/bin/rtm” dans /etc/crontab. C’est assez inhabituel de trouver ca à cet endroit. Je trouve cet outil pratique, et je n’ai pas envie de le déplacer en crontab root, je l’ai donc laissé la ou il est.

Hostname

Le dédié vient avec un hostname définit par ovh. Le changer ne pose pas de difficulté.

YUM

RAS c’est ce qu’il y a de plus classique.
J’ai désactivé tous les dépôts en dehors des correctifs de sécurité. Et j’ai ajouté les dépôts EPEL et REMI (pour les maj php et mysql).
Au besoin je les activerais avec un “yum –enablerepos=”

Iptables, SELinux et fail2ban

Iptables et SELinux sont présents et actifs. Surtout ne pas les désactiver …

Vu les attaques sur le port 22 quelques heures après la mise en service du serveur, j’ai installé fail2ban.
La configuration est assez simple. Tout se fait depuis /etc/fail2ban/jail.conf.
Certains services sont pré configurés, il suffit de les activer.
De base au bout de 3 échec, l’Ip est ban 10h. Je n’ai pas modifié ces valeurs. E tant mieux, avec une confusion de DNS entre le mutualisé et le dédié, je me suis ban quelques heures aprés l’activation de fail2ban.

Migration DNS

Avant de commencer à réellement utiliser le dédié il faut transférer les DNS vers OVH (ce n’est pas obligatoire, mais vu que je veux supprimer tout ce qui est chez mon ancien hébergeur). Utiliser une IP n’est pas ce qu’il y a de plus pratique. Et j’ai besoin de “named virtual host”.
L’opération est assez simple. Il suffit de trouver comment désactiver la protection et trouver le code de transfert chez l’ancien hébergeur.
Ça a été assez simple et rapide pour le .fr. Par contre pour le .net il m’a fallu 2 mails de confirmation et attendre 5jours!

puppet

Ajouter un client

coté client

ruby

Ruby Version Manager (RVM)

C’est un outil permettant de gérer en tant que simple user les différentes versions de ruby, ainsi que les gems. Il est ainsi facile d’utiliser à la fois ruby1,8/rails2.3 et ruby1,9/rails3.0. Il s’occupe entre autre de mettre à jour les différents path et variables d’environnement de ruby (basculer l’emplacement des gems de /usr/lib/ruby/gems/1.8/gems vers ~/.rvm/gems/ruby-1.9.2-p0 par exemple).
Autant dire que sur fedora et en simple user, cet outil facilite la vie

Installation

voir https://rvm.io/rvm/install
ne pas oublier de modifier le bashrc après install (suivre les indications du script d’install)

Pour mettre à jour:

1
2
rvm update --head
rvm reload

Installer une nouvelle version de ruby

rvm procède à une compilation, les librairies (paquets -devel) et outils de compilation doivent donc être présent

  • Installer ruby 1.9.2
1
rvm install 1.9.2
  • Sélectionner la version de ruby par defaut (il est également possible de créer des profil spécifiques):
1
2
3
4
5
6
7
$rvm list

rvm rubies
ruby-1.8.7
ruby-1.9.2-p0 [ x86_64 ]

$rvm --default use 1.9.2
  • Supprimer une version de ruby
    Il peut être necessaire de supprimer une version de ruby (nottament pour pouvoir la recompiler après ajout d’une nouvelle librairie (notamment openssl-devel)))
1
2
rvm remove 1.9.2
rvm cleanup all
  • Gérer les gems:
    RVM modifie également l’emplacement ou ruby cherche les gems. Normalement, ca ne change rien à leur utilisation, les path étant correctement modifiés, mais rvm peut également s’en occuper:
    Pour installer rails 3.0:
1
2
rvm gem update --system
rvm gem install rails --version 3.0.0

linux

#RedHat

Trouver de la doc:

http://docs.fedoraproject.org/

Mettre à jour vers une nouvelle version

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#update de rpm
yum update rpm

#Mise à jour de la version existante:

yum -y update

#Clean du cache de yum:

yum clean all

#Upgrade:

yum install preupgrade
preupgrade

KernelCompilation

  • Sous gentoo avec genkernel
    1
    2
    3
    4
    5
    6
    7
    8
    livecd linux # zcat /proc/config.gz > /usr/share/genkernel/arch/x86_64/kernel-config
    livecd linux # genkernel all
    livecd linux # mv .config .config-old
    livecd linux # make mrproper
    CLEAN scripts/basic
    CLEAN scripts/kconfig
    CLEAN include/config
    CLEAN .config.old

    RAID5 logiciel

    Créer le volume

    1
    2
    3
    4
    root@Hades:~$ mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 --chunk=128 --name="data" /dev/sd[cde]1 
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
    root@Hades:~$

    Avoir des infos

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    root@Hades:~$ cat /proc/mdstat
    Personalities : [raid6] [raid5] [raid4]
    md0 : active raid5 sde1[2] sdd1[1] sdc1[0]
    3906766592 blocks super 1.2 level 5, 128k chunk, algorithm 2 [3/3] [UUU]

    unused devices: <none>
    root@Hades:~$ mdadm --detail /dev/md0
    /dev/md0:
    Version : 1.2
    Creation Time : Sun Oct 6 22:08:50 2013
    Raid Level : raid5
    Array Size : 3906766592 (3725.78 GiB 4000.53 GB)
    Used Dev Size : 1953383296 (1862.89 GiB 2000.26 GB)
    Raid Devices : 3
    Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Sun Oct 6 22:08:50 2013
    State : clean
    Active Devices : 3
    Working Devices : 3
    Failed Devices : 0
    Spare Devices : 0

    Layout : left-symmetric
    Chunk Size : 128K

    Name : Hades:data (local to host Hades)
    UUID : 0f709a04:d9080945:e1902a3d:7fc273c2
    Events : 0

    Number Major Minor RaidDevice State
    0 8 33 0 active sync /dev/sdc1
    1 8 49 1 active sync /dev/sdd1
    2 8 65 2 active sync /dev/sde1

    Supprimer le volume

    1
    2
    3
    4
    5
    root@Hades:~$ mdadm -S /dev/md0 
    mdadm: stopped /dev/md0
    root@Hades:~$ mdadm --zero-superblock /dev/sdc1
    root@Hades:~$ mdadm --zero-superblock /dev/sdd1
    root@Hades:~$ mdadm --zero-superblock /dev/sde1

    Doc

    http://wiki.linuxwall.info/doku.php/fr:ressources:dossiers:raid5_logiciel

systemD

1
2
3
4
systemctl enable vsftpd.service
systemctl start vsftpd.service

systemctl list-unit-files

LXC

Création d’un container

1
lxc-create -n  intranet -f /appli/lxc/containers/intranet/intranet.lxccfg  -t debian -- template-options --path=/appli/lxc/containers/intranet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
root@Hades:rootfs$ cat /appli/lxc/containers/intranet/intranet.lxccfg
lxc.tty = 4
lxc.pts = 1024
lxc.network.type = veth
lxc.network.flags = up
#lxc.network.link = virbr0
lxc.network.link = br0
lxc.network.name = veth0
lxc.network.mtu = 1500
lxc.rootfs = /appli/lxc/containers/intranet/rootfs
lxc.cgroup.devices.deny = a
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 4:0 rwm
lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm

Attention:

  • Un container n’est pas qu’un bootstrap
  • La création de container d’un OS utilisant #F00:upstart (ubuntu) ne fonctionne pas vraiment (possible avec quelques manip)

KVM

Convertir une image vmware vers qcow2

Malheureusement il ne semble pas possible de convertir une image vmware splittée (image.vmdk, image-s001.vmdk, image-s002.vmdk). La solution est de concaténer l’image en un seul fichier:

  1. installer les outils vmware (disponible avec vmware-server, workstation,…)
  2. concaténer l’image:
    1
    vmware-vdiskmanager -r image.vmdk -t 0 image-copy.vmdk
  3. la convertir:
    1
    qemu-img convert image-copy.vmdk -O qcow2 image.qcow2
    Le gros désavantage, c’est qu’il nécessaire d’avoir de disponible au moins deux fois la taille de
    l’image d’origine, afin de contenir les images converties

Monter une image qcow2:

Une image qcow2 se rapproche d’un disque dur (table de partitions et multiples partitions). Ce n’est pas donc pas directement montable. La solution consiste à passer par (nbd):

  1. Charger le module nbd

    1
    modprobe nbd
  2. Rendre l’image joignable joignable via /dev/nbd0:

    1
    qemu-nbd --connect=/dev/nbd0 mon_image.qcow2

    Un fdisk sue /dev/nbd0 devrait alors montrer les différentes partitions, celles ci étant accessibles via /dev/nbd0p1, /dev/nbd0p2, ….

  3. Si les entrées /dev/nbd0p* n’apparaissent pas:

    1
    2
    3
    4
    5
    [root@Lufy:~]# kpartx -a -v /dev/nbd0
    add map nbd0p1 (253:5): 0 11550672 linear /dev/nbd0 63
    add map nbd0p2 (253:6): 0 2 linear /dev/nbd0 11550735
    add map nbd0p5 (253:7): 0 2249037 linear /dev/nbd0 11550798
    add map nbd0p6 (253:8): 0 7164927 linear /dev/nbd0 13799898

    Ce qui permet de récupérer les majeurs et mineurs pour créer les entrées via mknod:

    1
    2
    3
    4
    mknod /dev/nbd0p1 b 253 5
    mknod /dev/nbd0p2 b 253 6
    mknod /dev/nbd0p2 b 253 7
    mknod /dev/nbd0p2 b 253 8
  4. Après usage, déconnecter l’image

    1
    2
    [root:~]# qemu-nbd --disconnect /dev/nbd0
    /dev/nbd0 disconnected

    Attention: éviter tout accès concurrentiel sur l’image ainsi montée!

RPM

  1. Installer les outils
    1
    yum install rpmdevtools yum-utils
  2. Initialiser l’environnement
    1
    2
    su - rpmmake
    rpmdev-setuptree
  3. Générer un fichier spec vide
    1
    2
    $ cd rpmbuild/SPECS/
    $ rpmdev-newspec
  4. Compiler le RPM
    1
    rpmbuild -ba fichier.spec
    #SElinux

    Restaurer le contexte d’un répertoire:

    restorecon -RvF

Désactiver

1
# setenforce 0

Pour le désactiver définitivement, il faut éditer le fichier /etc/selinux/config, et remplacer la ligne commençant par « SELINUX=…… » par « SELINUX=disabled » puis rebooter.

Astuces:

Changer le mot de passe via un script

1
echo -e "new_password\nnew_password" | (passwd --stdin $USER)

Forcer la redecouverte des disques à chaud

1
scsi-rescan --forcerescan

Prompt en couleur sans bug de “wrap” (bash)

1
export PS1="\[$(tput setaf 3)\][`whoami`@`uname -n`]\$ \[$(tput sgr0)\]"

Les tput set les couleurs
Les [ et ] délimitent des zones de “zero-width” ce qui empêche le bug en cas de ligne trop longues.
Le $ met le bon de caractère de fin en fonction de root ou non root

LVM

Gestion du partitionnement avec LVM

Agrandir un FS:

ex: agrandissement du lv “lvtmp”

1
2
3
4
5
$lvextend -L 35G /dev/mapper/VgData-lvtmp

Extending logical volume lvtmp to 35,00 GB
Logical volume lvtmp successfully resized
$resize2fs /dev/mapper/VgData-lvtmp

reduire un FS

Attention: certains FS (comme XFS) ne supportent pas d’être réduit
Principe: on réduit dabord le FS, puis le LV. Enfin on augmente le FS pour prendre toute la place du LV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@Nami:/home/titi/Téléchargements]$ lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lvvmware VgData -wi-a- 90,00g
[root@Nami:/home/partage/vm/base/nu]$ df -k .
Sys. de fichiers 1K-blocs Utilisé Dispo. Uti% Monté sur
/dev/mapper/VgData-lvvmware
92891128 44056884 44116036 50% /home/partage
[root@Nami:/home] umount /home/partage
[root@Nami:/home]$ fsck /dev/mapper/VgData-lvvmware
fsck de util-linux-ng 2.17.2
e2fsck 1.41.10 (10-Feb-2009)
/dev/mapper/VgData-lvvmware a été monté 119 fois sans avoir été vérifié, vérification forcée.
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/mapper/VgData-lvvmware : 297/5898240 fichiers (27.3% non contigus), 11384399/23592960 blocs
[root@Nami:/home]# resize2fs /dev/mapper/VgData-lvvmware 48G
resize2fs 1.41.10 (10-Feb-2009)
En train de retailler le système de fichiers sur /dev/mapper/VgData-lvvmware à 12582912 (4k) blocs.

[root@Nami:/home]# lvresize -L 50G /dev/mapper/VgData-lvvmware
WARNING: Reducing active and open logical volume to 50,00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvvmware? [y/n]: y
Reducing logical volume lvvmware to 50,00 GiB
Logical volume lvvmware successfully resized
[root@Nami:/home]# resize2fs /dev/mapper/VgData-lvvmware
resize2fs 1.41.10 (10-Feb-2009)
En train de retailler le système de fichiers sur /dev/mapper/VgData-lvvmware à 13107200 (4k) blocs.
Le système de fichiers /dev/mapper/VgData-lvvmware a maintenant une taille de 13107200 blocs.
[root@Nami:/home]# mount /dev/mapper/VgData-lvvmware /home/partage/
[root@Nami:/home]# df -k /home/partage/
Sys. de fichiers 1K-blocs Utilisé Dispo. Uti% Monté sur
/dev/mapper/VgData-lvvmware
51606140 44052916 4932000 90% /home/partage
[root@Nami:/home]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lvvmware VgData -wi-ao 50,00g

partitionnement “thin”

Créer un pool

1
lvcreate -L 100M -T vg001/mythinpool

Créer une partition logique dans le pool

1
lvcreate -V1G -T vg001/mythinpool -n thinvolume

Astuces

Faire un controlM, , …

Pour taper ce genre de caractère il faut faire :
CTRL-V, puis CTRL-M

Chercher une chaine de caractère dans un dossier

1
find /chemin/rep -name '*' |xargs grep -l "string"

Taille d’un dossier et de son contenu

1
du -sk* /mondossier/*| sort -n| awk '{$0; somme+=1} END {print somme}'

Changer le mot de passe via un script

Avec la commande “passwd” et son option “–stdin”, au travers d’un “pipe” :

1
echo -e "new_password\nnew_password" | (passwd --stdin $USER)