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.comftp.uni-bayreuth.deクローゼットの鏡として戻ってきました。残念ながら、ダウンしているようです。

これは数時間続いており、ミラーは大学のボランティアによってホストされており、今日は金曜日なので、すぐに修正されることを期待していません。

すべての話、私の質問は次のとおりです。

  • 誰もこれを使用していますか?
  • ダウンタイムをどのように回避しますか?(私のクイックフィックスはシェルスクリプトです)
  • この状況を改善するにはどうすればよいですか?


@RaduRădeanu-netselectについて初めて読むのは...8oþ
dschinn1001

@RaduRădeanu興味深いヒント!乾杯!私はmirror:あなたのスレッドで最も更新されたメソッドを使用しようとしています。私の問題は、最速のミラーに障害が発生すると、フェイルオーバーが発生せず、スタックすることです。
ティル

独自のUbuntuミラーの作成はオプションですか?
ミッチ

@Till自分のミラーを所有できるかどうかを教えてください。
ミッチ

回答:


10

個人的には、最良のUbuntuリポジトリミラーを選択する最良の方法は、GUIメソッドを使用することだと思います。

ダウンロードサーバー

ここで、質問で説明されている状況を改善するには、何らかの方法でいくつかのルールを設定する必要があります。これらの規則は行動しなければなりませんmirrors.ubuntu.com。次のようないくつかのルールを提案できます。

  • 最適/優先ミラーのリストを作成します。あなたが見ることができるように鏡がたくさんあり、ここでここここに
  • 良い鏡を見つけたら、それをリストに追加してください
  • ミラーがダウンしたり壊れたりした場合、それは良いミラーではないことを意味し、リストから削除する必要があります
  • を使用できますnetselectapt-spyまたはapt-fast
  • その他、要件に応じて。

次に、回避方法を確認するために、3つのbashスクリプトの例を使用して、ステップごとに説明する方法を示します。最初のスクリプトは、代わりにあなたが現在いる国のミラーを使用しますmirrors.ubuntu.com/mirrors.txt(各国にはミラーが関連付けられたテキストファイルがあります。http ://mirrors.ubuntu.com/を参照してください)。

  • では、端末の実行mkdir -p bin-このコマンドは行いますbinあなたの中にディレクトリをhomeあなたはすでにそれを持っていない場合、フォルダ。
  • 実行後gedit ~/bin/change_sources.sh-これは新しいファイルを作成しますchange_sources.sh geditに。
  • 次のスクリプトのいずれかをコピーして、新しく作成したファイルに貼り付けます。
#!/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コマンドを使用してrootユーザーのcrontabファイルを編集し、次の行を追加します。
@hourly /home/$USER/bin/change_sources.sh  
#change $USER with your user name
  • 私は1時間ごとにcronジョブを設定しましたが、必要に応じて、またはより良いと思うように変更できます。http://en.wikipedia.org/wiki/Cronを参照してくださいこの意味でを。
  • ファイルを保存し、で新しいcrontabエントリを確認しsudo crontab -lます。

注:このスクリプトによって行われた変更を元に戻すには、cronジョブを削除し、上の図の指示に従うか、ターミナルで次のコマンドを使用します。

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

これ以降、ファイルはIPアドレスの変更を検出した後、動的に変更されます。

それは最良の解決策ではないかもしれませんが、私の意見では、上記のスクリプトのようにこの方法で良い解決策を与えることができます


2
LinuxのGUIが従来の方法と見なされる可能性があるかどうかを議論したいと思います。:)しかし、とにかく:あなたの最初のスクリプトは問題を解決します、私は持っていません。ミラー構文は、すでにドイツのミラー、または米国または人々がどこにいても取得します。2番目のスクリプトはカントリーミラーを使用します。利用可能な帯域幅が最も少ないようです(ランチパッドのアーカイブミラーリストにあるように見えます)。振り出しに戻って。私はapt-spy今、小さなスクリプトをコーディングしています。後でここで更新します。
ティル

