패키지 관리

패키지 관리

1. 패키지 관리 개념

패키지 관리자는 소프트웨어 설치, 업데이트, 제거를 자동화합니다.

┌─────────────────────────────────────────────────────────┐
│                    패키지 저장소                          │
│              (Repository / Mirror)                       │
└────────────────────────┬────────────────────────────────┘
                         │
                         ▼
┌─────────────────────────────────────────────────────────┐
│                    패키지 관리자                          │
│         APT (Debian/Ubuntu) / DNF (RHEL/CentOS)         │
│                                                          │
│  • 의존성 자동 해결                                       │
│  • 버전 관리                                              │
│  • 무결성 검증                                            │
└─────────────────────────────────────────────────────────┘

배포판별 패키지 관리자

배포판 패키지 형식 저수준 도구 고수준 도구
Ubuntu/Debian .deb dpkg apt
CentOS/RHEL 8+ .rpm rpm dnf
CentOS/RHEL 7 .rpm rpm yum
Fedora .rpm rpm dnf

2. APT (Ubuntu/Debian)

저장소 업데이트

# 패키지 목록 업데이트 (설치 전 필수)
sudo apt update

패키지 설치

# 패키지 설치
sudo apt install nginx

# 여러 패키지
sudo apt install nginx php mysql-server

# 확인 없이 설치
sudo apt install -y vim

# 특정 버전 설치
sudo apt install nginx=1.18.0-0ubuntu1

패키지 제거

# 패키지만 제거
sudo apt remove nginx

# 패키지와 설정 파일 제거
sudo apt purge nginx

# 사용하지 않는 의존성 제거
sudo apt autoremove

# 제거 + 불필요한 의존성 정리
sudo apt remove --autoremove nginx

패키지 업데이트

# 설치된 모든 패키지 업그레이드
sudo apt upgrade

# 배포판 업그레이드 (의존성 변경 포함)
sudo apt full-upgrade

# 배포판 버전 업그레이드
sudo do-release-upgrade

패키지 검색

# 패키지 검색
apt search nginx

# 패키지 정보
apt show nginx

# 설치된 패키지 목록
apt list --installed

# 업그레이드 가능한 패키지
apt list --upgradable

캐시 정리

# 다운로드한 패키지 파일 정리
sudo apt clean

# 오래된 패키지 파일만 정리
sudo apt autoclean

3. DNF/YUM (CentOS/RHEL)

DNF (RHEL 8+, CentOS 8+, Fedora)

# 저장소 업데이트
sudo dnf check-update

# 패키지 설치
sudo dnf install nginx

# 여러 패키지
sudo dnf install nginx php mysql-server

# 확인 없이 설치
sudo dnf install -y vim

# 패키지 제거
sudo dnf remove nginx

# 패키지와 의존성 제거
sudo dnf autoremove nginx

# 모든 패키지 업데이트
sudo dnf upgrade

# 패키지 검색
dnf search nginx

# 패키지 정보
dnf info nginx

# 설치된 패키지 목록
dnf list installed

# 캐시 정리
sudo dnf clean all

YUM (RHEL 7, CentOS 7)

# 패키지 설치
sudo yum install nginx

# 패키지 제거
sudo yum remove nginx

# 패키지 업데이트
sudo yum update

# 패키지 검색
yum search nginx

# 패키지 정보
yum info nginx

4. 저장소 관리

Ubuntu/Debian 저장소

/etc/apt/sources.list

# 저장소 목록 확인
cat /etc/apt/sources.list

# 저장소 추가 디렉토리
ls /etc/apt/sources.list.d/

PPA (Personal Package Archive) 추가

# PPA 추가
sudo add-apt-repository ppa:ondrej/php

# PPA 제거
sudo add-apt-repository --remove ppa:ondrej/php

# 저장소 추가 후 업데이트
sudo apt update

외부 저장소 추가

# Docker 저장소 추가 예시
# 1. GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 2. 저장소 추가
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 3. 업데이트 및 설치
sudo apt update
sudo apt install docker-ce

CentOS/RHEL 저장소

저장소 목록

# 저장소 목록
dnf repolist

# 상세 정보
dnf repolist -v

# 저장소 설정 위치
ls /etc/yum.repos.d/

저장소 추가

# EPEL 저장소 (Extra Packages for Enterprise Linux)
sudo dnf install epel-release

# 저장소 파일 직접 추가
sudo vi /etc/yum.repos.d/custom.repo

저장소 파일 형식:

[custom-repo]
name=Custom Repository
baseurl=https://example.com/repo/
enabled=1
gpgcheck=1
gpgkey=https://example.com/RPM-GPG-KEY

5. 패키지 정보 확인

Ubuntu/Debian (dpkg)

# 설치된 패키지 목록
dpkg -l

# 특정 패키지 검색
dpkg -l | grep nginx

# 패키지 상태
dpkg -s nginx

# 패키지가 설치한 파일 목록
dpkg -L nginx

