<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/">




    



<channel rdf:about="http://howto.biapy.com/fr/articles-recents/RSS">
  <title>Articles récents</title>
  <link>http://howto.biapy.com</link>

  <description>
    
      Nouveautés publiées sur ce site.
    
  </description>

  

  
            <syn:updatePeriod>daily</syn:updatePeriod>
            <syn:updateFrequency>1</syn:updateFrequency>
            <syn:updateBase>2011-08-28T09:32:42Z</syn:updateBase>
        

  <image rdf:resource="http://howto.biapy.com/logo.png"/>

  <items>
    <rdf:Seq>
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/serveurs/php/installer-php-5-3-sur-debian-7-0-wheezy"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/developpement/installer-webgrind-sur-debian"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/developpement"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/systeme/virtualisation-avec-xen/configurer-xen-tools-sur-debian"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/systeme/virtualisation-avec-xen/installer-xen-sur-debian"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/systeme/logiciels/configurer-les-depots-de-sources-testing-sur-debian-stable"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/supervision/installer-monit-sur-debian"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/divers/installer-le-generateur-de-sprites-css-spriteme-sur-debian"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/applications-commerciales/installer-lapplication-de-gestion-des-utilisateurs-amember-pro-sur-debian"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/applications-commerciales"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/gestion-de-fichiers/installer-le-service-de-stockage-owncloud-sur-debian"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/serveurs/bases-de-donnees/trucs-et-astuces-pour-mysql"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/developpement/php"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/developpement/php/trucs-et-astuces-php"/>
      
      
        <rdf:li rdf:resource="http://howto.biapy.com/fr/debian-gnu-linux/serveurs/autres/installer-et-configurer-un-tunnel-vpn-l2tp-ipsec-sur-debian"/>
      
    </rdf:Seq>
  </items>

</channel>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/serveurs/php/installer-php-5-3-sur-debian-7-0-wheezy">
    <title>Installer PHP 5.3 sur Debian 7.0 Wheezy</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/serveurs/php/installer-php-5-3-sur-debian-7-0-wheezy</link>
    <description>Debian 7.0 Wheezy fournit par défaut PHP 5.4. Ce peut causer des incompatibilités avec certaines applications Web. Ce guide aide à installer PHP 5.3 depuis les dépôts DotDeb pour Squeeze sur Debian 7.0 Wheezy.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 7.0 Wheezy</li>
</ul>
<h2>Installation</h2>
<h3>Mise en place des dépôts</h3>
<p>Installez les prérequis d'installation:</p>
<pre>command apt-get install lsb-release</pre>
<p>Récupérez le nom de la distribution:</p>
<pre>DEBIAN_VERSION="$(command lsb_release -cs)"
</pre>
<p>Détectez le miroir utilisé par l'installation actuelle:</p>
<pre>MIRROR=$(command egrep "^deb.*${DEBIAN_VERSION}" '/etc/apt/sources.list' \<br />    | command egrep -v "updates|-src|cdrom" \<br />    | cut --delimiter=" " --fields=2)</pre>
<p>Ajoutez les dépôts Squeeze à la configuration Apt:</p>
<pre>DEBIAN_VERSION="squeeze"<br />command echo "# Debian contrib repository.<br />deb http://ftp.fr.debian.org/debian/ ${DEBIAN_VERSION} main<br />deb-src http://ftp.fr.debian.org/debian/ ${DEBIAN_VERSION} main<br /><br />deb http://security.debian.org/ ${DEBIAN_VERSION}/updates main<br />deb-src http://security.debian.org/ ${DEBIAN_VERSION}/updates main" \<br />    &gt; "/etc/apt/sources.list.d/${DEBIAN_VERSION}.list"</pre>
<p>Ajoutez les dépôts DotDeb Squeeze à la configuration Apt:</p>
<pre>command echo "# DotDeb repository.<br />deb http://packages.dotdeb.org ${DEBIAN_VERSION} all<br />deb-src http://packages.dotdeb.org ${DEBIAN_VERSION} all" \<br />    &gt; "/etc/apt/sources.list.d/dotdeb-org-${DEBIAN_VERSION}.list"</pre>
<p>Ajoutez la clef signant les dépôt à la configuration Apt:</p>
<pre>command wget 'http://www.dotdeb.org/dotdeb.gpg' \<br />    --quiet --output-document=- \<br />    | command apt-key add -</pre>
<p>Assignez une très faible priorité aux paquet DotDeb pour ne pas polluer le système:</p>
<pre>command echo "Package: *<br />Pin: origin packages.dotdeb.org<br />Pin-Priority: 200" \<br />    &gt; '/etc/apt/preferences.d/dotdeb-org'<br /></pre>
<p>Mettez à jour la liste des paquets disponibles:</p>
<pre>command apt-get update</pre>
<h3>Installation de PHP 5.3</h3>
<p>Récupérez la liste des paquets PHP5 et PECL disponibles sur les serveurs Dotdeb:</p>
<pre>PACKAGES="$(command wget "http://packages.dotdeb.org/dists/${DEBIAN_VERSION}/php5/binary-$(command dpkg --print-architecture)" \<br />    --quiet --output-document=- \<br />    | command grep "href=" | command grep -v "h1" | command grep -v "\.\./" \<br />    | command sed -e 's/^[^&gt;]*&gt;\([^_]*\)_.*$/\1/' | command tr "\n" " ")"<br />PECL_PACKAGES="$(command wget "http://packages.dotdeb.org/dists/${DEBIAN_VERSION}/php5-pecl/binary-$(command dpkg --print-architecture)" \<br />    --quiet --output-document=- \<br />    | command grep "href=" | command grep -v "h1" | command grep -v "\.\./" \<br />    | command sed -e 's/^[^&gt;]*&gt;\([^_]*\)_.*$/\1/' | command tr "\n" " ")"<br />ALL_PACKAGES="$(command wget "http://packages.dotdeb.org/dists/${DEBIAN_VERSION}/php5/binary-all" \<br />    --quiet --output-document=- \<br />    | command grep "href=" | command grep -v "h1" | command grep -v "\.\./" \<br />    | command sed -e 's/^[^&gt;]*&gt;\([^_]*\)_.*$/\1/' | command tr "\n" " ")"</pre>
<p>Assignez une priorité élevée aux paquets PHP de DotDeb:</p>
<pre>command echo "Package: ${PACKAGES} \\<br />    ${PECL_PACKAGES} \\<br />    ${ALL_PACKAGES}<br />Pin: origin packages.dotdeb.org<br />Pin-Priority: 600" \<br />    &gt; '/etc/apt/preferences.d/dotdeb-org-php5'</pre>
<p>Assurez-vous que les sessions restent stockées dans "/var/lib/php5" et que PHP ne gère pas leur destruction (géré par un cron):</p>
<pre>command mkdir --parent '/etc/php5/conf.d' '/var/lib/php5'<br />command chmod 733 '/var/lib/php5'<br />command chmod o+t '/var/lib/php5'<br />echo '; Store sessions to /var/lib/php5<br />session.save_path = "/var/lib/php5"<br />session.gc_probability = 0' \<br />    &gt; '/etc/php5/conf.d/000-session-store-default.ini'</pre>
<p>Remplacez les paquets PHP5 installés par la version 5.3:</p>
<pre>command apt-get install $(command dpkg --get-selections \<br />    | command grep 'php5' \<br />    | command cut --fields=1 \<br />    | command sed -e 's|.*|&amp;/squeeze|g')</pre>
<p>Si PHP n'est pas installé, reportez-vous à <a class="internal-link" href="../installer-php-fpm-sur-debian">Installer PHP-FPM sur Debian.</a></p>
<h2>Remerciements</h2>
<ul>
<li>Merci aux mainteneurs des <a class="external-link" href="http://www.dotdeb.org/">dépôts Dotdeb</a>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-04-22T12:45:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/developpement/installer-webgrind-sur-debian">
    <title>Installer Webgrind sur Debian</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/applications-web/developpement/installer-webgrind-sur-debian</link>
    <description>Webgrind est une interface Web pour l'outil de débogage PHP Xdebug. Elle est conçue pour faciliter l'optimisation du code PHP à l'aide de ses fonctionnalités de profilage de l'exécution. Ce guide facilite son installation sur Debian GNU/Linux</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 7.0 Wheezy</li>
</ul>
<p>Ce guide est testé avec ces versions de Webgrind:</p>
<ul>
<li>GitHub master</li>
</ul>
<h2>Avertissement</h2>
<p>Évitez d'installer Webgrind sur un serveur de production.  Cette application permet d'avoir accès à des fichiers critiques du  serveur.</p>
<h2>Prérequis</h2>
<p>Ce guide nécessite :</p>
<ul>
<li>un serveur HTTP Apache 2 avec le script <b>a2tools</b> disponible dans le guide <a class="internal-link" href="../../serveurs/apache-2/installer-et-configurer-apache-2-sur-debian">Installer Apache 2 sur Debian</a>.</li>
</ul>
<ul>
<li>un serveur HTTP avec support du PHP, comme décrit par <a class="internal-link" href="../../serveurs/php/installer-php-fpm-sur-debian">Installer PHP-FPM sur Debian</a>.</li>
<li>l'extension PHP Xdebug, comme décrit par <a class="internal-link" href="../../serveurs/php/installer-extension-php-xdebug-sur-debian">Installer l'extension PHP Xdebug sur Debian</a>.</li>
</ul>
<ul>
<li>l'<a class="internal-link" href="../../serveurs/php/gerer-la-configuration-php-en-ligne-de-commande">outil php-tools de configuration simplifiée de PHP</a>.</li>
</ul>
<h2>Paramètres</h2>
<p>Renseignez le nom de domaine où sera disponible l'application:</p>
<pre>DOMAIN="<b>webgrind.domain.com</b>"
</pre>
<p>Si le serveur MySQL n'est pas local, l'outil mysql-tools essaiera de   s'y connecter avec le client MySQL, ou, en cas d'échec de connexion,  via  une connexion SSH.</p>
<p>Renseignez le nom du certificat SSL à utiliser pour chiffrer l'application avec HTTPS (créé via la procédure <a class="internal-link" href="../../serveurs/http/creer-un-certificat-ssl-sur-debian">Créer un certificat SSL / TLS sur Debian</a>) (optionnel, recommandé):</p>
<pre>SSL_KEY_NAME="<b>${DOMAIN}</b>"</pre>
<h2>Installation</h2>
<p>Déterminez le chemin d'installation:</p>
<pre>INSTALL_PATH="/opt/webgrind/${DOMAIN}"<br /></pre>
<p>Déterminez le chemin des données:</p>
<pre>DATA_PATH="/var/lib/webgrind/${DOMAIN}"</pre>
<p>Déterminez le chemin du cache:</p>
<pre>CACHE_PATH="/var/cache/webgrind/${DOMAIN}"</pre>
<p>Assurez-vous que le dossier parent existe:</p>
<pre>command mkdir --parent "$(command dirname "${INSTALL_PATH}")"<br />command mkdir --parent "${CACHE_PATH}" "${DATA_PATH}"<br />command chown -R www-data:www-data "${CACHE_PATH}" "${DATA_PATH}"<br /></pre>
<h3>Préparation de l'environnement</h3>
<p>Installez les logiciels nécessaires:</p>
<pre>command apt-get install git graphviz python</pre>
<p>Activez le profilage permanent des scripts PHP présents sur le serveur:</p>
<pre>command php-tools --for="webgrind" --set "xdebug.profiler_enable" "1"<br /></pre>
<p><b>Remarque:</b> Vous pouvez aussi choisir d'activer le profilage en ajoutant "?XDEBUG_PROFILE" aux URL à étudier:</p>
<pre># command php-tools --for="webgrind" --set "xdebug.profiler_enable_trigger" "1"</pre>
<p>Configurez le chemin de stockage:</p>
<pre>command php-tools --for="webgrind" --fix "xdebug.profiler_output_dir" "${DATA_PATH}"<br />command php-tools --for="webgrind" --fix "xdebug.profiler_output_name" "cachegrind.out.%t.%p"</pre>
<p>Rechargez la configuration de PHP:</p>
<pre>test -x /etc/init.d/php5-fpm &amp;&amp; /etc/init.d/php5-fpm force-reload<br />test -x /etc/init.d/apache2 &amp;&amp; /etc/init.d/apache2 force-reload<br />test -x /etc/init.d/lighttpd &amp;&amp; /etc/init.d/lighttpd force-reload<br />test -x /etc/init.d/nginx &amp;&amp; /etc/init.d/nginx force-reload</pre>
<h3>Mise en place de l'application</h3>
<p>Installez la dernière version de l'application:</p>
<pre>command git clone "git://github.com/jokkedk/webgrind.git" "${INSTALL_PATH}"</pre>
<p>Configurez les chemins:</p>
<pre>command sed -i \<br />    -e "s|static \$storageDir.*\$|static \$storageDir = '${CACHE_PATH}';|g" \<br />    -e "s|static \$profilerDir.*\$|static \$profilerDir = '${DATA_PATH}';|g" \<br />    -e "s|static \$dotExecutable.*\$|static \$dotExecutable = '$(command which 'dot')';|g" \<br />  "${INSTALL_PATH}/config.php"</pre>
<h3>Mise en place de l'hôte virtuel</h3>
<p>Créez la configuration du serveur HTTP:</p>
<pre>if [ -n "${SSL_KEY_NAME}" -a -e "/etc/ssl/private/${SSL_KEY_NAME}.key" ]; then<br />  command a2tools --ssl="${SSL_KEY_NAME}" "${DOMAIN}" "${INSTALL_PATH}"<br />  command a2tools --template='redirect' "${DOMAIN}" "https://${DOMAIN}/"<br />else<br />  command a2tools "${DOMAIN}" "${INSTALL_PATH}"<br />fi<br /></pre>
<p>L'outil est maintenant disponible sur le domaine spécifié en HTTP ou HTTPS si possible.</p>
<h3>Mise à jour automatique</h3>
<p>Mettez en place un script de mise à jour automatique quotidienne du code de l'outil:</p>
<pre>echo "#"'!'"/bin/bash<br /># Update ${DOMAIN} source code from Git.<br />test -x '/usr/bin/git' -a -d '${INSTALL_PATH}' &amp;&amp; {<br />  pushd '${INSTALL_PATH}' &gt; '/dev/null'<br />  /usr/bin/git pull --quiet &gt; '/dev/null'<br />  popd &gt; '/dev/null'<br />}" \<br />  &gt; "/etc/cron.daily/${DOMAIN}-update"<br />command chmod +x "/etc/cron.daily/${DOMAIN}-update"</pre>
<h2>Sauvegardes</h2>
<p>Sauvegardez l'installation avec Backup Manager (voir <a class="internal-link" href="../../systeme/logiciels/installer-et-configurer-backup-manager-sur-debian"><span class="generated">Installer et configurer Backup Manager sur Debian</span></a>):</p>
<pre>command backup-manager-tools add "${INSTALL_PATH}"
</pre>
<h2>Remerciements</h2>
<ul>
<li>Merci aux développeurs de <a class="external-link" href="https://github.com/jokkedk/webgrind">Webgrind</a>.</li>
</ul>
<ul>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-04-21T12:50:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/developpement">
    <title>Développement</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/applications-web/developpement</link>
    <description>Applications Web de débogage et d'édition de code source.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-04-21T12:47:58Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/systeme/virtualisation-avec-xen/configurer-xen-tools-sur-debian">
    <title>Configurer xen-tools sur Debian</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/systeme/virtualisation-avec-xen/configurer-xen-tools-sur-debian</link>
    <description>xen-tools est un outil de création automatisée de domU Xen. Cet article met en place un modèle de domU proposant la sauvegarde avec Backup Manager, l'accès SSH facilité et la mise en place d'une sécurité minimale.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 6.0 Squeeze</li>
