2011년 11월 28일 월요일

SVN 저장소의 디렉토리 배치

SVN 저장소의 디렉토리 배치

출처는 짬뽕이라 원작자분이 요청하시면 바로 출처올리겠습니다.
Versioning
In this article I have followed Major.Minor.Build.Revision versioning practice which is very standard, details of it are as under:
In this version number is physically represented as a four-part string with the following format:
<major>.<minor>.<build>.<revision>
For example, version 1.5.60204.0 indicates 1 as the major version, 5 as the minor version, 60204 as the build number, and 0 as the revision number.
  • Major: Major releases introduce major new technologies and changes that render previous production releases obsolete.
  • Minor: Minor releases depict feature level enhancements. Addition of features between releases result in incremented minor release.
  • Build: This is auto-generated number, assigned for each build on a day basis. It has YMMDD format, So Feb 04th 2006 shall be 60204.
  • Note: Build number for revisions (read bug-fixes to production releases) shall remain same as originally released in production.
  • Revision: This is reset to zero, for each new major/minor version released. For all later bug-fixes, patches to releases that reach production, this number shall sequentially increment.



SVN 사용중 branche 나 tag 가 필요해서 정리하다가, Subversion-HOWTO 에서 해당 내용만 발췌합니다.

저장소에 바로 소스를 넣어 프로젝트를 진행 할 수 있습니다. 그렇지만 버전 관리 시스템에서 권장하는 디렉토리 배치 방법이 있습니다.
-- http://svn.samplerepository.org/svn/sample
+--+---+- branches
   |   +--+- dav-mirror
   |   |  |--- src
   |   |  |--- doc
   |   |  +--- Makefile
   |   |
   |   +--- svn-push
   |   +--- svnserve-thread-pools
   |
   +---+- tags
   |   +--- 0.10
   |   +--+- 0.10.1
   |   |  |--- src
   |   |  |--- doc
   |   |  +--- Makefile
   |   |
   |   +--- 0.20
   |   +--- 0.30
   |   +--- 0.50
   |   +--- 1.01
   |
   +---+- trunk
       |--- src
       |--- doc
       +--- Makefile


위 에 보이는 구조는 보통 자주 사용되는 디렉토리 구조입니다. 저장소 디렉토리 아래 branches, tags, trunk 라는 3개의 디렉토리가 있습니다. 이 디렉토리들은 각각의 용도가 있습니다. CVS는 branch와 tag를 위한 명령이 따로 존재 하지만. Subversion의 경우 명령이 있긴 하지만 단순한 디렉토리 복사와 같은 효과를 냅니다.

trunk : 단어 자체의 뜻은 본체 부분, 나무줄기, 몸통 등 입니다. 프로젝트에서 가장 중심이 되는 디렉토리입니다. 모든 프로그램 개발 작업은 trunk 디렉토리에서 이루어집니다. 그래서 위의 구조에서 trunk 디렉토리 아래에는 바로 소스들의 파일과 디렉토리가 들어가게 됩니다.

branches : 나무줄기(trunk)에서 뻗어져 나온 나무 가지를 뜻합니다. trunk 디렉토리에서 프로그램을 개발하다 보면 큰 프로젝트에서 또 다른 작은 분류로 빼서 따로 개발해야 할 경우가 생깁니다. 프로젝트안의 작은 프로젝트라고 생각하면 됩니다. branches 디렉토리 안에 또 다른 디렉토리를 두어 그 안에서 개발하게 됩니다.

tags : tag는 꼬리표라는 뜻을 가지고 있습니다. 이 디렉토리는 프로그램을 개발하면서 정기적으로 릴리즈를 할 때 0.1, 0.2, 1.0 하는 식으로 버전을 붙여 발표하게 되는데 그때그때 발표한 소스를 따로 저장하는 공간입니다. 위에서 보면 tags 디렉토리 아래에는 버전명으로 디렉토리가 만들어져 있습니다.

SVN 설치법(centos)

1. 설치.
1-1 yum으로 설치
# yum install subversion


2. Repository 생성.
2 -1  Root 생성.
# mkdir /home/svn
# cd /home/svn
#svnadmin create --fs-type fsfs 폴더명

만든 해당 폴더에 들어가면 기본 하위 폴더들이 생성 되었다.

2-2 설정하기.

svnserve.conf - /home/svn/폴더명/conf/svnserve.conf

[general]
anon-access=none
auth-access=write
password-db=passwd
authz-db=authz
realm=Test Repository

anonymous acces 불가. 인증 방식은 passwd . 인증한 사람만 write 권한.

passwd - /home/svn/폴더명/conf/passwd

사용자 설정.
[users]:
admin = admin


authz - /home/svn/폴더명/conf/authz
#[groups]
# harry_and_sally = harry,sally

[폴더명:/]
admin = rw


3 svnserve 로 서버 실행시키기.

# svnserve -d -r /home/svn --listen-port 6548
만일 에러가 날시 kill한다.

