Ubuntu APT Could not get lock /var/lib/dpkg/lock 문제
우분투(Ubuntu) 를 부팅하고 난 후에 로그인을 하면 몇개의 새로운 업데이트가 있는지를 알려준다. 그래서 새로운 패키지 설치를 위해서 ‘apt upgrade’ 명령을 하게 되면 다음과 같은 오류 메시지를 만나곤 한다.
1 2 3 |
# apt upgrade E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it? |
패키지를 설치하는 명령어인 dpkg 명령어가 이미 실행중인 것으로 인해서 실행이 안된다는 것이다. 실행을 할때에 lock 파일을 생성하게 되는데, 이를 근거로 혹시 다른 것이 이미 실행되고 있는건 아닌지 추측하고 있다.
도대체 무슨 일이 벌어지고 있는 걸까? 다른 것이 이미 실행중일지도 모르니까 다음과 같이 프로세스를 체크해 본다.
1 2 3 4 |
# ps aux | grep apt root 1350 0.0 0.0 4504 736 ? Ss 20:05 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily install root 1355 0.0 0.0 4504 1684 ? S 20:05 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held install root 12203 0.0 0.0 15504 1008 ttyS0 S+ 20:06 0:00 grep --color=auto apt |
보아하니 apt.systemd.daily 이것이 apt 명령어를 실행하고 그래서 dpkg 가 이미 실행되고 있는 것으로 보인다.
이것은 아마도 부팅과 동시에 패키지를 업데이트 해주는일을 하는 녀석인 것으로 보이는데, 자동으로 패키지를 업데이트를 해준다니 얼마나 고맙겠냐만은 때로는 어떤 것이 설치되는지를 직접 선택하거나 해야하는 경우에는 자동으로 알아서 해주는것이 큰 위험이 될 수도 있다.
이것을 멈추게 하는 방법이 있다.
1 2 3 4 |
# systemctl disable apt-daily-upgrade.service # systemctl disable apt-daily-upgrade.timer # systemctl disable apt-daily.service # systemctl disable apt-daily.timer |
이렇게하면 부팅하면서 자동으로 apt 업데이트를 하는 건 막을 수 있다.
참고,
만일 부팅과장에서 각 서비스별 소비된 시간을 알고 싶다면 다음과 같이 확인해 볼 수 있다.
1 2 |
# systemd-analyze Startup finished in 2.903s (kernel) + 1min 56.476s (userspace) = 1min 59.379s |
이렇게 보면 userspace 로 인한 시간이 1분이 넘어간다. 좀 더 자세하게 보기 위해서는 다음과 같이 확인해 볼수 있다.
1 2 3 4 5 6 7 |
# systemd-analyze blame 1min 13.990s apt-daily-upgrade.service 34.654s apt-daily.service 3.130s dev-sda1.device 3.002s networking.service 1.852s apparmor.service 1.818s snmpd.service |