はじめに
Arch Linuxでパッケージを更新しようとした際、次のようなエラーが表示された経験はないだろうか。
error: failed to init transaction (unable to lock database)
error: could not lock database: File exists
初めて見ると「パッケージデータベースが壊れたのでは?」と焦ってしまう。しかし、多くの場合は単純なロックファイルが原因であり、数分で解決できる。
この記事では、pacmanのロックエラーが発生する原因と、安全に解決する方法を順番に解説する。
pacmanのロックエラーとは
pacmanは、複数の処理が同時にパッケージデータベースを書き換えないように、ロックファイルを作成する。
ロックファイルは次の場所にある。
/var/lib/pacman/db.lck
パッケージのインストールやアップデート中は、このファイルが作成される。
正常に終了すれば自動で削除されるが、次のようなケースでは残ってしまうことがある。
- PCを強制終了した
- ターミナルを途中で閉じた
- pacmanの処理中に電源が切れた
- ネットワーク障害で更新が中断した
- 別のpacmanプロセスがまだ動作している
まずはpacmanが動作中ではないか確認する
ロックファイルを削除する前に、本当にpacmanが実行されていないか確認する。
ps aux | grep pacman
または
pgrep pacman
何も表示されなければ、pacmanは終了している。
もしPIDが表示された場合は、更新処理がまだ動いている可能性がある。
慌ててロックファイルを削除せず、処理が終わるまで待とう。
ロックファイルを削除する
pacmanが完全に停止していることを確認できたら、ロックファイルを削除する。
sudo rm /var/lib/pacman/db.lck
これだけで解決するケースがほとんどだ。
続いてパッケージデータベースを更新する。
sudo pacman -Sy
さらにシステム全体を更新して問題がないか確認する。
sudo pacman -Syu
正常に実行できれば復旧完了だ。
「別のpacmanが動いている」場合
例えば次のようなプロセスが残っていることがある。
/usr/bin/pacman
yay
paru
pamac
AURヘルパーも内部ではpacmanを使用するため、同時実行できない。
不要なプロセスであれば終了する。
sudo kill PID
終了しない場合は
sudo kill -9 PID
を利用できるが、実際に更新中だった場合はシステムが不整合になる可能性がある。
強制終了は最後の手段として考えよう。
データベースが壊れていないか確認する
ロック解除後もエラーが続く場合は、パッケージデータベースを再同期する。
sudo pacman -Syy
さらに更新する。
sudo pacman -Syu
-Syyはミラー上のデータベースを強制的に再取得するオプションだ。
キャッシュの不整合が原因の場合はこれで改善することが多い。
よくある質問
sudo rmで削除して大丈夫?
pacmanが動作していないことを確認できていれば問題ない。
逆に、動作中に削除するとパッケージ管理が壊れる可能性がある。
再起動すれば直る?
多くの場合は直る。
再起動するとpacmanプロセスが終了するため、ロック解除後に正常に更新できることが多い。
yayでも同じエラーになる
yayやparuは内部でpacmanを呼び出している。
つまり原因は同じなので、まずロックファイルの状態を確認しよう。
トラブルを防ぐコツ
次の点を意識するとロックエラーはほとんど発生しない。
- 更新中はターミナルを閉じない
- ノートPCはACアダプター接続時に更新する
pacmanとyayを同時に実行しない- SSH接続では
tmuxやscreenを利用する - 定期的に
sudo pacman -Syuで最新状態を維持する
特にローリングリリースであるArch Linuxでは、長期間更新しないよりも、こまめにアップデートする方がトラブルが少ない。
まとめ
pacmanのロックエラーは、Arch Linuxユーザーなら一度は遭遇する代表的なトラブルだ。
多くの場合は次の3ステップで解決できる。
- pacmanプロセスが動いていないことを確認する
/var/lib/pacman/db.lckを削除するsudo pacman -Syuで正常に更新できるか確認する
ロックファイルはシステムを保護するための仕組みであり、決して悪いものではない。原因を理解して正しく対処すれば、数分で復旧できる。
Arch Linuxでは「なぜこのエラーが起きたのか」を理解することが、安定した運用への近道になる。


コメント