Comment installer un Windows 7 sur un hyperviseur Xen 4?

Nous allons installer une machine windows 7 (32bits) sur notre Xen qui est configuré sur une Debian squeeze amd64 (voir le post précédant)!

Dans le setup (BIOS) du serveur (Dell Power Edge), je mets l’attribut de virtualisation à enable dans « integrated devices » et « processor »

On jette un coup d’oeil sur les flags du processeur sur l’hyperviseur :

root@kiki:~# cat /proc/cpuinfo | grep flags
flags           : fpu de tsc msr pae mce cx8 apic sep mtrr mca cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nonstop_tsc aperfmperf pni pclmulqdq est ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm ida arat

Mince, il n’y a pas vmx, vme, svm… ce qui devrait être le cas… (d’après ce que je peux lire à gauche à droite sur internet) bon. Par contre, il y a hypervisor !

Un petit prérequis d’installation :

root@kiki:~# aptitude install xen-qemu-dm-4.0

On met le dvdrom de Windows Seven dans le lecteur de DVD, puis :

root@kiki:~# dd if=/dev/cdrom of=/home/xen/images/windows7.iso

On crée une image vide de 10Go pour le « disque dur » de Seven :

root@kiki:~# mkdir /home/xen/domains/raton
root@kiki:~# dd if=/dev/zero of=/home/xen/domains/raton/raton.img bs=1024k seek=10000 count=0

On modifie le fichier /etc/xen/xend-config.sxp pour pouvoir se connecter au windows en vnc et pour avoir le clavier français en dé-commentant les 2 lignes suivantes :

(vnc-listen '0.0.0.0')
(keymap 'fr')

On crée le fichier de configuration /etc/xen/raton.cfg :

import os, re
arch = os.uname()[4]
if re.search('64', arch):
   arch_libdir = 'lib64'
else:
   arch_libdir = 'lib'

kernel = '/usr/lib/xen-4.0/boot/hvmloader'
builder = 'hvm'
memory = 2048
shadow_memory = 8
name = "raton"

vif = ['bridge=eth0']
acpi = 1
apic = 1
disk = [ 'file:/home/xen/domains/raton/raton.img,hda,w', 'file:/home/xen/images/windows7.iso,hdc:cdrom,r']
device_model = '/usr/' + arch_libdir + '/xen-4.0/bin/qemu-dm'

boot = 'dc'
sdl = 0
vnc = 1
vncconsole = 1
vncpasswd = ''

serial = 'pty'
usbdevice = 'tablet'

On lance windows seven :

root@kiki:~# xm create raton.cfg
Using config file "/etc/xen/raton.cfg".
Started domain raton (id=50)

Pour faire l’installation, on se connecte tout simplement en VNC !!! avec par exemple Ultravnc sur le port 5900 de l’hyperviseur !!

et voilà 🙂

Hyperviseur Xen sur debian Squeeze amd64

Nous allons installer Xen sur un serveur Dell PowerEdge R410 avec Debian Squeeze amd64!

Voici la machine (DELL PowerEdge R410) :

  • Processeur Xeon Quad Core E5620
  • carte PERC H200 avec 2 disques SAS en RAID1
  • 4 Go de mémoire vive

–> On fait l’installation de la debian squeeze avec le CD1 (bien suffisant pour l’installation de base) téléchargeable ici : http://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-cd/ (c’est la weekly builds) – Je prends cette version car qu’elle prend désormais en charge ma carte PERC H200

–> On récupère le paquet firmware-bnx2_0.27_all.deb qui est le firmware de la carte réseau « Broadcom Corporation NetXtreme II ». On décompresse le paquet avec ar (ou bien avec n’importe quel logiciel de décompression..par exemple 7zip sous windows le fait aussi) pour ne garder sur un support amovible que : bnx2bnx2-mips-09-5.0.0.j3.fw

Voici le partitionnement choisi (en 4 partitions primaires) :

  • 100Mo /boot en ext4
  • 20Go en LVM (pour le système – en ext4)
  • 1Go de swap
  • le reste en LVM

–> On installe Xen :

root@kiki:/etc/xen# aptitude  install linux-image-2.6-xen-amd64 xen-tools xen-utils

Dans /etc/default/grub, j’ai ça (pas de modification) :

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

