Affichage des articles dont le libellé est debian. Afficher tous les articles
Affichage des articles dont le libellé est debian. Afficher tous les articles

jeudi 13 juin 2013

Administration d'un serveur SVN à l'aide de SVN

Ma vie trépidante d'administrateur m'a amené dernièrement à mettre en place un serveur SVN en place (en utilisant le module Apache couplé avec authentification LDAP) et surtout l'isolement de ce serveur dans une bulle derrière des firewalls.

D'un côté c'est vrai que c'est bien la sécurité et tout ça, mais de l'autre, à chaque fois que j'ai envi de modifier un truc sur mon serveur, je suis un peu obligé de me connecter via un VPN + tunnel SSH. Comme chacun sait, je suis un gros feignant et c'est pas par gaîté de coeur que je m'y connecte. C'est donc assez naturellement que je me suis dit : et si j'utilisais un repository SVN pour faire mon administration ? Diabolique non ? De plus je gagnais instantanément un suivi de qui modifié quoi sur mon serveur SVN. Très pratique pour savoir qui taper en cas de problème.

Création du repos adminsvn

La première étape a été de créer un repository sur mon serveur qui allait me servir à ça. Pour cela, rien de plus simple, on crée un repository SVN :
$ svnadmin create /var/svn/adminsvn
On crée ensuite un trunk pour faire jolie ainsi qu'un sous-répertoire admin :
$ svn mkdir --parent file:///var/svn/adminsvn/trunk/admin -m "Création d'un trunk/admin"
Nous allons maintenant alimenter le fichier /etc/httpd/svn.d/droits-svn.conf afin de protéger le repository d'administration :
[groups]
admins_svn = yannig,cnorris

[/]
* = rw

[adminsvn:/]
# Personne ne peut lire le contenu de ce repository
* =
# Par contre, les admins SVN ont le droit de tout faire
@admins_svn = rw
Alimentons maintenant nos utilisateurs dans le fichier svn.passwd :
$ htpasswd -nb yannig mdpdeyannig > /etc/httpd/svn.d/svn.passwd
$ htpasswd -nb cnorris chucknorrisnapasbesoindemdp >> /etc/httpd/svn.d/svn.passwd
Ajoutons maintenant ces fichiers dans le repository avec la commande suivante :
$ svn add svn.passwd droits-svn.conf

Mise en place du mécanisme de post commit

