「サーバ」カテゴリーアーカイブ

AWS Linux (CentOS 6) で PV を HVM に変換

数年前に AWS の EC2 で構築した CentOS 6 システムの話。 その CentOS 6 は準仮想化(PV) AMI であり、t2 や m4 など、コストパフォーマンスの高い現行世代のインスタンスにインスタンスタイプを変更できない。 そこで PV から HVM に変換しようと思い調べてみると、AWS に公式のドキュメントがあった。 しかし、そのとおりにやってもうまくいかなかったので、別の方法を考えた。

概要

AWS に記載の方法は、PV マシンのディスクを別の EC2 にアタッチして、新規に作成したディスクに dd で msdos パーティション 1 にコピーし、そのディスクにブートローダーをインストールする、ということだ。 しかし、そもそも、元のイメージがマーケットプレースのイメージから起動したものの場合、別の EC2 インスタンスにマウントできない。インスタンスへの Amazon EBS ボリュームのアタッチにある、「ボリューム上に存在する AWS Marketplace コードをサブスクライブしている必要があります。」の条件を満たしていないためであろう。 代替手段として、起動させた PV イメージを、dump / restore を使って新しいディスクにコピーし、その新しいディスクを別の EC2 インスタンスにマウントしてブートローダをインストールする。 新しく作る HVM インスタンスは、CentOS 6 の場合は、t3 インスタンスだとブートローダのインストールに失敗するし、起動もしない。(centos.org 提供のものも起動しない)。t2 インスタンスであれば、ブートローダのインストールに成功し、起動も OK である。

(多少雑な)手順

