Làm cách nào để bật cập nhật tự động im lặng cho bất kỳ kho lưu trữ nào?


43

Tôi đọc ở đây cách bật cập nhật tự động im lặng cho Google Chrome. Tuy nhiên, tôi có các kho lưu trữ khác như spotify, docky và các kho khác mà tôi muốn kích hoạt cập nhật im lặng.

Tôi đang cố gắng làm điều này trong hệ thống Ubuntu 10.04 của mình. Nhưng câu hỏi này áp dụng cho tất cả các phiên bản Ubuntu. Tôi đã cài đặt gói nâng cấp không giám sát .

Tôi có thể làm cái này như thế nào?


Bạn có muốn cập nhật bảo mật im lặng . hoặc TẤT CẢ các bản cập nhật được cài đặt mà không cần can thiệp? Tại sao?
david6

1
Khá nhiều tất cả các bản cập nhật bao gồm cả kho người dùng.
nik90

Câu trả lời:


66

Đầu tiên, cài đặt gksu:

sudo apt-get install gksu

Cách dễ nhất để kích hoạt các cập nhật không giám sát cho hệ thống của bạn là chỉnh sửa tệp 50unattended-upgradesbên trong /etc/apt/apt.conf.d/bằng trình soạn thảo văn bản yêu thích của bạn, ví dụ:

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

Trong đó, bạn cần nhận xét các phần nhận xét của khối Nguồn gốc được phép

Thay đổi

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

đến

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

Đối với phần mềm không có trên repos Ubuntu mà bạn muốn cập nhật, bạn cần thêm nguồn gốclưu trữ vào tệp. Để tìm những gì dành cho PPA của bạn, hãy mở thư mục /var/lib/apt/lists/, đó là khu vực lưu trữ thông tin trạng thái cho từng tài nguyên gói. Những gì bạn đang tìm kiếm là các tập tin kết thúc với Phát hành trong tên.

Mở một bằng trình soạn thảo văn bản của bạn, tức là cho Google Chrome:

gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_ sóng_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.

Nguồn gốc là Rõ ràng ( Origin: Google, Inc.) và kho lưu trữ sẽ là bất cứ thứ gì nằm dưới dòng Suite ( Suite: stable).

Nếu một trong hai Originhoặc Suitebị thiếu thì chúng sẽ là chuỗi rỗng. Nhưng lưu ý rằng nếu cả hai đều bị thiếu thì có lẽ sẽ không thể sử dụng nguồn đó với các nâng cấp không giám sát mà không bao gồm các nguồn khác có cùng vấn đề.

Sau khi bạn lưu ý 2 dòng đó, bạn cần chỉnh sửa 50unattended-upgradestệp và thêm các dòng bằng định dạng "<origin>:<archive>";này cho ví dụ này vì lợi ích "Google\, Inc.:stable";.

Nguồn gốc của Google Chrome khá phức tạp vì nó có một dấu chấm và dấu phẩy trong đó nhưng hầu hết các tệp Phát hành sẽ dễ đọc.

Một ví dụ khác, nguồn Node JS chỉ định một nguồn gốc ( Node Source) nhưng không phải là một kho lưu trữ; để bạn có thể kết hợp nó với "Node Source:";.

Nguồn gốc được phép được kết hợp bằng cách sử dụng các ký tự đại diện kiểu vỏ (cụ thể hơn, với fnmatch ()) của Python . Nếu bạn đủ cẩn thận để không bao gồm các nguồn xung đột, bạn có thể viết những thứ như thế "Node *:*";.


Đừng quên tạo một bản sao lưu của 50unattended-upgradestập tin của bạn trước khi chỉnh sửa nó, làm điều đó với sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak.

Để kiểm tra các thay đổi được thực hiện trên tệp, bạn có thể sử dụng sudo unattended-upgradesvới các tham số --dry-run--debug.

--dry-run sẽ chạy một chu kỳ nâng cấp không giám sát trừ khi nó không thực sự cài đặt các bản nâng cấp, chỉ kiểm tra và xác minh rằng mọi thứ đều ổn.

--debug sẽ kích hoạt chế độ dài dòng.

Bạn luôn có thể kiểm tra các bản ghi cho unattended-upgradestại /var/log/unattended-upgrades/unattended-upgrades.log.


Bạn có thể thay đổi cấu hình của các nâng cấp không giám sát bằng cách chỉnh sửa tệp /etc/apt/apt.conf.d/10periodic, các tùy chọn cho cấu hình nằm trong /etc/cron.daily/apttiêu đề tập lệnh. Đọc chúng để cấu hình tần suất của các nâng cấp không giám sát.


2
Cảm ơn ... Rất chi tiết! Tôi có thể hỏi tại sao bạn đặt \ sau Google không?
nik90

Bởi vì các ký tự đặc biệt trong nguồn gốc, nó là một ký tự thoát cho dấu phẩy. Hầu hết các nguồn gốc bạn tìm thấy sẽ không có điều đó.
Bruno Pereira

