Installation et Configuration de TAHOE-LAFS » Historique » Version 7
Julien Aubé, 23/09/2011 16:12
1 | 6 | Julien Aubé | h1. Principe de TAHOE-LAFS |
---|---|---|---|
2 | 1 | Julien Aubé | |
3 | 6 | Julien Aubé | Le but de ce tutoriel est de déployer TAHOE-LAFS sur plusieurs machines. |
4 | 6 | Julien Aubé | |
5 | 6 | Julien Aubé | Ce système de fichier distribué écrit en python s'utilise comme un RAID logiciel: |
6 | 6 | Julien Aubé | Les données sont découpées et distribués sur les _nÅuds de stockage_. |
7 | 6 | Julien Aubé | |
8 | 7 | Julien Aubé | Les _nÅuds clients_ permettent d'ajouter, lire, écrire et supprimer des fichiers dans ce système. |
9 | 6 | Julien Aubé | |
10 | 7 | Julien Aubé | *Note:* Un nÅud de stockage peut être simultanément un nÅud client |
11 | 6 | Julien Aubé | |
12 | 6 | Julien Aubé | Enfin, il existe deux autres types de nÅuds: |
13 | 6 | Julien Aubé | |
14 | 6 | Julien Aubé | * Un _introducer_ qui constitue un point de rendez-vous entre tous les nÅuds participants (C'est donc aussi un SPOF). |
15 | 6 | Julien Aubé | Ce rôle est exclusif, mais rien n'empêche d'installer un nÅud client sur la même machine. |
16 | 6 | Julien Aubé | * Un ou plusieurs _helpers_, optionnels, qui prennent en charge à la place d'un nÅuds client l'ajout de fichiers dans |
17 | 6 | Julien Aubé | le système. C'est utile par exemple pour les nÅuds clients situés derrière une ligne ADSL, car l'ajout de fichiers |
18 | 6 | Julien Aubé | implique la réplication. Donc si il faut répliquer 3 fois les données, alors il faut les envoyer 3 fois: Vu la bande |
19 | 7 | Julien Aubé | passante d'upload d'une ligne ADSL ça peux devenir lourd. Un helper récupère donc ces données, et se chargent de les |
20 | 6 | Julien Aubé | distribuer sur les nÅuds de stockage. Il est donc intéressant qu'un helper soit aussi un nÅuds de stockage, et qu'il |
21 | 6 | Julien Aubé | soit sur une ligne rapide. |
22 | 6 | Julien Aubé | |
23 | 6 | Julien Aubé | Le système TAHOE-LAFS ne respecte pas la sémantique POSIX, et défini plusieurs rôles pour l'accès aux fichiers, qui |
24 | 6 | Julien Aubé | se traduisent par des URL d'accès aux fichiers différents. |
25 | 6 | Julien Aubé | |
26 | 6 | Julien Aubé | Pour accéder au système de fichier, il est souhaitable qu'une machine ait installé et fasse tourner un |
27 | 6 | Julien Aubé | noeud. Néanmoins il est possible d'accéder à un nÅuds à distance, par l'interface Web ou par SSH. |
28 | 6 | Julien Aubé | |
29 | 6 | Julien Aubé | h2. Objectif |
30 | 6 | Julien Aubé | |
31 | 6 | Julien Aubé | Mon objectif a été de faire un système sécurisé avec lequel on puisse échanger des données de manière privés, mais |
32 | 6 | Julien Aubé | aussi de créer un système de backup privé, ou encore un système de stockage type "cloud" privé. |
33 | 6 | Julien Aubé | |
34 | 6 | Julien Aubé | *Note:* J'ai cherché à faire un montage type "JBOD", sans redondance donc, pour maximiser l'espace disque disponible. |
35 | 6 | Julien Aubé | |
36 | 6 | Julien Aubé | Pour manipuler les fichiers, TAHOE-LAFS dispose de plusieurs interface: |
37 | 6 | Julien Aubé | |
38 | 6 | Julien Aubé | * Ligne de commande _tahoe [...]_ |
39 | 6 | Julien Aubé | * Interface Web locale |
40 | 6 | Julien Aubé | * FTP/SFTP, utilisable en particulier avec sshfs. |
41 | 6 | Julien Aubé | |
42 | 6 | Julien Aubé | Dans un version future il est prévu que tahoe-lafs puisse automatiquement insérer dans le système de fichier |
43 | 6 | Julien Aubé | des fichiers qui sont ajoutés à un répertoire. |
44 | 6 | Julien Aubé | |
45 | 6 | Julien Aubé | Je ne décrirais pas tous les mécanismes possible mais seulement ceux que j'ai mis en Åuvre. |
46 | 6 | Julien Aubé | |
47 | 6 | Julien Aubé | h1. Installation et Configuration |
48 | 6 | Julien Aubé | |
49 | 1 | Julien Aubé | Cette page décrit comment monter un cluster Tahoe sur Debian, y compris en VM. |
50 | 1 | Julien Aubé | |
51 | 1 | Julien Aubé | h2. Distribution |
52 | 1 | Julien Aubé | |
53 | 1 | Julien Aubé | La distribution Debian/SID (testing) a packagé une version récente de Tahoe-LAFS. |
54 | 1 | Julien Aubé | |
55 | 1 | Julien Aubé | Sur une version stable (actuellement: Squeeze) , nous allons déclarer les packages SID en mode non prioritaires. |
56 | 1 | Julien Aubé | |
57 | 1 | Julien Aubé | Dans _/etc/apt/source.list_ il faut: |
58 | 1 | Julien Aubé | <pre> |
59 | 1 | Julien Aubé | deb http://ftp.fr.debian.org/debian squeeze main |
60 | 1 | Julien Aubé | deb http://ftp.fr.debian.org/debian sid main contrib non-free |
61 | 1 | Julien Aubé | deb http://security.debian.org/ sid/updates main contrib non-free |
62 | 1 | Julien Aubé | </pre> |
63 | 1 | Julien Aubé | |
64 | 1 | Julien Aubé | Dans _/etc/apt/preferences_ il faut: |
65 | 1 | Julien Aubé | <pre> |
66 | 1 | Julien Aubé | Package: * |
67 | 1 | Julien Aubé | Pin: release o=apt-build |
68 | 1 | Julien Aubé | Pin-Priority: 989 |
69 | 1 | Julien Aubé | |
70 | 1 | Julien Aubé | Package: * |
71 | 1 | Julien Aubé | Pin: release o=Debian,a=stable,l=Debian-Security |
72 | 1 | Julien Aubé | Pin-Priority: 987 |
73 | 1 | Julien Aubé | |
74 | 1 | Julien Aubé | Package: * |
75 | 1 | Julien Aubé | Pin: release o=Debian,a=stable,l=Debian |
76 | 1 | Julien Aubé | Pin-Priority: 985 |
77 | 1 | Julien Aubé | |
78 | 1 | Julien Aubé | Package: * |
79 | 1 | Julien Aubé | Pin: release o=Debian,a=testing,l=Debian-Security |
80 | 1 | Julien Aubé | Pin-Priority: 99 |
81 | 1 | Julien Aubé | |
82 | 1 | Julien Aubé | Package: * |
83 | 1 | Julien Aubé | Pin: release o=Debian,a=testing,l=Debian |
84 | 1 | Julien Aubé | Pin-Priority: 97 |
85 | 1 | Julien Aubé | </pre> |
86 | 1 | Julien Aubé | |
87 | 1 | Julien Aubé | Ensuite, appeler: |
88 | 1 | Julien Aubé | |
89 | 3 | Julien Aubé | <pre># ~> aptitude update</pre> |
90 | 1 | Julien Aubé | |
91 | 1 | Julien Aubé | h2. Installer Tahoe |
92 | 1 | Julien Aubé | |
93 | 1 | Julien Aubé | Il suffit de taper: |
94 | 3 | Julien Aubé | |
95 | 1 | Julien Aubé | <pre># ~> aptitude install python-twisted tahoe-lafs</pre> |
96 | 1 | Julien Aubé | |
97 | 1 | Julien Aubé | Pour vérifier, il faut taper: |
98 | 3 | Julien Aubé | |
99 | 1 | Julien Aubé | <pre># ~> tahoe --version</pre> |
100 | 4 | Julien Aubé | |
101 | 1 | Julien Aubé | La réponse devrait ressembler à : |
102 | 1 | Julien Aubé | <pre> |
103 | 1 | Julien Aubé | allmydata-tahoe: 1.8.3, |
104 | 1 | Julien Aubé | foolscap: 0.6.1, |
105 | 1 | Julien Aubé | pycryptopp: 0.5.29, |
106 | 1 | Julien Aubé | zfec: 1.4.5, |
107 | 1 | Julien Aubé | Twisted: 11.0.0, |
108 | 1 | Julien Aubé | Nevow: 0.10.0, |
109 | 1 | Julien Aubé | zope.interface: unknown, |
110 | 1 | Julien Aubé | python: 2.6.7, |
111 | 1 | Julien Aubé | platform: Linux-debian_6.0.2-x86_64-64bit_ELF, |
112 | 1 | Julien Aubé | pyOpenSSL: 0.13, |
113 | 1 | Julien Aubé | simplejson: 2.2.0, |
114 | 1 | Julien Aubé | pycrypto: 2.3, |
115 | 1 | Julien Aubé | pyasn1: unknown, |
116 | 1 | Julien Aubé | mock: 0.7.2, |
117 | 1 | Julien Aubé | sqlite3: 2.4.1 [sqlite 3.7.3], |
118 | 1 | Julien Aubé | setuptools: 0.6 [distribute] |
119 | 1 | Julien Aubé | |
120 | 1 | Julien Aubé | Warning: dependency twisted-web (version 11.0.0) found by pkg_resources not found by import. |
121 | 1 | Julien Aubé | Warning: dependency twisted-core (version 11.0.0) found by pkg_resources not found by import. |
122 | 1 | Julien Aubé | |
123 | 1 | Julien Aubé | For debugging purposes, the PYTHONPATH was |
124 | 1 | Julien Aubé | None |
125 | 1 | Julien Aubé | install_requires was |
126 | 1 | Julien Aubé | ['setuptools >= 0.6c6', 'zfec >= 1.1.0', 'simplejson >= 1.4', 'zope.interface', 'Twisted >= 2.4.0', 'foolscap[secure_connections] >= 0.6.1', 'Nevow >= 0.6.0', 'pycrypto == 2.0.1, == 2.1.0, >= 2.3', 'pyasn1 >= 0.0.8a', 'mock', 'pycryptopp >= 0.5.20'] |
127 | 1 | Julien Aubé | sys.path after importing pkg_resources was |
128 | 1 | Julien Aubé | /usr/bin: |
129 | 1 | Julien Aubé | /usr/lib/python2.6: |
130 | 1 | Julien Aubé | /usr/lib/python2.6/plat-linux2: |
131 | 1 | Julien Aubé | /usr/lib/python2.6/lib-tk: |
132 | 1 | Julien Aubé | /usr/lib/python2.6/lib-old: |
133 | 1 | Julien Aubé | /usr/lib/python2.6/lib-dynload: |
134 | 1 | Julien Aubé | /usr/local/lib/python2.6/dist-packages: |
135 | 1 | Julien Aubé | /usr/lib/python2.6/dist-packages: |
136 | 1 | Julien Aubé | /usr/lib/pymodules/python2.6 |
137 | 1 | Julien Aubé | </pre> |
138 | 5 | Laurent GUERBY | |
139 | 6 | Julien Aubé | *Attention:* S'assurer que la version est au moins 1.8.3 : Les version précédentes ont un problème de sécurité qui permet à un attaquant de supprimer des fichiers sans autorisation. |
140 | 1 | Julien Aubé | |
141 | 6 | Julien Aubé | h1. Déploiement |
142 | 6 | Julien Aubé | |
143 | 6 | Julien Aubé | J'ai voulu l'architecture suivante: |
144 | 6 | Julien Aubé | |
145 | 6 | Julien Aubé | - obinou.tetaneutral.net: Introducer (VPS) |
146 | 6 | Julien Aubé | - vps205: Stockage, 20Go (VPS) |
147 | 6 | Julien Aubé | - tavernier: Stockage, 100Go (chez moi, donc derrière une ADSL) |
148 | 6 | Julien Aubé | - baileys: Client (chez moi, machine à sauvegarder) |
149 | 6 | Julien Aubé | - obconseil.eu: Client (source de fichiers a partagé de manière privée) |
150 | 6 | Julien Aubé | |
151 | 6 | Julien Aubé | A venir: Un GuruplugServer à Tetaneutral (Stockage, 1.5 To) qui remplacera aussi obinou.tetaneutral.net. |
152 | 6 | Julien Aubé | |
153 | 6 | Julien Aubé | *Note:* Les commandes sont a faire en tant qu'utilisateur. Tahoe-Lafs n'a jamais besoin de tourner en tant que _root_. |
154 | 6 | Julien Aubé | |
155 | 6 | Julien Aubé | h2. Installation de l'introducer |
156 | 6 | Julien Aubé | |
157 | 6 | Julien Aubé | *Note:* Il est indispensable que l'introducer soit accessible en direct depuis tous les autres nÅuds. Dans le cas d'un système de fichier distribué sur Internet, il est donc nécessaire que soit l'introducer soit sur une machine publique, soit qu'une redirection de port soit mise en place. |
158 | 6 | Julien Aubé | |
159 | 6 | Julien Aubé | <pre> |
160 | 6 | Julien Aubé | ~ > mkdir .tahoe-introducer |
161 | 6 | Julien Aubé | ~ > tahoe create-introducer .tahoe-introducer |
162 | 6 | Julien Aubé | </pre> |
163 | 6 | Julien Aubé | |
164 | 6 | Julien Aubé | Ensuite il est possible d'éditer le fichier _~/.tahoe-introducer/tahoe.cfg_ et d'y modifier |
165 | 6 | Julien Aubé | |
166 | 6 | Julien Aubé | * Le nom de ce nÅud introducer, |
167 | 6 | Julien Aubé | * Le port d'écoute de l'interface web de monitoring de cet introducer. |
168 | 6 | Julien Aubé | |
169 | 6 | Julien Aubé | <pre> |
170 | 6 | Julien Aubé | [node] |
171 | 6 | Julien Aubé | nickname = obinou_tetaneutral_introducer |
172 | 6 | Julien Aubé | web.port = tcp:3457 |
173 | 6 | Julien Aubé | web.static = public_html |
174 | 6 | Julien Aubé | #tub.port = |
175 | 6 | Julien Aubé | #tub.location = |
176 | 6 | Julien Aubé | #log_gatherer.furl = |
177 | 6 | Julien Aubé | #timeout.keepalive = |
178 | 6 | Julien Aubé | #timeout.disconnect = |
179 | 6 | Julien Aubé | #ssh.port = 8022 |
180 | 6 | Julien Aubé | #ssh.authorized_keys_file = ~/.ssh/authorized_keys |
181 | 6 | Julien Aubé | </pre> |
182 | 6 | Julien Aubé | |
183 | 6 | Julien Aubé | *Note*: L'introducer est le seul nÅud sur lequel on peux savoir la liste des nÅuds connectés (stockage et clients), et d'autres |
184 | 6 | Julien Aubé | infos globales. Les autres nÅuds n'ont qu'une vision partielle du cluster. |
185 | 6 | Julien Aubé | Il est donc *critique* de ne PAS laisser accessible cette interface web, soit en la protégeant via un firewall, soit en la désactivant. |
186 | 6 | Julien Aubé | Pour cela il suffit de laisser la variable _web.port_ vide. |
187 | 6 | Julien Aubé | |
188 | 6 | Julien Aubé | *Note*: L'introducer n'est nécessaire qu'au démarrage du système et à l'ajout de nouveaux nÅuds. En fonctionnement, le système de fichier |
189 | 6 | Julien Aubé | distribué marche très bien sans lui. |
190 | 6 | Julien Aubé | |
191 | 6 | Julien Aubé | <pre> |
192 | 6 | Julien Aubé | ~ > tahoe start .tahoe-introducer |
193 | 6 | Julien Aubé | </pre> |
194 | 6 | Julien Aubé | |
195 | 7 | Julien Aubé | Ceci devrais créer le fichier *~/.tahoe-introducer/introducer.furl* . Il faut garder son contenu sous le coude, qui ressemble à : |
196 | 6 | Julien Aubé | <pre>pb://flsd4bklaabgk67smgzuhyd5h5yo3ndn@91.224.149.227:44190,127.0.0.1:44190/introducer</pre> |
197 | 6 | Julien Aubé | |
198 | 6 | Julien Aubé | h2. Création des nÅuds de stockage ou d'un nÅud client |
199 | 6 | Julien Aubé | |
200 | 6 | Julien Aubé | *Note:* Un tel nÅud peut être installé sur la même machine que l'introducer. |
201 | 6 | Julien Aubé | |
202 | 6 | Julien Aubé | <pre> |
203 | 6 | Julien Aubé | ~ > tahoe create-node |
204 | 6 | Julien Aubé | </pre> |
205 | 6 | Julien Aubé | |
206 | 6 | Julien Aubé | ou |
207 | 6 | Julien Aubé | |
208 | 6 | Julien Aubé | <pre> |
209 | 6 | Julien Aubé | ~ > tahoe create-client |
210 | 6 | Julien Aubé | </pre> |
211 | 6 | Julien Aubé | |
212 | 6 | Julien Aubé | selon le cas souhaité. |
213 | 6 | Julien Aubé | |
214 | 6 | Julien Aubé | Par défaut les fichiers sont créés dans _~/.tahoe_ |
215 | 6 | Julien Aubé | |
216 | 6 | Julien Aubé | Ensuite il est possible d'éditer le fichier _~/.tahoe/tahoe.cfg_ et d'y modifier |
217 | 6 | Julien Aubé | |
218 | 6 | Julien Aubé | * Le nom de ce nÅud de stockage, |
219 | 6 | Julien Aubé | * Le port d'écoute de l'interface web de monitoring/accès de ce nÅud. |
220 | 6 | Julien Aubé | * La spécification de l'introducer (contenu du fichier _~/.tahoe-introducer/introducer.furl_ comme ci-dessus) |
221 | 6 | Julien Aubé | * Le choix de savoir si ce nÅud est un Helper (En général oui si la machine est derrière une ligne avec un upload rapide) |
222 | 6 | Julien Aubé | * Le choix de savoir si ce nÅud doit utiliser un Helper (car un nÅud de stockage est aussi potentiellement client) |
223 | 6 | Julien Aubé | |
224 | 6 | Julien Aubé | <pre> |
225 | 6 | Julien Aubé | [node] |
226 | 6 | Julien Aubé | nickname = obinou_tavernier |
227 | 6 | Julien Aubé | web.port = tcp:3456:interface=127.0.0.1 |
228 | 6 | Julien Aubé | web.static = public_html |
229 | 6 | Julien Aubé | tub.port = tcp:8097 |
230 | 6 | Julien Aubé | tub.location = obconseil.pck.nerim.net:8097,192.168.1.100:8097,127.0.0.1:8097 |
231 | 6 | Julien Aubé | #log_gatherer.furl = |
232 | 6 | Julien Aubé | #timeout.keepalive = |
233 | 6 | Julien Aubé | #timeout.disconnect = |
234 | 6 | Julien Aubé | #ssh.port = tcp:8022 |
235 | 6 | Julien Aubé | #ssh.authorized_keys_file = ~/.ssh/authorized_keys |
236 | 6 | Julien Aubé | |
237 | 6 | Julien Aubé | [client] |
238 | 6 | Julien Aubé | # Which services should this client connect to? |
239 | 6 | Julien Aubé | introducer.furl = pb://flsd4bklaabgk67smgzuhyd5h5yo3ndn@91.224.149.227:44190,127.0.0.1:44190/introducer |
240 | 6 | Julien Aubé | helper.furl = pb://tkrtft5tj7qfa2zavoobtio3noqug6kt@87.238.175.129:41817,127.0.0.1:41817/5lsivzdkckjhg6iip4jfjfopegvkxzm2 |
241 | 6 | Julien Aubé | #key_generator.furl = |
242 | 6 | Julien Aubé | #stats_gatherer.furl = |
243 | 6 | Julien Aubé | |
244 | 6 | Julien Aubé | # What encoding parameters should this client use for uploads? |
245 | 6 | Julien Aubé | shares.needed = 1 |
246 | 6 | Julien Aubé | shares.happy = 1 |
247 | 6 | Julien Aubé | shares.total = 2 |
248 | 6 | Julien Aubé | |
249 | 6 | Julien Aubé | [storage] |
250 | 6 | Julien Aubé | # Shall this node provide storage service? |
251 | 6 | Julien Aubé | enabled = true |
252 | 6 | Julien Aubé | #readonly = |
253 | 6 | Julien Aubé | reserved_space = 100G |
254 | 6 | Julien Aubé | #expire.enabled = |
255 | 6 | Julien Aubé | #expire.mode = |
256 | 6 | Julien Aubé | |
257 | 6 | Julien Aubé | [helper] |
258 | 6 | Julien Aubé | # Shall this node run a helper service that clients can use? |
259 | 6 | Julien Aubé | enabled = false |
260 | 6 | Julien Aubé | |
261 | 6 | Julien Aubé | [sftpd] |
262 | 6 | Julien Aubé | enabled = true |
263 | 6 | Julien Aubé | port = tcp:8022:interface=127.0.0.1 |
264 | 6 | Julien Aubé | host_pubkey_file = private/ssh_host_rsa_key.pub |
265 | 6 | Julien Aubé | host_privkey_file = private/ssh_host_rsa_key |
266 | 6 | Julien Aubé | accounts.file = private/ftp.accounts |
267 | 6 | Julien Aubé | </pre> |
268 | 6 | Julien Aubé | |
269 | 6 | Julien Aubé | Valeurs importantes: |
270 | 6 | Julien Aubé | |
271 | 6 | Julien Aubé | * nickname: Le nom du nÅud |
272 | 6 | Julien Aubé | * web.port: Le port & l'interface de l'interface Web, qui est aussi une interface JSON |
273 | 6 | Julien Aubé | * tub.port , tub.location: Si le nÅud est derrière un NAT, il faut spécifier ici l'IP/nom public. Il faut aussi rediriger le port au niveau du routeur. |
274 | 6 | Julien Aubé | * ssh.port, ssh.authorized_key_file: Ceci créer une interface CLI directe (A mon avis redondant avec la commande tahoe [..] |
275 | 6 | Julien Aubé | * introducer.furl: La référence de l'Introducer |
276 | 6 | Julien Aubé | * helper.furl: La référence d'un Helper, si l'un est utilisé |
277 | 6 | Julien Aubé | * shares.needed: Nombre minimal de fragment de fichiers a générer. 1 veux dire "Tout le fichier". |
278 | 6 | Julien Aubé | * shares.happy: Nombre de fragment à disperser. 1 veux dire : Si 1 fragment est diffusé sur 1 noeud de stockage, l'ajout de ce fichier est un success. |
279 | 6 | Julien Aubé | * shares.total: Nombre maximal de fragment qui seront dispersé (redondance) |
280 | 6 | Julien Aubé | * [storage] enabled: Active la fonction "noeud de stockage". C'est la seule différence entre un noeud client & un noeud de stockage. |
281 | 1 | Julien Aubé | * reserved_space: Taille de l'espace de stockage alloué. |
282 | 7 | Julien Aubé | * [helper] enabled: A _True_ si ce noeud fait office de Helper (Ligne en upload rapide). Activer ce flag crée le fichier _~/.tahoe/private/helper.furl_ , dont le contenu ira dans la clé _helper.furl_ des nÅuds qui voudront utiliser ce helper. |
283 | 1 | Julien Aubé | * [sftpd] enabled: Active le service de loopback SFTP |
284 | 1 | Julien Aubé | * [sftpd] port,host_pubkey_file, host_privkey_file: Configuration du service SFTP |
285 | 1 | Julien Aubé | * [sftpd] accounts.file: Liste des user/password acceptés pour le service sftp. Ce ne sont PAS les comptes système ! |
286 | 7 | Julien Aubé | |
287 | 7 | Julien Aubé | |
288 | 7 | Julien Aubé | Une fois ceci fait, il suffit dâexécuter *tahoe start* pour lancer la connexion à l'introducer et donc au système distribué. |
289 | 7 | Julien Aubé | |
290 | 7 | Julien Aubé | h1. Utilisation |
291 | 7 | Julien Aubé | |
292 | 7 | Julien Aubé | |
293 | 6 | Julien Aubé | |
294 | 6 | Julien Aubé | h1. Liens divers |
295 | 5 | Laurent GUERBY | |
296 | 5 | Laurent GUERBY | * http://bigasterisk.com/tahoe-playground/ |
297 | 5 | Laurent GUERBY | * http://juralibre.net/~sebastien/wiki/doku.php?id=tahoe-lafs |