# 파일이 속한 패키지 찾기
dpkg -S /usr/sbin/nginx

CentOS/RHEL (rpm)

# 설치된 패키지 목록
rpm -qa

# 특정 패키지 검색
rpm -qa | grep nginx

# 패키지 정보
rpm -qi nginx

# 패키지가 설치한 파일 목록
rpm -ql nginx

# 파일이 속한 패키지 찾기
rpm -qf /usr/sbin/nginx

6. 소스 컴파일 설치

저장소에 없는 소프트웨어를 직접 컴파일합니다.

빌드 도구 설치

Ubuntu/Debian

sudo apt install build-essential

CentOS/RHEL

sudo dnf groupinstall "Development Tools"
sudo dnf install gcc gcc-c++ make

컴파일 설치 과정

# 1. 소스 다운로드 및 압축 해제
wget https://example.com/software-1.0.tar.gz
tar -xzvf software-1.0.tar.gz
cd software-1.0

# 2. 의존성 확인 및 설정
./configure --prefix=/usr/local

# 3. 컴파일
make

# 4. 설치
sudo make install

# 5. 정리 (선택)
make clean

checkinstall (패키지로 관리)

# 설치
sudo apt install checkinstall

# make install 대신 사용
sudo checkinstall

# 나중에 패키지 관리자로 제거 가능

7. 실무 패턴

시스템 업데이트

Ubuntu/Debian

# 업데이트 스크립트
#!/bin/bash
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
sudo apt clean

CentOS/RHEL

# 업데이트 스크립트
#!/bin/bash
sudo dnf check-update
sudo dnf upgrade -y
sudo dnf autoremove -y
sudo dnf clean all

필수 패키지 설치

Ubuntu/Debian

# 서버 기본 패키지
sudo apt install -y \
    vim \
    curl \
    wget \
    git \
    htop \
    net-tools \
    unzip \
    tree

CentOS/RHEL

# 서버 기본 패키지
sudo dnf install -y \
    vim \
    curl \
    wget \
    git \
    htop \
    net-tools \
    unzip \
    tree

패키지 고정 (버전 업그레이드 방지)

Ubuntu/Debian

# 패키지 고정
sudo apt-mark hold nginx

# 고정 해제
sudo apt-mark unhold nginx

# 고정된 패키지 목록
apt-mark showhold

CentOS/RHEL

# versionlock 플러그인 설치
sudo dnf install dnf-plugin-versionlock

# 패키지 고정
sudo dnf versionlock add nginx

# 고정 해제
sudo dnf versionlock delete nginx

# 고정 목록
dnf versionlock list

8. 문제 해결

의존성 문제

Ubuntu/Debian

# 깨진 패키지 수정
sudo apt --fix-broken install

# 강제 설치 (주의)
sudo apt install -f

# dpkg 설정 복구
sudo dpkg --configure -a

CentOS/RHEL

# 의존성 정리
sudo dnf clean all
sudo dnf makecache

# 문제 있는 패키지 제거 후 재설치
sudo dnf remove package_name
sudo dnf install package_name

잠금 문제

Ubuntu/Debian

# apt 잠금 해제 (다른 apt가 실행 중일 때)
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo dpkg --configure -a

9. CentOS 수명 종료 및 마이그레이션

CentOS EOL 현황

CentOS Linux는 모든 버전이 수명 종료(End-of-Life, EOL)되었습니다.

  • CentOS 8: 2021년 12월 31일 EOL
  • CentOS 7: 2024년 6월 30일 EOL

CentOS Stream은 현재 유일하게 사용 가능한 CentOS 변종이지만, 다른 목적으로 사용됩니다. - CentOS Stream은 롤링 릴리스(rolling-release) 개발 플랫폼입니다 - RHEL의 업스트림(upstream) 위치 (CentOS Linux처럼 다운스트림이 아님) - RHEL과 1:1 바이너리 호환 대체판이 아님 - RHEL보다 먼저 업데이트 수신 (최첨단, 덜 안정적)

마이그레이션 옵션

CentOS를 사용하는 조직은 대안 배포판으로 마이그레이션해야 합니다.

배포판 유지보수 주체 RHEL 호환성 비용
Rocky Linux Rocky Enterprise Software Foundation 1:1 바이너리 호환 무료
AlmaLinux AlmaLinux OS Foundation (CloudLinux) 1:1 바이너리 호환 무료
Oracle Linux Oracle 바이너리 호환 무료
RHEL Red Hat 원본 유료 (무료 개발자 구독 제공)

Rocky Linux

  • Gregory Kurtzer(CentOS 공동 창립자) 설립
  • 커뮤니티 주도, 비영리
  • RHEL과 1:1 바이너리 호환
  • 활발한 커뮤니티 및 기업 지원
# 현재 CentOS 버전 확인
cat /etc/redhat-release

# Rocky Linux로 마이그레이션 (CentOS 8)
sudo curl -O https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh
sudo bash migrate2rocky.sh -r

