« Proxmox et OpenVZ » : différence entre les versions

Aller à la navigation Aller à la recherche
28 147 octets ajoutés ,  16 mai 2015
aucun résumé des modifications
Aucun résumé des modifications
 
(160 versions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :
[[Category:debian]]
[[Category:debian]]
[[Category:virtualisation]]
[[Category:virtualisation]]
* '''Cette page n'est plus maintenue, les informations contenues ici sont potentiellement obsolètes''' *


=Partitionnement du disque dur=
=Partitionnement du disque dur=
Ligne 180 : Ligne 183 :


<pre>
<pre>
echo onyx.csnu.org > /etc/hostname
echo proxmox.domain.tld > /etc/hostname
echo proxmox.domain.tld  > /etc/mailname
</pre>
</pre>


Ligne 187 : Ligne 191 :
aptitude install proxmox-ve-2.6.32 ntp lvm2
aptitude install proxmox-ve-2.6.32 ntp lvm2
</pre>
</pre>
Gardez en considération que si vous créez des VEs avec openvz, vous n'aurez pas besoin d'installer de client ntp sur vos VEs étant donné que les VEs openvz partagent le même kernel que l'host.


Pour simplifier l'administration, créez un lien virtuel de /vz vers /var/lib/vz :
Pour simplifier l'administration, créez un lien virtuel de /vz vers /var/lib/vz :
Ligne 226 : Ligne 232 :
         post-up /etc/pve/kvm-networking.sh
         post-up /etc/pve/kvm-networking.sh
</pre>
</pre>
=Reboot et post-installation=
Rebootez votre serveur
<pre>reboot</pre>
Créez un utilisateur :
<pre>adduser pfoo</pre>
Puis sécurisez ssh :
* désactivez le login root (directive <code>PermitRootLogin no</code> dans <code>/etc/ssh/sshd_config</code>)
* ajoutez la directive <code>allowusers pfoo</code> dans <code>/etc/ssh/sshd_config</code>


=Utiliser son propre certificat ssl pour l'interface web=
=Utiliser son propre certificat ssl pour l'interface web=


Je vous renvoi sur http://wiki.csnu.org/index.php?title=Installation_et_configuration_de_OpenSSL pour la mise en place d'une autorité de certification.
Je vous renvoi sur http://wiki.csnu.org/index.php?title=Installation_et_configuration_de_OpenSSL pour la mise en place d'une autorité de certification.
Dans l'exemple suivant, je créé un certificat proxmox et le signe avec l'autorité onyx_ca :
Dans l'exemple suivant, je créé un certificat proxmox et le signe avec l'autorité proxmox_ca :


<pre>
<pre>
openssl req -newkey rsa:2048 -keyout proxmox.key -out proxmox.req
openssl req -newkey rsa:2048 -keyout proxmox.key -out proxmox.req
openssl ca -name onyx_ca -extensions PROXMOX -in proxmox.req -out proxmox.pem
openssl ca -name proxmox_ca -extensions PROXMOX -in proxmox.req -out proxmox.pem
</pre>
</pre>


Ligne 240 : Ligne 258 :
mkdir /etc/apache2/ssl/
mkdir /etc/apache2/ssl/
mv proxmox.* /etc/apache2/ssl/
mv proxmox.* /etc/apache2/ssl/
cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/onyx_ca/onyx_ca.pem > /etc/apache2/ssl/cachain.pem
cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/proxmox_ca/proxmox_ca.pem > /etc/apache2/ssl/cachain.pem
</pre>
</pre>


Ligne 258 : Ligne 276 :
     RewriteRule .* - [F]
     RewriteRule .* - [F]
  </VirtualHost>
  </VirtualHost>
</pre>
=Installer un serveur dns pour ses VEs=
Commencez par installer le serveur bind9 :
<pre>aptitude install bind9 bind9-host dnsutils</pre>
Éditez le fichier <code>/etc/bind/named.conf.options</code> et ajoutez y les lignes suivantes :
<pre>
allow-query {
        127.0.0.1;
        91.121.141.220;
        ::1;
        2001:41d0:1:bcdc::220;
        192.168.0.0/24;
};
allow-recursion {
        127.0.0.1;
        91.121.141.220;
        ::1;
        2001:41d0:1:bcdc::220;
        192.168.0.0/24;
};
allow-query-cache {
        127.0.0.1;
        91.121.141.220;
        ::1;
        2001:41d0:1:bcdc::220;
        192.168.0.0/24;
};
version "[SECURED]";
allow-notify {
        127.0.0.1;
        91.121.141.220;
        ::1;
        2001:41d0:1:bcdc::220;
        192.168.0.0/24;
};
//interdiction du transfère complet de zones
allow-transfer {"none";};
listen-on    { 127.0.0.1; 192.168.0.0/24; 91.121.141.220; };
listen-on-v6 { ::1; 2001:41d0:1:bcdc::220; };
transfer-source 91.121.141.220;
transfer-source-v6 2001:41d0:1:bcdc::220;
notify-source 91.121.141.220;
notify-source-v6 2001:41d0:1:bcdc::220;
</pre>
Vous pouvez noter que j'ai autorité toutes les IPs 192.168.0.0 à interroger le serveur dns étant donné que je me servirais de cette classe pour créer un réseau interne pour mes VEs.
Ajoutez les lignes suivantes dans <code>/etc/resolv.conf</code> :
<pre>
nameserver ::1
nameserver 127.0.0.1
nameserver 192.168.0.1
nameserver 2001:41d0:1:bcdc::220
nameserver 91.121.141.220
</pre>
=Sécuriser et configurer le serveur mail de son host=
Lors de l'installation de l'interface proxmox, <code>postfix</code> a été automatiquement installé.
Modifiez la configuration de postfix dans <code>/etc/postfix/main.cf</code> comme suit :
<pre>
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = proxmox.domain.tld
mydomain = proxmox.domain.tld
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = proxmox.domain.tld , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_protocols = all
inet_interfaces = 127.0.0.1, [::1], 192.168.0.1, 91.121.141.220, [2001:41d0:1:bcdc::220]
smtpd_sender_restrictions =
  reject_unknown_sender_domain,
  reject_non_fqdn_sender
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_invalid_hostname
</pre>
==SSL==
Si vous avez votre propre autorité ssl, vous pouvez générer votre propre certificat.
Ajoutez les lignes suivantes dans <code>/etc/ssl/openssl.cnf</code> :
<pre>
[POSTFIX]
nsComment                      = "SMTP Server Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
issuerAltName                  = issuer:copy
basicConstraints                = critical,CA:FALSE
keyUsage                        = digitalSignature, nonRepudiation, keyEncipherment
nsCertType                      = server
extendedKeyUsage                = serverAuth
</pre>
Puis générez la clé et le certificat, et signez le avec votre autorité (proxmox_ca dans mon cas) :
<pre>
openssl req -config /etc/ssl/openssl.cnf -nodes -newkey rsa:2048 -keyout postfix.key -out postfix.req
openssl ca -config /etc/ssl/openssl.cnf -name proxmox_ca -extensions POSTFIX -in postfix.req -out postfix.pem
</pre>
Déplacez les fichiers dans le répertoire <code>/etc/postfix/ssl</code>:
<pre>
mkdir /etc/postfix/ssl
mv postfix.key /etc/postfix/ssl/
mv postfix.pem /etc/postfix/ssl/
chmod 600 /etc/postfix/ssl/*
cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/proxmox_ca/proxmox_ca.pem > /etc/postfix/ssl/ca_chain.pem
</pre>
Il faut encore modifier <code>/etc/postfix/main.cf</code> :
<pre>
smtpd_tls_cert_file=/etc/postfix/ssl/postfix.pem
smtpd_tls_key_file=/etc/postfix/ssl/postfix.key
smtpd_tls_CAfile=/etc/ssl/csnu.org/ca.pem
smtpd_use_tls=yes
smtp_tls_cert_file=/etc/postfix/ssl/postfix.pem
smtp_tls_key_file=/etc/postfix/ssl/postfix.key
smtp_tls_CAfile=/etc/postfix/ssl/ca_chain.pem
</pre>
</pre>


Ligne 264 : Ligne 439 :
Il suffit de télécharger directement les archives dans <code>/var/lib/vz/template/cache/</code>.
Il suffit de télécharger directement les archives dans <code>/var/lib/vz/template/cache/</code>.
Vous pouvez trouver des templates sur http://download.proxmox.com/appliances/ et http://wiki.openvz.org/Download/template/precreated
Vous pouvez trouver des templates sur http://download.proxmox.com/appliances/ et http://wiki.openvz.org/Download/template/precreated
=Créer son template Debian 'Squeeze' 6.0=
<pre>
aptitude install debootstrap
debootstrap --arch i386 squeeze /vz/private/777
ou
debootstrap --arch amd64 squeeze /vz/private/777
</pre>
Configuration de base du VE :
<pre>
vzctl set 777 --applyconfig basic --save
echo OSTEMPLATE=\"debian-6.0\" >> /etc/vz/conf/777.conf
</pre>
Attribuez l'ip <code>192.168.0.2</code> à votre VE puis nattez la :
<pre>
vzctl set 777 --ipadd 192.168.0.2 --save
iptables -t nat -A POSTROUTING -s 192.168.0.2 -o vmbr0 -j SNAT --to 91.121.141.220
vzctl set 777 --nameserver 192.168.0.1 --save
</pre>
Lancez votre VE et entrez y :
<pre>
vzctl start 777
vzctl enter 777
</pre>
Configurez les dépôts debian dans <code>/etc/apt/sources.list</code>
<pre>
deb http://ftp.fr.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
#anciennement debian-volatile
deb http://ftp.fr.debian.org/debian squeeze-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze-updates main contrib non-free
</pre>
<pre>
aptitude update
aptitude safe-upgrade
</pre>
<pre>
aptitude install locate bzip2 locales
dpkg-reconfigure locales
</pre>
<pre>
chmod 700 /root
dpkg-reconfigure tzdata
</pre>
/root/.bashrc :
<pre>
umask 027
export LS_OPTIONS='--color=auto --group-directories-first'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
</pre>
Vous pouvez faire de même pour /etc/skel/.profile et /etc/skel/.bashrc (umask, couleurs, ...)
Désactiver  getty (absent sur les VEs) :
<pre>sed -i -e '/getty/d' /etc/inittab</pre>
Améliorer les IO en évitant de spliter les fichiers de logs :
<pre>sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/*syslog.conf</pre>
Faites un lien virtuel entre /etc/mtab et /proc/mounts
<pre>
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab
</pre>
Supprimez les paquets inutiles :
<pre>
aptitude purge isc-dhcp-common isc-dhcp-client module-init-tools
</pre>
Vous pouvez voir la liste des paquets installés avec
<pre>
aptitude search '~i'
</pre>
Installez ssh :
<pre>aptitude install openssh-server</pre>
Générez automatiquement une nouvelle clé ssh au premier boot (sécurité) :
<pre>
rm -f /etc/ssh/ssh_host_*
cat << EOF > /etc/init.d/ssh_gen_host_keys
#!/bin/sh
### BEGIN INIT INFO
# Provides:          Generates new ssh host keys on first boot
# Required-Start:    $remote_fs $syslog
# Required-Stop:    $remote_fs $syslog
# Default-Start:    2 3 4 5
# Default-Stop:
# Short-Description: Generates new ssh host keys on first boot
# Description:      Generates new ssh host keys on first boot
### END INIT INFO
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ''
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
insserv -r /etc/init.d/ssh_gen_host_keys
rm -f \$0
EOF
</pre>
<pre>
chmod a+x /etc/init.d/ssh_gen_host_keys
insserv /etc/init.d/ssh_gen_host_keys
</pre>
Nettoyez votre liste de paquets :
<pre>aptitude clean</pre>
Quittez le VE :
<pre>exit</pre>
==finalisation==
Supprimez l'ip de votre VE
<pre> vzctl set 777 --ipdel all --save</pre>
Videz le fichier resolv.conf et le fichier hostname (ils seront créés automatiquement pour chaque VE)
<pre>echo "" > /vz/private/777/etc/resolv.conf
rm -f /vz/private/777/etc/hostname
</pre>
<pre>
vzctl stop 777
</pre>
<pre>
cd /vz/private/777
tar --numeric-owner -zcf /vz/template/cache/debian-6.0-minimal_1.0_amd64.tar.gz .
ls -lh /vz/template/cache
</pre>
Attention à respecter la convention de nommage des templates pour qu'elles soient détectés par proxmox : <code><OS>-<OSVERSION>-<NAME>_<VERSION>_<ARCH>.tar.gz</code>.
==test du template==
<pre>
vzctl create 123456 --ostemplate debian-6.0-minimal_1.0_amd64
vzctl start 123456
vzctl exec 123456 ps ax
</pre>
==Nettoyage==
<pre>
vzctl stop 123456
vzctl destroy 123456
rm /etc/vz/conf/123456.conf.destroyed
vzctl destroy 777
rm /etc/vz/conf/777.conf.destroyed
</pre>
=Créer son template Ubuntu 11.04=
<pre>
aptitude install debootstrap
wget http://wiki.csnu.org/images/2/2c/Natty.txt
mv Natty.txt natty
debootstrap --arch=amd64 natty /vz/private/777 http://fr.archive.ubuntu.com/ubuntu /root/debootstrap/natty
</pre>
Si vous avez une erreur, désinstallez la version debian de debootstrap, récupérez celle de ubuntu sur http://packages.ubuntu.com/natty/all/debootstrap et installez la avec dpkg :
<pre>
rm -rf /vz/private/777/
aptitude remove debootstrap
wget http://de.archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.29ubuntu1_all.de
dpkg -i debootstrap_1.0.29ubuntu1_all.deb
debootstrap --arch=amd64 natty /vz/private/777
dpkg -r debootstrap
</pre>
Créez le fichier <code>/vz/private/777/etc/init/openvz.conf</code> afin de fixer la séquence de boot de ubuntu pour openvz et ajoutez y le contenu suivant :
<pre>
# OpenVZ - Fix init sequence to have OpenVZ working with upstart
description "Fix OpenVZ"
start on startup
task
pre-start script
mount -t devpts devpts /dev/pts
mount -t tmpfs varrun /var/run
mount -t tmpfs varlock /var/lock
mkdir -p /var/run/network
if [ ! -e /etc/mtab ]; then
cat /proc/mounts > /etc/mtab
fi
touch /var/run/utmp
chmod 664 /var/run/utmp
chown root.utmp /var/run/utmp
if [ "$(find /etc/network/ -name upstart -type f)" ]; then
chmod -x /etc/network/*/upstart || true
fi
end script
script
start networking
initctl emit filesystem --no-wait
initctl emit local-filesystems --no-wait
initctl emit virtual-filesystems --no-wait
init 2
end script
</pre>
Configuration de base du VE :
<pre>
vzctl set 777 --applyconfig basic --save
echo OSTEMPLATE=\"ubuntu-11.04\" >> /etc/vz/conf/777.conf
vzctl set 777 --ipadd 192.168.0.2 --save
iptables -t nat -A POSTROUTING -s 192.168.0.2 -o vmbr0 -j SNAT --to 91.121.141.220
vzctl set 777 --nameserver 192.168.0.1 --save
</pre>
Lancez le VE et entrez y :
<pre>
vzctl start 777
vzctl enter 777
</pre>
Commencez par mettre à jour la liste des paquets puis installez l'éditeur texte <code>nano</code> si vous n'êtes pas fan de <code>vi</code> qui lui est installé par défaut, ainsi qu'aptitude :
<pre>
apt-get update
apt-get install aptitude nano
</pre>
Configurez les dépôts debian dans <code>/etc/apt/sources.list</code> :
<pre>
deb http://fr.archive.ubuntu.com/ubuntu/ natty main restricted universe multiverse
deb-src http://fr.archive.ubuntu.com/ubuntu/ natty main restricted universe multiverse
deb http://fr.archive.ubuntu.com/ubuntu/ natty-updates main restricted universe multiverse
deb-src http://fr.archive.ubuntu.com/ubuntu/ natty-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu natty-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu natty-security main restricted universe multiverse
#deb http://extras.ubuntu.com/ubuntu natty main
#deb-src http://extras.ubuntu.com/ubuntu natty main
</pre>
Empêchez le lancement des services inutiles :
<pre>
update-rc.d -f ondemand remove
</pre>
Vous pouvez supprimer directement les scripts d'inits inutiles :
<pre>
rm /etc/init/mountall-shell.conf
rm -f /etc/init/mount*
rm -f /etc/init/plymouth*
rm -f /etc/init/upstart*
rm -f /etc/init/udev*
</pre>
Mettez à jour vos paquets :
<pre>
aptitude update
aptitude safe-upgrade
</pre>
Supprimez les paquets inutiles :
<pre>
aptitude purge ubuntu-minimal eject isc-dhcp-client isc-dhcp-common ntpdate console-setup kbd
</pre>
Vous pouvez voir la liste des paquets installés avec
<pre>
aptitude search '~i'
</pre>
Remplacez rsyslog par sysklogd :
<pre>
aptitude purge rsyslog
aptitude install sysklogd
</pre>
Sécurisez votre environnement root :
<pre>
chmod 700 /root
</pre>
Configurez le fuseau horaire et générez les locales françaises :
<pre>
dpkg-reconfigure tzdata
locale-gen fr_FR.UTF-8
aptitude install language-pack-fr
echo "LANG=\"fr_FR.UTF-8\"" > /etc/default/locale
chmod o+r /etc/default/locale
</pre>
Editez <code>/root/.bashrc</code> afin de personnaliser votre le shell de votre utilisateur root :
<pre>
umask 027
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto --group-directories-first'
    alias dir='dir --color=auto'
    alias vdir='vdir --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi
</pre>
Vous pouvez faire de même dans <code>/etc/skel/.profile</code> et <code>/etc/skel/.bashrc</code> (umask, couleurs, ...) pour les futurs utilisateurs du VE.
Désactivez getty (inutile sur les VEs) :
<pre>
initctl stop tty1
initctl stop tty2
initctl stop tty3
initctl stop tty4
initctl stop tty5
initctl stop tty6
rm -f /etc/init/tty*
</pre>
Améliorez les IO en évitant de spliter les fichiers de logs :
<pre>
sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/*syslog.conf
</pre>
Faites un lien virtuel entre <code>/etc/mtab</code> et <code>/proc/mounts</code>
<pre>
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab
update-rc.d -f mtab.sh remove
</pre>
Installez ssh :
<pre>
aptitude install openssh-server locate
</pre>
Générez automatiquement une nouvelle clé ssh au premier boot (sécurité) :
<pre>
rm -f /etc/ssh/ssh_host_*
cat << EOF > /etc/rc2.d/S15ssh_gen_host_keys
#!/bin/sh
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ''
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -t ecdsa -N ''
rm -f \$0
EOF
chmod a+x /etc/rc2.d/S15ssh_gen_host_keys
</pre>
Nettoyez votre liste de paquets :
<pre>aptitude clean</pre>
Quittez le VE :
<pre>exit</pre>
==finalisation==
Supprimez l'ip de votre VE :
<pre>vzctl set 777 --ipdel all --save</pre>
Videz le fichier resolv.conf et le fichier hostname (ils seront créés automatiquement par proxmox pour chaque VE issu de ce template).
<pre>
echo "" > /vz/private/777/etc/resolv.conf
rm -f /vz/private/777/etc/hostname
</pre>
Stoppez la VE:
<pre>vzctl stop 777</pre>
<pre>
cd /vz/private/777
tar --numeric-owner -zcf /vz/template/cache/ubuntu-11.04-minimal_1.0_amd64.tar.gz .
</pre>
Attention à respecter la convention de nommage des templates pour qu'elles soient détectés par proxmox : <pre><OS>-<OSVERSION>-<NAME>_<VERSION>_<ARCH>.tar.gz.</pre>
==test du template==
<pre>
vzctl create 123456 --ostemplate ubuntu-11.04-minimal_1.0_amd64
vzctl start 123456
vzctl exec 123456 ps ax
</pre>
==Nettoyage==
<pre>
vzctl stop 123456
vzctl destroy 123456
rm /etc/vz/conf/123456.conf.destroyed
vzctl destroy 777
rm /etc/vz/conf/777.conf.destroyed
</pre>
=Créer son template Archlinux 2010.05=
==Prérequis==
Si vous souhaitez utiliser des VEs archlinux en veth, vous constaterez rapidement qu'openvz ajoutera forcément une interface venet0 malgré que vous n'ayez configuré aucune ip venet sur votre VE. Voici une version légèrement modifiée du script d'ajout d'ip pour archlinux que vous pouvez utiliser pour régler ce problème :
<pre>
wget http://wiki.csnu.org/images/5/50/Arch-add_ip.sh
mv /etc/vz/dists/scripts/arch-add_ip.sh /etc/vz/dists/scripts/arch-add_ip.sh.bak
mv Arch-add_ip.sh /etc/vz/dists/scripts/arch-add_ip.sh
</pre>
==installation==
Commencez par ajouter les dépôts backports de debian lenny, puis installez le paquet <code>xz-utils</code> :
<pre>
echo "deb http://backports.debian.org/debian-backports lenny-backports main" >> /etc/apt/sources.list
aptitude update
aptitude install xz-utils
</pre>
Vous trouverez un script <code>archbootstrap</code> similaire à <code>debootstrap</code> sur [https://wiki.archlinux.org/index.php/Archbootstrap| le wiki de archlinux.]
<pre>
wget http://tokland.googlecode.com/svn/trunk/archlinux/arch-bootstrap.sh
</pre>
Lancez le script. La syntaxe est <code>./arch-bootstrap.sh destination architecture</code>. Les architectures possibles sont i686 (32bits) et x86_64 (64bits).
<pre>
chmod +x arch-bootstrap.sh
./arch-bootstrap.sh /vz/private/777 x86_64
</pre>
Nous allons maintenant installer quelques paquets nécessaires avant d'initialiser le VE :
<pre>
chroot /vz/private/777
pacman -S sed initscripts net-tools iputils nano iproute gzip
exit
</pre>
Appliquez une configuration de base à votre VE :
<pre>
vzctl set 777 --applyconfig basic --save
echo OSTEMPLATE=\"arch\" >> /etc/vz/conf/777.conf
</pre>
Attribuez lui une adresse ip locale, puis nattez cette ip afin de permettre à la VE d'accéder à internet :
<pre>
vzctl set 777 --ipadd 192.168.0.10 --save
iptables -t nat -A POSTROUTING -s 192.168.0.10 -o vmbr0 -j SNAT --to 91.121.141.220
</pre>
Biens sur, définissez le serveur dns :
<pre>
vzctl set 777 --nameserver 192.168.0.1 --save
</pre>
Lancez votre VE puis entrez y :
<pre>
vzctl start 777
vzctl enter 777
</pre>
Commencez par dé-commenter les miroirs français de <code>/etc/pacman.d/mirrorlist</code> :
<pre>
## France
Server = http://mir.archlinux.fr/$repo/os/$arch
Server = ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/archlinux/$repo/os/$arch
Server = http://distrib-coffee.ipsl.jussieu.fr/pub/linux/archlinux/$repo/os/$arch
Server = ftp://mir1.archlinux.fr/archlinux/$repo/os/$arch
Server = http://mir1.archlinux.fr/archlinux/$repo/os/$arch
Server = ftp://archlinux.mirrors.ovh.net/archlinux/$repo/os/$arch
Server = http://archlinux.mirrors.ovh.net/archlinux/$repo/os/$arch
Server = ftp://ftp.rez-gif.supelec.fr/Linux/archlinux/$repo/os/$arch
</pre>
Vous pouvez ensuite mettre à jour pacman :
<pre>
pacman -Suy
</pre>
Puis installez les paquets manquants :
<pre>
pacman -S procps dnsutils mlocate
</pre>
Sécurisez votre root :
<pre>chmod 700 /root</pre>
Créez le fichier <code>/root/.bashrc</code> :
<pre>
#
# ~/.bashrc
#
umask 0027
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias ls='ls --color=auto --group-directories-first'
#PS1='[\u@\h \W]\$ '
</pre>
Créez le fichier <code>/root/.profile</code> :
<pre>
# ~/.profile: executed by Bourne-compatible login shells.
if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi
mesg n
</pre>
Vous pouvez éditer <code>/etc/skel/.bashrc</code> (umask, couleurs, ...) afin de définir des paramètres par défaut pour vos futurs utilisateurs.
Éditez le fichier <code>/etc/locale.gen</code> et dé-commentez les locales fr_FR.
<pre>
fr_FR ISO-8859-1
fr_FR.UTF-8 UTF-8
fr_FR@euro ISO-8859-15
</pre>
Lancez ensuite <code>locale-gen</code> pour générer les locales :
<pre>
locale-gen
</pre>
Créez un lien entre /proc/mounts et /etc/mtab, supprimez les getty :
<pre>
rm /etc/mtab
ln -s /proc/mounts /etc/mtab
sed -i -e '/getty/d' /etc/inittab
</pre>
Installez openssh et autorisez l'accès de l'extérieur :
<pre>
pacman -S openssh
echo "sshd: ALL : ALLOW" >> /etc/hosts.allow
echo "nobody:x:99:99:nobody:/:/sbin/nologin" >> /etc/passwd
</pre>
Ne lancez sous aucun prétexte ssh maintenant ! En effet, le script de lancement de archlinux se chargera de générer les clés ssh au premier lancement. Pour s'assurer que chaque VE ait ses propres clés, il ne faut pas lancer ssh lors de la création du template.
==/etc/rc.conf==
<pre>
LOCALE="fr_FR.UTF-8"
DAEMON_LOCALE="no"
HARDWARECLOCK="localtime"
TIMEZONE="Europe/Paris"
KEYMAP="fr"
</pre>
<pre>
DAEMONS=(hwclock syslog-ng network netfs crond sshd)
</pre>
Quittez votre VE :
<pre>
exit
</pre>
==finalisation==
Supprimez l'ip de votre VE :
<pre>
vzctl set 777 --ipdel all --save
</pre>
Créez un fichier d'exclusion contenant les différents fichiers et dossiers qui ne devront pas se retrouver dans le template définitif :
<pre>
cd /vz/private/777/
echo "etc/resolv.conf" >> ../exclude.list
echo "etc/hostname" >> ../exclude.list
find ./var/cache/ -name '*.tar.gz' >> ../exclude.list
find ./root/.bash_history >> ../exclude.list
</pre>
Stoppez le VE :
<pre>
vzctl stop 777
</pre>
Supprimez les lignes suivantes du fichier <code>/vz/private/777/etc/rc.conf</code> :
<pre>
lo="lo 127.0.0.1"
INTERFACES=(  "lo"  "venet0"  )
venet0="venet0 127.0.0.1 netmask 255.255.255.255 broadcast 0.0.0.0"
rt_venet0="-net 191.255.255.1 netmask 255.255.255.255 dev venet0"
rt_default="default gw 191.255.255.1"
ROUTES=(  "rt_venet0"  "rt_default" )
</pre>
créez l'archive du template :
<pre>
tar --numeric-owner -X ../exclude.list -czf /vz/template/cache/arch-2010.05-minimal_1.0_amd64.tar.gz ./
rm ../exclude.list
</pre>
Attention à respecter la convention de nommage des templates pour qu'elles soient détectés par proxmox : <code><OS>-<OSVERSION>-<NAME>_<VERSION>_<ARCH>.tar.gz</code>.
==test du template==
<pre>
vzctl create 123456 --ostemplate arch-2010.05-minimal_1.0_amd64
vzctl start 123456
vzctl exec 123456 ps ax
</pre>
==Nettoyage==
<pre>
vzctl stop 123456
vzctl destroy 123456
rm /etc/vz/conf/123456.conf.destroyed
vzctl destroy 777
rm /etc/vz/conf/777.conf.destroyed
</pre>


=Créer et configurer un VE Debian 6.0=
=Créer et configurer un VE Debian 6.0=
==Généralités==
<div id="debian_gene"></div>


Connectez vous à votre interface proxmox. Cliquez sur <code>Virtual Machines</code> puis sur <code>Create</code>.
Connectez vous à votre interface proxmox. Cliquez sur <code>Virtual Machines</code> puis sur <code>Create</code>.
Ligne 277 : Ligne 1 082 :


Si vous choisissez veth, veillez à bien entrer l'adresse MAC virtuelle fournit par la console de votre provider.
Si vous choisissez veth, veillez à bien entrer l'adresse MAC virtuelle fournit par la console de votre provider.
De plus, si vous avez suivi ce wiki, selectionnez <code>vmbr0</code> à la ligne <code>brdige</code>.
De plus, si vous avez suivi ce wiki, selectionnez <code>vmbr0</code> à la ligne <code>bridge</code>.


Cliquez enfin sur <code>create</code> afin de lancer la génération du VE. Attendez quelques dizaines de secondes puis retournez à la liste des VMs.
Cliquez enfin sur <code>create</code> afin de lancer la génération du VE. Attendez quelques dizaines de secondes puis retournez à la liste des VEs.
Cliquez sur la VM fraîchement créée, localisez le bouton <code>Start</code> et cliquez dessus. Votre VM démarre, reste à la configurer.
Cliquez sur la VE fraîchement créée, localisez le bouton <code>Start</code> et cliquez dessus. Votre VE démarre, reste à le configurer.


==Configuration réseau en veth==
==Configuration réseau en veth==
Ligne 286 : Ligne 1 091 :
Connectez vous en ssh sur l'host en utilisateur root puis entrez :
Connectez vous en ssh sur l'host en utilisateur root puis entrez :
<pre>vzctl enter 101</pre>
<pre>vzctl enter 101</pre>
<code>101</code> est le numéro de votre VM (VMID) disponible dans le status de la VM sur l'interface web de proxmox.
<code>101</code> est le numéro de votre VE (VMID) disponible dans le status de la VE sur l'interface web de proxmox.
Éditez le fichier <code>/etc/network/interfaces</code> comme suit :
Éditez le fichier <code>/etc/network/interfaces</code> comme suit :
<pre>
<pre>
Ligne 298 : Ligne 1 103 :
         up route add -host <gateway> dev eth0
         up route add -host <gateway> dev eth0
         up route add default gw <gateway>
         up route add default gw <gateway>
        post-up ifconfig eth0 inet6 add <ipv6>
        pre-down ifconfig eth0 inet6 del <ipv6>
</pre>
</pre>


Ligne 309 : Ligne 1 116 :
Attention, si vous n'avez pas de serveur dns installé, vous ne pourrez pas résoudre les dns et il vous faudra essayer de pinger internet directement via l'ip !
Attention, si vous n'avez pas de serveur dns installé, vous ne pourrez pas résoudre les dns et il vous faudra essayer de pinger internet directement via l'ip !


Pour resortir de votre VM, tapez
Pour resortir de votre VE, tapez
<pre>exit</pre>
<pre>exit</pre>


===Ajouter une interface réseau virtuelle locale===
===Ajouter une interface réseau virtuelle locale===


Comme vous avez pu le voir, j'ai créé sur l'host une interface <code>vmbr1</code> bridgé sur dummy0. Ceci est parfait pour créer un réseau interne pour ses VMs. Il ne reste plus qu'à ajouter une interface réseau virtuelle sur chaque VM.
Comme vous avez pu le voir, j'ai créé sur l'host une interface <code>vmbr1</code> bridgé sur dummy0. Ceci est parfait pour créer un réseau interne pour ses VEs. Il ne reste plus qu'à ajouter une interface réseau virtuelle sur chaque VE.
L'intérêt principal d'un réseau interne pour vos VMs est d'offrir un débit bien supérieur à celui du bridge sur l'interface principale.
L'intérêt principal d'un réseau interne pour vos VEs est d'offrir un débit bien supérieur à celui du bridge sur l'interface principale.


Sur l'host, utilisez <code>vzctl</code> pour créer une nouvelle interface réseau virtuelle :
Sur l'host, utilisez <code>vzctl</code> pour créer une nouvelle interface réseau virtuelle :
Ligne 325 : Ligne 1 132 :
<pre>vzctl set <VMID> --netif_del eth<N> --save</pre>
<pre>vzctl set <VMID> --netif_del eth<N> --save</pre>


Ensuite, il ne vous reste plus qu'à configurer l'interface sur votre VM. Editez le fichier <code>/etc/network/interfaces</code> et ajoutez y :
Ensuite, il ne vous reste plus qu'à configurer l'interface sur votre VE. Editez le fichier <code>/etc/network/interfaces</code> et ajoutez y :
<pre>
<pre>
auto eth1
auto eth1
Ligne 333 : Ligne 1 140 :
</pre>
</pre>


Redémarrez votre VM. Vous pouvez désormais pinguer 192.168.0.1, qui est l'adresse ip locale de votre host.
Redémarrez votre VE. Vous pouvez désormais pinguer 192.168.0.1, qui est l'adresse ip locale de votre host.


Vous pouvez utiliser <code>iperf</code> pour tester le débit entre deux VMs.
Vous pouvez utiliser <code>iperf</code> pour tester le débit entre deux VEs.
Sur une VM lancez iperf en mode serveur :  
Sur une VE lancez iperf en mode serveur :  
<pre>iperf -s</pre>
<pre>iperf -s</pre>
Sur l'autre, lancez iperf en mode client :
Sur l'autre, lancez iperf en mode client :
Ligne 343 : Ligne 1 150 :
==Configuration réseau en venet==
==Configuration réseau en venet==


Nous allons supposer que vous avez défini l'adresse IP 192.168.0.1 à votre VM lors de sa création.
Nous allons supposer que vous avez défini l'adresse IP 192.168.0.2 à votre VE lors de sa création.


Sur l'host, tapez simplement :
Sur l'host, tapez simplement :
<pre>
<pre>
iptables -t nat -A POSTROUTING -s 192.168.0.1 -o vmbr0 -j SNAT --to 91.121.141.220
iptables -t nat -A POSTROUTING -s 192.168.0.2 -o vmbr0 -j SNAT --to 91.121.141.220
</pre>
</pre>


==Régénérer les clés ssh==
==Régénérer les clés ssh==
Si vous ne faites pas confiance dans le template que vous avez utilisé (ce qui commence mal ...), vous pouvez régénérer les clés host de ssh :
<pre>
<pre>
rm -f /etc/ssh/ssh_host_*
rm -f /etc/ssh/ssh_host_*
Ligne 356 : Ligne 1 165 :
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
</pre>
</pre>
Dans le doute, créez votre propre template =)
=Créer et configurer un VE Archlinux 2010.05=
==Généralités==
Reportez vous à la section sur la [[#debian_gene|création d'un VE Debian 6.0]]
==Configuration du réseau en veth==
Connectez vous en ssh sur l'host en utilisateur root puis entrez dans votre VE :
<pre>vzctl enter 101</pre>
<code>101</code> est le numéro de votre VE (VMID) disponible dans le status de la VE sur l'interface web de proxmox.
Créez le fichier <code>/etc/rc.d/openvz_net</code> contenant :
<pre>
#! /bin/bash
#echo 0 > /proc/sys/net/ipv6/conf/all/autoconf
ifconfig eth0 <ipfailover> netmask 255.255.255.255
ifconfig eth0 inet6 add ipv6failover/64
#route del default
route add -host 91.121.141.254 dev eth0
route add default gw 91.121.141.254
</pre>
Rendez ce fichier exécutable :
<pre>chmod +x /etc/rc.d/openvz_net</pre>
Modifiez ensuite la ligne <code>DAEMONS</code> du fichier <code>/etc/rc.conf</code> afin d'y ajouter <code>openvz_net</code> :
<pre>DAEMONS=(hwclock syslog-ng network openvz_net netfs crond sshd)</pre>
Pour resortir de votre VE, tapez :
<pre>exit</pre>
===Ajouter une interface réseau virtuelle locale===
Sur l'host, ajoutez l'interface virtuelle eth1 bridgé sur vmbr1 à votre VE :
<pre>vzctl set 101 --netif_add eth1,,,,vmbr1 --save</pre>
Ensuite, il ne vous reste plus qu'à configurer l'interface sur votre VE. Ajoutez la ligne suivante dans le fichier <code>/etc/rc.d/openvz_net</code> :
<pre>
ifconfig eth1 192.168.0.4 netmask 255.255.255.0
</pre>
Redémarrez votre VE. Vous pouvez désormais pinguer 192.168.0.1, qui est l'adresse ip locale de votre host.
==Configuration du réseau en veneth==
Nous allons supposer que vous avez défini l'adresse IP 192.168.0.4 à votre VE lors de sa création.
Sur l'host, tapez simplement :
<pre>
iptables -t nat -A POSTROUTING -s 192.168.0.4 -o vmbr0 -j SNAT --to 91.121.141.220
</pre>
=vzctl, modification des VEs en ligne de commande=
* Définir les serveurs DNS d'un VE :
<pre>vzctl set <VEID> --nameserver ip1 --nameserver ip2 --nameserver ip3 --searchdomain domain.tld --save</pre>
Vous pouvez ajouter autant de directive <code>--nameserver ip*</code> que vous le souhaitez.
Vous pouvez entrer des IPv6, mais elles ne seront pas affichés correctement dans le panel de gestion de proxmox.
=Protéger SSH dans un VE=
<pre>
aptitude purge module-init-tools
</pre>
Puis reportez vous à [[Protéger SSH avec sshguard]]


=Partager des fichiers d'un VE à un autre VE=
=Partager des fichiers d'un VE à un autre VE=


OpenVZ, de part son architecture, permet de partager des fichiers d'un VE à un autre très facilement. Pour cela, connectez vous en ssh à votre host et utilisez la commande <code>mount</code> :
OpenVZ, de part son architecture, permet de partager des fichiers d'un VE à un autre très facilement. Pour cela, connectez vous en ssh à votre host proxmox (pas à votre VE) et utilisez la commande <code>mount</code> :
<pre>
<pre>
mount --bind /vz/private/102/directory /vz/root/101/directory
mount --bind /vz/private/102/directory /vz/root/101/directory
Ligne 375 : Ligne 1 250 :
<pre>chmod +x /etc/vz/conf/101.mount</pre>
<pre>chmod +x /etc/vz/conf/101.mount</pre>


=Installer une interface graphique avec NX server sur une VM OpenVZ=
=Installer une interface graphique avec NX server sur un VE OpenVZ Debian/Ubuntu=


<pre>aptitude install xorg xdm</pre>
<pre>aptitude install xorg xdm</pre>
Ligne 422 : Ligne 1 297 :
Configurez l'hostname et le ort.
Configurez l'hostname et le ort.
Dans la section <code>Desktop</code>, selectionnez <code>Unix and custom</code>. Cliquez sur <code>Settings</code> et selectionnez <code>Run the default X client script on server</code> ainsi que <code>New virtual Desktop</code>
Dans la section <code>Desktop</code>, selectionnez <code>Unix and custom</code>. Cliquez sur <code>Settings</code> et selectionnez <code>Run the default X client script on server</code> ainsi que <code>New virtual Desktop</code>
Si ça ne fonctionne pas, essayez de forcer le lancement de <code>/usr/bin/xfce4-session</code> dans les settings de nx


S'il vous manque des icones après vous être logué, essayez d'installer le paquet <code>gnome-icon-theme</code> sur le serveur.
S'il vous manque des icones après vous être logué, essayez d'installer le paquet <code>gnome-icon-theme</code> sur le serveur.
==Configuration de OpenNX==
OpenNX est une alternative libre au client nx de nomachine.
Vous trouverez les informations de téléchargement et d'installation pour différents OS et distributions linux sur http://opennx.net/.
La configuration est la même que celle du NX Client de nomachine, et il est compatible avec les fichiers de configuration de NXclient.
Attention cependant : il semble mal supporter les ipv6. Veillez donc a :
* utiliser une adresse ipv4 uniquement dans la session de connexion
* ne pas faire écouter votre serveur ssh sur l'adresse ipv6 ::1
==Utiliser VNC en plus de NX==
Sous gnome / xfce installez vino :
<pre>aptitude install vino</pre>
Changez les préférences avec <code>vino-preferences</code>
Lancez le serveur vino :
<pre>/usr/lib/vino/vino-server</pre>
=Installer une interface graphique avec NX server sur un VE OpenVZ Archlinux=
<pre>pacman -S xfce4</pre>
Téléchargez NX Free Edition client, node et server sur http://www.nomachine.com/select-package.php?os=linux&id=1
<pre>
mv nx*.tar.gz /usr
cd /usr
tar zxvf nxclient-3.5.0-6.x86_64.tar.gz
tar zxvf nxnode-3.5.0-3.x86_64.tar.gz
tar zxvf nxserver-3.5.0-4.x86_64.tar.gz
mkdir /etc/init.d
/usr/NX/scripts/setup/nxnode --install suse
/usr/NX/scripts/setup/nxserver --install suse
mv /etc/init.d/* /etc/rc.d/
</pre>
<pre>
/etc/rc.d/nxserver start
</pre>
=issue=
==Erreurs du type <code>IPv6 addrconf: prefix with wrong length 56</code> ==
Cette erreur est typique sous linux si les routeurs de votre serveur annoncent des blocs IPv6 /56 alors que vous configurez des /64.
Ajouter les lignes suivantes dans votre fichier <code>/etc/sysctl.conf</code> :
<pre>
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.lo.autoconf = 0
net.ipv6.conf.eth0.autoconf = 0
net.ipv6.conf.vmbr0.autoconf = 0
net.ipv6.conf.vmbr1.autoconf = 0
net.ipv6.conf.dummy0.autoconf = 0
net.ipv6.conf.venet0.autoconf = 0
</pre>
De plus, si vous configurez vos VEs en veth, vous devrez :
* Ajouter une ligne similaire aux précédentes pour chaque interface réseau du VE dans le fichier <code>/etc/sysctl.conf</code> du VE. Typiquement :
<pre>
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.lo.autoconf = 0
net.ipv6.conf.eth0.autoconf = 0
net.ipv6.conf.eth1.autoconf = 0
</pre>
* Ajouter une ligne similaire aux précédentes pour chaque interface réseau virtuelle veth sur l'host (net.ipv6.conf.vethXXX/Y.autoconf où XXX est le VEID est Y un numéro d'interface).
Pour repérer facilement les lignes à ajouter, utiliser <code>sysctl -a</code> et <code>grep</code> :
<pre>sysctl -a | grep net.ipv6.conf.*.autoconf</pre>
==Cacher les processus des VEs sur l'host==
<pre>sysctl kernel.pid_ns_hide_child=1</pre>
4 231

modifications

Menu de navigation