chỉ cập nhật apt-get cho một kho lưu trữ cụ thể


108

Khi tôi thêm PPA và tôi muốn cài đặt một số nội dung của nó, thật khó chịu khi cập nhật lại tất cả danh sách apt của tôi bằng cách sử dụng apt-get update.

Thay vào đó, chỉ có thể đồng bộ hóa nội dung của một kho lưu trữ nhất định?


1
Bắt đầu từ wily, bạn chỉ có thể sử dụngadd-apt-repository -u
Treviño

Không có -utrên Ubuntu (15.x) Sống động như tôi có thể nói.
kenorb

@ Treviño Nó không được đề cập trong trang cá nhân của Wily: manpages.ubfox.com/manpages/wily/en/man1/. Nó có được ghi lại ở nơi khác không?
muru

@muru Tôi nghĩ rằng phải sửa, nó chỉ được đề cập trên add-apt-repository --help. Vui lòng mở một lỗi yêu cầu sửa chữa trang.
Treviño

@ Treviño @muru FYI, -uchức năng đã bị xóa kể từ ngày 18.04. Xem Askubfox.com/questions/65245/ trên
wvducky

Câu trả lời:


82

vâng, apt-get có thể làm điều đó, và có thể làm điều đó một cách tốt đẹp.

  1. Nối sau ~/.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. Nối sau ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
    
  3. Nối sau ~/.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. Sau đó, nguồn các tập tin

    . ~/.bashrc
    . ~/.bash_completion
    
  5. Xong và bắt đầu bắn nó

    update-repo <tab> <tab>

Bạn có thể cập nhật một kho lưu trữ ppa duy nhất mà không phải cập nhật toàn bộ nguồn apt, với việc thực hiện bash-hoàn thành.


14
Bạn nên gói này.
PyRulez

3
Bạn có chắc kịch bản tự động hoàn thành đang hoạt động?
qed

1
Khi tôi nhấn Tab, nó hiển thịupdate-repo _init_completion: command not found
kevy 13/03/2015

2
FYI: Tôi đã sử dụng kiến ​​thức tôi có được từ bài đăng này để đề xuất một tùy chọn cho kho lưu trữ bổ sung để thực hiện điều này một cách tự động. code.launchpad.net/~evarlast/software-properIES/support-update/iêu
Jay _silly_evarlast_ Wren

2
@CiprianTomoiaga Nó đã được hợp nhất, nhưng nguồn ở đây: bazaar.launchpad.net/~evarlast/software-properies/ Khăn Tôi hy vọng nó sẽ ở trong tình trạng tồi tệ .
Jay _silly_evarlast_ Wren

41

Nếu kho lưu trữ được cấu hình trong một tệp cụ thể trong thư mục /etc/apt/sources.list.d/, giả sử myrepo.list, bạn có thể cập nhật kho lưu trữ duy nhất đó bằng lệnh:

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

Tuy nhiên điều này không phải là rất thuận tiện.
Điều này có thể được đơn giản hóa khi xác định hàm 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"
}

để bạn có thể chạy

update_repo myrepo

Tôi đã kiểm tra lại, nhưng nó không hoạt động nếu sau đó bạn muốn cài đặt gói có một số phụ thuộc chưa được giải quyết trên kho lưu trữ khác (cũng trong kho lưu trữ chính)
Treviño

1
bạn có thể giải thích '-' nghĩa là gì trong cấu hình nguồn không?
Sajuuk

Tôi nghĩ rằng '-' chỉ là một cách giả để nói sourcepartskhông nên được sử dụng. Xem github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 . Mặc dù vậy, tôi có thể sai, không thể tìm thấy một tài liệu thích hợp giải thích '-'.
ngẫu nhiên

12

Y PPA Manager đi kèm với một công cụ dòng lệnh được gọi là update-ppacho phép bạn cập nhật một PPA duy nhất.

Ví dụ:

sudo update-ppa ppa:nilarimogard/webupd8

Ngoài ra, khi thêm PPA thông qua Y PPA Manager, nguồn PPA được cập nhật tự động (chỉ dành cho PPA đó). Trong phiên bản tương lai, cũng sẽ có GUI để cập nhật thủ công các PPA đơn lẻ.

Thông tin thêm về Y PPA Manager, TẠI ĐÂY .


5
sudo add-apt-repository ppa:webupd8team/y-ppa-managersau đó sudo apt-get updatevà cuối cùngsudo apt-get install y-ppa-manager
mchid

8

Để cập nhật một kho lưu trữ cụ thể, hãy sử dụng -o, ví dụ:

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

Đây là một kho lưu trữ chỉ cập nhật một kho chứa apt được thêm gần đây

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

Nó nhanh hơn nhiều so với việc cập nhật tất cả các kho lưu trữ, đặc biệt là trong quá trình cung cấp VM sau khi thêm mới.


3
Tôi nghĩ rằng điều này cập nhật mọi thứ được tìm thấy trong/path/to
John Bachir

@JohnBachir Chính xác.
La Mã

1

Các -utùy chọn được thêm vào 15.10 . Từ 15.10 đến 17.10, bạn có thể sử dụng -uđể tự động cập nhật chỉ repo cụ thể mà bạn đang thêm:

add-apt-repository -u my-ppa

Điều ngớ ngẩn là tùy chọn này không được thêm vào cho manđến ngày 18.04 ( add-apt-repository --helptuy nhiên, nó đã được ghi lại trong tài liệu ). Nhưng vào ngày 18.04, chức năng này đã bị xóa! (Một lần nữa, không phải trong man, nhưng bạn có thể thấy trong add-apt-repository --help).

Trong 18.04, chức năng cập nhật đã được thay đổi để luôn luôn làm đầy đủ apt-get updatesau đó add-apt-repository. Các -utùy chọn đã được loại bỏ một cách hiệu quả. Nó vẫn ở đó cho cú pháp kế thừa, nhưng nó luôn được đặt thành options.update = False. Trong 18.04, bạn có tùy chọn -n, --no-update, giống như hành vi cũ. Nhưng đó là tất cả hoặc không có gì, bạn không thể cập nhật một repo kể từ ngày 18.04.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.