안녕하세요 웹지니입니다.

세상엔 참 착한 사람이 많은거 같아요. 며칠 전까지 우분투 리눅스에 Mono 한 번 설치해 보겠다고 갖은 삽질을 마다 않던 저에게 단비같은 사이트가 하나 나타났네요. Badgerports.org라고 하는 이 사이트는 Jo Shields라는 사람이 운영하는 사이트입니다. 이 사람은 현재 데비안/우분투 리눅스를 위한 Mono 패키지 메인 관리자라고 하네요.

그림 1: bagderports.org 홈페이지

이 사이트는 단순히 사이트에 대한 소개 및 사용법 설명이 전부입니다. Jo가 제공하는 패키지 서버를 우분투 리눅스에 등록하면 Jo의 패키지 서버를 통해 최신 버전의 Mono 프레임워크와 MonoDevelop IDE를 apt-get 명령으로 손쉽게 설치할 수 있어요. 이 글을 작성하는 현재 제공되는 버전은 아래와 같습니다.

  • Mono 2.6.3
  • MonoDevelop 2.4 + 전체 패키지

자, 그럼 우분투 서버에 Jo의 패키지 서버를 등록해 볼까요?

badgerports 패키지 서버 등록하기

우선 우분투 리눅스의 상단 위치한 시스템 메뉴에서 [System > Software Sources] 메뉴를 선택합니다. 그러면 아래 그림과 같은 대화 상자가 나타납니다. 여기서 [Other Software] 탭을 클릭하고 [Add] 버튼을 클릭한 후 그림과 같이 소스 서버의 주소를 입력해 줍니다.


입력을 완료했으면 [Add Source] 버튼을 클릭하고 [Authentication] 탭을 다시 클릭한 후 [Import Key File] 버튼을 클릭합니다. 그러면 파일 찾기 대화 상자가 나타날텐데요. 여기를 클릭해서 키 파일을 다운로드한 후 해당 파일을 찾아 선택하면 됩니다. 키 파일을 지정했으면 [Close] 버튼을 클릭해서 대화 상자를 닫고 [Reload] 버튼을 클릭하여 새로 추가한 정보를 업데이트해 줍니다. 여기까지 하면 일단 패키지 서버의 추가는 완료!

Mono와 MonoDevelop 설치하기

패키지 서버를 등록했으므로 이제 apt-get 명령을 이용하면 Mono와 MonoDevelop을 손쉽게 설치할 수 있습니다. Mono와 MonoDevelop을 설치하는 명령은 아래와 같습니다.
sudo apt-get install mono
sudo apt-get install monodevelop
크흑... 두 줄의 명령만으로 Mono와 MonoDevelop을 손쉽게 설치할 수 있게 되었습니다. 아래는 인증샷.


그림에서 보듯이 Mono 2.6.3과 MonoDevelop 2.4가 설치된 것을 확인할 수 있어요.
착한 Jo한테 메일이라도 한 통 보내야 할까봅니다. 최저 생활비 수급자인 관계로 Donate는 생략~ ㅋ.

그럼 모두 즐거운 하루 되세요~
Posted by 웹지니 트랙백 0 : 댓글 3
안녕하세요? 웹지니입니다.

드디어 여름인가봅니다. 날씨가 무척이나 덥네요.
요즘도 전 우리 회사 제품들을 리눅스 운영체제에서 동작할 수 있도록 하기 위해 Mono/리눅스와 씨름을 하고 있습니다. 리눅스 초짜에겐 다소 버거운(ㅠㅠ) 작업이네요.

오늘은 우분투 리눅스 10.04 LTS 버전에서 Mono와 MonoDevelop의 설치 방법에 대해 기록해 둘까 해요.
역시나 잊어버리면 안되기에...ㅋ

Mono 설치하기

우선은 Mono부터 설치해 보겠습니다. 며칠간 삽질하면서 보니 Mono를 설치할 수 있는 방법은 꽤나 다양하더군요. 대략 정리해보면 아래와 같습니다.

1. Mono 프로젝트 홈페이지에서 공식 릴리즈된 Mono 설치 파일을 다운로드하여 설치합니다. 이 경우 현재 시점에서는 2.6.4 버전이 설치됩니다.
2. Mono 프로젝트 홈페이지에서 Subversion 기반의 소스 저장소로부터 trunk혹은 tag 버전을 직접 다운로드 및 빌드하여 설치합니다. 이 경우 tag 버전은 2.6.4가, trunk 버전은 2.7이 설치됩니다.
3. Mono 프로젝트 홈페이지에서 매일 배포하는 Daily Build를 다운로드하여 빌드 및 설치합니다. 이 경우는 버전을 명확하게 알 수 없으며 해당 날짜가 버전 대신 사용됩니다. (MonoDevelop이 현재 실행 중인 Mono 버전을 알 수 없다고 징징거리더라고요 -ㅅ-;;;)

