Windows 에서 포트 포워딩 기능 사용하기.

VMWare등을 사용하는데, Bridged 모드로 설정하지 않고 (IP 여유가 없거나, 설정하기 귀찮을때..)

기본값인 NAT 모드로 설정해두고 아래 명령으로 하시면 됩니다.


CMD 창을 관리자 모드로 열고,


* Forwarding 설정


> netsh interface portproxy add v4tov4 listenport=80 listenaddress=192.168.0.100 connectport=80 connectaddress=192.168.229.100

 


* Forwarding 해제


> netsh interface portproxy delete v4tov4 listenport=80 listenaddress=192.168.0.100

 


* 설명

    - listenport: 내 PC에서 Listen할 Port

    - listenaddress: 내 PC에서 Listen할 IP

    - connectport: VM에 포워딩할 포트

    - connectaddress: VM의 IP

리눅스 배포판별 docker 설치 방법

Docker 설치

공식 문서: http://docs.docker.com/installation/

  • 64 bit 기준으로 테스트 해봤습니다.


Red Hat Enterprise 6.2

공식 문서에는 rhel 7 부터 지원하지만, 아래 방법으로 설치 가능

  • yum 저장소를 centos 로 수정.
rpm -ivh  http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

vi /etc/yum.repos.d/epel.repo
# cd /etc/yum.repos.d
# cp rhel-debuginfo.repo rhel-debuginfo.repo.bak
# vim rhel-debuginfo.repo

baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
  • update
yum repolist
yum update
  • Disable selinux & reboot
vi /etc/selinux/config
SELINUX=disabled

reboot now
  • 인증키 생성
rpm --import http://mirror.centos.org/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6
  • update
yum install libdevmapper.so.1.02
  • docker 설치
yum -y install docker-io
reboot now


Cent OS 6.6

yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install docker-io


Ubuntu 14.04

apt-get update
apt-get upgrade
apt-get install -y less vim openssh-server curl

apt-get install docker.io
    or
curl -sSL https://get.docker.com/ | sh


Debian 8

공식 문서대로는 설치가 안됨.

apt-get update
apt-get upgrade
apt-get install -y less vim openssh-server curl
wget http://ftp.kr.debian.org/debian/pool/main/a/apparmor/libapparmor1_2.9.0-3_amd64.deb
dpkg -i libapparmor1_2.9.0-3_amd64.deb
wget http://ftp.kr.debian.org/debian/pool/main/a/apt/libapt-pkg4.12_1.0.9.8.1_amd64.deb
dpkg -i libapt-pkg4.12_1.0.9.8.1_amd64.deb
wget http://ftp.kr.debian.org/debian/pool/main/a/apt/apt-transport-https_1.0.9.8.1_amd64.deb
dpkg -i apt-transport-https_1.0.9.8.1_amd64.deb
curl -sSL https://get.docker.com/ | sh



최적의 makrdown editor는 sublime text

OSX에서 다시 Windows환경으로 넘어오면서, makrdown editor를 찾아 해맸다.

결론은 OS 구분없이 Sublime Text 였다.

[Sublime Text 3] + [MarkdownEditing] 플러그인 + [OmniMarkdownPreviewer] 플러그인 + [Table Editor] 플러그인 조합이다.

문제는 Windows 환경에선 한글 입력창이 이질감이 느껴진다는 것인데,

그것도 [IMESupport] 플러그인으로 완벽하진 않지만 쓸만해 졌다.

하지만, OS 차이로 일부 단축키가 바뀐건 아직 적응이 잘 안된다.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
2017-04-04

[Visual Studio Code] + [Preview] 플러그인 조합을 사용해보고 있는데, 이것도 좋다.


문자열 치환

  • 하나의 파일에서 치환

    • vi 사용:%s/old/new/g
    • sed 사용sed -i 's/old/new/g' ./file.html
  • 여러 파일을 한꺼번에 치환find ./ -name "*.html" -exec sed -i 's/old/new/g' {} \;
  • 특정 파일만 제외하고 치환find . ! \( -name '*.jar' -prune \) -exec sed -i 's/old/new/g' {} \;


shell script로 구현하는 URL 상태 체크

Shell Script로 특정 URL의 상태를 체크하고자 합니다.


curl을 이용하면 간단 하네요.

curl은 결과를 exit code로 리턴 합니다.

exit codes list는 아래 man page를 참고하세요.

http://curl.haxx.se/docs/manpage.html )


#! /usr/bin/sh

function check {
     if [ $? -ne 0 ] ; then
         echo "Error occurred getting URL $1:"
         if [ $? -eq 6 ]; then
             echo "Unable to resolve host"
         fi
         if [$? -eq 7 ]; then
             echo "Unable to connect to host"
         fi
         exit 1
     fi

}
curl -s -o "/dev/null" $1
check;


