केवल विशिष्ट रिपॉजिटरी के लिए apt-get अपडेट


108

जब मैं एक PPA जोड़ता हूं और मैं इसकी कुछ सामग्री को स्थापित करना चाहता हूं, तो यह मेरे सभी उपयुक्त सूची को फिर से अपडेट करने के लिए काफी कष्टप्रद है apt-get update

क्या किसी दिए गए भंडार की सामग्री को केवल सिंक करना संभव है?


1
विली से शुरू, आप बस का उपयोग कर सकते हैंadd-apt-repository -u
ट्रेविओनो

-uजहां तक ​​मैं बता सकता हूं उबंटू (15.x) विविड पर कोई नहीं है ।
केनोरब

@ Treviño यह विली मेन्यू में उल्लिखित नहीं है: manpages.ubuntu.com/manpages/wily/en/man1/… क्या यह कहीं और प्रलेखित है?
मूरू

@ मुझे लगता है कि इसे ठीक करना होगा, यह केवल उल्लेख किया गया है add-apt-repository --help। कृपया मेन्यू को ठीक करने के लिए एक बग खोलें।
त्रेविणो

@ ट्रेविनेओ @ एमआरयू FYI, -uकार्यक्षमता को 18.04 से हटा दिया गया था। देखें askubuntu.com/questions/65245/...
wisbucky

जवाबों:


82

हां, एप्ट-गेट ऐसा कर सकता है, और इसे अच्छे तरीके से कर सकता है।

  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>

आप पूरे apt स्रोत को अपडेट किए बिना एक ppa रिपॉजिटरी को अपडेट कर सकते हैं, जिसमें bash- पूर्णता को लागू किया जा सकता है।


14
आपको इसका पैकेज देना चाहिए।
PyRulez

3
क्या आप सुनिश्चित हैं कि स्वतः पूर्ण स्क्रिप्ट काम कर रही है?
qed

1
जब मैं टैब हिट करता हूं तो यह पता चलता हैupdate-repo _init_completion: command not found
कीवी

2
FYI करें: मैंने इस पोस्ट से प्राप्त ज्ञान का उपयोग स्वचालित रूप से करने के लिए ऐड-ऑप-रिपॉजिटरी के विकल्प का प्रस्ताव करने के लिए किया है। code.launchpad.net/~evarlast/software-properties/support-update/…
Jay _silly_evarlast_

2
@CiprianTomoiaga यह विलीन हो गया, लेकिन स्रोत यहाँ है: bazaar.launchpad.net/~evarlast/software-properties/… मुझे उम्मीद है कि यह विली में होगा।
जय _silly_evarlast_ व्रेन

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"

फिर भी यह बहुत सुविधाजनक नहीं है।
यह एक बश फ़ंक्शन को परिभाषित करने को सरल बनाया जा सकता है

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उपयोग नहीं किया जाना चाहिए। Github.com/Debian/apt/blob/master/apt-pkg/sourcelist.cc#L313 देखें । मैं गलत हो सकता है, लेकिन '-' की व्याख्या करने वाला एक उचित डॉक नहीं पा सका।
यादृच्छिकता

12

Y PPA प्रबंधक एक कमांड लाइन टूल के साथ आता है जिसे कहा जाता है update-ppaकि आप एक एकल पीपीए को अपडेट कर सकते हैं।

उदाहरण के लिए:

sudo update-ppa ppa:nilarimogard/webupd8

इसके अलावा, Y PPA प्रबंधक के माध्यम से PPA जोड़ने पर, PPA स्रोत स्वचालित रूप से (केवल उस PPA के लिए) अपडेट हो जाता है। भविष्य के संस्करण में, एकल PPA को मैन्युअल रूप से अपडेट करने के लिए GUI होने जा रहा है।

Y PPA प्रबंधक, HERE के बारे में अधिक जानकारी ।


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

यहाँ केवल हाल ही में जोड़ा गया रिपॉजिटरी अपडेट करने वाला वन-लाइनर है

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

यह सभी रिपॉजिटरी को अपडेट करने की तुलना में बहुत तेज है, विशेष रूप से नए जोड़ने के बाद वीएम प्रोविजनिंग के दौरान।


3
मुझे लगता है कि यह सब कुछ मिला/path/to
जॉन बाचिर

@ जॉनबचिर बिल्कुल।
रोमन

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 के बाद से एक भी रेपो को अपडेट नहीं कर सकते।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.