OVH Community, votre nouvel espace communautaire.

[HOW-TO] Slackware : Apache, Lighttpd, MySQL, PHP, DNS, FTP, POSTIX, MRTG, astuces


Theotime
25/02/2009, 16h56
Quelqu'un a le même pour Debian ? Ou alors celui ci est compaptible ?

ipernet
16/01/2008, 16h53
Citation Envoyé par dam23
1/ Les fichiers d'index.php ne sont pas servis par défaut:
ex: http://moi/ => l'httpd cherche index.html, index.htm, puis index.php
Si seul index.php est trouvé, lighty essaye de le servir mais renvoie une 403 vu qu'il n'a pas le droit de donner du .php directement.

2/ Les scripts php qui récupèrent l'IP client (notamment pour la logguer) renvoient tous 127.0.0.1, vu que c'est lighty qui envoie la requête...
2 solutions simples

1/ Rajouter une ligne de configuration à Ligthy pour que ce soit Apache qui traite les URL Racine (et traite index.*) :

Code:
$HTTP["host"] == "www.site1.com" {
   server.document-root = "/home/htdocs/site1.com/"
$HTTP["url"] == "/" {
		proxy.server  = ( "" => ( ( "host" => "127.0.0.1", "port" => 8090 ) ) )
	}
   proxy.server  = ( ".php" => ( ( "host" => "127.0.0.1", "port" => 8070 ) ) )
}
2/ il te faut utiliser non pas $_SERVER['REMOTE_ADDR'] mais $_SERVER['HTTP_X_FORWARDED_FOR'] et revoila l'ip source

Ps: je vais rajouter ça au tuto

dam23
07/01/2008, 16h43
Hello,

Après avoir plus ou moins suivi ton HOWTO (FreeBSD ici) je me retrouve dans une config bien sympa, hormis 2 choses:



1/ Les fichiers d'index.php ne sont pas servis par défaut:
ex: http://moi/ => l'httpd cherche index.html, index.htm, puis index.php
Si seul index.php est trouvé, lighty essaye de le servir mais renvoie une 403 vu qu'il n'a pas le droit de donner du .php directement.

2/ Les scripts php qui récupèrent l'IP client (notamment pour la logguer) renvoient tous 127.0.0.1, vu que c'est lighty qui envoie la requête...


Du coup j'ai essayé de faire fonctionner php en FastCGI et je tombe sur un autre problème:

Ca marche gentiment, sauf pour des fonctions qui requièrent une extension php (ex: preg_replace , extension PCRE) qui elles ne marchent plus.

Entièrement désinstaller php et ses extensions puis les réinstaller n'a pas aidé...


Des pistes ?


Sinon tuto très sympa


Edit: hop réglé, viré apache, lighttpd handle le php à coups de fastcgi, et ça fera bien l'affaire, pas besoin de proxy-servers pour la disponibilité moi.

ipernet
30/12/2007, 19h09
Citation Envoyé par Abogil
? ? ? ?
Mon doc fait 30000 caracteres et c'est un brouillon, et on est limité à 10k caractères par messages, je réserve donc un peu de place

Abogil
30/12/2007, 19h06
Citation Envoyé par ipernet
...
? ? ? ?

ipernet
30/12/2007, 19h01
.._

ipernet
30/12/2007, 18h32
Suite

  • Démarrage d'Apache


Vous devez lancer Apache en root, il droppera lui même les privilèges root pour garder ceux du user "httpd"
Code:
root@ns10000:~# cd /usr/local/apache2/bin
root@ns10000:/usr/local/apache2/bin# ./apachectl start
root@ns10000:/usr/local/apache2/bin#
Ensuite consulter les éventuelles erreurs de démarrage dans le fichier de log :

Code:
root@ns10000:/usr/local/apache2/bin# cd ../logs
root@ns10000:/usr/local/apache2/bin# tail error_log
[Mon Dec 31 14:24:54 2007] [notice] Apache configured -- resuming normal operations
Normalement tout devrait être OK.


proFTPD

Je vous propose d'installer proFTPD, d'y créer un superadmin "ftp_admin" ayant tout pouvoir sur tout htdocs/, un admin "ftp_admin_site1" qui aura tout pouvoir sur htdocs/site1.com, et de paramétrer les autorisations d'accès


  • Installation


Code:
root@ns10000:~# cd /home/compilation/
root@ns10000:/home/compilation# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1.tar.gz
root@ns10000:/home/compilation# tar xvf proftpd-1.3.1.tar.gz
root@ns10000:/home/compilation# cd proftpd-1.3.1
root@ns10000:/home/compilation# ./configure --help #faites vos choix de compilation ou configurer directement pour les choix par défaut
root@ns10000:/home/compilation# make && make install
  • Préparation avant configuration