1
@Tillまあ、あなたの質問は「どのようにダウンタイムを回避しますか?」と「この状況を改善するためにどのように手助けできますか?」でした。私がどのように回避するかを示し、どのように改善するのを助けることができるかを提案しました...また、最後まで私の答えを読むと、「それは最善の解決策ではないかもしれませんが、私は思う上記のスクリプトのように、この方法で適切なソリューションを提供できることを確認してください。最後に、壊れたサーバーを修正/改善することに興味がある場合は、ここではトピックとは思えないので、代わりにそれらのサーバーの所有者と話をする必要があります。
ラドゥラデアヌ

2
私はそれがトピック外だとは思わない。さまざまなCanonical / Ubuntuの人々が私の質問をここに追加するように言った。それが私がそもそもここにいる理由であり、また、なぜバウンティが割り当てられているのかも推測します。
ティル

1
@Till Yep、質問は良いが、これらのコメントであなたがそれを再定式化したのではない。それぞれのサーバーの管理者でない限り、ここでは「壊れたミラーサーバーを修正する方法」について誰も答えません。
ラドゥラデアヌ

1
そのサーバーを修正したくはありません。選択アルゴリズムとフェイルオーバーの欠如を修正したいと思います。
ティル

4

この質問に関するすべての意見に感謝しますが、私たちの状況に合った簡単な解決策を思い付く人はいなかったので、私は自分で問題を解決することにしました。

私が呼び出すツール(特にUbuntu用)を作成しましたapt-spy2

このツールの主な目的は、作業中のミラーをすばやく見つけることです。動作は、ミラーサーバーが利用可能であり、(できれば:)最新であることによって定義されます。

選択したサーバーが必ずしも最も近く、最速であるかどうかについては仮定しません。pingや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は付属していますlistcheckfixおよびhelp(それを使用する方法についての拡張情報を持ちます)。

私はプロジェクトのできるだけ多くを文書化しようとしました READMEで

現在のバージョンは非常に保守的です 0.5.0です。

コードはオープンソースであり、ライセンスは自由です。そして、私はすべての貢献をします。


これをubuntuリポジトリにアップロードしましたか?
ブライアム14年

@Braiam sudoの宝石はのapt-spy2インストールしますので、同様にあなたは、このツールを入手することができます
ラドゥRădeanu

@RaduRădeanu何かをDebianにパッケージ化することに興味があるので、彼がアップロードしたかどうかを尋ねています。
Braiam 14年

@Braiamはパッケージ化しませんでしたが、誰かがそれをやったら歓迎します。:)
ティル

