컴파일을 해보자 1 (기존 패키지)

우분투를 사용 하는 이 누구나 쉽게 컴파일을 배울 수 있도록 쉽게 적어 나갈 생각이며
시간 날때마다 계속 아래 순서대로 적어 볼 계획 입니다.
[list:2tzpol6i]1. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=1527:2tzpol6i][color=#4000FF:2tzpol6i]기존 패키지 컴파일 (MC)[/color:2tzpol6i][/url:2tzpol6i]
2. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=1538:2tzpol6i][color=#4000FF:2tzpol6i]다운 받은 소스 컴파일 (dh_make)[/color:2tzpol6i][/url:2tzpol6i]
3. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=1543:2tzpol6i][color=#4000FF:2tzpol6i]GPG키 (개인키)[/color:2tzpol6i][/url:2tzpol6i]
4. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=1550:2tzpol6i][color=#4000FF:2tzpol6i]다운 받은 소스 컴파일 (네이트온)[/color:2tzpol6i][/url:2tzpol6i]
5. 재미로 하는 컴파일 1 (
6. 재미로 하는 컴파일 2
7. [url=http://ubuntu.or.kr/viewtopic.php?f=9&t=4543:2tzpol6i]커널 컴파일 1[/url:2tzpol6i]
8. 커널 컴파일 2 (커널 설치 후 설정들)
9. 개인 저장소와 우분투코리아 저장소 이용하기[/list:u:2tzpol6i]

또한 이글을 쓰는 이유는
저는 컴퓨터 전공자가 아닌지라 좀 더 배우며 제가 아는 방식이 잘못 되거나
잘못 알고 있는 것을 고치고자 합입니다.

먼저 오늘은 기초적으로 자체 패키지를 다운 받아 컴파일을 해보겠습니다.

우선 컴파일러 부터 설치 해야 합니다.
그놈 터미널에서
$ sudo apt-get install build-essential (l자 끝에 첨가 : Vulpes 님 감사 :idea: )
위 명령어로 컴파일에 필요한 gcc, g++, make, dpkg-dev 등 이 설치 됩니다. (역시 편한 데비안 + 우분투)

제가 평소 무척 애용하는 쉘 파일 매니져인 MC : midnight commander 를 컴파일 해보겠습니다.
소스를 다운 받으려면 상단패널 주메뉴 시스탬/ 관리/소프트웨어 소스 에서 소스코드에 체크를 하셔야
소스를 다운 받을 수 있습니다.

그놈 터미널에서
$ mkdir com && cd com (com 디렉토리:폴더 만들고 이동)
$ apt-get source mc (mc 소스 다운로드)
보통 저장소의 기존 소스를 다운 받으면 3개의 파일을 다운 받으며 자동으로 소스 압축을 풀고 패치를 적용 합니다.
mc_4.6.1.orig.tar.gz (mc 오리지날 소스)
mc_4.6.1-8ubuntu1.diff.gz (패치파일)
mc_4.6.1-8ubuntu1.dsc (패키지 정보 및 개인키 사인 파일)
그리고 압축 풀리고 패치적용되어 있는 mc-4.6.1 디렉토리(폴더) 앞으로 저는 디렉토리라 명하겠습니다.
디렉토리는 파일 또는 디렉토리가 모여 있는 방을 말하는데
보통 요즘 폴더는 그래픽상황서 파일 모인 방을 디렉토리는 콘솔 터미널 같은 텍스트 모드에서의 방을 말할때 쓰입니다.

MC 컴파일시 필요한 패키지 설치
오늘은 처음이니 위 파일들 설명이나 복잡한 이야기는 생략 하고 딱 한가지만 말하겠습니다.
리눅스 프로그램은 컴파일 되기 위하여 다른 라이브러리를 필요로 합니다. 이를 ‘컴파일 의존 라이브러리’ 라 하는데…
우분투에선 보통 ‘패키지이름-dev.버전.deb’ 로 되어 있습니다.
다른 프로그램 소스를 참고 하고 가져와 함께 만들어 지는 것입니다.
컴파일 의존 패키지는 여러개인데 이를 일일이 찻아 설치는 매우 귀찮고 뻬먹기가 쉽습니다.
그래서 데비안+우분투에 있는 설치 명령어가 apt-get build-dep 이 있습니다.
$ sudo apt-get build-dep mc (이명령어 하나로 MC 컴파일에 필요한 패키지가 설치 됩니다.)

오늘 살펴 볼 파일은 mc-4.6.1/debian/changelog 파일 입니다.
$ cd mc-4.6.1 (이동)
$ gedit debian/changelog (편집기로 열기)
mc (1:4.6.1-8ubuntu1) hardy; urgency=low 첫번째 줄인데 4.6.1은 MC 버전을 8ubuntu1은 우분투 패키징 버전을 말합니다.
이줄에 우분투 패키징 버전을 mc (1:4.6.1-8ubuntu2) hardy; urgency=low 끝에 2로 하여 패키징 버전을 올리는 이유는
자동 업데이트를 막기 위함입니다. 같은 버전이 설치 될경우 저장소의 것으로 자동 업데이트 관리자가
업데이트를 하려고 하기 때문 입니다. 이경우 버전을 강제로 업 안되게도 할수 있으나 한단계 버전을 올리는 것도 좋은 방법입니다.
첫줄에 패키지버전을 바꾸시기 바랍니다.

그냥 컴파일 하기엔 좀 심심하니 소스 조금 고치겠습니다.
$ gedit po/ko.po
po 파일은 번역파일인데 poedit 를 이용하면 쉽게 편집 할수 있으나 오늘은 그냥 텍스트에디터로 하겠습니다.
gedit 편집/기본설정 열어 줄번호 표시 체크하면 앞에 줄번호가 나오는데
511 번줄에… " 사용자와 친근한 텍스트 편집기.\n" 가 있는데 다음줄에
" 우분투 만세.\n" 같은 문구 넣어 보시기 바랍니다.
" 는 문자열 \n 은 다음줄 개행 입니다.

컴파일
데비안+우분투의 정통적인 패키지 방식은 fakeroot 입니다.
fakeroot 는 일반 사용자가 루트권한으로 행해져야 할 일들을 가상으로 해주면서 컴파일을 해 줍니다.
$ sudo apt-get install fakeroot (fakeroot 설치)
$ fakeroot debian/rules binary ( :!: jhlee0324님의 테스팅 : 에고 binary 빠트림)
이제 부터 환경 설정과 컴파일 그리고 패키지가 만들어 집니다.

조금 시간 걸리실 겁니다.

설치
$ cd … && ls -al
$ sudo dpkg -i mc*.deb
(방금 만들어진 deb 파일 설치 하는데… 32비트환경과 64비트 환경에 따라 이름이 다르게 만들어 지는 지라
와일드 카드이용 mc로 시작하는 .deb 파일울 설치 하라 입니다. -i 설치 , -r 제거)

확인
$ mc 실행 후 텍스트 파일에 선택 막대 위치 한후 f4키로 편집 상테에서 f9로 메뉴 호출하여 ‘이프로그램에 관하여’ 보시기 바랍니다.
MC : midnight commander 는 사용 법을 익혀 두시면 쉘에서 아주 편하게 작업을 도와 줍니다. 재추천

다음번엔 인터넷에서 다운 받은 소스를 컴파일 해보겠습니다.

아… 뭔가 굉장히 유익한 시리즈가 될 것 같네요! 어서 집에 가서 따라해보고 싶네요!

아… 뭔가 굉장히 유익한 시리즈가 될 것 같네요! 어서 집에 가서 따라해보고 싶네요! X 2

(흠… 너무 날(?)로 먹는 건가…; )

아… 뭔가 광장한… 오타가. =.=

coreanlibero님 pcandme님 해보시고 문제 있음 댓글 부탁 드립니다.

[quote="haze11":2uc44f5e]아… 뭔가 광장한… 오타가. =.=[/quote:2uc44f5e]

네 [color=#4000FF:2uc44f5e][b:2uc44f5e]광장한[/b:2uc44f5e][/color:2uc44f5e] 오타가 있습니다.
광장에서 안쓰고 80년대식으로 밀실에서 수기 한지라… ;)
헤즈님이 광장에서 외친거 써주세요
오타 지적 부탁…

일단 오타 하나.

sudo apt-get install build-essentia

>> sudo apt-get install build-essential

차례대로 하고 있는데, 여기서 막히네요.

[quote="강분도":hdba6nps]
컴파일
데비안+우분투의 정통적인 패키지 방식은 fakeroot 입니다.
fakeroot 는 일반 사용자가 루트권한으로 행해져야 할 일들을 가상으로 해주면서 컴파일을 해 줍니다.
$ sudo apt-get install fakeroot (fakeroot 설치)
$ fakeroot debian/rules
이제 부터 환경 설정과 컴파일 그리고 패키지가 만들어 집니다.

조금 시간 걸리실 겁니다. [/quote:hdba6nps]

저렇게 $fakeroot debian/rules 를 하면
[attachment=0:hdba6nps]com-mc-4.6.1.png[/attachment:hdba6nps]

이렇게 됩니다. 제대로 안된거 같은데… 이건 어떤 문제가 있는건가요?

[quote="jhlee0324":175uo9c9]
저렇게 $fakeroot debian/rules 를 하면
이렇게 됩니다. 제대로 안된거 같은데… 이건 어떤 문제가 있는건가요?[/quote:175uo9c9]

에고 죄송 합니다. $ fakeroot debian/rules binary 입니다. 망극 :mrgreen:
그리고 감사 합니다.

우분투 8.10을 사용중입니다.

sudo apt-get install fakeroot 로 설치를 시도했는데 설치는 이미 되어있다고 합니다.

그래서 다음 단계인

fakeroot debian/rules binary
를 실행했는데…

[code:tauyx1oe]
$ fakeroot debian/rules binary
dh_testdir
make: dh_testdir: 명령을 찾지 못했음
make: *** [debian/stamp-common-install] 오류 127
[/code:tauyx1oe]
위와 같은 오류 메시지가 납니다. 무슨 문제인가요?

8.10 이면 위 글과 다른점은
소스를 다운 받으면 소스가 풀린 디렉토리(폴더)가 mc-4.6.2~git20080311 일 것 입니다.
위 글중

[code:19jv9230]오늘 살펴 볼 파일은 mc-4.6.1/debian/changelog 파일 입니다.
$ cd mc-4.6.1 (이동) 부분을
$ cd mc-4.6.2~git20080311 로 이동 [/code:19jv9230][attachment=0:19jv9230]screenshot1.png[/attachment:19jv9230]

보통 소스 다운 받고 (apt-get source [소스] )
컴파일 의존 패키지 설치 하고 ( apt-get build-dep [이름] )
소스 풀린 디렉토리에서 에서 fakeroot debian/rules binary 하면 됩니다.
차분히 다시 해보시기 바랍니다.

이런 제 실수였습니다. ㅎㅎㅎ

드디어 따라해봤습니다! 잘 되네요!!!

이거 신기한데요…;;;

안녕하세요.

다음과 같은 의문점이 있습니다.

1] fakeroot하는 과정에서 패치를 적용하는 경우도 있던데요…
apt-get source로 받은 소스를 수정해버렸더니 패치에서 에러가 나더군요.
이럴 경우는 어떻게 해야 할까요?

2] 컴파일시 적용하는 옵션을 바꾸고자 합니다.
대부분 소소는 ./configure후 -로 옵션을 붙여서 설정을 바꾸는데
fakeroot를 사용할 경우는 어떻게 옵션을 바꿀수 있을까요?
또 컴파일전에 이런 옵션을 확인하려면 어떻게 해야할까요?

3] 이렇게 옵션을 변경했을 경우, 의존성있는 패키지들이 변경될수 있던데요.
debian/control을 변경하여 의존성 패키지를 넣어둘 경우는 누가 설치하더라도
의존성 패키지가 자동으로 설치되는 것일까요?
옵션을 변경하여 생기는 의존성 문제는 어떻게 찾아야 할까요?

