¿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?

Håkon Hægland
fuente
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
Versión única de CLI: askubuntu.com/questions/496549/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Respuestas:

9

Abra Software y actualizaciones y active "Código fuente".

Gunnar Hjalmarsson
fuente
13
Inútil si su ubuntu es un servidor con solo shell
Wojciech Zylinski
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.

Tobi
fuente
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
Håkon Hægland
fuente
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
whitis
fuente