mirror : //mirrors.ubuntu.com을 고 가용성으로 만들기


26

우리는 분산 팀이므로 VM이 Ubuntu mirror://설정을 사용합니다 . 우리 /etc/apt/sources.list는 다음과 같이 보입니다 :

deb mirror://mirrors.ubuntu.com/mirrors.txt lucid main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt lucid-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt lucid-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt lucid-security main restricted universe multiverse

이것은 그 자체로 매우 놀랍고 다른 위치에서 일하는 사람들에게- 로컬 커스터마이즈가 덜 필요한 사람들에게 매우 유용 합니다. 이론상 페일 오버.

일상적으로이 설정은 너무 자주 실패합니다. 이번 주에 2 ~ 3 회 말하고 싶습니다.

지금 내 옷장 거울로 mirrors.ubuntu.com돌아갑니다 ftp.uni-bayreuth.de. 불행히도 다운 된 것 같습니다.

이것은 몇 시간 동안 진행되었으며 거울은 대학의 자원 봉사자들이 주최하고 오늘 금요일이며, 이것이 곧 해결 될 것이라는 희망이 적습니다.

모든 이야기, 내 질문은 다음과 같습니다

  • 누구든지 이것을 사용합니까?
  • 가동 중지 시간을 어떻게 해결합니까? (내 빠른 수정은 쉘 스크립트입니다)
  • 이 상황을 개선하는 데 어떻게 도움이됩니까?


@ RaduRădeanu-netselect에 대해 처음 읽은 것은 ... 8oþ
dschinn1001

@ RaduRădeanu 재미있는 팁! 건배! mirror:스레드에서 가장 많이 업데이트 된 방법 을 사용하려고합니다 . 내 문제는 가장 빠른 미러가 실패 할 때마다 장애 조치가 없으며 멈추는 것입니다.
까지

자신의 Ubuntu Mirror를 만드는 것은 옵션입니까?
Mitch

@Till 자신의 거울을 가질 수 있는지 알려주세요.
Mitch

답변:


10

개인적으로 최고의 Ubuntu 리포지토리 미러를 선택하는 가장 좋은 방법은 GUI 방법을 사용하는 것입니다.

다운로드 서버

이제 질문에 설명 된 상황을 개선하려면 어떻게 든 규칙을 설정해야합니다. 이 규칙은에 따라 행동해야합니다 mirrors.ubuntu.com. 다음과 같은 규칙을 제안 할 수 있습니다.

  • 최고 / 선호 거울 목록을 작성하십시오. 여기 , 여기 또는 여기 에서 볼 수 있듯이 많은 거울이 있습니다
  • 좋은 거울을 찾으면 목록에 추가하십시오.
  • 미러가 다운되거나 고장난 경우 이는 좋은 미러가 아니며 목록에서 제거해야 함을 의미합니다.
  • 당신이 사용할 수있는 netselect, apt-spy또는apt-fast
  • 요구 사항에 따라 기타.

