'리눅스'에 해당되는 글 163건

  1. 2006.06.24 불여시 관련 다운로드 프로그램 - d4x
  2. 2006.06.24 ubuntu에서 고정폭 폰트가 넓게 벌어져 나오는 문제 해결
  3. 2006.06.23 ubuntu에서 커널 패키지화 하기

불여시 관련 다운로드 프로그램 - d4x

flashgot extenstion 과 d4x(시냅틱에서 설치)을 설치하면, 다운로드 속도에서 이득을 볼 수 있다.

ubuntu에서 고정폭 폰트가 넓게 벌어져 나오는 문제 해결

/etc/fonts/fonts.conf 에서


        GulimChe
        false

이 부분을 복사해서



        글꼴이름

        false



이런씩으로 추가해 주면 된다.




ubuntu에서 커널 패키지화 하기

1 소개
2 준비
3 소스 다운로드
4 소스 압축 풀기
5 커널 설정하기
6 커널 빌드하기
6.1 make-kpkg
6.2 --append-to-version
6.3 --revision
6.4 커널 팩키지 이름
6.5 fakeroot
7 커널 이미지 팩키지 설치하기
8 최종 정리
8.1 커널 홀드
8.2 심볼릭 링크 제거
8.3 커널 백업하기
8.4 부팅 디스크 만들기
8.5 다음 커널 만들기
8.6 이전 설정 사용하기
9 점검해야 할 사항들
10 링크



P.S. 1 KernelPatchHowTo에 가시면 커널에 성능 패치를 적용하는 것과 추천 커널 옵션 등이 추가된 문서가 있습니다. 관심 있으신 분은 둘러보세요. 이 문서를 읽으신 후에 보는 것이 더 좋을지도 모르겠습니다.


P.S. 2 원문에는 커널 2.6.8이었지만 현재(2006년 1월25일) 우분투 최신 안정버젼 커널은 2.6.12.10이므로 이하 2.6.12.10로 표시하겠습니다.