<li>Debian 7.0 Wheezy</li>
</ul>
<h2>Prérequis</h2>
<p>Ce guide nécessite:</p>
<ul>
<li>la configuration d'un serveur SMTP tel que décrit dans <a class="internal-link" href="../../configuration/complements-a-linstallation-de-debian-gnu-linux">Compléments à l'installation de Debian GNU/Linux</a>.</li>
<li>l'hyperviseur Xen telle que décrite par <a class="internal-link" href="../installer-xen-sur-debian">Installer Xen sur Debian</a>.</li>
<li>l'outil de sauvegarde Backup Manager, tel que décrit par <a class="internal-link" href="../../logiciels/installer-et-configurer-backup-manager-sur-debian">Installer et configurer Backup Manager sur Debian</a>.</li>
<li>le gestionnaire de volumes logiques LVM (avec groupe de disque présent), tel que décrit par <a class="internal-link" href="../../configuration/mettre-en-place-et-utiliser-le-gestionnaire-de-volumes-logiques-lvm-sur-debian">Mettre en place et utiliser le gestionnaire de volumes logiques LVM sur Debian</a>.</li>
</ul>
<h2>Paramètres</h2>
<p>Récupérez l'adresse IP du dom0. Dans une configuration en mode   NAT, l'adresse est imposée à 10.0.0.127, mais dans le cas d'une configuration en   mode Bridge, l'adresse IP de l'interface   physique (ici eth0) est utilisée:</p>
<pre>MAINDOM_IP="10.0.0.127"
if [ $(command grep "^[^#]*bridge" '/etc/xen/xend-config.sxp' | command wc --lines) -gt 0 ]; then
  MAINDOM_IP="$(command ifconfig <b>eth0</b> | command grep "inet " | command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')"
fi
</pre>
<p>Vérifiez l'adresse IP détectée:</p>
<pre>command echo "L'adresse IP de ce serveur pour les DomU est : ${MAINDOM_IP}"</pre>
<p><b>Remarque :</b> Si l'adresse obtenue n'est pas correcte, renseignez une valeur correcte :</p>
<pre>MAINDOM_IP="<b>192.168.1.5"</b></pre>
<h2>Installation</h2>
<h3>Préparation de l'environnement</h3>
<p>Installez les logiciels nécessaires:</p>
<pre>command apt-get install xen-tools</pre>
<p>Créez l'interface dummy0 si nécessaire:</p>
<pre>if [ -z "$(command ifconfig | command grep "${MAINDOM_IP}")" ]; then<br />  MAINDOM_RANGE="$(command echo ${MAINDOM_IP} | command sed -e 's/\(.*\)\.[0-9]*/\1/')"<br />  command modprobe dummy<br />  command echo "dummy" &gt;&gt; '/etc/modules'<br />  command echo "<br /># Xen main interface.<br />auto dummy0<br />iface dummy0 inet static<br />    address ${MAINDOM_IP}<br />    netmask 255.255.255.0<br />    network ${MAINDOM_RANGE}.0<br />    broadcast ${MAINDOM_RANGE}.255" \<br />  &gt;&gt; '/etc/network/interfaces'<br />  command ifup dummy0<br />fi<br /></pre>
<h3>Préparation de l'architecture de sauvegarde</h3>
<p>Ce guide propose une architecture de sauvegarde basée sur Backup Manager. Les machines  virtuelles (domU) rapatrient les sauvegardes dans le dossier " /var/archives" de la machine hôte (dom0). Assurez-vous de l'existence de ce dossier:</p>
<pre>command mkdir --parent '/var/archives'
command chown root:backup '/var/archives'
command chmod ug+rwx '/var/archives'
</pre>
<p>Configurez Backup Manager pour que  le dossier '/var/archives' soit ouvert aux machines  virtuelles, et que les archives des domU soient purgées en même temps  que celles du dom0</p>
<pre>command sed -i -e 's/[#]*\(.*BM_REPOSITORY_GROUP=\).*$/\1"backup"/' \
            -e 's/[#]*\(.*BM_REPOSITORY_CHMOD=\).*$/\1"770"/' \
            -e 's/[#]*\(.*BM_ARCHIVE_STRICTPURGE=\).*$/\1"false"/' \
         '/etc/backup-manager.conf'</pre>
<p>Créez l'utilisateur xen-backup utilisé par les domU pour uploader les sauvegardes dans le dom0:</p>
<pre>command adduser --system --shell '/bin/sh' --home '/var/lib/xen-backup' --disabled-password 'xen-backup'</pre>
<p>Ajoutez l'utilisateur aux groupes backup et ssh-users:</p>
<pre>command adduser 'xen-backup' 'backup'<br />if [ -n "$(command grep 'ssh-users' '/etc/groups')" ]; then<br />  command adduser 'xen-backup' 'ssh-users'<br />fi</pre>
<p>Créez une clef RSA pour l'identification sans mot de passe au compte xen-backup:</p>
<pre>command mkdir --parent '/var/lib/xen-backup/.ssh/'<br />command ssh-keygen -t rsa -C "upgrade account key" -N "" -f '/var/lib/xen-backup/.ssh/id_rsa'
command cat '/var/lib/xen-backup/.ssh/id_rsa.pub' \
    &gt;&gt; '/var/lib/xen-backup/.ssh/authorized_keys'
command chown -R xen-backup:nogroup '/var/lib/xen-backup/.ssh'
</pre>
<p>Autorisez l'accès au serveur SSH par les domU si Knockd est installé:</p>
<pre>SSH_PORT="$(command grep '^Port' '/etc/ssh/sshd_config' \<br />    | command sed -e 's/^Port[\t ]*//g')"<br />if [ -e '/etc/network/if-up.d/iptables-ssh-reject' ]; then<br />  command echo "#"\!"/bin/bash<br /># Allow SSH access from domU<br />command iptables -C INPUT ! -s 10.0.0.0/24 -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP &gt; '/dev/null' \\<br />  || command iptables -A INPUT ! -s 10.0.0.0/24 -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP" \<br />   &gt; '/etc/network/if-up.d/iptables-ssh-reject'<br />  command chmod +x '/etc/network/if-up.d/iptables-ssh-reject'<br />  while command iptables -D INPUT -p tcp -m state --state NEW --dport ${SSH_PORT} -j DROP; do echo; done<br />  /etc/network/if-up.d/iptables-ssh-reject<br />fi</pre>
<h3>Configuration du serveur SMTP</h3>
<p><b>Attention:</b> Ce qui suit peut casser la configuration du serveur   SMTP du dom0. Si la configuration d'Exim 4 est personnalisée, et que le mode réseau de Xen est NAT,  veillez à ce que le serveur SMTP écoute sur l'adresse <b>10.0.0.127</b>, et accepte le relai des emails en provenance de <b>10.0.0.0/24</b>.</p>
<p><b> </b></p>
<p>Configurez le serveur SMTP pour relayer les emails provenant des domUs:</p>
<pre>MAINDOM_RANGE="$(command echo ${MAINDOM_IP} | command sed -e 's/\(.*\)\.[0-9]*/\1/')"
command sed -i \<br />    -e "s|dc_local_interfaces=.*\$|dc_local_interfaces='127.0.0.1;${MAINDOM_IP}'|" \
    -e "s|dc_relay_nets=.*\$|dc_relay_nets='${MAINDOM_RANGE}.0/24'|" \
  '/etc/exim4/update-exim4.conf.conf'</pre>
<p>Mettez à jour la configuration d'Exim 4:</p>
<pre>command update-exim4.conf
/etc/init.d/exim4 restart
</pre>
<h2>Configuration</h2>
<h3>Assignation d'espace disque</h3>
<p>Par sécurité, augmentez à 1Go la taille du Swap des domU créés:</p>
<pre>command sed -i -e 's/^\(swap[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\11Gb\2/' '/etc/xen-tools/xen-tools.conf'</pre>
<p><b>Remarque :</b> Si vous disposez de peu d'espace disque, vous  pouvez diviser par 2 la taille du swap et du root (c'est à dire passer  respectivement de 1 Go et 4 Go à 512 Mo et 2 Go):</p>
<pre>command sed -i -e 's/^\(size[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\12Gb\2/' \
            -e 's/^\(swap[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\1512Mb\2/' \
         '/etc/xen-tools/xen-tools.conf'</pre>
<h3>Paramètres réseau</h3>
<p>Dans le cas où Xen utilise un réseau nat, configurez les  paramètres réseau pour la création de machine virtuelles utilisant une  adresse IP fixe:</p>
<pre>if [ $(command grep '^[^#]*nat' '/etc/xen/xend-config.sxp' | command wc --lines) -gt 0 ]; then
  command sed -i \<br />      -e 's/^[# ]*\(gateway[ ]*=\).*$/\1 10.0.0.128/' \
      -e 's/^[# ]*\(netmask[ ]*=\).*$/\1 255.255.255.0/' \
    '/etc/xen-tools/xen-tools.conf'
fi
</pre>
<p><b>Remarque :</b> Dans le cas où Xen utilise un bridge, configurez manuellement les paramètres réseau local dans "/etc/xen-tools/xen-tools.conf".</p>
<h3>Utilisation de volumes logiques</h3>
<p>Configurez xen-tools pour créer les disques des domU à l'aide de LVM. Détectez le premier groupe de volumes LVM du système:</p>
<pre>LVM_VG="$(command vgdisplay \
  | command grep "VG Name" \
  | command head --lines=1 \
  | command cut --characters=25-)"</pre>
<p>Ajustez la configuration de l'outil:</p>
<pre>command sed -i -e "s/^# \(lvm = \).*/\1${LVM_VG}/" '/etc/xen-tools/xen-tools.conf'</pre>
<h3>Sélection du noyau</h3>
<p>Configurez la détection automatique du kernel utilisé par les domU:</p>
<pre>command sed -i -e 's/^\(kernel =\).*\$/\1 \/boot\/vmlinuz-`uname -r`/' \
            -e 's/^\(initrd =\).*\$/\1 \/boot\/initrd.img-`uname -r`/' \
            '/etc/xen-tools/xen-tools.conf'
</pre>
<h3>Correction du problème "clocksource/0: Time went backwards"</h3>
<p>Afin d'éviter que les domU deviennent inaccessibles après un  redémarrage du Dom0 à cause de l'erreur "clocksource/0: Time went backwards", ajoutez l'option  "extra = 'clocksource=xen'" au modèles de configuration des domU:</p>
<pre>command sed -i -e "/^on_crash/a\\
\\
# Preventing clocksource/0: Time went backwards\\
extra = 'clocksource=xen'" \
    '/etc/xen-tools/xm.tmpl'
</pre>
<h2>Configuration initiale des domU</h2>
<p>Créez un rôle pour mettre en place des domU pré-configurés avec:</p>
<ul>
<li>Installation des paquets locales, sudo, ntp, cron-apt, rkhunter, vim, screen, backup-manager et fail2ban</li>
<li>Mises à jour automatisées par lot.</li>
<li>Mise en place de l'architecture de sauvegarde avec backup-manager.</li>
</ul>
<h3>Accès sans mot de passe aux domU</h3>
<p>Créez une clef RSA pour le compte root du dom0 si vous souhaitez accéder facilement aux comptes root des domU par SSH:</p>
<pre>if [ ! -e "${HOME}/.ssh/id_rsa" ]; then
  command ssh-keygen -t rsa -f "${HOME}/.ssh/id_rsa"
fi
</pre>
<h3>Mises à jour par lot</h3>
<p>Créez une clef RSA pour l'identification sans mot de passe aux comptes "xen-upgrade" des domU:</p>
<pre>command mkdir --parent '/etc/xen-tools/ssh-keys'<br />command ssh-keygen -t rsa -C "upgrade account key" -N "" -f '/etc/xen-tools/ssh-keys/xen-upgrade-rsa'</pre>
<p>Installez l'outil de mise à jour des domU par lot:</p>
<pre>command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/xen-apt-get' \
    --no-check-certificate --output-document='/usr/bin/xen-apt-get'
command chmod +x '/usr/bin/xen-apt-get'</pre>
<p>Mettez à jour l'ensemble des domU actifs avec:</p>
<pre># command xen-apt-get update
# command xen-apt-get upgrade
</pre>
<h3>Mise en place du rôle</h3>
<p>Mettez en place le fichier de configuration du rôle "automatic":</p>
<pre>command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/automatic' \
    --no-check-certificate --output-document='/etc/xen-tools/role.d/automatic'<br />command chmod +x '/etc/xen-tools/role.d/automatic'</pre>
<p>Créez un squelette de fichiers de configuration pour l'initialisation des domU:</p>
<pre>command mkdir --parent '/etc/xen-tools/skel/root'
command mkdir --parent '/etc/xen-tools/skel/root/.ssh'
command mkdir --parent '/etc/xen-tools/skel/etc/default'
command mkdir --parent '/etc/xen-tools/skel/etc/exim4'
command mkdir --parent '/etc/xen-tools/skel/etc/cron.d'<br />command mkdir --parent '/etc/xen-tools/skel/etc/cron.daily'
command mkdir --parent '/etc/xen-tools/skel/etc/apt/apt.conf.d'
command mkdir --parent '/etc/xen-tools/skel/etc/xen-data'
command mkdir --parent '/etc/xen-tools/skel/usr/bin'
</pre>
<p>Initialisez le squelette des domU avec la configuration du dom0:</p>
<pre>command cp '/root/.bashrc' '/etc/xen-tools/skel/root/'
if [ -e /root/.vimrc ]; then
  command cp '/root/.vimrc' '/etc/xen-tools/skel/root/'
fi
command cp '/etc/timezone' '/etc/xen-tools/skel/etc/'
command cp '/etc/localtime' '/etc/xen-tools/skel/etc/'
command cp '/etc/locale.gen' '/etc/xen-tools/skel/etc/'
command cp '/etc/environment' '/etc/xen-tools/skel/etc/'
command cp '/etc/default/locale' '/etc/xen-tools/skel/etc/default/'
</pre>
<p>Ajoutez la clef publique SSH du dom0 aux hôtes connu des domU:</p>
<pre>command ssh-keyscan -H -t rsa "${MAINDOM_IP}" &gt;&gt; '/etc/xen-tools/skel/root/.ssh/known_hosts'
</pre>
<p>Autorisez l'identification sans mot de passe du compte root du dom0 sur le compte root des domU:</p>
<pre>if [ -e "${HOME}/.ssh/id_rsa.pub" ]; then
    command cat "${HOME}/.ssh/id_rsa.pub" \
        &gt;&gt; "/etc/xen-tools/skel/root/.ssh/authorized_keys"
fi
</pre>
<p>Configurez la redirection des emails envoyés par les domU vers le dom0:</p>
<pre>command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/update-exim4.conf.conf' \
    --output-document='/etc/xen-tools/skel/etc/exim4/update-exim4.conf.conf'
command sed -i -e "s/dc_smarthost=.*\$/dc_smarthost='${MAINDOM_IP}'/" \
         '/etc/xen-tools/skel/etc/exim4/update-exim4.conf.conf'
echo "root@$(command hostname --fqdn)" &gt; '/etc/xen-tools/skel/root/.email'</pre>
<p>Ajoutez l'outil d'administration de Backup Manager aux domU:</p>
<pre>command wget 'https://raw.github.com/biapy/howto.biapy.com/master/backup-manager/backup-manager-tools' \
    --quiet --no-check-certificate --output-document='/etc/xen-tools/skel/usr/bin/backup-manager-tools'
