0. 절차
가. 설치한 우분투 버전의 커널 버전과 동일한 커널 컴파일 및 설치
나. 커널 버전 업 및 다운 그레이드를 위한 커널 컴파일 및 설치
1. 준비사항
가. OS: Ubuntu 16.04.2 LTS 64bits
나. Linux Kernel: 4.8.0
2. 커널 준비
가. $ sudo apt update && sudo apt upgrade: 커널 컴파일에 필요한 툴을 설치하기 전 현재 패키지를 업데이트
1) sudo: root 권한으로 명령어 수행
2) apt: 우분투 패키지 매니저
가) update: 패키지 업데이트
나) upgrade: 패키지 업그레이드
3) &&: 앞의 명령어가 정상 종료(성공)했다면 다음 명령어를 실행
4) sudo apt upgrade로 커널 업그레이드됨(4.8.0-36 -> 4.8.0-51)
나. $ sudo apt install build-essential kernel-package libncurses5-dev bison flex libssl-dev
3. 커널 컴파일(설치한 우분투 버전과 동일한 커널 버전)
가. 커널 가져오기
1) $ uname -r: 커널버전 확인
가) uname: 시스템 정보 출력
(1) -r: kernel release
나) 4.8.0-51-generic: 커널 4.8.0
2) https://www.kernel.org/pub/linux/kernel/ 에서 설치된 커널과 동일한 커널 가져오기
가) https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.8.tar.xz 받기
나) gz, bz2(V2.x이하 대), xz이 있으며 압축 형식만 다름
3) 컴파일용 디렉토리 생성 및 커널 압축해제
가) $ mkdir kernel: 사용자 홈디렉토리에 생성(ex) /home/user/kernel)
나) kernel 디렉토리에 linux-4.8.tar.xz 이동(ex) ~$ mv Downloads/linux-4.8.tar.xz kernel/
다) 압축해제
(1) tar xvJf linux-4.8.tar.xz: xz파일 확장자를 가지는 압축 파일을 해제
(가) tar: 파일을 묶거나 풀기(압축 및 해제 지원)
(1) x: 풀기
(2) v: 확인(묶거나 풀리는 파일을 표시)
(3) J: xz 파일 포맷, bz2는 j, gz는 z
(4) f: 파일지정
(2) linux-4.8 커널 디렉토리가 생성됨
라) linux-4.8 커널 디렉토리가 생성됨
나. 커널 컴파일
1) $ cd linux-4.8: linux-4.8 커널 디렉토리로 이동
가) $ cd linux-4.8
2) 커널 config 파일 가져오기
가) $ cp /boot/config-4.8.0-51-generic .config: boot 디렉토리의 커널 컨피그 파일을 .config로 변경
(1) .config가 실제 컨피그 설정파일이며 boot 디렉토리에는 현재 커널시 설정한 컨피그 파일이 저장되어 있으므로 그 파일을 활용
나) $ make menuconfig: 콘솔에서 커널 설정
(1) curses.h 에러가 나므로 해당 패키지 설치
(가) $ sudo apt install -y libncurses5-dev
a. install: 패키지 설치
b. -y: 패키지와 관련한 의존성 패키지가 있을 시 물어보지 않고 설치
다) 현재 설치된 커널과 동일한 설정을 가지는 커널 컴파일 상황이므로 빠져나가기(ESC)
3) 커널 컴파일 및 설치
가) $ fakeroot make-kpkg -j 2 --initrd --append-to-version=-user kernel-image kernel-headers: 커널 컴파일
(1) fakeroot: 실제 root 권한없이 빌드시 필요한 root 권함을 줌
(2) make-kpkg:
(가) -j: 컴파일에 사용할 프로세서 수
(나) --initrd: 램디스크 생성
(다) --append-to-version: 컴파일된 커널의 버전 뒤에 붙는 이름
(라) kernel-image: 커널 이미지 생성
(마) kernel-headers: 커널 헤더 생성
(a) 최근에는 kernel-headers 생성서 에러가 발생함
(b) touch REPORTING-BUGS로 해결
(3) make-kpkg 명령이 없어서 에러 발생하므로 해당 패키지 설치
(가) $ sudo apt install -y kernel-package
(4) 커널 컴파일중 opensslv.h 에러 발생
(가) $ sudo apt install -y libssl-dev
나) $ cd ..: 상위 디렉토리에 컴파일된 커널.deb가 생성
다) $ sudo dpkg -i *.deb: 커널 이미지 및 헤더를 설치
(1) dpkg: 데비안 패키지 매니저
(가) -i: 설치
4) 컴파일된 커널 확인
가) uname -r을 하여 컴파일된 커널을 확인
4. 최신 커널 컴파일
가. git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git: git으로 최신 커널 가져오기
1) git 명령이 없어 에러가 나므로 git 설치
가) sudo apt install git
2) git으로 가져오는 것이 웹에서 가져오는 것보다 느림
나. cd linux-stable: linux-stable 디렉토리로 이동
다. cp ../linux-4.8/.config .: 상위 디렉토리의 하위 디렉토리 linux-4.8에서 커널 컨피그 파일을 최신 커널 디렉토리에 복사
1) ..: 상위 디렉토리
2) .: 현재 디렉토리
라. make oldconfig: 이전 커널 버전의 설정 파일을 이용하여 최신 커널 버전의 설정 파일로 적용하고 추가된 기능을 사용 유무를 확인
1) 모르는 기능에 대해서는 넘기기(엔터)를 함
마. 이후의 사항에 대해서는 전과 동일함