February 17, 2020
VMware, VirtualBox 등 하이퍼바이저(Hypervisor) 프로그램에서 우분투(Ubuntu)를 복제하여 사용하던 중이었습니다. 복제 이후 부팅을 하고 패키지를 설치하기 위해서 APT(Advanced Package Tool)을 이용하여 패키지 설치를 진행하려고 하였는데, dpkg lock 관련 오류가 발생하길래 무슨 문제인가 찾아보던 중
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
우분투 14.04 이후 버전 부터는 기본 설정으로 부팅 이후에 패키지를 자동으로 최신 보안(및 기타) 업데이트(Unattended-upgrades)를 하도록 설정 되어있다는 사실을 알게 되었습니다. 부팅 이후 자동 업데이트가 끝날 때까지 apt, dpkg 같은 패키지 매니저를 사용하여 패키지를 설치하지 못하는 것을 기다리는 게 싫기도 했고, 자동 업데이트로 인해서 패키지 버전이 꼬일 수 있다는 생각이 들어 우분투 패키지 자동 업데이트를 끄도록 설정하였습니다.
우선, APT 설정 파일들은 /etc/apt/apt.conf.d
디렉토리 아래 있습니다. 디렉토리 안의 파일들을 보면 prefix로 숫자가 붙어있는 것을 확인할 수 있는데(10periodic, 20auto-upgrades 등),
APT 프로세스가 해당 파일들을 순차(오름차순)로 읽고 같은 설정이 있을 경우 가장 마지막에 읽은 설정으로 적용되기 때문에 높은 번호 파일의 내용으로 작업하시면 됩니다.
APT는 설정값을 주기적으로 확인하는 데몬 프로세스가 존재하기 때문에 재부팅 이전에 설정값을 확인하실 수 있습니다.
apt-config dump APT::Periodic::Unattended-Upgrade
# vi /etc/apt/apt.conf.d/21auto-upgrades
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::Unattended-Upgrade "0";
# vi /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
...
# default
// "${distro_id}:${distro_codename}-updates";
...
}
sudo apt-get remove --purge unattended-upgrades
# 기본으로 설치되어 있습니다.
sudo apt-get install unattended-upgrades
# vi /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
...
# default
"${distro_id}:${distro_codename}-security";
# default: // "${distro_id}:${distro_codename}-updates";
"${distro_id}:${distro_codename}-updates";
# 다른 APT 소스를 업그레이드 할 경우 수정
# default
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
...
}
# 일부 패키지 자동 업데이트 제외하기
Unattended-Upgrade::Package-Blacklist {
# default
// "vim";
// "libc6";
// "libc6-dev";
// "libc6-i686";
};
# 재부팅이 필요한 업그레이드가 있을 경우 자동으로 재부팅하도록 설정
# 모든 업그레이드가 끝나고 재부팅됩니다.
Unattended-Upgrade::Automatic-Reboot "true";
# 재부팅 전 유예 시간
Unattended-Upgrade::Automatic-Reboot-Time "00:00";
sudo apt-get remove --purge unattended-upgrades
sudo apt-get install --reinstall unattended-upgrades