ProFTPd nécessite un shell valide pour que les utilisateurs puissent se connecter. Un shell "est valide" si il figure dans le fichier /etc/shells

Code:
root@ns10000:~#cat /etc/shells
/bin/bash
root@ns10000:~#
Nos utilisateurs "ftp_admin" et "ftp_admin_site1" auront pour shell /bin/false, il faut donc rajouter ce shell :

Code:
root@ns10000:~# echo "/bin/false" >>/etc/shells
Sinon nous aurions eu l'erreur suivante lors du login :

Code:
227.w86-198.abo.wanadoo.fr[86.198.198.198]): USER ftp_admin (Login failed): Invalid shell: '/bin/false'

  • Création des users


Code:
root@ns10000:~# groupadd ftpusers
root@ns10000:~# useradd -s /bin/false -d /home/htdocs/ -g ftpusers ftp_admin
root@ns10000:~# passwd ftp_admin
root@ns10000:~# useradd -s /bin/false -d /home/htdocs/site1.com -g ftpusers ftp_admin_site1
root@ns10000:~# passwd ftp_admin_site1
Attention ! un shell sur /bin/false empeche le login via SSH, mais n'empeche pas d'utiliser des outils non shell : authentification, portforwarding etc ...

Donc on rajoute explicitement dans notre fichier sshd_config :

Code:
nano /etc/ssh/sshd_config
Code:
DenyUsers ftp_admin, ftp_admin_site1

  • Le fichier /etc/ftpusers


Ce fichier contient la liste des utilisateurs étant banni de login via FTP.

Par défaut on ajoute tout le monde présent sur le système (via les logins présents dans /etc/passwd), on rajoute aussi anonymous, mais on enlève ftp_admin et ftp_admin_site1

Code:
root@ns10000:~# cat /etc/passwd | cut -f1 -d: > /etc/ftpusers
root@ns10000:~# echo anonymous >> /etc/ftpusers
root@ns10000:~# nano /etc/ftpusers #Enlever les users FTP
root@ns10000:~# cat /etc/ftpusers
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
smmsp
rpc
sshd
gdm
pop
nobody
anonymous
... etc
  • Configuration rapide


Extrait de configuration à modifier/ajouter

Code:
root@ns10000:~# nano /etc/proftpd.conf
ServerName "ns1000-FTP"
ServerType standalone
DefaultServer on
# Set the user and group under which the server will run.
User nobody
Group nogroup
SystemLog /var/log/proftpd.log
#To cause every FTP user to be "jailed" (chrooted) into their home
DefaultRoot ~
# Autoriser l'usage de /etc/ftpusers
UseFtpUsers on
# Bar use of SITE CHMOD by default

DenyAll

# Configuration des users


AllowUser ftp_admin
DenyAll


AllowUser ftp_admin
DenyAll





AllowUser ftp_admin
AllowUser ftp_admin_site1
DenyAll


AllowUser ftp_admin
AllowUser ftp_admin_site1
DenyAll


  • Les pemissions sur /home/htdocs


Bien sur cela dépend de votre installation et de vos besoins ! Ceci n'est qu'à titre indicatif !

Qui est le propriétaire ? ftp_admin : rwX (x que sur les dossiers et non les fichiers)
Qui est le groupe ? ftpusers : rwX
Que doit pouvoir faire Lighttpd/Apache : Lire (écrire pour certain script PHP ?) : rX

Code:
root@ns10000:/home/htdocs# chown -R ftp_admin:ftpusers * 
root@ns10000:/home/htdocs# chmod -R u=rwX,g=rwX,o=r-X *

A vous de spécifier les droits précis sur les répertoires qui doivent être accessible en écriture par Apache

ipernet
30/12/2007, 18h31
Suite

Code:
#On active les modules que l'on souhaite
server.modules = (
"mod_rewrite",
"mod_redirect",							"mod_access",
"mod_status",
"mod_simple_vhost",
"mod_proxy",
"mod_compress",
"mod_expire"
)

#Paramètres primaires
server.document-root = "/home/htdocs"
server.username = "lighttpd"
server.groupname = "nogroup"

#Mod_compress : mise en place d'un cache de compression sur certain type mime pour éviter de compresser à chaque fois
compress.filetype	= ("text/html", "text/plain", "text/css", "text/javascript", "text/xml")
#N'oubliez pas de créer le répertoire et lui donner les bons droits (idem que pour le fichier et répertoire de log)
compress.cache-dir	= "/home/lighttpd_cache/"