답변 부탁드리겠습니다.

sudo apt-get build-dep aMule
하면

Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to find a source package for aMule
라고 뜹니다.

그리고
sudo apt-get build-dep amule
하면
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Build-dependencies for amule could not be satisfied.
라고 뜹니다.

[quote="ulepoz":ncdwmejp]그리고
sudo apt-get build-dep amule
하면
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Build-dependencies for amule could not be satisfied.
라고 뜹니다.[/quote:ncdwmejp]
네 퍄키지 네임은 amule 가 맞습니다 소문자
그리고 소프트웨어 소스에서 소스코드에도 체크 해보십시오
[attachment=0:ncdwmejp]screenshot1.png[/attachment:ncdwmejp]

추가 질문이 있었군요

[quote="yanagi":3qao5vzc]
1] fakeroot하는 과정에서 패치를 적용하는 경우도 있던데요…
apt-get source로 받은 소스를 수정해버렸더니 패치에서 에러가 나더군요.
이럴 경우는 어떻게 해야 할까요?
[/quote:3qao5vzc] 이문제는 어떤 수정을 했냐에 따라 다른데…

[quote="yanagi":3qao5vzc]
2] 컴파일시 적용하는 옵션을 바꾸고자 합니다.
대부분 소소는 ./configure후 -로 옵션을 붙여서 설정을 바꾸는데
fakeroot를 사용할 경우는 어떻게 옵션을 바꿀수 있을까요?
또 컴파일전에 이런 옵션을 확인하려면 어떻게 해야할까요?
[/quote:3qao5vzc] debian/rules 파일 내용을 살펴 보십시오 configure 옵션이 들어가 있습니다.

