nDiki : シンボリックリンク

シンボリックリンク - symbolic link

ツール

  • symlinks

2014年12月20日 (土)

aufs で ro なブランチに書き込まれたかと思った

かなり久しぶりに aufs を使った Web サイトのドラフト作成をしようと思ってマウントしたのだけれど、なぜかスタックされた ro の方のディレクトリのファイルが書き変わってアレレとなった。

しかもディレクトリによっては rw の方にきちんと変更が書き込まれて、ro は変更されないようにきちんとなっている。

なんだろうと思ってしばらく調べた結果、一部のディレクトリはシンボリックリンクaufs でマウントした外のディレクトリを指していてアウトオブ aufs だったというオチ。ああ。

今日のさえずり: やられたー。イチゴが高くなってる。

2014年12月20日

[ 12月20日全て ]

2018年2月26日 (月)

Markdown で書いているノートWeb ブラウザで見るのに MkDocs を使う

ノート/メモははライティングアプリ Ulysses を使い Markdown で書いていて、検索・閲覧・整理も Ulysses で基本済ませています。ただいくつかの良く参照するファイルはブックマークやハイパーリンクから Web ブラウザでさっと表示させたかったりします。なので以前は Plack::App::Directory::Markdown を使った自作 PSGI アプリケーションを使ってました。

が、セットアップしたり保守したりという手間を今とれないなと思って、 Markdown ビューアを探してみたところ MkDocs が良さそうなので試してみました。

MkDocsHomebrew で入れてみる

MacBook ProHomebrew で入れて動かしてみます。

 $brew install MkDocs
 $mkdir -p ~/var/mkdocs
 $cd ~/var/mkdocs
 $mkdocs new local
 $cd local
 $mkdocs serve

Web サーバが立ち上がるので http://127.0.0.1:8000/ にアクセスすると ~/var/mkdocs/local/docs/index.md の内容を HTML に変換したものが表示されます。お手軽! 設定変更は ~/var/mkdocs/local/mkdocs.yml できます。

あとは docs の下に Markdown ファイルを置いておけば Web ブラウザで閲覧できます。docs の下に既存の Markdown ファイルノートディレクトリへシンボリックリンクを作ればそれらも辿って表示されます。

pip で入れ直す

試していてブラウザでのレンダリング表示が重いなと思って HTML ソースを見たら同じ JavaScript ファイルを何十回も読み込んでいて何か変ぽかったので Homebrew のをやめて pip で入れなおしました。どちらも現在 mkdocs 0.17.2 ですが pip で入れた方は問題なかったのでこちらを使うことにします。

 $brew uninstall mkdocs
 $brew install python
 $pip2 install mkdocs

MkDown は静的サイトジェネレータで、プレビューサーバは補助的機能ですがまずまず使えそうです。

[ 2月26日全て ]

2019年2月21日 (木)

Google ドライブ ファイル ストリーム駄目だった

MacBook Pro のリプレースにあたり Google ドライブのローカルへの同期を「ドライブ ファイル ストリーム」にしてみたんだけれど、自分の使い方ではデメリットが多いので即日「バックアップと同期」に戻した。

ドライブ ファイル ストリームにしようと思った理由

  • 共有ファイルを気軽にマイドライブに追加してたらどんどんファイルが増えた。
  • ファイルのオーナー引き継ぎを何度も受けてどんどんファイルが増えた。
  • シンボリックリンクがないので「追加」多用しているのだけれど、これバックアップと同期ではローカルにそれぞれ実体ができて無駄な感じになる。

ドライブ ファイル ストリームなら実体はクラウドストレージ側にあるのでファイル数が多くてもへっちゃらではないか。そう思ったわけです。

ドライブ ファイル ストリームにしたら困ったことに

機能比較で「Microsoft OfficePhotoshop などのネイティブ アプリを使用する」とあったので、 Google Chrome 拡張機能の Application Launcher for Drive (by Google) が使えると思ったら使えなかった。ファイルシステム上で開けるという意味だったようだ。この拡張機能がないと「Chrome 上で Google ドライブ検索してからの、ネイティブアプリで閲覧編集」という使い方ができないので劇的に不便になる。

それから Finder (Path Finder でも)ブラウズできないフォルダがあってこちらは致命的な問題。ターミナルで cd していけるのだけれど Finder では駄目。これは駄目。

バックアップと同期に戻す

