อิมเมจ VM เซิร์ฟเวอร์ Ubuntu 16.04 เห็นได้ชัดว่าเริ่ม "apt-daily.service" ทุก ๆ 12 ชั่วโมงหรือมากกว่านั้น บริการนี้ทำหน้าที่ที่เกี่ยวข้องกับ APT หลายประการเช่นการรีเฟรชรายการแพ็คเกจที่มีอยู่ดำเนินการอัปเกรดแบบไม่ต้องใส่ข้อมูลหากจำเป็น ฯลฯ
เมื่อเริ่มต้นจาก VM "snapshot" บริการจะถูกเรียกใช้ทันทีเนื่องจาก (ฉันเข้าใจ) 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?
ฉันต้องปิดการใช้งานงาน APT อัตโนมัตินี้จนกว่า Ansible จะเสร็จสิ้นการตั้งค่าเครื่อง (ซึ่งโดยทั่วไปเกี่ยวข้องกับการติดตั้งแพ็คเกจ) ดูhttps://github.com/gc3-uzh-ch/elasticluster/issues/304สำหรับข้อมูลเพิ่มเติมและบริบท
ฉันได้ลองตัวเลือกต่าง ๆ เพื่อปิดใช้งานคุณลักษณะ "การอัปเกรดแบบไม่ต้องใส่ข้อมูล" ผ่านสคริปต์ "ข้อมูลผู้ใช้" สำหรับcloud-init
แต่พวกเขาทั้งหมดล้มเหลวไปแล้ว
1. ปิดใช้งานภารกิจ systemd
งาน systemd ถูกเรียกโดยapt-daily.service
apt-daily.timer
ฉันได้ลองปิดการใช้งานอย่างใดอย่างหนึ่งหรืออื่น ๆ หรือทั้งสองอย่างด้วย cobinations ต่าง ๆ ของคำสั่งต่อไปนี้ ยังคง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) และกระบวนการรูท systemd ดำเนินการในระบบไฟล์แยกต่างหากและพื้นที่กระบวนการ ...
คำถาม
มีบางสิ่งที่ชัดเจนว่าฉันหายไปหรือไม่? หรือมีเนมสเปซเวทมนตร์ที่เกิดขึ้นซึ่งฉันไม่รู้
ที่สำคัญที่สุด: ฉันจะปิดการใช้งานapt-daily.service
ผ่าน
cloud-init
สคริปต์ได้อย่างไร
--now
ตั้งค่าสถานะในsystemctl disable
คำสั่งเพื่อให้การเปลี่ยนแปลงมีผลทันที นั่นคือปัญหาของฉัน
disable --now
จะเทียบเท่ากับการตามstop
disable