Yum 미러 서버란?

Yum 미러 서버는 CentOS 및 RHEL 계열에서 패키지 설치 및 업데이트를 위해 사용되는 레포지토리 서버입니다. CentOS 공식 레포지토리 외에도 여러 지역별 미러 서버가 존재하며, 각 서버는 동일한 패키지를 제공합니다.

 

미러 서버 변경의 필요성

  • 기본 미러 서버의 속도가 느릴 경우 다운로드 및 업데이트 시간이 오래 걸림
  • 국내 미러를 사용하면 네트워크 속도를 극대화할 수 있음
  • 특정 기업 환경에서는 커스터마이징된 내부 레포지토리가 필요함

 

YUM 미러 서버 변경

기본 미러 서버 확인

기본적으로 CentOS는 /etc/yum.repos.d/ 디렉터리에서 baseurl과 mirrorlist를 사용해 미러 서버를 정의합니다.
레포지토리 설정 파일은 /etc/yum.repos.d/ 위치에 있으며, mirrorlist와 baseurl을 포함합니다.

  • mirrorlist: 가까운 미러 서버를 자동으로 선택
  • baseurl: 특정 미러 서버의 URL을 직접 지정
# 기본 레포지토리 파일 확인
ls /etc/yum.repos.d/

# 기본 레포지토리 내용 확인
cat /etc/yum.repos.d/CentOS-Base.repo

 

기존 레포지토리 파일 백업

변경하기 전에 기존 설정을 백업하는 것이 좋습니다.

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

 

레포지토리 파일 수정

CentOS-Base.repo 파일을 편집기로 열어 baseurl을 수정합니다.

# CentOS-Base.repo 파일 편집
vi /etc/yum.repos.d/CentOS-Base.repo

# 수정 전
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

# mirrorlist를 비활성화하고 baseurl을 지정합니다.
# updates, extras 등 다른 섹션도 동일하게 수정합니다.
# 수정 후
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://ftp.daumkakao.com/centos/$releasever/os/$basearch/

# 캐시 삭제
yum clean all
yum makecache

 

속도 최적화를 위한 플러그인 활용 (선택사항)

yum-plugin-fastestmirror를 설치하면 가장 빠른 미러 서버를 자동으로 선택해줍니다.

# 플러그인 설치
yum install yum-plugin-fastestmirror -y

# 설정 파일 편
vi /etc/yum/pluginconf.d/fastestmirror.conf

# 특정 미러 제외 설정 : fastestmirror.conf 파일에서 특정 미러를 제외합니다.
# exclude=.example.com,.slowmirror.com

# 선호하는 미러 서버 설정 가장 빠른 미러를 우선적으로 사용하도록 설정합니다.
# 파일 아래에 추가 합니다.
preferred=fastmirror.example.com

# /etc/yum/pluginconf.d/fastestmirror.conf 파일 내
[main]
enabled=1
verbose=0
always_print_best_host = true
socket_timeout=3
# Relative paths are relative to the cachedir (and so works for users as well
# as root).
hostfilepath=timedhosts.txt
maxhostfileage=10
maxthreads=15
#exclude=.gov, facebook
#include_only=.nl,.de,.uk,.ie

 

미러 서버 변경 스크립트

1버전

#!/bin/bash

# 백업할 디렉토리와 tar.gz 파일명 설정
BACKUP_DIR="/root"
BACKUP_FILE="${BACKUP_DIR}/centos_repos_backup.tar.gz"
REPO_FILE="/etc/yum.repos.d/CentOS-Base.repo"

# 롤백 여부 확인
if [[ -f "$BACKUP_FILE" ]]; then
    read -p "기존 백업이 있습니다. 롤백을 원하시면 'y'를 입력하세요. 계속하려면 'n'을 입력하세요: " ROLLBACK

    if [[ "$ROLLBACK" == "y" ]]; then
        # 백업 파일을 원래 위치로 복원 (경로 제거)
        tar -xzf "$BACKUP_FILE" --strip-components=3 -C /etc/yum.repos.d
        echo "롤백이 완료되었습니다."
        exit 0
    fi
fi

# 기존 repo 파일 백업 (경로 없이 백업)
tar -czf "$BACKUP_FILE" -C /etc/yum.repos.d CentOS-Base.repo

# 미러 서버 선택
echo "사용할 미러 서버를 선택하세요:"
echo "1: http://mirror.kakao.com"
echo "2: https://mirror.navercorp.com"
read -p "서버 번호를 입력하세요 (1 또는 2): " choice

if [[ "$choice" == "1" ]]; then
    NEW_MIRROR="http://mirror.kakao.com"
elif [[ "$choice" == "2" ]]; then
    NEW_MIRROR="https://mirror.navercorp.com"
else
    echo "잘못된 선택입니다. 스크립트를 종료합니다."
    exit 1
fi

# 미러 서버 변경
if [[ -f "$REPO_FILE" ]]; then
    # mirrorlist 주석 처리
    sed -i 's/^mirrorlist/#&/' "$REPO_FILE"
   
    # baseurl 주석 제거 및 변경
    sed -i "s|^#baseurl=http://mirror.centos.org/centos/|baseurl=${NEW_MIRROR}/centos/|g" "$REPO_FILE"

    echo "미러 서버가 ${NEW_MIRROR}/centos/로 변경되었습니다."
else
    echo "에러: $REPO_FILE 파일을 찾을 수 없습니다."
    exit 1
fi

echo "백업이 완료되었습니다: $BACKUP_FILE"

 

2버전

#!/bin/bash

# CentOS 7.9 미러 서버 변경 스크립트

# 사용자 지정 미러 서버 URL
NEW_MIRROR="http://ftp.daumkakao.com/centos"

# 백업 디렉터리 설정
BACKUP_DIR="/etc/yum.repos.d/backup"
mkdir -p "$BACKUP_DIR"

# 레포지토리 파일 경로
REPO_DIR="/etc/yum.repos.d"
REPO_FILES=$(ls $REPO_DIR/*.repo)

echo "========================================"
echo "CentOS 7.9 미러 서버 변경 스크립트"
echo "========================================"

# 기존 레포지토리 파일 백업
echo "[1] 기존 레포지토리 파일 백업 중..."
for REPO_FILE in $REPO_FILES; do
    cp "$REPO_FILE" "$BACKUP_DIR"
    echo "백업 완료: $(basename $REPO_FILE)"
done

# 레포지토리 파일 수정
echo "[2] 레포지토리 파일 수정 중..."
for REPO_FILE in $REPO_FILES; do
    sed -i.bak -e "s|^mirrorlist=.*|#mirrorlist=disabled|" \
               -e "s|^#baseurl=.*|baseurl=${NEW_MIRROR}/\$releasever/os/\$basearch/|" "$REPO_FILE"
    echo "수정 완료: $(basename $REPO_FILE)"
done

# Yum 캐시 삭제 및 재생성
echo "[3] Yum 캐시 삭제 및 재생성 중..."
yum clean all > /dev/null 2>&1
yum makecache > /dev/null 2>&1
echo "캐시 재생성 완료"

# 테스트 명령어 안내
echo "[4] 변경된 설정 테스트"
echo "테스트 명령어: yum repolist 또는 yum update"

echo "========================================"
echo "미러 서버 변경 작업 완료"
echo "========================================"