국내에 Ubuntu-Ports를 지원하는 미러서버를 쓰던중 속도가 느려 직접 미러서버를 만들어야겠다는 생각이 들어 직접 구축하던 내용을 정리하였습니다.


목차

  • 미러링을 하는 이유
  • 우분투 패키지 미러링
  • Nginx를 사용하여 미러링 파일 전달

미러링을 하는 이유

미러링은 국가별 서버에 미리 파일의 복사본을 저장한 후 전송하여 다운로드 속도를 높이는 것입니다. 이는 사용자에게 더 빠른 다운로드 경험을 제공하기 위함입니다. 미러서버는 다른 국가의 서버를 통해 통신을 할 때 속도가 느려지는 것을 보완합니다. 이 때 다수의 사용자는 빠른 다운로드를 위해 서버에 미러서버를 설정합니다.
우분투 서버에서는 데비안 계열 리눅스에서 사용되는 APT 패키지 관리자를 사용합니다. 이 글에서는 우분투 서버를 위한 미러서버를 구축해 볼 것 입니다.

우분투 패키지 미러링

여기에서는 apt-mirror를 설치하여 진행하겠습니다. 우분투 패키지를 미러링 하는 방법은 rsync를 사용하는 것이 가장 보편적입니다. 하지만 이는 서버의 자원이 부족한 환경이라면 좋지 못한 선택이 될 수 있습니다. 왜냐하면 rsync는 버전에 상관없이 미러 서버에 담긴 모든 내용을 미러링 하기 때문에 사용하지 않는 버전도 같이 미러링 되어 서버 용량을 너무 많이 차지하게 됩니다. 따라서 저는 apt-mirror를 사용하여 특정 아키텍처와 버전을 미러링 하게 되었습니다.
다음 명령으로 apt-mirror를 설치합니다.

$ sudo apt install apt-mirror

에디터를 사용하여 /etc/apt/mirror.list 에 몇가지 항목을 추가합니다. 저희가 추가할 항목은 다음과 같습니다.

  • 미러링 할 서버의 주소
  • 미러링 될 경로
  • 아키텍처
  • 버전
############# config ##################
#
set base_path    <미러링 될 경로>
#
# set mirror_path  $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch  <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads     20
set _tilde 0
#
############# end config ##############
#Ubuntu ports focal arm64
#deb-src [arch=<아키텍쳐>] <미러링할 서버 주소> <버전> ...
#deb [arch=<아키텍쳐>] <미러링할 서버 주소> <버전> ...
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe multiverse
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe multiverse
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted universe multiverse
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted universe multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-security main restricted universe multiverse
...
https://github.com/misaka-mikoto-network/Misaka-config/blob/master/apt-mirror/mirror.list

미러링은 오랜 시간이 소요됩니다. 따라서 백그라운드에서 실행할 수 있는 환경을 만들어 주어야 합니다. nohup을 사용하여 apt-mirror를 백그라운드에서 실행합니다.

$ sudo nohup apt-mirror &

crontab에 추가 쉘 스크립트를 등록합니다. 이는 자동으로 미러링 및 인덱스 파일을 생성할 것 입니다.

#!/bin/bash
apt-mirror
cd <미러링된 경로>/<버전>
rm -f ls-lR.gz
ls -lR > ls-lR
gzip ls-lR

Nginx를 사용하여 미러링 파일 전달

미러링 된 파일 공유를 위해 Nginx 설정 파일 (nginx.conf) 을 수정합니다.

...
server {
    listen 80;
    server_name <접속할 도메인>;
        location /ubuntu-ports {
            expires -1;
            root <미러링된 경로>;
            autoindex on;
    }
}
...

이상으로 글을 마칩니다. Github에 실제 운영중인 미러 서버의 자동화 코드를 올려놓았습니다. 만약 이해가 되지 않는 부분이 있다면 참고하시기 바랍니다.