<!doctype linuxdoc system>
<!--
Linux ADSM Mini-Howto
Auteur: Thomas Koenig (Thomas.Koenig@ciw.uni-karlsruhe.de) 
Traduction: François Romieu (romieu@ensta.fr)
-->

<article>

<title>Linux ADSM Mini-Howto
<author>par Thomas K&ouml;nig, <tt/Thomas.Koenig@ciw.uni-karlsruhe.de/
<date>v, 15 Janvier 1997

<abstract> Ce document décrit l'installation et l'utilisation sur un poste de
travail Linux d'un client pour le système de sauvegarde commercial ADSM.

<toc>
<sect>Introduction
<p>
ADSM est un système de sauvegarde en réseau vendu par IBM que l'on retrouve 
dans de nombreuses organisations. Les programmes clients existent pour une 
large palette de systèmes&nbsp;: différents Unix, Windows, Novell,
Mac, Windows NT. Malheureusement, à la date de rédaction de ce
document, aucune version spécifique à Linux n'existe.
<p>
L'utilisation d'ADSM implique donc le recours au binaire SCO et à l'émulateur
iBCS2. Il est ici question d'ADSM v2r1.
<p>
A ce jour, je ne connais qu'une version fonctionnant sous Linux, et
uniquement sur plate-forme i386.

<sect>Installation du module iBCS 
<p>
Le module iBCS est disponible à l'adresse suivante&nbsp;:
<htmlurl name="ftp://tsx-11.mit.edu/pub/linux/BETA/ibcs2"
url="ftp://tsx-11.mit.edu/pub/linux/BETA/ibcs2">.  
[NdT&nbsp;: un miroir français 
<htmlurl name="ftp://ftp.lip6.fr/pub/linux/tsx-11/BETA/ibcs2"
url="ftp://ftp.lip6.fr/pub/linux/tsx-11/BETA/ibcs2"> ]
Si vous employez une version 1.2.13 du noyau, récupérez
<tt/ibcs-1.2-950721.tar.gz/, décompactez-le et appliquez les patches
<tt/ibcs-1.2-950808.patch1/ et <tt/ibcs-1.2-950828.patch2/.
Vous pouvez alors invoquer &dquot;<tt/make/&dquot; et insérer le module iBCS
via &dquot;<tt/insmod/&dquot;.
<p>
Pour un noyau 2.0, récupérez <tt/ibcs-2.0-960610.tar.gz/, décompressez-le dans 
un répertoire adéquat, allez dans ce répertoire et appliquez le patch 
ci-dessous&nbsp;:
<verb>

--- iBCSemul/ipc.c.orig Wed Jan 15 21:32:15 1997
+++ iBCSemul/ipc.c      Wed Jan 15 21:32:31 1997
@@ -212,7 +212,7 @@
        switch (command) {
                case U_SEMCTL:
                        cmd = ibcs_sem_trans(arg3);
-                       arg4 = (union semun *)get_syscall_parameter (regs, 4);
+                       arg4 = (union semun *)(((unsigned long *) regs->esp) + (5));
                        is_p = (struct ibcs_semid_ds *)get_fs_long(arg4->buf);
 #ifdef IBCS_TRACE
                        if ((ibcs_trace & TRACE_API) || ibcs_func_p->trace)
</verb>
Copiez ensuite <tt/CONFIG.i386/ en <tt/CONFIG/ et invoquez <tt/make/.
<p>
S'ils ne sont pas déjà présents, créez les périphériques requis en
exécutant&nbsp;:
<verb>
# cd /dev
# ln -s null XOR
# ln -s null X0R
# mknod socksys c 30 0
# mknod spx c 30 1
</verb>
<sect>Installation du client ADSM
<p>
Le binaire SCO est divisé en trois fichiers <tt/tar/. Positionnez-vous
à la racine de votre système de fichiers, vérifiez la valeur de umask et
décompactez-les en tant qu'utilisateur <tt/root/. Un script d'installation
apparaîtra dans votre répertoire <tt>/tmp</tt>. Invoquez-le.
<p>
Éditez ensuite <tt>/usr/adsm/dsm.sys</tt> et <tt>/usr/adsm/dsm.opt</tt>.
Certaines lignes du fichier <tt/dsm.sys/ requièrent une attention 
particulière&nbsp;:
<descrip>
<tag/Servername/le nom du serveur
<tag/TCPServeraddress/le nom complet du serveur (FQDN)
<tag/NODename/le nom de votre station
</descrip>
Vous préciserez dans le fichier <tt/dsm.opt/&nbsp;:
<descrip>
<tag/Server/comme précédemment
<tag/Followsymbolic/s'il faut suivre les liens symboliques (c'est rarement une
bonne idée)
<tag/SUbdir/faut-il sauvegarder les sous-répertoires&nbsp;? (généralement oui)
<tag/domain/le système de fichiers à archiver
</descrip>
<p>
Créez ensuite un fichier <tt>/etc/mnttab</tt> à la mode SCO à partir de votre
<tt>/etc/fstab</tt>. Le script Perl suivant, <tt/fstab2mnttab/, le fera pour
vous.
<tscreen>
<code>
#!/usr/bin/perl

$mnttab_struct = "a32 a32 I L";

open(MTAB, "/etc/mtab") || die "Impossible d'ouvrir /etc/mtab: $!\n";
open(MNTTAB, ">/etc/mnttab") || die "Impossible d'ouvrir /etc/mnttab: $!\n";

while(<MTAB>) {
    next if /pid/;
    chop;
    /^(\S*)\s(\S*)\s(\S*)\s.*$/;
    $device = $1;
    $mountpt = $2;
    $fstype = $3;
    if($fstype ne "nfs" && $fstype ne "proc") {
        $mnttab_rec =
            pack($mnttab_struct, $device, $mountpt, 0x9d2f, time());
        syswrite(MNTTAB, $mnttab_rec, 72);
        print "Entrée créée pour : $device $mountpt $fstype\n";
    }
}

close(MNTTAB);
exit 0;
</code>
</tscreen>
Le client ne réclame aucune bibliothèque dynamique&nbsp;: il est lié
statiquement.

<sect>Fonctionnement du client
<p>
Il existe deux clients. <tt/dsm/ propose une interface X11 tandis que <tt/dsmc/
reste en ligne de commande. Votre service informatique vous en dira davantage
à leur sujet. Un script de démarrage du style&nbsp;:
<verb>
dsmc schedule -quiet 2>&amp;1 >/dev/null &amp;
</verb>
s'avèrera vraisemblablement nécessaire.
<sect>Problèmes identifiés
<p>
SCO se révèle malheureusement incapable de supporter les noms de machines
dépassant les 8 caractères. Si le nom de votre machine dépasse cette limite ou
qu'il inclut le nom de domaine, vous devrez le préciser dans la ligne
<tt/NODename/ du <tt>/usr/adsm/dsm.sys</tt>.
<p>
Le recours à la variable DISPLAY requiert de la part de celle-ci qu'elle
comprenne le nom complet de votre machine, c'est à dire 
<tt/DISPLAY=maMachine.monDomaine:0/ au lieu de <tt/DISPLAY=maMachine:0/.
</article>