[Ubuntu] 커널 컴파일

Linux 2012. 9. 12. 17:29


[Ubuntu 11.10 - 64bit] [kernel version : 3.2.11]


커널 소스 다운로드

kernel.org 에서 원하는 버전의 커널 소스 다운

bunzip2 linux-x.y.z.tar.bz2

tar xvf linux-x.y.z.tar

커널 소스 이동

cp -R linux-x.y.z /usr/src/kernels/

컴파일시 필요한 패키지

sudo apt-get install libncurses5-dev

sudo apt-get install libncurses5-dbg

[CentOS : yum install ncurses-devel]

컴파일 과정

/- 처음 생략 가능 /-
(
make mrproper
make clean
make distclean
)

기존의 .config 파일을 복사
cp /usr/src/linux-'현재 사용하고 있는 커널 버전'/.config ./.config

커널 옵션 설정
make menuconfig -> load(밑에서 두번째) -> 필요한 옵션 설정 -> 저장

커널 컴파일 (컴퓨터 사양에 따라 시간이 오래 걸릴수 도 있음)
make bzImage [CentOS : make all]

모듈 컴파일 (컴퓨터 사양에 따라 시간이 오래 걸릴수 도 있음)
make modules [CentOS : make modules_install]

설치
make install



GRUB 설정

vi /etc/default/grub 수정
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=10
GRUB_HIDDEN_TIMEOUT_QUIET=false  // 부팅시 grub 메뉴 표시할 것인지 안할 것인지 : false - 표시
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR='lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
#GRUB_CMDLINE_LINUX=""
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

or sudo update-grub2
(우분투 최신버전은 grub2 사용)


재부팅하여 커널 선택화면 확인


, .

인증되지 않은 RedHat Linux6 을 사용하다 보면 걸리는 yum 문제.

 

그렇다고… 정품을 살 수도 없는거고..ㅠㅠ

 

그래서 적는다. 로컬 레포지토리 및 yum grouinstall이 가능하게 하는 설정법을!!!!!

 

지금부터 시작!!!!

 

준비물 : RedHat Enterprise Linux가 설치되어 있는 컴퓨터, RedHat Enterprise Linux 씨디.

 

준비물이 모두 갖추어졌다면 아래의 과정을 따라하자^^

 

참고로 필자는 Minimal로 설치된 RedHat Linux를 사용할 것이다.

 

① 살며시 PC를 키고(VMWare를 사용하는 사람은 VMWare를 키자^^) RedHat Enterprise Linux DVD를 넣어둔다^^

 

② 다음의 명령어를 입력하여 DVD를 마운트한다.

# mkdir /media/cdrom

# mount /dev/cdrom /media/cdrom

 

③ Repository 설정을 위해 아래의 명령을 참고하여 RPM 3개를 설치한다.

# cd /media/cdrom/Packages

# rpm -ivh createrepo-0.9.8-5.el6.noarch.rpm deltarpm-3.5-0.5.20090913git.el6.i686.rpm python-deltarpm-3.5-0.5.20090913git.el6.i686.rpm

덧. 위 rpm 명령을 입력할 때 rpm –ivh creature[탭] delta[탭] python-delta[탭] 이런식으로 입력하면 쉽게 설치된다^^

 

④ RPM들을 복사할 장소를 만들고 rpm들을 복사한다. 필자는 /home/myrepo/rhel6 으로 지정할 것이다^^

# mkdir /home/myrepo/rhel6 –p

# cp * /home/myrepo/rhel6/

 

⑤ 복사가 끝났으면 차후 grouplist, groupinstall과 같은 yum의 group명령어를 사용하기 위하여 다음 파일을 가져와야 한다. 아래의 과정을 따라하자.

# cd /media/cdrom/repodata/

# cp *comps*.gz /home/myrepo/comps.xml.gz

# cd /home/myrepo

# gunzip comps.xml.gz

이 단계에서 복사한 comps.xml이 바로 group관련 파일이다^^

 

⑥ 이제 로컬 Repository를 추가하기 위해 다음의 명령을 사용하여 파일을 생성하고 다음 작성된 내용을 입력한 후 저장한다.

# vi /etc/yum.repos.d/local.repo

<입력할 내용>

[rhel6]                                <- 자신이 옮긴 디렉터리명을 적는다.

