모든 저장소에 자동 자동 업데이트를 사용하는 방법은 무엇입니까?


42

본인은 여기에 구글 크롬에 대한 침묵 자동 업데이트를 사용하는 방법에 대해 설명합니다. 그러나 spotify, docky와 같은 다른 저장소가 있으며 자동 업데이트를 사용하려는 다른 저장소가 있습니다.

우분투 10.04 시스템 에서이 작업을 수행하려고합니다. 그러나이 질문은 모든 우분투 버전에 적용됩니다. 나는이 무인 업그레이드 패키지가 설치되어 있어야합니다.

어떻게해야합니까?


자동 보안 업데이트 를 원하십니까? 또는 모든 업데이트가 개입없이 설치됩니까? 왜?
david6

1
사용자 리포지토리를 포함한 거의 모든 업데이트.
nik90

답변:


65

먼저 다음을 설치하십시오 gksu.

sudo apt-get install gksu

시스템에 대한 자동 업데이트를 가능하게하는 가장 쉬운 방법은 파일을 편집하는 것입니다 50unattended-upgrades/etc/apt/apt.conf.d/예를 들어, 여러분이 좋아하는 텍스트 편집기 :

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

여기에서 Allowed Origins 블록 의 주석 처리 된 섹션을 주석 처리해야합니다.

변화

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";
};

업데이트하려는 Ubuntu 저장소 에없는 소프트웨어의 경우 파일에 원본아카이브 를 추가해야 합니다. PPA에 대한 항목을 찾으려면 폴더를 엽니 다. 즉 /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.) 아카이브는 Suite ( Suite: stable) 라인 아래에 있습니다 .

어느 경우 Origin나이 Suite없는 그들은 빈 문자열입니다. 그러나 둘 다 누락 된 경우 동일한 문제가있는 다른 소스를 포함시키지 않고 무인 업그레이드로 해당 소스를 사용할 수 없습니다.

이 두 줄을 확인한 후에는 50unattended-upgrades파일 을 편집 "<origin>:<archive>";하고이 예제 를 위해이 형식 을 사용하여 줄을 추가해야합니다 "Google\, Inc.:stable";.

Chrome의 원점은 끝 점이 있고 쉼표가 있기 때문에 다소 까다 롭지 만 대부분의 릴리스 파일은 읽기 쉽습니다.

다른 예로, Node JS 소스Node Source 는 아카이브가 아닌 출처 ( )를 지정합니다 . 와 일치시킬 수 있습니다 "Node Source:";.

Allowed Origins 는 쉘 스타일 와일드 카드를 사용하여 일치합니다 (특히 Python의 fnmatch () 사용 ). 충돌하는 출처를 포함시키지 않을 정도로주의를 기울이면 다음과 같은 내용을 작성할 수 "Node *:*";있습니다.


50unattended-upgrades파일을 편집하기 전에 파일을 백업하는 것을 잊지 마십시오 sudo 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 상세 모드를 활성화합니다.

당신은 항상 로그를 확인할 수 있습니다 unattended-upgrades에서 /var/log/unattended-upgrades/unattended-upgrades.log.


파일을 편집하여 무인 업그레이드 구성을 변경할 수 있습니다. 구성 /etc/apt/apt.conf.d/10periodic옵션은 /etc/cron.daily/apt스크립트 헤더에 있습니다. 무인 업그레이드 빈도를 구성하려면이 내용을 읽으십시오.


2
고마워 ... 상세하게! Google에 왜 \를 넣었는지 물어봐도 될까요?
nik90

원점의 특수 문자 때문에 쉼표의 이스케이프 문자입니다. 당신이 찾은 대부분의 기원에는 그 점이 없습니다.
Bruno Pereira

1
@jos 아니오, 그것이 작동하는 방식 --dry-run입니다. 업데이트 된 목록에 사용 가능한 업데이트가 있는지 확인하여 사용자에게 출력합니다. 구성이 무엇이든 통해 목록이 업데이트됩니다. /etc/cron.daily/apt수동으로 실행하면 생각하는 목록이 업데이트되지 않습니다.
Bruno Pereira

1
해당 릴리스 파일에 Suite가 나열되지 않은 경우 아카이브 이름으로 무엇을 넣어야합니까?
hsivonen

2
또한 자동화 된 접근 방식을 확인하십시오 : askubuntu.com/a/792621/417607
Abhishek Bhatia

14

@Bruno Pereira의 답변에 대한 자동화 된 접근 방식 : (답변이 유용한 경우 github 저장소 에 별표를 표시 하십시오.)

코드 링크 : 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 저장소에 별표를 표시하십시오. 링크 - github.com/abhigenie92/unattended_upgrades_repos
Abhishek 바 티아

dpkg가 구성 파일을 수정하려고 시도하는 패키지를 처리하는 방법을 수정하고자 할 수도 있습니다. unix.stackexchange.com/questions/138751/…
deoren

이 파이썬 스크립트는 훌륭하지만, Raspberry Pi 러닝 스트레치의 무인 업그레이드를 위해 README.md가 제안한 것을 수정해야했습니다. 예를 들어 허용 된 원점을 지정 "Raspberry:stable";하지 않았습니다. 대신 예를 들어"o=Raspberry, a=stable";
cfogelberg

5

편집 /etc/apt/apt.conf.d/50unattended-upgrades하고 다음을 추가하십시오.

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

모든 패키지에 대한 무인 업그레이드가 가능합니다.


예, 명확하고 간결한 답변에 감사드립니다. 그러나 origin:''datadog-agent from 등의 패키지가 있습니다 site:'apt.datadoghq.com'. 이 경우 "origin=";빈 출처가있는 패키지를 건너 뛰지 않도록 추가 해야합니다. 그러나 "site=*";대신 대신 사용하는 것이 좋습니다 "origin=*";.
Paul Tobias

에 자체 저장소를 파일에 추가 /etc/apt/sources.list.d/my_repo.list했지만 패키지를 업그레이드하지는 않습니다. 수동으로 작동합니다 sudo apt update. 어떤 단서?
Sander

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.dailycron 에 의해, 특히 실행에서 해고됩니다 /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 분)이므로 /etc/cron.daily/apt실행 후 30 분까지 업데이트가 수행되지 않습니다 .

로그

작동하면이 폴더에 로그인해야합니다 /var/log/unattended-upgrades.


내 가상 호스팅 제공 업체는 제거하는 것이 좋습니다 생각했던 것만이 나에게 특히 유용 /etc/cron.daily/apt기본 우분투 12.04 설치에서 -. 그래서 자동 APT 업데이트 :-( 일어나고되지 않은에 Serverfault 응답 serverfault.com/a/568329/ 95570는 해당 파일 얻기에 대한 세부 정보를 제공 재를 생성.
알렉스 DUPUY
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.