command chmod +x '/etc/xen-tools/skel/usr/bin/backup-manager-tools'
</pre>
<p>Téléchargez la configuration par défaut du Backup Manager pour les machines virtuelles:</p>
<pre>command wget 'https://raw.github.com/biapy/howto.biapy.com/master/xen-tools/backup-manager.conf' \
    --no-check-certificate --output-document='/etc/xen-tools/skel/etc/backup-manager.conf'
command sed -i -e "s|[#]*\(.*BM_UPLOAD_SSH_HOSTS=\).*$|\1\"${MAINDOM_IP}\"|" \
         '/etc/xen-tools/skel/etc/backup-manager.conf'
</pre>
<p>Ajoutez au squelette la configuration cron de Backup Manager:</p>
<pre>command echo '#!/bin/sh<br /># cron script for backup-manager<br />test -x /usr/sbin/backup-manager || exit 0<br />/usr/sbin/backup-manager' \<br />    &gt; '/etc/xen-tools/skel/etc/cron.daily/backup-manager'<br />command chmod +x '/etc/xen-tools/skel/etc/cron.daily/backup-manager'<br /></pre>
<p>Configurez le port du serveur SSH du dom0:</p>
<pre>SSH_PORT="$(command grep '^Port' '/etc/ssh/sshd_config' \<br />    | command sed -e 's/^Port[\t ]*//g')"<br />command sed -i \
    -e "s/[#]*\(.*BM_UPLOAD_SSH_PORT=\).*\$/\1\"${SSH_PORT}\"/" \
  '/etc/xen-tools/skel/etc/backup-manager.conf'</pre>
<p>Ajoutez au squelette la clef privée d'identification au compte xen-backup du dom0:</p>
<pre>command cp '/var/lib/xen-backup/.ssh/id_rsa' '/etc/xen-tools/skel/etc/xen-data/'</pre>
<h2>Remerciements</h2>
<ul>
<li>Merci aux développeurs de <a class="external-link" href="http://xen-tools.org/software/xen-tools/">xen-tools</a>.</li>
</ul>
<ul>
<li>Merci à TMS pour <a href="http://www.generation-libre.com/securiser-l-acces-au-serveur-openssh-avec-une-authentification-par-cles/">Sécuriser l’accès au serveur openssh avec une authentification par clés</a> sur <a href="http://www.generation-libre.com/">Génération Libre</a>.</li>
<li>Merci à Nyarla sur irc.freenode.net#ubuntu-fr pour avoir répondu à mes questions sur Backup Manager.</li>
<li>Merci aux auteurs de <a href="http://doc.ubuntu-fr.org/backup-manager">Backup Manager</a> sur la <a href="http://doc.ubuntu-fr.org/">documentation Ubuntu francophone</a>.</li>
<li>Merci aux auteurs de  <a href="http://wiki.xensource.com/xenwiki/XenNetworking">Xen Networking</a> sur le <a href="http://wiki.xensource.com/xenwiki/">wiki dedié à Xen</a>.</li>
<li>Merci à <a href="http://gablog.eu/online/">GaB</a> pour <a href="http://gablog.eu/online/node/35">Manage SSH known_hosts entries</a>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-04-06T10:20:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/systeme/virtualisation-avec-xen/installer-xen-sur-debian">
    <title>Installer Xen sur Debian</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/systeme/virtualisation-avec-xen/installer-xen-sur-debian</link>
    <description>Xen est une solution de virtualisation libre et gratuite alternative à VMWare ESX. Cet article vous guide au travers de l'installation, la configuration et l'utilisation de Xen sur Debian. </description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 6.0 Squeeze</li>
<li>Debian 7.0 Wheezy</li>
</ul>
<h2>Vocabulaire</h2>
<p>Xen utilise une terminologie spécifique pour identifier les machines virtuelles:</p>
<ul>
<li><b>Hyperviseur:</b> Xen est un hyperviseur. En informatique, un hyperviseur est une plate-forme de virtualisation qui permet à plusieurs systèmes d'exploitation de travailler sur une machine physique en même temps (source: <a class="external-link" href="http://fr.wikipedia.org/wiki/Hyperviseur">Hyperviseur sur Wikipedia</a>).</li>
<li><b>Dom0:</b> Le Dom0, pour Domaine n°0, est le système d'exploitation contrôle l'hyperviseur Xen. C'est l'hôte d'origine où a été installé l'hyperviseur.</li>
<li><b>DomU:</b> Les DomU, pour Domaines Utilisateur, sont les machines virtuelles de Xen.</li>
</ul>
<h2>Installation</h2>
<p>Détectez la version de xen-utils disponible:</p>
<pre>XEN_UTILS="$(command apt-cache pkgnames xen-utils)"<br /></pre>
<p>Installez l'hyperviseur et le noyau Xen adapté à l'architecture de votre système d'exploitation (32 ou 64 bits) :</p>
<pre>if [ "$(command uname --machine)" = "x86_64" ]; then<br />  if [ -n "$(command apt-cache pkgnames 'xen-linux-system-amd64')" ]; then<br />    command apt-get -y install xen-linux-system-amd64<br />  else<br />    command apt-get -y install xen-hypervisor-amd64 linux-image-2.6-xen-amd64 \
        linux-headers-2.6-xen-amd64 ${XEN_UTILS} bridge-utils
  fi<br />else<br />  if [ -n "$(command apt-cache pkgnames 'xen-linux-system-686-pae')" ]; then<br />    command apt-get install xen-linux-system-686-pae<br />  else<br />    command apt-get -y install xen-hypervisor-i386 linux-image-2.6-xen-686 \
        linux-headers-2.6-xen-686 ${XEN_UTILS} bridge-utils
  fi<br />fi
</pre>
<p>Si le gestionnaire de boot du système est Grub 2 (paquet grub-pc), donnez la priorité aux noyaux Xen, et désactivez la découverte  automatique des OS pour ne pas ajouter les DomU au menu Grub:</p>
<pre>command dpkg-divert --divert '/etc/grub.d/05_linux_xen' --rename '/etc/grub.d/20_linux_xen'
echo '# Disable OS probing.
GRUB_DISABLE_OS_PROBER=true' &gt;&gt; '/etc/default/grub'</pre>
<p>Ajoutez à la configuration Grub les lignes nécessaires aux noyaux Xen :</p>
<pre>if [ -e '/etc/default/grub' ]; then
  if [ -z "$(command grep 'GRUB_CMDLINE_XEN' '/etc/default/grub')" ]; then
    echo '
# Xen kernels configuration
GRUB_CMDLINE_XEN_DEFAULT=""
GRUB_CMDLINE_XEN=""' &gt;&gt; '/etc/default/grub'
  fi
fi
</pre>
<p>Mettez à jour la liste des noyaux disponibles:</p>
<pre>command update-grub
</pre>
<p>Lancer l'hyperviseur Xen en redémarrant le système:</p>
<pre>command reboot</pre>
<h2>Optimisation</h2>
<p>Évitez l'effondrement des performances en cas de forte utilisation des disques en assignant en permanence au moins un cœur du CPU au dom0 :</p>
<pre>CPU_COUNT="<b>1</b>"</pre>
<p>Appliquez le paramètre à la configuration de l'hyperviseur:</p>
<pre>command sed -i -e "s/^[# ]*\((dom0-cpus\).*\().*\)\$/\1 ${CPU_COUNT}\2/" \
         '/etc/xen/xend-config.sxp'</pre>
<p><b> </b></p>
<p>Forcez le Dom0 à utiliser seulement les cœurs CPU qui lui sont assignés:</p>
<pre>if [ -e '/etc/default/grub' ]; then
  command sed -i -e "s/\(GRUB_CMDLINE_XEN_DEFAULT=.*\)\"/\1 dom0_max_vcpus=${CPU_COUNT} dom0_vcpus_pin=1\"/" \
         '/etc/default/grub'
fi
if [ -e '/boot/grub/menu.lst' ]; then
  command sed -i -e "s/\(xenhopt=.*\)/\1 dom0_max_vcpus=${CPU_COUNT} dom0_vcpus_pin=1/" \
         '/boot/grub/menu.lst'
fi
</pre>
<p>Mettez à jour la configuration des noyaux de l'hyperviseur:</p>
<pre>command update-grub
</pre>
<p>Chargez la nouvelle configuration:</p>
<pre>command reboot
</pre>
<h2>Prévention des problèmes</h2>
<h3>Memory squeeze in netback driver</h3>
<p>Au bout d'un certain temps, les messages suivants apparaissent dans le syslog du dom0:</p>
<blockquote>
<p align="left" class="callout">xen_net: Memory squeeze in netback driver.</p>
</blockquote>
<p>Limitez la quantité de mémoire assignée au dom0:</p>
<pre>if [ -e "/etc/default/grub" ]; then
  command sed -i -e 's/\(GRUB_CMDLINE_XEN_DEFAULT=.*\)"/\1 dom0_mem=<b>256M"</b>/' \
         "/etc/default/grub"
fi
if [ -e "/boot/grub/menu.lst" ]; then
  command sed -i -e 's/\(xenhopt=.*\)/\1 dom0_mem=<b>256M</b>/' \
         "/boot/grub/menu.lst"
fi
</pre>
<p>Appliquez le réglage:</p>
<pre>command update-grub
</pre>
<p>Fixez la quantité de mémoire assignée au dom0:</p>
<pre>command sed -i -e 's/^[# ]*\((dom0-min-mem\).*\().*\)$/\1 <b>256</b>\2/' \
         /etc/xen/xend-config.sxp
</pre>
<p>Redémarrez le système:</p>
<pre>command reboot
</pre>
<h3>/dev/mem: mmap: Bad address dans les domU</h3>
<p>Ce message est généré par dmidecode. dmidecode essaie  d'accéder à des informations matériel de bas niveau non disponibles dans un domU. Il peut être ignoré sans soucis.</p>
<h2>Configuration du réseau</h2>
<p>Xen propose plusieurs méthodes de configuration du réseau. Ce guide présente 2 configurations simples:</p>
<ul>
<li><b>bridge:</b> les domU sont sur visibles sur le réseau local du dom0. C'est la configuration préférée pour un serveur Xen séparé d'Internet par un pare-feu.</li>
<li><b>NAT:</b> les domU sont sur un réseau local virtuel et ne sont pas accessibles depuis le réseau du dom0. C'est la configuration préférée si le serveur Xen est directement connecté à Internet.</li>
</ul>
<h3>Paramètres</h3>
<p>Pour mettre en place le mode NAT (recommandé), utilisez:</p>
<pre>XEN_NETWORK_MODE=<b>"nat"</b></pre>
<p><b>Remarque: </b>Pour mettre en place le mode bridge, utilisez:</p>
<pre>XEN_NETWORK_MODE=<b>"bridge"</b></pre>
<h3>Configuration du réseau</h3>
<p>Désactivez la configuration réseau précédente:</p>
<pre>command sed -i -e 's/^(network-script .*).*$/# \0/' \
            -e 's/^(vif-script .*).*$/# \0/' \
         "/etc/xen/xend-config.sxp"</pre>
<p>Appliquez les réglages choisis:</p>
<pre>command sed -i -e "s/^#[ ]*\\((network-script.*network-${XEN_NETWORK_MODE}).*\\)\$/\\1/" \
            -e "s/^#[ ]*\\((vif-script.*vif-${XEN_NETWORK_MODE}).*\\)\$/\\1/" \
         "/etc/xen/xend-config.sxp"
</pre>
<p>Assurez-vous que le fichier hotplugpath.sh existe:</p>
<pre>if [ ! -e "/etc/xen/scripts/hotplugpath.sh" ]; then
  command touch "/etc/xen/scripts/hotplugpath.sh"
fi
</pre>
<p>Rechargez la configuration:</p>
<pre>command test -x '/etc/init.d/xen' &amp;&amp; /etc/init.d/xen restart<br />command test -x '/etc/init.d/xend' &amp;&amp; /etc/init.d/xend restart</pre>
<h2>Remerciements</h2>
<ul>
<li>Merci aux développeurs de <a class="external-link" href="http://www.xen.org/">Xen</a>.</li>
<li>Merci à <a href="http://www.falkotimme.com/">Falko</a> pour <a href="http://www.howtoforge.com/debian_etch_xen_3.1">The Perfect Xen 3.1.0 Setup For Debian Etch</a>.</li>
<li>Merci aux auteurs de  <a href="http://wiki.xensource.com/xenwiki/XenNetworking">Xen Networking</a> sur le <a href="http://wiki.xensource.com/xenwiki/">wiki dedié à Xen</a>.</li>
<li>Merci à <a href="http://www.crucialp.com/">Crucial Paradigm</a> pour <a href="http://www.crucialp.com/blog/2008/08/17/xen-bug-xen_net-memory-squeeze-in-netback-driver-32bit-pae/">Xen Bug: xen_net: Memory squeeze in netback driver (32bit PAE)</a>.</li>
<li>Merci à BitFolk pour les <a href="http://bitfolk.com/customer_information.html">informations techniques pour clients VPS</a>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-04-06T09:25:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/systeme/logiciels/configurer-les-depots-de-sources-testing-sur-debian-stable">
    <title>Configurer les dépôts de sources Testing sur Debian Stable</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/systeme/logiciels/configurer-les-depots-de-sources-testing-sur-debian-stable</link>
    <description>Ce guide ajoute les dépôts des sources Testing sur Debian Stable sans perturber le fonctionnement normal du système.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 6.0 Squeeze</li>
</ul>
<h2>Mise en place des dépôts</h2>
<p>Ajoutez les dépôts à la configuration Apt:</p>
<pre>command echo "# Debian testing sources repository.<br />deb-src ftp://mir1.ovh.net/debian/ testing main contrib non-free" \<br />    &gt; '/etc/apt/sources.list.d/testing-src.list'</pre>
<p>Assignez une très faible priorité aux paquets testing pour ne pas polluer le système:</p>
<pre>command echo "Package: *<br />Pin: release o=Debian,a=testing,l=Debian<br />Pin-Priority: 90" \<br />    &gt; '/etc/apt/preferences.d/testing-src'<br /></pre>
<p>Mettez à jour la liste des paquets disponibles:</p>
<pre>command apt-get update</pre>
<h2>Utilisation</h2>
<p>Vous avez maintenant accès aux sources des logiciels présents dans les dépôts Testing . Pour obtenir la source d'un logiciel depuis les dépôts testing, utilisez  l'option -t:</p>
<pre># command apt-get -t "testing" source "package"</pre>
<h2>Remerciements</h2>
<ul>
<li>Merci à <a class="external-link" href="http://jeyg.info/">jeyg.info</a> pour <a class="external-link" href="http://jeyg.info/les-branches-debian-et-lapt-pinning/">Les branches Debian et l'APT Pinning</a><span class="link-external"><span class="external-link"><span class="external-link"></span></span></span>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-03-06T19:33:48Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/supervision/installer-monit-sur-debian">
    <title>Installer Monit sur Debian</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/applications-web/supervision/installer-monit-sur-debian</link>
    <description>Monit est un outil de supervision ayant la particularité de pouvoir redémarrer les services rencontrant des problèmes. Cette approche est particulièrement intéressante pour les démons rencontrant des crashs réguliers.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 6.0 Squeeze</li>
