AppArmorのバグにより、AAの削除、AAの回復、またはAptを使用した新しいアプリのインストールがブロックされます。

AppArmorのバグにより、AAの削除、AAの回復、またはAptを使用した新しいアプリのインストールがブロックされます。

AppArmorが私のシステムに問題を引き起こしています。 AppArmorが実行を妨げるので、無効にしました。新しいaptアプリケーションをインストールできません。とにかく試してみると…

E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

コマンドを実行すると、次の結果が表示されます。

Reloading AppArmor profiles

再起動するまでそのまま残ります。 AppArmorを削除しようとすると、同様のメッセージが表示されます。これにより、新しいアプリケーションを追加したり既存のアプリケーションをアップグレードしたりできなくなります。

LSB-RELEASEから:

DISTRIB_ID=neon
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="KDE neon 5.27"

この問題を解決するにはどうすればよいですか?

答え1

実際にAppArmorを無効にするのは少し面倒ですが、手順を実行する順序を知っていれば特に難しくありません。キーは実際にはユーザー空間にはまったく存在しませんが、カーネルコマンドラインパラメータ、特にlsm=アクティブ化と優先順位を制御する値から発生します。Linuxセキュリティモジュール

まずcat /sys/kernel/security/lsm、端末でコマンドを実行して、カーネルがロードしているモジュールの参照点を取得します。これにより、次の内容が報告されることがありますlockdown,capability,landlock,yama,apparmor。これで、パラメータからAppArmor LSMを削除して、再起動用にシステムを準備します。 AppArmorが欠落しているからです1sm=

  1. aa-statusどのAAプロファイルが有効になっているかを確認するには、tpの出力を見てください。

  2. 問題sudo aa-teardown、これはアクティブとして報告されたすべてのプロファイルを削除します。aa-status逆アセンブリプロセスが終了したら、もう一度呼び出して成功を確認します。

  3. システム起動時にAppArmorデーモンをロードしないようにサービス管理者に指示してください。モジュールがロードされないようにカーネルコマンドラインを変更すると、必然的に失敗します。最近はほとんどSystemDを使用しているようですが...

    sudo systemctl stop apparmor.service
    sudo systemctl disable apparmor.service
    

    sudo systemctl mask apparmor.service実行を防ぐだけでなく、すべてのコマンドを防止する2番目のコマンド(個人的な好み)を自由に使用することもできます。その他サービスは、自分がシステムに存在するかどうかはわかりません。または、rc.dを引き続き使用している場合は、このシーケンスも操作を実行します。

    sudo invoke-rc.d apparmor stop
    sudo update-rc.d -f apparmor remove
    
  4. 実行中のシステムですぐにブートローダー構成を変更するか、ブート中にブートプロセスを中止し、ブートローダーインターフェースを介して現在のデフォルトカーネルコマンドラインを編集するかを決定します。とにかく、ここで魔法が起こります。まず、次のようapparmor=0に追加します。最初の引数カーネルコマンドラインから指定された場所に移動し、lsm=このプロセスの開始時に見たコンマ区切りリストから削除します。apparmor現在のカーネルパラメータがlsm=どこにも指定されていない場合(したがってコンパイルされたカーネルのデフォルト値に依存する場合)、必要な場所に自由に挿入してください。場所は影響しません。

    明確に言えば、前のコマンドの出力がシステムに似ているcat場合lockdown,capability,landlock,yama,apparmorlsm=lockdown,capability,landlock,yamaapparmor=0

これで、システムが起動すると空lsmod | grep apparmorの出力がps aux | grep -v grep | grep apparmor表示され、完全に無効になっていることを確認できます。これにより、パッケージ管理タスクを正常に完了して再開できるようになります。

答え2

メンテナンスの実行

ご意見を誤ってお読みいただきましたので、長くなる前に一緒に知っているとおり、「進行回答」を投稿いたします。パッケージが正常にインストールされたように見えますが、サービスはすべての構成ファイルのロードを拒否します。次のステップから始めましょう。

  1. これでパッケージがインストールされたので、次のコマンドを使用してサービスを一時的に「移動」してみましょうsudo systemctl stop apparmor
  2. 正常に停止したらsudo systemctl disable apparmor
  3. システムがハングしないように再起動してください。

今サービスはシステムを中断しないので、続行します。

  1. AppArmorエントリを読むUbuntu Wiki
  2. アップデートとアップグレードを実行するには:sudo apt update && sudo apt upgrade
    • 上記のアップグレードの問題を解決するために、Peterのいくつかの回答を含む1に戻ります。

