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.listUbuntuを再インストールするたびに手動で編集しないようにしたいと思います。これ(deb-src行のコメントを外す)を自動的に行うにはどうすればよいですか?


その理由は、ほとんどのユーザーにとって、利用可能なソースパッケージのデータベースを毎回更新するのに無駄な時間/帯域幅を浪費しているためです。使用するリポジトリを構成するGUIから、これらの行を簡単に無効化/有効化(コメント化/コメント解除)できます。sed周りにもいくつかのスクリプトがあります。
JanC 2016

このpython3-software-propertiesパッケージは、Pythonスクリプトの作成にも役立つ場合があります。
JanC 2016

@JanCありがとう、私は自分のスクリプトを書きました。以下の回答を参照してください。
ホーコンHægland

回答:



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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.