\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{dim. janv. 18 22:19:47 CET 2015}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={nbd-server.config},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Fichier de configuration pour ndb-server},
CreationDate={D:20150118221947},
ModDate={D:20150118221947},
Keywords={FileSystems;storages;nbd}
}}
\begin{document}
 
\begin{center}
{\Huge nbd-server.config }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Fichier de configuration pour ndb-server}
 
\vspace{10mm}
 
\vspace{1cm}{\huge Description }
 
\
 
\hspace{1mm}  Un en-tête de section est un nom unique qui est entre \textbf{[} et \textbf{]}, et dénote le début d'un section; une section continue jusqu'à ce qu'une autre section commence ou la fin du fichier. La première section doit s'appeler \textbf{generic} et est utilisée pour les option globales qui s'appliques à plus d'un export et doit toujours être présent. Chaque autre section maintient un export; les noms de ces section ne sont pas important excepté qu'ils doivent être unique.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Options pour la section generic }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} allowlist]{(bool,optionnel) permet au client de rechercher une liste d'exports depuis ce serveur. \textbf{nbd-client -l} permet d'avoir cette liste.}
\item[\hspace{1mm} group]{(string,optionnel) Le nom du groupe sous lequel le service fonctionne. Non spécifié le serveur ne tente pas de changer son GID.}
\item[\hspace{1mm} includedir]{(string,optionnel) Répertoire contenant les fichiers avec l'extension '.conf' qui contiennent d'autres directives de configuration. la section [generic] ne peut pas être dans un de ces fichiers.}
\item[\hspace{1mm} listenaddr]{(string,optionnel) Contient l'IP local sur laquelle le service écoute.}
\item[\hspace{1mm} oldstyle]{(bool,optionnel) à true, le serveur exporte tous les exports sur un port séparé. Dans ce cas, l'option port pour les exports individuels est mandatoire.}
\item[\hspace{1mm} port]{(string,optionnel) port d'écoute du serveur. Défaut: 10809.}
\item[\hspace{1mm} user]{(string,optionnel) le nom du l'utilisateur sous lequel le service fonctionne. Non spécifié le serveur ne tente pas de changer son UID.}
\end{description}
 
\vspace{1cm}{\huge Options pour les sections d'export }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} authfile]{(string,optionnel) Le nom du fichier d'autorisation pour cet export. Ce fichier devrait contenir une ligne par adresse IP, ou par réseau en notation CIDR. Si le fichier n'existe pas, tout le monde est autorisé à se connecter. Si le fichier existe mais vide, aucun client n'est autorisé à se connecter.}
\item[\hspace{1mm} copyonwrite]{(bool,optionnel) Spécifie si l'export est copy-on-write, qui n'écrit pas dans le fichier maître, mais dans un fichier séparé, qui est supprimé à la déconnexion.}
\item[\hspace{1mm} exportname]{(string,requis) le nom du fichier qui sera exporté. Doit être pleinement qualifié. Utilisé en conjonction avec \textbf{temporary}, spécifie un template pour le fichier temporaire concerné, et donc peut être utilisé pour contrôler le répertoire dans lequel il est créé.}
\item[\hspace{1mm} filesize]{(entier,optionnel) désactive l'autodétection de la taille du fichier ou du périphérique block. Doit être spécifié en octets. Si l'option \textbf{multifile} est présent, cette option spécifie la taille de tout l'export, pas les fichiers individuels.}
\item[\hspace{1mm} flush]{(bool,optionnel) à true, le serveur informe le client qu'il supporte et souhaite envoyer des requêtes flush quand la couche élévateur les reçois, ce qui cause un fdatasync() ou fsync() si l'option sync est présente dans le stockage. Cela augmente la fiabilité dans le cas des shutdown non propre au prix d'un dégradation des performances.}
\item[\hspace{1mm} fua]{(bool,optionnel) à true, le serveur informe le client qu'il supporte et souhaite envoyer des commandes fua (force specified commands) quand la couche élévateur les reçois, ce qui cause la commande spécifiée d'être synchronisée sur le stockage avec sync\_file\_range(), ou fdatasync(). Cela augmente la fiabilité dans le cas des shutdown non propre au prix d'un dégradation des performances.}
\item[\hspace{1mm} listenaddr]{(string,optionnel) Adresse IP d'écoute pour cet export, si ordstyle est spécifié dans la section generic}
\item[\hspace{1mm} maxconnections]{(entier,optionnel) Limite le nombre de connections ouverte pour cet export}
\item[\hspace{1mm} multifile]{(bool,optionnel) à true, le serveur recherche les fichiers sous la forme \textbf{exportname.integer}, où exportname est le nom du fichier, suivi d'un nombre unique commençant à 0.}
\item[\hspace{1mm} port]{(integer) requis si oldstyle est spécifié dans la section generic, pour d'écoute pour cet export.}
\item[\hspace{1mm} postrun]{(string,optionnel) si spécifié, assume que c'est une commande qui sera lancée quand un client sera déconnecté. Peut être utile pour nettoyer ce que \textbf{prerun} a définis, ou logger quelque chose. le code de sortie de postrun est ignoré.}
\item[\hspace{1mm} prerun]{(string,optionnel) si spécifié, cette commande sera exécutée après que le client se soit connecté au serveur, mais avant que le serveur commence à desservir . Si la commande contient \textbf{\%s}, cette chaîne sera remplacée par le nom du fichier qui est exporté. Si la commande se termine avec un status autre que 0, le serveur assume que l'export a échoué et refuse de le desservir.}
\item[\hspace{1mm} readonly]{(bool,optionnel) Quand cette option est activée, le serveur informe le client qu'il préférerai envoyer des requêtes dans l'order de l'élévateur. Seulement requis quand le serveur n'utilise par l'algorithme d'élévateur, ou cet algorithme est neutralisé.}
\item[\hspace{1mm} sdp]{(bool,optionnel) à true, le serveur utilise SDP ( Socket Direct Protocol) pour desservir l'export, au lieu de simplement l'IP. C'est plus rapide, mais nécessite un hardware spécial ( comme InfiniBand).}
\item[\hspace{1mm} sparse\_cow]{(bool,optionnel) à true, le serveur utilise les fichiers sparses pour implémenter l'option copy-on-write. De tels fichiers prennent moins d'espace qu'ils apparaissent, ce qui permet au serveur de manipuler des fichiers plus grands que n'est le périphériques block.}
\item[\hspace{1mm} sync]{(bool,optionnel) Quand cette option est activée, le serveur va appeler un fsync() après chaque écriture au backend. Cela augmente la fiabilité dans le cas des shutdown non propre au prix d'un dégradation des performances.}
\item[\hspace{1mm} temporary]{(bool,optionnel) Créé un export temporaire avec un nom basé sur le nom de l'export. L'export ne persistera par entre les invocations du serveur. Incompatible avec l'option \textbf{multifile}}
\item[\hspace{1mm} timeout]{(string,optionnel) Nombre de secondes qu'une connexion peut être en attente pour cet export. Quand une connexion attend trop longtemps, le serveur force la déconnexion. Désactivé à 0.}
\item[\hspace{1mm} transactionlog]{(string,optionnel) Si spécifié, ce chemin est utilisé pour générer un log de transaction. Ce log est un fichier binaire qui consiste de requêtes envoyés et des réponses reçus par le serveur, mais en excluant les données.}
\item[\hspace{1mm} trim]{(bool,optionnel) quand cette option est activée, le serveur annonce qu'il support la commande NBD\_CMD\_TRIM pour l'export, cette commande permet au serveur d'annuler la donnée du disque, mais ne l'oblige pas à le faire.}
\item[\hspace{1mm} virtstyle]{(string,optionnel) Définis le style de virtualisation. La virtualisation permet de créer un export qui va desservir un fichier différent en fonction de l'adresse IP qui se connecte. Quand la virtualisation est active, le paramètre exportname nécessite de contenir la chaine \textbf{\%s}, qui sera remplacé par l'adresse IP du client. Le résultat de cette transformation est utilisé comme nom de fichier à ouvrir. Il y a 4 type de virtualisation supportés:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} ipliteral]{\textbf{\%s} est remplacé par l'adresse IP du client. (ex: exporname = /export/\%s et le client est 192.168.1.100, le serveur tente de desservir /export/192.168.1.100; pour une IPv6, /export/2001:6f8:32f:0:0:0:0:39)}
\item[\hspace{6mm} iphash]{idem, mais remplace les point par des "/" ( ex /export/192/168/1/100 )}
\item[\hspace{6mm} cidrhash]{Nécessite d'ajouter un espace et un nombre après lui, qui sera utilisé comme masque réseau. (ex pour un cidrhash = 16, tente d'ouvrir /export/192.168.0.0/192.168.1.100).}
\end{description}
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Configuration simple: \\
\hspace{1mm} \textbf{[generic]} \\
\hspace{1mm} \textbf{[export]} \\
\hspace{1mm} \textbf{exportname = /export/blkdev} \\
\hspace{1mm} Pour plus de sécurité, on peut créer un fichier d'autorisation: \\
\hspace{1mm} \textbf{[generic]} \\
\hspace{1mm} \textbf{user = nbd} \\
\hspace{1mm} \textbf{group = nbd} \\
\hspace{1mm} \textbf{[export]} \\
\hspace{1mm} \textbf{exportname = /export/blkdev} \\
\hspace{1mm} \textbf{authfile = /etc/nbd-server/allow} \\
\hspace{1mm} Et le fichier /etc/nbd-server/allow: \\
\hspace{1mm} \textbf{127.0.0.1} \\
\hspace{1mm} \textbf{192.168.0.0/8} \\
\hspace{1mm} \textbf{192.168.1.1} \\
\hspace{1mm} Pour être compatible avec les anciens clients: \\
\hspace{1mm} \textbf{[generic]} \\
\hspace{1mm} \textbf{oldstyle = true} \\
\hspace{1mm} \textbf{[export]} \\
\hspace{1mm} \textbf{exportname = /export/blkdev} \\
\hspace{1mm} \textbf{port = 12345} \\
\end{flushleft}
\end{document}