</ul>
<h2>Prérequis</h2>
<p>Ce guide nécessite :</p>
<ul>
<li>un serveur HTTP Apache 2 avec le script <b>a2tools</b> disponible dans le guide <a class="internal-link" href="../../../serveurs/apache-2/installer-et-configurer-apache-2-sur-debian">Installer Apache 2 sur Debian</a>.</li>
</ul>
<ul>
</ul>
<h2>Paramètres</h2>
<p>Renseignez l'adresse e-mail notifiée en cas de problème:</p>
<pre>ALERT_EMAIL="<b>root@localhost</b>"</pre>
<p>Renseignez le nom de domaine où sera disponible l'application:</p>
<pre>DOMAIN="<b>monit.domain.com</b>"
</pre>
<p>Renseignez le nom du certificat SSL à utiliser (créé via la procédure <a class="internal-link" href="../../../serveurs/http/creer-un-certificat-ssl-sur-debian">Créer un certificat SSL / TLS sur Debian</a>) (optionnel, recommandé):</p>
<pre>SSL_KEY_NAME="<b>${DOMAIN}</b>"</pre>
<h2>Installation</h2>
<h3>Préparation de l'environnement</h3>
<p>Installez les logiciels:</p>
<pre>command apt-get install monit apg</pre>
<h3>Configuration</h3>
<p>Configurez le délai entre deux vérifications (ici, 2 minutes):</p>
<pre>echo "# Delay in seconds between 2 polls:<br />set daemon 120" \<br />  &gt; '/etc/monit/conf.d/000-base-configuration'<br /></pre>
<p>Configurez l'adresse email notifiée en cas de problème:</p>
<pre>command echo "# Email notified when a service has errors.<br />set mailserver localhost<br />set alert ${ALERT_EMAIL}" \<br />  &gt; '/etc/monit/conf.d/000-alert-email'<br /></pre>
<p>Activez la journalisation des messages de monit par syslog:</p>
<pre>command echo "# Log monit message to /var/log/syslog<br />set logfile syslog facility log_daemon" \<br />  &gt; '/etc/monit/conf.d/000-logging'<br /></pre>
<p>Déterminez un mot de passe aléatoire pour l'accès à l'interface Web du logiciel:</p>
<pre>ADMIN_PASSWORD="$(command apg -m 16 -x 32 -n 1 -a 1 -M NCLS -E "\'\!$" )"</pre>
<p>Configurez l'accès à l'interface Web affichant les statuts du logiciel:</p>
<pre class="code">command echo "# Enable HTTP status page.<br />set httpd port 2812 and<br />    use address localhost  # only accept connection from localhost<br />    allow localhost        # allow localhost to connect to the server and<br />    allow admin:${ADMIN_PASSWORD}" \<br />  &gt; '/etc/monit/conf.d/000-http-status-page'
</pre>
<p>Activez le démon:</p>
<pre>command sed -i \<br />    -e 's/^startup=.*/startup=1/' \<br />  '/etc/default/monit'</pre>
<p>Démarrez le démon:</p>
<pre>/etc/init.d/monit start</pre>
<p>Configurez Apache pour afficher les données du logiciel sur le domaine choisi:</p>
<pre>if [ -n "${SSL_KEY_NAME}" -a -e "/etc/ssl/private/${SSL_KEY_NAME}.key" ]; then<br />  command a2tools --template=reverse-proxy --ssl="${SSL_KEY_NAME}" "${DOMAIN}" "http://localhost:2812/"<br />  command a2tools --template=redirect "${DOMAIN}" "https://${DOMAIN}/"<br />else<br />  command a2tools --template=reverse-proxy "${DOMAIN}" "http://localhost:2812/"<br />fi</pre>
<p>Utilisez ces informations pour vous connecter à l'interface Web de l'outil:</p>
<pre>echo "URL: http://${DOMAIN}/<br />Login: admin<br />Password: ${ADMIN_PASSWORD}"<br /></pre>
<h2>Surveillance des services</h2>
<h3>Système</h3>
<p>Configurez la surveillance des ressources du système:</p>
<pre>echo "# Check general system resources such as load average, cpu and memory<br /># usage. Each test specifies a resource, conditions and the action to be<br /># performed should a test fail.<br />check system $(command hostname --fqdn)<br />   group base<br />   if loadavg (1min) &gt; 4 then alert<br />   if loadavg (5min) &gt; 2 then alert<br />   if memory usage &gt; 75% then alert<br />   if cpu usage (user) &gt; 70% then alert<br />   if cpu usage (system) &gt; 30% then alert<br />   if cpu usage (wait) &gt; 20% then alert" \<br />  &gt; '/etc/monit/conf.d/system'</pre>
<p>Redémarrez le démon:</p>
<pre>/etc/init.d/monit restart<br /></pre>
<h3>Espace disque</h3>
<p>Créez le fichier de configuration de la surveillance de l'espace disque:</p>
<pre>echo '# Free disk space monitoring.<br /><br /># root (/) file system.<br />check filesystem rootfs<br />  with path /<br />  group system<br />  if space usage &gt; 85% then alert' \<br />&gt; '/etc/monit/conf.d/disks'<br /></pre>
<p>Ajoutez les partitions montées à la surveillance:</p>
<pre>command mount \
  | command grep '^/dev' \<br />  | command grep -v ' / ' \<br />  | command grep -v 'swap' \
  | command cut --delimiter=' ' --field=3 \<br />  | while read FILE; do<br />    command echo "<br /># ${FILE} filesystem.<br />check filesystem $(echo "${FILE}" | command sed -e 's|^/||')<br />  with path ${FILE}<br />  group system<br />  if space usage &gt; 95% then alert" \<br />      &gt;&gt; '/etc/monit/conf.d/disks'<br />done</pre>
<p>Redémarrez le démon:</p>
<pre>/etc/init.d/monit restart</pre>
<h3>SSH</h3>
<p>Configuration la surveillance du serveur SSH:</p>
<pre>if [ -e '/etc/init.d/ssh' ]; then<br />  SSH_PORT=$(command grep '^Port' '/etc/ssh/sshd_config' \<br />      | command sed -e 's/^Port[\t ]*//g') <br />  command echo "# SSH server monitoring
check process sshd with pidfile /var/run/sshd.pid
  group base
  start program \"/etc/init.d/ssh start\"
  stop program \"/etc/init.d/ssh stop\"
  if failed host 127.0.0.1 port ${SSH_PORT} protocol ssh then restart
  if 5 restarts within 5 cycles then timeout" \<br />    &gt; '/etc/monit/conf.d/ssh'<br />fi</pre>
<p>Redémarrez le démon:</p>
<pre>/etc/init.d/monit restart</pre>
<h3>Apache 2</h3>
<p>Configurez la surveillance d'Apache 2:</p>
<pre>if [ -e '/etc/init.d/apache2' ]; then<br />  command echo '# Apache 2 server monitoring
check process apache2 with pidfile /var/run/apache2.pid
  group httpd
  start program = "/etc/init.d/apache2 start" with timeout 60 seconds
  stop program = "/etc/init.d/apache2 stop"
  if 3 restarts within 5 cycles then timeout
  if cpu is greater than 60% for 2 cycles then alert
  if cpu &gt; 80% for 5 cycles then restart
  if children &gt; 250 then restart<br />  if loadavg(5min) greater than 10 for 8 cycles then stop<br />  if failed host 127.0.0.1 port 80<br />      protocol http<br />    then restart' \<br />    &gt; '/etc/monit/conf.d/apache2'<br />fi</pre>
<p>Redémarrez le démon:</p>
<pre>/etc/init.d/monit restart</pre>
<h3>MySQL</h3>
<p>Configurez la surveillance de MySQL:</p>
<pre>if [ -e '/etc/init.d/mysql' ]; then<br />  command echo '# MySQL server monitoring
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
  group database
  start program = "/etc/init.d/mysql start"
  stop program = "/etc/init.d/mysql stop"
  if failed host 127.0.0.1 port 3306 then restart
  if 5 restarts within 5 cycles then timeout' \<br />    &gt; '/etc/monit/conf.d/mysql'<br />fi</pre>
<p>Redémarrez le démon:</p>
<pre>/etc/init.d/monit restart</pre>
<h3>Exim 4</h3>
<p>Configurez la surveillance d'Exim 4:</p>
<pre>if [ -e '/etc/init.d/exim4' ]; then<br /> command echo '# Exim 4 server monitoring<br />check process exim4 with pidfile /var/run/exim4/exim.pid<br /> group mail<br /> start program = "/etc/init.d/exim4 start"<br /> stop  program = "/etc/init.d/exim4 stop"<br /> if failed port 25 protocol smtp then restart<br /> if 5 restarts within 5 cycles then timeout'<br />   &gt; '/etc/monit/conf.d/exim4'<br />fi</pre>
<p>Redémarrez le démon:</p>
<pre>/etc/init.d/monit restart</pre>
<h3>vsFTPd</h3>
<p>Configurez la surveillance de vsFTPd:</p>
<pre>if [ -e '/etc/init.d/vsftpd' ]; then
  command echo '# vsFTPd server monitoring
check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
  group ftp
  start program = "/etc/init.d/vsftpd start"
  stop program  = "/etc/init.d/vsftpd stop"
  if failed port 21 protocol ftp then restart
  if 5 restarts within 5 cycles then timeout' \<br />    &gt; '/etc/monit/conf.d/vsftpd'<br />fi</pre>
<p>Redémarrez le démon:</p>
<pre>/etc/init.d/monit restart</pre>
<h3>rTorrent</h3>
<p>Configurez la surveillance de rTorrent (fonctionnelle uniquement avec le port SCGI actif):</p>
<pre>if [ -e '/etc/init.d/rtorrent' ]; then<br />  SCGI_PORT="$(command grep '^scgi_port' '/etc/rtorrent.rc' \<br />    | command cut --delimiter=: --fields=2)"<br />  if [ -n "${SCGI_PORT}" ]; then<br />    command echo "# rTorrent daemon monitoring
check process rtorrent with pidfile /var/run/rtorrent.pid
  group various
  start program = \"/etc/init.d/rtorrent start\" with timeout 60 seconds
  stop program  = \"/etc/init.d/rtorrent stop\"
  if failed port ${SCGI_PORT} then restart
  if 5 restarts within 5 cycles then timeout" \<br />      &gt; '/etc/monit/conf.d/rtorrent'<br />  fi<br />fi</pre>
<p>Redémarrez le démon:</p>
<pre>/etc/init.d/monit restart</pre>
<h2>Remerciements</h2>
<ul>
<li>Merci aux développeurs de <a class="external-link" href="http://mmonit.com/monit/">Monit</a>.</li>
<li>Merci à <a class="external-link" href="http://www.alsacreations.com/profil/lire/2-dew.html">dew</a> de <a class="external-link" href="http://www.alsacreations.com/">Alsacreation</a> pour <a class="external-link" href="http://www.alsacreations.com/tuto/lire/613-Monitoring-serveur.html">Monitoring serveur</a>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-02-06T17:35:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/divers/installer-le-generateur-de-sprites-css-spriteme-sur-debian">
    <title>Installer le générateur de sprites CSS SpriteMe sur Debian</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/applications-web/divers/installer-le-generateur-de-sprites-css-spriteme-sur-debian</link>
    <description>SpriteMe est un service de génération automatisée de sprites CSS. Ce guide vous aide à mettre en place une version auto-hébergée de cet outil.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 6.0 Squeeze</li>
</ul>
<h2>Prérequis</h2>
<p>Ce guide nécessite :</p>
<ul>
<li>L'un de ces serveurs HTTP: 
<ul>
<li>Apache 2 avec l'outil <b>a2tools</b> disponible dans <a class="internal-link" href="../../serveurs/apache-2/installer-et-configurer-apache-2-sur-debian">Installer et configurer Apache 2 sur Debian</a>.</li>
<li>Lighttpd avec l'outil <b>lighty-tools</b> disponible dans <a class="internal-link generated" href="../../serveurs/http/installer-et-configurer-lighttpd-sur-debian" title="Installer Lighttpd et PHP 5 sur Debian 4.0 Etch">Installer et configurer Lighttpd sur Debian</a>.</li>
</ul>
</li>
<li>un serveur HTTP avec support du PHP, comme décrit par <a class="internal-link" href="../../serveurs/php/installer-php-fpm-sur-debian">Installer PHP-FPM sur Debian</a>.</li>
</ul>
<ul>
<li>l'<a class="internal-link" href="../../serveurs/php/gerer-la-configuration-php-en-ligne-de-commande">outil php-tools de configuration simplifiée de PHP</a>.</li>
</ul>
<ul>
<li>un serveur MySQL, comme décrit par <a class="internal-link" href="../../serveurs/bases-de-donnees/installer-et-configurer-mysql-sur-debian">Installer et configurer MySQL sur Debian</a>.</li>
<li>l'<a class="internal-link" href="../../serveurs/bases-de-donnees/simplifier-ladministration-dun-server-mysql-avec-mysql-tools">outil <b>mysql-tools</b> d'administration simplifiée de MySQL</a> sur l'hôte local (et l'hôte du serveur MySQL, si différent).</li>
</ul>
<h2>Paramètres</h2>
<p>Renseignez le nom de domaine où sera disponible l'application:</p>
<pre>DOMAIN="<b>spriteme.domain.com</b>"
</pre>
<p>Renseignez le nom d'hôte du serveur MySQL:</p>
<pre>MYSQL_HOST="<b>localhost</b>"</pre>
<p>Si le serveur MySQL n'est pas local, l'outil mysql-tools essaiera de   s'y connecter avec le client MySQL, ou, en cas d'échec de connexion,  via  une connexion SSH.</p>
<h2>Installation</h2>
<p>Déterminez le chemin d'installation:</p>
<pre>INSTALL_PATH="/opt/spriteme/${DOMAIN}"<br /></pre>
<p>Déterminez le chemin des données:</p>
<pre>DATA_PATH="/var/lib/spriteme/${DOMAIN}"<br /></pre>
<p>Assurez-vous que le dossier parent existe:</p>
<pre>command mkdir --parent "$(command dirname "${INSTALL_PATH}")"<br /></pre>
<h3>Préparation de l'environnement</h3>
<p>Installez les logiciels nécessaires:</p>
<pre>command apt-get install subversion git pngcrush php5-imagick php5-cli<br /></pre>
<p>Augmentez la taille maximale des variables de GET:</p>
<pre>command php-tools --for="spriteme" --set="suhosin.get.max_value_length" "4096"<br /></pre>
<p>Rechargez la configuration de PHP:</p>
<pre>test -x /etc/init.d/php5-fpm &amp;&amp; /etc/init.d/php5-fpm force-reload<br />test -x /etc/init.d/apache2 &amp;&amp; /etc/init.d/apache2 force-reload<br />test -x /etc/init.d/lighttpd &amp;&amp; /etc/init.d/lighttpd force-reload<br />test -x /etc/init.d/nginx &amp;&amp; /etc/init.d/nginx force-reload</pre>
<h3>Mise en place de l'application</h3>
<p>Obtenez les sources de SpriteMe:</p>
<pre>﻿﻿﻿command svn checkout 'http://spriteme.googlecode.com/svn/trunk/' "${INSTALL_PATH}"</pre>
<p>Obtenez les sources de CoolRunnings:</p>
<pre>command git clone 'http://github.com/6a68/coolrunnings' "${INSTALL_PATH}/coolrunnings"</pre>
<h3>Mise en conformité avec la LSB</h3>
<p>Mettez en place une architecture de dossiers conforme à la LSB:</p>
<pre>command mkdir --parent "${DATA_PATH}"<br />command mv "${INSTALL_PATH}/coolrunnings/public_images" "${DATA_PATH}"<br />command ln -s "${DATA_PATH}/public_images" "${INSTALL_PATH}/coolrunnings/"<br />command chown -R www-data:www-data "${DATA_PATH}"
</pre>
<h3>Création de la base de données</h3>
<p>Créez la base de données:</p>
<pre>MYSQL_PARAMS="$(command mysql-tools --server="${MYSQL_HOST}" --with-ssh \<br />            --auto-hosts --db-prefix="spriteme" --create "${DOMAIN}")"</pre>
<p>Récupérez les paramètres de la nouvelle base de données:</p>
<pre>MYSQL_DB="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_DB" \
    | cut --delimiter="=" --fields="2-")"