Procédons maintenant à un checkout de ce repository SVN dans un coin de notre serveur (en tant qu'utilisateur apache ou www-data selon que vous soyez sous RH ou Debian like) :
$ svn co file:///var/svn/adminsvn/trunk/admin /etc/httpd/svn.d
Nous allons maintenant mettre en place un mécanisme de mise à jour de ce checkout. Rendez-vous dans le répertoire /var/svn/adminsvn/hooks et créons un fichier shell post-commit avec la commande suivante :
echo "svn up /etc/httpd/svn.d" > post-commit
chmod +x post-commit
Comme vous pouvez le voir, le script n'est pas super complexe.

Si vous n'avez pas utiliser le bon utilisateur pour faire le checkout, vous pouvez modifier les droits avec la commandes suivantes :
chown -R apache:apache /etc/httpd/svn.d

Déclaration d'un ensemble de repository dans apache

Déclarons maintenant la racine contenant le repository dans apache en créant le fichier /etc/httpd/conf.d/svn.conf avec le contenu suivant :
<Location /svn>
  DAV svn
  SVNParentPath /var/svn/
  SVNListParentPath On

  Options +Indexes
  AuthType Basic
  AuthName "SVN"

  # Gestion authentification
  AuthBasicProvider file
  AuthzSVNAccessFile /etc/httpd/svn.d/droits-svn.conf
  AuthUserFile /etc/httpd/svn.d/svn.passwd
  Require valid-user
</Location>
Un arrêt/relance de l'ami Apache et nous voilà prêt pour la suite.

NB : Il est bien sûr évidant que vous devez disposer de l'extension mod_dav_svn. Sous RHEL, vous devrez lancer la commande yum suivante pour procéder à l'installation :
yum install mod_dav_svn
Sous Debian, ce module s'appelle libapache2-svn. Vous devrez dans ce cas utiliser la commande suivante :
apt-get install libapache2-svn

Test de notre mécanisme

Cette partie est plus simple puisqu'elle va consister à faire des commits dans notre repository. Pour se faire, vous devez donc vous munir d'un client SVN. En tant que vieux barbu, je fais ça en ligne de commande depuis mon poste Linux :
svn co --username yannig http://monserveursvn/svn/adminsvn/trunk ~/adminsvn
Éditons maintenant votre fichier droits-svn.conf de la manière qu'il nous plaira et lançons le commit :
$ svn diff
Index: changelog.txt
===================================================================
--- droits-svn.conf       (revision 1)
+++ droits-svn.conf       (working copy)
@@ -1,3 +1,4 @@
-admins_svn = yannig,cnorris
+admins_svn = yannig,cnorris,nobody

[/]
* = rw

$ svn ci -m "Ajout de l'utilisateur nobody."
Sending        droits-svn.conf
Transmitting file data .
Committed revision 2.
Allons maintenant faire un tour sur notre serveur pour vérifier que le fichier droits-svn.conf a bien été mis à jour :
$ grep nobody /etc/httpd/svn.d/droits-svn.conf
admins_svn = yannig,cnorris,nobody
La modification a bien été prise en compte. Le mécanisme fonctionne bien comme prévu !

jeudi 30 mai 2013

Installation de Debian squeeze/OpenMediaVault sur PowerEdge R520 et baie Powervault MD1200 Base

Ces derniers temps, j'ai eu à mettre en place une Debian squeeze sur un Dell PowerEdge R520 avec une baie PowerVault MD1200. Comme je suis un mec super sympa, je me suis dit que j'allais raconter aux gens comment ça c'était passé.

Pour mémoire, le pourquoi de la distribution squeeze alors que la wheezy vient de sortir est un choix du client, ce dernier voulant utiliser l'appliance logiciel OpenMediaVault.

Première modification que j'ai apporté concerne la gestion du démarrage. En effet, ce serveur supporte UEFI mais squeeze ne le gère pas. Plutôt que de me prendre la tête sur le sujet à vouloir le faire fonctionner, j'ai décidé de passer le démarrage en mode BIOS.

J'ai ensuite utilisé l'interface BIOS de mon serveur afin de configurer mes deux RAIDs à savoir :

Première bonne surprise : la configuration du RAID se fait en arrière plan et il est possible de faire l'installation sans se préoccuper de la construction (Youpi ! je n'ai pas 3 jours à attendre que ça soit construit !).

Pour mémoire, voici les références de lspci de ces deux cartes :
# lspci | grep -i raid
01:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 9240 (rev 03)
0a:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS TB (rev 05)
Toujours pour mémoire, je vous donne le nom commercial de Dell pour ces cartes :

  • La première à pour petit nom PERC H310 Mini ;
  • La seconde PERC H810 Adapter.

Debian squeeze : premier essai

Confiant dans ma Debian squeeze, j'ai d'abord gravé l'image iso 6.0.7 avec les firmwares. Cette image est téléchargeable à l'emplacement suivant : Debian 6.0.7 incluant les firmwares.

J'ai ensuite démarré sur un disque USB afin de pouvoir entamer l'installation. Le premier écueil est arrivé au niveau de la gestion de la carte réseau (une Broadcom NetXtreme BCM5720 dual ethernet) puisque cette dernière a refusé de fonctionné (poukrel !).

Pour mémoire voici le résultat de la commande lspci :
# lspci | grep -i ethernet
02:00.0 Ethernet controller: Broadcom Corporation Device 165f
02:00.1 Ethernet controller: Broadcom Corporation Device 165f

Debian squeeze : deuxième essai

Dans mon malheur, cette carte semblait supportée par wheezy. J'ai donc cherché à installer le kernel en version backport. Mais comme vous vous en doutez, quand on a pas de réseau sur une bécane, ça devient vite embêtant de vouloir installer quelque chose. C'est pour cette raison que j'ai cherché une image ISO debian embarquant le kernel en version backport. Mes recherches m'ont donc amené sur cette image : Debian 6.0.4 avec un kernel 3.2.0 embarquant les firmwares.

