ubuntuとかでapt update してもエラーになってアップデートできなくなることがあります。エラーメッセージでググるとめっちゃいっぱい記事があるのですが、それでも直ったり直らなかったりするので、方法を書いておこうと思います。
症状
次のような症状に対する記事です。
- 今までは問題なくアップデート出来ていた
- いつのまにか「apt update」するとエラーが表示されてupdateが完了しない。
エラーの例
例えばこんな感じのエラーです。
sh: 1: /usr/lib/cnf-update-db: not found
パッケージリストを読み込んでいます... 完了
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code
原因
エラーの原因はメッセージそのままなんですが、要は更新中に実行しようと思ったコマンドが見つからないときに止まります。
直し方
見つからない命令の記載部分を見つけて、コメントアウトすると解決します。
まず「/etc/apt/apt.conf.d/」に移動します。
cd /etc/apt/apt.conf.d/次に、エラーメッセージが含まれるファイルを検索します。今回のエラーだと、エラーメッセージ内に「/usr/lib/cnf-update-db: not found」とあるので、訳すと「/usr/lib/cnf-update-dbが見つからないよ!」という意味になります。そこで、このコマンドが書かれているファイルを探します。
grep /usr/lib/cnf-update-db ./*すると、こんな感じで対象のファイルが見つかります。

今回は「50command-not-found」内に「cnf-update-db」というコマンドが見つかりました。このファイルを編集します。
vim ./50command-not-foundこの場合はテキストエディタとしてvimを使ってますが、テキストエディタであればnanoでもEmacsどれでもいいです(笑)

今回の場合、該当部分は「APT::Update::Post-Invoke-Success」から「}:」までです。この最後の3行をコメントアウトします。

行頭に「#」を追加してコメントアウトしました。これを保存して終了します。解決方法は以上です。

うまくいきました!
もしダメなら…
エラーメッセージにヒントが隠されていると思うので、落ち着いてエラーメッセージを読みましょう…エラーメッセージから記号を削除してググると、海外の記事が出てくるかと思います。海外の記事は英語のことが多いですが、最近はWebページ翻訳も性能が上がってきているのでヒントになるかと思います。
皆さんの参考になれば幸いです。