#Ce qu'on a fait en haut
server.errorlog             = "/var/log/lighttpd/error.log"

#Trés important, n'envoyez pas vos fichiers php non interprété ! Lighttpd ne dessert ici que le statique et reconnait les fichiers php qu'en tant que texte.
static-file.exclude-extensions = ( ".php", ".inc", "htaccess", "htpasswd" )

#Frontal
server.port                = 80

#
#Quelques règles d'exemples
#

#redirection vers le www
$HTTP["host"] =~ "^site1\.com" {
    url.redirect = ("(.*)" => "http://www.site1.com$1")
}
$HTTP["host"] =~ "^site2\.net" {
    url.redirect = ("(.*)" => "http://www.site2.net$1")
}


$HTTP["host"] == "www.site1.com" {
   server.document-root = "/home/htdocs/site1.com/"

#Nous laissons Apache desservir les fichiers index.* Cf. post 8 de dam23 et post 9
   $HTTP["url"] == "/" {
      proxy.server  = ( "" => ( ( "host" => "127.0.0.1", "port" => 8070 ) ) )
   }
#Forward du contenu dynamique (fichiers php) vers apache
   proxy.server  = ( ".php" => ( ( "host" => "127.0.0.1", "port" => 8070 ) ) )
}

$HTTP["host"] == "www.site2.net" {
   server.document-root = "/home/htdocs/site2.net/"

#Nous laissons Apache desservir les fichiers index.* Cf. post 8 de dam23 et post 9
   $HTTP["url"] == "/" {
      proxy.server  = ( "" => ( ( "host" => "127.0.0.1", "port" => 8080 ) ) )
   }
   proxy.server  = ( ".php" => ( ( "host" => "127.0.0.1", "port" => 8080 ) ) )
}
  • Démarrage de Lighttpd


On lance Lighttpd depuis root. Lighttpd se chargera ensuite de dropper ses privilèges pour obtenir ceux du user "lighttpd" spécifié.
Code:
root@ns10000:~#  /usr/local/sbin/lighttpd -f /etc/lighttpd.conf
root@ns10000:~# ps aux | grep light
lighttpd 17972  0.0  0.1   4464  3172 ?        S    Dec10   0:35 /usr/local/sbin/lighttpd -f /etc/lighttpd.conf
On consulte les éventuelles erreurs de démarrage grâce au fichier de log :

Code:
root@ns10000:~# tail /var/log/lighttpd/error.log
Normalement tout devrait être OK


Mysql

Nous installons MySQL avant PHP car nous avons besoin du package MySQL-devel lors de la compilation de PHP. Autant tout installer en même temps.

Nous allons installer MySQL (Server + Client + devel) à partir des packages RPM fourni par MySQL. J'updaterai ce message pour ajouter une version "compilation du serveur" (à la place d'une installation par package RPM du serveur) et ferai un bench pour comparer ces deux approches d'installation.

Je vous invite à consulter ce lien pour savoir comment sont compilés ces packages RPM :

http://dev.mysql.com/doc/refman/5.0/...-binaries.html
http://dev.mysql.com/doc/refman/5.0/...k-options.html


  • Installation de RPM


Nous installons tout d'abord avec slackpkg le gestionnaire RPM pour slackware :

Code:
slackpkg install rpm
  • Récupération des RPM (merci OVH )


Code:
root@ns10000:/home/compilation# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-server-5.0.45-0.i386.rpm/from/http://mir2.ovh.net/ftp.mysql.com/
root@ns10000:/home/compilation# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-client-5.0.45-0.i386.rpm/from/http://mir2.ovh.net/ftp.mysql.com/
root@ns10000:/home/compilation# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-devel-5.0.45-0.i386.rpm/from/http://mirrors.ircam.fr/pub/mysql/
root@ns10000:/home/compilation# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-shared-5.0.45-0.i386.rpm/from/http://mirrors.ircam.fr/pub/mysql/
  • Installation des RPM


Sous Slackware il faut forcer l'installation et bypasser le contrôle des dépendances pour installer correctement un RPM

Code:
root@ns10000:/home/compilation# rpm -Uvh --nodeps --force MySQL-server-5.0.45-0.i386.rpm
root@ns10000:/home/compilation# rpm -Uvh --nodeps --force MySQL-client-5.0.45-0.i386.rpm
root@ns10000:/home/compilation# rpm -Uvh --nodeps --force MySQL-devel-5.0.45-0.i386.rpm
root@ns10000:/home/compilation# rpm -Uvh --nodeps --force MySQL-shared-5.0.45-0.i386.rpm
Nous allons effectuer les différentes actions afficher lors de l'installation des RPM

  • User et group mysql


