วิธีเปิดใช้งานการอัปเดตอัตโนมัติแบบเงียบสำหรับที่เก็บใด ๆ


43

ฉันอ่านที่นี่วิธีเปิดใช้งานการอัปเดตอัตโนมัติแบบเงียบสำหรับ Google Chrome อย่างไรก็ตามฉันมีที่เก็บอื่น ๆ เช่น spotify, docky และอื่น ๆ ที่ฉันต้องการเปิดใช้งานการอัปเดตแบบเงียบ

ฉันพยายามทำสิ่งนี้ในระบบ Ubuntu 10.04 ของฉัน แต่คำถามนี้ใช้ได้กับ Ubuntu ทุกรุ่น ฉันติดตั้งแพคเกจอัพเกรดแบบอัตโนมัติ

ฉันจะทำสิ่งนี้ได้อย่างไร


คุณต้องการอัปเดตความปลอดภัยเงียบหรือไม่ หรือติดตั้งการอัพเดททั้งหมดโดยปราศจากการแทรกแซง? ทำไม?
david6

1
อัปเดตทั้งหมดรวมถึงที่เก็บของผู้ใช้ด้วย
nik90

คำตอบ:


66

ก่อนติดตั้งgksu:

sudo apt-get install gksu

วิธีที่ง่ายที่สุดในการเปิดใช้งานการอัพเดตแบบอัตโนมัติสำหรับระบบของคุณคือการแก้ไขไฟล์50unattended-upgradesภายใน/etc/apt/apt.conf.d/ด้วยโปรแกรมแก้ไขข้อความที่คุณโปรดปรานตัวอย่างเช่น

gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades

ในนั้นคุณจะต้องแสดงความคิดเห็นส่วนความเห็นของบล็อกอนุญาตต้นกำเนิด

เปลี่ยนแปลง

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
//      "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

ไปยัง

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
        "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

สำหรับซอฟต์แวร์ที่ไม่ได้อยู่ใน repos ของ Ubuntu ที่คุณต้องการอัปเดตคุณต้องเพิ่มที่มาและที่เก็บถาวรลงในไฟล์ ในการค้นหาสิ่งที่มีไว้สำหรับ PPAs ของคุณให้เปิดโฟลเดอร์/var/lib/apt/lists/นั่นคือพื้นที่เก็บข้อมูลสำหรับข้อมูลสถานะสำหรับแต่ละแพ็คเกจทรัพยากร สิ่งที่คุณกำลังค้นหาคือไฟล์ที่ลงท้ายด้วยReleaseในชื่อ

เปิดด้วยตัวแก้ไขข้อความของคุณเช่น Google Chrome:

gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release

Origin: Google, Inc.
Label: Google
Suite: stable
Codename: stable
Version: 1.0
Date: Thu, 17 Nov 2011 19:09:01 +0000
Architectures: i386 amd64
Components: main
Description: Google chrome-linux repository.

ที่มานั้นชัดเจน ( Origin: Google, Inc.) และไฟล์เก็บถาวรจะเป็นสิ่งที่อยู่ภายใต้ line Suite ( Suite: stable)

ถ้าอย่างใดอย่างหนึ่งOriginหรือSuiteหายไปพวกเขาจะเป็นสตริงว่าง แต่โปรดทราบว่าหากทั้งสองอย่างขาดหายไปอาจเป็นไปไม่ได้ที่จะใช้แหล่งข้อมูลนั้นด้วยการอัพเกรดแบบไม่ต้องใส่ข้อมูลโดยไม่รวมแหล่งข้อมูลอื่นที่มีปัญหาเดียวกัน

หลังจากคุณจดบันทึก 2 บรรทัดเหล่านั้นแล้วคุณจะต้องแก้ไข50unattended-upgradesไฟล์และเพิ่มบรรทัดโดยใช้รูปแบบ"<origin>:<archive>";นี้เพื่อเป็นตัวอย่าง"Google\, Inc.:stable";นี้

จุดเริ่มต้นของ Google Chrome นั้นค่อนข้างยุ่งยากเพราะมีช่องว่างจุดสิ้นสุดและเครื่องหมายจุลภาคอยู่ แต่ไฟล์Releaseส่วนใหญ่จะอ่านง่าย

เป็นอีกตัวอย่างหนึ่งที่มาของโหนด JSระบุจุดเริ่มต้น ( Node Source) แต่ไม่ใช่ไฟล์เก็บถาวร "Node Source:";เพื่อให้คุณสามารถจับคู่กับ

ต้นกำเนิดที่ได้รับอนุญาตถูกจับคู่โดยใช้สัญลักษณ์แทนสไตล์เชลล์ (เฉพาะเจาะจงมากขึ้นกับPnmonของfnmatch () ) "Node *:*";หากคุณกำลังพอระมัดระวังที่จะไม่รวมถึงความขัดแย้งแหล่งที่มาก็เป็นไปได้ที่จะเขียนสิ่งที่ต้องการ


