웹사이트 검색

Debian 및 Ubuntu에서 무인 업그레이드로 자동 업데이트


이 페이지에서

  1. 바쁜 관리자를 위한 쉬운 방법\n
  2. 문서를 찾을 수 있는 위치
  3. 고급 구성
    1. 이메일 보내기
    2. 저장소 추가
    3. 제어 시간
      1. 자동 재부팅

      Linux 릴리스는 자주 업데이트되며 보안 업데이트는 즉시 설치해야 합니다. 데비안과 우분투는 APT 시스템을 사용하며 보류 중인 모든 업데이트를 수동으로 설치하는 것이 상대적으로 쉽지만 관리자는 이를 기억하지 못하거나 업데이트를 확인하는 대신 밤에 잠을 자는 것을 선호할 수 있습니다. 이 문서는 주로 서버 설치에 대한 것입니다.

      자동 업그레이드를 사용하는 경우에도 apt 업그레이드를 사용하여 패키지를 수동으로 업데이트하고 설치할 수 있습니다. 명령줄에서 apt를 사용할 때 무인 업그레이드로 시작된 업그레이드가 실행 중인 경우 apt 시스템은 사용자에게 작업이 이미 진행 중임을 알리며 사용자는 apt 명령을 계속 실행하기 전에 작업이 완료될 때까지 기다려야 합니다.

      바쁜 관리자를 위한 쉬운 방법

      무인 업그레이드를 설치하고 활성화되었는지 확인하고 로그 파일에서 작업을 모니터링합니다.

      apt install unattended-upgrades
      dpkg-reconfigure -plow unattended-upgrades

      dpkg-reconfigure -command는 안정적인 보안 업데이트를 자동으로 다운로드하고 설치하기 위해 예 또는 아니오를 묻는 대화 상자를 표시합니다. 예라고 대답했는지 확인하십시오.

      무인 업그레이드는 매일 두 번 임의의 시간에 업데이트를 확인하고 안정적인 보안 업데이트를 설치합니다.

      디렉토리 /var/log/unattended-upgrades/ 및 파일 /var/log/dpkg.log에서 로그 파일을 읽어 무슨 일이 일어나고 있는지 모니터링합니다.

      설명서를 찾을 수 있는 위치

      구성 파일 /etc/apt/apt.conf.d/50unattended-upgrades에는 주석에 문서가 있습니다. 이 문서에서는 지금부터 해당 파일을 50unattended-upgrades라고 합니다.

      readme 파일 /usr/share/doc/unattended-upgrades/README.md.gz에는 유용한 지침이 있습니다. zless 명령(패키지 gzip에서 사용 가능)으로 읽을 수 있습니다. 이 문서는 지금부터 해당 파일을 README라고 합니다.

      데비안 위키에는 https://wiki.debian.org/UnattendedUpgrades 페이지가 있습니다.

      Ubuntu 서버 문서 페이지에는 무인 업그레이드에 대한 "자동 업데이트" 장이 있습니다.

      unattended-upgrade, man unattended-upgrade 매뉴얼 페이지.

      고급 구성

      쉬운 방법을 사용하면 모든 업그레이드가 자동으로 설치되지 않는다는 것을 알 수 있습니다. 업데이트를 설치하는 것 외에도 자동으로 일어나는 일에 대해 더 많은 제어를 원할 수도 있습니다.

      구성 파일 /etc/apt/apt.conf.d/50unattended-upgrades에는 주석에 문서가 포함되어 있으므로 파일을 읽고 사용 가능한 구성을 확인하십시오. 어떤 일이 발생할 때 이메일을 보내도록 무인 업그레이드를 구성하는 것이 매우 유용합니다.

      무인 업그레이드 패키지 설치 또는 업그레이드에 의해 구성 파일이 생성되므로 무인 업그레이드 자체가 업그레이드되거나 다음 OS 버전으로 이동할 때 이 파일에서 수행된 편집으로 인해 충돌이 발생하여 수동으로 해결해야 한다는 점을 아는 것이 중요합니다. 설명서 파일 README에서는 원래 구성 파일을 수정하는 대신 52unattended-upgrades-local 파일을 만들 것을 제안합니다.

      원하는 경우 다음 행이 포함된 /etc/apt/apt.conf.d/20auto-upgrades 파일을 확인할 수 있습니다.

      APT::Periodic::Update-Package-Lists "1";
      APT::Periodic::Unattended-Upgrade "1";

      dpkg-reconfigure -command를 실행하고 예라고 대답한 경우 행이 있어야 합니다. 라인은 무인 업그레이드 활성화를 제어합니다.

      이메일을 보내

      전자 메일을 보내려면 호스트에 전자 메일을 보낼 수 있는 전자 메일 시스템이 있어야 합니다. 먼저 확인하십시오.

      구성 파일 52unattended-upgrades-local을 편집하여 무인 업그레이드에서 전자 메일 보내기를 활성화합니다(/etc/apt/apt.conf/ 디렉토리에 파일이 없으면 생성). 라인 복사

      //Unattended-Upgrade::Mail "";

      50unattended-upgrades에서 주석을 제거하고 "-따옴표 사이에 대상 전자 메일 주소를 추가합니다.

      자동 업그레이드가 업그레이드를 수행할 때 또는 오류가 있을 때만 전자 메일을 항상 보내도록 구성하는 설정도 있습니다.

      // Set this value to "true" to get emails only on errors. Default
      // is to always send a mail if Unattended-Upgrade::Mail is set
      //Unattended-Upgrade::MailOnlyOnError "false";

      설정을 변경하려면 행을 52unattended-upgrades-local로 복사하고 설정 행의 주석을 제거한 다음 "false"를 "true"로 변경하십시오.

      확인 중

      unattended-upgrade --dry-run -d

      구성 파일을 수정한 후에는 좋은 생각입니다.

      최소한 Debian 10, 11 및 Ubuntu 22.04에서 무인 업그레이드 설치는 /usr/bin/ 및/또는 /bin/ 디렉터리에서 무인 업그레이드에 대한 기호 링크 무인 업그레이드를 만들어 두 명령이 동일하게 작동하도록 합니다.

      $ ls -lhi /bin/unattended-upgrade*
      11404505 -rwxr-xr-x 1 root root 98K tammi  15  2022 /bin/unattended-upgrade
      11407087 lrwxrwxrwx 1 root root  18 tammi  15  2022 /bin/unattended-upgrades -> unattended-upgrade

      저장소 추가

      Unattended-Upgrade::Origins-Pattern에 행을 추가하여 자동으로 업데이트할 리포지토리를 추가합니다. 구성 파일에 이에 대한 문서가 있습니다.

      README는 이후 구성 파일 52unattended-upgrades-local의 설정에 기본 설정을 재정의하도록 지시합니다. Unattended-Upgfade::Origins-Pattern 설정이 기본 파일에 설정된 내용을 완전히 재정의하지 않고 대신 기본값에 추가되는 설정을 시도하고 찾았습니다. 따라서 전체 기본 Unattended-Upgrade::Origins-Pattern을 복사할 필요가 없으며 추가할 수 있습니다.

      예를 들어 goaccess 패키지는 공식 GoAccess 리포지토리에서 설치할 때 자동으로 업그레이드되지 않습니다. 일반 Debian 저장소에서 설치한 경우 자동으로 업그레이드됩니다(둘 다 사용 가능). Origins-Pattern에 GoAccess 리포지토리를 추가하면 무인 업그레이드가 업그레이드를 수행합니다.

      apt list --upgradable을 사용하여 상황을 조사합니다.

      :~# LANG=C apt list --upgradable 
      Listing... Done
      goaccess/unknown 2:1.6.3-buster amd64 [upgradable from: 2:1.6.2-buster]
      php-tcpdf/buster-backports 6.5.0+dfsg1-1~bpo10+1 all [upgradable from: 6.3.5+dfsg1-1~bpo10+1]
      :~#

      따라서 무인 업그레이드에 의해 자동으로 업그레이드되지 않은 패키지가 두 개 있습니다. goaccess를 검사하면 GoAccess 공식 리포지토리(및 일반 데비안 리포지토리의 이전 버전)에서 온 것으로 나타납니다.

      :~# LANG=C apt policy goaccess
      goaccess:
        Installed: 2:1.6.2-buster
        Candidate: 2:1.6.3-buster
        Version table:
           2:1.6.3-buster 500
              500 https://deb.goaccess.io buster/main amd64 Packages
       *** 2:1.6.2-buster 100
              100 /var/lib/dpkg/status
           1:1.2-4+b10 500
              500 http://mirror.hetzner.de/debian/packages buster/main amd64 Packages
              500 http://deb.debian.org/debian buster/main amd64 Packages
          :~#

      무인 업그레이드 --dry-run -d를 실행하면 설치되지 않은 패키지의 출처가 표시됩니다. 이것은 Origins-Pattern에 무엇을 추가해야 하는지 파악하는 데 도움이 될 수 있습니다.

      무인 업그레이드의 최신 실행에서 로그를 검토하면 자동으로 업그레이드할 때 고려되는 원본이 표시됩니다.

      2022-09-05 08:28:08,955 INFO Checking if system is running on battery is skipped. Please install
          powermgmt-base package to check power status and skip installing updates when the system
          is running on battery.
      2022-09-05 08:28:08,960 INFO Initial blacklist : 
      2022-09-05 08:28:08,960 INFO Initial whitelist: 
      2022-09-05 08:28:08,960 INFO Starting unattended upgrades script
      2022-09-05 08:28:08,960 INFO Allowed origins are: 
      origin=Debian,codename=buster,label=Debian, 
      origin=Debian,codename=buster,label=Debian-Security

      GoAccess 저장소는 아직 없으므로 /etc/apt/apt.conf.d/52unattended-upgrades-local에 추가합니다.

      참고로 랩톱에 무인 업그레이드를 설치한 경우 powermgmt-base 설치를 고려하십시오. 자동 업그레이드를 사용하면 로그 정보의 정보 메시지와 같이 배터리 전원으로 실행될 때 업그레이드가 시작되지 않습니다. 항상 라인 전원으로 실행되는 서버에서 실행 중인 경우 해당 정보 메시지는 더 이상 Unattended-Upgrade::OnlyOnACPower "false"로 표시되지 않습니다. 구성에 추가했습니다.

      Unattended-Upgrade::Origins-Pattern {
      // Taleman added GoAccess 2022-09-05
              "o=GoAccess Repository, n=buster, l=Official GoAccess Repository";
      };
      Unattended-Upgrade::OnlyOnACPower "false";

      apt 정책은 GoAccess에 대한 필드 a를 표시하지 않았으므로 o, n 및 l을 사용했습니다. README에서 이러한 필드에 대한 정보를 찾으십시오.

      변수 대체는 lsb_release -i의 출력을 포함하는 &#36 {distro_id} 및 lsb_release -c의 출력을 포함하는 &#36 {distro_codename}에 대해 지원됩니다. 따라서 n=buster 대신 n=$ {distro_codename}을 쓸 수 있었습니다.

      자동으로 업그레이드되지 않은 두 개의 패키지가 있었고, 여전히 업그레이드되지 않은 다른 하나는 php-tcpdf입니다. 물론 apt 업그레이드로 업그레이드할 수도 있지만 무인 업그레이드에 추가하여 자동으로 업그레이드할 수도 있습니다. 절차는 goaccess와 동일합니다.

      먼저 적절한 정책 php-tcpdf로 상황을 조사하십시오. Debian 저장소 섹션 buster-backports에서 설치되었음을 보여줍니다.

      unattended-upgrades.log에서 buster-backports가 허용된 원본에 속하지 않는 것을 볼 수 있습니다. 50unattended-upgrades 파일에 있지만 주석 처리되어 있습니다. 활성화하려면 다음 줄을 복사하십시오.

      // "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";

      Origins-Pattern 설정 내에서 52unattended-upgrades-local로 변경하고 주석을 제거합니다.

      파일을 편집한 후 무인 업그레이드 --dry-run -d로 추가된 리포지토리가 이제 "허용된 원본"에 있고 php-tcpd가 업그레이드될 패키지에 있는지 확인합니다.

      제어 시간

      무인 업그레이드는 리포지토리 서버의 부하를 완화하기 위해 임의의 시간에 실행됩니다. 이는 모든 호스트가 동시에 업데이트를 시작한 경우 발생할 수 있는 대규모 로드 급증을 방지하기 위한 것입니다. 이 동작을 변경하기로 결정했다면 신중하게 생각하십시오. 자체 리포지토리 또는 미러 리포지토리를 실행하는 경우 부하 급증이 리포지토리 서버에 도달하고 인터넷에서 리포지토리 관리자를 귀찮게 하지 않도록 합니다.

      무인 업그레이드가 시작되는 시간을 제어하는 시스템입니다. /lib/systemd/system/apt-daily.timer 파일에는 12시간 임의 지연으로 하루에 두 번 apt 다운로드 활동을 시작하는 타이머 섹션이 있습니다. 이것을 수정하지 않거나 수정해야 할 아주 좋은 이유가 있는 것이 좋습니다.

      나머지 시간 구성은 50unattended-upgrades 및 52unattended-upgrades-local 파일에서 수행됩니다.

      Unattended-Upgrade::Update-Days 설정은 무인 업그레이드가 실행되는 요일을 제어합니다. 기본값은 매일 실행됨을 의미하는 비어 있습니다. 예를 들어 토요일과 일요일에만 실행되도록 구성할 수 있습니다.

      자동 재부팅

      무인 업그레이드는 설치된 업데이트를 재부팅해야 하는 경우 재부팅하도록 설정할 수 있습니다. 이는 즉시 또는 원하는 시간에 발생하도록 구성할 수 있습니다. 이러한 구성은 설정을 사용합니다.

      //Unattended-Upgrade::Automatic-Reboot "false";
      //Unattended-Upgrade::Automatic-Reboot-WithUsers "true";
      //Unattended-Upgrade::Automatic-Reboot-Time "02:00";	
      

      기본값은 자동 재부팅 없음입니다. 설정을 "true"로 변경하면 업그레이드가 설치된 즉시 재부팅됩니다. 재부팅이 필요한 업데이트가 설치된 경우 원하는 시간에 재부팅하도록 Automatic-Reboot-Time을 설정할 수 있습니다.

      블랙리스트, 화이트리스트

      블랙리스트는 무인 업그레이드로 업그레이드될 패키지가 업그레이드되는 것을 방지합니다. Package-Blacklist 설정에는 정규 표현식이 포함되어 있습니다. 패키지 이름이 일치하면 자동 업그레이드 대상에서 제외됩니다.

      저는 이 기능을 사용하지 않았습니다. 중요한 패키지의 자동 업그레이드를 방지하는 것이 타당한 개발 릴리스를 실행하는 경우 이 기능이 더 유용할 수 있다고 생각합니다. 50unattended-upgrades 구성 파일은 블랙리스트 패키지의 예를 제공합니다.

      README는 Package-Whitelist 설정에 대해 알려줍니다. 설명에는 "이 목록의 정규 표현식과 일치하는 패키지만 업그레이드 대상으로 표시됩니다."라고 되어 있습니다. 화이트리스트를 설정하는 것이 바람직한 경우를 명확히 하는 예는 제공하지 않습니다. 내 실험에서 허용 목록에 패키지를 추가하면 해당 패키지만 자동으로 업그레이드된다는 의미인 것 같습니다.

      결론

      이제 무인 업그레이드가 수행할 수 있는 작업과 원하는 작업을 수행하는 방법을 알게 되었습니다.

      apt upgrade 명령이 패키지를 다시 유지하기 때문에 무인 업그레이드가 업그레이드를 수행하지 않는 경우가 있습니다. 이것은 업그레이드로 인해 패키지가 제거되거나 이전에 제거된 패키지가 설치될 때 발생합니다. 업그레이드를 수행하려면 패키지를 제거하거나 이전에 제거한 새 패키지를 설치할 수 있는 apt full-upgrade 명령을 사용하여 직접 수행하십시오. 무인 업그레이드가 전자 메일을 보내도록 구성된 경우 전자 메일에는 다음 행이 포함됩니다.

      Packages with upgradable origin but kept back:

      내 호스트 중 하나에서 52unattended-upgrades-local의 마지막 예:

      Unattended-Upgrade::Origins-Pattern {
      // Taleman added 2022-09-05
              "o=GoAccess Repository, n=buster, l=Official GoAccess Repository";
              "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
      	"origin=deb.sury.org,archive=${distro_codename}";
      };
      
      Unattended-Upgrade::Mail "";
      Unattended-Upgrade::OnlyOnACPower "false";