Je modifie /etc/grub.d/40_cutom pour avoir ça :

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Xen 4 / Debian Squeeze kernel 2.6.32-5 pvops" {
insmod ext4
set root='(hd0,msdos1)'
multiboot (hd0,msdos1)/xen-4.0-amd64.gz
module (hd0,msdos1)/vmlinuz-2.6.32-5-xen-amd64
module (hd0,msdos1)/initrd.img-2.6.32-5-xen-amd64
}

On met a jour grub :

root@kiki:/etc/xen# update-grub

Mince, après reboot j’ai toujours ça :

root@kiki:/etc/xen# xm info
WARNING!  Can't find hypervisor information in sysfs!
Error: Unable to connect to xend: No such file or directory. Is xend running?

Je tente un truc trouvé ici http://xen-orchestra.com/2010/08/xen-4-on-squeeze-how-to/ :

root@kiki:/etc/xen# mv /etc/grub.d/10_linux /etc/grub.d/50_linux
root@kiki:/etc/xen# update-grub2

après reboot, c’est ok……

root@kiki:/etc/xen# xm info
host                   : kiki
release                : 2.6.32-5-xen-amd64
version                : #1 SMP Wed Oct 20 02:22:18 UTC 2010
machine                : x86_64
nr_cpus                : 8
nr_nodes               : 1
cores_per_socket       : 4
threads_per_core       : 2
cpu_mhz                : 2394
hw_caps                : bfebfbff:2c100800:00000000:00001f40:029ee3ff:00000000:00000001:00000000
virt_caps              :
total_memory           : 4086
free_memory            : 460
node_to_cpu            : node0:0-7
node_to_memory         : node0:460
node_to_dma32_mem      : node0:387
max_node_id            : 0
xen_major              : 4
xen_minor              : 0
xen_extra              : .1
xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p
xen_scheduler          : credit
xen_pagesize           : 4096
platform_params        : virt_start=0xffff800000000000
xen_changeset          : unavailable
xen_commandline        : placeholder
cc_compiler            : gcc version 4.4.5 20100824 (prerelease) (Debian 4.4.4-11)
cc_compile_by          : waldi
cc_compile_domain      : debian.org
cc_compile_date        : Fri Sep  3 15:38:12 UTC 2010
xend_config_format     : 4

Je liste les vm :

root@kiki:/etc/xen# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3573     8     r-----    165.9

MAINTENANT On va essayer de créer une machine virtuelle!!

On édite le fichier /etc/xen-tools.conf pour adapter les directives : dir, debootstrap, size, memory, noswap, fs, dist, image, dhcp, kernel, initrd, arch

grep -E -v '^(#|$)' /etc/xen-tools/xen-tools.conf
dir = /home/xen
install-method = debootstrap
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = `xt-guess-suite-and-mirror --suite` # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
gateway    = 192.168.0.1
netmask    = 255.255.255.0
broadcast  = 192.168.0.255
nameserver = 192.168.16.56
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
mirror = `xt-guess-suite-and-mirror --mirror`
ext3_options     = noatime,nodiratime,errors=remount-ro
ext2_options     = noatime,nodiratime,errors=remount-ro
xfs_options      = defaults
reiserfs_options = defaults
btrfs_options    = defaults

et je fais en sorte de paramétrer le mode bridge dans /etc/xen/xend-config.sxp (c’est par défaut d’ailleurs) :

(network-script network-bridge)
(vif-script vif-bridge)
#(network-script network-route)
#(vif-script vif-route)

JE PEUX MAINTENANT CRÉER MES MACHINES VIRTUELLES !!!

Je crée la machine girafe :

root@kiki:~# xen-create-image --hostname=girafe --ip=192.168.0.14 --passwd

General Information
--------------------
Hostname       :  girafe
Distribution   :  squeeze
Mirror         :  http://debian.univ-reims.fr/debian/
Partitions     :  swap            128Mb (swap)
                  /               4Gb   (ext3)
Image type     :  sparse
Memory size    :  128Mb
Kernel path    :  /boot/vmlinuz-2.6.32-5-xen-amd64
Initrd path    :  /boot/initrd.img-2.6.32-5-xen-amd64

Networking Information
----------------------
IP Address 1   : 192.168.0.14 [MAC: 00:16:3E:9D:89:EA]
Netmask        : 255.255.255.0
Broadcast      : 192.168.0.255
Gateway        : 192.168.0.1
Nameserver     : 192.168.16.56