1
@jos Không, đó là cách nó hoạt động, --dry-runsẽ kiểm tra xem trong danh sách cập nhật có bản cập nhật nào không và xuất chúng cho bạn, danh sách cập nhật qua bất kỳ cấu hình nào của bạn /etc/cron.daily/apt, chạy theo cách thủ công không cập nhật danh sách tôi nghĩ.
Bruno Pereira

1
Tôi nên đặt tên lưu trữ là gì khi tệp Phát hành tương ứng không liệt kê một Suite?
hsivonen

2
Vui lòng kiểm tra cách tiếp cận tự động tại đây: askubfox.com/a/792621/417607
Abhishek Bhatia

14

Cách tiếp cận tự động cho câu trả lời của @Bruno Pereira: (Vui lòng xem xét việc gắn sao cho repo github nếu bạn thấy câu trả lời hữu ích.)

Liên kết mã: https://github.com/abhigenie92/unattends_upgrades_Vpose

  • Kiểm tra kho để thêm:

    $ 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
    
  • Bây giờ chỉnh sửa /etc/apt/apt.conf.d/50unattended-upgradesđể bao gồm chúng:

    // 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";
    };
    ....
    ....
    
  • Kiểm tra xem nếu chúng được bao gồm:

    $ 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 hoan nghênh, vui lòng xem xét việc gắn dấu sao cho kho lưu trữ github nếu có thể. Link- github.com/abhigenie92/unattends_upgrades_Vpose
Abhishek Bhatia

Bạn cũng có thể muốn sửa đổi cách dpkg xử lý các gói cố gắng sửa đổi các tệp cấu hình: unix.stackexchange.com/questions/138751/ Lỗi
deoren 18/12/17

Kịch bản python này là tuyệt vời, tuy nhiên tôi đã phải sửa đổi những gì README.md đề xuất cho 50unattends-nâng cấp cho Raspberry Pi của tôi đang chạy. Chỉ định nguồn gốc được phép là, ví dụ, "Raspberry:stable";không hoạt động. Thay vào đó tôi đã sử dụng, ví dụ:"o=Raspberry, a=stable";
cfogelberg

5

Chỉnh sửa /etc/apt/apt.conf.d/50unattended-upgrades, thêm vào như sau:

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

Điều này sẽ cho phép nâng cấp không giám sát cho tất cả các gói.


Vâng, cảm ơn vì câu trả lời rõ ràng và súc tích. Nhưng có những gói có origin:'', ví dụ như datadog-agent từ site:'apt.datadoghq.com'. Trong trường hợp đó, cũng cần phải thêm "origin=";để không bỏ qua các gói có nguồn gốc trống. Nhưng sau đó tốt hơn là chỉ sử dụng "site=*";thay vì "origin=*";.
Paul Tobias

Tôi đã thêm kho lưu trữ của riêng mình vào một tệp /etc/apt/sources.list.d/my_repo.list, nhưng nó không nâng cấp gói. Thủ công nó làm việc với sudo apt update. Có manh mối thế nào không?
Sander

Điều này có sử dụng các nguồn giống như một bản cập nhật thủ công, tức là nó bỏ qua các nguồn bị vô hiệu hóa?
Silicomancer

3

Có các hướng dẫn để buộc chạy lại để tạo cron bắt đầu cập nhật tự động tại liên kết sau . Thủ tục dừng cron là đây

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/*

và để khởi động lại cron để thực hiện cập nhật tự động ngay bây giờ (hoặc ít nhất là trong vài dặm) là

sudo service cron start
sudo anacron -fn

Làm thế nào nó hoạt động

Một số thứ sẽ kích hoạt nó để chạy.

  • Nó bị sa thải khỏi hoạt động của /etc/cron.dailycron, đặc biệt /etc/cron.daily/apt. Cron chạy /etc/cron.dailylúc 6.25 sáng (xem /etc/crontab)

  • Anacron chạy từ mới bắt đầu? và nó sẽ tắt /etc/cron.dailysau 5 phút thời gian hoạt động (xem /etc/anacrontab)

    Lưu ý APT::Periodic::RandomSleepcó thể được đặt /etc/apt/apt.conf.d/10periodic, nhưng mặc định là 1800 (30 phút) để không có cập nhật nào có thể xảy ra cho đến 30 phút sau khi /etc/cron.daily/aptchạy.

Đăng nhập

Nếu nó hoạt động, mọi thứ sẽ được đăng nhập vào thư mục này /var/log/unattended-upgrades.


Điều này đặc biệt hữu ích với tôi vì nhà cung cấp dịch vụ lưu trữ ảo của tôi nghĩ rằng đó là một ý tưởng tốt để xóa /etc/cron.daily/aptkhỏi cài đặt Ubuntu 12.04 mặc định - vì vậy các cập nhật APT tự động không diễn ra :-(. ServerFault answer serverfault.com/a/568329/ 95570 cung cấp chi tiết về việc tạo lại tệp đó.
Alex Dupuy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.