[quote="yanagi":3qao5vzc]
3] 이렇게 옵션을 변경했을 경우, 의존성있는 패키지들이 변경될수 있던데요.
debian/control을 변경하여 의존성 패키지를 넣어둘 경우는 누가 설치하더라도
의존성 패키지가 자동으로 설치되는 것일까요?
옵션을 변경하여 생기는 의존성 문제는 어떻게 찾아야 할까요?
답변 부탁드리겠습니다.[/quote:3qao5vzc] 옵션을 변경하여 추가적인 의존 패키지가 발생된다면 [b:3qao5vzc]그건 자신이 알아서 추가 수정[/b:3qao5vzc] 해주어야 합니다.

control 에서 선언된 의존 패키지는 설치시 누구나 같이 설치 됩니다.
전에 장난 삼아 의존 패키지로 kubuntu-desktop 을 넣어 본 적 있습니다.
PPA 서버 난리 났었습니다. ;)

[quote="강분도":2dkiaq7l][quote="ulepoz":2dkiaq7l]그리고
sudo apt-get build-dep amule
하면
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Build-dependencies for amule could not be satisfied.
라고 뜹니다.[/quote:2dkiaq7l]
네 퍄키지 네임은 amule 가 맞습니다 소문자
그리고 소프트웨어 소스에서 소스코드에도 체크 해보십시오
[/quote:2dkiaq7l]
[attachment=0:2dkiaq7l]Screenshot-2.png[/attachment:2dkiaq7l]
이미 체크가 되어 있습니다.