오늘 소개할 방법은 이 3번 방법입니다. 우선 구글링을 하다보니 어느 착한(?) 분이 친절하게도 설치 과정을 스크립트로 작성해 둔 것이 있었어요. 원문은 여기서 보실 수 있고 설치 스크립트는 아래와 같습니다. 

#!/bin/bash

TOPDIR=$(pwd)
BUILDDIR=$TOPDIR/build
DLDDIR=$TOPDIR/downloads

export PATH=/usr/local/bin:$PATH

echo "installing prerequisites"
sudo apt-get install -y build-essential libc6-dev g++ gcc libglib2.0-dev pkg-config subversion apache2 bison gettext

mkdir -p $BUILDDIR

echo
echo "downloading mono packages"
echo

cd $BUILDDIR

svn co svn://anonsvn.mono-project.com/source/trunk/xsp
svn co svn://anonsvn.mono-project.com/source/trunk/mod_mono

wget http://mono.ximian.com/daily/mono-latest.tar.bz2
wget http://mono.ximian.com/daily/monocharge-latest.tar.gz

cd $BUILDDIR
bunzip2 -df mono-latest.tar.bz2
tar -xvf mono-latest.tar
tar -xzvf monocharge-latest.tar.gz

echo
echo "building and installing mono packages"
echo
cd $BUILDDIR
cd mono-*
./configure --prefix=/usr/local --with-glib=system
make
sudo make install

cd $BUILDDIR
cd monocharge*
sudo env prefix=/path/to/prefix ./recharge.sh

cd $BUILDDIR
cd xsp
./autogen.sh --prefix=/usr/local
make
sudo make install

cd $BUILDDIR
cd mod_mono
./autogen.sh --prefix=/usr/local
make
sudo make install
cd $BUILDDIR

echo
echo "done"
위의 스크립트를 실행하면 최신 Daily Build Binary Package를 이용하여 Mono 프레임워크를 설치할 수 있습니다. 위의 스크립트를 *.sh 파일로 저장하고 실행하면 걍 날로 먹는 Mono 설치는 이것으로 끝 -ㅅ-;;;

MonoDevelop의 설치

어느 틈엔가 MonoDevelop이 2.4 버전으로 업그레이드가 되었어요. Mono 프로젝트의 소스 저장소와 공식 릴리즈된 MonoDevelop의 Tarball 파일을 다운로드하여 MonoDevelop 2.4를 설치하는 스크립트는 다음과 같습니다.

#!/bin/bash

TOPDIR=$(pwd)
BUILDDIR=$TOPDIR/build

echo "installing prerequisites"

sudo apt-get install -y libpango1.0-dev libatk1.0-dev libgtk2.0-dev
sudo apt-get install -y libglib2.0-dev libglade2-dev
sudo apt-get install -y libpanel-applet2-dev libgtkhtml3.14-dev libgtksourceview-dev
sudo apt-get install -y libgnomeprint2.2-dev libgnomeprintui2.2-dev
sudo apt-get install -y autoconf libtool automake
sudo apt-get install -y libgnome-desktop-dev
sudo apt-get install -y libglade2.0-cil-dev
sudo apt-get install -y subversion apache2-threaded-dev

echo
echo "downloading monodevelop packages"
echo

cd $BUILDDIR
svn co svn://anonsvn.mono-project.com/source/trunk/mono-addins
svn co svn://anonsvn.mono-project.com/source/trunk/gnome-sharp
svn co svn://anonsvn.mono-project.com/source/trunk/gnome-desktop-sharp
sudo wget http://ftp.novell.com/pub/mono/sources/monodevelop/monodevelop-2.4.tar.bz2

echo
echo "installing monodevelop 2.4"
echo

cd gnome-sharp
./bootstrap-2.24 --prefix=/usr/local
make
sudo make install
cd $BUILDDIR

cd gnome-desktop-sharp
./autogen.sh --prefix=/usr/local
make
sudo make install
cd $BUILDDIR

cd mono-addins
./autogen.sh --prefix=/usr/local
make
sudo make install
cd $BUILDDIR

tar xvjf monodevelop-2.4.tar.bz2
cd monodevelop-2.4
./configure --prefix=/usr/local
make
sudo make install

echo "done"
여기까지 실행하면 MonoDevelop 2.4의 설치도 완료! 아래는 인증샷입니다.