원문 : https://wiki.ubuntu.com/KernelHowto
번역 : handrake ( http://ubuntu.or.kr/wiki.php/handrake )


처음 하는 번역이라 아직 많이 미숙합니다. 부족한 점이 있어도 이해 부탁드립니다. 오타나 잘못된 번역이 보이면 기탄없이 고치거나 코멘트 달아주세요 ^^





1 소개 #



리눅스 커널은 우분투 운영체제의 핵심입니다. 우분투에서 제공하는 커널에는 유저가 필요한 모든 드라이버가 들어 있습니다. 하지만 만약 커널의 일부를 살짝 바꾸거나 어떠한 이유로 커널 전체를 컴파일해야 하는 일이 있을 경우에는 이 ?HowTo가 도움이 될 수 있을 것입니다.


좀더 간단(하지만 같은 내용을 담고 있는)한 문서는 [https]여기에서 찾을 수 있습니다.



2 준비 #



커널을 빌드하기 위해서는 다음의 팩키지들이 필요합니다 build-essential fakeroot kernel-package
bash:~$ sudo apt-get install build-essential fakeroot kernel-package 
<!> 어떤 사람들은 gcc-3.4를 설치한 뒤에만 (커널을) 컴파일을 하기도 합니다. (3.4가 커널 컴파일이 좀 더 잘된다는 말인거 같습니다.)

커널은 /usr/src/ 디렉토리에 빌드되기 때문에 유저는 src 그룹에 속해 있어야 합니다. (fakeroot나 sudo등을 사용하면 그냥 되는듯 합니다.)
bash:~$ sudo adduser my_username src Adding user my_username to group src... Done. 
( my_username은 자기 이름으로 바꿔주는 정도의 센스는 필요하겠죠? ^^ )

로그아웃했다가 다시 로그인을 하거나 su를 사용합니다.
bash:~$ su my_username bash:~$ groups my_username src audio adm dialout cdrom floppy video plugdev lpadmin 
보이는 그룹들 중에 src이 있어야 합니다.


3 소스 다운로드 #



원하는 커널 소스를 다음과 같이 고릅니다. (역자주: kernel.org 등에서 다운받은 커널도 물론 됩니다. 하지만 이전 커널에서는 되던 몇몇 기능이 지원되지 않을 수 있습니다. 제 경우에는 2.6.15로 올리면 이상하게 잘 되던 wireless가 안되더군요. 1월 26일 : 밑에 wireless에 대한 해결방안을 적어놓았습니다.)
 bash:~$ apt-cache search source 2.6 
<!> 퀴즈: 똑같은 커널 소스가 어떤 때는 kernel-source-2.6.5일때도 linux-source-2.6.8.1일때도 있는데요, 그 이유는 무엇일까요?

정답: 리눅스 커널이 새로운 버젼 넘버링을 사용하기 때문입니다. 자세한 정보는 [http]여기에서 확인할 수 있습니다.


kernel-source는 데비안용이고 linux-source는 우분투용이기 때문에 가능한한 linux-source를 사용하는 것이 좋습니다. 데비안 팩키지의 의존성 문제가 완전히 해결된게 아니므로 "uninstalled package kernel-source"와 같은 경고가 나올 수 있으나, 무시해도 큰 문제는 없습니다 -- Bronson
(역자주 : 이 정보는 좀 오래된 것 같습니다. 전 이런 경고를 한번도 본 적이 없거든요.)


커널 소스를 다음의 명령어로 다운로드 받습니다.
bash:~$ sudo apt-get install linux-source 
<!> libncurses-dev와 libqt3-dev를 설치할 것을 추천합니다. 왜냐하면 libncurses-dev는 menuconfig를 하는데 필요하고 libqt3-dev는 xconfig를 하는데 필요하기 때문입니다. 이 중 적어도 하나는 설치합니다 (밑에 보면 자세히 이유가 나옵니다)

이제 소스가 /usr/src에 다운로드 돼있을 것입니다.



4 소스 압축 풀기 #



이 문서에서는 현재 최신 커널인 2.6.12.10 버젼을 예로 들어 설명하겠습니다.
bash:~$ cd /usr/src bash:/usr/src$ ls -l linux-source-2.6.12.10.tar.bz2 
만약 이전의 커널 소스가 linux에 설치되어 있다면 지웁니다.
bash:/usr/src$ rm linux 
<!> 만약 linux에 이전 소스가 있다면 바로 압축을 풀지 않는게 좋습니다. 새 커널 소스가 이전 소스를 덮어쓰게 된다면 컴파일이 안될 가능성이 높기 때문입니다.

그리고 다음과 같이 압축을 풉니다.
bash:/usr/src$ tar xjvf linux-source-2.6.12.10.tar.bz2 
<!> 여기서는 sudo를 사용하지 않는게 좋습니다.
<!> 소스가 .bz2로 압축되어 있으면 xjvf로 풀고 .gz로 일 경우엔 xzvf로 풉니다.


linux 디렉토리로 링크를 겁니다.
bash:/usr/src$ ln -s linux-source-2.6.12.10 linux 
모든 것이 제자리에 있는지 확인합니다. 다음과 같은 화면이 보여야 합니다.
 bash:/usr/src$ ls linux@  linux-source-2.6.12.10/  linux-source-2.6.12.10.tar.bz2 



5 커널 설정하기 #



커널을 설정하는데는 여러가지 방법이 있지만 여기서는 xconfig를 사용하도록 하겠습니다. 우선 /usr/src/linux 디렉토리로 이동한 후 다음의 명령들을 실행합니다.
$ cd /usr/src bash:/usr/src/$ cd linux-2.6.12.10 bash:/usr/src/linux-2.6.12.10
$ cp /boot/config-`uname --kernel-release` ./.config bash:/usr/src/linux-2.6.12.10
$ cd /usr/src/linux bash:/usr/src/linux
$ make xconfig
만약 X를 사용하지 않거나 마우스를 쓰지 않고 싶으면 다음과 같이 합니다.
bash:/usr/src/linux$ make menuconfig 
<!> 경고: 적어도 bus, disk 그리고 root 파일 시스템 드라이버는 커널에 정적(statically)으로 컴파일 되어야 합니다. 그렇지 않을 경우 부팅이 되지 않습니다. [https]KernelBuildpackageHowto에서는 재설정이 필요없는 커널 컴파일에 대해 설명하고 있으니 관심 있으신 분은 방문해 보시기 바랍니다.


6 커널 빌드하기 #



6.1 make-kpkg #



커널을 빌드하기 위해서는 "make-kpkg"를 실행해야 합니다. make-kpkg는 쉘 스크립트로, 자동으로 "make dep; make clean; make bzImage; make modules"를 순서대로 실행해 줍니다. 몇분 정도 시간을 들여 make-kpkg 매뉴얼을 읽어 보십시오. make-kpkg 명령어는 꽤 복잡해서 처음에는 거부감이 느껴질 수도 있습니다. make-kpkg의 기본 문법은 다음과 같습니다.

bash:/usr/src$ make-kpkg <options> <target> 
여기서 <target>은 커널 이미지가 될 것입니다. 옵션 중에서는 제일 중요한 "--append-to-version"과 "--revision"에 대해서 알아보도록 하겠습니다.


6.2 --append-to-version #



첫번째 옵션은 커널 버젼에 원하는 문자를 더할 수 있게 해줍니다. 영어 알파벳이나, "+"와 "."은 사용할 수 있으나 "_"은 사용할 수 없습니다.


다음은 필자의 리눅스 커널입니다.
bash:/usr/src$ /usr/src/$ uname -a Linux Handrake 2.6.12-10-386 #1 Mon Jan 16 17:18:08 UTC 2006 i686 GNU/Linux 
<!> --append-to-version을 쓸 때에는 데비안 커널에서 자주 사용되는 "-686", "-K7", "-sparc"와 같은 것은 피하는게 좋습니다.

커널 모듈들은 /lib/modules 안의 디렉토리에 존재합니다. 그러므로 새로운 이름의 커널 이미지를 설치할 때마다 패키지 인스톨러는 /lib/modules에 새 모듈 디렉토리(커널 이름을 일부 포함한)를 생성시킬 것입니다.


이 말은 --append-to-version을 사용하면 다른 이름으로 커널 이미지를 빌드할 수 있을 뿐만 아니라 새 커널 모듈들이 /lib/modules 안에 존재하는 다른 커널 모듈들과 충돌하는 것을 막아준다는 말입니다.


<!> 만약 이미 있는 커널과 같은 이름으로 커널을 설치한다면(같은 버젼에 --append-to-version으로 같은 이름으로 해주었을 때), 새 커널은 이전 것을 덮어쓰게 됩니다. 여기서 그만두라는 경고가 나오는데 그만두는게 좋습니다. --append-to-version으로 다른 이름을 설정한 뒤 빌드합니다.


6.3 --revision #



또다른 make-kpkg 옵션은 "--revision"인데, 이 옵션은 커널 이름이 아닌 데비안 팩키지의 이름을 변경할 수 있게 해줍니다. --append-to-version처럼 "+"와 "."는 가능하나 "_"는 사용이 불가능합니다. --revision 뒤에 아무 것도 지정해 주지 않으면 make-kpkg는 자동으로 "10.00.Custom"을 붙입니다.


다만 여기서 주의할 점은 --revision에 다른 값을 지정해 주었다고 해서 같은 이름의 커널 간의 충돌이 방지되는 것은 아니라는 것입니다. 이 옵션은 단지 유저에게 두 커널이 완전히 같지 않다는 것을 알려주는 것 뿐으로 흔히 같은 커널을 작은 변화만으로 다시 컴파일하거나 할 때 사용됩니다.


6.4 커널 팩키지 이름 #



데비안 커널 이미지 파일명은 다음의 형식을 지닙니다.


kernel-image-(kernel-version)(--append-to-version)_(--revision)_(architecture).deb


(커널) 팩키지 이름은 첫번째 밑줄 "_" 전의 문자열과 일치합니다.
bash:/usr/src$ ls kernel-image-2.6.12.10.181004_10.00.Custom_i386.deb 
이제는 왜 make-kpkg 옵션에 밑줄을 쓸 수 없는지 알게 되었을 (팩키지 이름을 다르게 할 수 있으므로) 것입니다.

개인적으로는 매번 커널 컴파일을 할 때마다 --append-to-version으로 다른 값을 주고 make-kpkg가 지정하는 기본 revision을 사용하는걸 추천합니다. 필자에겐 날짜가 조합된 값이면 충분하다고 생각되나 다르게 하고 싶으면 그렇게 해도 큰 상관은 없습니다.


<!> make-kpkg의 두 옵션들이 뭐가 다른지 잘 이해가 가지 않거나 위에 추천한 대로 옵션을 주지 않고 싶으면 /usr/share/doc/kernel-package/README.gz 을 읽어보십시오. (쉬운 방법은 "zless README.gz"으로 보는 것입니다.) make-kpkg와 데비안 팩키지들에 전체적으로 좀더 익숙해 질 때까지는 그것들에 대한 사람들의 취향 같은것에는 신경쓰지 않는게 좋습니다. (이건 확실치 않네요. 좀더 좋은 의견 있으시면 고치거나 코멘트를 달아주세요)


6.5 fakeroot #



src 그룹에 자기 계정을 추가 시켜놓았다면 대부분의 커널 팩키지 작업은 일반 유저 권한만으로 가능합니다. 하지만 커널 패키지의 몇몇 파일들(커널이나 커널 모듈들)은 루트 권한으로 만들고 돌리는게 좋습니다.


fakeroot를 사용하면 make-kpkg를 일반 유저 권한으로 시작하고 대부분의 작업을 마치는 것이 가능합니다. 맨 끝부분에 가서 fakeroot는 루트 환경을 흉내내 커널 이미지 팩키지를 만들게 됩니다.


make-kpkg 매뉴얼은 fakeroot를 이용하는 한 방법을 제시해 줍니다; 이 문서에서는 fakeroot를 make-kpkg 앞에 직접 입력하여 다음과 같이 간단하게 처리하도록 하겠습니다.
fakeroot make-kpkg <options> <target>  
드디어, 여기까지 왔습니다. 이젠 커널 이미지를 만들 준비가 된 것입니다.
bash:/usr/src/linux $ fakeroot make-kpkg clean 
한 다음, 다음을 실행합니다.
bash:/usr/src/linux $ fakeroot make-kpkg --append-to-version=.181004 kernel_image --initrd binary 
이제는 컴퓨터가 컴파일을 마치는걸 기다리는 일만 남았습니다. 컴퓨터가 열심히 일하는 동안 잠시 다른 일을 하고 오세요.


7 커널 이미지 팩키지 설치하기 #



커널 이미지를 빌드했으면 이제 커널과 커널 모듈을 포함한 커널 이미지 팩키지를 설치합니다. 먼저 빌드가 제대로 되었는지 /usr/src 디렉토리로 가서 확인해봅니다.
 bash:/usr/src/linux$ cd .. 
bash:/usr/src$ ls kernel-image-2.6.12.10.181004_10.00.Custom_i386.deb
linux@ linux-source-2.6.12.10/ linux-source-2.6.12.10.tar.bz2
제대로 되어있는 것을 확인할 수 있습니다. 여기서 눈여겨 볼 점은 --append-to-version으로 지정해준 커널 이름이 팩키지 파일명의 일부가 되었다는 점입니다.

커널과 커널 모듈을 설치하기 위해서는 다음과 같이 합니다.
bash:/usr/src$ sudo dpkg -i kernel-image-2.6.12.10.181004_10.00.Custom_i386.deb 
커널 이미지 팩키지를 디스크로부터 설치하려면 (데비안 아카이브에서 설치와는 달리) 파일명을 정확히 써줘야 합니다. 물론 탭으로 자동완성 기능을 쓸 수도 있습니다.

모든 것이 잘 풀렸으면 남은건 리부팅하는 것뿐입니다. 만약 새로 만든 커널로 부팅이 안된다면, 이전 커널을 사용하거나 부팅 디스크를 넣고 재시작합니다. 커널 설정으로 다시 가서 이것저것 바꾼 다음 다시 시도해 봅니다.



8 최종 정리 #

8.1 커널 홀드 #



--append-to-version을 사용했다면 apt-get로 커널 업그레이드를 하는데 큰 문제가 없습니다. 그렇지만 영 불안하다면 다음과 같은 방법으로 좀 더 확실히 해둘 수도 있습니다.
bash:~$ echo "kernel-image-2.6.12.10.181004 hold" | sudo dpkg --set-selections 
물론 커널 이름은 자기것으로 바꿔줘야 합니다. dpkg가 알고 있는 팩키지( 인스톨된 팩키지나 아카이브 리스트에 있는 것들 )를 가리키려면 파일명을 전부 써주지 않고 팩키지 이름만을 씁니다. "|" 문자는 Shift-로 쓸 수 있습니다. 그러면 팩키지가 홀드가 되어있는지 확인합니다.
bash:~$ dpkg --get-selections | grep kernel-image  kernel-image-2.6.12.10.181004_10.00.Custom_i386.deb  hold 
<!> 누군가 팩키지 홀딩이 뭘하고 왜 쓰는지 등에 대한 문서를 작성해 주셨으면 합니다.

8.2 심볼릭 링크 제거 #



다음으로 할 일은 /usr/src 디렉토리에 만들어 놓은 심볼릭 링크를 제거하는 일입니다. 여기에는 다음과 같은 몇가지 이유가 따릅니다.


1. 다음번에 데비안 아카이브가 아닌 곳에서 커널을 직접 다운받고 압축을 풀 때 이전 커널 소스 디렉토리를 덮어쓸 위험이 있습니다.
2. 비록 데비안 아카이브에서 커널 소스를 받고 압축을 다른 곳에 푼다고 하더라도 "linux" 심볼릭 링크가 예전 소스에 걸려 있는것을 잊고 그냥 컴파일 할 가능성이 꽤나 높습니다.
3. 패치나 다른 소스 코드를 특정한 소스 트리에 포함 시키고자 할 때 엉망이 되어 버릴수도 있습니다. 하지만 심볼릭 링크를 제거해 주면 이러한 것을 막을수 있죠.


심볼릭 링크를 제거하려면 다음과 같이 합니다.
bash:~$ rm /usr/src/linux 


8.3 커널 백업하기 #



꼭 필요한 작업은 아니지만 만들어놓은 맞춤형 커널(.deb로 되어있는 파일)을 백업해 놓는 것이 좋습니다. 안전한 곳으로 복사 해놓습니다.


<!> 커널이 모듈들과 함께 팩키지 되어 있으면 커널 설정에서 포함 시켜놓은 다른 머신에 언제든지 설치 할 수 있습니다. 물론 지금 머신에 나중에 다시 설치하는 것도 가능합니다.


8.4 부팅 디스크 만들기 #



방금 설치한 커널용으로 부팅 디스켓을 또 하나 만듭니다. 이전 부팅 디스켓을 덮어 쓰기보단 새 디스켓을 쓰기를 추천합니다; 현재의 커널이 안정적으로 작동하는지 시간을 두고 볼 필요가 있기 때문입니다. 시스템을 망쳤을 때 부팅 디스켓이 빛을 발할 것합니다.
bash:/usr/src# cd /boot bash:/boot# mkboot /boot/vmlinuz-2.4.18.030320 


8.5 다음 커널 만들기 #



만약 새로운 사운드 카드를 사거나 깜박 잊고 빠뜨렸던 기능을 추가하고자 할때는 커널 설정만 다시 해주면 됩니다. "fakeroot make-kpkg clean"을 해준 다음 --append-to-version에 다른 값을 주고 새로 빌드합니다. 대충 다음과 같은 순서를 따릅니다.
bash:~$ cd /usr/src bash:/usr/src$ ln -s linux-source-2.6.12.10 linux 
bash:/usr/src$ cd linux
bash:/usr/src/linux$ make xconfig (커널 재설정)
bash:/usr/src/linux$ fakeroot make-kpkg clean (뭔가 많이 지울 것입니다.)
bash:/usr/src/linux$ fakeroot make-kpkg --append-to-version=.181004 kernel_image --initrd binary
(화면 가득히 뭔가가 나올 것입니다.)


8.6 이전 설정 사용하기 #



맞충형 커널을 설치하면 커널 설정은 자동으로 /boot/config-x.y.z로 복사됩니다. 만약을 위해 백업 (되도록이면 여러 군데로) 해놓습니다.


옵션들의 미로를 뚫고 원하는 하드웨어와 기능들을 모두 지원하는 커널을 만들어 놓았는데 오늘 새 버젼의 커널이 나온다면 당연히 또 업그레이드를 하고 싶을 것입니다. 이럴 때 커널 설정을 처음부터 다시 해야 할까요? 그렇지 않습니다.


커널 소스를 다운로드 받고 압축을 푼 다음 심볼릭 링크를 겁니다. 그리고 /usr/src/linux로 이동한 다음 백업해 놓은 설정 파일을 복사하고 "make oldconfig"를 실행합니다.
bash:/usr/src/linux$ cp /boot/config-2.4.18.030320 .config 
bash:/usr/src/linux$ make oldconfig
새 커널 옵션에 대해 몇가지 물어볼 것입니다. 보통은 모든 질문에 "no"로 대답하는 것이 안전합니다; 관심있는 옵션이 있으면 미리 표시해 놓습니다.

<!> oldconfig 설정을 끝낸 다음 xconfig나 menuconfig를 실행해서 뭘 선택했는지 보고 표시해 놓은 옵션 중 잘못된 선택이 있으면 바꿉니다.


자기만의 설정으로 최신 안정버젼의 커널을 빌드합니다.
fakeroot make-kpkg clean 



9 점검해야 할 사항들 #



  • 부팅 디스켓을 만듭니다.
  • 필요한 팩키지 인스톨
    • build-essential fakeroot kernel-package
  • 소스 트리 설정
    • 자신을 src 그룹에 추가하고 로그아웃, 로그인으로 다시 들어옵니다. 그룹 설정이 잘 되었나 한번 확인해봅니다.
    • 전에 걸어 두었던 심볼릭 링크를 제거합니다.
    • 소스 압축을 팝니다.
    • 새로 심볼릭 링크를 겁니다.
  • 커널 설정
    • 이전 설정 파일을 쓰려면 cp /boot/config-x.y.z .config
    • 다음중 하나를 실행합니다. make oldconfig, make xconfig, make menuconfig
    • 나중을 위해 .config 파일을 백업 해놓습니다.
  • 커널 이미지 팩키지 빌드
    • fakeroot make-kpkg clean
    • fakeroot make-kpkg --append-to-version=alpha+numeric.but.no.underscore kernel_image --initrd binary
  • 커널 이미지 팩키지 설치
    • dpkg -i kernel-image-x.y.z.yy.mm.dd_10.00.Custom_i386.deb
    • 리부팅
  • 팩키지를 홀드한 다음 echo "kernel-image-x.y.z.yymmdd hold" | dpkg --set-selections로 확인합니다.
  • 심볼릭 링크를 제거합니다.
  • 커널 이미지를 백업합니다.
  • 새 부팅 디스켓을 만듭니다.


10 링크 #



다음은 커널을 빌드하는 또다른 방법들에 관한 링크입니다.


http://www.gurtlush.org.uk/article.php?story=20040522233716364
http://www.desktop-linux.net/debkernel.htm
http://newbiedoc.sourceforge.net/system/kernel-pkg.html


P.S. 1 역시 첫 번역이라 그런지 여기저기 마음에 안드는 부분들이 많네요. 앞으로 차차 고쳐나가겠습니다. -handrake
P.S. 2 이상하게 최신 커널인 2.6.15로는 무선 인터넷이 잘 안되네요. -handrake
P.S. 3 무선 인터넷이 안되는 문제는 ipw2200 드라이버 버젼이 2.4가 아니라서 그렇다고 합니다. http://bbs.kldp.org/viewtopic.php?t=69639
http://ubuntu.or.kr/rubybbs/index.php?bid=ubuntu&id=370&page=1
여기서 보고 2.4 버젼을 받아서 해보니 문제없이 되었습니다. 주의할점은 드라이버 파일 이름 마지막에 커널 이름을 덧붙여 줘야 한다는 점입니다. /lib/hotplug/firmware를 보시면 어떻게 되어 있는지 자세히 보실 수 있습니다. -handrake





prev 1 ··· 14 15 16 17 next