AlmaLinux

  • CloudLinux Inc. 지원
  • RHEL과 1:1 바이너리 호환
  • 강력한 상용 지원
  • 잘 구축된 인프라
# AlmaLinux로 마이그레이션 (CentOS 8)
sudo curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
sudo bash almalinux-deploy.sh

Oracle Linux

  • Oracle 유지보수
  • RHEL과 바이너리 호환
  • Unbreakable Enterprise Kernel (UEK) 사용 옵션
  • 무료 사용 및 배포
# Oracle Linux로 마이그레이션 (CentOS 7/8)
sudo curl -O https://raw.githubusercontent.com/oracle/centos2ol/main/centos2ol.sh
sudo bash centos2ol.sh

주요 차이점: Rocky vs AlmaLinux

측면 Rocky Linux AlmaLinux
거버넌스(Governance) 커뮤니티 주도 재단 CloudLinux 지원 재단
자금 조달 기부, 스폰서 CloudLinux Inc. + 스폰서
릴리스 주기 일반적으로 RHEL 밀접 추적 일반적으로 RHEL 밀접 추적
라이브 패칭(Live Patching) 제한적 사용 가능 (유료 KernelCare)
상용 지원 서드파티 벤더 CloudLinux + 파트너

두 배포판 모두 훌륭한 선택이며 매우 유사한 기능을 제공합니다. 선택은 주로 다음에 달려 있습니다. - Rocky Linux: 커뮤니티 주도 거버넌스와 CentOS 레거시를 선호하는 경우 - AlmaLinux: 기업 지원과 선택적 상용 지원을 원하는 경우

마이그레이션 모범 사례

  1. 먼저 테스트: 프로덕션이 아닌 시스템에서 먼저 마이그레이션
  2. 백업: 마이그레이션 전 전체 시스템 백업
  3. 호환성 확인: 서드파티 소프트웨어 호환성 검토
  4. 마이그레이션 전 업데이트: CentOS를 완전히 업데이트
  5. 마이그레이션 후 검증: 마이그레이션 후 서비스 및 애플리케이션 확인
# 마이그레이션 전 체크리스트
# 1. 설치된 패키지 목록
rpm -qa > /root/packages-before.txt

# 2. 중요 설정 백업
sudo tar -czf /root/etc-backup.tar.gz /etc

# 3. 시스템 완전 업데이트
sudo yum update -y

# 4. 최신 커널로 재부팅
sudo reboot

# 마이그레이션 후 검증
# 1. OS 버전 확인
cat /etc/redhat-release

# 2. 패키지 수 확인
rpm -qa | wc -l

# 3. 깨진 의존성 확인
sudo dnf check

# 4. 서비스 확인
sudo systemctl list-units --state=failed

권장사항

대부분의 CentOS 마이그레이션 사용자를 위해: - 프로덕션 워크로드에는 Rocky Linux 또는 AlmaLinux 선택 - 두 배포판 모두 안정적이고 엔터프라이즈급 RHEL 대체판 제공 - 최첨단 기능이 필요하지 않다면 프로덕션에서 CentOS Stream 피하기 - 공식 Red Hat 지원이 필요하면 RHEL 고려


10. 실습 예제

실습 1: 패키지 검색 및 설치

Ubuntu/Debian

# htop 검색
apt search htop

# 정보 확인
apt show htop

# 설치
sudo apt update
sudo apt install -y htop

# 확인
htop --version

CentOS/RHEL

# htop 검색
dnf search htop

# 정보 확인
dnf info htop

# 설치
sudo dnf install -y htop

# 확인
htop --version

실습 2: 패키지 정보 확인

Ubuntu/Debian

# 설치된 패키지 수
dpkg -l | grep "^ii" | wc -l

# 특정 패키지가 설치한 파일
dpkg -L bash | head -20

# 파일이 속한 패키지
dpkg -S /bin/bash

CentOS/RHEL

# 설치된 패키지 수
rpm -qa | wc -l

# 특정 패키지가 설치한 파일
rpm -ql bash | head -20

# 파일이 속한 패키지
rpm -qf /bin/bash

실습 3: 시스템 업데이트

Ubuntu/Debian

# 저장소 목록 업데이트
sudo apt update

# 업그레이드 가능 패키지 확인
apt list --upgradable

# 업그레이드
sudo apt upgrade -y

# 정리
sudo apt autoremove -y
sudo apt clean

CentOS/RHEL

# 업데이트 확인
sudo dnf check-update

# 업그레이드
sudo dnf upgrade -y

# 정리
sudo dnf autoremove -y
sudo dnf clean all

실습 4: 패키지 제거

# Ubuntu/Debian
sudo apt remove htop
sudo apt purge htop    # 설정 파일도 제거
sudo apt autoremove

# CentOS/RHEL
sudo dnf remove htop
sudo dnf autoremove

다음 단계

09_Shell_Scripting.md에서 쉘 스크립팅을 배워봅시다!

to navigate between lessons