IT

CentOS 9 Stream to Rocky 9 migration(offline 환경) 본문

SE/리눅스

CentOS 9 Stream to Rocky 9 migration(offline 환경)

섬법 2025. 2. 17. 21:59

0. 사전 준비 사항

▶  원래 사용할 스크립트는 인터넷이 되는 환경에서 사용하는 것으로 여기서 사용할 스크립트는 offline 환경에서 사용 가능하게 커스텀한 것

▶ CentOS 9 Stream to Rocky Linux migration 진행

(1) Rocky 9의 gpg key 파일 필요

RPM-GPG-KEY-Rocky-9
0.00MB

 

(2) 로컬 레포지토리 구성 필요(CentOS 9 stream의 baseos, appstream / rocky9의 baseos, appstrea)

(3) 아래 위치 여유 공간 필요

/boot 50MB

/var 1.5GB

/usr 250MB

(/usr, /var 별도 마운트 없으면 / 여유로 계산)

(4) 백업 받아놓기

(5) 세션이 끊기면 마이그레이션 취소되고 다시 진행 불가하기 때문에 원격 작업 시 tmux라는 터미널 프로그램으로 작업 추천

(6) bash 쉘로 실행(+bash 버전 4.2이상)

(7) root로 실행


1. 스크립트 수정

스크립트 원본

https://github.com/rocky-linux/rocky-tools/tree/main/migrate2rocky

 

rocky-tools/migrate2rocky at main · rocky-linux/rocky-tools

Contribute to rocky-linux/rocky-tools development by creating an account on GitHub.

github.com

위 스크립트는 인터넷이 되는 환경에서 사용하는 스크립트로 

migrate2rocky.sh 는 centos 8 stream to rocky 8

migrate2rocky9.sh 는 centos 9 stream to rocky9

원본 스크립트

migrate2rocky9.sh
0.04MB

 

수정한 스크립트

cus_migrate2rocky9offline.sh
0.04MB

 

수정한 스크립트에 나름대로 해설 포함

[해설포함]cus_migrate2rocky9offline.sh
0.05MB

스크립트 custom

일단 해당 스크립트는 gpg key, repo도 온라인을 이용하기 때문에 해당 부분만 offline 환경에 맞게 수정해주면 됨.

(1) 변수 추가

이때 gpg key 파일 위치와 레포지토리 위치가 바뀔 수 있어서 프롬프트 형태로 입력받아 실행할 수 있게 변수 추가

# custum 변수
read -p "input key_path(input all path): " cus_key_path 
read -p "input rocky9 baserepo path(input all path): " cus_baserepo_path
read -p "input rocky9 appstreamrepo path(input all path): " cus_appstreamrepo_path

(2) gpg key

해당 스크립트의 141번 째 줄

gpg_key_url="https://dl.rockylinux.org/pub/rocky/RPM-GPG-KEY-Rocky-9"
gpg_key_sha512="ead288baa8daad12d6f340f1a392d47413f8614425673fe310e82d4ead94ca15eb2e1329b30389e6a7f93dd406da255df410306cffd7a1a24f0dfb4c8e23fbfe"

이 부분을 아래와 같이 수정

gpg_key_url="file://$cus_key_path"
gpg_key_sha512="ead288baa8daad12d6f340f1a392d47413f8614425673fe310e82d4ead94ca15eb2e1329b30389e6a7f93dd406da255df410306cffd7a1a24f0dfb4c8e23fbfe"

(3) repo

해당 스크립트의 147번 째 줄

# all repos must be signed with the same key given in $gpg_key_url
declare -A repo_urls
repo_urls=(
    [rockybaseos]="https://dl.rockylinux.org/pub/rocky/${SUPPORTED_MAJOR}/BaseOS/$ARCH/os/"
    [rockyappstream]="https://dl.rockylinux.org/pub/rocky/${SUPPORTED_MAJOR}/AppStream/$ARCH/os/"
)

이 부분을 아래와 같이 수정

# all repos must be signed with the same key given in $gpg_key_url
declare -A repo_urls
#repo_urls=(
#    [rockybaseos]="https://dl.rockylinux.org/pub/rocky/${SUPPORTED_MAJOR}/BaseOS/$ARCH/os/"
#    [rockyappstream]="https://dl.rockylinux.org/pub/rocky/${SUPPORTED_MAJOR}/AppStream/$ARCH/os/"
#)
repo_urls=(
    [rockybaseos]="file://$cus_baserepo_path"
    [rockyappstream]="file://$cus_appstreamrepo_path"
)

2. Repository 구성

