Gmail SMTP를 sendmail 릴레이로 설정하기

step 1.  $> vi /etc/mail/auth/client-info

AuthInfo:smtp.gmail.com "U:UserName" "I:UserID@gmail.com" "P:UserPassword" "M:PLAIN"
AuthInfo:smtp.gmail.com:587 "U:UserName" "I:UserID@gmail.com" "P:UserPassword" "M:PLAIN"

step 2. $> makemap -r hash /etc/mail/auth/client-info.db < /etc/mail/auth/client-info

step 3. $> vi /etc/mail/sendmail.mc

define(`SMART_HOST', `smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')
define(`ESMTP_MAILER_ARGS', `TCP $h 587')

define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')

define(`CERT_DIR', `/etc/mail/certs')
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/CAcert.pem')
define(`confCRL', `CERT_DIR/CAcert.pem')
define(`confSERVER_CERT', `CERT_DIR/mycert.pem')
define(`confSERVER_KEY', `CERT_DIR/mykey.pem')
define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')
define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')

step 4. $> m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

step 5. $> service sendmail restart   (or /etc/init.d/sendmail restart)

참고 :

[인증을 위한 키를 만드는 부분]
# mkdir /etc/mail/certs
# cd /etc/mail/certs
# openssl dsaparam 1024 -out dsa1024 -out dsa1024.pem

[OpenSSL 개인키를 만드는 부분]
# openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out /etc/mail/certs/mycert.pem -keyout /etc/mail/certs/mykey.pem
# ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem

[OpenSSL 공개키를 만드는 부분]
# openssl req -x509 -new -days 3650 -key /etc/mail/certs/mykey.pem -out /etc/mail/certs/mycert.pem

출처 :

http://www.lovelgw.com/Blog/134
http://www.phinesolutions.com/sendmail-gmail-smtp-relay-howto.html

비지니스 독서법

출처 : – http://www.drchung.net/blog/905

이지현 강사님이 제안하는 전략적 독서법은 (1) Plan (2) Do (3) See, 세 단계를 통한 독서법으로 각 단계에선 다음과 같은 걸 하란다.

Plan 단계: 목표를 설정하고 독서 계획을 세움
Do 단계: 책을 읽고 지식 정리 및 실천을 함
See 단계: 성찰
각 단계에서 해야 할 일을 조금 더 자세히 살펴 보면 다음과 같다.

Plan 단계
목표 설정: 독서를 하는 궁극적 이유와 목적을 결정한다. 주로 자신의 사업이나 경력에 관한 목표가 되겠음. 3개월에서 6개월 동안 달성할 목표 같은 것. (예: 부서 매출 10% 향상)
능력 파악: 궁극적 목표 달성을 위하여 필요한 능력을 파악한다.
주제 선정: 윗 단계에서 정한 능력을 달성하기 위해 읽어야 할 책들의 카테고리 및 도서를 선정한다.
Do 단계
읽기: 책을 실제로 읽는데 질문을 하면서 읽고 (비판적 읽기), 전체적인 맥락을 파악하면서 읽고, 기억해둘 만한 부분은 발췌/기록을 하면서 읽어라.
지식, 아이디어 정리: 독서노트 같은 데 책을 읽으며 얻은 지식이나 아이디어를 잘 정리해둘 것
실천: 적어놓은 것을 실제로 실천한다. 예를 들어 커뮤니케이션에 관한 책을 읽었다면 친구들이랑 얘기를 할 때 적용해 보기 등.
See 단계
Balance: 다양한 분야를 밸런스 있게 읽고 있는지 돌아보기
Habit: 자신의 독서 습관에 문제가 없는지 돌아보기 (매일 조금씩 읽는가? 주말에 독서 시간을 확보했는가, 자투리 시간을 잘 이용하는가?
Action: 실제 실천을 잘 하고 있는가 돌아보기
Slump: 독서 슬럼프에 빠진 것 같다면 독서 슬럼프 체크리스트 확인해보기

포트 사용중인 프로세스 찾기

> netstat -ano
> tasklist /SVC /fi “PID eq 4”

Apache Module – source compile

apache source
/usr/local/src/httpd-2.2.9/modules/mappers/
/usr/local/apache/bin/apxs -aic mod_rewrite.c

Create MySQL User

자꾸 까먹고 검색하는 관계로 남겨둔다..

  1. Start mysql client: mysql -u root -p
  2. Create database: CREATE DATABASE mydatabasename;
  3. Create user: CREATE USER myuser IDENTIFIED BY 'mypassword';
  4. Give user permissions to the database: GRANT ALL ON mydatabasename.* to myuser;

copy&execute remote server – SSH

remote server and execute it via ssh, e.g.

scp /opt/myapp/deploy.sh myapp@myserver:/export/home/myapp/scripts/
ssh myapp@myserver “/export/home/myapp/scripts/deploy.sh”

The deploy.sh script launches a java application and then writes the PID to file, e.g.

java -jar /opt/myapp/myapp.jar > /opt/myapp/myapp.log &
echo $! > /var/run/myapp/myapp.pid

출처 : http://stackoverflow.com/questions/2818441/build-wont-complete-when-launching-java-from-hudson-execute-shell

Web Repository Browser

소스 코드가 변경된 부분에 대해서 Repository Browser 로 소스를
웹에서 바로 확인하거나 전버전에서 바뀐 부분을 확인할 수 있다.
대표적인 Repository Browser 로는 오픈소스 제품인 Sventon과 상용제품인 Fisheye이 있다.

프로젝트 관리 관련

프로젝트 관리 관련 – http://cafe.naver.com/tonkjsp/245

한 단계 더 업그레이드 되는 MySQL. MySQL의 다음 버전은 Memcached 기능도 가지고 있다

출처 : http://jacking.tistory.com/845


웹서핑하다가 알게된 것을 공유합니다. 다음 버전의 MySQL이 상당히 기대됩니다.

MySQL Conference & Expro 2011의 기조 강연에서 차기 버전인 MySQL 5.6과 MySQL Cluster 7.2은 지금 보다 한 단계 더 높은 강력한 성능향상과 신 기능이 들어갈 예정이라고 밝혔다.

이번 주에 MySQL 5.6의 최신 디벨로퍼 마일스톤을 릴리즈 했다. 디벨로퍼 마일스톤은 아직 QA가 남아 있지만 기능적으로는 안정된 버전이다.
성능향상, 확장성, 모니터링, 옵티마이즈 베이스의 성능 향상등을 실현하였고. 쿼리로 명시적으로 버전 선택이랑 파티션 테이블의 import, export등을 갖추고 있다.
InnoDB의 개선도 있어서 더욱 성능 향상이 있었다.
여기에다 MySQL 5.6에서 실현하려고 하는 것은 현재까지 연구실에서 개발 중이지만 SQL이 아닌 방법으로 InnoDB 스토레이징에 접근하는 방법을 제공하는 것이다. Memcached 프로토콜로 NoSQL로 접근 할 수 있게 된다. flexibility만이 아닌 더욱 고성능, 고 확장성도 실현 할 수 있다. Memcached 플러그인으로 제공한다.

SQL과 NoSQL의 인터페이스는 병렬로 제공 하기 때문에 언제라도 어느쪽이라도 접근 할 수 있다. 또한 연구에서는 패럴레이션을 사용하는 멀티스레드 Slave, 성능에 관한 다양한 정보를 저장하는 Performance_schema의 강화도 하고 있다.

MySQL 7.2에서는 조인이 고속으로
MySQL Cluster 7.2도 디벨로퍼 마일스톤으로 릴리즈 했다. 쿼리 조인 성능이 약 20배 정도 빨라졌다. 또 스키마의 유연성을 늘렸고, 512 컬럼까지 지원한다. Data Consolidation, 저장 프로시저랑 Grant 등의 설정을 중안 관리할 수도 있다.
Memcached API를 지원하여 캐쉬를 통일적으로 관리할 수 있다.
오라클은 Oracle VM에 MySQL을 집어 넣어서 바로 이용할 수 있는 Oracle VM Template for MySQL도 릴리즈 할 예정이다.

Windows판의 우선도를 높이다.
지금까지 MySQL은 Windows의 우선도는 높지 않았다. 그러나 이제부터는 우선도를 올려간다. 성능이랑 확장성뿐만이 아닌 인스톨러를 개선하고, Visual Studio랑 프레임워크등의 에코 시스템과의 연계도 강화해 간다.

더 자세한 내용은 유튜브에 공개된 세션 영상을 보세요

SVN

1. svn up
ex) svn up 파일 or 폴더 \
1. 저장소에 올라온 자신이 가지고 있는 리비전보다 높은 버젼으로 업데이트 해줍니다.
2. 다른 분들과의 충돌을 피하고 싶으시다면 작업 들어가시기전에 svn up을 받으셔야 합니다.

2. svn ci
ex) svn ci 파일 or 폴더
1. 수정한 파일을 저장소에 등록합니다. 등록한 후에는 자동으로 상위 리비전을 받습니다.

3. svn ci 옵션(-m)
ex) svn ci 파일 -m ‘이것 저것을 수정했습니다. – 김현진’;
1. 2번과 동일한 기능을 가지나 해당 내용을 바로 입력할수 있는 옵션을 제공합니다.

4. svn revert
ex) svn revert 파일 or 폴더
1. 자신이 수정한 파일을 현재 상위버젼으로 올라와있는 저장소에 것으로 바꾸는데 사용합니다.
2. 이는 rm 자신이 수정한 파일 -> svn up 한것과 같은 기능을 합니다.

5. svn lock
ex) svn lock 파일
1. lock을 걸어논 파일은 다른 개발자분들이 수정은 가능하나 svn ci 하지 못합니다, 즉 저장소에 올릴수 없습니다.
2. lock을 걸어논 상태에서 다른유저가 svn ci 시도하면 누가 잠궜다고 나옵니다.
3. lock을 걸어놓고 lock을 걸어논 사용자가 svn ci를 하게 되면 lock 은 자동으로 풀립니다.

6. svn unlock
ex) svn unlock 파일
1. lock을 해제 합니다.

7. svn log
ex ) svn log 파일명 ( 수정되어진 히스토리 내역 리비전 , 주석등을 보여줍니다 )
ex ) svn log 파일명 -r head ( 상위 리비전 번호만 보여줍니다 )
ex ) svn log 파일명 -r prev ( 상위 리비전 바로 아래 번호를 보여줍니다 )
ex ) svn log 파일명 –limit 3 ( 상위 몇개까지 보여줍니다 )
1. 어떤 개발자가 어떤 이유로 고쳤는지에 대한 로그가 나오며 리비전을 보여줍니다.

