tl;dr
ARMアーキテクチャでビルドするフォークがあるのでこれを使いましょう。
/etc/pam.d/sudo
に書き込み権限がないので sudo chmod +w /etc/pam.d/sudo
する必要があるかも。
パーミッションを戻すのを忘れないようにしよう。
はじめに
最近、会社のPCをM1 MacBook Proに交換してもらったので、ちまちま環境を作っている。 一括管理になっていて移行エージェントが閉じられているので手で移行する必要があって、環境を見直すいい機会になっている。
ところで、僕はとてもめんどくさがりなのでパスワードを打つのも出来るだけ避けたい。 幸いなことに Apple Watch を持っているので使えるところでは使っていきたい。
失敗
sudo
時のパスワード入力を Apple Watch で代替するには pam_watchid.so
を使う方法がある。
これまでもこれを使ってきたので、何も考えずにインストールしたところ以下のように sudo
が動かなくなってしまった。
sudo: unable to initialize PAM: No such file or directory
/etc/pam.d/sudo
を編集するのにも管理者権限が必要なので sudo
が必須になってくる。
詰んだと思ってシングルユーザーモードを覚悟したのだけれど、調べてみると Finder からファイルのパーミッションを変更出来るらしい。
Finder から /etc/pam.d/sudo
の Get Info
から一般ユーザーにも編集権限を追加する。
右下の鍵アイコンを外しておく必要があるので注意。
これで普通に編集出来るようになったので事なきを得た。
原因と解決
単純な話で x86_64
でビルドしているので当然ARMでは動かない。
TARGET = x86_64-apple-macosx10.15 all: swiftc watchid-pam-extension.swift -o $(LIBRARY_NAME) -target $(TARGET) -emit-library
幸いにも変数になっているのでビルド時に指定してやればよい。
$ sudo make install TARGET=arm64-apple-maxosx12.2
これで無事に動くようになった。
さらに調べてみる
M1が出たからもう一年以上経っているので流石に誰かやっているやろと思って探してみたらやはり対応したフォークがあったのでこちらを使うことにした。
ビルドターゲットの指定では apple-darwin$(vesion)
の方がよさそう。