pembaruan apt-get hanya untuk repositori tertentu

108

Ketika saya menambahkan PPA dan saya ingin menginstal beberapa kontennya, cukup mengganggu untuk memperbarui kembali semua daftar apt saya menggunakan apt-get update.

Apakah mungkin untuk hanya menyinkronkan konten dari repositori yang diberikan?

Treviño
sumber
1
Mulai dari cerdik, Anda bisa menggunakanadd-apt-repository -u
Treviño
Tidak ada -udi Ubuntu (15.x) Jelas sejauh yang saya tahu.
kenorb
@ Treviño Tidak disebutkan dalam manual Wily: manpages.ubuntu.com/manpages/wily/en/man1/… Apakah ini didokumentasikan di tempat lain?
muru
@uru saya pikir itu harus diperbaiki, itu hanya disebutkan pada add-apt-repository --help. Silakan buka bug yang meminta untuk memperbaiki halaman manual.
Treviño
@ Treviño @muru FYI, -ufungsionalitas dihapus sejak 18.04. Lihat askubuntu.com/questions/65245/…
wisbucky

Jawaban:

82

ya, apt-get bisa melakukan itu, dan bisa melakukannya dengan cara yang baik.

  1. Tambahkan berikut ke ~/.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
    }
  2. Tambahkan berikut ke ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
  3. Tambahkan berikut ke ~/.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
  4. Kemudian sumber file

    . ~/.bashrc
    . ~/.bash_completion
  5. Selesai dan mulai memecatnya

    update-repo <tab> <tab>

Anda dapat memperbarui repositori ppa tunggal tanpa harus memperbarui seluruh sumber apt, dengan mengimplementasikan bash-completion.

funicorn
sumber
14
Anda harus mengemas ini.
PyRulez
3
Apakah Anda yakin skrip pelengkapan otomatis berfungsi?
qed
1
Ketika saya menekan Tab itu menunjukkanupdate-repo _init_completion: command not found
kevy
2
FYI: Saya telah menggunakan pengetahuan yang saya peroleh dari posting ini untuk mengusulkan opsi untuk menambahkan-apt-repositori untuk melakukan ini secara otomatis. code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_ Wren
2
@CiprianTomoiaga Sudah digabung, tetapi sumbernya ada di sini: bazaar.launchpad.net/ ~ evarlast / software-properties/... Saya berharap ini akan menjadi lihai.
Jay _silly_evarlast_ Wren
41

Jika repositori dikonfigurasi dalam file tertentu di direktori /etc/apt/sources.list.d/, katakanlah myrepo.list, Anda dapat memperbarui repositori tunggal itu dengan perintah:

sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/myrepo.list" \
    -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"

Namun demikian ini sangat tidak nyaman.
Ini dapat disederhanakan dengan mendefinisikan fungsi 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"
}

sehingga Anda bisa langsung lari

update_repo myrepo
enzotib
sumber
Saya telah memeriksanya lagi, tetapi tidak berfungsi jika Anda ingin menginstal paket yang memiliki beberapa ketergantungan yang belum terselesaikan pada repositori lain (juga dalam arsip utama)
Treviño
1
dapatkah Anda menjelaskan apa yang dimaksud dengan '-' di konfigurasi sumber?
Sajuuk
Saya pikir '-' hanya cara dummy untuk diceritakan sourcepartstidak boleh digunakan. Lihat github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Saya bisa saja salah, tidak dapat menemukan dokumen yang tepat menjelaskan '-'.
keacakan
12

Y PPA Manager dilengkapi dengan alat baris perintah yang disebut update-ppayang memungkinkan Anda memperbarui PPA tunggal.

Sebagai contoh:

sudo update-ppa ppa:nilarimogard/webupd8

Juga, ketika menambahkan PPA melalui Y PPA Manager, sumber PPA diperbarui secara otomatis (hanya untuk PPA itu). Dalam versi masa depan, akan ada GUI untuk memperbarui PPA tunggal secara manual juga.

Informasi lebih lanjut tentang Manajer PPA Y, DI SINI .

Alin Andrei
sumber
5
sudo add-apt-repository ppa:webupd8team/y-ppa-managerdulu sudo apt-get updatedan akhirnyasudo apt-get install y-ppa-manager
mchid
8

Untuk memperbarui repositori tertentu, gunakan -o, misalnya:

apt-get update -o Dir::Etc::sourcelist=/path/to/repo.list

Berikut ini adalah pembaruan satu-baris yang hanya menambahkan repositori apt yang baru saja ditambahkan

find /etc/apt/sources.list.d -type f -name '*.list' -exec sudo apt-get update -o Dir::Etc::sourcelist="{}" ';'

Ini jauh lebih cepat daripada memperbarui semua repositori, terutama selama penyediaan VM setelah menambahkan yang baru.

kenorb
sumber
3
Saya pikir ini memperbarui semua yang ditemukan di/path/to
John Bachir
@ JohnBachir Persis.
Roman
1

The -upilihan yang ditambahkan di 15.10 . Dari 15.10 hingga 17.10, Anda dapat menggunakan -uuntuk secara otomatis memperbarui hanya repo spesifik yang Anda tambahkan:

add-apt-repository -u my-ppa

Yang konyol adalah bahwa opsi ini tidak ditambahkan manhingga 18,04 (namun didokumentasikan dalam add-apt-repository --help). Namun pada 18.04, fungsi ini telah dihapus! (Sekali lagi, tidak di man, tetapi Anda bisa melihatnya add-apt-repository --help).

Pada 18,04, fungsi pembaruan diubah untuk selalu melakukan apt-get updatesetelah penuh add-apt-repository. The -upilihan secara efektif dihapus. Masih ada untuk sintaks lama, tetapi selalu disetel ke options.update = False. Di 18,04, Anda memiliki opsi -n, --no-update, yang seperti perilaku lama. Tapi itu semua atau tidak sama sekali, Anda tidak dapat memperbarui satu repo sejak 18.04.

wisbucky
sumber