อย่าลืมที่จะทำให้การสำรองข้อมูลของคุณไฟล์ก่อนที่จะแก้ไขมันทำกับ50unattended-upgradessudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak

เพื่อทดสอบการเปลี่ยนแปลงทำในไฟล์ที่คุณสามารถใช้sudo unattended-upgradesกับพารามิเตอร์และ--dry-run--debug

--dry-run จะเรียกใช้รอบการอัปเกรดแบบไม่ต้องใส่ข้อมูลยกเว้นจะไม่ติดตั้งการอัปเกรดจริงๆให้ตรวจสอบและยืนยันว่าทุกอย่างใช้ได้

--debug จะเปิดใช้งานโหมด verbose

คุณสามารถตรวจสอบบันทึกสำหรับการที่unattended-upgrades/var/log/unattended-upgrades/unattended-upgrades.log


คุณสามารถเปลี่ยนการกำหนดค่าของการอัพเกรดแบบอัตโนมัติได้โดยแก้ไขไฟล์/etc/apt/apt.conf.d/10periodicตัวเลือกสำหรับการกำหนดค่าอยู่ใน/etc/cron.daily/aptส่วนหัวของสคริปต์ อ่านเพื่อกำหนดความถี่ของการอัพเกรดแบบไม่ต้องใส่ข้อมูล


2
ขอบคุณ ... มีรายละเอียดมาก! ขอถามหน่อยได้ไหมว่าทำไมคุณถึงใส่ \ a หลัง Google
nik90

เนื่องจากอักขระพิเศษในจุดเริ่มต้นจึงเป็นอักขระเลี่ยงสำหรับเครื่องหมายจุลภาค ต้นกำเนิดส่วนใหญ่ที่คุณพบจะไม่มี
Bruno Pereira

1
@jos ไม่มีนั่นคือวิธีการทำงาน, --dry-runจะตรวจสอบว่าอยู่ในรายชื่อที่มีการปรับปรุงมีการปรับปรุงใด ๆ ที่มีอยู่และส่งออกไปยังคุณรายการอัพเดทผ่านสิ่งที่มีค่าของคุณในการ/etc/cron.daily/aptทำงานด้วยตนเองไม่ปรับปรุงรายการที่ผมคิดว่า
Bruno Pereira

1
ฉันควรใส่อะไรเป็นชื่อไฟล์เก็บถาวรเมื่อไฟล์ Release ที่เกี่ยวข้องไม่แสดงรายการ Suite
hsivonen

2
โปรดตรวจสอบวิธีการอัตโนมัติที่นี่: askubuntu.com/a/792621/417607
Abhishek Bhatia

14

วิธีการอัตโนมัติสำหรับคำตอบของ @Bruno Pereira: (โปรดพิจารณานำแสดงโดย gitub repo หากคุณพบว่าคำตอบมีประโยชน์)

ลิงก์รหัส: https://github.com/abhigenie92/unattended_upgrades_repos

  • ตรวจสอบที่เก็บเพื่อเพิ่ม:

    $ python automatic_upgrade.py 
    Add repos:
    "Ubuntu:xenial";
    "LP-PPA-kubuntu-ppa-backports:xenial";
    "LP-PPA-tuxonice:xenial";
    "LP-PPA-webupd8team-sublime-text-3:xenial";
    
    Skipping files due to not present origin or suite. Or origin being a url.:
    packagecloud.io_slacktechnologies_slack_debian_dists_jessie_InRelease
    tiliado.eu_nuvolaplayer_repository_deb_dists_xenial_InRelease
    
  • ตอนนี้แก้ไข/etc/apt/apt.conf.d/50unattended-upgradesเพื่อรวมพวกเขา:

    // Automatically upgrade packages from these (origin:archive) pairs
    Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        "${distro_id}:${distro_codename}-updates";
        "${distro_id}:${distro_codename}-proposed";
        "${distro_id}:${distro_codename}-backports";
      "Ubuntu:xenial";
      "LP-PPA-kubuntu-ppa-backports:xenial";
      "LP-PPA-tuxonice:xenial";
      "LP-PPA-webupd8team-sublime-text-3:xenial";
    };
    ....
    ....
    
  • ตรวจสอบเพื่อดูว่าพวกเขาจะรวม:

    $ sudo unattended-upgrade --dry-run --debug
    Initial blacklisted packages: 
    Initial whitelisted packages: 
    Starting unattended upgrades script
    Allowed origins are: ['o=Ubuntu,a=xenial-security', 'o=Ubuntu,a=xenial-updates', 'o=Ubuntu,a=xenial-proposed', 'o=Ubuntu,a=xenial-backports', 'o=Ubuntu,a=xenial', 'o=LP-PPA-kubuntu-ppa-backports,a=xenial', 'o=LP-PPA-tuxonice,a=xenial', 'o=LP-PPA-webupd8team-sublime-text-3,a=xenial']
    pkgs that look like they should be upgraded: 
    Fetched 0 B in 0s (0 B/s)                                                                                  
    fetch.run() result: 0
    blacklist: []
    whitelist: []
    No packages found that can be upgraded unattended and no pending auto-removals
    