name=RedHat Linux Local Repository                <- 원하는대로 적는다^^;

baseurl=file:///home/myrepo/                    <- 이곳에 자신이 옮긴 곳 상위 디렉터리명을 적는다.

enabled=1

gpgcheck=0

 

:wq

 

⑦ 자 이제 자신이 생성한 디렉터리로 이동하자(가장 내부가 아닌 바로 그 위로). 그 후 아래의 명령어를 입력하여 Repository를 생성한다.

# cd /home/myrepo/

# createrepo -g comps.xml .

 

⑧ 자 Repository가 완성되었다. 다음의 명령을 입력하여 제대로 설정되는지 확인해보자^^

# yum list

# yum grouplist

 

이 두 가지를 수행했을 때 모두 잘 나온다면 성공이다^^

 

 

여기까지 잘 수행했다면 앞으로

yum –y install

혹은

yum –y groupinstall

등을 사용하여 설치가 용이해질 것이다^^

다들 yum 안된다고 울지말고.. 이 방법을 사용해서 로컬 Repository를 사용하자!!!^^


 출처 : http://cjw8349.blog.me/20164955805

, .

CentOS 54, 커널컴파일,

00 CentOS는 Fedora, RedHat 의 친구사이라, 같을줄 알았는데,

조금은 달랐다.

00 먼저 CentOS용 커널컴파일도구를 다운받는다.

# yum install gcc
# yum install ncurses-devel
# yum install rpm-build
# yum install bison
# yum install depmod
# yum install mkinitrd

현재 센토스54는 커널이 xen을 적용한것이고,
xen을 적용한 최신버젼인 2.6.18 이다.

00 커널소스를 다운받고, 압축을 푼다.

# cd /usr/src

/usr/src/ # wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.32-rc5.tar...

/usr/src/ # tar xvjf linux-2.6.32-rc5.tar.bz2

/usr/src/ # ln -s linux-2.6.32-rc5 linux

00 메뉴구성및 청소,

cd /usr/src/linux

/usr/src/linux/ # make clean

/usr/src/linux/ # make mrproper

/usr/src/linux/ # make menuconfig

00 컴파일실행

/usr/src/linux/ # make rpm

00 커널생성확인작업,

에러없이 잘됐다면,

/usr/src/redhat/SRPMS/ 에는

kernel-2.6.32rc5-1.src.rpm 이 생기고,

그리고, 자신의 CPU종류에 따라서, 각기다른폴더안에 만들어지는데,

뭐,, 그렇다고, 전혀 다른폴더는 아니고,

/usr/src/redhat/RMPS/ 이 안에 다양한 폴더가 있는데,

그것들이 모두 CPU종류별로 구분돼있는것이다.

지금 사용중인 나의 CPU는 32비트용 이므로,

컴파일작업한 커널이

/usr/src/redhat/RPMS/i386 안에 만들어진다.

다른타입의 CPU라면 옆에 폴더에 만들어질것이다.

만들어진 커널이미지의 이름은,

kernel-2.6.32rc5-1.i386.rpm 으로 만들어진다.

00 커널설치작업

이젠 그리로 들어가서,

# cd /usr/src/redhat/RPMS/i386

바로 여기서 커널설치명령을 내린다.

# rpm -ivh --nodeps kernel-2.6.32rc5-1.i386.rpm

여기서 --nodeps 는 의존성에러방지용이다.

00 이젠 ramdisk를 수동으로 만들어야한다.
이게없으면 부팅이 안되기 때문이다.

# cd /boot

boot/ # mkinitrd initrd-2.6.32-rc5.img 2.6.32-rc5

00 grub.conf에다 새로운커널을 적용하는 문구를 적어줘야한다.

cd /boot/grub

/boot/grub/ # vi grub.conf

/boot/grub/ # vi menu.lst

00 재부팅

# reboot

00 재부팅후에 uname -r 해줘서,
새로운 커널명이 나오면 커널작업이 성공한것이다.

수동명령(Fedora식 명령)
yum install rpm-build 를 안하고하니,
에러유발로 이렇게도 해봤다.
그러나, 이것 적용 안할 예정

make all
make modules_install
make install

그리고,
vi /etc/modprobe.conf 로 수정해줘야한다는데,
글쎄 그건 자동으로 되는것같은데,

커널을 완전히 설치한후에,

depmod 와 mkinitrd 는 /sbin/안에 있으므로,

