Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스에서 깨진 패키지를 수정하는 방법 완벽 가이드

리눅스에서 깨진 패키지를 수정하는 방법 완벽 가이드

Apt나 DNF 같은 리눅스 패키지 관리자는 매우 강력하고 직관적이지만, 그렇다고 해서 문제가 절대 발생하지 않는 것은 아닙니다. 가끔 패키지 설치가 실패하면서 시스템이 불안정해지는 경우가 생기죠. 다행히도 패키지 관리자에는 깨진 패키지를 복구하고 손상된 업데이트를 건너뛰어 시스템을 정상 상태로 되돌리는 기능이 내장되어 있습니다. 이 글에서는 리눅스에서 깨진 패키지를 수정하는 다양한 방법을 소개합니다.

아래의 팁들은 대부분의 상황에서 도움이 될 것입니다. 비교적 범용적인 방법들이지만, 모든 상황이 다르다는 점을 염두에 두고 자신의 문제에 맞게 적용해 보시기 바랍니다.

Ubuntu/Mint/Debian에서 깨진 패키지 수정하기

Apt에는 설치 중 여러 이유로 누락되거나 손상된 의존성 및 패키지를 복구할 수 있는 몇 가지 옵션이 있습니다. 가장 흔한 사례는 서드파티 .deb 파일을 설치하다가 미처 파악하지 못한 의존성 때문에 곤란해지는 경우입니다. 이런 의존성은 자동으로 설치되지 않으며, dpkg가 해당 패키지가 없다고 불평하게 됩니다. 이럴 때 다음 단계를 시도해 보세요.

리눅스에서 깨진 패키지를 수정하는 방법 완벽 가이드

먼저 업데이트를 실행하여 필요한 패키지의 최신 버전이 존재하는지 확인합니다.

sudo apt --fix-missing update

다음으로, 문제가 되는 패키지를 다시 설치하면서 Apt가 누락된 의존성이나 깨진 패키지를 찾아 자동으로 수정하도록 강제할 수 있습니다. 이 명령은 실제로 빠진 의존성을 설치하고 기존 설치를 복구해 줍니다.

sudo apt install -f

패키지 설치 과정에서 오류가 발생하는 또 다른 지점은 설정(configuration) 단계입니다. 이 부분은 Apt가 아니라 내부적으로 dpkg가 처리하므로, 설정 중 패키지 설치가 실패했다면 dpkg를 사용해 수정하는 것이 자연스럽습니다.

리눅스에서 깨진 패키지를 수정하는 방법 완벽 가이드

먼저 dpkg가 깨졌거나 부분적으로만 설정된 패키지를 재설정하도록 강제해 보세요.

sudo dpkg --configure -a

이것으로 해결되지 않는다면 좀 더 강력한 방법을 사용할 수 있습니다. 먼저 dpkg가 재설치가 필요하다고 표시한 패키지 목록을 확인합니다.

sudo dpkg -l | grep ^..r

여기서 문제가 되는 패키지를 확인할 수 있을 것입니다. 목록에 어울리지 않는 항목이 없다면, 깨진 패키지를 강제로 제거합니다.

sudo dpkg --remove --force-remove-reinstreq [패키지명]

dpkg 작업이 끝나면 Apt로 시스템을 정리합니다.

sudo apt clean
sudo apt update

운이 좋다면 원래 상태로 돌아올 수 있습니다. 설치하려던 패키지 자체는 얻지 못했더라도, 적어도 Apt가 정상적으로 동작하게 되므로 이후 다시 패키지와 의존성 설치를 시도할 수 있습니다.

DPKG 영구 잠금(Lock) 문제 해결

덜 흔하지만 dpkg 잠금 파일 때문에 아무 작업도 할 수 없는 경우가 있습니다. Apt나 dpkg를 실행할 때마다 "다른 애플리케이션이 이미 사용 중"이라는 오류가 뜨는데, 실제로는 그런 애플리케이션이 없는 상황이죠.

사실 이 잠금 파일은 간단히 삭제할 수 있습니다. 설치 오류나 정전 후에 잠금 파일이 남아 있으면 프로세스가 중단되고 파일이 자동으로 제거되지 못하는데, 이런 경우 직접 삭제해 주면 됩니다.

sudo rm /var/lib/apt/lists/lock