MYSQL_USER="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_USER" \
    | cut --delimiter="=" --fields="2-")"
MYSQL_PASSWORD="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_PASSWORD" \
    | cut --delimiter="=" --fields="2-")"
echo "${MYSQL_PARAMS}"
</pre>
<h3>Configuration</h3>
<p>Configurez la connexion à la base de données:</p>
<pre>command sed -i \<br />    -e "s/examples.stevesouders.com/${MYSQL_HOST}/g" \<br />    -e "s/perfprofile/${MYSQL_DB}/g" \<br />  "${INSTALL_PATH}/results.php"<br />command mkdir --parent "${INSTALL_PATH}/private"<br />command echo "&lt;?php<br />\$gsAuth1 = '${MYSQL_USER}';<br />\$gsAuth2 = '${MYSQL_PASSWORD}';" &gt; "${INSTALL_PATH}/private/db.php"</pre>
<p>Créez les tables:</p>
<pre>command sed -i -e "s|^//createTables();|createTables();|g" "${INSTALL_PATH}/results.php"<br />command php5 "${INSTALL_PATH}/results.php" &gt; '/dev/null'<br />command sed -i -e "s|^createTables();|//createTables();|g" "${INSTALL_PATH}/results.php"<br /></pre>
<p>Ajustez l'URL du service SpriteMe dans le code de SpriteMe:</p>
<pre>command sed -i -e "s|http://spriteme.org|http://${DOMAIN}|g" "${INSTALL_PATH}/spriteme.js"<br />command sed -i -e "s|http://spriteme.org|http://${DOMAIN}|g" "${INSTALL_PATH}/autospriteme.user.js"<br /></pre>
<p>Ajustez l'URL du service coolrunnings dans le code de SpriteMe:</p>
<pre>command sed -i -e "s|http://jaredhirsch.com/coolrunnings/index.php|http://${DOMAIN}/coolrunnings/index.php|g" "${INSTALL_PATH}/spriteme.js"<br /></pre>
<p>Ajustez les paramètres de CoolRunnings:</p>
<pre>command sed -i \<br />    -e "s|'/var/www/html/'|realpath(dirname(__FILE__) . '/../../') . '/'|g" \<br />    -e "s|http://localhost/|http://${DOMAIN}/|g" \<br />  "${INSTALL_PATH}/coolrunnings/library/FrontController.php"</pre>
<p>Créez la configuration du serveur HTTP:</p>
<pre>if [ -x "/usr/bin/a2tools" ]; then
  command a2tools "${DOMAIN}" "${INSTALL_PATH}"
fi
if [ -x "/usr/bin/lighty-tools" ]; then
  command lighty-tools add-vhost "${DOMAIN}" "${INSTALL_PATH}"
fi
</pre>
<p>L'outil est maintenant disponible sur le domaine spécifié.</p>
<h2>Sauvegardes</h2>
<p>Sauvegardez l'installation avec Backup Manager (voir <a class="internal-link" href="../../../systeme/logiciels/installer-et-configurer-backup-manager-sur-debian"><span class="generated">Installer et configurer Backup Manager sur Debian</span></a>):</p>
<pre>command backup-manager-tools add "${INSTALL_PATH}"<br />command backup-manager-tools add "${DATA_PATH}"</pre>
<p>N'oubliez pas de sauvegarder la base de données (voir <a class="generated internal-link" href="../../../serveurs/bases-de-donnees/installer-et-configurer-mysql-sur-debian" title="MySQL sur Debian 4.0 Etch">Installer et configurer MySQL sur Debian</a>).</p>
<h2>Remerciements</h2>
<ul>
<li>Merci aux développeurs de <a class="external-link" href="http://code.google.com/p/spriteme/">SpriteMe</a>.</li>
<li>Merci à <a class="external-link" href="http://jaredhirsch.com/">Jared Hirsch</a> pour <a class="external-link" href="https://github.com/6a68/coolrunnings">CoolRunnings</a>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-01-20T22:40:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/applications-commerciales/installer-lapplication-de-gestion-des-utilisateurs-amember-pro-sur-debian">
    <title>Installer aMember Pro sur Debian</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/applications-web/applications-commerciales/installer-lapplication-de-gestion-des-utilisateurs-amember-pro-sur-debian</link>
    <description>aMember est une application PHP spécialisée dans la gestion des utilisateurs. Elle permet de mettre en place une politique complexe d'abonnements pour un site web tiers.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 7.0 Wheezy</li>
</ul>
<p>Ce guide est testé avec ces versions d'aMember:</p>
<ul>
<li>4.2.14</li>
</ul>
<h2>Prérequis</h2>
<p>Ce guide nécessite :</p>
<ul>
<li>un serveur HTTP Apache 2 avec l'outil <b>a2tools</b> disponible dans <a class="internal-link" href="../serveurs/apache-2/installer-et-configurer-apache-2-sur-debian">Installer et configurer Apache 2 sur Debian</a>.</li>
</ul>
<ul>
<li>un serveur HTTP Apache 2 avec support du PHP, comme décrit par <a class="internal-link" href="../serveurs/php/installer-php-fpm-sur-debian">Installer PHP-FPM sur Debian</a>.</li>
</ul>
<ul>
<li>l'<a class="internal-link" href="../serveurs/php/gerer-la-configuration-php-en-ligne-de-commande">outil php-tools de configuration simplifiée de PHP</a>.</li>
</ul>
<ul>
<li>un serveur MySQL, comme décrit par <a class="internal-link" href="../serveurs/bases-de-donnees/installer-et-configurer-mysql-sur-debian">Installer et configurer MySQL sur Debian</a>.</li>
<li>l'<a class="internal-link" href="../serveurs/bases-de-donnees/simplifier-ladministration-dun-server-mysql-avec-mysql-tools">outil <b>mysql-tools</b> d'administration simplifiée de MySQL</a> sur l'hôte local (et l'hôte du serveur MySQL, si différent).</li>
</ul>
<h2>Paramètres</h2>
<p>Renseignez le nom de domaine où sera disponible l'application:</p>
<pre>DOMAIN="<b>amember.domain.com</b>"
</pre>
<p>Renseignez le nom d'hôte du serveur MySQL:</p>
<pre>MYSQL_HOST="<b>localhost</b>"</pre>
<p>Si le serveur MySQL n'est pas local, l'outil mysql-tools essaiera de    s'y connecter avec le client MySQL, ou, en cas d'échec de connexion,   via  une connexion SSH.</p>
<p>Renseignez le nom du certificat SSL à utiliser (créé via la procédure <a class="internal-link" href="../../../serveurs/http/creer-un-certificat-ssl-sur-debian">Créer un certificat SSL / TLS sur Debian</a>):</p>
<pre>SSL_KEY_NAME="<b>${DOMAIN}</b>"<br /></pre>
<p>Renseignez le chemin de l'archive d'aMember sur le serveur:</p>
<pre>AMEMBER_ZIP="<b>/root/amember.zip</b>"<br /></pre>
<h2>Installation</h2>
<p>Déterminez le chemin d'installation:</p>
<pre>INSTALL_PATH="/opt/amember/${DOMAIN}"<br /></pre>
<p>Déterminez le chemin des données:</p>
<pre>DATA_PATH="/var/lib/amember/${DOMAIN}"<br /></pre>
<h3>Préparation de l'environnement</h3>
<p>Installez les logiciels nécessaires:</p>
<pre>command apt-get install php5-mysql php5-cli unzip</pre>
<p>Adaptez la configuration PHP aux besoins de l'outil:</p>
<pre>command php-tools --for="amember" --set "magic_quotes_gpc" "0"<br /></pre>
<p><b>Remarque:</b> cette option de configuration n'existe plus depuis PHP 5.4.0, ignorez l'éventuel message d'erreur.</p>
<p>Rechargez la configuration de PHP:</p>
<pre>test -x /etc/init.d/php5-fpm &amp;&amp; /etc/init.d/php5-fpm force-reload<br />test -x /etc/init.d/apache2 &amp;&amp; /etc/init.d/apache2 force-reload<br />test -x /etc/init.d/lighttpd &amp;&amp; /etc/init.d/lighttpd force-reload<br />test -x /etc/init.d/nginx &amp;&amp; /etc/init.d/nginx force-reload</pre>
<h3>Mise en place de l'application</h3>
<p>Créez le dossier d'installation:</p>
<pre>command mkdir --parent "$(command dirname "${INSTALL_PATH}")"</pre>
<p>Décompressez l'archive:</p>
<pre>command unzip -d "/tmp" "${AMEMBER_ZIP}"</pre>
<p>Déplacez les fichiers vers leur emplacement final:</p>
<pre>command mv "/tmp/amember" "${INSTALL_PATH}"<br /></pre>
<p>Autorisez la création des fichiers de configuration:</p>
<pre>command chown www-data:www-data "${INSTALL_PATH}/.htaccess"<br />command chown www-data:www-data "<i>${INSTALL_PATH}/application/configs"</i></pre>
<p>Corrigez un bug dans la procédure de configuration:</p>
<pre>command sed -i -e '/$base =/a\<br />if(!$base) $base = "/";' \<br />    "${INSTALL_PATH}/setup/index.php"</pre>
<p>Créez la configuration du serveur HTTP pour le domaine:</p>
<pre>if [ -n "${SSL_KEY_NAME}" -a -e "/etc/ssl/private/${SSL_KEY_NAME}.key" ]; then<br />  command a2tools --ssl="${SSL_KEY_NAME}" --overrides='All' "${DOMAIN}" "${INSTALL_PATH}"<br />  command a2tools --template='redirect' "${DOMAIN}" "http://${DOMAIN}/"<br />else<br />  command a2tools --overrides='All' "${DOMAIN}" "${INSTALL_PATH}"<br />fi</pre>
<p>L'outil est maintenant disponible sur le domaine spécifié.</p>
<h3>Mise en conformité avec la LSB</h3>
<p>Mettez en place une architecture de dossier conforme à la LSB:</p>
<pre>command mkdir --parent "${DATA_PATH}"<br />command mv "${INSTALL_PATH}/data" "${DATA_PATH}/data"<br />command ln -s "${DATA_PATH}/data" "${INSTALL_PATH}/data"<br />command chown -R www-data:www-data "${DATA_PATH}/data"<br /></pre>
<h3>Création de la base de données</h3>
<p>Créez la base de données:</p>
<pre>command mysql-tools --server="${MYSQL_HOST}" --with-ssh \<br />            --auto-hosts --db-prefix="amember" --create "${DOMAIN}"</pre>
<p>Notez les paramètres de connexion obtenus.</p>
<p>Déterminez un préfixe de tables aléatoire:</p>
<pre>echo "Suggested table prefix : $(command apg -q -a 0 -n 1 -M NCL)_"</pre>
<h3>Configuration initiale</h3>
<p>Accédez à la configuration du logiciel via l'URL fournie par:</p>
<pre>echo "http://${DOMAIN}/setup/index.php"<br /></pre>
<h3>Finalisation</h3>
<p>Mettez en place la tâche cron:</p>
<pre>echo "# ${DOMAIN} aMember cron task (every minute)<br />0 * * * *    www-data   test -x '/usr/bin/wget' -a -e '${INSTALL_PATH}/cron.php' &amp;&amp; /usr/bin/wget --output-document=- --no-check-certificate --quiet 'http://${DOMAIN}/cron.php'" \<br />  &gt; "/etc/cron.d/amember-${DOMAIN//./-}"<br /></pre>
<p><b>Remarque:</b> assurez-vous d'activer les tâches cron externe dans les options avancées de l'administration d'aMember.</p>
<p>Rechargez la configuration de cron:</p>
<pre>/etc/init.d/cron reload<br /></pre>
<p>Une fois l'application correctement configurée, renforcez sa sécurité en retirant l'accès en écriture aux fichiers de configuration et en supprimant le dossier setup:</p>
<pre>command chown -R root:root "${INSTALL_PATH}/.htaccess" "${INSTALL_PATH}/application/configs"<br />command rm -r "${INSTALL_PATH}/setup"
</pre>
<h2>Sauvegardes</h2>
<p>Sauvegardez l'installation avec Backup Manager (voir <a class="internal-link" href="../systeme/logiciels/installer-et-configurer-backup-manager-sur-debian"><span class="generated">Installer et configurer Backup Manager sur Debian</span></a>):</p>
<pre>command backup-manager-tools add "${INSTALL_PATH}"<br />command backup-manager-tools add "${DATA_PATH}"</pre>
<p>N'oubliez pas de sauvegarder la base de données (voir <a class="internal-link generated" href="../serveurs/bases-de-donnees/installer-et-configurer-mysql-sur-debian" title="MySQL sur Debian 4.0 Etch">Installer et configurer MySQL sur Debian</a>).</p>
<h2>Mise à jour</h2>
<p>Renseignez le domaine de l'installation obsolète:</p>
<pre>DOMAIN="<b>amember.domain.com</b>"</pre>
<p>Déterminez le chemin d'installation:</p>
<pre>INSTALL_PATH="<b>/opt/amember/${DOMAIN}</b>"
</pre>
<p>Nettoyez le chemin:</p>
<pre>INSTALL_PATH="$(command echo "${INSTALL_PATH}" | command sed -e 's|/$||g')"</pre>
<p>Sauvegardez l'installation mise à jour:</p>
<pre>command test -e "${INSTALL_PATH}.old" &amp;&amp; command rm -r "${INSTALL_PATH}.old"<br />command cp -a "${INSTALL_PATH}" "${INSTALL_PATH}.old"</pre>
<p>Ajustez les permissions des fichiers:</p>
<pre>command chown -R www-data:www-data "${INSTALL_PATH}"</pre>
<p>Accédez à l'outil de mise à jour automatique via l'URL fournie par:</p>
<pre>command echo "http://${DOMAIN}/admin-upgrade"</pre>
<p>Effectuez la mise à jour.</p>
<p>Une fois la mise à jour terminée, sécurisez l'installation en restaurant les permissions par défaut des fichiers et en supprimant l'outil d'installation:</p>
<pre>command chown -R root:root "${INSTALL_PATH}"<br />command rm -r "${INSTALL_PATH}/setup"
</pre>
<h2>Remerciements</h2>
<ul>
<li>Merci aux développeurs de <a class="external-link" href="http://www.amember.com/">aMember</a>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-01-18T14:10:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/applications-commerciales">
    <title>Applications commerciales</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/applications-web/applications-commerciales</link>
    <description>Guides d'installation pour des applications nécessitant l'achat d'une licence.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-01-18T14:09:10Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/applications-web/gestion-de-fichiers/installer-le-service-de-stockage-owncloud-sur-debian">
    <title>Installer OwnCloud sur Debian</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/applications-web/gestion-de-fichiers/installer-le-service-de-stockage-owncloud-sur-debian</link>
    <description>OwnCloud est un concurrent auto-hébergé à Dropbox. Il peut vous intéresser si vous souhaitez conserver le contrôle de vos données.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 6.0 Squeeze</li>
