snap が参照するホームディレクトリを /home 以外に設定する方法

snapd は、ホームディレクトリが /home 以外に置かれていると $HOME へのアクセスを許可しない*1。この場合には、以下のコマンド列を実行して明示的にホームディレクトリの位置を指定することで正常にアクセスできるようになる。

# 以下の /local/home は各環境でホームディレクトリが配置されているパスに変更する
$ snap set system homedirs=/local/home

なお、snap --version で表示される snap および snapd のバージョンが 2.59未満であれば、以下のコマンドで前もって core パッケージを更新する必要がある。

$ snap refresh core

参考ページ

snap set system homedirs=... でホームディレクトリを設定する機能は以下のPRで導入された。最近マージされたばかりなので、本稿執筆時点では日本語情報がほぼ皆無だった。 github.com

記事内容自体は以下を参考にした。以下のQ&Aの内容を補足すると、現行の Ubuntu 22.04 であれば、release/stable でもバージョン2.59以降の snapd が入る。また、22.04では snapd パッケージではなく core パッケージで snapd が管理されている(はず)。 askubuntu.com

この方法に関する公式ドキュメントは以下のページ。一応古い方法も紹介されているので、この記事で紹介した方法が機能しなかった場合は試してみるとよい。 https://snapcraft.io/docs/home-outside-home

*1:おそらく$HOMEを書き換えて任意のディレクトリにアクセスされることを防ぐため?

Outlookでgit send-emailを使うための設定

数週間の格闘の末にOutlookgit send-emailが使えるように設定できたので、設定内容について忘れないうちに記録しておく。 この記事の内容は2023年現在のOutlookSMTPサーバーの挙動を前提にしていることに注意されたい。

なお、この方法で完璧にsend-emailが使えるというわけではない。 具体的には、複数のパッチを同時に送信した時にスレッドが崩れてしまうという問題が残っている。 これは、gitが設定したメールのMessage-IDがSMTPサーバーによって書き換えられ、 パッチのIn-Reply-Toに対応するMessage-IDが消滅してしまい、スレッドの親子関係の情報が失われてしまうためである。 この問題については依然調査中である1

設定内容

outlook.jp ドメインのメールアドレスで git send-email を使うには、~/.gitconfig に以下の内容を追加するとよい。

なお、smtpuserの内容は実際のメールアドレスに、 smtpdomainの内容は送信側のローカルIPアドレス2に、smtppassの内容はOutlookのパスワード3に置き換える必要がある。 また、outlook.comなど.jp以外のドメインではsmtpserverの設定を変える必要があるかもしれない。

[sendemail]
  smtpserver = smtp.office365.com
  smtpuser = user@outlook.jp
  smtpencryption = tls
  smtpserverport = 587
  smtpdomain = 192.168.1.128
  smtppass = password

smtpdomainについて

Outlook以外でのgit send-emailの設定を紹介する多くの記事では、smtpdomainの設定を行っていない。 しかしながら、この設定を行わないと正常にsend-emailが行えない場合がある。 この節では、このようにsmtpdomainの設定を行う理由について説明する。

smtpdomainは、git send-emailがメールを送信する際にSMTPサーバーへ送るHELOコマンド4の内容として利用される。 このHELOコマンドの内容によっては、OutlookSMTPサーバーにメールの送信を拒否されてしまうため、 smtpdomainの値をSMTPサーバーに拒否されないものに設定する必要があった。

今回試した限りでは、送信側マシンのローカルIPアドレスをHELOで送信するとうまく送信できたため、その方法を記している。 これはメールクライアントであるThunderbirdと同様の挙動のため、他のメールサービスでもとりあえず試す価値はあるかもしれない。

調査方法

(覚書)git send-email --smtp-debug=1などのオプションを利用して地道に調査を行った。だるかった…


  1. というか、書き換えられたMessage-IDを取得してIn-Reply-Toに反映するフックを書かないと解決しない気がする
  2. 試してないけど、ローカルIPのレンジなら何でも通るんじゃないかなぁ
  3. dotfilesにパスワードベタ書きが嫌な場合は、git-credentialを使うといいらしいです。試してませんが。
  4. see also: https://blog.smtps.jp/entry/2017/09/07/114820