다음으로, 어떻게 해결할 수 있는지 알아보기 위해 세 가지 bash 스크립트 예제와 함께 단계별로 설명 된 방법을 제공 할 수 있습니다. 첫 번째 스크립트는 현재 사용중인 국가의 미러를 대신 사용합니다 mirrors.ubuntu.com/mirrors.txt(각 국가마다 미러가 연결된 텍스트 파일이 있습니다. http://mirrors.ubuntu.com/ 참조 ).

  • A의 터미널 실행 mkdir -p bin-이 명령은 만들 것이다 bin당신의 디렉토리 home당신은 이미이없는 경우 폴더를.
  • 실행 후 -gedit에 gedit ~/bin/change_sources.sh새 파일이 생성됩니다 change_sources.sh.
  • 새로 작성된 파일에 다음 스크립트 중 하나를 복사하여 붙여 넣으십시오.
#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

ip=$(curl -s 'http://ipecho.net/plain')
country=$(curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode' \
    | awk '{ print toupper($2) }')
release=$(lsb_release -sc)

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

line=$(head -n 1 $file)
new_line="## Ubuntu Repos for $ip"

if [ "$line" == "$new_line" ] ; then
    exit 0
fi

cp -f $file $old_file

printf "$new_line
deb mirror://mirrors.ubuntu.com/$country.txt $release main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-security main restricted universe multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0

또는 http://repogen.simplylinux.ch/ 에서 찾을 수있는 것과 비슷한 것 :

#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

ip=$(curl -s 'http://ipecho.net/plain')
country=$(curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode' \
    | awk '{ print tolower($2) }')
release=$(lsb_release -sc)

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

line=$(head -n 1 $file)
new_line="## Ubuntu Main Repos for $ip"

if [ "$line" == "$new_line" ] ; then
    exit 0
fi

cp -f $file $old_file

printf "$new_line
deb http://$country.archive.ubuntu.com/ubuntu/ $release main restricted universe  multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release main restricted universe multiverse

## Ubuntu Update Repos for $ip
deb http://$country.archive.ubuntu.com/ubuntu/ $release-security main restricted universe multiverse
deb http://$country.archive.ubuntu.com/ubuntu/ $release-updates main restricted universe multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release-security main restricted universe multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release-updates main restricted universe multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0

또는 사용하여 스크립트 netselect(에서 다운로드 여기가 , 지침을 설치 여기 로) izx가 에서 좋은 우리 모두의 verry 설명 이 답변 :

#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

url=$(netselect \
    `wget -q -O- https://launchpad.net/ubuntu/+archivemirrors \
        | grep -P -B8 "statusUP|statusSIX" \
        | grep -o -P "(f|ht)tp.*\"" \
        | tr '"\n' '  '` \
    | awk '{print $2}')
release=$(lsb_release -sc)

if [ "$url" == "" ] ; then
    exit 0
fi

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

cp -f $file $old_file

printf "## Ubuntu Best Repos
deb http://extras.ubuntu.com/ubuntu $release main
deb-src http://extras.ubuntu.com/ubuntu $release main
deb $url $release main universe restricted multiverse
deb http://security.ubuntu.com/ubuntu/ $release-security restricted universe main multiverse
deb $url $release-updates restricted universe main multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0
  • 파일을 저장하고 닫습니다.
  • 터미널로 돌아가서 다음을 실행하십시오 chmod +x ~/bin/change_sources.sh.-스크립트에 대한 실행 액세스 권한을 부여하십시오.
  • 테스트를 위해 새 스크립트를 실행하려면 terminal을 입력하십시오 ~/bin/change_sources.sh. 편집 할 권한이 없으므로 오류가 발생 /etc/apt/sources.list합니다. 따라서 사용sudo ~/bin/change_sources.sh
  • sudo crontab -e명령을 사용하여 루트 사용자의 crontab 파일을 편집하고 다음 행을 추가하십시오.
@hourly /home/$USER/bin/change_sources.sh  
#change $USER with your user name
  • 나는 매 시간마다 크론 작업을 설정했지만 원하는대로 또는 더 나은 생각으로 변경할 수 있습니다. 이런 의미에서 http://en.wikipedia.org/wiki/Cron 을 참조하십시오 .
  • 파일을 저장하고로 새 crontab 항목을 확인하십시오 sudo crontab -l.

참고 :이 스크립트의 변경 사항을 되돌리려면 cron 작업을 삭제하고 위 그림의 지시를 따르거나 터미널에서 다음 명령을 사용하십시오.

cp -f /etc/apt/sources.list.bak /etc/apt/sources.list

이제부터 IP 주소 변경을 찾은 후 파일이 동적으로 변경됩니다.

최상의 해결책은 아니지만 위의 스크립트와 같이이 방법으로 좋은 해결책을 제시 할 수 있습니다 .


2
리눅스의 GUI가 전통적인 방식으로 간주 될 수 있는지 논쟁 할 것 같습니다. :) 그러나 어쨌든 : 첫 스크립트는 문제를 해결합니다. 거울 문법은 이미 독일 거울, 미국 또는 사람들이있는 곳이면 어디든 가져옵니다. 두 번째 스크립트는 국가 미러를 사용합니다. 사용 가능한 대역폭이 가장 적은 것 같습니다 (런치 패드의 아카이브 미러 목록에 있음). 세 번째 스크립트는 가장 빠른 (또는 가장 가까운) 미러가 실제로 최고라고 가정합니다. 원점으로 돌아가다. 나는 지금 작은 apt-spy스크립트를 코딩하고 있습니다. 나중에 여기에서 업데이트합니다.
까지

1
@Till 음, 귀하의 질문은 " 중단 시간을 어떻게 해결합니까? "와 " 이 상황을 개선하는 데 어떻게 도움을 줄 수 있습니까? "였습니다. 문제 해결 방법을 보여 주었고 개선에 도움이 될 수있는 방법을 제안했습니다. 또한 끝까지 답변을 읽으면 " 최상의 해결책이 아닐 수도 있습니다. 위의 스크립트와 같은 방법으로 좋은 해결책을 제시 할 수 있습니다 . 마지막으로, 깨진 서버를 수정 / 개선하려는 경우 여기서는 주제가 아닌 것으로 보이며 대신 해당 서버의 소유자와 대화해야합니다.
Radu Rădeanu

2
나는 그것이 주제가 아닌 것으로 생각하지 않습니다. 여러 정식 / 우분투 사람들이 여기에 내 질문을 추가하라고 말했습니다. 그것이 내가 처음 여기에있는 이유이며 또한 현상금이 할당 된 이유도 추측합니다.
까지

1
@Till Yep, 그 질문은 좋지만, 당신이이 의견들에서 그것을 재구성 한 것은 아닙니다. 해당 서버의 관리자가 아닌 한 여기에서 "깨진 미러 서버를 수정하는 방법"에 대해서는 아무도 대답하지 않습니다.
Radu Rădeanu

1
해당 서버를 수정하고 싶지 않고 선택 알고리즘과 장애 조치 부족을 수정하고 싶습니다.
까지

4

이 질문에 대한 모든 의견을 보내 주셔서 감사하지만 아무도 우리의 상황에 맞는 간단한 해결책을 찾지 못했기 때문에 문제를 직접 해결 하기로 결정했습니다 .

내가 호출하는 도구 (특히 우분투 용)를 만들었습니다 apt-spy2.

이 도구의 기본 목표는 작업 미러를 빠르게 찾는 것 입니다. 작업은 미러 서버를 사용할 수 있고 최신 상태 인 것으로 정의됩니다.

선택한 서버가 반드시 가장 가깝고 빠른지에 대한 가정은 없습니다. 핑이나 GEO DNS 트릭을 수행하지는 않지만 지금까지는 문제가 발생했을 때 작동합니다.

작동 방식-간단히 말하면 :

  1. 내가 사용 http://mirrors.ubuntu.com 또는 거울의 런치 패드의 목록을 서버를 검색 할 수 있습니다.
  2. 각각에 대해 간단한 확인을 수행합니다 (HTTP 응답 상태 코드).
  3. LBNL, 업데이트 /etc/apt/sources.list합니다.

참고 : 이것은 사람들이 잘 놀고 추가 거울을 넣는 것으로 가정합니다 (예 : 타사 저장소에 /etc/apt/sources.list.d. 그러나 나는 개선의 여지가 있음을 의미합니다.

이 도구는 다음과 같이 얻을 수 있습니다.

$ [sudo] gem install apt-spy2

CLI는 함께 제공 list, check, fixhelp(그것을 사용하는 방법에 대한 확장 정보와 함께).

프로젝트의 README에 가능한 한 많이 문서화하려고했습니다 .

현재 버전은 매우 보수적 0.5.0입니다.

코드는 오픈 소스이며 라이센스는 자유 롭습니다. 그리고 모든 기여를합니다.


이것을 우분투 저장소에 업로드 했습니까?
Braiam

@Braiam 이 도구는 다음과 같이 얻을 수 있습니다 : sudo gem install apt-spy2
Radu Rădeanu

@ RaduRădeanu 데비안에 뭔가를 패키징하는 데 관심이 있기 때문에 업로드했는지 물어보고 있습니다.
Braiam

@ Braiam 나는 그것을 포장하지 않았지만 누군가가 그것을 환영한다면 나는 그것을 환영 할 것이다. :)
까지

@Braiam Btw, 이것은 데비안에서 작동하지 않을 것입니다. ; (우분투에서만 작동합니다.
까지

2

데비안 6.0.4에는이 명령이있었습니다 :

적절한 스파이

이것은 가장 가까운 서버를 자동으로 찾고 새로운 소스를 생성하는 작업을 수행했습니다.

우분투에서는이 명령이 존재하지 않는 것 같습니다.

여전히 Debian 7.0 wheezy에 있습니다.

https://launchpad.net/debian/wheezy/+source/apt-spy/+copyright

* .deb 패키지는 여기에서 다운로드 할 수 있습니다.

http://packages.debian.org/sid/apt-spy

... 여전히 소스를 검색 중 ...

입력 한 소스 목록을 편집 한 후 소스 코드를 가져 오려면 분명히 Debian-7.0-Installation이 필요합니다.

deb-src http://http.debian.net/debian wheezy 메인

그런 다음 sudo apt-get update 후 다음과 같이 코드를 간단히 빨아들입니다.

sudo apt-get 소스 apt-spy


제안에 감사드립니다, apt-spy는 정말로 멋지게 보입니다. 잘 작동하는지 잘 모르겠습니다. 데비안을 우분투에 설치할 때마다 다른 의존성 때문에 조만간 깨졌습니다.
까지

@Till-Linux가 더 까다로워 지 자마자 항상 조금 더 파고 들었습니다.
dschinn1001


@까지 당신은 의미 : 그것을 구축 ...! 또는 내장 ...? -나는 다음에 돌봐-지금 여기 보름달이며
엉망입니다

당신은 빠르다!
dschinn1001

2

어쩌면 원하는 솔루션을 사용하지 않을 수도 있지만 .deb 파일에 대한 로컬 캐시 설정은 몇 MB의 패키지를 다운로드 할 때 이상적이어야하며 (대부분 나는 내기 동일합니다) 동일한 서버에서 다운로드하기 때문에 캐시를 만들고 서버 사용량을 줄이기 위해 PC를 희생하고 싶을 수도 있습니다.

순서

apt-cacher하드 드라이브에 충분한 공간이있는 머신에서 설정할 수 있어야합니다 (필요한 경우). Apt-cacher 서버 안내서를 사용하여이를 구성 할 수 있지만 빠른 재개를 수행 할 수 있습니다.

  1. 설치 apt-cacher

    sudo apt-get 설치 apt-cacher apache2

  2. 시스템 전원을 켤 때 캐시가 시작되도록 값을 1로 편집 /etc/default/apt-cacher하고 설정하십시오 autostart.
  3. 아파치 다시 시작 sudo /etc/init.d/apache2 restart
  4. 을 사용하여 캐시를 테스트하십시오 http://ip-of.your.cache:3142/apt-cacher.
  5. 호스트가 캐시를 사용하도록 허용해야하므로 행을 편집 /etc/apt-cacher/apt-cacher.conf하고 찾으십시오 allowed_hosts. 모든 호스트에 대해 192.168.0.0/24또는 *모든 호스트에 대해 서브넷을 설정할 수 있습니다
  6. 주변에서 빠르고 안정적인 서버를 찾으십시오 . apt-spy이를 위해 사용할 수 있습니다 (이 명령은 각 서버의 속도를 테스트하기 때문에 몇 시간이 걸릴 수 있음).
  7. 클라이언트에는 두 가지 옵션이 있습니다.

    • 다음과 sources.list같이 설정하십시오 .

    deb http : //ip-of.your.cache : 3142 / the.server.you.like / ubuntu / lucid 주요 제한 우주 다중 우주

    변경 ip-of.your.cache캐시의 IP과 the.server.you.like사용 할 서버의 호스트 이름. 여러 줄을 사용할 수 있습니다.

    • 또는 프록시를 사용하도록 apt를 설정 /etc/apt/apt.conf.d/01proxy하십시오. 행을 편집 하고 추가하십시오.

    획득 :: http :: 프록시 " http : //ip-of.your.cache : 3142 ";


전 세계적으로 apt-spy를 사용한다면 오래 지속될 것입니다 ...하지만 다음과 같은 방법으로 유럽과 국경을
접할

@ dschinn1001 -d testing은 데비안 냄새가납니다.
Braiam

그럼 : apt-spy -a 유럽
dschinn1001

"공감"? -난 downvote하지 않았다? -때때로 마우스로 실수로 클릭하는 경우가 있습니다. 조준으로 투표하지 않습니다. 그래서 당신을 투표했습니다! 고마워.
dschinn1001

1

자신의 Ubuntu 미러를 설정할 수 있습니다. 그렇게하면 업데이트가 로컬에있게됩니다.

apt-mirror는 고속 인터넷 연결과 많은 디스크 공간이 필요합니다

apt-mirror를 사용하여 자신의 Ubuntu 미러를 설정하는 것은 매우 쉽습니다.

1) apt-mirror 저장소로 이동하십시오. 다음과 같이 sources.list 파일을 백업하십시오.

sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

2) 다음과 같이 sources.list 파일을 편집하십시오.

gksudo gedit /etc/apt/sources.list

3) 다음 줄을 새 줄에 삽입하십시오.

