Ubuntu 10.04で s3ql を試し、それを使用してAmazon S3バケットをマウントしました。ただし、それらを自動的にマウントしたいです。誰もそれを行う方法を知っていますか?
解決策:
s3ql のNikratioの協力のおかげで、システムの起動時にS3バケットを自動的にマウントできるようになりました。 manual を見ることは間違いないでしょうが、それを行う方法の基本を以下に示します!
最初のステップは、authinfoファイルを作成することです。このファイルは、使用するユーザーのホームディレクトリ内の.s3qlディレクトリに配置する必要があります。 authinfoファイルには、s3qlがプロンプトなしでバケットをマウントできるようにするログイン情報が含まれています。以下は、authinfoファイルの外観の例です。最初の行には、Amazonセキュリティ認証情報が含まれています。 2番目には、バケットの場所とパスワードが含まれています。必要に応じてこのファイルに複数のバケットラインを追加できますが、この例では1つだけを使用しています。この時点で、バケットのパスワードは何でもかまいません。
backend s3 machine any login YourAWSAccessKeyID password YourAWSSecretAccessKey
storage-url s3://mybucket password EncryptionPasswordOfYourChoosing
encryption_password_of_your_choosing
は、S3QLがS3からのすべてのファイルの書き込み/読み取りを暗号化/復号化するために使用されます。
バケット名は、AWS全体で一意である必要があります。2人のユーザーが同じバケット名を持つことはできないため、Amazon Webサービスにログインして、使用可能な名前が見つかるまで別の名前を試すことをお勧めします。適切な命名スキームの1つは、バケットにアクセスするドメインとサーバーの名前を使用することです(つまり、「staging.example.com」または「east.coast.01.example.com」、または適切なもの)。
ファイルシステムを作成するには、次のコマンドを使用します。
mkfs.s3ql s3://mybucket
暗号化パスワードの入力を求められます。これは、authinfoファイルのバケットパスワードと同じである必要があります。
ファイルシステムが作成されたので、次のコマンドを使用してマウントできます。
mount.s3ql s3://mybucket /mnt/s3/bucket
もちろん、バケット名とマウントポイントは異なります。
起動時にこのバケットを自動的にマウントする場合は、/ etc/initにupstartスクリプトを追加する必要があります。幸いなことに、s3qlにはs3ql.confが含まれています。
「--allow-other」をmount.s3qlコマンドに追加して、ルート以外のユーザーがマウントされたバケットにアクセスできるようにしました。
#
# 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
このスクリプトを追加した後、理論的には再起動してバケットを自動的にマウントできるはずですが、これは私がトラブルに遭遇したことです。私はマウントされていませんでした。
私の問題は、upstartがrootとしてスクリプトを実行していたという事実が原因でしたが、別のユーザーとしてファイルシステムを作成していました。/rootとしてログインしたユーザーのホームディレクトリから.s3qlディレクトリをコピーすると、問題は解決しました。
これが他の誰かに役立つことを願っています。マウントされたS3バケットを長い間使用していませんが、最初のテストがどのように行われたかに感銘を受けました。
また、この回答は、解決策が見つかってから約1週間後に書かれました。私はすべてをカバーしたと思いますが、ステップを逃したことがわかった場合はお知らせください。追加します。また、 manual も読む必要があります。s3qlを使用する場合は、読む価値があります。
Nikratioの助けを借りて、ブート時にS3バケットを自動的にマウントできるようになりました。ソリューションで質問を更新しました。
最近のUbuntuのインストールでは、起動プロセスの大部分でイベント駆動型の起動システムを使用しているため、起動に移行するのが最善です。/etc/initに次のようなスクリプトがあります。
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
いくつかのテスト作業を行う必要があります。ログの出力リダイレクトがどのように動作するかわかりません。また、ポストストップスクリプトをセットアップしてファイルシステムを適切にアンマウントする必要があるかもしれません。
Upstartのドキュメントは here です。それを使用するFuseベースのパッケージはまだ見つかりませんでしたが、徹底的な検索は行いませんでした。
別の方法として、ファイルシステムのfstabエントリを作成し、mountallエントリを残してマウントの世話をすることもできますが、特定のFuseファイルシステムがネットワーク依存。