Gentoo change portage rsync to git

Gentoo Korea Wiki
둘러보기로 가기 검색하러 가기

서문

이 문서는 포티지 트리의 기존의 rsync 다운로드 방식을 git 방식으로 바꾸는 방법을 언급합니다. 사용자의 컴퓨터에는 최신 portage를 먼저 설치해두었다고 가정합니다. 만약 portage가 최신이 아니라면 다음 명령으로 portage를 최신으로 업데이트해야합니다.

$ sudo emerge --sync;
$ sudo emerge --newuse --oneshot portage;

git 방식 꾸러미 트리 다운로드의 장점

현재 젠투의 꾸러미 트리는 사실상 git 위주로 운영하고 있다고 해도 과언이 아닙니다. 때문에 git 저장소를 활용하여 실시간으로 업데이트를 진행합니다. 만약 unstable 키워드(예: ~amd64)를 /etc/portage/make.conf에 지정했다면, 실시간으로 바뀐 git 저장소의 꾸러미 트리를 받아서 바로 설치할 수 있습니다. 젠투 포티지 트리 실시간 상황은 젠투 포티지 트리 gitweben에서 확인할 수 있습니다.

심지어 rsync는 증분 업데이트를 모두 받아내야 하지만 git 방식은 바이너리를 압축한 후 블록 단위로 쪼개어 보관하는 방식을 쓰기 때문에 데이터 중복 방지+압축으로 인한 추가 용량 감소+멀티 쓰레드를 통한 블록 다운로드로 rsync보다 다운로드 및 동기화 속도가 월등히 빠릅니다. 그러니까 대부분 x86, amd64를 사용하는 상황에서 젠투 인프라 관리팀에서는 git 저장소 다운로드 방식으로의 전환을 강력 추천합니다.

절차 진행

git 설치

우선 git 꾸러미를 설치합니다. 필요한 USE 플래그는 젠투 공식 위키 git 페이지en를 참고하십시오.


주의: 이 과정을 수행하지 않으면 돌이킬 수 없는 문제에 직면할 수 있습니다.


$ sudo emerge git;

설정 파일 편집

/etc/portage/repos.conf/gentoo.conf를 열고 안의 내용을 모두 삭제한 후 다음 내용을 넣습니다.

[DEFAULT]
main-repo = gentoo

[gentoo]
location = /usr/portage
sync-type = git
sync-uri = https://anongit.gentoo.org/git/proj/portage.git
auto-sync = true
# sync-depth = 1 :: 초기 clone 처리시 오류가 발생할 수 있으므로 일단 제외합니다. -_-;


/etc/portage/repos.conf/gentoo.conf 파일이 없다면 다음 과정을 따릅니다.

$ sudo mkdir -p /etc/portage/repos.conf
$ vi /etc/portage/repos.conf/gentoo.conf # 편집기로 직접 열고 위에 언급한 내용 붙여넣고 저장.

꾸러미 트리 삭제

꾸러미 트리를 모두 삭제합니다. 이전 단계를 반드시 우선적으로 수행해야합니다. 이전 과정을 올바르게 수행해왔다면 꾸러미 트리가 모두 증발했다고 해서 그 다음 꾸러미 설치 관리자가 먹통이 되진 않습니다.


중요: 아래 예제 명령 뒤의 슬래시와 구두점을 빼면 안됩니다. 오타가 아닙니다.


$ sudo rm -rf /usr/portage/.;

꾸러미 트리 전체 재동기화

다음 명령으로 꾸러미 트리 재동기화를 시도합니다(왜냐면 이전 단계에서 꾸러미 트리를 모두 삭제했기 때문입니다).

$ sudo emerge --sync;

다음과 같은 메시지가 뜨면서 저장소 fetch, merge, and rebase에 성공하면 포티지 트리 동기화가 끝납니다.

>>> Syncing repository 'gentoo' into '/usr/portage'...
/usr/bin/git pull

....

q: Updating ebuild cache in /usr/portage ... 
q: Finished 39923 entries in 0.148991 seconds


옵션: 크론 등록

젠투 측에서는 저장소 트리 원본 서버의 과부하 문제 때문에 하루에 한두번 까지의 동기화 시도를 권장합니다. 잦은 동기화 시도의 결과는 클라이언트 블락의 결과로 이어질 수 있습니다. 이 문제를 자동으로 해결하는 방법으로 크론 등록이 있습니다. 어차피 portage 유틸리티는 대부분 루트 권한을 지닌 채로 실행하기 때문에 system-wide(global) 설정 파일을 편집해주어도 무방합니다.

$ vi /etc/crontab

다음 줄을 위 명령으로 나온 편집 화면에 추가하십시오.

0   6,18 * * * root     /usr/bin/emerge --sync > /dev/null

이 설정으로 6시 정각 18시 정각에 포티지 트리 동기화를 수행하며 결과 화면은 표시하지 않습니다. 동기화 시각이 맘에 안든다면 6,18 대신에 다른 값을 넣으면 됩니다. 콤마로 구분한 값은 24시 단위(0-23) 값이며, 셋 이상 넣지 않는것이 좋습니다.

문제 해결

masters 속성 값 빠짐

  • '/usr/portage/metadata/layout.conf'의 masters 속성 값에 'x-portage' 저장소가 빠져있음을 알리는 오류
>>>Syncing repository 'gentoo' into '/usr/portage' ...
/usr/bin/git pull
Already up-to-date.
=== Sync completed for gentoo
!!! Repository 'x-portage' is missing masters attribute in '/usr/portage/metadata/layout.conf'
!!! Set 'masters = gentoo' in this file for future compatibility

이와 같은 경고 메시지가 뜨는 경우 다음 절차를 통해 설정 값을 지정합니다.

우선 경고 메시지에서 언급한 파일을 엽니다.

$ sudo vi /usr/portage/metadata/layout.conf

파일을 열었다면 30번째 줄 인근에서 다음 부분을 찾습니다.

# Support for implicit masters is deprecated, so we need to explicitly
# specify that this repo does not dependent on any masters, in order
# to distinguish it from repos that rely on the deprecated behavior.
masters =

여기서 비어있는 masters 속성을 다음과 같이 값을 채워넣고 저장합니다.

masters = gentoo

다음 명령으로 동기화 상태를 다시 확인해보시면 됩니다.

$ sudo emerge --sync;


anongit.gentoo.org 동작 안함

가끔 DNS 문제로 접속에 실패하거나 anongit 자체 인프라 문제로 인해 git 서버에 접속을 못할 수도 있습니다. 이 경우,

/etc/portage/repos.conf/gentoo.conf를 열고 다음을,

sync-uri = https://anongit.gentoo.org/git/proj/portage.git

다음 값으로 바꾸십시오. github에 위치한 젠투 포티지 트리 백업입니다.

sync-uri = https://github.com/gentoo/gentoo.git