Creating partition image: /home/xen/domains/girafe/swap.img
Done

Creating swap on /home/xen/domains/girafe/swap.img
Done

Creating partition image: /home/xen/domains/girafe/disk.img
Done

Creating ext3 filesystem on /home/xen/domains/girafe/disk.img
Done
Installation method: debootstrap
Done

Running hooks
Done

No role scripts were specified.  Skipping

Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done


Logfile produced at:
         /var/log/xen-tools/girafe.log

Installation Summary
---------------------
Hostname        :  girafe
Distribution    :  squeeze
IP-Address(es)  :  192.168.0.14
RSA Fingerprint :  a2:af:7e:21:b3:a1:1d:62:70:c5:83:ce:b5:c6:94:9c
Root Password   :  N/A

J’ai eu ce problème lors de la création initiale de girafe :

...
Installation method: debootstrap
Done
System installation failed.  Aborting
/tmp/agcdRtKUDf/etc/ssh/ssh_host_rsa_key.pub: No such file or directory


Logfile produced at:
         /var/log/xen-tools/girafe.log
Removing: /home/xen/domains/girafe

Il m’a simplement fallu indiquer les paramètre proxy :

root@kiki:~# export http_proxy="http://wwwcache.univ-orleans.fr:3128"

Enfin, on liste les domaines, on lance girafe et on reliste les domaines :

root@kiki:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3573     8     r-----   3112.7
root@kiki:~#
root@kiki:~# xm create girafe.cfg
Using config file "/etc/xen/girafe.cfg".
Started domain girafe (id=9)
root@kiki:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3142     8     r-----   5362.2
girafe                                      9   128     1     -b----      1.5

Tout est ok!!! On peut maintenant créer plusieurs autres machines virutelles et les lancer.

Après avoir créé tout plein de machines virtuelles… je les ai lancées une par une… et à la 4ème, mince :

root@kiki:~# xm create martine.cfg
Using config file "/etc/xen/sardine.cfg".
Error: Device 51713 (vbd) could not be connected. Failed to find an unused loop device

Test des interfaces de loopback :

root@kiki:~# ls -ls /dev | grep loop | wc -l
8

mince.. c’est pas assez…

Pour rectifier ça il suffit de créer le fichier /etc/modprobe.d/local-loop.conf et y mettre :

options loop max_loop=64

Il faut arrêter tous les domU (avec des xm shutdown mamachinev).

Il ne doit rester que dom0 :

root@kiki:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3573     8     r-----   3114.6

On recharge le module loop :

root@kiki:~# rmmod loop && modprobe loop

On reteste les interfaces loop :

root@kiki:~# ls -ls /dev | grep loop | wc -l
64

Bingo!! je vais pouvoir lancer jusqu’à 32 machines virtuelles!!!

Je lance déjà mes 5 machines virtuelles :

root@kiki:~# xm create martine.cfg
Using config file "/etc/xen/martine.cfg".
Started domain girafe (id=34)
root@kiki:~# xm create josiane.cfg
Using config file "/etc/xen/josiane.cfg".
Started domain girafe (id=35)
root@kiki:~# xm create gisele.cfg
Using config file "/etc/xen/gisele.cfg".
Started domain girafe (id=36)
root@kiki:~# xm create girafe.cfg
Using config file "/etc/xen/girafe.cfg".
Started domain girafe (id=38)

Tout fonctionne!!!!!

Je vérifie en les listant :

root@kiki:~# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3142     8     r-----   5362.2
girafe                                      38   128     1     -b----      1.5
gisele                                      36   128     1     -b----      1.9
josiane                                     35   128     1     -b----      0.8
martine                                     34   128     1     -b----      1.9
sardine                                     37   128     1     -b----      1.8

Bingo.

Faire un routeur linux en quelques clics avec Ipcop

L’idée est de constituer un sous-réseau « indépendant » du réseau de l’entreprise (sans pour autant rajouter un nouveau vlan pour ça..) pour y faire des tests et notamment pour essayer Samba 4.

Il me fallait une plage d’adresses « propre » d’aucune pollution – sans contrôleur de domaine (faire cohabiter plusieurs domaines « windows » c’est pas top) avec des accès au LAN de l’entreprise.

