패키지 관리 (apt/dnf/yum)
Debian/Ubuntu의 apt와 RHEL/CentOS의 dnf/yum 패키지 관리 완벽 가이드
Debian/Ubuntu의 apt와 RHEL/CentOS의 dnf/yum 패키지 관리 완벽 가이드
목표: 두 계열의 패키지 시스템을 모두 능숙하게 다룰 수 있는 수준
📦 패키지 관리 시스템 비교
| 특징 | Debian/Ubuntu (DEB) | RHEL/CentOS (RPM) |
|---|---|---|
| 패키지 형식 | .deb | .rpm |
| 저수준 도구 | dpkg | rpm |
| 고수준 도구 | apt, apt-get | dnf, yum |
| 저장소 설정 | /etc/apt/sources.list | /etc/yum.repos.d/ |
| 패키지 정보 | /var/lib/dpkg | /var/lib/rpm |
| 캐시 | /var/cache/apt/archives | /var/cache/dnf |
🛠️ Debian/Ubuntu (apt)
apt 기본 명령어
# 패키지 목록 업데이트
sudo apt update
# 패키지 업그레이드
sudo apt upgrade # 안전한 업그레이드
sudo apt full-upgrade # 의존성 변경 포함 (주의!)
sudo apt dist-upgrade # full-upgrade와 동일
# 패키지 설치
sudo apt install nginx
sudo apt install nginx=1.18.0-0ubuntu1 # 특정 버전
# 패키지 제거
sudo apt remove nginx # 설정 파일 유지
sudo apt purge nginx # 설정 파일도 삭제
sudo apt autoremove # 불필요한 의존성 제거
# 패키지 검색
apt search nginx
apt search --names-only nginx
# 패키지 정보
apt show nginx
apt policy nginx # 버전 및 저장소 정보
# 설치된 패키지 목록
apt list --installed
apt list --upgradeable # 업그레이드 가능한 패키지
# 패키지 파일 검색
apt-file search nginx.conf # 어떤 패키지에 파일이 있는지
apt-file list nginx # 패키지의 파일 목록
apt-cache (캐시 관리)
# 패키지 검색
apt-cache search nginx
# 패키지 상세 정보
apt-cache show nginx
apt-cache showpkg nginx
# 의존성 확인
apt-cache depends nginx
apt-cache rdepends nginx # 역의존성
# 저장소에서 사용 가능한 버전
apt-cache policy nginx
apt-cache madison nginx # 모든 버전 목록
dpkg (저수준 도구)
# .deb 파일 직접 설치
sudo dpkg -i package.deb
# 패키지 제거
sudo dpkg -r package_name # 설정 유지
sudo dpkg -P package_name # 설정도 삭제
# 설치된 패키지 목록
sudo dpkg -l
sudo dpkg -l | grep nginx
# 패키지 정보
sudo dpkg -s nginx # 상태
sudo dpkg -L nginx # 설치된 파일 목록
sudo dpkg -S /etc/nginx/nginx.conf # 파일이 속한 패키지
# 패키지 추출
dpkg-deb -x package.deb /tmp/extract # 파일만
dpkg-deb -e package.deb /tmp/control # 제어 정볧
저장소 관리
/etc/apt/sources.list
# 기본 형식
deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
# 구성 요소 설명
# main - 공식 지원 소프트웨어
# restricted- 하드웨어 관련 제한 소프트웨어
# universe - 커뮤니티 지원 소프트웨어
# multiverse- 비공개 소프트웨어
PPA (Personal Package Archive)
# PPA 추가
sudo add-apt-repository ppa:nginx/stable
sudo add-apt-repository --remove ppa:nginx/stable # 제거
# 수동 추가
echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu jammy main" | \
sudo tee /etc/apt/sources.list.d/nginx-stable.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID
# GPG 키 추가 (현대적 방법)
wget -qO - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
# 또는
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg
apt 설정
/etc/apt/apt.conf
# 자동 업데이트 설정
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
# 프록시 설정
Acquire::http::Proxy "http://proxy.company.com:8080";
Acquire::https::Proxy "https://proxy.company.com:8080";
캐시 관리
# 캐시된 패키지 목록
ls /var/cache/apt/archives/
# 캐시 정리
sudo apt clean # 모든 캐시 삭제
sudo apt autoclean # 오래된 캐지만 삭제
# 캐시 크기 확인
du -sh /var/cache/apt/archives/
🛠️ RHEL/CentOS (dnf/yum)
dnf 기본 명령어
# 패키지 목록 업데이트
sudo dnf check-update
# 패키지 설치
sudo dnf install nginx
sudo dnf install nginx-1.20.0 # 특정 버전
# 패키지 업데이트
sudo dnf update # 전체 업데이트
sudo dnf update nginx # 특정 패키지만
# 패키지 제거
sudo dnf remove nginx
sudo dnf autoremove # 불필요한 의존성 제거
# 패키지 검색
sudo dnf search nginx
sudo dnf search all nginx
# 패키지 정보
sudo dnf info nginx
sudo dnf repoquery -l nginx # 패키지 파일 목록
# 설치된 패키지 목록
sudo dnf list installed
sudo dnf list available # 설치 가능한 패키지
sudo dnf list updates # 업데이트 가능한 패키지
# 패키지 히스토리
sudo dnf history
sudo dnf history info 10
sudo dnf history undo 10 # 특정 트랜잭션 취소
sudo dnf history rollback 5 # 특정 시점으로 롤백
# 패키지 그룹
sudo dnf group list
sudo dnf group install "Development Tools"
rpm (저수준 도구)
# .rpm 파일 직접 설치
sudo rpm -ivh package.rpm
# 패키지 업데이트
sudo rpm -Uvh package.rpm # 설치 또는 업데이트
sudo rpm -Fvh package.rpm # 이미 설치된 경우만 업데이트
# 패키지 제거
sudo rpm -e package_name
# 패키지 쿼리
sudo rpm -qa # 모든 설치된 패키지
sudo rpm -qa | grep nginx
sudo rpm -qi nginx # 패키지 정보
sudo rpm -ql nginx # 설치된 파일 목록
sudo rpm -qf /etc/nginx/nginx.conf # 파일이 속한 패키지
sudo rpm -qc nginx # 설정 파일만
sudo rpm -qd nginx # 문서 파일만
# 패키지 검증
sudo rpm -V nginx # 파일 변경 확인
sudo rpm -Va # 모든 패키지 검증
# 패키지 추출
rpm2cpio package.rpm | cpio -idmv
저장소 관리
/etc/yum.repos.d/
# /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
주요 설정:
| 설정 | 설명 |
|---|---|
name | 저장소 이름 |
baseurl | 패키지 URL |
mirrorlist | 미러 목록 URL |
enabled | 활성화 (0/1) |
gpgcheck | GPG 검증 (0/1) |
gpgkey | GPG 키 URL |
priority | 우선순위 (낮을수록 높음) |
EPEL 저장소
# RHEL 8/9
sudo dnf install epel-release
# 수동 설치
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
# 저장소 목록
sudo dnf repolist
sudo dnf repolist all
모듈 스트림 (RHEL 8+)
# 모듈 목록
sudo dnf module list
# 모듈 활성화
sudo dnf module enable nodejs:18
# 모듈 설치
sudo dnf module install nodejs:18
# 모듈 스위치
sudo dnf module reset nodejs
sudo dnf module enable nodejs:20
# 모듈 정보
sudo dnf module info nodejs
🔧 고급 기능
패키지 홀드 (버전 고정)
Debian/Ubuntu
# 패키지 홀드
sudo apt-mark hold nginx
# 홀드 해제
sudo apt-mark unhold nginx
# 홀드 목록
sudo apt-mark showhold
RHEL/CentOS
# /etc/dnf/dnf.conf 또는 /etc/yum.conf
[main]
exclude=nginx*
# 버전 고정
sudo dnf versionlock add nginx
sudo dnf versionlock list
sudo dnf versionlock delete nginx
sudo dnf versionlock clear
패키지 다운그레이드
# Debian/Ubuntu
sudo apt install nginx=1.18.0-0ubuntu1
sudo apt-mark hold nginx
# RHEL/CentOS
sudo dnf downgrade nginx
로컬 저장소 생성
# Debian/Ubuntu
mkdir -p /var/local-repo
cp *.deb /var/local-repo/
cd /var/local-repo
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
echo "deb [trusted=yes] file:/var/local-repo ./" | \
sudo tee /etc/apt/sources.list.d/local.list
sudo apt update
# RHEL/CentOS
mkdir -p /var/local-repo
cp *.rpm /var/local-repo/
createrepo /var/local-repo
cat <<EOF | sudo tee /etc/yum.repos.d/local.repo
[local]
name=Local Repository
baseurl=file:///var/local-repo
enabled=1
gpgcheck=0
EOF
sudo dnf clean all
sudo dnf makecache
🐛 트러블슈팅
의존성 문제
Debian/Ubuntu
# 깨진 의존성 수정
sudo apt --fix-broken install
sudo dpkg --configure -a
# 패키지 상태 확인
sudo dpkg -C
# 강제 설치
sudo dpkg -i --force-all package.deb
RHEL/CentOS
# 의존성 문제 해결
sudo dnf repoquery --unsatisfied
sudo dnf distro-sync
# 손상된 패키지 재설치
sudo dnf reinstall nginx
# 모든 것 업데이트
sudo dnf update --refresh
저장소 문제
# Debian/Ubuntu
sudo apt update 2>&1 | grep -i "err\|fail\|warn"
# GPG 키 문제
sudo apt-key list
sudo apt-key del KEY_ID
# RHEL/CentOS
sudo dnf repolist
sudo dnf clean all
sudo dnf makecache
📋 체크리스트
- 패키지 설치/제거/업데이트
- 저장소 추가/관리
- 의존성 문제 해결
- 패키지 검색 및 정보 확인
- 버전 홀드/다운그레이드
- 캐시 정리
- 로컬 저장소 생성
🔗 관련 노트
- 01-01-리눅스-기본-명령어-모음 — 기본 명령어
- 02-02-서비스-관리-systemd — 서비스 관리
- 03-03-보안-하드닝 — 패키지 보안
- 03-00-Linux-내부동작-자가학습 — 낮은 수준 이해
마지막 업데이트: 2026-06-01