今年はいつになくごみ収集最終日が遅い週周りなので歓喜です。「あっ、もうごみ収集終わってるの……」がないのでしっかり片付けできます。
冬休み1日目は家の掃除など。お風呂をジャバで洗浄したり、エアコンをがっつり掃除したりしました。
あわせてようやく MacBook Pro を OS X El Capitan にアップグレード。とりあえず変わったことと言えば、 Unison の コマンドラインツールのインストールができなくなって、都度導入するかと聞かれるようになったことぐらいです。
夜はついに入浴剤解禁。バブの透明タイプのにしました。温まりますなー。
昨年4月に注文した MacBook Pro が届いてメイン端末を ThinkPad X200 (Debian GNU/Linux) から変更しました。
Emacs・KeePassX・Unison・GIMP・digiKam・VLC などを入れたところで Debian GNU/Linux 上でやっていたことはほぼ OS X 上でもできるようになり環境自体は移行完了。ただ古くから秘伝のタレのようにコピーしていたホームディレクトリはまだ ThinkPad X200 に残ったままでした。
デジカメで撮った写真や動画を rsync や Unison などで昨年少しずつ同期したりオリジナルデータを Dropbox 経由で同期したりしてから整理するなどして、ようやくホームディレクトリが 50GB を切ったので残りを全部まとめて MacBook Pro 側にコピーできるかなという状況になりました。
なので昨晩ようやく rsync でホームディレクトリをまるごと転送を実行。何度やっても更新されていないのに転送を繰り返すファイルがあって何だろうと思ったら、大文字小文字違いのファイルやディレクトリが Debian GNU/Linux 側にあったという落ちでした(適宜改名等して対応)。
整理は終わってないですが、とりあえず ThinkPad X200 が死んでデータ復旧が面倒になる自体は避けられるようになって一安心。年末年始休暇で1つ大仕事が終わって満足です。
プライベートの日記のテキストファイル化を昨日開始した際、当初は「今までも外出先で検索したいことはほとんど無かったので、スマートフォンでは検索できなくても良いかな」と思ったのですが、いきなり今日ちょっと過去日記記事を探したくなりました。うーん。
Google ドライブの Android 版アプリだといい感じにテキストファイルを全文検索して、順番に読んでいくことができたのでこれを使うのが良さそう。
ただし Google ドライブ上に置くことにすると JotterPad から編集できなくなってしまいます。
今まで通り Dropbox 上に置きつつ、Dropbox と Google ドライブの両方と同期している MacBook Pro 上で Unison を使って1日1回同期しておくことにしました。
[ ノート・日記はテキストファイルに ]
思い浮かんだことやちょっとしたノートをテキストファイルに書き Unison でサーバに同期することで公開している nNote を使っていて、ハイパー日記システムの時ってこんな感じだったよなぁと最近思っています。
ハイパー日記システムを使っていた頃はまだ mixi も Twitter もまだありませんでした。アンテナはあったけれど RSS フィードはまだぼちぼちといった頃。今とは違う牧歌的自由な感覚があったように思います。
MacBook Pro の内蔵 SSD の容量がいっぱいになってきたので NAS にオリジナルを移動し、そのバックアップとして新しく買った外付け SSD を使うことにした。NAS 上のフォルダと MacBook Pro に接続した外付け HDD 上のフォルダを同期するのに今回 FreeFileSync を使うことにした。
ちょっと古風な UI だけれど良くできている。操作として
としっかり2段階になっているのが好き。このあたり2003年からリモートホストとの同期に愛用している Unison File Synchronizer と同じ考え方なのでしっくりくる。
同期処理でのファイル削除時にバックアップを作成する設定にもしておける。この設定をしておくことで間違えた時にリカバリもできる。
Unison をリモートホストでも実行できる場合の双方向ファイル同期には Unison を、ローカルホストだけで双方向同期をさせる必要がある場合は FreeFileSync という形で今後使い分けよう(ちなみに Android では FolderSync Pro)。
[ Mac アプリケーション ] [ ファイル同期 ]
双方向ファイル同期化ツール Unison File Synchronizer、 Mac で使っているのが Unison 2.48.6 の GUI 版なのだけれど、古いせいか macOS Catalina だと「Install command-line tool」 が機能しない(/usr/bin にインストールしようとしているからかな)。
macOS 上で text UI 版がちょっと使いたい & GUI 版も新しいのにしたいなと思ってビルドとかした。
2021年01月05日時点での安定版は 2.51.3。
$ brew install unison
で text UI 版の「unison version 2.51.3 (ocaml 4.10.0)」が入る。GUI 版は入らない。
Unison 最新版のバイナリ配布が見当たらないのでビルドしてみる。 Xcode が必要。
$ xcode-select --install
で入る Command Line Tools だけだと text UI 版の Unison しかビルドできないので App Store から Xcode をインストールした。
OCaml は Homebrew ので済ます。
$ brew install ocaml
今日時点で入るのは OCaml 4.10.0 だ。次に Unison 2.51.3 をビルドする。
$ cd ~/tmp $ curl -OL https://github.com/bcpierce00/unison/archive/v2.51.3.tar.gz $ tar zxvf v2.51.3.tar.gz $ cd unison-2.51.3 $ make all
make だけだと text UI 版しかビルドされないので make all してみた。が残念 GUI 版はエラーで途中で止まった。今はうまくビルドできないのかもしれない。
諦めて make で text UI 版だけバイナリを得ることにした。 make 後
$ ./src/unison -version
で実行できることを確認。 ./src/unison を適当なところにコピーしておく(これなら brew install unison で十分だった)。
ローカルホストの Unison とリモートホストの Unison のバージョンが合っていないと同期できないのでリモートホスト側 (FreeBSD 9.1-RELEASE-p24) でも同じバージョンのものをビルドする。さくらのレンタルサーバ プレミアムで root 権限はないのでユーザー権限にて。
まずは OCaml。最近の OCaml は opam というのでインストールして使うのが流儀らしい。 opam をインストール。
$ cd ~/tmp $ mkdir bin $ curl -OL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh $ BINDIR=$HOME/tmp/bin sh install.sh
リモートホストの環境に合ったプレビルドが無いとエラーが出て install.sh ではインストールできず。
OCaml の前に遡って opam のビルドをする。
$ cd ~/tmp $ curl -OL https://github.com/ocaml/opam/archive/2.0.7.tar.gz $ tar zxvf 2.0.7 $ cd opam-2.0.7 $ gmake cold CONFIGURE_ARGS="--prefix ~/tmp/opam" $ gmake cold-install
ビルドできた。opam を初期化する。
$ PATH=$HOME/tmp/opam/bin:$PATH $ opam init
gpatch が無いとエラーで止まった。 patch へのシンボリックリンクで gpatch を作ってイケるかなと思ったけど今度は別のエラーで止まる。うーん。 opam で OCaml をインストールするのは断念。
OCaml のドキュメントを読んだら今まで通り configure して make も普通にできるじゃない。
$ curl -OL https://github.com/ocaml/ocaml/archive/4.10.0.tar.gz $ tar zxvf 4.10.0.tar.gz $ cd ocaml-4.10.0 $ ./configure --prefix $HOME/tmp $ gmake $ gmake install
次に Unison 2.51.3 をビルドする。出来上がったバイナリは今使っている Unison 2.48.3 と併用できるように別のディレクトリへ。
$ cd ~/tmp $ curl -OL https://github.com/bcpierce00/unison/archive/v2.51.3.tar.gz $ tar zxvf v2.51.3.tar.gz $ cd unison-2.51.3 $ PATH=$PATH:$HOME/tmp/bin $ gmake $ ./unison -version $ mkdir -p $HOME/local/unison-2.51.3/bin $ cp -a src/unison $HOME/local/unison-2.51.3/bin
ノートテキストファイルは全文検索できるよう Google ドライブと同期しておきたい。それと同時に他の PC との同期のため Dropbox とも同期しておきたい。しかしセキュリティを考えてクラウド同期サービスは使いたくない。
Google の「バックアップと同期」アプリと Dropbox アプリの両方を動かしてそれぞれローカルフォルダと動機している MacBook Pro 上で、そのローカルフォルダ間のファイル同期を実行してみることにした。
使うのは普段リモートホストとの同期に使用している Unison File Synchronizer。最近になって repeat = watch というファイル更新をモニタリングするオプションを知ったので試してみる。
ファイル更新モニタリングで使う Unison 標準の unison-fsmonitor は macOS では使えないらしいので代替の https://github.com/autozimu/unison-fsmonitor をインストールする。
$ brew install autozimu/homebrew-formulas/unison-fsmonitor
Unison の同期用のプロファイルは以下のような感じ。
root = /Users/naney/Google ドライブ/folderA root = /Users/naney/Dropbox/folderA times = true repeat = watch silent = true logfile = /Users/naney/var/log/unison.log
(実際には path や ignore をもう少し指定している。)
repeat = watch と silent = true をいったんコメントアウトして
$ unison <プロファイル名>
で手動同期し、期待通りの同期ができているか確認する。問題無ければ
$ nohup unison <プロファイル名> &
で監視を開始する。
動作確認した感じでは
と安定して使える感じだ。
コンフリクトが起きた場合はスキップされたままになるので、たまに手動で Unison を実行して確認した方が良さそうではある。
[ ノート・日記はテキストファイルに ]
DAT#photography
— Naney (@Naney) March 2, 2021
RICOH GR III #GR #GRIII #GR3 pic.twitter.com/FOtwGxa1dt
他人に見られる心配なしに書きたいノートテキストファイルを Google ドライブでバックアップしておくのに Cryptomator を使うことにした。
Cryptomator アプリケーションと macOS でファイルシステムとしてマウントするための macFUSE をインストール。
Google の「バックアップと同期」で同期しているフォルダ内に Cryptomator アプリケーションで vault を作成する。 vault を解錠するとファイルシステムとしてマウントされるので、そこでファイルを読み書きする。 vault フォルダ側には暗号化されたファイルが保存され「バックアップと同期」でバックアップされる。vault 側は直接いじらないようにする。
という理由からマウントしたフォルダ上で直接ファイルを読み書きせず、別の場所にあるノートフォルダを Unison でバックアップを有効にしつつリアルタイム同期することにした。
root = /Volumes/マウントポイント名 root = /path/to/ノードフォルダ times = true rsrc = false repeat = watch silent = true backup = Name * backuplocation = central maxbackups = 60 backupdir = /path/to/バックアップフォルダ
Cryptomator のファイルシステムに対して Unison が属性のコピーをしようとして失敗するので rsrc = false 指定が必要だ。
[ ノート・日記はテキストファイルに ]
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。