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 에서는 주석 처리되지 않은 위치 deb-src/etc/apt/sources.list있는 모든 행 (약 10 개)이 있는 반면 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

python3-software-properties패키지는 파이썬 스크립트를 작성하는 데 유용 할 수 있습니다.
JanC

@ JanC 감사합니다, 나는 내 자신의 스크립트를 작성했습니다. 아래 답변을 참조하십시오.
Håkon 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

다음은 주석에 사용될 수있는 (현재 테스트되지 않은) 배쉬 스크립트 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.