deb http://apt-mirror.sourceforge.net/ apt-mirror

4) 패키지 인덱스를 업데이트하자

sudo apt-get update

5) 그리고 apt-mirror를 설치하십시오

sudo apt-get install apt-mirror

6) 이제 apt-mirror가 설정되었으므로 미러링 할 서버를 알려주십시오.

sudo cp /etc/apt/mirror.list /etc/apt/mirror.list.old
gksudo gedit /etc/apt/mirror.list

기본 구성은 다운로드 한 파일을 / var / spool / apt-mirror 폴더에 저장합니다. mirror.list 파일의 모양은 다음과 같습니다.

############# config ##################
#
set base_path /media/silo/repo
#
# if you change the base path you must create the directories below with write privlages
#
# 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 nthreads 20
set tilde 0
#
############# end config ##############
deb http://archive.ubuntu.com/ubuntu lucid main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -security main restricted universe multiverse
clean http://archive.ubuntu.com/ubuntu

이진 패키지 만 미러링하지만 소스 패키지를 원하는 경우 적절한 행을 삽입해야합니다. 그들은 일반적으로 다음과 같은 형태를 취합니다.

deb-src http://gh.archive.ubuntu.com/ubuntu/ lucid main restricted

7) 이제 실행하십시오 apt-mirror. 꽤 오랜 시간이 걸릴 것입니다. 한 번에 모든 파일을 다운로드 할 수없는 경우 걱정하지 마십시오. 다운로드 apt-mirror를 다시 시작할 수 있습니다 ( Ctrl+ C키 조합으로 파일을 종료 한 후 계속할 때 다시 실행). 좋아, apt-mirror를 다음과 같이 실행하십시오.

