Wie aktualisiere ich /etc/apt/sources.list automatisch mit Quell-URIs unter Ubuntu 16.04?


10

Der folgende Befehl hat unter Ubuntu 15.10 einwandfrei funktioniert:

sudo apt-get build-dep emacs24

Unter Ubuntu 16.04 wird beim Ausführen jedoch der folgende Fehler angezeigt:

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

In 15.10 wurden alle Zeilen (ungefähr 10 in der Anzahl) mit deb-srcin nicht /etc/apt/sources.listkommentiert, während in 16.04 die entsprechenden Zeilen auskommentiert wurden. Zum Beispiel sind hier 4 Zeilen aus meiner aktuellen 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

Was ist der Grund für diese Änderung?

Als nächstes möchte ich vermeiden, /etc/apt/sources.listjedes Mal manuell zu bearbeiten, wenn ich Ubuntu neu installiere. Wie kann dies (Kommentieren der deb-srcZeilen) automatisch erfolgen?


Der Grund ist wahrscheinlich, dass es für die meisten Benutzer nutzlos ist, Zeit / Bandbreite zu verschwenden, um die Datenbank der verfügbaren Quellpakete jedes Mal zu aktualisieren. Über die GUI, in der Sie die verwendeten Repositorys konfigurieren, können Sie diese Zeilen einfach deaktivieren / aktivieren (kommentieren / kommentieren). Es gibt auch einige sedSkripte.
Januar

Das python3-software-propertiesPaket kann nützlich sein, um auch ein Python-Skript zu schreiben.
Januar

@ JanC Danke, ich habe mein eigenes Skript geschrieben. Siehe Antwort unten.
Håkon Hægland

Antworten:



12

Ich hatte das gleiche Problem bei einer Serverinstallation von Ubuntu 16.04, also keine GUI. Ich brauchte nur ein paar sedBefehle.

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

Dann sudo apt-get updateund weiter.


2

Hier ist ein (derzeit nicht getestetes) Bash-Skript, mit dem deb-srcZeilen in Kommentaren auskommentiert werden können 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

Kein Skript erforderlich. Bitte sehen Sie meine Antwort.
Gunnar Hjalmarsson

1

Einfachere Lösung, die das macht, was die anderen prägnanter gepostet haben:

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

Hauptunterschiede: Perl verfügt über die Option -i inplace, mit der Dateien an Ort und Stelle geändert werden können. Ich habe kein Suffix für Sicherungsdateien hinzugefügt, da ich nicht wollte, dass die Sicherungsdateien versehentlich als Datendateien behandelt werden. Und "*" behandelt optionales Leerzeichen. "perl -p -n -e" ist meistens dasselbe wie "sed -e", achten Sie jedoch auf gierige Regex-Übereinstimmungen.

Es hat die gleichen Einschränkungen wie die anderen: Es aktiviert Quellen, auch wenn das Original nicht aktiviert war (dh Partner), und es funktioniert nicht unter /etc/apt/sources.list.d. Im Folgenden wird auch /etc/apt/sources.list.d* verarbeitet, es wird jedoch zuerst ein Backup erstellt.

(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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.