[ 출처 ]

http://answers.google.com/answers/threadview/id/276934.html

shell script로 구현하는 multi tail


multi tail 유틸은 이미 있습니다.


http://www.vanheusden.com/multitail/


하지만, 설치를 해야 하죠


간단하게 shell script로 구현 하는 방법이 있어서 소개 합니다.



$ vi multitail.sh

#!/bin/ksh

function sig_int
{
   echo 'sig_int'
   kill `jobs -p`
}

for file in "$@"
do
  tail -f $file &
done
trap 'sig_int' 2

wait


이상입니다.

솔라리스 메일 전체 삭제

솔라리스에서 메일 전체 삭제 벙법.

콘솔에서 아래와 같이 입력하면 된다.


$ printf "d*q"|mailx -N


[출처] 

http://www.unix.com/unix-dummies-questions-answers/38598-delete-all-mails-solaris.html

CVS Commit 로그를 남겨보자

-. 요구사항 파악 및 설계

적용 패키지 작성을 위해 수정된 파일 목록을 추출 할 방법을 찾아 보기로 했다.
업무 때문에 소스 관리를 CVS 로 하고 있다. CVS의 단점은 개별 파일이력은 확인 할 수 있는데, 
수정된 파일 목록을 뽑기가 쉽지 않다는 것이다.

구글링을 해보니 CVS에서 Commit 시점에 뭔가 처리할 수 있다는 것을 알았다.

먼저, CVS 서버에 접속해서 저장소의 CVSROOT 디렉토리를 보자

-rwxrwxr-- 1 cvs cvs       544  4월 22 09:23 checkoutlist

-rwxrwxr-- 1 cvs cvs       694  3월 21  2009 checkoutlist,v

-rwxrwxr-- 1 cvs cvs       882  4월 26 16:03 commitinfo

-rwxrwxr-- 1 cvs cvs       959  3월 21  2009 commitinfo,v

-rwxrwxr-- 1 cvs cvs       993  3월 21  2009 config

-rwxrwxr-- 1 cvs cvs      1192  3월 21  2009 config,v

-rwxrwxr-- 1 cvs cvs       602  2월  8 16:32 cvswrappers

-rwxrwxr-- 1 cvs cvs       801  3월 21  2009 cvswrappers,v

-rwxrwxr-- 1 cvs cvs      1025  3월 21  2009 editinfo

-rwxrwxr-- 1 cvs cvs      1224  3월 21  2009 editinfo,v

-rwxrwxr-- 1 cvs cvs 292081967  4월 29 18:14 history

-rwxrwxr-- 1 cvs cvs      1245  4월 21 11:32 loginfo

-rwxrwxr-- 1 cvs cvs      1367  3월 21  2009 loginfo,v

-rwxrwxr-- 1 cvs cvs      1151  3월 21  2009 modules

-rwxrwxr-- 1 cvs cvs      1350  3월 21  2009 modules,v

-rwxrwxr-- 1 cvs cvs       564  3월 21  2009 notify

-rwxrwxr-- 1 cvs cvs       763  3월 21  2009 notify,v

-rwxrwxr-- 1 cvs cvs       640  4월 25 12:43 passwd

-rwxrwxr-- 1 cvs cvs       649  3월 21  2009 rcsinfo

-rwxrwxr-- 1 cvs cvs       848  3월 21  2009 rcsinfo,v

-rwxrwxr-- 1 cvs cvs       879  3월 21  2009 taginfo

-rwxrwxr-- 1 cvs cvs      1078  3월 21  2009 taginfo,v

-rwxrwxrw- 1 cvs cvs       187 11월 10 17:15 val-tags

-rwxrwxr-- 1 cvs cvs      1026  3월 21  2009 verifymsg

-rwxrwxr-- 1 cvs cvs      1225  3월 21  2009 verifymsg,v


위와 같은 파일들을 볼 수 있는데.. 
여기서 commitinfo 란 파일이 CVS에서 Commit 하기 바로전에 실행되는 파일이다.

방향은 정해졌다. 
작업 구성은 아래와 같은 순서로 하기로 했다.

     1. CVS가 Commit 되는 시점에 파일명을 DB에 저장한다.
         -> CVSROOT/commitinfo에 등록할 쉘 스크립트를 작성.
     2.  저장된 DB를 조회할 간단한 WEB Page 제작
         -> 평소 관심을 갖고 있던, jQuery를 이용.

[ 1. CVS가 Commit 되는 시점에 파일명을 DB에 저장한다 ]

commitinfo 파일에 아래와 같이 내용을 추가 한다.

$ vi CVSROOT/commitinfo 

ALL /home/cvs/myproject/CVSROOT/cvscommitlog.sh 


DB에 테이블을 생성 한다.

