Jak automatycznie aktualizować /etc/apt/sources.list za pomocą źródłowych identyfikatorów URI na Ubuntu 16.04?


10

Następujące polecenie działało poprawnie w systemie Ubuntu 15.10:

sudo apt-get build-dep emacs24

Jednak w systemie Ubuntu 16.04 podczas uruchamiania pojawia się następujący błąd:

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

W 15.10 wszystkie wiersze (około 10), deb-srcw /etc/apt/sources.listktórych nie ma komentarza, natomiast w 16.04 odpowiednie wiersze zostały skomentowane. Na przykład tutaj są 4 wiersze z mojego obecnego 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

Jaki jest powód tej zmiany?

Następnie chciałbym uniknąć ręcznej edycji za /etc/apt/sources.listkażdym razem, gdy przeprowadzam ponowną instalację Ubuntu. Jak można to zrobić (odkomentowanie deb-srclinii) automatycznie?


Powodem jest prawdopodobnie to, że dla większości użytkowników marnowanie czasu / przepustowości jest bezużyteczne, aby za każdym razem aktualizować bazę danych dostępnych pakietów źródłowych. Z GUI, w którym konfigurujesz używane repozytoria, możesz łatwo wyłączyć / włączyć (skomentować / odkomentować) te linie. Wokół jest też kilka sedskryptów.
JanC

python3-software-propertiesPakiet może być przydatne, aby napisać skrypt Pythona też.
JanC

@JanC Dzięki, napisałem własny skrypt. Zobacz odpowiedź poniżej.
Håkon Hægland

Odpowiedzi:



12

Miałem ten sam problem z instalacją serwera Ubuntu 16.04, więc nie mam GUI. Potrzebowałem tylko kilku sedpoleceń.

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

Następnie sudo apt-get updatei kontynuuj.


2

Oto (obecnie nieprzetestowany) skrypt Bash, którego można użyć do anulowania komentarzy w deb-srcliniach 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

Nie potrzebujesz skryptu. Proszę zobaczyć moją odpowiedź.
Gunnar Hjalmarsson,

1

prostsze rozwiązanie, które robi to, co inni napisali bardziej zwięźle:

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

Kluczowe rozróżnienia: Perl ma opcję -i inplace, która modyfikuje pliki w miejscu; Nie dodałem sufiksu dla plików kopii zapasowych, ponieważ nie chciałem, aby pliki kopii zapasowych były przypadkowo traktowane jako pliki danych. A „*” dotyczy opcjonalnych białych znaków. „perl -p -n -e” jest w większości taki sam, jak „sed -e”, ale uważaj na chciwe dopasowanie wyrażeń regularnych.

Ma te same ograniczenia, co inni: włącza źródła, nawet jeśli oryginał nie został włączony (tj. Partnerzy) i nie działa na /etc/apt/sources.list.d. Poniższe również przetworzy /etc/apt/sources.list.d*, ale najpierw utworzy kopię zapasową.

(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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.