— 이강우 2026/06/24 08:55
보통 공식 배포 이미지가 배포된 이후 추가적인 업데이트 패키지들은 별도로 dnf update 등의 명령어로 업데이트하거나 레포지토리를 복제해서 사용해야 업데이트가 가능하다.
하지만 공식설치 iso 이미지 자체를 최신 패키지로 새로 만들면 이런 번거로움을 한번에 해결이 가능하다.
아래 스크립트는 이것을 자동으로 만들어주는 스크립트이다.
#!/bin/bash
# 에러 발생 시 즉시 중단
set -e
# 1. 경로 및 환경 변수 정의
DATA_DIR="/data"
ISO_MOUNT="$DATA_DIR/iso_mount"
ISO_WORKSPACE="$DATA_DIR/iso_workspace"
ORIGINAL_ISO="$DATA_DIR/Rocky-9.8-x86_64-dvd.iso"
OUTPUT_ISO="$DATA_DIR/Rocky-9.8-Custom-Updated.iso"
COMPS_DIR="/data/comps_backup"
MBR_TEMPLATE="$COMPS_DIR/isohdpfx.bin"
echo "========================================================="
echo " Rocky Linux 9.8 최신화 ISO 빌드 스크립트 (모듈 메타데이터 보존형)"
echo "========================================================="
echo "작업 모드를 선택해 주세요:"
echo "1) 전체 초기화 (기존 데이터를 완전히 지우고 처음부터 새로 빌드)"
echo "2) 갱신 업데이트 (기존 패키지 유지, 최신 업데이트 내용만 반영)"
echo "========================================================="
read -p "선택 (1 또는 2): " MODE
# 의존성 도구 체크 및 설치
echo "🔧 필수 도구 설치 확인 중..."
sudo dnf install -y dnf-utils xorriso rsync
# [분기 처리 1] 갱신 업데이트 모드 예외 처리
if [ "$MODE" == "2" ]; then
if [ ! -d "$ISO_WORKSPACE" ] || [ ! -f "$MBR_TEMPLATE" ]; then
echo "⚠️ 기존 작업 내역이 존재하지 않습니다."
echo "🔄 안전을 위해 '1) 전체 초기화' 모드로 전환하여 진행합니다."
MODE="1"
fi
fi
# [분기 처리 2] 모드별 파일 시스템 정리 및 준비
if [ "$MODE" == "1" ]; then
echo "🧹 [모드 1] 전체 초기화 작업을 시작합니다..."
if [ ! -f "$ORIGINAL_ISO" ]; then
echo "❌ 에러: 원본 ISO ($ORIGINAL_ISO) 파일이 없습니다. 파일을 배치해 주세요."
exit 1
fi
sudo rm -rf "$ISO_WORKSPACE" "$COMPS_DIR"
mkdir -p "$ISO_MOUNT" "$ISO_WORKSPACE" "$COMPS_DIR"
echo "💿 원본 ISO 마운트 및 복사 중..."
sudo mount -o loop "$ORIGINAL_ISO" "$ISO_MOUNT"
rsync -av "$ISO_MOUNT/" "$ISO_WORKSPACE/"
sudo umount "$ISO_MOUNT"
rmdir "$ISO_MOUNT"
# 원본 ISO에서 하이브리드 MBR 부팅 섹터(512바이트) 추출 백업
dd if="$ORIGINAL_ISO" bs=512 count=1 of="$MBR_TEMPLATE" status=none
# 신규 패키지 및 공식 repodata를 새로 받기 위해 기존 패키지 폴더 비우기
rm -rf "$ISO_WORKSPACE/BaseOS/*"
rm -rf "$ISO_WORKSPACE/AppStream/*"
elif [ "$MODE" == "2" ]; then
echo "🚀 [모드 2] 기존 패키지를 유지한 채 최신 변경분 동기화를 시작합니다..."
fi
# 3. 🔥 최신 RPM 패키지 및 공식 모듈 메타데이터 동기화 (--download-metadata)
# 이 옵션을 통해 공식 미러의 완벽한 modules.yaml과 comps.xml을 그대로 가져옵니다.
echo "📥 최신 패키지 및 공식 메타데이터(Modules 포함) 동기화 중..."
sudo reposync --repoid=baseos --download-path="$ISO_WORKSPACE/BaseOS" --norepopath --download-metadata --delete
sudo reposync --repoid=appstream --download-path="$ISO_WORKSPACE/AppStream" --norepopath --download-metadata --delete
# 4. 하이브리드 부팅 섹터를 포함한 ISO 이미지 최종 패키징
echo "💿 최신화된 하이브리드 ISO 이미지 생성 중..."
cd "$ISO_WORKSPACE"
xorrisofs -v -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot -e images/efiboot.img -no-emul-boot \
-isohybrid-mbr "$MBR_TEMPLATE" \
-R -J -V "Rocky-9-8-x86_64-dvd" \
-o "$OUTPUT_ISO" .
echo "========================================================="
echo "🎉 하이브리드 최신화 ISO 빌드가 성공적으로 완료되었습니다!"
echo "📍 생성된 파일 경로: $OUTPUT_ISO"
echo "========================================================="