東京電力の電力状況をscreen のステータスに表示
最近の作業中は大抵裏でTurntable のAnimeOnly か Coding Soundtrack 辺りを流しながらTerminal で作業しています.そこではByobu 経由でscreen が起動しています.
ということで,何時も作業しているここに東京電力の電力状況を表示できると便利かもしれないと思って表示してみました.
@ssciさんが東京電力電力供給状況API を提供してくれているので,これを利用させてもらいます.
おかげでscript は数行でかけました.
#!/usr/bin/perl use strict; use warnings; use LWP::Simple; use JSON qw/encode_json decode_json/; my $data = decode_json(get('http://tepco-usage-api.appspot.com/latest.json')); printf "%02dH %.1f", $data->{hour}, ( $data->{usage} / $data->{capacity} * 100 + 0.05 ); print '%';
これを,screen から呼び出します.
以下,~/.screenrc に追記した部分です.
backtick 0 900 1 /home/mk/.byobu/bin/denryoku.pl caption always "%12`%?%-Lw%50L>%?%{=r}%n*%f %t%?(%u)%?%{-}%12`%?%+Lw%?%11` %=%12`%0` %110`%109`%122`%111`%10`%<"
#backtick のscript のpath に~/ を使ったら見てくれなくて少し嵌った.
backtick でID=0 で15分おきにscript を呼び出して,caption always で表示しています.caption always はbyobu のものをコピーして表示したい部分に %0` を書いています.0 部分はbacktick で指定したID です.
これで以下の様に表示されます.
分かりづらいですが,上の行のmk@x201s の左の22H 77.5% というのがそれです.
22H取得のデータで使用率77.5%のつもりですが一寸分かりづらいですね.良い表示方法はないかな….
クラウドのデータも暗号化してみる
- The Dropbox Blog » Blog Archive » Yesterday’s Authentication Bug
http://blog.dropbox.com/?p=821
- Dropboxに障害、正しいパスワードでなくてもアクセス可能な状態が約4時間続く -INTERNET Watch
http://internet.watch.impress.co.jp/docs/news/20110621_454760.html
- Dropboxでセキュリティ障害--一時的にパスワード不要のアクセス可能に - CNET Japan
http://japan.cnet.com/news/service/35004312/
- Dropbox、バグで他人の情報を閲覧し放題に ― 4時間弱 - モバイル・トゥデイ(Mobile Today)
http://mt.business.nifty.com/articles/4371.html
てことで,クラウドにデータを置くのが不安だという人も居ると思います.
で,以下のエントリを見かけました.
- TrueCryptでDropboxのデータを暗号化して利用する | Lifehacking.jp
http://lifehacking.jp/2011/06/truecrypt/
これはDropbox の中にTrueCrypt のボリュームを作るという方法のようです.しかし,この方法だと1バイトでも変更があるとTrueCrypt のボリューム全てを同期する必要があり色々ともったいないです.
#2つ目に紹介されているDMG を使う方法も同じ問題がある + 基本Mac でしか使えない.
EncFS という暗号ファイルシステムがあります.この暗号化ファイルシステムはファイル,ディレクトリ単位で暗号化を行います.そのため,Dropbox に使っても変更したファイルしか同期されないはずです.
残念ながらWindows は非対応ですが,Linux/MaxOS X/BSD/FreeBSD に対応しています.
#TrueCrypt はWidnows/MacOS X/Linux に対応.
以下に簡単にLinux(DebianSqueeze or Ubuntu11.04) での利用方法を説明します.
- 導入.
パッケージから導入を行います.
$ sudo apt-get install encfs
- fuse グループへ利用ユーザの登録
vigr コマンド等でfuse グループに利用ユーザを登録します.以下はmk アカウントを登録した例です.
$ sudo vigr $ grep ^fuse: /etc/group fuse:x:104:mk
- 暗号データの保存ディレクトリの作成.
Dropbox ディレクトリ内に暗号化データを格納するディレクトリを作成します.
$ mkdir ~/Dropbox/crypt
- マウントディレクトリの作成.
これは作らなくてもマウント時に自動作成可能です.
$ mkdir ~/enc-mount
- 暗号化環境作成(初回マウント)
初回マウント時に暗号化の質問を色々聞かれます.とりあえずp で規定値の設定になるります.#規定値でaes256/bs1024/ファイル名も暗号化.
x で暗号形式やブロックサイズ,ファイルディレクトリ名の暗号化などを設定可能です.
$ encfs ~/crypt ~/enc-mount 新しい暗号化ボリュームを作成します。 Please choose from one of the following options: enter "x" for expert configuration mode, enter "p" for pre-configured paranoia mode, anything else, or an empty line will select standard mode. ?> p Paranoia configuration selected. 設定が完了しました。以下のプロパティのファイルシステムが 作成されます: ファイルシステム暗号アルゴリズム: "ssl/aes", バージョン 3:0:2 Filename encoding: "nameio/block", version 3:0:1 鍵サイズ: 256 ビット ブロックサイズ : 1024 バイト (8 バイト MAC ヘッダ含む) Each file contains 8 byte header with unique IV data. Filenames encoded using IV chaining mode. File data IV is chained to filename IV. File holes passed through to ciphertext. -------------------------- 警告 -------------------------- The external initialization-vector chaining option has been enabled. This option disables the use of hard links on the filesystem. Without hard links, some programs may not work. The programs 'mutt' and 'procmail' are known to fail. For more information, please see the encfs mailing list. If you would like to choose another configuration setting, please press CTRL-C now to abort and start over. Now you will need to enter a password for your filesystem. You will need to remember this password, as there is absolutely no recovery mechanism. However, the password can be changed later using encfsctl. 新しい Encfs パスワード: Encfs パスワードの確認:
- アンマウント
$ fusermount -u ~/enc-mount
- 確認
暗号化ディレクトリを確認すると以下のような設定ファイルが作成されています.
~/crypt/.encfs6.xml
暗号形式やパスワードなどが記録されています.
-
- ファイルを作成してみる
マウント状態でファイルを作成してみます
$ echo "hoge" > ~/enc-mount/hoge $ ls -A ~/crypt/ .encfs6.xml BcG,iErj4ppq,iXaTnrvNrEn
hoge に対してBcG,iErj4ppq,iXaTnrvNrEn? というファイルが作られています.
中を確認してみます.
$ od -xc ~/crypt/BcG\,iErj4ppq\,iXaTnrvNrEn 0000000 84c1 5505 9b67 a495 f096 cbb9 6143 dddf 301 204 005 U g 233 225 244 226 360 271 313 C a 337 335 0000020 33e4 e945 00d4 344 3 E 351 324 0000025
謎のデータになっていました.
ファイルメーもデータも暗号化されているようです.
ということで,暗号領域が設定できました.
気になるところとしては,
- 設定情報も同期される.
- ファイル名も暗号化すると,暗号化時にファイル名帳が元より長くなるので利用できるファイル名長が規定値より短くなる.
- Windows で読む手段が今のところ無い.
といったところでしょうか.
この方法を使うと,ファイル同期サービスは大抵暗号化可能だと思います.
Evernote なんかはこの方法は使えません.
#Evernote は標準機能で一部分だけ暗号化は可能です.
##暗号化したい文字列を選択して右クリック->「選択肢た文字列を暗号化」一時的に同期を止めるなどして同期前に暗号化しておくといいでしょう.
- encfs - www
http://www.arg0.net/encfs
- EncFS | freshmeat.net
http://freshmeat.net/projects/encfs
- Linux/暗号化fs/EncFS - matoken's wiki.
http://hpv.cc/~maty/pukiwiki1/index.php?Linux%2F%B0%C5%B9%E6%B2%BDfs%2FEncFS
nilfs2 を試してみる
前から興味はあったけど実際運用したことのないnilfs2 をバックアップのバックアップだけど設定してみました.
環境はDebianSqueeze です.
導入
$ sudo apt-get install nilfs2-tools
ディスク初期化
$ sudo mkfs.nilfs2 /dev/vdb1 mkfs.nilfs2 ver 2.0 Start writing file system initial data to the device Blocksize:4096 Device:/dev/vdb1 Device Size:10736328704 File system initialization succeeded !!
マウント
$ sudo mount -t nilfs2 /dev/vdb1 /export/ mount.nilfs2: WARNING! - The NILFS on-disk format may change at any time. mount.nilfs2: WARNING! - Do not place critical data on a NILFS filesystem.
怖いメッセージが出ますね
恒久的なマウントの為にUUID 確認
$ sudo blkid /dev/vdb $ ls -l /dev/disk/by-uuid/ 合計 0 lrwxrwxrwx 1 root root 10 2011-06-16 03:26 a4ad2750-5207-4d1a-abdd-9680b5469780 -> ../../vda1
UUID が見当たらない….
未だサポートが行き届いていない状態のよう.普通に/dev/hoge なデバイス名で設定する.
/etc/fstab に以下を追記.
/dev/vdb1 /export nilfs2 noauto 0 0
念のため再起動して動作確認.
$ mount|grep /dev/vdb1 /dev/vdb1 on /export type nilfs2 (rw,gcpid=654)
チェックポイントの確認
$ lscp CNO DATE TIME MODE FLG NBLKINC ICNT 1 2011-06-10 01:52:47 cp - 11 3 2 2011-06-10 01:54:41 cp - 11 4 3 2011-06-10 02:00:11 cp - 1324 143 4 2011-06-10 02:00:17 cp - 4674 184
自動的にcp が作られている.
スナップショットを作成する
$ sudo mkcp -s
した後にlscp してみると,実行時のss が出来ている.
$ lscp|grep ss 42 2011-06-10 02:02:59 ss - 2878 816
cp はGC が自動的に削除します.削除タイミングは/etc/nilfs_cleanerd.conf のprotection_period の秒数の間は保護されます.
ss はGC では削除されません.
さて,スナップショットからの復元も試してみます.
まずはテストファイルを作成してスナップショットの作成.
$ mkdir test $ echo test > test/testdata $ cat test/testdata test $ sudo mkcp -s $ lscp | tail -2 9519 2011-06-17 00:59:57 ss - 25 585668 9520 2011-06-17 01:00:23 cp i 20 585668
削除してスナップショットをマウントして復元してみます.
$ rm test/testdata $ sudo mkdir /media/nilfs-ss $ sudo mount -t nilfs2 -o ro,cp=9519 /dev/sdc1 /media/nilfs-ss $ ls -l /media/nilfs-ss/test/testdata -rw-r--r-- 1 mk mk 5 2011-06-17 00:59 /media/nilfs-ss/test/testdata $ cat /media/nilfs-ss/test/testdata test $ cp -p /media/nilfs-ss/test/testdata test/ $ cat test/testdata test $ sudo umount /media/nilfs-ss
うまく行きました!
スナップショットは自動的に消えないので,ある程度のところで削除しないとディスクがいっぱいになってしまうので,古いものを削除してみます.
スナップショットの確認,
$ lscp|grep ss 42 2011-06-10 02:02:59 ss - 2878 816 9519 2011-06-17 00:59:57 ss - 25 585668 $ sudo rmcp 42 rmcp: 42: cannot remove snapshot To delete snapshot(s), change them into checkpoints with chcp command before removal.
スナップショットのままでは削除できないようです.一旦cp に変更して削除してみます.
$ sudo chcp cp 42 $ lscp |grep ss 9519 2011-06-17 00:59:57 ss - 25 585668 $ lscp |grep '42 2011-06-10 02:02:59' 42 2011-06-10 02:02:59 cp - 2878 816
cp になりました.頬っておいてもGC されると思いますが明示的に削除してみます.
$ sudo rmcp 42 $ lscp |grep '42 2011-06-10 02:02:59'
消えたようです.
最古のss をcp にするのは以下のような感じで行けそうな気がします.
# lscp | grep ss | head -1 | awk '{print $1}' | xargs chcp cp
先ずは,1日一回crontab でmkcp -s してみようと思います.
消すのは1月後くらいでいいかな…
追記)
そうそう,リサイズも来た様なのでこれも試してみたいとこです.
[PATCH 0/4] nilfs2 resize support -- Linux NILFS Development
http://www.spinics.net/lists/linux-nilfs/msg00869.html
NILFS|技
http://www.waza.jp/nilfs/
NILFS - Continuous Snapshotting Filesystem for Linux
http://www.nilfs.org/ja/index.html
[NILFS] What is NILFS?
http://www.nilfs.org/ja/about_nilfs.html
第 70 回 東京エリア Debian 勉強会 2010 年 11 月 -特集 : 俺のファイルシステムは熱いぜ!-
http://tokyodebian.alioth.debian.org/pdf/debianmeetingresume201011.pdf
Gyazo server を手元に立ててみる
@masuiさんが作成されて,恐ろしく便利なスクリーンショット共有ウェブサービスのGyazo ですが,誰でも見える場所に置かれるので仕事等では使いづらかったりします.
仕事であれば仕事場でしか見えないサーバにアップ出来れば良さそうってことでGyazo クローンを探してみると幾つか見つかりました.
GyazoサーバをMojolicious::Liteで書いた - アリ
http://d.hatena.ne.jp/akiym/20101124/p1GoogleAppEngineで動くGyazoクローンgaezooのソースをアップしました。 - a2c.get.diary
http://d.hatena.ne.jp/a2c/20091223/1261505344Webサーバ不要、40行程度のスクリプトひとつで動かせる Gyazoサーバー(クローン)を書いた - 今日もスミマセン。
http://d.hatena.ne.jp/snaka72/20090529/1243608579harajune/Gyazo - GitHub
https://github.com/harajune/Gyazo
Perl/Ruby/Python 色々あります.
未だ多少は判るPerl でってことで,GyazoサーバをMojolicious::Liteで書いた - アリ を試してみます.
環境はDebianSqueeze です.
先ずはsource を持ってきてファイルにします.
これを叩くと,port 3000 でデーモンが起動し,public ディレクトリが作成されます.この中にファイルが作られるようになります.
Gyazo クライアントを書き換えるか以下のようなコマンドラインを実行してアップロードを試してみます.
import png:- |curl --socks5 localhost:1080 -F imagedata=@- -F id=hoge -H "Expect:" http://192.168.122.198:3000/upload.cgi;echo $n
#このコマンドは@yuisekiさんのこちらのpost を参考にしました.
するとちゃんとサーバ上にファイルが作成されて閲覧も出来ました.
#ちなみに,公式Gyazo Client の最後の辺りでURL 記録するようにしておくと便利なことも.
とりあえず動くようになりましたが,再起動したら起動して来ないので自動起動するようにします.
/etc/init.d/gyazo として以下のようなファイルを用意します.凄い手抜きですね>
Baffalo LinkStation のディスクからデータを復旧
暫く前に,Baffalo のNAS Linkstation が起動しなくなったのでデータを復旧して欲しいと言われたときのメモが出てきました.
思いの外お手軽に復旧できたのでメモしておきます.
Linkstation は3.5吋HDD が2本入っていて,RAID0,1 が選べるタイプ.RAID1 にしていたそうなので,RAID がSoftRAID で片方でも読めれば復旧できるかなとUbuntu なマシンに繋いでみました.
繋ぐと認識しています.mdadm でポチポチやればいけるだろうけどうろ覚えでめんどいなーと思っていたのですが,そういえば「ディスク・ユーティリティ」というのがあったなと思って起動してみたらこれが当たりでGUI でポチポチやるだけでmount 迄出来ました.
ハードの関係でミラーの片側だけ接続の状態ですが,「状態:停止中です。デグレード状態でなら始めることが出来ます。」と言う表示.ここで「RAID アレイを開始(A)」を押します.
すると以下のような確認メーッセージが,「開始(S)」を押します.
デグレード状態(縮退状態のことですねきっと)となっていますがデバイスが出てきました.「ボリュームをマウント(M)」を押してマウントします.
後はバックアップするだけです.念のためmount -o remount,ro でリードオンリーにしてバックアップしました.
1本目は途中読み込みエラーとなったので2本目で同様に試すとこちらのディスクは生きていたらしく全てベリファイ含め全てのデータの取り出しができました.
#実際はマウントする前にdd で吸いだして吸いだしたイメージに対してloopback + ro mount して作業したほうがいいです.時間の問題で今回はro だけ.
ところで,このBuffalo のLinkStation の対応がひどくて修理に出すとディスク内容は消えるそうです.
FAQ になっています.
ハードディスクやフラッシュメモリーに保存してあるデータは修理で復旧できますか?
修理センターではデータ復旧やデータ吸出しの作業は行っておりません。
弊社では、ハードディスク・メモリカード等の記憶媒体は、検査・修理の過程において、
テストデータの書込みを行います。
そのため、お預かりしております製品内のデータは、消去されます。
(データに関しては保証の対象外となっております。詳しくはこちらをご覧下さい。
必要なデータは必ず事前にバックアップをお取りになった後に修理依頼をお願いいたします。
データ復旧をご希望のお客様は、リンク先の「データ復旧サービスのご案内」をご覧ください。
http://buffalo.jp/shuri/shuri_menu7.html#q2-3
「データ復旧サービスのご案内」とあるので有料とかで別途対応なのかなと思いきや
バッファローよりデータ復旧サービスの情報を紹介するページです。
バッファローからの紹介(本ページからお申込頂くこと)により、データ復旧ソフトご購入及び
データ復旧サービスが優待価格でご利用頂けます。
http://buffalo.jp/shuri/shuri_menu3-4.html
社外の会社紹介かorz
まあ,バックアップはちゃんと取りましょうってことですね….
件の場所では,NAS にUSB HDD 取り付けて自動バックアップを設定しておきました.両方壊れることはそうない筈筈….
ml のアーカイブscript
.forward とかalias で以下のscript を
"| exec /home/mk/koedo/arc.pl"
ml: "| exec /home/mk/koedo/arc.pl"
の様に指定して,STDIN からファイルに落とす.
X-Mail-Count をファイル名に.
X-Mail-Count がない場合はtime-$$ でファイルを別のディレクトリに作成.
#!/usr/bin/perl $ML_PATH="/home/mk/koedo/ml"; $ETC_PATH="/home/mk/koedo/etc"; while($line=<STDIN>){ if($line=~/^X-Mail-Count:/){ $mlno=(split(' ',$line))[1]; } @list=(@list, $line); } if($mlno){ $file = "$ML_PATH/$mlno"; }else{ $mlno=time(); $file = "$ETC_PATH/$mlno-$$"; } print"file : $file\n"; open my $fh, '>', $file or die qq/Can't open file "$file" : $!/; foreach(@list){ print $fh $_; } close $fh; chmod 0444, $file;
後で,IRC にSubject と参照URL 投げるようにする多分.
scp で中断したファイル転送をrsync --partial option でレジューム
scp で大きなファイルを転送中にWifi が切れて途中で失敗してしまいました.
wget -c みたいにファイル転送を途中からやり直せないかなと思って少し調べたらrsync に--partial というoption がるのに気づきました.
早速使ってみるとこんな感じでうまく行ったようです.
% rsync -vvve ssh --partial localfile remoteserver:/path/file --snip-- generate_files finished Transferred: sent 27356560, received 327608 bytes, in 212.8 seconds Bytes per second: sent 128579.3, received 1539.8 sent 27263249 bytes received 314261 bytes 129168.67 bytes/sec total size is 4294967296 speedup is 155.74 [sender] _exit_cleanup(code=0, file=main.c, line=1060): about to call exit(0)
これは便利かも.
追記)
`--partial' は,rsync 中断時に転送中のファイルを保持するオプションでした.(つけないと転送途中のファイルは消される.)
`--append' が,転送途中のファイルを再会させることのできるオプションのようです.
なので両方のオプションをつけるとOK です.
% rsync -vvve ssh --partial --append localfile remoteserver:/path/file