<> Cette page présente le modèle de serveur bureautique pour le déploiement du poste de travail AuF sous ''Ubuntu “Lucid Lynx” 10.04 LTS''. ||<#FFFF00> '''AVERTISSEMENT :''' cette documentation est encore incomplète mais néanmoins validée ; elle a déjà servi à installer de vrais serveurs en production.|| == Pré-requis matériels == * processeur 64 bits (Intel Xeon ou AMD Opteron), multi-cœurs autant que possible * beaucoup de RAM (4 Gio ou plus recommandés) * beaucoup d'espace disque, en double pour faire du RAID-1 (2 × 500 Go SATA, ou du SCSI si on est riche) == Pré-requis système == * /!\ aller dans le BIOS régler l'heure correcte, en UTC (!) ''(dans le doute sur l'heure précise, il veut mieux être en retard qu'en avance)'' * installer une Debian ''Squeeze'' (ou adapter une Debian ''Lenny'' existante si on n'a pas d'autre choix dans l'immédiat) * organisation des disques : /!\ '''ces choix sont très discutables et seront probablement revus au fur et à mesure des retours d'expérience''' * une première partition primaire de 100 Mo (pour `/boot`) de type `RAID auto` sur chaque disque . {i} ''en principe ce n'est plus nécessaire avec ''Squeeze'' qui utilise `grub-pc` (GRUB 2) et est donc capable de démarrer directement sur un volume LVM, mais [[ProgFou|je]] n'ai pas encore testé cela, en particulier dans le cas d'un LVM au dessus d'un RAID qui posait officiellement problème autrefois, et ce n'est donc pas encore une solution validée'' . {i} ''[[MoussaNombre|je]] confirme que le /boot marche bien dans un LVM sans soucis (en prod à Montréal)'' * le reste en partition(s) primaire(s) de type `RAID auto` sur chaque disque . (en découpant éventuellement par tranche de 250 Go, pour découper les re-synchronisation après ''crash'') * aller dans le menu RAID pour : * joindre les partitions `RAID auto` 2-par-2 en des volumes RAID-1 de 2 disques et 0 de réserve (''spare'') * ne rien faire avec le premier volume RAID-1 (md0) car ce sera perdu (et donc à refaire) après la configuration LVM * déclarer les autres volumes RAID-1 (md1, md2, …) de type `Volume physique LVM` * aller dans le menu LVM pour : * joindre les volumes physique LVM dans un seul `Groupe de volumes` . (on recommande d'utiliser un nom de groupe de volumes unique entre tous les serveurs, par exemple `vn1nfs0`, ceci afin de pouvoir éventuellement déplacer ces disques dans un autre serveur plus tard sans avoir de conflit pour cause de noms de groupes de volumes identiques) * déclarer les volumes logiques suivants : * un volume de nom `swap` d'une taille de 10 Go * un volume de nom `root` d'une taille de 1 Go * un volume de nom `var` d'une taille de 1 Go * un volume de nom `log` d'une taille de 1 Go * un volume de nom `tmp` d'une taille de 1 Go * un volume de nom `home` d'une taille de 100 Go ''(par exemple, à vous de voir)'' * déclarer le volume logique `swap` de type `swap` * déclarer le volume logique `root` de type `ext4` monté sur `/` * déclarer le volume logique `var` de type `ext4` monté sur `/var` * déclarer le volume logique `log` de type `ext4` monté sur `/var/log` * déclarer le volume logique `tmp` de type `ext4` monté sur `/tmp` * déclarer le volume logique `home` de type `ext4` monté sur `/home` * déclarer le premier volume RAID-1 (md0) de type `ext3` monté sur `/boot` * choisir pour nom de machine `nfs` ''(non obligatoire, mais suggéré)'' * installer GRUB sur le ''MBR'' des deux disques en RAID, donc lancer ces commandes après redémarrage du serveur : {{{ grub-install /dev/sda grub-install /dev/sdb }}} == Base système == * configurer l'environnement linguistique : ''(choisir `fr_FR.UTF-8`, ou autre locale encodée en `UTF-8`)'' {{{ aptitude install locales }}} . {i} ''Dans le cas où les locales auraient déjà été installées, s'assurer de leur bonne configuration en lançant `dpkg-reconfigure locales`, c'est important.'' * installation dès le départ de quelques services indispensables que l'on configurera plus tard : {{{ aptitude install --without-recommends ntp bind9 openssh-server }}} * installation de quelques autres paquets indispensables/utiles : {{{ aptitude install --without-recommends less vim ssh screen mtr-tiny dnsutils }}} == Base réseau == * arrêter le réseau (pour stopper le client DHCP mis en place par défaut) : {{{ service networking stop }}} * configurer le réseau dans `/etc/network/interfaces`, par exemple : {{{ auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.50.10 netmask 255.255.255.0 network 192.168.50.0 broadcast 192.168.50.255 gateway 192.168.50.1 }}} * vérifier le nom de machine dans `/etc/hostname`, par exemple : {{{ nfs }}} * vérifier le nom de machine dans `/etc/hosts`, par exemple : {{{ 127.0.1.1 localhost # ne pas utiliser cette forme pour un vrai serveur (a priori, toutes les conséquences ne sont pas encore connues) #127.0.1.1 nfs.lucid.auf nfs # utiliser la véritable adresse IP 192.168.50.10 nfs.lucid.auf nfs # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters }}} * démarrer le réseau : {{{ service networking start }}} {i} Remarque : en principe le serveur de bureautique n'est pas sensé jouer aussi le rôle de passerelle. On peut fusionner les deux au besoin mais cette documentation se concentre plutôt sur le modèle général où les deux fonctions sont séparées. == Service SSH == * installer le service SSH : {{{ aptitude install --without-recommends openssh-server }}} * dans le cas où l'on voudrait donner un accès SFTP aux partages réseaux (par exemple pour les nomades), ajouter ceci tout à la fin (c'est important) du `/etc/ssh/sshd_config` : {{{ AllowGroups ssh users Subsystem sftp internal-sftp Match Group users ChrootDirectory /nfsv4 X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp }}} . /!\ Le répertoire partages (ici /nfsv4) et ses parents doivent avoir root comme owner et non writable par group et other, si non vous avez ce type d'erreur "fatal: bad ownership or modes for chroot directory" dans /var/log/auth * pour une gestion des fichiers par groupe d'utilisateurs, ajouter ces lignes à `/etc/pam.d/sshd` : {{{ # Setting UMASK for all ssh based connections (ssh, sftp, scp) session optional pam_umask.so umask=0002 }}} . /!\ dans ce cas ajouter également un `umask 0022` dans `/root/.bashrc` /!\ '''ATTENTION : configuration (restrictions) restant à préciser''' == Service NTP == * installer le service d'heure et de maintenance de l'heure : {{{ aptitude install --without-recommends ntp }}} . /!\ '''ATTENTION : configuration (sur NTP local ou exemple de asia.pool.ntp.org) restant à préciser''' == Service DNS == * installer le service DNS : {{{ aptitude install --without-recommends bind9 }}} * configurer la résolution DNS dans `/etc/resolv.conf`, par exemple : {{{ domain lucid.auf search lucid.auf nameserver 127.0.0.1 }}} * déclarer deux zones pour le réseau local dans `/etc/bind/named.conf.local`, par exemple : {{{ zone "lucid.auf" IN { type master; file "/etc/bind/db.lucid.auf"; }; zone "50.168.192.in-addr.arpa" IN { type master; file "/etc/bind/db.50.168.192"; }; }}} * créer ensuite le contenu de la première zone dans `/etc/bind/db.lucid.auf`, par exemple : {{{ $ORIGIN lucid.auf. $TTL 24H @ IN SOA ns1.lucid.auf. hostmaster.lucid.auf.org. ( 2011013000 ; Serial 8H ; Refresh 1H ; Retry 2W ; Expire 600 ) ; Negative Cache TTL ; @ IN NS ns1 ns1 IN A 192.168.50.10 ; network IN A 192.168.50.0 gw IN A 192.168.50.1 nfs IN A 192.168.50.10 $GENERATE 130-249 dynamic-$ IN A 192.168.50.$ broadcast IN A 192.168.50.255 ; ntp IN CNAME nfs nss IN CNAME nfs }}} * créer ensuite le contenu de la seconde zone dans `/etc/bind/db.50.168.192`, par exemple : {{{ $ORIGIN 50.168.192.in-addr.arpa. $TTL 24H @ IN SOA ns1.lucid.auf. hostmaster.lucid.auf.org. ( 2011013000 ; Serial 8H ; Refresh 1H ; Retry 2W ; Expire 600 ) ; Negative Cache TTL ; @ IN NS ns1.lucid.auf. ; 0 IN PTR network.lucid.auf. 1 IN PTR gw.lucid.auf. 10 IN PTR nfs.lucid.auf. $GENERATE 130-249 $ IN PTR dynamic-$.lucid.auf. 255 IN PTR broadcast.lucid.auf. }}} * relancer le service DNS : {{{ service bind9 restart }}} * valider la configuration DNS avec quelques tests : {{{ host nfs.lucid.auf host dynamic-130.lucid.auf host www.auf.org }}} == Service DHCP == * installer le service DHCP : {{{ aptitude install isc-dhcp-server }}} * spécifier dans `/etc/default/isc-dhcp-server` l'interface sur laquelle on fournit le service : {{{ INTERFACES="eth0" }}} * définir dans `/etc/dhcp/dhcpd.conf` le réseau que l'on sert : {{{ authoritative; subnet 192.168.50.0 netmask 255.255.255.0 { deny unknown-clients; # recommandé sur un réseau dont toutes les machines sont connues range 192.168.50.130 192.168.50.249; option subnet-mask 255.255.255.0; option broadcast-address broadcast.lucid.auf; option routers gw.lucid.auf; option domain-name "lucid.auf"; option domain-name-servers ns1.lucid.auf; option ntp-server ntp.lucid.auf; filename "pxelinux.0"; next-server nfs.lucid.auf; server-name "nfs.lucid.auf"; } }}} * relancer le service DHCP : {{{ service isc-dhcp-server restart }}} == Service TFTP == * installer le service TFTP : ''(garder le chemin `/srv/tftp` par défaut)'' {{{ aptitude install tftpd-hpa }}} . {i} ''Pour ''Lenny'', choisir de ne pas démarrer via `inetd`, mettre `RUN_DAEMON="yes"` et `OPTIONS="-v -l -s /srv/tftp"` dans `/etc/default/tftpd-hpa` et lancer `/etc/init.d/tftpd-hpa restart` ; ce n'est plus nécessaire avec ''Squeeze'' où le service TFTP est maintenant autonome.'' * mettre en place l'installation en réseau de ''Ubuntu Lucid'', par exemple : {{{ wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/netboot/netboot.tar.gz -O- | tar -C /srv/tftp -xpzf - chown -hR root:nogroup /srv/tftp }}} * ajouter à la fin de `/srv/tftp/pxelinux.cfg/default` une option d'installation au modèle AuF : {{{ label lucid menu label Lucid sauce AUF kernel ubuntu-installer/i386/linux append vga=vesa initrd=ubuntu-installer/i386/initrd.gz locale=fr_FR.UTF-8 console-setup/ask_detect=false console-setup/layoutcode=fr netcfg/wireless_wep= netcfg/choose_interface= netcfg/get_hostname= url=http://nfs/config/lucid-preseed-auf-fixe -- label local menu label Disque local menu default localboot 0 append - }}} {i} Cela ne fonctionnera pas tout de suite car il faut d'abord mettre en place le service web pour servir le fichier ''preseed''. == Service web == {i} Nécessaire au moins pour le ''preseed'' et pour `auf-django-users`. * installer le service web : {{{ aptitude install apache2 }}} * configurer dans `/etc/apache2/conf.d/security` le niveau de détails techniques : {{{ ServerTokens OS }}} * configurer dans `/etc/apache2/conf.d/charset` le jeu de caractères par défaut : {{{ AddDefaultCharset UTF-8 }}} * ajouter dans `/etc/apache2/sites-available/default`, avant la ligne `ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/`, les restrictions d'accès suivantes : {{{ Options FollowSymLinks AllowOverride None Order allow,deny allow from 192.168.50.0/24 AddType application/x-ns-proxy-autoconfig .dat }}} * relancer le service web : {{{ service apache2 restart }}} * copier dans `/var/www/config/lucid-preseed-auf-fixe` le contenu de la page [[../PreseedAuFFixe]] : {{{{ mkdir /var/www/config wget --header='User-Agent: Firefox' http://wiki.auf.org/wikiteki/Projet/Mod%C3%A8leLucid/PreseedAuFFixe?action=raw -O- | awk '/}}}/{ok=0} {if(ok)print} /{{{/{ok=1}' > /var/www/config/lucid-preseed-auf-fixe chmod 0644 /var/www/config/lucid-preseed-auf-fixe }}}} * copier dans `/var/www/config/lucid-authorized_keys` la clé publique qui servira à gérer les postes clients, par exemple : {{{ cp -a /root/.ssh/authorized_keys /var/www/config/lucid-authorized_keys chmod 0644 /var/www/config/lucid-authorized_keys }}} * copier dans `/var/www/config/lucid-postpreseed` le script suivant : {{{#!shell #!/bin/sh # désactivation des sources des logiciels par défaut sed -i '/^deb-src/s/^/#/' /etc/apt/sources.list # (re)configuration de l'environnement linguistique (bogue ?) dpkg-reconfigure locales # (re)configuration de l'imprimante PDF (nécessite que CUPS soit lancé) service cups start dpkg-reconfigure cups-pdf service cups stop # ajout du compte "auf" dans le groupe sudo (à faire le preseed, un jour...) adduser auf sudo # installation des clés SSH dans les comptes "root" et "auf" mkdir -m 0700 -p /root/.ssh wget http://nfs/config/lucid-authorized_keys -O /root/.ssh/authorized_keys chmod 0600 /root/.ssh/authorized_keys cp -a /root/.ssh ~auf/ chown -R auf:auf ~auf/.ssh # après le redémarrage, il faudra encore ajuster les 'username' et 'password' # dans /etc/libnss-mysql.cfg et /etc/libnss-mysql-root.cfg puis lancer : # service nscd restart ; nscd -i passwd ; nscd -i group ; service gdm restart # déplacement du "/home" actuel vers "/home.local" sed -i 's|:/home/|:/home.local/|' /etc/passwd mv /home /home.local ln -s /net/nfs/home /home # masque autorisant l'écriture pour le groupe par défaut # (à activer dans les réseaux où on travaille par groupes Unix) #sed -i 's/^umask .*$/umask 002/' /etc/profile exit 0 }}} . (!) idée pour une amélioration possible pour le `umask` pour la gestion par groupes, faire ajouter plutôt quelque chose comme ça dans `/etc/profile` : {{{ if [ "`id -u`" -lt 1000 ]; then umask 022 else umask 002 fi }}} == Service NFS == Mettre en place le service NFS selon les indications sur la page [[NFS/NFSv4|NFSv4]] (uniquement la partie serveur). Respecter les exemples fournis sur cette page, à l'exception du paramétrage pour le partage des répertoires utilisateurs (`/nfsv4/home`) : nous sommes pour le moment toujours obligés de mettre un `no_root_squash` au lieu de `root_squash`, toujours à cause de `cups-pdf` (imprimante PDF virtuelle). == Gestion de l'espace disque == * installer la gestion des quotas : {{{ aptitude install --without-recommends quota quotatool }}} . /!\ '''ATTENTION : configuration (`usrquota` dans `/etc/fstab`, journalisation) restant à préciser''' == Service auf-mkhomedir == * installer le méta-serveur de services : {{{ aptitude install inetutils-inetd update-inetd }}} * mettre en place le service de création de répertoire utilisateur : {{{ wget 'http://git.auf.org/?p=auf-poste-client.git;a=blob_plain;f=lucid/auf-client-fixe/auf-mkhomedir/inetd_auf-mkhomedir' -O /usr/local/sbin/inetd_auf-mkhomedir chown root:root /usr/local/sbin/inetd_auf-mkhomedir chmod 0700 /usr/local/sbin/inetd_auf-mkhomedir update-inetd --group AUF --add '10 stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/inetd_auf-mkhomedir' service inetutils-inetd reload }}} /!\ '''Il faut absolument vérifier''' dans `/usr/local/sbin/inetd_auf-mkhomedir` si le paramétrage des quotas correspond à votre politique locale de gestion de l'espace disque. <> == Base d'utilisateurs réseau == * installer l'accès à la base des utilisateurs : {{{ aptitude install libnss-mysql-bg nscd sed -i -e "s|,shell |,'/bin/false' |" -e '/ username=/s/=/= binary /' -e '/^host/s/^.*$/host nss/' /etc/libnss-mysql.cfg }}} * éditer encore les fichiers `/etc/libnss-mysql.cfg` et `/etc/libnss-mysql-root.cfg` pour y configurer les `username` et `password` d'accès à la base dans MySQL * activer l'utilisation de cette base : {{{ sed -i -e '/^\(passwd\|group\|shadow\):/s/:.*$/:\t\tfiles mysql/' /etc/nsswitch.conf service nscd restart nscd -i passwd nscd -i group }}} ''(autres détails à venir… en particulier l'installation de `auf-django-users`)'' ----