mountainduck (マウンテンダック) を使って S3 をマウントする【管理者編】
S3 をwindows や mac にマウントして簡単かつ高セキュリティでクラウドなNAS相当のものを構築したいと思います。
本編はAWS の設定など管理者向けの情報になっています。
mountainduck のインストール以降は【利用者編】 を参照ください。
S3 とは
S3 とは、AWS が提供するインターネット用のストレージサービスです。
【セキュリティが高く、ほとんどサービス停止しないのに、安い】という三拍子そろった製品です。
このS3 をNASの代わりに使おうと思います。
Linuxであれば s3fuse というオープンソースなソフトウェアがあるのですが
mac・windows はs3fs が未対応(mac は対応してるかも?) なので
別の製品を使って実現したいと思います。
商品比較
いくつか調べた結果、tntdrive と mountainduck を利用しているケースが多かったため、この2つを比較しました。
- | tntdrive | mountainduck |
---|---|---|
無料トライアル | 有り | あり |
課金体系 | 1PCごと(複数PC不許可) | 1ユーザごと(複数PC可能) |
価格 | $39.99 以上 | $39 以下 |
大量購入割引 | なし | あり |
対応OS | Windows Vista/2008/7/8/8.1/2012 R2/10 | Windows 8.1, OS X 10.11.6 |
windows 10 で試してみたかったのですが、期待も込めて
もろもろ良さそうなmountainduck を利用することにしました。
詳細な機能比較はこちらからどうぞです。
管理者向け設定
この項目は管理者向けの設定ですので、利用するだけであれば飛ばしてください。
S3 のバケット設定
S3 はバケットという大きなフォルダを最初に作るところから始まります。
S3 にアクセスします。左上の「create bucket」ボタンをクリックします。
こういう画面に成るので
バケット名 (ここだと cameong ) を入力し、「create」ボタンをクリックします。
バケットが作成されました。
次は、だれでもバケットの権限設定です。
閲覧・書込みを特定の人にしかしないように設定します。
バケットの権限設定
バケットポリシーの作成
ポリシーの作成 ページに移動し、左上の「Create Policy」ボタンをクリックします。
「Create Own Policy」を選択します。
ポリシーを以下のように作成します。
Policy Name: s3_cameong_rw_policy
Policy Document :
cameong
はご自身のバケット名に置き換えてください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::cameong" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::cameong" }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::cameong/*" } ] }
エラーが出た場合は、修正してから右下灰色の「Validate Policy」ボタンをクリックすると、正しいかどうかがわかります。
正常に作成できると、このようになります。
特定のバケットしか閲覧・書き込みできないグループを作成
特定のバケットだけ操作できるグループを作成します。
iam にアクセスし、左上青色の「Create New Group」ボタンをクリックします。
ここでは、グループ名を s3_cameong_rw とします。
ユーザ作成・グループに所属
こちらページに移動し、左上青色の「Add User」ボタンをクリックします。
ユーザ名 (ここでは s3_cameong_001)を入力し、「Programmatic Access」にチェックをいれ、「Next Permissions」をクリックします。
先程作成したグループを選択して
右下、「Next: Review」をクリックします。
内容に不備がなければ、右下「Create User」をクリックします。
「Download CSV」ボタンをクリックし、Access Key ID と Secret access key を入手します。 Access Key ID と Secret access key はとても重要なので、流出しないようにしてください。
これで、S3 側の設定は完了しました。次は利用者向けの設定を行います。
mountainduck (マウンテンダック) を使って S3 をマウントする【利用者編】
mountainduck を使ってS3 をマウントする
mountainduck を使ってS3 をマウントする。利用者編です。
AWSの設定などは【管理者編】 を参照ください。
mountainduck のインストール
まずmountainduck をインストールします。
公式HP からインストーラをダウンロードします。
ダウンロード完了後、インストーラーを起動するとインストールが開始されます。
ウィザードにしたがってインストールを行います。
mountainduck の起動・S3へのアクセス
インストール完了後、mountainduck を起動します。
といっても、自動的に起動しているはずです。
画面一番上のツールバーあるアヒルっぽいアイコンをクリックします。
アヒルのアイコンをクリックした後、ダイアログの「New Bookmark」をクリックします。
下図のように、それぞれ入力し、右下の「Connect」ボタンをクリックします。
フォームに情報を入力します。Access Key ID, Secret Access Key をそれぞれ入力し、「login」 をクリックします。
正常にログインできると、次のようにバケットが見えるようになります。
python 10分前が何分台か調べる
10分前は何分台なのか調べる
>>> from datetime import datetime, timedelta >>> from pytz import timezone >>> (datetime.now(timezone('UTC')) -timedelta(minutes=10)).strftime('%Y-%m-%dT%H:%M')[:-1] '2016-11-11T05:2' # 2016年11月11日5時20分台
レポジトリ内のファイルに含まれる文字列を全て置換するコマンド
特定の文字列を全て置換するコマンド
環境
- OSX (Yosemite)
他OSだとsed の引数の扱いが微妙に違うので、ご注意ください。Ubuntuなどで検証したら、更新します。
例
例では dir
ディレクトリに含まれる coincheck.jp
をcoincheck.com
に置換
% grep -irl coincheck.jp dir | xargs -I {} sed -i '' 's/coincheck.jp/coincheck.com/g' {}
結果
結果はgit diff とかで確認してください。
% git diff
参考
python3 でyyyymmddhhmmss形式をdatetime形式に変換する
python で byte 型のyyyymmddhhmmss形式をdatetime形式に変換します
native なdatetime形式
datetime パッケージを用いてdatetime型にします。
>>> from datetime import datetime >>> _time=b"20161229122800Z" >>> td = datetime.strptime( _time.decode('utf-8'), '%Y%m%d%H%M%SZ') >>> td datetime.datetime(2016, 12, 29, 12, 28)
これだとnative (UTCオンリー) となり、マルチリージョン対応が困難。
aware なdatetime形式
以下のようにして、aware な形式(オブジェクトの中にタイムゾーンの情報を思っている形式) にするにはpytz を用いる。
pytz は標準パッケージではないものの、準公式パッケージ相当の信頼性があるもよう。
// pytz のインストール % pip install pytz
awareなdateime形式を得る。
>>> from datetime import datetime >>> import pytz >>> _time=b"20161229122800Z" >>> td = datetime.strptime( _time.decode('utf-8'), '%Y%m%d%H%M%SZ').replace(tzinfo=pytz.utc) >>> td datetime.datetime(2016, 12, 29, 12, 28, tzinfo=<UTC>)
参考
systemd を利用してプロセスをデーモン化する
systemdを利用すれば、プロセスのデーモン化を簡単に行うことができます。
環境
- ubuntu 16.04
- ( systemd のシステムであれば使えるはず。)
- CentOS7 など
デーモン化前
次のようなコマンドをバックグラウンドで実行しているとします。
% cd /var/lib/nem/0.6.79/package/nis % java -Xms512M -Xmx1G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter > /var/log/nis.log 2>/var/log/nis.error.log &
これをsystemd でデーモン化します。
systemd でデーモン化する
systemd に必要なファイルを作成します。
/etc/systemd/system/nis-0.6.79.service
[Unit] Description=NIS After=syslog.target network.target [Service] Type=forking EnvironmentFile=-/etc/default/nis-0.6.79 WorkingDirectory=/var/lib/nem/ ExecStart=/usr/local/bin/nis-0.6.79-start.sh ExecStop=/usr/local/bin/nis-0.6.79-stop.sh User=nem Group=nem KillMode=none Restart = always [Install] WantedBy=multi-user.target
Restart = always
によって、プロセスが停止したら、自動的に再起動します。
ただ、この段階ではファイルが不足しているので動きません。
- /etc/default/nis-0.6.79
- /usr/local/bin/nis-0.6.79-start.sh
- /usr/local/bin/nis-0.6.79-stop.sh
必要なファイルを作成する
環境変数のためのファイルを作成しておきます。
/etc/default/nis-0.6.79
LOG="/var/log/nem/nis.log" ERROR_LOG="/var/log/nem/nis.error_log" RUN_DIR="/var/lib/nem/run/nem" LOCK_FILE=/var/lib/nem/nis.lock PID_FILE=/var/lib/nem/run/nem/nis-0.6.79.pid
このファイルに記載した変数はこのサービス内のスクリプトで利用することができます。
起動スクリプトや停止スクリプトで利用します。
起動スクリプトを作成
起動スクリプトを作成します。
/usr/local/bin/nis-0.6.79-start.sh
#!/bin/bash [ -d $RUN_DIR ] || mkdir -p ${RUN_DIR} cd /var/lib/nem/0.6.79/package/nis java -Xms512M -Xmx1G -cp ".:./*:../libs/*" org.nem.deploy.CommonStarter > $LOG 2>$ERROR_LOG & echo $! > ${PID_FILE}
実行権限・所有権を変更しておきます。
% sudo chown nem. /usr/local/bin/nis-0.6.79-start.sh % sudo chmod +x /usr/local/bin/nis-0.6.79-start.sh
停止スクリプトを作成
停止スクリプトを作成します。
/usr/local/bin/nis-0.6.79-stop.sh
#!/bin/bash [ -f ${PID_FILE} ] && kill -9 $(cat ${PID_FILE}) [ -f ${LOCK_FILE} ] && rm ${LOCK_FILE} [ -f ${PID_FILE} ] && rm ${PID_FILE}
実行権限・所有権を変更しておきます。
$ sudo chown nem. /usr/local/bin/nis-0.6.79-stop.sh $ sudo chmod +x /usr/local/bin/nis-0.6.79-stop.sh
Serviceとして認識されたか確認する
systemd にservice として認識されたか確認します。
% systemctl list-unit-files --type=service | grep nis nis-0.6.79.service disabled
ここに表示されたら、認識されていることがわかります。
もし表示されなかったら、なにかおかしいのでエラー文などを参考に修正してみてください。
サーバ起動時に自動起動する
サーバ起動時に自動起動するようにします。
# 自動起動on $ sudo systemctl enable nis-0.6.79 $ systemctl list-unit-files --type=service | grep nis nis-0.6.79.service enabled
起動 / 確認 / 停止
# 起動 $ sudo systemctl start nis-0.6.79 # 確認 $ sudo systemctl status nis-0.6.79 ● nis-0.6.79.service - NIS Loaded: loaded (/etc/systemd/system/nis-0.6.79.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2016-10-17 06:25:05 JST; 1 day 5h ago Process: 30714 ExecStop=/usr/local/bin/nis-0.6.79-stop.sh (code=exited, status=0/SUCCESS) Process: 30720 ExecStart=/usr/local/bin/nis-0.6.79-start.sh (code=exited, status=0/SUCCESS) Main PID: 13771 Tasks: 43 Memory: 1.1G CPU: 19min 49.692s CGroup: /system.slice/nis-0.6.79.service └─30721 java -Xms512M -Xmx1G -cp .:./*:../libs/* org.nem.deploy.CommonStarter # 起動 $ sudo systemctl stop nis-0.6.79
OSを再起動して、サービスが自動起動するか確認
もしサービスインする前でしたら、OS を再起動して、サービスが自動起動するか確認します。
# 再起動 $ reboot
起動していたらokです
# 確認 $ sudo systemctl status nis-0.6.79
以上です。
参考
djangoの管理者パスワードを再設定する
django の管理者パスワードを忘れてしまったときに、コマンドラインから再設定する方法の備忘録
stackoverflow によると幾つか方法が提案されているので主要な2つを紹介します。
環境
- django 1.9
方法
changepassword コマンドを使う方法
% manage.py changepassword USERNAME
django shell を利用する方法
標準のUserモデルを使っているときは次の通り。
from django.contrib.auth.models import User // superuser の一覧を取得する User.objects.filter(is_superuser=True) u = User.objects.get(username='your username') u.set_password('raw password') u.save()
独自のモデル(たとえば、CustomUser.models に MyUser クラスを作っているとする)を利用するときは次の通り
from CustomUser.models import MyUser as User usr = User.objects.get(username='your username') usr.set_password('raw password') from django.contrib.auth.models import User // superuser の一覧を取得する User.objects.filter(is_superuser=True) u = User.objects.get(username='your username') // パスワードリセット u.set_password('raw password') // 保存 u.save()
参考
Using the Django authentication system | Django documentation | Django