카테고리 보관물: Tools & Tips

WARNING: terminal is not fully functional

mac에서 git관련 command나 man 명령어와 같이 more/less를 사용하는 실행을 할 때 다음과 같은 경고가 출력되는 경우가 있다.

WARNING: terminal is not fully functional
- (press RETURN)

max os x의 경우 $TERM값이 기본적으로 xterm-256color로 설정되는데, Xcode를 설치 할 때 terminal관련 정보가 삭제되서 이 문제가 발생한다고 한다. 간단하게는 터미널 -> 환경설정 -> 고급에서 ‘터미널을 다음과 같이 선언’ 항목을 xterm-256 color가 아닌 다른 값으로 변경해 주면 쉽게 해결 할 수 있다. (터미널 종료 후 재실행)

또는 solaris나 linux와 같은 다른 시스템에 있는 xterm-256color를 mac os x로 복사해서도 사용할 수 있다. 가령 linux의 경우 term-256color file이 /usr/share/terminfo/x/xterm-256color에 위치 하므로 ssh 접속을 할 수 있다면 다음 command로 mac os x 의 /usr/share/terminfo/78/ 아래로 복사해 올 수 있다.

$>sudo scp 계정@리눅스:/usr/share/terminfo/x/xterm-256color /usr/share/terminfo/78/

 

썬더버드에서 아웃룩으로 돌아가기

메일 클라이언트를 3년동안 써왔던 썬더버드에서 다시 MS아웃룩으로 되돌려야 했다.

  • 붙여넣기한 excel이 제대로 보이지 않는다.
  • MS 아웃룩에서 직접 편집한 이미지들이 제대로 보이지 않는다.
  • 회사에서 ‘공식적으로’ 지원되는 프로그램이 아니다.

마지막 이유는 참 웃긴데, 메일에 관련된 문제가 있어서 IT부서에 연락하면 늘 듣는 말이 이거다. 무슨 대응 메뉴얼 같은게 있는 걸까?

여쨌든 3년간 쌓아 놓은 메일들을 썬더버드로 옮겨야 하는데, 썬더버드에서 지원하는 eml 형식을 MS아웃룩에서는 더이상 지원하지 않기 때문에 직접 옮길 수 있는 방법이 없다. 그래서 IMAPSize로 썬더버드의 mbox 형식메일들을 eml로 변환하고, 그것들을 eml 형식을 지원하는 Windows Live Mail로 변환한 다음에 export해서 MS아웃룩으로 가져오는 아주 아주 번거로운 쓰리쿠션을 해야한다.

  1. IMAPSize
    : 썬더버드의 mbox 형식 메일들을 eml로 변경해 준다. 하지만 다국어 지원에 관련된 문제 때문인지 일부 메일들은 제대로 변환하지 못했다.
  2. Windows Live Mail
    :  eml 형식을 지원하는 Outlook Express를 windows7에는 설치할 수 없다. 그래서 Windows Live Essential에 포함되어 있는 Windows Live Mail을 이용한다. 주의해야 할 점은 MSN을 포함한 모든 Windows Live package들이 최신버전으로 업데이트 된다는 것이다. MSN live의 최신 버전은 경우 windows7에서 사용할 때 로그인을 하지 못하는 문제가 있는데, 이 프로그램을 사용한 후에 다시 예전 버전의 MSN live 메신져로 되돌려야 해결된다.

리눅스와 MS윈도를 번갈아 가면서 쓰는일이 많았기 때문에 MS윈도에 만들어 놓은 썬더버드 폴더로 리눅스에서 symbolic link를 걸어 두고 양쪽에서 하나의 메일함 폴더를 사용하는 게 참 편했는데 더 이상 그렇게 하지 못하는 점이 아쉽다.

Repo mirroring

한국과 미국 처럼 거리상으로 멀리 떨어져 있는 경우, 한쪽에서 source를 sync하기 위해서는 시간이 너무 많이 걸린다. Mirror를 설정하고 주기적으로 source를 sync 해 오도록 하면 시간과 load를 줄일 수 있다. 다음은 Ubuntu 10.04 LTS 기준으로한 repo mirror server 설정방법에 대해 설명한다.

1. Git daemon 설정
: xinetd를 설치하고 git-daemon을 설정한다.

$> sudo apt-get install xinetd
$>sudo vi /etc/xinetd.d/git-daemon

service git
{
        disable = no
        type            = UNLISTED
        port            = 9418
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/bin/git
        server_args     = daemon --inetd --export-all --base-path=/public/gitmirrors/
        log_on_failure  += USERID
}
$> sudo /etc/init.d/xinetd restart
혹은
$> sudo service xinetd restart

 

2. Mirror repository 만들기
: 외부에서 접근할 공간을 생성하고 mirror를 만든다.

$>sudo mkdir -p /public/gitmirrors/
$>chmod 777 /public/gitmirrors/
$>mkdir /public/gitmirrors/PROJECT_TOP_DIR
$>cd  /public/gitmirrors/PROJECT_TOP_DIR
$>repo init -u ssh://USER_ID@SERVER_ADDRESS_AND_PORT/platform/manifest.git -b <BRANCH_NAME> --mirror
$>repo sync

 

3. Fetching address 변경
: manifest.git을 변경시켜서 새로운 branch로 server에 push 한다.

먼저 manifest.git을 cloning 해오자

$> mkdir ~/temp/manifest
$> cd ~/temp/manifest
$> git clone /public/gitmirrors/PROJECT_TOP_DIR/platform/manifest.git

default.xml의 fetch address를 변경해서 mirror에서 받아오도록 수정한다.

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote name=REMOTE_NAME fetch="git://MIRROR_SERVER_ADDR/PROJECT_TOP_DIR" review=REVIEW_SITE_ADDR />

...

수정된 default.xml을 새로운 branch에 push 한다.

$>git checkout -b  MIRROR_BRANCH_NAME
$>git add .
$>git commit -m "Updated fetch URL to mirror"
$>git push origin MIRROR_BRANCH_NAME

 

4. Client에서 mirror로 부터 source sync 하기

repo init할때 mirror branch를 명시한다.

$> repo init -u git://MIRROR_SERVER_ADDR/PROJECT_TOP_DIR/platform/manifest.git -b MIRROR_BRANCH_NAME
$> repo sync

 

5. 주기적인 sync를 위한 crontab과 sync script 작성

$> crontab -e
# m h  dom mon dow   command

# 매시 00분 마다 repo sync를 수행
0 * * * * ~/bin/cron_repo_sync.sh

repo sync script
: 호출될 때마다 mirror directory에 있는 내용들을 본국에서 송환해 온다.

#!/bin/bash
# cron repo sync script.
# Syncs all mirrors under the PUBLIC_REPO_DIRS_ROOT. - skywriter

PUBLIC_REPO_DIRS_ROOT="/public/gitmirrors/"
REPO_PATH="/usr/local/bin/repo"

sync_cmd="$REPO_PATH sync -j20"
repodirs=`ls ${PUBLIC_REPO_DIRS_ROOT}`

echo "start syncing"
for repodir in $repodirs
do
  echo "syncing [$repodir] at `date`"
  cd ${PUBLIC_REPO_DIRS_ROOT}$repodir/
  $sync_cmd 2>&1
done
echo "done at `date`"