Como atualizar automaticamente o /etc/apt/sources.list com os URIs de origem no Ubuntu 16.04?

10

O comando a seguir funcionou bem no Ubuntu 15.10:

sudo apt-get build-dep emacs24

No entanto, no Ubuntu 16.04, recebo o seguinte erro ao executá-lo:

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

Em 15.10 todas as linhas (em torno de 10 em número) com deb-srcem /etc/apt/sources.listforam descomentadas, enquanto em 16.04 as linhas correspondentes foram comentadas. Por exemplo, aqui estão 4 linhas da minha atual 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 o motivo dessa mudança?

Em seguida, gostaria de evitar a edição manual /etc/apt/sources.listsempre que reinstalar o Ubuntu. Como isso (descomentando as deb-srclinhas) pode ser feito automaticamente?

Håkon Hægland
fonte
Provavelmente, o motivo é que, para a maioria dos usuários, é inútil perder tempo / largura de banda para atualizar o banco de dados de pacotes de origem disponíveis todas as vezes. Na GUI em que você configura os repositórios usados, é possível desativar / ativar facilmente (comentar / descomentar) essas linhas. Existem também alguns sedscripts por aí.
janc
O python3-software-propertiespacote também pode ser útil para escrever um script Python.
janc
@ JanC Obrigado, eu escrevi meu próprio script. Veja a resposta abaixo.
Håkon Hægland
Versão somente da CLI: askubuntu.com/questions/496549/…
Ciro Santilli escreveu:

Respostas:

9

Abra Software e atualizações e ative "Código-fonte".

Gunnar Hjalmarsson
fonte
13
Inútil se o seu ubuntu é um servidor com apenas shell
Wojciech Zylinski
12

Eu tive esse mesmo problema em uma instalação de servidor do Ubuntu 16.04, então não há GUI. Tudo o que eu precisava era de alguns 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

Então sudo apt-get updatee continue.

Tobi
fonte
2

Aqui está um script Bash (atualmente não testado) que pode ser usado para descomentar deb-srclinhas em 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
fonte
Não há necessidade de um script. Por favor, veja minha resposta.
Gunnar Hjalmarsson
1

solução mais simples que faz o que os outros postaram de forma mais sucinta:

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

Distinções principais: O Perl possui a opção -i inplace, que modifica os arquivos no local; Não adicionei um sufixo para arquivos de backup porque não queria que os arquivos de backup fossem acidentalmente tratados como arquivos de dados. E "*" lida com espaço em branco opcional. "perl -p -n -e" é basicamente o mesmo que "sed -e", embora esteja atento à correspondência de regex gananciosa.

Ele tem as mesmas limitações que os outros: habilita fontes mesmo que o original não tenha sido ativado (ou seja, parceiros) e não funciona em /etc/apt/sources.list.d. O seguinte também processará /etc/apt/sources.list.d*, mas faz um backup primeiro.

(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
fonte