Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

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 저장소를 옮기려면 다음 단계를 실행해야 합니다. 각 단계는 이어지는 절에서 자세히 설명합니다.

  1. 현재 모든 커미터의 SSH 키를 커밋 메시지에 표시될 사용자 이름과 함께 수집합니다.
  2. 이전을 시작할 때 SourceForge의 저장소가 폐쇄되었음을 공지합니다.
  3. 마지막 커밋으로부터 24시간 후에 CVS 저장소를 내려받습니다.
  4. CVS 저장소를 Subversion 저장소로 변환합니다.
  5. 커미터에게는 쓰기 권한을, 익명 사용자에게는 읽기 전용 권한을 부여하여 저장소를 공개합니다.
  6. 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 저장소는 다음 위치에서 다운로드할 수 있습니다.

이 tarball은 하루에 한 번만 생성되므로, 저장소를 동결한 뒤 어느 정도 시간이 지나야 tarball을 가져올 수 있습니다. python-commits 메일링 리스트에 기록된 마지막 커밋이 실제로 tarball에 포함되어 있는지 확인해야 합니다.

변환이 끝난 뒤, 변환된 CVS tarball은 www.python.org/archive/python-cvsroot-<date>.tar.bz2에 영구히 보관해야 합니다.

CVS 저장소 변환

Python CVS 저장소에는 distutils와 python이라는 두 모듈이 있습니다. python 모듈은 다시 dist와 nondist로 나뉘며, dist에는 src(Python 코드 본체)만 들어 있습니다. nondist에는 여러 하위 디렉터리가 들어 있습니다.

더 짧은 URL을 얻기 위해 Subversion 저장소에서 <project>/{trunk,tags,branches}(트렁크, 태그, 브랜치) 구조에 따라 재구성해야 합니다. nondist 디렉터리마다 프로젝트를 하나씩 만들고, src(python이라는 이름으로)와 distutils에 대해서도 프로젝트를 만듭니다. 저장소 재구성은 아래와 같이 CVS 트리에서 하는 것이 가장 좋습니다.

저장소 형식으로는 fsfs 백엔드를 사용해야 합니다(Subversion 1.1이 필요합니다). fsfs 백엔드는 dump 명령을 실행하지 않고도 저장소를 증분 백업할 수 있어 백업하기가 더 쉽다는 장점이 있습니다.

변환은 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으로 project/trunk 구조를 만든 뒤 이름을 변경하자고 제안했습니다. 이 방법은 오래된 리비전이 최근 리비전과 다른 경로 이름을 사용하게 된다는 단점이 있습니다. 제안된 덤프 파일 방식은 이름 변경 없이 동작합니다.
  • 또한 여러 사람이 python.org에서 저장소를 호스팅하면 pydotorg 관리자들에게 관리 부담이 생긴다는 우려를 표했습니다. 구체적인 대안으로 BerliOS가 제안되었습니다. pydotorg 관리자들 자신은 추가 업무량에 반대하지 않았습니다. 관리자들의 업무가 과중해지면 저장소를 다시 이전하는 것도 하나의 선택지입니다.
  • 여러 인증 방식이 논의되었습니다. svn+ssh의 대안으로 다음이 제안되었습니다.
    • SSL과 기본 인증을 사용하는 WebDAV 기반 Subversion으로, pydotorg에서 생성한 비밀번호를 사용자에게 메일로 보내는 방식입니다. 사람들은 (비밀번호를 기억할 수 없으므로) 비밀번호를 디스크에 저장해야 한다는 이유로 이 방식을 좋아하지 않았습니다. 이는 보안상 위험합니다.
    • SSL 클라이언트 인증서를 사용하는 WebDAV 기반 Subversion입니다. 이 방식은 동작하겠지만, 인증 기관(certificate authority, 인증서 발급 기관)을 직접 관리해야 합니다.
  • 사람들은 python.org에서 호스팅하는 대신 다른 곳에서 호스팅하자고 제안했습니다. 한 가지 쟁점은 이 대안이 무료여야 하는지 상용이어야 하는지입니다. 여러 사람은 자원봉사자들의 부담을 줄이기 위해 상용인 편이 낫다고 제안했습니다. 구체적으로는 다음과 같습니다.
    • Greg Stein은 http://www.wush.net/subversion.php 를 제안했습니다. 이 업체는 월 90달러에 5 GB를 제공하며, 월 200 GB의 다운로드가 포함됩니다. 데이터는 RAID 드라이브에 저장되며 전체가 백업됩니다. 익명 접근과 이메일 커밋 알림이 지원됩니다. wush.net은 다음과 같은 세부 사항을 추가로 설명했습니다:
      • 머신은 PowerVPS에서 호스팅되는 Virtuozzo 가상 사설 서버(VPS)가 될 것입니다.
      • 기본 저장소 URL은 http://python.wush.net/svn/projectname/ 이 되지만, 다른 어떤 URL로도 조정할 수 있습니다.
      • 우리는 sudo 권한과 함께 머신에 SSH로 로그인할 수 있게 됩니다.
      • 이 업체는 우리가 호스팅하려는 여러 SVN 저장소를 관리하고 사용자 계정을 관리하기 위한 웹 인터페이스를 갖추고 있습니다. svn+ssh도 지원되지만, 사용자 인터페이스는 아직 이를 지원하지 않습니다.
      • 외부 미러링/백업을 위해서는 저장소 tarball을 다운로드하는 대신 rsync를 사용할 것을 권장합니다.

      Bob Ippolito는 자신들이 상업 프로젝트에 wush.net을 약 6개월간 사용했으나, 서비스가 사흘 동안 중단된 동안 아무와도 연락이 닿지 않았고 서비스가 복구된 뒤에도 아무런 설명이 없어서 wush.net을 떠났다고 보고했습니다.