구성해야할 Repository

1-1. CentOS.repo

[Local-BaseOS]
name=Centos 9 BaseOS
gpgcheck=0
enabled=1
baseurl=file:///mnt/centos/BaseOS/

[Local-AppStream]
name=Centos 9 AppStream
gpgcheck=0
enabled=1
baseurl=file:///mnt/centos/AppStream/

 

※주의

CentOS 9 stream repo 구성 시 repo id 와 repo name이 baseosappstream이 되지 않도록 주의

Rocky 9 repo 에서 baseos와 appstream 을 써야 함

 

1-2. Rocky.repo

[baseos]			#반드시 baseos로 작성
name=baseos			#반드시 baseos로 작성
gpgcheck=0
enabled=1
baseurl=file:///mnt/rocky/BaseOS/	

[appstream]			#반드시 appstream으로 작성
name=appstream			#반드시 appstream으로 작성
gpgcheck=0
enabled=1
baseurl=file:///mnt/rocky/AppStream/	

#이 아래는 선택 사항
[crb]
name=Rocky Linux CRB
baseurl=file:///mnt/rocky/CRB/
gpgcheck=0
enabled=1

 

※주의

Rocky 9 repo 에서  repo id 와 repo name이 반드시 baseos appstream이 되도록 작성

기존 CentOS Stream에서 baseos와 appstream 레포지토리 제외하고 다른 레포지토리의 패키지를 설치한 경우 해당 레포지토리도 rocky repo에 작성해야 함.
▶ crb, extras repo도 필요하다면 작성(crb는 Rocky.repo에, extras repo는 아래 참고)

 

따라서 아래는 필요할 경우 작성

1-3. (선택) rocky-extras.repo

[extras]
name=Rocky Linux extras
baseurl=file:///root/Downloads/extras/x86_64/os/		# extras의 경로로 꼭 os까지 작성
gpgcheck=0
enabled=1

 

1-4. (선택) rocky-addons.repo

[highavailability]
name=Rocky Linux High Availability
baseurl=file:///root/Downloads/HighAvailability/x86_64/os/	#ha의 경로로 꼭 os까지 작성
gpgcheck=0
enabled=1

 

1-5. repo작성 후

# dnf clean all
# dnf makecache
# dnf repolist


3. 스크립트 실행

3-1. 스크립트 실행 전

실행 전에 rocky로 시작하는 패키지가 하나라도 있으면 아래 사진과 같이 마이그레이션 실패함.

따라서 실행 전에 # rpm -qa |grep rocky*로 확인해서 지우기(꼭 필요한 패키지인 경우 centos*로 교체)

 

3-2. 스크립트 실행

# ./cus_migration2rocky9offline.sh -r

반드시 -r 옵션을 넣어서 실행해야 함. r 옵션을 넣지 않으면 아래와 같이 사용법 출력됨.

3-3. key, repo 위치 입력

차례대로

RPM-GPG-KEY-Rocky-9 파일 경로

Rocky baseos 레포지토리의 경로

Rocky appstream 레포지토리의 경로

 

- 입력 예시

/root/Downloads/RPM-GPG-KEY-Rocky-9

/mnt/rocky/BaseOS/

/mnt/rocky/AppStream/

 

3-4. 완료

완료 후 재부팅


4. 완료 후

4-1. repo 파일 삭제

작업 완료 후 위와 같이 repo파일들 생성되는데 rocky-devel.repo, ~.rpmnew는 삭제

 

4-2. 완료 확인

재부팅 시 위와 같이 grub에 rocky생성


5. 트러블 슈팅

5-1. complete 라는 메시지 나오고 에러 발생 시

간혹 아래 사진과 같이

Complete!

Last metadata expiration check: 0:00:30 ago on Mon Sep  2 17:57:53 2024.

> Leaving Shell

라는 메시지가 나오고 에러 발생하는 경우가 있는데 기본적인 패키지 교체, 커널 교체 등은

완료된 상태임.

 

5-2. key error

key 파일 못 찾은 것이기 때문에 key 파일 경로 다시 확인

 

5-3. No matching repo to modify: appstream, baseos

> Leaving shell 이 나오면 패키지 교체 등 기본 마이그레이션은 다 완료 된 상태.

이 상태에서는 스크립트 다시 실행이 불가능함.

하지만 위와 같이 no matching이 나오는 것은 rocky.repo 안에 lepo idlepo namebaseosappstream이 아니기 때문이므로 사전에 방지하기 위해 rocky repobaseos, appstream을 다시 한 번 확인하고 실행할 것.