Ubuntu 16.04 पर स्रोत URI के साथ /etc/apt/source.list को स्वचालित रूप से अपडेट करने के लिए कैसे?


10

निम्न आदेश ने Ubuntu 10.10 पर ठीक काम किया:

sudo apt-get build-dep emacs24

हालाँकि, Ubuntu 16.04 पर इसे चलाते समय मुझे निम्न त्रुटि मिलती है:

Reading package lists... Done
E: You must put some 'source' URIs in your sources.list

15.10 सभी लाइनें (संख्या में लगभग 10) के साथ में deb-srcमें /etc/apt/sources.listजहां uncommented, जबकि 16.04 में इसी तर्ज जहां बाहर टिप्पणी की। उदाहरण के लिए, यहां मेरे वर्तमान से 4 लाइनें हैं sources.list:

## Major bug fix updates produced after the final release of the
## distribution.
deb http://no.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
# deb-src http://no.archive.ubuntu.com/ubuntu/ xenial-updates main restricted

इस बदलाव का कारण क्या है?

इसके बाद, मैं /etc/apt/sources.listहर बार जब मैं उबंटू का पुनर्स्थापना करता हूं, तो मैन्युअल रूप से संपादित करने से बचना चाहूंगा । यह ( deb-srcलाइनों को अनियंत्रित ) कैसे स्वचालित रूप से किया जा सकता है?


कारण शायद यह है कि ज्यादातर उपयोगकर्ताओं के लिए हर बार उपलब्ध स्रोत पैकेज के डेटाबेस को अपडेट करने के लिए बेकार समय / बैंडविड्थ बर्बाद करना है। जीयूआई से जहां आप उपयोग किए गए रिपॉजिटरी को कॉन्फ़िगर करते हैं, आप उन पंक्तियों को आसानी से अक्षम / सक्षम (टिप्पणी / असहज कर सकते हैं) कर सकते हैं। sedआसपास कुछ स्क्रिप्ट भी हैं ।
17

python3-software-propertiesपैकेज Python स्क्रिप्ट भी लिखने के लिए उपयोगी हो सकता है।
JanC

@JCC धन्यवाद, मैंने अपनी स्क्रिप्ट लिखी। जवाब नीचे देखें।
हेकॉन हॉलैंड

जवाबों:



12

मेरे पास उबंटू 16.04 के सर्वर इंस्टाल पर यही मुद्दा था, इसलिए कोई GUI नहीं। मुझे जो कुछ भी चाहिए वह था कुछ sedकमांड।

sudo sed -i -- 's/#deb-src/deb-src/g' /etc/apt/sources.list && sudo sed -i -- 's/# deb-src/deb-src/g' /etc/apt/sources.list

तो sudo apt-get updateऔर पर जारी है।


2

यहाँ एक (वर्तमान में अछूता) बैश स्क्रिप्ट है जिसका उपयोग deb-srcलाइनों को असुविधाजनक करने के लिए किया जा सकता है sources.list:

tempdir=$(mktemp -d)
cd "$tempdir"
source_file=/etc/apt/sources.list
new_file=sources.list.new
perl -pE 's/^#\s+(deb-src)/$1/' "$source_file" > "$new_file"
sudo cp "$new_file" "$source_file"
sudo apt-get update

स्क्रिप्ट की जरूरत नहीं। कृपया मेरा उत्तर देखें।
गुन्नार हेजलमरसन

1

सरल समाधान जो दूसरों ने अधिक रसीले तरीके से पोस्ट किया है:

sudo perl -p -i -n -e "s/# *deb-src/deb-src/"  /etc/apt/sources.list

मुख्य अंतर: पर्ल के पास ini विकल्प है, जो फाइलों को जगह देता है; मैंने बैकअप फ़ाइलों के लिए कोई प्रत्यय नहीं जोड़ा क्योंकि मैं नहीं चाहता था कि बैकअप फ़ाइलों को गलती से डेटा फ़ाइलों के रूप में माना जाए। और "*" वैकल्पिक व्हाट्सएप से संबंधित है। "पर्ल-पी-एन-ई" ज्यादातर "सेड-ई" के समान है, हालांकि लालची रेगेक्स मिलान के लिए बाहर देखो।

इसकी वही सीमाएँ हैं जो अन्य करते हैं: यह स्रोतों को सक्षम करता है भले ही मूल (यानी भागीदार) सक्षम नहीं था, और यह /etc/apt/sources.list.d पर काम नहीं करता है। निम्नलिखित भी /etc/apt/source.list.d* प्रक्रिया करेगा, लेकिन पहले एक बैकअप बनाता है।

(cd /etc/apt/; sudo tar cvf sources.list.tar sources.list sources.list.d);  for i in /etc/apt/sources.list /etc/apt/sources.list.d/*; do sudo perl -p -i -n -e "s/# *deb-src/deb-src/" $i; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.