Ubuntu APT의 단계적 업데이트와 ESM 보안 적용 흐름을 점검하는 3D 일러스트

Ubuntu apt upgrade 후 업데이트가 안 될 때: ESM·phased·kept back 정리

서버 운영 2026년 8월 19일

Ubuntu Server에서 sudo apt updatesudo apt upgrade를 실행했는데도 일부 패키지가 남고 다음과 비슷한 문구가 반복될 때가 있다.

Get more security updates through Ubuntu Pro with 'esm-apps' enabled:
  python3-wheel python3-pip

The following upgrades have been deferred due to phasing:
  libxmlb2

The following packages have been kept back:
  fwupd

0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.

처음 보면 업데이트가 실패했거나 서버에 문제가 생긴 것처럼 보인다. 하지만 이 출력에는 서로 다른 세 가지 상태가 섞여 있다.

ESM 문구는 추가 보안 지원 안내이고, libxmlb2는 단계적 배포 대기 상태다. fwupd는 원인 확인이 필요한 보류 항목이지만, 이 사례에서는 libxmlb2의 단계적 배포 때문에 함께 보류됐을 가능성이 높다.

Err: 또는 E:로 시작하는 실제 오류가 없고 명령이 정상 종료됐다면, 우선 장애로 볼 상황은 아니다.

메시지별 의미부터 구분한다

출력 의미 기본 대응
Get more security updates... esm-apps Ubuntu Pro의 추가 보안 범위 안내 필요 여부를 확인하고 선택
deferred due to phasing 단계적 배포 대상에 아직 포함되지 않음 운영 서버에서는 기다리기
kept back 의존성·hold·저장소 우선순위 등의 이유로 보류 읽기 전용 명령으로 원인 확인

1. ESM Apps 안내는 업데이트 실패가 아니다

다음 문구는 일반 저장소 업데이트가 실패했다는 뜻이 아니다.

Get more security updates through Ubuntu Pro with 'esm-apps' enabled:
  python3-wheel python3-pip

현재 설치된 패키지 중 Ubuntu Pro의 esm-apps를 활성화하면 받을 수 있는 추가 보안 수정본이 있다는 안내다. esm-apps는 Ubuntu LTS의 Universe 계열 패키지까지 보안 유지 범위를 확장한다.

따라서 이 메시지가 표시된다고 Ubuntu 24.04 LTS의 일반 지원이 끝난 것도 아니고, 기존 apt upgrade가 실패한 것도 아니다. Ubuntu Pro는 선택 사항이며 개인 용도는 최대 5대까지 무료로 사용할 수 있다.

먼저 현재 상태와 실제 적용 대상을 확인한다.

pro status
pro security-status
pro security-status --esm-apps
  • pro status: Ubuntu Pro 연결 여부와 서비스 활성화 상태
  • pro security-status: 현재 설치된 패키지의 보안 지원 범위
  • pro security-status --esm-apps: ESM Apps에 해당하는 패키지 상세

인터넷에 노출된 서버에서 Universe 패키지를 사용한다면 ESM Apps 적용을 검토할 만하다. 반대로 단순히 안내 문구를 없애기 위해 서둘러 가입하거나 설정을 바꿀 필요는 없다. Pro 토큰은 비밀번호처럼 취급하고 공개 로그, 문서, 저장소에 남기지 않는다.

2. deferred due to phasing은 단계적 배포 대기다

The following upgrades have been deferred due to phasing:
  libxmlb2

Ubuntu는 일부 일반 업데이트를 모든 시스템에 한 번에 배포하지 않고 일정 비율부터 순차적으로 확대한다. 먼저 업데이트한 시스템에서 심각한 문제가 발견되면 다수의 시스템에 영향을 주기 전에 배포를 멈출 수 있기 때문이다.

현재 시스템이 아직 해당 배포 비율에 포함되지 않았다면 APT가 패키지를 잠시 유예한다. 패키지 정책은 다음처럼 확인한다.

apt policy libxmlb2

후보 버전 옆에 (phased 20%) 같은 값이 보이면 단계적 배포 중이라는 뜻이다. 비율은 예시이며 확인 시점마다 달라질 수 있다.

Ubuntu 공식 문서는 보안 업데이트에는 phased update를 적용하지 않는다고 설명한다. 운영 서버라면 강제로 우회하기보다 며칠 뒤 다시 실행하는 것이 기본 대응이다.

sudo apt update
sudo apt upgrade

3. fwupd kept back은 왜 함께 나타났을까

The following packages have been kept back:
  fwupd

kept back 한 줄만 보고 원인을 확정하면 안 된다. 대표적인 원인은 다음과 같다.

  • 사용자가 패키지를 명시적으로 hold한 경우
  • 업그레이드에 의존성 추가·변경 또는 다른 패키지 제거가 필요한 경우
  • 저장소 우선순위나 후보 버전이 맞지 않는 경우
  • 단계적 배포 중인 다른 패키지의 영향을 받은 경우