ulepoz 님,
물론 잘 확인해 보셨겠지만,
그냥 스크린 샷엔, unchecked 네요. ^^;;

질문입니다…

gedit 혹은 vi 로 po/ko.po 파일을 여니까…
msgstr 뒤에 한글 같은데 전부 깨져서 보여요…
이건 어떻게 해야하나요??

[quote="kiyo73":1vaelphg]질문입니다…

gedit 혹은 vi 로 po/ko.po 파일을 여니까…
msgstr 뒤에 한글 같은데 전부 깨져서 보여요…
이건 어떻게 해야하나요??[/quote:1vaelphg]
보통 po 파일이 utf-8 인데 간혹 euc_kr 도 있습니다.
따라서 gedit 경우
아래 링크 참고 하시고

http://www.ubuntu.or.kr/viewtopic.php?p=25299#p25299

vi 경우 환경 설정파일에서 ~/.vimrc

[code:1vaelphg]" 인코딩 설정
set fenc=utf-8
set fencs=utf-8,euc-kr,cp949,cp932,euc-jp,shift-jis,big5,latin1,ucs-2le[/code:1vaelphg] 를 추가 하시면 자동으로 읽어 옵니다.

저는그냥 번역 po 파일은 poedit 또는 MC 에서 바로 보기 사용 많이 합니다.