結局ドライブ ファイル ストリームはやめてバックアップと同期に戻すことにした。 archive フォルダをマイドライブ直下に作ってここは同期しないことにし、いったん全部そこに移動した。

選択同期は面倒なので今まで避けてきたけれどしかたあるまい。今後は作業中のフォルダだけ同期することにする。

[ 2月21日全て ]

2021年1月5日 (火)

最近の Unisonビルドする

双方向ファイル同期化ツール Unison File Synchronizer、 Mac で使っているのが Unison 2.48.6 の GUI 版なのだけれど、古いせいか macOS Catalina だと「Install command-line tool」 が機能しない(/usr/bin にインストールしようとしているからかな)。

macOS 上で text UI 版がちょっと使いたい & GUI 版も新しいのにしたいなと思ってビルドとかした。

現在の Unison のバージョン

2021年01月05日時点での安定版は 2.51.3

Homebrew で入れる

 $ brew install unison

で text UI 版の「unison version 2.51.3 (ocaml 4.10.0)」が入る。GUI 版は入らない。

macOS Catalina 上でビルドする

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 で十分だった)。

FreeBSD 上でビルド

ローカルホストの 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

サイト

[ 1月5日全て ]

2021年3月3日 (水)

今日のさえずり: ひな祭りなのでから持たされた餅を食べます

[ 3月3日全て ]

2022年1月15日 (土)

今日のさえずり: 電子レンジで温めたカントリーマアムうまーい

  • 08:59 惚れ惚れする曲線。すっきりとした空。 #photography RICOH GR IIIx #GR #GRIIIx #GR3x https://t.co/RkFemjGvv6
  • 13:34 午前中にパイ活動してきた。カスタードクリームとメープルシロップソースのハーモニー。 なお、隣の人は話題のハッシュポテト食べてた。 https://t.co/ftt0Y5DUAy
  • 14:56 カクノにブルーブラックインキを入れた。 透明オレンジ、めちゃかわいい! https://t.co/kkEWQMb6BU
  • 15:17 普段 B (太字)から研ぎ出した F (細字)で走り書きしているのでカクノの F が結構細く感じた。 でも店頭に透明オレンジの M (中字)は無かったので、カラー優先でこれでヨシ。
  • 15:20 ロルバーン ポケット付メモMに書くならカクノの F (細字)合ってるかもね。 M (中字)で走り書きするならロルバーン ポケット付メモLぐらいのノートがいい。
  • 15:58 シンボリックリンクだと思って削除したの、1つだけ通常のファイルだった。消えた。
  • 15:59 ふう、 Time Machine バックアップから戻した。
  • 16:21 電子レンジで温めたカントリーマアムうまーい。
  • 19:24 シャワートイレの電源ランプが猛烈に点滅している。取扱説明書によると点検時期が来ていることを表しているらしい。
  • 23:50 2022年1月15日(土) やったこと - 洗面室引き戸の戸車を掃除 - カナディアンメープルカスタードパイ - カクノ 透明オレンジにインクを入れる - カントリーマアムを電子レンジで温め
[ 1月15日全て ]

2022年2月9日 (水)

MkDocs でワーキングノートを GitHub Pages にデプロイし公開する

Markdown で書いているノートを「公開で作業する」というコンセプトで社内で公開するのに、 GitHub Enterprise Server (以下 GHE) の GitHub Pages を使ってみることにした。

静的サイトジェネレータ MkDocs には GitHub Pages にデプロイする機能が入っている。GHE 上のリポジトリに対しても問題なく動いた。

手順1: MkDocs をインストール

 $ pip3 install mkdocs mkdocs-material

手順2: GHE でリポジトリを作成

GHE 上で notes リポジトリを作成する。プライベートでも OK。

手順3: MkDocs プロジェクトを作成する

 $ git clone git@example.com:Naney/notes.git
 $ cd notes
 $ git config user.name 'WATANABE Yoshimasa'
 $ git config user.email naney@example.com

MkDocs 設定ファイルと Markdown ファイルは既存の Obsidian vault の中にそれぞれ置いておき、シンボリックリンクしておくことにする。

 $ ln -s /path/to/vault/Settings/mkdocs.yml

mkdocs.yml 内で以下を指定しておく。

 docs_dir: /path/to/vault/notes

手順4: MkDocs ビルトインサーバでどのようなサイトになるか確認する

 $ mkdocs serve

