RHEL · Oracle Linux · CentOS 7 계열에서 8 계열로 올리면 패키지 버전만 바뀌는 것이 아니라 도구와 기본 동작이 여러 곳에서 달라진다. 올린 뒤에 깨지는 것은 대개 여기 정리한 항목들이다. 업그레이드 전에 어느 항목이 자기 환경에 해당하는지 점검한다.
yum 이 dnf 의 심볼릭 링크가 된다. 명령은 대부분 그대로 쓸 수 있지만 출력 형식과 플러그인 체계가 다르다. 출력을 파싱하는 스크립트는 다시 봐야 한다.
AppStream 이 생기면서 같은 소프트웨어의 여러 버전을 모듈 스트림으로 제공한다. 설치 전에 스트림을 골라야 하는 패키지가 있다.
dnf module list nodejs
dnf module enable nodejs:20
dnf install nodejs
스트림을 고르지 않으면 기본 스트림이 깔린다. 원하던 버전이 아닌 경우가 많다.
기본이 Python 3 이다. /usr/bin/python 이 기본 제공되지 않으므로 #!/usr/bin/python 으로 시작하는 스크립트는 그대로 실패한다. python3 을 명시하거나 alternatives 로 지정한다.
alternatives --set python /usr/bin/python3
Python 2 는 지원이 끝났다. 남은 스크립트가 있으면 이 기회에 옮긴다.
firewalld 의 백엔드가 nftables 로 바뀐다. iptables 명령은 iptables-nft 로 대체되어 계속 쓸 수 있지만, 실제 규칙은 nftables 에 들어간다. 두 도구로 규칙을 섞어 넣으면 서로 보이지 않아 혼란스러워진다. 한쪽으로 통일한다.
iptables --version
nft list ruleset
NetworkManager 가 표준이다. network 서비스 스크립트 방식은 기본 설치에 포함되지 않는다. ifcfg-* 파일은 아직 읽지만 nmcli 로 다루는 것이 정석이다.
nmcli connection show
nmcli connection modify ens192 ipv4.addresses 192.0.2.10/24
시스템 전역 암호 정책(crypto-policies) 이 도입된다. 정책 하나로 OpenSSH · OpenSSL · GnuTLS 등의 허용 알고리즘이 한꺼번에 정해진다.
update-crypto-policies --show
기본 DEFAULT 정책에서 TLS 1.0 · 1.1 과 일부 약한 알고리즘이 빠진다. 오래된 장비나 애플리케이션이 붙지 못하면 정책을 LEGACY 로 내리는 방법이 있으나, 전체 보안 수준이 내려가므로 마지막 수단이다.
update-crypto-policies --set LEGACY
RSA SHA-1 서명 기반 인증도 단계적으로 막힌다. 오래된 SSH 키나 클라이언트가 있으면 미리 확인한다.
XFS 가 기본이다. Btrfs 는 RHEL 8 에서 지원되지 않는다. 쓰고 있었다면 이전 계획이 필요하다.
| 항목 | 변화 |
|---|---|
| 네트워크 명령 | ifconfig · netstat 대신 ip · ss (net-tools 는 별도 설치) |
| 컨테이너 | Docker 대신 podman · buildah · skopeo |
| 커널 | Oracle Linux 는 UEK 계열이 올라간다. 커널 모듈은 재빌드 필요 |
| 로그 | journald 중심. rsyslog 는 계속 쓸 수 있다 |
가장 확실하고 빠른 방법은 새로 설치하는 것이다. 설정과 데이터를 백업하고 8 로 깨끗하게 설치한 뒤 되돌린다. 오래 운영한 서버일수록 인플레이스 업그레이드의 잔재가 문제를 만든다.
재설치가 어려우면 leapp 을 쓴다. RHEL 과 Oracle Linux 모두 이 도구를 쓰지만 제공 저장소와 지원 범위가 다르다.
dnf -y install leapp-upgrade
leapp preupgrade
leapp preupgrade 는 시스템을 바꾸지 않고 보고서만 만든다. 이 보고서를 반드시 끝까지 읽는다. 여기서 막히는 항목(제거된 패키지, 지원되지 않는 파일 시스템, 서드파티 저장소 등) 을 먼저 해결해야 한다.
less /var/log/leapp/leapp-report.txt
leapp upgrade
reboot
전제 조건이 있다. 7 계열의 최신 마이너 버전이어야 하고, 지원되지 않는 구성(암호화 디스크, 일부 파일 시스템, RAID 구성 등) 이면 거부된다. 서드파티 저장소와 벤더 에이전트는 미리 제거하거나 대상 버전용으로 교체한다.
/usr/bin/python 을 참조하는 스크립트가 있는가.cat /etc/redhat-release
uname -r
systemctl --failed
dnf module list --enabled
update-crypto-policies --show
firewall-cmd --list-all
systemctl --failed 에 아무것도 없어야 한다. 부팅만 되는 것과 서비스가 정상인 것은 다르다.