지금까지 작성한 스크립트로 이제는 삽질 그만 할래요 ㅠㅠ. 참, 이 삽질을 왜 했느냐구요?

삽질 비화 대공개!!

저는 현재 우리 회사 제품을 리눅스 운영체제 상에서도 동작할 수 있도록 수정하고 있습니다. 기존에는 .NET 3.5기반에서 Windows 운영체제와 SQL Server 데이터베이스만을 지원했거든요. 리눅스를 지원하게 되면서 자연스럽게 오라클이나 MySql 등 다른 데이터베이스 서버의 지원도 필요하게 되었어요. 이 때 가장 문제가 되었던 것은 DBMS별로 조금씩 다른 SQL 쿼리였습니다.

이쯤에서는 당연히 동일한 코드로 여러 DB를 지원할 수 있는 ORM 도구의 사용을 고려하게 됩니다. 그러나 Linq to SQL의 경우는 단순한 1:1 매핑만을 지원하고 Entity Framework의 경우에는 아직 Mono에서 지원이 되지 않고 있었죠. 그래서 결국 선택하게 된 것이 NHibernate였습니다.

NHibernate는 훌륭한 기능들을 제공했지만 두 가지가 아쉬웠는데 그 중 하나는 XML 파일 기반의 객체 관계 매핑이었고 두 번째는 다소 생소한 형태의 Criteria API였습니다. Criteria API란 NHibernate를 이용하여 SQL 쿼리를 만들어내기 위한 API입니다.

XML 파일 기반의 객체 관계 매핑 문제는 Fluent Interface 패턴을 이용하여 C# 코드로 객체 관계 매핑을 생성할 수 있는 Fluent NHibernate로 간단히 해결할 수 있었습니다. 또한 Criteria API는 Linq to NHibernate라는 녀석을 이용해서 해결할 수 있었죠. 여기에 가 보시면 NHibernate Linq 2.1.2 버전을 다운로드하실 수 있습니다.

문제는 바로 이 Linq to NHibernate였는데요. 이 녀석은 System.Data.Services 어셈블리의 3.5 버전을 참조로 빌드되었습니다. 안타깝게도 Mono 2.6.4에서는 이 어셈블리의 2.0 버전만 제공되는데요. 알고보니 이것은 Mono 팀의 실수라고 하네요. 즉, 3.5 버전이 제공되어야 함에도 불구하고 실수로 2.0 버전이(히뱀...) 배포된 것인 듯 합니다.

결국 Linq to NHibernate를 사용하는 우리 제품의 코드가 Mono 플랫폼에서 빌드조차 되지 않는 황당한 상황이 되어 버린거죠. 해서 가장 최신 버전의 Mono 플랫폼을 설치해 보게 되었고 그 결과 System.Data.Services 어셈블리의 3.5버전과 4.0 버전이 제공되는 것을 확인할 수 있었습니다.

이로 인해 Mono와 MonoDevelop 설치, 제품 코드 빌드 등에 거의 일주일을 날려먹었네요. 초짜는 힘들어요. ㅠㅠ
혹시 Mono로 개발하실 일이 있으시다면 저처럼은 삽질하지 마시길...

이만 물러갑니다!


Posted by 웹지니 트랙백 0 : 댓글 2

안녕하세요? 웹지니입니다.

2010년 새해가 시작된지도 벌써 1주일이나 지났네요. 다들 건강하시죠?
전 요즘 감기가 걸려서 개고생을 하고 있습니다. 사실 아프려면 크게 아파야 좀 쉬기도 하고 그럴텐데 지금처럼 콧물만 졸졸 흐르면 괜히 지저분하기만 하고 일하기만 더 힘들고 그러네요.

2010년 새해에도 웹지니는 여전히 ASP.NET을 이용한 크로스 플랫폼 웹 애플리케이션을 개발하고 있습니다.
물론 Primary Target은 Windows 플랫폼이지만 리눅스/유닉스 계열과 Mac OS 등을 탑재한 시스템에도 저희 팀에서 구현한 애플리케이션이 동작해야 한다는 (그것도 별도의 코드 수정이나 재컴파일 없이 -ㅅ-;;) 다소 난해한 요구 사항과 맞닥뜨린 상황입니다.
해서 Windows 이외의 플랫폼에서는 마이크로소프트가 지원하고 노벨(Novell)이 프로젝트를 주도하는 모노(Mono)를 사용하게 된 것이지요.