확실히 하기 위해 캐시 디렉터리의 잠금 파일도 함께 삭제합니다.

sudo rm /var/cache/apt/archives/lock

Fedora/CentOS/RHEL에서 깨진 패키지 수정하기

Fedora/CentOS/RHEL 계열에서 패키지가 깨지는 일은 드뭅니다. yum과 dnf가 패키지가 올바르게 설치되도록 훌륭하게 관리해 주기 때문입니다. 하지만 패키지 사용 중에 문제가 생기는 경우도 종종 있습니다. RPM 기반 시스템에서 이를 확인하는 명령은 다음과 같습니다.

sudo rpm -Va
리눅스에서 깨진 패키지를 수정하는 방법 완벽 가이드

-V 옵션은 검증(verify)을 의미하며, 설치된 파일들의 정보를 rpm 데이터베이스에 저장된 정보와 비교합니다. 보통 긴 파일 목록이 출력되어 다소 불친절하지만, 특정 애플리케이션에 문제가 있다면 출발점을 잡는 데 유용합니다. 목록에서 문제가 될 만한 패키지를 발견하면 해당 패키지를 재설치할 수 있습니다.

sudo dnf --refresh reinstall PACKAGE_NAME

--refresh 옵션은 모든 메타데이터를 만료 처리하여, 활성화된 모든 저장소를 탐색하며 해당 패키지의 새 버전을 찾습니다. 만약 이 패키지에 깨진 의존성이 있다면 DNF가 --skip-broken 플래그 사용을 권고할 것입니다. 이는 특정 저장소가 활성화되어 있지 않아 의존성을 가져올 수 없는 경우일 수도 있으므로, 이 부분도 확인해 볼 필요가 있습니다.

Arch에서 깨진 패키지 수정하기

Arch의 패키지 관리자는 Debian 계열과 유사한 점이 많지만, 사실상 완전히 다른 시스템입니다. 문제 진단의 첫걸음은 저장소를 최신 상태로 갱신하고 전체 업그레이드를 시도하는 것입니다.

sudo pacman -Syu

그래도 패키지 설치나 시스템 업그레이드가 계속 실패한다면, 터미널에 표시된 오류 메시지에 따라 원인을 분류해 해결해야 합니다.

"Invalid or Corrupted Package" 오류

"pacman.conf" 파일을 어떤 식으로든 수정하면 pacman이 패키지를 잘못 손상된 것으로 판단하는 문제가 발생할 수 있습니다. 가장 유력한 원인은 패키지 관리자 캐시에 남아 있는 부분 다운로드(".part") 파일이며, 해결책은 이를 삭제하는 것입니다.

sudo find /var/cache/pacman/pkg/ -iname "*.part" -delete

물론 설치하려는 패키지 자체가 실제로 손상되어 유효한 메타데이터를 제공하지 않는 가능성도 있습니다. 이 경우에는 패키지 관리자가 업데이트할 때까지 기다려야 합니다. 이미 시스템에 설치된 패키지가 업그레이드 중 문제를 일으킨다면 다음 명령으로 제거하세요.

sudo pacman -Rns [패키지명]

"Unable to Lock Database" 오류

Debian의 apt와 마찬가지로 Arch의 패키지 관리자도 작업 중 잠금 파일을 생성합니다. 정전이 발생하거나 pacman이 잠금을 해제하지 못한 채 강제 종료되면 잠금 파일이 남게 됩니다.

먼저 컴퓨터의 어떤 프로세스가 아직 이 파일을 사용 중인지 확인합니다.

sudo fuser /var/lib/pacman/db.lck
리눅스에서 깨진 패키지를 수정하는 방법 완벽 가이드

위 예시에서는 ID가 121497인 프로세스가 잠금 파일을 사용하고 있습니다. 해당 프로세스가 궁금하다면 ps 명령으로 자세한 정보를 확인할 수 있습니다.

ps -p [PID번호]
리눅스에서 깨진 패키지를 수정하는 방법 완벽 가이드

이 예시에서는 다른 pacman 인스턴스가 잠금 파일을 점유하고 있었습니다. 잠금을 제거하는 가장 안전한 방법은 먼저 해당 프로세스를 종료하는 것입니다.

sudo kill [PID번호]

프로세스가 종료되었으니 이제 잠금 파일을 삭제합니다.

