Hình ảnh VM máy chủ Ubuntu 16.04 rõ ràng bắt đầu "apt-Daily.service" cứ sau 12 giờ hoặc lâu hơn; dịch vụ này thực hiện các nhiệm vụ khác nhau liên quan đến APT như làm mới danh sách các gói có sẵn, thực hiện nâng cấp không giám sát nếu cần, v.v.
Khi bắt đầu từ "snapshot" VM, dịch vụ được kích hoạt ngay lập tức , vì (tôi đoán) systemd nhận ra nhanh chóng rằng bộ định thời gian đã tắt từ lâu.
Tuy nhiên, một APT đang chạy sẽ ngăn các apt
tiến trình khác chạy khi nó khóa /var/lib/dpkg
. Thông báo lỗi cho biết điều này trông như thế này:
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?
Tôi cần phải tắt tác vụ APT tự động này cho đến khi Ansible hoàn thành cài đặt máy (thường bao gồm cài đặt các gói); xem https://github.com/gc3-uzh-ch/elasticluster/issues/304 để biết thêm thông tin và bối cảnh.
Tôi đã thử nhiều tùy chọn khác nhau để vô hiệu hóa tính năng "nâng cấp không giám sát" thông qua tập lệnh "dữ liệu người dùng" cloud-init
, nhưng tất cả chúng đều thất bại.
1. Vô hiệu hóa tác vụ systemd
nhiệm vụ systemd apt-daily.service
được kích hoạt bởi apt-daily.timer
. Tôi đã cố gắng vô hiệu hóa cái này hoặc cái kia, hoặc cả hai, với các kết hợp khác nhau của các lệnh sau; Tuy nhiên, apt-daily.service
khoảnh khắc được bắt đầu sau khi VM sẵn sàng chấp nhận kết nối SSH ::
#!/bin/bash
systemctl stop apt-daily.timer
systemctl disable apt-daily.timer
systemctl mask apt-daily.service
systemctl daemon-reload
2. Tắt tùy chọn cấu hình APT::Periodic::Enable
Script /usr/lib/apt/apt.systemd.daily
đọc một vài biến cấu hình APT; cài đặt sẽ APT::Periodic::Enable
vô hiệu hóa chức năng hoàn toàn (dòng 331--337). Tôi đã thử vô hiệu hóa nó với đoạn script sau ::
#!/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
Tuy nhiên, mặc dù APT::Periodic::Enable
có giá trị 0
từ dòng lệnh (xem bên dưới), unattended-upgrades
chương trình vẫn chạy ...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. Hủy bỏ /usr/lib/apt/apt.systemd.daily
hoàn toàn
Tập cloud-init
lệnh sau sẽ loại bỏ hoàn toàn tập lệnh nâng cấp không giám sát ::
#!/bin/bash
mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED
Tuy nhiên, tác vụ chạy và tôi có thể thấy nó trong bảng quy trình! mặc dù tập tin không tồn tại nếu được thăm dò từ dòng lệnh ::
ubuntu@test:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory
Dường như cloud-init
tập lệnh (cùng với dòng lệnh SSH) và quy trình hệ thống gốc thực thi trong các hệ thống tệp và không gian xử lý riêng biệt ...
Câu hỏi
Có một cái gì đó rõ ràng tôi đang thiếu? Hoặc có một số ma thuật không gian tên đang diễn ra mà tôi không biết?
Quan trọng nhất: làm thế nào tôi có thể vô hiệu hóa apt-daily.service
thông qua một
cloud-init
tập lệnh?
--now
cờ trong systemctl disable
lệnh để thay đổi có hiệu lực ngay lập tức. Đó là vấn đề của tôi.
disable --now
tương đương với stop
theo sau disable
.