Следующая команда работала нормально в 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
строки) автоматически?
Откройте Software & Обновления и включают "Исходный код".
У меня была эта та же проблема об установке сервера Ubuntu 16.04, таким образом, никакой GUI. Все, в чем я нуждался, было несколькими 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
и продвигаются.
sudo apt-get purge ".*:arm64"
также удалит мой инструментарий CUDA 8.0, поскольку он говорит, что некоторые файлы не имеют " arm64" назовите к нему и таким образом, они обращаются к исходному программному обеспечению, которое я хочу сохранить. Сохраняет arm64 источником проблемы? К сожалению, после близкий снятия выделения со всем внешним программным обеспечением, та же ошибка все еще подходит
– lee kwot sin
15 September 2017 в 07:21
Вот (в настоящее время не тестируется) сценарий 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
более простое решение, которое делает то, что другие писали более кратко:
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
Вот упрощенный результат @Tobi, который делает это при одном вызове sed:
sed -i -- 's/#\s\?deb-src/deb-src/g' /etc/apt/sources.list
Это добавляет \s\?
, который является необязательным пробелом ( обратите внимание, что ? нужно экранировать).