ほげり道
2009年10月20日
「CPU使用率を高めたい」
隣に座っている人に質問された。
何をやっているのか見てみると、whileループでechoさせていた。
▼例
while :; do echo asdfasdf; done
foregroundで実行しているではないか。
backgroundで複数実行する事を伝えてみたけど、伝わらなかった。
キーボードを拝借。
$ cat >>EOS < perf.sh #!/bin/sh while :; do echo asdfasdf; done EOS $ chmod +x pref.sh $ ./pref.sh &
いくつか実行したら95%くらいCPUを使うようになっていた。
forkしすぎに注意。
何事も程々に。
2009年05月28日
Gitを使い始めた
「Wakame」でGitを使い始めたのがきっかけ。
今までに実行したgitコマンド。
- git clone
- git add
- git diff
- git commit
- git status
- git log
- git checkout
- git branch
- git pull
- git push
タイミング良くWEB+DB PressにGit特集が載ってたので読んでみた。
分散管理の「ぶ」をちょっとだけ分かった気がする程度。
兎にも角にも、使い慣れるしかないと感じた。
本格的な戦いはこれからだ。
技術評論社
売り上げランキング: 1014
2009年05月21日
LDR 購読者数を XPath Graph で可視化するより
「刺身さん」に教えて頂いた「XPath Graph」。
刺身さんのアドバイス通りに設定してみた。
▼半袖blog 読者数(LDR)
今はまだ取得期間が少ない。
今後、増減すると面白い状態になるはず。
刺身さん、ありがとう!
2009年04月08日
怠惰の為の努力
例えば特定接続先ではユーザー名が違う
- 普段の作業環境では「hansode」
- 管理ポリシー等で別ユーザー名を指定される。「nagasode」
- 接続先専用秘密鍵がある
コマンドラインでオプション指定
$ ssh example.jp -l nagasode -i ~/.ssh/id_example.jp
毎回、オプション指定が面倒くさい。
さて、どうする。
ssh_configでオプション指定
$ whoami
hansode
$ cd $HOME/.ssh
$ vi config
----
Host example.jp
IdentityFile ~/.ssh/id_example.jp
User nagasode
----
一度ssh_configを設定しておけば、
次回以降作はホスト名指定だけで済む。
$ ssh example.jp
alias? ssh_confg?
コマンドラインオプション指定の手間を省くにはaliasを使う手もあるけど、
ログインシェルの設定ファイルに書く必要がある。
ssh_configを使うと、ログインシェルに非依存。
また、$HOME/.ssh/は700なのでオプションを覗かれる心配がなくなる。
さらに、psコマンドでもsshのオプションが見える心配はない。
sshの設定は、ssh_configがオススメ。
オライリー・ジャパン
売り上げランキング: 251479
2009年02月25日
ルートパーティションの容量増加しなくて良い
WindowsでWebアプリ開発環境に便利なcoLinux。
開発していくと、ディスク容量不足になりがちだ。
ディスク容量不足になる人が多々いる事は、検索してみると分かる。
その対応策は、どれもこれも「ルートパーティションの容量増加」。
ディスク容量不足になった自分も、その作業をしそうになった。
しかし、容量不足の要因を冷静に考えてみた。
- 容量が増えやすいポイントはどこなのか?
- パッケージによる圧迫はどれくらいなのか?
- 必要なポイントだけ増やせばいいのではないか?
自問自答。
必要とされているのは開発作業用ディレクトリ
日々成長し、膨れ上がって行くは開発用に使っているディレクトリ。
だったら、そこだけ増やせばいいじゃない。
- rootパーティションの容量不足対策
- 作業用パーティションを作成し、作業データを移動すればrootパーティションの使用率を減らせる
- rootパーティションはシステム領域に特化させる
作業記録
ディスクサイズ算出。
2Gもあれば十分だろう。
$ echo $((2 * 1024 * 1024 * 1024)) 2147483648
ディスクイメージ作成
C:\> cd "C:\Program Files" C:\> fsutil file createnew work_fs.img 2147483648
configにwork_fs.imgを追加
kernel=vmlinux cobd0="C:\Program Files\coLinux\root_fs_new.img" cobd1="C:\Program Files\coLinux\swap.img" cobd2="C:\Program Files\coLinux\work_fs.img" root=/dev/cobd0 ro initrd=initrd.gz mem=256 eth0=tuntap cofs0=C:\
coLinux起動後、マウントポイント作成
$ sudo -s # mkswap /dev/cobd1 # mkfs.ext3 /dev/cobd2 # mkdir /mnt/work_fs
/etc/fstab設定
# vi /etc/fstab # cat /etc/fstab proc /proc proc defaults 0 0 /dev/cobd0 / ext3 noatime,errors=remount-ro 0 1 /dev/cobd1 none swap sw 0 0 /dev/cobd2 /mnt/work_fs ext3 noatime,errors=remount-ro 0 1 cofs0 /mnt/windows cofs defaults 0 0
新しい領域を含めて再マウント
# mount -a
作業領域作成と引っ越し
# mkdir /mnt/work_fs/$(project) # mv /opt/$(project) /mnt/work_fs/.
symlinkを張って論理的に同じディレクトリ構造に直す
# ln -s /mnt/work_fs/$(project) /opt/$(project)
まとめ
- ルートパーティションはそんなに増えて行かないはず
- 作業ディレクトリやログが成長していく
- 必要な部分だけ増やせばいい
2008年11月11日
CodeReposにはとにかく色々な物が登録されている
その色々な物の中にはホームディレクトリにおける各種ドットファイルがある。
個人的には.emacsを管理する程度で、他のドットファイルはほぼ初期状態のまま。
最近ではcoLinuxやXenなどに一時的な開発環境を構築する時が多々ある。
その度にメイン作業環境の.emacsをコピーする。これの繰り返し。
CodeReposで.emacsを管理し始めたエントリを幾つかあった事を思い出した
「とりあえず」と言うレベルでコミット。
まだまだ整理の余地がある。
まともにEmacs-Lispを書いた事がないな。
勉強したい事が沢山ある。
オライリー・ジャパン
売り上げランキング: 70559
2008年10月08日
2008年09月28日
犯人はMicrosoft Office IME 2007
Office 2007をインストールすると、
何故かキーボード配列が日本語配列に戻ってしまった。
レジストリを確認してKBD106.DLLとなっている項目を探したら見つかった。
- regeditを起動
- 「\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\e0200411\Layout File」の値をKBD106.DLL から KBD101.DLへ変更
- システム再起動
発生する条件が良くわからないな。
2008年09月26日
コマンドラインで連番のファイル名を作る から派生
月次の処理をしたい場合があるはず。
- 一ヶ月分のファイル名を作る
- 年と月を指定可能にする
$ year=2008; mon=10; for i in $(LC_ALL=C cal $mon $year | egrep -v '[a-z]'); do printf "access_log.%04d%02d%02d\n" $year $mon $i; done access_log.20081001 access_log.20081002 access_log.20081003 access_log.20081004 access_log.20081005 access_log.20081006 access_log.20081007 access_log.20081008 access_log.20081009 access_log.20081010 access_log.20081011 access_log.20081012 access_log.20081013 access_log.20081014 access_log.20081015 access_log.20081016 access_log.20081017 access_log.20081018 access_log.20081019 access_log.20081020 access_log.20081021 access_log.20081022 access_log.20081023 access_log.20081024 access_log.20081025 access_log.20081026 access_log.20081027 access_log.20081028 access_log.20081029 access_log.20081030 access_log.20081031
分解して解説して行く
まずはcalコマンドの部分
$ year=2008; mon=10; LC_ALL=C cal $mon $year
October 2008
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
LC_ALL=Cとして居るのは日本語表示されると都合が悪いからだ。日本語だと「egrep -v '[a-z]'」で上手くフィルタ出来ない。
$ year=2008; mon=10; cal $mon $year | egrep -v '[a-z]'
10月 2008
日 月 火 水 木 金 土
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
こうなる。それに対し、LC_ALL=Cを入れると上手く行く。
$ year=2008; mon=10; LC_ALL=C cal $mon $year | egrep -v '[a-z]'
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
この通り。数字だけ抜き出せた。
次はforループ
forのリスト部分は、改行かスペースを区切り文字として扱ってくれる。
whileとreadの組み合わせでは都合が悪い。
cal+egrepの結果をforのリストにする。
$ year=2008; mon=10; for i in $(LC_ALL=C cal $mon $year | egrep -v '[a-z]'); do echo $i; done 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 311日ずつ出て来た。
ループ内のprintf
あとはechoをprintfに変え、$yearと$monを含めて出力する。
$ year=2008; mon=10; for i in $(LC_ALL=C cal $mon $year | egrep -v '[a-z]'); do printf "access_log.%04d%02d%02d\n" $year $mon $i; done access_log.20081001 access_log.20081002 access_log.20081003 access_log.20081004 access_log.20081005 access_log.20081006 access_log.20081007 access_log.20081008 access_log.20081009 access_log.20081010 access_log.20081011 access_log.20081012 access_log.20081013 access_log.20081014 access_log.20081015 access_log.20081016 access_log.20081017 access_log.20081018 access_log.20081019 access_log.20081020 access_log.20081021 access_log.20081022 access_log.20081023 access_log.20081024 access_log.20081025 access_log.20081026 access_log.20081027 access_log.20081028 access_log.20081029 access_log.20081030 access_log.20081031出来上がり。
まとめ
- calとegrepを組み合わせて日付リストを生成
- forの特性を生かしてリストを分解
- printfで出力を整形
ネタふりをしてみる。
2008年09月25日
刺身さんのエントリが気になった
[Perl]Perl で連番のファイル名を作るより
seq とか jot とか、どっちがどっちか覚えられないし、 "001.txt" "002.txt" みたいに頭にゼロをつけることができるかどうかもよくわからないので Perl でやったほうが楽だ。コマン道としては、こうかな。
printfコマンドを知っているかどうかがキモなのだと思う。
$ i=1; limit=13; while [ $i -le $limit ]; do j=$(printf "%03d" $i); echo access_log.200801$j; i=$(($i+1)); done access_log.200801001 access_log.200801002 access_log.200801003 access_log.200801004 access_log.200801005 access_log.200801006 access_log.200801007 access_log.200801008 access_log.200801009 access_log.200801010 access_log.200801011 access_log.200801012 access_log.200801013これは「access_log.$(printf "%03d" $i)」としても良い。
見づらいので上記例のようにした。
2008年06月03日
インストールは不要
webサーバのベンチマークを取得したくてabコマンドが必要となった。
- 対象サーバにはapache2がインストールされてない
- apache2のインストールは不要
- abコマンドだけ欲しい
- ビルドするサーバと同環境の他サーバでも実行可能状態としたい
$ wget httpd-2.x.x.tar.gz $ tar zxvf httpd-2.x.x.tar.gz $ cd httpd-2.x.x $ ./configure --enable-static-ab $ make $ ldd ./support/ab $ ./support/ab -hあとはabコマンドを他サーバへ配布するだけ。
オライリージャパン
売り上げランキング: 252
2008年05月15日
coderepos.orgで公開しよう
アカウントが発行されたらいくつか登録したい物がある。
さらして、叩かれて。
そして人は強くなる。
筋トレに近いものを感じる。
ところで
「CPAN」は「CPAN Author」であるように、
「coderepos」の人達の事をどうやって呼ぶのだろう。
これと言って特に無いのかな。
2008年03月14日
サーバの診断
whois.hansode.orgのリバースプロキシ用サーバが先日異常終了した。
その後、不安定なプロセスが多発。その場しのぎの対応を続けていた。
このままじゃ駄目だ。
色々と捜査してみたら、犯人を特定出来た。
犯人を逮捕した後、再起動…しようとした。
$ sudo shutdown -h now
あれ…立ち上がってこない?
あ・・・!!
haltとrebootで
リブートのつもりで、
shutdownコマンドを-hオプション指定で実行していたのだ。
超凡ミス。
サーバの目の前で作業をしていたのが、不幸中の幸い。
即時halt、即時rebootの場合は、
haltとrebootを使うのが良いね。
2008年02月24日
何故か起動に3〜4分かかる
ThinkPad T41にUbuntuをインストールした。
何故か起動に3〜4分かかっている。
ググってみたら同じ現象に遭遇している人を発見。
解決策を書いてくれたた。素晴しい。
ブートスプラッシュスクリーンの解像度を変更して黒い表示をなおそう!より
スクリーンの解像度問題だったようだ。
$ sudo vi /etc/usplash.conf xres=1024 yres=768
$ sudo update-initramfs -u -k all
起動が早くなった。
快適。
2008年02月15日
feed出力時にエラーが出てた
理由は「機種依存文字」が混入していたからだ。
使われていた機種依存文字は「数字」。
ゴリっと一撃一発置換で対応して完了。
影舞に限らず、機種依存文字は積極的に使わない事だ。
→ 影舞
2008年01月21日
2008年01月18日
月間レポートスクリプトを書く時などに使える。
$ export LC_ALL=C
$ year=2008; mon=1; for day in $(cal ${mon} ${year} | egrep -v '[a-z]'); do printf "%04d%02d%02d\n" ${year} ${mon} ${day}; done
20080101
20080102
20080103
20080104
20080105
20080106
20080107
20080108
20080109
20080110
20080111
20080112
20080113
20080114
20080115
20080116
20080117
20080118
20080119
20080120
20080121
20080122
20080123
20080124
20080125
20080126
20080127
20080128
20080129
20080130
20080131
絶対パス
$ cat abspath.sh #!/bin/sh echo $(cd $(dirname $0) && pwd)/$(basename $0)
$ ./pwd.sh /home/user/hansode/pwd.sh $ ../hansode/pwd.sh /home/user/hansode/pwd.sh $ /home/user/hansode/../hansode/pwd.sh /home/user/hansode/pwd.sh
使い所
「$(cd $(dirname $0) && pwd)」をウマク利用してファイルをインクルード。
$ cat abspath.sh
#!/bin/sh
absdir=$(cd $(dirname $0) && pwd)
. ${absdir}/../etc/common
command foo bar ...
プロジェクトディレクトリごと移動してもスクリプトは動くようになる。どのディレクトリに配置しても良い訳だ。自分はこれを良く使う。
2007年12月19日
おじいちゃんの血圧が高い
「おじいちゃんサーバ」のload averageが2.0前後をうろちょろしている。原因を調査してみると、estmasterがメモリを使いまくっている事が分かった。
物理メモリだけでなく、スワップもまた使っている。
おじいちゃんの記憶力
$ egrep '^MemTotal|^SwapTotal' /proc/meminfo MemTotal: 515732 kB SwapTotal: 995988 kB大分古いマシン。
2ヶ月前くらいにメモリを128Mから512Mへ増やした。
緊急オペ
キャッシュサイズを少なくすると改善しそうだ。昨夜、緊急オペをする事にした。
手術内容は下記の通り。
$ cd /var/lib/hyperestraier/estmaster/; pwd /var/lib/hyperestraier/estmaster $ sudo cp -pi _conf _conf.0 $ sudo vi _conf $ diff _conf.0 _conf 62c62,63 < scalepred: 2 --- > #scalepred: 2 > scalepred: 3 87c88,89 < cacheanum: 8192 --- > #cacheanum: 8192 > cacheanum: 4096 90c92,93 < cachetnum: 1024 --- > #cachetnum: 1024 > cachetnum: 512 93c96,97 < cachernum: 256 --- > #cachernum: 256 > cachernum: 128 $ sudo /etc/init.d/hyperestraier restart
手術後の経過
今朝の血圧を測ってみた。1.0以内で落ち着いている。手術成功だ!
老体にはキャッシュを少なくするのが良い様だ。
2007年12月11日
2007年10月02日
キーバインドが変更されていて<と>を多様していた事に気付いた。
多用していたがゆえに、戸惑いを覚えている…。
自分は毎日「cvs update」して最新版を取得している。
▼以前
・< Summaryモードの一行目 ・> Summaryモードの最終行
▼現在
・< Messageモードの行頭 ・> Messageモードの行末▼混乱時…
・Messageモードが80文字以上だと <と> の挙動に気付くけど、
・Messageモードが80文字以下だと <と> の挙動に気付かない。
『あれ…?何も起きないぞ?』
■対策
おとなしく、Emacsのキーバインドで対応するか。
直ぐに慣れるはずだ。
▼今後
・Esc-< ・Esc->Escはキーボードの隅っこで遠いので、
普段は「Ctrl-[」を愛用している。
2007年09月27日
2007年08月27日
理由は1つ。
半袖blogのページランクを確認してみたかったからだ。
インストール後、早速確認。
結果は…4/10
個人blogではこんなものなのだろう。
2007年07月23日
■特徴的な部分だけツマミ食い
▼レポート情報
・時間帯アクセスの増減を色の2次元マトリクスと色の濃厚で表現
・時間帯アクセス同様に、日別アクセスも色の濃厚で表現
▼Graphviz によるグラフ生成
・これは他に無い
▼リアルタイム集計
・『$ tail -f accesslog | visitors --stream ...』と言う事が可能
■足りない機能
・接続元の排他処理
・ここはegrep等でなんとかする
・URIの同一視
・/foo?args=1 と /foo?args=2 を同一視したい場合
・これもgrepやsedなどのフィルタでなんとかする
■まとめ
・足りない所はvisitorsのラッパーをシェルスクリプトで書く
・適材適所。臨機応変に解析ツールを使い分ける。
visitorsはまだ開発途中と言う所だろうか。
今後の機能追加に期待したい。
2007年07月21日
バックエンドの改良をした後、見える部分をカイゼンしてみた。
■概要:『検索中である事を見える化』
▼カイゼン前
・以前は検索中だと『...』を表示していた
・これだと検索中なのかがイマイチ分かり辛い
▼カイゼン方法
・Ajax Loading Gif Generatorでグルグル回るGifを生成
・検索中に表示していた『...』をグルグルGifへ変更
▼カイゼン後
・レスポンスタイムが短くなったわけではない
・検索中であることを見える化する事によりユーザーのストレス軽減
2007年07月04日
勢い余って yy と答えてしまったのに、ファイルが消えていた。
yeah!!!でもファイルは消えてくれた。
$ ls -l nagasode
ls: nagasode: そのようなファイルやディレクトリはありません
$ :&glt; nagasode
$ ls -l nagasode
-rw-r--r-- 1 hansode hansode 0 2007-07-04 14:52 nagasode
$ rm -i nagasode
rm: remove 通常の空ファイル `nagasode'? yeah!!!!!
$ ls -l nagasode
ls: nagasode: そのようなファイルやディレクトリはありません
このように、長袖は削除された。
2007年06月08日
▼env.
OS : Debian GNU/Linux 4.0
repos : debu
trac : /home/svn/tracs http://svn.example.com/trac/debu/
svn : /home/svn/repos http://svn.example.com/repos/debu/
▼subversion
# apt-get install subversion
# mkdir /home/svn
# cd /home/svn
# mkdir repos
# svnadmin create /home/svn/repos/debu
# chown -R www-data /home/svn/repos
▼trac
# apt-get install trac
# cd /home/svn
# mkdir tracs
# trac-admin /home/svn/tracs/debu initenv
# chown -R www-data /home/svn/tracs/debu
▼apache2, apache2-modules
# apt-get install apache2 libapache2-mod-fcgid libapache2-svn
# a2enmod fcgi rewrite
# /etc/init.d/apache2 force-reload
# htpasswd -c htpasswd $(username)
▼apache namevirtual
# cd /etc/apache2/sites-available
# cat > svn.example.com
--------------------------------------------------
<VirtualHost *>
ServerName svn.example.com
DocumentRoot /home/svn/tracs
Options -Indexes
RewriteEngine On
<IfModule mod_fcgid.c>
DefaultInitEnv TRAC_ENV_PARENT_DIR /home/svn/tracs
</IfModule>
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi
RedirectMatch ^/$ /trac/
<Location /repos>
DAV svn
SVNParentPath /home/svn/repos
</Location>
<Location />
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /home/svn/htpasswd
Require valid-user
Order Deny,Allow
Deny from All
Allow from 192.0.2.0/24
</Location>
</VirtualHost>
--------------------------------------------------
# /usr/sbin/a2ensite svn.example.com
# /usr/sbin/apache2ctl configtest
# /etc/init.d/apache2 reload
----------------------------------------------------------------------
2007年05月19日
▼スペック
HDD: 40G
CPU: PentiumIII 550MHz
Mem: 256M
Swap: 1024M
ガッツリと瞬時に処理させたいのに、老体には急な運動がキツイ。
老体とのやり取りをして数年。付き合い方は経験で分かって来る。
▼今回過負荷原因
spamd(SpamAssassin)
利便性、運用、ベイズDB管理を考慮し、spamd-rw,spamd-roとして
2つのspamdを立ち上げている。spamメールを4万通を学習させよう
としたら、著しくパフォーマンスが低下。
▼老体と上手く付き合う
・メールの登録処理には1通登録したら sleep 3 を入れる
・spamd-rwはniceを使って優先度を下げる。『nice -19』で落ち着いた。
・一度に大量のメールを登録しない。目安は100エントリ。その後にsleep 60。
・MRTGでサーバ負荷統計を定期的に観察
・時々spamcの処理中、無呼吸(spamd-rwが無反応)になるのでtimeout処理を入れる
▼老体を苛め過ぎると…
メモリ不足になる
↓
Swapを使い始める
↓
I/O負荷が急上昇
↓
パフォーマンス急低下
呼吸困難となり、意識レベルが低過ぎるお爺ちゃん。
▼まとめ
・急激な運動は避ける
・適度な休憩を入れる
自分の期待に応え続けるおじいちゃんサーバ、まだまだ頑張って下さい。
若者サーバとばかり接する人には関係の無い話。
こう言う窮屈な環境はチューニングを意識させられるので大事だ。
2007年04月25日
・鍵ファイルの命名規則は $(ユーザー名)-$(IPアドレス).pub
NATやDHCPだとcfagentが起動しているサーバは別なのに、
cfservdにはIPアドレスを同一視され、鍵が重複する可能性あり。
実際、この状況に遭遇している。
この状況を打開する方法が無いか、リファレンスを眺めていたら発見。
http://www.cfengine.org/docs/cfengine-Reference.htmlより
5.1.18 DynamicAddresses
Hosts which are included in this list are assumed to have
IP addresses which can change with time, e.g. hosts which
are given IP addresses by DHCP or a BOOTP like protocol.
control:
DynamicAddresses = ( 128.39.74.100-200 ) # DHCP range
If cfservd receives a connection from an IP address that is
in this list, and trustkey is true, the existing key for that
IP address can be replaced with a new key, and the old key is
recorded in a "used keys" list, access is granted. If trust is
switched off, the server looks in the "used key list" to see
if the key has been seen before. If not access is refused.
If it has been seen before – it uses this earlier trust to accept
the connection and replace the IP-key binding. Note that used
keys are kept in a database for easy lookup, whereas fixed keys
are kept in files for easy administration. If host keys change or
are reinstalled on the dynamically allocated hosts, then this
database should probably be deleted to purge keys that become
illegal.
DHCP addresses have no effect on hosts that use IPV6, since
IPV6 addresses are generally issued based on an interface
MAC address and do not therefore change.
なるほど。
▼ゲートウェイが192.0.2.1となる場合
/etc/cfengine/cvservd.conf
control:
domain = ( example.org )
AllowConnectionsFrom = ( 192.0.2.1 )
TrustKeysFrom = ( 192.0.2.1 )
DynamicAddresses = ( 192.0.2.1 )
AllowUsers = ( root )
update.confやcfagent.confで trustkey=true を指定すると
NAT環境下で期待する動作をしてくれた。




