시스템 관리 · 6 min read · Jan 14, 2026

Debian 및 Ubuntu에서 unattended-upgrades를 통한 자동 업데이트

Linux 배포판은 자주 업데이트되며, 보안 업데이트는 신속하게 설치해야 합니다. Debian과 Ubuntu는 APT 시스템을 사용하며, 모든 보류 중인 업데이트를 수동으로 설치하는 것은 비교적 쉽지만, 관리자가 이를 기억하지 못하거나 업데이트를 확인하는 대신 밤에 잠을 자는 것을 선호할 수 있습니다. 이 기사는 주로 서버 설치를 위한 것입니다.

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

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

unattended-upgrades를 설치하고, 활성화되어 있는지 확인하며, 로그 파일에서 작동을 모니터링합니다.

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

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

unattended-upgrades는 하루에 두 번 무작위 시간에 업데이트를 확인하고 안정적인 보안 업데이트를 설치합니다.

/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라고 참조합니다.

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

Ubuntu 서버 문서 페이지에는 unattended-upgrades에 대한 “자동 업데이트” 장이 있습니다.

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

고급 구성

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

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

구성 파일은 unattended-upgrades 패키지 설치 또는 업그레이드 시 생성되므로, unattended-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를 실행하고 예라고 대답했다면 해당 줄이 있어야 합니다. 이 줄은 unattended-upgrades를 활성화하는 것을 제어합니다.

이메일 보내기

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

unattended-upgrades에서 이메일 보내기를 활성화하려면 구성 파일 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에서는 unattended-upgrades 설치가 /usr/bin/ 및/또는 /bin/ 디렉토리에 unattended-upgrades에서 unattended-upgrade로의 심볼릭 링크를 생성하므로 두 명령이 동일하게 작동합니다.

$ 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는 Official GoAccess Repository에서 설치할 때 자동으로 업그레이드되지 않습니다. 일반 Debian 저장소에서 설치하면 자동으로 업그레이드됩니다(둘 다에서 사용할 수 있음). Origins-Pattern에 GoAccess 저장소를 추가하면 unattended-upgrades가 업그레이드를 수행합니다.

apt list –upgradable로 상황을 확인하십시오:

root@posti:~# 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]
root@posti:~#

따라서 unattended-upgrades에 의해 자동으로 업그레이드되지 않은 두 개의 패키지가 있습니다. goaccess를 확인하면 GoAccess Official Repository에서 제공되며(일반 Debian 저장소에서 제공되는 이전 버전도 있음) 확인할 수 있습니다.

root@posti:~# 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
    root@posti:~#

unattended-upgrade –dry-run -d를 실행하면 설치되지 않은 패키지가 어떤 출처를 가지고 있는지 보여줍니다. 이는 Origins-Pattern에 무엇을 추가해야 하는지 파악하는 데 도움이 될 수 있습니다.

unattended upgrades의 최신 실행 로그를 확인하면 자동으로 업그레이드할 때 어떤 출처가 고려되는지 보여줍니다:

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에 추가합니다.

덧붙여서, 노트북에 unattended-upgrades를 설치한 경우 powermgmt-base를 설치하는 것을 고려하십시오. 이를 사용하면 시스템이 배터리 전원으로 실행 중일 때 unattended-upgrades가 업그레이드를 시작하지 않습니다. 로그의 정보 메시지가 이를 알려줍니다. 항상 전원에 연결된 서버에서 실행 중이라면, 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 policy는 GoAccess에 대해 필드 a를 표시하지 않았으므로 o, n 및 l을 사용했습니다. README에서 이러한 필드에 대한 정보를 찾으십시오.

변수 치환은 ${distro_id}에 대해 지원되며, 이는 lsb_release -i의 출력을 포함하고 ${distro_codename}은 lsb_release -c의 출력을 포함합니다. 따라서 n=buster 대신 n=${distro_codename}으로 작성할 수 있습니다.

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

먼저 apt policy php-tcpdf로 상황을 확인하십시오. 이는 Debian 저장소 섹션 buster-backports에서 설치되었음을 보여줍니다.