8. svn diff
ex ) svn diff 파일 ( 자신이 수정한 파일과 저장소에 올라와 있는것과 비교합니다 )
ex ) svn diff 파일 -r 비교할 리비젼 ( 비교할 리비전과 비교 )
ex ) svn diff 파일 -r prev ( 수정한것이 없다면 현재 자신에 것과 그전것과 비교 )
ex ) svn diff 파일 -r 수정한버젼:수정된버젼 ( 리비전 시점에 어떻게 변했는지 보여줍니다 )

9. svn blame
ex ) svn blame 파일 ( 한줄 한줄에 개발자가 수정한 부분을 보여줍니다 )
ex ) svn blame 파일 -r 리비전 ( 예전 버젼에 대해서도 담당하던 줄에 개발자를 찾을수 있습니다 )

10. svn merge
ex ) svn merge 파일 -r 현재버젼:수정할버젼 ( 현재버젼을 수정할 버젼으로 합칩니다 )
ex ) svn merge 파일 -c 머지할리비전

업받은뒤 코드표
[ A ] 저장소에 새로 추가된 파일을 Workspace로 받아옴
[ U ] 저장소에 새 버전이 체크인 되어 Workspace의 파일을 그 버전으로 갱신함 (Workspace 파일의 버전이 체크 아웃된 이후 변경되지 않아야 함)
[ D ] 저장소에서 해당파일이 삭제되어 Workspace에서도 삭제됨
[ G ] 여러 사람이 동일한 파일을 수정했더라도 서로 다른 부분을 변경했다면 서브버전이 그 변경들을 자동으로 합쳐준다. 자동으로 병합된 경우 (Workspace 파일의 버전이 체크 아웃된 이후 변경되었고, 저장소의 버전이 체크 아웃 당시의 버전보다 최신인 경우)
[ C ] [ G ]의 상황에서 같은 부분을 변경한 경우에 서브버전이 자동적으로 병합하지 못해, 충돌(Conflict)이 발생하였음, 사람이 해결해야 함