사실 10년 간 Windows 플랫폼만 사용해 온 웹지니에게 리눅스 플랫폼은 매우 생소한 녀석이었기에 이런 저런 고생을 좀 했습니다.
특히 Windows 플랫폼에서는 그냥 “다음” 버튼만 누르면 간단히 해결되던 소프트웨어의 설치가 가장 난제였었지요.
해서 이번 포스트는 크게 두 가지 목적으로 작성되었습니다.

1. Ubuntu 리눅스에서 소스 컴파일을 통해 모노 프레임워크를 설치하는 방법을 잊어버리지 않기 위해서
2. 혹시 다른 .NET/모노 개발자에게 도움이 될까봐

그럼 시작해 볼까요?

1. Installing MonoDevelop 2.0 on Ubuntu 9.10

일단 이 포스트는 Ubuntu 리눅스 9.10 버전을 기준으로 하며 여러분이 이미 가상 머신 혹은 실제 물리적 머신에 Ubuntu 9.10을 설치한 상태라고 가정합니다. 사실 Ubuntu 9.10에는 Mono 2.4.2.3 버전이 이미 설치되어 있으며 모노 개발을 위한 IDE인 MonoDevelop 2.0이 미리 패키징되어 있어 손쉽게 설치가 가능합니다.

Mono 2.4.2.3과 MonoDevelop 2.0만으로도 얼마든지 리눅스 플랫폼에서 .NET 개발이 가능합니다. 게다가 설치도 참 쉽죠~잉. 리눅스 터미널에서 다음과 같은 커맨드만 실행하면 됩니다.

  1: sudo apt-get install monodevelop monodevelop-database

그런 후 리눅스 사용자 계정의 비밀 번호를 입력해 주면 간단히 MonoDevelop 2.0을 설치할 수 있습니다. 그러나 최신 버전은 Mono 2.6.1과 MonoDevelop 2.2이며 늘 최신 버전에 목말라 하는 웹지니는 미리 패키징 된 개발 도구들 대신 최신 소스를 다운로드하여 직접 컴파일 후 설치하는 과정에 도전해 보기로 한 것이지요.

2. Building and Installing Mono 2.6.1 on Ubuntu 9.10

Mono 2.6.1을 설치는 과정은 제 개인적으로는 절대 쉽지 않았습니다. 우선 Ubuntu에 필요한 라이브러리들이 모두 설치되어 있어야 하기에 어떤 것들을 먼저 설치해야 하는지 알아내는 것도 쉽지 않았지요. 그러면 이제 필요한 라이브러리를 먼저 설치해볼까요? 터미널에서 다음과 같은 커맨드를 실행합니다.

  1: sudo apt-get remove mono-common
  2: 
  3: sudo apt-get install build-essential pkg-config bison gettext libglib2.0-dev libcairo2-dev libungif4-dev libjpeg62-dev libtiff4-dev 
  4: 
  5: wget http://ftp.novell.com/pub/mono/sources/libgdiplus/libgdiplus-2.6.tar.bz2
  6: tar xvjf libgdiplus-2.6.tar.bz2
  7: cd libgdiplus-2.6
  8: ./configure && make && sudo make install

자 먼저 1번 라인의 커맨드를 이용하여 이전 버전의 mono-common 라이브러리를 삭제한 후 3번 라인과 같이 필요한 라이브러리들을 모두 설치합니다. 그런 후 마지막으로 libgdiplus 라이브러리를 설치해야 하는데 이 라이브러리는 Mono 2.6.1에 맞춘 최신 버전이 제공되므로 5번 라인과 같이 FTP를 통해 먼저 다운로드 한 후 6번 라인의 커맨드로 압축을 해제하고 8번 라인과 같이 설치해 줍니다.

여기까지 설치했으면 이제 드디어 Mono 2.6.1을 설치할 차례입니다. 다음의 커맨드를 차례로 실행해 보겠습니다.

  1: wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.6.1.tar.bz2
  2: tar xvjf mono-2.6.1.tar.bz2
  3: cd mono2.6.1
  4: ./configure && make && sudo make install

차례대로 설명을 드리자면 1번 라인의 커맨드로 Mono 2.6.1의 소스 코드를 다운로드 한 후 2번 라인의 커맨드로 압축을 해제하고 4번 라인의 커맨드로 설치를 합니다. 설치 과정은 생각보다 오래 걸립니다 (흡연자라면 담배 한 대 때리고 오심이... 쿨럭). 알 수 없는 내용들이 터미널에 가득 출력이 되고 가끔 .NET 컴파일 경고가 보이기도 하지만 일단 불안해 하지 말고 넘어갑니다. 설치 과정이 모두 완료되면 다음과 같이 시스템에 설치된 모노의 버전을 확인할 수 있습니다.

  1: mono --version
  2: 
  3: Mono JIT compiler version 2.6.1 (tarball Thu Jan 7 16:44:43 KST 2010)
  4: Copyright (C) 2002-2008 Novell, Inc and Contributors. www.mono-project.com
  5: 	TLS:		__thread
  6: 	GC:		Included Boehm (with typed GC and Parallel Mark)
  7: 	SIGSEGV:	altstack
  8: 	Architecture:	x86
  9: 	Disabled:	none
 10: 

