Ubuntu 16.04 서버 VM 이미지는 12 시간 정도마다 "apt-daily.service"를 시작합니다. 이 서비스는 사용 가능한 패키지 목록 새로 고침, 필요한 경우 무인 업그레이드 수행 등과 같은 다양한 APT 관련 작업을 수행합니다.
VM "스냅 샷"에서 시작할 때 systemd가 타이머가 오래 전에 꺼져 야한다는 것을 신속하게 인식 하므로 서비스가 즉시 트리거 됩니다.
그러나 APT를 실행하면 다른 apt
프로세스가 잠금을 유지하면서 실행되지 않습니다 /var/lib/dpkg
. 이를 나타내는 오류 메시지는 다음과 같습니다.
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?
Ansible이 컴퓨터 설정 (일반적으로 패키지 설치 포함)을 완료 할 때까지이 자동 APT 작업을 비활성화해야합니다. 자세한 정보 및 컨텍스트는 https://github.com/gc3-uzh-ch/elasticluster/issues/304 를 참조 하십시오 .
에 대한 "사용자 데이터"스크립트를 통해 "무인 업그레이드"기능을 비활성화하는 다양한 옵션을 시도했지만 cloud-init
지금까지 모두 실패했습니다.
1. 시스템 작업 비활성화
systemd 작업 apt-daily.service
이에 의해 트리거됩니다 apt-daily.timer
. 다음 명령의 다양한 조합으로 하나 또는 다른 또는 둘 다를 비활성화하려고했습니다. 여전히 apt-daily.service
VM이 SSH 연결을 수락 할 준비가 된 후 시작됩니다. :
#!/bin/bash
systemctl stop apt-daily.timer
systemctl disable apt-daily.timer
systemctl mask apt-daily.service
systemctl daemon-reload
2. 구성 해제 옵션 APT::Periodic::Enable
스크립트 /usr/lib/apt/apt.systemd.daily
는 몇 가지 APT 구성 변수를 읽습니다. 이 설정 APT::Periodic::Enable
은 기능을 모두 비활성화합니다 (331-337 행). 다음 스크립트를 사용하여 비활성화하려고했습니다.
#!/bin/bash
# cannot use /etc/apt/apt.conf.d/10periodic as suggested in
# /usr/lib/apt/apt.systemd.daily, as Ubuntu distributes the
# unattended upgrades stuff with priority 20 and 50 ...
# so override everything with a 99xxx file
cat > /etc/apt/apt.conf.d/99elasticluster <<__EOF
APT::Periodic::Enable "0";
// undo what's in 20auto-upgrade
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
__EOF
그러나 명령 줄에서 APT::Periodic::Enable
값 0
을 얻음에도 불구하고 (아래 참조) unattended-upgrades
프로그램은 계속 실행됩니다 ...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. /usr/lib/apt/apt.systemd.daily
완전히 제거
다음 cloud-init
스크립트는 무인 업그레이드 스크립트를 모두 제거합니다.
#!/bin/bash
mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED
여전히 작업이 실행되고 프로세스 테이블에서 볼 수 있습니다! 명령 행에서 검사 한 경우 파일이 존재하지 않지만 :
ubuntu@test:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory
마치 cloud-init
스크립트 (SSH 명령 줄과 함께)와 루트 시스템 프로세스가 별도의 파일 시스템과 프로세스 공간에서 실행 되는 것처럼 보입니다 .
질문
내가 놓친 것이 분명합니까? 아니면 내가 알지 못하는 네임 스페이스 마술이 있습니까?
가장 중요한 것은 : 스크립트를 apt-daily.service
통해
비활성화하는 방법은 cloud-init
무엇입니까?
--now
플래그 가 누락되었을 수 있습니다 systemctl disable
. 그게 내 문제 였어
disable --now
는 stop
뒤에 오는 것과 같습니다 disable
.