06/11 — 패키지·소프트웨어 관리

소프트웨어 설치는 실행 파일·라이브러리·설정 파일·서비스·설치 스크립트·버전 관계를 함께 관리하는 작업이다. 이번 단원의 중심은 **“배포판 계열 → 패키지 형식 → 낮은 단계 도구 → 저장소·의존성 관리 도구”**다.

1. 배포판·패키지 형식·관리 도구 연결하기

배포판 계열파일 형식개별 패키지 관리저장소·의존성 관리
RHEL / Rocky / Fedora 계열.rpmrpmdnf, yum
Debian / Ubuntu 계열.debdpkgapt, apt-get

rpm·dpkg는 개별 패키지의 설치·조회·제거와 의존성 검사를 담당한다. DNF·APT는 저장소에서 필요한 패키지를 찾아 의존 관계를 해결하고 설치 작업을 조정한다. 하위 도구의 패키지 관리 위에 상위 도구의 저장소·의존성 해결 기능이 놓인다.

저장소는 패키지와 메타데이터를 제공하는 곳이다. 의존성은 프로그램 A가 B의 라이브러리나 기능을 요구하는 관계다. 버전 충돌·아키텍처·서명·저장소 선택까지 맞아야 설치가 된다.

RHEL 8의 yum 명령은 DNF 기반 호환 인터페이스와 연결된다. yum과 dnf는 이 환경에서 같은 RPM 패키지 체계를 관리하는 명령으로 연결한다.

2. 패키지 이름·버전·아키텍처

example-1.2.3-4.el8.x86_64.rpm

example 이름, 1.2.3 upstream 버전, 4.el8 패키징 릴리스, x86_64 아키텍처, rpm 형식으로 읽는다. noarch는 아키텍처 독립적인 패키지에 쓰인다. 파일명에서 하이픈만 기계적으로 쪼개기보다 메타데이터 조회가 정확하다.

DEB 파일명은 보통 이름_버전_아키텍처.deb이고 amd64는 x86-64 계열을 가리키는 Debian 명칭이다. RPM 계열의 x86_64와 Debian 계열의 amd64를 같은 x86-64 아키텍처에 대응시킨다.

패키지 이름은 배포 묶음, 실행 명령은 프로그램, 서비스 이름은 서비스 관리 단위를 식별한다. 예를 들어 openssh-server 패키지는 sshd 데몬과 서비스에 연결된다.

3. rpm: 설치·질의·검증을 구별하기

명령
rpm -ivh 파일.rpm설치, 상세 출력, 진행 표시
rpm -Uvh 파일.rpm업그레이드 또는 미설치이면 설치
rpm -Fvh 파일.rpm기존 설치 패키지에 한해 갱신
rpm -e 패키지명제거
rpm -qa설치된 전체 목록
rpm -qi 패키지명정보
rpm -ql 패키지명소유 파일 목록
rpm -qc 패키지명설정 파일 목록
rpm -qf /파일/경로이 파일을 소유한 패키지
rpm -qpi 파일.rpm설치하지 않은 RPM 파일의 정보
rpm -qpl 파일.rpmRPM 파일 안의 파일 목록
rpm -V 패키지명설치 파일을 기록된 메타데이터와 비교

q는 query, p는 설치된 DB 항목 대신 패키지 파일을 대상으로 한다고 연결하면 -qpi·-qpl이 덜 낯설다. 대문자 -V는 검증이다.

검증 출력의 대표 표시는 S 크기, M 모드, 5 내용 다이제스트, D 장치, L 심볼릭 링크, U 소유자, G 그룹, T 수정 시각, P capability다. 버전별 표시는 해당 매뉴얼로 확인한다. rpm -V의 차이는 설치 DB의 기준 메타데이터와 현재 파일 상태의 차이를 뜻한다. 정상적인 설정 변경도 여기에 나타나므로, 변경 이력과 파일 내용을 확인해 원인을 판단한다.

—nodeps는 의존성 검사를 생략한다. 의존성을 충족하는 설치에는 필요한 패키지·버전 확보가 필요하다. —force는 재설치·파일 대체 등의 강제 동작을 허용하므로 대상 파일과 기존 패키지에 미치는 영향을 확인한다. rpm 매뉴얼

4. DNF/YUM: 어디서 가져오고 무엇을 함께 바꾸는가

동작
이름·설명 검색dnf search 키워드
상세 정보dnf info 패키지
설치 목록dnf list installed
설치·업그레이드·제거dnf install / upgrade / remove
파일 제공 패키지 검색dnf provides ‘/경로/또는/패턴’
저장소 목록dnf repolist
캐시 정리·생성dnf clean all / makecache
작업 이력dnf history

