Import automatique du Trac
This commit is contained in:
parent
e3ce6bb08f
commit
4436c13004
6
BaieTranstec/PROVIGO.md
Normal file
6
BaieTranstec/PROVIGO.md
Normal 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
90
CarteAPU.md
Normal 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
31
CarteRAID.md
Normal 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
17
CloudOVH.md
Normal 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
74
FreeBSD.md
Normal 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
202
HowToRedmine-Source.md
Normal 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
|
||||
~~~
|
36
HowToRedmine-Source/BDD/MySQL.md
Normal file
36
HowToRedmine-Source/BDD/MySQL.md
Normal 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
|
||||
~~~
|
42
HowToRedmine-Source/Delete.md
Normal file
42
HowToRedmine-Source/Delete.md
Normal 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
|
||||
~~~
|
47
HowToRedmine-Source/Migrate.md
Normal file
47
HowToRedmine-Source/Migrate.md
Normal 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 ~/
|
||||
~~~
|
43
HowToRedmine-Source/Plugins.md
Normal file
43
HowToRedmine-Source/Plugins.md
Normal 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"
|
||||
~~~
|
116
HowToRedmine-Source/Plugins/Redmine_git_hosting.md
Normal file
116
HowToRedmine-Source/Plugins/Redmine_git_hosting.md
Normal 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
|
18
HowToRedmine-Source/Plugins/Redmine_multiprojects_issue.md
Normal file
18
HowToRedmine-Source/Plugins/Redmine_multiprojects_issue.md
Normal 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].
|
16
HowToRedmine-Source/Plugins/Redmine_wiki_notes.md
Normal file
16
HowToRedmine-Source/Plugins/Redmine_wiki_notes.md
Normal 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].
|
66
HowToRedmine-Source/Rails/Puma.md
Normal file
66
HowToRedmine-Source/Rails/Puma.md
Normal 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
|
||||
~~~
|
23
HowToRedmine-Source/Save.md
Normal file
23
HowToRedmine-Source/Save.md
Normal 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
|
||||
~~~
|
77
HowToRedmine-Source/Update.md
Normal file
77
HowToRedmine-Source/Update.md
Normal 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
|
||||
~~~
|
82
HowToRedmine-Source/Web/Nginx.md
Normal file
82
HowToRedmine-Source/Web/Nginx.md
Normal 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
7
HowToSFTP.md
Normal 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
32
HowtoACL.md
Normal 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
105
HowtoAlfresco.md
Normal 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
800
HowtoAnsible.md
Normal 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
207
HowtoAsterisk.md
Normal 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
7
HowtoAtom.md
Normal 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
14
HowtoBNX2.md
Normal 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
74
HowtoBTRFS.md
Normal 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
28
HowtoBash.md
Normal 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
196
HowtoBenchmarks.md
Normal 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
469
HowtoBind.md
Normal 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
44
HowtoBogofilter.md
Normal 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
306
HowtoBuildRPM.md
Normal 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
120
HowtoCUPS.md
Normal 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
35
HowtoCacheHTTP.md
Normal 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
19
HowtoCacti.md
Normal 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
|
26
HowtoCentOS/Installation.md
Normal file
26
HowtoCentOS/Installation.md
Normal 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
40
HowtoCentOS/Reseau.md
Normal 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
133
HowtoChiffrementData.md
Normal 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 l’entê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 d’intérêt sont twofish et serpent, deux compétiteurs de l'AES face à Rijndael.
|
30
HowtoCompression.md
Normal file
30
HowtoCompression.md
Normal 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
16
HowtoCron.md
Normal 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
45
HowtoCrontab.md
Normal 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
473
HowtoCumulus.md
Normal 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
80
HowtoDHCP.md
Normal 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
80
HowtoDUC.md
Normal 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
81
HowtoDebian/Backports.md
Normal 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
32
HowtoDebian/Download.md
Normal 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
300
HowtoDebian/Install.md
Normal 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
|
||||
~~~
|
378
HowtoDebian/MigrationLennySqueeze.md
Normal file
378
HowtoDebian/MigrationLennySqueeze.md
Normal 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_
|
16
HowtoDebian/MigrationSqueezeLTS.md
Normal file
16
HowtoDebian/MigrationSqueezeLTS.md
Normal 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
|
||||
~~~
|
||||
|
443
HowtoDebian/MigrationSqueezeWheezy.md
Normal file
443
HowtoDebian/MigrationSqueezeWheezy.md
Normal 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'.
|
320
HowtoDebian/MigrationWheezyJessie.md
Normal file
320
HowtoDebian/MigrationWheezyJessie.md
Normal 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
137
HowtoDebian/Packages.md
Normal 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
11
HowtoDebian/Passwd.md
Normal 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
189
HowtoDebian/Repository.md
Normal 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
187
HowtoDebian/Reseau.md
Normal 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
21
HowtoDebian/Squeeze.md
Normal 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
98
HowtoDebian/liveCD.md
Normal 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
87
HowtoDiscourse.md
Normal 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
341
HowtoDjango.md
Normal 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
338
HowtoDovecot.md
Normal 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
5
HowtoEXT3.md
Normal 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
10
HowtoEchoping.md
Normal 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
139
HowtoEjabberd.md
Normal 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
141
HowtoEtherpad.md
Normal 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
51
HowtoEthtool.md
Normal 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
483
HowtoFAI.md
Normal 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
20
HowtoFMS.md
Normal 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
391
HowtoFail2Ban.md
Normal 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
33
HowtoFetchmail.md
Normal 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
7
HowtoFreeradius.md
Normal 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
2
HowtoGNS3.md
Normal 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
86
HowtoGParted.md
Normal 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
17
HowtoGPhoto.md
Normal 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
23
HowtoGRSEC.md
Normal 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
40
HowtoGaneti.md
Normal 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
43
HowtoGearman.md
Normal 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
35
HowtoGeoIP.md
Normal 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
17
HowtoGit/Github.md
Normal 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
48
HowtoGitDaemon.md
Normal 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
32
HowtoGitLab.md
Normal 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
76
HowtoGitWeb.md
Normal 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
117
HowtoGlassFish.md
Normal 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
23
HowtoGratuitousARP.md
Normal 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
177
HowtoHDPARM.md
Normal 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
165
HowtoHG.md
Normal 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
255
HowtoHearthbeat.md
Normal 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
18
HowtoHtop.md
Normal 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
185
HowtoIPMI.md
Normal 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
47
HowtoIPTables.md
Normal 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
231
HowtoISAKMPD.md
Normal 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
346
HowtoISCSI.md
Normal 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
356
HowtoIcinga2.md
Normal 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
52
HowtoInitramfsDebug.md
Normal 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
57
HowtoIrssi.md
Normal 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
113
HowtoJava.md
Normal 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
55
HowtoJenkins.md
Normal 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 n’est 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 à l’installation:
|
||||
|
||||
~~~
|
||||
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
48
HowtoKVM/OpenBSD.md
Normal 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
29
HowtoKVM/Ubuntu.md
Normal 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
11
HowtoKeepalived.md
Normal 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
2
HowtoKernelTuning.md
Normal 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
18
HowtoLAMP.md
Normal 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
95
HowtoLAMP/AwStats.md
Normal 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
Loading…
Reference in a new issue