Ubuntu 26.04 講座 / パッケージの削除・保留・依存関係エラーの解決方法

Ubuntuのパッケージ問題は、削除・保留・ロック・依存関係エラーを区別して解決します。まず状態と提案の一覧を確認し、シミュレーション実行で影響を確認した後、必要な対応のみを適用する必要があります。

削除コマンドの範囲の区分

作業 影響
remove プログラムの削除; 一部のシステム設定は残る場合があります
purge パッケージの管理対象設定も削除; ホーム内のすべてのデータを削除することを意味しません
autoremove 自動インストール扱いのパッケージのうち、もはや不要と判断されたものを削除
hold 特定パッケージの自動変更を保留; セキュリティ更新も阻止する場合があります

実習は業務で使用しないhelloで行います。既にインストールされていたかを記録し、未インストールの場合は前回のAPTインストール手順を使用します。カーネル・ネットワーク・ログインパッケージは削除練習の対象にしません。

削除前の模擬実行と一覧読み取り

apt-get -s remove hello
apt-get -s purge hello
apt-get -s autoremove

各結果で削除されるパッケージを比較します。予想と異なるドライバーやサービスが含まれている場合は、実際の実行は行いません。同意した範囲内でのみsudo apt remove helloのように適用し、-yで確認手順を省略しません。

保留確認と元の状態への復帰

(
set -eu
if [ "$(dpkg-query -W -f='${Status}' hello 2>/dev/null)" != "install ok installed" ]; then
    printf 'Install the nonessential hello lab package first.\n' >&2
    exit 1
fi
was_held=$(apt-mark showhold | grep -x hello || true)
sudo apt-mark hold hello
apt-mark showhold
if [ "$was_held" != hello ]; then
    sudo apt-mark unhold hello
fi
apt-mark showhold
)

インストール済みのhelloの既存の保留状況をまず保存し、今回新たに保留した場合のみ解除します。元々保留されていた場合はそのまま残します。解除は更新インストールとは異なり、失敗した場合は出力と実際の保留状態を再確認します。他のパッケージの保留も維持し、長期保留には理由・レビュー日・セキュリティ影響を記録します。

ロックエラーは実行中の作業から確認する

systemctl status apt-daily.service apt-daily-upgrade.service --no-pager
ps -eo pid,etime,args | grep -E "[a]pt|[d]pkg|[u]nattended"

他の更新が正常に進行中であれば待ちます。ロックファイルを削除したり、パッケージプロセスをむやみに強制終了するとデータベース作業を壊す可能性があります。サービスが動いていないという出力だけでロックが孤立状態だと結論付けず、関連プロセスとログも確認してください。

未完了設定と依存関係の復旧

sudo dpkg --audit
apt-get -s --fix-broken install

中断されたインストールのパッケージ設定が残っている場合、作業ログとバックアップを確認した後でsudo dpkg --configure -aを使用できます。このコマンドはインストールスクリプトを実行し、サービスが変更される場合があります。壊れた依存関係の模擬実行で必要なインストール・削除だけを提案するかどうかを読んで、sudo apt-get --fix-broken install適用の可否を判断します。

エラーがリポジトリのサポート終了・不正なバージョン混在から発生した場合、依存関係コマンドを繰り返すよりもソースを修正します。終了したらsudo dpkg --audit、sudo apt-get checkと当該サービスの実際の動作を確認します。パッケージチェックの成功とアプリデータの復旧成功は異なる結果です。

公式パッケージ管理ドキュメントで、削除と依存関係処理の基本動作を確認できます。