apt-get update สำหรับที่เก็บเฉพาะ


108

เมื่อฉันเพิ่ม PPA apt-get updateและฉันต้องการที่จะติดตั้งบางส่วนของเนื้อหาของมันก็เป็นที่น่ารำคาญมากอีกครั้งการปรับปรุงทุกรายการฉลาดของฉันโดยใช้

เป็นไปได้หรือไม่ที่จะซิงค์เฉพาะเนื้อหาของที่เก็บที่กำหนด?


1
เริ่มจากเจ้าเล่ห์คุณสามารถใช้add-apt-repository -u
Treviño

ไม่มี-uใน Ubuntu (15.x) สดใสเท่าที่ฉันสามารถบอกได้
kenorb

@ Treviñoมันไม่ได้กล่าวถึงใน manpage ของ Wily: manpages.ubuntu.com/manpages/wily/en/man1/…มันมีการบันทึกไว้ที่อื่นหรือไม่?
muru

@muru add-apt-repository --helpผมคิดว่าจะต้องมีการแก้ไขก็กล่าวถึงเฉพาะใน โปรดเปิดบั๊กที่ขอให้แก้ไข manpage
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>

คุณสามารถอัปเดตพื้นที่เก็บข้อมูล ppa เดียวโดยไม่ต้องอัปเดตแหล่งที่มาของ apt ทั้งหมดด้วยการใช้งานของ bash-completion


14
คุณควรทำแพ็คเกจนี้
PyRulez

3
คุณแน่ใจหรือไม่ว่าสคริปต์การเติมข้อความอัตโนมัติทำงาน
qed

1
เมื่อฉันกดTabมันจะแสดงupdate-repo _init_completion: command not found
kevy

2
FYI: ฉันใช้ความรู้ที่ฉันได้รับจากโพสต์นี้เพื่อเสนอตัวเลือกในการเพิ่มพื้นที่เก็บข้อมูลเพื่อทำสิ่งนี้โดยอัตโนมัติ 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
คุณสามารถอธิบายได้ว่า '-' หมายถึงอะไรในการกำหนดค่าแหล่งที่มา?
Sajuuk

ฉันคิดว่า '-' sourcepartsไม่ควรใช้วิธีหลอกๆ ดูgithub.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 ฉันอาจจะผิด แต่ไม่พบเอกสารที่เหมาะสมที่อธิบาย '-'
สุ่ม

12

Y PPA Manager มาพร้อมกับเครื่องมือบรรทัดคำสั่งupdate-ppaที่ช่วยให้คุณอัปเดต PPA เดียว

ตัวอย่างเช่น:

sudo update-ppa ppa:nilarimogard/webupd8

นอกจากนี้เมื่อเพิ่ม PPA ผ่าน Y PPA Manager แหล่ง PPA จะได้รับการอัปเดตโดยอัตโนมัติ (สำหรับ PPA นั้น) ในรุ่นอนาคตจะมี GUI ที่จะอัปเดต PPA เดียวด้วยตนเองเช่นกัน

ข้อมูลเพิ่มเติมเกี่ยวกับ 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 อย่างแน่นอน
Roman

1

-uตัวเลือกที่ถูกเพิ่มเข้ามาใน 15.10 จาก 15.10 ถึง 17.10 คุณสามารถใช้-uเพื่อปรับปรุงเฉพาะ repo ที่คุณเพิ่ม:

add-apt-repository -u my-ppa

สิ่งที่โง่ก็คือว่าตัวเลือกนี้ไม่ได้เพิ่มmanจนถึง 18.04 (มันเป็นเอกสารในadd-apt-repository --help) แต่ใน 18.04 ฟังก์ชั่นนี้ถูกลบ! (ไม่ใช่อีกครั้งmanแต่คุณสามารถเห็นได้ในadd-apt-repository --help)

ใน 18.04 ที่ฟังก์ชันการปรับปรุงก็เปลี่ยนไปมักจะทำเต็มหลังapt-get update ตัวเลือกจะถูกลบออกได้อย่างมีประสิทธิภาพ มันยังคงอยู่ที่นั่นเป็นเวลาไวยากรณ์เดิม แต่ก็เป็นที่ตั้งเสมอ ใน 18.04 คุณมีตัวเลือกซึ่งคล้ายกับพฤติกรรมเก่า แต่มันคือทั้งหมดหรือไม่มีอะไรเลยคุณไม่สามารถปรับปรุง repo เดียวตั้งแต่ 18.04add-apt-repository-uoptions.update = False-n, --no-update

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.