Comment mettre à jour automatiquement /etc/apt/sources.list avec les URI source sur Ubuntu 16.04?

10

La commande suivante a bien fonctionné sur Ubuntu 15.10:

sudo apt-get build-dep emacs24

Cependant, sur Ubuntu 16.04, j'obtiens l'erreur suivante lors de son exécution:

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

En 15.10, toutes les lignes (environ 10 au nombre) avec deb-srcin /etc/apt/sources.listn'étaient pas commentées, tandis qu'en 16.04, les lignes correspondantes étaient commentées. Par exemple, voici 4 lignes de mon courant 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

Quelle est la raison de ce changement?

Ensuite, je voudrais éviter de modifier manuellement /etc/apt/sources.listchaque fois que je fais une réinstallation d'Ubuntu. Comment cela (décommenter les deb-srclignes) peut-il se faire automatiquement?

Håkon Hægland
la source
La raison en est probablement que pour la plupart des utilisateurs, il est inutile de perdre du temps / de la bande passante pour mettre à jour la base de données des packages source disponibles à chaque fois. Depuis l'interface graphique où vous configurez les référentiels utilisés, vous pouvez facilement désactiver / activer (commenter / décommenter) ces lignes. Il y a aussi des sedscripts autour.
janvier
Le python3-software-propertiespackage peut également être utile pour écrire un script Python.
JanC
@JanC Merci, j'ai écrit mon propre script. Voir la réponse ci-dessous.
Håkon Hægland
Version CLI uniquement: askubuntu.com/questions/496549/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Réponses:

9

Ouvrez Software & Updates et activez "Code source".

Gunnar Hjalmarsson
la source
13
Inutile si votre ubuntu est un serveur avec juste un shell
Wojciech Zylinski
12

J'ai eu ce même problème sur une installation de serveur d'Ubuntu 16.04, donc pas d'interface graphique. Tout ce dont j'avais besoin était de quelques sedcommandes.

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

Ensuite sudo apt-get updateet continuez.

Tobi
la source
2

Voici un script Bash (actuellement non testé) qui pourrait être utilisé pour décommenter les deb-srclignes dans 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
Håkon Hægland
la source
Pas besoin de script. Veuillez voir ma réponse.
Gunnar Hjalmarsson
1

solution plus simple qui fait ce que les autres ont posté de manière plus succincte:

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

Distinctions clés: Perl a l'option -i inplace qui modifie les fichiers en place; Je n'ai pas ajouté de suffixe pour les fichiers de sauvegarde car je ne voulais pas que les fichiers de sauvegarde soient accidentellement traités comme des fichiers de données. Et "*" traite des espaces en option. "perl -p -n -e" est essentiellement la même chose que "sed -e", mais faites attention aux correspondances regex gourmandes.

Il a les mêmes limites que les autres: il active les sources même si l'original n'a pas été activé (c'est-à-dire les partenaires), et il ne fonctionne pas sur /etc/apt/sources.list.d. Ce qui suit traitera également /etc/apt/sources.list.d* mais fera d'abord une sauvegarde.

(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
whitis
la source