2009-10-27

USB로 우분투 설치하기

어제 DVD/CD 플레이어가 없는 컴퓨터에 우분투를 USB로 설치했다.

우선 우분투(8.04 LTS 서버/32 비트)를 여기에서 ISO 파일로 다운로드한다.

그리고 여기에서 UNetbootin, Universal Netboot Installer(unetbootin-windows-372.exe)를 다운로드한다.

* 윈도우즈 XP 기준


USB를 넣고 UNetbootin를 실행하여 다운로드 받은 우분투 ISO 파일로 설치 파일을 작성한다.


그리고 우분투를 설치할 컴퓨터에 USB를 넣고 부팅 디스크로 USB를 지정해주면 된다.

ant와 씨름하기

회사에서 사용하는 빌드 서버 디스크가 고장나면서 빌드를 다시 구성해야 했는데 처음 구성했을 때 문서로 잘 정리해 놓지 않아서 고생했다.

우선 우분투 서버 8.0.4를 다시 설치했고... 여러 가지 작업을 했는데 그 중에서 ant와 관련한 부분을 정리해봤다.

apt로 ant로 설치했는데 ant 버전은 1.7.0이었다.

sudo apt-get install sun-java5-jdk
sudo apt-get install ant


ftp 태스크를 사용하려면 ANT_LIB(/usr/shared/ant/lib) 디렉토리에 다음 파일들을 추가한다.

ant-commons-net.jar
commons-net-1.4.1.jar

* apt로 설치하면 ant-commons-net.jar 파일이 포함되지 않기 때문에 별도로 설치해주어야 한다.


MailLogger를 사용했는데 이게 문제가 많았다. MailLogger를 사용하려면 다음과 같이 ant를 실행해야 한다.

ant -logger org.apache.tools.ant.listener.MailLogger -DMailLogger.properties.file=mail.properties


일단 어떤 문제가 있는지를 잘 알 수가 없었다. -v 옵션과 -diagnostics 옵션을 사용해야 그나마 의미있는 정보를 알 수가 있었다.

그리고 메일 발송을 위해서 다음 파일들을 추가해야 했다.

mail.jar
activation.jar

이 파일들을 먼저 설치하지 않으면 무슨 문제가 있는지 알 수가 없다. 이 파일들이 필요하다는 메시지가 없었다.

설정을 별도의 파일(mail.properties)에 해야 했다. 그렇지 않으면 예외가 발생한다.

# mail.properties
# gmail을 사용

MailLogger.mailhost=smtp.gmail.com
MailLogger.port=465
MailLogger.ssl=true
MailLogger.user=mailer@company.com
MailLogger.password=password
MailLogger.from=mailer@company.com
MailLogger.success.to=to@company.com
MailLogger.success.subject=Build Success
MailLogger.failure.to=admin@company.com,builder@company.com
MailLogger.failure.subject=Build Failure


이후에도 java.lang.NullPointerException이 발생한다. 예외가 발생하는 소스 코드 위치는 다음과 같다.

org.apache.tools.ant.taskdefs.email.MimeMailer.java 206번째 줄

for (Iterator iter = headers.iterator(); iter.hasNext();) {
  Header h = (Header) iter.next();
  msg.addHeader(h.getName(), h.getValue());
}

headers는 상위 클래스(Mailer.java)에 있는 멤버 필드인데 null로 초기화가되어 있다.

그래서 이 코드를 다음과 같이 수정해야 한다.

if (headers != null) {
  for (Iterator iter = headers.iterator(); iter.hasNext();) {
    Header h = (Header) iter.next();
    msg.addHeader(h.getName(), h.getValue());
  }
}

그리고 이 코드만을 컴파일하여 _ant.jar 파일로 묶어서 ANT_LIB 디렉토리에 복사한다.

* 이클리스에서 사용하는 ant 버전은 1.7.1이었는데 여기서도 동일한 예외가 발생했다.



2009-10-26

우분투 명령어

서버 종료

sudo init 0


서버 재부팅

sudo init 6


2009-10-14

Debt Metaphor

경제 위기 탓일까. 소프트웨어 개발 분야에서도 빚이 응용되는 것이...

Martin Fowler가 쓴 TechnicalDebtQuadrant을 재미있게 읽었다.


코드를 잘 짜는 것보다는 구현 자체가 미덕인 경우가 있다. 이 것이 개발자 의식 속에서 이루어진 선택인지 아니면 타성에 젖어 일어나는 일상적인 현상인지에 대해서 관찰하는 것이 필요하다.

책임감 있는 개발자라면 언젠가는 돌아봐야 하기 때문에...

2009-10-11

자바 1.4 이상에서 스택트레이스 기록

자바 1.4 이상에서 임의의 위치에서 스택트레이스를 기록하는 간단한 방법이다.

StringBuffer stacktrace = new StringBuffer();
StackTraceElement[] stackTrace = new Exception().getStackTrace();
for (int i = 0; i < stackTrace.length; i++) {
  stacktrace.append(stackTrace[i].toString() + "\n");
}

주로 디버그 목적으로 유용하게 사용할 수 있다.