unattended-upgrades.log에서 buster-backports가 허용된 출처에 포함되지 않았음을 확인할 수 있습니다. 이는 50unattended-upgrades 파일에 있지만 주석 처리되어 있습니다. 이를 활성화하려면 다음 줄을 복사하십시오:

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

이 줄을 52unattended-upgrades-local의 Origins-Pattern 설정 내에 붙여넣고 주석을 해제합니다.

파일을 편집한 후 unattended-upgrades –dry-run -d로 확인하면 추가된 저장소가 이제 “허용된 출처“에 포함되고 php-tcpdf가 업그레이드될 패키지 목록에 포함됩니다.

시간 제어

unattended-upgrades는 저장소 서버의 부하를 줄이기 위해 무작위 시간에 실행됩니다. 이는 모든 호스트가 동시에 업데이트를 시작할 경우 발생할 수 있는 큰 부하 스파이크를 피하기 위한 것입니다. 이 동작을 변경하기로 결정했다면 신중하게 생각하십시오. 자체 저장소나 미러 저장소를 운영하는 경우, 부하 스파이크가 저장소 서버에 영향을 미치고 인터넷의 저장소 관리자에게 불편을 주지 않도록 합니다.

unattended-upgrades가 시작되는 시간은 systemd에서 제어합니다. 파일 /lib/systemd/system/apt-daily.timer에는 12시간의 무작위 지연으로 하루에 두 번 apt 다운로드 활동을 시작하는 Timer 섹션이 있습니다. 이를 수정하지 않거나 수정할 매우 좋은 이유가 있는 경우를 제외하고는 수정하지 않는 것이 좋습니다.

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

Unattended-Upgrade::Update-Days 설정은 unattended-upgrades가 실행되는 주의 날을 제어합니다. 기본값은 비어 있으며, 이는 매일 실행됨을 의미합니다. 예를 들어, 토요일과 일요일에만 실행되도록 구성할 수 있습니다.

자동 재부팅

unattended-upgrades는 설치된 업데이트가 재부팅을 요구할 때 재부팅하도록 설정할 수 있습니다. 이는 즉시 또는 원하는 시간에 발생하도록 구성할 수 있습니다. 이러한 구성은 다음 설정을 사용합니다:

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

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

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

블랙리스트는 unattended-upgrades에 의해 업그레이드될 패키지를 방지합니다. 설정 Package-Blacklist는 정규 표현식을 포함합니다. 패키지 이름이 일치하면 자동 업그레이드에서 제외됩니다.

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

README는 Package-Whitelist 설정에 대해 설명합니다. 설명에는 “이 목록의 정규 표현식과 일치하는 패키지만 업그레이드 대상으로 표시됩니다.”라고 되어 있습니다. 화이트리스트를 설정하는 것이 바람직한 경우를 명확히 하기 위한 예시는 제공되지 않습니다. 내 실험에 따르면, 화이트리스트에 패키지를 추가하면 해당 패키지만 자동으로 업그레이드되고 다른 패키지는 업그레이드되지 않는 것 같습니다.

결론

이제 unattended-upgrades가 무엇을 할 수 있는지, 그리고 원하는 대로 작동하도록 만드는 방법을 알게 되었습니다.

unattended-upgrades가 업그레이드를 수행하지 않는 경우가 있습니다. 이는 apt upgrade 명령이 패키지를 보류하고 있기 때문입니다. 이는 업그레이드가 패키지를 제거하거나 이전에 설치되지 않은 패키지를 설치해야 할 때 발생합니다. 업그레이드를 수행하려면 apt full-upgrade 명령을 사용하여 직접 수행해야 합니다. 이는 패키지를 제거하거나 이전에 설치되지 않은 새 패키지를 설치할 수 있습니다. unattended upgrades가 이메일을 보내도록 구성된 경우, 이메일에는 다음 줄이 포함됩니다:

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 "[email protected]";
Unattended-Upgrade::OnlyOnACPower "false";
Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.