Come aggiornare automaticamente /etc/apt/sources.list con gli URI di origine su Ubuntu 16.04?


10

Il seguente comando ha funzionato bene su Ubuntu 15.10:

sudo apt-get build-dep emacs24

Tuttavia, su Ubuntu 16.04 ottengo il seguente errore durante l'esecuzione:

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

Nel 15.10 tutte le righe (circa 10 in numero) con deb-srcin /etc/apt/sources.listdove non commentate, mentre in 16.04 le righe corrispondenti sono state commentate. Ad esempio, qui ci sono 4 righe dalla mia attuale 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

Qual è la ragione di questo cambiamento?

Successivamente, vorrei evitare di modificare manualmente /etc/apt/sources.listogni volta che eseguo una reinstallazione di Ubuntu. Come può deb-srcessere fatto automaticamente (decommentando le linee)?


Il motivo è probabilmente che per la maggior parte degli utenti è inutile perdere tempo / larghezza di banda per aggiornare il database dei pacchetti sorgente disponibili ogni volta. Dalla GUI in cui si configurano i repository utilizzati, è possibile disabilitare / abilitare (commentare / rimuovere il commento) facilmente quelle righe. Ci sono anche alcuni sedscript in giro.
JanC

Il python3-software-propertiespacchetto potrebbe essere utile anche per scrivere uno script Python.
JanC

@ JanC Grazie, ho scritto la mia sceneggiatura. Vedi la risposta sotto.
Håkon Hægland,

Risposte:



12

Ho avuto lo stesso problema su un'installazione server di Ubuntu 16.04, quindi nessuna interfaccia grafica. Tutto ciò di cui avevo bisogno erano un paio di sedcomandi.

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

Quindi sudo apt-get updatee continua.


2

Ecco uno script Bash (attualmente non testato) che potrebbe essere utilizzato per rimuovere il commento dalle deb-srcrighe in 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

Non c'è bisogno di una sceneggiatura. Si prega di vedere la mia risposta.
Gunnar Hjalmarsson,

1

soluzione più semplice che fa ciò che gli altri hanno pubblicato in modo più succinto:

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

Distinzioni chiave: Perl ha l'opzione -i inplace che modifica i file in atto; Non ho aggiunto un suffisso per i file di backup perché non volevo che i file di backup venissero accidentalmente trattati come file di dati. E "*" si occupa di spazi bianchi opzionali. "perl -p -n -e" è per lo più lo stesso di "sed -e", anche se fai attenzione agli avidi abbinamenti regex.

Ha gli stessi limiti degli altri: abilita i sorgenti anche se l'originale non è stato abilitato (ovvero i partner) e non funziona su /etc/apt/sources.list.d. Di seguito elabora anche /etc/apt/sources.list.d* ma effettua prima un backup.

(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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.