Me voici maintenant à regraver ma distribution et à relancer mon installation. Bonne suprise, ça passe bien côté réseau.

Par contre, je tombe sur un obscure problème de configuration du clavier (du fait qu'il soit USB ?). Afin de m'en affranchir, je prends une option indiquant que le mapping sera celui du kernel. Je pense que ce problème vient du fait que l'image ISO n'embarquait pas les packages nécessaires pour gérer ça.

Pour mémoire, une fois l'installation terminée, j'ai dû lancer la commande suivante pour configurer le clavier de ma console correctement :
apt-get install console-data
De là, il vous sera demandé les informations concernant votre clavier et tout rentrera dans l'ordre.

Pour le reste, rien à signaler. Sachez simplement que la distribution a reconnu directement les deux RAIDs de la machine et que j'ai pu configurer sans problème mes FS alors que mes RAIDs étaient en cours de construction (super bonne suprise là aussi !).

Pensez bien à upgrader votre distribution à la fin de l'installation !

A noter que lors du premier boot, j'ai tout de même constater une certaine lenteur (on est autour des 3 minutes rien que pour l'OS sans compter les 2 minutes d'initialisation du matériel).

Installation d'openmediavault

L'installation se fait en deux fois. Installons d'abord ces packages :
apt-get install openmediavault-keyring postfix libapache2-mod-php5
On peut ensuite lancer l'installation d'openmediavault de la manière suivante :
apt-get install openmediavault locales
Vous devriez récupérer à ce moment pas mal de package et vous devriez avoir quelques réponses à donner sur la configuration des packages.

Installation de openmanage

Ayant du temps de rab, je me suis dit qu'il pourrait être intéressant d'installer l'application OpenManage de Dell. La configuration se fait en ajoutant des ressources dans le fichier /etc/apt/sources.list. Ci-dessous l'extrait en question :
deb http://linux.dell.com/repo/community/deb/latest /
Il faut ensuite l'installer :
apt-get install srvadmin-all
De là, il vous faut redémarrer votre serveur afin de charger les modules nécessaires à la gestion du matériel.

A noter que par défaut l'interface web d'OpenManage ne se lance pas. On peut le faire la première fois en lançant la commande suivante :
/etc/init.d/dsm_om_connsvc start
Afin que cette dernière se lance automatiquement au démarrage, il est possible de le faire avec la commande suivante :
update-rc.d dsm_om_connsvc defaults
L'accès se fait ensuite au travers l'URL suivante : https://machine:1131

L'interface demande un compte d'administrateur. Par défaut, il est possible d'utiliser le compte root mais il est également possible de rajouter des comptes administrateur.

Si vous êtes allergique à tout interface graphique, sachez qu'il est possible d'observer l'état du matériel avec la commande omreport. A noter que pour obtenir de l'aide, il faut utiliser le paramètre -?.

Pour avoir l'état des disques virtuels RAID, vous pouvez essayer la commande omreport storage vdisk. Ci-dessous un exemple de résultat (avec en paramètre le numéro du contrôleur et celui du disque virtuel) :
# omreport storage vdisk controller=1 vdisk=0
Virtual Disk 0 on Controller PERC H810 Adapter (Slot 4)

Controller PERC H810 Adapter (Slot 4)
ID                        : 0
Status                    : Ok
Name                      : Virtual Disk 0
State                     : Background Initialization
Hot Spare Policy violated : No
Encrypted                 : Not Applicable
Progress                  : 81% complete
Layout                    : RAID-6
Size                      : 25,146.00 GB (27000311906304 bytes)
Device Name               : /dev/sdb
Bus Protocol              : SAS
Media                     : HDD
Read Policy               : Read Ahead
Write Policy              : Write Back
Cache Policy              : Not Applicable
Stripe Element Size       : 64 KB
Disk Cache Policy         : Disabled
Dans le cas présent, on voit que notre disque virtuel est en cours de construction (champ Progress). Une fois cette construction terminée, le champ disparaît en indiquant un état (State) à Ready.

On peut également avoir l'état des cartes réseaux :
# omreport chassis nics
Network Interfaces Information

Physical NIC Interface(s)
Index             : 0
Interface Name    : eth0
Vendor            : Broadcom Corporation
Description       : NetXtreme BCM5720 Gigabit Ethernet PCIe
Connection Status : Connected
Slot              : Embedded

Index             : 1
Interface Name    : eth1
Vendor            : Broadcom Corporation
Description       : NetXtreme BCM5720 Gigabit Ethernet PCIe
Connection Status : Connected
Slot              : Embedded

Team Interface(s)
Index             : 0
Interface Name    : bond0
Vendor            : Linux
Description       : Ethernet Channel Bonding
Redundancy Status : Full

Pour conclure

Vous l'aurez compris, avant l'intervention, j'avais quelques appréhensions sur le support de ce matériel (Dell ne fait aucun support officiel). Comme j'ai été agréablement surpris sur certains points (surtout avec OpenManage), je me permets donc de faire un petit retour d'expérience.

Bref, le matos Dell et la wheezy (avec les firmwares), ça marche, mangez en !

mercredi 27 mars 2013

Mise en place d'un bridge sous Debian/Ubuntu

Dans ma quête perpétuelle de la mise en place de truc qui fonctionne à moitié, j'ai eu la chance de me frotter aux bridges ethernets et aux interfaces ethernets virtuelles de l'ami Linux.

Mais qu'est ce qu'un bridge ethernet allez-vous me dire et pourquoi vouloir en mettre un en place ?

Un bridge ethernet est l'équivalent d'un switch virtuel au niveau système. L'idée est d'utiliser une interface réelle (mettons eth0) pour faire transiter du trafic des interfaces virtuelles (généralement tap0, tap1 etc.).

Pour ce qui est de l'utilité, vous en avez plusieurs avec notamment les deux exemples suivants :
  • Exposer une machine virtuelle sur un réseau réelle ;
  • Mettre en place un bridge ethernet pour openvpn.
Dans mon cas, je fais ça pour openvpn mais on peut également l'utiliser pour kvm par exemple.

Mise en place d'un bridge

Avant toute chose, il va nous falloir installer deux packages qui vous serons utiles pour gérer les bridges et les interfaces virtuelles (et puis, que serait un article sur Debian sans l'utilisation d'apt-get) :

apt-get install uml-utilities bridge-utils

Ici, rien de bien extraordinaire, nous allons d'abord déclarer un bridge (br0) dans le fichier /etc/network/interfaces, y ajouter notre interface ethernet (eth0) et enfin rattacher l'adresse dhcp au bridge. Ci-dessous, vous trouverez un exemple de fichier avant modification :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Après modification, le fichier devrait ressembler à ça :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

Faîtes ensuite un restart networking pour prise en compte. La commande ifconfig devrait vous renvoyer ce qui suit :

# ifconfig
br0       Link encap:Ethernet  HWaddr 7e:68:47:11:36:c9  
          inet adr:192.168.0.34  Bcast:192.168.0.255  Masque:255.255.255.0
          adr inet6: fe80::7c68:47ff:fe11:36c9/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Packets reçus:3193 erreurs:0 :0 overruns:0 frame:0
          TX packets:1289 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          Octets reçus:273039 (273.0 KB) Octets transmis:331151 (331.1 KB)

lo        Link encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          Packets reçus:312 erreurs:0 :0 overruns:0 frame:0
          TX packets:312 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          Octets reçus:32926 (32.9 KB) Octets transmis:32926 (32.9 KB)

eth0      Link encap:Ethernet  HWaddr c8:60:00:e2:c9:2b  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Packets reçus:4925 erreurs:0 :0 overruns:0 frame:0
          TX packets:1289 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000 
          Octets reçus:679553 (679.5 KB) Octets transmis:331151 (331.1 KB)

On voit ici que c'est le bridge qui a une adresse IP. Ceci est important pour permettre le fonctionnement correcte de notre machine. Dans le cas contraire, on pourrait avoir des comportements bizarre de notre ami le serveur. Il faut bien voir que notre interface ethernet est simplement considéré comme un connecteur vers le monde réel.

Pour les plus curieux, il est possible de consulter l'état de notre bridge avec la commande brctl :

# brctl show br0
bridge name     bridge id               STP enabled     interfaces
br0             8000.7e68471136c9       no              eth0

Passons maintenant à la déclaration d'une interface virtuelle.

Déclaration d'une interface virtuelle et rattachement au bridge

Maintenant que notre bridge est fonctionnel, nous allons rattacher une interface virtuelle (tap0). Pour se faire, rien de plus simple, modifions de nouveau notre fichier /etc/network/interfaces de la manière suivante :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto tap0
iface tap0 inet manual
        pre-up tunctl -t tap0
        up ifconfig tap0 up
        down ifconfig tap0 down

auto br0
iface br0 inet dhcp
        bridge_ports eth0 tap0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

Les lignes concernant tap0 contiennent l'utilisation de la commande tunctl qui va déclarer l'interface. Une fois déclarée, cette interface sera rattachée automatiquement au bridge à l'aide de la ligne bridge_ports.

Pour s'en convaincre, une fois que le réseau a été redémarré (restart networking), il suffit de relancer la commande brctl show br0. Ce dernier devrait renvoyer le résultat suivant :


# brctl show br0
bridge name     bridge id               STP enabled     interfaces
br0             8000.1c6f65217bc0       no              eth0
                                                        tap0

jeudi 20 mai 2010

Connexion via ipmi sur un serveur

Je suis plutôt habitué au console Solaris mais il se trouve que récemment, j'ai eu l'occasion de bosser sur une console ipmi. Le principe est le même, à savoir une console texte accessible via le réseau.

Comment est-ce qu'on arrive à s'intéresser à ce genre de problème allez vous me demander ? Et bien simplement, j'ai eu besoin de modifier les paramètres du BIOS sur une machine d'un client qui se trouve chez un hébergeur. Et il est vrai que sans accès physique à la machine, on se trouve bien bête :).

