Як автоматично оновити /etc/apt/sources.list з URI-джерелами джерела на Ubuntu 16.04?


10

Наступна команда чудово працювала на Ubuntu 15.10:

sudo apt-get build-dep emacs24

Однак на Ubuntu 16.04 я отримую таку помилку при його запуску:

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

У 15.10 всі рядки (близько 10 за номером) з deb-srcін /etc/apt/sources.list, де коментовані, тоді як у 16.04 відповідні рядки, де коментуються. Наприклад, ось 4 рядки з мого поточного 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

У чому причина цієї зміни?

Далі, я хотів би уникати редагування вручну /etc/apt/sources.listкожного разу, коли я роблю перевстановлення Ubuntu. Як це можна зробити (коментуючи deb-srcрядки) автоматично?


Причина, ймовірно, в тому, що для більшості користувачів марно витрачати час / пропускну здатність щоразу оновлювати базу даних доступних вихідних пакетів. Із графічного інтерфейсу, де ви налаштовуєте використовувані сховища, ви можете легко відключити / включити (коментувати / не коментувати) ці лінії. Навколо також є деякі sedсценарії.
JanC

python3-software-propertiesПакет може бути корисним , щоб написати сценарій Python теж.
JanC

@JanC Спасибі, я написав власний сценарій. Дивіться відповідь нижче.
Håkon Hægland

Відповіді:



12

У мене була така сама проблема на серверній установці Ubuntu 16.04, тому ніякого графічного інтерфейсу немає. Все, що мені було потрібно, - це пара sedкоманд.

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

Потім sudo apt-get updateі продовжуйте далі.


2

Ось (на даний момент неперевірений) сценарій Bash, який можна використовувати для комментирования deb-srcрядків у 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

Немає необхідності в сценарії. Будь ласка, дивіться мою відповідь.
Gunnar Hjalmarsson

1

простіше рішення, яке робить те, що інші розмістили більш лаконічно:

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

Основні відмінності: Perl має опцію -i inplace, яка змінює файли на місці; Я не додав суфікс для файлів резервного копіювання, тому що я не хотів, щоб файли резервного копіювання випадково розглядалися як файли даних. І "*" має справу з додатковим пробілом. "perl -p -n -e" здебільшого те саме, що "sed -e", хоч слідкуйте за жадібним узгодженням регулярних виразів.

Він має ті самі обмеження, що й інші: він дозволяє джерелам, навіть якщо оригінал не був увімкнутий (тобто партнери), і він не працює на /etc/apt/sources.list.d. Далі також буде оброблено /etc/apt/sources.list.d*, але спочатку зробить резервну копію.

(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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.