특정 저장소에 대해서만 apt-get 업데이트


108

PPA를 추가하고 그 내용 중 일부를 설치하고 싶을 때를 사용하여 모든 apt 목록을 다시 업데이트하는 것은 상당히 성가신 일 apt-get update입니다.

대신 지정된 리포지토리의 내용 만 동기화 할 수 있습니까?


1
wily에서 시작하여 다음을 사용할 수 있습니다.add-apt-repository -u
Treviño

-u내가 말할 수있는 한 Ubuntu (15.x) Vivid 는 없습니다 .
kenorb

@ Treviño Wily 맨 페이지 ( manpages.ubuntu.com/manpages/wily/en/man1/ )에는 언급되어 있지 않습니다 … 다른 곳에 문서화되어 있습니까?
muru

@muru 나는 ​​그것이 고정되어야한다고 생각한다 add-apt-repository --help. 맨 페이지 수정을 요청하는 버그를여십시오.
Treviño

@ Treviño @muru FYI, -u기능은 18.04 이후 제거되었습니다. askubuntu.com/questions/65245/…
wisbucky

답변:


82

예, apt-get은 그렇게 할 수 있고 좋은 방법으로 할 수 있습니다.

  1. 다음에 추가 ~/.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. 다음에 추가 ~/.bashrc

    if [ -f $HOME/.bash_funcs ]; then
    .  $HOME/.bash_funcs
    fi
  3. 다음에 추가 ~/.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. 그런 다음 파일을 소싱하십시오.

    . ~/.bashrc
    . ~/.bash_completion
  5. 완료하고 발사 시작

    update-repo <tab> <tab>

bash-completion을 구현하여 전체 apt 소스를 업데이트하지 않고도 단일 ppa 저장소를 업데이트 할 수 있습니다.


14
이것을 포장해야합니다.
PyRulez

3
자동 완성 스크립트가 작동하고 있습니까?
qed

1
내가 공격 할 때 이 표시update-repo _init_completion: command not found
kevy

2
참고 : 나는이 게시물에서 얻은 지식을 사용하여 자동으로 수행 할 수있는 저장소를 추가 할 수있는 옵션을 제안했습니다. code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_ Wren

2
@CiprianTomoiaga이 합병있어,하지만 소스가 여기에 있습니다 : bazaar.launchpad.net/~evarlast/software-properties/... 나는 그것이 책략에있을 것입니다 희망하고있다.
Jay _silly_evarlast_ Wren

41

저장소가 디렉토리의 특정 파일에 구성되어있는 경우 /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

다시 한 번 확인했지만 다른 저장소 (메인 아카이브에도 있음)에 의존하지 않는 패키지를 설치하려는 경우 작동하지 않습니다.
Treviño

1
sourceparts 구성에서 '-'의 의미를 설명 할 수 있습니까?
사주

나는 '-'라고 말하는 더미 방법을 sourceparts사용해서는 안된다고 생각합니다. github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313을 참조하십시오 . 그래도 잘못 될 수 있습니다. '-'를 설명하는 적절한 문서를 찾을 수 없습니다.
무작위성

12

Y PPA 관리자에는 update-ppa단일 PPA를 업데이트 할 수 있는 명령 줄 도구 가 있습니다.

예를 들면 다음과 같습니다.

sudo update-ppa ppa:nilarimogard/webupd8

또한 Y PPA 관리자를 통해 PPA를 추가하면 PPA 소스가 자동으로 업데이트됩니다 (해당 PPA에만 해당). 향후 버전에서는 단일 PPA를 수동으로 업데이트하는 GUI도 제공 될 예정입니다.

Y PPA 관리자에 대한 자세한 내용은 여기를 클릭하십시오 .


5
sudo add-apt-repository ppa:webupd8team/y-ppa-manager다음 sudo apt-get update마지막으로sudo apt-get install y-ppa-manager
mchid

8

특정 저장소를 업데이트하려면 다음을 사용하십시오 -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 프로비저닝 중에 모든 리포지토리를 업데이트하는 것보다 훨씬 빠릅니다.


3
나는 이것이 발견 된 모든 것을 업데이트한다고 생각한다/path/to
John Bachir

@JohnBachir 정확합니다.
로마

1

-u옵션은 15.10에 추가되었습니다 . 15.10에서 17.10까지 -u추가하는 특정 리포지토리 만 자동으로 업데이트 하는 데 사용할 수 있습니다 .

add-apt-repository -u my-ppa

바보 같은 것은이 옵션이 man18.04까지 추가되지 않았다는 것입니다 ( 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 이후 단일 리포지토리를 업데이트 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.