<li>Debian 7.0 Wheezy</li>
</ul>
<p>Ce guide est testé avec ces versions d'OwnCloud:</p>
<ul>
<li>4.5.5</li>
<li>5.0.5</li>
</ul>
<h2>Prérequis</h2>
<p>Ce guide nécessite :</p>
<ul>
<li>Un serveur HTTP Apache 2 avec l'outil <b>a2tools</b> disponible dans <a class="internal-link" href="../../serveurs/apache-2/installer-et-configurer-apache-2-sur-debian">Installer et configurer Apache 2 sur Debian</a>.</li>
</ul>
<ul>
<li>un serveur HTTP Apache 2 avec support du PHP, comme décrit par <a class="internal-link" href="../../serveurs/php/installer-php-fpm-sur-debian">Installer PHP-FPM sur Debian</a>.</li>
</ul>
<ul>
<li>l'<a class="internal-link" href="../../serveurs/php/gerer-la-configuration-php-en-ligne-de-commande">outil php-tools de configuration simplifiée de PHP</a>.</li>
</ul>
<ul>
<li>un serveur MySQL, comme décrit par <a class="internal-link" href="../../serveurs/bases-de-donnees/installer-et-configurer-mysql-sur-debian">Installer et configurer MySQL sur Debian</a>.</li>
<li>l'<a class="internal-link" href="../../serveurs/bases-de-donnees/simplifier-ladministration-dun-server-mysql-avec-mysql-tools">outil <b>mysql-tools</b> d'administration simplifiée de MySQL</a> sur l'hôte local (et l'hôte du serveur MySQL, si différent).</li>
</ul>
<h2>Paramètres</h2>
<p>Renseignez le nom de domaine où sera disponible l'application:</p>
<pre>DOMAIN="<b>cloud.domain.com</b>"
</pre>
<p>Renseignez le nom d'hôte du serveur MySQL:</p>
<pre>MYSQL_HOST="<b>localhost</b>"</pre>
<p>Si le serveur MySQL n'est pas local, l'outil mysql-tools essaiera de   s'y connecter avec le client MySQL, ou, en cas d'échec de connexion,  via  une connexion SSH.</p>
<p>Renseignez le nom du certificat SSL à utiliser pour chiffrer l'application avec HTTPS (créé via la procédure <a class="internal-link" href="../../../serveurs/http/creer-un-certificat-ssl-sur-debian">Créer un certificat SSL / TLS sur Debian</a>) (optionnel, recommandé):</p>
<pre>SSL_KEY_NAME="<b>${DOMAIN}</b>"</pre>
<h2>Installation</h2>
<p>Déterminez le chemin d'installation:</p>
<pre>INSTALL_PATH="/opt/owncloud/${DOMAIN}"<br /></pre>
<p>Déterminez le chemin des données:</p>
<pre>DATA_PATH="/var/lib/owncloud/${DOMAIN}"<br /></pre>
<p>Créez les dossiers:</p>
<pre>command mkdir --parent "${INSTALL_PATH}"<br />command mkdir --parent "${DATA_PATH}"<br /></pre>
<h3>Préparation de l'environnement</h3>
<p>Installez les logiciels nécessaires:</p>
<pre>command apt-get install apg php5-mysql php5-gd php5-cli php-xml-parser php5-intl \<br />    php5-sqlite curl libcurl3 php5-curl bzip2</pre>
<p>Installez le client SMB:</p>
<pre>DEBIAN_FRONTEND='noninteractive' command apt-get install smbclient</pre>
<p>Générez la locale en_US.UTF-8 si nécessaire:</p>
<pre>if [ -z "$(command grep '^en_US.UTF-8 UTF-8' '/etc/locale.gen')" ]; then<br />  command echo 'en_US.UTF-8 UTF-8' &gt;&gt; '/etc/locale.gen'<br />  command locale-gen<br />fi</pre>
<p>Adaptez la configuration PHP aux besoins de l'outil:</p>
<pre>command php-tools --for="owncloud" --set "upload_max_filesize" "10G"<br />command php-tools --for="owncloud" --set "post_max_size" "10G"<br /></pre>
<p>Rechargez la configuration de PHP:</p>
<pre>test -x /etc/init.d/php5-fpm &amp;&amp; /etc/init.d/php5-fpm force-reload<br />test -x /etc/init.d/apache2 &amp;&amp; /etc/init.d/apache2 force-reload<br />test -x /etc/init.d/lighttpd &amp;&amp; /etc/init.d/lighttpd force-reload<br />test -x /etc/init.d/nginx &amp;&amp; /etc/init.d/nginx force-reload</pre>
<h3>Mise en place de l'application</h3>
<p>Détectez la dernière version du logiciel:</p>
<pre>SOURCE_URL="$(wget --quiet --output-document=- 'http://owncloud.org/install' \<br />    | command grep "owncloud-" | command grep -v ".md5" \<br />    | command tail -n 1 | command cut --delimiter='"' --fields=2)"<br />VERSION="$(command echo "${SOURCE_URL}" | command sed -e 's/.*owncloud-\(.*\)\.tar.\bz2/\1/g')"<br /></pre>
<p>Téléchargez la dernière version de l'application:</p>
<pre>command wget "${SOURCE_URL}" \
    --output-document="/tmp/owncloud.tar.bz2"
</pre>
<p>Décompressez l'archive:</p>
<pre>command tar --strip-components=1 --directory="${INSTALL_PATH}" -xjf "/tmp/owncloud.tar.bz2"
</pre>
<p>Supprimez l'archive:</p>
<pre>command rm "/tmp/owncloud.tar.bz2"</pre>
<p>Ajustez les permissions des fichiers:</p>
<pre>command chown -R root:root "${INSTALL_PATH}"<br />command chmod 755 "${INSTALL_PATH}/config"<br />command chmod 755 "${INSTALL_PATH}/apps"<br />command mkdir --parent "${INSTALL_PATH}/data"<br />command chmod 750 "${INSTALL_PATH}/data"<br />command chown www-data:www-data "${INSTALL_PATH}/config/" "${INSTALL_PATH}/data" "${INSTALL_PATH}/apps"</pre>
<p>Créez la configuration du serveur HTTP pour le domaine:</p>
<pre>if [ -n "${SSL_KEY_NAME}" -a -e "/etc/ssl/private/${SSL_KEY_NAME}.key" ]; then<br />  command a2tools --overrides="All" --ssl="${SSL_KEY_NAME}" "${DOMAIN}" "${INSTALL_PATH}"<br />  command a2tools --template='redirect' "${DOMAIN}" "https://${DOMAIN}/"<br />else<br />  command a2tools --overrides="All" "${DOMAIN}" "${INSTALL_PATH}"<br />fi</pre>
<p>L'outil est maintenant disponible sur le domaine choisi.</p>
<h3>Mise en conformité avec la LSB</h3>
<p>Mettez en place une architecture de dossier conforme à la LSB:</p>
<pre>command mkdir --parent "${DATA_PATH}/data"<br />command mv "${INSTALL_PATH}/apps" "${DATA_PATH}/apps"<br />command ln -s "${DATA_PATH}/apps" "${INSTALL_PATH}/apps"<br />command chown www-data:www-data "${DATA_PATH}/apps"<br />command chmod 750 "${DATA_PATH}/data"<br />command chown -R www-data:www-data "${DATA_PATH}/data"<br /></pre>
<h3>Création de la base de données</h3>
<p>Créez la base de données:</p>
<pre>MYSQL_PARAMS="$(command mysql-tools --server="${MYSQL_HOST}" --with-ssh \<br />            --auto-hosts --db-prefix="owncloud" --create "${DOMAIN}")"</pre>
<p>Récupérez les paramètres de la nouvelle base de données:</p>
<pre>MYSQL_DB="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_DB" \
    | cut --delimiter="=" --fields="2-")"
MYSQL_USER="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_USER" \
    | cut --delimiter="=" --fields="2-")"
MYSQL_PASSWORD="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_PASSWORD" \
    | cut --delimiter="=" --fields="2-")"
echo "${MYSQL_PARAMS}"
</pre>
<p>Notez les informations de connexion fournies par la commande.</p>
<p>Déterminez un préfixe de tables aléatoire:</p>
<pre>TABLE_PREFIX="$(command apg -q -a 0 -n 1 -M NCL)_"</pre>
<h3>Configuration initiale</h3>
<p>Déterminez une valeur pour le mot de passe de l'administrateur:</p>
<pre>ADMIN_PASSWORD="$(command apg -m 16 -x 32 -n 1 -a 1 -M NCLS -E "'$")"</pre>
<p>Créez le fichier d'auto-configuration:</p>
<pre><i>echo "&lt;?php
\$AUTOCONFIG = array(
</i><i>  'adminlogin' =&gt; 'admin',
  'adminpass' =&gt; '${ADMIN_PASSWORD}',<br />  'dbtype' =&gt; 'mysql',<br />  'dbname' =&gt; '</i>${MYSQL_DB}<i>',<br />  'dbuser' =&gt; '</i>${MYSQL_USER}<i>',<br />  'dbpass' =&gt; '</i>${MYSQL_PASSWORD}<i>',<br />  'dbhost' =&gt; '</i>${MYSQL_HOST}<i>',<br />  'dbtableprefix' =&gt; '${TABLE_PREFIX}',</i><br />  'directory' =&gt; '${DATA_PATH}/data'<br /><i>);" &gt; "${INSTALL_PATH}/config/autoconfig.php"</i><br />command chown www-data:www-data "${INSTALL_PATH}/config/autoconfig.php"<br /></pre>
