apt-get update nur für ein bestimmtes Repository

108

Wenn ich einen PPA hinzufüge und einen Teil seines Inhalts installieren möchte, ist es ziemlich ärgerlich, alle meine Apt-Listen mit neu zu aktualisieren apt-get update.

Ist es stattdessen möglich, nur den Inhalt eines bestimmten Repositorys zu synchronisieren?

Treviño
quelle
1
Ausgehend von wily, könnten Sie nur verwendenadd-apt-repository -u
Treviño
-uSoweit ich das beurteilen kann, gibt es auf Ubuntu (15.x) kein Vivid.
Kenorb
@ Treviño Wird es in der Wily-Manpage nicht erwähnt: manpages.ubuntu.com/manpages/wily/en/man1/… Wird es an anderer Stelle dokumentiert?
muru
@muru Ich denke, das muss behoben werden, es wird nur am erwähnt add-apt-repository --help. Bitte öffnen Sie einen Fehler, um die Hilfeseite zu reparieren.
Treviño
@ Treviño @muru Zu Ihrer Information, die -uFunktionalität wurde seit dem 18.04 entfernt. Siehe askubuntu.com/questions/65245/…
wisbucky

Antworten:

82

ja, apt-get kann das und das auf eine nette Art und Weise.

  1. Folgendes anhängen an ~/.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. Folgendes anhängen an ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. Folgendes anhängen an ~/.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. Dann beziehen Sie die Dateien

    . ~/.bashrc
    . ~/.bash_completion
    
  5. Fertig und fang an zu feuern

    update-repo <tab> <tab>

Sie können ein einzelnes ppa-Repository aktualisieren, ohne die gesamte apt-Quelle aktualisieren zu müssen, wobei die Bash-Vervollständigung implementiert wird.

Funicorn
quelle
14
Sie sollten dies verpacken.
PyRulez
3
Sind Sie sicher, dass das Skript für die automatische Vervollständigung funktioniert?
Qed
1
Wenn ich getroffen Tab es zeigtupdate-repo _init_completion: command not found
kevy
2
Zu Ihrer Information: Ich habe das Wissen, das ich aus diesem Beitrag gewonnen habe, genutzt, um eine Option zum Hinzufügen eines passenden Repositorys vorzuschlagen, um dies automatisch zu tun. code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_ Wren
2
@CiprianTomoiaga Es wurde zusammengeführt, aber die Quelle ist hier: bazaar.launchpad.net/~evarlast/software-properties/… Ich hoffe, es wird schlau.
Jay _silly_evarlast_ Wren
41

Wenn das Repository in einer bestimmten Datei im Verzeichnis konfiguriert ist /etc/apt/sources.list.d/, sagt sie myrepo.list, können Sie das Repository mit dem Befehl aktualisieren:

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

Dies ist jedoch nicht sehr praktisch.
Dies kann vereinfacht werden, indem eine Bash-Funktion definiert wird

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"
}

damit du einfach laufen kannst

update_repo myrepo
Enzotib
quelle
Ich habe dies noch einmal überprüft, aber es funktioniert nicht, wenn Sie ein Paket installieren möchten, das eine ungelöste Abhängigkeit von einem anderen Repository aufweist (ebenfalls im Hauptarchiv)
Treviño,
1
Kannst du erklären, was '-' in der Konfiguration von Sourceparts bedeutet?
Sajuuk
Ich denke, '-' nur eine Art zu sagen, sourcepartssollte nicht verwendet werden. Siehe github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Ich könnte mich jedoch irren, könnte keinen richtigen Arzt finden, der das '-' erklärt.
Zufälligkeit
12

Y PPA Manager wird mit einem Befehlszeilentool geliefert update-ppa, mit dem Sie eine einzelne PPA aktualisieren können.

Zum Beispiel:

sudo update-ppa ppa:nilarimogard/webupd8

Wenn Sie eine PPA über Y PPA Manager hinzufügen, wird die PPA-Quelle automatisch aktualisiert (nur für diese PPA). In einer zukünftigen Version wird es eine GUI geben, mit der auch einzelne PPAs manuell aktualisiert werden können.

Weitere Informationen zu Y PPA Manager finden Sie HIER .

Alin Andrei
quelle
5
sudo add-apt-repository ppa:webupd8team/y-ppa-managerdann sudo apt-get updateund endlichsudo apt-get install y-ppa-manager
mchid
8

Um ein bestimmtes Repository zu aktualisieren, verwenden Sie -ozB:

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

Hier ist eine einzeilige Aktualisierung des erst kürzlich hinzugefügten apt-Repositorys

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

Es ist viel schneller als das Aktualisieren aller Repositorys, insbesondere während der VM-Bereitstellung nach dem Hinzufügen neuer Repositorys.

Kenorb
quelle
3
Ich denke, dies aktualisiert alles, was in/path/to
John Bachir
@ JohnBachir Genau.
Roman
1

Die -uOption wurde in 15.10 hinzugefügt . Von 15.10 bis 17.10 können Sie verwenden, -uum automatisch nur das spezifische Repo zu aktualisieren, das Sie hinzufügen:

add-apt-repository -u my-ppa

Das Dumme ist, dass diese Option manerst am 18.04 hinzugefügt wurde (sie wurde jedoch in dokumentiert add-apt-repository --help). Aber in 18.04 wurde diese Funktionalität entfernt! (Wieder nicht in man, aber Sie können in sehen add-apt-repository --help).

In 18.04 wurde die Update-Funktionalität so geändert , dass immer ein vollständiger apt-get updateAfter ausgeführt wird add-apt-repository. Die -uOption wurde effektiv entfernt. Es bleibt für die Legacy-Syntax erhalten, ist jedoch immer auf festgelegt options.update = False. In 18.04 haben Sie die Möglichkeit -n, --no-update, was dem alten Verhalten entspricht. Aber es ist alles oder nichts, Sie können kein einziges Repo seit dem 18.04 aktualisieren.

weises Glück
quelle