1. 모듈들의 의존성을 만들어주기위해서,

/boot/ # /sbin/depmod 2.6.32-rc5

2./boot/ # /sbin/mkinitrd -v initrd-2.6.32-rc5.img 2.6.32-rc5

이렇게하다 에러 나오면, No module dm-mem-cache found for kernel 2.6.32-rc5, aborting.

/boot/ # mkinitrd --without-dmraid -v initrd-2.6.32-rc5.img 2.6.32-rc5

3./boot/grub/grub.conf 를 수정해야한다.
밑에 내용을 참고할것,

1 title CentOS (2.6.32-rc5)
2 root (hd0,0)
3 kernel /vmlinuz-2.6.32-rc5 ro root=/dev/VolGroup00/LogVol00
4 initrd /initrd-2.6.32-rc5.img

The file /boot/grub/grub.conf will be like this:

01 # grub.conf generated by anaconda
02 #
03 # Note that you do not have to rerun grub after making changes to this file
04 # NOTICE: You have a /boot partition. This means that
05 # all kernel and initrd paths are relative to /boot/, eg.
06 # root (hd0,0)
07 # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
08 # initrd /initrd-version.img
09 #boot=/dev/sda
10 default=0
11 timeout=5
12 splashimage=(hd0,0)/grub/splash.xpm.gz
13 hiddenmenu
14 title CentOS (2.6.18-128.el5)
15 root (hd0,0)
16 kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
17 initrd /initrd-2.6.18-128.el5.img
18 title CentOS (2.6.32-rc5)
19 root (hd0,0)
20 kernel /vmlinuz-2.6.32-rc5 ro root=/dev/VolGroup00/LogVol00
21 initrd /initrd-2.6.32-rc5.img


http://www.fogonacaixadagua.com.br/2009/09/how-to-compile-a-new-kernel-i...

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[root@localhost boot]# ls -al
합계 46813
drwxr-xr-x 4 root root 1024 10월 25 13:22 .
drwxr-xr-x 23 root root 4096 10월 25 11:22 ..
-rw-r--r-- 1 root root 161 9월 3 18:16 .vmlinuz-2.6.18-164.el5xen.hmac
-rw-r--r-- 1 root root 952318 9월 3 18:16 System.map-2.6.18-164.el5xen
-rw-r--r-- 1 root root 1293759 10월 25 12:54 System.map-2.6.32-rc5
-rw-r--r-- 1 root root 68285 9월 3 18:16 config-2.6.18-164.el5xen
-rw-r--r-- 1 root root 82676 10월 25 12:54 config-2.6.32-rc5
drwxr-xr-x 2 root root 1024 10월 25 13:38 grub
-rw------- 1 root root 3234265 10월 24 18:22 initrd-2.6.18-164.el5xen.img
drwx------ 2 root root 12288 10월 24 18:11 lost+found
-rw-r--r-- 1 root root 80032 3월 13 2009 message
-rw-r--r-- 1 root root 107385 9월 3 18:16 symvers-2.6.18-164.el5xen.gz
-rwxr-xr-x 1 root root 36121495 10월 25 12:42 vmlinux-2.6.32-rc5.bz2
-rw-r--r-- 1 root root 2225793 9월 3 18:16 vmlinuz-2.6.18-164.el5xen
-rw-r--r-- 1 root root 2332320 10월 25 12:54 vmlinuz-2.6.32-rc5
-rwxr-xr-x 1 root root 817160 9월 3 19:06 xen-syms-2.6.18-164.el5
-rw-r--r-- 1 root root 375877 9월 3 16:27 xen.gz-2.6.18-164.el5

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[root@localhost grub]# ls -al
합계 263
drwxr-xr-x 2 root root 1024 10월 25 13:38 .
drwxr-xr-x 4 root root 1024 10월 25 13:22 ..
-rw-r--r-- 1 root root 63 10월 24 18:33 device.map
-rw-r--r-- 1 root root 7584 10월 24 18:33 e2fs_stage1_5
-rw-r--r-- 1 root root 7456 10월 24 18:33 fat_stage1_5
-rw-r--r-- 1 root root 6720 10월 24 18:33 ffs_stage1_5
-rw------- 1 root root 855 10월 25 13:34 grub.conf
-rw------- 1 root root 646 10월 25 13:30 grub2.conf
-rw-r--r-- 1 root root 6720 10월 24 18:33 iso9660_stage1_5
-rw-r--r-- 1 root root 8192 10월 24 18:33 jfs_stage1_5
lrwxrwxrwx 1 root root 11 10월 24 18:33 menu.lst -> ./grub.conf
-rw-r--r-- 1 root root 6880 10월 24 18:33 minix_stage1_5
-rw-r--r-- 1 root root 9248 10월 24 18:33 reiserfs_stage1_5
-rw-r--r-- 1 root root 55808 3월 13 2009 splash.xpm.gz
-rw-r--r-- 1 root root 512 10월 24 18:33 stage1
-rw-r--r-- 1 root root 104988 10월 24 18:33 stage2
-rw-r--r-- 1 root root 7072 10월 24 18:33 ufs2_stage1_5
-rw-r--r-- 1 root root 6272 10월 24 18:33 vstafs_stage1_5
-rw-r--r-- 1 root root 8904 10월 24 18:33 xfs_stage1_5

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