[-r옵션]
-r HEAD : 저장소의 가장 최신 리비전
-r BASE : 작업장의 기반 리비전, 체크아웃(or 갱신) 했을 당시의 리비전
-r COMMITTED : BASE 또는 그 이전 리비전들 중에서 해당 항목이 마지막으로 변경된 리비전
-r PREV : COMMITTED 직전 리비전
-r [#revision]:[#revision] : 해당 리비전의 범위 지정
-r [#revision] : 해당 리비전

*추가내용*
svn st -u : 업 받기전에 확인하면 좋을 듯 싶다. (업 받기전에 바뀐파일명 상태[A, U, D, G, C…]를 확인할 수 있다.)

svn 관리대상에서 제외하기 : cd ~/.subversion/

vi config
[miscellany] test.txt(파일생성) <– 내가 원하는 리버전 상태의 소스를 받을 수 있다.

svn st 옵션
status (stat, st): 작업 사본내의 파일과 디렉토리에 대한 상태를 출력합니다.
사용법: status [PATH…] 옵션이 없을 때는 네트워크 작업이 없이 작업 사본에서 수정된 내역만 출력합니다.

-p 옵션을 주면, 작업사본에서 수정된 요약 내역을 출력합니다.
-u 옵션을 주면, 작업 리비전과 서버의 업데이트 정보를 출력합니다.
-v 옵션을 주면, 모든 아이템들의 전체 정보를 보여줍니다.
출력되는 처음 여섯개의 컬럼은 각각 다음과 같은 의미를 가집니다:

첫번째 컬럼: 추가, 삭제, 변경에 대한 것을 의미합니다.
' ' 변경 없음
'A' 추가됨
'C' 충돌함
'D' 삭제됨
'I' 무시됨
'M' 수정됨
'R' 치환됨
'X' 아이템은 svn:externals 로 지정된 외부 관리대상입니다.
'?' 아이템은 버전관리 대상이 아닙니다.
'!' 아이템이 누락되었습니다. (svn 명령이 아닌 것으로 삭제되었음)
'~' 다른 종류의 아이템에 의해 제한된 버전관리 대상

두번째 컬럼: 파일이나 디렉토리의 속성 변경 사항을 의미합니다.
' ' 변경 없음
'C' 충돌함
'M' 수정됨

세번째컬럼: 작업 사본 디렉토리의 잠김여부를 나타냅니다.
' ' 잠기지 않음
'L' 잠김

네번째컬럼: 과거의 커밋로그를 포함하도록 스케쥴링하는지를 나타냅니다..
' ' 과거의 커밋로그 포함하지 않음
'+' 과거의 커밋로그 포함함

다섯번째컬럼: 아이템이 상위 경로에 대하여 전환(switch)되었는지를 나타냅니다.
' ' 기본
'S' 전환됨

여섯번째컬럼: 저장소 잠금 토큰
(-u 옵션 없이)
' ' 잠금 토큰이 없습니다.
'K' 잠금 토큰이 있습니다.
(-u 옵션을 주고)
' ' 저장소가 잠기지 않았으며, 잠금 토큰도 없습니다.
'K' 저장소가 잠기었고, 잠금 토큰이 존재합니다.
'O' 저장소가 잠기었고, 다른 작업 사본이 잠금토큰을 가지고 있습니다.
'T' 저장소가 잠기었고, 존재해야할 잠금토큰이 사라졌습니다.
'B' 저장소가 잠기지 않았으며, 존재하는 잠금토큰이 깨진상태입니다.

업데이트 정보는 여덟번째 컬럼에 나타납니다.(-u 옵션):
'*' 새 리비전이 저장소에 있습니다.
' ' 작업사본은 최신의 것입니다.

나머지 필드는 그 값에 따라 공백으로 분리되는 가변길이를 가집니다:
작업 리비전(옵션 -u 또는 -v)
마지막 커밋 리비전과 작성자(옵션 -v)
작업 사본의 경로또한 마지막 필드입니다. 그리고 그 경로에는 공백을 포함할 수 있습니다.

출력 예제:
svn status wc
M wc/bar.c
A + wc/qax.c

svn status -u wc
M 965 wc/bar.c
* 965 wc/foo.c
A + 965 wc/qax.c
Head revision: 981

svn status –show-updates –verbose wc
M 965 938 kfogel wc/bar.c
* 965 922 sussman wc/foo.c
A + 965 687 joe wc/qax.c
965 687 joe wc/zig.c
Status against revision: 981

옵션:
-u [–show-updates] : 업데이트 정보를 출력합니다.
-v [—verbose] : 기타 정보를 출력합니다.
-N [–non-recursive] : obsolete; try –depth=files or –depth=immediates
–depth ARG : 적용할 단계를 제한합니다. 가능한 인자 ('empty', 'files', 'immediates', or 'infinity')
-q [–quiet] : 아무것도 출력하지 않거나, 요약 정보만 출력합니다
–no-ignore : svn:ignore로 지정한 것과 디폴트로 무시하는 파일들을 무시하지 않습니다
–incremental : 덧붙이기 쉬운 형태로 출력합니다.
–xml : XML 포맷으로 출력합니다
–ignore-externals : 외부 모듈(svn:externals로 지정된)은 무시합니다
–changelist ARG : 변경 목록 ARG에만 수행합니다
[aliases: –cl]

글로벌 옵션:
–username ARG : arg를 접속에 필요한 사용자 ID로 사용합니다.
–password ARG : arg를 접속에 필요한 패스워드로 사용합니다.
–no-auth-cache : 인증 정보를 캐시에 저장하지 않습니다.
–non-interactive : 대화식 사용자 입력을 기다리지 않습니다
–config-dir ARG : arg로 지정된 디렉토리에서 사용자 구성화일을 읽습니다

출처: http://blog.naver.com/salmonpeel/150051710792
출처: http://blog.naver.com/myefhc?Redirect=Log&logNo=100121222061
출처: http://injmifdswcvr.dude.co.kr/tc/dude/entry/SVN