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....

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