@Braiam Btw、これはDebianで動作する可能性は低いです。;(のみのUbuntuで動作します。
ティル

2

Debian 6.0.4にはこのコマンドがありました:

apt-spy

これにより、次に近い利用可能なサーバーが自動的に検索され、新しいsources.listが生成されます。

Ubuntuでは、このコマンドは存在しないようです?

Debian 7.0 wheezyにはまだ存在しています:

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

こちらから* .debパッケージをダウンロードできます。

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

...まだソースを検索しています...

エントリでsources-listを編集した後にソースコードを取得するには、Debian-7.0-Installationが必要です。

deb-src http://http.debian.net/debian wheezy main

sudo apt-get updateの後、次のコマンドを使用してコードを簡単に削除します。

sudo apt-get source apt-spy


提案のおかげで、apt-spyは確かに素晴らしく見えます。それがうまくいくかどうかはわかりません。debianのものをUbuntuにインストールするたびに、他の依存関係のために遅かれ早かれ壊れました。
ティル

@Till-それは常に少し掘り下げられたものです... Linuxがますます要求が厳しくなるとすぐに。
dschinn1001

1
Ubuntuのためにそれをビルドします。rubygems.org/gems/apt-spy2github.com/lagged/apt-spy2を
ティル

@Till意味:Build it ...!またはそれを作りました...?-今...ここに満月と午前意識がもうろうである-私は、次回の世話
dschinn1001

あなたは速い!
dschinn1001

2

たぶんあなたが好きなソリューションを使用していないかもしれませんが、.debファイルのローカルキャッシュを設定することは、いくつかのMBのパッケージをダウンロードするときに理想的です(ほとんどの場合同じです)、同じサーバーからダウンロードするので、キャッシュを作成してサーバーの負荷を軽減するためにPCを犠牲にすることができます。

手順

apt-cacherハードドライブに十分なスペースがあるマシンに設定できるはずです(必要になります)。これは、Apt-cacherサーバーガイドを使用して構成できますが、簡単に再開できます。

  1. インストール apt-cacher

    sudo apt-get apt-cacher apache2をインストールします

  2. 値を編集/etc/default/apt-cacherautostartて1に設定すると、マシンの電源が入ったときにキャッシュが開始されます。
  3. Apacheを再起動します sudo /etc/init.d/apache2 restart
  4. を使用してキャッシュをテストしますhttp://ip-of.your.cache:3142/apt-cacher
  5. ホストがキャッシュを使用できるようにする必要があるため、編集/etc/apt-cacher/apt-cacher.confしてlineを探しますallowed_hosts。すべてのホストのように、192.168.0.0/24または*すべてのホストにサブネットを設定できます
  6. 周りの高速で信頼性の高いサーバーを探してくださいapt-spyこれに使用できます(各サーバーの速度もテストするため、このコマンドには数時間かかる場合があります)。
  7. クライアントには次の2つのオプションがあります。

    • sources.list次のように設定します。

    deb http://ip-of.your.cache:3142 / the.server.you.like / ubuntu /明idの主な制限されたユニバースmultiverse

    変更ip-of.your.cacheあなたのキャッシュのIPのためにとthe.server.you.likeあなたが使用するサーバーのホスト名。複数の行を使用できます。

    • または、プロキシを使用するようにaptを設定します:/etc/apt/apt.conf.d/01proxy行を編集して追加します:

    Acquire :: http :: Proxy " http://ip-of.your.cache:3142 ";


世界中でapt-spyを使用する場合はしばらく続きますが、次の方法でヨーロッパに接してこのコマンドを使用できます
。apt

@ dschinn1001 -d testingはDebianの匂いがします。
Braiam

それでは:apt-spy -a Europe
dschinn1001

"downvote"?-私は下票しませんでしたか?-偶然マウスでクリックすることが時々起こります-私は照準を合わせてダウン投票をしません 投票しました!THX。
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を使用してローカルDebian / Ubuntuミラーを作成する方法も確認してください。

ソース:Apt-mirrorを使用して独自のUbuntuミラーを作成します


メモリが適切に機能する場合apt-mirror、ubuntuリポジトリで使用できます。
ブライアム

ところで、完全なミラーをダウンロードするにはHDに多くのスペースが必要であることに注意してください;)
Braiam

答えてくれてありがとう、それはミラーをセットアップするための素晴らしいリソースであり、私はそれを考えてきましたが、少なくとも3つの異なる場所でこのsetuoが必要になるでしょう。私はここで好き嫌いがあることは知っていますが、それでもmirrors.ubuntu.comうまくいくはずだと感じています。:)
ティル

@till mirrors.ubuntu.comは解決されませんmirrors.ubuntu.comが、あなたに最も近いサーバーです。問題は、解決するサーバーが信頼できないサーバーであることです。より良いプレイは、公式リストから信頼できるサーバーを使用することです。
ブライアム

@Braiam信頼できないミラーが返される理由は何ですか?
ティル

1

GUIメソッドの代替CLIとして機能するapt-selectというPythonスクリプトを作成しました。

スクリプトは、TCPを介して各ミラーを照会し、最小の遅延で標準出力のミラーに出力し、新しいsources.listファイルを生成します。また、ランク付けされたミラーのリストから選択し、ミラーが最後に更新された日時や帯域幅容量などの情報を取得できる複数のオプションもあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.