Ubuntu以外のシステムでスナップアプリケーションを実行しています:
$ snap version
snap 2.30-5+b1
snapd 2.30-5+b1
series 16
pureos
kernel 4.18.0-1-AMD64
snap run
すると、一部のアプリケーションは機能しますが、他のアプリケーションは次のエラーを返します。
cannot perform readlinkat() on the mount namespace file descriptor of the init process: Permission denied
次の snapcraft.ioでの提案 、私は試しました:
ベータコアへの切り替え。同じエラー。
AppArmorプロファイルを次のように変更します。
snap list
を実行して、使用しているコアのリビジョンを正確に識別します(コア16-2.35.2 r 5548)
説明されているように、末尾に/etc/apparmor.d/snap.core.5548.usr.lib.snapd.snap-confine
を追加して、適切なファイル(ptrace read peer=unconfined,
)を変更します。
AppArmorをSudo apparmor_parser -r /etc/apparmor.d/snap.core.5548.usr.lib.snapd.snap-confine
で更新
しかし、これは違いはありません。失敗したアプリケーションは引き続き失敗します。他に何ができますか?
メモ
手順2を次のように確認しました。
$ tail /etc/apparmor.d/snap.core.5548.usr.lib.snapd.snap-confine
# from the core snap but we are already inside the constructed mount
# namespace. Here the apparmor kernel module re-constructs the path to
# snap-update-ns using the "hostfs" mount entry rather than the more
# "natural" /snap mount entry but we have no control over that. This is
# reported as (LP: #1716339). The variants here represent different
# locations of snap mount directory across distributions.
/var/lib/snapd/hostfs/{,var/lib/snapd/}snap/core/*/usr/lib/snapd/snap-update-ns r,
ptrace read peer=unconfined,
}
次の追加の変更を行うと、問題が解決しました。これらの手順 snapcraftスレッドで別のユーザーには機能しませんでした が、私には機能しました。以前の変更のいずれかが実際に不要であるかどうかはわかりません。
次のように、最後に/etc/apparmor.d/usr.lib.snapd.snap-confine.real
を追加して、ptrace read peer=unconfined,
を変更します。
$ tail /etc/apparmor.d/usr.lib.snapd.snap-confine.real
# But we don't want anyone to touch /snap/bin
audit deny mount /snap/bin/** -> /**,
audit deny mount /** -> /snap/bin/**,
# Allow the content interface to bind fonts from the Host filesystem
mount options=(ro bind) /var/lib/snapd/hostfs/usr/share/fonts/ -> /snap/*/*/**,
}
ptrace read peer=unconfined,
}
Sudo apparmor_parser -r /etc/apparmor.d/*snap-confine*