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?


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

Réponses:



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.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.