2014年3月15日土曜日

tmux起動時にsshで自動でログインしログイン後にコマンドを実行する方法 その2

前回、おんなじようなタイトルで起動時にsshできる方法をご紹介しました
今回はその第二弾となります

■スクリプト
#!/bin/sh
name="session_name"
password="Enter your password"
ip_list=(ip1 ip2 host1 host2)

tmux new-session -s ${name} -d

for i in ${ip_list[@]}
do
  tmux new-window -t ${name} -n ${i}
  tmux send-keys -t ${i}.0 "ssh ${i}" C-m
  sleep 5
  tmux send-keys -t ${i}.0 "${password}" C-m
  echo "ssh ${i}"
done

■説明
  • 今回は1つ以上、tmuxセッションがない状態でも実行できるスクリプトです
  • name に作成するセッション名を設定します
  • password にsshをするホストのパスワードを設定します
  • ケースとして同一パスワードを設定している複数ホストを想定しているのでパスワードが異なる複数のサーバの場合は修正が必要になります
  • forループを使用して ip_list で指定したIPアドレスまたはホストに対してパスワードのsshログインを順番に実行していきます
  • sshログインをするホストごとに新しいタブを作成します
  • 異なるパスワードの複数ホストに対応する方法としては ip_list の他に password_list という配列を作成してforループの中でpassword_listの中からも順次値を取得する感じにするのがいいと思います

2014年3月14日金曜日

This post is test article to blogger from stackEdit

テスト投稿

この記事はStackEditから投稿しているテスト記事です

背景

Bloggerの記事をHTMLで記載するのがめんどうになってのでmarkdownで投稿できる方法がないか調べたところStackEditというサービスから投稿できるようなので試してみた

所感

  • markdownで記載できるのは素晴らしいが投稿した記事を編集するときには結局HTMLを編集しなければならないので編集もmarkdownでできるといいと思った
    • postIDを指定して投稿するとstackEditからちゃんと記事の更新も行える
    • ただ更新するときにmarkdownを毎回stackEditで開かなければいけないのと毎回PublishOnで投稿しないといけないのが手間(気軽に更新できない)
    • 気軽に更新する場合は直接bloggerの記事一覧から編集してもいいかもしれない
    • markdownとblogger側のHTMLのデータの整合性を保つのが難しそう
  • 更新の手間を考慮すると初回投稿時はstackEditを使って更新は直接bloggerからでもいいかもしれない
  • そもそもbloggerがmarkdownをサポートするのが一番いい
  • 自分の場合はblogger側のスタイルシートが糞なのでmarkdownで書いた記事は文字が小さくかつ色合いもないので非常に残念な感じになってしまった
  • 投稿やGoogle Driveのインポートに時間のかかるときがあり投稿がすぐに行えないことがあった
  • 画像の挿入はできないとばかり思っていたがどうやらできるようで、stackEditの編集画面の直接画像をドラック&ドロップすればGoogle+と連携して画像をアップロードして挿入できる
  • stackEditからアップロードした画像はGoogle+のフォトに「Drop box」というアルバム名が作成されその配下で管理される
  • 画像のアップロードのGoogle+との連携はできているが投稿時のタイムラインに表示する連携ができていないようで、stackEditから投稿するとGoogle+上に表示されないのが残念

投稿手順メモ

  • 右上のファイルマークからNew Documentで新しいドキュメントを作成する
  • タイトルを記入する
  • 左ペインでマークダウン記法を使って記事を作成
  • 作成できたら左上の「#」から Publish On -> Blogger を選択
  • BlogURL を入力する
  • 記事の更新を行いたかったら記事のIDを入力する(記事のIDはpostIDと呼ばれ、bloggerの管理画面から記事の一覧でタイトルの上にカーソルを持って行くとリンク先のURLにpostIDが含まれている)
    • 更新するとタイトルを表示している部分にbloggerのアイコンがバシバシ追加されていく
    • 更新された分でだけアイコンが増えるので更新回数を確認することができる
  • OKを押すとGoogleアカウントへのアプリアクセス許可が出るのでOKを押下
  • 右上のタイトル部分にbloggerのアイコンが出てくれば投稿完了
  • 作成し終わった記事は保存する
  • 保存する場合はローカルにmarkdown形式やhtml形式で保存できる
  • 左上の「#」から Save as … とたどれば保存可能
  • またGoogle Driveとも連携しているので作成したmarkdownをGoogle Drive上に保存しておけば再度stackEditへのインポートするのもGoogle Driveから行うことができる
  • Google Driveへのインポート方法は同じく左上の「#」から SYNCHRONIZE -> GoogleDriveとすれば記事投稿と同じようにアプリ認証画面がでてきて許可すればGoogle Drive上に保存される

