Ubuntu

如何在啟動時自動啟動 s3ql 腳本?

  • April 5, 2013

我一直在 Ubuntu 10.04 上試驗s3ql,用它來掛載 Amazon S3 儲存桶。但是,我真的很想自動掛載它們。有誰知道這是怎麼做到的嗎?


解決方案:

感謝 s3ql 的Nikratio的幫助,我終於能夠在系統啟動時自動安裝 S3 儲存桶。您肯定會想看一下手冊,但這裡有一些基本的操作方法!

第一步是創建一個 authinfo 文件。該文件應放置在將要使用它的使用者主目錄中的 .s3ql 目錄中。authinfo 文件包含允許 s3ql 在不提示的情況下掛載儲存桶的登錄資訊。下面是您的 authinfo 文件應該是什麼樣子的範例。第一行包含您的 Amazon 安全憑證。第二個包含儲存桶的位置和密碼。如果需要,您可以向此文件添加多個儲存桶行,但我在此範例中僅使用一個。此時,桶密碼可以是任何東西。

backend s3 machine any login ASDFGHJKL password ZXCVBNM
storage-url s3://mybucket password mypassword

儲存桶名稱必須是唯一的。沒有兩個使用者可以擁有相同的儲存桶名稱,因此最好登錄 Amazon Web Services 並嘗試不同的名稱,直到找到可用的名稱。一旦你找到了,你需要刪除它,因為 s3ql 在創建你的 s3ql 文件系統時會重新創建它。如果儲存桶已存在,您將收到錯誤消息。

要創建文件系統,請使用以下命令:

mkfs.s3ql s3://mybucket

它將提示您輸入加密密碼。這應該與 authinfo 文件中的儲存桶密碼相同。

現在您的文件系統已創建,您可以使用以下命令掛載它:

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

當然,您的儲存桶名稱和掛載點會有所不同。

現在,如果我們想在啟動時自動掛載這個儲存桶,我們需要在 /etc/init.d 中添加一個 upstart 腳本。幸運的是,s3ql 附帶了一個 s3ql.conf。

我在 mount.s3ql 命令中添加了“–allow-other”,以允許 root 以外的使用者訪問掛載的儲存桶。

#
# 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 <Nikolaus@rath.org>"

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 儲存桶了,但我對我的初始測試的進展印象深刻。

此外,這個答案是在找到解決方案大約一周後寫的。我想我已經涵蓋了所有內容,但是如果您發現我錯過了一步,請告訴我,我會添加它。您還需要閱讀手冊,如果您打算使用 s3ql,它真的值得一讀。

使用 S3QL 中包含的 upstart 腳本,它s3ql.confcontrib/目錄中被呼叫。將其複製到/etc/init並將“開始”行更改為

start on (filesystem and net-device-up IFACE=eth0)

(更換eth0為您的網際網路連接的網路設備)。

我想你需要

sudo update-rc.d name_of_the_script 預設值

此外,您可能需要“chmod +x”腳本

引用自:https://serverfault.com/questions/220127