sudo rm /var/lib/pacman/db.lck

이제 정상적으로 작업을 진행할 수 있습니다!

"Conflicting Files/File Exists in Filesystem" 오류

이 오류는 업그레이드 중 pacman이 충돌을 감지할 때 발생합니다. 수정에 들어가기 전에, 패키지 관리자가 지적하는 파일 경로를 잘 살펴보세요.

우선 그 파일의 소유자가 누구인지 확인해야 합니다.

pacman -Qo [파일 경로]

파일이 다른 패키지가 아닌 사용자 소유라면 그냥 삭제하면 됩니다.

sudo rm [파일 경로]

반면 다른 패키지가 소유하고 있다면, 가장 안전한 방법은 해당 패키지 관리자가 충돌을 직접 수정할 때까지 기다리는 것입니다. 하지만 때로는 그럴 여유가 없고 당장 해결해야 할 때도 있습니다.

가장 간단한 방법은 pacman의 --overwrite 플래그를 사용하는 것입니다. 다만 이 방법은 일반적으로 안전하지 않으며, 일부 애플리케이션이 시스템에서 제대로 작동하지 않을 수 있습니다. 실행 전에 반드시 백업을 권장합니다.

--overwrite 플래그는 특정 파일에 대한 소유권 규칙을 무시하고 업데이트를 강행하도록 허용합니다. 예시는 다음과 같습니다.

pacman -Syu --overwrite [파일명]

위 명령이 작동하지 않으면 파일명 대신 절대 경로를 입력해 보세요. 일부 사용자들은 경로 앞의 슬래시("/")를 제거하면 고집스러운 명령이 작동한다고 보고했습니다.

자주 묻는 질문

1. AUR 헬퍼로도 Arch 수정 방법을 적용할 수 있나요?

일반적으로 가능합니다. 이 가이드의 명령에서 "pacman"을 사용 중인 AUR 헬퍼로 바꾸면 됩니다. 예시:

yay -Qo /path/to/file

2. 이 방법들은 안전한가요?

대체로 여기 소개된 방법들은 다른 일반적인 패키지 관리 작업만큼 안전합니다. 큰 예외는 잠금 파일을 삭제할 때입니다. 잠금 파일을 제거하기 전에 해당 파일을 사용 중일 수 있는 프로세스를 먼저 종료하는 것이 항상 중요합니다. 시스템에서 무엇이 실행 중인지 항상 주의하세요. 어딘가에서 실행 중인 apt나 pacman 인스턴스를 잊고 있을 수도 있습니다!

가장 좋은 습관은 업그레이드 전에 항상 시스템을 백업하는 것입니다.

3. 업데이트 도중 중단하면 어떻게 해야 하나요?

Ctrl + C를 누르거나, 패키지 관리자 프로세스를 강제 종료하거나, 터미널을 조기에 닫는 등 업데이트 과정을 중단하면 패키지 데이터베이스에 일정 수준의 손상이 생겨 이후 다른 패키지를 설치할 때 문제가 될 수 있습니다. 이를 해결하려면 캐시를 정리한 후 업데이트를 다시 실행하세요.

Debian/Ubuntu/Mint/Pop!_OS 등:

sudo apt-get clean

Fedora/CentOS/RHEL:

sudo dnf clean all

Arch:

sudo pacman -Scc

마무리

이 글의 해결 방법 중 하나가 도움이 되어 리눅스 시스템을 평소처럼 사용할 수 있게 되기를 바랍니다. 완전히 통제 불능 상태가 된 상황을 처리하는 가장 좋은 방법은 원래 상태로 되돌리려 노력하는 것임을 기억하세요. 자신이 정확히 무엇을 하는지 알지 못한다면, 문제를 해결하겠다고 더 많은 것을 덧붙이며 강행하지 마세요. 그렇게 하면 결국 더 엉켜버린 깨진 패키지의 늪에 빠져 해결이 더 어려워질 가능성이 높습니다.

또한 불필요하거나 깨진 패키지를 제거하기 위해 리눅스 시스템을 정리해야 할 수도 있습니다. 원인이 최신 소프트웨어를 감당하지 못하는 오래된 PC라면, 낡은 PC를 유용하게 활용하는 세 가지 방법도 참고해 보세요.