Written with StackEdit.

root権限がない場合にtmuxをインストールする方法

手順としては、まずtmuxのインストールに必要なパッケージをすべて自分のホームディレクトリ配下にソースインストールします
その上でtmuxをコンパイルするときにそれらを指定することでtmuxをインストールします

■環境
CentOS release 5.8 64bit
tmux 1.8

■手順
1. 事前準備
mkdir -p ~/bin/libevent
mkdir -p ~/bin/ncurses
mkdir -p ~/bin/tmux

2. libevent over 1.4.14 インストール
cd /var/tmp
wget https://github.com/downloads/libevent/libevent/libevent-1.4.14b-stable.tar.gz
tar zvxf libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
./configure --prefix=/home/kakakikikeke/bin/libevent
make
make install

3. ncursesインストール
cd /var/tmp
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.5.tar.gz
tar xvzf ncurses-5.5.tar.gz
cd ncurses-5.5
./configure --prefix=/home/kakakikikeke/bin/ncurses
make
make install
cd ~/bin/ncurses/include/ncurses && cp * ../

4. tmuxインストール
cd /var/tmp
wget http://downloads.sourceforge.net/project/tmux/tmux/tmux-1.8/tmux-1.8.tar.gz?r=http%3A%2F%2Ftmux.sourceforge.net%2F&ts=1379053410&use_mirror=jaist
tar xvzf tmux-1.8.tar.gz
cd tmux-1.8
./configure --prefix=/home/kakakikikeke/bin/tmux LDFLAGS="-L/home/kakakikikeke/bin/libevent/lib -L/home/kakakikikeke/bin/ncurses/lib/" CPPFLAGS="-I/home/kakakikikeke/bin/libevent/include -I/home/kakakikikeke/bin/ncurses/include"
make
make install

5. 起動確認
/home/kakakikikeke/bin/tmux/bin/tmux

で起動することを確認する
上記をPATHに追加したりPATHへの追加が無理ならばalias等に設定しておけばOK

■参考サイト

2014年3月12日水曜日

【Ubuntu】checkinstallを使って独自のdebファイルを作成してみた(ruby1.9.3編)

今回、1.9.3のdebファイル作成方法を紹介しますが
同じ方法で2.0.0もビルドできましたので、2系のdebファイルが必要な方もこれから紹介する方法で大丈夫です

■環境
Ubuntu 12.04
checkinstall 1.6.2
debuild 2.11

■checkinstall のインストール
・aptitudeの場合
aptitude update
aptitude install devscripts
aptitude install checkinstall
※aptitudeなら「aptitude」で起動して対話式でインストールすることも可能です

・apt-getの場合
apt-get update
apt-get install devscripts
apt-get install checkinstall

■ruby1.9.3ソースのファイルのダウンロード
wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p545.tar.gz
tar zvxf ruby-1.9.3-p545.tar.gz

■debパッケージの作成
cd ruby-1.9.3-p484
./configure
checkinstall

※checkinstall実行時にパッケージ情報(パッケージ名やバージョン、説明等)を編集できますので必要に合わせて修正してください
*****************************************
**** Debian package creation selected ***
*****************************************

This package will be built according to these values:

