ちなみに

火曜日の空は僕を押しつぶした。

M1 MacでもApple Watchでsudoのパスワード入力をする

tl;dr

github.com

ARMアーキテクチャでビルドするフォークがあるのでこれを使いましょう。 /etc/pam.d/sudo に書き込み権限がないので sudo chmod +w /etc/pam.d/sudo する必要があるかも。 パーミッションを戻すのを忘れないようにしよう。

はじめに

最近、会社のPCをM1 MacBook Proに交換してもらったので、ちまちま環境を作っている。 一括管理になっていて移行エージェントが閉じられているので手で移行する必要があって、環境を見直すいい機会になっている。

ところで、僕はとてもめんどくさがりなのでパスワードを打つのも出来るだけ避けたい。 幸いなことに Apple Watch を持っているので使えるところでは使っていきたい。

失敗

sudo 時のパスワード入力を Apple Watch で代替するには pam_watchid.so を使う方法がある。

github.com

これまでもこれを使ってきたので、何も考えずにインストールしたところ以下のように sudo が動かなくなってしまった。

sudo: unable to initialize PAM: No such file or directory

/etc/pam.d/sudo を編集するのにも管理者権限が必要なので sudo が必須になってくる。 詰んだと思ってシングルユーザーモードを覚悟したのだけれど、調べてみると Finder からファイルのパーミッションを変更出来るらしい。

Finder から /etc/pam.d/sudoGet Info から一般ユーザーにも編集権限を追加する。 右下の鍵アイコンを外しておく必要があるので注意。

f:id:Sixeight:20220305224843p:plain

これで普通に編集出来るようになったので事なきを得た。

原因と解決

単純な話で x86_64 でビルドしているので当然ARMでは動かない。

TARGET = x86_64-apple-macosx10.15

all:
  swiftc watchid-pam-extension.swift -o $(LIBRARY_NAME) -target $(TARGET) -emit-library

github.com

幸いにも変数になっているのでビルド時に指定してやればよい。

$ sudo make install TARGET=arm64-apple-maxosx12.2

これで無事に動くようになった。

さらに調べてみる

M1が出たからもう一年以上経っているので流石に誰かやっているやろと思って探してみたらやはり対応したフォークがあったのでこちらを使うことにした。

github.com

ビルドターゲットの指定では apple-darwin$(vesion) の方がよさそう。