を実行し、 Web ブラウザで http://127.0.0.1:8000/ に接続しどのように表示するか確認する。

手順5: GitHub Pages にデプロイする

 $ mkdocs gh-deploy

を実行すると gh-pages ブランチ上に静的サイトが生成され、リモートリポジトリに push してくれる。 GHE のリポジトリ側も自動で gh-pages ブランチを GitHub Pages で公開するように設定してくれる。びっくり。 https://example.com/pages/Naney/notes/ が公開 URL になる。

あとは Markdown ファイルを追加・更新・削除したら必要に応じて mkdocs serve で確認しつつ、 mkdocs gh-deploy していけば良い。

やってみると思ったよりお手軽だった。

GitHub Pages は公開

プライベートリポジトリでも GitHub Enterprise Server の GitHub Pages サイトは公開となるので、組織内で限定公開するには境界型セキュリティに頼ることになる。ゼロトラストと考えるなら、漏洩してはならない情報を書かないよう注意して使うべきだ。

[ 組織内公開ワーキングノートサイト ] [ 公開で作業する ]

[ 2月9日全て ]

2022年3月8日 (火)

Obsidian vaults を完全に分離する

Obsidian vault 内の一部フォルダをシンボリックリンクを使って別の vault で参照する運用をしていたのだけれど、それをやめて vaults を分離することにした。参照されている側でノートタイトルを変更した時に、参照している側の vault を気にかける必要があるのが心理的に良くないなと。 過去試してみたネスト vault も含め、vaults 間で直接ノートを共有するのはやはり evil だ。

なお、単一の Obsidian vault を好む人もいるけれど自分は複数の vaults を使い分けた方が好み。

[ 3月8日全て ]

2022年5月9日 (月)

Google ドライブのフォルダへのショートカットが gshortcut ではなくなっていた

少し前から Google ドライブ

ショートカットでマイドライブをシンプルに 数週間以内に、複数のフォルダに保存されているアイテムはショートカットに置き換わります。ファイルとフォルダへのアクセス権は変更されません。

と表示されるようになった。

バックアップと同期」で同期している Mac 側でショートカットがどうなるか2年前に調べた時は、フォルダのショートカットが拡張子 gshortcut のファイルになっていてうーんとなったんだった。

「パソコン版 Google ドライブ」になった現在はどうだろうと思って確認してみたら、Google ドライブ上でのフォルダのショートカットは Mac 上では localhost のポートに smbfs マウントしたボリュームの中にあるディレクトリへのシンボリックリンクという凝った作りになってた。

以前の仕様と違って、ショートカット先のフォルダ内のファイルをローカルアプリケーションから直接読み書きできる。

smbfs の先にあるので Time Machine バックアップ対象にならないことに留意が必要だけれど、それ以外は問題なさそうだな。

今日のさえずり: 「きっぷ」と「切符」の使い分け方を知った

[ 5月9日全て ]

2022年6月11日 (土)

パソコン版 Google ドライブでマイドライブと同期するフォルダの場所を Google Drive にする

最初に「バックアップと同期」で同期した時に作られた「Google ドライブ」フォルダのままでマイドライブを同期してきた。日本語を含んでいると面倒だなと思いつつ、手間を考えてずっとそのままにしていた。

今日「Google ドライブ」フォルダ階層の中に Logseq graph を作ろうとしたところ不具合が発生した(Logseq を初めて試した時にハマった挙動を忘れていた)のを機に、とうとう名前を変更することにした。

パソコン版 Google ドライブでいったんアカウントの接続を解除し、再度設定する時にマイドライブと同期するフォルダの場所で「Google Drive」を指定して同期しなおし。

同期が終わったあと念のため以前の同期フォルダである「Google ドライブ」フォルダ FreeFileSync で比較。 Google ドキュメント (.gdoc) などに差分があるけれどもこれらは問題なし。 Google ドライブの1つのフォルダに同名ファイルが複数あった場合にローカルではファイル名に (1)、(2) と付加されるのだが、付与順序が変わってファイル名が一部入れ替わったものがあったがこちらも問題なし。

あとは「Google ドライブ」を含むパスを設定しているところや、関係するシンボリックリンクなどを修正しておしまい。

[ 6月11日全て ]

About

Process Time: 0.10161s / load averages: 0.82, 0.79, 0.78