私たちは分散したチームであるため、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
これ自体は非常に驚くべきものであり、さまざまな場所で働く人々にとって非常に有用です。少ないlocalカスタマイズなどが必要です。理論的にはフェールオーバー。
日々、このセットアップは頻繁に失敗します。今週2〜3回言いたいです。
現在、mirrors.ubuntu.com
は、クローゼットミラーとしてftp.uni-bayreuth.de
を返します。残念ながら、ダウンしているようです。
これは数時間続いており、ミラーは大学のボランティアによってホストされており、今日は金曜日なので、これがすぐに修正されることを期待しています。
すべての話、私の質問は次のとおりです。
この質問に関するすべての意見に感謝しますが、私たちの状況に合った簡単な解決策を誰も思いつかなかったので、私は自分で問題をfixすることにしました。
apt-spy2
と呼ぶツール(特にUbuntu用)を作成しました。
このツールの主な目的は、workingミラーを高速に見つけることです。動作は、ミラーサーバーが利用可能であり、(できれば:)最新であることによって定義されます。
選択したサーバーが必ずしも最も近く、最速であるかどうかについては仮定しません。 pingやGEO DNSのトリックは行っていませんが、これまでのところ、何かが壊れたときに機能します。
仕組み—一言で言えば:
/etc/apt/sources.list
を更新します。注意してください:これは、人々がナイスをプレイし、追加のミラーを配置することを前提としています(たとえば、サードパーティのリポジトリを/etc/apt/sources.list.d
に入れます。改善のため。
このツールは次のようにして入手できます。
$ [Sudo] gem install apt-spy2
Cliには、list
、check
、fix
、およびhelp
が付属しています(使用方法に関する詳細情報が含まれています)。
プロジェクトの README でできる限り文書化しようとしました。
現在のバージョンは非常に保守的な0.5.0
です。
コードはオープンソースであり、ライセンスは自由です。そして、私はすべての貢献をします。
個人的には、最良のUbuntuリポジトリミラーを選択する最良の方法は、GUIメソッドを使用することだと思います。
ここで、質問で説明されている状況を改善するには、何らかの方法でいくつかのルールを設定する必要があります。これらのルールは、mirrors.ubuntu.com
で動作する必要があります。次のようないくつかのルールを提案できます。
netselect
、 apt-spy
または apt-fast
を使用できます次に、回避方法を確認するために、3つのbashスクリプトの例を使用して、ステップごとに説明する方法を示します。最初のスクリプトは、mirrors.ubuntu.com/mirrors.txt
の代わりに、現在いる国のミラーを使用します(国ごとに、ミラーが関連付けられたテキストファイルがあります。 http://mirrors.ubuntu.com/ を参照してください):
mkdir -p bin
を実行します-このコマンドは、bin
フォルダーをまだ持っていない場合、home
フォルダーを作成します。gedit ~/bin/change_sources.sh
の実行後-これにより、geditに新しいファイル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
を使用するスクリプト( here からダウンロード、インストール手順 here )as izxthis answer =:
#!/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
-スクリプトの実行アクセスを許可します。~/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
Sudo crontab -l
で新しいcrontabエントリを確認します。注:このスクリプトによって行われた変更を元に戻すには、cronジョブを削除し、上の図の指示に従うか、ターミナルで次のコマンドを使用します。
cp -f /etc/apt/sources.list.bak /etc/apt/sources.list
これ以降、IPアドレスの変更が検出されると、ファイルは動的に変更されます。
それは最良の解決策ではないかもしれませんが、私の意見では、上記のスクリプトのようにこの方法で良い解決策を与えることができます。
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の後、次のようにコードを吸うだけです。
須藤apt-getソースapt-spy
たぶんあなたが好きなソリューションを使用していないかもしれませんが、.debファイルのローカルキャッシュを設定することは、いくつかのMBのパッケージをダウンロードするときに理想的です(ほとんどの場合同じです)、同じサーバーからダウンロードしているので、キャッシュを作成してサーバーの負荷を軽減するためにPCを犠牲にすることができます。
ハードドライブに十分なスペースがあるマシンでapt-cacher
を設定できるはずです(必要です)。これは Apt-cacherサーバーガイド を使用して設定できますが、簡単に再開できます。
インストールapt-cacher
Sudo apt-get install apt-cacher Apache2
/etc/default/apt-cacher
を編集し、autostart
値を1に設定して、マシンの起動時にキャッシュが開始されるようにします。Sudo /etc/init.d/Apache2 restart
を再起動しますhttp://ip-of.your.cache:3142/apt-cacher
を使用してキャッシュをテストします。/etc/apt-cacher/apt-cacher.conf
を編集してallowed_hosts
行を探します。すべてのホストに対して192.168.0.0/24
または*
のようなサブネットを設定できますapt-spy
を使用できます(各サーバーの速度もテストするため、このコマンドには数時間かかる場合があります)。クライアントには次の2つのオプションがあります。
sources.list
を次のように設定します。deb http://ip-of.your.cache:3142/the.server.you.like/ubuntu / 明快な主な制限された宇宙の多元宇宙
キャッシュのIPのip-of.your.cache
と、使用するサーバーのホスト名のthe.server.you.like
を変更します。複数の行を使用できます。
/etc/apt/apt.conf.d/01proxy
を編集し、次の行を追加します:Acquire :: http :: Proxy " http://ip-of.your.cache:3142 ";
独自の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-select というPythonスクリプトを作成して、GUIメソッドの代替CLIとして使用しました。
このスクリプトは、TCPを介して各ミラーを照会し、最小の遅延で標準出力のミラーに出力し、新しいsources.list
ファイルを生成します。また、ランク付けされたミラーのリストから選択し、ミラーが最後に更新された日時や帯域幅容量などの情報を取得できる複数のオプションもあります。