기본포트는 3690 이다.
외부에서 저븐 가능하도록 6548 을 열어두자.
iptable 을 사용해도 되고 X Winodw 프로그램을 사용해도 된다.
vi /etc/sysconfig/iptables
4. 자동 실행하게 하기(Option)
yum 으로 자동 설치시 /etc/rc.d/init.d/subversion 이 생기지 않는다.

파일 내용 보기

#OPTIONS=
OPTIONS="--threads --root /home/svn"

여기에 포트 번경을 하고 싶으면 위 명령어를 추가 하면 되고, 맞게 수정하여 사용하면 된다.


5. trunk , branches, tags 디렉토리 만들기.
#export SVN_EDITOR=/usr/bin/vim
#svn mkdir svn://아이피혹은도메인/repos/trunk
    (☞ 여기서 :q! 입력 → 엔터)
Log message unchanged or not specified
a)bort, c)ontinue, e)dit
    (☞ 여기서 c 입력 → 엔터)
#svn mkdir svn://아이피혹은도메인/repos/branches
#svn mkdir svn://아이피혹은도메인/repos/tags
#svn list svn://아이피혹은도메인/repos

export  SVN_DEITOR 은 .bash_profile 을 수정해서 넣어도 됩니다.

2011년 8월 4일 목요일

php 메일 발송 안될때(org,edu)

PHP의 mail() 함수를 통해 메일발송이 안될때의 해결방법  ( 출처: 패스코리아넷 passkorea.net/Support/FAQ)
웹메일에서 보낸메일은 잘 가는데 PHP mail() 함수를 통해 발송시 문제가 된다면
다음처럼 발송프로그램이나 발송옵션에 따른 문제일 확률이 높습니다.

발송후 아래처럼 발송로그를 확인해보시면 '보낸사람주소'가 엉뚱하게 붙어나갈 것 입니다.
Nmail PHP) tail -n30 /var/MailRoot/logs/smail-200609060000
sendmail) tail -n30 /var/log/maillog

예를 들어 'root@localhost.localdomain' 처럼 붙어나간다면 대형포털이나 스팸차단솔루션을 사용중인 메일서버에서
발송서버의 IP와 도메인(localhost.localdomain)이 일치하지 않아 차단될 가능성이 높습니다.
이 문제가 아니더라도 '보낸사람주소(회신주소)'가 제대로 지정되지 않을 경우
문제가 발생하는 원인에 대한 정확한 에러메세지를 메일로 받아볼 수 없는 문제가 있습니다.

따라서 아래 내용을 참고하셔서 서버설정이나 메일발송프로그램을 수정하셔야 합니다.

-. 메일을 보낼때 보낸사람주소를 따로 지정해도 'root@localhost.localdomain' 등의 엉뚱한 주소로 붙어나가는 경우의 해결방법.

    sample source)
        $header = "Return-Path: <$mail_from>\n";
        $header .= "From: $fname <$mail_from>\n";
        mail($to, $subject, $body, $header);

    A) 메일발송 소스를 수정하는 방법.
        $header = "Return-Path: <$mail_from>\n";
        $header .= "From: $fname <$mail_from>\n";
        mail($to, $subject, $body, $header);
        =>
        mail($to, $subject, $body, $header, '-f'.$mail_from);

    B) php.ini 를 수정하는 방법.(Linux)
        ; PHP mail() 함수에서 발송하는 메일에는 모두 적용됨. 수정후 아파치 재시작해야함.
        ;sendmail_path =
        =>
        sendmail_path = "/usr/sbin/sendmail -t -i -fpostmaster@domain.com"

    C) php.ini 를 수정하는 방법.(Windows)
        ; 모든 메일발송자가 고정적으로 지정됨. 수정후 아파치 재시작해야함.
        ;sendmail_from = me@example.com
        =>
        sendmail_from = postmaster@domain.com

php form 값 넘길때 일회용 토큰 보안

<?php
session_start();
?>
<html>
<head>
<title>SQL Injection Test</title>
</head>
<body>
<?php

echo 'Session token=' . $_SESSION['token'];
echo '<br />';
echo 'Token from form=' . $_POST['token'];
echo '<br />';

if ($_SESSION['token'] == $_POST['token']) {
    /* 훌륭하다. 정상으로 돌아간다. 다른 토큰을 만들자. */

} else {
    echo '<h1>Go away!</h1>';
}
$token = md5(uniqid(rand(), true)); 
$_SESSION['token'] = $token; 
?>
<form id="myFrom" action="<?php echo $_SERVER['PHP_SELF']; ?>"
    method="post">
<div><input type="hidden" name="token" value="<?php echo $token; ?>" />
<input type="text" name="myText"
    value="<?php echo(isset($_POST['myText']) ? $_POST['myText'] : ''); ?>" />
<input type="submit" value="Save" name="submit" /></div>
</form>
</body>
</html>


2011년 7월 26일 화요일

처음 가졌던 열정 그대로...

처음 가졌던 열정 그대로
내가 원하는 목표까지 가겠다.
방문하시는 여러분 격려 부탁드리겠습니다.

Fun Programming!!!!!

팔로어