/boot/grub/grub.conf

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/hdc
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
##title CentOS (2.6.32-rc5)
## root (hd0,0)
## kernel /xen.gz-2.6.32-rc5
## module /vmlinuz-2.6.32-rc5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
## module /initrd-2.6.32-rc5.img

title CentOS (2.6.18-164.el5xen)
root (hd0,0)
kernel /xen.gz-2.6.18-164.el5
module /vmlinuz-2.6.18-164.el5xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.18-164.el5xen.img

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

이건 분위기바꿔서, /boot/안의 화일과
/boot/grub/grub.conf 의 내용중에서,
xen어쩌구,, 하는 화일 때문인데,
그것을 해결하려면, menuconfig를
다시 해야겠네,,
rpm이 웬수다.

http://derwynd.com/2008/11/10/fedoraredhat-kernel-rpm-with-xen-reiserfs/

https://lists.sdsc.edu/pipermail/npaci-rocks-discussion/2008-September/0...

Fedora/Redhat Kernel RPM with Xen & reiserfs

Posted On November 10, 2008

Filed under Uncategorized

Comments Dropped leave a response

Download the src rpm

(eg. kernel-2.6.18-92.el5.src.rpm)

$ rpm -ivh kernel-2.6.18-92.el5.src.rpm

$ cd /usr/src/redhat/SPECS/

$ rpmbuild -bb kernel-2.6.spec

This will build
kernel-2.6.18-92.el5.x86_64.rpm kernel-devel-2.6.18-92.el5.x86_64.rpm
kernel-debug-2.6.18-92.el5.x86_64.rpm kernel-headers-2.6.18-92.el5.x86_64.rpm
kernel-debug-debuginfo-2.6.18-92.el5.x86_64.rpm kernel-xen-2.6.18-92.el5.x86_64.rpm
kernel-debug-devel-2.6.18-92.el5.x86_64.rpm kernel-xen-debuginfo-2.6.18-92.el5.x86_64.rpm
kernel-debuginfo-2.6.18-92.el5.x86_64.rpm kernel-xen-devel-2.6.18-92.el5.x86_64.rpm
kernel-debuginfo-common-2.6.18-92.el5.x86_64.rpm

Install the following rpm
$ kernel-xen-2.6.18-53.el5 xen-libs

Check the grub.conf file the xen lines will be added

