리눅스에서 손상된 패키지 수정하는 방법

리눅스 패키지 관리자, 예를 들어 Apt와 DNF는 매우 강력하고 직관적이지만, 그렇다고 해서 문제가 발생하지 않는 것은 아닙니다. 가끔 패키지 설치가 잘못되어서 문제를 해결해야 할 때가 있습니다. 패키지 관리자는 손상된 패키지를 수정하고 손상된 업데이트를 건너뛰어 시스템을 다시 작동하게 하고 미래의 문제를 피할 수 있는 능력을 가지고 있습니다.
이 문서에서는 리눅스에서 손상된 패키지를 수정하는 방법을 다룹니다. 이러한 수정 방법은 대부분의 경우에 도움이 될 것입니다.
목차
- Ubuntu/Mint/Debian에서 손상된 패키지 수정하기
- Fedora/CentOS/RHEL에서 손상된 패키지 수정하기
- Arch에서 손상된 패키지 수정하기
- 자주 묻는 질문
Ubuntu/Mint/Debian에서 손상된 패키지 수정하기
Apt에는 설치 중 어떤 이유로든 손상된 의존성이나 패키지를 수정하는 몇 가지 플래그가 있습니다. 여기서 일반적인 사용 예는 서드파티 .deb 파일을 설치하고 그것이 알지 못했던 의존성을 가지고 있다는 것을 발견하는 것입니다. 이러한 의존성은 스스로 끌어오지 않을 것이며, dpkg는 의존성을 해결할 수 없다고 불평할 것입니다. 어쨌든 다음 단계를 시도해 볼 수 있습니다:
참고: 아래의 수정 방법을 시도하기 전에 Apt가 어떻게 작동하는지 배우십시오.

- 필요한 패키지의 최신 버전이 없는지 확인하기 위해 업데이트를 실행합니다:
sudo apt --fix-missing update- 문제가 되는 패키지를 다시 설치할 때 Apt가 누락된 의존성이나 손상된 패키지를 찾고 수정하도록 강제합니다. 이는 누락된 의존성을 설치하고 기존 설치를 수리합니다:
sudo apt install-fDPKG 구성 문제 수정하기
패키지 설치 중 오류가 발생할 수 있는 또 다른 장소는 구성 과정입니다. 이 부분은 dpkg가 처리하므로, 패키지가 구성 중에 실패하면 dpkg가 이를 수정하는 도구입니다.

- 손상되었거나 부분적으로 구성된 패키지를 재구성하도록 dpkg를 강제해 보십시오:
sudodpkg--configure-a- 문제가 해결되지 않으면 더 강력한 접근 방식을 취하십시오. dpkg가 재설치를 요구하는 패키지를 나열하는 것으로 시작합니다:
sudodpkg-l|grep ^..r위의 명령은 문제를 일으키는 패키지를 보여줍니다. 다음 단계에서는 재설치를 요구하는 패키지가 실제로 손상되었는지 확인하십시오. sudo apt reinstall을 수행하고 어떤 패키지가 재설치에 실패하는지 주의 깊게 살펴보십시오.
- 재설치에 실패한 각 패키지에 대해 이름을 가져오고 손상된 패키지를 강제로 제거합니다:
sudodpkg--remove--force-remove-reinstreq[패키지 이름]- 이제 dpkg는 깨끗해야 합니다. Apt로 정리합니다:
sudo apt clean &&sudo apt update운이 좋다면, 원래 시작했던 상태로 돌아갈 수 있습니다. 설치하려고 했던 손상된 패키지는 얻지 못하겠지만, 적어도 Apt는 다시 작동하게 되고, 원래 설치하려고 했던 패키지와 그 의존성을 설치하기 위해 다시 사용할 수 있습니다.
영구 DPKG 잠금
dpkg 잠금으로 인해 아무것도 할 수 없는 덜 일반적인 문제가 있습니다. Apt나 dpkg를 사용하려고 할 때마다 다른 애플리케이션이 이미 사용 중이라는 오류가 발생합니다… 하지만 실제로는 그렇지 않습니다.
Apt를 사용할 수 없게 하는 잠금 파일을 삭제하는 것은 쉽습니다. 때때로 이러한 잠금 파일은 설치 오류나 전원 중단 후에도 남아 있어 프로세스를 방해하고 파일이 자동으로 제거되는 것을 방지합니다. 이 경우, 직접 해야 합니다.
sudorm/var/lib/apt/lists/lock안전하게 하기 위해 캐시에서 잠금을 삭제합니다.
sudorm/var/cache/apt/archives/lock경고: 이 잠금을 제거하기 전에 사용 중이지 않은지 확인하십시오. Ubuntu에서는 시스템과 함께 시작되는 업데이트 프로그램이 있어 업데이트를 검색할 때 DPKG/APT를 잠급니다. 업데이트 프로그램이 실행 중인지 확실하지 않은 경우, Win 키를 눌러 활동 센터를 열고 “소프트웨어 업데이트”를 입력한 다음 Enter를 눌러 엽니다.

