解せぬ日記

雑な話をする

KeePassXのデータベースがコンフリクトした話

僕はパスワード管理にKeePassXを使ってる。

そのデータベースファイルがコンフリクトするという地獄みたいなことが起きた。

f:id:terut:20150605104240p:plain

経緯

Dropbox*.kdbファイルを同期して、Win/Mac/Linuxで参照できるようにしてるんだけど、Arch LinuxDropboxがいつからか常駐しなくなってて、それを直したタイミングで*.kdbファイルがコンフリクトしてしまった。

Dropboxのファイルはコンフリクトすると、競合コピー(confliected copy)とかってファイルを新たに作るので、自分でマージする必要がある。

*.kdbのコンフリクトは色んな理由でやっかいで、だいぶ辛かった。

KeePassには同期機能があるっぽくて、KeePass使えば解決じゃんみたいな話かも知れないんだけど、家のメインマシンがLinuxだったこともあって、KeePass 2.0が使えなかったか何かでKeePassXを採用してた経緯がある。

KeePassってMacOSXとWinでデータベースファイルの拡張子が違ったりしてたような記憶があるんだけど、今どうなってるんだろ?そもそも僕の勘違いで違わないのかな??

競合した内容を調査

当然、マージするには競合した内容を知る必要がある。

*.kdbはマスターパスワードをつかって暗号化されてるので、そのままで差分を知ることはできない。

どうやって差分を知るかというと、エクスポート機能を使ってテキストファイルかXMLファイルに吐き出すか、GUI上から超神技「目grep」を使うしかない。

僕みたいな一般人はエクスポート機能を使ってdiffを叩くなりするのがよさそうなんだけど、問題としてアホみたいに差分が出る。

実際見てみたけど、はっきり言って絶望しかない。

絶望した結果

golangを勉強してたので、XMLをパースして同じアイテムの差分を見て教えてくれるコマンドラインツールを書いた。

golangで書いておくと、WinでもMacOSXでもLinuxでも簡単に使えるやんけと思ったので、ちょうどよかった。

とりあえずどのアイテムがコンフリクトしてるのかが分かれば幸せになれそうだったので、その程度の作り込みしかしてない。

https://raw.githubusercontent.com/terut/kdb-diff/master/screenshot/screenshot1.png

こんな感じでマスターにあるやつとコンフリクトしたやつのアイテム名が出る。

github.com

まとめ

だいぶニッチだけど、golang書く練習になってよかった。

コンフリクト解消して幸せになろうな。