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 apttiế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.servicekhoả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::Enablevô 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::Enablecó giá trị 0từ dòng lệnh (xem bên dưới), unattended-upgradeschươ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.dailyhoàn toàn
Tập cloud-initlệ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-inittậ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.servicethông qua một
cloud-inittập lệnh?
--nowcờ trong systemctl disablelệnh để thay đổi có hiệu lực ngay lập tức. Đó là vấn đề của tôi.
disable --nowtương đương với stoptheo sau disable.