みなさん、こんにちは。
Bodhi Linux 7.0.0 でSNAPプログラムを使っていたのですが、いつの間にかプログラム起動時にエラー「cannot attach cgroup program: Operation not permitted」が発生するようになりました。
このエラーは、システムのリソース管理に関連するもので、なかなか手強い相手でした。同じような問題に直面している方の助けになればと思い、解決までの道のりをブログ記事にまとめました。
それでは、さっそく見ていきましょう!
エラー発生!SNAPプログラムが起動しない
ある日、いつものようにSNAPプログラムを起動しようとしたところ、見慣れないエラーメッセージが表示されました。
cannot attach cgroup program: Operation not permitted
このエラーメッセージで検索してみると、どうやらシステムのコントロールグループ(cgroup)という機能に関連しているようです。cgroup (Control Groups) とは、Linuxカーネルの機能で、プロセスやその集団(コンテナなど)が使うCPU、メモリ、ディスクI/Oなどのシステムリソースを制限・管理・隔離するための仕組みです。SNAPプログラムが正常に動作するためには、この cgroup が適切に機能している必要があるようでした。
原因の探求:cgroup、カーネル、そしてSnapd
エラーの原因を特定するため、いくつかの可能性を検討しました。
- cgroup のバージョン
近年の Linux ディストリビューションでは cgroup v2 が推奨されていますが、システムが古い cgroup v1 を使用している場合、SNAP の動作に必要な機能が不足している可能性を疑いました。
- カーネルの問題
使用している Linux カーネルが、SNAP が必要とする cgroup の機能を十分にサポートしていない、または何らかの不具合を抱えている可能性を疑いました。
- Snapd の状態
Snap デーモン (snapd) 自体のインストールが不完全であるか、バージョンが古い可能性を疑いました。
試行錯誤:再インストールとカーネルの確認
まず、基本的なトラブルシューティングとして、Snapd の再インストールを試みました。
sudo apt remove --purge snapd
sudo apt autoremove
sudo apt install snapd
しかし、再起動後もエラーは解消されませんでした。
次に、cgroup のバージョンを確認しました。ターミナルで以下のコマンドを実行したところ、
cat /sys/fs/cgroup/cgroup.subtree_control
私の環境では memory pids
と表示され、cgroup v1 が使用されていることが分かりました。SNAP は cgroup を利用するため、これがエラーの原因の一つになっている可能性が高いと考えられました。
そこで、 /etc/default/grub
ファイルを開き、GRUB_CMDLINE_LINUX_DEFAULT
の行に systemd.unified_cgroup_hierarchy=1
というパラメータを追加してみたのですが、解決しませんでした。本来、この設定で cgroup v2 が使用されるようになるはずなのですが、残念ながら、そうはなりませんでした。
-generic-hwe カーネルへの着目
次に、カーネルに注目することにしました。uname -r で使用しているカーネルを調べてみると、linux-image-5.4.0-156-generic と表示され、かなり古いカーネルを使用していることがわかりました。
様々な情報を調べていく中で、Linux カーネルには複数の種類があり、ハードウェアのサポートやパフォーマンス特性が異なることを知りました。使用している linux-image-5.4.0-156-generic が最新のSNAPに対応できないのかもしれません。よって、カーネルをアップグレードしてみることにしました。調査の結果、generic-hwe
というカーネルが、比較的新しいハードウェアをサポートし、安定した動作が期待できるとのことでした。私の Bodhi Linux 7.0.0 (Ubuntu 22.04 LTS ベース) にも、このカーネルが利用できるのではないかと考え、以下のコマンドで検索してみました。
sudo apt update
sudo apt search linux-generic-hwe
検索結果には、linux-generic-hwe-22.04
というパッケージが見つかりました。これが、私のシステムに適した generic-hwe
カーネルである可能性が高いと考え、早速インストールを試みました。
sudo apt install linux-generic-hwe-22.04
インストールが完了した後、念のためシステムの再起動を行いました。
GRUBメニューからの -generic カーネル選択
再起動後、自動的に OS が起動しましたが、どうやら、古いカーネルを使用し続けてしまっているようでした。GRUBは前回正常起動したカーネルを再利用するのが標準のようです。カーネルが古いままのためか、SNAP プログラムのエラーも解決していません。
そこで GRUB メニューを表示させ、起動するカーネルを選択することを試みました。多くの Linux システムでは、起動直後に Esc キー を押下げするか、Shift キー を押し続けることで GRUB メニューが表示されます。私の環境では Esc キーで、無事に GRUB メニューを表示させることができました。
GRUB メニューには、複数の起動オプションが表示されており、その中にインストールした -generic
カーネルのエントリがあることを確認しました。カーソルキーを使ってこの -generic
カーネルのエントリを選択し、Enter キーを押すと、システムは選択した -generic
カーネルで起動を開始しました。
起動後、問題の SNAP プログラムを試してみたところ、エラーが発生せず、無事に起動することができたのです!
すばらしい!これで SNAP プログラムを気兼ねなくインストールして使うことができます。
古いカーネルは、トラブルを避けるため、以下のコマンドで削除しました。これで古いカーネルが間違って起動することはなくなります。
sudo apt remove --purge linux-image-5.4.0-156-generic linux-headers-5.4.0-156-generic
cgroup の状況と今後の課題
SNAP プログラムは起動するようになったものの、念のため cgroup のバージョンを再度確認してみました。
cat /sys/fs/cgroup/cgroup.subtree_control
結果は依然として memory pids
でした。これは、システムが完全には cgroup v2 モードで動作していないことを示唆しています。しかし、-generic-hwe
カーネルで起動したことで、SNAP プログラムが正常に動作するようになったことは大きな進歩です。
今後は、システム全体で cgroup v2 を有効にするための設定を調査していきたいと思います。
まとめ
今回の SNAP 起動エラーは、カーネルを generic-hwe
に変更し、GRUB メニューから手動で選択することで解決に至りました。もし同様のエラーに遭遇された方は、まず -generic-hwe
カーネルのインストールと、GRUB メニューからの起動を試してみてください。
本日も最後までお読みいただきありがとうございました。
それでは、よい Bodhi Linux ライフを!
Bodhi LInux 関係の記事はこちらからもお読みいただけます。