web-dev-qa-db-fra.com

Comment créer un système de fichiers s3ql et le monter automatiquement au démarrage?

J'ai déjà expérimenté s3ql sur Ubuntu 10.04, utilisé pour monter des compartiments Amazon S3. Cependant, j'aimerais vraiment qu'il soit monté automatiquement. Est-ce que quelqu'un sait comment faire ça?


Solution:

Grâce à l'aide de Nikratio de s3ql , je suis enfin capable de monter automatiquement des compartiments S3 au démarrage du système. Vous voudrez certainement regarder manuel , mais voici les bases de la procédure à suivre!

La première étape consiste à créer un fichier authinfo. Ce fichier doit être placé dans un répertoire .s3ql du répertoire de base de l'utilisateur qui l'utilisera. Le fichier authinfo contient les informations de connexion permettant à s3ql de monter des compartiments sans invite. Vous trouverez ci-dessous un exemple de ce à quoi votre fichier authinfo devrait ressembler. La première ligne contient vos informations d'identification Amazon Security. La seconde contient l’emplacement et le mot de passe de votre compartiment. Vous pouvez ajouter plusieurs lignes de compartiment à ce fichier si nécessaire, mais je n'en utilise qu'une dans cet exemple. À ce stade, le mot de passe du compartiment peut être n'importe quoi.

backend s3 machine any login YourAWSAccessKeyID password YourAWSSecretAccessKey
storage-url s3://mybucket password EncryptionPasswordOfYourChoosing

Le encryption_password_of_your_choosing est utilisé par S3QL pour chiffrer/déchiffrer toutes les écritures/lectures de fichiers à partir de S3.

Le nom de compartiment doit être unique dans l'ensemble d'AWS: aucun utilisateur ne peut avoir le même nom de compartiment. C'est donc une bonne idée de se connecter à Amazon Web Services et d'essayer différents noms jusqu'à ce que vous en trouviez un disponible. Un bon schéma de dénomination consiste à utiliser le nom du domaine + serveur sur lequel vous allez accéder au compartiment (par exemple, "staging.example.com" ou "east.coast.01.example.com", ou autre chose appropriée).

Pour créer le système de fichiers, utilisez la commande suivante:

mkfs.s3ql s3://mybucket

Il vous demandera votre mot de passe de cryptage. Cela devrait être identique au mot de passe du compartiment dans le fichier authinfo.

Maintenant que votre système de fichiers est créé, vous pouvez le monter en utilisant la commande suivante:

mount.s3ql s3://mybucket /mnt/s3/bucket

Bien entendu, le nom de votre compartiment et votre point de montage varieront.

Maintenant, si nous voulons monter ce compartiment automatiquement au démarrage, nous devons ajouter un script de mise à jour à/etc/init. Heureusement, s3ql est livré avec un, s3ql.conf.

J'ai ajouté "--allow-other" à la commande mount.s3ql pour permettre aux utilisateurs autres que root d'accéder au compartiment monté.

#
# This file can be placed in /etc/init. It defines an upstart job that
# takes care of mounting and unmounting an S3QL file system.
# 
description "S3QL Backup File System"
author      "Nikolaus Rath <[email protected]>"

start on (filesystem and net-device-up IFACE=eth0)
stop on runlevel [016]

env BUCKET="s3://mybucket"
env MOUNTPOINT="/mnt/s3/bucket"

expect stop

script
    # Redirect stdout and stderr into the system log
    DIR=$(mktemp -d)
    mkfifo "$DIR/LOG_FIFO"
    logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" &
    exec > "$DIR/LOG_FIFO"
    exec 2>&1
    rm -rf "$DIR"

    # Check and mount file system
    fsck.s3ql --batch "$BUCKET"
    exec mount.s3ql --upstart --allow-other "$BUCKET" "$MOUNTPOINT"
end script

pre-stop script
    umount.s3ql "$MOUNTPOINT"
end script

En théorie, après l’ajout de ce script, vous devriez pouvoir redémarrer votre système et le monter automatiquement, mais c’est là où j’ai eu des problèmes. Le mien n'était pas monté.

Mon problème était dû au fait qu'upstart exécutait le script en tant que root, mais que j'avais créé le système de fichiers en tant qu'autre utilisateur. Une fois que j'ai copié le répertoire .s3ql à partir du répertoire de base de l'utilisateur sur lequel j'avais été connecté/root, le problème a été résolu.

J'espère que cela aide quelqu'un d'autre là-bas. Bien que je n'utilise plus longtemps mon godet S3 monté, je suis impressionné par les résultats de mes premiers tests.

En outre, cette réponse a été écrite environ une semaine après la découverte de la solution. Je pense avoir tout couvert, mais si vous constatez que j'ai raté une étape, faites-le-moi savoir et je l'ajouterai. Vous aurez également envie de lire le manuel , sa lecture en vaut vraiment la peine si vous avez l'intention d'utiliser s3ql.

4
ks78

Avec l’aide de Nikratio, je peux enfin monter mon compartiment S3 automatiquement au démarrage. J'ai mis à jour ma question avec la solution.

1
ks78

Les installations modernes d’Ubuntu utilisent le système Upstart piloté par les événements pour une grande partie du processus de démarrage; Vous auriez un script dans/etc/init qui ressemblerait à ceci:

description     "S3FS"

start on (filesystem
        and net-device-up IFACE!=lo)
stop on runlevel[!2345]

console output
expect fork
respawn

script
    # Redirect stdout and stderr into the system log
    DIR=$(mktemp -d)
    mkfifo "$DIR/LOG_FIFO"
    logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" &
    exec > "$DIR/LOG_FIFO"
    exec 2>&1
    rm -rf "$DIR"

    modprobe Fuse
    fsck.s3ql --batch s3://mybucket
    exec mount.s3ql --allow-other s3://mybucket /mnt/s3fs
end script

Vous devrez effectuer des tests. Je ne sais pas comment la redirection de sortie pour la journalisation se comportera et vous devrez peut-être configurer un script post-arrêt pour démonter correctement le système de fichiers.

La documentation de départ est ici . Je n'ai pas encore trouvé de paquet basé sur Fuse qui l'utilise, mais je n'ai pas fait de recherche exhaustive.

Une alternative peut être de construire une entrée fstab pour le système de fichiers, de manière à laisser les entrées mountall s'occuper de le monter pour vous, mais je ne sais pas s'il existe un moyen de spécifier qu'un système de fichiers Fuse donné est dépendant du réseau.

0
John Morton