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?


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

Jawaban:



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.


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.