PEP 347 – Python CVS를 Subversion으로 마이그레이션하기
- Author:
- Martin von Löwis <martin at v.loewis.de>
- Discussions-To:
- Python-Dev list
- Status:
- Final
- Type:
- Process
- Created:
- 14-Jul-2004
- Post-History:
- 14-Jul-2004
Table of Contents
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
Python 소스 코드는 현재 sourceforge.net의 CVS 저장소에서 관리되고 있습니다. 이 PEP는 해당 코드를 svn.python.org의 Subversion 저장소로 옮길 것을 제안합니다.
근거
이 변경에는 CVS에서 Subversion으로의 이동과 SourceForge에서 python.org로의 이동이라는 두 가지 측면이 있습니다. 각각에 대한 근거를 제시합니다.
Subversion으로 이동하기
CVS에는 Subversion에서 해결된 여러 가지 제한 사항이 있습니다. Python 개발에서 가장 주목할 만한 개선 사항은 다음과 같습니다.
- 파일의 이력을 유지하면서 파일과 디렉터리의 이름을 변경하고 디렉터리를 제거할 수 있습니다.
- 전역 리비전 번호를 통한 변경 집합(여러 파일에 대한 서로 연관된 변경 집합) 지원이 제공됩니다. 변경 집합은 트랜잭션 방식으로 처리됩니다.
- 원자적이고 빠른 태그 지정이 가능합니다. cvs 태그는 여러 분이 걸릴 수 있지만, Subversion 태그(svn cp)는 빠르고 원자적으로 완료됩니다. 마찬가지로 브랜치도 매우 효율적입니다.
- 패치를 작성할 때 유용한 오프라인 diff를 지원합니다.
python.org로 이동하기
SourceForge는 지난 수년간 중요한 인프라를 친절하게 제공해 왔습니다. 안타깝게도 SF가 받은 관심으로 인해 과거에 반복적으로 과부하 상황도 발생했으며, SF 운영자들은 이에 항상 적시에 대응하지 못했습니다. 특히 CVS의 경우 익명 접근을 위한 두 번째 읽기 전용 CVS 서버를 도입하여 주 CVS 서버의 부하를 줄여야 했습니다. 이 서버는 정기적으로 동기화되지만, 동기화 사이에는 읽기-쓰기 CVS 저장소보다 뒤처집니다. 그 결과 커밋 접근 권한이 없는 사용자는 지연이 발생한 후에야 저장소의 최근 변경 사항을 확인할 수 있습니다.
python.org에서는 저장소를 익명으로 접근할 수 있도록 공개할 수 있습니다.
마이그레이션 절차
Python CVS 저장소를 옮기려면 다음 단계를 실행해야 합니다. 이 단계들은 다음 절에서 자세히 설명합니다.
- 현재 모든 커미터의 SSH 키와 커밋 메시지에 표시할 사용자 이름을 수집하십시오.
- 마이그레이션을 시작할 때 SourceForge의 저장소가 폐쇄되었음을 공지하십시오.
- 마지막 커밋 후 24시간이 지나면 CVS 저장소를 다운로드하십시오.
- CVS 저장소를 Subversion 저장소로 변환하십시오.
- 커미터에게는 쓰기 접근 권한을, 익명 사용자에게는 읽기 전용 접근 권한을 부여하여 저장소를 공개하십시오.
- SF에서 CVS 접근을 비활성화하십시오.
SSH 키 수집
논의 끝에 저장소에 대한 쓰기 권한을 위한 최선의 방법으로 svn+ssh가 선택되었습니다. 개발자는 계속 자신의 SSH 키를 사용할 수 있지만, 해당 키를 python.org에 설치해야 합니다.
각 개발자마다 새로운 Unix 사용자를 만들 필요가 없도록, authorized_keys 파일에 command= 특성을 지정한 단일 계정을 사용해야 합니다.
authorized_keys 파일의 줄은 다음과 같은 형식이어야 합니다(가독성을 위해 줄바꿈했습니다).:
command="/usr/bin/svnserve --root=/svnroot -t
--tunnel-user='<username>'",no-port-forwarding,
no-X11-forwarding,no-agent-forwarding,no-pty
ssh-dss <key> <comment>
사용자 이름으로는 SF 계정 이름 대신 실명을 사용해야 로그 메시지에서 사람을 더 잘 식별할 수 있습니다.
관리자 액세스
Python SF 프로젝트의 현재 모든 관리자에게 pythondev 계정에 대한 관리자 액세스 권한을 부여해야 합니다. 셸 로그인과 svnserve 로그인을 구분하려면 관리자는 두 개의 키를 유지해야 합니다. OpenSSH를 사용하면 다음 절차로 두 번째 키를 만들 수 있습니다.:
cd .ssh
ssh-keygen -t DSA -f pythondev -C <user>@pythondev
vi config
config 파일에 다음 줄을 추가해야 합니다.:
Host pythondev
Hostname dinsdale.python.org
User pythondev
IdentityFile ~/.ssh/pythondev
그러면 “ssh pythondev”를 통해 셸 로그인이 가능해집니다.
CVS 저장소 다운로드
CVS 저장소는 다음 위치에서 다운로드할 수 있습니다.
이 타르볼은 하루에 한 번만 생성되므로 저장소 동결 후 타르볼을 가져올 수 있을 때까지 시간이 지나야 합니다. python-commits 메일링 리스트에 기록된 마지막 커밋이 실제로 타르볼에 포함되어 있는지 확인해야 합니다.
변환 후에는 변환된 CVS 타르볼을 www.python.org/archive/python-cvsroot-<date>.tar.bz2에 영구적으로 보관해야 합니다.
CVS 저장소 변환
Python CVS 저장소에는 distutils와 python이라는 두 모듈이 포함되어 있습니다. python 모듈은 다시 dist와 nondist로 구성되며, dist에는 src(실제 Python 코드)만 포함되어 있습니다. nondist에는 다양한 하위 디렉터리가 포함되어 있습니다.
더 짧은 URL을 얻을 수 있도록 다음 <project>/{trunk,tags,branches} 구조에 따라 이를 Subversion 저장소에서 재구성해야 합니다. 각 nondist 디렉터리와 src(이름은 python으로 지정됨) 및 distutils에 대해 프로젝트를 하나씩 생성합니다. 아래에 보인 것처럼 저장소 재구성은 CVS 트리에서 수행하는 것이 가장 좋습니다.
저장소 형식으로 fsfs 백엔드를 사용해야 합니다(Subversion 1.1이 필요합니다). fsfs 백엔드는 증분 저장소 백업을 허용하고 덤프 명령을 실행할 필요가 없으므로 백업에 더 유리하다는 장점이 있습니다.
변환은 cvs2svn 유틸리티를 사용하여 수행해야 하며, 이 유틸리티는 cvs2svn Debian 패키지 등에서 사용할 수 있습니다. cvs2svn은 현재 project/trunk 구조를 지원하지 않으므로 각 프로젝트를 별도로 변환해야 합니다. 각 변환 결과를 대상 저장소의 별도 디렉터리에 넣으려면 svnadmin load를 사용해야 합니다.
Subversion은 CVS와 바이너리 파일 및 텍스트 파일을 다르게 취급합니다. CVS의 의미를 올바르게 유지하려면 CVS에서 바이너리로 표시되지 않은 모든 파일에 대해 svn:eol-style을 native로 설정해야 합니다.
요약하면 변환 스크립트는 다음과 같습니다.:
#!/bin/sh
rm cvs2svn-*
rm -rf python py.new
tar xjf python-cvsroot.tar.bz2
rm -rf python/CVSROOT
svnadmin create --fs-type fsfs py.new
mv python/python python/orig
mv python/orig/dist/src python/python
mv python/orig/nondist/* python
# nondist/nondist is empty
rmdir python/nondist
rm -rf python/orig
for a in python/*
do
b=`basename $a`
cvs2svn -q --dump-only --encoding=latin1 --force-branch=cnri-16-start \
--force-branch=descr-branch --force-branch=release152p1-patches \
--force-tag=r16b1 $a
svn mkdir -m"Conversion to SVN" file:///`pwd`/py.new/$b
svnadmin load -q --parent-dir $b py.new < cvs2svn-dump
rm cvs2svn-dump
done
이 변환의 샘플 결과는 다음에서 이용할 수 있습니다
저장소 게시
저장소는 http://svn.python.org/projects 에 공개해야 합니다. 현재 모든 SF 커미터에게 svn+ssh://pythondev@svn.python.org/를 통한 읽기/쓰기 접근 권한을 부여해야 하며, WebDAV를 통한 읽기 전용 익명 접근 권한도 부여해야 합니다.
선택 사항으로 websvn(Debian websvn 패키지 등에서 제공됨)을 제공할 수 있습니다. 안타깝게도 테스트 설치에서는 메모리가 부족해져 websvn이 중단됩니다.
현재 SF 프로젝트 관리자는 pythondev 계정의 authorized_keys2 파일에 대한 쓰기 권한을 가져야 합니다.
CVS 비활성화
CVS를 완전히 비활성화할 수 없는 것으로 보입니다. 프로젝트 페이지에서 사용자 인터페이스만 제거할 수 있으며, 저장소 자체는 계속 이용할 수 있습니다. 필요한 경우 CVS commitinfo 항목을 통해 python 및 distutils 모듈에 대한 쓰기 권한을 비활성화할 수 있습니다.
논의
위 절차에 대한 여러 대안이 제안되었습니다. 거부된 대안을 여기에서 간략히 논의합니다.
- python용 저장소와 distutils용 저장소를 하나씩 만들어 여러 저장소를 생성합니다. 이렇게 하면 URL을 더 짧게 만들 수 있었지만, 단일 저장소에서는 프로젝트 간에 코드를 이동할 수 있으므로 거부되었습니다.
- 여러 사람이 표준 cvs2svn을 통해 프로젝트/트렁크 구조를 생성한 다음 이름을 변경하자고 제안했습니다. 이렇게 하면 이전 리비전에서 최근 리비전과 다른 경로 이름을 사용하게 된다는 단점이 있습니다. 덤프 파일을 통한 제안된 접근 방식은 이름 변경 없이 작동합니다.
- 또한 여러 사람은 python.org에서 저장소를 호스팅할 경우 pydotorg 관리자가 감당해야 할 관리 부담에 대해 우려를 표명했습니다. 구체적인 대안으로 BerliOS가 제안되었습니다. pydotorg 관리자들은 추가 업무량에 반대하지 않았으며, 업무가 과중해질 경우 저장소를 다시 이전하는 것도 하나의 선택지입니다.
- 다양한 인증 전략이 논의되었습니다. svn+ssh의 대안으로 다음이 제안되었습니다.
- SSL 및 기본 인증을 사용하는 WebDAV를 통한 Subversion과 pydotorg에서 생성한 비밀번호를 사용자에게 우편으로 보내는 방식이 제안되었습니다. 사람들은 비밀번호를 기억하지 못하므로 디스크에 저장해야 하기 때문에 이 접근 방식을 선호하지 않았으며, 이는 보안 위험입니다.
- SSL 클라이언트 인증서를 사용하는 WebDAV를 통한 Subversion입니다. 이 방식은 작동하지만 인증 기관을 관리해야 합니다.
- 사람들은 이를 python.org에서 호스팅하는 대신 다른 곳에서 호스팅하자고 제안했습니다. 한 가지 문제는 이 대안이 무료여야 하는지 상용이어야 하는지입니다. 여러 사람은 자원봉사자들의 부담을 줄이려면 상용이어야 한다고 제안했습니다. 특히 다음과 같습니다:
- Greg Stein은 http://www.wush.net/subversion.php 을 제안했습니다. 이들은 월 90달러에 5GB를 제공하며, 월 다운로드 용량은 200GB입니다. 데이터는 RAID 드라이브에 저장되며 완전히 백업됩니다. 익명 접근과 이메일 커밋 알림이 지원됩니다. wush.net은 다음과 같은 세부 사항을 설명했습니다:
- 머신은 PowerVPS에서 호스팅되는 Virtuozzo 가상 사설 서버(VPS)가 될 것입니다.
- 기본 저장소 URL은 http://python.wush.net/svn/projectname/ 이지만, 다른 URL도 마련할 수 있습니다.
- sudo 권한과 함께 머신에 대한 SSH 로그인을 받게 됩니다.
- 이들은 우리가 호스팅하고자 하는 다양한 SVN 저장소를 관리하고 사용자 계정을 관리하기 위한 웹 인터페이스를 보유하고 있습니다. svn+ssh는 지원되겠지만, 사용자 인터페이스는 아직 이를 지원하지 않습니다.
- 오프사이트 미러링/백업의 경우, 이들은 저장소 tarball 다운로드 대신 rsync 사용을 제안합니다.
Bob Ippolito는 상업 프로젝트를 위해 약 6개월간 wush.net을 사용했으나, 서비스가 3일간 중단되었고 연락 가능한 사람도 없었으며 복구 후에도 아무런 설명이 없었기 때문에 결국 wush.net을 떠났다고 보고했습니다.
- Greg Stein은 http://www.wush.net/subversion.php 을 제안했습니다. 이들은 월 90달러에 5GB를 제공하며, 월 다운로드 용량은 200GB입니다. 데이터는 RAID 드라이브에 저장되며 완전히 백업됩니다. 익명 접근과 이메일 커밋 알림이 지원됩니다. wush.net은 다음과 같은 세부 사항을 설명했습니다:
Copyright
This document has been placed in the public domain.