dnf install ./local.rpm처럼 로컬 RPM을 주면서 저장소 의존성을 해결할 수도 있다. 패턴은 셸이 먼저 확장하지 않도록 인용한다. remove는 의존 관계에 따라 다른 항목에도 영향을 줄 수 있어 실제 변경 목록을 확인해야 한다.

RHEL 8에서 /etc/dnf/dnf.conf, /etc/yum.repos.d/*.repo가 대표 설정 위치다. 저장소 항목은 ID, name, baseurl 또는 mirrorlist/metalink, enabled, gpgcheck, gpgkey 등의 역할을 본다. 설치 파일의 서명 검증과 메타데이터 검증은 설정 항목이 구별될 수 있다.

AppStream의 모듈은 소프트웨어 묶음과 stream이라는 버전 흐름을 제공한다. module list, info, enable, install, reset 등의 이름을 알아두되 스트림 전환은 기존 설치 패키지와 충돌 가능성을 검토한다. 스트림 관리는 지원되는 버전 조합과 기존 설치 패키지의 호환성을 유지하는 작업이다. DNF 공식 명령 참조

5. dpkg와 APT

명령
dpkg -i 파일.deb설치
dpkg -r 패키지제거, 보통 설정 파일은 남김
dpkg -P 패키지purge, 패키지 관리 대상 설정까지 제거
dpkg -l설치 상태 목록
dpkg -L 패키지설치된 패키지의 파일 목록
dpkg -S /파일/경로파일 소유 패키지
dpkg -s 패키지패키지 상태·정보
dpkg -I 파일.debDEB 파일 정보
dpkg -c 파일.debDEB 내부 목록

-L과 -l, -s와 -S는 대소문자가 다르다. purge의 제거 범위는 패키지와 패키지 관리 대상 설정이다. 사용자 홈의 프로그램 데이터는 별도 보존·정리 대상으로 다룬다. Debian dpkg

APT에서는 다음 구별이 특히 중요하다.

  • apt update: 저장소 패키지 목록을 새로 받음.
  • apt upgrade: 설치 패키지 업그레이드. apt-get upgrade와 세부 새 의존성 처리 차이가 있을 수 있음.
  • apt full-upgrade: 필요한 경우 패키지 제거도 수반하는 전체 업그레이드.
  • apt install / remove / purge: 설치·제거·설정까지 제거.
  • apt search / show: 검색·정보.
  • apt autoremove: 더 이상 필요하지 않은 자동 설치 의존 항목 정리.
  • apt clean: 내려받은 패키지 캐시 정리.

update는 목록, upgrade는 실제 설치 버전 변경이다. apt-get dist-upgrade는 설정된 저장소를 기준으로 필요한 설치·제거를 포함해 의존성 변화를 처리하는 업그레이드다. 배포판 버전 전환은 해당 배포판의 별도 전환 절차를 따른다.

대표 저장소 위치는 /etc/apt/sources.list와 /etc/apt/sources.list.d/다. 전통적 deb 행과 최신 deb822 .sources 형식이 공존할 수 있다. 시험 기준 Ubuntu 18.04 이상이라는 범위와 최신 시스템 기본 형식은 구별한다. APT는 서명된 저장소 메타데이터와 패키지 해시를 연결해 배포 경로의 출처·무결성을 검증한다. 프로그램의 기능 품질과 보안 결함은 패치 정보·시험·검토로 확인한다. Debian apt

6. 소스 설치: configure → make → install

소스는 사람이 작성한 코드이고 바이너리는 실행 가능한 결과다. 프로젝트마다 빌드 시스템을 선택하며, 전통적인 Autotools 흐름은 다음과 같다.

소스 압축 해제 → ./configure --prefix=경로 → make → make install

configure는 환경·기능·경로를 확인해 빌드 설정을 만들고, make는 Makefile의 의존 관계에 따라 빌드하며, make install은 결과를 설치 위치에 복사하는 target이다.

  • —prefix는 설치 기준 경로. /usr/local은 직접 설치 프로그램과 연결되는 대표 위치.
  • make clean은 빌드 디렉터리의 산출물을 정리한다. 설치 파일 제거는 프로젝트의 uninstall target 또는 별도 관리 절차로 수행한다.
  • make uninstall은 프로젝트가 제공할 때만 가능.
  • CMake·Meson 등은 다른 설정·빌드 흐름을 사용.
  • .tar.gz는 gzip으로 압축한 tar 아카이브 형식이다. 내부 목록과 배포 설명으로 소스·바이너리 내용을 확인한다.

소스 설치는 선택·수정 자유도가 크지만 패키지 DB 밖의 파일·업데이트·삭제 책임이 늘어날 수 있다. 버전 선택 시 보안 패치 적용 상태와 후속 업데이트 경로를 함께 확인한다. 개발용 헤더가 필요할 때 RHEL의 -devel, Debian의 -dev 패키지 명명 관례를 연결한다.

7. 공유 라이브러리와 동적 연결

라이브러리는 프로그램이 재사용하는 기능 묶음이다. 정적 연결은 코드가 실행 파일에 포함되는 형태, 동적 연결은 실행 시 공유 라이브러리를 찾는 형태로 이해한다. Linux의 .so와 정적 아카이브 .a를 구별한다.

항목역할
ldd실행 파일의 공유 라이브러리 의존성 확인
ldconfig공유 라이브러리 연결·캐시 관리
/etc/ld.so.conf, ld.so.conf.d/검색 디렉터리 설정
/etc/ld.so.cache로더 검색 캐시
LD_LIBRARY_PATH실행 환경에서 추가 검색 경로 지정에 사용

동적 로더는 프로그램에 기록된 RPATH/RUNPATH, 환경, 캐시, 기본 경로 등 규칙을 적용한다. PATH는 셸의 실행 파일 검색에 사용하고, 동적 로더의 검색 경로는 공유 라이브러리를 찾는 데 사용한다.

출처 불명의 실행 파일에 ldd를 무조건 안전한 정적 분석으로 실행하지 않는다. 일부 환경에서 실행 동작이 개입할 수 있어 신뢰하지 않는 파일에는 정적 메타데이터 검사 등을 택한다. setuid 실행 등 보안 실행 상황에서는 환경변수 처리도 제한된다. ldconfig, ldd 안전 주의

8. 설치 실패를 해석하는 순서

“command not found”는 셸이 실행할 명령을 찾는 단계의 진단 단서다. 패키지 설치 여부 → 실제 명령 이름 → PATH 순으로 확인한다. 패키지 설치 상태는 패키지 도구로, 서비스 실행은 systemctl로, 수신 소켓은 ss로 확인한다.

  • 패키지가 검색되지 않음: 저장소 활성화·목록 갱신·이름·아키텍처.
  • 의존성 실패: 요구 버전·충돌·저장소 조합.
  • 서명 실패: 저장소 출처·서명 키·다운로드 무결성을 확인하고 정상 신뢰 경로를 복구.
  • 설치 성공, 실행 실패: 설정·권한·공유 라이브러리·서비스 로그.
  • 서비스 실행, 외부 접속 실패: 다음 단원의 바인딩·네트워크·방화벽까지 분리.

필기용 압축

  • RHEL 계열은 RPM 형식·rpm 개별 관리·DNF/YUM 저장소 관리로, Debian 계열은 DEB 형식·dpkg 개별 관리·APT 저장소 관리로 연결한다.
  • rpm -q는 질의, -p는 RPM 파일 대상, -V는 설치 메타데이터 대조다. -qf는 경로를 소유한 패키지, -ql은 패키지의 파일 목록을 찾는다.
  • rpm -U는 기존 패키지 갱신 또는 새 설치, -F는 이미 설치된 패키지 갱신에 쓴다.
  • apt update는 저장소 목록 갱신, upgrade는 설치 버전 갱신이다. remove는 패키지 제거, purge는 패키지 관리 대상 설정까지 제거한다.
  • configure는 빌드 설정, make는 빌드, make install은 설치 위치 배치, make clean은 빌드 산출물 정리를 담당한다.
  • PATH는 실행 파일 검색 경로, LD_LIBRARY_PATH는 공유 라이브러리 추가 검색 경로다. ldconfig는 공유 라이브러리 연결·캐시를 관리한다.
  • 설치 DB·서비스 상태·수신 소켓은 각각 패키지 도구·systemctl·ss로 확인한다.

회상점검 — 단원 끝 한 번

  1. RPM·rpm·DNF는 각각 무엇인가? DEB 계열의 대응은?
  2. rpm -qi와 -qpi, -ql과 -qf는 어떻게 다른가?
  3. -U와 -F의 차이, -V에서 차이가 나왔을 때 확정할 수 있는 사실은?
  4. apt update와 upgrade, remove와 purge는 어떻게 다른가?
  5. configure·make·make install·make clean을 설명해봐.
  6. PATH·LD_LIBRARY_PATH·ldconfig는 무엇이 다른가?
  7. 패키지 설치 → 서비스 실행 → 포트 수신 → 외부 접속을 각각 어떤 정보로 확인하나?

출처·검증 범위

2026-09-09 작성. rpm·DNF·Debian dpkg·apt 매뉴얼의 핵심 역할을 참조했다. 버전별 모듈 전환, 저장소 서명 세부 정책, 빌드·동적 로더 전체 규칙은 전수 대조가 남아 있다. 최신 매뉴얼의 신설 옵션은 시험 대상 버전에 자동 적용하지 않는다. 설치·삭제·업그레이드는 실행하지 않았다. 자체 예제이며 기출 미사용, 사전 작성은 학습 진도가 아니다.

학습 공간 연결