Debian 9: 起動時のCould not get lock /var/lib/dpkg/lockを回避する

起動時に(周期的に)題名のエラーが出る現象を回避する方法を記載します。

1 Could not get lock /var/lib/dpkg/lock

他のプロセスがaptを含むdpkg関連の操作を実行している場合に発生します。

$ sudo apt install -y <package>
<snip>
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource
temporarily unavailable)

2 apt-dailyとunattended-upgrades

apt-dailyとapt-daily-upgradesは起動時と周期的にapt updateとunattended-upgradeを実行します。

apt-daily.service 起動時にapt updateとunattended-upgrade –download-onlyを実行
apt-daily.timer 周期的にapt updateとunattended-upgrade –download-onlyを実行
apt-daily-upgrades.service 起動時にunattended-upgradeを実行
apt-daily.timer 周期的にunattended-upgradeを実行

unattended-upgradeは自動的に更新パッケージをダウンロードとインストールする仕組みです。

unattended-upgrade –download-only 更新パッケージをダウンロードする
unattended-upgrade 更新パッケージを更新する
unattended-upgrades.service シャットダウン時にunattended-upgradeをkillする

これらはセキュリティアップデート等を自動的に反映する為の仕組みです。デスクトップやサーバでは有効にすべきです。しかし、これらの延長で/var/lib/dpkg/lockがロックされます。

これらが引き起こす/var/lib/dpkg/lockへのロックが邪魔になる場合もあります。例えば、ベースとなる仮想マシンをクローンしてメールサーバをインストールするような場合、メールサーバのインストールが妨害されてしまう場合があります。

3 Could not get lock /var/lib/dpkg/lockを回避する

よってapt-dailyとapt-daily-upgradesを停止すればCould not get lock /var/lib/dpkg/lockを回避することができます。

$ sudo systemctl mask apt-daily.service
$ sudo systemctl disable apt-daily.timer
$ sudo systemctl mask apt-daily-upgrade.service
$ sudo systemctl disable apt-daily-upgrade.timer