Ubuntu 24.04의 fwupd 패키지는 libxmlb2를 직접 의존한다. 따라서 같은 출력에서 libxmlb2가 phased 상태이고 fwupd가 kept back이라면, fwupd도 그 영향으로 함께 보류됐을 가능성이 높다. 다만 실제 후보 버전과 의존성을 확인한 뒤 판단해야 한다.

apt policy fwupd libxmlb2
apt-cache depends fwupd
apt-mark showhold

apt-mark showhold에 아무것도 나오지 않으면 사용자가 직접 건 hold는 없는 상태다.

안전한 점검 순서

운영 서버에서는 바로 강제 설치하기보다 읽기 전용 확인과 시뮬레이션부터 진행한다.

sudo apt update
apt list --upgradable
apt policy fwupd libxmlb2
apt-cache depends fwupd
apt-mark showhold
sudo apt-get check
sudo apt-get --simulate install fwupd
sudo apt-get --simulate dist-upgrade
pro status
pro security-status
pro security-status --esm-apps

확인 포인트는 다음과 같다.

  1. apt policy에 phased 비율이 보이는가
  2. apt-mark showhold에 대상 패키지가 표시되는가
  3. apt-get check에서 깨진 의존성이 보고되는가
  4. 시뮬레이션 결과에 Remv가 나타나는가
  5. 예상하지 않은 핵심 패키지 설치·삭제가 포함되는가

--simulate는 실제 시스템을 변경하지 않는다. 다만 실제 실행과 같은 설정을 읽도록 sudo를 붙이는 편이 정확하다. 시뮬레이션에 Remv가 보이면 즉시 실행하지 말고 제거 대상과 영향을 먼저 확인한다.

full-upgrade -y를 바로 실행하면 안 되는 이유

apt upgrade는 기존 패키지를 제거해야 하는 업그레이드를 진행하지 않는다. 반면 full-upgrade 또는 dist-upgrade는 의존성을 해결하기 위해 기존 패키지를 제거할 수 있다.

따라서 다음 명령을 만능 해결책처럼 바로 실행하는 것은 피한다.

sudo apt full-upgrade -y

필요하다면 먼저 아래 시뮬레이션으로 변경 예정 항목을 확인한다.

sudo apt-get --simulate dist-upgrade

운영 서버에서는 유지보수 시간과 복구 수단을 확보한 뒤 실제 업그레이드를 진행한다.

phased update를 강제로 우회해도 될까

개별 패키지를 apt install <패키지명>으로 지정하면 단계적 배포를 우회할 수 있는 경우가 있다. APT 설정을 바꿔 phased update를 항상 포함하는 것도 가능하다.

하지만 Ubuntu 공식 문서는 이를 기본 대응으로 권장하지 않는다. 단계적 배포는 업데이트 문제의 영향을 줄이기 위한 안전장치이기 때문이다. 운영 서버에서는 기다리는 편이 낫고, 우회는 장애 재현이나 사전 검증을 위한 테스트 시스템에 제한하는 것이 안전하다.

apt autoremove 안내도 별개의 문제다

업데이트 출력에 다음처럼 더 이상 필요하지 않은 패키지가 함께 표시될 수 있다.

The following packages were automatically installed and are no longer required:
  libltdl7 libslirp0 slirp4netns

이 역시 업데이트 실패가 아니다. 자동 설치된 패키지 중 현재 의존 관계상 필요하지 않은 후보를 알려주는 문구다. 서버에서는 바로 삭제하지 말고 먼저 미리 본다.

sudo apt autoremove --dry-run

특히 slirp4netns처럼 컨테이너의 루트리스 네트워크 구성에 사용될 수 있는 패키지는 현재 운영 방식에서 필요한지 확인한 뒤 정리한다.

재부팅 필요 여부 확인

업데이트가 끝난 뒤 재부팅이 필요한지도 확인할 수 있다.

test -f /run/reboot-required && echo "reboot required"

재부팅이 필요하다면 서비스 영향과 컨테이너 자동 시작 설정을 확인하고 유지보수 시간에 진행한다.

이번 출력의 최종 판단

이번 사례는 다음처럼 정리할 수 있다.

  • python3-wheel, python3-pip: ESM Apps를 통한 추가 보안 업데이트 안내
  • libxmlb2: 단계적 배포 대상에 아직 포함되지 않아 유예
  • fwupd: libxmlb2 의존성의 영향으로 함께 보류됐을 가능성이 높음
  • 0 upgraded ... 2 not upgraded: 설치 실패라기보다 현재 정책상 적용할 업데이트가 없다는 결과

가장 안전한 대응은 정책·hold·의존성을 먼저 확인하고, 실제 오류가 없다면 phased update가 확대될 때까지 기다린 뒤 apt updateapt upgrade를 다시 실행하는 것이다.

참고 문서

공식 문서 확인일: 2026-08-19

태그