PPAを追加し、そのコンテンツの一部をインストールする場合、apt-get update
を使用してすべてのaptリストを再更新するのは非常に面倒です。
代わりに、特定のリポジトリのコンテンツのみを同期することは可能ですか?
はい、apt-getはそれを行うことができ、素敵な方法で行うことができます。
次を~/.bash_funcs
に追加します
update-repo() {
for source in "$@"; do
Sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/${source}" \
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
done
}
次を~/.bashrc
に追加します
if [ -f $HOME/.bash_funcs ]; then
. $HOME/.bash_funcs
fi
次を~/.bash_completion
に追加します
# Debian user-defined completion -*- Shell-script -*-
_ppa_lists(){
local cur
_init_completion || return
COMPREPLY=( $( find /etc/apt/sources.list.d/ -name "*$cur*.list" \
-exec basename {} \; 2> /dev/null ) )
return 0
} &&
complete -F _ppa_lists update-repo
次に、ファイルを入手します
. ~/.bashrc
. ~/.bash_completion
完了して発射します
update-repo <tab> <tab>
Bash-completionの実装により、aptソース全体を更新することなく、単一のppaリポジトリを更新できます。
リポジトリがディレクトリ/etc/apt/sources.list.d/
、たとえばmyrepo.list
の特定のファイルで設定されている場合、次のコマンドを使用してその単一のリポジトリを更新できます。
Sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
それにもかかわらず、これはあまり便利ではありません。
これは、bash関数の定義を簡素化できます
update_repo() {
Sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/$1.list" \
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
}
単純に実行できるように
update_repo myrepo
Y PPA Managerには、単一のPPAを更新できるupdate-ppa
というコマンドラインツールが付属しています。
例えば:
Sudo update-ppa ppa:nilarimogard/webupd8
また、Y PPA Managerを介してPPAを追加すると、PPAソースが自動的に更新されます(そのPPAのみ)。将来のバージョンでは、単一のPPAを手動で更新するためのGUIも予定されています。
Y PPA Managerの詳細については、 HERE 。
特定のリポジトリを更新するには、-o
を使用します。例:
apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list
ここに、最近追加されたaptリポジトリのみを更新するワンライナーがあります
find /etc/apt/sources.list.d -type f -name '*.list' -exec Sudo apt-get update -o Dir::Etc::sourcelist="{}" ';'
特に、新規追加後のVMプロビジョニング中に、すべてのリポジトリを更新するよりもはるかに高速です。
-u
オプションは15.10で追加されました 。 15.10から17.10では、-u
を使用して、追加する特定のレポのみを自動的に更新できます。
add-apt-repository -u my-ppa
愚かなことは、このオプションが18.04までman
に追加されなかったことです(ただし、add-apt-repository --help
で文書化されました)。しかし18.04では、この機能は削除されました! (繰り返しますが、man
ではなく、add-apt-repository --help
で確認できます)。
18.04では、 更新機能が変更されました は、apt-get update
の後に常に完全なadd-apt-repository
を実行します。 -u
オプションは事実上削除されました。レガシー構文の場合はそのままですが、常にoptions.update = False
に設定されます。 18.04では、-n, --no-update
のオプションがありますが、これは古い動作に似ています。しかし、それはすべてか、または何でもありません。18.04以降、単一のレポを更新することはできません。