커널패닉 (119.♡.59.225)
2025년 11월 15일 AM 12:21 · 수정됨(12. 02. 20:35)
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)
-
시시커먼사각
25.11.15 · 49.♡.218.16
용량이 얼마나 차지하는지요..? 오래 전이긴 하지만 다니던 회사에서 데비안 패키지 서버 만들려고하다가 (당시에는) 감당이 안될 정도로 엄청난 스토리지 요구량에 포기했었거든요. - 잇
잇츠
→ 시커먼사각
25.11.15 · 211.♡.35.238
위키에 해당하는 정보가 나오네요.
https://wiki.archlinux.org/title/DeveloperWiki:NewMirrors#:~:text=Most%20mirrors%20do%20not%20sync%20archive%2C%20other%20and,about%2070%20GiB%20reserved%20for%20Arch%20Linux%20mirror.
[https://s3.damoang.net/data/editor/2511/547ac52.png] -
커커널패닉
→ 시커먼사각 작성자
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} -
커커널패닉
→ 커널패닉 작성자
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] -
완완두콩
→ 커널패닉
25.11.15 · 211.♡.12.92
저는 pool까지 저장해 두었는데, 다행히 100GB 전후로 계속 유지되고 있습니다.
혹시나 늘어날까 걱정이 되었는데 그러지는 않더라고요
[https://s3.damoang.net/data/editor/2511/ebc2a74.png] -
커커널패닉
→ 완두콩 작성자
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} -
커커널패닉
작성자
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]
댓글을 작성하려면 이 필요합니다.