⚠️ 운영 서버에 바로 적용하기 전 필수 전제

  • 스냅샷/이미지 백업 + 설정/데이터 백업
  • 동일 사양의 테스트 환경에서 리허설 1회 이상
  • 업그레이드 중 네트워크가 끊길 수 있으니 콘솔 접근(IPMI/iDRAC/가상화 콘솔) 확보

1) 왜 지금 해야 하나? (EOS/EOL 리스크)

CentOS 7은 EOL 상태이므로 보안 업데이트가 중단된다. 결과적으로,

  • 신규 취약점(CVE)이 떠도 패치 적용 경로가 약해짐
  • ISMS/ISMS-P, 내부 보안점검, 감사 대응 시 리스크로 분류될 가능성 증가
  • 레거시 라이브러리/패키지 유지로 장애 가능성 확대

따라서 “운영 지속” 자체가 리스크가 되고, 최소한 보안 업데이트가 제공되는 EL 계열로 전환이 필요하다.


2) 어떤 선택지가 있나? (리빌드 vs 인플레이스)

현실적으로 선택지는 2가지다.

방식 장점 단점 추천 상황
리빌드(신규 설치 후 이관) 가장 안전, 표준화 쉬움, 문제 시 롤백이 쉬움 설계/이관 작업량 증가 가능하면 무조건 권장
인플레이스 업그레이드(7→8) 서버를 그대로 두고 OS만 교체 블로커/예외가 많고 리허설 필수 재설치가 현실적으로 어려울 때

이 문서는 인플레이스 업그레이드 관점으로 진행한다.


3) “CentOS 8을 거쳐야 하나?” 자주 생기는 오해 정리

결론부터 말하면 CentOS 7.9 → Rocky 8.10으로 가는데, 중간에 CentOS 8을 거칠 필요는 없다.

오해가 생기는 이유는 보통 다음 두 흐름이 섞이기 때문이다.

  • (전환/리브랜딩) EL8 계열(CentOS 8 / Alma 8 등) → Rocky 8 로 전환하는 도구/흐름
  • (메이저 업그레이드) CentOS 7 → EL8 로 올리는 흐름(ELevate/Leapp)

CentOS Linux 8 자체는 이미 수명이 끝났기 때문에 “중간 경유지”로 삼는 건 보통 권장되지 않는다.


4) 사전 준비 체크리스트(필수)

4-1. 필수 전제

  • OS가 CentOS 7.9(최신 마이너)인지 확인
  • 콘솔 접근 가능(원격 콘솔/IPMI/가상화 콘솔)
  • /, /var, /boot 여유 공간 확인
  • 백업/스냅샷 확보
  • 다운타임 공지/변경 승인/롤백 플랜 수립

4-2. 현재 상태 백업(운영자 관점 최소 덤프)

# 패키지/리포/커널
rpm -qa | sort > /root/pkglist_el7.txt
yum repolist all > /root/yum_repolist_el7.txt
uname -a > /root/uname_el7.txt

# 서비스/포트
systemctl list-unit-files --type=service > /root/services_el7.txt
ss -lntup > /root/listen_ports_el7.txt

# 네트워크
ip a > /root/ip_addr_el7.txt
ip r > /root/ip_route_el7.txt
cat /etc/resolv.conf > /root/resolv_el7.conf

# 방화벽(사용 중이면)
firewall-cmd --list-all > /root/firewalld_el7.txt 2>/dev/null || true

5) 업그레이드 절차(CentOS 7.9 → Rocky 8.10)

큰 흐름

  1. CentOS 7 리포를 안정적으로 고정
  2. ELevate(Leapp) 설치
  3. leapp preupgrade로 블로커 제거
  4. leapp upgrade 실행 후 업그레이드 커널로 부팅
  5. Rocky 8로 올라온 뒤 dnf update로 8.10 최신화

Step 1) 현재 버전 확인

cat /etc/redhat-release
uname -r

Step 2) CentOS 7 리포지토리 Vault 고정(권장)

EOL 이후 일반 미러가 불안정할 수 있어, 설치/업데이트 안정성을 위해 Vault로 고정하는 케이스가 많다.

cat << "EOF" | sudo tee /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/7.9.2009/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF

yum clean all
yum makecache

업데이트 후 재부팅:

yum upgrade -y
reboot

Step 3) ELevate 리포지토리 설치

yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm

Step 4) Leapp + Rocky 업그레이드 데이터 설치

yum install -y leapp-upgrade leapp-data-rocky

Step 5) 사전 점검(핵심): leapp preupgrade

leapp preupgrade

리포트 확인:

less /var/log/leapp/leapp-report.txt
less /var/log/leapp/leapp-preupgrade.log
  • 리포트에 **inhibitor(차단)**가 있으면 업그레이드가 진행되지 않는다.
  • 보통 “리포트 확인 → 조치 → preupgrade 재실행”을 반복한다.