0 -  Maintainer: [ root@ubuntu ]
1 -  Summary: [ test ]
2 -  Name:    [ ruby-1.9.3 ]
3 -  Version: [ p484 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ ruby-1.9.3-p484 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ ruby-1.9.3 ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Enter a number to change any of them or press ENTER to continue:
変更が必要な番号を入力してその後で変更したい情報を入力すればOKです
編集を完了する場合はそのままEnterを押せば大丈夫です

■Tips
checkinstallで作成する他にrpmbuildと同じように「debuild」というコマンドがあります
debuildでdebファイルを作成する場合はソースの取得方法から若干ことなります
  1. apt-get source ruby
  2. apt-get build-dep ruby
  3. cd ruby-defaults-4.8
  4. debuild -uc -us -b
でビルドを開始することができます
checkinstallと違い対話的にパッケージの情報を変更することはできずや設定を変更する場合は
ruby-defaults-4.8/debian/rules
というファイルを変更する必要があります
rpmbuildで言うところのspecファイルに相当するものかと思います

デフォルトのrulesファイルはかなり複雑でdebuildで作成するとdebファイルも複数できてしまうので簡単に作成したくかつmakeでビルドできるのであればcheckinstallを使ったほうがいいと思います

'utime': No such file or directory
となってエラーになる場合には「--fstrans=no」をつけて再度実行してください> `utime': No such file or directory
rubyのインストールのよ> 'うに対話式に進めていく場合には上記のオプションが必要だそうです

2014年3月7日金曜日

Edge13でWindows7をリカバリしたときのメモ

■環境
Windows7 Home Premium 64bit
Lenovo Edge13 キーボード/104 CPU/Corei3 Memory/2GB HDD/250GB

■リカバリ方法
1. リカバリディスク作成
C:\Program Files (x86)\Lenovo\Factory Recovery\recovburncd.exe
を起動するとリカバリディスクを作成するためのウィザードが開きます
リカバリディスクを作成するためにはDVDが3枚必要です
  • 1枚がリカバリディスク
  • 2枚がデータディスク
です

特にディスクを作成する段階で問題になることはないと思います
ウィザードの手順にしたがって実行していけば問題ございません

また注意点としてリカバリディスクは一度しか作成することができないようなので作成後は大切に保管してください
(リカバリすれば再度作成できるようになります)
あとは当たり前ですがDVDをwriteできるドライブが必要です

2. リカバリ実施
ディスク作成後はドライブにリカバリディスクをセットした状態でWindowsを再起動するとリカバリが始まります
途中リカバリ時の言語を選択する部分がありますので日本語を設定します
また、リカバリの方法を2種類から選択します
  • 工場出荷時の状態に戻す(Biosの設定からすべて初期化する)
  • Cドライブをクリーンする(OSレベルで初期化する)
基本はOSレベルで初期化すれば問題ないです、今回自分もOSレベルでの初期化を実施しました

あとは画面の指示にしたがってリカバリしていけば大丈夫です
ディスクを入れ替える順番は
リカバリ -> データディスク1 -> データディスク2
の順番となります
全体の作業で特につまづくことがなければ2時間くらいで終了します

リカバリ完了後に簡単なWindowsの設定をします
(アクティベーションやPCの情報、キーボードの設定、言語の設定くらいで難しい設定は特にありませんでした)
完了したらドライブを取り外します
完了後は再起動が走るのでドライブを接続したままにするとまたリカバリが始まってしまいますので必ず外してください

■参考サイト

2014年3月4日火曜日

mongodbのsharding機能を使ってみた

■環境
CentOS 5.10 64bit
MongoDB 2.9.4

■MongoDBインストール
vim /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1
priority=1
yum clean all
yum -y install mongo-10gen mongo-10gen-server --disablerepo=\* --enablerepo=10gen

service mongod start
mongo
  でmongoコンソールが利用できることを確認する

service mongod stop
  確認ができたらshardingノードを立ち上げるため一旦停止しておく

■shardサーバの起動
mkdir /data/db/shard1/
mkdir /data/db/shard2/
mongod --shardsvr --port 27017 --dbpath /data/db/shard1/
mongod --shardsvr --port 27018 --dbpath /data/db/shard2/

「--shardsvr」オプションをつけてmongodプロセスを起動します
2つのshardサーバを異なるポートで立ち上げます
初回はデータを作成するので起動まで時間がかかります
「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です

■configサーバの起動
mkdir /data/db/config
mongod --configsvr --port 37017 --dbpath /data/db/config

shardingのメタ情報を保存しておくmogodプロセスです
shardsvr同様「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です

■mongosサーバの起動
mongos --configdb localhost:37017 --port 47017

「--configdb」オプションで先ほど起動したconfigサーバを指定します
shardsvr同様「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です

■起動プロセス確認
ここまでで起動したプロセスが以下のようになってれば問題ないです
root      6202  0.0  1.9 423840 39312 pts/6    Sl+  18:23   0:00 mongod --shardsvr --port 27017 --dbpath /data/db/shard1/
root      6227  0.0  1.8 421756 38720 pts/9    Sl+  18:23   0:00 mongod --shardsvr --port 27018 --dbpath /data/db/shard2/
root      6462  0.4  1.9 403340 40196 pts/8    Sl+  18:29   0:00 mongod --configsvr --dbpath /data/db/config --port 37017
root      6477  0.0  0.4 115524  9120 pts/5    Sl+  18:29   0:00 mongos --configdb localhost:37017 --port 47017

■sharding設定
mongosプロセス上に「admin」というコレクションが作成されていますので
adminコレクションに対して設定を追加していきます

mongo admin --port 47017
mongos> sh.addShard("localhost:27017");
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> sh.addShard("localhost:27018");
{ "shardAdded" : "shard0001", "ok" : 1 }
mongos> sh.status()
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "version" : 3,
        "minCompatibleVersion" : 3,
        "currentVersion" : 4,
        "clusterId" : ObjectId("53144b7514a80c8a98d45417")
}
  shards:
        {  "_id" : "shard0000",  "host" : "localhost:27017" }
        {  "_id" : "shard0001",  "host" : "localhost:27018" }
  databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
        {  "_id" : "test",  "partitioned" : false,  "primary" : "shard0000" }
        {  "_id" : "sharding_test",  "partitioned" : false,  "primary" : "shard0001" }

27017と27018をシャードとして追加しました

次にshard対象とするDBとコレクションとコレクションのキーを指定します
DBおよびコレクションは作成されていなくても問題ございません
mongos> sh.enableSharding("sharding_test");
{ "ok" : 1 }
mongos> sh.shardCollection("sharding_test.test_collection",{name:1});
{ "collectionsharded" : "sharding_test.test_collection", "ok" : 1 }
{ "ok" : 1 }
これでtest_collectionはshardingできるようになったので実際にデータを投入して確認してみます

■データ登録確認
mongo --port 47017
mongos> show dbs
admin   (empty)
config  0.046875GB
sharding_test   0.203125GB
作成したsharding_testデータベースがあることがわかります

データを登録してみます
mongos> use sharding_test
switched to db sharding_test
mongos> i = 0; while ( i < 100000 ) { db.test_collection.save({name:i}); i = i + 1}
100000
mongos> db.test_collection.find();
{ "_id" : ObjectId("531450466026cecc3ea4b71b"), "name" : 0 }
{ "_id" : ObjectId("531450466026cecc3ea4b71c"), "name" : 1 }
{ "_id" : ObjectId("531450466026cecc3ea4b71d"), "name" : 2 }
{ "_id" : ObjectId("531450466026cecc3ea4b71e"), "name" : 3 }
{ "_id" : ObjectId("531450466026cecc3ea4b71f"), "name" : 4 }
{ "_id" : ObjectId("531450466026cecc3ea4b720"), "name" : 5 }
{ "_id" : ObjectId("531450466026cecc3ea4b721"), "name" : 6 }
{ "_id" : ObjectId("531450466026cecc3ea4b722"), "name" : 7 }
{ "_id" : ObjectId("531450466026cecc3ea4b723"), "name" : 8 }
{ "_id" : ObjectId("531450466026cecc3ea4b724"), "name" : 9 }
{ "_id" : ObjectId("531450466026cecc3ea4b725"), "name" : 10 }
{ "_id" : ObjectId("531450466026cecc3ea4b726"), "name" : 11 }
{ "_id" : ObjectId("531450466026cecc3ea4b727"), "name" : 12 }
{ "_id" : ObjectId("531450466026cecc3ea4b728"), "name" : 13 }
{ "_id" : ObjectId("531450466026cecc3ea4b729"), "name" : 14 }
{ "_id" : ObjectId("531450466026cecc3ea4b72a"), "name" : 15 }
{ "_id" : ObjectId("531450466026cecc3ea4b72b"), "name" : 16 }
{ "_id" : ObjectId("531450466026cecc3ea4b72c"), "name" : 17 }
{ "_id" : ObjectId("531450466026cecc3ea4b72d"), "name" : 18 }
{ "_id" : ObjectId("531450466026cecc3ea4b72e"), "name" : 19 }
Type "it" for more

mongosやshardサーバのログを眺めているとそれらしきログが流れていることがわかるかと思います

27017と27018にログインして確認したところ今回は27018にすべてのデータが入っていました
27017にはDBとコレクションのみ作成されていました
10万件ほどではデータは分散されないようで続けてデータを登録し続けたら100万件あたりでデータの分散が発生しました
データ27017と27018にありますがmongosから見るとその合計の値を確認することができます

■Tips
shardサーバ、configサーバ、mongosサーバの停止はバックグラウンドで起動している場合はkillしてください
フォアグランドで実行している場合はCtrl+cで停止できます

とりあえず特定のコレクションに対してshardingさせるまではできました
まだ未調査な部分(チャンクやreplecaSetとの複合など)が多いので何かあれば追記していきます

■参考サイト

2014年3月2日日曜日

Windows7のタスクバーにEclipseを表示する方法

1. eclipse.iniの編集
ファイルの先頭に以下を追記します
-vm
C:\Program Files\Java\jre7\bin

2. eclipse.exeのショートカットを作成する
exeファイルを右クリックして「ショートカットの作成」をクリックします
作成できたショートファイルは適当に配置してください

3. 実行してタスクバーに表示する
ここでポイントとして
ショートカットファイルを右クリックして「開く」からeclipseを実行
してください
ダブルクリックから実行してタスクバーに表示しても2重で表示されてしまいますので右クリックから開くようにしてください

以上です、なんでこんなことをしなければいけないかはよくわかりません

P.S 20141023

それでもダメな場合はEclipse Marcketplaceを開いた状態から「タスクバーにこのプログラムを表示する」をクリックしてください
自分はそれで表示されるケースがありました
なぜ、これをやらなければいけないかは相変わらずわかりません