On supprime d'éventuel user/group existant, on met les bon droit sur le répertoire ou sera stocké notre socket (si vous utilisez le socket .sock de mysql bien sûr)

Code:
root@ns10000:~# userdel mysql
root@ns10000:~# groupdel mysql
root@ns10000:~# groupadd mysql
root@ns10000:~# useradd -g mysql mysql
root@ns10000:~# usermod -d /var/lib/mysql -s /bin/false mysql
root@ns10000:~# cd /var/lib
root@ns10000:/var/lib# chown -R mysql:mysql /var/lib/mysql
Nous allons placer le répertoire data de MySQL sur /home (qui dispose chez OVH par défaut de 90% de l'espace disque)

Code:
root@ns10000:~# mkdir /home/mysql
root@ns10000:~# chown mysql:mysql /home/mysql
On configure ensuite my.cnf selon ce que l'on vient d'effectuer. (toutes les options ne sont pas affichées, seulement celles à créer ou modifier)

Code:
nano /etc/my.cnf

Code:
[client]
socket	= /var/lib/mysql/mysql.sock

[mysqld]
long_query_time = 2
datadir= /home/mysql
log-warnings=2
log-error=/home/mysql/mysql.log
socket = /var/lib/mysql/mysql.sock

On installe les tables par défaut de MySQL

Code:
#sh /usr/bin/mysql_install_db
On place un mot de passe root avec mysqladmin

Code:
#mysqladmin -u root password 'motdepasse'
Vous trouverez dans /usr/share/mysql/ le script mysql.server que vous pouvez placer dans /etc/rc.d

Et au final vous pouvez lancer MySQL (ligne de commande en exemple !)

Code:
root@ns10000:/etc/rc.d# sh /etc/rc.d/mysql.server start --skip-innodb --skip-bdb --log-warnings=2 &
root@ns10000:/etc/rc.d# Starting MySQL SUCCESS!
C'est tellement bien quand ça marche directement


PHP 5.2.5

  • Prérequis (selon vos besoins) : Libxml, Libpng, Libcurl, Libjpeg


Code:
root@ns10000:~# slackpkg install libxml
root@ns10000:~# slackpkg install libxml2
root@ns10000:~# slackpkg install libpng
Si la compilation vous manque et que vous voulez les dernières versions de libcurl et libjpeg (non à jour sur les dépots 10.2) :

Code:
root@ns10000:/home/compilation# wget http://curl.haxx.se/download/curl-7.17.1.tar.gz && cd curl-7.17.1 && ./configure && make && make install
root@ns10000:/home/compilation# wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz && jpegsrc.v6b && ./configure --enable-static --enable-shared --prefix=/usr && make && make install

  • Compilation de PHP


Toujours en exemple, ne compiler que ce dont vous avez besoin !

Code:
root@ns10000:/home/compilation# wget http://fr3.php.net/get/php-5.2.5.tar.gz/from/fr.php.net/mirror
root@ns10000:/home/compilation# tar xvf php-5.2.5.tar.gz && cd php-5.2.5
root@ns10000:/home/compilation/php-5.2.5# ./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/lib/mysql --with-libxml-dir=/usr/local/lib --with-gd --with-curl --with-zlib-dir --with-png-dir --with-jpeg-dir --without-sqlite --enable-ftp --enable-zip --enable-sockets --enable-exif --enable-mbstring --disable-ipv6 --disable-cgi --disable-short-tags
root@ns10000:/home/compilation/php-5.2.5# make && make test
Une fois les tests effectués on peut installer et suivre scrupulesement les indications d'installation (si la modification de httpd.conf a réussie etc ...):

Code:
root@ns10000:/home/compilation/php-5.2.5# make install
L'installeur de PHP a normalement été à même de détecter et d'ajouter à la configuration Apache le nécessaire à l'interprétation des fichiers PHP. Vous devez disposez maintenant des lignes suivantes dans /usr/local/apache2/conf/httpd.conf

Code:
LoadModule php5_module        modules/libphp5.so
#apache ne sert pas de statique, mais nous l'utilisons pour desservir les fichiers index
DirectoryIndex index.html index.php
AddType application/x-httpd-php .php

Note : Cf. post #8 et #9 : Pour récuperer l'adresse IP du client dans les scripts PHP, il ne faut pas utiliser la variable $_SERVER['REMOTE_ADDR'] mais $_SERVER['HTTP_X_FORWARDED_FOR'] car $_SERVER['REMOTE_ADDR'] aura pour valeur 127.0.0.1 étant donné que la requête traité par Apache (et donc par le script) provient de Lighttpd.


Vous pouvez ensuite configurer votre php.ini puis installer ZendOptimizer par exemple

ipernet
30/12/2007, 18h30
Suite :

  • Configuration des compilations : CFLAGS/CXXFLAGS


A titre informatif si vous ne souhaiter pas utiliser les Flags de compilation par défaut :

Cela dépend de votre architecture et de votre version de gcc. Pour les Intel Core 2 Duo et une version de gcc < 4.3 vous pouvez utiliser lors des configure :

Code:
# ./configure ... CFLAGS="-march=prescott -O3 -pipe -fomit-frame-pointer"
Pour les futurs gcc (>= 4.3), une nouvelle préselection sera dispo :

Code:
# ./configure ... CFLAGS="-march=core2 -O3 -pipe -fomit-frame-pointer"
Vous pouvez déterminer quels sont les bonnes options d'architecture à utiliser grâce au script gcccpuopt :

http://www.pixelbeat.org/scripts/gcccpuopt


Pour enregistrer vos préférences sur le shell courant, vous pouvez enregistrer la valeur des CFLAGS qui sera réutilisée à chaque compilation. Faites de même pour les flags c++ CXXFLAGS

Code:
export CFLAGS="-march=prescott -O3 -pipe -fomit-frame-pointer"
Et en l'enregistrant dans votre fichier /etc/profile pour la conserver définitivement.

Code:
# nano /etc/profile
Code:
# /etc/profile: This file contains system-wide defaults used by
# all Bourne (and related) shells.

# Set the values for some environment variables:
#[...]
export CFLAGS="-march=prescott -O3 -pipe -fomit-frame-pointer"
export CXXFLAGS="${CFLAGS}"
#[...]
Je vous invite à consulter pour une explication de ces options/optimisations :

http://www.linux-kheops.com/doc/man/...an1/gcc.1.html
http://gentoo-wiki.com/Safe_Cflags#I...on_51xx.2F53xx
http://forums.gentoo.org/viewtopic-t...-start-25.html


4. Apache

  • Prerequis : Installation de zlib


Je vais compiler ici Apache 2.0.x avec le module mod_deflate qui permet la compression du flux de sortie. Ce module utilise la bibliothèque Zlib qu'il faut donc installer. Nous utilisons slackpkg pour installer cette librairie (la dernière version se trouve sur les miroirs, pas forcément utile de la compiler nous-même)

Code:
slackpkg install zlib
On se créer un dossier de compilation où on y désarchive Apache (libre à vous d'installer la version d'Apache que vous souhaiter. N'oubliez pas que pour compiler Apache 2.2 il vous faudra installer APR en version >= 1.0):

Code:
root@ns10000:~# mkdir /home/compilation
root@ns10000:~# cd /home/compilation
root@ns10000:/home/compilation# wget http://apache.fastorama.com/dist/httpd/httpd-2.0.61.tar.gz
root@ns10000:/home/compilation# tar xvf httpd-2.0.61.tar.gz
root@ns10000:/home/compilation# cd httpd-2.0.61
root@ns10000:/home/compilation/httpd-2.0.61# make clean
Un make clean n'est pas du tout inutile (experience inside) !

  • Configuration de la compilation


C'est à vous de savoir quels modules APache vous souhaitez conserver ou enlever, la compilation suivante n'est donnée qu'à titre indicatif :

Code:
root@ns10000:/home/compilation/httpd-2.0.61#./configure --prefix=/usr/local/apache2 --enable-so --enable-deflate --enable-headers --disable-actions --disable-imap --disable-userdir
root@ns10000:/home/compilation/httpd-2.0.61#make
On vérifie que Apache s'est compilé avec les bons modules (c'est à votre avantage de ne pas compiler des modules dont vous ne vous servirez jamais) :

Code:
root@ns10000:/home/compilation/httpd-2.0.61# ./httpd -l
Compiled in modules:
core.c
 mod_access.c
 mod_auth.c
 mod_include.c
 mod_deflate.c
 mod_log_config.c
 mod_env.c
 mod_headers.c
 mod_setenvif.c
 prefork.c
 http_core.c
 mod_mime.c
 mod_status.c
 mod_autoindex.c
 mod_negotiation.c
 mod_dir.c
 mod_alias.c
 mod_so.c
C'est OK on peut l'installer :

Code:
root@ns10000:/home/compilation/httpd-2.0.61# make install
  • Configuration rapide d'Apache


Dans ce tutoriel je ne vais me servir d'Apache uniquement pour traiter du contenu dynamique (PHP). Tout le contenu statique sera distribué par Lighttpd qui fera aussi service de frontal. C'est un couple très efficace niveau performance.

Disons que nous allons hébergés sur ce serveur au moins 2 sites internet indépendants. (site1.com et site2.net)

  • Création du user httpd sous lequel tourner Apache


Code:
root@ns10000:/home# groupadd www
root@ns10000:/home# useradd httpd -g nogroup -s /bin/false
root@ns10000:/home# usermod -L httpd #lock le compte
Le groupe www va nous servir pour le serveur FTP

  • Création du répertoire htdocs


Code:
#mkdir /home/htdocs
#mkdir /home/htdocs/site1.com
#mkdir /home/htdocs/site2.net
Code:
nano /usr/local/apache2/conf/httpd.conf
Vous pouvez modifier les parametres suivants :
Code:
User httpd
Group nogroup

#Nous ne desservons que du PHP, nous pouvons désactiver le keepalive
KeepAlive Off

#Port 8070 sera destiné au virtualhost pour site1.com
Listen 127.0.0.1:8070

#Port 8080 sera destiné au virtualhost pour site2.net
Listen 127.0.0.1:8080

DocumentRoot "/home/htdocs"

NameVirtualHost	127.0.0.1:8070
NameVirtualHost	127.0.0.1:8080


    DocumentRoot /home/htdocs/site1.com
    ServerName www.site1.com


    DocumentRoot /home/htdocs/site2.net
    ServerName www.site2.net
Vous remarquer ici qu'apache n'écoute que sur l'interface locale. En effet nous allons nous servir de Lighttpd comme serveur frontal et utiliser son module mod_proxy pour forwarder les requetes de contenu dynamique vers Apache selon le port qui définira de quel site il s'agit


5. Lighttpd 1.4.18

  • Prérequis : PCRE


On va avoir besoin du support du module pcre dans lighttpd pour écrire entre autres nos règles de proxy. Il nous faut l'installer avant d'effectuer la compilation de lighty sinon ca ne marchera pas

Code:
root@ns10000:/home/compilation# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.4.tar.gz
root@ns10000:/home/compilation# tar xvf pcre-7.4.tar.gz
root@ns10000:/home/compilation# cd pcre-7.4/
root@ns10000:/home/compilation/pcre-7.4/# .configure --help
#Choisissez vos options spécifiques ou simplement ./configure
root@ns10000:/home/compilation/pcre-7.4/# make && make install
  • Lighttpd


C'est toujours à vous de chosir quoi compiler. Ce sont des exemples pour une utilisation spécifique qui ne vous coniendra pas forcément

Code:
root@ns10000:/home/compilation# wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.gz
root@ns10000:/home/compilation# tar xvf lighttpd-1.4.18.tar.gz
root@ns10000:/home/compilation# cd lighttpd-1.4.18
root@ns10000:/home/compilation/lighttpd-1.4.18# ./configure --disable-ipv6 --with-bzip2 --with-pcre
--with-bzip2 : Pour pouvoir utilser le module de compression mod_compress (l'équivalent de mod_deflate sous Apache)

Finalement :

Code:
root@ns10000:/home/compilation/lighttpd-1.4.18# make && make install

  • Configuration rapide de Lighttpd


User sous lequel va tourner Lighttpd

Code:
root@ns10000:/home# useradd lighttpd -g nogroup -s /bin/false
root@ns10000:/home# usermod -L lighttpd #lock le compte
Fichier de log

Code:
root@ns10000:/home# cd /var/log/
root@ns10000:/var/log# mkdir lighttpd
root@ns10000:/var/log# touch error.log
root@ns10000:/var/log# chown lighttpd lighttpd/
root@ns10000:/var/log# chmod 744 lighttpd/
Configuration

Code:
nano /etc/lighttpd.conf

ipernet
30/12/2007, 18h30
Un tuto spécial Slackware.

Hormis lors de la mise à jour de la distribution et rapatriement de quelques librairies, tout sera configuré, compilés et installés à partir des sources. Ce n'est donc pas pas un tuto exclusivement réservé à cette distrib.

Il est réalisé sur un Superplan 08 L +, Slackware 10.2. Vous le suivez à vos risques et périls et il n'est pas forcément exhaustif

Le nom du serveur donné ici sera ns10000


1. Livraison du serveur, premières vérifications

Premières vérifications qui peuvent éviter quelques soucis dans un futur proche (problèmes réellement rencontrés) :

  • Vérification host

Code:
#ping ns10000
ping: unknown host ns10000
En fait le fichier host était bancal (ça commencait mal ) :

Code:
#cat /etc/hosts
127.0.0.1               localhost
91.121.14.48          2-ns10000.ovh.net        ns10000
On corrige en (avec vi ou en ramenant ça chez soi en sftp, on installe nano dès qu'on peut) :

Code:
127.0.0.1               localhost
91.121.14.48          ns10000.ovh.net        ns10000
  • Vérification horloge


Code:
#date
La date était elle aussi en retard de deux mois.

Premier problème rencontré :

Mettre à jour la date du serveur en l'enregistrant dans le bios grâce à la commande hwclock ne marche pas.

Code:
#hwclock --show
select() to /dev/rtc to wait for clock tick timed out
Code:
#hwclock --systohc --debug

hwclock from util-linux-2.12p
Using /dev/rtc interface to clock.
Last drift adjustment done at 1137365083 seconds after 1969
Last calibration done at 1137365083 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
select() to /dev/rtc to wait for clock tick timed out
...got clock tick
Code:
#hwclock --set --date="09/11/07 13:56:00" --utc --debug
Issuing date command: date --date="09/11/07 13:56:00" +seconds-into-epoch=%s
response from date command = seconds-into-epoch=1189511760

date string 09/11/07 13:56:00 equates to 1189511760 seconds since 1969.
hwclock from util-linux-2.12p
Using /dev/rtc interface to clock.
Last drift adjustment done at 1137365083 seconds after 1969
Last calibration done at 1137365083 seconds after 1969
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
select() to /dev/rtc to wait for clock tick timed out
...got clock tick

Code:
select() to /dev/rtc to wait for clock tick timed out
Une recherche sur Google nous indiquera qu'il existe un bug avec les Intel dualcore et que l'on peut contourner le problème en utilisant l'option "--directisa" avec hwclock

Code:
#hwclock --help | grep directisa
--directisa   access the ISA bus directly instead of /dev/rtc
Autant vous dire tout de suite que ca ne marchera pas mieux (bus isa inexistant ?)

Code:
root@ns10000:/# hwclock --show --directisa
root@ns10000:/#
et que jusqu'à présent je n'ai pas trouvé comment enregistrer dans le bios du serveur la bonne date. Je suis donc obligé de la mettre à jour à chaque (rare) reboot (grâce à NTP que nous verrons plus loin)


  • Installation de nano


Nano est très pratique et on en a tout le temps besoin. Installons le en priorité

root@ns10000:/home# wget http://repository.slacky.eu/slackwar...6-i486-1sl.tgz
root@ns10000:/home# installpkg nano-2.0.6-i486-1sl.tgz


  • Utilisateur autre que root


Afin de se logger avec un autre utilisateur que root, on crée un nouvel utilisateur (ici "toto")que l'on n'oublie pas de placer dans le groupe wheel (pour pouvoir se logger en root depuis cet user) :

Code:
# useradd -g users -G wheel -s /bin/bash toto
# passwd toto
Une fois effectué, tenter de vous connecter en SSH avec cet utilisateur, puis de vous loggeur en root.

  • Modification de sshd_config


Attention, les modifications suivantes empecheront les techs OVH d'accèder à votre serveur. A vos risques et périls de les effectuer

On change le port par défaut pour éviter une bonne partie de scan, on interdit au root de se connecter directement (on se connectera avec l'utilisateur "toto")

Code:
/etc/ssh/sshd_config
Code:
Port 8655
PermitRootLogin no
PermitEmptyPasswords no
AllowUsers toto
SyslogFacility AUTH
LogLevel INFO
On restart (et on ne stop surtout pas !) le démon :

Code:
root@ns10000:/etc/rc.d# ./rc.sshd restart
Vous vous connecter maintenant en utilisant votre nouvel utilisateur non root sur le nouveau port.

2. Mise à jour de la distribution avec slackpkg

  • Téléchargement de slackpkg

#cd /home/
#wget http://heanet.dl.sourceforge.net/sou...1-noarch-2.tgz
#installpkg slackpkg-2.61-noarch-2.tgz
  • Configuration de slackpkg


On désactive la vérification GPG (GPG n'est pas installé pour le moment (on évite ainsi le message de rappel récurrent suivant à chaque fois qu'on utilise slackpkg) :

Code:
gpg package not found!  Please disable GPG in /etc/slackpkg/slackpkg.conf or install
the gnupg package.

To disable GPG, edit slackpkg.conf and change the value of the CHECKGPG variable
to off - you can see an example in the original slackpkg.conf.new file distributed
with slackpkg.


On active un des miroirs des paquets slackware-10.2 en décommantant une des lignes du michier mirrors :

Code:
/etc/slackpkg/mirrors
Code:
http://ftp.belnet.be/packages/slackware/slackware-10.2/
Note : On peut tout a fait passer en slackware 12, cependant certaine mise à jour touchant au coeur du système sont à faire avec précaution. Dans ce tutorial nous restons en Slackware 10.2

On peut maintenant mettre à jour la liste interne des paquets de slackpkg :

Code:
#slacpkg update
Et ensuite demander la liste des paquets upgradables :

Code:
#slackpkg upgrade-all
http://hiboox.com/lang-fr/image.php?img=xu81a9er.png

A vous ensuite de choisir quels paquets vous souhaitez mettre à jour.

3. Installer le nécessaire pour les compilations

Utilisons l'outil de package de la distribution pour récupérer les compilateurs et dépendances nécessaires par la suite.

Dans un premier temps regardons ce qui est installé :

Code:
# slackpkg search glib
The list below shows all packages with the selected pattern.
...
[  installed  ] - glibc-solibs-2.3.5-i486-6_slack10.2
[  installed  ] - glibc-zoneinfo-2.3.5-noarch-8_slack10.2
[uninstalled] - glib-1.2.10-i386-2
[uninstalled] - glib2-2.6.6-i486-1
[uninstalled] - glibc-2.3.5-i486-5
[uninstalled] - glibc-i18n-2.3.5-noarch-5
[uninstalled] - glibc-profile-2.3.5-i486-5
Nous pouvons ainsi installer :

Code:
# slackpkg install glib
# slackpkg install glib2
# slackpkg install glibc
Idem pour gcc :

Code:
# slackpkg install gcc
Code:
# slackpkg search gcc
The list below shows all packages with the selected pattern.
[ installed ] - gcc-4.1.2-i486-1
[ installed ] - gcc-g++-4.1.2-i486-1
[uninstalled] - gcc-gfortran-4.1.2-i486-1
[uninstalled] - gcc-gnat-4.1.2-i486-1
[uninstalled] - gcc-java-4.1.2-i486-1
[uninstalled] - gcc-objc-4.1.2-i486-1
[uninstalled] - gcc-g77-3.4.6-i486-1
Les outils de compilation sont installés. Ils nous manque plus que les kernels-headers aussi nécessaires. Nous allons télécharger les sources complètes du noyau de la machine qui les contient (et nous pourrons ainsi envisager ultérieurement de toucher au noyau).

Tout d'abord enlevons les éventuels kernel-headers/sources déjà installés et qui ne sont pas forcément ceux du noyau sur lequel vous êtes (slackware 10.2 est prévu pour tourner sur un noyau 2.4.32, vous disposez alors des kh/s 2.4.32 dans les dépots unqiuement. Si vous êtes passé en slackware 12, vous aurez les kh/s 2.6.21.5):

Noyau de la machine :
Code:
# uname -r
2.6.21.5-grsec-xxxx-grs-ipv4-32
Code:
#slackpkg remove kernel-headers
#slackpkg remove kernel-source
Est ce propre ?

Code:
cd /usr/src/ && ls -lh
devrait etre vide, sinon faite un peu de nettoyage

Dl des sources complètes relatives au noyau, décompression et lien symbolique :

Code:
root@ns10000:/usr/src# wget http://www.eu.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.5.tar.gz
root@ns10000:/usr/src# tar xvf linux-2.6.21.5.tar.gz
root@ns10000:/usr/src# ln -s /usr/src/linux-2.6.21.5 linux
On n'oublie pas :
Code:
root@ns10000:/usr/src# cd linux/
root@ns10000:/usr/src# make mrproper
Tant qu'on y on peut préparer le terrain à une futur recompilation du noyau.

Code:
# cd /usr/include
root@ns10000:/usr/include# ln -s /usr/src/linux/include/linux linux
root@ns10000:/usr/include# ln -s /usr/src/linux/include/asm-i386 asm
root@ns10000:/usr/include# ln -s /usr/src/linux/include/asm-generic asm-generic
Et voila, nous avons de quoi compiler les logiciels que nous allons utilisez et de toucher aussi à la recompilation du noyau (qui ne sera cependant pas aborder ici)