<p>Connectez-vous à l'instance OwnCloud pour générer la configuration:</p>
<pre>echo "OwnCloud administration login:<br />URL:      http://${DOMAIN}/<br />Login:    admin<br />Password: ${ADMIN_PASSWORD}"<br /></pre>
<h3>Réglages recommandés</h3>
<p>Les réglages suivants sont fortement recommandés:</p>
<ul>
<li><b>Gestion des fichiers:</b> Désactiver le téléchargement ZIP (cette fonctionnalité peut causer des problèmes avec l'outil de synchronisation).</li>
<li><b>Cron:</b> Utilise le service cron du système</li>
</ul>
<h3>Finalisation</h3>
<p>Améliorez la configuration par défaut de OwnCloud:</p>
<pre>command sed -i \<br />    -e "/installed/a\\<br />  'mail_smtpmode' =&gt; 'smtp',\\<br />  'logfile' =&gt; '/var/log/owncloud-${DOMAIN}.log',\\<br />  'apps_paths' =&gt; array(\\<br />    array(\\<br />      'path'=&gt; '${DATA_PATH}/apps',\\<br />      'url' =&gt; '/apps',\\<br />      'writable' =&gt; true,\\<br />    ),\\<br />  )," \<br />  "${INSTALL_PATH}/config/config.php"<br /></pre>
<p>Créez le fichier journal initial:</p>
<pre>command touch "/var/log/owncloud-${DOMAIN}.log"<br />command chown www-data:adm "/var/log/owncloud-${DOMAIN}.log"</pre>
<p>Mettez en place la rotation des journaux:</p>
<pre>echo "/var/log/owncloud-${DOMAIN}.log {<br /> weekly<br /> missingok<br /> rotate 4<br /> compress<br /> delaycompress<br /> notifempty<br /> create 640 www-data adm<br />}" &gt; "/etc/logrotate.d/owncloud-${DOMAIN}"<br /></pre>
<p>Mettez en place la tâche cron:</p>
<pre>echo "# ${DOMAIN} OwnCloud cron task (every minute)<br />*/5 * * * *    www-data   test -x '/usr/bin/php5' -a -e '${INSTALL_PATH}/cron.php' &amp;&amp; /usr/bin/php5 '${INSTALL_PATH}/cron.php'" \<br />  &gt; "/etc/cron.d/owncloud-${DOMAIN//./-}"<br /></pre>
<p>Rechargez la configuration de cron:</p>
<pre>/etc/init.d/cron reload<br /></pre>
<p>Une fois l'application correctement configurée, renforcez sa sécurité en retirant l'accès en écriture au dossier data:</p>
<pre>command chown -R root:root "${INSTALL_PATH}/data"
</pre>
<h2>Sauvegardes</h2>
<p>Sauvegardez l'installation avec Backup Manager (voir <a class="internal-link" href="../../systeme/logiciels/installer-et-configurer-backup-manager-sur-debian"><span class="generated">Installer et configurer Backup Manager sur Debian</span></a>):</p>
<pre>command backup-manager-tools add "${INSTALL_PATH}"<br />command backup-manager-tools add "${DATA_PATH}"</pre>
<p>N'oubliez pas de sauvegarder la base de données (voir <a class="generated internal-link" href="../../serveurs/bases-de-donnees/installer-et-configurer-mysql-sur-debian" title="MySQL sur Debian 4.0 Etch">Installer et configurer MySQL sur Debian</a>).</p>
<h2>Mise à jour</h2>
<p>Renseignez le domaine de l'installation obsolète:</p>
<pre>DOMAIN="<b>cloud.domain.com</b>"</pre>
<p>Déterminez le chemin d'installation:</p>
<pre>INSTALL_PATH="/opt/owncloud/${DOMAIN}"
</pre>
<p>Déterminez le chemin des données:</p>
<pre>DATA_PATH="/var/lib/owncloud/${DOMAIN}"</pre>
<p>Nettoyez le chemin:</p>
<pre>INSTALL_PATH="$(echo "${INSTALL_PATH}" | sed -e 's|/$||g')"
</pre>
<p>Détectez la dernière version du logiciel:</p>
<pre>SOURCE_URL="$(wget --quiet --output-document=- 'http://owncloud.org/install' \<br />    | command grep "owncloud-" | command grep -v ".md5" \<br />    | command tail -n 1 | command cut --delimiter='"' --fields=2)"<br />VERSION="$(command echo "${SOURCE_URL}" | command sed -e 's/.*owncloud-\(.*\)\.tar.\bz2/\1/g')"</pre>
<p>Téléchargez la dernière version de l'application:</p>
<pre>command wget "${SOURCE_URL}" \
    --output-document="/tmp/owncloud.tar.bz2"
</pre>
<p>Sauvegardez l'installation actuelle:</p>
<pre>if [ -e "${INSTALL_PATH}.old" ]; then<br />  command rm -r "${INSTALL_PATH}.old"<br />fi<br />if [ -e "${DATA_PATH}/apps.old" ]; then<br />  command rm -r "${DATA_PATH}/apps.old"<br />fi<br />command cp -a "${INSTALL_PATH}" "${INSTALL_PATH}.old"<br />command cp -a "${DATA_PATH}/apps" "${DATA_PATH}/apps.old"<br /></pre>
<p>Décompressez l'archive:</p>
<pre>command tar --strip-components=1 --directory="${INSTALL_PATH}" -xjf "/tmp/owncloud.tar.bz2"
</pre>
<p>Ajustez les permissions des fichiers:</p>
<pre>command chown -R root:root "${INSTALL_PATH}"<br />command chmod 755 "${INSTALL_PATH}/config"<br />command chmod 755 "${INSTALL_PATH}/apps"<br />command mkdir --parent "${INSTALL_PATH}/data"<br />command chmod 750 "${INSTALL_PATH}/data"<br />command chown www-data:www-data "${INSTALL_PATH}/config/" "${INSTALL_PATH}/config/config.php" "${INSTALL_PATH}/data" "${INSTALL_PATH}/apps"<br />command chown -R www-data:www-data "${DATA_PATH}/apps"<br />command chmod -R 755 "${DATA_PATH}/apps"<br /></pre>
<p>Vérifiez que tout fonctionne correctement.</p>
<p>Supprimez les sauvegardes:</p>
<pre>if [ -e "${INSTALL_PATH}.old" ]; then<br />  command rm -r "${INSTALL_PATH}.old"<br />fi<br />if [ -e "${DATA_PATH}/apps.old" ]; then<br />  command rm -r "${DATA_PATH}/apps.old"<br />fi</pre>
<p>Supprimez l'archive:</p>
<pre>command rm "/tmp/owncloud.tar.bz2"</pre>
<h2>Remerciements</h2>
<ul>
<li>Merci aux développeurs de <a class="external-link" href="http://www.owncloud.org/">OwnCloud</a>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-01-18T00:10:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/serveurs/bases-de-donnees/trucs-et-astuces-pour-mysql">
    <title>Trucs et astuces pour MySQL</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/serveurs/bases-de-donnees/trucs-et-astuces-pour-mysql</link>
    <description>Diverses informations sur l'utilisation et le débogage de MySQL.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h3>Extraire une base de données d'un dump MySQL</h3>
<p>Renseignez le nom de la base de données à extraire:</p>
<pre>DB_NAME="<b>my_database</b>"</pre>
<p>Renseignez le chemin du fichier dump MySQL:</p>
<pre>DUMP_FILE="<b>/path/to/a-mysql-dump.sql</b>"</pre>
<p>Extrayez la base de données du dump:</p>
<pre>command sed -n "0,/^-- Current Database:/p;/^-- Current Database: \`${DB_NAME}\`/,/^-- Current Database: \`/p;/TIME_ZONE=@OLD_TIME_ZONE/,/^-- Dump completed/p' \<br />   &gt; "${DB_NAME}.sql"</pre>
<p>Le dump de la base de données est maintenant disponible dans le fichier donné par:</p>
<pre>echo "${DB_NAME}.sql"<br /></pre>
<h3>Mettre en place un moteur de recherche</h3>
<p>Le <a class="external-link" href="http://www.sphinxsearch.com/" target="_blank">moteur d'indexation open-source Sphinx</a> facilite la mise en place d'un moteur de recherche performant.</p>
<p><b>Source : </b>Merci à Guillaume Pousséo.</p>
<h3>Déboguer les erreurs #1025 pour  les tables InnoDB</h3>
<p>L'erreur #1025 apparait lors de l 'altération d 'une  table utilisant  le moteur InnoDB. Obtenez plus  d'informations sur la nature de l  'erreur avec l'instruction  SQL:</p>
<p class="callout">SHOW ENGINE INNODB STATUS;</p>
<p><b>Source :</b> Merci à <a class="external-link" href="http://thenoyes.com/littlenoise/" target="_blank">snoyes</a> sur irc.freenode.net#mysql</p>
<h3 id="message">Corriger les erreurs "Incorrect key file for table"</h3>
<p id="message">Si l'erreur ci-dessous apparaît lors de l'exécution d'une requête SQL:</p>
<p class="callout" id="message">Could not execute query [Native Error: Incorrect key file for table '/tmp/#sql_2258_0.MYI'; try to repair it</p>
<p>Le dossier /tmp n'a plus suffisament d'espace dique. Pour corriger  l'erreur, nettoyez le système de fichier contenant le dossier /tmp.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2013-01-07T14:21:42Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/developpement/php">
    <title>PHP 5</title>
    <link>http://howto.biapy.com/fr/developpement/php</link>
    <description>Documentation variée sur le développement PHP.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2012-12-20T12:59:45Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/developpement/php/trucs-et-astuces-php">
    <title>Trucs et astuces PHP</title>
    <link>http://howto.biapy.com/fr/developpement/php/trucs-et-astuces-php</link>
    <description>Extraits (snippets) de code PHP pour effectuer diverses tâches plus ou moins courantes.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h3>Calculer le chemin relatif entre deux emplacements</h3>
<p>La fonction qui suit permet de calculer le chemin relatif entre deux emplacements. Cela peut être utile pour calculer l'emplacement relatif d'un fichier css ou image.</p>
<pre>function relativePath($from_path, $to_path, $path_separator = DIRECTORY_SEPARATOR)<br />{<br />  $exploded_from = explode($path_separator, rtrim($from_path, $path_separator));<br />  $exploded_to = explode($path_separator, rtrim($to_path, $path_separator));<br />  while(count($exploded_from) &amp;&amp; count($exploded_to) &amp;&amp; ($exploded_from[0] == $exploded_to[0]))<br />  {<br />    array_shift($exploded_from);<br />    array_shift($exploded_to);<br />  }<br />  return str_pad("", count($exploded_from) * 3, '..'.$path_separator).implode($path_separator, $exploded_to);<br />}<br /></pre>
<p><b>Source:</b> Merci à <a class="external-link" href="http://php.net/manual/fr/function.realpath.php#105876">imagiro pour son commentaire sur realpath</a>.</p>
<h3>Autoloader universel</h3>
<p>Un autoloader est un code gérant l'inclusion automatique des fichiers PHP déclarant des classes. La difficulté consiste à coupler performance et souplesse. Gerald's Blog propose deux articles très intéressant sur la mise en place efficiente de cette mécanique:</p>
<ul>
<li><a class="external-link" href="http://www.croes.org/gerald/blog/autoloader-php-universel-jouons-avec-les-patterns/77/">Autoloader PHP Universel – Jouons avec les Patterns</a></li>
<li><a class="external-link" href="http://www.croes.org/gerald/blog/la-strategie-strategy-en-php/93/">Le Design Pattern Stratégie (Strategy) en PHP</a></li>
</ul>
<p>Téléchargez le:</p>
<pre>command wget 'https://raw.github.com/biapy/howto.biapy.com/master/php5/DirectoriesAutoloader.php' \
    --quiet --no-check-certificate --output-document='DirectoriesAutoloader.php'</pre>
<p>Son utilisation est très simple:</p>
<pre>require(dirname(__FILE__) . '/DirectoriesAutoloader.php');<br />DirectoriesAutoloader::instance('/tmp/')<br /> -&gt;addDirectory(realpath(dirname(__FILE__) . '/../../classes'))<br /> -&gt;addDirectory(realpath(dirname(__FILE__) . '/../framework'))<br /> -&gt;addDirectory(realpath(dirname(__FILE__) . '/locasyst'))<br /> -&gt;addDirectory(realpath(dirname(__FILE__) . '/lib/vendor'))<br /> -&gt;register();</pre>
<p><b>Note:</b> Il existe aussi Open Power Autoloader (<a class="external-link" href="https://github.com/OPL/opl3-autoloader">https://github.com/OPL/opl3-autoloader)</a> qui est très efficace si le projet utilise la convention PSR-0 (merci à <a class="external-link" href="http://www.zyxist.com/">The Zyxist Diaries</a> pour <a class="external-link" href="http://www.zyxist.com/en/archives/140">Efficient autoloaders for PHP</a>).</p>
<h3>file_get_contents et timeout</h3>
<p>Il est impossible de contrôler le timeout utilisé par file_get_contents lorsque la ressource ouverte est une URL. Si vous rencontrez l'erreur qui suit, vous êtes confronté à ce problème:</p>
<p class="callout">PHP Warning: file_get_contents(<span class="moz-txt-link-freetext">http://www.url.com/</span>): failed to open stream: HTTP request failed!  in /path/to/file.php on line 8</p>
<p>Voici une fonction conçue pour ajouter une notion de timeout à la fonctionnalité de file_get_contents (nécessite l'extension php5-curl):</p>
<p><span> </span></p>
<div class="syntax-content" id="code_7521550f">
<pre class="php"><span>/**<br /> * Get URL contents<br /> *<br /> * @param string $url       A URL.<br /> * @param integer $timeout  timeout for fetching the URL.<br /> * @return mixed            string with URL contents if success, False if failure.<br /> */<br />function</span> url_get_contents<span>(</span><span>$url</span>, <span>$timeout</span> = 10<span>)</span><span><br />{</span><span><br />  $curl_handle</span> = curl_init<span>(</span><span>$url</span><span>)</span>;<br />  curl_setopt<span>(</span><span>$curl_handle</span>, CURLOPT_HEADER, 0<span>)</span>;<br />  curl_setopt<span>(</span><span>$curl_handle</span>, CURLOPT_RETURNTRANSFER, 1<span>)</span>;<br />  curl_setopt<span>(</span><span>$curl_handle</span>, CURLOPT_USERAGENT, <span>"PHP script"</span><span>)</span>;<br />  curl_setopt<span>(</span><span>$curl_handle</span>, CURLOPT_TIMEOUT, <span>$timeout</span><span>)</span>;<span><br />  $contents</span> = curl_exec<span>(</span><span>$curl_handle</span><span>)</span>;<span><br />  $curl_error</span> = curl_error<span>(</span><span>$curl_handle</span><span>)</span>;<br />  curl_close<span>(</span><span>$curl_handle</span><span>)</span>;<br />  <span>if</span> <span>(</span><span>$curl_error</span><span>)<br />  </span><span>{</span><br /><span>    // echo</span> <span>$CurlErr</span>;<span><br />    return</span> <span>false</span>;<br />  <span>}</span><span><br /><br />  return</span> <span>$contents</span>;<span><br />}</span></pre>
<div class="php"><span> </span></div>
</div>
<p><b>Source:</b> Merci à Ripat pour <a class="external-link" href="http://forum.phpfrance.com/vos-contributions/file-get-contents-pour-fichiers-distants-avec-timeout-t11122.html">file_get_contents pour fichiers distants avec timeout</a>.</p>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2012-12-20T12:55:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>


  <item rdf:about="http://howto.biapy.com/fr/debian-gnu-linux/serveurs/autres/installer-et-configurer-un-tunnel-vpn-l2tp-ipsec-sur-debian">
    <title>Installer et configurer un tunnel VPN L2TP/IPsec sur Debian</title>
    <link>http://howto.biapy.com/fr/debian-gnu-linux/serveurs/autres/installer-et-configurer-un-tunnel-vpn-l2tp-ipsec-sur-debian</link>
    <description>Coupler un tunnel L2TP à un tunnel IPsec est une solution VPN sécurisée très répandue dans les entreprises (grâce notamment à son support par les routeurs Cisco). Cette solution permet de mettre en place un VPN sur iPhone.</description>
    <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ce guide est testé sur:</p>
<ul>
<li>Debian 6.0 Squeeze</li>
</ul>
<p>Ce guide est testé dans les configurations suivantes:</p>
<ul>
<li>Serveur VPN &lt;- Routeur NAT &lt;- Internet &lt;- Routeur NAT &lt;- iPhone 5 + iOS 6.0.1</li>
<li>Serveur VPN &lt;- Routeur NAT &lt;- Internet &lt;- Routeur NAT &lt;- Mac OS X Mountain Lion 10.8.2</li>
</ul>
<ul>
</ul>
<h2>Prérequis</h2>
<p>Ce guide nécessite:</p>
<ul>
<li>l'ajout des dépôts de sources testing, comme décrit par <a class="internal-link" href="../../../systeme/logiciels/configurer-les-depots-de-sources-testing-sur-debian-stable">Configurer les dépôts de sources Testing sur Debian stable</a>.</li>
</ul>
<p>Ce guide recommande:</p>
<ul>
<li>la mise en place d'un serveur Bind autorisant les requêtes pour le réseau local, comme décrit par <a class="internal-link" href="../configurer-un-serveur-dns-bind-sur-debian">Configurer un serveur DNS Bind sur Debian</a>.</li>
</ul>
<ul>
</ul>
<h2>Paramètres</h2>
<p>Renseignez le nom de domaine du VPN:</p>
<pre>DOMAIN="<b>domain.vpn</b>"</pre>
<p>Renseignez le nom de l'interface réseau connectée au réseau public (Internet):</p>
<pre>TARGET_INTERFACE="<b>eth0</b>"<br /></pre>
<p>Déterminez une plage d'adresse IP aléatoire pour les clients du VPN:</p>
<pre>VPN_IP_RANGE="10.$((${RANDOM}%256)).$((${RANDOM}%256))"</pre>
<h2>Installation</h2>
<p>Détectez l'adresse IPv4 de l'interface cible:</p>
<pre>TARGET_INTERFACE_IP=$(command ifconfig ${TARGET_INTERFACE}<b> \<br /></b>    | command grep "inet " \<br />    | command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/')<br />echo ${TARGET_INTERFACE_IP}</pre>
<p>Détectez la plage d'adresses IPv4 de l'interface cible:</p>
<pre>TARGET_INTERFACE_RANGE="$(command echo "${TARGET_INTERFACE_IP}" \<br />        | command cut --delimiter="." --fields=1-3)"</pre>
<p>Détectez l'adresse IPv4 de la passerelle de l'interface cible:</p>
<pre>TARGET_INTERFACE_GATEWAY="$(command netstat -nr \<br />    | command grep " UG " \<br />    | command grep "${TARGET_INTERFACE_RANGE}" \<br />    | command cut --characters=17-32 \<br />    | command sed -e 's/[ ]*//g')"<br />echo ${TARGET_INTERFACE_GATEWAY}<br /></pre>
<h3>Installation d'une version récente d'OpenSwan</h3>
<p><b>Attention:</b> ceci n'est nécessaire que si vous utilisez Debian 6.0 Squeeze ou antérieure.</p>
<p>La version présente dans Debian 6.0 Squeeze présente des bugs bloquant pour un bon fonctionnement avec iOS.</p>
<p>Installez les dépendances de construction du paquet OpenSwan:</p>
<pre>command apt-get install build-essential dpkg-dev \<br />     debhelper libgmp3-dev libssl-dev ppp \<br />     htmldoc man2html libopensc2-dev dpatch \<br />     libcurl4-openssl-dev libldap2-dev libpam0g-dev \<br />     libkrb5-dev bison flex bzip2 po-debconf</pre>
<p>Assurez-vous que toutes les dépendances sont présentes</p>
<pre>command apt-get build-dep openswan<br /></pre>
<p>Placez-vous dans le dossier des sources:</p>
<pre>command pushd '/usr/src'</pre>
<p>Obtenez les sources de la version testing d'OpenSwan:</p>
<pre>command apt-get source -t testing openswan</pre>
<p>Placez-vous dans  le dossier des sources:</p>
<pre>command cd "$(command find '/usr/src' -maxdepth 1 -type d -name 'openswan-*' | command sort | command tail -n 1)"</pre>
<p>Corrigez les erreurs de compatibilité avec Debian 6.0 Squeeze:</p>
<pre>command sed -i -e 's/^.*buildflags.mk/#&amp;/' 'debian/rules'<br />command sed -i -e 's/dpkg-dev[^,]*/dpkg-dev,/g' 'debian/control'</pre>
<p>Lancez la construction du paquet:</p>
<pre>command dpkg-buildpackage</pre>
<p>Installez OpenSwan:</p>
<pre>DEBIAN_FRONTEND='noninteractive' command dpkg -i "$(command find '/usr/src' -maxdepth 1 -type f -name 'openswan_*.deb' | command sort | command tail -n 1)"<br /></pre>
<p>Quittez le dossier des sources:</p>
<pre>command popd</pre>
<h3>Installation d'une version récente de xl2tpd</h3>
<p><b>Attention:</b> ceci n'est nécessaire que si vous utilisez Debian 6.0 Squeeze ou antérieure.</p>
<p>La version présente dans Debian 6.0 Squeeze présente des bugs bloquant pour un bon fonctionnement avec iOS.</p>
<p>Installez les dépendances de construction du paquet OpenSwan:</p>
<pre>command apt-get build-dep xl2tpd</pre>
<p>Placez-vous dans le dossier des sources:</p>
<pre>command pushd '/usr/src'</pre>
<p>Obtenez les sources de la version testing d'OpenSwan:</p>
<pre>command apt-get source -t testing xl2tpd</pre>
<p>Placez-vous dans  le dossier des sources:</p>
<pre>command cd "$(command find '/usr/src' -maxdepth 1 -type d -name 'xl2tpd-*' | command sort | command tail -n 1)"</pre>
<p>Lancez la construction du paquet:</p>
<pre>command dpkg-buildpackage</pre>
<p>Installez les paquets obtenus:</p>
<pre>DEBIAN_FRONTEND='noninteractive' command dpkg -i "$(command find '/usr/src' -maxdepth 1 -type f -name 'xl2tpd_*.deb' | command sort | command tail -n 1)"<br /></pre>
<p>Quittez le dossier des sources:</p>
<pre>command popd</pre>
<h3>Préparation de l'environnement</h3>
<p>Installez les logiciels nécessaires:</p>
<pre>DEBIAN_FRONTEND='noninteractive' command apt-get install apg ppp xl2tpd openswan</pre>
<p>Activez les options IPv4 nécessaires au bon fonctionnement du tunnel (Attention: ne pas appliquer sur un routeur !):</p>
<pre>echo "# Allowing nat translation for VPN clients.<br />net.ipv4.ip_forward=1<br /># Openswan security options<br />net.ipv4.conf.all.accept_redirects = 0<br />net.ipv4.conf.all.send_redirects = 0<br />net.ipv4.conf.default.accept_redirects = 0<br />net.ipv4.conf.default.send_redirects = 0" \<br />    &gt;&gt; "/etc/sysctl.conf"</pre>
<p>Rechargez la configuration système:</p>
<pre>command sysctl -p</pre>
<p>Appliquez la configuration aux interfaces réseau existantes:</p>
<pre>command find '/proc/sys/net/ipv4/conf' -mindepth 1 -type d \<br />  | while read INTERFACE_SYS; do<br />    command echo "0" &gt; "${INTERFACE_SYS}/send_redirects"<br />    command echo "0" &gt; "${INTERFACE_SYS}/accept_redirects"<br />  done</pre>
<h3>Configuration d'OpenSwan (IPSec)</h3>
<p>Forcez l'utilisation de la pile netkey:</p>
<pre>command sed -i -e 's/protostack=.*/protostack=netkey/g' '/etc/ipsec.conf'<br /></pre>
<p>Interdisez l'utilisation de la plage d'adresse IP du réseau local et du réseau VPN L2TP:</p>
<pre>command sed -i \<br />    -e "s|,%v4:\!192\.168\.1\.[^,]*||" \<br />    -e "s|virtual_private=.*|&amp;,%v4:\!${TARGET_INTERFACE_RANGE}.0/24,%v4:\!${VPN_IP_RANGE}.0/24|" \<br />  "/etc/ipsec.conf"</pre>
<p>Créez un fichier de configuration depuis le modèles:</p>
<pre>command cp "/etc/ipsec.d/examples/l2tp-psk.conf" "/etc/ipsec.d/${DOMAIN/\./-}.conf"</pre>
<p>Renommez les connections:</p>
<pre>command sed -i \<br />    -e "s/L2TP-PSK/${DOMAIN/\./-}-&amp;/" \<br />    -e "s/passthrough-for-non-l2tp/${DOMAIN/\./-}-&amp;/" \<br />  "/etc/ipsec.d/${DOMAIN/\./-}.conf"</pre>
<p>Configurez l'adresse IP du serveur et de la passerelle:</p>
<pre>command sed -i \<br />    -e "s/YourServerIP/${TARGET_INTERFACE_IP}/g" \<br />    -e "s/YourGwIP/${TARGET_INTERFACE_GATEWAY}/g" \<br />    -e "s/YourGatewayIP/${TARGET_INTERFACE_IP}/g" \<br />  "/etc/ipsec.d/${DOMAIN/\./-}.conf"</pre>
<p>Ajoutez les paramètres nécessaires aux clients iOS (iPhone, iPad):</p>
<pre>command sed -i -e "/rightprotoport=17\/%any/a\\<br />\t# Apple iOS doesnt send delete notify so we need dead peer detection\\<br />\t# to detect vanishing clients\\<br />\t#dpddelay=30\\<br />\t#dpdtimeout=120\\<br />\t#dpdaction=clear\\<br />\t# force all to be nated. because of ios\\<br />\tforceencaps=yes\\<br />\t# provide leftsubnet, mandatory for double nat setup.\\<br />\tleftsubnet=${TARGET_INTERFACE_RANGE}.0/24" \<br />  "/etc/ipsec.d/${DOMAIN/\./-}.conf"</pre>
<p>Activez la configuration:</p>
<pre>echo "include /etc/ipsec.d/${DOMAIN/\./-}.conf" &gt;&gt; '/etc/ipsec.conf'<br /></pre>
<p>Créez la clef partagée (ici de longueur 128):</p>
<pre>SHARED_KEY="$(command apg -q -m 128 -a 1 -n 1 -M NCLS -E '"')"</pre>
<p>Configurez la clef partagée:</p>
<pre>command sed -i -e "/${TARGET_INTERFACE_IP}[ \t]*%any:/d" '/etc/ipsec.secrets'<br />command echo "${TARGET_INTERFACE_IP} %any: PSK \"${SHARED_KEY}\"" &gt;&gt; '/etc/ipsec.secrets'</pre>
<p>Protégez le fichier des secrets:</p>
<pre>command chmod go-rwx '/etc/ipsec.secrets'<br /></pre>
<h3>Configuration de xl2tpd (L2TP)</h3>
<p>Ajoutez la configuration du tunnel à xl2tpd.conf:</p>
<pre>echo "<br />; ${DOMAIN} L2TP/IPsec tunnel configuration.<br />[global]<br />;force userspace = yes<br />ipsec saref = yes<br />access control = no<br />auth file = /etc/xl2tpd/${DOMAIN/\./-}-secrets<br />listen-addr = ${TARGET_INTERFACE_IP}<br />;debug network = yes<br />;debug tunnel = yes<br />;debug avp = yes<br />;debug state = yes<br /><br />[lns default]<br />ip range = ${VPN_IP_RANGE}.2-${VPN_IP_RANGE}.253<br />local ip = ${VPN_IP_RANGE}.1<br />assign ip = yes<br />require chap = yes<br />refuse pap = yes<br />require authentication = yes<br />name = ${DOMAIN}<br />ppp debug = yes<br />pppoptfile = /etc/ppp/options.xl2tpd.${DOMAIN/\./-}<br />length bit = yes<br />" \<br />    &gt;&gt; '/etc/xl2tpd/xl2tpd.conf'</pre>
<p><b>Remarque:</b> la section [lns default] est obligatoire pour le bon fonctionnement de xl2tpd.</p>
<h3>Configuration de ppp (PPTP)</h3>
<p>Déterminez l'adresse des DNS Internet s'il y en a:</p>
<pre>DNS_SERVERS="$(command grep "^nameserver" "/etc/resolv.conf" | command grep -v "127.0.0.1" | command sed -e 's/nameserver/ms-dns/g')"</pre>
<p>Déterminez s'il y a un server Bind local et autorisez le réseau L2TP à l'utiliser:</p>
<pre>if [ -x '/etc/init.d/bind9' ]; then<br />  DNS_SERVERS="ms-dns ${VPN_IP_RANGE}.1<br />${DNS_SERVERS}"<br />  command sed -i -e "/acl local-networks/a\\<br />\t${VPN_IP_RANGE}.1/24;" \<br />  '/etc/bind/named.conf.options'<br />  /etc/init.d/bind9 reload<br />fi<br /></pre>
<p>Créez le fichier de configuration du tunnel PPTP mise en place par xl2tp:</p>
<pre>echo "# ${DOMAIN} IPsec/L2TP VPN PPTP setup.<br />name ${DOMAIN}<br />require-mschap-v2<br />ipcp-accept-local<br />ipcp-accept-remote<br />${DNS_SERVERS}<br />noccp<br />auth<br />crtscts<br />idle 1800<br />mtu 1200<br />mru 1200<br />nodefaultroute<br />#debug<br />lock<br />proxyarp<br />connect-delay 5000" \<br />  &gt; "/etc/ppp/options.xl2tpd.${DOMAIN/\./-}"</pre>
<h3>Configuration de l'accès au réseau local et à Internet pour les clients du VPN</h3>
<p>Activez la règle NAT qui permet aux clients du VPN d'accéder à Internet en passant par le VPN:</p>
<pre>command echo "#"\!"/bin/bash<br />command iptables -t nat -A POSTROUTING -s ${VPN_IP_RANGE}.0/24 -o eth0 -j MASQUERADE" \<br />  &gt; "/etc/network/if-up.d/iptables-l2tp-${DOMAIN/\./-}"<br />command chmod +x "/etc/network/if-up.d/iptables-l2tp-${DOMAIN/\./-}"</pre>
<p>Chargez la règle:</p>
<pre>/etc/network/if-up.d/iptables-l2tp-${DOMAIN/\./-}</pre>
<h3>Configuration des comptes utilisateurs pour ppp</h3>
<p>Renseignez le nom de l'utilisateur:</p>
<pre>PPP_USERNAME="<b>my-account</b>"</pre>
<p>Déterminez un mot de passe pour l'utilisateur:</p>
<pre>PPP_PASSWORD="$(command apg -q -m 128 -a 1 -n 1 -M NCL -E '"')"</pre>
<p>Ajoutez le compte au fichier chap-secrets:</p>
<pre>echo "${PPP_USERNAME}    ${DOMAIN}    ${PPP_PASSWORD}    *" &gt;&gt; '/etc/ppp/chap-secrets'<br />echo "${PPP_USERNAME}    *    ${PPP_PASSWORD}" &gt;&gt; "/etc/xl2tpd/${DOMAIN/\./-}-secrets"</pre>
<p>Affichez les paramètres de connexion au VPN pour l'utilisateur et notez-les:</p>
<pre>echo "# Use the following to connect:<br /># Username:<br />${PPP_USERNAME}<br /># User password (secret key):<br />${PPP_PASSWORD}<br /># VPN shared key<br />${SHARED_KEY}"</pre>
<h3>Lancement du VPN</h3>
<p>Démarrez le VPN:</p>
<pre>/etc/init.d/ipsec restart<br />/etc/init.d/xl2tpd stop<br />/etc/init.d/xl2tpd start<br /></pre>
<p>Vérifiez la configuration IPsec (ignorez les alertes sur "Opportunistic Encryption Support" et "NAT and MASQUERADEing"):</p>
<pre>command ipsec verify</pre>
<p>Ajoutez le VPN au démarrage du système:</p>
<pre>command update-rc.d ipsec defaults<br />command update-rc.d xl2tpd defaults</pre>
<h3>Configuration du pare-feu</h3>
<p>Les ports suivant doivent être ouverts sur le pare-feu:</p>
<ul>
<li>port 500 UDP (protocole IKE)</li>
<li>port 4500 UDP (protocole NAT-T)</li>
<li>le protocole n°50</li>
<li>le protocole n°51</li>
</ul>
<p>Pour générer automatiquement les règles NAT iptables, renseignez l'adresse IP du serveur VPN sur le réseau local:</p>
<pre>VPN_SERVER_IP="<b>192.168.1.10</b>"</pre>
<p>Renseignez l'adresse IP de la connexion Internet du routeur (ici déterminée automatiquement):</p>
<pre>PUBLIC_IP=$(command wget --quiet http://www.monip.org/ -O- \
    | command grep "IP :" \<br />    | command cut --characters=-80 \
    | command sed -e 's/^.* \(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/')<br />echo "${PUBLIC_IP}"</pre>
<ul>
</ul>
<p>Le script suivant crée la configuration iptables nécessaire au serveur VPN L2TP/IPsec:</p>
<pre>echo "#"\!"/bin/bash<br /># open protocol 50<br />command iptables -A PREROUTING -t nat -p 50 \\<br />  -d ${PUBLIC_IP} \\<br />  -j DNAT --to ${VPN_SERVER_IP}<br /># open protocol 51<br />command iptables -A PREROUTING -t nat -p 51 \\<br />  -d ${PUBLIC_IP} \\<br />  -j DNAT --to ${VPN_SERVER_IP}<br /># open port 500 udp<br />command iptables -A PREROUTING -t nat -p udp \<br />  -d ${PUBLIC_IP} --dport 500 \\<br />  -j DNAT --to ${VPN_SERVER_IP}:500<br /># open port 4500 UDP<br />command iptables -A PREROUTING -t nat -p udp \\<br />  -d ${PUBLIC_IP} --dport 4500 \\<br />  -j DNAT --to ${VPN_SERVER_IP}:4500<br />" &gt;&gt; '/etc/network/if-up.d/l2tp-ipsec-vpn'<br />command chmod +x '/etc/network/if-up.d/l2tp-ipsec-vpn'</pre>
<p>Chargez les règles avec:</p>
<pre>/etc/network/if-up.d/l2tp-ipsec-vpn</pre>
<p>Les règles seront automatiquement chargées au démarrage du système.</p>
<h2>Détecter les problèmes</h2>
<h3>IPsec (OpenSwan)</h3>
<p>Vérifiez la connectivité IPsec avec:</p>
<pre>command ipsec verify</pre>
<p>Affichez l'état des connexions IPsec avec:</p>
<pre>command ipsec auto --status</pre>
<p>Visualisez les messages générés par IPsec dans le fichier auth.log:</p>
<pre>command tail -f '/var/log/auth.log'</pre>
<h3>L2TP (xl2tpd)</h3>
<p>Visualisez les messages générés par xl2tpd dans syslog:</p>
<pre>command tail -f '/var/log/syslog'</pre>
<p>Activez le mode de débogage de xl2tpd, et affichez les messages de débogage dans la console:</p>
<pre>command sed -i -e 's/;debug/debug/' '/etc/xl2tpd/xl2tpd.conf'<br />command sed -i -e 's/#debug/debug/' /etc/ppp/options.xl2tpd.*<br />/etc/init.d/xl2tpd stop<br />command xl2tpd -D</pre>
<p>Désactivez le mode de débogage de xl2tpd et relancez le fonctionnement standard:</p>
<pre>command sed -i -e 's/^debug/;debug/' '/etc/xl2tpd/xl2tpd.conf'<br />command sed -i -e 's/^debug/#debug/' /etc/ppp/options.xl2tpd.*<br />/etc/init.d/xl2tpd stop<br />/etc/init.d/xl2tpd start</pre>
<h2>Remerciements</h2>
<ul>
<li>Merci à <a class="external-link" href="http://www.aa-asterisk.org.uk/">#a&amp;a asterisk</a> for <a class="external-link" href="http://www.aa-asterisk.org.uk/index.php/Setting_up_an_L2TP/IPSec_server_on_Debian">Setting up an L2TP/IPSec server on Debian</a>.</li>
<li>Merci au <a class="external-link" href="http://monblog.system-linux.net/blog/">blog technique de Laurent Besson</a> pour <a class="external-link" href="http://monblog.system-linux.net/blog/2010/10/02/serveur-vpn-l2tp-ipsec-linux-avec-authentification-radius-couple-avec-ldap/">Serveur VPN L2TP IPsec Linux avec authentification Radius couplée avec LDAP</a>.</li>
<li>Merci au <a class="external-link" href="http://smhteam.info/">Wiki Linux SMH</a> pour <a class="external-link" href="http://smhteam.info/wiki/index.linux.php5?wiki=CreerUnVPN_L2TP-IPSEC">Créer un VPN L2TP/IPSec</a>.</li>
<li>Merci à <a class="external-link" href="http://blog.riobard.com/">Riobard Zhan</a> pour <a class="external-link" href="http://blog.riobard.com/2010/04/30/l2tp-over-ipsec-ubuntu">Configure L2TP/IPSec VPN on Ubuntu</a>.</li>
<li>Merci à <a class="external-link" href="http://blog.bertelsen.co/">The gadget blog</a> pour <a class="external-link" href="http://blog.bertelsen.co/2012/02/debian-squeeze-l2tpipsec-vpn-server.html">Debian squeeze l2tp/IPSec vpn server with an iOS road warrior</a>.</li>
</ul>]]></content:encoded>
    <dc:publisher>No publisher</dc:publisher>
    <dc:creator>Pierre-Yves Landuré</dc:creator>
    <dc:rights></dc:rights>
    <dc:date>2012-12-17T01:50:00Z</dc:date>
    <dc:type>Article</dc:type>
  </item>





</rdf:RDF>
