gitで仕事する生活。

手元バージョン管理を全部gitにしてからはや数ヶ月。最初はいろいろとまどったが、案外慣れてしまうものだ。 まず仕事方面。いろいろな都合から会社の中央レポジトリはSubversionなので、gitはgit-svnと共に使っている。最近の仕事はどっぷりLinuxで、gitでさくさくfeature branchを切りかえて作業ができるのは実によい。 仕事で相手をしているSubversionのレポジトリはtrunk/branches/tagsの標準的なスタイルなので、git svn clone時には-sをつけて、リモートのsvnブランチもローカルのgitのブランチとしてcloneしている。 git svn clone -s (subversionのURL) hoge このcloneはかなり遅いが、まあ、一度作ってしまえば、あとは適当に[cci_bash]git svn rebase[/cci_bash]してゆけば更新されるのでさほど困りはしないはず。 さて、そうやってcloneしたレポジトリの上で、何か機能を作りこむ必要があるときは、 git checkout -b hogehoge と作業ブランチhogehogeを作って作業し、確認が終わったら git checkout master して、git svn rebaseして、おもむろに、 git merge --squash hogehoge あるいは git merge ーno-ff hogehoge としてhogehogeブランチの作業内容をマージしてから最後に git svn dcommit して、またgit svn rebaseしつづける定常状態に戻る。dcommit直前まではsvnのことを忘れていられるのがよい。 自宅環境(Windows&FreeBSD)にはsvnはからまないので普通にgitを使っている。自宅サーバにbareレポジトリを作って、そこにssh経由でpush/pullすることで出先からの取得・更新も可能にしているが、運用練習も兼ねてbitbucketに移動したほうが幸せかもしれないと最近は考えている。 LinuxでもFreeBSDでもWindowsでも、シェルにbashかzshを使っている限りは補完が充実しているので、シェルで使うのが一番だ。ただ、作業はEmacs上で行うので、履歴や差分の確認はEmacs上のEggに頼ることも多い。慣れ親しんだEmacsのvc.elライクなキーバインドなので悩まずに済むのがよい。 さて、コマンドラインでgitを使っていてもコミットメッセージはEmacsを使いたいので、core.editorにはemacsclientを指定している。FreeBSDとLinux上のEmacsは(prefer-coding-system 'utf-8-unix)にしているので何もせずに新規バッファを作ればutf-8になるが、Windows環境は諸処の事情でutf-8を最優先にしていないので何もしないとコミットメッセージが化ける。んで、下記のhookを入れている。 (add-hook 'server-visit-hook (function (lambda () (if (string-match "COMMIT_EDITMSG" buffer-file-name) (set-buffer-file-coding-system 'utf-8))))) 職場でもっとgitとgit svnの啓蒙活動をしたいところだなぁ。

December 2, 2012 · 1 min · 60 words · nekomimist

もうgitでいいや。

自宅のファイル管理環境としてBazaarをしばらく使ってたのだが、どうもあまり流行らない感じだったので、今年に入ってMercurialに乗りかえていた。が、なんかどうもgitの勢いがさらに増している感じがしていて、gitを知らないのはイマイチなのではないか、と思ったので、gitに乗りかえてみた。 まず、mercurialのレポジトリをgitに移行する。レポジトリはFreeBSD環境に全て入っていて、Windows側はすべてそれのcloneなので、FreeBSD環境で移行さえできればよい。portsでMercurialとgitを入れて、hg-fast-exportを使えば、hg-fast-exportの制限にさえひっかからない限りは悩むことはない。うちでは制限にひっかからなかったので悩まずに済んだ。 で、git。手元の環境はWindowsなので下記2点を使っている。 GitHub for Windows Cygwinのgit うちのコマンドライン環境は非常にCygwinに依存しているので、コマンドラインで使う時はCygwin gitを使い、グラフィカルに見たい場合はGitHub for Windowsを使うという感じを目指している。GItHub for Windows 1.0.11でコミットログの文字コードがあやしくなっていたが、現状最新の1.0.12では直っているので問題ないようだ。 さて、GitHub for WindowsのバックエンドはmsysGitなので、つまりmsysGitとcygwin gitの両刀使いになっている。最近のmsysGitはファイル名をUTF-8として取り扱うので、この2つはあまり齟齬なく同居できるはずだ。 GitHubのアカウントも取ったけど、無料の範囲だと問答無用で公開になるのが悩みどころ。そこはbitbucketの方がよいのだよなぁ。

June 30, 2012 · 1 min · 19 words · nekomimist

ZFS poolを移行する話。

しばらくFreeBSD 9.0Rマシンで、raidz (1TB×5) + raidz (2TB×4)で合計11TBのプールで運用していたが、 先日2TB×4のうちの1台が死んだので、あわてて移行処理を始めることにする。 合計11TBのプールなので、これを下回るHDD構成は却下である。 サーバのM/BがASUS P8Z68-V PROなので、SATAは合計8ポート。1台はシステムとzfs logとcacheを兼ねるSSDで使う。そしてMarvell SATAの2ポートはあまり使いたくない。 ということでほぼ自動的に3TB×5のraidz構成とする。今回のHDDはSeagate ST3000DM001。 なにしろ総勢HDDは5+3+5で15台なので、1台のPCでは移行できない。余剰していたCore2Extreme QX9650マシンにFreeBSD9.0Rを新規に入れて移行処理に使う。 移行元:現サーバ(KONA) 1TB×5+2TB×4 移行先:旧サーバ(TUNA) 3TB×5 こんな構成。 んで、移行手順。 まずTUNA側sshd設定をいじって、KONAからsshで入れるようにしておく。今回はどーせ移行にしか使わないのでrootで入れるような極悪設定ににした。つまり、/etc/ssh/sshd_configにPermitRootLogin yes PasswordAuthentication yes と書いた。ひどいね。 TUNAで新poolを作る。gnop経由で4Kセクタ考慮してzpoolを作らせる。深く考えたくなかったのでこのへんのgnop_aftをそのままいただいて、ada1.nop~ada5.nopを作らせてから、zpool create tank raidz ada1.nop ada2.nop ada3.nop ada4.nop ada5.nopとした。 次にKONAでsnapshotを取る。zfs snapshot -r tank@date ‘+%Y%m%d-%H%M’`ちなみに"tank"は単にpoolの名前である。 そしたらrootでzfs send -vR tank@20120606-0800 | ssh root@tuna zfs recv -vdF tankとしてしばらく待つ。 今回はsend/recvにすごく時間がかかったので、4.が終わったらもう一度snapshotを撮ってsend/recvする。2回目はインクリメンタルでよいのですぐ終わる。zfs send -vR -i tank@20120606-0800 tank@20120607-0800 | ssh root@tuna zfs recv -vdF tankという感じ。 最後にTUNAでzpool export tankして、KONAでimportするのだが、古いpoolも新しいpoolも名前がtankなので文句を言われる。zpool importするとリストとidが出てくるので、zpool import (importしたい新しいtankのid)とすると無事importされる。 7.importするとgnop経由でなくなるが、zdb -C tank | grep ashiftとするとashift:12だったのでこのままでいいよね、たぶん。 とにかく4.が長い。6TBほど使っているpoolをGbE経由で転送するのだからそりゃ遅いよね……。 ...

June 7, 2012 · 1 min · 158 words · nekomimist

ZFSのHDDが1台壊れた話。

こんなこと書いてた矢先にこれだよ! 最近2回ほどエラーが出てofflineになっていたHDDだが、ついに今朝、下記のような状態になった。dmesgにも該当のHDDが見えてないので、いよいよ死んだのかもしれない。 raidz1-2を構成する4台は、2010年6月に買ったBarracuda LP ST32000542ASなので、WD10EACSとWD10EADS混成のraidz1-0と比べると新しいのだが、さきにこっちが壊れますか……。 S.M.A.R.T情報的にはクロだが、一応seatools for dosで全域0fillをかけてどうなるか見てみよう。 pool: tank state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scan: resilvered 5.06M in 0h0m with 0 errors on Mon May 21 18:35:28 2012 config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 raidz1-0 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada2 ONLINE 0 0 0 ada3 ONLINE 0 0 0 ada4 ONLINE 0 0 0 ada5 ONLINE 0 0 0 raidz1-2 DEGRADED 0 0 0 da0 ONLINE 0 0 0 da1 ONLINE 0 0 0 17433172425356801835 UNAVAIL 0 0 0 was /dev/da2 da2 ONLINE 0 0 0 logs gpt/zfs-log ONLINE 0 0 0 cache gpt/zfs-cache ONLINE 0 0 0 errors: No known data errors それにしてもZFSは楽だね。 ...

May 22, 2012 · 1 min · 151 words · nekomimist

SATA RAIDカードとZFSの話。

うちのFreeBSD 9.0マシン、KONAはeSATAを拡張するために、RocketRAID2314をつけていて、こいつにSeagate Barracuda LP ST32000542AS×4がぶらさがっている。 んで、RocketRAIDのBIOSを書きかえてLegacy Modeで使っているので、ほぼ単なるSATA拡張ボードになっているのだが、一点問題がある。SATAコマンドでエラーが出ると、RocketRAIDオンボードのブザーが鳴ってしまうのだ。 ZFS上のraidzなので1台死んでも耐えられるのだが、ブザーが鳴るのが耐えられなくて結局すぐにリブートすることになる。raidzがデグレード状態というのは冗長性がない状態なのですぐ対応しなきゃいけない状態ではあるのだが、ブザーの騒音のせいで即刻対応しなければいけないというのは自宅サーバとしてはちょっと困る。ZFSはzpoolコマンドで状態を確認できるのでRAIDボードのブザーなんていらんのである。この話とは別の話ではあるが、やはりZFSにはRAIDコントローラはいらんということなのだろうな。 まあ、そもそも現状のWD10EACS/EADS混成×5+ST32000542AS×4というHDD9台体制がイマイチなので、3TBのHDDを5台くらい買って古いHDDとRocketRAIDは予備に引退させたいところだ。その方が省エネだしね。

May 20, 2012 · 1 min · 9 words · nekomimist

サーバ統合して省エネを目指すぜ! (VM編6)

VirtualBox 4.1.x上のWindows Home Server 2011が安定しない。 ホストのFreeBSD 9.0Rの16GBメモリから3GBを割いて動かしているのだが、どうもたまにバックアップDBが破損するし、修復もたまに失敗する。以前使っていたたWHSv1ではこんなことなかったのだが、WHS2011のせいか、VM上で動かしているせいなのかはよくわからない。Windows Server 2013ベースのWHSが出るまでは我慢かな……。 さて、関西の夏場の電力がアレなのでさらに省エネを追求したい。 平日の不在時の電力のほとんどをサーバ群が食っていたせいか、Core2Extreme X6800とQX9650マシンを引退させて、Core i7-2600Kの1台に統合したら電気代はけっこう下がった。次にベースの消費電力を削るとしたらWi-Fi AP(AirMac Express×2とAirMac Extreme)と、メインサーバのHDD(1TB×5+2TB×4)くらいだろうか。あまり劇的に効きそうな気はしない。 ピーク消費電力を削るならば、うちのモニタ兼TVのAQUOS LC-46RX1Wだろうか。5年前のTVなので消費電力が280W。これを例えばLC-52G7に買いかえると画面は大きくなるのに消費電力は122Wで半分以下。つーか60型のLC-60G7でも140Wかよ……技術の進歩スゴいね。 まあ、モニタ兼TVの買い替えは4K2Kが出てから考えたいので、古いWi-Fi APから省エネなものに交換していきますかね。 (追記) まずは最近AirTunesで使うことが減ってきた寝室のAirMac Express1コを止めてみた。大した消費電力ではなかろうが、まあ、ムダに動いてたのはたしかなので。あと、うちのメインのWi-Fi APであるAirMac Extremeはけっこう消費電力が高そうなんで、次はこいつをなんとかしよう。

May 6, 2012 · 1 min · 25 words · nekomimist

サーバ統合して省エネを目指すぜ! (VM編5)

FreeBSD 9.0R上のVirtualBoxで運用している WHS2011だが、どうもバックアップDBが壊れて各PCのバックアップが止まってることが多かった。 まあ、気付くたびにDB修復をしていたのだが、どうもそれも失敗しだしたのでちょっと調べてみた。DB修復中のメモリ使用量をタスクマネージャーで眺めていたら、修復プロセスのメモリ使用量が2GBちかくなっていたので、仮想マシンに渡すメモリを2GBから3GBに変更してみた。そしてたら、修復も成功するようになったし、その後DBの破損もない。WHS2011は仮想メモリONになってるのだが、仮想マシン上で動かす場合は、2GBだけではちょっとツラいのかもしれない(もしかしたらportsのVirtualBox 4.1.8の問題だったのかもしれないが)。 メモリ16GBのうち仮想マシンに3GBも持っていかれるとZFSのARCが小さくなるじゃないか、と思ってしまったので、8GBのDDR3 DIMMがもうちょっと安くなったらメモリ32GBにしようと強く思ったのだった。 ちなみに電気代そこそこ下がったので、WHSの仮想マシン化の意味はあったようだ。 (4/8追記) 今のところ3GBあげていれば安定しているように見える。まぁ、WHS2011は64bit専用だし、それくらいはあげるべきなんだろう、きっと。

April 1, 2012 · 1 min · 10 words · nekomimist

I love SKK

大学4年の頃の話である。当時の研究室の計算機環境はSunのSS10, SS20やSONY NEWSが転がっていて、OSはSunOS 4.1.4やNEWS-OS 4.2.1Rあたりで、みんなは高岳のX端末からそれらを使うという環境だった。 エディタはNemacsからMuleに移りかわるあたりだったと記憶している。 当時日本語入力エンジンとしてはWnnとsj3とCannaが選べた。が、まあ、どれもバカだった。それでグチってたら先輩が「SKKいいよ!」と布教しにきたのでつい乗ったのが始まり。SKK 6.32あたりだったと記憶している。 それ以来、日本語入力方式としてはずっとSKK系ばかり使っている。 当時自宅のメインPCはX68000・X68030だったが、FEPはrjjを利用した。 Windowsに移行したらSKK95を使おうと思ったが、イマイチ安定しなかったので、BOW 1.0/1.5でMule 1.1PL4を動かして本物のSKKも使っていた。 SKKIMEが安定するようになってからはずっとSKKIMEを使っている。 BOWを止めて、Mule for Win32→Meadowと移っても やっぱ日本語入力はddssk。 FreeBSD 9.0R上のEmacsももちろんddssk。 Mac miniを買ったときも当然のようにAquaSKKを使っていた。 で、iTunesとSKKIMEの食い合わせの悪さを感じていたので、ひさびさにWindowsのSKK環境を変えてみた。 それはSKK日本語FEP。lと^Jで日本語英語を切りかえていれば、IMEを無効にせずとも普通に使えというのが実によい。カスタマイズはむしろテキストファイルベースでイケるのはむしろ俺好み。辞書サーバが使えないけど、まあ、もともとそんなに活用していないし問題なし。今のところほぼ問題も文句もなし。 キーボードで文章を打ち込む時代が続く限りは、SKKを使っていきたいものだ。

March 19, 2012 · 1 min · 25 words · nekomimist

サーバ統合して省エネを目指すぜ! (VM編4)

とりあえず、約1ヶ月ほどだけれど、Windows Home Server 2011は、FreeBSD 9.0RのVirtualBoxの上で安定してい動いてくれているようで、当初のサーバ統合の目的は達成できたようだ。 次のフェーズとしては、 一度断念したWHS2011のサーババックアップの有効化にトライする。 zpoolの1TB×5のHDDたちが大変古いので、信頼性の上での速度の上でもリプレースしたい というあたりに手をつけたいね。今3TBのHDDを5台買うと6万円以上するのでちょっと躊躇するので、タイ洪水の影響が減るである夏ボのあたりで2.に手をつけるとして、まずは1.かな。

January 28, 2012 · 1 min · 9 words · nekomimist

FreeBSD 9.0Rへの更新

こんなこと呟いてたが、まあ、ちょっとやる気になったので作業してみた。 8.2R->9.0Rでメジャーバージョンが上がっているけど、普通のworld更新と同じ手順で問題はなかった。 /usr/src[をRELENG_9_に更新 念のためにmergemaster -UPiFp make buildworld buldkernel 問題ない感じだったのでmake installkernel 再起動してシングルユーザモードにする make installworld mergemaster -UPiF もいちど再起動 で、おしまい。zpool upgradeはちょっと様子を見てからやろう。

January 15, 2012 · 1 min · 18 words · nekomimist