1.PV インスタンスを起動する 2.新規にボリュームを生成し、PV インスタンスにアタッチする。 3.lsblk などでデバイスファイル名を確認する。(/dev/xvdg など) 4.以下を実行する。(デバイスファイル名は、読者の環境に合わせること)
parted /dev/xvdf --script 'mklabel msdos mkpart primary 1M -1s print quit'
partprobe /dev/xvdf
udevadm settle
mkfs -t ext4 /dev/xvdf1
e2label /dev/xvdf1 /
mount /dev/xvdf1 /mnt
cd /mnt
dump 0uf - | restore rf -
cd /
umount /mnt
dump / restore は一般には single user mode で実行するとは思うが、できないので、不要なプロセスを止めて実行する。 5.ボリュームを PV インスタンスからデタッチする。 6.新規に EC2 インスタンスを起動する。Amazon Linux で t2.micro など。(CentOS なら Amazon Linux 2 でないほうがよいか) 7.ボリュームをアタッチする。 8.lsblk などでデバイスファイル名を確認する。(/dev/xvdf など) 9.以下を実行する。別の VPC でコピーした場合などは、/etc/resolv.conf を調整しておくこと。パッケージの取得に失敗する。
mount /dev/xvdf1 /mnt/ && mount -o bind /dev/ /mnt/dev && mount -o bind /sys /mnt/sys && mount -o bind /proc /mnt/proc
chroot /mnt
yum install grub -y
rm -f /boot/grub/*stage* /boot/grub/device.map
grub-install /dev/xvdf
cat <<EOF | grub --batch
device (hd0) /dev/xvdf
root (hd0,0)
setup (hd0)
EOF
10.vi で /etc/grub.conf を開いて編集。 root (hd0) を root (hd0,0) に、kernel 〜 の root=〜 を root=LABEL=/ に変更。 11.umount してインスタンスを一度停止
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt
shutdown -h now
12.HVM インスタンスのボリュームを両方デタッチする。 13.コピー先ボリュームをアタッチ。この時、デバイス名には、xvda を入力する。(いかにも指定できなさそうだが。) 14.インスタンスタイプを t2.medium に設定して再起動 (t3 では起動しない。m4 ではカーネルバージョンを上げないと起動はするが ssh ログインできない) 15.起動したら、yum update してカーネルを最新にする。/boot/grub/grub.conf の kernel、initrd には、/boot 下にある最新のものをセットする。 16.再起動
kernel バージョンによるのか、インスタンスタイプによっては動作しない。centos.org 提供の HVM イメージで動作しない(選択できない)ものは、おそらく動作しない。 結構罠が多かった。 ネット上の情報を元にトライしてみたがうまくいかなかった、という方がいるかどうかわからないが、お試しを。... 続きを読む

AWS を安く使う方法

ディープラーニングや、イーサリアムなどの暗号通貨などのアプリケーションとして、GPU をよく見かけるようになりました。 今さらながら、どのくらいの速度差があるのか見てみたいと思ったのですが、役に立つかどうかわからない GPU を買うのももったいない感じです。 そんな時は AWS だと思うのですが、それなりのお値段だと思います。 例えば、g2.2xlarge を見てみると、オンデマンド価格は $0.65/h です。ですが、スポットインスタンスであれば、例えば、g2.2xlarge だと、今見てみると、$0.2077/h でした。一世代前の GPU なのかもしれませんが、かなりお得な感じがします。(1時間20円であれば、ほとんど電気代だなあ、と。) g2 インスタンスは、AWSのページによると、NVIDIA GRID K520 を使っているらしいので、CUDAバージョンの表が役に立つかもしれません。 スポットインスタンスの使い方ですが、EC2 の画面の左側のメニューに、スポットリクエストというのがあります。 スポットインスタンスはシャットダウンしてしまうと、ディスクの内容は消えてしまう(停止メニューが押せなくなっている)ので、システムを構築した後、一旦スナップショットに保存してイメージにするか、直接イメージを作るか何かして、次に立ち上げる時のために保存しておく必要があります。基本的には、起動すると、何か計算しはじめて、適当なタイミングで消えてもらう、というアプリケーションに向いているかなと思います。 スポットインスタンスを作る最初の画面で、少し迷った点。 1ページ目、リクエストタイプの設定。 一時的に立ち上げるのであれば、「リクエスト」を選んでページの下のほうにある最高価格には、「自動入札を使用 (推奨)」を選べばよいのではないかと思います。システムを構築して、一定の価格以上は許容でない、というのであれば、最高価格は「最高価格を設定する (インスタンス時間当たり)」を設定しておけばよいかと思います。 2ページ目、リクエスト有効時間の設定。 いつ終了するかを決めることができるようですが、「期限切れによるインスタンスの削除」をチェックしておかないと、終了期限が来ても立ち上がったままなのでご注意を。 c3.large や、f1 インスタンスなどもお得なので、比較してみてください。... 続きを読む

pushd / popd / dirs

pushd ディレクトリ名
現在いるディレクトリをスタックに積んで、ディレクトリ名で指定したディレクトリに移動
popd
スタックの先頭のディレクトリに移動
dirs
スタックを表示
別のディレクトリで作業(環境変数の設定やコンフィグファイルの編集)をした後、元のディレクトリに戻りたいなどという場合に便利。 私は今でもよく使う。 詳しくはお使いのシェルのマニュアルページを見よう。 (man bashなど。man pushdでも見れるかもしれない。) ジョブコントロール機能も参考に。... 続きを読む

AWS の FPGA インスタンス(f1インスタンス)を使ってみる

AWS の FPGA の利用可能なインスタンス(f1)を使ってみたいと思ったが、何かに使えないとやる気が出ないので、(double)sha256 の高速化を目標にした。(bitcoinのminingに使えないのかと。) 何年か前に ASIC を作るプロジェクトに2年ほど携わったことがある程度の知識しかないので、専門用語等が間違っていてもご容赦を。 一時間あたり $1.65 なので、結構なお値段だ。 GPU か FPGA かどちらを使うべきか悩んだが、GPU は基本的には、浮動小数点演算を並列に実行するには向いていそうだが、ハッシュ処理に使われているシフトやバイトの入れ替えなどは FPGA のほうが向いていそうに思える。なんといっても、線をつなぎかえるだけなのだから。

AWS イメージ・開発環境

FPGA の HDK/SDK が搭載されているイメージは、AWS market place で、FPGA Developer AMI という名前で提供されている。FPGA を使わなければ、t2.medium などでも起動できそうだ。これなら料金を抑えられる。 インスタンスを立ち上げてみると、合成ツールとシミュレータは入っているようだった。また、ハードウェア開発キット(HDK) に一通りドキュメント、サンプルが揃っている。

実装・評価

FPGA インスタンスを使うにあたって、私の疑問点は、ホストとのインタフェースをどうするのか、というのと、ホストインタフェースを組み込んだ状態でシミュレーションできるのか、という点だ。 両方とも可能で、全て cl_hello_world に書かれている。このサンプル、本当に良く考えられていると思う反面、このサンプルが無ければ何もわからなかっただろう。

ホストインタフェース

cl_hello_world だが、ホストから適当な番地に書き込んだデータを読み出すことができるようなロジックになっているようだ。また、Virtual DIP SW/LED/JTAG などの機能もある。 このサンプルを使えば、特定の番地にデータを書き込み、読み出しすることが可能そうだ。

シミュレーション

ASIC とは違って書き換えは可能なものの、FPGA イメージを作るには時間がかかる。そのため、FPGA イメージを作っては試す、などといったことはできないし、どこが間違っているかもわからないだろう。シミュレーションで論理を検証することができるようになっており、FPGA イメージを作るほどの時間も必要ない。 さて、シミュレーションの方法だが、RTL Simulation for Verilog/VHDL Custom Logic Design with AWS HDK に記載がある。なんと、C言語でテストできる。私にとっては、かなり嬉しいし、敷居が下がった。また、実環境でのCソースも同様に用意されているので、流用できそうだ。( sha256 の RTL は Hardware implementation of the SHA-256 cryptographic hash function にあるので、cl_hello_world を適当に編集して、sha256 モジュールと接続すればよさそうだ。make C_TEST=test_hello_world で実行する。 ハッシュ化したいメッセージを適当な番地にセットし、実行開始フラグを立て、実行完了フラグが立っていたら、戻り値を適当な番地から読み出す、これができれば、FPGA で sha256 の計算をさせられそうだ。 試してみたところ、pythonで言うところの
hashlib.sha256(hashlib.sha256(1024bitのメッセージ).digest()).digest()
は、1回あたり、1.5us (666kHash/s)前後だった。sha256 は、64 回ループ+αで、二回実行しているので、桁的には、動作クロック/100程度だろうか。 シミューレーションのため、 /home/centos/src/project_data/aws-fpga/hdk/cl/examples/cl_hello_world/verif/scripts/top.vivado.f に追加したファイル(私の例ではsha256_core.vなど) を入れる必要がある。 ちなみに、ここまでで、丸々3日ほどかかってしまったが、ハードウェア設計・実装に精通していれば、もっと早いだろう。

合成

ファイルを追加したので、いくつか変更する必要があった。 /home/centos/src/project_data/aws-fpga/hdk/cl/examples/cl_hello_world/build/scripts の * encrypt.tcl の file copy 〜 とある箇所にファイルを追加 * synth_cl_hello_world.tcl を以下のように変更(追加したファイルが verilog だったから?)
read_verilog [glob $ENC_SRC_DIR/*.v]
read_verilog -sv [glob $ENC_SRC_DIR/*.sv]
./aws_build_dcp_from_cl.sh を実行するとメモリが足りないよ、と言われるので、-ignore_memory_requirement を付けて実行。 デフォルトはバックグラウンドで(nohupコマンドで)実行されるが、-foreground を付ければ、画面に表示されるので、screen などで端末が切断されても復活(screen -r)できるようにして実行。 4〜5時間かかった。 シミュレーションでは動作しても、実機上で同じ結果にならず、試行錯誤・・・

FPGA イメージの生成

How To Create an Amazon FPGA Image (AFI) From One of The CL Examples: Step-by-Step Guide のとおりに生成する。 ポイントは * S3 の設定で、AWS にアクセス権を与えること * IAM の設定で、EC2 full access か何かの権限を与えること (S3 のアクセスだけでは、create image が失敗した) かと思う。

FPGA へのロード・実行

アカウントの初期状態では、f1 インスタンスが使えないようになっているので、AWSに制限値を上げるよう申請する。 以下のリンクを参考にイメージを作ってロード。 (FPGAイメージの作り方〜ロードの方法)[https://github.com/aws/aws-fpga/tree/master/hdk/cl/examples#3-submit-the-design-checkpoint-to-aws-to-register-the-afi] software/runtime の下に実環境上で動作させるコードがあるので、参考に。

活用方法など

ホストとのやりとりが割と簡単なので、パターンの決まったロジックを10〜100倍にしたい時に有効な場合もあろう。(ただ、一ヶ月フルに回すと、12万ほどかかる計算なのでお気をつけて。) とりあえず、bitcoin daemon から「宿題」をもらって、nonce に相当する部分をブン回せば、当たりが出るかもしれないので試してみよう・・・(全部 C 言語で書くのは、さすがに面倒なので、FPGAを実行させて結果を読み出して表示するという簡単な機能のC言語プログラムを python から subprocess で呼び出すか。) それにしても、bitcoin の ASIC の性能は T Hash/s とのことで、どのように実現しているのか。個数を増やしているのではなく、パイプライン的にして、ほぼ 1 hash / clock でデータが出てくるようになっているのか。それでも数百MHash / s だろうし、想像できない数を並べているのだろうか。 レポートを見てみると、2%程度しか使っていなかったので、頑張れば、50個ぐらい詰め込めるのか?

参考

最初、GUI環境も整えたりしたが、結局は不要だった。 以下のようなソフトウェアとハードウェアの関係などにも目を通しておいたほうが理解が深まるかもしれない。 Happy a nice hacking on cl_hello_world!... 続きを読む

aws lambda

計算量の必要なロジックを AWS に計算させてはどうかと思った。 AWS Lambda を使えば、サーバを立ち上げなくても、ロジックの一部を切り出して実行させることができそうだ。HTTP で URL にパラメータを付けて GET すれば計算結果が返ってくる、といったことをやってみようと思う。

lamba 関数と API の作成

以下の手順で作成する。
  1. AWS Lambda のダッシュボードから関数を作成を選択。
  2. 設計図には、ブランク関数を選ぶ。
  3. トリガーに、API Gateway を選択。(HTTPで実行させたいため。)テスト用なので、セキュリティには、オープンを設定。 関数名を入力。
  4. ランタイムは、とりあえず、python 2.7 を選択。
  5. Lambda 関数のコードには以下のように記述。
def lambda_handler(event, context):
    # TODO implement
    return {"statusCode": 200, "body": "hello"}
もし、json データを返したいのであれば、
"body": '{"resp": "hello"}'
などのようにする必要がある。 あとは適当に入力して、関数の作成ボタンを押す。関数の作成に成功したら、トリガーに表示されている URL をクリックしてみよう。結果が表示されるはずだ。

トラブルシュートの方法

私は、最初、lambda 関数の作成時、デフォルトのコードで実行して少しハマってしまった。URL をクリックしても internal server error が返っていた。 以下のようにするとログが表示されるのでどこまで実行されているかわかる。ここに気づくのに時間がかかった。
  1. Amazon API Gateway サービス > API > リソース > 関数名 を選択
  2. メソッド名を選択(または ANY)
  3. テストを押す
  4. メソッド GET を選択
  5. テストボタンを押す
ログの最後のほうに、
Thu Apr 06 20:05:34 UTC 2017 : Execution failed due to configuration error: Malformed Lambda proxy response
とある。 lambda が返すべき書式が決まっているらしい。
{
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}
のような応答を返す必要がある。 ドキュメントを参照してほしい。

パラメータを渡して結果を得る

さて、query parameter でパラメータを渡して、結果を返してみたい。何をやろうとしているかバレバレであるが、lambda 関数を以下のように変えてみる。
import json

def lambda_handler(event, context):
    qs = event['queryStringParameters']
    result = {"result": qs['hash'] + qs['nonce']}
    # TODO implement
    return {"statusCode": 200, "body": json.dumps(result)}
URL?hash=1234&nonce=1234 などとすると、hashとnanceを結合した文字列が返る。 プログラミングモデル ハンドラーなどが参考になろう。 print すれば、cloudwatch のログに出力されるし、API Gateway からテストを実行すれば、実行状況も追うことができるだろう。 あとは、自由にロジックを入れてみよう。面白いサービスがあるものです。

追記:速度について

sha256 を二回計算させるロジックを AWS に置いてみたところ、10万回ループで、約6秒(=16k Hash/s)。threading でマルチスレッドにしても、計算時間はスレッド数に比例する感じ。(thread にしても意味がない) bitcoin の採掘に ASIC が必要というのがよくわかる。... 続きを読む

ssh

UNIX 系のマシンにリモートログインするのに必須のコマンド。 windows であれば、teraterm や、putty を使えば、SSH プロトコルでリモートログインできる。もしくは、cygwin や、mingw など、UNIX 環境をエミュレーションするようなソフトをインストールして、ssh コマンドを使ってリモートログインすることができる。
まず、前準備として、ssh-keygen で 公開鍵 / 秘密鍵のペアを作る。公開鍵をを、ログインするサーバの、~/.ssh/authorized_keys に追加する。 その後、ssh -i 秘密鍵 ユーザ@ホスト で接続する。
ログインだけでなく、このコマンドが便利なのは、ポートフォワード機能。三種類の転送方法がある。-L、-R、-D の三種類。それぞれ、ローカル、リモート、ダイナミック。 ローカルは、接続元の指定のポートへの着信が、ログインしているサーバから、指定したアドレス、ポートに発信される。一例としては、ファイアウォールの外側のサーバで、例えば、DB ポートなどをフィルタしていて直接接続できない時に、ローカルホストにポート転送して使う。 リモートは、ログインしているサーバの指定のポートへの着信が、接続元のサーバから、指定のアドレス、ポートに発信される。ファイアウォールの外側のホストから、ファイアウォールの内側のホストに通信したい時に使える。 ダイナミックは、接続元の指定のポートに着信した socks による着信が、ログインしているサーバから指定のアドレス、ポートに発信される。ファイアウォールで自由に外に出られない/サーバで接続するホストを絞っている、といった場合に使える。 詳しくは、man ssh を見てください。    ... 続きを読む

Windows server 2016 Datacenter default code page

AWS の Windows 2016 Datacenter を使ったところ、code page が日本語設定になっていなくて困った。 色々調べまくったところ、以下を設定するとよさそう。 コントロール パネル > 時計、言語、および地域 > 地域 管理タブを選択 Unicode 対応でないプログラムの言語欄のシステムロケールの変更ボタンを押す 日本語を選択 再起動  ... 続きを読む

AWS の t2 インスタンスとは

AWS の t2 インスタンスのクレジットの説明、要するに、ダンジョンマスターのマナみたいなものかと思う。 と言っても、ダンジョンマスターがわかる人が少ないか。他のロールプレイングゲームだとスタミナなどと表現されているように思います。 使えば減り、休めば増える。      ... 続きを読む

ファイルをファイル名で探す – find

find コマンドを使う。 例えば、今いるディレクトリ (. で表します) を検索 find . -name ‘hoge*’ -print もしくは、 find .  | grep ‘hoge*’ など。 ” でくくっとかないと、シェルが、カレントディクレクトリにある hoge* を探して、その結果を渡してしまって意図しない結果に。” でくくらず、hoge¥* や “hoge*” でもよい。 “” でくくった場合は、環境変数が展開されます。 例えば、echo “hoge$PATH” と echo ‘hoge$PATH’ の違いを見てみればわかると思います。
このコマンド、-exec オプションを使うと、見つけたファイルに対して、コマンドを実行させたり、ファイルを削除したりできます。 find . -name ¥*.bak -exec ls -l  {} ¥; ≈find . -name ¥*.bak -delete などのように使います。 前者の例では、{} に検索に一致したファイル名が入ります。
詳しい使い方については、 man find して、手始めに、/EXAMPLE[ENTER] してみてください。  ... 続きを読む

テキスト処理

テキストファイル(例えばログなど)の検索、編集などでよく使うコマンドを紹介したい。
cut コマンド
空白やタブなどで区切られた出力から指定した部分を切り出す
sort コマンド
ソートする
uniq コマンド
同一行を一行にまとめる。-c オプションをつければ同一行の数を出力する。入力はソートしておく必要がある。
sed / awk コマンド
入力の各行に指定のパターンを適用する。sed は行単位、aws はもう少し複雑なスクリプティングができる。

詳しくは、man コマンド名 でマニュアルを表示させ、EXAMPLE を検索しよう。... 続きを読む

パイプ(その2)

パイプのことを書いていて、別のコマンドを思いだした。 tee コマンドだ。 例えば、 tail -f /var/log/messages | tee log.txt | grep ERROR みたいな感じ。   log.txt に書きつつ、標準出力にも書く。(そしてパイプで接続したプログラムに処理させる)   分岐させるから、T だったかな?  ... 続きを読む

パイプ

始めてシェルを使った時、そして今でも画期的だと思えるのは、パイプの機能。 あるプログラムの出力を他のプログラムに簡単に渡すことができる。 例えば、 ps auxw | grep java ps はプロセスの一覧 grep は文字列の検索 プロセスの一覧から、java 文字列を検索する。当然、その後にまた処理をしたければ、パイプで渡す。 標準入力からデータをもらって、標準出力にデータを出力する。そして、標準出力と標準入力を接続するのがパイプ。 ちなみにエラーメッセージは渡したくないことが多々あるので、エラーメッセージは標準エラー出力に出力され、標準出力とは区別される。標準エラー出力を標準出力に無理矢理出力する方法もあて、/bin/sh ならば、2>&1 を付けるとよい。(2 は標準エラー出力の番号で、1は標準出力の番号) 小さなプログラムをつなげて使う、というのが元々の思想と聞いた記憶がある。less is more ということか。 はるか昔、こういったことが、UNIXマガジンや、UNIXプログラミング環境や、楽しい UNIX、BSD オペレーティングシステムなどといった本に載っていて、夢中になって試していました。本当に楽しい本だったと思う。もう無いのかな?... 続きを読む

HDDのデータを完全に削除するには

linux で shred コマンドを使う。(cd/dvd からブート可能な linux などで) 最近はディスクが SSD になっているので、あまり考えなくても良いのかもしれませんが、ハードディスクの場合、磁気の特性上、データを上書きするだけでは完全に消えません。 最初に暗号化しておくのがいいのかな、とは思います。   認識しなくなって、その中のデータに気になるものがあるようでしたら、HDD を取り出して五寸釘でも打ち込むか(結構固いです)、プロに任せるしかないかもしれませんね。... 続きを読む

CENTOS 6.6 でディスク容量やメモリ使用量を Cloudwatch で見られるようにする

Amazon CloudWatch モニタリングスクリプト が使えるかと思ったのですが、
私の力量不足なのか、CENTOS 6.6 ではインストールが一筋縄でいかず、断念…

同じようなものが、python で書かれていました。

cloudwatchmon

pip をインストールした後、
pip install cloudwatchmon すれば OK。
システムにインストールされるのが嫌ならば、virtualenv でも使えばよいのではないかと。

ちなみに、ソースは、cloudwatch にカスタムメトリックスを送信したい時に参考になると思います。

... 続きを読む

AWS IAM のロール

AWS の IAM にロールというのがあります。

ドキュメントを一読しただけではよくわかりませんでしたが、
例えば、ec2 サーバ全部に、cloudwatch を全て許可する、
といった場合にロールが便利です。

個別のユーザでも設定できるとは思うのですが、手間がかかるので。

... 続きを読む

AWS 上のサーバからインスタンスIDを取得する

AWS ドキュメント に載っています。

curl などで、
http://169.254.169.254/latest/meta-data/instance-id にアクセスすれば良いということですね。

python で取るなら、
import requests
resp = requests.get(‘http://169.254.169.254/latest/meta-data/instance-id’)
instance_id = resp.text

といったところでしょうか。

リージョンを取るには、
mport requests
resp = requests.get(‘http://169.254.169.254/latest/meta-data/placement/availability-zone’)
region = resp.text[:-1]
といったところでしょうか。(availability-zone の最後に a や c が付くので)

... 続きを読む

私が思う Unix 系最強のコマンド man

もう、20年ほど前になりますが、先輩に UNIX ワークステーション(本当のBSD)の使い方を聞いていました。先輩は忙しかったのか、man というコマンドを教えてくださいました。マニュアルを表示するコマンドですね。なんでも google 時代ですが、たまにはマニュアルを読みましょう。

使い方
man コマンド名
例:man find
もちろん、man man もありますよ。

man -k キーワード
例: man -k security

暇な時は、man -k キーワードで適当なキーワードを入れて man で知らないコマンドでも探して遊びましょう。私は、これを、ダンジョン man スターと呼んでます。w





... 続きを読む

Linux / FreeBSD サーバを VPS にバックアップ

VPS を Linux / FreeBSD サーバのバックアップ用のサーバとして使おうかと思いました。
dump 0uan -f – /dev/da0s1a | openssl enc -aes128 -pass pass:hogehoge | ssh backup@backupserver dd of=`hostname`.`date +%y%m%d`
のような感じで。

ただ、万一 backup アカウントにログインされて好き放題されてしまうのもどうかと思ったので、
ssh で backup アカウントの時に、例えば、/home/backupenv ディレクトリに chroot するようにしてはどうかと思いました。

sshd_config に以下のように設定しておけばよいですね。
Match User backup
        ChrootDirectory /home/backupenv


次に chroot 環境の構築方法。
man や FreeBSD Handbook にも詳細が書かれていないので若干足りないかもしれませんが・・・
仮想化の普及で廃れてしまったのか、基本的すぎて説明の必要もないのか。

dd だけ動けばよいので、
/bin /lib /libexec を /home/backupenv にコピーして
/etc/passwd /etc/groups を /home/backupenv/etc にコピーし、
/home/backupenv/etc/* については backup アカウント以外の行を削除。
ホームディレクトリも作成。

本当は、dd と dd が使っているライブラリだけを chroot 環境にコピーするべきか?

... 続きを読む

amazon ec2 を使ってみました

今さらですが,amazon ec2 を使ってみました。

とある WEB サイトを作って欲しいということで,必要な CPU パワーや,データのサイズが
わからず,ある物を売買するサイトを構築したいということだったので,amazon かなと思いまして。

(通常は,FreeBSD を使っているので) ssh の public key でログインしてプロンプトが出ても,どうすりゃいいんだ?と迷ってしまいましたが,xen 上の centos で,sudo で管理するんだなあ,と理解すれば,結構簡単。
http://www.centos.org/docs/5/html/5.2/Deployment_Guide/
のあたりのドキュメントを見ながらいじってました。

アメリカに置いているのに,結構ストレスなく動くなあ,と,感心してました。

... 続きを読む