WebDAVに対してpush/pullする

カテゴリがgitになってますが、予め言っておくとあんまりgit関係ないです。

以前GitのHTTP認証に絶望したわけだけど、WebDAVってのは大体認証をかけるわけで、しかも私の場合認証付きHTTP proxyを通らないといけない環境*1にいたりすることもあるわけです。
で、この環境からWebDAVに対してpush/pullする方法。

davfs2 をインストールする

つまり、WebDAVをローカルにマウントする。そうしてしまえばGitからすればローカルのファイルを扱うが如くWebDAV上のリポジトリを操作できる。
WebDAV上のリポジトリを直接操作もできると思うけど、パフォーマンスを考えると作業は別の場所でやってpush/pullの方がいいと思う。

私はGentooを使っているのでPortageを使ってインストールした。殆どのディストリでは標準のパッケージ管理ツールで入れられると思われる。

$ emerge davfs2

設定

ちなみにrootなら一切設定しなくてもいきなりmountできる。以下は毎回認証情報入力するのだるい+一般ユーザでもマウントする用。

一般ユーザでもマウントできるようにするには、

  • davfs2グループに追加する
  • fstabにエントリを書く
$ gpasswd -a thinca davfs2

/etc/fstab

# オプションの詳細は $ man mount.davfs
https://example.com/path/to/webdav /path/to/mountpoint davfs noauto,user,noaskauth,uid=thinca,gid=thinca 0 0

/etc/davfs2/secrets

# このファイルにproxyの認証情報とWebDAVの認証情報を書いておけば毎回聞かれずに済む。
# 書かなかった場合でもマウント時にインタラクティブに聞いてくるのでマウントはできる。
# 自分以外に読み書き権限を与えると動作しない。
#proxy:8080 username password  # 私はstoneで迂回してたから省略。でも書けばいけるはず。
https://example.com/path/to/webdav username password

個人用の設定ファイルとして $HOME/.davfs2/davfs2.conf と $HOME/.davfs2/secrets を見に行く*2が、空ファイルを置いておけばマウントできる。実際には /etc/davfs2 の方を見てる?よくわからない。

マウント。

$ mount /path/to/mountpoint

後は普通に使えばいい。

問題点

できれば完全に一般ユーザでやりたかったんだけど、fstabにエントリを書かなくちゃ行けないので無理。
まったく別の実装で wdfs と言うのもあり、これなら wdfs コマンドだけで一般ユーザでもマウントできるっぽいけど、これはproxyを設定する方法が見当たらなかった。あちらを立てればこちらが立たず…。

雑感

この方法であれば、GitだろうがBazaarだろうがMercurialだろうがWebDAV上のリポジトリに対して操作を行える。
WebDAVどころかマウントさえできてしまえばSCPだろうがFTPだろうがsambaだろうが同じように扱える。FUSE++。
と言うか、本来こうあるべきな気もする。バージョン管理システム(に限らず任意の位置にあるファイル群を操作するソフトウェア)は最低限のファイル操作だけ実装して、外部との通信はFUSEとかで抽象化する。
まあそううまくは行かないのが現実なんだけど。ソフトに寄ってはいちいちマウントなんてしてられないだろうし、そもそもWindowsさんが全然ダメダメなので。

まとめ

つまり、当面の問題はやっぱりWindowsでの環境です。
上記のGentooWindows上の仮想環境なので、VirtualBoxの共有フォルダ使ってpush/pullするか?さすがに中継しすぎで面倒。うーん。

*1:実際にはstoneで迂回してるから認証はないも同然だけれども

*2:マウント時にこれらのファイルがないと cp できないと言うエラーが出る。謎。