(자주 등장) Answerfile 항목이 필요한 경우

리포트에서 Missing required answers in the answer file가 보이면 아래처럼 답변을 기록한 뒤 재실행한다.

leapp answer --section remove_pam_pkcs11_module_check.confirm=True
leapp preupgrade

Step 6) 업그레이드 실행: leapp upgrade → reboot

leapp upgrade
reboot

재부팅 후 GRUB 메뉴에서 보통 다음 항목을 선택한다.

  • ELevate-Upgrade-Initramfs

업그레이드가 완료되면 Rocky 8로 부팅된다.


6) 업그레이드 후 후처리(정리/최신화)

6-1. Rocky 8 repo 확인 + 최신화

dnf repolist

dnf -y update

dnf -y distro-sync

6-2. EL7 잔존 패키지 확인

rpm -qa | egrep '\.el7(\.|$)' | sort

드라이버/보안모듈/에이전트 계열이 남아 있으면 바로 삭제하지 말고 영향도 확인 후 정리한다.


7) Rocky 8.10 업그레이드 완료 “확인 명령어”(붙여넣기용)

아래는 운영에서 바로 쓰는 검증 명령어들이다.


7-1. Rocky 8.10 전환 여부(가장 핵심)

# 1) 릴리즈 파일
cat /etc/redhat-release

# 2) OS 메타 정보
cat /etc/os-release

# 3) Rocky 릴리즈 패키지
rpm -q rocky-release rocky-repos

# 4) 커널/아키텍처
uname -r
uname -m

정상 기준(패턴)

  • /etc/redhat-releaseRocky Linux release 8.10 포함
  • /etc/os-releaseNAME="Rocky Linux"VERSION="8.10" 또는 VERSION_ID="8.10"

7-2. 리포지토리/업데이트 상태

# 활성 repo가 Rocky 8 계열인지 확인
dnf repolist enabled

# 최신화(권장)
dnf -y update

# 패키지 정합성(가능하면)
dnf -y distro-sync

7-3. SELinux 확인

getenforce
sestatus 2>/dev/null || true
cat /etc/selinux/config | egrep '^(SELINUX=|SELINUXTYPE=)'

7-4. 네트워크/포트/방화벽 점검

ip a
ip r
cat /etc/resolv.conf

ss -lntup

systemctl is-active firewalld && firewall-cmd --list-all || echo "firewalld inactive"

# 환경에 맞게 통신 점검(예)
# ping -c 3 8.8.8.8
# curl -I https://example.com

7-5. 시스템/서비스 장애 스캔

systemctl --failed
journalctl -b -p err --no-pager | tail -n 200
journalctl -p err --no-pager | tail -n 300

8) 한 번에 요약 출력(복붙 스크립트)

echo "===== [OS] /etc/redhat-release ====="; cat /etc/redhat-release

echo "===== [OS] /etc/os-release ====="; cat /etc/os-release

echo "===== [PKG] rocky-release/rocky-repos ====="; rpm -q rocky-release rocky-repos || true

echo "===== [KERNEL] uname ====="; uname -r; uname -m

echo "===== [DNF] repolist enabled ====="; dnf repolist enabled || true

echo "===== [SELINUX] ====="; getenforce; sestatus 2>/dev/null || true

echo "===== [NETWORK] ip a ====="; ip a

echo "===== [NETWORK] ip r ====="; ip r

echo "===== [PORTS] ss -lntup ====="; ss -lntup

echo "===== [SYSTEMD] failed units ====="; systemctl --failed || true

echo "===== [LOG] boot errors (last 200) ====="; journalctl -b -p err --no-pager | tail -n 200

echo "===== [EL7 leftovers] ====="; rpm -qa | egrep '\.el7(\.|$)' | sort || true

9) “업그레이드 완료” 판정 기준

  • /etc/redhat-release/etc/os-release에서 Rocky Linux 8.10 확인
  • dnf repolist enabled에서 Rocky 8 리포지토리 활성 확인
  • systemctl --failed가 비어 있고, 서비스/포트가 기대값과 일치
  • journalctl -b -p err에서 부팅/스토리지/네트워크 치명 오류가 보이지 않음
  • el7 잔존 패키지는 최소화(또는 영향도 파악 후 정리 계획 수립)

10) FAQ / 트러블 포인트(짧게)

Q1. 업그레이드 중 SSH가 끊기면?

  • 정상이다. 그래서 콘솔 접근을 확보해야 한다.

Q2. leapp preupgrade에서 inhibitor가 계속 뜨면?

  • 리포트(/var/log/leapp/leapp-report.txt) 기준으로 하나씩 조치하고 재실행.

Q3. Python 스크립트가 깨질 수 있나?

  • EL8 계열은 Python3 중심이라 /usr/bin/python을 가정한 레거시 스크립트는 점검이 필요.