1번 라인과 같이 mono 실행 파일에 --version 옵션을 주면 3라인 이후의 정보가 출력됩니다. 3번 라인의 버전이 2.6.1로 표시되면 올바르게 설치가 완료된 것입니다.

3. Building and Installing MonoDevelop 2.2 on Ubuntu 9.10

Mono 2.6.1을 설치했으면 이제 모노 개발을 위한 IDE인 MonoDevelop의 최신 버전인 2.2 버전을 설치해 보겠습니다. 안타깝게도 MonoDevelop 2.2는 Windows 플랫폼을 비롯하여 Mac OS X와 노벨의 OpenSUSE 리눅스에서의 설치를 위한 패키지를 지원하지만 Ubuntu 리눅스를 위한 패키지는 지원하지 않습니다. 해서 번거롭지만 소스 컴파일을 통해 설치해야 하는 것이지요. MonoDevelop을 설치하기 이전에 먼저 GTK# 및 Gnome#이라는 라이브러리를 설치해야 합니다. 터미널에서 다음과 같이 커맨드를 실행합니다.

  1: wget http://ftp.novell.com/pub/mono/sources/gtk-sharp212/gtk-sharp-2.12.9.tar.bz2
  2: wget http://ftp.novell.com/pub/mono/sources/gnome-sharp2/gnome-sharp-2.24.1.tar.bz2
  3: wget http://ftp.novell.com/pub/mono/sources/gnome-desktop-sharp2/gnome-desktop-sharp-2.24.0.tar.bz2
  4: 
  5: tar xvjf gtk-sharp-2.12.9.tar.bz2
  6: tar xvjf gnome-sharp-2.24.1.tar.bz2
  7: tar xvjf gnome-desktop-sharp-2.24.0.tar.bz2
  8: 
  9: cd gtk-sharp-2.12.9
 10: ./configure && make && sudo make install
 11: 
 12: cd ../gnome-sharp-2.24.1
 13: ./configure && make && sudo make install
 14: 
 15: cd ../gnome-desktop-sharp-2.24.0
 16: ./configure && make && sudo make install

먼저 위와 같이 세 개의 GTK#및 Gnome# 라이브러리를 다운로드 한 후 각자 압축을 해제하고 각각의 라이브러리가 압축 해제된 폴더에서 설치를 실행합니다. 설치가 완료되면 이제 다음의 커맨드를 이용하여 MonoDevelop 2.2의 소스 코드를 다운로드 하고 설치합니다.

  1: wget http://ftp.novell.com/pub/mono/sources/monodevelop/monodevelop-2.2.tar.bz2
  2: 
  3: tar xvjf monodevelop-2.2.tar.bz2
  4: 
  5: cd monodevelop-2.2
  6: ./configure && make && sudo make install

위의 커맨드를 실행하고 설치가 완료될 때까지 기다립니다. 설치가 완료되면 아래 그림과 같이 Ubuntu 데스크톱의 [Applications] 메뉴에 [Programming > MonoDevelop] 메뉴가 생성됩니다.

MonoDevelop 메뉴를 클릭하면 아래 그림과 같이 MonoDevelop 2.2가 실행됩니다. 새 프로젝트 대화 상자에서 볼 수 있듯이 ASP.NET MVC 1.0 프로젝트과 Silverlight의 리눅스 버전인 Moonlight 애플리케이션 개발을 위한 템플릿도 지원되네요. 훗~

이상으로 Mono 2.6.1과 MonoDevelop 2.2를 설치해 보았습니다. 사실 Mono 2.6.1은 아직 .NET 프레임워크 3.5의 모든 기능을 구현하고 있지는 않습니다만 .NET 2.0의 클래스 라이브러리는 거의 대부분 구현하고 있어 실제 프로젝트를 진행하기에 큰 무리는 없어 보입니다.

앞으로 .NET/Mono 프레임워크로 크로스 플랫폼 웹 애플리케이션을 구현하면서 알게 되는 유용한 정보들도 함께 공유하도록 할게요.
허접한 설치 경험담은 여기서 끝~

Posted by 웹지니 트랙백 0 : 댓글 0