@ andy.holmes ยินดีต้อนรับโปรดนำแสดงโดยที่เก็บ github ถ้าเป็นไปได้ Link- github.com/abhigenie92/unattended_upgrades_repos
Abhishek Bhatia

คุณอาจต้องการแก้ไขวิธีที่ dpkg ปฏิบัติต่อแพคเกจที่พยายามแก้ไขไฟล์การกำหนดค่า: unix.stackexchange.com/questions/138751/…
deoren

สคริปต์ไพ ธ อนนี้ยอดเยี่ยม แต่ฉันต้องแก้ไขสิ่งที่ README.md แนะนำสำหรับการอัปเกรดแบบไม่ตั้งใจ 50 ครั้งเพื่อยืด Raspberry Pi ของฉัน การระบุต้นกำเนิดที่ได้รับอนุญาตเช่น"Raspberry:stable";ไม่ทำงาน ฉันใช้แทน"o=Raspberry, a=stable";
cfogelberg

5

การแก้ไข/etc/apt/apt.conf.d/50unattended-upgradesให้เพิ่มสิ่งต่อไปนี้:

Unattended-Upgrade::Origins-Pattern {
        "origin=*";
};

สิ่งนี้จะอนุญาตการอัปเกรดแบบไม่ต้องใส่ข้อมูลสำหรับทุกแพ็คเกจ


ใช่ขอบคุณสำหรับคำตอบที่ชัดเจนและรัดกุม แต่มีแพคเกจที่มีorigin:''เช่น datadog site:'apt.datadoghq.com'ตัวแทนจาก ในกรณีนั้นก็จำเป็นที่จะต้องเพิ่ม"origin=";เพื่อไม่ข้ามแพ็คเกจที่มีแหล่งกำเนิดเปล่า แต่แล้วมันจะดีกว่าที่จะเพียงแค่ใช้แทน"site=*"; "origin=*";
พอลโทเบียส

ฉันได้เพิ่มที่เก็บข้อมูลของตัวเองลงในไฟล์/etc/apt/sources.list.d/my_repo.listแต่ไม่ได้อัพเกรดแพ็คเกจ sudo apt updateตนเองจะทำงานร่วมกับ เบาะแสอย่างไร
Sander

สิ่งนี้ใช้แหล่งข้อมูลเดียวกันกับการอัปเดตด้วยตนเองหรือไม่เช่นนั้นจะละเว้นแหล่งที่ปิดใช้งานหรือไม่
Silicomancer

3

มีคำแนะนำสำหรับการบังคับให้วิ่งจะทำให้ cron เริ่มต้นการปรับปรุงอัตโนมัติที่ต่อไปนี้มีการเชื่อมโยง ขั้นตอนการหยุด cron คือสิ่งนี้

sudo service anacron stop
sudo service cron stop
sudo rm -rf /var/run/unattend* /var/run/cron* /var/run/anacron*
sudo rm -rf /var/lib/apt/periodic/*

และเพื่อเริ่ม cron ใหม่เพื่อให้การอัปเดตอัตโนมัติเกิดขึ้นทันที (หรืออย่างน้อยภายในสองสามไมล์) คือ

sudo service cron start
sudo anacron -fn

มันทำงานอย่างไร

มีหลายสิ่งที่จะกระตุ้นให้มันทำงาน

  • มันถูกยิงออกจากการทำงานของ/etc/cron.dailyโดย cron /etc/cron.daily/aptเฉพาะ Cron วิ่ง/etc/cron.dailyเวลา 6.25 น. (ดู/etc/crontab)

  • Anacron วิ่งจากพุ่งพรวด? และมันจะทำการดับ/etc/cron.dailyหลังจากเวลาผ่านไป 5 นาที (ดู/etc/anacrontab)

    APT::Periodic::RandomSleepสามารถตั้งค่าบันทึกย่อได้ /etc/apt/apt.conf.d/10periodicแต่ใช้ค่าเริ่มต้นเป็น 1800 (30 นาที) ดังนั้นจึงไม่มีการอัปเดตจนกว่าจะถึง 30 นาทีหลังจาก/etc/cron.daily/aptทำงาน

เข้าสู่ระบบ

ถ้ามันใช้งานได้ควรเข้าสู่ระบบในโฟลเดอร์นี้, /var/log/unattended-upgrades.


นี่เป็นประโยชน์อย่างยิ่งกับฉันในฐานะผู้ให้บริการโฮสต์เสมือนของฉันคิดว่าควรลบออก/etc/cron.daily/aptจากการติดตั้ง Ubuntu 12.04 ที่เป็นค่าเริ่มต้นดังนั้นการอัปเดต APT อัตโนมัติจึงไม่เกิดขึ้น :-( คำตอบ ServerFault serverfault.com/a/568329/ 95570ให้รายละเอียดเกี่ยวกับการสร้างไฟล์ใหม่
Alex Dupuy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.