¿Cómo actualizar automáticamente /etc/apt/sources.list con los URI de origen en Ubuntu 16.04?


10

El siguiente comando funcionó bien en Ubuntu 15.10:

sudo apt-get build-dep emacs24

Sin embargo, en Ubuntu 16.04 obtengo el siguiente error cuando lo ejecuto:

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

En 15.10 todas las líneas (alrededor de 10 en número) con deb-srcin no /etc/apt/sources.listcomentadas, mientras que en 16.04 las líneas correspondientes se comentaron. Por ejemplo, aquí hay 4 líneas de mi actual 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

¿Cuál es la razón de este cambio?

A continuación, me gustaría evitar la edición manual /etc/apt/sources.listcada vez que realizo una reinstalación de Ubuntu. ¿Cómo puede esto (descomentar las deb-srclíneas) automáticamente?


Probablemente, la razón es que para la mayoría de los usuarios es inútil perder tiempo / ancho de banda actualizar la base de datos de los paquetes fuente disponibles cada vez. Desde la GUI donde configura los repositorios utilizados, puede deshabilitar / habilitar (comentar / descomentar) fácilmente esas líneas. También hay algunos sedscripts alrededor.
JanC

El python3-software-propertiespaquete también puede ser útil para escribir un script de Python.
JanC

@ JanC Gracias, escribí mi propio guión. Ver la respuesta a continuación.
Håkon Hægland

Respuestas:



12

Tuve este mismo problema en la instalación de un servidor de Ubuntu 16.04, así que no tengo GUI. Todo lo que necesitaba era un par de sedcomandos.

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

Entonces sudo apt-get updatey continúa.


2

Aquí hay un script Bash (actualmente no probado) que podría usarse para descomentar deb-srclíneas en 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

No hay necesidad de un guión. Por favor mira mi respuesta.
Gunnar Hjalmarsson

1

Solución más simple que hace lo que los demás han publicado de manera más sucinta:

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

Distinciones clave: Perl tiene la opción -i in situ que modifica los archivos en su lugar; No agregué un sufijo para los archivos de respaldo porque no quería que los archivos de respaldo fueran tratados accidentalmente como archivos de datos. Y "*" trata con espacios en blanco opcionales. "perl -p -n -e" es casi lo mismo que "sed -e", aunque ten cuidado con la codiciosa coincidencia de expresiones regulares.

Tiene las mismas limitaciones que los demás: habilita las fuentes incluso si el original no estaba habilitado (es decir, socios), y no funciona en /etc/apt/sources.list.d. Lo siguiente también procesará /etc/apt/sources.list.d* pero primero realiza una copia de seguridad.

(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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.