@완두콩 님의 글을 보고나서 ArchLinux 미러를 만들어 봤습니다
커널패닉

Lv.1 커널패닉 (119.♡.59.225)

2025년 11월 15일 AM 12:21 · 수정됨(12. 02. 20:35)

조회 404 공감 0

Arch Linux 업데이트시 간혹 패키지 데이터베이스를 불러올 수 없다는 오류가 발생하더군요.

따라서 해결 방법을 찾아보던 중 NAS에 미러를 구성하기로 했습니다. 처음에는 캐시 서버를 만들려고 했으나, 이런저런 이유로 미러링을 하기로 했네요.

몰론, NAS에 직접 서버를 구축하면 나중에 유지보수가 힘들어지므로 Docker를 활용하기로 했습니다.


먼저 정보를 저장할 수 있는 볼륨을 만들어야 합니다. 이를 생략하면 컨테이너 재생성시 모든 데이터가 유실되게 됩니다.

[code]docker volume create archmirrors-config

docker volume create archmirrors-cache[/code]


볼륨을 생성하고 나면 컨테이너를 만들어야 합니다. 아래 명령을 통해 컨테이너를 바로 시작할 수 있습니다.

[code]docker run -d \\

--name archmirrors \\

-p 8080:80 \\

-v archmirrors-config:/etc/nginx \\

-v archmirrors-cache:/var/www/archlinux \\

nginx:stable-alpine-slim[/code]


컨테이너가 정상적으로 실행되면 nginx.conf 를 업데이트해 줍니다.

[code]# /etc/nginx/nginx.conf

worker_processes auto;


events {

worker_connections 1024;

}


http {

server {

listen 80;

root /var/www;


location /archlinux/ {

autoindex on;

try_files $uri $uri/ =404;

}


access_log /var/log/nginx/arch_access.log;

error_log /var/log/nginx/arch_error.log warn;

}

}[/code]


nginx.conf 파일을 저장하고 나면, 필수 패키지를 설치한 후 nginx 구성을 다시 로드해야 합니다.

[code]apk add curl rsync ca-certificates

update-ca-certificates

nginx -s reload[/code]


다음으로 사용자 정의 스크립트를 일정 시간마다 실행할 수 있도록 DSM 내 작업 스케쥴러를 설정한 후 적어도 한번 실행해야 합니다.

[code]#!/bin/bash

# root 권한으로 실행해야 sudo 비밀번호 입력을 생략할 수 있습니다.

docker exec archmirrors sh -c "rsync -av --delete \\

--exclude='iso*' \\

--exclude='images*' \\

--exclude='*-unstable*' \\

--exclude='*-staging*' \\

--exclude='*-testing*' \\

--exclude='pool*' \\

--exclude='wsl*' \\

--exclude='lastsync' \\

--exclude='lastupdate' \\

--exclude='latest' \\

rsync://ftp.kaist.ac.kr/ArchLinux/ \\

/var/www/archlinux/" > /var/log/arch_mirror_sync.log 2>&1[/code]


마지막으로 PC의 /etc/pacman.d/mirrorlist 에서 Server = http://EXAMPLE_ADDR:8080/archlinux/$repo/os/$arch 를 추가하면 모든 설정이 완료됩니다.


mirrorlist 에 로컬 미러를 추가해 놓으니 속도가 매우 빨라져서 만족스럽네요.

댓글 (7)

  • 시커먼사각

    시커먼사각 Lv.1

    25.11.15 · 49.♡.218.16

    용량이 얼마나 차지하는지요..? 오래 전이긴 하지만 다니던 회사에서 데비안 패키지 서버 만들려고하다가 (당시에는) 감당이 안될 정도로 엄청난 스토리지 요구량에 포기했었거든요.
  • 잇츠 Lv.1 → 시커먼사각

    25.11.15 · 211.♡.35.238

  • 커널패닉

    커널패닉 Lv.1 → 시커먼사각 작성자

    25.11.15 · 119.♡.59.225

    [code]/var/www # du -hd 1 .
    232.2M ./archlinux
    232.2M .
    /var/www # ls archlinux/
    core extra multilib[/code]

    놀랍게도 232 MB 만 차지합니다.
    core, extra, multilib 을 제외한 다른 레포는 모두 제외해서 생각보다 스토리지를 많이 차지하지 않네요 {emo:onion-013.gif:50}
  • 커널패닉

    커널패닉 Lv.1 → 커널패닉 작성자

    25.11.15 · 119.♡.59.225

    만약 pool 까지 저장하면, 100GB 정도의 저장공간을 차지하게 됩니다.
    [code]/var/www/archlinux # ls
    core extra multilib pool
    /var/www/archlinux # du -hd 1
    5.1M ./core
    223.3M ./extra
    2.8M ./multilib
    99.3G ./pool
    99.5G .[/code]

    pool 도 저장하시려면 아래 코드를 사용자 정의 코드 입력란에 붙여넣으셔야 합니다.
    [code]#!/bin/bash
    # root 권한으로 실행해야 sudo 비밀번호 입력을 생략할 수 있습니다.
    docker exec archmirrors sh -c "rsync -av --delete \\
    --exclude='iso*' \\
    --exclude='images*' \\
    --exclude='*-unstable*' \\
    --exclude='*-staging*' \\
    --exclude='*-testing*' \\
    --exclude='*-debug*' \\
    --exclude='wsl*' \\
    --exclude='lastsync' \\
    --exclude='lastupdate' \\
    --exclude='latest' \\
    rsync://ftp.kaist.ac.kr/ArchLinux/ \\
    /var/www/archlinux/" > /var/log/arch_mirror_sync.log 2>&1[/code]
  • 완두콩

    완두콩 Lv.1 → 커널패닉

    25.11.15 · 211.♡.12.92

    저는 pool까지 저장해 두었는데, 다행히 100GB 전후로 계속 유지되고 있습니다.
    혹시나 늘어날까 걱정이 되었는데 그러지는 않더라고요
    [https://s3.damoang.net/data/editor/2511/ebc2a74.png]
  • 커널패닉

    커널패닉 Lv.1 → 완두콩 작성자

    25.11.15 · 119.♡.59.225

    [code]error: failed retrieving file 'python-pip-25.3-1-any.pkg.tar.zst' from 192.168.0.100:3001 : The requested URL returned error: 404[/code]

    pool을 저장하지 않을 경우 패키지를 다운로드 받을 때 출력이 살짝 더러워지는 문제 외엔 특별한 문제가 없지만
    다른 미러서버와 통신에 실패할 경우에는 패키지 설치에 실패하게 됩니다 {emo:onion-013.gif:50}
  • 커널패닉

    커널패닉 Lv.1 작성자

    25.12.02 · 119.♡.59.225

    [code]docker run -d \\
    --name archmirrors \\
    -p 8080:80 \\
    -v archmirrors-config:/etc/nginx \\
    -v archmirrors-cache:/var/www/archlinux \\
    --health-cmd="curl -fsS 에이치티티피콜론슬래시슬래시localhost" \\
    --health-interval=30s \\
    --health-timeout=5s \\
    --health-retries=3 \\
    nginx:stable-alpine-slim[/code]


    만약 아래와 같이 docker ps 시 STATUS 필드에 healthy 등의 서버 상태를 표시하려면, 위 명령을 대신 사용하시기 바랍니다.
    [code]STATUS NAMES
    Up 4 minutes (healthy) archmirrors[/code]

댓글을 작성하려면 이 필요합니다.