如何在Ubuntu 16.04上使用源URI自动更新/etc/apt/sources.list?


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自动(取消注释)?


原因可能是对于大多数用户而言,每次更新可用源软件包的数据库都浪费了无用的时间/带宽。在配置已用存储库的GUI中,可以轻松禁用/启用(注释/取消注释)这些行。sed周围也有一些脚本。
2016年

python3-software-properties软件包对于编写Python脚本也可能很有用。
2016年

@JanC谢谢,我写了自己的剧本。请参阅下面的答案。
哈康Hægland

Answers:



12

我在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继续。


2

这是一个(当前未经测试的)Bash脚本,可用于取消注释以下deb-srcsources.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 '16

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.