– On télécharge Ipcop (distribution linux d’une 50aine de Méga)
– On l’installe sur une machine avec 2 interfaces réseaux (je ne sais pas si l’on peut y configurer des interfaces réseaux virtuels sur la même carte, je n’ai pas essayé) : le réseau ROUGE est le LAN de l’entreprise et le réseau VERT est notre sous-réseau (192.168.0.0/24)
– Depuis le réseau VERT on se connecte à l’interface web de l’Ipcop (https://monipcop:445) pour :
* activer le ssh depuis le VERT
* activer le DHCP sur le réseau VERT
* rediriger les ports pour pouvoir accéder aux machines du réseau VERT (ssh ou accès distants de type vnc..) depuis le réseau ROUGE (cad mon poste de travail sur le LAN de l’entreprise)
* on permet l’accès à l’interface web depuis quelques machines du réseau ROUGE (mon poste de travail surtout..)
* on peut peaufiner l’icop (via l’interface web) pour activer le proxy/cache on peut faire du proxy transparent..

En quelques minutes tout est ok…..

Après on peut utiliser Ipcop plus finement avec l’intégration d’un tas de plugins……….

Configurer un serveur DNS sous debian avec bind9 avec enregistrement automatique par le DHCP

On considère que l’on a un Bind bien configuré (voir post précédent). On souhaite maintenant avoir aussi des zones maitres avec un enregistrement automatique des postes (window xp principalement!) dans le DNS !

Le DNS (la machine est « mondns » 192.168.1.3) n’est pas sur la même machine que le DHCP (la machine est « mondhcp » 192.168.1.4)

Sur la machine DNS, on configure la clé rndc avec le script adapté :

# rndc-confgen

On obtient de quoi concevoir le fichier /etc/bind/rndc.conf c’est à dire :

# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "monsecret";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

On rajoute dans le named.conf :

key "rndc-key" {
        algorithm hmac-md5;
        secret "monsecret";
};

controls {
      inet 127.0.0.1 port 953
              allow { 127.0.0.1;192.168.1.4; } keys { rndc-key; };
};

# De quoi journaliser car cela ne fait pas de mal :
logging {
           channel update_debug {
                file "/var/log/update_debug.log" versions 3 size 100k;
                severity  debug 3;
                print-category yes;
                print-severity yes;
                print-time     yes;
           };
           channel security_info    {
                file "/var/log/securite_debug.log" versions 3 size 100k;
                severity  info;
                print-category yes;
                print-severity yes;
                print-time     yes;
           };

           channel queries_info        {
                file "/var/log/queries_debug.log" versions 3 size 1m;
                severity  debug 1;
                print-category yes;
                print-severity yes;
                print-time     yes;
           };

            channel lame_info        {
                file "/var/log/lame_debug.log" versions 3 size 100k;
                severity  info;
                print-category yes;
                print-severity yes;
                print-time     yes;
           };

           category update { update_debug; };
           category security { security_info; };
           category queries { queries_info; };
           category lame-servers { lame_info; };
};

zone "domaine1.univ-orleans.fr" in {
   type master;
   file "/etc/namedb/db.domaine1.univ-orleans.fr";
   allow-update{key rndc-key;};
   notify yes;
};

zone "1.168.192.in-addr.arpa" in {
   type master;
   file "/etc/namedb/db.1.168.192";
   allow-update{key rndc-key;};
   notify yes;
   };

Sur le serveur DHCP (dans dhcpd.conf) on rajoute :

ddns-domainname "domaine1.univ-orleans.fr.";
ddns-rev-domainname "in-addr.arpa.";
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
option domain-name-servers 192.168.1.3;

key "rndc-key" {
        algorithm hmac-md5;
        secret "monsecret";
};
zone 1.168.192.in-addr.arpa {
        primary 192.168.1.3;
        key rndc-key;
        }
zone domaine1.univ-orleans.fr {
        primary 192.168.1.3;
        key rndc-key;
        }

Création de db.domaine1.univ-orleans.fr (on y met quelques machines…) :

$ORIGIN .
$TTL 3600       ; 1 hour
domaine1.univ-orleans.fr IN SOA  mondns.domaine1.univ-orleans.fr. administrateur.mondns.univ-orleans.fr. (
                                2731       ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      mondns.domaine1.univ-orleans.fr.
$ORIGIN domaine1.univ-orleans.fr.
$TTL 21600      ; 6 hours

$TTL 3600       ; 1 hour
mondns                    A       192.168.1.3
$TTL 1200       ; 20 minutes
machine1                   A       192.168.1.100
machine2                   A       192.168.1.101

Création de db.1.168.192 :

$ORIGIN .
$TTL 3600       ; 1 hour
1.168.192.in-addr.arpa IN SOA  mondns.domaine1.univ-orleans.fr. administrateur.domaine1.univ-orleans.fr. (
                                47         ; serial
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      mondns.domaine1.univ-orleans.fr.
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 21600      ; 6 hours
3                        PTR     mondns.domaine1.univ-orleans.fr.
100                     PTR     machine1.domaine1.univ-orleans.fr.
101                     PTR     machine2.domaine1.univ-orleans.fr.

On lance (ou relance) le démon :

# invoke-rc.d bind9 restart

Après quelques minutes (et si tout est OK dans /var/log/syslog et /chroot/named/var/log/) des fichiers .jnl doivent automatiquement se créer : db.1.168.192.jnl et db.domaine1.univ-orleans.fr.jnl !!

On peut aussi regarder dans les logs du DHCP (/var/log/syslog) sur la machine 192.168.1.4 :

May 19 12:08:20 mondhcp dhcpd: DHCPDISCOVER from 00:15:d5:59:02:ba via eth0
May 19 12:08:20 mondhcp dhcpd: DHCPOFFER on 192.168.1.102 to 00:15:d5:59:02:ba via eth0
May 19 12:08:20 mondhcp dhcpd: Added new forward map from machine3.domaine1.univ-orleans.fr. to 192.168.1.102
May 19 12:08:20 mondhcp dhcpd: added reverse map from 102.1.168.192.in-addr.arpa. to machine3.domaine1.univ-orleans.fr.

On peut constater que ça marche plutôt pas mal!

Un petit nslookup sur une machine ayant le resolv.conf configuré comme il faut avec le DNS que l’on vient de créer :

# nslookup 192.168.1.102
Server:         192.168.1.3
Address:        192.168.1.3#53

102.1.168.192.in-addr.arpa     name = machine3.domaine1.univ-orleans.fr.

Tout est ok !

Configurer un serveur DNS esclave sous debian avec bind9

J’ai un DNS intégré à l’AD sur un serveur windows 2003… et je voudrais faire un DNS en slave sur une machine debian !

Installation de bind9 :

maya:~# aptitude install bind9
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Lecture des descriptions de tâches... Fait
Les NOUVEAUX paquets suivants vont être installés :
bind9 bind9utils{a}
0 paquets mis à jour, 2 nouvellement installés, 0 à enlever et 2 non mis à jour.
Il est nécessaire de télécharger 336ko d'archives. Après dépaquetage, 1028ko seront utilisés.
Voulez-vous continuer ? [Y/n/?] Y
Ãcriture de l'information d'état étendu... Fait
Prendre : 1 http://debian.univ-reims.fr lenny/main bind9utils 1:9.5.1.dfsg.P3-1+lenny1 [93,0kB]
Prendre : 2 http://debian.univ-reims.fr lenny/main bind9 1:9.5.1.dfsg.P3-1+lenny1 [243kB]
336ko téléchargés en 0s (1237ko/s)
Préconfiguration des paquets...
Sélection du paquet bind9utils précédemment désélectionné.
(Lecture de la base de données... 86592 fichiers et répertoires déjà installés.)
Dépaquetage de bind9utils (à partir de .../bind9utils_1%3a9.5.1.dfsg.P3-1+lenny1_i386.deb) ...
Sélection du paquet bind9 précédemment désélectionné.
Dépaquetage de bind9 (à partir de .../bind9_1%3a9.5.1.dfsg.P3-1+lenny1_i386.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de bind9utils (1:9.5.1.dfsg.P3-1+lenny1) ...
Paramétrage de bind9 (1:9.5.1.dfsg.P3-1+lenny1) ...
Ajout du groupe « bind » (identifiant 116)...
Terminé.
Ajout de l'utilisateur système « bind » (identifiant : 109)...
Ajout du nouvel utilisateur « bind » (identifiant : 109) avec le
groupe « bind »...
Répertoire personnel « /var/cache/bind » non créé.
wrote key file "/etc/bind/rndc.key"
#
Starting domain name service...: bind9.
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Ãcriture de l'information d'état étendu... Fait
Lecture des descriptions de tâches... Fait

Chrootons bind9

On créé les répertoires de la prison :

# mkdir -p /chroot/named
# cd /chroot/named
# mkdir -p dev etc/namedb/ var/run etc/bind/

On associe les droits qu’il faut :

# chown root:root /chroot
# chmod 700 /chroot
# chown bind:bind /chroot/named
# chmod 700 /chroot/named
# chown bind:bind /chroot/named/var/run

On copie les fichiers de configuration au bon endroit :

# cp /etc/bind/named.conf /chroot/named/etc/
# cp /etc/bind/db.local /chroot/named/etc/namedb/db.local
# cp /etc/bind/db.root /chroot/named/etc/namedb/db.root

On termine l’isolation :

# mknod /chroot/named/dev/null c 1 3
# mknod /chroot/named/dev/random c 1 8

Editons le fichier /etc/default/bind9, la variable OPTIONS doit avoir la valeur suivante :

OPTIONS="-u bind -t /chroot/named -c /etc/named.conf"

On met à jour le fichier de configuration (/chroot/named/etc/named.conf) :

acl reseauLocal {
192.168.1.0/24;
192.168.2.0/24;
};
options {
forward first;
forwarders {
// serveurs DNS vers lesquels on souhaite faire un transfert :
192.168.2.1;
192.168.2.2;
};
allow-query {reseauLocal;};
allow-recursion {reseauLocal;};
};
logging{
  channel simple_log {
    file "/var/log/named/bind.log" versions 3 size 5m;
    severity warning;
    print-time yes;
    print-severity yes;
    print-category yes;
  };
  category default{
    simple_log;
  };
};

zone "." {
        type hint;
        file "/etc/namedb/db.root";
};

zone "0.0.127.in-addr.arpa" in {
   type master;
   file "/etc/namedb/db.0.0.127";
};

zone "mondomaineAD.univ-orleans.fr" in {
   type slave;
   file "/etc/namedb/db.mondomaineAD.univ-orleans.fr";
   masters { 192.168.1.2; };
};

zone "1.168.192.in-addr.arpa" in {
   type slave;
   file "/etc/namedb/db.1.168.192";
   masters { 192.168.1.2; };
   };

Je n’utilise pas les fichiers named.conf.options et named.conf.local : tout est dans le named.conf pour plus de simplicité.

On relance BIND

# invoke-rc.d bind9 restart

Génération clés SSH

Génération des clés privées et publiques

machine-locale:$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/login/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/login/.ssh/id_dsa.
Your public key has been saved in /home/login/.ssh/id_dsa.pub.
The key fingerprint is:
11:ee:bc:47:b0:c8:40:03:4f:a0:09:a4:71:39:93:93 login@machine-locale
The key's randomart image is:
+--[ DSA 1024]----+
|+.+*+   .        |
|o=E+ . . .       |
|+  +o   +        |
|     o + +       |
|      o o .      |
|         +       |
|        . .      |
|         .       |
|                 |
+-----------------+

Transfert du fichier contenant la clé publique sur la machine distante

machine-locale : cat ~/.ssh/id_dsa.pub | ssh login@machine-distante "cat - >> ~/.ssh/authorized_keys"

Migration Samba 2.2.7 (rpm) vers 3.0.x (compilé à partir des sources)

L’idée est donc de mettre à jour (sur la même machine donc) un Samba 2.2.7(rpm) vers Samba 3.0.28a (compilé à partir des sources)….
Serveur : Red Hat 8.0 kernel 2.4 !!!

Aucun souci… la migration s’est très bien déroulée, voici donc les commandes utilisées…

Voici juste un aperçu de la version initiale de Samba sur le PDC (RedHat) :

smbd -V
Version 2.2.7-security-rollup-fix
rpm -qa | grep samba
samba-swat-2.2.7-5.8.0
samba-common-2.2.7-5.8.0
samba-client-2.2.7-5.8.0
samba-2.2.7-5.8.0

1) Sauvegarde du serveur avec Partimage (sauvegarde de toutes les partitions / /home /usr /var /tmp…)
2) Reconstitution de ce serveur sur une vielle becane pour tester la migration (On restaure les partitions sauf /home qui est énorme…)
-> pour restaurer une partition avec partimage il faut avoir une partition aussi grande (c’est à dire identique ou +) que l’originale… donc impossible de restaurer /home sur la vieille becane : il suffit de se bricoler un /home en recopiant quelques comptes pour les tests…)
on finalise à coup de chroot + grub-install…. voilà le serveur reconstitué!

Maintenant tout se passe sur le serveur de test!!!!

Il est conseillé de changer, dans smb.conf (sur la machine de test), la valeur de « WORKGROUP » afin qu’il n’y a pas de conflit avec le PDC qui est toujours en prod. De plus, il est bon d’intégrer au moins 2 machines à ce nouveau domaine… afin de ce rendre compte, après la migration, s’il n’y a pas d’incidence sur les PC du domaine…

3) Migration de Samba :