#boot=/dev/sda
default=2
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-53.el5xen)
root (hd0,0)
kernel /xen.gz-2.6.18-53.el5
module /vmlinuz-2.6.18-53.el5xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.18-53.el5xen.img
title Red Hat Enterprise Linux Server (2.6.18-53.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.18-53.el5.img

If you list the files in /boot/ are added
vmlinuz-2.6.18-53.el5
initrd-2.6.18-53.el5.img
xen.gz-2.6.18-53.el5
xen-syms-2.6.18-53.el5

Now to build the kernel from the BUILD dir

$ cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/
$ make menuconfig

——————————————————————-

Processor type and features —>
[*] Enable Xen compatible kernel

File systems —>
Reiserfs support
[ ] Enable reiserfs debug mode
[ ] Stats in /proc/fs/reiserfs
[*] ReiserFS extended attributes
[ ] ReiserFS POSIX Access Control Lists
[ ] ReiserFS Security Labels

XEN —>
[*] Privileged Guest (domain 0)
<*> Backend driver support
Block-device backend driver
Block-device tap backend driver
Network-device backend driver
[ ] Pipelined transmitter (DANGEROUS)
Network-device loopback driver
PCI-device backend driver
PCI Backend Mode (Virtual PCI) —>
[ ] PCI Backend Debugging
< > TPM-device backend driver
Block-device frontend driver
Network-device frontend driver
<*> Framebuffer-device frontend driver
<*> Keyboard-device frontend driver
[*] Scrub memory before freeing it to Xen
[ ] Disable serial port drivers
<*> Export Xen attributes in sysfs
Xen version compatibility (3.0.2 and later) —>

——————————————————————-
Build the kernel (if you have not changed the Makefile the subversion is EXTRAVERSION = -92.el5debug)

This will create vmlinuz-2.6.18-92.el5debug

$ mkinitrd /boot/initrd-2.6.18-92.el5debug.img 2.6.18-92.el5debug
(For the initrd img)

Add lines to grub.conf
——————————————————————
default=2
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-53.el5xen)
root (hd0,0)
kernel /xen.gz-2.6.18-53.el5
module /vmlinuz-2.6.18-53.el5xen ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.18-53.el5xen.img
title Red Hat Enterprise Linux Server (2.6.18-53.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.18-53.el5.img
title Red Hat Enterprise Linux Server (2.6.18-53.el5Debxen)
root (hd0,0)
kernel /xen.gz-2.6.18-53.el5
module /vmlinuz-2.6.18-92.el5debug ro root=/dev/VolGroup00/LogVol00 rhgb quiet
module /initrd-2.6.18-92.el5debug.img
——————————————————————

Reboot

xen.gz-2.6.32-rc5
xen.gz-2.6.18-164.el5

grub.conf 와의 관계규명.

xen홈피주소::
http://www.xen.org/
xen details 1::
http://wiki.xensource.com/xenwiki/Korean

xen details 2 centos5::
http://www.howtoforge.com/centos_5.0_xen

xen kernel details::
http://wiki.xensource.com/xenwiki/Kernel.org_Linux_on_Xen

http://wiki.xensource.com/xenwiki/XenDom0Kernels

http://article.gmane.org/gmane.comp.emulators.xen.user/40892

이런저런 xen에 관한 문서를 보면서, ㅤㅎㅡㄾ어보니,
xen은 커널등을 암호화, 가상화화하는 방법으로 개발된것이고,
물론 커널만이 아니라, 다양한것들을 망라하고 있었다.
그런데 내가 목적으로 했던 2.6.32-rc5 같은 최신버젼에는
적용할수가 현재 없고, xen 개발자들이 연구중에 있는것같다.
여기 센토스54에 있는 2.6.18 버젼이 아직은 xen 을 적용한
최신버젼이고, 나는 여기서, 커널 업을 잠깐 보류해야할것같다.


, .

grub 부트로더 재설치

Linux 2010. 8. 25. 21:08
-----------grub 재설치 작업 정리----------

ubuntu feisty 시디로 부팅을 했다

부팅후 정보를 알아봤는데 하드디스크 정보는 다음과 같았다

/dev/sda - 80G IDE
sda1 - FAT32
sda2 - NTFS

/dev/sdb - 160G SATA
sdb1 - ext2 부트 파티션 (/boot)
sdb2 - ntfs 윈도우 파티션
sdb3 - 확장
sdb4 - ext3 ubuntu
sdb5 - swap
...

/dev/sdc - 320 SATA
sdc1 - NTFS data

터미널을 열어
# sudo su - 를 해서 root 로 변신을 한다

마운트 할 디렉토리르 만들고
# mkdir /mnt/target

리눅스 파티션을 마운트 한다
# mount /dev/sdb4 /mnt/target
(필자의 경우는 리눅스파티션이 sdb4이다)

필자와 같이 부트 파티션을 따로 두었다면
부트 파션도 같이 마운트 해준다
# mount /dev/sdb1 /mnt/target/boot

grub 재설치
#grub-install --root-directory=/mnt/target/ /dev/sdb

마운트 해제를 하고
재부팅을 하면 grub 가 복구 된걸 확인할 수 있다

원문 : http://blog.kfmes.com/175
참고 : http://cafe.daum.net/soodazengee/P0A9/13
, .