18
0
Fork 0

Import automatique du Trac

This commit is contained in:
Jérémy Lecour 2016-12-29 11:25:39 +01:00 committed by Jérémy Lecour
parent e3ce6bb08f
commit 4436c13004
268 changed files with 32469 additions and 0 deletions

6
BaieTranstec/PROVIGO.md Normal file
View File

@ -0,0 +1,6 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Liens utiles
* [Drivers](http://shop.transtec.fr/F/F/support/support_driverdownload.html) ;
* [Manuel de la baie](http://download.transtec.de/doit/loadva/software/w3/CD_STOR_HTML/raid/pv6xx/docs/GMN_PV610S_SCSI-toSATA_v1.3.pdf).

90
CarteAPU.md Normal file
View File

@ -0,0 +1,90 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto APU
## minicom
~~~
pu port /dev/ttyUSB0
pu baudrate 38400
pu rtscts No
pu xonxoff Yes
~~~
~~~
pu port /dev/ttyUSB0
pu baudrate 115200
pu rtscts No
pu xonxoff Yes
~~~
## Installation flashrd
Suivre <http://arnaud.tomei.fr/alix-openbsd#installation-du-systeme>
## Adaptations de base
~~~
rw
passwd
echo 'PKG_PATH="ftp://ftp.openbsd.org/pub/OpenBSD/5.7/packages/amd64/"\nexport PKG_PATH' >> /root/.profile
echo routeur > /etc/myname
echo 'net.inet.ip.forwarding=1\nnet.inet.ip.redirect=0\nnet.inet6.ip6.forwarding=1\nnet.inet6.ip6.accept_rtadv=0' >> /etc/sysctl.conf
echo 'description "LAN"\ninet 192.168.12.1 255.255.255.0 NONE' > /etc/hostname.re2
sync
~~~
## Persistance de /var et /home
Dans /etc/rc.flashrd.sub vérifier que les lignes suivantes sont présentes et décommentées :
~~~
tardirs="var"
set -A tarsize 64M # tmpfs sizes for tar dirs
#
# If you want to save all "tardirs" contents on shutdown:
savetardirs="$tardirs"
~~~
Le ramdisk de /var sera ainsi sauvegardé dans /flash/var.tar à l'extinction du routeur, et décompacté au démarrage.
Si des modifications importantes sont faites, il est possible de régénérer l'archive manuellement ainsi :
~~~
tar cf /flash/var.tar -C /var .
~~~
Pour /home :
~~~
mkdir /flash/home/
rmdir /home
cat /etc/rc.local
# $OpenBSD: rc.local,v 1.44 2011/04/22 06:08:14 ajacoutot Exp $
# Site-specific startup actions, daemons, and other things which
# can be done AFTER your system goes into securemode. For actions
# which should be done BEFORE your system has gone into securemode
# please see /etc/rc.securelevel.
rmdir /home
ln -sf /flash/home /home
# Run flashrd final boot routine
/etc/rc.flashrd.local
~~~
Ainsi, /home devient un lien symbolique vers le répertoire /flash/home qui est sur une partition persistante. C'est la méthode à préférer quand /home ne contient que des données "froides".
Il est également possible dans le cas ou /home accueillerait des données écrites fréquemment de créer un ramdisk à la manière de /var. Dans ce cas, au lieu de réaliser la procédure précédente, il faut modifier le fichier /etc/rc.flashrd.sub comme ceci :
~~~
tardirs="var home"
set -A tarsize 64M 32M # tmpfs sizes for tar dirs
#
# If you want to save all "tardirs" contents on shutdown:
savetardirs="$tardirs"
~~~
Et de la même manière, pour sauvegarder l'arborescence sans attendre le prochain reboot (propre ! Sinon les données depuis la dernière archive sont perdues) :
~~~
tar cf /flash/home.tar -C /home .
~~~

31
CarteRAID.md Normal file
View File

@ -0,0 +1,31 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
Pour installer sous Squeeze :
<http://infogerance-linux.net/2012/installation-de-debian-squeeze-sur-un-ibm-x3550m4-avec-carte-raid-m5110-base-sur-lsi-sas2208-roc-firmware-mars-2012/>
Mettre en place le RAID 1 : <http://www.youtube.com/watch?v=2nyKz9Apg6Q>
## Activer les cache lectures et écritures (avec BBU) :
~~~
megacli -LDSetProp -Cached -LAll -aAll
megacli -LDSetProp EnDskCache -LAll -aAll
megacli -LDSetProp ADRA -LALL -aALL
megacli -LDSetProp WB -LALL -aALL
~~~
## Infos
Voir les infos globales :
~~~
# megacli -AdpAllInfo -aAll
~~~
Voir les infos des volumes :
~~~
# megacli -LDInfo -L0 -a0
# megacli -LDInfo -L1 -a0
~~~

17
CloudOVH.md Normal file
View File

@ -0,0 +1,17 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Cloud OVH
## Adressage IP
Attention, pour chaque sous-réseau (public ou privé) il ne faut *pas* utiliser (outre NetID et Broadcast évidemment) les 3 adresses les plus hautes.
Par exemple, pour 172.21.22.0/24 :
~~~
172.21.22.0 : NetID
172.21.22.252 : réservé pour OVH
172.21.22.253 : réservé pour OVH
172.21.22.254 : gateway OVH
172.21.22.255 : Broadcast OVH
~~~

74
FreeBSD.md Normal file
View File

@ -0,0 +1,74 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto FreeBSD
## Installer un package
~~~
# setenv PACKAGESITE ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.3-release/Latest/
# setenv FTP_PASSIVE_MODE 1
# pkg_add -r php5-simplexml
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.3-release/Latest/php5-simplexml.tbz... Done.
~~~
## Compiler depuis l'arbre des ports
~~~
# cd /usr/ports/categorie_du_paquet/nom_du_paquet
# make
# make install
~~~
## Voir les paquets installés
~~~
# pkg_info -Ix nom_du_paquet
~~~
## Mises à jour avec freebsd-update(8)
<http://www.freebsd.org/doc/handbook/updating-freebsdupdate.html>
Exemple :
~~~
# pkg_delete -a (supprime tous les packages !!)
# freebsd-install
# reboot
# freebsd-install
~~~
## Optimisations
<http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/configtuning-kernel-limits.html>
Optimisations réseau pour permettre un grand nombre de connexions :
~~~
# sysctl kern.ipc.nmbclusters=262144
# sysctl kern.ipc.maxsockets=204800
# sysctl net.inet.tcp.msl=20000
~~~
<http://rerepi.wordpress.com/2008/04/19/tuning-freebsd-sysoev-rit/>
## Admin
<http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/users-groups.html>
Ajout d'un groupe :
~~~
# pw groupadd <groupe>
# pw groupmod <groupe> -M <user>
~~~
## Installer des paquets à l'identique d'un serveur à l'autre
~~~
server1# for i in /var/db/pkg/*; do pkg_create -b $i; done
server1# rsync *.tbz server2:
server2# pkg_add -i *.tbz
~~~

202
HowToRedmine-Source.md Normal file
View File

@ -0,0 +1,202 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Installation Redmine
Ce document explique l'installation du logiciel Redmine depuis les sources.
Cette installation à été testé sur une Debian Jessie avec Redmine en version 3.0, 3.1 et 3.2.
Informations supplémentaires :
* [wiki:HowToRedmine-Source/Migrate Migrer une installation existante]
* [wiki:HowToRedmine-Source/Save Backup de votre installation]
* [wiki:HowToRedmine-Source/Update Mettre à jour votre installation]
* [wiki:HowToRedmine-Source/Delete Supprimer votre installation]
* [wiki:HowToRedmine-Source/Plugins Installer des plugins]
À noter :
* Les catégories nomnées prérequis ne sont à faire qu'une seule fois par serveur.
* Les commandes sont à lancer avec l'utilisateur entre parenthèse.
### 0. Prérequis (User = root)
Installations des dépendances :
~~~
aptitude install ruby ruby-dev imagemagick git-core git-svn gcc build-essential libxml2-dev libxslt1-dev libssl-dev
~~~
Installation des dépendances 2 (L'installation en une fois crée des conflits !) :
~~~
aptitude install libmagickwand-dev libmagickcore-dev
~~~
Si Squid est présent vous devez rajouter les sites github et rubygems dans sa liste blanche !
~~~
echo "<https://github.com/.*"> >> /etc/squid3/whitelist.conf
echo "<http://rubygems.org/.*"> >> /etc/squid3/whitelist.conf
echo "<http://.*.rubygems.org/.*"> >> /etc/squid3/whitelist.conf
~~~
#### /home ne doit pas avoir l'attribut noexec !!!
### I. Création du compte Unix (User = root)
Choix de l'utilisateur $REDMINE propriétaire de l'application
~~~
REDMINE='redmine'
~~~
Création de l'utilisateur $REDMINE :
~~~
useradd $REDMINE -d "/home/$REDMINE" -c "Redmine $REDMINE" -s "/bin/bash" -m
~~~
Ajout de l'utilisateur www-data au groupe $REDMINE :
~~~
adduser www-data $REDMINE
~~~
### II. Création de la base de donnée (User = root)
Au choix :
* [wiki:HowToRedmine-Source/BDD/MySQL MySQL]
### III. Serveur Web (User = root)
Au choix :
* [wiki:HowToRedmine-Source/Web/Nginx Nginx]
### IV. Serveur d'application (User = root)
Au choix :
* [wiki:HowToRedmine-Source/Rails/Puma Puma]
### V. Finalisation (User = $REDMINE)
Se connecter avec l'utilisateur $REDMINE :
~~~
su - $REDMINE
~~~
Choisir la $BRANCHE de la version de Redmine :
* voir le dépôt [Github](https://github.com/redmine/redmine) pour choisir une version
* vérifier les prérequis sur [redmine.org](http://www.redmine.org/projects/redmine/wiki/FrRedmineInstall#Exigences)
~~~
BRANCHE=3.3-stable
~~~
Ajout des gems locales dans le $PATH :
~~~
cat >> ~/.profile <<EOF
if [ -d "\$HOME/.gem/ruby/2.1.0/bin" ] ; then
PATH="\$HOME/.gem/ruby/2.1.0/bin:\$PATH"
fi
EOF
~~~
Clonage du dépôt Git du projet Redmine :
~~~
git clone <https://github.com/redmine/redmine.git> -b $BRANCHE ~/www
~~~
Création des dossiers nécessaires :
~~~
mkdir ~/files
~~~
Copie de la configration de Redmine :
~~~
cat > ~/www/config/configuration.yml <<EOF
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: localhost
port: 25
domain: "$(hostname -d)"
ssl: false
enable_starttls_auto: false
attachments_storage_path: /home/$USER/files
autologin_cookie_secure: true
EOF
~~~
Récupération du mot de passe Mysql :
~~~
MYSQLPASS=`grep password ~/.my.cnf|cut -d'=' -f2|tr -d ' '`
~~~
Configuraion de la base de donnée :
~~~
cat > ~/www/config/database.yml <<EOF
production:
adapter: mysql2
database: $USER
host: localhost
username: $USER
password: "$MYSQLPASS"
encoding: utf8
EOF
~~~
Correction des droits :
~~~
chmod u=rwX,g=rX,o= ~/www ~/www/public ~/files ~/ -R
~~~
Installation des dépendances Gem avec bundle (cela peut durer plusieurs minutes) :
~~~
bundle install --gemfile=~/www/Gemfile --path=~/.gem
~~~
Puis prise en compte du .profile :
~~~
source .profile
~~~
Génération d'un clé aléatoire utilisé pour encoder les cookies de session :
~~~
rake -qf ~/www/Rakefile generate_secret_token
~~~
Création des schémas de la base de données redmine :
~~~
rake -qf ~/www/Rakefile db:migrate RAILS_ENV=production
~~~
Chargement des données par défaut :
~~~
rake -qf ~/www/Rakefile redmine:load_default_data RAILS_ENV=production REDMINE_LANG=fr
~~~
Migration de la base pour les plugins :
~~~
rake -qf ~/www/Rakefile redmine:plugins:migrate RAILS_ENV=production
~~~
### Lancement de l'application (User = root)
Démarrer/éteindre l'application :
~~~
systemctl start/stop puma@$REDMINE
~~~
Recharger la configuration après avoir modifier /etc/puma/$REDMINE/ (pas de coupure) :
~~~
systemctl reload puma@$REDMINE
~~~
Redémarrer l'application :
~~~
systemctl restart puma@$REDMINE
~~~
Activer/désactiver l'application au démarrage :
~~~
systemctl enable/disable puma@$REDMINE
~~~
### Taches d'administration
Lancer un shell ruby dans l'environnement de production :
~~~
su - $REDMINE
cd ~/www
RAILS_ENV=production bundle exec rails console
~~~
#### Creer un compte admin / mot de passe admin
~~~
user # User.new :firstname> "Admin", :lastname => "Admin", :mail => "admin@example.com", :mail_notification => "none", :status => 1
user.login = 'admin'
user.hashed_password = "4af53bd5aff3b4b8ac275cfc918244f7e61aa4cb"
user.salt = "270d36d363b07abc40245d02348a53a8"
user.admin = true
user.save
~~~

View File

@ -0,0 +1,36 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Mysql
### Prérequis
Installation de [wiki:HowtoMySQL MySQL].
Installation des librairies de développements MySQL
~~~
aptitude install libmysqlclient-dev
~~~
### Configuration
Création de l'utilisateur et de la base de donnée :
~~~
MYSQLPASS=$(perl -e 'print map{("a".."z","A".."Z",0..9)[int(rand(62))]}(1..16)')
mysql <<EOF
CREATE DATABASE $REDMINE CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON $REDMINE.* TO "$REDMINE"@'localhost' identified by '$MYSQLPASS';
EOF
~~~
Configuration autologin MySQL de l'utilisateur $REDMINE :
~~~
cat > /home/$REDMINE/.my.cnf <<EOF
[client]
user = $REDMINE
password = $MYSQLPASS
EOF
~~~
Correction des droits sur .my.cnf :
~~~
chown $REDMINE: /home/$REDMINE/.my.cnf
~~~

View File

@ -0,0 +1,42 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Suppression de Redmine
Pour supprimer votre installation de redmine, rien de plus simple.
## I. Suppression
Arrêt du service Redmine :
~~~
systemctl stop puma@$REDMINE
~~~
Suppression de l'utilisateur système $REDMINE ainsi que son groupe :
~~~
userdel $REDMINE
groupdel $REDMINE
~~~
Suppression de l'application :
~~~
rm -rf /home/$REDMINE /etc/init.d/redmine_$REDMINE
~~~
## II. Suppression de la base de donnée
* Mysql :
~~~
mysql <<SQL
DROP DATABASE $REDMINE;
DROP USER $REDMINE@localhost;
SQL
~~~
## III. Suppression configuration Web
* Nginx :
~~~
rm /etc/nginx/ssl/redmine_$REDMINE* /etc/nginx/sites-enabled/redmine_$REDMINE /etc/nginx/sites-available/redmine_$REDMINE
nginx -t
if [ $? == 0 ]; then
service nginx reload
fi
~~~

View File

@ -0,0 +1,47 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Migration de votre ancienne installation Redmine
Après avoir finit votre [wiki:HowToRedmine-Source installation].
Se connecter avec l'utilisateur de votre nouveau Redmine :
~~~
su - $REDMINE
~~~
Réaliser un dump SQL de votre ancienne installation :
~~~
ssh votre-serveur-actuel.tld mysqldump database_name > redmine_dump.sql
~~~
Puis stopper votre nouvelle installation :
~~~
systemctl stop puma@$REDMINE
~~~
Vider la base de donnée actuelle :
~~~
TABLES=$(mysql $USER -e 'show tables' | awk '{ print $1}' | grep -v '^Tables' )
for t in $TABLES
do
echo "Deleting $t table from $USER database..."
mysql $USER -e "drop table $t"
done
~~~
Importer votre dump SQL:
~~~
mysql -D $USER --default-character-set=utf8 < redmine_dump.sql
~~~
Migrer la base de données :
~~~
rake -qf ~/redmine/Rakefile db:migrate RAILS_ENV=production
~~~
Migrer les plugins :
~~~
rake -qf ~/redmine/Rakefile redmine:plugins:migrate RAILS_ENV=production
~~~
Relancer votre Redmine :
~~~
systemctl start puma@$REDMINE
~~~
Synchroniser les fichiers attachés :
~~~
scp -Cr votre-serveur-actuel.tld:dossier-files ~/
~~~

View File

@ -0,0 +1,43 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Plugins
### Listes des plugins
* [wiki:HowToRedmine-Source/Plugins/Redmine_multiprojects_issue Plugin Redmine Multiprojects Issue]
* Permet d'assigner des projets secondaires à une demande.
* [wiki:HowToRedmine-Source/Plugins/Redmine_git_hosting Plugin Redmine Git Hosting]
* Permet l'intégration de Redmine avec Gitolite.
* [wiki:HowToRedmine-Source/Plugins/Redmine_wiki_notes Plugin Redmine Wiki Notes]
* Ajoute des macros au wiki pour afficher un bloc de type note/info/warning/tip.
### Mise à jour (User = $REDMINE)
*Éteindre Puma avant les mises à jours.*
Rendez vous dans le dossier du plugins /home/$REDMINE/redmine/plugins/nom_plugin puis :
Pour une mise à jour mineure :
~~~
git pull
~~~
Pour une mise à jour majeure, récuperer la dernière branche stable, vérifier les prérequis puis :
~~~
git checkout $BRANCHE
~~~
Effectuer ensuite les tâches post-update ci-dessous.
### Taches post-installation / post-update
Mise à jour des gem :
~~~
bundle install --gemfile=~/www/Gemfile --path=~/.gem
~~~
Migration des plugins :
~~~
rake -qf ~/www/Rakefile redmine:plugins:migrate RAILS_ENV=production
~~~
Correction des droits
~~~
chmod u=rwX,g=rX,o= ~/www/plugins -R"
~~~

View File

@ -0,0 +1,116 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Plugin Redmine Git Hosting + Gitolite
#### Redmine et Gitolite doivent se situer sur le même serveur !
## Prérequis
Installation de gitolite 3 (sous Wheezy nécessite les backports) :
~~~
aptitude install gitolite3
~~~
Installation des dépendances Redmine Git Hosting :
~~~
aptitude install build-essential libssh2-1 libssh2-1-dev cmake libgpg-error-dev
~~~
Mise en place de [wiki:HowtoGitDaemon git-daemon] et [wiki:HowtoGitWeb gitweb] (optionnel).
## I. Installation Gitolite
Choix de l'utilisateur $GITOLITE :
* $GITOLITE : utilisateur propriétaire de l'application
* accès SSH depuis $GITOLITE@votre-domaine.tld
~~~
GITOLITE='git'
~~~
Création de l'utilisateur système $GITOLITE ainsi que son groupe.
~~~
useradd $GITOLITE -d "/home/$GITOLITE" -c "Gitolite $GITOLITE" -s "/bin/bash" -m
~~~
Initialisation de Gitolite :
~~~
cp /home/$REDMINE/.ssh/redmine_gitolite_admin_id_rsa.pub /home/$GITOLITE/
chown $GITOLITE: /home/$GITOLITE/redmine_gitolite_admin_id_rsa.pub
su - $GITOLITE -c "gitolite setup -pk redmine_gitolite_admin_id_rsa.pub"
rm /home/$GITOLITE/redmine_gitolite_admin_id_rsa.pub
~~~
Configuration gitolite3 :
~~~
chmod 750 -R /home/$GITOLITE/repositories /home/$GITOLITE/projects.list
vi /home/$GITOLITE/.gitolite.rc
#changer UMASK de 0077 à 0027
#changer GIT_CONFIG_KEYS de '' à '.*'
#décommenter la ligne : LOCAL_CODE => "$ENV{HOME}/local"
~~~
Interdit l'utilisateur $GITOLITE de se connecter avec un mot de passe et l'autorise à se connecter si l'accès SSH est limité :
~~~
cat >> /etc/ssh/sshd_config <<SSH
Match User $GITOLITE
PasswordAuthentication no
SSH
sed -ie "/^AllowUsers/s/.*/& $GITOLITE/" /etc/ssh/sshd_config
sed -ie "/^AllowGroups/s/.*/& $GITOLITE/" /etc/ssh/sshd_config
service ssh reload
~~~
### II. Installation du plugin redmine Git Hosting -User = $REDMINE)
Connection en tant que l'utilisateur $REDMINE :
~~~
su - $REDMINE
~~~
Génération de la clé SSH :
~~~
ssh-keygen -N '' -f /home/$REDMINE/.ssh/redmine_gitolite_admin_id_rsa
~~~
#### Cette clé aura accès à tous les dépots de Gitolite !
Ajout de localhost dans les know_hosts de l'utilisateur $REDMINE (vous devez accepter le fingerprint !) :
~~~
ssh localhost
~~~
Clonage des plugins dans redmine/plugins :
~~~
git clone <https://github.com/jbox-web/redmine_bootstrap_kit.git> -b v0.2.x ~/redmine/plugins/redmine_bootstrap_kit
git clone <https://github.com/jbox-web/redmine_git_hosting.git> -b v1.2.x ~/redmine/plugins/redmine_git_hosting
~~~
Ajout du scm Xitolite dans Redmine :
~~~
echo " scm_xitolite_command: /usr/bin/git" >> ~/redmine/config/configuration.yml
~~~
### III. Configuration de l'accès sudo (User = root)
*A faire même si l'utilisateur $GITOLITE est le même que $REDMINE*
Autorise $REDMINE à sudo vers $Gitolite :
~~~
cat > /etc/sudoers.d/$REDMINE\_$GITOLITE <<SUDO
Defaults:$REDMINE !requiretty
$REDMINE ALL=($GITOLITE) NOPASSWD:ALL
SUDO
chmod 440 /etc/sudoers.d/$REDMINE\_$GITOLITE
~~~
#### Si le plugin est installé après Redmine et non en même temps
Exécuter les taches [wiki:HowToRedmine-Source/Plugins post-installation].
### Configuration du plugin
* Rendez vous dans Administration -> Redmine Git Hosting Plugin -> SSH et remplacer :
* Nom d'utilisateur Gitolite par la valeur de $GITOLITE
* L'emplacement des clés privées et publiques SSH de Gitolite par le dossier .ssh de l'utilisateur $REDMINE
* Rendez vous dans Administration -> Redmine Git Hosting Plugin -> Accès et remplacer :
* Nom de domaine du serveur HTTP et HTTPS par le nom de domaine de votre serveur
* Nom de domaine du serveur SSH par $GITOLITE.votredomain.tld
* Rendez vous dans Administration -> Redmine Git Hosting Plugin -> Stockage et remplacer :
* Répertoire de stockage des hooks non-core par hooks
* Rendez vous dans Administration -> Redmine Git Hosting Plugin -> Hooks et remplacer :
* Url des hooks par <https://votre-domaine.tld>
* Cliquer en haut à droit sur installer les hooks !
* Rendez vous dans Administration -> Redmine Git Hosting Plugin -> Test de la configuration et vérifier que tous les indicateurs sont au vert

View File

@ -0,0 +1,18 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Plugin Redmine Multiprojects Issue
Connection en tant que l'utilisateur $REDMINE :
~~~
su - $REDMINE
~~~
Clonage des plugins dans redmine/plugins :
~~~
git clone <https://github.com/jbbarth/redmine_base_select2.git> /home/$REDMINE/redmine/plugins/redmine_base_select2
git clone <https://github.com/jbbarth/redmine_base_deface.git> /home/$REDMINE/redmine/plugins/redmine_base_deface
git clone <https://github.com/nanego/redmine_multiprojects_issue.git> /home/$REDMINE/redmine/plugins/redmine_multiprojects_issue
~~~
#### Si le plugin est installé après Redmine et non en même temps :
Exécuter les taches [wiki:HowToRedmine-Source/Plugins post-installation].

View File

@ -0,0 +1,16 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Plugin Redmine Wiki Notes
Connection en tant que l'utilisateur $REDMINE :
~~~
su - $REDMINE
~~~
Clonage du plugin dans redmine/plugins :
~~~
git clone <https://github.com/dseifert/redmine_wiki_notes.git>
~~~
#### Si le plugin est installé après Redmine et non en même temps :
Exécuter les taches [wiki:HowToRedmine-Source/Plugins post-installation].

View File

@ -0,0 +1,66 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Puma
### 0. Prérequis
Installation de Puma :
~~~
gem install puma
~~~
Création du dossier de configuration :
~~~
mkdir /etc/puma
~~~
Création d'un service SystemD :
~~~
cat > /etc/systemd/system/puma@.service <<EOF
[Unit]
Description=Puma HTTP server for Ruby Apps : %i
After=network.target
[Service]
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p %t/%i
ExecStartPre=/bin/chown %i: %t/%i
User=%i
Group=%i
UMask=0027
#WorkingDirectory=/home/%i/www
PrivateTmp=true
PIDFile=/run/%i/ruby.pid
ExecStart=/usr/local/bin/puma --bind unix:///run/%i/ruby.sock?umask=0007 --pidfile /run/%i/ruby.pid --dir /home/%i/www --config /etc/puma/%i.rb
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=puma_%i.service
EOF
~~~
Correction des droits du service SystemD
~~~
chmod 644 /etc/systemd/system/puma@.service
systemctl daemon-reload
~~~
### 1. Configuration
Création du fichier de configuration de Puma pour l'utilisateur $REDMINE :
~~~
cat > /etc/puma/$REDMINE.rb <<EOF
environment 'production'
workers 2
threads 0, 8
tag 'Redmine $REDMINE'
EOF
~~~
Correction des droits du fichier de configuration
~~~
chmod 740 /etc/puma/$REDMINE.rb
chown $REDMINE:www-data /etc/puma/$REDMINE.rb
~~~

View File

@ -0,0 +1,23 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Sauvegarde de votre installation Redmine
Connexion en tant que l'utilisateur $REDMINE :
~~~
su - $REDMINE
~~~
Export de la base Mysql :
~~~
mysqldump $USER > redmine_dump.sql
~~~
Sauvegarde de la configuration de Redmine :
~~~
tar -zcvf ~/$USER_config.tgz ~/redmine/config
~~~
Sauvegarde des fichiers attachées :
~~~
tar -zcvf ~/$USER_files.tgz ~/files
~~~

View File

@ -0,0 +1,77 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Mise à jour de votre installation Redmine
Connection en tant que l'utilisateur $REDMINE :
~~~
# su - $REDMINE
$ umask 022
~~~
Rendez vous dans le dossier d'installation de Redmine :
~~~
$ cd ~/redmine
~~~
## Pour faire une mise à jour mineure (ex: 3.0.2 vers 3.0.3)
~~~
# su - $REDMINE
$ umask 022
$ cd ~/redmine
$ git pull
$ bundle update
# systemctl restart puma@$REDMINE
# systemctl status puma@$REDMINE
~~~
## Pour faire une mise à jour majeure (ex: 2.6 vers 3.0)
Déterminer votre branche courante (elle est précédé d'un étoile) :
~~~
$ git branch
~~~
Lister les branches distantes (ne prendre en compte que les versions stables) :
~~~
$ git pull
$ git branch -r
~~~
Si une version plus récente de Redmine est présente, vérifier les prérequis en vous rendant sur [redmine.org](http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Requirements)
Version de Ruby et de Ruby on Rails :
~~~
$ ruby -v
$ rails -v
~~~
Si les prérequis sont satisfaits :
~~~
# systemctl stop puma@$REDMINE
# su - $REDMINE
$ umask 022
$ gem update puma --user
$ cd ~/redmine
# systemctl stop puma@$REDMINE
$ git pull
$ git checkout $BRANCHE
$ rm Gemfile.lock
$ bundle update
$ rake -q db:migrate RAILS_ENV=production
# systemctl start puma@REDMINE
$ systemctl status puma@REDMINE
~~~
Mise à jour des plugins (exemple avec le plugin foo) :
~~~
# su - $REDMINE
$ umask 022
$ cd ~/redmine
# systemctl stop puma@$REDMINE
$ cd plugins ; ls
$ cd foo
$ git pull && git branch -r
$ rake -q redmine:plugins:migrate RAILS_ENV=production
# systemctl start puma@REDMINE
$ systemctl status puma@REDMINE
~~~

View File

@ -0,0 +1,82 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Nginx
### Prérequis
Installation de [wiki:HowtoNginx Nginx].
### Configuration
Création du dossier de log :
~~~
mkdir /var/log/nginx/$REDMINE
chown www-data:adm /var/log/nginx/$REDMINE
chmod u=rwx,g=rxs,o= /var/log/nginx/$REDMINE
~~~
Création du vhost $REDMINE :
~~~
cat > /etc/nginx/sites-available/$REDMINE <<EOF
upstream ruby_$REDMINE {
server unix:/run/$REDMINE/ruby.sock fail_timeout=0;
}
server {
server_name $REDMINE.$(hostname -d);
listen 0.0.0.0:80;
listen [::]:80;
# listen 0.0.0.0:443 ssl;
# listen [::]:443 ssl;
# if ( $scheme = http ) {
# return 301 <https://$server_name$request_uri;>
# }
# ssl_certificate /etc/ssl/certs/redmine_$REDMINE.crt;
# ssl_certificate_key /etc/ssl/private/redmine_$REDMINE.key;
root /home/$REDMINE/www/public;
access_log /var/log/nginx/$REDMINE/access.log;
error_log /var/log/nginx/$REDMINE/error.log;
error_page 503 @maintenance;
location / {
if (!-f /run/$REDMINE/ruby.pid) {
return 503;
}
try_files \$uri @ruby;
}
location @maintenance {
#proxy_pass <http://maintenance-url.com;>
rewrite ^(.*)$ /500.html break;
}
location @ruby {
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_set_header X-Forwarded-For \$remote_addr;
proxy_set_header Host \$<http_host;>
proxy_redirect off;
proxy_read_timeout 300;
proxy_pass <http://ruby_$REDMINE;>
}
}
EOF
~~~
Activation du vhost $REDMINE :
~~~
ln -s /etc/nginx/sites-available/$REDMINE /etc/nginx/sites-enabled/$REDMINE
~~~
Pour mettre en place le ssl, voir [wiki:HowtoSSL] et nommée votre certificat et votre clé comme ceci :
* /etc/ssl/certs/redmine_$REDMINE.crt
* /etc/ssl/private/redmine_$REDMINE.key.
Test de la configuration nginx et rechargement le cas échéant :
~~~
nginx -t
if [ $? == 0 ]; then
service nginx reload
fi
~~~
#### Si iptables est configuré, pensez à ouvrir les ports 80 et 443 entrants !

7
HowToSFTP.md Normal file
View File

@ -0,0 +1,7 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Connexion sur port différent de 22
~~~
sftp -o "Port 3432" user@host
~~~

32
HowtoACL.md Normal file
View File

@ -0,0 +1,32 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto ACL
Savoir que le fichier a un ACL configuré (+) :
~~~
$ ls -dl foo/
drwxr-x---+ ...
~~~
### Obtenir ACL
~~~
# getfacl foo/
~~~
récupérer le statut ACL sur le fichier.
### Modifier ACL
~~~
# setfacl -R -m group:example:rwx foo/
~~~
-R : récursif, -m : pour modifier.
~~~
# setfacl -d -R -m group:example:rwx foo/
~~~
-d : défaut

105
HowtoAlfresco.md Normal file
View File

@ -0,0 +1,105 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Howto Alfresco Community
### Installation
Installer Tomcat 6 (voir [wiki:HowtoTomcat])
Installer MySQL (voir [wiki:HowtoMySQL])
Installer JDBC :
~~~
# aptitude install libmysql-java
# cd /usr/share/tomcat6/lib/
# ln -s ../../java/mysql-connector-java.jar mysql.jar
~~~
Si cela n'est pas fait, vous aurez les erreurs très explicites :
~~~
Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set)
~~~
Alfresco a aussi besoin d'OpenOffice et ImageMagick :
~~~
# aptitude install openoffice.org-headless imagemagick
~~~
Egalement l'outil _swftools_ non disponible sous Debian Lenny, on va donc se servir chez les voisins :
~~~
wget <https://launchpad.net/ubuntu/+source/swftools/0.8.1-2.1ubuntu1/+build/924585/+files/swftools_0.8.1-2.1ubuntu1_amd64.deb>
dpkg -i swftools_0.8.1-2.1ubuntu1_amd64.deb
~~~
Il faut aussi préparer un répertoire pour le "contentstore" (stockage brut des documents), un autre pour les documents supprimés (à purger de temps en temps), un pour les index _Lucene_ et un autre pour les sauvegardes de ces index. Par exemple :
~~~
# mkdir /srv/contentstore /srv/contentstore.deleted /srv/indexes /srv/indexes.backup
# chown tomcat6:tomcat6 /srv/contentstore /srv/contentstore.deleted /srv/indexes /srv/indexes.backup
~~~
Pour configurer Alfresco, le plus simple est de créer un fichier _alfresco-global.properties_ (à mettre par exemple dans _/var/lib/tomcat6/shared/classes/_) :
~~~
db.name=NOM BDD
db.username=USER BDD
db.password=PASS BDD
db.host=127.0.0.1
db.port=3306
db.driver=org.gjt.mm.mysql.Driver
db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}
hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
ooo.exe=/usr/bin/soffice
img.root=/usr
swf.exe=/usr/bin/pdf2swf
dir.root=/srv
dir.contentstore=${dir.root}/contentstore
dir.contentstore.deleted=${dir.root}/contentstore.deleted
dir.auditcontentstore=${dir.root}/audit.contentstore
dir.indexes=${dir.root}/indexes
dir.indexes.backup=${dir.root}/indexes.backup
~~~
Pour une configuration avancée, on utilisera le répertoire _/var/lib/tomcat6/shared/classes/alfresco/extension/_.
Par exemple pour customiser les logs d'Alfresco, on créera un fichier _myalfresco-log4j.properties_ :
~~~
log4j.appender.File2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.File2.File=/var/log/tomcat6/alfresco.log
log4j.appender.File2.Append=true
log4j.appender.File2.DatePattern='.'yyyy-MM-dd
log4j.appender.File2.layout=org.apache.log4j.PatternLayout
log4j.appender.File2.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
log4j.rootLogger=error, Console, File2
~~~
Note : penser à créer le /var/log/tomcat6/alfresco.log avec les bons droits
Télécharger alfresco-community-war-3.3.zip sur <http://sourceforge.net/projects/alfresco/files/Alfresco/3.3%20Community%20Edition/alfresco-community-war-3.3.zip/download>
et déployer les fichiers WAR (alfresco.war, share.war si besoin) dans le répertoire _/var/lib/tomcat6/webapps/_, puis :
~~~
# /etc/init.d/tomcat6 restart
~~~
### Administration JMX
<http://wiki.alfresco.com/wiki/JMX>
On peut utiliser l'outil _jconsole_ avec les paramètres suivants :
~~~
Remote process = service:jmx:rmi:///jndi/rmi://localhost:50500/alfresco/jmxrmi
Username = controlRole
Password = change_asap
~~~
Note : mots de passe à changer via les fichiers _alfresco-jmxrmi.*_

800
HowtoAnsible.md Normal file
View File

@ -0,0 +1,800 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Ansible
<http://docs.ansible.com/>
Ansible est une plateforme de configuration et gestion de serveurs : il permet le déploiement de logiciels et l'execution de tâches via une connexion SSH.
Ansible est *agent-less* et utilise le concept d*[idempotence](https://fr.wikipedia.org/wiki/Idempotence)* : on décrit l'état d'un serveur dans un fichier YAML appelé *playbook* et des actions seront executées dans le but de rendre le serveur conforme à cette description.
On pourra relancer Ansible plusieurs fois, l'état final reste le même : seules les actions nécessaires seront exécutées.
Ansible peut exécuter des actions sur des serveurs distants sous :
* *Debian* 6 et supérieur (nécessite uniquement _Python_ ce qui est le cas par défaut)
* Debian 4 / 5 : voir [#AnsiblesurdesvieillesversionsDebian]
* *FreeBSD* et *OpenBSD* : TODO => décrire pré-requis
## Installation
Nous utilisons Ansible 2.0.2 (disponible via <http://pub.evolix.net/jessie/)> sous Debian 8 :
~~~
# apt install --allow-unauthenticated ansible=2.0.2.0-1~bpo8+1
~~~
## Utilisation
~~~
$ ansible --version
ansible 2.0.2.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
$ cat ~/.ansible.cfg
[defaults]
inventory = $HOME/.ansible/hosts
[ssh_connection]
#ssh_args = -o ControlMaster=no -o ControlPersist=no
ssh_args = -o ControlMaster=auto -o ControlPersist=300s
pipelining = True
$ echo HOSTNAME >> ~/.ansible/hosts
$ ssh-copy-id HOSTNAME
$ ansible HOSTNAME -i $HOME/.ansible/hosts -m ping
HOSTNAME | SUCCESS => {
"changed": false,
"ping": "pong"
}
$ ansible HOSTNAME -a "date"
HOSTNAME | SUCCESS | rc=0 >>
jeudi 26 mai 2016, 23:16:01 (UTC+0200)
$ ansible-playbook PLAYBOOK.yml --limit HOSTNAME --forks 1
$ ansible-playbook PLAYBOOK_WITH-SUDO.yml --limit HOSTNAME --ask-become-pass
~~~
Options utiles pour [ansible-playbook](https://manpages.debian.org/cgi-bin/man.cgi?query=ansible-playbook&apropos=0&sektion=0&manpath=Debian+unstable+sid&format=html&locale=en) :
* *-vvvv* : très verbeux (utile notamment pour debug SSH quand on a une erreur _unreachable_)
* *-k / --ask-pass* : demande le mot de passe utilisateur (si connexion SSH sans clé)
* *-K / --ask-become-pass* : demande le mot de passe utilisateur pour sudo
* *-l / --limit HOSTNAME* : limite la connexion au serveur HOSTNAME (attention, par défaut c'est *all*, cf `/etc/ansible/hosts`)
* *-f / --forks N* : nombre de process lancé en parallèle (par défaut 5)... peut être utile de mettre à 1 pour ne pas paralléliser
## Howto Playbook
~~~
$ vim hello_World.yml
- hosts: all
tasks:
- shell: echo hello World
# vim:ft=ansible:
~~~
Un playbook est un ensemble de "plays" ; un "play" contient au minimum *hosts* (serveurs cible) et *tasks* (ensemble de tâches), et peut également contenir :
* *vars* : des variables
* *handlers* : des actions déclenchées si une tâche a été exécutée (via l'option `notify`)
* *roles* : des rôles pour avoir des playbooks organisés et modulaires
### Modules pour tasks
<http://docs.ansible.com/ansible/list_of_all_modules.html>
Pour avoir la liste des modules utilisables dans *tasks* : `ansible-doc -l`
Voici quelques exemples :
~~~
- name : exemple avec le module COMMAND
command: date
- name : exemple avec le module SHELL
shell: time date
- name: exemple avec le module SERVICE
service: name=<httpd> state=restarted
- name: exemple avec le module FILE
file: path=/etc/cron.daily/apticron state=absent
- name : exemple avec le module COPY
copy: src=files/foo dest=/etc/bar owner=root group=root mode=0644
- name : exemple avec le module LINEINFILE
lineinfile: dest=/etc/evocheck.cf insertafter=EOF line="IS_APTICRON=0" regexp="^IS_APTICRON="
- name : exemple avec le module USER
user:
state: present
name: {{ name }}
comment: 'John Doe'
shell: /bin/bash
groups: adm
append: yes
password: '$6$k/Fg76xH'
- name : exemple avec le module REPLACE
replace:
dest: /etc/ssh/sshd_config
regexp: '^(Match User ((?!{{ name }}).)*)$'
replace: '\1,{{ name }}'
- name : exemple avec le module STAT
stat: path=/etc/sudoers.d/foo
register: foo_sudoers_file
- name : exemple avec le module APT
apt:
name: '{{ item }}'
state: latest
allow_unauthenticated: yes
update_cache: yes
cache_valid_time: 3600
with_items:
- vim
- htop
- name : exemple
apt_repository:
- name: exemple avec le module INI_FILE
ini_file:
dest: /root/.my.cnf
section: client
option: user
value: root
mode: 0640
- name: exemple avec le module MYSQL_USER (nécessite le paquet python_mysqldb)
mysql_user:
name: mysqladmin
password: my_password
priv: "*.*:ALL,GRANT"
state: present
config_file: /root/.my.cnf
update_password: on_create
- name: exemple avec l'ajout de plusieurs lignes dans un fichier
blockinfile:
dest: /etc/apache2/envvars
block: |
## Set umask for writing by Apache user.
## Set rights on files and directories written by Apache
- name: exemple
systcl:
- name: exemple
alternatives:
- name: exemple
service:
- name: exemple
mount:
~~~
#### replace: vs lineinfile:
* lineinfile: si regexp= n'est pas matché... il insère quand même la ligne ! avec lineinfile: regexp= n'est pas une condition pour l'insertion mais une condition pour remplacer au lieu d'insérer !
* avec lineinfile: sauf cas tordus, regexp= doit matcher line= (sinon il va insérer line= à l'infini !)
* lineinfile: va 1. regarder si regexp= existe et il remplace la dernière ligne, 2. si regexp n'existe pas, il ajoute line= (sans d'autre condition... même si elle existe déjà)
* replace: il va remplacer uniquement si regex est matché, logique (comme sed)
* si l'on veut utiliser une référence (\1) dans line# avec lineinfile:> erreur, il faut utiliser replace:
* avec lineinfile: backrefs=yes c'est pour utiliser une référence au sein de regexp= (et non pas au sein de line=)
### vars
Gestion des variables :
~~~
vars:
ip: 31.170.9.129
conf_file: /etc/foo.conf
tasks:
- shell: echo {{ ip }} {{ conf_file }}
~~~
Pour gérer de nombreuses variables dans un projet, voici l'arborescence conseillée :
~~~
group_vars/
group1 # here we assign variables to particular groups
group2 # ""
host_vars/
hostname1 # if systems need specific variables, put them here
hostname2 # ""
~~~
### Handlers
La directive `notify` permet de déclencher un `handler` après la fin d'éxecution d'une tâche :
~~~
tasks:
- apt: ...
notify: Done
handlers:
- name: Done
shell: echo "It's done"
~~~
Le redémarrage d'un service devrait toujours être effectué via handler.
### Tags
<https://docs.ansible.com/ansible/playbooks_tags.html>
Hormis le fait de ranger/trier chaque tâche dans une catégorie, permet de limiter/exclure des tâches.
~~~
- name: Coucou
debug: msg="Saloute!"
tags: message
...
~~~
Pour ne pas afficher les messages :
~~~
$ ansible-playbook ... --skip-tags "message"
~~~
On peut appliquer des tags à des rôles, ou voir directement n'éxecuter que certains tags :
~~~
$ ansible-playbook ... --tags "configuration,packages"
~~~
Note : on peut également _taguer_ des `include`.
### Register
`register`. est un élément/champ que l'on peut rajouter pour tout type de tâche et qui initialisera la variable (par le nom donné) avec les valeurs retour du module.
Pour shell, on a le droit à `.stdout`, `.stderr`, `.rc`, ... Mais cela dépend bien des valeurs de retour du module.
Mais pour être sûr des valeurs initialisées, on peut utiliser `debug` afin d'analyser le résultat.
~~~
- stat: path=/etc/passwd
register: st
- debug: var=st
- fail: msg="Whoops! file ownership has changed"
when: st.stat.pw_name != 'root'
~~~
Pour certains modules, `register` est un passage obligatoire pour une utilisation cohérente des éléments (stat...).
## Configuration
<https://docs.ansible.com/ansible/intro_configuration.html>
La configuration est lue dans l'ordre suivant :
~~~
* ANSIBLE_CONFIG (an environment variable)
* ansible.cfg (in the current directory)
* .ansible.cfg (in the home directory)
* /etc/ansible/ansible.cfg
~~~
### Fichier "inventory"
<http://docs.ansible.com/ansible/intro_inventory.html>
Permet d'indiquer la liste des machines concernées par Ansible (peut être limité lors de l'exécution de la commande par l'option `-l`) et de pouvoir les regrouper dans des groupes.
Exemple:
~~~
hostname.internal
[<httpservers>]
machine[01:57].example.com
<http.example.com:2222>
[dbservers]
machine12.example.com
machine50.example.com
m[a:o]chine52.example.com
alias ansible_port=2222 ansible_host=192.168.1.50
[client]
host1 <http_port=80> maxRequestsPerChild=808 #des variables qui seront automatiquement auto-completé lié à cet host
[commercant]
mercerie
chapeautier
[commercant:vars]
ntp_server=ntp.mercerie.example.com
proxy=proxy.mercerie.example.com
~~~
* *hostname.internal* : host hors groupe
* *[<httpservers>]* : le nom du groupe (pour les serveurs <http).> Les noms de hosts qui suivent appartiendront à ce groupe
* *machine[01:57].evolix.net* : on peut indiquer une [pseudo-]expression régulière - ici ajoutera les machines _machine01.evolix.net_, _machine02.evolix.net_, _machine03.evolix.net_, ..., _machine57.evolix.net_
* *<http.evolix.net:2222*> : ansible se connecte par ssh, et _<http.evolix.net_> a un port ssh d'écoute différent qui est 2222
* *[dbservers]* : groupe pour les serveurs de base de donnée
* *machine50.example.com* : cette machine est déjà présente dans le groupe _<httpservers_,> mais sera aussi accessible à partir du groupe _dbservers_
* *alias ansible_port=2222 ansible_host=192.168.1.50* : la machine alias n'est pas un vrai FQDN mais pointera vers _192.168.1.50_ car on a indiqué des variables propre à _ansible_. Il est aussi disponible `ansible_connection` (local ou ssh) ou `ansible_user` (le nom de l'utilisateur de la machine distante avec lequel _ansible_ se connectera en ssh)
* *host1 <http_port=80> maxRequestsPerChild=808* : des variables qui seront automatiquement auto-completé lié à host1
* *[commercant:vars]* : des variables qui seront liés au groupe _commercant_. On peut aussi créer des groupes de groupes en utilisant `:children`
On peut aussi découper le fichier "inventory" selon les groupes et les variables : [<http://docs.ansible.com/ansible/intro_inventory.html#splitting-out-host-and-group-specific-data>].
Les variables propres à Ansible : [<http://docs.ansible.com/ansible/intro_inventory.html#list-of-behavioral-inventory-parameters>]
### ansible.cfg
Options utiles (TODO : à revoir) :
* *display_args_to_stdout* : mettre à `True` si on veut voir tout le contenu du _tasks_ executé pour chaque étape écrit sur _stdout_
* *display_skipped_hosts* : mettre à `False` si on ne veut pas voir affiché sur _stdout_ l'information d'un _task_ qui n'est pas exécuté _(le nom de variable est confu - mais il s'agit bien de l'affichage du task)_
* *error_on_undefined_vars* : mettre à `True` pour être sûr que le script ansible s'arrête si une variable n'est pas défini (alors qu'il y a utilisation de cette dernière dans une _task_)
* *force_color* : mettre à `1` pour forcer la couleur
* *forks* : le nombre de processus en parallèle possible lors déploiement du script ansible sur nombreux _hosts_.
* *module_lang* : changer la langue
* *module_name* : le module par défaut (`command`) lors de l'utilisation de la commande `ansible`
* *hosts* : accès vers les _hosts_ par défaut (`all`)
* *private_key_file* : le chemin pour la clé pem
* *remote_port* : le port ssh par défaut (`22`)
* *remote_user* : l'utilisateur pour la connexion ssh par défaut (`root`)
* *retry_files_enabled* : mettre à `True` pour la création de fichier `.retry` après une failure de ansible pour reprendre le travail précédent - ajouté en argument dans l'appel de la commande
## Erreurs
### unbalanced jinja2 block or quotes
~~~
fatal: [test.evolix.net]: FAILED! => {"failed": true, "reason": "error while splitting arguments, either an unbalanced jinja2 block or quotes"}
~~~
Vérifier bien la syntaxe du document qui est référé pour cette erreur. Cela peut être une quote mal fermé (ou mélange simple quote, double quote), ou encore histoire de crochet devenant une parenthèse...
### UNREACHABLE!
~~~
fatal: [test.evolix.net]: UNREACHABLE! => {"changed": false, "msg": "SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue", "unreachable": true}
~~~
Malheureusement, cela arrive souvent sur certaines machines (une?), mais pas de solutions pour le moment -> boire du café - beaucoup de café.
Du côté de la machine distante, dans le fichier `/var/log/auth.log`:
~~~
14:56:29 localhost sshd[19915]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=dual.evolix.net user=service
14:56:31 localhost sshd[19915]: Accepted password for service from 192.168.4.137 port 42502 ssh2
14:56:31 localhost sshd[19915]: pam_unix(sshd:session): session opened for user service by (uid=0)
14:56:31 localhost systemd-logind[641]: New session 181 of user service.
14:56:32 localhost sshd[19915]: pam_unix(sshd:session): session closed for user service
14:56:32 localhost systemd-logind[641]: Removed session 181.
~~~
Et quand ça marche - la session ne se referme pas, et est réutilisé par les exécutions playbook suivantes:
~~~
14:58:57 localhost sshd[20339]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=dual.evolix.net user=service
14:59:00 localhost sshd[20339]: Accepted password for service from 192.168.4.137 port 42511 ssh2
14:59:00 localhost sshd[20339]: pam_unix(sshd:session): session opened for user service by (uid=0)
14:59:00 localhost systemd-logind[641]: New session 182 of user service.
...
15:01:08 localhost sshd[23034]: Received disconnect from 192.168.4.137: 11: disconnected by user
15:01:08 localhost sshd[23024]: pam_unix(sshd:session): session closed for user service
15:01:08 localhost systemd-logind[641]: Removed session 182.
~~~
Mais si tentative de déploiement ansible juste après la session supprimé (par ex la 182), c'est à ce moment là qu'on se retrouve avec des *UNREACHABLE* -> savoir pourquoi sshd supprime la session ssh...
### Missing required arguments
~~~
fatal: [test.evolix.net]: FAILED! => {"changed": false, "failed": true, "msg": "missing required arguments: section"}
~~~
Le message est assez clair, donc bien relire la doc du module sur ansible, et toujours ajouter les arguments obligatoires pour ce module.
### Requires stdlib json or simplejson module
~~~
fatal: [lenny.evolix.net]: FAILED! => {"changed": false, "failed": true, "msg": "Error: ansible requires the stdlib json or simplejson module, neither was found!"}
~~~
~~~
# apt install python-simplejson
~~~
## Astuces
### Vérifier un playbook
* Vérifier la syntaxe :
~~~
$ ansible-playbook --syntax-check my-experimental-playbook.yml
~~~
<http://www.yamllint.com/>
* vérifier les action qui vont être faite (mode _dry-run_) sans rien exécuter :
~~~
$ ansible-playbook --check my-experimental-playbook.yml
~~~
* avoir le diff des fichiers modifiés (ne marche pas avec les modules replace/lineinfile à priori) :
~~~
$ ansible-playbook --check --diff my-experimental-playbook.yml
~~~
### Plus d'infos sur module
Lister les modules:
~~~
# ansible-doc -l
~~~
Avoir des infos sur un module:
~~~
# ansible-doc shell
> SHELL
The [shell] module takes the command name followed by a li
space-delimited arguments. It is almost exactly like the [
...
~~~
### Stopper l'éxecution du code
Pour par exemple, stopper le code à un moment pour lire les valeurs d'une variables
~~~
- debug: var=cequejeveuxvoir
- command: /bin/false
~~~
ou
~~~
- debug: var=cequejeveuxvoir
- fail: msg="FAIL"
~~~
ou
~~~
- debug: var=cequejeveuxvoir
- pause:
~~~
### Ansible sur des vieilles versions Debian
* Installer package python
[<https://docs.ansible.com/ansible/raw_module.html>]
(bzip2, php, ... selon services à installer)
~~~
- raw: apt-get -y install python-simplejson [bzip2 php5-cli]
~~~
* Si pas encore fait, donner droit mysql à l'utilisateur
~~~
> GRANT ALL ON db.* TO 'user'@'localhost';
~~~
### Limiter l'exécution à certaines machines
* Limiter aux groupes www et sql (www et sql peuvent en fait être indifféremment des groupes ou des serveurs) :
~~~
$ ansible-playbook -l "www:sql" playbook.yml
~~~
* limiter aux serveurs foo-www01, foo-lb01, foo-filer, etc… :
~~~
$ ansible-playbook -l "foo-*" playbook.yml
~~~
* limiter aux 10 premiers serveurs de l'inventaire (utile pour faire par paquets) :
~~~
$ ansible-playbook -l "*[0:9]" playbook.yml
~~~
* puis à ceux restant :
~~~
$ ansible-playbook -l "*[10:]" playbook.yml
~~~
Il est de toute façon préférable de ne pas mettre *all* dans le champs *hosts* dans le playbook pour éviter un -_possible_- oublie de "limite" de machines.
### Lancement tâches hosts asynchrone
Pour éviter que les différentes tâches s'appliquent une par une sur tout les hosts impliqués par le déploiement du play ansible, on peut utiliser l'option `strategy` à la valeur `free` pour que chaques tâches sur un host puisse continuer dès la fin de son exécution sans attendre l'état des autres hosts concernés en cours.
~~~
- hosts: all
...
strategy: free
~~~
_Ne plus se fier au texte `host changed` après texte de la tâche, car il pourrait s'agir d'une autre tâche affiché plus en haut dans le texte de l'historique_
### Fréquence des hosts
Lors d'une appel d'un play, on peut indiquer une fréquence sur le nombre d'host touché par l'éxecution du playbook.
* `Fork` pour le nombre de hosts simultanés (changeable dans le fichier _ansible.cfg_ - mettre une valeur importante > centaine).
* `serial` en en-tête contenant une valeur numérique qui représente le nombre de machines pour chaque tour d'éxecution de playbook, ou un pourcentage par rapport à la liste inventory concerné.
### Cowsay
~~~
____________________
< NO MORE HOSTS LEFT >
--------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
____________
< PLAY RECAP >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
~~~
Pour avoir les messages de la vache : *cowsay*.
Si installer, pour le désactiver : `export ANSIBLE_NOCOWS=1`
Disponible aussi dans la conf du fichier `/etc/ansible/ansible.cfg`
<https://support.ansible.com/hc/en-us/articles/201957877-How-do-I-disable-cowsay->
### Conditions dans fichier jinja2
~~~
{% if python_is_installed is defined %}
Ansible devrait marcher -pardi!
{% endif %}
~~~
<http://jinja.pocoo.org/docs/dev/templates/#builtin-tests>
Voir la doc pour plus de features : <http://jinja.pocoo.org/docs/dev/>
### Lire une entrée au clavier
S'il manque une valeur pour la suite du script, soit on le gère en mettant une erreur, ou une valeur par défaut, mais sinon on peut aussi demander une valeur a être tapé sur le clavier :
~~~
vars_prompt:
- name: 'prenom'
prompt: 'Quel est votre prénom ?'
private: no
tasks:
- debug: var=prenom
~~~
Malheureusement pour le moment, doit se situer avant `tasks`.
Si on veut utiliser cette variable dans une tâche, il faut simplement utiliser le nom de la variable, et si on veut l'utiliser (explicitement) pour un play ne se trouvant pas dans le même fichier (donc ici la variable dans autre.yml s'appelera _prenom_de_autre_ et non prenom) :
~~~
- include: './tasks/autre.yml'
vars:
prenom_de_autre: prenom
~~~
<https://docs.ansible.com/ansible/playbooks_prompts.html>
### Lancer playbook en mode interactif
~~~
ansible-playbook playbook.yml --step
~~~
<https://docs.ansible.com/ansible/playbooks_startnstep.html>
### Ne pas lancer une commande shell si le fichier existe
En initialisant le champs *creates* indiquant le chemin de fichier lors de l'utilisation du module shell, cette tâche là ne s'executera seulement si le fichier (chemint *creates* correspondant) n'existe pas.
Et le contraire (si le fichier existe la tâche se lancera), avec le champs *removes*.
Disponible sur certains module (comme *shell*).
Plus simple et rapide que de tester le fichier par le module *stat* juste avant.
### Lancer tâche sur machine précise (voir local)
~~~
- name: /etc/hosts
shell: cat /etc/hosts
register: tmp
delegate_to: localhost
- debug: var=tmp.stdout
~~~
Pour local, peut être remplacer par la directive `local_action`.
<https://docs.ansible.com/ansible/playbooks_delegation.html#delegation>
### Lancer tâche qu'une seule fois
~~~
- name: Début installation, envoie email
run_once: true
...
~~~
Si ajouter avec `delegate_to`, seule cette machine executera cette tâche, sinon c'est la première dans la liste de l'inventory.
<https://docs.ansible.com/ansible/playbooks_delegation.html#run-once>
### Appliquer une tâche à une liste (tableau) -> boucle
#### with_items
~~~
- name: Manger les fruits
shell: eat '{{ item }}'
with_items:
- Apple
- Orange
- Strawberry
- Mango
~~~
Par exemple pour l'installation de plusieurs nouveaux packages :
~~~
---
- hosts: localhost
tasks:
- apt: name='{{ item }}' state=present
with_items: [ 'cmatrix', 'tetrinet-server', 'tetrinet-client', 'xtel', 'xtell' ]
~~~
Même si il y aura plusieurs packages installés, cela ne comptera que pour *un* changement (changed=1).
Cette tâche appellera un par un les éléments de la liste (présent dans with_items) pour le module.
En l'appelant :
~~~
ansible-playbook -b --ask-become-pass --become-method='su' --become-user='root' apt.yml
~~~
#### with_nested
Pour croiser les éléments des items -> *"with_nested"*.
~~~
tasks:
- include: "./ajout_utilisateur_sur_machine.yml"
vars:
user: "{{ item[0] }}"
server: "{{ item[1] }}"
with_nested:
- [ 'alice', 'bob' ]
- [ 'machine1', 'machine2', 'machine-backup' ]
~~~
Qui aura pour effet d'appeler le include avec comme argument : item[0]=alice, item[1]=machine1; puis item[0]=alice, item[0]=machine2; ... puis item[0]=bob, item[1]=machine1, ...
#### with_dict
Avec hash ...
~~~
users:
bob:
name: Bob
uid: 1000
home: /home/bob
alice:
name: Alice
uid: 1001
home:
tasks:
- user: name="{{ item.key }}" comment="{{ item.value.name }}" uid="{{ item.value.uid }}" home="{{ item.value.home }}"
with_dict: "{{ users }}"
~~~
### Se connecter sous un autre utilisateur UNIX
Par défaut, l'utilisateur se connectant sur le serveur distant est {{ ansible_user_id }} (càd uid courant UNIX). On peut soit le préciser dans le fichier de conf principal de ansible avec `remote_user : michu` ou en l'indiquant en argument lors de l'éxecution du playbook.
~~~
ansible-playbook -u michu -k play.yml
~~~
### Éviter que la commande shell indique élement 'changed'
Sur tout les modules, chaque taches retourne un statut sur son résultat :
* Ok : Tout s'est bien passé
* Changed : Tout s'est bien passé mais il y a eu modification par rapport à l'état précédent (droits fichiers,...)
* Failed : Raté
Le soucis est qu'il parrait bien difficile pour le module shell de connaître après execution de la commande s'il y a eu modification. Par défaut, il y a changement - quand bien même l'utilisation du shell se fait pour afficher un résultat (id, date, ...).
Pour éviter cela on peut mettre :
~~~
- shell: date
changed_when: false
~~~
Ou donner une condition
~~~
- shell: cat > {{ fichier }} </dev/null
changed_when: {{ fichier.stats.exist }}
~~~
### Voir variables disponibles
~~~
$ ansible -m setup <hostname>
service.evolix.net | SUCCESS => {
"ansible_facts": {
...
"ansible_architecture": "x86_64",
"ansible_bios_date": "12/01/2006",
"ansible_bios_version": "VirtualBox",
"ansible_cmdline": {
"BOOT_IMAGE": "/boot/vmlinuz-3.16.0-4-amd64",
"quiet": true,
"ro": true,
"root": "UUID=37de3cbb-3f28-48d2-a4eb-c893a2f2fbc3"
},
"ansible_date_time": {
"date": "2016-05-06",
"day": "06",
"epoch": "1462546886",
"hour": "17",
...
},
"ansible_default_ipv4": {
...
}
~~~
~~~
$ ansible -m debug -a "var=hostvars['hostname']" localhost
~~~
Pour récupérer toutes les adresses MAC des machines :
~~~
---
- hosts: all
gather_facts: true
tasks:
- debug: var=ansible_eth0.macaddress
~~~
que l'on pourra combiner par exemple avec un pipe en ligne de commande :
~~~
ansible-playbook mac_address.yml | grep ansible_eth0.macaddress | sed 's/^\s*"ansible_eth0.macaddress": "\(.*\)"/\1/'
~~~
Il est possible aussi d'accéder aux variables d'environnement shell :
~~~
"{{ lookup('env','HOME') }}"
~~~
## Ressources utiles
* [Documentation officielle](http://docs.ansible.com/ansible/) (voir notamment la partie [Best Practices](http://docs.ansible.com/ansible/playbooks_best_practices.html))
* [Ansible 101 - on a Cluster of Raspberry Pi 2s](https://www.youtube.com/watch?v=ZNB1at8mJWY)
* Sysadmin Casts (épisodes [43](https://sysadmincasts.com/episodes/43-19-minutes-with-ansible-part-1-4), [45](https://sysadmincasts.com/episodes/45-learning-ansible-with-vagrant-part-2-4), [46](https://sysadmincasts.com/episodes/46-configuration-management-with-ansible-part-3-4) et [47](https://sysadmincasts.com/episodes/47-zero-downtime-deployments-with-ansible-part-4-4))
* [How Twitter uses Ansible](https://www.youtube.com/watch?v=fwGrKXzocg4) (AnsibleFest 2014)
* [Orchestration with Ansible at Fedora Project](http://fr.slideshare.net/AdityaPatawari/ansible-33223245)

207
HowtoAsterisk.md Normal file
View File

@ -0,0 +1,207 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Asterisk
<http://www.asterisk.org/community/documentation>
## Installation
~~~
# aptitude install asterisk
~~~
On active son démarrage dans /etc/default/asterisk :
~~~
RUNASTERISK=yes
~~~
Puis on démarre :
~~~
# /etc/init.d/asterisk start
Starting Asterisk PBX: asterisk.
~~~
Connexion en mode CLI :
~~~
# asterisk -r
Asterisk 1.6.2.9-2+squeeze10, Copyright (C) 1999 - 2010 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 1.6.2.9-2+squeeze10 currently running on localhost (pid = 32537)
*CLI>
~~~
Plus d'infos sur les commandes sur <http://www.voip-info.org/wiki/view/Asterisk+CLI>
## Configuration
La configuration se passe dans le répertoire /etc/asterisk. Pour un mode VoIP simple, les fichiers de configuration principaux sont
* sip.conf
* extensions.conf
## Réseau
Le protocole SIP utilise principalement le port UDP/5060 + des ports UDP divers...
## Mode CLI
Recharger la configuration Asterisk :
~~~
*CLI> reload
~~~
### SIP
Lister les connexions SIP entrantes/sortantes :
~~~
*CLI> sip show peers
Name/username Host Dyn Nat ACL Port Status
[...]
~~~
Détails sur une connexion SIP particulière :
~~~
*CLI> sip show peer <PEER>
~~~
Lister les channels :
~~~
*CLI> sip show channels
Peer User/ANR Call ID Format Hold Last Message Expiry
1.2.3.4 (None) 53fa8add1dd3cba 0x0 (nothing) No Rx: OPTIONS
192.168.0.21 (None) 32e1708b-5b55-4 0x0 (nothing) No Rx: REGISTER
2 active SIP dialogs
~~~
Mode debug on / off pour SIP :
~~~
*CLI> sip set debug on
SIP Debugging enabled
*CLI> sip set debug off
SIP Debugging Disabled
~~~
### Plan de numérotation
Voir le plan de numérotation dans un contexte :
~~~
*CLI> dialplan show default
[ Context 'default' created by 'pbx_config' ]
'100' => 1. Answer() [pbx_config]
2. Playback(demo-echotest) [pbx_config]
3. Echo() [pbx_config]
4. Playback(demo-echodone) [pbx_config]
5. Hangup() [pbx_config]
[...]
~~~
Recharger le plan de numérotation :
~~~
*CLI> dialplan reload
Dialplan reloaded.
~~~
## Meeting Room
Pour avoir des meeting rooms, il est nécessaire d'avoir le module DAHDI
~~~
# aptitude install linux-headers-`uname -r` dahdi-source asterisk-dahdi
# m-a a-i dahdi
# modprobe dahdi_dummy
# chown -R asterisk: /dev/dahdi/
~~~
On peut ainsi configurer via meetme.conf :
~~~
conf => 1
conf => 2
conf => 3,1234
~~~
Et ensuite dans le plan de numérotation :
~~~
exten => 7001,1,MeetMe(1)
exten => 7002,1,MeetMe(2)
exten => 7003,1,MeetMe(3)
~~~
On peut lister les meeting rooms :
~~~
Meetme list
Conf Num Parties Marked Activity Creation Locked
2 0002 N/A 00:11:55 Static No
1 0001 N/A 00:53:33 Static No
* Total number of MeetMe users: 3
~~~
On peut lister les participants à une meeting room ...et même killer (pratique en cas de bug d'un utilisateur non déconnecté) :
~~~
Meetme list 1
Meetme kick 1 8
~~~
## Configuration téléphones
Pour les téléphones Linksys/CISCO (SPA922, SPA901, SPA512G, SPA3102, PAP2T, etc.).
On crée un entrée dans sip.conf :
~~~
[telephone1]
type=friend
host=dynamic
username=LOGIN
secret=PASS
quality=yes
nat=no
canreinvite=no
dtfmode=rfc2833
allow=ulaw
~~~
Puis on configure le téléphone ainsi :
~~~
EXT1
Proxy : IP
Register : yes
Display Name : telephone1
User ID : LOGIN
Password : PASS
use Auth ID : no
Auth ID : LOGIN
~~~
### Magic code Cisco / Linksys
Composer `****` puis :
~~~
110# : IP address
73738# puis 1 : reset
7932# puis 1 : enable web on WAN
~~~

7
HowtoAtom.md Normal file
View File

@ -0,0 +1,7 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Atom
<https://atom.io/>
à compléter :)

14
HowtoBNX2.md Normal file
View File

@ -0,0 +1,14 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
bnx2 et bnx2x sont des firmwares utilisés (entre autres ?) par les cartes Broadcom NetXtreme II :
~~~
0b:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
~~~
Étant donné que ceux-ci ne sont pas libre, il ne sont pas intégré dans l'installateur Debian et la carte réseau ne sera pas fonctionnelle.
Il est nécessaire de télécharger le firmware sous forme de .deb (nonfree) et de le placer à la racine d'une clé USB (qui peut être aussi bien en ext3 qu'en vfat). L'installateur Debian détectera automatiquement le paquet est l'utilisera.
*Liens (suivant le modèle de la carte) :*
* <http://packages.debian.org/lenny/firmware-bnx2>
* <http://packages.debian.org/lenny/firmware-bnx2x>

74
HowtoBTRFS.md Normal file
View File

@ -0,0 +1,74 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto BTRFS
*_Wikipedia*_
Btrfs (B-tree file system, prononcé ButterFS) est un système de fichiers des années 2010 fondé sur le Copy-On-Write (copie sur écriture en français) sous licence GNU GPL, développé conjointement par Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO AG (en) et autres. En 2012, alors qu'il n'était pas encore considéré comme tout-à-fait stable, un effort intense de développement et de test est fourni par la communauté afin de faire de Btrfs le successeur de ext4 et ext3, systèmes de fichiers habituels des distributions Linux. OpenSuse 13.2 propose dès son lancement Btrfs par défaut pour la partition racine afin d'assurer la sécurité et laisse le choix entre ext4 et XFS (plus rapide) pour /home.
Btrfs offre les fonctionnalités suivantes absentes d'autres systèmes de fichiers :
- Instantané (snapshots)
- somme de contrôle
Ces caractéristiques sont importantes pour les systèmes Linux, serveurs comme postes clients, car les tailles de stockage comme les configurations tendent à augmenter et à se complexifier.
On commence par installer le paquet nécéssaire
~~~
apt install btrfs-tools
~~~
On formate la partition
~~~
mkfs.btrfs /dev/sda9
~~~
Montage
~~~
echo "/dev/sda9 /backup btrfs defaults 0 0" >> /etc/fstab
mount /backup
~~~
On créé des subvolume
~~~
btrfs subvolume create /backup/aaa
btrfs subvolume create /backup/bbb
~~~
Lister les subvolumes
~~~
btrfs subvolume list /backup/
~~~
On peut faire des snapshots
~~~
btrfs subvolume snapshot /backup/aaa /backup/bbb/snapshot1
~~~
On peut supprimer des subvolumes (et snapshots)
~~~
btrfs subvolume delete /bbb/bbb/snapshot1
~~~
Vérifier l'intégrité
~~~
btrfs scrub start /backup/
btrfs scrub status /backup/
~~~
Check plus poussé sur une partition non montée
~~~
btrfs check -p /dev/sda9
~~~
Voir si la partition a présenté des erreurs
~~~
btrfs dev stats /backup
~~~
Sources :
[<https://fr.wikipedia.org/wiki/Btrfs>]
[<https://wiki.debian.org/Btrfs>]
[<https://btrfs.wiki.kernel.org/index.php/Getting_started#Basic_Filesystem_Commands>]
[<https://btrfs.wiki.kernel.org/index.php/SysadminGuide>]

28
HowtoBash.md Normal file
View File

@ -0,0 +1,28 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Astuces Bash
~~~
function hello { echo Hello; echo $1; }
~~~
## Raccourcis
~~~
Ctrl+d : quitte le terminal courant
Ctrl+a : aller en début de ligne
Ctrl+e : aller en fin de ligne
Ctrl+k : effacer (coupe) du curseur à la fin de la ligne
Ctrl+u : effacer (coupe) du début de ligne au curseur
Ctrl+y : colle la partie précédemment coupée
Ctrl+r : rechercher parmi l'historique
Ctrl+s : freeze l'affichage de l'output
Ctrl+q : défreeze l'affichage de l'affichage de l'output
Ctrl+t : inverse les caractères autour du curseur
Ctrl+c : annule la ligne en cours et passer sur une nouvelle ligne vide
Ctrl+z : suspend la tâche en cours
ctrl+l : efface/rafraichit l'écran
ctrl+x ctrl+e : édite la ligne dans $EDITOR
alt+effacer : Efface un mot à gauche du curseur
alt+d : Efface un mot à droite du curseur
~~~

196
HowtoBenchmarks.md Normal file
View File

@ -0,0 +1,196 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Benchmarks
*ATTENTION, CES TESTS NE DOIVENT PAS ÊTRE EFFECTUÉS SUR UN SERVEUR EN PRODUCTION*
## Tests sur les performances du disque
### dd
On essaye plus ou moins de désactiver le cache mémoire pour l'écriture du filesystem
(en fait, le cache mémoire se remplit quand même pour optimiser une éventuelle lecture !) :
~~~
# echo 3 > /proc/sys/vm/drop_caches
# sysctl -w vm.dirty_background_ratio=0
# sysctl -w vm.dirty_ratio=0
~~~
Note importante : ces paramètres sont à activer avec précaution : ils peuvent dégrader les performances...
même pour les tests (en provoquant une sorte de yoyo en terme de vitesse d'accès). L'idéal est de tester via
un volume beaucoup plus grand que le taille de la mémoire du serveur.
Performances en écriture :
Un test simple est d'écrire un très gros fichier via la commande _dd_.
~~~
# time dd if=/dev/zero bs=4096 count=52398080 2>/tmp/out | pv > 200G ; cat /tmp/out
200GB 0:24:40 [ 138MB/s] [ <=> ]
real 24m40.378s
user 0m35.902s
sys 11m17.146s
52398080+0 records in
52398080+0 records out
214622535680 bytes (215 GB) copied, 1480.38 s, 145 MB/s
~~~
Note : la combinaison des options bs/count n'a apparemment que peu d'influence sur les résultats.
Et en lecture :
~~~
# echo 2 > /proc/sys/vm/drop_caches
# time dd if=200G bs=4096 count=52398080 2>/tmp/out | pv > /dev/null ; cat /tmp/out
200GB 0:09:13 [ 370MB/s] [ <=> ]
real 9m13.131s
user 0m39.322s
sys 9m6.602s
52398080+0 records in
52398080+0 records out
214622535680 bytes (215 GB) copied, 553.056 s, 388 MB/s
~~~
Et en effacement :
~~~
# time rm /home/32gb
~~~
### cryptsetup
~~~
# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1 1024000 iterations per second
PBKDF2-sha256 668734 iterations per second
PBKDF2-sha512 344926 iterations per second
PBKDF2-ripemd160 624152 iterations per second
PBKDF2-whirlpool 182044 iterations per second
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 506.0 MiB/s 2019.3 MiB/s
serpent-cbc 128b 78.3 MiB/s 272.1 MiB/s
twofish-cbc 128b 166.4 MiB/s 321.7 MiB/s
aes-cbc 256b 405.2 MiB/s 1497.9 MiB/s
serpent-cbc 256b 81.7 MiB/s 272.2 MiB/s
twofish-cbc 256b 169.5 MiB/s 321.5 MiB/s
aes-xts 256b 1684.1 MiB/s 1688.8 MiB/s
serpent-xts 256b 279.3 MiB/s 268.1 MiB/s
twofish-xts 256b 311.6 MiB/s 317.7 MiB/s
aes-xts 512b 1304.0 MiB/s 1304.6 MiB/s
serpent-xts 512b 280.2 MiB/s 268.3 MiB/s
twofish-xts 512b 315.6 MiB/s 317.7 MiB/s
~~~
### Bonnie++
Bonnie++ est un utilitaire qui permet de faire un bench sur les disques en écrite/lecture de façon différente, par bloc, et par en mode « random ».
Une bonne explication : <http://www.googlux.com/bonnie.html>
Un exemple qui test le disque avec un fichier de 6Go ` bonnie++ -d ./ -s 6144`:
~~~
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
Concurrency 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
client 6G 607 99 50366 13 22989 4 2738 92 57663 7 109.1 5
Latency 30503us 736ms 496ms 41723us 52395us 841ms
Version 1.96 ------Sequential Create------ --------Random Create--------
client -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 20037 41 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
Latency 21643us 2840us 4224us 1399us 481us 2791us
~~~
### iozone
~~~
$ iozone -T -t 4 -s 16g -r 256k -T -I -i0 -i1 -i2
~~~
Crée 4 threads, dont chacun écrit et lit dans un fichier de 16Go, avec un buffer de 256Ko, utilisant O_DIRECT, pour désactiver le cache.
~~~
$ iozone -a -I -b test.ods
~~~
Fais tout les tests iozone en désactivant le cache, et en créant en fichier ODS pour faire un graphique des résultats, exemple :
### pg_test_fsync
~~~
# aptitude install postgresql-contrib
~~~
~~~
$ usr/lib/postgresql/9.2/bin/pg_test_fsync
2000 operations per test
O_DIRECT supported on this platform for open_datasync and open_sync.
Compare file sync methods using one 8kB write:
(in wal_sync_method preference order, except fdatasync is Linux's default)
open_datasync n/a
fdatasync 3806.232 ops/sec
fsync 3096.090 ops/sec
fsync_writethrough n/a
open_sync 3523.832 ops/sec
Compare file sync methods using two 8kB writes:
(in wal_sync_method preference order, except fdatasync is Linux's default)
open_datasync n/a
fdatasync 2974.951 ops/sec
fsync 2238.596 ops/sec
fsync_writethrough n/a
open_sync 1777.819 ops/sec
Compare open_sync with different write sizes:
(This is designed to compare the cost of writing 16kB in different write open_sync sizes.)
16kB open_sync write 3608.877 ops/sec
8kB open_sync writes 2009.499 ops/sec
4kB open_sync writes 1238.880 ops/sec
2kB open_sync writes 135.783 ops/sec
1kB open_sync writes 67.377 ops/sec
Test if fsync on non-write file descriptor is honored:
(If the times are similar, fsync() can sync data written on a different descriptor.)
write, fsync, close 2962.546 ops/sec
write, close, fsync 3015.991 ops/sec
Non-Sync'ed 8kB writes:
write 376151.965 ops/sec
~~~
### fio
<https://github.com/axboe/fio>
/!\ Attention on fait les tests sur le disque, sans partition ou FS. /!\
~~~
Read bandwidth:
fio --direct=1 --rw=randread --bs=1m \
--size=5G --numjobs=4 --runtime=10 --group_reporting --name=file1
Read IOPS:
fio --direct=1 --rw=randread --bs=4k \
--size=5G --numjobs=64 --runtime=10 --group_reporting --name=file1
Write bandwidth:
fio --direct=1 --rw=randwrite --bs=1m \
--size=5G --numjobs=4 --runtime=10 --group_reporting --name=file1
Write IOPS:
fio --direct=1 --rw=randwrite --bs=4k \
--size=5G --numjobs=64 --runtime=10 --group_reporting --name=file1
read : io=1859.1MB, bw=190420KB/s, iops=47604 , runt= 10002msec
write: io=956556KB, bw=95627KB/s, iops=23906 , runt= 10003msec
read : io=2632.0MB, bw=268952KB/s, iops=262 , runt= 10021msec
write: io=2258.0MB, bw=230827KB/s, iops=225 , runt= 10017msec
~~~

469
HowtoBind.md Normal file
View File

@ -0,0 +1,469 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Bind
## Installation et configuration de Bind
Sous Debian Squeeze, la version de Bind est 9.7.3
Afin d'installer Bind, lancez les commandes suivantes :
~~~
# aptitude install bind9
~~~
L'installation terminée, débutez la configuration en exécutant le script chroot-bind.sh que vous aurez téléchargé
sur [<https://forge.evolix.org/projects/chroot-bind/repository>], et placé dans /root :
~~~
# cd /root
# wget <https://forge.evolix.org/projects/chroot-bind/repository/revisions/master/raw/chroot-bind.sh>
# sh chroot-bind.sh
~~~
Ajoutez `-t /var/chroot-bind` dans la variable OPTIONS du fichier /etc/default/bind9 :
~~~
RESOLVCONF=no
OPTIONS=" -u bind -t /var/chroot-bind"
# Si pas d'IPv6 :
#OPTIONS="-4 -u bind -t /var/chroot-bind"
~~~
Une fois fait, ouvrez le fichier /etc/bind/named.conf.options et modifiez et/ou ajoutez les lignes suivantes :
~~~
options {
directory "/var/cache/bind";
version "Bingo";
auth-nxdomain no;
//listen-on-v6 { any; };
allow-query { localhost;};
allow-recursion { localhost; };
allow-transfer { localhost; };
//allow-query { localhost; localnets; };
//allow-recursion { localhost; localnets; };
//listen-on { 127.0.0.1; [IP LOCALE]; [IP PUBLIQUE];};
};
logging {
//category default { default_syslog; default_debug; };
category default { default_debug; };
channel default_syslog {
syslog daemon;
severity info;
};
channel default_debug {
file "/var/log/bind.log";
severity debug;
};
};
~~~
Ensuite, créez le fichier /etc/bind/named.conf.acl et ajoutez des ACL du type
~~~
acl "ACL-kivabien" {
::ffff:62.212.111.216; 62.212.111.216; // Nerim
::ffff:88.179.18.233; 88.179.18.233; // Free
::ffff:85.31.205.33; 85.31.205.33;
::ffff:85.118.59.1; 85.118.59.1;
};
~~~
Dans le fichier /etc/bind/named.conf, ajustez :
~~~
include "/etc/bind/named.conf.acl";
include "/etc/bind/named.conf.options";
~~~
Puis redémarrez Bind :
~~~
# /etc/init.d/bind9 restart
~~~
Créez le fichier /etc/bind/named.conf.local et ajouter le bloc de lignes suivant autant de fois que ce que vous comptez gérer de domaines en remplaçant 'example.com' par le domaine en question :
~~~
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-query { any; };
allow-transfer { "ACL-kivabien"; };
};
~~~
Ensuite, pour chaque bloc créé, il vous faudra créer autant de fichiers correspondant au 'file' de l'étape précédente, qui contiendra les lignes suivantes
(en remplacant les 'example.com' par votre domaine, et les '[IP PUBLIQUE]' par l'adresse IP numérique adéquate :
~~~
$TTL 1800
@ IN SOA ns1.ns-example.com. dnsmaster.example.com. (
2011090101 ; serial
2h ; rafraichissement slave->master
1h ; en cas d'echec du refraichissement, nouvel essai
5w ; expiration des enregistrements en cache par le slave
10m ) ; TTL negatif
IN A [IP PUBLIQUE]
IN NS ns1.ns-example.com.
NS ns2.ns-example.com.
; IN MX 10 mail
ns1 IN A [IP PUBLIQUE]
;mail IN A [IP PUBLIQUE]
www IN CNAME @
ftp IN CNAME ftp.debian.org.
~~~
où ns1.ns-example.com correspond au nom du serveur primaire et dnsmaster.example.com correspond à un mail dnsmaster@example.com qui doit être valide.
Poursuivez dans le fichier /etc/bind/named.conf et rajoutez la ligne suivante en toute fin de fichier :
~~~
include "/etc/bind/named.conf.CLIENT";
~~~
Enfin, vérifiez que l'ensemble des fichiers que vous avez créé et/ou modifié sont bien en accès lecture pour l'utilisateur bind:bind,
soit par un chown, soit par un chmod 644. Redémarrez Bind par la commande :
~~~
# /etc/init.d/bind9 restart
~~~
Et testez avec _dig_ le couteau suisse du DNS !
## Mise à jour dynamique
Il est possible de mettre à jour une zone DNS avec nsupdate et une clef DNSSEC sans devoir éditer le fichier db.
Dans ce cas, Bind génère un ficher de journal binaire contenant l'historique des modifications apportées à la zone.
Ce fichier n'est pas "flushé" en temps réel et la zone au format texte peut être désynchronisée quelques temps après une modification (elle est mise à jour avec le journal environ toutes les 15min), il faut donc faire attention lors d'une mise à jour manuelle :
~~~
rndc freeze domain.tld
[Modification manuelle de la zone]
rndc thaw domain.tld
rndc reload domain.tld
~~~
## Rotation des logs
Voici un exemple de configuration logrotate, qui effectue la rotation du fichier bind.log à l'intérieur du chroot :
~~~
/var/chroot-bind/var/log/bind.log {
weekly
missingok
rotate 4
create 640 bind bind
sharedscripts
postrotate
rndc reload > /dev/null
endscript
}
~~~
## Reverse DNS
Un reverse DNS est un nom de domaine associé à une adresse IP. Exemples :
~~~
$ dig -x 31.170.8.43
;; QUESTION SECTION:
;43.8.170.31.in-addr.arpa. IN PTR
;; ANSWER SECTION:
43.8.170.31.in-addr.arpa. 43200 IN PTR hosting.evolix.net.
$ dig -x 2a01:9500::3
;; QUESTION SECTION:
;3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.9.1.0.a.2.ip6.arpa. IN PTR
;; ANSWER SECTION:
3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.9.1.0.a.2.ip6.arpa. 43200 IN PTR forge.evolix.net.
~~~
Cela fonctionne avec un nom de domaine "virtuel" : .in-addr.arpa en IPv4 et .ip6.arpa en IPv6 !
Et il est important de configurer les reverse DNS, car certains services les vérifient : Postfix, MySQL, CUPS, etc.
...notamment, sur un réseau avec des adresses privés qui ne doivent pas être propagés sur Internet ([
des serveurs DNS de IANA répondent tout de même pour ces demandes... mais sans aucune garantie de bon fonctionnement !!](http://www.iana.org/abuse/answers))
On ajoutera ainsi systématiquement dans son named.conf.local :
~~~
zone "10.in-addr.arpa" {
type master;
file "/etc/bind/db.nxdomain";
};
zone "168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.nxdomain";
};
zone "16.172.in-addr.arpa" {
type master;
file "/etc/bind/db.nxdomain";
};
zone "17.172.in-addr.arpa" {
type master;
file "/etc/bind/db.nxdomain";
};
[...]
zone "30.172.in-addr.arpa" {
type master;
file "/etc/bind/db.nxdomain";
};
zone "31.172.in-addr.arpa" {
type master;
file "/etc/bind/db.nxdomain";
};
~~~
Avec un fichier /etc/bind/db.nxdomain du type :
~~~
$TTL 1800
@ IN SOA ns1.ns-example.com. dnsmaster.example.com. (
2011090101 ; serial
2h ; rafraichissement slave->master
1h ; en cas d'echec du refraichissement, nouvel essai
5w ; expiration des enregistrements en cache par le slave
10m ) ; TTL negatif
IN NS ns1.ns-example.com.
~~~
## Master/Slave
Dans une configuration master/slave, un serveur DNS (le slave), réplique tout ou partie de ses fichiers de zone à partir d'un master.
Voici les directives à positionner pour cela :
Sur le master, chaque zone devant être répliquée doit autoriser les transferts à partir du slave, à l'aide de la directive `allow-transfer`. Exemple :
~~~
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-query { any; };
allow-transfer { IP_DU_SLAVE; };
};
~~~
Sur le slave, chaque zone répliquée doit spécifier l'adresse IP du master à partir duquel le transfert sera fait,
et autoriser également les notifications de modification de zone provenant de celui-ci (directive `allow-notify`) :
~~~
zone "example.com" {
type slave;
file "/etc/bind/slave/example.com";
masters { IP_DU_MASTER; };
allow-query { any; };
allow-notify { IP_DU_MASTER; };
};
~~~
Une fois cela en place, recharger la configuration du master puis du slave, et valider le bon fonctionnement en vérifiant la présence du fichier `/etc/bind/slave/example.com` que Bind doit créer. Effectuer également une vérification sur le slave à l'aide de l'outil dig par exemple.
## Surveillance
L'outil "dnstop" (paquet Debian du même nom), peut être utilisé pour analyser le trafic DNS d'un serveur.
On lui passe en paramètre l'interface réseau sur laquelle écouter. Example :
~~~
# dnstop eth0
~~~
### Munin
Des plugins munin officiel permettent de tracer des courbes par rapport aux requêtes que le serveur à reçu.
#### Graphs des accès via un fichier de log
Pour cela il faut configurer une partie logs dans bind, simillaire à ceci :
~~~
logging {
channel query_logging {
file "/var/log/queries.log" versions 2 size 5M;
print-category yes;
print-severity yes;
print-time yes;
};
category queries { query_logging; };
~~~
Ensuite il faut configurer le [wiki:HowtoMunin#Lepluginbind plugin munin] pour lui dire d'aller lire ce fichier.
#### Graphs des stats via rndc
Configurer le chemin des statisques bind, dans `named.conf.options`
~~~
statistics-file "/var/cache/bind/named.stats";
~~~
Ensuite il faut configurer le [wiki:HowtoMunin#Lepluginbind_rndc plugin munin] pour lui dire d'aller lire ce fichier.
Assurez-vous du bon fonctionnement de la commande `rndc status`
### Log2mail
Pour être alerté en cas de fichiers de zone incorrect, on peut rajouter ceci dans la conf de log2mail :
~~~
file = /var/log/syslog
pattern = "not loaded due to errors"
mailto = postmaster@example.com
template = /etc/log2mail/template.bind
~~~
Et le contenu de _/etc/log2mail/template.bind_ :
~~~
From: %f
To: %t
Subject: Bind problem
Hello!
We have matched your pattern "%m" in "%F" %n times:
%l
Yours,
log2mail.
~~~
## Bind et GeoIP
On peut faire du GeoDNS de 2 façons avec Bind :
* à l'aide de ce [patch](http://code.google.com/p/bind-geoip/). Le principe est de faire une recherche suivant un arbre binaire (binary search tree) sur la base de données de MaxMind. Cela n'impacte pas les temps de réponse mais nécessite de maintenir un Bind patché ;
* en se basant sur le système de vue/acl de Bind. Le principe est de récupérer les plages d'adresses par pays auprès de MaxMind et de générer des fichiers d'acl à l'aide de ce [script](http://phix.me/geodns/). Les performances sont en théorie moins bonnes (mais pas vraiment constaté dans la pratique), mais l'installation est bien plus simple à maintenir.
### À l'aide de vues/acl
* Récupérer le script :
~~~
$ wget <http://phix.me/geodns/GeoIP.py>
~~~
* installer les dépendances nécessaires :
~~~
# apt install python-mpmath
~~~
* exécuter le script. Il génèrera un fichier un fichier GeoIP.acl, avec une ACL par pays. Il est conseillé de l'exécuter avec un utilisateur Unix spécifique :
~~~
$ ./GeoIP.py MaxMind
~~~
* Configurer Bind pour servir une zone différente en fonction des pays :
~~~
include "/etc/bind/GeoIP.acl";
view "europe" {
match-clients { FR; };
recursion no;
zone "example555.com" {
type master;
file "/etc/bind/db.example555-europe.db";
allow-query { any; };
};
};
view "north_america" {
match-clients { US; CA; MX; };
recursion no;
zone "example555.com" {
type master;
file "/etc/bind/db.example555-north-america.db";
allow-query { any; };
};
};
view "other" {
match-clients { any; };
recursion no;
zone "example555.com" {
type master;
file "/etc/bind/db.example555-other.db";
allow-query { any; };
};
};
~~~
Le script peut être mis en cron pour conserver des ACL à jour.
## FAQ
### journal out of sync
Si vous avez une erreur du type :
~~~
journal out of sync with zone
~~~
Lancer la commande :
~~~
# named -g
~~~
Voir <http://www.thedumbterminal.co.uk/?action=showArticle&articleId=168>
### ran out os space
Si vous avez une erreur du type (par exemple pour des enregistrements TXT ou SPF) :
~~~
ran out os space
~~~
Vous devez spliter vos champs, voir <http://www.jeoffrey54.com/article144/dns-sous-bind-ran-out-of-space>
### received control channel command 'stop'
En lançant votre démon, celui-ci est stoppé immédiatement avec un simple message d'arrêt :
~~~
received control channel command 'stop'
~~~
...vérifiez si vous n'avez pas oublié l'option -f tout en utilisant systemd.
### Zone slave avec Bind 9.9
À partir de Bind 9.9, le stockage des zones slave se fait en binaire.
Avec une ancienne configuration vous aurez des :
~~~
zone example.com/IN: loading from master file /etc/bind/bak.example.com failed: not implemented
zone example.com/IN: unable to load from '/etc/bind/bak.example.com'; renaming file to '/etc/bind/db-5GoiCpdc' for failure analysis and retransferring.
~~~
Pour conserver l'ancien comportement il faut ajouter dans votre configuration : masterfile-format text;
Voir <http://geekdom.wesmo.com/2014/06/05/bind9-dns-slave-file-format/>

44
HowtoBogofilter.md Normal file
View File

@ -0,0 +1,44 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Bogofilter
## Installation
~~~
# aptitude install bogofilter
~~~
## Apprentissage
Avec une Maildir pleine de spams :
~~~
$ bogofilter -s -v -B Maildir/.verified-spams/ -o 0.99,0.01
~~~
Avec une Maildir pleine de hams :
~~~
$ bogofilter -n -v -B Maildir/.verified-hams/ -o 0.99,0.01
~~~
Mettre des termes à ignorer dans un fichier ignore.txt puis :
~~~
$ cd ~/.bogofilter
$ bogoutil -l ./ignorelist.db < ignore.txt
~~~
## Correction de l'apprentissage
On repèrera tous les hams avec l'entête _X-Bogosity: Spam, tests=bogofilter, spamicity=1.000000_ que l'on mettra dans une Maildir :
~~~
$ bogofilter -Sn -v -B Maildir/.bogofilter-nonspam/
~~~
Quant aux spams notés pas assez généreusement par Bogofilter :
~~~
$ bogofilter -Ns -v -B ~/Maildir/.bogofilter-spam/ -o 0.99,0.01
~~~

306
HowtoBuildRPM.md Normal file
View File

@ -0,0 +1,306 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# How to create an RPM package
Inspiré de <http://fedoraproject.org/wiki/How_to_create_an_RPM_package>
Installation de tous les outils liés à la compilation.
~~~
# yum install @development-tools fedora-packager
~~~
Création d'un utilisateur spécifié, dédié à la création de paquet.
~~~
# /usr/sbin/useradd makerpm
# passwd makerpm
~~~
Une fois loggué avec cet utilisateur, mettre en place de l'environnement de création de paquets :
~~~
$ rpmdev-setuptree
~~~
Arbo :
~~~
.
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
`-- SRPMS
~~~
Fichier SPECS d'exemple :
~~~
Summary: A program that ejects removable media using software control
Name: eject
Version: 2.1.5
Release: 21%{?dist}
License: GPLv2+
Group: System Environment/Base
Source: %{name}-%{version}.tar.gz
Patch1: eject-2.1.1-verbose.patch
Patch2: eject-timeout.patch
Patch3: eject-2.1.5-opendevice.patch
Patch4: eject-2.1.5-spaces.patch
Patch5: eject-2.1.5-lock.patch
Patch6: eject-2.1.5-umount.patch
URL: <http://www.pobox.com/~tranter>
ExcludeArch: s390 s390x
BuildRequires: gettext
BuildRequires: libtool
%description
The eject program allows the user to eject removable media (typically
CD-ROMs, floppy disks or Iomega Jaz or Zip disks) using software
control. Eject can also control some multi-disk CD changers and even
some devices' auto-eject features.
Install eject if you'd like to eject removable media using software
control.
%prep
%setup -q -n %{name}
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%build
%configure
make %{?_smp_mflags}
%install
make DESTDIR=%{buildroot} install
install -m 755 -d %{buildroot}/%{_sbindir}
ln -s ../bin/eject %{buildroot}/%{_sbindir}
%find_lang %{name}
%files -f %{name}.lang
%doc README TODO COPYING ChangeLog
%{_bindir}/*
%{_sbindir}/*
%{_mandir}/man1/*
%changelog
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.1.5-21
- Rebuilt for <https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild>
* Fri Jul 02 2010 Kamil Dudka <kdudka@redhat.com> 2.1.5-20
- handle multi-partition devices with spaces in mount points properly (#608502)
~~~
On peut aussi générer un pseudo template en indiquant le nom du soft :
~~~
cd ~/rpmbuild/SPECS
rpmdev-newspec python-antigravity
vi python-antigravity.spec
~~~
Une fois le fichier de spec créer, le tester :
~~~
rpmlint program.spec
~~~
Si tout est OK, copier le fichier source (souvent un tar.gz en upstream) dans ~/rpmbuild/SOURCES/
Enfin pour créer le paqet :
~~~
rpmbuild -ba program.spec
~~~
Exemple avec nfdump pour le projet nagios-rt :
~~~
Name: nfdump
Version: 1.6.6
Release: 1%{?dist}
Summary: nfdump is a set of tools to collect and process netflow data
Group: Applications/Internet
License: BSD License
URL: <http://sourceforge.net/projects/nfdump/>
Source0: <http://downloads.sourceforge.net/project/nfdump/stable/nfdump-1.6.6/nfdump-1.6.6.tar.gz>
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: flex,bison,byacc,rrdtool-devel
%description
nfdump is a set of tools to collect and process netflow data. It's fast and has
a powerful filter pcap like syntax. It supports netflow versions v1, v5, v7 and
v9 as well as a limited set of sflow and is IPv6 compatible. IPFIX is supported
in beta state. For CISCO ASA devices, which export Netflow Security Event
Loging (NSEL) records, please use nfdump-1.5.8-2-NSEL.
%prep
%setup -q
%build
./configure --prefix=/usr --enable-nfprofile
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
%clean
rm -rf $RPM_BUILD_ROOT
%files
%{_bindir}/*
%{_mandir}/*
%defattr(-,root,root,-)
%doc
%changelog
~~~
~~~
[makerpm@centos58 SPECS]$ rpmbuild -ba nfdump.spec
Exécution_de(%prep): /bin/sh -e /var/tmp/rpm-tmp.19407
+ umask 022
+ cd /home/makerpm/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /home/makerpm/rpmbuild/BUILD
+ rm -rf nfdump-1.6.6
+ /bin/gzip -dc /home/makerpm/rpmbuild/SOURCES/nfdump-1.6.6.tar.gz
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd nfdump-1.6.6
++ /usr/bin/id -u
+ '[' 501 = 0 ']'
++ /usr/bin/id -u
+ '[' 501 = 0 ']'
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Exécution_de(%build): /bin/sh -e /var/tmp/rpm-tmp.19407
+ umask 022
+ cd /home/makerpm/rpmbuild/BUILD
+ cd nfdump-1.6.6
+ LANG=C
+ export LANG
+ unset DISPLAY
+ ./configure --prefix=/usr --enable-nfprofile
checking for a BSD-compatible install... /usr/bin/install -c
[...]
configure: creating ./config.status
config.status: creating Makefile
config.status: creating bin/Makefile
config.status: creating man/Makefile
config.status: creating config.h
config.status: executing depfiles commands
* Many thanks for using nfdump tools
* You may want to subscribe to the nfdump-discuss and/or
* nfsen-discuss mailing list:
* <http://lists.sourceforge.net/lists/listinfo/nfdump-discuss>
* <http://lists.sourceforge.net/lists/listinfo/nfsen-discuss>
* Please send bug reports back to me: phaag@users.sourceforge.net
* or to one of the lists.
+ make -j3
make all-recursive
[...]
make[1]: Leaving directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6'
+ exit 0
Exécution_de(%install): /bin/sh -e /var/tmp/rpm-tmp.4807
+ umask 022
+ cd /home/makerpm/rpmbuild/BUILD
+ cd nfdump-1.6.6
+ LANG=C
+ export LANG
+ unset DISPLAY
+ rm -rf /var/tmp/nfdump-1.6.6-1-root-makerpm
+ make install DESTDIR=/var/tmp/nfdump-1.6.6-1-root-makerpm
Making install in .
make[1]: Entering directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6'
make[2]: Entering directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6'
make[1]: Leaving directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6'
Making install in bin
make[1]: Entering directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/bin'
make install-am
make[2]: Entering directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/bin'
make[3]: Entering directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/bin'
test -z "/usr/bin" || /bin/mkdir -p "/var/tmp/nfdump-1.6.6-1-root-makerpm/usr/bin"
/usr/bin/install -c nfcapd nfdump nfreplay nfexpire nfanon nfprofile '/var/tmp/nfdump-1.6.6-1-root-makerpm/usr/bin'
make[3]: Nothing to be done for `install-data-am'.
make[3]: Leaving directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/bin'
make[2]: Leaving directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/bin'
make[1]: Leaving directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/bin'
Making install in man
make[1]: Entering directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/man'
make[2]: Entering directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/man'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/share/man/man1" || /bin/mkdir -p "/var/tmp/nfdump-1.6.6-1-root-makerpm/usr/share/man/man1"
/usr/bin/install -c -m 644 ft2nfdump.1 nfcapd.1 nfdump.1 nfexpire.1 nfprofile.1 nfreplay.1 nfanon.1 sfcapd.1 '/var/tmp/nfdump-1.6.6-1-root-makerpm/usr/share/man/man1'
make[2]: Leaving directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/man'
make[1]: Leaving directory `/home/makerpm/rpmbuild/BUILD/nfdump-1.6.6/man'
+ /usr/lib/rpm/find-debuginfo.sh /home/makerpm/rpmbuild/BUILD/nfdump-1.6.6
extracting debug info from /var/tmp/nfdump-1.6.6-1-root-makerpm/usr/bin/nfanon
extracting debug info from /var/tmp/nfdump-1.6.6-1-root-makerpm/usr/bin/nfcapd
extracting debug info from /var/tmp/nfdump-1.6.6-1-root-makerpm/usr/bin/nfdump
extracting debug info from /var/tmp/nfdump-1.6.6-1-root-makerpm/usr/bin/nfprofile
extracting debug info from /var/tmp/nfdump-1.6.6-1-root-makerpm/usr/bin/nfexpire
extracting debug info from /var/tmp/nfdump-1.6.6-1-root-makerpm/usr/bin/nfreplay
2695 blocks
+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-python-bytecompile
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Traitement des fichiers: nfdump-1.6.6-1
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libresolv.so.2()(64bit) librrd.so.4()(64bit) rtld(GNU_HASH)
Traitement des fichiers: nfdump-debuginfo-1.6.6-1
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Vérification des fichiers non empaquetés: /usr/lib/rpm/check-files /var/tmp/nfdump-1.6.6-1-root-makerpm
Ecrit: /home/makerpm/rpmbuild/SRPMS/nfdump-1.6.6-1.src.rpm
Ecrit: /home/makerpm/rpmbuild/RPMS/x86_64/nfdump-1.6.6-1.x86_64.rpm
Ecrit: /home/makerpm/rpmbuild/RPMS/x86_64/nfdump-debuginfo-1.6.6-1.x86_64.rpm
Exécution_de(%clean): /bin/sh -e /var/tmp/rpm-tmp.76791
+ umask 022
+ cd /home/makerpm/rpmbuild/BUILD
+ cd nfdump-1.6.6
+ rm -rf /var/tmp/nfdump-1.6.6-1-root-makerpm
+ exit 0
[makerpm@centos58 SPECS]$
~~~

120
HowtoCUPS.md Normal file
View File

@ -0,0 +1,120 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto CUPS
<http://cups.org/documentation.php>
## Installation
~~~
# aptitude install cups smbclient ttf-liberation ttf-mscorefonts-installer
~~~
## Configuration
### Gestion des backends d'impression
CUPS gère plusieurs backends d'impression : ipp:// socket:// (JetDirect) smb:// etc.
Pour activer le backend smb:// il faut installer *smbclient* qui contient notamment le binaire _smbpool_.
### Interface web d'administration
L'interface web d'administration de CUPS est accessible sur le port 631 : <http://192.0.32.10:631>
* Autoriser l'utilisateur _foo_ à accéder aux tâches d'administration sur l'interface web :
~~~
adduser foo lpadmin
~~~
* Par défaut, les tâches d'administrations ne sont autorisées que depuis _localhost_. Pour autoriser une IP ou réseau en plus :
~~~
# Fichier /etc/cups/cupsd.conf
<Location /admin>
Order allow,deny
Allow from 192.0.32.0/24
</Location>
~~~
### Détection automatique d'imprimantes partagées
Par défaut CUPS tente de découvrir les imprimantes partagées par d'autres systèmes sur le réseau, et les affiche dans sa liste, avec une URI=/dev/null. Pour ne pas avoir ce comportement, décocher la case « Afficher les imprimantes partagées par d'autres systèmes » dans « Administration du serveur » dans l'interface d'admin, puis supprimer le cache :
~~~
# /etc/init.d/cups stop && rm /var/cache/cups/remote.cache && /etc/init.d/cups start
~~~
### Mode debug
Pour avoir un mode debug, on placera dans le fichier _cupsd.conf_ :
~~~
LogLevel debug
~~~
puis :
~~~
# /etc/init.d/cups reload
Reloading Common Unix Printing System: cupsd.
~~~
Et l'on aura un maximum d'information dans le _error_log_
## Imprimantes
### Imprimantes HP
~~~
aptitude install hpijs hpijs-ppds hplip hplip-data
~~~
### Imprimantes CANON
Les fichiers PPD peuvent être souvent trouvés sur <http://software.canon-europe.com/index.asp>
Et il est parfois nécessaire d'ajouter le binaire _sicgsfilter_ téléchargeable en 32bits
sur <http://fr.software.canon-europe.com/software/0040160.asp> ou en 64bits sur
<http://fr.software.canon-europe.com/software/0040165.asp>
On le placera dans /usr/local/bin/ et on évitera ainsi une erreur _/usr/lib/cups/filter/foomatic-rip failed_ :
~~~
D [02/Jun/2011:23:23:13 +0200] [Job 14496] renderer command: /bin/cat - | sicgsfilter -MPS -NP -A1 -uanonymous -V"Test Page" -n1
D [02/Jun/2011:23:23:13 +0200] [Job 14496]
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Closing renderer
D [02/Jun/2011:23:23:13 +0200] [Job 14496] JCL: <job data>
D [02/Jun/2011:23:23:13 +0200] [Job 14496]
D [02/Jun/2011:23:23:13 +0200] [Job 14496] sh: sicgsfilter: command not found
D [02/Jun/2011:23:23:13 +0200] [Job 14496] /bin/cat: write error: Broken pipe
D [02/Jun/2011:23:23:13 +0200] [Job 14496] renderer return value: 127
D [02/Jun/2011:23:23:13 +0200] [Job 14496] renderer received signal: 127
D [02/Jun/2011:23:23:13 +0200] [Job 14496] tail process done writing data to STDOUT
D [02/Jun/2011:23:23:13 +0200] [Job 14496] KID4 finished
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Process dying with "The renderer command line returned an unrecognized error code 127.", exit stat: 1
D [02/Jun/2011:23:23:13 +0200] [Job 14496] error: Illegal seek (29)
D [02/Jun/2011:23:23:13 +0200] [Job 14496] The renderer command line returned an unrecognized error code 127.
D [02/Jun/2011:23:23:13 +0200] [Job 14496] KID3 exited with status 1
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Renderer exit stat: 1
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Renderer process finished
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Killing process 5546 (KID3)
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Process dying with "Error closing renderer", exit stat: 1
D [02/Jun/2011:23:23:13 +0200] [Job 14496] error: Illegal seek (29)
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Error closing renderer
E [02/Jun/2011:23:23:13 +0200] PID 5541 (/usr/lib/cups/filter/foomatic-rip) stopped with status 1!
~~~
### Fichiers PPD (PostScript Printer Description)
Les fichiers PPD décrivent les fonctionnalités de l'imprimante. Suivant les paquets installés, un certain nombre de modèles
d'imprimantes sera disponible sur le système. On pourra aussi en ajouter dans le répertoire _/usr/local/share/ppd/_.
Mais également lors de l'ajout d'une imprimante, on pourra tout simplement en uploader ; les fichiers PPD uploadés
se trouvent dans /etc/cups/ppd/
### Imprimer une page de test en CLI
Lister les imprimantes :
`lpstat -t`
Imprimer la page de test de CUPS avec lp, avec le nom de l'imprimante :
`lp -d hp_color_LaserJet_2550 /usr/share/cups/data/testprint`

35
HowtoCacheHTTP.md Normal file
View File

@ -0,0 +1,35 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Cache HTTP
<http://fr.wikipedia.org/wiki/Cache-Control>
Entêtes relatifs au cache HTTP :
~~~
Cache-Control:
Max-Age:
Age:
Pragma:
Expires:
Last-Modified:
~~~
Exemple de mise en cache en PHP :
~~~
$offset=3600*20; //Forte période 20h
//$offset=3600*3; //Période normale 3h
header("Cache-Control: public, max-age=$offset");
header("Expires: " .gmdate("D, d M Y H:i:s",time()+$offset). " GMT");
header("Last-Modified: " .gmdate("D, d M Y H:i:s",time()). " GMT");
header("X-generated-at: " .date(DATE_RFC822));
~~~
Exemple de non-mise en cache en PHP :
~~~
header("Pragma: no-cache");
header("Cache-Control: no-cache");
~~~

19
HowtoCacti.md Normal file
View File

@ -0,0 +1,19 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Cacti
## FAQ
* Réinitialiser un mot de passe avec MySQL ? Cela se passe dans la table user_auth et c'est encodé en MD5 (version 0.8.7) :
~~~
$ echo -n mynewpass | md5sum
4ef4d3b296aab9434da77e423cff3b8f
mysql> update cacti.user_auth set password='4ef4d3b296aab9434da77e423cff3b8f' where id=42;
~~~
* Sous Debian Lenny, pour que Cacti puisse générer correctement tous les graphes (surtout les previews), il faut indiquer dans les paramètres Cacti la bonne de version de RRDTool à utiliser :
Aller dans "Settings" > "RRDTool Utility Version" et sélectionner la version 1.2.x

View File

@ -0,0 +1,26 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Gestion des packages
Mise-à-jour des paquets :
~~~
# yum update
~~~
Ajouter le repository _rpmforge_ pour avoir des paquets supplémentaires (Munin, Nagios, etc.) :
~~~
# wget <http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm>
# rpm -Uvh rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
~~~
Pour buider des paquets sources RPM :
~~~
# yum install rpm-build
# rpmbuild --rebuild *.src.rpm
~~~
Voir <http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment>

40
HowtoCentOS/Reseau.md Normal file
View File

@ -0,0 +1,40 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Réseau sous CentOS
<http://www.centos.org/docs/5/html/Deployment_Guide-en-US/pt-network-related-config.html>
## Mode simple
Avec une seule interface _eth0_, cela se passe dans le fichier _/etc/sysconfig/network-scripts/ifcfg-eth0_ :
~~~
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.0.2.51
NETMASK=255.255.255.0
GATEWAY=192.0.2.254
ETHTOOL_OPTS="autoneg off speed 100 duplex full"
~~~
Certaines directives globales comme le gateway, le hostname peuvent être mise dans _/etc/sysconfig/network_
~~~
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=foo.example.com
GATEWAY=192.0.2.254
~~~
Pour gérer l'activation de l'interface :
~~~
# ifdown eth0
# ifup eth0
~~~
/!\ Attention il semblerait que CentOS garde l'ancienne IP si vous faites un changement d'adresse IP /!\
Vérifiez avec ` ip addr ` la présence de l'ancienne adresse IP et supprimer-la avec ` ip del @IP `.

133
HowtoChiffrementData.md Normal file
View File

@ -0,0 +1,133 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Chiffrement des données/partitions
Inspiré de <http://www.debian-administration.org/articles/469>
## Avec LUKS
~~~
# aptitude install cryptsetup
~~~
### Creation
En renseignant un mot de passe manuellement :
~~~
# cryptsetup --verbose --verify-passphrase luksFormat /dev/md7
WARNING!
========
This will overwrite data on /dev/md7 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
# cryptsetup luksOpen /dev/md7 crypt_md7
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.
# mkfs.ext3 /dev/mapper/crypt_md7
~~~
En utilisant un fichier comme clef de chiffrement :
~~~
# dd if=/dev/random of=/root/.keyfile bs=1 count=256
# cryptsetup --verbose --key-size=256 luksFormat /dev/md7 /root/.keyfile
~~~
### Utilisation
Voir si une partition est de type LUKS :
~~~
# cryptsetup isLuks /dev/hda7
# cryptsetup luksDump /dev/hda7
~~~
Ouvrir une partition chiffrée :
~~~
# cryptsetup luksOpen /dev/mapper/vol1-crypto_test crypto_test
# cryptsetup luksOpen /dev/hda7 hda7_crypt
~~~
Ouvrir une partition chiffrée avec un fichier de clef :
~~~
# cryptsetup luksOpen --key-file /root/.keyfile /dev/md7 supersecretdata
~~~
Info sur la partition chiffrée :
~~~
# cryptsetup status crypto_test
~~~
Fermer une partition chiffrée :
~~~
# cryptsetup luksClose crypto_test
~~~
### Gestion des mots de passe
Ajouter un mot de passe :
~~~
# cryptsetup luksAddKey /dev/hda7
Enter any LUKS passphrase:
key slot 1 unlocked.
Enter new passphrase for key slot:
Verify passphrase:
Command successful.
~~~
Rem :
Sur des vieilles versions, il fallait avoir la partition non dechiffrée : <http://bugs.debian.org/460409>
Pour supprimer un mot de passe, on regarde le n° du mot de passe avec :
~~~
# cryptsetup luksDump /dev/hda7
~~~
Puis on le supprime avec la commande :
~~~
# cryptsetup luksKillSlot /dev/hda7 <n°>
~~~
Si l'entête du conteneur LUKS est corrompu, ceci rend la partition inutilisable
Procédure pour Sauvegarde de l'entête :
Le fichier contenant la sauvegarde de lentête est nommé ici backup-entete
~~~
# cryptsetup luksHeaderBackup --header-backup-file backup-entete /dev/hda7
~~~
Pour Restaurer l'entête :
~~~
# cryptsetup luksHeaderRestore --header-backup-file backup-entete /dev/hda7
~~~
## FAQ
Si vous obtnez un message de ce type :
~~~
Command failed: Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and verify that /dev/md1 contains at least 133 sectors
~~~
La solution est :
~~~
# modprobe dm-mod
~~~
## Notes sur les algorithmes de chiffrement
Pour utiliser un algorithme de chiffrement spécifique, il faut le préciser au moment de la création de la partition :
~~~
# cryptsetup --verbose --cipher=aes-cbc-essiv:sha256 --verify-passphrase luksFormat /dev/md7
~~~
Le chiffrement aes-cbc-essiv est le chiffrement par défaut de cryptsetup pour les noyaux supérieurs au 2.6.10, car il corrige une vulnérabilité potentielle du chiffrement aes-cbc-plain.
Une autre méthode de chiffrement utilisée avec l'algorithme AES (Rijndael) est le mode XTS, qui est réputé plus résistants aux attaques par watermarking, mais nécessite un module spécifique (judicieusement nommé xts.ko) et une clef d'initialisation du double de la taille de la clef finale (voir <http://en.wikipedia.org/wiki/Disk_encryption_theory#XEX-based_tweaked-codebook_mode_with_ciphertext_stealing_.28XTS.29)>
Les autres algorithmes dignes dintérêt sont twofish et serpent, deux compétiteurs de l'AES face à Rijndael.

30
HowtoCompression.md Normal file
View File

@ -0,0 +1,30 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Compression
## TAR
Une astuce avec la commande tar est l'option -a qui permet d'autodétecter la compression selon le suffixe. Exemple :
~~~
$ tar cfa archive.tar.bz2 .
$ tar cfa archive.tar.lzma .
~~~
### LZMA
#### Compression
~~~
tar cvfa dossier.tar.lzma dossier
OU
tar cvf dossier.tar.lzma dossier --lzma
~~~
#### Décompression
~~~
tar axvf dossier.tar.lzma
OU
tar xvf dossier.tar.lzma dossier --lzma
~~~

16
HowtoCron.md Normal file
View File

@ -0,0 +1,16 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Howto Cron
Le programme cron est le planificateur de tâches standards sur systèmes UNIX.
### Détection d'erreurs
On peut ajouter la configuration suivante au logiciel log2mail pour détecter d'éventuelles erreurs de syntaxe dans /etc/crontab par exemple :
~~~
file = /var/log/cron.log
pattern = "Error"
mailto = root
~~~

45
HowtoCrontab.md Normal file
View File

@ -0,0 +1,45 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Crontab
## Gestion de votre crontab
Via un accès SSH, vous pouvez gérer votre crontab.
Pour lister votre crontab :
~~~
$ crontab -l
~~~
Pour éditer votre crontab via l'éditeur par défaut (souvent Vim) :
~~~
$ crontab -e
~~~
Note : attention, _crontab -r_ efface définitivement toute votre crontab, donc méfiez-vous car la touche "r" est proche de la touche "e" en Azerty/Qwerty.
Pour éditer votre crontab via un autre éditeur (par exemple pico) :
~~~
$ EDITOR=pico crontab -e
~~~
## Exemples de crontab
Attention, si une ligne de votre crontab a une syntaxe incorrecte, toute votre crontab risque d'être considérée comme invalide.
Veuillez également lire ces conseils : [wiki:DevWeb#Scriptsencrontab]
Lancer la commande _date_ tous les jours à minuit :
~~~
@daily date
~~~
Lancer la commande tous les dimanches à 6h42 :
~~~
42 6 * * 0 date
~~~

473
HowtoCumulus.md Normal file
View File

@ -0,0 +1,473 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Cumulus
Cumulus Linux est une distribution de Linux axée sur le réseau et basée sur Debian.
C'est un OS qui peut être installé sur un "Bare Metal Switch", c'est-à-dire un switch vendu sans OS.
Voir la liste du matériel compatible : <https://cumulusnetworks.com/support/linux-hardware-compatibility-list/>
Équivalence des commandes Cisco : <https://support.cumulusnetworks.com/hc/en-us/sections/200718008-Cumulus-Linux-Interoperability-and-Conversion-Guides>
Documentations :
<https://docs.cumulusnetworks.com/display/DOCS>
<https://support.cumulusnetworks.com/hc/en-us/>
## Topologie
Pour les exemples, je me baserai sur cette topologie, où une machine sera connectée à leaf1 et une autre à leaf2 : <https://docs.cumulusnetworks.com/display/VX/Using+Cumulus+VX+with+KVM>
## Installation et démarrage des machines virtuelles sous KVM
Téléchargement de l'image disque de la VM : <https://cumulusnetworks.com/cumulus-vx/download/>
Démarrage des machines avec des modifications des commandes données sur le site :
leaf1 :
~~~
sudo /usr/bin/kvm -curses \
-name leaf1 \
-pidfile leaf1.pid \
-smp 1 \
-m 256 \
-net nic,macaddr=00:01:00:00:01:00,model=virtio \
-net user,hostfwd=tcp::1401-:22 \
-netdev socket,udp=127.0.0.1:1602,localaddr=127.0.0.1:1601,id=dev0 \
-device virtio-net-pci,mac=00:02:00:00:00:01,addr=6.0,multifunction=on,netdev=dev0,id=swp1 \
-netdev socket,udp=127.0.0.1:1606,localaddr=127.0.0.1:1605,id=dev1 \
-device virtio-net-pci,mac=00:02:00:00:00:02,addr=6.1,multifunction=off,netdev=dev1,id=swp2 \
-netdev socket,udp=127.0.0.1:1611,localaddr=127.0.0.1:1609,id=dev2 \
-device virtio-net-pci,mac=00:02:00:00:00:09,addr=6.2,multifunction=off,netdev=dev2,id=swp3 \
leaf1.qcow2
~~~
leaf2 :
~~~
sudo /usr/bin/kvm -curses \
-name leaf2 \
-pidfile leaf2.pid \
-smp 1 \
-m 256 \
-net nic,macaddr=00:01:00:00:02:00,model=virtio \
-net user,hostfwd=tcp::1402-:22 \
-netdev socket,udp=127.0.0.1:1604,localaddr=127.0.0.1:1603,id=dev0 \
-device virtio-net-pci,mac=00:02:00:00:00:03,addr=6.0,multifunction=on,netdev=dev0,id=swp1 \
-netdev socket,udp=127.0.0.1:1608,localaddr=127.0.0.1:1607,id=dev1 \
-device virtio-net-pci,mac=00:02:00:00:00:04,addr=6.1,multifunction=off,netdev=dev1,id=swp2 \
-netdev socket,udp=127.0.0.1:1612,localaddr=127.0.0.1:1610,id=dev2 \
-device virtio-net-pci,mac=00:02:00:00:00:0A,addr=6.2,multifunction=off,netdev=dev2,id=swp3 \
leaf2.qcow2
~~~
spine1 :
~~~
sudo /usr/bin/kvm -curses \
-name spine1 \
-pidfile spine1.pid \
-smp 1 \
-m 256 \
-net nic,macaddr=00:01:00:00:03:00,model=virtio \
-net user,hostfwd=tcp::1403-:22 \
-netdev socket,udp=127.0.0.1:1601,localaddr=127.0.0.1:1602,id=dev0 \
-device virtio-net-pci,mac=00:02:00:00:00:05,addr=6.0,multifunction=on,netdev=dev0,id=swp1 \
-netdev socket,udp=127.0.0.1:1603,localaddr=127.0.0.1:1604,id=dev1 \
-device virtio-net-pci,mac=00:02:00:00:00:06,addr=6.1,multifunction=off,netdev=dev1,id=swp2 \
spine1.qcow2
~~~
spine2 :
~~~
sudo /usr/bin/kvm -curses \
-name spine2 \
-pidfile spine2.pid \
-smp 1 \
-m 256 \
-net nic,macaddr=00:01:00:00:04:00,model=virtio \
-net user,hostfwd=tcp::1404-:22 \
-netdev socket,udp=127.0.0.1:1605,localaddr=127.0.0.1:1606,id=dev0 \
-device virtio-net-pci,mac=00:02:00:00:00:07,addr=6.0,multifunction=on,netdev=dev0,id=swp1 \
-netdev socket,udp=127.0.0.1:1607,localaddr=127.0.0.1:1608,id=dev1 \
-device virtio-net-pci,mac=00:02:00:00:00:08,addr=6.1,multifunction=off,netdev=dev1,id=swp2 \
spine2.qcow2
~~~
Ajout de deux machines :
machine1, connectée à swp3 de leaf1 :
~~~
sudo /usr/bin/kvm -curses \
-name machine1 \
-pidfile machine1.pid \
-smp 1 \
-m 256 \
-net nic,macaddr=00:01:00:00:05:00,model=virtio \
-net user,hostfwd=tcp::1405-:22 \
-netdev socket,udp=127.0.0.1:1609,localaddr=127.0.0.1:1611,id=dev0 \
-device virtio-net-pci,mac=00:02:00:00:00:0B,addr=6.0,multifunction=off,netdev=dev0,id=eth1 \
machine1.qcow2
~~~
machine2, connectée à swp3 de leaf2 :
~~~
sudo /usr/bin/kvm -curses \
-name machine2 \
-pidfile machine2.pid \
-smp 1 \
-m 256 \
-net nic,macaddr=00:01:00:00:06:00,model=virtio \
-net user,hostfwd=tcp::1406-:22 \
-netdev socket,udp=127.0.0.1:1610,localaddr=127.0.0.1:1612,id=dev0 \
-device virtio-net-pci,mac=00:02:00:00:00:0C,addr=6.0,multifunction=off,netdev=dev0,id=eth1 \
machine2.qcow2
~~~
Nous pouvons ensuite nous connecter en SSH sur chacune des machines sur les ports 1401 à 1406.
## Configuration de couche 3
Configuration avec du routage entre chaque switch.
### Configuration dans /etc/network/interfaces
Pour leaf1 et leaf2 :
~~~
auto swp1
iface swp1
address 10.2.1.X/32
auto swp2
iface swp2
address 10.2.1.X/32
auto swp3
iface swp3
address 10.4.1.X/24
~~~
Pour spine1 et spine2 :
~~~
auto swp1
iface swp1
address 10.2.1.X/32
auto swp2
iface swp2
address 10.2.1.X/32
~~~
Avec X = 1 pour leaf1, 2 pour leaf2, 3 pour spine1 et 4 pour spine2
### Quagga
La configuration du routage se fait sous [wiki:HowtoQuagga Quagga].
Activer zebra et ospf dans /etc/quagga/daemons :
~~~
zebra=yes
ospfd=yes
~~~
Configurer ospf dans /etc/quagga/Quagga.conf :
Pour leaf1 et leaf2 :
~~~
service integrated-vtysh-config
interface swp1
ip ospf network point-to-point
interface swp2
ip ospf network point-to-point
router-id 10.2.1.X
router ospf
ospf router-id 10.2.1.X
network 10.2.1.X/32 area 0.0.0.0
network 10.4.1.0/24 area 0.0.0.0
~~~
Pour spine1 et spine2 :
~~~
service integrated-vtysh-config
interface swp1
ip ospf network point-to-point
interface swp2
ip ospf network point-to-point
router-id 10.2.1.X
router ospf
ospf router-id 10.2.1.X
network 10.2.1.X/32 area 0.0.0.0
~~~
## Configuration de couche 2
Configuration avec des VLAN et du Spanning-Tree. Trois VLAN : le 1 est le natif, le 5 où chaque switch a son IP, et le 10 où seuls les deux PCs ont leur IP.
### Configuration dans /etc/network/interfaces
Pour leaf1 et leaf2 :
~~~
auto swp1
iface swp1
auto swp2
iface swp2
auto swp3
iface swp3
bridge-access 10
mstpctl-portadminedge yes
mstpctl-bpduguard yes
auto bridge
iface bridge
bridge-vlan-aware yes
bridge-ports glob swp1-3
bridge-stp on
bridge-vids 5 10
bridge-pvid 1
auto bridge.5
iface bridge.5
address 10.0.5.X/24
~~~
Pour spine1 et spine2 :
~~~
auto swp1
iface swp1
auto swp2
iface swp2
auto bridge
iface bridge
bridge-vlan-aware yes
bridge-ports glob swp1-2
bridge-stp on
bridge-vids 5 10
bridge-pvid 1
auto bridge.5
iface bridge.5
address 10.0.5.X/24
~~~
Les ports swp1 et swp2 sont en mode trunk pour les vlan 1, 5 et 10 grâce à la configuration de bridge dont ils héritent.
Le port swp3 n'hérite plus de la configuration VLAN de bridge puisqu'il est configuré en mode access sur le vlan 10, le stp portfast et le bpduguard sont activés.
Le vlan 5 est configuré pour le réseau 10.0.5.0/24.
### Vérifications
Interfaces :
~~~
leaf1# netshow interface bridge
--------------------------------------------------------------------
To view the legend, rerun "netshow" cmd with the "--legend" option
--------------------------------------------------------------------
Name Mac Speed MTU Mode
-- ------ ----------------- ------- ----- ---------
UP bridge 00:02:00:00:00:01 N/A 1500 Bridge/L2
------------------------- ----------------------
STP Mode: RSTP / Single Instance
Root Port: RootSwitch
Ports in Designated Role: swp1-3
Ports in Alternate Role: None
Root Priority: 32768
Bridge Priority: 32768
Last TCN: swp1 (0:00:31)
Bridge Type Vlan Aware Bridge
Ports in Forwarding State
---------------------------
swp1-3
Ports in Oper Edge Port State
-------------------------------
swp3
~~~
~~~
leaf1# netshow interface swp1
--------------------------------------------------------------------
To view the legend, rerun "netshow" cmd with the "--legend" option
--------------------------------------------------------------------
Name Mac Speed MTU Mode
-- ------ ----------------- ------- ----- --------
UP swp1 00:02:00:00:00:01 10G 1500 Trunk/L2
Vlan List
-----------
1, 5, 10
Untagged Vlans
----------------
1
Vlans In Designated State
---------------------------
1, 5, 10
Vlans In Forwarding State
---------------------------
1, 5, 10
LLDP
------ ---- -------------
swp1 ==== swp1(cumulus)
~~~
STP :
~~~
leaf1# mstpctl showbridge bridge
bridge CIST info
enabled yes
bridge id 8.000.00:02:00:00:00:01
designated root 8.000.00:02:00:00:00:01
regional root 8.000.00:02:00:00:00:01
root port none
path cost 0 internal path cost 0
max age 20 bridge max age 20
forward delay 15 bridge forward delay 15
tx hold count 6 max hops 20
hello time 2 ageing time 300
force protocol version rstp
time since topology change 68666s
topology change count 11
topology change no
topology change port swp3
last topology change port swp2
~~~
~~~
leaf1# mstpctl showport bridge
swp1 8.003 forw 8.000.00:02:00:00:00:01 8.000.00:02:00:00:00:01 8.003 Desg
swp2 8.001 forw 8.000.00:02:00:00:00:01 8.000.00:02:00:00:00:01 8.001 Desg
swp3 8.002 forw 8.000.00:02:00:00:00:01 8.000.00:02:00:00:00:01 8.002 Desg
~~~
VLAN :
~~~
leaf1# bridge vlan show
port vlan ids
swp1 1 PVID Egress Untagged
5
10
swp2 1 PVID Egress Untagged
5
10
swp3 10 PVID Egress Untagged
bridge 5
~~~
### Explications des options et autres possibilités
* _bridge-vlan-aware yes_ : activer les VLAN
* _bridge-stp on_ : activer STP
* _bridge-vids 5 10_ : trunk pour les vlan 5 et 10
* _bridge-pvid 1_ : vlan natif
* _bridge-access 10_ : port d'accès pour le vlan 10
* _mstpctl-portadminedge yes_ : activer le portfast
* _mstpctl-bpduguard yes_ : activer le BPDUguard
* _mstpctl-treeprio 32768_ : modifier la priorité STP du switch
* _mstpctl-treeportprio swp3=128_ : modifier la priorité STP d'un port
* _link-speed 100_ : régler la vitesse du port à 100M
* _link-duplex full_ : régler le mode full duplex
Voir toutes les options disponibles avec la commande _ifquery --syntax-help_
### Boucle/Intervalle
Possibilité d'utiliser des boucles directement dans /etc/network/interfaces :
~~~
%for v in [5,10,30]:
auto bridge.${v}
iface bridge.${v}
address 10.0.${v}.1/24
%endfor
~~~
Ou
~~~
%for port, vlanid in zip(range(2, 20), range(2004, 2022)) :
auto swp${port}
iface swp${port}
bridge-access ${vlanid}
%endfor
~~~
Ou même un intervalle :
~~~
auto bridge.[1-2000]
iface bridge.[1-2000]
ATTRIBUT
~~~
### Modification à chaud
Créer un bridge et y ajouter trois ports :
~~~
# brctl addbr bridge
# brctl addbr bridge.5
# brctl addif bridge swp1 swp2 swp3
# ip link set up dev bridge
# for I in {1..3}; do ip link set up dev swp$I; done
# brctl show
~~~
Ajouter une adresse IP :
~~~
# ip addr add 10.0.5.1/24 dev bridge.5
~~~
Activer STP :
~~~
# brctl stp bridge on
~~~
Mettre un port en STP portfast et activer le BPDUguard :
~~~
# mstpctl setportadminedge bridge swp3 yes
# mstpctl setbpduguard bridge swp3 yes
~~~
Cependant, il n'y a pas de commandes pour modifier à chaud la configuration VLAN. Pour cela, il faut modifier le fichier /etc/network/interfaces puis prendre en compte les modifications avec _ifreload_ ou _ifup nom_interface_. Dans ce cas là, les précédentes modifications faites à chaud ne restent pas.

80
HowtoDHCP.md Normal file
View File

@ -0,0 +1,80 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Failover DHCP master/master
Ce mode permet à deux serveurs DHCP de fonctionner simultanément sur un même LAN.
Les leases dynamiques sont alors partagés entre les 2 serveurs et synchronisés via un échange réseau entre les serveurs. En cas de panne de l'un deux, l'autre prend alors à sa charge l'ensemble des leases.
Pour cela, il est nécessaire d'ajouter une section "failover" sur chacun des serveurs. Exemple :
Master :
~~~
failover peer "dhcp-failover" {
primary;
address 192.0.2.1;
peer address 192.0.2.2;
port 647;
peer port 647;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
split 128;
mclt 1800;
}
~~~
Slave :
~~~
failover peer "dhcp-failover" {
secondary;
address 192.0.2.2;
peer address 192.0.2.1;
port 647;
peer port 647;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
}
~~~
Il est également nécessaire d'englober la directive "range" et les sections "host" dans une section "pool", et l'on déclarera celle-ci en mode failover. Exemple :
~~~
subnet 192.0.2.0 netmask 255.255.0.0 {
option routers 192.2.0.254;
pool {
failover peer "dhcp-failover";
range 192.0.2.100 192.0.2.200;
host host1 {
hardware ethernet 08:00:1f:82:7a:72;
fixed-address 192.0.2.4
}
[...]
}
~~~
## Divers
### Redémarrage sous OpenBSD
Un SIGHUP ne semble pas fonctionner pour appliquer les changements de la configuration.
Il est donc conseillé de l'arrêter et de le relancer.
~~~
ps aux | grep dhcpd
kill -15 PID_DU_PROCESSUS
~~~
Puis relancer le processus comme il était lancé, exemple :
~~~
/usr/sbin/dhcpd bnx0
~~~

80
HowtoDUC.md Normal file
View File

@ -0,0 +1,80 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# HowTo DUC
Duc est un utilitaire pour analyser l'espace disque (le précédent projet du même développeur était philesight).
## Installation
Il n'y a pas de paquets officiel ou de Debian, il faut le compiler, cf. les instructions sur le site <http://duc.zevv.nl/>
En revanche, nous avons des paquets Evolix pour Squeeze, Wheezy et Jessie, il faut mettre dans son sources.list :
~~~
deb <http://pub.evolix.net/> jessie/
~~~
## Utilisation
Quelques exemples :
Lancer une indexation de /backup/jails :
-H : Compte les mêmes inode une seule fois.
-e <regex> : exclude les fichiers correspondant à la regex.
~~~
# duc index -H -d /backup/duc.idx /backup/jails
~~~
Afficher l'espace disque avec l'interface ncurses. (q pour quitter, flèche directionnelles pour naviguer).
~~~
# duc ui -d /backup/duc.idx /backup/jails
~~~
Afficher l'espace disque avec un « ls like ».
~~~
# duc ls -d /backup/duc.idx -Fg /backup/jails/
~~~
Générer un graphique :
~~~
# duc graph -d /backup/duc.idx -o /tmp/duc.png -l8 -s 1920 /backup/jails/
~~~
### En CGI
Il suffit de créer ce petit script sh dans `/usr/lib/cgi-bin/duc.cgi`, de donner les bons droits et d'y accéder.
~~~
#!/bin/sh
/usr/bin/duc cgi -d /backup/duc.idx --list
~~~
~~~
# chmod 755 /usr/lib/cgi-bin/duc.cgi
# chown www-data: /usr/lib/cgi-bin/duc.cgi
# chmod 640 /backup/duc.idx
# chgrp www-data /backup/duc.idx
~~~
#### Apache
Apache traite les CGI par défaut dans cgi-bin, il n'y a donc rien à faire.
#### NginX
À priori impossible à part avec un wrapper CGI…
### Cron
Cron d'indexation journalier.
~~~
30 6 * * * duc index -q -d /backup/duc.idx /backup/jails && chmod 640 /backup/duc.idx && chgrp www-data /backup/duc.idx
~~~

81
HowtoDebian/Backports.md Normal file
View File

@ -0,0 +1,81 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Debian backports
Une distribution stable de Debian garde en permanence (ou presque) les mêmes versions des logiciels (c'est le principe d'une version stable).
Certaines versions plus récentes sont néanmoins distribuées via des paquets Debian de "backports".
## Utilisation
Pour disposer des backports, on ajoutera le dépôt Debian Backports dans un fichier */etc/apt/sources.list.d/backports.list* :
Pour Jessie :
~~~
deb <http://mirror.evolix.org/debian> jessie-backports main
~~~
On utilisera de l' _APT pinning_ pour bénéficier des mises-à-jour via les mises-à-jour régulières en créant le fichier */etc/apt/preferences.d/backports* ainsi :
~~~
Package: *
Pin: release a=jessie-backports
Pin-Priority: 200
~~~
*ATTENTION, ceci provoquera des mises-à-jours pour l'ensemble des paquets "backportés" ... ceci est déconseillé dans un cas général !*
On conseille plutôt de préciser explicitement les paquets que l'on veut. Exemple _/etc/apt/preferences.d/backports_ où l'on n'utilisera que les paquets Samba des backports :
~~~
Package: *
Pin: release a=jessie-backports
Pin-Priority: 50
Package: samba samba-common samba-common-bin libwbclient0
Pin: release a=jessie-backports
Pin-Priority: 999
~~~
## Mise-à-jour du noyau Linux
Pour Squeeze :
~~~
deb <http://backports.debian.org/debian-backports> squeeze-backports main contrib non-free
~~~
~~~
# aptitude install linux-image-3.2.0-0.bpo.4-amd64 initramfs-tools=0.99~bpo60+1 linux-base=3.4~bpo60+1 firmware-bnx2=0.36+wheezy.1~bpo60+1
~~~
## [Wheezy] Créer une image CD netinst avec un kernel backporté wheezy-backports
~~~
# aptitude install build-essential pbuilder bc debiandoc-sgml libbogl-dev glibc-pic libslang2-pic libnewt-pic genext2fs mklibs genisoimage dosfstools syslinux tofrodos mtools po4a bf-utf-source fakeroot crash kexec-tools makedumpfile kernel-wedge xorriso win32-loader librsvg2-bin libacl1
~~~
~~~
$ apt-get source debian-installer
$ cd debian-installer-20130613+deb7u2/build
~~~
config/amd64.cfg:
~~~
KERNELVERSION = 3.16.0-0.bpo.4-amd64
KERNELMAJOR = 3.16
~~~
sources.list.udeb.local:
~~~
deb <http://mirror.evolix.org/debian> wheezy main
deb <http://mirror.evolix.org/debian> wheezy main/debian-installer
deb <http://mirror.evolix.org/debian> wheezy-backports main/debian-installer
~~~
pkg-lists/netboot/amd64.cfg:
~~~
#nic-extra-modules-${kernel:Version}
#floppy-modules-${kernel:Version}
multiarch-support
libacl1
~~~

32
HowtoDebian/Download.md Normal file
View File

@ -0,0 +1,32 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Créer un média d'installation de Debian
Télécharger une ISO sur <http://cdimage.debian.org/debian-cd/current/amd64/iso-cd/>
## Via clé USB
Copier simplement vers le média *non partitionné* :
~~~
# cp debian-8.6.0-amd64-CD-1.iso /dev/sdb
# sync
~~~
# Créer un média Debian-Live
Télécharger une ISO sur <http://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/>
## Via clé USB
Copier simplement vers le média *non partitionné* :
~~~
# debian-live-8.6.0-amd64-standard.iso /dev/sdb
# sync
~~~
Infos Debian-Live :
* login # user, password live
* passer en azerty : apt install console-data

300
HowtoDebian/Install.md Normal file
View File

@ -0,0 +1,300 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Howto Installer Debian
Nous avons installé des centaines de serveurs Debian passés en production.
Nous listons ici certaines modifications appliquées dans une optique d'optimisation et de sécurisation.
Attention, ces modifications ne sont pas forcément applicables dans le cas général !
### Avant d'installer
Divers conseils :
* Vérifiez la mémoire à l'aide de l'outil _memtest86_
* Valider le bon fonctionnement de la machine avec un live-CD comme Knoppix
* Sauvegarder le MBR et la table des partitions
* Sauvegarder les éventuelles partitions contenant des utilitaires !
* Tester les disques durs avec un outil comme _badblocks_
### Installation
Via CD-ROM ou PXE, quelques commentaires sur nos choix :
* Choisir _anglais/us_ pour la langue, notamment pour avoir des messages d'erreur en anglais et faciliter la recherche dans les moteurs de recherche
* Nous choisissions le miroir Debian _mirror.evolix.org_ hébergé par nos amis de l'Ecole Centrale de Marseille
* Le partitionnement est le grand moment d'une installation. Entre les habitudes et recettes de grand-mère, voici nos préconisations :
~~~
Sauf cas particuliers, optez pour 3 partitions primaires :
200 M pour /boot
500 M pour /
10 G pour /var
Ensuite, des partitions logiques :
5 G pour /usr
500 M pour /tmp
500 M pour swap
500 M pour swap
~~~
Si nécessaire (pour des logs web par exemple) créer une partition /var/log de 10 G
Si nécessaire pour des bases de données, créer une partition en LVM afin de bénéficier des snapshots pour une sauvegarde optimisée
L'espace restant (en prenant l'habitude de garder 5 à 10 G d'espace libre) sera réservé pour /home de type LVM si besoin de flexibilité
* Le système de fichiers à choisir est _ext4_ sauf rares exceptions.
* Ne choisir d'installer aucun des meta-package proposé (décocher tout).
### Configuration post-install
Voici nos préconisations post-installation :
* Régler le niveau de debconf à _low_ :
~~~
# dpkg-reconfigure -plow debconf
~~~
* Ajuster le contenu du fichier _sources.list_ :
~~~
deb <http://mirror.evolix.org/debian/> wheezy main
deb <http://security.debian.org/> wheezy/updates main
deb <http://mirror.evolix.org/debian> wheezy-updates main
#deb <http://mirror.evolix.org/debian/> wheezy-proposed-updates main
#deb <http://backports.debian.org/debian-backports> wheezy-backports main
# Paquets specifiques Evolix
#deb <http://pub.evolix.net/> kernel/
deb <http://pub.evolix.net/> wheezy/
#deb <http://pub.evolix.net/> wheezy-backports/
~~~
Puis ne pas oublier d'exécuter :
~~~
# aptitude update
~~~
* Désactiver _apt-get_ pour s'assurer que seul _aptitude_ sera utilisé (attention, ceci peut "casser" certains logiciels)
~~~
# dpkg-divert --add --rename --divert /usr/bin/apt-get.bak /usr/bin/apt-get
~~~
* Désactiver l'installation automatiques des paquets recommandés en ajoutant dans le fichier _/root/.aptitude/config_ :
~~~
aptitude "";
aptitude::Suggests-Important "false";
aptitude::Recommends-Important "false";
~~~
* Si vous choississez de monter les partitions avec des permissions particulières (par exemple "read-only" pour _/usr_ et "noexec" pour _/tmp_), on peut automatiser les changements et afficher un avertissement, via le fichier _/etc/apt/apt.conf_ ou dans un fichier personnalisé placé dans _/etc/apt/apt.conf.d/_ :
~~~
DPkg {
// Warn the user about the auto remount of partitions.
Pre-Invoke {
"echo 'Remounting partitions. Are you sure? Else exit with ^C'; read REPLY; mount -oremount,exec /tmp && mount -oremount,rw /usr";
};
Post-Invoke {
"mount -oremount /tmp && mount -oremount /usr || exit 0";
};
}
~~~
* Installation de paquets ou mises-à-jour en pensant à bien regarder les paquets "recommandés" lors d'une installation…
* Installer Postfix, le meilleur serveur mail du monde :
~~~
# aptitude install postfix
~~~
Postfix sera configuré en en fonction de l'utilisation du serveur
* Installer un certain nombre de paquets indispensables (voir les dépendances du meta-package _serveur-base_ hébergé sur le repository Evolix,
ceci ne fonctionnera que si vous l'avez activé dans le _sources.list_) :
~~~
# aptitude install serveur-base ssh
~~~
Note : les paquets distribués par Evolix ne sont pas signés donc ne pas tenir compte des erreurs "untrusted packages"
Note : pour _apt-listchanges_ choisir "pager" puis "both" et d'envoyer sur l'adresse de votre choix
* S'assurer que les services inutiles sont désactivés. Ceci n'est plus nécessaire depuis les dernières versions de Debian, mais par réflexe, on fera :
~~~
# aptitude purge portmap hotplug nfs-common pidentd
# update-inetd --disable discard,daytime,time,ident
~~~
* On choisira l'éditeur par défaut du système (Vim étant le meilleur éditeur du monde...) :
~~~
# update-alternatives --config editor
~~~
* Configurer les alias mail :
~~~
# getent passwd | cut -d":" -f1 | sed "s/$/: root/" > /etc/aliases
~~~
On ajustera ensuite les mails pour "root" vers l'adresse mail de votre choix.
Et on pourra ajouter les alias suivants : postmaster, abuse, et mailer-daemon.
Puis :
~~~
# newaliases
~~~
* Ajuster le fichier _/etc/fstab_ suivant les restrictions nécessaires. Par exemple :
~~~
proc /proc proc defaults 0 0
/dev/sda1 /boot ext' defaults 0 2
/dev/sda2 / ext4 defaults,errors=remount-ro 0 1
/dev/sda3 /var ext4 defaults 0 2
/dev/sda5 /usr ext4 defaults,ro 0 2
/dev/sda6 /tmp ext4 defaults,noexec,nosuid,nodev 0 2
/dev/sda7 none swap sw 0 0
/dev/sda8 none swap sw 0 0
tmpfs /var/tmp tmpfs defaults,noexec,nosuid,nodev 0 2
tmpfs /var/lock tmpfs defaults,noexec,nosuid,nodev 0 2
/dev/mapper/myvol1-home /home ext4 defaults,noexec,nosuid,nodev,usrquota,grpquota 0 2
~~~
Note: notez que la partition /usr est montée en read-only par défaut ET que /var/tmp/ et /var/lock sont en TMPFS (ce qui signifie purgé à chaque reboot !!).
Ceci est complètement non-standard et contraire au FHS, donc n'appliquer cela que si vous savez ce que vous faites !
* Gestion des quotas. On supprimera le script _quotarpc_ inutile :
~~~
# update-rc.d -f quotarpc remove
~~~
Si besoin de gérer les quotas, outre l'activation dans le _fstab_ :
~~~
# quotaoff -a
# quotacheck -auvg
# quotaon -auvg
# edquota -t
~~~
Dans un environnement professionel, nous conseillons de mettre la période de grâce à 30 jours minimum.
* Gestion des ACL si besoin. Outre l'installation du paquet _acl_, on ajoutera l'option _acl_ dans le _fstab_ pour la partition concernée (probablement /home)
* Changer les heures par défaut dans le fichier /etc/crontab afin d'éviter des surcharges divers à des moments donnés. Par exemple, ainsi :
~~~
hourly à Xh13
daily à 1h23
weekly à 3h33
monthly à 4h37
~~~
* Par défaut, les journaux système sont gérés par _rsyslog_. Sa configuration devra être ajustée via le fichier _/etc/rsyslog.conf_ pour notamment activer les logs de cron ou encore désactiver l'écriture en double de certains journaux.
* Pour la rotation des logs système, depuis la dernière version, tout est géré via logrotate.d (et non plus savelog). Attention, les paramètres par défaut conservent très peu de temps certains journaux (quelques semaines voire quelques jours...) et il convient de les ajuster pour les conserver pendant un an (ni plus ni moins). D'autres ajustements peuvent être faits pour dater les fichiers de logs via des actions _postrotate_ de logrotate.
* Configuration de Munin via `/etc/munin/munin.conf`, notamment le hostname.
Si le noyau est patché _grsec_, il faut ajouter les lignes suivantes dans le fichier /etc/munin/plugin-conf.d/munin-node :
~~~
[processes]
user root
~~~
* Pour avoir une machine toujours à l'heure, on utilise _ntp_ avec le fichier _/etc/ntp.conf_ :
~~~
server ntp.evolix.net
~~~
* Droits des utilisateurs
* /etc/profile Définir umask 027 ou umask 077 en fonction de l'utilisation du serveur (gestion de groupes ou non)
* /root/.bashrc Définir umask 077, les fichiers créés par root ne doivent pas être visibles par les utilisateurs !
* /etc/sudoers Voir plus bas la partie sur _sudo_
* /root Mettre les droits 0700
* /usr/share/scripts Mettre les droits 0700 (répertoire spécifique aux scripts d'Evolix)
* /etc/adduser.conf Régler DIR_MODE
* Pour gérer les accès _root_, utiliser le logiciel _sudo_, avec une configuration du type :
~~~
# visudo
Defaultsenv_reset, umask=0077
User_Alias ADMIN = pnom1, pnom2, pnom3
ADMIN ALL=(ALL) ALL
~~~
* Configurer SSH en interdisant l'accès _root_ direct dans le fichier sshd_config :
~~~
PermitRootLogin no
~~~
Il est également conseillé d'utiliser la directive AllowUsers pour restreindre l'accès à certains utilisateurs et certaines adresses IP :
~~~
AllowUsers pnom1@1.2.3.4 pnom1@::ffff:1.2.3.4
~~~
* Soyons parano, on peut restreindre l'accès root à la 5e console ainsi :
~~~
# echo tty5 > /etc/securetty
~~~
* Installer _minifirewall_. Cela consiste à télécharger les fichiers (principalement _minifirewall_ et _firewall.rc_) à partir du repository GIT <http://git.evolix.org/?p=evolinux/minifirewall.git;a=summary> et les placer respectivement dans _/etc/init.d/_ et _/etc_. Il faut ensuite procéder aux ajustements dans le fichier _firewall.rc_
* Créer le fichier /etc/init.d/alert5 suivant :
~~~
#!/bin/sh
date | mail -s'boot/reboot' mail@example.com
/etc/init.d/minifirewall start
~~~
Et activer tout cela :
~~~
# chmod +x /etc/init.d/alert5 /etc/init.d/minifirewall
# update-rc.d alert5 start 99 2 .
~~~
* Pour diverses raisons, on peut limiter le temps de connexion en plaçant une ligne _export TMOUT=3600_ dans le fichier /etc/profile.
* Enfin, il faut ajuster les droits les moins permissifs possibles. On utilisera par exemple :
~~~
# find /etc/ -perm -004
~~~
* De la même façon au niveau réseau, on pourra tester les ports ouverts, par exemple avec l'une des commandes suivantes :
~~~
# netstat -a -u -t -n -p
# lsof -i
# time nmap -sS -O -T Insane -p 0- YOUR-IP
~~~
* Script *evomaintenance* : pour une administration à plusieurs, nous utilisons un script qui permet d'informer à chaque intervention et de retenir ces informations dans une base de données. Voici comment nous l'utilisons :
~~~
# aptitude install evomaintenance
~~~
Puis ajuster le fichier de configuration _/etc/evomaintenance.cf_ et autoriser ce script à se lancer sans mot de passe pour les administrateurs via sudo. On ajoutera donc dans le suoders :
~~~
Cmnd_Alias MAINT = /usr/share/scripts/evomaintenance.sh
ADMIN ALL=NOPASSWD: MAINT
~~~
Note : la règle finale doit être ajoutée à la fin pour avoir plus d'importance que les règles déjà en place.
Pour l'utilisation, les administrateurs placeront dans leur fichier .profile ou .bashrc :
~~~
trap "sudo /usr/share/scripts/evomaintenance.sh" 0
~~~

View File

@ -0,0 +1,378 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Migration Lenny -> Squeeze
Release Notes i386 : <http://www.debian.org/releases/squeeze/i386/release-notes/>
Release Notes amd64 : <http://www.debian.org/releases/squeeze/amd64/release-notes/>
## VERSIONS
Passage de Lenny à Squeeze :
MySQL 5.0.51 -> 5.1.49
PHP 5.2.6 -> 5.3.3
Apache 2.2.9 -> 2.2.16
Tomcat 5.5.26->6.0.35
## APT
* Le dépôt volatile de lenny n'existe plus, il faut utiliser à la place :
~~~
deb <http://mirror.evolix.org/debian> squeeze-updates main
~~~
* Bien vérifier les paquets proposés à la suppression !
* Dans certains cas particuliers, on pourra utiliser apt-get à la place d'aptitude, qui peut avoir une gestion différente... mais attention,
les opérations avec apt-get ne seront donc pas loguées dans /var/log/aptitude !
## Munin
* Commenter toutes les lignes de /etc/apache2/conf.d/munin
* Modifier l'URL de domaine/machine.html vers domaine/machine/index.html
* S'assurer que Munin soit toujours accessible
## Apache
* Pour mod_ssl, il est désormais nécessaire d'avoir des directives SSLxxx dans chaque VH *:443 => il faut donc dupliquer ces directives dans les autres VHs...
* Bien s'assurer de la présence de la variable APACHE_LOG_DIR dans le fichier */etc/apache2/envvars* sous peine d'avoir des erreurs du type :
~~~
Starting web server: apache2Action 'start' failed.
The Apache error log may have more information.
failed!
[error] (2)No such file or directory: could not open transfer log file /etc/apache2/${APACHE_LOG_DIR}/other_vhosts_access.log.
Unable to open logs
~~~
## PHP
* Le module mhash n'existe plus (intégré dans PHP) : mhash.ini à supprimer donc
* methode goto apparait cf <http://infogerance-linux.net/2012/php-5-2-goto-php-5-3/>
* Les directives register_long_arrays et magic_quotes_gpc sont désormais deprecated : à voir avec le client si elles peuvent être supprimées.
* Les directives session_is_registered et session_register le sont egalement, elles peuvent cependant être remplacée facilement :
~~~
// if (!session_is_registered ("variable"))
// est remplacée par
if (!isset($_SESSION["variable"]))
// session_register("variable");
// est remplacée par
$_SESSION["variable"] == TRUE;
~~~
* possibilité de repasser à PHP5.2 sous Squeeze, cf <http://infogerance-linux.net/2012/downgrader-php53/>
* L'affichage des warnings _PHP Deprecated_ peut être désactivé au niveau du virtualhost :
~~~
# E_ALL & ~E_STRICT & ~E_DEPRECATED
php_admin_value error_reporting 22527
~~~
## MySQL
* L'option _skip-bdb_ n'existe plus, il faut la retirer du fichier _my.cnf_
* S'assurer que _bind-address_ est bien resté le même (debconf peut reposer la question là-dessus)
* Erreur _ERROR 1577 (HY000) at line 1: Cannot proceed because system tables used by Event Scheduler were found damaged at server start_ : dans
ce cas, on peut supprimer la table _event_ qui sera recréée : _drop table mysql.event_ puis _mysql_upgrade --force_. Au pire, voici la table
sur une Squeeze :
~~~
CREATE TABLE `event` (
`db` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`name` char(64) NOT NULL DEFAULT '',
`body` longblob NOT NULL,
`definer` char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`execute_at` datetime DEFAULT NULL,
`interval_value` int(11) DEFAULT NULL,
`interval_field` enum('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`last_executed` datetime DEFAULT NULL,
`starts` datetime DEFAULT NULL,
`ends` datetime DEFAULT NULL,
`status` enum('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL DEFAULT 'ENABLED',
`on_completion` enum('DROP','PRESERVE') NOT NULL DEFAULT 'DROP',
`sql_mode` set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') NOT NULL DEFAULT '',
`comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`originator` int(10) unsigned NOT NULL,
`time_zone` char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM',
`character_set_client` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`collation_connection` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`db_collation` char(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`body_utf8` longblob,
PRIMARY KEY (`db`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Events';
~~~
* Si il y a des instances MySQL, il faudra forcer le process d'upgrade de la base de données, par exemple : _mysql_upgrade --port=3307_
* ATTENTION, un bug affecte MySQL à partir de 5.1, les noms de bases avec un '-' doivent être évités... car le cache MySQL ne fonctionne pas !!! Voir <http://bugs.mysql.com/bug.php?id=64821> et <http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-9.html>
## SHELL
* Garder bash en shell sur /bin/sh ... sauf être vraimment sûr de soi ! (la question est posée par debconf)
* Attention /bin/false n'est plus listé dans /etc/shells (peut avoir des soucis pour PROFTPD)
## ProFTPD
* Le paquet peut être supprimé dans certains cas particulier
## /etc/fstab
* Upgrade du fstab en UUID : accepter a priori (pas de vrais problèmes rencontrés jusqu'ici...)
## GRUB-2 ou GRUB-PC
* Si celui-ci pose un soucis de type « out of partition »
* Ré-installer grub 1 avec le paquet grub-legacy
* Relancer l'installation à la main, taper grub puis
* root (hd0,0)
* setup (hd0)
* quitter et exécutez update-grub
Si le "demi-passage" à GRUB2 se passe bien, on peut ensuite exécuter (puis rebooter) :
~~~
# upgrade-from-grub-legacy
# rm -f /boot/grub/menu.lst*
~~~
Note : avec Xen, on inversera l'ordre de linux et linux_xen pour avoir :
~~~
# ls /etc/grub.d/
00_header 05_debian_theme 10_linux_xen 20_linux 30_os-prober 40_custom 41_custom README
~~~
## KERNEL avec GRSEC et GRUB
Lors d'une mise-à-jour du noyau, vous rencontrez une erreur du type :
~~~
Searching for GRUB installation directory ... found: /boot/grub
User postinst hook script [update-grub] exited with value 137
dpkg: error processing linux-image-2.6.26-2-amd64 (--configure):
subprocess post-installation script returned error exit status 137
Errors were encountered while processing:
linux-image-2.6.26-2-amd64
# dmesg
PAX: From 192.0.43.10: execution attempt in: <anonymous mapping>, 7cec1c0bc000-7cec1c0d1000 7ffffffea000
PAX: terminating task: /usr/sbin/grub-probe(grub-probe):14743, uid/euid: 0/0, PC: 00007cec1c0cfe98, SP: 00007cec1c0cfe48
PAX: bytes at PC: 41 bb 70 40 40 00 49 ba 90 fe 0c 1c ec 7c 00 00 49 ff e3 00
PAX: bytes at SP-8:
grsec: From 192.0.43.10: denied resource overstep by requesting 4096 for RLIMIT_CORE against limit 0 for /usr/sbin/grub-probe[grub-probe:14743] uid/euid:0/0 gid/egid:0/0, parent /usr/sbin/update-grub[update-grub:14742] uid/euid:0/0 gid/egid:0/0
PAX: From 192.0.43.10: execution attempt in: <anonymous mapping>, 74d7be68f000-74d7be6a5000 7ffffffe9000
PAX: terminating task: /usr/sbin/grub-probe(grub-probe):17804, uid/euid: 0/0, PC: 000074d7be6a3ac8, SP: 000074d7be6a3a78
PAX: bytes at PC: 41 bb 70 40 40 00 49 ba c0 3a 6a be d7 74 00 00 49 ff e3 00
PAX: bytes at SP-8:
grsec: From 192.0.43.10: denied resource overstep by requesting 4096 for RLIMIT_CORE against limit 0 for /usr/sbin/grub-probe[grub-probe:17804] uid/euid:0/0 gid/egid:0/0, parent /usr/sbin/update-grub[update-grub:17803] uid/euid:0/0 gid/egid:0/0
~~~
Pour résoudre ce soucis :
~~~
# aptitude install paxctl
# paxctl -Cpermxs /usr/sbin/grub-probe
# aptitude upgrade
~~~
Lors d'une mise-à-jour du noyau, vous rencontrez une erreur du type :
~~~
update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169
~~~
Pour résoudre ce soucis ajouter les dépôts contrib et non-free dans le sources.list puis :
~~~
aptitude install firmware-realtek
update-initramfs -u -k all
~~~
Pour mettre un noyau Linux 3.2 issu des backports, on ajoutera donc au sources.list :
~~~
deb <http://backports.debian.org/debian-backports> squeeze-backports main contrib non-free
~~~
Puis :
~~~
# aptitude install linux-image-3.2.0-0.bpo.1-amd64 linux-base=3.4~bpo60+1 initramfs-tools=0.99~bpo60+1 firmware-bnx2=0.35 firmware-bnx2x=0.35
~~~
## AWStats
* Le fichier _/etc/cron.d/awstats_ pourrait être écrasé sans confirmation : par sécurité, sauvegarder le avant la mise-à-jour si vous l'avez modifié
## Dovecot
Si ce message s'affiche après la mise-à-jour :
~~~
Error in configuration file /etc/dovecot/dovecot.conf line 680: Unknown setting: sieve Fatal: Invalid configuration
~~~
Il faut déplacer les options _sieve=_ et _sieve_storage=_ de la section _protocol managesieve_ vers la section _plugin_
Si c'est ce message :
~~~
Error in configuration file /etc/dovecot/dovecot.conf line 94: Unknown setting: ssl_disable
~~~
Il faut commenter l'option _ssl_disable = no_.
Si c'est ce message :
~~~
Error in configuration file /etc/dovecot/dovecot-ldap.conf line 120: Unknown setting: user_global_uid
~~~
Il faut s'assurer que tous les uids/gids des comptes virtuels soient à 5000/5000 dans ldap (ou en tout cas les même que le compte vmail) et commenter ces lignes.
Enfin, pour un message du type :
~~~
Warning: fd limit 1024 is lower than what Dovecot can use under full load (more than 5696). Either grow the limit or change login_max_processes_count and max_mail_processes settings
~~~
Il faut augmenter le _ulimit -n_ dans /etc/default/dovecot
On a également noté des soucis avec le paramètre _mail_plugins = quota imap_quota_
Si dans le mail.log vous avez pleins de warning sur des type de maildir non trouvé (dbox, cydir), il faut spécifier dans la conf que l'on utilise seulement une maildir :
~~~
mail_location = maildir:~/Maildir
~~~
Autre contrainte, dans le _dovecot.conf_, changer :
~~~
mail_plugins = cmusieve
~~~
en :
~~~
mail_plugins = sieve
~~~
## Horde
~~~
Fatal error: Call to undefined method PEAR_Error::listFolder() in
~~~
Voir <http://bugs.horde.org/ticket/6359>
## Xen
En passant à un kernel 2.6.32 dans le domU il faut changer sda en xvda (dans le paramètre _root=_ de la config de la VM et dans le fstab du domU)
et dans /etc/inittab du domu, changer _1:2345:respawn:/sbin/getty 38400 tty1_ en _1:2345:respawn:/sbin/getty 38400 hvc0_
## Courier IMAP
Si vous avez une notification du type :
~~~
MAP server information: Filesystem notification initialization error -- contact your mail administrator (check for configuration errors with the FAM/Gamin library)
~~~
Installer le package fam :
~~~
# aptitude install fam
~~~
Attention, on peut théoriquement également installer aussi _gamin_ mais nous avons constaté des performances déplorables
(lenteurs avec des Maildir bien remplis, load élevé, etc.). Voir notamment <http://bugs.debian.org/578937>
Note : installer nscd ou nslcd peut également améliorer les performances, etc.
## Samba
Si LDAPS n'est pas utilisé, il est désormais obligatoire d'ajouter dans le smb.conf :
~~~
ldap ssl = off
~~~
Pour un fonctionnement avec FreeRadius + WINBIND, il faut désormais ajouter l'utilisateur _freerad_
dans le groupe _winbindd_priv_ :
~~~
# adduser freerad winbindd_priv
~~~
Enfin, pour l'authentification NTLM dans le cadre d'une authentification Freeradius+EAP/MSCHAPv2+ntlm_auth :
1. La version 3.5 de Samba ne gère plus l'authentification locale NTLM !!!
On obtient :
~~~
NT_STATUS_INVALID_HANDLE: Invalid handle (0xc0000008)
~~~
Voir <http://bugs.debian.org/612049> et <https://bugzilla.samba.org/show_bug.cgi?id=7481>
Le bug est corrigé dans version 3.6 !
Si besoin, il faut donc passé à la version présente dans wheezy/sid (3.6.3 à ce jour, et pas encore backportée mais cela fonctionne)
2. Mais même en 3.6, l'authentification machine ne fonctionne plus ! On obtient l'erreur :
~~~
NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT (PAM: 9)
~~~
À la lecture du code source de Samba (!), on voit le code suivant :
~~~
if (acct_ctrl & ACB_WSTRUST) {
if (!(user_info->logon_parameters & MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT)) {
DEBUG(2,("sam_account_ok: Wksta trust account %s denied by server\n", pdb_get_username(sampass)));
return NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT;
}
}
~~~
C'est apparemment une vérification d'envoi d'un flag lors de l'authentification machine.
En désactivant cette vérification (recompilation d'un paquet Samba sous Sid)... cela fonctionne.
Cela concerne précisément les paquets : samba samba-common samba-common-bin samba-tools winbind libwbclient0
Voir <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=658707> et <https://bugzilla.samba.org/show_bug.cgi?id=8744>
## LDAP
Un cas rencontré où _ldapsearch_ ne fait plus ses requêtes sur 127.0.0.1 par défaut : il a fallu rajouter explicitement _-h 127.0.0.1_
## Postgrey
* Son port d'écoute change du 60000 vers le 10023 ! Il faut donc adapter la configuration de Postfix en conséquence !
* Si Postgrey segfault, il faut supprimer ses données : rm /var/lib/postgrey/* cf <http://ubuntuforums.org/showthread.php?t=1789045>
## PAM_LDAP
Il est conseillé d'utiliser le paquet _libpam-ldapd_ au lieu de _libpam-ldap_... mais si l'on veut mettre à jour l'attribut _shadowLastChange_
via la commande *password*, il faut utiliser _libpam-ldap_ à cause du bug <http://bugs.debian.org/619881>
## Evomaintenance
* Supprimer metche
* cd /etc/ && git init
* Ajouter les directives Git à _evomaintenance.sh_

View File

@ -0,0 +1,16 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Debian LTS
Ajouter au sources.list :
~~~
deb <http://http.debian.net/debian> squeeze-lts main
~~~
ou si besoin de non-free :
~~~
deb <http://http.debian.net/debian> squeeze-lts main contrib non-free
~~~

View File

@ -0,0 +1,443 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Migration Squeeze -> Wheezy
Release Notes i386 : <http://www.debian.org/releases/wheezy/i386/release-notes/>
Release Notes amd64 : <http://www.debian.org/releases/wheezy/amd64/release-notes/>
Attention, il est [recommandé](http://www.debian.org/releases/wheezy/amd64/release-notes/ch-upgrading.en.html#upgrading-full) d'utiliser _apt-get_ et non _aptitude_ :
Avant de mettre à jour penser à vérifier les paquets étiquetés et suspendus et modifier si besoin :
~~~
# apt-cache policy
# aptitude search "~ahold"
~~~
Commencer par télécharger l'ensemble des paquets qui devront être installés (afin de limiter le temps effectif d'installation).
~~~
# apt-get dist-upgrade --download-only
~~~
Faire ensuite une mise à niveau "simple", pour appliquer les mises à jour triviales :
~~~
# apt-get upgrade
~~~
Enfin, appliquer les mises à jour non triviales (nécessitant des changements de paquets dépendants, des suppressions, ...) afin d'avoir un oeil plus précis sur ce qui sera fait, avant de valider :
~~~
# apt-get dist-upgrade
~~~
## VERSIONS
Passage de Squeeze à Wheezy :
MySQL 5.1.49 -> 5.5.53
PHP 5.3.3 -> 5.4.45
Apache 2.2.16 -> 2.2.22
Tomcat 6.0.35 -> 6.0.45
## /etc/securetty
La syntaxe a changé. Si il y a des restrictions particulières, il faudra les remettre en place.
## /etc/nagios/nrpe.cfg
Si vous avez une erreur :
~~~
nrpe: Cannot write to pidfile '/var/run/nrpe.pid' - check your privileges.
~~~
Workaround : modifier pid_file :
~~~
pid_file=/var/run/nagios/nrpe.pid
~~~
## Shell
Attention, vérifiez bien que le lien /bin/sh ne change pas de destination (de bash à dash) sans prévenir !!
On a constaté un cas où /bin/sh pointait vers dash après mise-à-jour alors que ça pointait vers bash avant.
Vérifier dans les backups vers quoi pointait /bin/sh avant l'upgrade
## Apache
<httpd.conf> n'existe plus par défaut : si il était vide mais que vous conservez votre ancien apache2.conf vous aurez une erreur du type :
~~~
Starting web server: apache2
apache2: Syntax error on line 207 of /etc/apache2/apache2.conf: Could not open configuration file /etc/apache2/<httpd.conf:> No such file or directory
~~~
Workaround : touch /etc/apache2/<httpd.conf>
## /etc/sudoers
Il est conseillé de migrer la configuration en utilisant /etc/sudoers.d/XXXX : <http://www.debian.org/releases/stable/amd64/release-notes/ch-upgrading.en.html#package-specific-issues>
## PHP
### Directives obsolètes
Les directives suivantes n'existe plus, il faut donc les commenter ou supprimer de la configuration.
- allow_call_time_pass_reference [[BR]]
- magic_quotes_gpc[[BR]]
- register_long_arrays[[BR]]
### php5-suhosin
The php5-suhosin package has been removed. If your PHP configuration included the suhosin module, it will fail to load after the PHP upgrade. Run dpkg --purge php5-suhosin to remove the leftover configuration in /etc/php5/conf.d/suhosin.ini.
## Evomaintenance
/usr/share/scripts/evomaintenance.sh: 54: /usr/share/scripts/evomaintenance.sh: sendmail: not found
Il faut soit mettre le path complet dans evomaintenance : /usr/sbin/sendmail
## Evoadmin Web
Version de Squeeze incompatible avec Wheezy, il faut prendre la version GIT :
Il faut mettre dans /etc/apache2/envvars
~~~
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
~~~
## Dovecot
La configuration de Dovecot est désormais découpée en Wheezy, cela peut donner des résultats
surprenants lors de la mise-à-jour. Il est conseillé de reprendre la configuration de zéro
ou preque. Bien penser à éditer différents fichiers :
~~~
# vim conf.d/10-auth.conf
disable_plaintext_auth = no
!include auth-ldap.conf.ext
# vim conf.d/15-lda.conf
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@example.com
}
# vim conf.d/10-ssl.conf
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
# vim conf.d/10-master.conf
service auth {
unix_listener auth-userdb {
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
}
unix_listener auth-master {
group = vmail
mode = 0660
}
user = root
}
# vim conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n
mail_uid = vmail
mail_gid = vmail
~~~
Attention également, il faudra éventuellement installer :
~~~
# aptitude install dovecot-ldap
# mv /etc/dovecot/dovecot-ldap.conf /etc/dovecot/dovecot-ldap.conf.ext
~~~
Test de la configuration :
~~~
# dovecot -n
~~~
## MySQL
### option secure_file_priv
Penser à ajouter la valeur par défaut à _secure-file-priv_ dans la config de MySQL (premier trouvé par ordre de préférence) :
* /etc/mysql/conf.d/evolinux.cnf
* /etc/mysql/conf.d/evolix.cnf
* /etc/mysql/my.cnf
* /etc/mysql/conf.d/000-evolinux-defaults.cnf
~~~
[mysqld]
secure-file-priv = ""
~~~
### option default-character-set
~~~
[ERROR] /usr/sbin/mysqld: unknown variable 'default-character-set=utf8'
~~~
Workaround : désactiver cette option...
Erreurs :
~~~
mysqld_safe[27427]: 150828 1:11:22 [ERROR] An old style --language value with language specific part detected: /usr/share/mysql/english/
mysqld_safe[27427]: 150828 1:11:22 [ERROR] Use --lc-messages-dir without language specific part instead.
~~~
Désactiver l'option obsolète "language = /usr/share/mysql/english"
Pour désactiver le moteur InnoDB, skip-innodb n'est plus suffisant, vous allez obtenir l'erreur :
~~~
mysqld: 150828 1:16:04 [ERROR] Unknown/unsupported storage engine: InnoDB
~~~
Vous devez ajouter :
~~~
skip-innodb
default-storage-engine=myisam
~~~
### mysqldump
Depuis la version 5.5, on ne peut plus "dumper" la base performance_schema, on obtient une erreur :
~~~
mysqldump: Got error: 1142: SELECT,LOCK TABL command denied to user 'mysqladmin'@'localhost' for table 'cond_instances' when using LOCK TABLES
~~~
Ceci est normal, la base performance_schema ne devant pas être dumpée en général.
Voir <http://bugs.mysql.com/bug.php?id=61414> et <http://dev.mysql.com/doc/refman/5.5/en/performance-schema-restrictions.html>
### .my.cnf
Si vous obtenez une erreur :
~~~
Warning: Using unique option prefix pass instead of password is deprecated and will be removed in a future release. Please use the full name instead.
~~~
Corrigez vos fichiers _.my.cnf_ pour mettre *password* à la place de *pass*.
## base-passwd
Si vous obtenez ce message :
~~~
update-passwd has found some differences between your system accounts
and the current Debian defaults. It is advisable to allow update-passwd
to change your system; without those changes some packages might not work
correctly. For more documentation on the Debian account policies please
see /usr/share/doc/base-passwd/README.
The list of proposed changes is :
[...]
~~~
Il est conseillé de refuser et de conserver les uid/gid utilisés.
## firmware bnx2
Rajouter non-free dans sources.list pour installer la mise à jour des firmwares bnx2.
## Oracle
Oracle veut utiliser /dev/shm en tmpfs, mais celui-ci a été déplacé en Wheezy, c'est maintenant /run/shm, avec un symlink vers /dev/shm, mais le symlink ne suffit pas ! Il faut donc revenir à l'ancienne méthode, pour cela on mettra dans le fstab :
~~~
tmpfs /dev/shm tmpfs nosuid,nodev,size=50%,mode=1777 0 0
~~~
## libnss LDAP
Attention, si vous avez répondu YES à "Make the configuration file readable/writeable by its owner only?" le fichier /etc/libnss-ldapconf repassera en 600.
Si nécessaire :
~~~
# chmod 644 /etc/libnss-ldapconf
# dpkg-reconfigure libnss-ldap
~~~
## ProFTPD
~~~
proftpd[24268]: Fatal: LoadModule: error loading module 'mod_vroot.c': Operation not permitted on line 74 of '/etc/proftpd/modules.conf'
~~~
Désactiver le module _mod_vroot_ ou installer le paquet _proftpd-mod-vroot_.
~~~
proftpd[18591]: Fatal: unknown configuration directive 'LDAPDNInfo' on line 14 of '/etc/proftpd/ldap.conf'
proftpd[18591]: Fatal: unknown configuration directive 'LDAPDoAuth' on line 15 of '/etc/proftpd/ldap.conf'
~~~
Les directives _LDAPDNInfo_ et _LDAPDoAuth_ sont à remplacer par _LDAPBindDN_ et _LDAPUsers_.
## Roundcube
Si la mise à jour automatique de la bdd roundcube se passe mal, et que l'on a l'erreur "[Native message: Unknown column 'changed' in 'field list']" dans /var/log/roundcube/error.log :
~~~
# mysql
> use roundcube
> ALTER TABLE `identities` ADD `changed` DATETIME NOT NULL DEFAULT '1000-01-01 00:00:00' AFTER `identity_id`;
~~~
## Mailgraph
Il faut appliquer ce patch pour /usr/share/scripts/mailgraph.sh
~~~
--- old 2015-06-11 18:01:16.476793959 +0200
+++ mailgraph.sh 2015-06-11 17:59:05.926043623 +0200
@@ -1,5 +1,6 @@
#!/bin/sh
MAILGRAPH_PATH=/usr/lib/cgi-bin/mailgraph.cgi # Debian
+export SCRIPT_NAME="mailgraph.cgi"
#MAILGRAPH_PATH=/usr/local/www/cgi-bin/mailgraph.cgi # FreeBSD
#MAILGRAPH_PATH=/usr/local/lib/mailgraph/mailgraph.cgi # OpenBSD
@@ -11,6 +12,7 @@
$MAILGRAPH_PATH | sed '1,2d ; s/mailgraph.cgi?//' > $MAILGRAPH_DIR/index.html
-for i in 0-n 0-e 1-n 1-e 2-n 2-e 3-n 3-e; do
+for i in 0-g 1-g 2-g 3-g 0-n 0-e 1-n 1-e 2-n 2-e 3-n 3-e; do
QUERY_STRING=$i $MAILGRAPH_PATH | sed '1,3d' > $MAILGRAPH_DIR/$i
done
~~~
## Script Perl add.pl mail-add.pl
Cas pack samba ou mail. Il faut patcher le script et installer une librairie.
~~~
# aptitude install libdigest-sha-perl
# sed -i 's/SHA1/SHA/g' add.pl
~~~
~~~
--- mail-add.pl 2015-08-31 09:27:24.000000000 +0200
+++ /tmp/a 2015-08-31 09:37:00.000000000 +0200
@@ -148,7 +148,7 @@
my $result = $ldap->search(
base => $edn,
filter => "(uid=$ldapuid)",
- attrs => "uid"
+ attrs => ["uid"]
);
$result->code && die $result->error;
@@ -206,7 +206,7 @@
$result = $ldap->search(
base => $edn,
filter => "(mailacceptinggeneralid=$mail)",
- attrs => "uid"
+ attrs => ["uid"]
);
$result->code && die $result->error;
if ($result->entries) {
@@ -225,7 +225,7 @@
$result = $ldap->search(
base => $edn,
filter => "(objectClass=posixAccount)",
- attrs => "uidNumber"
+ attrs => ["uidNumber"]
);
$result->code && die $result->error;
my $uid = $minuid; # uidNumber initial
@@ -374,7 +374,7 @@
$result = $ldap->search(
base => $dn,
filter => '(objectClass=posixGroup)',
- attrs => "gidNumber",
+ attrs => ["gidNumber"],
);
$result->code && die $result->error;
my @entries = $result->entries;
@@ -492,7 +492,7 @@
my $result = $ldap->search(
base => $edn,
filter => "(mailacceptinggeneralid=$alias)",
- attrs => "mailacceptinggeneralid"
+ attrs => ["mailacceptinggeneralid"]
);
$result->code && die $result->error;
if ($result->entries) {
@@ -540,7 +540,7 @@
my $result = $ldap->search(
base => $dn,
filter => "(objectClass=mailAccount)",
- attrs => "uid"
+ attrs => ["uid"]
);
$result->code && die $result->error;
@@ -590,7 +590,7 @@
my $result = $ldap->search(
base => $dn,
filter => "(objectClass=mailAlias)",
- attrs => "mailacceptinggeneralid"
+ attrs => ["mailacceptinggeneralid"]
);
$result->code && die $result->error;
~~~
## Asterisk
Si vous utilisez le module "meetme" vous devrez désormais installer le paquet "asterisk-dahdi"
## Sympa
La config évolue :
~~~
#ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa.fcgi
ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
~~~
avec les droits suivants :
~~~
-rwxr-xr-x 1 sympa sympa 610018 janv. 17 2015 /usr/lib/cgi-bin/sympa/wwsympa.fcgi
-rwsr-sr-x 1 sympa sympa 6192 janv. 17 2015 /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
~~~
## Evocheck
Si *IS_DPKGWARNING_FAILED*, télécharger '/etc/apt/apt.conf.d/80evolinux' et supprimer '/etc/apt/apt.conf'.

View File

@ -0,0 +1,320 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Migration Wheezy -> Jessie
Release Notes amd64 : <http://www.debian.org/releases/jessie/amd64/release-notes/>
Avant de mettre à jour penser à vérifier les paquets étiquetés et suspendus et modifier si besoin :
~~~
# apt-cache policy
# aptitude search "~ahold"
~~~
Éditer les dépôts dans /etc/apt/sources.list et /etc/apt/sources.list.d/*.list pour remplacer wheezy par jessie, puis mettre à jour la cache APT :
~~~
# apt-get update
~~~
Commencer par télécharger l'ensemble des paquets qui devront être installés (afin de limiter le temps effectif d'installation).
~~~
# apt-get dist-upgrade --download-only
~~~
Faire ensuite une mise à niveau "simple", pour appliquer les mises à jour triviales :
~~~
# apt-get upgrade
~~~
Enfin, appliquer les mises à jour non triviales (nécessitant des changements de paquets dépendants, des suppressions, ...) afin d'avoir un oeil plus précis sur ce qui sera fait, avant de valider :
~~~
# apt-get dist-upgrade
~~~
Bien vérifier que le noyau Linux a été mis à jour également :
~~~
# uname -a # version qui tourne actuellement
# dpkg -l |grep linux-image # version nouvellement installée
~~~
Si la carte ethernet est un Broadcom, vérifier également que le paquet firmware-bnx2 a été mis à jour.
Merger les nouvelles conf au cas par cas :
~~~
# find /etc -name "*.dpkg-*"
~~~
## VERSIONS
Passage de Wheezy à Jessie :
MySQL 5.5.31 -> 5.5.43
PHP 5.4.4 -> 5.6.7
Apache 2.2.22 -> 2.4.10
Tomcat 7.0.28 -> 7.0.56
Bind 9.8.4 -> 9.9.5
noyau Linux 3.2 -> 3.16
## systemd
Debian 8 utilise systemd par défaut. Pour passer effectivement en systemd (conseillé), il faut :
~~~
# apt install systemd-sysv
~~~
Informations de survie :
* lire <http://trac.evolix.net/infogerance/wiki/HowtoSystemd>
* Repasser en sysV (non conseillé/testé) : <http://without-systemd.org/wiki/index.php/How_to_remove_systemd_from_a_Debian_jessie/sid_installation>
Attention, le passage a systemd est délicat avec le démarrage réseau ! En effet, si des scripts liés au réseau sont démarrés via /etc/network/if-*up*/ vous aurez un blocage complet du démarrage...
Exemple : si le paquet openntpd est désinstallé et non purgé, votre démarrage sera bloqué => *dpkg -P openntpd*
Il faut donc vérifier que tous les scripts liés au réseau sont bien d'actualité : ls -l /etc/network/if-*up*/
Plus de détails sur <http://trac.evolix.net/infogerance/wiki/HowtoSystemd#networking>
## Bind
Si vous utilisez un chroot et systemd, vous devez (installer pkg _bind9_) -> voir <http://trac.evolix.net/infogerance/wiki/HowtoBind#InstallationetconfigurationdeBind>
~~~
# cp -a /lib/systemd/system/bind9.service /etc/systemd/system/
~~~
Ajuster la section [Service] :
~~~
EnvironmentFile=-/etc/default/bind9
ExecStart=/usr/sbin/named -f $OPTIONS
~~~
Puis :
~~~
# systemctl daemon-reload
~~~
Autre information importante pour vos zones "slave" elles sont désormais binaires par défaut,
pour conserver les anciennes il faut donc ajouter l'option (par exemple dans /etc/bind9/named.conf.options) :
~~~
masterfile-format text;
~~~
## Redis
/run n'est plus persistant. Il faut préciser dans l'unit de redis le RuntimeDirectory pour que la création de /var/run/redis soit effectuée au démarrage (et placer la socket et le pid dans /var/run/redis).
~~~
# cp -a /lib/systemd/system/redis-server.service /etc/systemd/system/
~~~
Editer /etc/systemd/system/redis-server.service et ajuster la section [Service] :
~~~
RuntimeDirectory=redis
RuntimeDirectoryMode=700
~~~
Puis :
~~~
# systemctl daemon-reload
~~~
## Apache
* Il faut autoriser /home/ ou /srv dans /etc/apache2/apache2.conf !
~~~
[Wed Nov 25 16:40:33.466946 2015] [authz_core:error] [pid 17204] [client XX.XX.XX.XX:48740] AH01630: client denied by server configura
tion: /home/XXX/www/YYY/ZZZ
~~~
~~~
<Directory /home/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
~~~
* Il faut s'assurer que les fichiers dans /etc/apache2/sites-* se terminent en .conf sinon les renommer (ou modifier la directive dans apache2.conf)
* Il faut supprimer la directive :
~~~
AH00526: Syntax error on line 89 of /etc/apache2/apache2.conf:
Invalid command 'LockFile', perhaps misspelled or defined by a module not included in the server configuration
~~~
* Il faut supprimer les directives :
~~~
AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf:8
~~~
* Il faut remplacer ...
~~~
AH00526: Syntax error on line 5 of /etc/apache2/conf/ssl-evolix.conf:
SSLSessionCache: 'shm' session cache not supported (known names: default,shmcb). Maybe you need to load the appropriate socache module (mod_socache_shm?).
~~~
par
~~~
SSLSessionCache shmcb:/var/log/apache2/ssl_gcache_data(512000)
~~~
* Les directives Options doivent avoir + ou -.
~~~
AH00526: Syntax error on line 27 of /etc/apache2/sites-enabled/app:
Either all Options must start with + or -, or no Option may.
~~~
* RewriteLog et RewriteLogLevel n'existent plus, à supprimer
~~~
AH00526: Syntax error on line 61 of /etc/apache2/sites-enabled/app:
Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
~~~
*Il ne faut plus utiliser les directives MaxClients mais MaxRequestWorkers ! *
### ModSec
* deprecated:
~~~
ModSecurity: WARNING Using transformations in SecDefaultAction is deprecated (/etc/apache2/conf.d/mod-security2.conf:19
~~~
Il faut mettre :
~~~
SecDefaultAction "log,auditlog,deny,status:406,phase:2"
~~~
* id
~~~
ModSecurity: Rules must have at least id action
~~~
Il faut rajouter des id aux rules.
~~~
# File name
SecRule REQUEST_FILENAME "modsecuritytest1" "id:1"
# Complete URI
SecRule REQUEST_URI "modsecuritytest2" "id:2"
SecRule REQUEST_FILENAME "(?:n(?:map|et|c)|w(?:guest|sh)|cmd(?:32)?|telnet|rcmd|ftp)\.exe" "id:3"
~~~
## Squid
Attention Squid3 semble non compatible avec le kernel 3.2 de Wheezy, il faut bien rebooter sur le nouveau kernel pour que Squid soit fonctionnel.
Pour installer le nouveau kernel, parfois nécessaire de préciser l'installation du kernel, en indiquant le package concerné : _linux-image-xx_
* APT UPDATE ne marche plus, et certains sites sont innaccessible (timeout):
-> vérifier que tcp_outgoing_address est présent dans la conf de _Squid_
-> mettre à jour `init.d/minifirewall`
-> restart minifirewall
### Mettre à jour minifirewall
Pour que squid fonctionne, il faut que la version de minifirewall soit récente. Auquel cas le message d'erreur suivant peut apparaître dans cache.log et squid ne démarre pas.
~~~
2016/06/30 00:37:26 kid1| sendto FD 11: (1) Operation not permitted
2016/06/30 00:37:26 kid1| ipcCreate: CHILD: hello write test failed
~~~
Il manque une règle ip6tables. Cela a été corrigé via [ce commit](https://forge.evolix.org/projects/minifirewall/repository/revisions/705c4683a2d7214c3f9664577955f1dd32cfdf54/diff/minifirewall).
*Il faut donc mettre à jour le script d'init minifirewall* !
## Elasticsearch
Le fichier /etc/default/elasticsearch doit contenir les informations de configuration (il ne les a pas forcément par défaut !!) :
~~~
LOG_DIR=/var/log/elasticsearch
DATA_DIR=/var/lib/elasticsearch
WORK_DIR=/tmp/elasticsearch
CONF_DIR=/etc/elasticsearch
CONF_FILE=/etc/elasticsearch/elasticsearch.yml
ES_HOME=/usr/share/elasticsearch
ulimit -n 65535
sysctl -q -w vm.max_map_count=262144
~~~
Sinon, vous aurez notamment des erreurs du type :
~~~
elasticsearch[6821]: Failed to configure logging...
elasticsearch[6821]: org.elasticsearch.ElasticsearchException: Failed to load logging configuration
~~~
Il faut apparemment forcer l'activation au démarrage :
~~~
# systemctl enable elasticsearch
~~~
## Spamassassin
SA peut gueuler, voir le package sa-compile qui n'arrive pas à s'installer.
Sans doute Razor plugin qui râle, donc vérifier le chargement de celui-ci :
~~~
grep -ri razor /etc/spamassassin/local_evolix.cf
~~~
-> commenter _razor_timeout_ (autre solution?)
## MySQL
Penser à ajouter la valeur par défaut à _secure-file-priv_ dans la config de MySQL (premier trouvé par ordre de préférence) :
* /etc/mysql/conf.d/evolinux.cnf
* /etc/mysql/conf.d/evolix.cnf
* /etc/mysql/my.cnf
* /etc/mysql/conf.d/000-evolinux-defaults.cnf
~~~
[mysqld]
secure-file-priv = ""
~~~
## Redmine
Lors de la migration, le package peut avoir été désinstallé. Regarder dans les logs dpkg:
~~~
grep redmine /var/log/dpkg.log
~~~
Réinstaller le package, et s'assurer du PassengerDefaultUser pour www-data dans le mod apache2:
~~~
$ vi /etc/apache2/mods-available/passenger.conf
PassengerDefaultUser www-data
~~~
Si besoin, changer _adapter_ de mysql vers mysql2 (avec package à installer si non présent) : `/etc/redmine/default/database.yml`
## Evoadmin et web-add
À cause de Apache 2.4 en Jessie, ils ne sont pas compatibles. Il faut installer la version de la branche Jessie.
Idéalement relancer le module evolinux jessie pour evoadmin (supprimer le vhost 'evoadmin' puis relancer evolinux en faisant grandement attention à ne valider que seulement l'installation de evoadmin-web).
## rbenv
Attention, une mise-à-jour majeure (tout comme une mise-à-jour majeure d'ailleurs) va casser les compilations (sauf coup de chance).

137
HowtoDebian/Packages.md Normal file
View File

@ -0,0 +1,137 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Debian packages
## Gestion des packages
Voir les évolutions de version proposées :
~~~
# aptitude upgrade -sV
~~~
### Packages held
~~~
aptitude search ~ahold
~~~
## Unattended upgrades / Auto upgrades
Sur un serveur non critique (backup, dev, …) on peut vouloir faire les mises à jour automatiquement.
Pour cela il faut installer le paquet unattended-upgrades et faire « dpkg-reconfigure -plow unattended-upgrades ».
La configuration se trouve dans /etc/apt/apt.conf.d/50unattended-upgrades.
On peut choisir où envoyer le mail de rapport ou encore si on doit redémarrer la machine automatiquement si nécessaire, etc.
## Créer un paquet Debian
* Debian Policy : <http://www.debian.org/doc/debian-policy/>
* Debian Dev refs : <http://debian.org/doc/developers-reference/>
* Debian New Maint guide : <http://debian.org/doc/maint-guide/>
* Howto sur le wiki Debian : <http://wiki.debian.org/HowToPackageForDebian>
* Howto de L. Nussbaum : <http://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.en.pdf>
### Génération de l'arborescence _debian/_
Cette étape consiste à créer une arborescence qui constituera le paquet Debian. On peut l'automatiser simplement avec la commande _dh_make_ :
~~~
cd futur-paquet-0.1
dh_make
~~~
_NOTE : le nom du répertoire doit obligatoirement être de la forme _nom_-_version_ (_nom_ peut contenir des minuscules, chiffres et tirets)._
En utilisant dh_make sans options, il essayera de deviner les informations dont il a besoin. On peut forcer celles ci en les spécifiant sur la ligne de commande. Pour les plus utiles :
* `-c` : la licence du programme ;
* `-e` : l'adresse email du responsable du paquet (vous) ;
* `-p` : nom du paquet, si le nom du répertoire courant n'est pas sous la forme standard ;
* `-f` : chemin vers l'archive contenant les sources. Si elle n'existe pas, utilisez l'option --createorig.
Le type de paquet vous sera demandé lors de l'exécution.
### Édition de certains fichiers importants
_dh_make_ a créé de nombreux fichiers dans le répertoire _debian/_. Certains sont indispensables, d'autres moins.
Par exemple (si vous ne vous en servez pas) vous pouvez supprimer tous les *.ex, des templates servant d'exemple.
~~~
rm *.ex
rm *.EX
~~~
Voici une rapide explication à propos des fichiers importants :
* le fichier _control_ : il décrit de manière générale le paquet. Plusieurs champs sont à compléter, notamment :
* _Section_ : voir la liste [ici](http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections) ;
* _Homepage_ : le site du programme ;
* _Architecture_ : _any_ par défaut, ce qui va générer un paquet par architecture. Dans le cas d'un script shell par exemple, on préférera _all_ (un seul paquet est généré car compatible avec toutes les architectures) ;
* _Depends_ : indiquez ici le nom et la version des paquets dont dépends éventuellement le programme (en général des bibliothèques) ;
* _Description_ : le champ doit contenir une description courte, suivi d'une description longue (sur la ligne suivante, indentée d'un espace).
* le fichier _changelog_ : il décrit les changements qui ont été fait sur le programme. À priori, il est déjà complété avec un « Initial release ». Supprimez juste le « (Closes: #nnnn) » puisque c'est la première version.
* le fichier _copyright_ : il contient la licence sous laquelle est distribué le programme. `dh_make` l'a partiellement remplit, il vous reste à indiquer le(s) développeur(s) du programme ainsi que le texte de la licence.
* le fichier _rules_ : c'est en fait un fichier Makefile, qui décrit les règles de construction et d'installation du paquet. Dans le cas d'un script unique, et qui ne nécessite pas de configuration/compilation :
C'est le célèbre _./debian/rules_ qui gère donc la compilation et la copie des fichiers dans la future arborescence.
Si l'on simplement copier un script, on peut par exemple rajouter ceci à la fin de la cible _install_ :
~~~
install -d -m 0755 -o root -g root $(CURDIR)/debian/futur-paquet
install -m 0755 -o root -g root nom-du-script $(CURDIR)/debian/futur-paquet
~~~
### Construction du paquet
Maintenant nous pouvons construire le paquet à l'aide de la commande :
~~~
$ debuild -us -uc
~~~
Si aucune erreur n'est apparue, votre paquet est prêt à être installé et/ou poussé sur un dépôt non officiel.
## Créer un paquet pour un module PHP Pear ou Pecl
La commande `dh-make-pecl` (ou `dh-make-pear`) permet de télécharger l'archive depuis les dépôts PHP puis de créer l'arborescence du paquet Debian en pré remplissant certains fichiers (notamment le _debian/rules_) :
~~~
dh-make-pecl --maintainer "John Doe <jdoe@example.com>" --only 5 pecl-package
~~~
## Manipulation d'un paquet (binaire)
Pour certaines (mauvaises) raisons, on peut être amené à vouloir modifier un paquet binaire... notamment un maintainer script par exemple.
~~~
$ ar x foo.deb
$ ls
control.tar.gz data.tar.gz debian-binary
$ tar xf control.tar.gz
$ vim preinst
<hack...hack...hack>
$ tar cvf control.tar.gz md5sums postrm control prerm preinst postinst
$ ar r foo.deb control.tar.gz
~~~
Et voilà, on a modifié le _preinst_ du paquet _foo.deb_.
## FAQ
### Erreur lintian : mkdir -p failed at /usr/share/perl5/Lintian/Unpacker.pm line 224
~~~
mkdir -p /tmp/temp-lintian-lab-6xngeaELBD/pool/d/devscripts/devscripts_2.13.8_amd64_binary failed at /usr/share/perl5/Lintian/Unpacker.pm line 224.
~~~
C'est probablement que votre système n'a pas assez de mémoire.
Avec un _strace lintian_ vous obtiendrez peut-être :
~~~
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f09117029d0) = -1 ENOMEM (Cannot allocate memory)
~~~

11
HowtoDebian/Passwd.md Normal file
View File

@ -0,0 +1,11 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Authentification sous Linux
## shadow
Note : attention, un mot de passe expiré signifie que les crons de l'utilisateur ne seront plus exécutés !
~~~
Nov 23 10:00:01 hostname CRON[25023]: pam_unix(cron:account): expired password for user jdoe (password aged)
~~~

189
HowtoDebian/Repository.md Normal file
View File

@ -0,0 +1,189 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# How to Repository
Il peut parfois être intéressant de disposer d'un dépôt Debian privé pour distribuer des packages qui ne sont pas prêts à être ajoutés à l'archive de Debian ou alors qui ne sont pas d'intérêt public.
Il existe plusieurs manières de monter un dépôt Debian. Ce tutoriel explique comment monter un dépôt simple à utiliser avec `reprepro`.
# Installer & configurer reprepro
Avant de commencer, il est nécessaire d'installer `reprepro`:
~~~
# sudo apt install reprepro
~~~
## Générer une clef GPG
Nous souhaitons que nos packages soient automatiquement signés lorsque l'on les ajoute à notre dépôt. Cela permet de vérifier qu'ils proviennent bel et bien de notre archive. Pour ce faire, il va être nécessaire de générer une clef GPG.
Le user avec lequel nous allons créer la clef sera celui avec lequel vous manipulerez votre dépôt. Avant de créer une clef GPG, vous devriez vous assurer de configurer GPG de manière sécuritaire. Si vous utilisez le `gpg.conf` par défaut, `apt-get` affichera des erreurs quand les gens tenteront de télécharger des packages de votre dépôt.
Un excellent guide écrit par Daniel Kahn Gillmor - maintainer GPG dans Debian - est ["disponible ici"](https://riseup.net/en/security/message-security/openpgp/best-practices). Si vous ne souhaitez pas lire le guide d'un bout à l'autre, il est possible de ["télécharger ce fichier"](https://raw.githubusercontent.com/ioerror/duraconf/master/configs/gnupg/gpg.conf) et le mettre dans `~/.gnupg/gpg.conf`. Il regroupe l'ensemble des pratiques recommandées par le guide.
Une fois que vous vous êtes assuré d'avoir une configuration adéquate, il vous faut générer votre clef. Si vous êtes connectés sur un serveur headless, il vous faut rouler les commandes suivantes pour avoir assez d'entropie:
~~~
# sudo apt install rng-tools
# sudo rngd -r /dev/urandom
~~~
On génère par la suite notre clef. Voici quelques éléments important:
* Il est important de ne pas ajouter de "Comment" quand GPG nous le demande
* Pour un dépôt, on choisi normalement une clef de type RSA en mode signature seulement
* On choisi une clef la plus longue possible, soit 4096
~~~
# gpg2 --gen-key
~~~
Une fois que vous avez créé votre clef, vous pouvez afficher son fingerprint (vous en aurez besoin pour continuer la configuration de `reprepro`) ainsi:
~~~
# gpg2 --list-secret-keys
> Key fingerprint = 677F 54F1 FA86 81AD 8EC0 BCE6 7AEA C4EC 6AAA 0A97
~~~
## Configurations
Nous allons placer notre dépôt Debian dans `/var/www/repos`. Si vous souhaitez le placer ailleurs, il suffit d'adapter les instruction suivantes en y remplaçant l'emplacement que vous avez choisi.
~~~
# sudo mkdir -p /var/www/repos/debian/conf
~~~
On crée par la suite `/var/www/repos/debian/conf/distributions`, le fichier qui servira a `reprepro` à identifier les différentes versions de Debian à distribuer. Le fichier devrait parler de lui-même. Pour chaque version de Debian, on ajoute un bloc supplémentaire à la fin du fichier. N'oubliez pas de:
* remplacer le fingerprint GPG par le vôtre
* spécifier les architectures que vous souhaitez supporter
~~~
Origin: Evolix public repository
Label: Evolix public repository
Codename: jessie
Architectures: i386 amd64 armhf
Components: main
Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97
Origin: Evolix public repository
Label: Evolix public repository
Codename: wheezy
Architectures: i386 amd64 armhf
Components: main
Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97
Origin: Evolix public repository
Label: Evolix public repository
Codename: squeeze
Architectures: i386 amd64 armhf
Components: main
Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97
Origin: Evolix public repository
Label: Evolix public repository
Codename: kernel
Architectures: i386 amd64 armhf
Components: main
Description: Evolix public repository
SignWith: 677F54F1FA8681AD8EC0BCE67AEAC4EC6AAA0A97
~~~
Finalement, on créé `/var/www/repos/debian/conf/options`, un fichier d'options pour se simplifier la vie:
~~~
verbose
basedir /var/www/repos/debian
ask-passphrase
~~~
Pour que les gens puissent profiter de votre dépôt signé, n'oubliez pas d'exporter votre clef GPG publique et de la rendre accessible:
~~~
# gpg2 --armor --output /var/www/repos/debian/ma_clef.gpg.asc --export <fingerprint>
~~~
Et voilà! `reprepro` est prêt à être utilisé!
## Apache
Pour que votre dépôt soit disponible en ligne, nous allons ajouter un VHost à un serveur `apache`. Attention! `apache` nécessite souvent une configuration plus étoffée que celle de l'installation par défaut pour être utilisé de manière sécuritaire! Plus d'informations sur `apache` [/wiki/HowtoLAMP/Apache ici].
Une fois qu'`apache` est installé, on crée un nouveau VHost dans `/etc/apache2/sites-available/repository.conf`:
~~~
<VirtualHost *:80>
ServerName mondepot.fqdn.org
ServerAdmin foo@bar.org
DocumentRoot /var/www/repos
ErrorLog ${APACHE_LOG_DIR}/error.log
<Directory /var/www/repos/ >
# We want the user to be able to browse the directory manually
Options Indexes FollowSymLinks Multiviews
Require all granted
</Directory>
<Directory "/var/www/repos/debian/db/">
Require all denied
</Directory>
<Directory "/var/www/repos/debian/conf/">
Require all denied
</Directory>
<Directory "/var/www/repos/debian/incoming/">
Require all denied
</Directory>
</VirtualHost>
~~~
Il ne suffit plus qu'à activer le VHost et relancer `apache`:
~~~
# sudo a2ensite /etc/apache2/sites-available/repository.conf
# sudo service apache2 reload
~~~
Bien évidemment, il vous sera nécessaire de rediriger le DNS du nom de domaine que vous avez choisi vers votre serveur `apache`.
# Ajouter des packages à son dépôt
Votre dépôt est maintenant en ligne, mais est toujours vide. Pour y ajouter des packages, lancez la commande suivante:
~~~
# reprepro -b /var/www/repos/debian includedeb jessie mon_super_package.deb
~~~
`reprepro` vous demande alors le mot de passe de votre clef GPG, signe votre package, crée les dossiers nécessaires et génère tous les fichiers pour vous.
Vous avez maintenant un dépôt Debian!
# Télécharger des packages à partir du dépôt
Pour télécharger des packages de votre archive, il est tout d'abord nécessaire d'installer la clef GPG qui a servi à signer les packages:
~~~
# apt-key adv --fetch-key <http://mondepot.fqdn.org/debian/ma_clef.gpg.asc>
~~~
Une fois que cela est fait, il ne vous reste plus qu'à ajouter votre dépôt dans `/etc/apt/sources.list`:
~~~
deb <http://mondepot.fqdn.org/debian/> jessie main
~~~
# Particularités importantes
Parce que `reprepro` se veut un utilitaire simple créer des dépôts Debian (comparé à `dak` ou encore `mini-dak`), certaines choses ne sont pas possible:
* Il n'est pas possible d'avoir plusieurs versions du même package dans une même distribution. La version plus ancienne est automatiquement remplacée par la plus récente. Il est cependant possible d'avoir des versions différentes pour chaque distribution.
* Un package ne peut pas avoir la même version dans plusieurs distributions tout en ayant un SHAsum différent. Dans ce cas, il est nécessaire de changer la version du package pour les distinguer (ex. `1.3.3-1+jessie` sur jessie et `1.3.3-1+wheezy` sur wheezy). Ceci n'est cependant pas un problème si le package est le même (même SHAsum) à travers plusieurs distributions.

187
HowtoDebian/Reseau.md Normal file
View File

@ -0,0 +1,187 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Reseau sous Debian
## Configuration IP fixe
La configuration d'une interface réseau avec une IP fixée se passe dans
le fichier _/etc/network/interfaces_. Voici un exemple simple :
~~~
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.0.43.10
netmask 255.255.255.0
gateway 192.0.43.254
~~~
Pour l'IPv6 il faut rajouter :
~~~
iface eth0 inet6 static
address 2001:500:88:200::10
netmask 48
up /bin/ip route add 2000::0/3 via 2001:500:88:200::254
~~~
Si besoin d'exécuter des commandes après l'activation de l'interface (classiquement
des ajouts de routes), on utilise l'option _up_. Par exemple :
~~~
auto eth0
iface eth0 inet static
address 192.0.43.10
netmask 255.255.255.0
gateway 192.0.43.254
up /sbin/route add -net 192.0.42.0/24 gw 192.0.43.242
~~~
Pour ajouter des interfaces virtuelles, toujours via _/etc/network/interfaces_ on fera :
~~~
auto eth0:0
iface eth0:0 inet static
address 192.0.43.11
netmask 255.255.255.0
~~~
Note 1 : certains hébergeurs comme OVH préconisent une configuration un peu différente, voir [wiki:ServeurOVH#IPFailOver]
Note 2 : dans certains cas particuliers (comme le besoin de préciser le nom de l'interface
dans une commande _iptables_) on souhaite avoir un nom d'interface virtuelle sans les ":".
Il faudra donc passer par la commande _ip_ (voir ci-dessous).
Mais tout cela se gère également dynamiquement via les commande _ifconfig_ et _ip_.
Quelques exemples :
~~~
# ifconfig eth0 add 192.0.43.11 netmask 255.255.255.0
# ip addr add 192.0.43.12/24 dev eth0
# ip addr add 192.0.43.13/24 dev label eth0:3
# ip addr del 192.0.43.12/24
~~~
Attention, avec la commande _ip_ le résultat ne sera pas visible avec _ifconfig_
si aucun label du type eth0:N n'est donné à l'interface ; on ne verra l'adresse qu'avec un :
~~~
# ip addr show
~~~
Notons que dans certains cas particuliers (comme le besoin de préciser le nom de l'interface
dans une commande _iptables_) on souhaite avoir un nom d'interface virtuelle sans les ":".
On utilisera donc simplement un label sans ":" :
~~~
# ip addr add 192.0.43.13/24 dev label eth00
# iptables -t nat -A POSTROUTING -o eth00 [...]
~~~
## Configuration serveur(s) DNS
Le fichier _/etc/hosts_ permet d'indiquer manuellement des enregistrements DNS, du type :
~~~
127.0.0.1 ad.doubleclick.net
~~~
Pour note, ces enregistrements sont par défaut prioritaires sur les réponses des serveurs DNS
(et pour rappel, les commandes dig et host n'utilisent PAS _/etc/hosts_).
La configuration du (ou des) serveur(s) DNS s'effectue dans le fichier _/etc/resolv.conf_.
Voici un exemple classique :
~~~
search example.com
nameserver 192.0.42.53
nameserver 192.0.43.53
options timeout:2 attempts:2
~~~
Pour des précisions sur les options possibles : _man resolv.conf_
Note : si l'on utilise Postfix, il faut le redémarrer suite à un changement dans _/etc/resolv.conf_ (car il est chrooté par dédaut et il gère sa propre copie dans /var/spool/postfix)
## Bridge
Pour créer un bridge :
~~~
# brctl addbr br0
# brctl addif br0 eth0
# ifconfig eth0 up
~~~
Au niveau /etc/network/interfaces on aura ainsi :
~~~
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet manual
bridge_ports eth0
~~~
Et l'on listera les infos d'un bridge via :
~~~
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.001e0beac6c0 no eth0
~~~
## VLAN
~~~
# aptitude install vlan
# modprobe 8021q
~~~
Pour ajouter dans le VLAN 42
~~~
# vconfig add eth0 42
# ifconfig eth0.42
~~~
Le fichier /etc/network/interfaces :
~~~
# cat /etc/network/interfaces
auto eth0.42
iface eth0.42 inet static
address 192.0.43.10
netmask 255.255.255.0
gateway 192.0.43.254
~~~
### Gestion des VLAN avec iproute
L'utilitaire ip (paquet iproute) permet aussi de gérer les VLAN.
Exemple :
~~~
# ip link add link eth0 name eth0.42 type vlan id 42
# ip addr add 192.168.1.1/24 dev eth0.42
# ip link set dev eth0.42 up
~~~
## Désactiver IPv6
De façon temporaire :
~~~
# sysctl -w net.ipv6.conf.all.disable_ipv6=1
~~~
De façon définitive :
~~~
# echo net.ipv6.conf.all.disable_ipv6=1 >> /etc/sysctl.conf
~~~

21
HowtoDebian/Squeeze.md Normal file
View File

@ -0,0 +1,21 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
sources.list :
~~~
deb <http://archive.debian.org/debian/> squeeze main
deb <http://archive.debian.org/debian-security/> squeeze/updates main
deb <http://archive.debian.org/debian/> squeeze-lts main
deb <http://pub.evolix.net/> kernel/
deb <http://pub.evolix.net/> squeeze/
#deb <http://archive.debian.org/debian-backports> squeeze-backports main
#deb <http://hwraid.le-vert.net/debian> squeeze main
~~~
+
~~~
# echo "Acquire::Check-Valid-Until 0;" >> /etc/apt/apt.conf.d/80_oldarchives
~~~

98
HowtoDebian/liveCD.md Normal file
View File

@ -0,0 +1,98 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
Ce Howto permet de créer un liveCD personalisé de Debian. Cela peut être utile dans le cas où vous devez utiliser une version plus récente d'un paquet lors de l'installation (à cause de périphérique non détectés par exemple).
### Préparation
Nous allons utiliser l'outil Debian Live Helper pour construire le live CD :
~~~
aptitude install live-helper
~~~
On créé le répertoire dans lequel on va travailler :
~~~
mkdir ~/livecd
~~~
### Personalisation du live CD
La commande `lh_config` permet de créer le répertoire _config/_ qui contient toute la configuration du live CD :
## Options utiles
* `--apt aptitude` : permet d'utiliser aptitude à la place d'apt lors de l'installation ;
* `-a amd64` : permet de définir l'architecture du live CD (par défaut celle de la machine sur laquelle il est créé ;
* `--debian-installer netinst` : permet d'inclure l'installateur netinstall dans le live CD ;
* `--packages "paquets1 paquets2..."` : liste des paquets à installer;
* `--linux-packages ""` :
~~~
lh_config
~~~
## Ajout de dépôts personnalisés
Il est possible d'ajouter des dépôts à utiliser dans le répertoire _config/chroot_sources/_ :
~~~
echo 'deb <http://www.backports.org/debian/> lenny-backports main contrib non-free' > config/chroot_sources/lenny-backports.chroot
~~~
Le _.chroot_ indique que le dépôt sera utilisé uniquement lors de la création du live CD. Pour que le dépôt soit utilisé également lors de l'exécution du live CD (inscrit dans le sources.list du live CD), utilisez l'extension _.binary_.
## Ajout de paquets personnalisés
Si les paquets à intégrer au live CD ne sont pas présents dans un dépôt, il suffit de les déposer dans le répertoire _config/chroot_local-packages/_
## Définition de la langue et du clavier
~~~
lh_config --bootappend-live "locale=en_US.UTF-8 keyb=fr"
~~~
## Installation d'un noyau linux depuis testing
*NOTE :* Il n'est apparemment pas possible d'utiliser le noyau présent dans lenny-backports à cause d'une incompatibilité avec squashfs-tools. On utilise donc le noyau en testing.
~~~
lh_config -d lenny --linux-packages 'linux-image-2.6 aufs-modules-2.6' --bootloader grub --debian-installer netinst
~~~
~~~
wget '<http://ftp.fr.debian.org/debian/pool/main/l/linux-2.6/linux-image-2.6.32-3-amd64_2.6.32-9_amd64.deb'> -P config/chroot_local-packages/
wget '<http://ftp.fr.debian.org/debian/pool/main/s/squashfs-tools/squashfs-tools_4.0-8_amd64.deb'> -P config/chroot_local-packages/
~~~
*FIXME :*
* trouver comment faire de l'apt-pinning avec live helper : si on ajoute le dépôt testing dans _config/chroot_sources/_, tous les paquets sont pris dans ce dépôt ;
* actuellement, le kernel utilisé par défaut reste celui de lenny, et il faut utiliser grub comme bootloader pour pouvoir choisir manuellement le kernel lenny-backports => trouver l'option / la manip qui permette de définir le kernel par défaut.
### Création du live CD
Il suffit simplement d'exécuter `lh_build` :
~~~
lh_build
~~~
*NOTE :* ne pas oublier de faire un `lh_clean` avant de réexécuter `lh_build`, sous peine d'avoir des erreurs du type :
~~~
mv: ne peut évaluer `chroot/xxx.orig': Aucun fichier ou dossier de ce type
~~~
Une image iso du live CD est créée dans binary.iso.
### Test du live CD
Test du live CD en utilisant qemu :
~~~
qemu -cdrom ~/livecd/binary.iso
~~~
### Gravure
Une fois l'image prête, pour la graver :
~~~
wodim -dev /dev/cdrom binary.iso
~~~
### Documentation
[<http://live.debian.net/manual/html/>]

87
HowtoDiscourse.md Normal file
View File

@ -0,0 +1,87 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# HowToDiscourse
La methode d'installation officielle de Discourse se fait avec docker. Voici les etapes à suivre pour l'installer :
~~~
# ln -s /usr/bin/aptitude /usr/bin/apt-get
~~~
~~~
# wget -qO- <https://get.docker.io/> | sh
~~~
~~~
# mkdir /var/discourse
~~~
~~~
# git clone <https://github.com/discourse/discourse_docker.git> /var/discourse
~~~
~~~
# cd /var/discourse
~~~
~~~
# cp samples/standalone.yml containers/app.yml
~~~
~~~
# vim containers/app.yml
~~~
Partie importante à modifier
~~~
...
env:
LANG: en_US.UTF-8
## TODO: How many concurrent web requests are supported?
## With 2GB we recommend 3-4 workers, with 1GB only 2
UNICORN_WORKERS: 3
##
## TODO: List of comma delimited emails that will be made admin and developer
## on initial signup example 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'exemple@evolix.net'
##
## TODO: The domain name this Discourse instance will respond to
DISCOURSE_HOSTNAME: 'exemple.evolix.net'
##
## TODO: The mailserver this Discourse instance will use
DISCOURSE_SMTP_ADDRESS: 31.XXX.XX.XX # (mandatory)
DISCOURSE_SMTP_PORT: 25 # (optional)
#DISCOURSE_SMTP_USER_NAME: user@example.com # (optional)
#DISCOURSE_SMTP_PASSWORD: pa$$word # (optional)
DISCOURSE_SMTP_ENABLE_START_TLS: false
##
## The CDN address for this Discourse instance (configured to pull)
#DISCOURSE_CDN_URL: //discourse-cdn.example.com
...
~~~
Il est important d'indiquer l'IP publique de la machine pour l'envoi de mails, et de rajouter dans la conf postfix le prefix 172.16.0.0/12 dans la directive mynetworks.
On peut ensuite faire tourner Discourse avec un utilisateur simple
~~~
# chown -R foo:foo /var/discourse/
~~~
~~~
# usermod -aG docker foo
~~~
~~~
$ ./launcher bootstrap app
~~~
~~~
$ ./launcher start app
~~~
Modifier la conf postfix en ajoutant 172.16.0.0/12 à la variable mynetworks afin que le conteneur de discourse puisse envoyer des mails
Maintenance :
Lors de certaines MAJ via discourse il peut être necessaire une fois la MAJ terminée de reconstruire le conteneur (au cours de cette opération le conteneur sera stoppé et relancé)
~~~
$ ./launcher rebuild app
~~~
En cas d'erreur sur l'application il est possible de rentrer dans le conteneur pour debug
~~~
$ ./launcher ssh app
~~~

341
HowtoDjango.md Normal file
View File

@ -0,0 +1,341 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Django
## Installation
Pré-requis : on installe Apache-ITK, par exemple en suivant la superbe documentation [wiki:HowtoLAMP/Apache]
~~~
# apt install python libapache2-mod-wsgi python-virtualenv python-dev build-essential
~~~
On crée un compte (voir [wiki:HowtoLAMP/Apache]) et on configure le Virtualhost associé,
en ajustant les instructions ainsi :
~~~
AssignUserID www-jdoe jdoe
WSGIScriptAlias / /home/jdoe/public/mysite/django.wsgi
#Alias /media/ /usr/share/python-support/python-django/django/contrib/admin/media/
~~~
L'idée est d'installer un certain nombre de modules Python de façon globale, et de permettre
à chaque compte d'en ajouter ou d'en avoir de plus récents avec l'outil _virtualenv_
~~~
# apt install python-django python-mysqldb python-imaging python-html5lib libxml2-dev libxslt1-dev virtualenv python-pip
~~~
On se connecte ensuite avec le compte concerné, puis on peut installer des modules Python supplémentaires ainsi :
~~~
$ virtualenv lib
New python executable in lib/bin/python
Installing setuptools............done.
$ source lib/bin/activate
(lib)$ easy_install pisa relatorio django-extensions
Searching for pisa
Reading <http://pypi.python.org/simple/pisa/>
Reading <http://www.xhtml2pdf.com>
Reading <http://www.htmltopdf.org/>
Reading <http://www.htmltopdf.org/download.html>
Reading <http://pisa.spirito.de/>
Reading <http://pisa.spirito.de/download.html>
Best match: pisa 3.0.33
Downloading <http://pypi.python.org/packages/source/p/pisa/pisa-3.0.33.zip#md5=2a6e9ddba828caf9d97d4d1c0bb889e1>
Processing pisa-3.0.33.zip
Running pisa-3.0.33/setup.py -q bdist_egg --dist-dir /tmp/easy_install-kIDfVZ/pisa-3.0.33/egg-dist-tmp-lUVUuk
zip_safe flag not set; analyzing archive contents...
ho.__init__: module references __path__
ho.__init__: module references __path__
sx.__init__: module references __path__
sx.__init__: module references __path__
Adding pisa 3.0.33 to easy-install.pth file
Installing pisa script to /home/jdoe/lib/bin
Installing xhtml2pdf script to /home/jdoe/lib/bin
Installed /home/jdoe/lib/lib/python2.5/site-packages/pisa-3.0.33-py2.5.egg
Processing dependencies for pisa
Finished processing dependencies for pisa
Searching for relatorio
Reading <http://pypi.python.org/simple/relatorio/>
Reading <http://relatorio.openhex.org/>
Reading <http://relatorio.openhex.org>
Best match: relatorio 0.5.5
Downloading <http://pypi.python.org/packages/source/r/relatorio/relatorio-0.5.5.tar.gz#md5=06e841b7c1fce99461534e5cb8300b8f>
Processing relatorio-0.5.5.tar.gz
Running relatorio-0.5.5/setup.py -q bdist_egg --dist-dir /tmp/easy_install-W_rscM/relatorio-0.5.5/egg-dist-tmp-Hb4E3c
zip_safe flag not set; analyzing archive contents...
relatorio.reporting: module references __file__
Adding relatorio 0.5.5 to easy-install.pth file
Installed /home/jdoe/lib/lib/python2.5/site-packages/relatorio-0.5.5-py2.5.egg
Processing dependencies for relatorio
Searching for Genshi>=0.5
Reading <http://pypi.python.org/simple/Genshi/>
Reading <http://genshi.edgewall.org/>
Reading <http://genshi.edgewall.org/wiki/Download>
Best match: Genshi 0.6
Downloading <http://ftp.edgewall.com/pub/genshi/Genshi-0.6-py2.5.egg>
Processing Genshi-0.6-py2.5.egg
Moving Genshi-0.6-py2.5.egg to /home/jdoe/lib/lib/python2.5/site-packages
Adding Genshi 0.6 to easy-install.pth file
Installed /home/jdoe/lib/lib/python2.5/site-packages/Genshi-0.6-py2.5.egg
Finished processing dependencies for relatorio
Searching for django-extensions
Reading <http://pypi.python.org/simple/django-extensions/>
Reading <http://code.google.com/p/django-command-extensions/>
Reading <http://github.com/django-extensions/django-extensions>
Best match: django-extensions 0.6
Downloading <http://pypi.python.org/packages/source/d/django-extensions/django-extensions-0.6.tar.gz#md5=b90b1a412bb7a1f0a18ef1c05663f1d7>
Processing django-extensions-0.6.tar.gz
Running django-extensions-0.6/setup.py -q bdist_egg --dist-dir /tmp/easy_install-j_GIdw/django-extensions-0.6/egg-dist-tmp-5xofTf
zip_safe flag not set; analyzing archive contents...
django_extensions.management.utils: module references __file__
django_extensions.management.commands.syncdata: module references __file__
django_extensions.management.commands.show_templatetags: module MAY be using inspect.getabsfile
django_extensions.management.commands.create_app: module references __path__
django_extensions.management.commands.runprofileserver: module references __path__
django_extensions.management.commands.create_jobs: module references __file__
django_extensions.management.commands.create_jobs: module references __path__
django_extensions.management.commands.runserver_plus: module references __path__
django_extensions.management.commands.create_command: module references __path__
Adding django-extensions 0.6 to easy-install.pth file
Installed /home/jdoe/lib/lib/python2.5/site-packages/django_extensions-0.6-py2.5.egg
Processing dependencies for django-extensions
Finished processing dependencies for django-extensions
~~~
On notera l'ajout de _(lib)_ au PS1 pour signaler que l'on utilise virtualenv.
Si l'on veut en sortir :
~~~
(lib)$ deactivate
$
~~~
## Focus sur Virtualenv
_virtualenv_ permet de se créer un environnement en tant qu'utilisateur
avec ses propres versions de bibliothèques, etc.
Une bonne idée est d'utiliser les bibliothèques du système, et d'en installer
dans _virtualenv_ que si besoin. C'était le comportement par défaut, mais dans
les versions récentes, cela a changé :-( Dans les versions récentes, il faut
donc utiliser l'option _--system-site-packages_ !!
Fichier de configuration : _~/.virtualenv/virtualenv.ini_
~~~
[virtualenv]
system-site-packages = true
~~~
## Focus sur WSGI / modwsgi
<http://www.wsgi.org/>
<http://code.google.com/p/modwsgi/>
Pour valider le bon fonctionnement de _modwsgi_, on peut créer un script hello.wsgi suivant :
~~~
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
~~~
Et l'on ajoute l'instruction suivante dans le VirtualHost :
~~~
WSGIScriptAlias /hello /var/www/hello.wsgi
~~~
Voir <http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide>
Configuration avancée de modwsgi :
<http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives>
## Développement Django
On peut maintenant faire du Django :
~~~
$ cd
$ mkdir public
$ cd public
$ django-admin --version
1.1.1
$ django-admin startproject mysite
$ cd mysite
$ vim django.wsgi
$ vim settings.py
$ vim urls.py
~~~
Voici un exemple de fichier _django.wsgi_ qui n'utilise pas Virtualenv :
~~~
import os
import sys
import site
sys.path.append('/home/jdoe/django/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
~~~
Pour utiliser Virtualenv, on ajoutera la ligne suivante (après _import site_) :
~~~
site.addsitedir('/home/jdoe/lib/lib/python2.6/site-packages')
~~~
Vous devez aussi compléter les paramètres de bases de données dans _settings.py_ :
~~~
DATABASE_ENGINE = 'mysql'
DATABASE_NAME...
~~~
Et initialiser les tables :
~~~
$ cd ~/public/mysite
$ python manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'jdoe'):
E-mail address: jdoe@example.com
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model
~~~
À vous de poursuivre... car cela devient du développement !
## Installation des applications admin et admin/doc
On active dans le fichier _urls.py_ :
~~~
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^admin/doc/', include('django.contrib.admindocs.urls')),
(r'^admin/', include(admin.site.urls)),
)
~~~
Et dans _settings.py_ on ajoute :
~~~
INSTALLED_APPS = (
[...]
'django.contrib.admin',
'django.contrib.admindocs',
)
~~~
Et on met à jour la base de données :
~~~
$ cd ~/public/mysite
$ python manage.py syncdb
Creating table django_admin_log
Installing index for admin.LogEntry model
~~~
Et voilà, vous devriez pouvoir accéder
aux apps admin et admin/doc via les URL
<http://jdoe.example.com/admin/> et <http://jdoe.example.com/admin/doc/>
## Mise-à-jour de Django
Le backport de Django sous Debian Lenny est en version 1.1.1 Pour diverses raisons, vous pouvez vouloir avoir une version plus récente de Django.
Dans ce cas, il faut le gérer au niveau du compte avec _virtualenv_ :
~~~
$ cd ~/lib
$ source bin/activate
(lib)$ easy_install Django
Searching for Django
Reading <http://pypi.python.org/simple/Django/>
Reading <http://www.djangoproject.com/>
Best match: Django 1.2.4
Downloading <http://media.djangoproject.com/releases/1.2/Django-1.2.4.tar.gz>
Processing Django-1.2.4.tar.gz
Running Django-1.2.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-c7zimn/Django-1.2.4/egg-dist-tmp-W72Kh6
zip_safe flag not set; analyzing archive contents...
django.test._doctest: module references __file__
django.test._doctest: module MAY be using inspect.getsourcefile
django.test.simple: module references __file__
django.db.utils: module references __file__
django.db.models.loading: module references __file__
django.core.management.__init__: module references __file__
django.core.management.__init__: module references __path__
django.core.management.base: module references __path__
django.core.management.sql: module references __file__
django.core.management.commands.makemessages: module references __file__
django.core.management.commands.loaddata: module references __file__
django.core.management.commands.loaddata: module references __path__
django.core.servers.base<http:> module references __path__
django.contrib.flatpages.tests.views: module references __file__
django.contrib.flatpages.tests.middleware: module references __file__
django.contrib.flatpages.tests.csrf: module references __file__
django.contrib.admindocs.views: module references __file__
django.contrib.gis.tests.geogapp.tests: module references __file__
django.contrib.gis.tests.layermap.tests: module references __file__
django.contrib.gis.tests.geo3d.tests: module references __file__
django.contrib.gis.geometry.test_data: module references __file__
django.contrib.auth.tests.views: module references __file__
django.views.i18n: module references __file__
django.conf.__init__: module references __file__
django.conf.project_template.manage: module references __file__
django.utils.autoreload: module references __file__
django.utils.module_loading: module references __path__
django.utils.version: module references __path__
django.utils.translation.trans_real: module references __file__
django.template.loaders.app_directories: module references __file__
Adding Django 1.2.4 to easy-install.pth file
Installing django-admin.py script to /home/jdoe/lib/bin
Installed /home/jdoe/lib/lib/python2.5/site-packages/Django-1.2.4-py2.5.egg
Processing dependencies for Django
Finished processing dependencies for Django
~~~
Notez que dans ce cas là, vous devrez gérer vous même les futurs problèmes de sécurité !
Si vous pouvez vous le permettre, vous pourrez mettre ainsi mettre à jour Django via :
~~~
$ cd ~/lib
$ source bin/activate
(lib)$ easy_install -U Django
~~~

338
HowtoDovecot.md Normal file
View File

@ -0,0 +1,338 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Dovecot
## Installation
Dovecot est un puissant serveur POP et IMAP.
Pour l'installer sous Debian :
~~~
# aptitude install dovecot-pop3d dovecot-imapd
~~~
## Configuration
La configuration de Dovecot se trouve dans le répertoire _/etc/dovecot_
et notamment le fichier _dovecot.conf_.
Pour activer les protocoles POP(S) et IMAP(S) :
~~~
protocols = imap imaps pop3 pop3s
~~~
Pour autoriser l'authentification en clair même sans SSL/TLS (attention,
les identifiants circuleront donc en clair !!) :
~~~
disable_plaintext_auth = no
~~~
### Support du + dans les adresses
Il faut patcher le master.cf de postfix ainsi :
~~~
- flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
+ flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -a ${recipient} -d ${user}@${nexthop}
~~~
### Crée des boîtes IMAP automatiquement
Voir <http://wiki2.dovecot.org/MailboxSettings>
~~~
namespace inbox {
location =
mailbox Drafts {
auto = no
special_use = \\Drafts
}
mailbox Sent {
auto = subscribe
special_use = \\Sent
}
mailbox Spam {
auto = subscribe
special_use = \\Junk
}
mailbox Trash {
auto = no
special_use = \\Trash
}
prefix =
}
~~~
### SSL/TLS
~~~
ssl_cert = </etc/ssl/certs/mail.example.com.cert
ssl_key = </etc/ssl/private/mail.example.com.key
ssl_ca = </etc/ssl/certs/sub.class1.server.ca.pem
~~~
## Utiliser Dovecot/LDA pour utiliser le langage Sieve
Dovecot/LDA (ou deliver) est un agent de livraison fourni avec Dovecot, que Postfix peut utiliser pour délivrer les mails dans les maildir des utilisateurs d'un serveur mail. Celui-ci prend notamment en charge le langage "sieve", qui offre des fonctionnalités du même type que le programme "procmail".
~~~
# aptitude install dovecot-common
~~~
/etc/postfix/master.cf :
~~~
dovecot unix - n n - - pipe flags=DORqhu user=dovelda
argv=sudo /usr/lib/dovecot/deliver -n -f ${sender} -d ${recipient}
~~~
/etc/postfix/main.cf :
~~~
virtual_transport dovecot
dovecot_destination_recipient_limit = 1
~~~
Dans la configuration de sudo :
~~~
Defaults:dovelda !syslog
dovelda ALL=NOPASSWD:/usr/lib/dovecot/deliver
~~~
/etc/dovecot/dovecot.conf :
~~~
protocols = none
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_privileged_group = mail
mail_location = maildir:~
protocol imap {
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
protocol managesieve {
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = sieve
postmaster_address = postmaster@example.com
}
auth default {
mechanisms = plain
userdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
passdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
user = root
socket listen {
# for LDA
master {
path = /var/run/dovecot/auth-master
mode = 666
user = dovecot
}
}
}
dict {
}
plugin {
}
~~~
/etc/dovecot/dovecot-ldap.conf :
~~~
hosts = 127.0.0.1
base = dc=example,dc=com
ldap_version = 3
user_filter = (&(objectClass=mailAccount)(isActive=TRUE)(courierActive=TRUE)(uid=%u))
pass_attrs = uid=user,userPassword=password,homeDirectory=userdb_home,uidNumber=userdb_uid,gidNumber=userdb_gid
#dn = cn=courier,ou=ldapuser,dc=example,dc=com
#dnpass = xxx
#user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid
~~~
On peut alors créer des fichiers .dovecot.sieve de ce type dans le $HOME d'un utilisateur, qui seront traités par dovecot/LDA :
~~~
require ["fileinto", "copy", "vacation", "variables"];
# Exemple d'une règle de filtrage
if header :contains ["Subject"] ["testsieve"] {
fileinto "Test";
}
# Exemple de message "vacation"
if header :matches "subject" "*" {
vacation :days 3 :subject "Re: ${1}" "Bonjour,
Je suis indispo jusqu'au DD/MM/YYYY.
";
}
~~~
### Langage Sieve
On peut donc écrire des règles Sieve dans le fichier *.dovecot.sieve*
Voici quelques liens pour écrire les règles : <http://support.tigertech.net/sieve> <http://sieve.info/tutorials>
On peut aussi utiliser des outils pour générer les règles comme Roundcube, Horde/Ingo, etc. voir <http://sieve.info/clients>
### Déduplication des mails entrants
Pour réaliser un équivalent de la règle procmail suivante :
~~~
:0 Wh: msgid.lock
| formail -D 8192 $HOME/.msgid.lock
~~~
Testé avec Dovecot > 2.1
Ajouter le plugin sieve duplicate dans /etc/dovecot/conf.d/90-sieve.conf :
~~~
sieve_extensions = +vnd.dovecot.duplicate
~~~
Puis dans les règles sieve :
~~~
require ["fileinto","vnd.dovecot.duplicate"];
if duplicate {
fileinto "Trash";
}
# Si on est sûr de vouloir les supprimer
#if duplicate {
# discard;
#}
~~~
Note : la ligne require doit être unique et en début de fichier, si des modules sont déjà chargés il suffit d'ajouter "vnd.dovecot.duplicate".
## Mode debug
### Activer le raw logging
<http://wiki.dovecot.org/Debugging/Rawlog>
Par exemple en IMAP, il faut activer cela dans le _dovecot.conf_ :
~~~
protocol imap {
mail_executable = /usr/lib/dovecot/rawlog /usr/lib/dovecot/imap
}
~~~
Ensuite, il suffit de créer un répertoire _dovecot.rawlog_ dans le $HOME
de l'utilisateur (accessible en écriture évidemment), et toutes les commandes
IMAP passées seront stockées dans des fichiers : <annee><mois><jour>-.*.{in,out}
### Debug pour l'authentification
Activer :
~~~
# queries.
auth_debug = yes
#auth_debug_passwords = yes
~~~
## Nombre max de processus de login
À chaque login, dovecot fork un processus. Afin d'éviter les fork-bomb s'il y a trop de connexions il y a une limite par défaut à 128. L'augmenter peut résoudre des problèmes si le serveur reçoit de nombreuses connexions.
~~~
login_max_processes_count = 256
~~~
Il faut en parallèle augmenter la limite sur le nombre de fichiers ouverts, dans _/etc/default/dovecot_ :
~~~
ulimit -n 5696
~~~
## Nombre max de connexion par IP+Login
Dovecot limite également le nombre de connexion IMAP d'une même IP avec un même compte.
Cette limite est de 10 par défaut, il est possible de l'augmenter en ajoutant dans la section IMAP :
~~~
mail_max_userip_connections = 42
~~~
Si la limite n'est pas assez haute, on aura cette erreur :
~~~
dovecot: imap-login: Maximum number of connections from user+IP exceeded (mail_max_userip_connections)
~~~
## Mountpoints
<http://wiki2.dovecot.org/Mountpoints>
## Erreurs de LOCK
Si vous avez des chargements très longs à l'authentification ou des erreurs de type :
~~~
-ERR [IN-USE] Couldn't open INBOX: Timeout while waiting for lock
~~~
c'est peut-être que les locks sont activés pour le protocole POP3. Ainsi, dès qu'une connexion POP3 est en cours,
elle bloques les autres connexions POP3... et même IMAP. Pour résoudre cela, s'assurer d'avoir activé :
~~~
pop3_lock_session=no
~~~
## Munin
Plusieurs plugins Munin sont disponibles sur <https://github.com/munin-monitoring/contrib/search?q=dovecot>
Nous utilisons principalement <https://raw.githubusercontent.com/munin-monitoring/contrib/master/plugins/mail/dovecot>
à télécharger dans /etc/munin/plugins/ avec les droits 755 que l'on fait tourner avec le groupe adm via
/etc/munin/plugin-conf.d/munin-node :
~~~
[dovecot]
group adm
~~~
## doveadm
La commande _doveadm_ permet d'avoir différentes interactions avec le serveur Dovecot. Par exemple :
~~~
# doveadm who
username # proto (pids) (ips)
jdoe@example.com 1 imap (4242) ()
# doveadm kick foo 192.0.2.0/24
kicked connections from the following users:
foo
~~~
## FAQ
### Erreur "Out of memory"
Si vous avez des erreurs du type :
~~~
dovecot: imap(foo): Fatal: block_alloc(16777216): Out of memory
dovecot: imap(foo): Fatal: master: service(imap): child 666 returned error 83 (Out of memory (service imap { vsz_limit=256 MB }, you may need to increase it))
~~~
Vous pouvez augmenter la mémoire _vsz_limit = 512M_ dans le service imap.

5
HowtoEXT3.md Normal file
View File

@ -0,0 +1,5 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto EXT3
=> obsolète : voir [wiki:HowtoFileSystem]

10
HowtoEchoping.md Normal file
View File

@ -0,0 +1,10 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto echoping
Exemples :
~~~
$ echoping -h / -n 5 -t 10 -R www.evolix.fr
$ echoping -t 5 -4 -m dns -n 20 ns4.evolix.net -t A gzip.be
~~~

139
HowtoEjabberd.md Normal file
View File

@ -0,0 +1,139 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Ejabberd
Ejabberd est un serveur Jabber écrit en Erlang.
<https://www.ejabberd.im/>
## Installation
Ejabberd est packagé dans Debian :
~~~
# apt install ejabberd
~~~
Lors de l'installation, indiquer :
* hostname : le domaine principal (fqdn) que le serveur devra gérer ;
* compte admin : un compte Jabber (sans la partie @domaine) qui sera admin du serveur (permet l'accès à l'interface web + accès à diverses commandes admin depuis un client Jabber.
## DNS
Enregistrements à rajouter dans la zone DNS :
~~~
_xmpp-client._tcp IN SRV 0 0 5222 im
_xmpp-server._tcp IN SRV 0 0 5269 im
im IN A 192.0.2.42
~~~
Note : __xmpp-server_ est facultatif, mais recommandé pour communiquer avec d'autres serveurs XMPP.
## Configuration
La configuration se fait désormais via le fichier _/etc/ejabberd/ejabberd.yml_.
Pour configurer plusieurs hosts :
~~~
hosts:
- "im.example.com"
- "example.com"
~~~
### Authentification (à mettre à jour)
Ejabberd supporte plusieurs backends externes pour l'authentification (MySQL, LDAP, PAM, script externe…).
Pour utiliser un annuaire LDAP :
* commenter `{auth_method, internal}.` pour ne faire _que_ de l'authentification sur LDAP. Pour utiliser plusieurs méthodes d'authentification, il est possible de passer une liste comme ceci :
~~~
{auth_method, [ldap, internal]}.
~~~
* Décommenter/modifier les directives suivantes :
~~~
%%
%% Authentication using LDAP
%%
{auth_method, ldap}.
%% List of LDAP servers:
{ldap_servers, ["localhost"]}.
%% Encryption of connection to LDAP servers (LDAPS):
{ldap_encrypt, none}.
%%{ldap_encrypt, tls}.
%% Port connect to LDAP server:
{ldap_port, 389}.
%%{ldap_port, 636}.
%% LDAP manager:
%%{ldap_rootdn, "dc=example,dc=com"}.
%% Password to LDAP manager:
%%{ldap_password, "******"}.
%% Search base of LDAP directory:
{ldap_base, "dc=example,dc=com"}.
%% LDAP attribute that holds user ID:
{ldap_uids, [{"uid", "%u"}]}.
%% LDAP filter:
{ldap_filter, "(objectClass=shadowAccount)"}.
~~~
### Optimisation
Par défaut, le support du multi-cœur n'est pas forcément désactivé. Pour l'activer si le processeur le supporte, éditer le fichier _/etc/default/ejabberd_ :
~~~
SMP=auto
~~~
## Administration
~~~
# ejabberdctl status
The node ejabberd@node is started with status: started
ejabberd 14.07 is running in that node
# ejabberdctl register jdoe im.example.com <password>
# ejabberdctl connected_users
jdoe@im.example.com/4767678256447397329306554
# ejabberdctl registered_users im.example.com
jdoe
# ejabberdctl kick jdoe im.example.com
# ejabberdctl unregister jdoe im.example.com
~~~
## Sauvegarde / migration
~~~
# ejabberdctl dump /tmp/ejabber.dump && mv /tmp/ejabber.dump /home/backup/
~~~
La restauration se fait avec `ejabberdctl load`
Note : on peut s'en servir pour migrer des données, en reformatant le fichier de dump qui n'est complexe à comprendre.
Par exemple pour migrer le répertoire des utilisateurs (roster) :
~~~
{tables,[{roster,[{record_name,roster},
{attributes,[usj,us,jid,name,subscription,ask,groups,
askmessage,xs]}]}]}.
{roster,{"jdoe","im.example.com",
{"bob","gmail.com",[]}},
{"jdoe","im.example.com"},
{"bob","gmail.com",[]},
[],both,none,[],<<>>,[]}.
[...]
~~~

141
HowtoEtherpad.md Normal file
View File

@ -0,0 +1,141 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# HowtoEtherpad
Etherpad est un éditeur texte collaboratif en ligne.
On utilise désormais la version Etherpad-Lite.
* <http://etherpad.org/>
* <https://github.com/ether/etherpad-lite/>
* Statut du package Debian officiel : <http://bugs.debian.org/576998>
## Installation
Debian Jessie :
~~~
# apt install gzip git curl python libssl-dev pkg-config build-essential
# apt install nodejs npm
# adduser --system --home=/home/etherpad-lite --group etherpad-lite
$ git clone git://github.com/ether/etherpad-lite.git
# vim /etc/systemd/system/etherpad-lite.service
[Unit]
Description=etherpad-lite (real-time collaborative document editing)
After=syslog.target network.target
[Service]
Type=simple
User=etherpad-lite
Group=etherpad-lite
ExecStart=/home/etherpad-lite/etherpad-lite/bin/run.sh
[Install]
WantedBy=multi-user.target
# systemctl enable etherpad-lite
Created symlink from /etc/systemd/system/multi-user.target.wants/etherpad-lite.service to /etc/systemd/system/etherpad-lite.service.
# systemctl start etherpad-lite
~~~
Voir <https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service>
Note : les scripts bin/run.sh et bin/installDeps.sh utilisent la commande "node" et non "nodejs", il peut donc être nécessaire de modifier ou créer un alias node=nodejs
### Installation (deprecated)
En installant nodejs depuis les sources.
Suivre les infos sur : <https://github.com/Pita/etherpad-lite/blob/master/README.md>
~~~
# aptitude install gzip git-core curl python libssl-dev build-essential
# apt-get build-dep nodejs=0.6.8~dfsg1-1
$ wget <http://nodejs.org/dist/v0.6.10/node-v0.6.10.tar.gz>
$ tar xvf node-v0.6.10.tar.gz
$ cd node-v0.6.10
$ ./configure && make
# make install
$ git clone <https://github.com/Pita/etherpad-lite.git>
$ cd ../etherpad-lite/
$ ./bin/installDeps.sh
$ vim settings.json
$ ./bin/run.sh
~~~
Lancer bin/run.sh
## Configuration
Cela ce passe dans _settings.json_
### Stockage des données
Par défaut, Etherpad utilise DirtyDB (un fichier à plat) mais on peut utiliser sqlite ou MySQL.
Pour DirtyDB :
~~~
"dbType" : "dirty",
"dbSettings" : {
"filename" : "var/dirty.db"
},
~~~
Pour MySQL utiliser MySQL :
~~~
mysql> create database etherpad;
mysql> grant CREATE,ALTER,SELECT,INSERT,UPDATE,DELETE on `etherpad`.* to 'etherpad'@'localhost' identified by '<password>';
~~~
puis :
~~~
"dbType" : "mysql",
"dbSettings" : {
"user" : "etherpad",
"host" : "127.0.0.1",
"password": "<password>",
"database": "etherpad"
},
~~~
puis :
~~~
$ sh bin/installDeps.sh
# systemctl restart etherpad-lite
mysql> show tables
+--------------------+
| Tables_in_etherpad |
+--------------------+
| store |
+--------------------+
mysql> ALTER DATABASE `etherpad` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
mysql> ALTER TABLE `store` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
~~~
Voir <https://github.com/ether/etherpad-lite/wiki/How-to-use-Etherpad-Lite-with-MySQL>
### Reverse Proxy
Avec Nginx :
~~~
server {
listen 80;
server_name pad.example.com;
location / {
proxy_pass <http://127.0.0.1:9001/;>
proxy_set_header Host $host;
proxy_pass_header Server;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_<http_version> 1.1;
}
}
~~~
Voir <https://github.com/ether/etherpad-lite/wiki/How-to-put-Etherpad-Lite-behind-a-reverse-Proxy>

51
HowtoEthtool.md Normal file
View File

@ -0,0 +1,51 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto ethtool
## ethtool
Installer ethtool :
~~~
# aptitude install ethtool
~~~
Consulter l'état d'une interface :
~~~
# ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: 10Mb/s
Duplex: Half
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: off
MDI-X: Unknown
Supports Wake-on: g
Wake-on: d
Link detected: yes
~~~
Changer son état (par exemple) :
~~~
# ethtool -s eth0 speed 10 duplex full autoneg off
~~~
## Changer son adresse MAC
Cela n'a pas un lien direct avec _ethtool_ mais pour changer son adresse MAC sur une machine Linux, on fera :
~~~
# ifconfig eth0 hw ether 01:23:45:67:89:0a
~~~

483
HowtoFAI.md Normal file
View File

@ -0,0 +1,483 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# How to FAI
Cette page décrit une des utilisations possible de FAI, Fully Automated Install, un système d'installation de Linux non-interactif.
L'utilité de FAI est qu'il permet d'installer en quelques minutes un système Debian complet sans aucune interaction humaine. Evolix n'utilise pas l'ensemble des fonctionnalités de FAI.
La documentation de FAI est très complète et peut être consultée ["ici (anglais)"](http://fai-project.org/fai-guide/index.html).
## FAI server vs FAI "serverless"
Il existe deux moyens principaux d'installer des machines à l'aide de FAI. Le premier implique l'utilisation d'un serveur FAI qui va fournir les services suivants:
* DHCP (pour configurer le réseau)
* TFTP (sert l'initrd et le kernel lors de l'installation)
* NFS (sert l'ensemble des autre fichiers nécessaires)
Ce serveur contient l'ensemble de la configuration des clients.
La seconde manière d'installer une machine avec FAI est de monter une image complète de l'installation et de l'utiliser comme on le ferait avec une image ISO standard.
L'avantage de cette méthode est que le client n'a pas besoin d'avoir accès à internet (au serveur FAI) pour effectuer l'installation. Il est ainsi possible de mettre l'image sur une clef USB ou un CD.
Pour créer cette image disque, il est cependant nécessaire d'avoir une machine qui roule les programmes fournis par le package Debian `fai-server`. Nous appellerons cette méthode du nom de l'utilitaire qui sert à générer les images: fai-cd.
# fai-server
La première étape pour monter le serveur FAI est d'installer les packages nécessaires à son bon fonctionnement. Pour simplifier la tâche, Debian fournit un package virtuel qui installe l'ensemble des choses requises:
~~~
# apt install fai-quickstart
~~~
Lors de l'installation, plusieurs fichiers de configuration sont créés. Ceux qui nous intéressent pour l'instant se trouvent dans `/etc/fai`.
Par exemple, lors des installations FAI utilise d'autres sources que celles configurées dans `/etc/apt`. Par défaut FAI utilise [<httpredir>](http://<httpredir.debian.org/).>
Si vous disposez d'un miroir local et que ce miroir est disponible pour les machines que vous comptez installer avec FAI, il est intéressant de changer ce paramètre. Les fichiers à modifier sont `/etc/fai/apt/sources.list` et `/etc/fai/nfsroot.conf`. Par exemple, chez Évolix nous avons:
~~~
# cat /etc/fai/nfsroot.conf
# For a detailed description see nfsroot.conf(5)
# "<suite> <mirror>" for debootstrap
FAI_DEBOOTSTRAP="jessie <http://mirror.evolix.org/debian">
FAI_ROOTPW='XXXXXXXXX'
NFSROOT=/srv/fai/nfsroot
TFTPROOT=/srv/tftp/fai
NFSROOT_HOOKS=/etc/fai/nfsroot-hooks/
FAI_DEBOOTSTRAP_OPTS="--exclude=info --include=aptitude"
# Configuration space
FAI_CONFIGDIR=/srv/fai/config
~~~
et
~~~
# cat /etc/fai/apt/sources.list
deb <http://mirror.evolix.net/debian> jessie main contrib non-free
deb <http://security.debian.org/debian-security> jessie/updates main contrib non-free
~~~
Il est cependant bon de noter que si `debootstrap` n'arrive pas à se connecter au miroir correctement, le processus de création du NFSROOT continue comme si de rien n'était. Il est ainsi peut être plus prudent d'utiliser un miroir officiel pour cette partie.
Pour pouvoir continuer, on active l'utilisateur principal qui va être utilisé par FAI et on spécifie la configuration à utiliser pour une installation via NFS:
~~~
# vim /etc/fai/fai.conf
# See fai.conf(5) for detailed information.
# Account for saving log files and calling fai-chboot.
LOGUSER=fai
# URL to access the fai config space
FAI_CONFIG_SRC=nfs://faiserver/srv/fai/config
~~~
Une fois que les packages sont installés et que l'on a modifié la configuration initiale comme on le souhaitait, on roule la commande suivante pour terminer l'installation. Attention! il est nécessaire d'avoir `aptitude` pour que `fai-setup` et les commandes qui suivent fonctionnent comme il se doit:
~~~
$ fai-setup -v
~~~
Cette commande fait plusieurs choses:
1. Elle crée un nouvel utilisateur, `fai`
1. Elle génère une paire de clefs ssh pour cet utilisateur dans `/var/log/fai/.ssh`
1. Elle crée le NFSROOT dans `/srv/fai/nfsroot` et le peuple avec un debootstrap en vue des installations.
Si vous souhaitez utiliser FAI sans serveur PXE (méthode fai-cd), vous pouvez passez à la [#Configuration "section Configurations] tout de suite. Pour avoir un fai-server complet, il faut continuer et configurer le DHCP, le PXE et le NFS.
## DHCP
Par défaut l'installation du package `fai-quickstart` a déjà installé les packages nécessaires pour monter un serveur DHCP. Il ne nous reste qu'à le configurer. On remplace donc `/etc/dhcp/dhcpd.conf` par la configuration suivante:
~~~
deny unknown-clients;
option dhcp-max-message-size 2048;
use-host-decl-names on;
subnet <SUBNET> netmask <NETMASK> {
option routers <ROUTER>;
option domain-name "<DOMAIN>";
option domain-name-servers <DNS>;
server-name faiserver
next-server faiserver;
filename "fai/pxelinux.0";
# host <FAI HOSTNAME> { # the hostname associated to FAI classes
# hardware ethernet <MAC ADDRESS>;
# fixed-address <STATIC IP>; # optional. Should be set in /etc/hosts
# }
}
~~~
Cette configuration attribue une adresse IP fixe à une machine seulement si son adresse MAC y a été configuré. Vous pouvez ajouter des nouvelles machines manuellement en copiant le bloc commenté, mais une solution plus simple existe également. En effet, FAI utilise un programme nommé `dhcp-edit` qui fait tout le travail pour nous.
Il faut tout d'abord ajouter la nouvelle machine au `/etc/hosts`:
~~~
# echo '<STATIC IP> evodemo' >> /etc/hosts
~~~
On ajoute ensuite la machine au DHCP:
~~~
# dhcp-edit evodemo <MAC ADDRESS>
~~~
Et voilà! `dhcp-edit` redémarre même le DHCP pour nous.
## NFS
En théorie, votre serveur NFS fonctionne déjà et ne nécessite aucune modification pour fonctionner. Il existe cependant un bug dans le fichier d'init de `nfs-kernel-server` sur Jessie qui l'empêche de fonctionner comme il se doit. On modifie donc `/etc/init.d/nfs-kernel-server` pour ajouter un commande `sleep` au démarrage:
~~~
[...]
# See how we were called.
case "$1" in
start)
sleep 10
export_files="/etc/exports"
[...]
~~~
Vous devriez maintenant pouvoir lancer `nfs-kernel-server` avec succès:
~~~
# service nfs-kernel-server restart
# systemctl daemon-reload
~~~
Il faut de plus vous assurer que votre firewall ne bloque pas les ports nécessaires au NFS:
* TCP 111
* TCP 2049
* UDP 111
* UDP 2049
Si vous avez des problèmes avec votre NFSROOT lors de l'installation, le plus simple est de supprimer le dossier `/srv/fai/nfsroot` et de relancer `fai-setup -v`.
## PXE
Il ne nous reste plus qu'à générer les fichiers de configuration PXE pour la nouvelle machine que l'on souhaite installer. Encore une fois, FAI dispose d'un utilitaire pour nous simplifier la vie:
~~~
# fai-chboot -IFv -u nfs://faiserver/srv/fai/config evodemo
~~~
On s'assurer finalement que tous les fichiers de PXE on les bonnes permissions:
~~~
# chmod -R u+rwX,go+rX,go-w /srv/tftp
~~~
# Configuration
Avant de commencer à décrire le "language FAI", il est bon de savoir que le package Debian viens avec des exemples concrêts et fonctionnels de configuration. On peut les utiliser comme base de départ:
~~~
# mkdir /srv/fai/config
# cp -a /usr/share/doc/fai-doc/examples/simple/* /srv/fai/config
~~~
FAI utilise une méthode basée sur des classes pour savoir quelles configurations utiliser lors d'une installation. Par exemple, la configuration pour une machine Debian de base roulant XFCE fournie avec le package `fai-quickstart` utilise les classes suivantes:
`FAIBASE GRUB DHCPC DEMO XORG XFCE`
Ces classes sont entièrement configurables. Elles sont liées au hostname (nom de domaine) de la machine qui va être installée. Avant l'installation, il est donc nécessaire soit:
* de modifier la configuration pour spécifier les classes à utiliser pour le hostname
* de choisir le hostname en fonction de l'installation que l'on souhaite effectuer
Ainsi, pour une machine roulant XFCE, on utiliserait le hostname `xfcehost` lors de l'installation.
Dans la partie qui suit, nous allons passer en revue les différents dossiers de configuration et leurs fonction dans la configuration d'une machine:
## class
Tous les noms des classes sont en majuscules, à l'exception des classes définies pour un hostname seulement. Le nom des classes ne peuvent pas contenir les caractères suivants:
* trait d'union (`-`)
* dièse (`#`)
* point-virgule (`;`)
* point (`.`)
Les barres de soulignement (`_`) et les numéros sont cependant acceptés.
Les fichiers dans le dossier `class` sont utilisés pour lier des hostnames à des classes. Le nom des fichiers dans ce dossier suit la convention suivante: `^[0-9][0-9]*`.
Ainsi, le fichier `10-important-class` est lu avant le fichier `99-less-than-important`. Des fichiers nommés `mysuperclass` ou `1-thiswillnotrun` ne seraient tout simplement pas lu.
Il est également possible d'avoir un fichier de définition de classe pour une seule machine. En quel cas, on utilise le hostname comme nom du fichier de définition (i.e. `kvm4`).
L'ordre des classes est important car il est parfois nécessaire d'effectuer certaines étapes de configuration avant d'autres.
Voici un exemple de définition de classe:
~~~
#! /bin/bash
# assign classes for kvm machines
case $HOSTNAME in
kvm?.evolix.net|othermachine*)
echo "FAIBASE KVM" ;;
esac
case $HOSTNAME in
othermachine*)
echo ""MYSUPERCLASS ;; # a comment here
esac
~~~
En plus des classes définies dans le dossier `class`, les classes DEFAULT et LAST s'appliquent à l'ensemble des machines.
Pour chaque classe ou hostname, il est possible de créer un fichier `*.var` (i.e. `DEBIAN.var`) qui regroupe des variables à utiliser dans les scripts:
~~~
# cat class/DEBIAN.var
PARTY_HARD=1
MYSUPERVAR="foobar"
~~~
Plus de détails sur la ["page du projet FAI"](http://fai-project.org/fai-guide/#_a_id_classvariables_a_defining_variables).
## files
Le dossier `files` est peut-être le plus simple des dossiers de configuration. Il contient l'ensemble des fichiers que l'on souhaite transférer lors d'une installation. Ainsi, un `tree` du dossier `files` pourrait ressembler à:
~~~
files/
|-- etc
| |-- apt
| | |-- apt.conf.d
| | | `-- force_confdef
| | | |-- DEBIAN
| | | `-- kvm4
| | `-- sources.list
| | `-- GNOME
| |-- dhcp
| | `-- dhcpd.conf
| | `-- FAISERVER
| |-- fai
| | |-- apt
| | | `-- sources.list
| | | `-- FAISERVER
| | |-- fai.conf
| | | `-- FAISERVER
| | `-- nfsroot.conf
| | `-- FAISERVER
| |-- motd
| | `-- FAIBASE
| |-- rc.local
| | `-- FAISERVER
| `-- selinux
| `-- config
| `-- CENTOS
`-- usr
`-- local
`-- sbin
`-- make_a_party
`-- DEFAULT
~~~
La seule différence avec un dossier régulier est que plutôt que de créer un fichier directement, on crée un dossier du nom de ce fichier et l'on spécifie la version à utiliser en fonction d'une classe ou d'un hostname. Par exemple:
~~~
# ls files/etc/postfix/main.cf/
DEFAULT MYCLASS1 kvm4
~~~
Ici, les trois fichiers dans le dossier `files/etc/postfix/main.cf/` sont en fait des versions différentes du fichier de configuration `main.cf`. Le fichier `DEFAULT` va être installé par la classe `DEFAULT`, le fichier `MYCLASS1` va être installé par la classe `MYCLASS1` et le fichier `kvm4` va être installé seulement si le hostname de la machine est `kvm4`.
## scripts
Le dossier `scripts` rassemble les scripts qui vont faire des actions sur les machines. Par exemple le script suivant copie un fichier de configuration à partir des fichiers dans le dossier `files` avec les droits (root,root,0644):
~~~
#!/bin/bash
fcopy -M etc/postfix/main.cf
~~~
Les scripts sont regroupés par classe. Ainsi, tous les scripts dans `scripts/POSTFIX` vont être exécutés pour la classe POSTFIX. Le nom des scripts suit la même convention que le nom des fichiers dans [#class `class`].
Il est possible d'écrire des scripts dans de multiples langages, dont shell, cfengine, Perl, Python, Ruby, expect, etc.
FAI installe certaines commandes qui peuvent être très utiles:
* [`fcopy`](http://fai-project.org/doc/man/fcopy.html) pour copier des fichiers sur la machine
* [`ftar`](http://fai-project.org/doc/man/ftar.html) pour copier et extraire une archive tar
* ["`ainsl` (append if no such line)"](http://fai-project.org/doc/man/ainsl.html) pour ajouter une ligne dans un fichier
Il est également possible de tester si une classe est définie en shell script grâce à la commande `ifclass`:
~~~
ifclass -o A B C # retourne 0 si A, B ou C est défini
ifclass -a A B C # retourne 0 si A, B et C est défini
~~~
## package_config
Le dossier `package_config` regroupe les définitions de packages à installer pour chaque classe. Une classe installe les packages dans un fichier si ce dernier a le nom de la classe en question. Ainsi, la classe DEBIAN installe les packages dans `package_config/DEBIAN`.
Voici un exemple d'un fichier dans `packages_config`:
~~~
PACKAGES taskinst
german
PACKAGES aptitude
adduser netstd ae
less passwd
PACKAGES remove
gpm xdm
~~~
Une ligne commence toujours par `PACKAGES`. Elle est par la suite suivie de la commande à exécuter. Sur la ligne suivante, on liste les packages sur lesquels effectuer l'action. Voici les actions qui sont valides:
* hold
* install
* remove
* taskinst
* aptitude
* aptitude-r
* unpack
Le détail de ces actions est disponible avec la commande [install_packages -H](http://fai-project.org/doc/man/install_packages.html).
Avant d'installer les packages pour une classe ou un hostname, FAI ajoute le contenu de tous les fichiers nommées $CLASS.asc à la liste des clefs autorisées de `apt`. Cela est très pratique pour un miroir local contenant des packages non officiels.
## disk_config
FAI gère la partition des disques lors de l'installation grâce aux fichiers dans le dossier `disk_config`. Ces fichiers doivent être nommés selon le nom d'une classe. Bien évidemment, il n'est pas recommandé d'avoir plusieurs fichiers disk_config pour un même ensemble de classes!
La syntaxe utilisée pour les fichiers peut être retrouvée dans la page de manuel de l'outil utilisé pour la partition [setup-storage](http://fai-project.org/doc/man/setup-storage.html).
Voici un exemple de configuration utilisant la partition typique d'Évolix sur ses machines:
~~~
disk_config sda disklabel:msdos bootable:1
primary /boot 200 ext4 rw
primary / 500 ext4 rw
primary /var 10G ext4 rw
logical /tmp 500 ext4 rw,nosuid
logical /usr 5G ext4 rw
logical swap 500 swap sw
logical swap 500 swap sw
logical /home 15G ext4 rw
~~~
## debconf
Si l'on souhaite effectuer un preseed du package `debconf`, il est possible de créer un dossier nommé `debconf` et d'y ajouter des fichiers du nom d'une classe.
## hooks
Pour bien comprendre les `hooks` de FAI, il faut expliquer les `tasks`. Quand une installation est lancée (que ce soit par NFSROOT ou par fai-cd), FAI lance une série d'action que l'on nomme des tasks. Ainsi, pendant le processus d'installation, FAI va éventuellement lancer le task `partition`, qui partitionne les disques.
Voici tous les `tasks` que FAI lance, dans l'ordre de leur exécution. Une description complète de chaque task peut être trouvée dans la [section tasks](http://fai-project.org/fai-guide/#tasks) du guide FAI.
* confdir
* setup
* defclass
* defvar
* action
* sysinfo
* inventory
* install
* dirinstall
* softupdate
* partition
* mountdisks
* extrbase
* debconf
* repository
* updatebase
* instsoft
* configure
* tests
* finish
* chboot
* savelog
* faiend
Les `hooks` servent à lancer des script avant l'exécution d'un `task`. Cela donne très grande liberté sur le processus d'installation.
Pour être valides, les `hooks` doivent être des scripts en Bourne Shell (`/bin/sh`) placés dans le dossier `hooks` en suivant la convention suivante: `task.CLASS[.sh]`
Ainsi, `partition.DEBIAN` roule avant la partition des disques pour les machines qui ont la classe DEBIAN. `partition.DEBIAN.sh` aurait été tout aussi valide.
Attention! Certaines restrictions s'appliquent:
* Il n'est pas possible de lancer un `hook` avec une autre classe que `DEFAULT`, `$HOSTNAME` ou LAST avant la fin du `task` `defclass`
* Tous les `hooks` lancés avant le `task` `confdir` doivent être placés dans $nfsroot/$FAI/hooks
# fai-cd
Maintenant que nous avons mis en place un fai-server minimal et que nous avons créé la configuration des clients que nous allons installer, nous allons créer des images ISO complètes.
Par défaut FAI utilise `dracut` pour les images ISO. La version de dracut dans Debian Jessie n'est cependant pas à même de faire ce dont FAI a besoin. Il est donc nécessaire soit d'utiliser la version de `dracut` de stretch, ou alors d'utiliser les packages dans le repository de FAI.
Plutôt que d'utiliser `dracut`, nous allons utiliser `live-boot`. Cela nécessite de commenter les lignes concernant `dracut` et d'activer celles pour `live-boot` dans `/etc/fai/NFSROOT`:
~~~
# dracut can replace live-boot
#dracut-network live-boot- initramfs-tools-
# choose if you like live-boot or dracut inside the nfsroot
live-boot live-boot-doc
~~~
La première étape pour obtenir un fai-cd est de créer un miroir complet des packages dont nous allons avoir besoin. De cette manière nous pourrons faire notre installation sans avoir besoin du réseau ou d'une connexion au fai-server.
On commence donc par créer un dossier où nous allons générer le miroir:
~~~
# mkdir /srv/fai/mirror
~~~
Pour que `fai-mirror` puisse télécharger les packages nécessaires, il a besoin d'une copie du dossier `/etc/apt/trusted.gpg.d`:
~~~
# mkdir -p /srv/fai/mirror/aptcache/etc/apt/
# cp -R /etc/apt/trusted.gpg.d/ /srv/fai/mirror/aptcache/etc/apt/
~~~
On peut par la suite rouler l'utilitaire `fai-mirror`:
~~~
# fai-mirror -v /srv/fai/mirror
~~~
Cette étape prends un peu de temps (la machine télécharge l'ensemble des packages qui vont être utilisés, etc.) et peut créer un miroir d'une taille substantielle, tout dépendant de nos configurations. Par exemple, un miroir de toutes les classes dans la configuration donnée en exemple crée un dossier d'environ 1G.
Si l'on connaît à l'avance les classes que l'on souhaite utiliser lors pour notre image ISO, on peut également construire un miroir partiel:
~~~
# fai-mirror -v -cCLASS1,CLASS2,CLASS3 /srv/fai/mirror
~~~
Une fois que l'on a un miroir qui correspond à nos besoins, on peut créer notre image ISO:
~~~
# fai-cd -m /srv/fai/mirror /srv/fai/myfai.iso
~~~
Il se peut que `fai-cd` se termine avec un message d'erreur à propos du NFSROOT non-compatible avec une image live. En quel cas, il est nécessaire de recréer le NFSROOT avec l'option `live`:
~~~
# rm -R /srv/fai/nfsroot
# fai-make-nfsroot -lv
~~~
Et voilà! Il ne reste plus qu'à installer une nouvelles machine avec l'image que l'on viens de créer. Lors du processus d'installation, il est bien important de spécifier un hostname lié à un ensemble de classe pour installer la bonne configuration!

20
HowtoFMS.md Normal file
View File

@ -0,0 +1,20 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Howto FMS : Flash Media Server
Par défaut FMS écoute sur les ports TCP 1935, 80 et 8080.
Pour qu'il n'écoute que sur le port 1935.
Pour changer cela, changer dans le conf/fms.ini :
~~~
ADAPTOR.HOSTPORT = :1935
~~~
Ainsi que dans conf/_defaultRoot_/Adaptor.xml :
~~~
<HttpProxy enable="false" maxbuf="16384">
<Host port="80">${HTTPPROXY.HOST}</Host>
</HttpProxy>
~~~

391
HowtoFail2Ban.md Normal file
View File

@ -0,0 +1,391 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Fail2Ban
Fail2Ban est un service (en Python), qui scanne les logs applicatifs à la recherche d'échec de connexions pour bannir (via iptables) les adresses IP qui font trop de tentatives.
Il est disponible en version 0.8.4-3 pour Squeeze et 0.8.6-3 pour Wheezy. Un backport pour Squeeze est [disponible](https://packages.debian.org/squeeze-backports/fail2ban)
## Installation
~~~
# aptitude install fail2ban
~~~
## Configuration
Cela se passe dans le répertoire /etc/fail2ban
Le principe repose sur un système de règles basées sur des regex correspondant à applicatif.
Par défaut les règles pour SSH sont activées , voici comment ça se composer
*filter.d/sshd.conf* contient les regex correspondant à SSH
jail.conf est le fichier principal activant (ou pas) les règles avec différents paramètres
~~~
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
~~~
On peut régler plusieurs paramètres, comme le maxretry (nombres d'échecs) dans la section [DEFAULT] ou pour chaque applicatif.
## Règles
On peut évidemment écrire ses propres règles. On pourra les tester ainsi :
~~~
# fail2ban-regex /tmp/mail.log filter.d/sasl-test.conf
~~~
## Administration
On peut lister les "jails" :
~~~
# fail2ban-client status
|- Number of jail: NN
`- Jail list: ...
~~~
On va les retrouver aussi avec `iptables -L -n`
Pour débannir une IP :
~~~
# fail2ban-client set <JAIL> unbanip <IP>
~~~
## Exemples
### Dovecot
Il faut ajouter des règles personnalisées :
~~~
[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
port = pop3,pop3s,imap,imaps
logpath = /var/log/mail.log
~~~
Filtre dovecot, filter.d/dovecot-pop3imap.conf
~~~
[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=(?P<host>\S*),.*
ignoreregex =
~~~
## Courier
Il suffit d'activer la règle courierlogin prédéfinie :
~~~
[courierauth]
enabled = true
port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter = courierlogin
logpath = /var/log/mail.log
~~~
## Postfix SASL
Il faut modifier la règle SASL prédéfinie :
~~~
[sasl]
enabled = true
port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter = sasl-evolix
logpath = /var/log/mail.log
~~~
avec filter.d/sasl-evolix.conf :
~~~
[Definition]
failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed:
ignoreregex =
~~~
## Services HTTP
Il est possible d'utiliser `fail2ban` sur des sites web pour ajouter une couche de protection contre les attaques, ou alors pour répondre à une attaque en cours.
Les deux attaques les plus courantes sur les services HTTP sont les DDOS et les attaques en "brute force".
Pour les attaques de type DDOS, la chose la plus efficace à faire est d'écrire des règles pour le serveur web (Apache, Nginx, etc.)
Comme `fail2ban` a besoin d'être configuré au cas par cas, il faut utiliser des configurations différentes pour chaque plateforme web.
En général, on tente d'être le plus précis possible en configurant `fail2ban` pour regarder les logs d'authentification. Cela permet d'éviter les faux positifs et d'être efficace en cas d'attaque.
### Apache & Nginx DDOS
On peut protéger Apache des attaques DDOS simples avec les configurations suivantes. Il faut tout d'abord s'assurer qu'Apache enregistre des logs d'accès. On ajoute ensuite un filtre à `fail2ban` dans `/etc/fail2ban/filter.d/ddos-<http.conf`:>
~~~
failregex = ^ -.*GET
~~~
Finalement, on modifie `/etc/fail2ban/jail.local` pour ajouter une des deux règles suivantes. Avec cette règle, une personne qui accède plus de 300 fois à une page web sur notre serveur web en 5 minutes va être bannie pendant la période de temps par défaut:
~~~
[ddos-<http-apache>]
enabled = true
port = <http,https>
filter = ddos-http
logpath = /var/log/apache2/access.log
maxretry = 300
findtime = 300
~~~
~~~
[ddos-<http-nginx>]
enabled = true
port = <http,https>
filter = ddos-http
logpath = /var/log/nginx/access.log
maxretry = 300
findtime = 300
~~~
### Wordpress
Il existe plusieurs options pour configurer `fail2ban` pour Wordpress. Cela découle du fait qu'il n'y a pas de moyen par défaut de logger les authentifications erronées sous Wordpress, et que la page d'authentification ne renvoie pas d'erreur HTTP particulière non plus. ["Une proposition à cet effet"](https://core.trac.wordpress.org/ticket/25446) a cependant été faite et risque éventuellement d'être implémentée.
#### Option 1: HTPP 200
Cette option est la plus simple des trois car elle ne nécessite pas de modifier l'installation Wordpress. Elle a cependant le désavantage d'être très générale et peu créer des faux positifs. C'est celle qui est actuellement utilisée par Évolix.
Il faut tout d'abord s'assurer que notre serveur web enregistre des logs d'accès. On ajoute ensuite un filtre à `fail2ban` dans `/etc/fail2ban/filter.d/apache-wp.conf`:
~~~
[Definition]
failregex = <HOST> -.*"POST.*/wp-login.php HTTP.* 200
<HOST> -.*"POST.*/xmlrpc.php.*
~~~
Finalement, on modifie `/etc/fail2ban/jail.local` pour ajouter une règle. Avec cette règle, une personne qui accède plus de 5 fois à la page `/wp-login.php` ou à `/xmlrpc.php` dans une période d'une minute va être bannie pendant la période de temps par défaut:
~~~
[apache-wp]
enabled = true
port = <http,https>
filter = apache-wp
logpath = /var/log/apache2/access.log
maxretry = 5
findtime = 60
~~~
#### Option 2: Plugin simple & HTTP 401
Une seconde option est d'utiliser un plugin Wordpress très simple pour envoyer une erreur HTTP 401 en cas d'erreur d'authentification. Cette méthode est plus fine et créé moins de faux positifs, mais nécessite de toucher à l'installation Wordpress.
Elle est cependant peu invasive car elle fait installe le plugin dans [wp-content/mu-plugins](https://codex.wordpress.org/Must_Use_Plugins), un dossier spécial pour les plugins de ce genre. Typiquement, les mu-plugins ne sont pas vu à travers l'interface d'administration web.
Il faut tout d'abord s'assurer que notre serveur web enregistre des logs d'accès. Par la suite, on installe le plugin dans `wp-content/mu-plugins/401-on-login-fail.php`:
~~~
<?php
function my_login_failed_401() {
status_header( 401 );
}
add_action( 'wp_login_failed', 'my_login_failed_401' );
~~~
On ajoute ensuite un filtre à `fail2ban` dans `/etc/fail2ban/filter.d/apache-wp.conf`:
~~~
[Definition]
failregex = <HOST>.*POST.*(wp-login\.php|xmlrpc\.php).* 401
~~~
Finalement, on modifie `/etc/fail2ban/jail.local` pour ajouter une règle. Avec cette règle, une personne qui accède plus de 5 fois à la page `/wp-login.php` ou à `/xmlrpc.php` dans une période d'une minute va être bannie pendant la période de temps par défaut:
~~~
[apache-wp]
enabled = true
port = <http,https>
filter = apache-wp
logpath = /var/log/apache2/access.log
/home/user/log/access.log
maxretry = 5
findtime = 60
~~~
#### Option 3: Plugin régulier & LOG_AUTH
La dernière solution utilise le [le plugin Wordpress fail2ban](https://wordpress.org/plugins/wp-fail2ban/) pour enregistrer les authentification dans un fichier de log. `fail2ban` vérifie par la suite ce fichier pour bannir les gens effectuant des attaques.
Parce qu'elle nécessite l'installation et la mise à jour régulière d'un plugin, elle ne devrait être utilisée que par les personnes administrant le site web en question.
On commence tout d'abord par [installer le plugin](https://wordpress.org/plugins/wp-fail2ban/). Une fois que cela est fait, on ajoute les deux filtres suivants, respectivement dans `etc/fail2ban/filter.d/wordpress-hard` et `etc/fail2ban/filter.d/wordpress-soft`:
~~~
# Fail2Ban configuration file hard
#
# Author: Charles Lecklider
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
[Definition]
_daemon = (?:wordpress|wp)
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values: TEXT
#
failregex = ^%(__prefix_line)sAuthentication attempt for unknown user .* from <HOST>( via XML-RPC)?$
^%(__prefix_line)sBlocked authentication attempt for .* from <HOST>( via XML-RPC)?$
^%(__prefix_line)sBlocked user enumeration attempt from <HOST>$
^%(__prefix_line)sPingback error .* generated from <HOST>$
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
~~~
~~~
# Fail2Ban configuration file soft
#
# Author: Charles Lecklider
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
[Definition]
_daemon = (?:wordpress|wp)
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values: TEXT
#
failregex = ^%(__prefix_line)sAuthentication failure for .* from <HOST>$
^%(__prefix_line)sXML-RPC authentication failure from <HOST>$
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
~~~
Finalement, on modifie `/etc/fail2ban/jail.local` pour ajouter les règles suivantes. Avec cette règle, une personne qui tente de se connecter avec un compte inexistant ou qui n'arrive pas à se connecter 5 fois sera bannie pendant la période de temps par défaut:
~~~
[wordpress-hard]
enabled = true
filter = wordpress-hard
logpath = /var/log/auth.log
maxretry = 1
port = <http,https>
[wordpress-soft]
enabled = true
filter = wordpress-soft
logpath = /var/log/auth.log
maxretry = 5
port = <http,https>
~~~
### ownCloud
Pour faire fonctionne ownCloud avec fail2ban, il faut tout d'abord modifier le `config.php` pour enregistrer les informations d'authentification:
~~~
'loglevel' => '2',
'log_authfailip' => true,
'logfile' => '/var/log/owncloud.log',
~~~
On ajoute ensuite un filtre à `fail2ban` dans `/etc/fail2ban/filter.d/owncloud.conf`:
~~~
[Definition]
failregex={"app":"core","message":"Login failed: user '.*' , wrong password, IP:<HOST>","level":2,"time":".*"}
~~~
Finalement, on modifie `/etc/fail2ban/jail.local` pour ajouter une règle. Avec cette règle, une personne qui n'arrive pas à se connecter 5 fois dans une période de 10 minutes sera bannie pendant la période de temps par défaut:
~~~
[owncloud]
enabled = true
filter = owncloud
port = <http,https>
logpath = /var/log/owncloud.log
maxrety = 5
findtime = 600
~~~
### Joomla
Il faut tout d'abord s'assurer que notre serveur web enregistre des logs d'accès. On ajoute ensuite un filtre à `fail2ban` dans `/etc/fail2ban/filter.d/apache-joomla.conf`:
~~~
[Definition]
failregex = <HOST> -.*"POST.*/administrator/index.php.*
~~~
Finalement, on modifie `/etc/fail2ban/jail.local` pour ajouter une règle. Avec cette règle, une personne qui accède plus de 5 fois à la page `/administrator/index.php` dans une période d'une minute va être bannie pendant la période de temps par défaut:
~~~
[apache-joomla]
enabled = true
port = <http,https>
filter = apache-joomla
logpath = /var/log/apache2/access.log
maxretry = 5
findtime = 60
~~~
### Prestashop
Il faut tout d'abord s'assurer que notre serveur web enregistre des logs d'accès. On ajoute ensuite un filtre à `fail2ban` dans `/etc/fail2ban/filter.d/apache-prestashop.conf`:
~~~
[Definition]
failregex = <HOST> -.*"POST.*/login.*
~~~
Finalement, on modifie `/etc/fail2ban/jail.local` pour ajouter une règle. Avec cette règle, une personne qui accède plus de 10 fois à la page de connexion pour un compte utilisateur dans une période d'une minute va être bannie pendant la période de temps par défaut:
~~~
[apache-prestashop]
enabled = true
port = <http,https>
filter = apache-prestashop
logpath = /var/log/apache2/access.log
maxretry = 10
findtime = 60
~~~

33
HowtoFetchmail.md Normal file
View File

@ -0,0 +1,33 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Fetchmail
~~~
apt install fetchmail
~~~
Config via /etc/fetchmailrc :
~~~
set postmaster "postmaster"
set no spambounce
set no syslog
set logfile /var/log/fetchmail.log
set properties ""
set daemon 60
set no bouncemail
defaults
# Retrieve only new messages
#no fetchall
# Retrieve all messages
#fetchall
smtpaddress mail.example.com
# on vire le Deliver-To: pour eviter les boucles foireuses
dropdelivered
poll pop.example.com with proto POP3
user 'jdoe@example.com' there with password 'PASS' is 'john@example.org' here
~~~

7
HowtoFreeradius.md Normal file
View File

@ -0,0 +1,7 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Installation
~~~
aptitude install freeradius-utils freeradius freeradius-mysql freeradius-ldap
~~~

2
HowtoGNS3.md Normal file
View File

@ -0,0 +1,2 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**

86
HowtoGParted.md Normal file
View File

@ -0,0 +1,86 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto GParted
<http://gparted.org>
## Créer un Live USB
<http://gparted.org/liveusb.php>
1. Prendre une clé USB vierge, par exemple /dev/sdz
Si elle n'est pas vierge, l'effacer en faisant quelques secondes :
~~~
# dd if=/dev/zero of=/dev/sdz
^C
~~~
2. Formater la clé USB en dos et créer une partition FAT32 :
~~~
# parted /dev/sdz
(parted) p
Error: /dev/sdz: unrecognised disk label
(parted) mklabel dos
# mkfs.vfat -F 32 /dev/sdz1
~~~
3. Télécharger la dernière version (.zip en amd64) sur <https://sourceforge.net/projects/gparted/files/gparted-live-stable/>
4. Deziper sur le point de montage :
~~~
# mount /dev/sdz1 /mnt
# unzip gparted-live-0.26.1-5-amd64.zip -d /mnt/
~~~
5. Lancer le script suivant en root et suivre les instructions :
~~~
# apt install libc6-i386
# bash /mnt/utils/linux/makeboot.sh /dev/sdz1
This command will install MBR and syslinux bootloader on this machine
--------------------------------------------
Machine: 20BSCT42XY:
Model: SanDisk (scsi)
Disk /dev/sdc: 4005MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 4005MB 4003MB primary fat32 boot, hidden, lba
--------------------------------------------
Are you sure you want to continue?
[y/n] y
OK! Let's do it!
--------------------------------------------
File system of /dev/sdc1: vfat
--------------------------------------------
Do you want to install mbr on /dev/sdc on this machine "20BSCT42XY" ?
[y/n] y
OK! Let's do it!
--------------------------------------------
Do you want to install the SYSLINUX bootloader on /dev/sdc1 on this machine "20BSCT42XY" ?
[y/n] y
OK! Let's do it!
A filesystem supporting Unix file mode for syslinux is required. Copying syslinux from FAT to /tmp/...
'/mnt/utils/linux/syslinux' -> '/tmp/syslinux_tmp.ZISOfr/syslinux'
Running: /tmp/syslinux_tmp.ZISOfr/syslinux -d syslinux -f -i /dev/sdc1
done!
//NOTE// If your USB flash drive fails to boot (maybe buggy BIOS), try to use "syslinux -d syslinux -fs /dev/sdc1", i.e. running with "-fs".
~~~
6. umount et c'est prêt !
~~~
# umount /mnt
# sync
~~~

17
HowtoGPhoto.md Normal file
View File

@ -0,0 +1,17 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Gphoto
~~~
# aptitude install gphoto2
~~~
~~~
Lister les fichiers :
$ gphoto2 -L
Obtenir un fichier :
$ gphoto2 -p <numéro>
Obtenir tous les fichiers :
$ gphoto2 --get-all-files
~~~

23
HowtoGRSEC.md Normal file
View File

@ -0,0 +1,23 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Howto GRSEC
### Enlever une protection
Installation des paquets nécessaires :
~~~
aptitude install chpax
~~~
Pour une lib :
~~~
# execstack -c /usr/lib/libfoo.so
~~~
Pour un binaire :
~~~
# chpax -permsx /usr/local/bin/wkhtmltopdf
~~~

40
HowtoGaneti.md Normal file
View File

@ -0,0 +1,40 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Ganeti
<http://docs.ganeti.org/ganeti/2.2/html/>
<http://www.howtoforge.com/xen-cluster-management-with-ganeti-on-debian-lenny>
<http://git.ganeti.org/?p=ganeti.git;a=summary>
~~~
# aptitude install ganeti2
~~~
* Config bridge br0
* Config /etc/hostname
* Config LVM d'un VG
* Utilisation d'un IP pour le cluster
* mkdir /root/.ssh/
~~~
# /etc/init.d/ganeti stop
# gnt-cluster init --enabled-hypervisors=kvm --master-netdev br0 -g vg mycloud
# gnt-node add node01
-- WARNING --
Performing this operation is going to replace the ssh daemon keypair
on the target machine (node01.example.com) with the ones of the current one
and grant full intra-cluster ssh root access to/from it
The authenticity of host 'xxx' can't be established.
RSA key fingerprint is 70:69:4b:d8:33:68:b5:77:c4:be:6e:85:9a:62:08:bb.
Are you sure you want to continue connecting (yes/no)? yes
root@node01's password:
Mon Nov 29 13:36:57 2010 - INFO: Node will be a master candidate
root@node00:~# gnt-node list
Node DTotal DFree MTotal MNode MFree Pinst Sinst
node00 232.2G 232.2G 31.5G 195M 31.3G 0 0
node01 232.2G 232.2G 31.5G 154M 31.3G 0 0
~~~

43
HowtoGearman.md Normal file
View File

@ -0,0 +1,43 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Gearman
Installation :
~~~
# aptitude install gearman gearman-job-server
~~~
Vérification du statut / fonctionnement :
~~~
$ telnet 127.0.0.1 4730
STATUS
foo 310 2 2
bar 0 0 1
coin 0 0 1
plop 0 0 1
.
WORKERS
14 127.0.0.1 - :
13 127.0.0.1 - : foo
12 127.0.0.1 - : bar coin plop
11 127.0.0.1 - : foo
.
~~~
Utilisation avec PHP :
~~~
$ pecl download gearman-1.0.3
$ dh-make-pecl --phpversion 5 --prefix php5- gearman-1.0.3.tgz
$ cd php5-gearman-1.0.3/
$ ./debian/rules binary
# dpkg -i ../php5-gearman_1.0.3-1_amd64.deb
~~~
Note : si vous obtenez des erreurs du type `PHP Fatal error: Uncaught exception 'GearmanException' with message 'Failed to set exception option`
Précisez le HOST et PORT pour la fonction addServer : _addServer("127.0.0.1", 4730)_

35
HowtoGeoIP.md Normal file
View File

@ -0,0 +1,35 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto GeoIP
GeoIP est un service de [maxmind](http://www.maxmind.com/app/ip-locate), ils proposent des base de données de localisation géographique des adresses IP, grauit ou payant, selon les besoins.
Il existe sous debian des paquets permettant de s'en servir _out-of-the-box_.
En installant les paquets `geoip-bin` et `geoip-database` on peut déjà se servir de GeopIP en terminal.
~~~
$ geoiplookup 85.31.205.43
GeoIP Country Edition: FR, France
~~~
En téléchargeant la base de données plus précise, on peut aller jusqu'à la ville, il faut pour cela télécharger la base [GeoLite City](http://www.maxmind.com/app/geolitecity) et l'extraire dans /usr/share/GeoIP/
Puis on peut intérogger la base de données ainsi :
~~~
$ geoiplookup -l -f /usr/share/GeoIP/GeoLiteCity.dat 209.85.227.103
GeoIP City Edition, Rev 1: US, CA, Mountain View, 94043, 37.419201, -122.057404, 807, 650
~~~
Notez que la version gratuite n'est pas précise en france :
~~~
geoiplookup -l -f /usr/share/GeoIP/GeoLiteCity.dat 85.31.205.43
GeoIP City Edition, Rev 1: FR, (null), (null), (null), 46.000000, 2.000000, 0, 0
~~~
/!\ Ceci est en fait un bug de geoiplookup, en utilisant les scripts [PHP](http://geolite.maxmind.com/download/geoip/api/php/), on obtient bien une adresse précise.
À noter que la version gratuite n'est pas précise pour de nombreuses adresses IP de FAI, la version payante contient plus d'informations, exemple [ici](http://www.maxmind.com/app/lookup_city).
Il existe plusieurs APIs, vous pouvez donc faire des requêtes sur la base de données avec un module apache ou bien en PHP par exemple. Le site de maxmind liste toutes les [APIs disponibles](http://www.maxmind.com/app/api).

17
HowtoGit/Github.md Normal file
View File

@ -0,0 +1,17 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Github
On fork un projet via l'interface web, puis récupère le fork :
~~~
$ git clone git@github.com:gcolpart/phpredis.git
~~~
On code, on code, on commit... puis on se resynchronise avec le projet principal :
~~~
$ git remote add upstream git://github.com/nicolasff/phpredis.git
$ git fetch upstream
$ git merge upstream/master (ou rebase ?)
~~~

48
HowtoGitDaemon.md Normal file
View File

@ -0,0 +1,48 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# HowToGitDeamon
## Prérequis
Installation du service git-daemon :
~~~
aptitude install git-daemon-sysvinit
~~~
Configuration du démon Git /etc/default/git-daemon :
~~~
cat > /etc/default/git-daemon <<GD
GIT_DAEMON_ENABLE=true
GIT_DAEMON_USER=gitdaemon
GIT_DAEMON_OPTIONS="--interpolated-path=/home/%H/repositories/%D"
GD
~~~
Éditer le fichier /etc/init.d/git-daemon et commenter la ligne suivante (34) :
~~~
#DAEMON_ARGS="$DAEMON_ARGS --base-path=$GIT_DAEMON_BASE_PATH $GIT_DAEMON_DIRECTORY"
~~~
#### Pensez à ouvrir le port 9418 entrant sur le firewall !
## Configuration
Choix de l'utilisateur $GIT :
* $GIT : utilisateur propriétaire des dépots
* dépôts présent dans /home/$GIT/repositories
* accès git:// depuis $GIT@votre-domaine.tld
~~~
GIT='git'
~~~
Crée un lien symbolique car git-daemon accède aux dépôts via $GIT.votre-domaine.tld :
~~~
ln -s /home/$GIT/ /home/$GIT.$(hostname -d)
~~~
Donne l'accès en lecture au dépôts à l'utilisateur gitdaemon :
~~~
addgroup gitdaemon $GIT
~~~
Redémarrage du démon git :
~~~
service git-daemon restart
~~~

32
HowtoGitLab.md Normal file
View File

@ -0,0 +1,32 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto GitLab
Lors de la rédaction de ce how-to, la dernière stable était la 7.5
N'installer pas l'Omnibus package depuis les dépôts de Gitlab, cela installe tout un tas de services compilés par Gitlab dans /var/opt/gitlab !
La doc officielle est ici : <https://gitlab.com/gitlab-org/gitlab-ce/blob/7-5-stable/doc/install/installation.md>
## Particularités pour Debian Wheezy (7)
Il faut Ruby >=2.1 et GCC >=4.9, il faudra donc les installer depuis le dépôt sid.
Mettre en place le repo sid et du pinning :
/etc/apt/sources.list
~~~
deb <http://mirror.evolix.org/debian/> sid main
~~~
/etc/apt/preferences.d/ruby
~~~
Package: ruby gcc-4.9
Pin: release n=sid
Pin-Priority: 600
Package: *
Pin: release n=sid
Pin-Priority: 50
~~~
Et d'installer les packages ruby et gcc4.9, en faisant attention avec la gestion des dépendances.

76
HowtoGitWeb.md Normal file
View File

@ -0,0 +1,76 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# HowtoGitWeb
## Prérequis
Installation de gitweb et highlight :
~~~
aptitude install gitweb highlight
~~~
### Configuration Nginx
Installation de fcgiwrapper :
~~~
aptitude install fcgiwrap
~~~
Modifier /etc/gitweb.conf et remplacer les lignes suivantes :
~~~
$projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/pub/git";
$projects_list = $ENV{'GITWEB_PROJECTLIST'} || $projectroot;
~~~
Rajout de la conf highlight :
~~~
cat >> /etc/gitweb.conf <<CONF
\$feature{'highlight'}{'default'} = [1];
CONF
~~~
## Configuration
Choix de l'utilisateur $GIT :
* $GIT : utilisateur propriétaire des dépots
* dépôts présent dans /home/$GIT/repositories
* accès git:// depuis $GIT@votre-domaine.tld
~~~
GIT='git'
~~~
Configuration du vhost :
~~~
cat > /etc/nginx/sites-available/gitweb_$GIT <<VHOST
server {
server_name $GIT.$(hostname -d);
listen 0.0.0.0:80;
listen [::]:80;
root /usr/share/gitweb;
location / {
index gitweb.cgi;
include fastcgi_params;
gzip off;
fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
fastcgi_param GITWEB_PROJECTROOT /home/$GIT/repositories;
fastcgi_param GITWEB_PROJECTLIST /home/$GIT/projects.list;
if (\$uri ~ "/gitweb.cgi") {
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
}
access_log /var/log/nginx/gitweb.access.log;
error_log /var/log/nginx/gitweb.error.log;
}
VHOST
~~~
Activation du vhost :
~~~
ln -s /etc/nginx/sites-available/gitweb_$GIT /etc/nginx/sites-enabled/gitweb_$GIT
~~~
Donne l'accès en lecture au dépôts à l'utilisateur www-data :
~~~
addgroup www-data $GIT
~~~
Redémarre le démon fcgiwrap :
~~~
service fcgiwrap restart
~~~

117
HowtoGlassFish.md Normal file
View File

@ -0,0 +1,117 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Glassfish
<http://glassfish.java.net/documentation.html>
## Installation Glassfish 2
Installer le JDK Java 6 :
~~~
# aptitude install sun-java6-jdk
~~~
Créer un utilisateur glassfish et l'utiliser :
~~~
# useradd -m -d /srv/glassfish glassfish
# su glassfish
~~~
Télécharger la dernière version du logiciel (exemple pour Glassfish 2.1.1) :
~~~
$ wget <http://download.java.net/javaee5/v2.1.1_branch/promoted/Linux/glassfish-installer-v2.1.1-b31g-linux.jar>
~~~
Exécuter le JAR :
~~~
$ java -Xmx256m -jar glassfish-installer-v2.1.1-b31g-linux.jar
~~~
Se déplacer dans le répertoire `glassfish` et positionner les droits sur les binaires :
~~~
$ cd glassfish
$ chmod -R +x lib/ant/bin/*
~~~
Exécuter _ant_ (on fait ici une installation en mode _cluster_) :
~~~
$ lib/ant/bin/ant -f setup-cluster.xml
~~~
### Démarrage
Exécuter la commande suivante, et patienter le temps du chargement :
~~~
$ ./bin/asadmin start-domain
~~~
L'interface d'admin est alors normalement disponible sur le port TCP/4848.
Note : attention, bien ajuster le fichier _/etc/hosts_ sous peine d'obtenir une erreur du type :
`[...] Unable to determine local hostname from InetAddress.getLocalHost().getHostName() [...] `
### Enregistrer le mot de passe admin
~~~
$ ./bin/asadmin login
~~~
Puis saisir l'identifiant et le mot de passe du compte admin.
Ces infos seront sauvées dans `$HOME/.asadminpass`.
Note : attention, il faut avoir démarrer (start-domain) avant de pouvoir faire cette commande
### Pour modifier le mot de passe admin
* Modifier dans l'interface d'admin de Glassfish
* Supprimer `$HOME/.asadminpass`
* relancer asadmin start-domain et suivre les instructions...
### Notes
* Ports à voir
* Script d'init.d à positionner
* Pour utiliser l'admin, éviter Firefox (pages blanches)
## Installation Glassfish 3 ou 4
v3.0 : <http://glassfish.java.net/downloads/3.1-final.html>
v3.1 : <http://glassfish.java.net/downloads/v3-final.html>
v4 : <https://glassfish.java.net/download.html>
~~~
$ wget <http://download.java.net/glassfish/3.1/release/glassfish-3.1.zip>
$ unzip glassfish-3.1.zip
$ cd glassfishv3
$ ./bin/asadmin
Use "exit" to exit and "help" for online help.
asadmin> version
Version string could not be obtained from Server [localhost:4848] for some reason.
(Turn debugging on e.g. by setting AS_DEBUG=true in your environment, to see the details).
Using locally retrieved version string from version class.
Version = GlassFish Server Open Source Edition 3.1 (build 43)
Command version executed successfully.
asadmin> exit
Command multimode executed successfully.
~~~
### 4.1
~~~
# adduser --disabled-password glassfish
# sudo -iu glassfish
$ wget <http://download.java.net/glassfish/4.1/release/glassfish-4.1.zip>
$ unzip glassfish-4.1.zip
~~~

23
HowtoGratuitousARP.md Normal file
View File

@ -0,0 +1,23 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Gratuitous ARP
## Compilation de send_arp.c
send_arp.c est le code source de l'utilitaire fourni dans HeartBeat pour générer des Gratuitous ARP.
~~~
$ wget <http://hg.linux-ha.org/dev/raw-file/7ea7c05d3ed3/tools/send_arp.linux.c>
~~~
Commentez la ligne 348 et 366, puis compiler avec gcc (vous devez avoir le paquet build-essential d'installé) :
~~~
gcc send_arp.linux.c -o send_arp
~~~
Pour générer un gratuitous ARP :
~~~
send_arp -U -c 3 -I eth3 IP && send_arp -A -c 3 -I eth3 IP
~~~

177
HowtoHDPARM.md Normal file
View File

@ -0,0 +1,177 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto HDPARM
HDPARM est un outil pour visualiser et changer les paramètres d'un disque IDE (PATA et SATA).
## Commandes HDPARM utiles
Voir les caractéristiques d'un disque :
~~~
# hdparm -i /dev/hda
/dev/hda:
Model=QUANTUM FIREBALL SE2.1A, FwRev=API.0D00, SerialNo=632804253921
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=4092/16/63, TrkSize=32256, SectSize=512, ECCbytes=4
BuffType=DualPortCache, BuffSize=80kB, MaxMultSect=16, MultSect=off
CurCHS=4092/16/63, CurSects=4124736, LBA=yes, LBAsects=4124736
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: sdma0 sdma1 sdma2 mdma0 mdma1 mdma2 udma0 udma1 *udma2
AdvancedPM=no
Drive Supports : Reserved : ATA-1 ATA-2 ATA-3
# hdparm -i /dev/sda
/dev/sda:
Model=INTEL SSDSA2M080G2GC, FwRev=2CV102HD, SerialNo=CVPO037003CR080JGN
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=1
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=156301488
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5 udma6
AdvancedPM=no WriteCache=enabled
Drive conforms to: ATA/ATAPI-7 T13 1532D revision 1: ATA/ATAPI-2,3,4,5,6,7
* signifies the current active mode
~~~
Voir les paramètres d'un disque :
~~~
# hdparm /dev/sda
/dev/sda:
multcount = 1 (on)
IO_support = 1 (32-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry # 9729/255/63, sectors 156301488, start = 0
~~~
Tester les performances d'accès au disque *sans* système de cache (cette opération doit
être faite sur un système inactif et répétée 2 ou 3 fois pour être significative) :
~~~
# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 384 MB in 3.01 seconds = 127.37 MB/sec
# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 386 MB in 3.01 seconds = 128.45 MB/sec
# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 388 MB in 3.01 seconds = 128.84 MB/sec
~~~
Tester les performances d'accès au disque *avec* système de cache (cette opération doit
être faite sur un système inactif et répétée 2 ou 3 fois pour être significative) :
~~~
# hdparm -T /dev/sda
/dev/sda:
Timing cached reads: 12192 MB in 2.00 seconds = 6099.63 MB/sec
# hdparm -T /dev/sda
/dev/sda:
Timing cached reads: 16332 MB in 2.00 seconds = 8172.65 MB/sec
# hdparm -T /dev/sda
/dev/sda:
Timing cached reads: 15110 MB in 2.00 seconds = 7560.25 MB/sec
~~~
Activer le DMA :
~~~
# hdparm -d1 /dev/hda
/dev/hda:
setting using_dma to 1 (on)
using_dma = 1 (on)
~~~
Activer le 32-bit I/O support :
~~~
# hdparm -c1 /dev/hda
/dev/hda:
setting 32-bit I/O support flag to 1
I/O support = 1 (32-bit)
~~~
Désactiver le write cache :
~~~
# hdparm -W0 /dev/sda
/dev/sda:
setting drive write-caching to 0 (off)
write-caching = 0 (off)
~~~
## Optimisations d'un disque PATA
On observe les temps d'accès d'un disque :
~~~
# hdparm -tT /dev/hda
/dev/hda:
Timing buffer-cache reads: 128 MB in 2.79 seconds = 45.88 MB/sec
Timing buffered disk reads: 64 MB in 12.99 seconds = 4.93 MB/sec
~~~
On observe l'état de votre disque :
~~~
# hdparm /dev/hda
/dev/hda:
multcount = 0 (off)
I/O support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
nowerr = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry # 1023/64/63, sectors 4124736, start = 0
busstate = 1 (on)
~~~
On choisir d'activer le DMA et le 32 bit :
~~~
# hdparm -d1 -c1 /dev/hda
/dev/hda:
setting 32-bit I/O support flag to 1
setting using_dma to 1 (on)
I/O support = 1 (32-bit)
using_dma = 1 (on)
~~~
Puis on reteste notre disque :
~~~
# hdparm -tT /dev/hda
/dev/hda:
Timing buffer-cache reads: 128 MB in 2.78 seconds = 46.04 MB/sec
Timing buffered disk reads: 64 MB in 7.04 seconds = 9.09 MB/sec
~~~

165
HowtoHG.md Normal file
View File

@ -0,0 +1,165 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Mercurial
<http://mercurial.selenic.com/guide/>
Sous Debian, pour installer Mercurial :
~~~
# aptitude install mercurial
~~~
## Utilisation
Configurer son client :
~~~
$ cat ~/.hgrc
[ui]
username = John Doe <jdoe@example.com>
verbose = True
~~~
Créer un dépôt :
~~~
$ mkdir -p foo && cd foo
$ hg init
~~~
Cloner un dépôt :
~~~
$ hg clone <http://hg.example.com/repo1>
destination directory: repo1
requesting all changes
adding changesets
adding manifests
adding file changes
added 40 changesets with 85 changes to 19 files
updating working directory
15 files updated, 0 files merged, 0 files removed, 0 files unresolved
~~~
Ajouter un nouveau fichier au dépôt :
~~~
$ hg add monfichier
~~~
Valider les modifications apportées au dépôt :
~~~
$ hg commit
Mon message de commit
HG: Enter commit message. Lines beginning with 'HG:' are removed.
HG: --
HG: user: user@host
HG: branch 'default'
HG: changed monfichier
~~~
Envoyer les modifications sur le dépôt :
~~~
$ hg push
pushing to <http://hg.example.com/repo1>
http authorization required
realm: Password protected
user: user@host
password:
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
~~~
Récupérer la dernière version d'un dépôt :
~~~
$ hg pull
searching for changes
no changes found
~~~
Placer le _working directory_ dans une version particulière :
~~~
$ hg update 19
9 files updated, 0 files merged, 4 files removed, 0 files unresolved
~~~
## HGWEB
HGWEB sert à naviguer dans les dépôts par une interface web, mais surtout
à utiliser Mercurial via HTTP.
~~~
# aptitude install libapache2-mod-wsgi
# mkdir /home/hg
# cp /usr/share/doc/mercurial-common/examples/hgweb.wsgi /home/hg/
# sed -i 's@/path/to/repo/or/config@/home/hg/hgweb.config@' /home/hg/hgweb.wsgi
# cat /home/hg/hgweb.config
[paths]
test = /home/hg/test
coin = /home/hg/coin
[web]
#allow_push = *
baseurl = /
push_ssl = false
# chown -R www-data:www-data /home/hg
~~~
Il reste maintenant à activer un VirtualHost.
Par exemple avec un authentification LDAP :
~~~
<VirtualHost *:80>
ServerName hg.example.com
DocumentRoot /home/hg/www
#WSGIDaemonProcess hg user=hg group=hg processes=2 maximum-requests=5000
WSGIScriptAlias / /home/hg/hgweb.wsgi
<Directory />
Allow from all
Options ExecCGI FollowSymlinks
</Directory>
<Location />
AuthType Basic
AuthName "Reserved access"
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPURL "ldap://ldap.example.com:389/ou=people,dc=example,dc=com?uid?sub?(objectClass=*)"
Require ldap-group cn=hg,ou=group,dc=example,dc=com
<LimitExcept GET>
Require ldap-group cn=hg-push,ou=group,dc=example,dc=com
</LimitExcept>
</Location>
</VirtualHost>
~~~
Il reste à gérer les droits du répertoire /home/hg devant appartenir à l'utilisateur web
(par exemple via ACL ou Apache-ITK).
## FAQ
* Lorsque je push en SSH, j'obtiens :
~~~
remote: abandon : There is no Mercurial repository here (.hg not found) !
abandon : no suitable response from remote hg !
~~~
Il faut mettre un double slash (//) après le hostname. Voir notamment <http://jehaisleprintemps.net/blog/fr/2009/05/10/mercurial-et-ssh-le-piege-eviter/>
* Lorsque je push en HTTP, j'obtiens :
~~~
ssl required
~~~
Il faut passer en HTTPS. Si vraiment, on veut le faire en HTTP non sécurisé, il faut le forcer au niveau du serveur via _push_ssl = false_
Voir <http://mercurial.selenic.com/wiki/FAQ#FAQ.2FCommonProblems.I_get_an_.22ssl_required.22_error_message_when_trying_to_push_changes>

255
HowtoHearthbeat.md Normal file
View File

@ -0,0 +1,255 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Hearthbeat
Documentation officielle : <http://linux-ha.org/wiki/Heartbeat>
## Tuer un Hearthbeat planté
Pour tuer un heathbeat planté, il faut
~~~
root@> ps aux |grep hearthbeat
root@> kill -9 #pid
root@> /etc/init.d/hearthbeat stop
root@> /etc/init.d/hearthbeat start
~~~
Cela permet de tuer le binaire, libérer les ressources utilisées par hearthbeat, et redémarrer le service.
## Hearthbeat 3
À partir de Debian Squeeze c'est Heartbeat 3 qui est inclus dans les packages, de nombreuses choses ont changées, entre autres, le fichier de configuration principal.
Installation : `aptitude install heartbeat cluster-glue`
### Mettre en place un failover sans crm/pacemaker
[[Image(heartbeat_simple.png, 33%)]]
Dans un premier temps il faut définir les nom d'hôtes dans /etc/hosts ou avoir un serveur DNS qui les résoud.
~~~
192.168.0.1 ha-1
192.168.0.2 ha-2
~~~
Il faut ensuite authentifier les nœuds, en placant un md5 commun aux 2 dans /etc/ha.d/authkeys. Par exemple avec ` md5sum <<< 'un_mot_de_passe'`
~~~
auth 1
1 md5 12499c1b5fdbf25aa4abc05176904ca7
~~~
Ensuite il faut s'assurer que ce fichier ne soit lisible que par le root, pour cela on fait un chmod 600 sur le fichier authkeys.
Puis, le fichier de configuration, le plus simple possible :
Ici celui de ha-1.
~~~
#
# keepalive: how many seconds between heartbeats
#
keepalive 2
#
# deadtime: seconds-to-declare-host-dead
#
deadtime 10
#
# What UDP port to use for udp or ppp-udp communication?
#
udpport 694
bcast eth0
mcast eth0 225.0.0.1 694 1 0
ucast eth0 192.168.0.2
# What interfaces to heartbeat over?
udp eth0
#
# Tell what machines are in the cluster
# node nodename ... -- must match uname -n
node ha-1
node ha-2
~~~
Sur ha-2 il faut faire le même fichier de configuration mais remplacer la ligne `ucast eth0 192.168.0.2` par `ucast eth0 192.168.0.1`
Enfin, il faut indiquer le maître et l'adresse IP virtuelle que l'on veut utiliser, ainsi éventuellement qu'un service tel que apache2 dans le fichier `/etc/ha.d/haresources`
~~~
ha-1 192.168.0.10 apache2
~~~
Puis démarrer le service sur les 2 machines `/etc/init.d/heartbeat start`[[BR]]
On peut ensuite vérifier le bon fonctionnement avec juste un `ifconfig`[[BR]]
Note : heartbeat utilise la méthode des `gratuitous arp` quand le maître est _down_, l'esclave indique que l'adresse IP virtuelle n'est plus associé à l'adresse MAC connu par le client, mais l'adresse MAC de l'esclave, celui-ci remet donc son cache à jour.
Si l'on souhaite que le master ne reprenne pas la main s'il est à nouveau up après un down, il faut mettre `auto_failback off` dans `ha.cf`
### Mettre en place un failover avec crm/pacemaker et apache en service
Pour utiliser _crm_ il faut l'activer dans le `ha.cf` en mettant ` crm yes `[[BR]]
Il y a plusieurs façon de configurer crm :
* Le shell crm, un outil en ligne de commande puissant, cachant la configuration de type xml, avec une aide en ligne et la complétion ;
* High availability web konsole, un interface web en AJAX. Encore en développement ;
* L'interface graphique heartbeat, typiquement un éditeur xml avancé avec des boutons pour définir des actions, et voir le status ;
* DRBD-MC, une console de management codé en Java, contient de nombreux assistants.
On utilisera ici le shell crm avec des _templates_.
~~~
crm
cib new test
configure
template
list templates
~~~
Les templates par défaut sont les suivants :
~~~
crm(live)configure template# list templates
virtual-ip ocfs2 gfs2 filesystem apache clvm
gfs2-base
~~~
On veut utiliser le template apache :
~~~
new web apache
edit
~~~
Changer l'adresse IP virtuelle, l'id et le fichier de configuration apache.
~~~
ip 192.168.0.10
id web-1
configfile /etc/apache2/apache2.conf
~~~
Le fichier de template apache ressemble à ceci :
~~~
# Configuration: web
# Edit instructions:
#
# Add content only at the end of lines starting with '%%'.
# Only add content, don't remove or replace anything.
# The parameters following '%required' are not optional,
# unlike those following '%optional'.
# You may also add comments for future reference.
%name virtual-ip
# Virtual IP address
#
# This template generates a single primitive resource of type IPaddr
%pfx virtual-ip
%required
# Specify an IP address
# (for example: 192.168.1.101)
%% ip 192.168.0.10
%optional
# If your network has a mask different from its class mask, then
# specify it here either in CIDR format or as a dotted quad
# (for example: 24 or 255.255.255.0)
%% netmask
# Need LVS support? Set this to true then.
%% lvs_support
%name apache
# Apache web server
#
# This template generates a single primitive resource of type apache
%depends_on virtual-ip
%suggests filesystem
# NB:
# The apache RA monitor operation requires the status module to
# be loaded and access to its page (/server-status) allowed from
# localhost (127.0.0.1). Typically, the status module is not
# loaded by default. How to enable it depends on your
# distribution. For instance, on recent openSUSE or SLES
# releases, it is enough to add word "status" to the list in
# variable APACHE_MODULES in file /etc/sysconfig/apache2.
%pfx apache
%required
# Name the apache resource
# (for example: web-1)
%% id web-1
# The full pathname of the Apache configuration file
%% configfile /etc/apache2/apache2.conf
%optional
# Extra options to apply when starting apache. See man <httpd(8).>
%% options
# Files (one or more) which contain extra environment variables,
# such as /etc/apache2/envvars
%% envfiles
# Don't edit anything below this line.
%generate
primitive virtual-ip ocf:heartbeat:IPaddr
params ip=%virtual-ip:ip
opt cidr_netmask=%virtual-ip:netmask
opt lvs_support=%virtual-ip:lvs_support
primitive apache ocf:heartbeat:apache
params configfile=%apache:configfile
opt options=%apache:options
opt envfiles=%apache:envfiles
monitor apache 120s:60s
group %apache:id
apache virtual-ip
~~~
~~~
show
apply
cd ..
show
commit
~~~
~~~
location web-1-pref web-1 100: ha-1
property stonith-enabled=false
commit
^d
~~~
Il faut ensuite attendre que la configuration se propage sur le deuxième nœud.
### Divers
En clonant des machines virtuelles, Heartbeat garde le même uuid qu'il a généré auparavant, ce qui pose quelques soucis, car il ne sait plus qui est qui ... et dans le doute il reboot !
Pour re-générer les uuid, il faut supprimer le fichier /var/lib/heartbeat/hb_uuid
Logs :
~~~
root@ha-2:~# grep -B 10 Reboot /var/log/syslog
May 9 11:24:18 client cib: [1923]: info: register_heartbeat_conn: Hostname: ha-2
May 9 11:24:18 client cib: [1923]: info: register_heartbeat_conn: UUID: 66a8d84d-3fc6-402e-aa46-d433a1d5281b
May 9 11:24:18 client cib: [1923]: info: ccm_connect: Registering with CCM...
May 9 11:24:18 client cib: [1923]: WARN: ccm_connect: CCM Activation failed
May 9 11:24:18 client cib: [1923]: WARN: ccm_connect: CCM Connection failed 1 times (30 max)
May 9 11:24:18 client heartbeat: [1887]: WARN: nodename ha-1 uuid changed to ha-2
May 9 11:24:18 client heartbeat: [1887]: debug: displaying uuid table
May 9 11:24:18 client heartbeat: [1887]: debug: uuid=66a8d84d-3fc6-402e-aa46-d433a1d5281b, name=ha-1
May 9 11:24:18 client heartbeat: [1887]: WARN: Managed /usr/lib/heartbeat/ccm process 1922 killed by signal 11 [SIGSEGV - Segmentation violation].
May 9 11:24:18 client heartbeat: [1887]: ERROR: Managed /usr/lib/heartbeat/ccm process 1922 dumped core
May 9 11:24:18 client heartbeat: [1887]: EMERG: Rebooting system. Reason: /usr/lib/heartbeat/ccm
~~~

18
HowtoHtop.md Normal file
View File

@ -0,0 +1,18 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# HowtoHtop
## Voir les I/O
Htop depuis la version fourni dans squeeze dispose de sondes permettant d'identifier les écriture, lecture et performance sur les I/O.
On peut l'activer via le menu :
F2-->Columns-->Available Columns --> Ajouter les IO_* (F5, attention ils sont tout en bas de la liste !)
Sinon voici un .htoprc qui contient les colonnes avec les sondes d'I/O
~~~
fields=0 48 17 18 38 39 40 2 46 47 62 63 64 49 1
~~~
62 63 64 concernent les colonnes pour les sondes d'I/O.

185
HowtoIPMI.md Normal file
View File

@ -0,0 +1,185 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto IPMI
<http://www.intel.com/design/servers/ipmi/index.htm>
<http://buttersideup.com/docs/howto/IPMI_on_Debian.html>
modprobe ipmi_si
modprobe ipmi_devintf
ipmi message handler version 39.1
IPMI System Interface driver.
ipmi_si: Trying SMBIOS-specified kcs state machine at i/o address 0xca8, slave address 0x20, irq 0
ipmi: Found new BMC (man_id: 0x0002a2, prod_id: 0x0000, dev_id: 0x20)
IPMI kcs interface initialized
ipmi device interface
aptitude install openipmi
aptitude install ipmitool
cat /proc/devices | grep ipmi
NNN ipmidev
mknod -m 0600 /dev/ipmi0 c NNN 0
ipmitool lan print
ipmitool sensor
ipmitool sdr
over LAN :
usage: lan set <channel> <command> [option]
LAN set commands:
ipaddr <x.x.x.x> Set channel IP address
netmask <x.x.x.x> Set channel IP netmask
macaddr <x:x:x:x:x:x> Set channel MAC address
defgw ipaddr <x.x.x.x> Set default gateway IP address
defgw macaddr <x:x:x:x:x:x> Set default gateway MAC address
bakgw ipaddr <x.x.x.x> Set backup gateway IP address
bakgw macaddr <x:x:x:x:x:x> Set backup gateway MAC address
password <password> Set session password for this channel
snmp <community string> Set SNMP public community string
user Enable default user for this channel
access <on|off> Enable or disable access to this channel
arp response <on|off> Enable or disable BMC ARP responding
arp generate <on|off> Enable or disable BMC gratuitous ARP generation
arp interval <seconds> Set gratuitous ARP generation interval
auth <level> <type,..> Set channel authentication types
level = CALLBACK, USER, OPERATOR, ADMIN
type = NONE, MD2, MD5, PASSWORD, OEM
ipsrc <source> Set IP Address source
none = unspecified source
static = address manually configured to be static
dhcp = address obtained by BMC running DHCP
bios = address loaded by BIOS or system software
cipher_privs XXXXXXXXXXXXXXX Set RMCP+ cipher suite privilege levels
X = Cipher Suite Unused
c = CALLBACK
u = USER
o = OPERATOR
a = ADMIN
O = OEM
# ipmitool -I open lan set 1 "ipsrc" "static"
# ipmitool lan print 1
Set in Progress : Set In Progress
Auth Type Support : NONE MD2 MD5 PASSWORD
Auth Type Enable : Callback : MD2 MD5
: User : MD2 MD5
: Operator : MD2 MD5
: Admin : MD2 MD5
: OEM : MD2 MD5
IP Address Source : Static Address
IP Address : 0.0.0.0
Subnet Mask : 0.0.0.0
MAC Address : 00:13:72:50:42:42
SNMP Community String : public
IP Header : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10
=> interface Ethernet spécifique
<http://lonesysadmin.net/2007/06/21/how-to-configure-ipmi-on-a-dell-poweredge-running-red-hat-enterprise-linux/>
% ipmitool -I lan -H 1.2.3.169 -U root shell
bootdev <device> [clear-cmos=yes|no]
none : Do not change boot device order
pxe : Force PXE boot
disk : Force boot from default Hard-drive
safe : Force boot from default Hard-drive, request Safe Mode
diag : Force boot from Diagnostic Partition
cdrom : Force boot from CD/DVD
bios : Force boot into BIOS Setup
power :
cycle,reset = reboot
off,soft = extinction
on = demarrage
ipmitool shell
ipmitool> power status
Chassis Power is on
ipmitool> power cycle
Chassis Power Control: Cycle
ipmitool> user list
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
2 root true true true ADMINISTRATOR
ipmitool> session info all
session handle : 32
slot count : 5
active sessions : 1
user id : 2
privilege level : ADMINISTRATOR
session type : IPMIv1.5
channel number : 0x01
console ip : 1.2.3.4
console mac : 00:16:17:52:fa:87
console port : 33594
ipmitool> sel list
7 | Pre-Init Time-stamp | Power Supply #0x65 | Power Supply AC lost | Asserted
8 | Pre-Init Time-stamp | Power Supply #0x74 | Redundancy Lost
9 | 08/17/2007 | 15:46:15 | Power Supply #0x65 | Failure detected | Deasserted
a | 08/17/2007 | 15:46:16 | Power Supply #0x65 | Power Supply AC lost | Deasserted
b | 08/17/2007 | 15:46:16 | Power Supply #0x74 | Fully Redundant
c | 08/17/2007 | 15:46:35 | Memory #0x53 | Correctable ECC | Asserted
d | 08/17/2007 | 15:46:42 | Temperature #0x30 | Upper Critical going high
e | 08/17/2007 | 15:46:46 | Temperature #0x30 | Upper Critical going high
f | 08/17/2007 | 15:46:49 | Voltage #0x60 | Lower Critical going low
modprobe ipmi_watchdog
IPMI Watchdog: driver initialized
Copyright (C) 2004 MontaVista Software - IPMI Powerdown via sys_reboot.
modprobe ipmi_poweroff
IPMI poweroff: ATCA Detect mfg 0x2A2 prod 0x100
IPMI poweroff: Found a chassis style poweroff function
IP :
----
ipmitool> lan set 1 ipaddr 1.2.3.33
Setting LAN IP Address to 1.2.3.33
ipmitool> lan set 1 netmask 255.255.255.0
Setting LAN Subnet Mask to 255.255.255.0
ipmitool> lan print 1
ipmitool> lan set 1 access on
Users :
-------
ipmitool> user set password 2 <password>
ipmitool> user test 2 16 <good-pass>
Success
ipmitool> user test 2 16 <bad-pass>
Set User Password command failed (user 2): Unknown (0x80)
Failure: password incorrect
En réseau :
===========
% ipmitool -I lan -H 1.2.3.169 -U root shell
OpenBSD :
=========
# sysctl hw.sensors

47
HowtoIPTables.md Normal file
View File

@ -0,0 +1,47 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto IPTables
<http://netfilter.org/>
_netfilter_ est la couche de firewalling sous Linux, gérable via la commande *iptables*.
## Firewall sur un serveur
Sur un serveur, nous gérons le firewall avec le script *minifirewall*.
### minifirewall
<https://forge.evolix.org/projects/minifirewall>
Cela s'installe ainsi :
~~~
# [ -e /etc/firewall.rc ] && cp /etc/firewall.rc /etc/firewall.rc.bak
# cd /etc && wget "<https://forge.evolix.org/projects/minifirewall/repository/revisions/master/raw/firewall.rc"> -O firewall.rc
# cd /etc/init.d && wget "<https://forge.evolix.org/projects/minifirewall/repository/revisions/master/raw/minifirewall"> -O minifirewall
# chmod 700 /etc/init.d/minifirewall
# chmod 600 /etc/firewall.rc
~~~
On peut ensuite gérer les règles via le fichier _/etc/firewall.rc_ et on peut ainsi :
~~~
# /etc/init.d/minifirewall restart
# /etc/init.d/minifirewall stop
~~~
### Divers
En cas de besoin de bannir temporairement une adresse IP :
~~~
# iptables -I INPUT -s IP_PIRATE -j DROP
~~~
## NAT bidirectionnel
~~~
# iptables -t nat -A PREROUTING -i eth0 -d IP_publique -j DNAT --to-destination 10.1.2.3
# iptables -t nat -A POSTROUTING -o eth0 -s 10.1.2.3 -j SNAT --to-source IP_publique
~~~

231
HowtoISAKMPD.md Normal file
View File

@ -0,0 +1,231 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto VPN IPsec sous OpenBSD
Il existe deux méthodes pour mettre en place un VPN IPsec sous OpenBSD. La première est de créer un fichier de configuration /etc/isakmpd/isakmpd.conf. La seconde est d'utiliser /etc/ipsec.conf et sa syntaxe "pf-like" et de laisser ipsecctl s'occuper des politiques de flux et de l'établissement de la SA (Security association).
## Méthode isakmpd via isakmpd.conf
### Recharger isakmpd
Pour recharger la configuration d'ISAKMPD, il suffit de lui envoyer un SIGHUP.
Ceci ne provoque pas coupure VPN pour les phases 1 (IPSEC) mais un rechargement de
toutes les phases 2 !
~~~
pkill -HUP isakmpd
~~~
Note : attention, on a déjà constaté un plantage peu après un rechargement.
Il conviendra de surveiller attentivement qu'ISAKMPD tourne bien.
### Redémarrer isakmpd
Attention cela interrompt tous les VPN pendant quelques instants.
~~~
pkill isakmpd
isakmpd -v
~~~
### Consulter les logs
~~~
tail -f /var/log/messages | grep isakmpd
~~~
### Voir les routes
~~~
route -n show
~~~
Si isakmpd est bien lancé, une section Encap: doit apparaître.
### Voir les associations VPN
~~~
ipsecctl -s a
~~~
### Envoyer des commandes au daemon
Cela se fait en écrivant dans le fichier fifo /var/run/isakmpd.fifo.
La liste des commandes est disponible dans la page de man.
Exemple pour obtenir un rapport de l'état interne du daemon :
~~~
# echo r >/var/run/isakmpd.fifo
# cat /var/run/isakmpd.result
~~~
Pour avoir l'état de tous les VPNs :
~~~
# echo S >/var/run/isakmpd.fifo
# cat /var/run/isakmpd.result
~~~
Pour recharger les VPNs (équivalent au pkill -HUP) :
~~~
# echo R >/var/run/isakmpd.fifo
~~~
Pour stopper proprement le démon :
~~~
# echo Q >/var/run/isakmpd.fifo
~~~
Pour stopper un VPN (phase 1 ou 2) :
~~~
# echo "t main peer-XXXX" >/var/run/isakmpd.fifo
# echo "t quick XXXX" >/var/run/isakmpd.fifo
~~~
Pour relance un VPN (phase 1 ou 2... ce n'est pas clair. cela semble fonctionner pour la phase 1... à voir pour la phase 2).
~~~
# echo "c XXXX" >/var/run/isakmpd.fifo
~~~
*Note générale : attention, il peut un avoir un délai dans l'exécution des commandes*
### FAQ
Que veulent dire les messages suivants ?
~~~
isakmpd[7864]: dpd_handle_notify: bad R_U_THERE seqno 551411465 <= 2374875689
~~~
C'est un message relatif au DPD (Dead peer detection) qui est un mécanisme pour détecter des éventuels soucis avec VPN.
Voir <http://www.juniper.net/techpubs/software/erx/junose61/swconfig-routing-vol1/html/ipsec-config4.html#1329479>
~~~
isakmpd[7864]: attribute_unacceptable: AUTHENTICATION_METHOD: got PRE_SHARED, expected RSA_SIG
isakmpd[7864]: message_negotiate_sa: no compatible proposal found
isakmpd[7864]: dropped message from 192.0.2.1 port 500 due to notification type NO_PROPOSAL_CHOSEN
~~~
Il s'agit d'un routeur VPN distant qui essaye de se connecter, mais n'a pas de configuration correspondante.
Cela peut se produire typiquement si son adresse IP change, et qu'elle n'est plus présente dans la configuration d'ISAKMPD.
~~~
isakmpd[10418]: isakmpd: phase 1 done (as responder): initiator id 192.0.2.1, responder id 1.2.3.4, src: 1.2.3.4 dst: 192.0.2.1
isakmpd[10418]: dropped message from 192.0.2.1 port 500 due to notification type INVALID_ID_INFORMATION
isakmpd[10418]: message_validate_notify: protocol not supported
~~~
Cela signifie a priori que la configuration en face à un réseau "remote" incorrect (soit complètement faux, soit pas sous la forme ADRESSE RÉSEAU / MASQUE)
Voir <http://www.thegreenbow.com/support_flow.html?page=12105C&lang=fr>
### Debuger
~~~
# isakmpd -L -v -DA=90
# tcpdump -n -vs 1440 -r /var/run/isakmpd.pcap
~~~
## Méthode isakmpd via ipsec.conf
### Mise en place d'un VPN "simple" entre 2 machines OpenBSD
On dispose de :
* 2 passerelles VPN OpenBSD gw1 et gw2 (192.0.2.254 et 198.51.100.254)
* 2 LAN net1 et net2 correspondants (192.0.2.0/24 et 198.51.100.0/24)
Sur gw1 :
Vérifier que les sysctl suivants sont actifs :
~~~
# sysctl net.inet.esp.enable
net.inet.esp.enable=1
# sysctl net.inet.ah.enable
net.inet.ah.enable=1
# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 1 -> 1
~~~
Activer l'interface enc0 :
~~~
# ifconfig enc0 up
# echo up >/etc/hostname.enc0
~~~
Dans /etc/pf.conf, positionner :
~~~
set skip on {lo0 enc0}
pass in on $ext_if proto esp from $addr_gw2 to ($ext_if)
pass in on $ext_if proto udp from $addr_gw2 to ($ext_if) port {isakmp, ipsec-nat-t}
~~~
Dans /etc/ipsec.conf, positionner :
~~~
local_ip="192.0.2.254"
local_network="192.0.2.0/24"
remote_ip="198.51.100.254"
remote_network="198.51.100.0/24"
ike passive esp from $local_network to $remote_network peer $remote_ip
ike passive esp from $local_ip to $remote_network peer $remote_ip
ike passive esp from $local_ip to $remote_ip
~~~
Récupérer la clé pré-générée de l'autre passerelle :
~~~
# scp gw2:/etc/isakmpd/local.pub /etc/isakmpd/pubkeys/ipv4/198.51.100.254
~~~
Tester la configuration :
~~~
# ipsecctl -n -f /etc/ipsec.conf
~~~
Démarrer le service :
~~~
# isakmpd -K
# ipsecctl -f /etc/ipsec.conf
~~~
Puis effectuer les mêmes actions sur l'autre passerelle.
On doit alors pouvoir pinger chaque réseau à partir de l'autre passerelle ou de l'autre réseau.
Pour relancer un VPN il suffit de récupérer le nom des variables isakmpd générées par ipsectl via la commande suivante puis d'utiliser la même méthode qu'avec isakmpd.
~~~
# ipsecctl -nvf /etc/ipsec.conf
~~~
### Debug IPsec
Eteindre isakmpd :
~~~
# /etc/rc.d/isakmpd stop
~~~
Dans une console :
~~~
# isakmpd -d -DA=90 -K
~~~
Dans une autre console :
~~~
# ipsecctl -f /etc/ipsec.conf
~~~

346
HowtoISCSI.md Normal file
View File

@ -0,0 +1,346 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto iSCSI
<http://en.wikipedia.org/wiki/ISCSI>
Vocabulaire : l'initiator est le client iSCSI, le target est le serveur iSCSI.
## Installation d'un initiator
Sous Debian, l'utilitaire pour avoir un initiator iSCSI est fourni avec le paquet _open-isci_.
~~~
# aptitude install open-iscsi
~~~
S'assurer que _iscsid_ est bien démarré :
~~~
# /etc/init.d/open-iscsi start
~~~
Scanner les devices disponibles :
~~~
# iscsiadm -m discovery -t sendtargets -p IP_ADDRESS
~~~
### Configuration simple
Une configuration simple est lorsque vous avez une liaison iSCSI via une seule interface Ethernet.
Exemple pour attacher le device iSCSI :
~~~
# iscsiadm --mode node --targetname qn.2002-10.com.infortrend:raid.sn8128457.001 --portal IP_ADDRESS:3260 --login
Logging in to [iface: default, target: iqn.2002-10.com.infortrend:raid.sn8128457.001, portal: IP_ADDRESS,3260]
Login to [iface: default, target: iqn.2002-10.com.infortrend:raid.sn8128457.001, portal: IP_ADDRESS,3260]: successful
~~~
Un dmesg nous confirme que le device iSCSI est attaché :
~~~
[589633.268035] Loading iSCSI transport class v2.0-870.
[589634.206569] iscsi: registered transport (tcp)
[589634.533062] iscsi: registered transport (iser)
[590317.751042] scsi2 : iSCSI Initiator over TCP/IP
[590318.406292] scsi 2:0:0:0: Direct-Access IFT DS S12E-G2140-4 386C PQ: 0 ANSI: 5
[590318.500371] scsi 2:0:0:0: Attached scsi generic sg1 type 0
[590318.502537] scsi 2:0:0:1: Enclosure IFT DS S12E-G2140-4 386C PQ: 0 ANSI: 4
[590318.502613] scsi 2:0:0:1: Attached scsi generic sg2 type 13
[590318.568943] sd 2:0:0:0: [sda] 19528073216 512-byte logical blocks: (9.99 TB/9.09 TiB)
[590318.598211] sd 2:0:0:0: [sda] Write Protect is off
[590318.598214] sd 2:0:0:0: [sda] Mode Sense: 83 00 00 08
[590318.599120] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or
FUA
[590318.664632] sda: unknown partition table
[590318.703094] sd 2:0:0:0: [sda] Attached SCSI disk
[590318.725349] ses 2:0:0:1: Attached Enclosure device
~~~
### Gestion des volumes
Pour lister les sessions iSCSI ouvertes :
~~~
# iscsiadm -m session
~~~
Pour se déconnecter proprement d'un target (après avoir démonté les disques) :
~~~
# iscsiadm -m node -u
~~~
Pour déconnecter un seul LUN d'un target :
~~~
# iscsiadm -m node op=delete -T
# iscsiadm -m node login -T [iqn du LUN]
~~~
## Montage au démarrage
Une fois la configuration testée et validée, il est souhaitable que les volumes iSCSI soient montés automatiquement au démarrage du serveur.
### Connexion aux LUNs
Lorsqu'on lance la détection des volumes d'un target, ou que l'on se connecte à ce dernier, la commande _iscsiadm_ créée des fichiers de configuration dans /etc/iscsi/nodes et /etc/iscsi/send_targets.
Ces fichiers sont relativement simples à comprendre, mais une option nous intéresse plus particulièrement :
Dans le répertoire /etc/iscsi/nodes sont stockés les nodes auxquels nous nous sommes déjà connecté sous la forme :
~~~
[iqn]/[ip],[port],1/default
~~~
Par exemple, pour un SAN MD3600i en multipath nous avons :
~~~
# ls -l /etc/iscsi/nodes/iqn.1984-05.com.dell\:powervault.md3600i.36782bcb00050034200000xxxxxxxxxx/
drw------- 2 root root 4096 Oct 26 2011 192.168.130.101,3260,1
drw------- 2 root root 4096 Oct 26 2011 192.168.131.101,3260,1
~~~
Pour se connecter automatiquement aux LUNs au démarrage du serveur, il faut modifier la directive "node.startup" en la passant de "manual" à "automatic" :
~~~
# cat /etc/iscsi/nodes/iqn.1984-05.com.dell\:powervault.md3600i.36782bcb00050034200000xxxxxxxxxx/192.168.130.101\,3260\,1
node.name = iqn.1984-05.com.dell:powervault.md3600i.36782bcb00050034200000xxxxxxxxxx
node.tpgt = 1
node.startup = automatic
iface.iscsi_ifacename = default
iface.transport_name = tcp
node.discovery_address = 192.168.130.101
node.discovery_port = 3260
node.discovery_type = send_targets
[...]
~~~
### /etc/fstab
Lorsque les partition d'un device iSCSI sont ajoutées au fichier fstab, ne pas oublier l'option "_netdev": elle permet non seulement d'attendre que le réseau soit actif avant de chercher à monter la partition (pour ne pas bloquer le démarrage du serveur, ce serait dommage...) mais aussi de démonter la/les partitions à l'extinction de la machine avant de couper le réseau afin d'éviter toute corruption du filesystem (encore une fois, ce serait dommage).
~~~
/dev/mapper/data /home ext3 _netdev,defaults,noexec,nosuid,nodev 0 0
~~~
### Configuration avec deux interfaces et deux liaisons indépendantes vers un target
Vous configurez vos 2 interfaces sur une plage réseau différente. Vous pouvez ainsi
scanner le target sur 2 IPs complètement distinctes :
~~~
# iscsiadm -m discovery -t sendtargets -p IP_ADDRESS1
# iscsiadm -m discovery -t sendtargets -p IP_ADDRESS2
~~~
Puis attacher les devices deux fois indépendamment :
~~~
# iscsiadm --mode node --targetname qn.2002-10.com.infortrend:raid.sn8128457.001 --portal IP_ADDRESS1:3260 --login
# iscsiadm --mode node --targetname qn.2002-10.com.infortrend:raid.sn8128457.001 --portal IP_ADDRESS2:3260 --login
~~~
Vous pouvez ainsi accéder au target via plusieurs devices ! Pour gérer du multipath, voir ci-dessous.
### Configuration avec deux interfaces et liaison unique vers un target
Si vous êtes connectés avec d'autres initiator iSCSI (c'est souvent le cas), vous
serez sûrement connectés sur un switch dédié au iSCSI. Le target qui a en général
plusieurs interfaces Ethernet aura probablement des adresses IP sur la même plage.
Vous allez donc configurer vos deux interfaces avec des IPs sur la même plage :
~~~
# ifconfig eth2 10.0.0.100/24
# ifconfig eth3 10.0.0.101/24
~~~
Il faut alors créer des interfaces iSCSI pour chaque carte réseau :
~~~
# iscsiadm --mode iface --op=new --interface iscsi-0
New interface iscsi-0 added
# iscsiadm --mode iface --op=new --interface iscsi-1
New interface iscsi-1 added
# iscsiadm --mode iface --op=update --interface iscsi-0 --name=iface.net_ifacename --value=eth2
iscsi-0 updated.
# iscsiadm --mode iface --op=update --interface iscsi-1 --name=iface.net_ifacename --value=eth3
iscsi-1 updated.
# iscsiadm --mode iface
default tcp,<empty>,<empty>,<empty>,<empty>
iser iser,<empty>,<empty>,<empty>,<empty>
iscsi-0 tcp,<empty>,<empty>,eth2,<empty>
iscsi-1 tcp,<empty>,<empty>,eth3,<empty>
# iscsiadm --mode iface --interface iscsi-0
# BEGIN RECORD 2.0-871
iface.iscsi_ifacename = iscsi-0
iface.net_ifacename = eth2
iface.ipaddress = <empty>
iface.hwaddress = <empty>
iface.transport_name = tcp
iface.initiatorname = <empty>
# END RECORD
# iscsiadm --mode iface --interface iscsi-1
# BEGIN RECORD 2.0-871
iface.iscsi_ifacename = iscsi-1
iface.net_ifacename = eth3
iface.ipaddress = <empty>
iface.hwaddress = <empty>
iface.transport_name = tcp
iface.initiatorname = <empty>
# END RECORD
~~~
Puis attacher les devices deux fois via chaque interface iSCSI :
~~~
# iscsiadm --mode node --targetname qn.2002-10.com.infortrend:raid.sn8128457.001 --portal IP_ADDRESS:3260 -I iscsi-0--login
# iscsiadm --mode node --targetname qn.2002-10.com.infortrend:raid.sn8128457.001 --portal IP_ADDRESS:3260 -I iscsi-1 --login
~~~
On obtient donc plusieurs périphériques identiques. Pour gérer du multipath, voir ci-dessous.
## Multipath
ATTENTION, HOWTO EN COURS DE CONSTRUCTION...
Lorsque l'on a plusieurs paths vers un device (voir ci-dessus), l'idée est de
profiter de cela pour avoir une tolérance de panne et une agrégation des débits.
### Utilisation du multipath
~~~
aptitude install multipath-tools
modprobe dm_multipath
~~~
On peut voir les différents chemins pour accèder à un même périphérique :
~~~
# multipath -ll
3600d0231000b3f9e55030d29266ffe95 dm-2 IFT,DS S12E-G2140-4
size=1.8T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:0 sdd 8:48 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 8:0:0:0 sdg 8:96 active ready running
3600d0231000b3f9e6075561c390db5ce dm-4 IFT,DS S12E-G2140-4
size=836G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:2 sdf 8:80 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 8:0:0:2 sdi 8:128 active ready running
3600d0231000b3f9e68e8e32f513c36b5 dm-3 IFT,DS S12E-G2140-4
size=3.6T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:1 sde 8:64 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 8:0:0:1 sdh 8:112 active ready running
~~~
On doit ensuite configurer _multipathd_ via
un fichier */etc/multipath.conf*. Voici un exemple (utilisé
avec un SAN DELL MD3600i) :
~~~
defaults {
udev_dir /dev
polling_interval 5
user_friendly_names yes
}
# Blacklist tous les devices
devnode_blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^sd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}
# Définit les options de montage du multipath
devices {
device
{
vendor "DELL.*"
product "MD36xxi"
path_selector "round-robin 0"
# Agrège les débits
path_grouping_policy multibus
# Utilise le(s) lien(s) restant(s) au premier échec
failback immediate
no_path_retry fail
features "1 queue_if_no_path"
}
}
# Identifie par son WWID le(s) disque(s) à utiliser en multipath
# Le disque sera disponible dans /dev/mapper/data
multipaths {
multipath {
wwid 36782bcb00050034200000xxxxxxxxxx
alias data
}
}
~~~
On relance le daemon :
~~~
# /etc/init.d/multipath-tools restart
~~~
Et on vérifie :
~~~
# multipath -ll
data (36782bcb00050034200000xxxxxxxxxx) dm-0 DELL,MD36xxi
size=5.5T features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=2 status=active
|- 11:0:0:0 sde 8:64 active ready running
`- 10:0:0:0 sdf 8:80 active ready running
~~~
La politique multibus semble la plus intéressante car elle permet de gérer aussi bien le fail-over (en cas de perte d'un lien) que l'agrégation de débit.
L'option "failback immediate" indique de basculer sur le ou les lien(s) restant(s) dès qu'une erreur apparait, mais la bascule met 130s dans la configuration précédente, car c'est la couche SCSI qui remonte l'erreur à multipathd et le timeout par défaut d'open-iscsi est de 120 secondes. On peut régler la valeur de ce timeout dans le fichier /etc/iscsi/iscsid.conf pour les nouveaux targets, mais il ne faut pas oublier que les targets déjà configurés (même après déconnexion/reconnexion) conservent leurs paramètres dans /etc/iscsi/send_targets/[...], on modifiera donc également ces fichiers.
Exemple avec notre baie Dell :
~~~
# cat /etc/iscsi/nodes/iqn.1984-05.com.dell\:powervault.md3600i.36782bcb00050034200000xxxxxxxxxx/192.168.130.101\,3260\,1
node.name = iqn.1984-05.com.dell:powervault.md3600i.36782bcb00050034200000xxxxxxxxxx
node.tpgt = 1
node.startup = automatic
iface.iscsi_ifacename = default
iface.transport_name = tcp
node.discovery_address = 192.168.130.101
node.discovery_port = 3260
node.discovery_type = send_targets
[...]
node.session.timeo.replacement_timeout = 10
~~~
### Pour ne plus utiliser multipathd
Commencer par démonter les partitions :
~~~
# umount /dev/mapper/data
~~~
Stopper les utilitaires multipath :
~~~
# /etc/init.d/multipath-tools stop
~~~
Et purger la liste des différents paths pour la/les ressource(s) :
~~~
# multipath -F
~~~
On peut vérifier :
~~~
# multipath -ll
#
~~~
Éventuellement, on peut retirer les modules à présent inutilisés :
~~~
# rmmod dm_round_robin dm_multipath
~~~

356
HowtoIcinga2.md Normal file
View File

@ -0,0 +1,356 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Icinga2
## Introduction
Icinga2 est un logiciel de surveillance réseau qui vise à surveiller des services en place sur des serveurs.
Icinga2 se veut un remplacement pour Icinga, un fork bien établit de Nagios. Contrairement à Icinga, qui reprenait une partie du code de Nagios et qui avait un système de configuration compatible, Icinga2 a été complètement réécrit et n'est pas compatible avec Nagios.
## Structure
Il existe plusieurs manières de déployer Icinga2 pour surveiller un ensemble de machines. Il est important avant de commencer la mise en place d'Icinga2 de bien réfléchir à la manière dont on souhaite monter notre système. Trois architectures différentes sont possibles:
### Configuration locale
Dans cette configuration, les machines locales sont configurées pour se surveiller elles-même et envoyer au serveur central les résultats ponctuellement. La configuration réside sur les machines locales et est synchronisée avec le serveur central.
L'avantage de cette méthode est que les clients locaux peuvent écrire leurs configurations directement sans à avoir à passer par une gestion centralisée des tests et des configurations.
Plus ["d'infos ici"](https://github.com/Icinga/icinga2/blob/master/doc/6-distributed-monitoring.md#-bottom-up-import).
### Configuration en cluster
Le principe de la configuration en cluster est semblable à celui de la configuration locale. La seule différence est que la configuration des machines locales est faite sur le serveur central. Lorsque l'on redémarre le daemon, le serveur central s'assure que les machines locales ont la bonne configuration. Plutôt d'aller « du bas vers le haut » on va donc « du haut vers le bas ».
Cette méthode est idéale si l'on souhaite centraliser l'ensemble de notre configuration.
Plus ["d'infos ici"](https://github.com/Icinga/icinga2/blob/master/doc/6-distributed-monitoring.md#-top-down-config-sync).
### Pont d'exécution de commandes
Avec la méthode du pont d'exécution de commandes, l'ensemble des configurations sont sur le serveur central et y restent. Il n'y a pas de synchronisation de configuration avec les machines locales. Quand le serveur central souhaite effectuer une test sur une machine locale, il la lance directement sur cette dernière.
L'avantage de cette méthode est que les machines locales n'ont pas besoin d'avoir un daemon qui roule constamment pour effectuer les tests. Cela implique cependant que les machines locales doivent accepter des commandes directement du serveur central, ce qui est peut-être un peu moins sécuritaire.
Plus ["d'infos ici"](https://github.com/Icinga/icinga2/blob/master/doc/6-distributed-monitoring.md#-top-down-command-endpoint).
## Installation du master
### Core
L'installation du core d'`icinga2` sur le master est relativement simple. Cependant, la documentation disponible en ligne prends pour acquis que la version utilisée est celle disponible dans `jessie-backports`. Il faut donc s'assurer d'avoir la version 2.4 ou supérieure.
~~~
# apt -t jessie-backports install icinga2 icinga2-ido-mysql
~~~
Le package `icinga2-ido-mysql` fournit un assistant d'installation pour configurer une base de donnée MySQL automatiquement. Si on le souhaite, il est également possible de le faire manuellement.
Une fois l'installation terminée, il est nécessaire d'activer `ido-mysql`:
~~~
# icinga2 feature enable ido-mysql
~~~
Pour finaliser l'installation d'`icinga2` en master, nous allons créer un CA et activer l'API. La commande qui suit lance un assistant d'installation. Mis à part la première option où il faut répondre `n`, les autres peuvent être laissées vides:
~~~
# icinga2 node wizard
~~~
On s'assure finalement que l'ensemble des options voulues sont bien activées en redémarrant le daemon:
~~~
# service icinga2 restart
~~~
### WebUI
Pour fonctionner, le WebUI a besoin d'un serveur web et d'un serveur de base de donnée. Dans les exemples qui suivent, nous utiliseront [/HowtoLAMP/Apache Apache] et [/HowtoLAMP/MySQL MySQL].
Malheureusement, la version 2 du WebUI d'`icinga2` n'est pas dans Debian jessie à l'heure actuelle. Il est donc nécessaire soit d'utiliser les packages fournis par Icinga, ou alors d'utiliser la version dans Stretch.
Pour Stretch, il suffit de modifier `/etc/apt/sources.list` et de s'assurer d'avoir un fichier `/etc/apt/preferences` qui ressemble au suivant:
~~~
Explanation: Debian jessie
Package: *
Pin: release o=Debian,n=jessie
Pin-Priority: 990
Explanation: Debian stretch
Package: *
Pin: release o=Debian,n=stretch
Pin-Priority: 2
~~~
Une fois que cela est fait, on met à jour ses sources et on installe les packages nécessaires:
~~~
# apt update
# apt install icingaweb2
~~~
Il est possible de rouler des commande à partir du WebUI directement. Pour cela, il faut ajouter le user qui roule le WebUI dans Apache au groupe `nagios`. Avec `apache2-mpm-itk`, cette étape devrait être superflue car le WebUI devrait déjà rouler sous le user `nagios`:
~~~
# addgroup --system www-data nagios
# icinga2 feature enable command
# service icinga2 restart
~~~
On ajoute maintenant un VHost apache dans `/etc/apache2/sites-available/icinga2.conf`:
~~~
<VirtualHost *:80>
ServerName fqdn.org
DocumentRoot /usr/share/icingaweb2/public
<Directory "/usr/share/icingaweb2/public">
Options SymLinksIfOwnerMatch
AllowOverride None
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
SetEnv ICINGAWEB_CONFIGDIR "/etc/icingaweb2"
EnableSendfile Off
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
</IfModule>
<IfModule !mod_rewrite.c>
DirectoryIndex error_norewrite.html
ErrorDocument 404 /error_norewrite.html
</IfModule>
</Directory>
</VirtualHost>
~~~
On active ensuite le VHost et on redémarre apache:
~~~
# a2ensite icinga2.conf
# service apache2 reload
~~~
Pour continuer l'installation du WebUI, on visite le <http://fqdn.org/setup.> L'installeur va nous demander un token. On peut créer ce token avec la commande suivante:
~~~
# icingacli setup token create
~~~
La prochaine étape de l'assistant vous demande quelles fonctions activer. Il est recommandé de choisir `Doc` et `Monitoring`.
L'assistant lance ensuite une série de tests. Il est important de s'assurer que tous les tests sont OK. Il est normal que les tests PostgreSQL s'affichent en jaune, car on utilise MySQL.
Icingaweb2 offre plusieurs backends d'authentification. Pour une grande organisation, il est préférable d'utiliser le backend LDAP. Pour quelques comptes, il est cependant plus simple d'utiliser le backend basé sur une base de donnée.
Si l'on choisi un backend base de donnée, il suffit de renter les informations d'authentification que l'on souhaite avoir. Le WebUI va ensuite nous aviser que la base de donnée n'existe pas encore et nous demander le mot de passe root pour en créer une pour nous. Encore une fois, il est possible de faire cela directement en ligne de commande avec MySQL.
Après avoir finalisé les informations pour l'authentification, il vous faudra donner au WebUI l'accès à la base de donnée créée précédemment pour icinga2. Les informations d'authentification se trouvent dans `/etc/icinga2/features-available/ido-mysql.conf`.
Et voilà! Votre WebUI devrait être en place et vous devriez pouvoir vous connecter au <http://fqdn.org.>
## Installation du client
### Configuration du lien master-client
Par défaut, quand on installe `icinga2` sur une machine, le daemon est lancé et `icinga2` se met à surveiller le `localhost`. Pour cette documentation, nous allons monter une architecture de surveillance de type [#Configurationencluster "configuration en cluster"]. Cela va nous permettre de pouvoir centraliser la configuration à un seul endroit et de la gérer à travers Git.
Attention! La seule commande `icinga2 node <paramètre>` que l'on devrait rouler avec ce type de configuration est `icinga2 node wizard` au tout début du processus d'installation.
Malgré les apparences, `icinga2 node update-config` ou encore `icinga2 node add` s'appliquent à une configuration de type locale. Il ne faut donc pas les utiliser en cluster!
On commence donc par installer `icinga2`:
~~~
# apt -t jessie-backports install icinga2 icinga2-ido-mysql
~~~
Une fois que cela est fait, on roule l'assistant de configuration:
~~~
# icinga2 node wizard
~~~
L'assistant nous pose plusieurs questions. On y répond de la manière suivante:
~~~
Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]: y
Starting the Node setup routine...
Please specifiy the common name (CN) [icinga2-slave1]:
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): icinga2-master
Do you want to establish a connection to the master from this node? [Y/n]: y
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): 192.168.4.229
Master endpoint port [5665]:
Add more master endpoints? [y/N]: n
Please specify the master connection for CSR auto-signing (defaults to master endpoint host):
Host [192.168.4.229]:
Port [5665]:
warning/cli: Backup file '/etc/icinga2/pki/icinga2-slave1.key.orig' already exists. Skipping backup.
warning/cli: Backup file '/etc/icinga2/pki/icinga2-slave1.crt.orig' already exists. Skipping backup.
information/base: Writing private key to '/etc/icinga2/pki/icinga2-slave1.key'.
information/base: Writing X509 certificate to '/etc/icinga2/pki/icinga2-slave1.crt'.
information/cli: Fetching public certificate from master (192.168.4.229, 5665):
Certificate information:
Subject: CN = icinga2-master
Issuer: CN = Icinga CA
Valid From: Aug 15 21:03:54 2016 GMT
Valid Until: Aug 12 21:03:54 2031 GMT
Fingerprint: D6 6F 56 55 3B 73 16 45 D5 08 F6 FB CE A6 2A 14 F5 24 05 11
Is this information correct? [y/N]: y
information/cli: Received trusted master certificate.
Please specify the request ticket generated on your Icinga 2 master.
(Hint: # icinga2 pki ticket --cn 'icinga2-slave1'): 4891c5c4c132908f2794d0ed347c9fbf204491aa
information/cli: Requesting certificate with ticket '4891c5c4c132908f2794d0ed347c9fbf204491aa'.
warning/cli: Backup file '/etc/icinga2/pki/icinga2-slave1.crt.orig' already exists. Skipping backup.
information/cli: Writing signed certificate to file '/etc/icinga2/pki/icinga2-slave1.crt'.
information/cli: Writing CA certificate to file '/etc/icinga2/pki/ca.crt'.
Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:
Accept config from master? [y/N]: y
Accept commands from master? [y/N]: n
~~~
À noter qu'à l'étape où l'assistant demande le ticket généré sur le master, il faut rouler la commande suivante sur le master et copier l'output dans l'assistant:
~~~
icinga2 pki ticket --cn '<nom du client>'
~~~
Si client reconnaît maintenant le master, il est nécessaire de configurer le master pour qu'il reconnaisse le client. On va donc modifier le fichier `zones.conf` sur le master y ajouter la `zone` et le `endpoint` du nouveau client:
~~~
[...]
object Endpoint "icinga2-slave1" {
host = "<adresse ip du client>"
}
object Zone "icinga2-slave1" {
endpoints = [ "icinga2-slave1" ]
parent = "master"
}
~~~
Et voilà! En théorie, le master et le client peuvent se parler! Comme nous n'avons pas encore configuré de test sur le nouveau client, il est normal qu'il n'apparaisse pas dans le WebUI.
### Ajout de tests sur le client
Avec le type de configuration que l'on a choisi, les fichiers de configuration sont modifiés sur le master, qui les synchronise sur le client.
Nous allons donc ajouter nos tests sur le master dans `zones.d`, le dossier prévu à cet effet. On commence par y créer un nouveau dossier du nom du client que l'on souhaite configurer:
~~~
# mkdir /etc/icinga2/zones.d/icinga2-slave1
~~~
Dans ce dossier, on crée un fichier nommé `hosts.conf` qui va nous servir à définir un nouvel objet de type `Host`. Cet objet va nous permettre par la suite de lier d'autres types d'objets à notre nouveau client:
~~~
object Host "icinga2-slave1" {
check_command = "hostalive"
address = "<adresse ip du client>"
zone = "master"
}
~~~
On peut maintenant ajouter de nouveaux tests dans `services.conf`, des objets de type `Service`:
~~~
object Service "disk" {
host_name = "icinga2-slave1"
check_command = "disk"
}
object Service "ssh" {
host_name = "icinga2-slave1"
check_command = "ssh"
}
~~~
Pour que la synchronisation se fasse entre le master et le client, on redémarre `icinga2` sur le master:
~~~
# service icinga2 reload
~~~
Si tout s'est passé correctement, vous devriez voir apparaître une nouvelle machine dans le WebUI, accompagné de trois nouveaux services, `ping4`, `disk` et `ssh`.
## Fichiers de configuration
Les fichiers de configuration se trouvent dans `/etc/icinga2`. Tous les fichiers de configuration utilisent la même syntaxe. Il existe d'ailleurs un plugin vim pour cette dernière:
~~~
# apt -t jessie-backports install vim-icinga2
~~~
La configuration d'icinga2 se base principalement sur des objets de types différents. Par exemple, l'objet `Service` sert à définir un service à vérifier sur une machine, alors que l'objet `Host` définit un nouveau client. On peut retrouver une description détaillée de tous les objets [ici](http://docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter/object-types).
En général, l'emplacement des objets n'est pas réellement important. Dans l'exemple plus haut, on aurait ainsi pu ajouter l'objet `Host` dans le fichier `/etc/icinga2/zones.d/icinga2-slave1/mega_foobar.conf` au lieu de `/etc/icinga2/zones.d/icinga2-slave1/hosts.conf`. C'est cependant un bonne pratique de séparer clairement ses différents objets en fichiers nommés de manière claire.
### init.conf
Le premier fichier à être lu au démarrage du daemon. Il sert à définir sous quel groupe et quel user le daemon est lancé.
### icinga2.conf
Le fichier de configuration principal. Il sert surtout à définir les fichiers de configuration qui seront lus, comme `/features-enabled/*` par exemple. Ce fichier est le second à être lu au démarrage du daemon.
### constants.conf
Ce fichier regroupe les constantes globales d'Icinga2. On y trouve entre autres le Salt pour la génération de tokens et le nom de domaine du master (`NodeName`).
### zones.conf
Ce fichier sert à définir les relations entre le master et les clients, comme démontré dans l'exemple de configuration plus haut.
### features-available
Les fichiers dans ce dossier sont des plugins qui peuvent être activés avec les commandes suivantes:
~~~
# icinga2 feature enable <nom du plugin>
# service icinga2 reload
~~~
Une fois activés, il sont symlinkés dans `/features-enabled`, un peu comme pour Apache.
### pki
Ce dossier regroupe les fichiers du Public Key Infrastructure (PKI), qui servent de base d'authentification entre les clients et le master. Dans le cas du master, certains fichiers sont des duplicatas de fichiers dans `/var/lib/icinga2/ca/`.
### scripts
Ce dossier regroupe les différents scripts qui sont lancés lors d'un événement. Par exemple, c'est ici que l'on ajouterais de nouveaux scripts à être lancé pour des objets de type `EventCommand`.
### conf.d
Ce dossier regroupe les configurations de services sur le master et les configuration plus globales, comme les définitions de users et de groupes, ou encore les différents modes de surveillance (24h/7, 8 à 17h, etc.).
### repository.d et zones.d
`repository.d` regroupe les configurations des clients lors d'une synchronisation de type locale. À l'inverse, pour une configuration de type cluster, les fichiers se retrouveraient plutôt dans le dossier `zones.d`.

52
HowtoInitramfsDebug.md Normal file
View File

@ -0,0 +1,52 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Initramfs debug
Inspiré de [<https://wiki.debian.org/InitramfsDebug>] et [<https://wiki.debian.org/CryptsetupDebug>]
On a pu constater lors de mise à jour noyau des soucis lors de la regération de l'initramfs sur des portables Debian Jessie avec des partitions chiffrées
## En cas de soucis au démarrage du type
~~~
Reading all physical volumes. This may take a while ...
No volume groups found
~~~
On obtient souvent avant l'invit initramfs et busybox une note du type
~~~
Alert ! /dev/disk/by-uuid/dc0e0033-1e4c-41f9-8ebb-e3d3f8e03459 does not exist. Dropping to a shell!
~~~
C'est souvent lié à un changement mal géré de UUID sur l'une des partitions (notamment chiffré voire plus rarement un cas de mauvaise gestion d'ajout de partition en LVM [non traité ici] )
Il faut avoir en tête que la syntaxe de /etc/crypttab (fichier listant les partitions qui seront déchiffrés au démarrage [[<http://trac.evolix.net/infogerance/wiki/HowtoChiffrementData>]])
peut être soit :
~~~
sda7_crypt UUID=459a6a8b-0e49-4ba2-b436-6b97400bf761 none luks
~~~
ou
~~~
sda7_crypt /dev/sda7 none luks
~~~
Le conseil est donc à l'aide de [<http://trac.evolix.net/infogerance/wiki/HowtoLiveCD>] de se chroot sur le système (sans oublier d'efi) et de modifier le /etc/crypttab (voire /etc/fstab) avec des /dev/sdaX plutôt que les UUID (à moins de les valider/verifier avec _ls -l /dev/disk/by-uuid_ ou _blkid_)
L'autre conseil est de ne pas utiliser l'utilitaire update-initramfs pour regénérer les initrd.img du type
~~~
update-initramfs -k -all -u
~~~
## Préférer la méthode suivante
(en ayant fait un backup de votre /boot/initrd.img-${uname -r} (ex : /boot/initrd.img-3.16.0-4-amd64 )) :
~~~
cd /boot/initramfs
find . | cpio -H newc --create --verbose | gzip -9 > ../initrd.img-${uname -r}
~~~
Puis réinstallez grub

57
HowtoIrssi.md Normal file
View File

@ -0,0 +1,57 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto irssi
<https://irssi.org/documentation/>
## Syntaxe Vim irssilog
~~~
$ mkdir -p ~/.vim/syntax
$ wget '<http://www.vim.org/scripts/download_script.php?src_id=10584'> -O ~/.vim/syntax/irssilog.vim
vim 2016-08.log
:syntax on
:set syntax=irssilog
~~~
## Gérer les "window"
~~~
/WINDOW show x # créer une vue splité sur la fenêtre x
/WINDOW close # fermer la fenêtre courante
/WINDOW shrink|grow # rétrécir ou agrandir la fenêtre courante
/WINDOW balance # taille des fenêtres visible à l'identique
/WINDOW move x # déplace la fenêtre actuelle sur le numéro x
/WINDOW move UP # déplace la fenêtre sur celle du dessus
/WINDOW number x # change le numéro de la fenêtre active
/WINDOW show x # séparer la frame en deux avec la fenêtre x affiché : il faut que le mode 'sticky' soit désactivé pour cette fenêtre /WINDOW stick off
/WINDOW log ON #activer les logs pour cette fenêtre <- afin de faire une surveillance sur le fichier ou autre possibilité
~~~
Ne pas hésiter à sauvegarder sa session actuelle (thème)
~~~
/SAVE
~~~
## Action selon touche pressé
~~~
/BIND ^[OP key F1
/BIND ^[11~ key F1
/BIND F1 /me a besoin d'aide !
~~~
## Envoyer une commande CTCP à un utilisateur
~~~
/CTCP user (PING|VERSION|USERINFO|CLIENTINFO|TIME)
~~~
## Scripts sur irssi
Créer ou copier les scripts dans ~/.irssi/scripts/
~~~
/SCRIPT load <chemin>
/SCRIPT unload <nom script>
~~~

113
HowtoJava.md Normal file
View File

@ -0,0 +1,113 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Java
<http://docs.oracle.com/javase/>
<http://openjdk.java.net/>
## Installation Java
Sous Debian 6, Sun Java 6 ou OpenJDK 6.
Sous Debian 7, OpenJDK 6 ou 7.
Sous Debian 8, OpenJDK 7 (ou 8 via backports).
### Installer OpenJDK 8 sous Debian 7
à compléter.
### Installer Oracle Java 8 sous Debian 7 et 8
Le plus simple est de créer un package automatiquement en utilisant le tar.gz du site oracle.
La procédure à suivre est ici : <https://wiki.debian.org/JavaPackage>
## Java sécurité
### Importer un certificat racine
Java stocke ces certificats dans un fichier, situé dans _/usr/lib/jvm/java-6-sun/jre/lib/security/cacerts_ (sous Debian).
Pour lister les certificats :
~~~
$ keytool -list -v -keystore /usr/lib/jvm/java-6-sun/jre/lib/security/cacerts
~~~
Pour importer un nouveau certificat, on peut utiliser la commande keytool :
~~~
$ keytool -import -v -file certificat.cer -alias <mykey> -keystore /usr/lib/jvm/java-6-sun/jre/lib/security/cacerts
~~~
(/usr/lib/jvm/java-6-sun/jre/lib/security/cacerts est en fait un lien symbolique vers /etc/java-6-sun/security/cacerts).
Il est ensuite demandé un mot de passe pour ouvrir la base de données des certificats. Par défaut, il s'agit de _changeit_.
Si vous ne précisez pas d'alias vous pourriez rencontrer l'erreur suivante :
~~~
keytool error: java.lang.Exception: Certificate not imported, alias <mykey> already exists
~~~
Basiquement, cela peut vouloir dire que le certificat a déjà été importé avec l'alias par défaut: mykey, il faudra donc trouver un autre nom pour importer le certificat.
Pour supprimer un certificat (parce qu'il est expiré par exemple) :
~~~
$ keytool -delete -keystore /usr/lib/jvm/java-6-sun/jre/lib/security/cacerts -alias <mykey>
~~~
### Java Cryptography Extension (JCE)
<http://gcolpart.evolix.net/blog21/jce-non-limitees-sous-debian/>
Sous squeeze :
Télécharger le fichier ici : <http://download.oracle.com/otn-pub/java/jce_policy/6/jce_policy-6.zip>
~~~
# dpkg-divert --add --rename --divert /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/US_export_policy.jar.debianorig /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/US_export_policy.jar
# dpkg-divert --add --rename --divert /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/local_policy.jar.debianorig /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/local_policy.jar
- (Télécharger sur votre poste) sur le site d'oracle : <http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html> | scp sur le serveur
# cd /home/$USER
# unzip jce_policy-6.zip
# cp jce/US_export_policy.jar /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/
# cp jce/local_policy.jar /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/
# chmod 644 /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/security/*.jar
~~~
Il faut aussi modifier `/etc/java-6-sun/security/java.security`, en mettant les lignes suivantes après `# List of providers and their preference orders (see above):`
~~~
security.provider.1=org.jasypt.hibernate.type.EncryptedStringType
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.provider.Sun
~~~
Sous Wheezy avec JRE Oracle (pas OpenJDK) :
Télécharger le fichier ici : <http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html>
~~~
# cd /home/$USER
# unzip UnlimitedJCEPolicyJDK7.zip
# cp UnlimitedJCEPolicy/US_export_policy.jar /usr/local/opt/jdk1.7.0_45/jre/lib/security/
# cp UnlimitedJCEPolicy/local_policy.jar /usr/local/opt/jdk1.7.0_45/jre/lib/security/
# chmod 644 /usr/local/opt/jdk1.7.0_45/jre/lib/security/*.jar
~~~
Il faut aussi modifier `/usr/local/opt/jdk1.7.0_45/jre/lib/security/java.security`, en mettant les lignes suivantes après `# List of providers and their preference orders (see above):`
~~~
security.provider.1=org.jasypt.hibernate.type.EncryptedStringType
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.provider.Sun
~~~

55
HowtoJenkins.md Normal file
View File

@ -0,0 +1,55 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# *Installation*
Jenkins nest pas disponible dans les dépôts Debian, il faut donc ajouter le dépôt comme suit:
~~~
wget -q -O - <https://jenkins-ci.org/debian/jenkins-ci.org.key> | sudo apt-key add -
sudo sh -c 'echo deb <http://pkg.jenkins-ci.org/debian-stable> binary/ > /etc/apt/sources.list.d/jenkins.list'
~~~
Ensuite on procède à linstallation:
~~~
apt update
apt install jenkins
~~~
# *Configuration*
Par défaut Jenkins utilise le port 8080, pour modifier cela, il faut modifier le fichier /etc/default/jenkins et remplacer la ligne suivante:
~~~
HTTP_PORT=8080
~~~
Par le port souhaité.
~~~
HTTP_PORT=XXXX
~~~
Le */home* de jenkins se trouve dans:
~~~
/var/lib/jenkins/
~~~
Il faut crée par exemple la clé ssh de jenkins dans ce répertoire, en ce connectant avec l'utilisateur jenkins en faisant:
~~~
su - jenkins
~~~
Puis générer la clé SSH.
## Vhost ngix / apache
Pour créer un vhost pour Jenkins avec nginx ou apache, cela se fait sans particularité spéciale voir les wiki associés:
[<http://trac.evolix.net/infogerance/wiki/HowtoNginx>]
[<http://trac.evolix.net/infogerance/wiki/HowtoLAMP/Apache>]

48
HowtoKVM/OpenBSD.md Normal file
View File

@ -0,0 +1,48 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto OpenBSD sous KVM
## Installation
~~~
$ kvm-img create -f qcow2 routeur0.qcow2 3G
Formatting 'routeur0.qcow2', fmt=qcow2 size=3221225472 encryption=off cluster_size=0
$ wget <http://mirror.evolix.org/pub/OpenBSD/4.8/amd64/cd48.iso>
# kvm -hda routeur0.qcow2 -cdrom cd48.iso -boot d -m 384 -k fr -net nic,model=e1000 -net tap,vlan=0,ifname=tap0
~~~
Ensuite on redémarre ainsi :
~~~
# kvm -hda routeur0.qcow2 -m 384 -k fr -net nic,model=e1000 -net tap,vlan=0,ifname=tap0
~~~
Attention, avant le démarrage d'OpenBSD, on doit désactiver _mpbios_ :
~~~
>> OpenBSD/adm64 BOOT 3.15
bsd> bsd -c
UKS> disable mpbios
52 mpbios0 disabled
UKS> quit
~~~
...puis, une fois démarré, on désactive définitivement :
~~~
# config -ef /bsd
disable mpbios
quit
~~~
## Avec libvirt
Dans cet exemple, on utilise les drivers virtio supportés dans OpenBSD depuis la 5.3 ( <http://www.openbsd.org/cgi-bin/man.cgi?query=virtio&manpath=OpenBSD%20Current&sektion=4&format=html> ).
On n'oublie pas de spécifier la disposition clavier, car elle peut poser problème lorsque l'on se connecte en VNC.
~~~
virt-install -r 1024 --vcpus=1 --os-variant=openbsd4 --accelerate -v -c install54.iso -w bridge:lan0,model=virtio --vnc --disk path=routeur0.img,bus=virtio --name routeur0 -k fr
~~~
Une fois l'installation terminée, la commande virsh start routeur0 permettra de démarrer la nouvelle VM.

29
HowtoKVM/Ubuntu.md Normal file
View File

@ -0,0 +1,29 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Ubuntu sous KVM
## Ubuntu 12.04 LTS server
Après installation, Ubuntu 12.04 LTS server lance un démarrage + ou - graphique (bootsplash & co).
Cela empêche d'avoir un accès "console" via KVM.
La solution est de désactiver le démarrage "graphique".
Dans le fichier /etc/default/grub décommenter la ligne :
~~~
GRUB_TERMINAL=console
~~~
Puis
~~~
# update-grub2
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.8.0-34-generic
Found initrd image: /boot/initrd.img-3.8.0-34-generic
Found linux image: /boot/vmlinuz-3.8.0-29-generic
Found initrd image: /boot/initrd.img-3.8.0-29-generic
Found memtest86+ image: /boot/memtest86+.bin
done
# reboot
The system is going down for reboot NOW!
~~~

11
HowtoKeepalived.md Normal file
View File

@ -0,0 +1,11 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Keepalived
<http://www.keepalived.org/documentation.html>
~~~
# aptitude install keepalived
~~~
Configuration via _/etc/keepalived/keepalived_

2
HowtoKernelTuning.md Normal file
View File

@ -0,0 +1,2 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**

18
HowtoLAMP.md Normal file
View File

@ -0,0 +1,18 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
## Dépôts DotDeb
Le dépôt [DotDeb](http://www.dotdeb.org/) contient des versions plus à jour des paquets apache2, mysql… pour la version stable de Debian. Il peut être intéressant de l'ajouter sur un serveur LAMP.
Pour l'utiliser, on ajoute simplement les lignes suivantes dans les sources d'apt :
~~~
deb <http://packages.dotdeb.org> stable all
deb-src <http://packages.dotdeb.org> stable all
~~~
Ensuite, on ajoute la clé publique du dépôt comme ceci :
~~~
gpg --keyserver keys.gnupg.net --recv-key 89DF5277
gpg -a --export 89DF5277 | sudo apt-key add -
~~~

95
HowtoLAMP/AwStats.md Normal file
View File

@ -0,0 +1,95 @@
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Awstats
## Installation
~~~
# aptitude install awstats
~~~
## Configuration
Pour commencer, on va déplacer la configuration d'origine dans un autre fichier afin de pouvoir créer de multiples configurations qui se baseront sur la configuration d'origine.
~~~
# cd /etc/awstats
# grep -v awstats.conf.local awstats.conf > awstats.conf.local
~~~
Le fichier _/etc/awstats/awstats.conf.local_ doit être adapté :
~~~
LogFormat=1
AllowFullYearView=3
WarningMessages=1
ErrorMessages="An error occured. Contact your Administrator"
~~~
Ensuite, on va créer modifier le fichier /etc/awstats/awstats.conf avec le contenu suivant :
~~~
Include "/etc/awstats/awstats.conf.local"
LogFile="/var/log/apache2/access.log"
SiteDomain="hosting.example.com"
DirData="/var/lib/awstats/"
ShowHostsStats=0
ShowOriginStats=0
ShowPagesStats=0
ShowKeyphrasesStats=0
ShowKeywordsStats=0
ShowHTTPErrorsStats=0
~~~
Ce fichier supprime tous les paramètres non anonyme et permet potentiellement d'avoir des statiques globales pour tous les sites d'un serveur.
Pour un site "classique", on créera un fichier _/etc/awstats/awstats.example.conf_ ainsi :
~~~
Include "/etc/awstats/awstats.conf.local"
LogFile="/home/example/log/access.log"
SiteDomain="www.example.com"
DirData="/home/example/awstats"
~~~
Pour générer les stats de façon régulière, cela se passe dans _/etc/cron.d/awstats_ :
~~~
0,10,20,30,40,50 * * * * root umask 033; [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.conf -a -r /var/log/apache2/access.log ] && /usr/lib/cgi-bin/awstats.pl -config=awstats -update >/dev/null
51 * * * * root umask 033; [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.example.conf -a -r /home/example/log/access.log ] && /usr/lib/cgi-bin/awstats.pl -config=example -update >/dev/null
~~~
Enfin, pour voir les icones Awstats, on rajoutera le fichier _/etc/apache2/cron.d/awstats.conf_ ainsi :
~~~
Alias /awstats-icon/ /usr/share/awstats/icon/
<Directory /usr/share/awstats/icon/>
Allow from all
</Directory>
~~~
## Debug
Voir la sortie comme le ferait apache :
~~~
# sudo -u vhost /usr/lib/cgi-bin/awstats.pl -config=vhost -output
~~~
Si erreurs de droits. Corriger. Exemple :
~~~
Can't locate mime.pm: ./mime.pm: Permission non accordée at /usr/lib/cgi-bin/awstats.pl line 2217.
~~~
## Astuces
### Ré-injecter tout les logs
Il faut fournir les logs au format texte et du plus vieux au plus récent dans le fichier nommé access.log.
~~~
# sudo -u vhost /usr/lib/cgi-bin/awstats.pl -config=vhost -update
~~~

Some files were not shown because too many files have changed in this diff Show More