관리 메뉴

웹개발자의 기지개

[Ubuntu] 보안 업데이트 실패가 날때 - sudo apt update (error) 본문

리눅스서버/Ubuntu

[Ubuntu] 보안 업데이트 실패가 날때 - sudo apt update (error)

웹개발자 워니 2025. 9. 17. 00:08

 

sudo apt update 실행시


Traceback (most recent call last):
  File "/usr/lib/cnf-update-db", line 8, in <module>
    from CommandNotFound.db.creator import DbCreator
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 12, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
패키지 목록을 읽는 중입니다... 완료
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code

 

 

 

Ubuntu 는 20.04 (focal) 버전으로 시스템 파이썬이 3.8 로 빌드가 되어 있어서, focal의 python3-apt(= apt_pkg)는  cnf-update-db 실행 시 apt_pkg를 못 찾아 에러가 났다.

 

다음의 단계대로 진행하면 정상적으로 보안 업데이트 진행이 가능하다.

 

1) 훅 끄고 업데이트 시도한다.

 

sudo apt -o APT::Update::Post-Invoke-Success::= update

 

2) Python 3.8 설치/재설치 (focal 표준)

 

sudo apt install --reinstall python3.8 python3.8-minimal libpython3.8-stdlib

 

 

3) 기본 python3를 3.8로 되돌리기

 

지금 /usr/bin/python3 -> /etc/alternatives/python3 구성이므로 update-alternatives 로 맞춘다.

 

# (A) 대안 항목 등록 (혹시 3.8이 등록 안되어 있다면)
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 20
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 10

# (B) 3.8로 선택
sudo update-alternatives --config python3


# 프롬프트가 뜨면 /usr/bin/python3.8 항목 번호를 선택 (수동선택)

 

다 끝나고, 다른 버전의 설치되어 있는 파이썬 버전을 선택하면 된다. ( update-alternatives )

 

 

4) python3-apt 및 command-not-found 재설치

 

sudo apt install --reinstall python3-apt command-not-found python3-minimal

 

 

5) 동작 확인하고  업데이트 다시 진행한다. ("OK" 가 출력되는 정상)

 

python3 --version
python3 -c "import apt_pkg, sys; print('OK:', sys.version.split()[0])"
sudo apt update

 

그리고, sudo apt upgrade 실행한다.

 

 

Ubuntu 22.04(Jammy)의 “시스템 파이썬”은 python 3.10 이다.  필자의 python3 는 3.11.Orc1 으로 되어 있다.

 

1) 임시로 훅 비활성화하고 업데이트

sudo apt -o APT::Update::Post-Invoke-Success::= update

 

2) 기본 python3를 3.10으로 되돌리기

 

(a) python3.10이 이미 있을 때

ls -l /usr/bin/python3 /usr/bin/python3.10

 

sudo update-alternatives --list python3   # 후보 확인
sudo update-alternatives --set python3 /usr/bin/python3.10

sudo update-alternatives --config python3

 

(b) python 3.10 이 없을때 (미설치나 지워졌을때)

sudo apt update
sudo apt install python3.10-minimal
sudo ln -sf /usr/bin/python3.10 /usr/bin/python3

 

확인하기

python3 -V   # Python 3.10.x 이어야 정상

 

 

3) 관련 패키지 재설치(깨끗이 맞춰주기)

 

sudo apt install --reinstall python3-apt command-not-found

 

(필요시)

sudo dpkg-reconfigure command-not-found

 

 

4) 최종 점검

sudo apt update
sudo apt upgrade

Comments