sudo apt-mirror /etc/apt/mirror.list

apt-mirror를 사용하여 로컬 데비안 / 우분투 미러를 만드는 방법 도 확인하십시오.

출처 : Apt-mirror를 사용하여 자신 만의 Ubuntu 미러 만들기


메모리 apt-mirror가 제대로 작동하면 우분투 저장소에서 사용할 수 있습니다.
Braiam

BTW, 완전한 거울을 다운로드하려면 HD에 많은 공간이 필요하다는 것을 명심하십시오.)
Braiam

답변 주셔서 감사합니다 그리고 그것은 거울을 설정하기위한 훌륭한 자료입니다 그리고 나는 그것을 고려했지만, 적어도 세 곳 에서이 setuo가 필요합니다. 나는 여기가 까다 롭다는 것을 알고 있지만 여전히 mirrors.ubuntu.com작동해야한다고 생각합니다 . :)
까지

@till mirrors.ubuntu.com은 결코 해결할 수 mirrors.ubuntu.com없지만 가장 가까운 서버입니다. 문제는 해결하는 서버가 신뢰할 수 없다는 것입니다. 더 나은 플레이는 공식 목록에서 안정적인 서버를 사용하는 것입니다.
Braiam

@Braiam 왜 신뢰할 수없는 거울이 반환되는지 알 수 있습니까?
까지

1

GUI 메소드의 CLI 대안으로 사용하기 위해 apt-select 라는 Python 스크립트를 작성했습니다 .

이 스크립트는 TCP를 통해 각 미러를 쿼리하고 지연 시간이 가장 짧은 stdout 미러로 인쇄 한 다음 새 sources.list파일을 생성 합니다. 순위가 매겨진 미러 목록에서 선택하고 미러가 마지막으로 업데이트 된 시간 및 대역폭 용량과 같은 정보를 검색 할 수있는 여러 옵션도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.