CREATE TABLE CVS_COMMIT
(
   SEQ              NUMBER(10) NOT NULL,
   USERID           VARCHAR2(20) NOT NULL,
   REG_DATE         DATE DEFAULT SYSDATE,
   PROJECT          VARCHAR2(50) NOT NULL,
   FILENAME         VARCHAR2(500) NOT NULL
);

* index는 REG_DATE, TO_CHAR(reg_date, 'YYYY/MM/DDHH24:MI'), USERID, PROJECT 를 걸었다.

commitinfo 파일이 실행할 쉘스크립트를 작성한다.

#!/bin/sh
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=ORACLE_SID
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_OWNER=oracle
export LANG=c
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib;

DATE=`date "+%Y-%m-%d %H:%M:%S"`
DT=`date "+%Y%m%d"`
LOG_FILE="/home/cvs/cvs_log/commit.$DT.log"
DIR=$1
USER=$USER
PROJECT=`echo $DIR | cut -d/ -f4`
#(echo ""; id;) >> $LOG_FILE
shift
for file in $*
do
    echo "$PROJECT, $USER, $DATE, $DIR/$file" >> $LOG_FILE
        result=`$ORACLE_HOME/bin/sqlplus oracle_user/oracle_pwd@oracledb <<EOF 
        INSERT INTO CVS_COMMIT 
        VALUES ( (SELECT NVL(MAX(SEQ), 0) +1 FROM CVS_COMMIT), 
                       '$USER', TO_DATE('$DATE', 'YYYY-MM-DD hh24:mi:ss'), 
                       '$PROJECT', '$DIR/$file');
        COMMIT;
        EOF
        `
done



[ 2.  저장된 DB를 조회할 간단한 WEB Page 제작 ]
jsp 파일 하나와 html파일 하나로 이루어졌고, jQuery와 JSON을 이용 했다.
DATE Picker는 jQuery Plugin 중에 하나를 이용했다.

html 내용 보기


jsp 내용 보기



iTunes 없이 iPhone에 음악 전송


나같은 경우 MacBook, 업무용 Notebook, 집 Desktop 이렇게 3개의 컴퓨터를 사용하고 있다.

MacBook에는 주소록과 사진, 집 Desktop에는 동영상, 업무용 Notebook에는 음악들을 
iPhone과 동기화 하고 싶은데, 이런xx!! iPhone은 하나의 iTunes에만 동기화가 가능하다.
( 시도 했다가, iPhone의 음악과 Apps를 몽창 말아 먹었다 ㅡㅡ; )

아직은 iTunes에 적응을 못해서 인지, 불편하기만 하다.

웹 서핑중 iTunes 없이 iPhone에 음악을 전송할 수 있는 어플이 있어서 소개 한다.


CopyTransManager라는 프로그램으로 무료다!

설치시 기본언어로 설치하면, 한글도 지원된다.

일단 업무용 Notebook을 이용하여, 앨범 생성도 해보고, 음악도 전송하여 봤는데.. 잘 된다. ^^
( iPhone 버전 4.1(8B117), iTunes 버전 10.0.1.22, CopyTransManager(Free) 버전 v0.924 )

웹을 통해 사용기를 훑어 보니, 이 어플을 사용했다가 iPhone을 초기화 했다는 글들이 보이는 걸로 봐서는 아직은 불안한 어플인것 같기도 하다. 



: no such repository

cygwin은 이제 필수 설치 툴이 되어 버렸다.

업무를 하면서 자연 스럽게 cvs, cygwin, Eclipse 조합을 사용하게 되었는데,
Eclipse에서 cvs로 프로젝트를 내려 받은 것은 cygwin에서 cvs가 정상적으로 동작하지 않았다.

로긴 시도를 하면 아래와 같이 에러가 발생하는 것이다.
newtype@newtype-PC ~/test
$ cvs login
Logging in to :pserver:newtype@127.0.0.1:2401/project/test
CVS password:
: no such repository

에러 발생 이유에 대해 구글링을 해보니
CVS를 내려 받을때 생기는 세가지 파일 Entries, Root, Repository 들이
Unix 형식이 아닌, Windows 형식으로 생성되기 때문이란다.

cygwin에서 아래와 명령을 내리면 간단히 해결된다.
newtype@newtype-PC ~
$ find . \( -name Entries -o -name Root -o -name Repository \) -exec dos2unix {} \;

명령을 내리면 현재 디렉토리 및 모든 서브 디렉토리를 검색하여 CVS 관련 3가지 파일을 Unix 형식으로 바꾸어 준다. (정확히 말하자면 Windows 형식의 개행문자 "\r\n"을 Unix형식의 개행문자 "\n"으로 치환 해준다)

이제, cygwin cvs에서도 정상적으로 로긴이 되고,
Eclipse 에서도 아무런 부작용없이 정상적으로 cvs 관련 명령을 사용할 수 있다.