私は私たちに問題のある設定ファイルや問題のあるアプリケーションがあると思います。アップデートが完了したら、そのアップデートが見つかるかどうかを確認します。

トラブルシューティングの準備

これは、構成ファイルに問題があるか、破損しているか、破損しているのかわからないためです。失礼、インストールされている各服のプロファイルを一覧表示してテストする必要があります。 APTツールのテスト中に出力を美しくするのに役立つツールを試してみましょう。

  1. まだユニバースリポジトリを追加していない場合は、以下を使用してください。sudo add-apt-repository universe
  2. 設置treesudo apt install -y tree
  3. 質問tree /etc/apparmor.d/ > ~/apparmorProfilesList.txt

apparmorProfilesList.txtを開き、確認する数字を数えます。

プロファイルを無効にする

申し訳ありませんが、スクリプトを使用しないと、すべてのプロファイルを一度に無効にすることはできません。したがって、txtファイルにリストされている各プロファイルを一度に1つずつ無効にする必要があります。また、より詳細な調査の結果、苦情申し立てモードは職場プロファイル違反のみを報告します。苦情モードは機能しないため役に立ちません。したがって、1つだけを無効にしてから1つずつ再度有効にできます。書くのに時間がかかりますので、これが許可されているかどうかコメントでお知らせください。

(コメントが届かず、引き続きこの回答を完成させていただきます。)

方法

この問題を解決するための私のアプローチは、Peterのアプローチとは少し異なります。私はdistroサポートカーネルでプロジェクトを「オフ」にしたくありません。 UbuntuはLSMとAppArmorをサポートしているため、カーネルサポートは有効にしておく必要があります。私のアプローチは次のとおりです。

  1. AppArmor SystemD サービスを無効にします。
  2. すべてのAppArmor設定ファイルをdisabledディレクトリに移動
  3. 構成ファイルをロードせずにAppArmor SystemDサービスを再起動します。これは予想されるエラーを引き起こす可能性がありますが、サービスが中断されるべきではありません。
  4. SystemDサービスを中断するプロファイルが見つかるまで、手順2の各プロファイルを一度に1つずつアクティブなプロファイルディレクトリに移動します。
  5. 問題のあるプロファイルにエラーがある場合は報告してください。

実装する

次のスクリプトを使用して、無効化プロセスを高速化できます。編集者/モデレーターはBASHの専門家から離れているので、このスクリプトを自由に編集してください(この名前を "disableAllProfiles"として指定して実行可能にしてください[ +x])。

#!/bin/bash
# NOTE : Quote it else use array to avoid problems #
PROFILES="/etc/apparmor.d/*"
for p in $PROFILES
do
  echo "Processing $p file..."
  # take action on each file. $p stores current profile
  mv -v "$p" /etc/apparmor.d/disable/
done

lsとに関する/etc/apparmor.d/質問を発行します/etc/apparmor.d/disableヒント:無効にはファイルが必要であり、その親にはファイルが含まれてはいけません。。プロンプトが正しい場合は続行してください。これで、次のことができます。

  1. SystemDサービスを再度有効にして再起動します。 (systemctl enable apparmor && systemctl start apparmor設定ファイルディレクトリが空であるため、エラーが発生する可能性があります。)
  2. 無効なディレクトリの最初のサービスを親ディレクトリに戻します/etc/apparmor.d/
  3. サービスを再ロードして、プロファイルが追加されたことをシステムに通知します。sudo service apparmor reload
  4. プロファイルを移動し続け、停止状態が表示されるまで移動するたびに手順3を繰り返しますReloading AppArmor Profiles。プロセスを終了し、保留中のプロファイルをメモします。保留中のプロファイルをdisableディレクトリに再配置し、すべてのプロファイルが再配置または無効になるまでリストの下に移動し続けます。

エラーレポート

上記のすべての操作が完了すると、無効なディレクトリを停止する設定ファイルが作成されます。次のように発行されます。

dpkg -S <offending profile>

これにより、構成ファイルがどのパッケージに属するかがわかります。使用Ubuntuランチパッドパッケージを検索します。プロフィールに関連するエラーを確認するか、新しいエラーを報告してください。


メモ:上記のテスト方法が最初のプロファイルまたはすべてのプロファイルで失敗すると、状況がさらに悪化する可能性があります。

関連情報