업데이트 프로그램이 실행할 수 없다고 말하고, 백그라운드에서 패키지 관리자가 실행 중인 터미널이 없다면, 위의 지침을 따르십시오.
손상된 패키지 문제 대신 소프트웨어 센터가 작동하지 않는 문제에 직면해 있다면, 수정 방법이 있습니다.
Fedora/CentOS/RHEL에서 손상된 패키지 수정하기
Fedora/CentOS/RHEL에서 손상된 패키지를 수정하는 것은 덜 일반적인 일입니다. dnf는 패키지가 올바르게 설치되도록 훌륭한 작업을 수행합니다. 그렇다고 해도 완벽하지는 않으며, 패키지 관리에서 가끔 혼란이 생길 수 있습니다.
참고: Fedora, CentOS 및 RHEL 간의 차이를 배우십시오.
1. 문제 패키지 나열하기
RHEL 기반 시스템인 Fedora에서 이를 정리하는 명령은 다음과 같습니다:
sudo rpm -Va
-V 옵션은 확인을 의미하며, 설치된 파일에 대한 정보를 rpm 데이터베이스에 저장된 정보와 비교합니다. -a를 붙이면 모든 핵심 패키지를 확인합니다. 이는 약간 도움이 되지 않지만, 특정 애플리케이션에 문제가 있는 경우 시작할 수 있는 곳을 제공할 수 있습니다.
예를 들어, 터미널에서 “누락됨”으로 표시된 것을 보면 해당 패키지에 누락된 파일이 있다는 것을 알 수 있습니다.
2. 재설치 시도하기
문제가 있는 패키지 목록에서 보이는 패키지에 대해 dnf reinstall을 실행합니다.
sudo dnf --refresh reinstall [패키지 이름]이렇게 하면 모든 메타데이터가 만료된 것으로 설정되어, 활성화된 모든 저장소를 통해 해당 패키지의 새 버전을 찾습니다. 해당 패키지에 손상된 의존성이 있는 경우, DNF는 불평하며 --skip-broken 플래그를 사용하라고 알려줄 것입니다. 이는 해당 패키지를 완전히 건너뛰고 시스템을 정상적으로 업데이트할 수 있게 해줍니다.
3. 최후의 수단 – 패키지 제거하기
업데이트를 완료하기 위해 --skip-broken을 사용해야 하는 지경에 이르렀다면, 시스템에 대해 더 위생적인 것은 이를 완전히 제거하는 것입니다.
재설치에 실패한 패키지의 이름을 기억하고, 제거합니다:
sudo dnf remove [패키지 이름]여기서 최악의 상황은 브라우저와 같은 일상적인 흐름의 핵심 부분을 제거하게 되어 대안을 찾아야 하는 것입니다.
팁: Fedora에서 패키지를 더 잘 관리하기 위해 flatpak 사용법을 배우십시오.
Arch에서 손상된 패키지 수정하기
Arch의 패키지 관리자는 여기 나열된 다른 관리자와 몇 가지 유사점이 있지만(즉, 데이터베이스 잠금 파일이 있고 의존성을 유사한 방식으로 끌어옵니다), 그 논리가 구조화되는 방식에서는 완전히 다른 존재입니다. 문제를 진단하는 첫 번째 단계는 저장소가 최신인지 확인하고 전체 업그레이드를 시도하는 것입니다:
sudo pacman -Syu패키지를 설치하거나 시스템 업그레이드를 시도하는 것이 여전히 실패한다면, 터미널이 알려준 대로 원인을 분리해야 합니다:
참고: 수정하기 전에 pacman이 어떻게 작동하는지 배우십시오.
“유효하지 않거나 손상된 패키지“
“pacman.conf”를 어떤 방식으로든 변경하면 pacman이 패키지를 잘못 레이블링하여 손상된 것으로 간주하게 할 수 있습니다. 가장 가능성이 높은 원인은 패키지 관리자 캐시에 있는 부분적인(“.part”) 파일이며, 해결 방법은 이를 제거하는 것입니다:
sudofind/var/cache/pacman/pkg/-iname"*.part"-delete설치하려는 패키지가 실제로 손상되어 Arch의 패키지 관리자에 유효한 메타데이터를 제공하지 않을 가능성도 항상 있습니다. 이 경우, 패키지 유지 관리자가 업데이트할 때까지 기다려야 합니다. 패키지가 시스템에 설치되어 있고 업그레이드 중에 문제가 발생하는 경우, 다음 명령으로 제거합니다:
sudo pacman -Rns[패키지 이름]“데이터베이스 잠금을 할 수 없음”
Debian의 apt와 마찬가지로 Arch의 패키지 관리자는 작업 중에 잠금 파일을 만듭니다. 전원 중단이 발생하거나 pacman이 하드 인터럽트를 경험하고 잠금을 제거할 수 없었던 경우, 잠금 파일이 남아 있을 가능성이 매우 높습니다.
먼저, 컴퓨터에서 어떤 프로세스가 여전히 파일을 사용하고 있는지 확인합니다:
sudofuser/var/lib/pacman/db.lck위의 이미지에서 ID가 121497인 프로세스가 파일 잠금을 사용하고 있습니다. 프로세스에 대해 더 많은 정보를 원한다면 ps를 사용합니다:
ps-p[PID#]내 경우, 다른 pacman 인스턴스가 잠금 파일을 소유하고 있습니다. 잠금을 제거하는 가장 안전한 방법은 먼저 해당 프로세스를 종료하는 것입니다:
sudokill[PID#]이제 프로세스가 종료되었으므로 잠금 파일을 제거합니다:
sudorm/var/lib/pacman/db.lck이제 준비가 완료되었습니다!
“충돌하는 파일/파일이 파일 시스템에 존재함”
업그레이드 중에 pacman이 소유권 충돌을 감지할 때 발생합니다. 무엇이 문제인지 수정하기 전에 패키지 관리자가 불평하는 파일의 경로에 주의하십시오.
파일의 소유자를 찾으려면:
pacman -Qo[파일 경로]사용자에 의해 소유되고 다른 패키지가 아닌 경우, 그냥 제거합니다:
sudorm[파일 경로]다른 패키지에 의해 소유되고 있는 경우, 가장 안전한 방법은 패키지 유지 관리자가 이 충돌을 스스로 수정할 때까지 기다리는 것입니다. 그러나 때로는 그렇게 할 수 없는 경우가 있으며, 지금 당장 일을 끝내고 싶습니다.
이를 달성하는 가장 간단한 방법은 pacman에서 --overwrite 플래그를 사용하는 것입니다. 이는 일반적으로 안전하지 않으며 시스템에서 일부 애플리케이션이 제대로 작동하지 않을 수 있음을 알고 있어야 합니다. 실행하기 전에 백업을 만드는 것이 좋습니다.
--overwrite 플래그는 Arch의 패키지 관리자가 특정 파일에 대한 소유권 규칙을 무시하고 업데이트를 진행할 수 있게 해줍니다. 예:
sudo pacman -Syu--overwrite[파일 이름]위의 명령이 작동하지 않으면 파일 이름을 절대 경로로 바꿉니다. 일부 사용자는 경로 앞의 슬래시(“/“)를 제거하면 명령이 작동한다고 보고했습니다.
또는 pacman에 필요한 모든 것을 덮어쓰도록 지시할 수도 있습니다:
sudo pacman -Syu--overwrite='*'“유효하지 않거나 손상된 패키지 (PGP 서명)”
유지 관리가 잘 되지 않는 일부 패키지에서는 개발자가 패키지를 인증하는 디지털 서명을 적절하게 업데이트할 시간이나 의지가 없을 수 있습니다. 이는 결국 설치하려고 할 때 터미널에 “[누군가]의 서명이 한정된 신뢰입니다”라는 메시지가 표시되고 패키지 관리자가 파일을 삭제할 것인지 묻는 결과를 초래합니다.
서명 업데이트는 전적으로 유지 관리자의 책임이므로, 터미널에서 상황을 수정할 수 있는 현실적인 방법은 없습니다. 업데이트를 수행하고 패키지를 유지하려면, 해당 패키지에 대해 --ignore 플래그를 사용하십시오:
sudo pacman -Syu--ignore[패키지 이름]여러 패키지에 대해 이러한 메시지가 표시되면, 키링이 오래되었을 수 있습니다. 다음 명령으로 업데이트하십시오:
sudo pacman -S archlinux-keyring자주 묻는 질문
AUR 헬퍼로 Arch 수정을 적용할 수 있나요?
일반적으로 가능합니다. 이 가이드의 명령에서 “pacman”을 AUR 헬퍼로 교체하십시오. 예: yay -Qo /path/to/file
업데이트를 중단하면 어떻게 해야 하나요?
Ctrl + C를 눌러 업데이트 프로세스를 중단하거나 패키지 관리자의 프로세스를 종료하거나 터미널을 조기에 닫으면 패키지 데이터베이스에 어느 정도 손상이 발생하여 다른 것을 설치할 때 복잡해질 수 있습니다. 이를 수정하려면 캐시를 지우고 업데이트를 반복하십시오.
이미지 출처: Flickr. 모든 스크린샷은 Miguel Leiva-Gomez에 의해 촬영되었습니다.