회사에서 사내망에 우분투 apt 미러 서버를 구성해야 한다면?

사실 윈도우 업데이트 서버(WSUS) 구축도 마찬가지 목적일 텐데, 네트워크 트래픽 비용을 줄이기 위함 + 빠른 전송 속도 때문에 사내에 패키지 미러 서버를 구성할 것이다.

우분투 apt 미러 서버 구성은 매우 쉽다. 단지 디스크 용량과 시간이 많이 필요할 뿐...

1. apt-mirror 패키지 설치
2. 설정 파일 편집
3. apt-mirror 실행
4. HTTP, FTP 등 구성
5. Client에서 설정

1. apt-mirror 패키지 설치

apt-get update
apt-get -y install apt-mirror

2. 설정 파일 편집

/etc/apt/mirror.list

위 파일을 편집해보자.

deb-src는 굳이 소스까지는 필요없다고 판단되니 주석 처리하고
base_path는 변경하는게 좋겠다. 기본 경로가 너무 길다. 대신 변경할 디렉터리는 미리 생성해 두어야 한다.
주석라인을 전부 삭제하면 아래와 같이 남는다. 우분투 12.04 Precise Pangolin 기준.

set base_path    /apt-mirror
set nthreads     20
set _tilde 0
deb http://archive.ubuntu.com/ubuntu precise main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu precise-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates main restricted universe multiverse

기본적으로 deb 키워드로는 현재 OS의 비트와 동일한 패키지만 받게 된다. 만약 32비트와 64비트를 모두 받으려면 아래와 같이 명시해 주면 된다. (회사에서 32비트를 사용하는 경우는 거의 없겠지만...)

set base_path    /apt-mirror
set nthreads     20
set _tilde 0
deb-i386 http://archive.ubuntu.com/ubuntu precise main restricted universe multiverse
deb-i386 http://archive.ubuntu.com/ubuntu precise-security main restricted universe multiverse
deb-i386 http://archive.ubuntu.com/ubuntu precise-updates main restricted universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu precise main restricted universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu precise-security main restricted universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu precise-updates main restricted universe multiverse

그리고 아래와 같이 archive.ubuntu.com 대신에 속도가 빠른(?) 국내 서버를 지정하는 방법도 있겠다.

set base_path    /apt-mirror
set nthreads     20
set _tilde 0
deb http://ftp.neowiz.com/ubuntu precise main restricted universe multiverse
deb http://ftp.neowiz.com/ubuntu precise-security main restricted universe multiverse
deb http://ftp.neowiz.com/ubuntu precise-updates main restricted universe multiverse

3. apt-mirror 실행

그냥 apt-mirror 커맨드를 입력하면 작업이 시작된다.
위 설정대로 해서 64비트만 받는데 용량이 63GB 정도나 된다. 우분투는 패키지가 정말 많다.
인터넷 속도에 따라 다르겠지만, 대략 반나절 정도면 다운로드가 완료될 것이다.

root@ubuntu:/etc/apt# apt-mirror
Downloading 48 index files using 20 threads...
Begin time: Wed Dec 18 23:55:40 2013
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]... [4]... [3]... [2]... [1]... [0]...
End time: Wed Dec 18 23:55:48 2013
Proceed indexes: [PPP]
62.4 GiB will be downloaded into archive.
Downloading 45006 archive files using 20 threads...
Begin time: Wed Dec 18 23:55:52 2013
[20]...

참고로 /etc/apt/mirror.list 설정에 보면 set nthreads 20 항목이 있는데, apt-mirror를 실행하면 wget으로 동시에 20개 세션을 열어서 다운로가 진행된다. ps로 보면 아래와 같은 wget 프로세스가 20개 보일 것이다.

wget --no-cache --limit-rate=100m -t 5 -r -N -l inf -o /apt-mirror/var/archive-log.0 -i /apt-mirror/var/archive-urls.0

또 참고로 크론을 통해 매일 미러 싱크를 맞추려면 /etc/cron.d/apt-mirror 파일에서 주석을 풀어주면 된다.
다만 사내 서버 관리용 Repo인데 굳이 매일 업데이트 해줄 필요가 있는지는 의문이다.
가끔씩 필요할 때 수동으로 apt-mirror 커맨드를 실행해 주는게 좋지 않을까?

4. HTTP, FTP 등 구성

무난하게 Apache를 올려서 HTTP로 서비스 해보자.
참고로 기본 DocumentRoot인 /var/www에 심볼릭 링크를 걸어주는 경로는 각자 /etc/apt/mirror.list 설정에 따라 다르니 참고만 하기 바란다.

apt-get -y install apache2
service apache2 restart
ln -s /apt-mirror/mirror/ftp.neowiz.com/ubuntu /var/www/ubuntu

5. Client에서 설정

서버 구성은 완료되었다. 이제 테스트가 필요한데, 당장 클라이언트가 없다면 로컬에서 자기 자신을 Repo 서버로 지정하여 테스트 해봐도 무방하다.

/etc/apt/sources.list

위 파일에서 군더더기를 다 빼고 아래와 같이 설정해 보았다.
IP는 임의로 Repo 서버의 IP를 가정한 것이다.

deb http://192.168.0.100/ubuntu precise main restricted universe multiverse
deb http://192.168.0.100/ubuntu precise-updates main restricted universe multiverse
deb http://192.168.0.100/ubuntu precise-security main restricted universe multiverse

이렇게 설정하고 apt-get update를 실행하면 404 Not Found 에러 메시지가 쭈욱 뜰 수 있는데, 32비트와 64비트를 모두 구성하지 않은 경우 반대쪽 패키지가 없어서 뜨는 에러이니 그냥 무시해도 무방하다.