« Proxmox et OpenVZ » : différence entre les versions
Aucun résumé des modifications |
|||
(174 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 107 : | Ligne 110 : | ||
mount -o bind /dev /mnt/dev | mount -o bind /dev /mnt/dev | ||
mount -o bind /sys /mnt/sys | mount -o bind /sys /mnt/sys | ||
mount /dev/pve/data /mnt/var/lib/vz | |||
chroot /mnt | chroot /mnt | ||
</pre> | </pre> | ||
Ligne 167 : | Ligne 171 : | ||
aptitude install openssh-server | aptitude install openssh-server | ||
passwd | passwd | ||
</pre> | |||
Editez le fichier <code>/etc/fstab</code> : | |||
<pre> | |||
/dev/sda1 / ext3 errors=remount-ro 0 1 | |||
/dev/sda2 swap swap defaults 0 0 | |||
/dev/pve/data /var/lib/vz ext3 defaults 1 2 | |||
proc /proc proc defaults 0 0 | |||
sysfs /sys sysfs defaults 0 0 | |||
</pre> | |||
<pre> | |||
echo proxmox.domain.tld > /etc/hostname | |||
echo proxmox.domain.tld > /etc/mailname | |||
</pre> | </pre> | ||
Ligne 173 : | 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 212 : | 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é | 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 | openssl ca -name proxmox_ca -extensions PROXMOX -in proxmox.req -out proxmox.pem | ||
</pre> | </pre> | ||
Ligne 226 : | 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/ | cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/proxmox_ca/proxmox_ca.pem > /etc/apache2/ssl/cachain.pem | ||
</pre> | </pre> | ||
Ligne 244 : | 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 250 : | 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 263 : | 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> | 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 | 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 | 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 272 : | 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 | <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 284 : | 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 295 : | 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 | 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 | 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 | 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 311 : | 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 | 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 319 : | Ligne 1 140 : | ||
</pre> | </pre> | ||
Redémarrez votre | 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 | Vous pouvez utiliser <code>iperf</code> pour tester le débit entre deux VEs. | ||
Sur une | 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 329 : | 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. | 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. | 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 342 : | 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 361 : | 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 | =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 376 : | Ligne 1 265 : | ||
</pre> | </pre> | ||
=Configuration de X= | ==Configuration de X== | ||
Dans <code>/etc/X11/xdm/xdm-config<code>, commentez la ligne <code>DisplayManager.requestPort: 0</code> | Dans <code>/etc/X11/xdm/xdm-config</code>, commentez la ligne <code>DisplayManager.requestPort: 0</code> | ||
Dans <code>/etc/X11/xdm/Xservers</code>, commentez la ligne <code>:0 local /usr/bin/X :0 vt7</code> | Dans <code>/etc/X11/xdm/Xservers</code>, commentez la ligne <code>:0 local /usr/bin/X :0 vt7</code> | ||
Dans <code>/etc/X11/xdm/Xaccess</code>, décommentez la ligne <code>* #any host can get a login window</code> (Please keep in mind the security implications by the above line. Read the comments found in the file and set it appropriately) | Dans <code>/etc/X11/xdm/Xaccess</code>, décommentez la ligne <code>* #any host can get a login window</code> (Please keep in mind the security implications by the above line. Read the comments found in the file and set it appropriately) | ||
==Configuration de NX Server== | |||
Éditez <code>/etc/X11/xorg.conf</code> : | |||
<pre> | |||
Section "Files" | |||
# path to defoma fonts | |||
FontPath "/usr/share/fonts/X11/misc" | |||
FontPath "/usr/share/fonts/X11/100dpi/:unscaled" | |||
FontPath "/usr/share/fonts/X11/75dpi/:unscaled" | |||
FontPath "/usr/share/fonts/X11/Type1" | |||
FontPath "/usr/share/fonts/X11/100dpi" | |||
FontPath "/usr/share/fonts/X11/75dpi" | |||
EndSection | |||
</pre> | |||
Enfin, créez un utilisateur afin de ne pas avoir à vous connecter en root. | |||
==Configuration de NX Client== | |||
A faire sur votre machine. | |||
Téléchargez et installez http://www.nomachine.com/download-client-linux.php | |||
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> | |||
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. | |||
==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> |
Dernière version du 16 mai 2015 à 11:49
- Cette page n'est plus maintenue, les informations contenues ici sont potentiellement obsolètes *
Partitionnement du disque dur
Pour commencer, partitionnez votre disque. Faites une partition / de 15Go, un swap, et enfin, une partition LVM2 avec l'espace restant.
Créez les systèmes de fichiers pour les partitions / et swap :
mkswap /dev/sda2 mkfs.ext3 /dev/sda1
Nous allons maintenant créer notre architecture LVM puis le système de fichier de la dernière partition.
Pour commencer, créez le volume physique :
$ pvcreate /dev/sda3 Physical volume "/dev/sda3" successfully created
Créez ensuite le groupe pve
:
$ vgcreate pve /dev/sda3 Volume group "pve" successfully created
Vous pouvez vérifier les informations du groupe avec la commande vgdisplay
:
$ vgdisplay -v pve Using volume group(s) on command line Finding volume group "pve" --- Volume group --- VG Name pve System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 215.09 GB PE Size 4.00 MB Total PE 55064 Alloc PE / Size 0 / 0 Free PE / Size 55064 / 215.09 GB VG UUID AenAEU-jdG2-RUh1-4khe-R990-MInR-cdRIe0 --- Physical volumes --- PV Name /dev/sda3 PV UUID CsIxAk-xa18-1W2q-jm1Y-fVqg-VSnW-KMaXvx PV Status allocatable Total PE / Free PE 55064 / 55064
Nous pouvons maintenant créer le volume logique data
dans le groupe pve
.
Notez que la commande vgdisplay nous a permit d'identifier la dimension du volume (Total PE
) que nous préciseront via l'argument -l
:
$ lvcreate -l55064 -n data pve Logical volume "data" created
Vous pouvez vérifier les informations du volume avec la commande lvdisplay
:
$ lvdisplay -v /dev/pve/data Using logical volume(s) on command line --- Logical volume --- LV Name /dev/pve/data VG Name pve LV UUID KlFCb8-yE7K-NYCN-RNnN-LEV3-maIw-mDtZZq LV Write Access read/write LV Status available # open 0 LV Size 215.09 GB Current LE 55064 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
Enfin, créez le système de fichier dans votre volume logique :
mkfs.ext3 /dev/pve/data
Installation du système de base
$ mount /dev/sda1 /mnt $ debootstrap --arch=amd64 lenny /mnt ... I: Base system installed successfully.
Configuration de debian et installation de proxmox
Afin d'avoir accès au réseau et au matériel, montez /proc, /dev et /sys dans votre nouveau système puis chrootez y:
mount -o bind /proc /mnt/proc mount -o bind /dev /mnt/dev mount -o bind /sys /mnt/sys mount /dev/pve/data /mnt/var/lib/vz chroot /mnt
Modifiez le fichier sysctl.conf
afin de permettre le forwarding ipv4 :
net.ipv4.ip_forward=1
Mettez les paquets à jour, puis installez les locales :
aptitude update aptitude safe-upgrade aptitude install locales dpkg-reconfigure locales aptitude install console-data dpkg-reconfigure console-data # from arch > french > latin9)
Ajoutez le dépot proxmox dans le fichier /etc/apt/source.list
:
# PVE packages provided by proxmox.com deb ftp://download.proxmox.com/debian lenny pve
Ajoutez la clé du dépôt proxmox :
wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add - aptitude update
Pour profiter d'openVZ
, installez le kernel 2.6.32* :
aptitude install pve-kernel-2.6.32-4-pve
Si vous n'aviez pas grub d'installé :
mkdir /boot/grub grub-install /dev/sda
Créez et configurez le fichier /boot/grub/menu.lst
. Il devrait ressembler à ceci :
timeout 10 default 0 title proxmox root (hd0,0) kernel /boot/vmlinuz-2.6.32-4-pve root=/dev/sda1 read-only initrd /boot/initrd.img-2.6.32-4-pve
Installez les headers du kernel (optionnel) :
aptitude install pve-headers-2.6.32-4-pve
Mettez votre serveur sur la bonne timezone :
tzselect dpkg-reconfigure tzdata
Pensez à installer openssh puis à modifier le password root
aptitude install openssh-server passwd
Editez le fichier /etc/fstab
:
/dev/sda1 / ext3 errors=remount-ro 0 1 /dev/sda2 swap swap defaults 0 0 /dev/pve/data /var/lib/vz ext3 defaults 1 2 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0
echo proxmox.domain.tld > /etc/hostname echo proxmox.domain.tld > /etc/mailname
Enfin, installez ntp, lvm2 ainsi que l'interface de proxmox :
aptitude install proxmox-ve-2.6.32 ntp lvm2
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 :
ln -s /var/lib/vz /vz
Configuration réseau de proxmox
Ajoutez les lignes suivantes dans le fichier /etc/network/interfaces
:
# network interface settings auto lo iface lo inet loopback iface eth0 inet manual auto vmbr0 iface vmbr0 inet static address 91.121.141.220 netmask 255.255.255.0 gateway 91.121.141.254 broadcast 91.121.141.255 bridge_ports eth0 bridge_stp off bridge_fd 0 network 91.121.141.0 post-up ifconfig vmbr0 inet6 add 2001:41d0:1:bcdc::220/64 pre-down ifconfig vmbr0 inet6 del 2001:41d0:1:bcdc::220/64 auto vmbr1 iface vmbr1 inet static address 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 bridge_ports dummy0 bridge_stp off bridge_fd 0 post-up /etc/pve/kvm-networking.sh
Reboot et post-installation
Rebootez votre serveur
reboot
Créez un utilisateur :
adduser pfoo
Puis sécurisez ssh :
- désactivez le login root (directive
PermitRootLogin no
dans/etc/ssh/sshd_config
) - ajoutez la directive
allowusers pfoo
dans/etc/ssh/sshd_config
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. Dans l'exemple suivant, je créé un certificat proxmox et le signe avec l'autorité proxmox_ca :
openssl req -newkey rsa:2048 -keyout proxmox.key -out proxmox.req openssl ca -name proxmox_ca -extensions PROXMOX -in proxmox.req -out proxmox.pem
mkdir /etc/apache2/ssl/ mv proxmox.* /etc/apache2/ssl/ cat /etc/ssl/root_ca/root_ca.pem /etc/ssl/proxmox_ca/proxmox_ca.pem > /etc/apache2/ssl/cachain.pem
Modifiez le fichier /etc/apache2/sites-enabled/pve.conf
comme suit :
<VirtualHost *:443> SSLEngine on SSLProtocol all -SSLv2 #SSLCertificateFile /etc/pve/pve-ssl.pem #SSLCertificateKeyFile /etc/pve/pve-ssl.key SSLCertificateFile /etc/apache2/ssl/proxmox.pem SSLCertificateKeyFile /etc/apache2/ssl/proxmox.key SSLCertificateChainFile /etc/apache2/ssl/cachain.pem RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] </VirtualHost>
Installer un serveur dns pour ses VEs
Commencez par installer le serveur bind9 :
aptitude install bind9 bind9-host dnsutils
Éditez le fichier /etc/bind/named.conf.options
et ajoutez y les lignes suivantes :
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;
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 /etc/resolv.conf
:
nameserver ::1 nameserver 127.0.0.1 nameserver 192.168.0.1 nameserver 2001:41d0:1:bcdc::220 nameserver 91.121.141.220
Sécuriser et configurer le serveur mail de son host
Lors de l'installation de l'interface proxmox, postfix
a été automatiquement installé.
Modifiez la configuration de postfix dans /etc/postfix/main.cf
comme suit :
# 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
SSL
Si vous avez votre propre autorité ssl, vous pouvez générer votre propre certificat.
Ajoutez les lignes suivantes dans /etc/ssl/openssl.cnf
:
[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
Puis générez la clé et le certificat, et signez le avec votre autorité (proxmox_ca dans mon cas) :
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
Déplacez les fichiers dans le répertoire /etc/postfix/ssl
:
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
Il faut encore modifier /etc/postfix/main.cf
:
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
Ajouter des templates manuellement
Il suffit de télécharger directement les archives dans /var/lib/vz/template/cache/
.
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
aptitude install debootstrap debootstrap --arch i386 squeeze /vz/private/777 ou debootstrap --arch amd64 squeeze /vz/private/777
Configuration de base du VE :
vzctl set 777 --applyconfig basic --save echo OSTEMPLATE=\"debian-6.0\" >> /etc/vz/conf/777.conf
Attribuez l'ip 192.168.0.2
à votre VE puis nattez la :
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
Lancez votre VE et entrez y :
vzctl start 777 vzctl enter 777
Configurez les dépôts debian dans /etc/apt/sources.list
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
aptitude update aptitude safe-upgrade
aptitude install locate bzip2 locales dpkg-reconfigure locales
chmod 700 /root dpkg-reconfigure tzdata
/root/.bashrc :
umask 027 export LS_OPTIONS='--color=auto --group-directories-first' eval "`dircolors`" alias ls='ls $LS_OPTIONS'
Vous pouvez faire de même pour /etc/skel/.profile et /etc/skel/.bashrc (umask, couleurs, ...)
Désactiver getty (absent sur les VEs) :
sed -i -e '/getty/d' /etc/inittab
Améliorer les IO en évitant de spliter les fichiers de logs :
sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/*syslog.conf
Faites un lien virtuel entre /etc/mtab et /proc/mounts
rm -f /etc/mtab ln -s /proc/mounts /etc/mtab
Supprimez les paquets inutiles :
aptitude purge isc-dhcp-common isc-dhcp-client module-init-tools
Vous pouvez voir la liste des paquets installés avec
aptitude search '~i'
Installez ssh :
aptitude install openssh-server
Générez automatiquement une nouvelle clé ssh au premier boot (sécurité) :
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
chmod a+x /etc/init.d/ssh_gen_host_keys insserv /etc/init.d/ssh_gen_host_keys
Nettoyez votre liste de paquets :
aptitude clean
Quittez le VE :
exit
finalisation
Supprimez l'ip de votre VE
vzctl set 777 --ipdel all --save
Videz le fichier resolv.conf et le fichier hostname (ils seront créés automatiquement pour chaque VE)
echo "" > /vz/private/777/etc/resolv.conf rm -f /vz/private/777/etc/hostname
vzctl stop 777
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
Attention à respecter la convention de nommage des templates pour qu'elles soient détectés par proxmox : <OS>-<OSVERSION>-<NAME>_<VERSION>_<ARCH>.tar.gz
.
test du template
vzctl create 123456 --ostemplate debian-6.0-minimal_1.0_amd64 vzctl start 123456 vzctl exec 123456 ps ax
Nettoyage
vzctl stop 123456 vzctl destroy 123456 rm /etc/vz/conf/123456.conf.destroyed vzctl destroy 777 rm /etc/vz/conf/777.conf.destroyed
Créer son template Ubuntu 11.04
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
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 :
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
Créez le fichier /vz/private/777/etc/init/openvz.conf
afin de fixer la séquence de boot de ubuntu pour openvz et ajoutez y le contenu suivant :
# 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
Configuration de base du VE :
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
Lancez le VE et entrez y :
vzctl start 777 vzctl enter 777
Commencez par mettre à jour la liste des paquets puis installez l'éditeur texte nano
si vous n'êtes pas fan de vi
qui lui est installé par défaut, ainsi qu'aptitude :
apt-get update apt-get install aptitude nano
Configurez les dépôts debian dans /etc/apt/sources.list
:
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
Empêchez le lancement des services inutiles :
update-rc.d -f ondemand remove
Vous pouvez supprimer directement les scripts d'inits inutiles :
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*
Mettez à jour vos paquets :
aptitude update aptitude safe-upgrade
Supprimez les paquets inutiles :
aptitude purge ubuntu-minimal eject isc-dhcp-client isc-dhcp-common ntpdate console-setup kbd
Vous pouvez voir la liste des paquets installés avec
aptitude search '~i'
Remplacez rsyslog par sysklogd :
aptitude purge rsyslog aptitude install sysklogd
Sécurisez votre environnement root :
chmod 700 /root
Configurez le fuseau horaire et générez les locales françaises :
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
Editez /root/.bashrc
afin de personnaliser votre le shell de votre utilisateur root :
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
Vous pouvez faire de même dans /etc/skel/.profile
et /etc/skel/.bashrc
(umask, couleurs, ...) pour les futurs utilisateurs du VE.
Désactivez getty (inutile sur les VEs) :
initctl stop tty1 initctl stop tty2 initctl stop tty3 initctl stop tty4 initctl stop tty5 initctl stop tty6 rm -f /etc/init/tty*
Améliorez les IO en évitant de spliter les fichiers de logs :
sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/*syslog.conf
Faites un lien virtuel entre /etc/mtab
et /proc/mounts
rm -f /etc/mtab ln -s /proc/mounts /etc/mtab update-rc.d -f mtab.sh remove
Installez ssh :
aptitude install openssh-server locate
Générez automatiquement une nouvelle clé ssh au premier boot (sécurité) :
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
Nettoyez votre liste de paquets :
aptitude clean
Quittez le VE :
exit
finalisation
Supprimez l'ip de votre VE :
vzctl set 777 --ipdel all --save
Videz le fichier resolv.conf et le fichier hostname (ils seront créés automatiquement par proxmox pour chaque VE issu de ce template).
echo "" > /vz/private/777/etc/resolv.conf rm -f /vz/private/777/etc/hostname
Stoppez la VE:
vzctl stop 777
cd /vz/private/777 tar --numeric-owner -zcf /vz/template/cache/ubuntu-11.04-minimal_1.0_amd64.tar.gz .
Attention à respecter la convention de nommage des templates pour qu'elles soient détectés par proxmox :
<OS>-<OSVERSION>-<NAME>_<VERSION>_<ARCH>.tar.gz.
test du template
vzctl create 123456 --ostemplate ubuntu-11.04-minimal_1.0_amd64 vzctl start 123456 vzctl exec 123456 ps ax
Nettoyage
vzctl stop 123456 vzctl destroy 123456 rm /etc/vz/conf/123456.conf.destroyed vzctl destroy 777 rm /etc/vz/conf/777.conf.destroyed
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 :
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
installation
Commencez par ajouter les dépôts backports de debian lenny, puis installez le paquet xz-utils
:
echo "deb http://backports.debian.org/debian-backports lenny-backports main" >> /etc/apt/sources.list aptitude update aptitude install xz-utils
Vous trouverez un script archbootstrap
similaire à debootstrap
sur le wiki de archlinux.
wget http://tokland.googlecode.com/svn/trunk/archlinux/arch-bootstrap.sh
Lancez le script. La syntaxe est ./arch-bootstrap.sh destination architecture
. Les architectures possibles sont i686 (32bits) et x86_64 (64bits).
chmod +x arch-bootstrap.sh ./arch-bootstrap.sh /vz/private/777 x86_64
Nous allons maintenant installer quelques paquets nécessaires avant d'initialiser le VE :
chroot /vz/private/777 pacman -S sed initscripts net-tools iputils nano iproute gzip exit
Appliquez une configuration de base à votre VE :
vzctl set 777 --applyconfig basic --save echo OSTEMPLATE=\"arch\" >> /etc/vz/conf/777.conf
Attribuez lui une adresse ip locale, puis nattez cette ip afin de permettre à la VE d'accéder à internet :
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
Biens sur, définissez le serveur dns :
vzctl set 777 --nameserver 192.168.0.1 --save
Lancez votre VE puis entrez y :
vzctl start 777 vzctl enter 777
Commencez par dé-commenter les miroirs français de /etc/pacman.d/mirrorlist
:
## 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
Vous pouvez ensuite mettre à jour pacman :
pacman -Suy
Puis installez les paquets manquants :
pacman -S procps dnsutils mlocate
Sécurisez votre root :
chmod 700 /root
Créez le fichier /root/.bashrc
:
# # ~/.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]\$ '
Créez le fichier /root/.profile
:
# ~/.profile: executed by Bourne-compatible login shells. if [ "$BASH" ]; then if [ -f ~/.bashrc ]; then . ~/.bashrc fi fi mesg n
Vous pouvez éditer /etc/skel/.bashrc
(umask, couleurs, ...) afin de définir des paramètres par défaut pour vos futurs utilisateurs.
Éditez le fichier /etc/locale.gen
et dé-commentez les locales fr_FR.
fr_FR ISO-8859-1 fr_FR.UTF-8 UTF-8 fr_FR@euro ISO-8859-15
Lancez ensuite locale-gen
pour générer les locales :
locale-gen
Créez un lien entre /proc/mounts et /etc/mtab, supprimez les getty :
rm /etc/mtab ln -s /proc/mounts /etc/mtab sed -i -e '/getty/d' /etc/inittab
Installez openssh et autorisez l'accès de l'extérieur :
pacman -S openssh echo "sshd: ALL : ALLOW" >> /etc/hosts.allow echo "nobody:x:99:99:nobody:/:/sbin/nologin" >> /etc/passwd
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
LOCALE="fr_FR.UTF-8" DAEMON_LOCALE="no" HARDWARECLOCK="localtime" TIMEZONE="Europe/Paris" KEYMAP="fr"
DAEMONS=(hwclock syslog-ng network netfs crond sshd)
Quittez votre VE :
exit
finalisation
Supprimez l'ip de votre VE :
vzctl set 777 --ipdel all --save
Créez un fichier d'exclusion contenant les différents fichiers et dossiers qui ne devront pas se retrouver dans le template définitif :
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
Stoppez le VE :
vzctl stop 777
Supprimez les lignes suivantes du fichier /vz/private/777/etc/rc.conf
:
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" )
créez l'archive du template :
tar --numeric-owner -X ../exclude.list -czf /vz/template/cache/arch-2010.05-minimal_1.0_amd64.tar.gz ./ rm ../exclude.list
Attention à respecter la convention de nommage des templates pour qu'elles soient détectés par proxmox : <OS>-<OSVERSION>-<NAME>_<VERSION>_<ARCH>.tar.gz
.
test du template
vzctl create 123456 --ostemplate arch-2010.05-minimal_1.0_amd64 vzctl start 123456 vzctl exec 123456 ps ax
Nettoyage
vzctl stop 123456 vzctl destroy 123456 rm /etc/vz/conf/123456.conf.destroyed vzctl destroy 777 rm /etc/vz/conf/777.conf.destroyed
Créer et configurer un VE Debian 6.0
Généralités
Connectez vous à votre interface proxmox. Cliquez sur Virtual Machines
puis sur Create
.
Sélectionnez le type de VE à créer (OpenVZ dans mon cas étant donné que mon CPU ne supporte pas la technologie intel VT).
Dans Templates, selectionnez la version voulue de debian.
Remplissez le champ hostname, ainsi que password (ce sera le mot-de-passe root par défaut).
Pour la configuration réseau, deux choix s'offrent à vous :
- venet : il s'agit de créer un réseau virtuel, donc avec des adresses virtuelles que vous devrez ensuite natter ou router au niveau de l'host. Cette technologie est basée sur la couche 3 du model OSI. Le principal intérêt de venet est qu'il suffit de sécuriser (firewall, ...) l'host et non pas chaque VE.
- veth : il s'agit de créer une interface réseau virtuelle à laquelle il faudra attribuer une adresse MAC virtuelle et une adresse IP générée dans la console de gestion de votre provider dédié. Dans ce cas, il faudra faire attention à sécuriser (firewall, ...) chaque VE.
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 vmbr0
à la ligne bridge
.
Cliquez enfin sur create
afin de lancer la génération du VE. Attendez quelques dizaines de secondes puis retournez à la liste des VEs.
Cliquez sur la VE fraîchement créée, localisez le bouton Start
et cliquez dessus. Votre VE démarre, reste à le configurer.
Configuration réseau en veth
Connectez vous en ssh sur l'host en utilisateur root puis entrez :
vzctl enter 101
101
est le numéro de votre VE (VMID) disponible dans le status de la VE sur l'interface web de proxmox.
Éditez le fichier /etc/network/interfaces
comme suit :
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address <ip-fail-over> netmask 255.255.255.255 up route add -host <gateway> dev eth0 up route add default gw <gateway> post-up ifconfig eth0 inet6 add <ipv6> pre-down ifconfig eth0 inet6 del <ipv6>
La gateway est la même que celle que vous avez indiqué lors de la configuration du fichier interfaces
de l'host.
Relancez votre réseau :
/etc/init.d/networking restart
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 VE, tapez
exit
Ajouter une interface réseau virtuelle locale
Comme vous avez pu le voir, j'ai créé sur l'host une interface vmbr1
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 VEs est d'offrir un débit bien supérieur à celui du bridge sur l'interface principale.
Sur l'host, utilisez vzctl
pour créer une nouvelle interface réseau virtuelle :
vzctl set <VMID> --netif_add eth<N>,,,,vmbr<M> --save
Par exemple, pour ajouter une interface virtuelle eth1 bridgé sur vmbr1 :
vzctl set 101 --netif_add eth1,,,,vmbr1 --save
Vous pouvez supprimer cette interface avec :
vzctl set <VMID> --netif_del eth<N> --save
Ensuite, il ne vous reste plus qu'à configurer l'interface sur votre VE. Editez le fichier /etc/network/interfaces
et ajoutez y :
auto eth1 iface eth1 inet static address 192.168.0.2 netmask 255.255.255.0
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 iperf
pour tester le débit entre deux VEs.
Sur une VE lancez iperf en mode serveur :
iperf -s
Sur l'autre, lancez iperf en mode client :
iperf -c 192.168.0.3
Configuration réseau en venet
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 :
iptables -t nat -A POSTROUTING -s 192.168.0.2 -o vmbr0 -j SNAT --to 91.121.141.220
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 :
rm -f /etc/ssh/ssh_host_* ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N '' ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
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 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 :
vzctl enter 101
101
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 /etc/rc.d/openvz_net
contenant :
#! /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
Rendez ce fichier exécutable :
chmod +x /etc/rc.d/openvz_net
Modifiez ensuite la ligne DAEMONS
du fichier /etc/rc.conf
afin d'y ajouter openvz_net
:
DAEMONS=(hwclock syslog-ng network openvz_net netfs crond sshd)
Pour resortir de votre VE, tapez :
exit
Ajouter une interface réseau virtuelle locale
Sur l'host, ajoutez l'interface virtuelle eth1 bridgé sur vmbr1 à votre VE :
vzctl set 101 --netif_add eth1,,,,vmbr1 --save
Ensuite, il ne vous reste plus qu'à configurer l'interface sur votre VE. Ajoutez la ligne suivante dans le fichier /etc/rc.d/openvz_net
:
ifconfig eth1 192.168.0.4 netmask 255.255.255.0
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 :
iptables -t nat -A POSTROUTING -s 192.168.0.4 -o vmbr0 -j SNAT --to 91.121.141.220
vzctl, modification des VEs en ligne de commande
- Définir les serveurs DNS d'un VE :
vzctl set <VEID> --nameserver ip1 --nameserver ip2 --nameserver ip3 --searchdomain domain.tld --save
Vous pouvez ajouter autant de directive --nameserver ip*
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
aptitude purge module-init-tools
Puis reportez vous à Protéger SSH avec sshguard
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 proxmox (pas à votre VE) et utilisez la commande mount
:
mount --bind /vz/private/102/directory /vz/root/101/directory
Pour que ce partage reste actif même en cas de reboot créez le fichier /etc/vz/conf/101.mount
:
#!/bin/bash source /etc/vz/vz.conf source ${VE_CONFFILE} mount -n --bind /vz/private/102/directory /vz/root/101/directory
N'oubliez pas de rendre ce fichier executable :
chmod +x /etc/vz/conf/101.mount
Installer une interface graphique avec NX server sur un VE OpenVZ Debian/Ubuntu
aptitude install xorg xdm
aptitude install xfce4
Téléchargez NX Free Edition client, node et server sur http://www.nomachine.com/select-package.php?os=linux&id=1
aptitude install libaudiofile0 dpkg -i nxclient_3.5.0-6_amd64.deb dpkg -i nxnode_3.5.0-3_amd64.deb dpkg -i nxserver_3.5.0-4_amd64.deb
Configuration de X
Dans /etc/X11/xdm/xdm-config
, commentez la ligne DisplayManager.requestPort: 0
Dans /etc/X11/xdm/Xservers
, commentez la ligne :0 local /usr/bin/X :0 vt7
Dans /etc/X11/xdm/Xaccess
, décommentez la ligne * #any host can get a login window
(Please keep in mind the security implications by the above line. Read the comments found in the file and set it appropriately)
Configuration de NX Server
Éditez /etc/X11/xorg.conf
:
Section "Files" # path to defoma fonts FontPath "/usr/share/fonts/X11/misc" FontPath "/usr/share/fonts/X11/100dpi/:unscaled" FontPath "/usr/share/fonts/X11/75dpi/:unscaled" FontPath "/usr/share/fonts/X11/Type1" FontPath "/usr/share/fonts/X11/100dpi" FontPath "/usr/share/fonts/X11/75dpi" EndSection
Enfin, créez un utilisateur afin de ne pas avoir à vous connecter en root.
Configuration de NX Client
A faire sur votre machine. Téléchargez et installez http://www.nomachine.com/download-client-linux.php
Configurez l'hostname et le ort.
Dans la section Desktop
, selectionnez Unix and custom
. Cliquez sur Settings
et selectionnez Run the default X client script on server
ainsi que New virtual Desktop
Si ça ne fonctionne pas, essayez de forcer le lancement de /usr/bin/xfce4-session
dans les settings de nx
S'il vous manque des icones après vous être logué, essayez d'installer le paquet gnome-icon-theme
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 :
aptitude install vino
Changez les préférences avec vino-preferences
Lancez le serveur vino :
/usr/lib/vino/vino-server
Installer une interface graphique avec NX server sur un VE OpenVZ Archlinux
pacman -S xfce4
Téléchargez NX Free Edition client, node et server sur http://www.nomachine.com/select-package.php?os=linux&id=1
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/
/etc/rc.d/nxserver start
issue
Erreurs du type IPv6 addrconf: prefix with wrong length 56
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 /etc/sysctl.conf
:
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
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
/etc/sysctl.conf
du VE. Typiquement :
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
- 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 sysctl -a
et grep
:
sysctl -a | grep net.ipv6.conf.*.autoconf
Cacher les processus des VEs sur l'host
sysctl kernel.pid_ns_hide_child=1