Installation de samba 3.0.28a:

cd /usr/local/install
export http_proxy=http://monsquid.mondomaine:3128
wget http://us3.samba.org/samba/ftp/stable/samba-3.0.28a.tar.gz
tar zxvf samba-3.0.28a.tar.gz
cd samba-3.0.28a/source
./configure --prefix=/usr/local/samba
make
/etc/init.d/smb stop
make install

On met les fichiers de conf à la bonne place :

cp /etc/samba/smbpasswd /usr/local/samba/lib/
cp /etc/samba/smb.conf /usr/local/samba/lib/
cp /etc/samba/secrets.tdb /usr/local/samba/private/
mkdir /usr/local/samba/lib/conf
cp /etc/samba/lib/* /usr/local/samba/lib/conf
mkdir /usr/local/samba/var/locks
cp /var/cache/samba/* /usr/local/samba/var/locks
cp /etc/samba/lib/users.map /usr/local/samba/lib

On ne supprime pas les anciens fichiers de configuration :

mv /etc/samba /etc/sambaold

Modification/adaptation du fichier smb.conf :

  • changement des chemins de smbpasswd et de users.map
  • add user script devient add machine script
  • rajout de l’attribut (si on veut intégrer des Vista sans changer le mode d’authentification par défaut) :
    client NTLMv2 auth = Yes

On teste smb.conf :

/usr/local/samba/bin/testparm

On configure la variable d’environnement $PATH :

echo "export PATH=$PATH:/usr/local/samba/bin:/usr/local/samba/sbin" >> /etc/profile
export PATH=$PATH:/usr/local/samba/bin:/usr/local/samba/sbin

Copie du script de démarrage /etc/init.d/smb :

#!/bin/sh

# Check that the Samba configuration file exists
[ -f /usr/local/samba/lib/smb.conf ] || exit 0

start(  )
{
       echo -n "Starting SMB services: "
       /usr/local/samba/sbin/smbd -D
       ERROR=$?
       echo

       echo -n "Starting NMB services: "
       /usr/local/samba/sbin/nmbd -D
       ERROR2=$?
       if [ $ERROR2 -ne 0 ]
       then
               ERROR=1
       fi
       echo

       return $ERROR
}

stop(  )
{
       echo -n "Shutting down SMB services: "
       /bin/kill -TERM -a smbd
       ERROR=$?
       echo

       echo -n "Shutting down NMB services: "
       /bin/kill -TERM -a nmbd
       ERROR2=$?
       if [ $ERROR2 -ne 0 ]
       then
               ERROR=1
       fi
       echo

       return $ERROR
}

case "$1" in
 start)
       start
       ;;
 stop)
       stop
       ;;
 *)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

exit $?

On rend le script exécutable :

chmod +x /etc/init.d/smb

Dans /etc/rc.local on met :

/etc/init.d/smb start

Lancement :

/etc/init.d/smb start

Pour finir (on supprime les rpms) :

rpm -e samba-swat-2.2.7-5.8.0 samba-common-2.2.7-5.8.0 samba-client-2.2.7-5.8.0 samba-2.2.7-5.8.0

TADAAAA !!! C’est aussi simple que cela 😉
L’authentification depuis les PC du domaine fonctionne comme avant… c’est tout bon ^^

La migration s’est donc bien passée sur le serveur de test… on peut donc le faire sur le serveur de prod !

[debian] PDC Linux Samba pour 70 clients XP

[en cours de création]
à venir le fichier smb.conf détaillé puis les différentes stratégies et commandes…

On a 4 salles informatiques avec entre 15 et 20 postes clients Windows XP Pro SP2. L’idée est d’avoir un compte utilisateur unique pour tout le monde avec un profil obligatoire : non modifiable (les profils sont effacés du poste client lors de la déconnexion… donc il est re-téléchargé à l’ouverture de la session)

Sur le serveur :

aptitude install samba
groupadd machines

# comptes étudiants :
useradd --home "/dev/null" --shell "/bin/false" utilisateur
# comptes enseignants :
useradd --home "/dev/null" --shell "/bin/false" enseignant
# L'enseignant est dans le groupe utilisateur :
adduser enseignant utilisateur

mkdir /etc/samba/netlogon
mkdir /etc/samba/profile

Sur le client

Les postes clients seront clonés après avoir installé convenablement un poste qui nous servira de modèle.

– Installation de XP Pro
– Installation d’un antivirus
– Windows Update
– Installation des logiciels de base : OpenOffice, Archiveur…
– Base de registre :

Afin d’éviter que les profils restent enregistrés –>
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon
« DeleteRoamingCache »=dword:00000001

– Intégration du poste au domaine
– Mise en place d’un utilisateur du domaine comme administrateur local.

[debian] Comment éteindre des ordinateurs Windows XP depuis une debian

Voici le script qui permet d’éteindre automatiquement tous mes postes Windows XP depuis le contrôleur de domaine (PDC) Linux samba situé dans le même sous réseau (192.168.0.0/24) :


#!/bin/sh
if [ $# = 0 ]; then
        echo "Usage : $0 nombre-de-secondes-avant-arret"
        exit 1
fi
echo "Ce programme eteind toutes les machines comprises entre 192.168.0.2 et 192.168.0.150.
echo "Vous avez 10 secondes pour faire CTRL-C."
sleep 10
for IP in $(nmap -sP 192.168.0.2-150 | grep "appears to be up" | cut
-d" " -f2);do
/usr/bin/net rpc SHUTDOWN -f -I $IP -U utilisateur_du_domaine%mot_de_passe -t $1
done

PS: Les postes Windows XP Pro (sp2) ont leur firewall Windows d’activé, et, l’exception « Partage de fichiers et d’imprimante » est cochée. De plus, dans les stratégies de sécurité locale des postes XP, j’autorise l’utilisateur « RESEAU » à « Forcer l’arrêt à partir d’un système distant ».

Les utilisateurs des postes XP sont de simples utilisateurs (groupe « utilisateurs »), ils n’ont donc pas la possibilité d’exécuter la commande shutdown de Windows afin d’éteindre un ordinateur distant (ils ont un message d’erreur…).

[debian etch] Configurer ma carte wifi ipw2200 pour un AP Freebox WPA2

La carte est reconnue et les pilotes déjà installés !


shell# lspci | grep -i wireless
02:03.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05)

Téléchargement du firmware (non libre) ici :http://ipw2200.sourceforge.net/firmware.php (la version 3.0)
Et installation des fichiers dans /lib/firmware

Quelques outils indispensables :


shell# aptitude install wireless-tools
shell# aptitude install wpa_supplicant

Tout est chargé?


shell# lsmod | grep ipw2200
ipw2200               126084  0
ieee80211              29416  1 ipw2200
firmware_class          9600  2 pcmcia,ipw2200

Dans /etc/network/interfaces :


# The loopback network interface
auto lo
iface lo inet loopback

iface eth2 inet dhcp
pre-up /sbin/wpa_supplicant -i eth2 -c "/etc/wpa_supplicant.conf" -Dwext -B -w
post-down /sbin/wpa_cli -i eth2 terminate
auto eth2

Dans /etc/wpa_supplicant.conf :


# WPA-PSK/TKIP
ap_scan=1
dot11RSNAConfigSATimeout=10
update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="canard"
    mode=managed
    priority=1
    scan_ssid=1
    key_mgmt=WPA-PSK
    proto=WPA2
    pairwise=TKIP
    group=TKIP
    key_mgmt=WPA-PSK
    psk="ma clef WPA2"
}