IT
CentOS 9 Stream to Rocky 9 migration(offline 환경) 본문
0. 사전 준비 사항
▶ 원래 사용할 스크립트는 인터넷이 되는 환경에서 사용하는 것으로 여기서 사용할 스크립트는 offline 환경에서 사용 가능하게 커스텀한 것
▶ CentOS 9 Stream to Rocky Linux migration 진행
(1) Rocky 9의 gpg key 파일 필요
(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
원본 스크립트
수정한 스크립트
수정한 스크립트에 나름대로 해설 포함
스크립트 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이 baseos와 appstream이 되지 않도록 주의
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 id랑 lepo name이 baseos와 appstream이 아니기 때문이므로 사전에 방지하기 위해 rocky repo의 baseos, appstream을 다시 한 번 확인하고 실행할 것.