Bagaimana cara memperbarui /etc/apt/sources.list secara otomatis dengan URI sumber pada Ubuntu 16.04?

10

Perintah berikut berfungsi dengan baik di Ubuntu 15.10:

sudo apt-get build-dep emacs24

Namun, pada Ubuntu 16.04 saya mendapatkan kesalahan berikut saat menjalankannya:

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

Di 15.10 semua baris (sekitar 10 dalam jumlah) dengan deb-srcdi /etc/apt/sources.listmana uncommented, sedangkan di 16,04 baris yang sesuai di mana berkomentar. Sebagai contoh, berikut adalah 4 baris dari saya saat ini 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

Apa alasan dari perubahan ini?

Selanjutnya, saya ingin menghindari pengeditan secara manual /etc/apt/sources.listsetiap kali saya menginstal ulang Ubuntu. Bagaimana ini (menghapus komentar deb-srcbaris) dilakukan secara otomatis?

Håkon Hægland
sumber
Alasannya mungkin karena sebagian besar pengguna membuang waktu / bandwidth tidak berguna untuk memperbarui database paket sumber yang tersedia setiap saat. Dari GUI tempat Anda mengkonfigurasi repositori yang digunakan, Anda dapat dengan mudah menonaktifkan / mengaktifkan (komentar / tanda komentar) baris-baris itu. Ada juga beberapa sedskrip di sekitar.
JanC
The python3-software-propertiespaket mungkin berguna untuk menulis script Python juga.
JanC
@ JanC Terima kasih, saya menulis skrip saya sendiri. Lihat jawaban di bawah ini.
Håkon Hægland
Versi khusus CLI: askubuntu.com/questions/496549/…
Ciro Santilli 冠状 病毒 审查 六四 六四 事件 法轮功

Jawaban:

9

Buka Perangkat Lunak & Pembaruan dan aktifkan "Kode sumber".

Gunnar Hjalmarsson
sumber
13
Tidak berguna jika ubuntu Anda adalah server dengan hanya shell
Wojciech Zylinski
12

Saya memiliki masalah yang sama pada instalasi server Ubuntu 16.04, jadi tidak ada GUI. Yang saya butuhkan hanyalah beberapa sedperintah.

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

Lalu sudo apt-get updatedan lanjutkan.

Tobi
sumber
2

Berikut adalah skrip Bash (yang saat ini belum diuji) yang dapat digunakan untuk menghapus komentar deb-srcpada baris di 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
sumber
Tidak perlu skrip. Tolong lihat jawaban saya.
Gunnar Hjalmarsson
1

solusi sederhana yang melakukan apa yang diposting oleh orang lain dengan lebih ringkas:

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

Perbedaan utama: Perl memiliki opsi -i inplace yang memodifikasi file di tempatnya; Saya tidak menambahkan akhiran untuk file cadangan karena saya tidak ingin file cadangan secara tidak sengaja diperlakukan sebagai file data. Dan "*" berkaitan dengan spasi kosong opsional. "perl -p -n -e" sebagian besar sama dengan "sed -e", meskipun hati-hati untuk pencocokan regex serakah.

Ini memiliki batasan yang sama dengan yang lain: itu memungkinkan sumber bahkan jika sumber asli tidak diaktifkan (yaitu mitra), dan itu tidak bekerja di /etc/apt/sources.list.d. Berikut ini juga akan memproses /etc/apt/sources.list.d* tetapi membuat cadangan terlebih dahulu.

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