Assez parlé, commençons l'activation de l'ipmi sur notre serveur. Il nous faut tout d'abord installer ipmitool :
# apt-get install ipmitool
Nous allons maintenant charger le module kernel ipmi :
# modprobe ipmi_si
# modprobe ipmi_devintf
# lsmod | grep ipmi
ipmi_devintf 13200 0
ipmi_si 43628 0
ipmi_msghandler 38520 2 ipmi_devintf,ipmi_si
Tout semble bon. Ajoutons maintenant le module au redémarrage :
# echo "ipmi_devintf" >> /etc/modules
# echo "ipmi_si" >> /etc/modules
Nous allons maintenant définir un utilisateur qui puisse se connecter à la console (nous utilisons ici l'id 8 pour l'utilisateur operator du fait que la société qui nous héberge utilise déjà les 7 premiers identifiants pour ses propres besoins) :
# ipmitool -U root user set name 8 operator
# ipmitool -U root user set password 8 operatorpass
# ipmitool -U root user enable 8
Nous allons maintenant essayer de nous connecter à la console :
ipmitool -I lanplus  -U operator -P operatorpass -H 10.10.10.10 sol activate
Malheureusement, nous allons nous retrouver bloquer puisque personne n'écoute. Néanmoins, si nous rebootons notre serveur, il nous permettra d'accéder au bios (le but de ce billet !). Un rapide coup de F2 au redémarrage et nous voyons apparaître l'écran suivant :



Activons ensuite le support Intel de virtualisation :


Il faudra ensuite arrêter électriquement la machine et la redémarrer à l'aide de l'interface Web de l'hébergeur.

Notre mission est terminée mais pourquoi s'arrêter en si bon chemin ? Nous allons ajouter la gestion de grub ainsi que celle de la console de Linux.

Pour la gestion de la console dans grub, il faut rajouter les lignes suivantes dans le fichier /boot/grub/menu.lst :
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=15 serial console
Et ensuite mettre à jour grub :
grub-install /dev/sda
Enfin, ajoutons le support du port série sur le kernel linux. Il faut pour cela ajouter console=tty0 console=ttyS0,9600n8 dans la ligne de démarrage du kernel. Exemple :
kernel          /vmlinuz-2.6.26-2-amd64 root=/dev/md1 ro quiet console=tty0 console=ttyS0,9600n8