수동으로 컴파일하여 업그레이드
Graf. Razorbacks
2019-06-06
저번 시간에 이어서 이번 시간에는 Cent OS 7 의 커널을 elrepo 저장소를 이용하지 않고, 순수하게 kernel.org 에서 다운로드 받아 설치하는 방법을 알려드리고자 합니다. 저번 시간에 수동 설치를 하는 것 보다 elrepo 를 이용하는 방법이 10배, 100배는 쉽고 빠르다고 말씀을 드렸는데요.
정말 그렇습니다. 수동 설치는 설치할 것들이 많고, 커널을 일일이 컴파일하기 때문에 그만큼 시간도 많이 필요합니다.
저 같은 경우에는 약 1시간 정도 걸린 것 같습니다. 가상 머신 환경에 12코어를 이양하고, 16GB 의 메모리를 할당했습니다.
결론적으론 오래걸린다는 것은 변하지 않습니다.
하지만, 리눅스를 탐구하기 위해 여기까지 찾아오신 여러분들을 위해 '삽질 한 김에 석유까지 파자!' 라는 마인드를 가진 제가 직접 보여드립니다.
:: 지난 시간에 최신 버전 커널이 "5.1.6" 이라고 말씀을 드렸는데, 잠시 일하고... 피곤해서 그냥 자고... 하다보니 오늘 6월 5일에 "5.1.7" 버전의 커널이 등장했습니다. 숫자만 바뀌었으니 진행하시는덴 문제가 없습니다.
기본적인 yum 명령어 배우기-(준비중) <- 언제 만들거냐고 물어보지 말아주세요...
준비사항 / 이번 시간에 필요한 것들
1. Cent OS 7 설치는 동일하게 "최소설치" + "호환성 라이브러리" + "개발용 도구" 이 세 가지를 설치했습니다.
2. bc, openssl-devel, ncurses-devel, elfutils-libelf-devel.x86_64, wget 설치
2-1. bc : Basic Calculator 리눅스용 계산 프로그램과 거기에 사용되는 프로그래밍 언어 모음
2-2. openssl-devel : SSL과 TLS 프로토콜을 오픈 소스로 구현한 openssl 의 개발용 라이브러리입니다.
2-3. ncurses-devel : 터미널과 독립된 방식으로 이용할 수 있도록 API를 제공하는 라이브러리입니다.
2-4. elfutils-libelf-devel.x86_64 : ELF 바이너리를 처리하고, 코어 / 프로세서의 유틸리티의 x86_64 아키텍처 개발용 라이브러리입니다.
2-5. wget : 웹 서버로부터 원하는 웹 사이트의 정보를 가져오는 역할을 하는 명령어 세트입니다.
이 페이지에서 배울 수 있는 것들
Step 1. Cent OS 7 의 패키지 업데이트 (기존과 동일)
Step 2. 커널 버전 체크 (기존과 동일)
Step 3. bc, openssl-devel, ncurses-devel, elfutils-libelf-devel.x86_64,
wget 라이브러리/패키지 설치
Step 4. wget 을 이용하여 kernel.org 에서 최신 커널 다운로드
Step 5. xxxx.tar.xz 압축 파일, 압축 해제 방법
Step 4. 새로운 커널 설치
Step 5. grub2 부트 로더 설정 (기존과 동일)
Step 6. 오래된 커널 제거 (기존과 동일)
Step 1. Cent OS 7 의 패키지 업데이트
// 이번 스텝에서는 Cent OS 7 의 업그레이드 및 업데이트하는 명령어를 배울 수 있습니다.
커널을 업그레이드하기 전에 가장 먼저해야 할 일은 모든 패키지를 최신 버전으로 업그레이드하는 겁니다.
구버전의 패키지들이 지원하지 않거나, 요소가 없을 수 있기 때문에 업그레이드가 필수입니다.
아래의 명령어를 입력하여 패키지를 업데이트 합니다.
# yum -y update
아래의 명령어를 통해 업데이트와 설치를 빠르게 할 수 있도록 입력합니다.
# yum install yum-plugin-fastestmirror
위의 방법을 진행하면 Cent OS 7 시스템이 업데이트되고, 모든 패키지가 최신 버전으로 업그레이드 됩니다.
Step 2. 커널 버전 체크
// 이번 스텝에서는 Cent OS 7 의 운영체제 및 커널 버전을 체크하고 그 명령어를 배울 수 있습니다.
아래의 명령어를 입력하여 확인합니다.
# cat /etc/redhat-release
# cat /etc/os-release
위의 두가지 명령어를 하나로 조합하여 이용할 수 있습니다.
# cat /etc/redhat-release && cat /etc/os-release
같은 명령어지만 한 번에 쓰거나, 나눠쓰거나 하는 차이밖에 없습니다.
커널 버전을 확인합니다.
# uname -r
커널 버전과 아키텍쳐를 확인하실 수 있습니다.
Step 3. bc, openssl-devel, ncurses-devel, elfutils-libelf-devel.x86_64, wget 라이브러리 / 패키지 설치
// 이번 스텝에서는 yum 명령어를 통해서 예/아니오 확인하지 않고, 여러 라이브러리 / 패키지를 하나의 명령줄로 설치할 수 있도록 하는 방법을 배웁니다.
어렵게 생각하실 필요가 없습니다.
그저 입력만 하면 됩니다.
# yum -y install bc openssl-devel ncurses-devel elfutils-libefl-devel.x86_64 wget
* " -y " 옵션이 이 명령의 메인입니다. 그냥 무조건 "예" 로 대답하라는 옵션입니다.
즉, 무조건 예하고 설치해! 입니다.
띄어쓰기에 유의하셔서 입력하셔야 합니다. 그 외에는 입력만 하면 됩니다. 그러면, 묻지도 따지지도 않고, 바로 설치가 됩니다!
저장소의 속도가 빠르다면 금방 설치 됩니다.
Step 4. wget 을 이용하여 kernel.org 에서 최신 커널 다운로드
// 이번 스텝에서는 wget 을 이용하여 파일을 다운로드 받는 법을 설명합니다. 꼭 커널이 아니여도 원하는 파일이 있다면, 다운로드 받을 수 있습니다.
// " cd " 명령어를 입력하여 CUI 환경에서 폴더들을 옮겨다니는 방법을 배웁니다.
wget 은 web get 이라는 뜻 입니다.
리눅스 커널을 담당하는 웹사이트를 한 번 방문해볼까요?
:: https://www.kernel.org/ ::
이곳이 바로 메인 리눅스 커널의 홈페이지입니다.
최신 버전 혹은 원하는 버전의 커널을 다운로드 받습니다. 최신 버전을 받을꺼니까 5.1.7 버전에서 “ tarball “ 에 오른쪽 클릭을 하여 링크 복사를 선택합니다.
그 다음에 주소창에 붙여넣기하여 그 주소를 기억하거나 보면서 입력합니다.
우리는 커널의 소스 코드를 다운로드 받는 것이기 때문에 먼저 Cent OS 7 의 소스 코드 폴더로 이동합니다.
아래의 명령어를 입력해주세요.
# cd /usr/src/
그러면, 호스트명 뒤에 폴더 이름이 추가됩니다. 예를 들자면 " [razorbacks@localhost src] # " 이라고 표현됩니다.
이 상태에서 wget 을 이용하여 커널을 다운로드 받습니다.
아래의 명령어를 입력합니다.
# wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.1.7.tar.xz
자, 다운로드가 완료되었습니다. " ls “ 명령어를 입력하면 다운로드 받은 것을 확인할 수 있습니다.
Step 5. xxxx.tar.xz 압축 파일, 압축 해제 방법
// 이번 스텝에서는 tar.xz 혹은 tar.gz 파일 압축 해제 방법을 배울 수 있습니다.
이제 다운로드 받은 linux-5.1.7.tar.xz 를 압축 해제합니다. (혹은 tar.gz 으로 다운로드 받으신 분이 있을 수도 있기 때문에 두 가지 모두 소개합니다.)
아래의 명령어를 입력합니다.
다운로드 받은 파일이 tar.xz 일 경우 : # xz -d linux-5.1.7.tar.xz 이후 # tar -xvf linux-5.1.7.tar.xz
다운로드 받은 파일이 tar.gz 일 경우 : # tar -xvzf linux-5.1.7.tar.gz
* 저번에 알려드린 " && " 방법으로 저는 한 번에 압축 해제를 진행하였습니다.
tar.xz 는 xz 해제 -> tar 해제 / tar.gz 는 한 번에 해제가 됩니다.
" && " 사용의 차이점은 한 줄에 쓰느냐, 두 번 나눠서 쓰느냐 차이입니다.
압축이 끝나고 나면 다시 한 번 " ls " 를 입력하여, 압축이 정상적으로 풀렸는지 확인합니다.
" linux-5.1.7 " 이라는 폴더가 생겼다면 성공한 겁니다.
Step 4. 새로운 커널 설치
// 이번 스텝에서는 새로운 커널을 설치하는 방법을 배웁니다.
// 나름대로 정리한다고 했습니다. 워낙 해야할 일이 많기 때문에 천천히 따라오시면 모두 진행하실 수 있습니다.
위의 압축해제까지 진행하셨다면 아직도 src 폴더에 계실겁니다
위의 상태에서 심볼릭 링크를 만들어줍니다.
* 심볼릭 링크는 흔히 Windows 의 " 바로가기 " 라고 이해하시면 쉽습니다.
아래의 명령어를 입력합니다.
# ln -s /usr/src/linux-5.1.7 /usr/src/linux
* linux 라는 이름으로 linux-5.1.7 에 대한 바로가기를 만드는 명령어입니다. 커널 버전에 따라서 원하시는 커널 버전을 입력하시면 됩니다.
“ ls “ 를 입력하여 확인하면, 파란 linux 라는 글씨가 보입니다. 그것이 심볼릭 링크입니다.
이제 linux 심볼릭 링크로 이동합니다.
# cd /usr/src/linux
호스트명 뒤에 “ src “ 가 " linux " 로 바뀌었다면, 정상적으로 이동한 겁니다.
먼저 컴파일할 소스파일을 복사합니다.
# cp /boot/config-3.10.0-957.el7.x86_64 /.config
* 커널 버전은 새로 다운로드 받은 커널이 아니라, 위의 “ uname -r “ 명령어로 확인한 현재의 커널 버전을 입력해야 합니다.
성공하면 아래의 명령어를 입력합니다.
# make menuconfig
* menu 구성을 만들라는 명령어입니다. " make “ 는 만들어! 임을 기억합시다!
make menuconfig 에 진입하면, 새파란 화면과 회색 메뉴가 나타납니다.
" General Setup " 을 선택하고 엔터를 누르시고, 여러가지 영어 메뉴 중 “ Enable deprecated sysfs features to support old userspace tools “ 라는 메뉴로
커서를 옮기고, 스페이스바를 눌러 체크합니다. (뒤에 tools 가 too 로 짤려서 보일 수 있습니다.)
후에 아래 메뉴 중 " save “ 를 선택하여 저장하고 “ exit “ 로 종료합니다.
* sysfs 의 레이아웃을 구버전으로 바꿔주는 옵션입니다.
자.... 이제부터 시작입니다.
커널을 컴파일 합시다!
- 아래의 명령어를 입력하고, 식사를 하고 차를 마시고.... 와도 안되어 있습니다. -
# make all
참고 : 화면이 깜깜해져 있을 수 있습니다. 확인 결과 CUI 화면 보호기 같이 진행되고 있더라도 한동안 움직이지 않으면 보이지 않으니, 스페이스바를 한 번 누르시면 화면이 나옵니다.
..... 시간이 흐른 뒤 (약 1시간 뒤) .....
이제 커널을 설치합니다.(!!!!)
# make modules_install
모듈 설치가 끝나고 나면, 바로..
# make install
을 입력합니다. 위 두가지는 금방 끝납니다.
위 사항을 모두 완료하셨다면, 새로운 커널의 설치는 완료된 겁니다.
하................. (저만 이런 마음은 아닐 겁니다. 다음부터는 elrepo 를 이용합시다.....)
Step 5. grub2 부트 로더 설정
// 새로 설치된 커널로 부팅할 수 있도록 설정하는 법을 배웁니다.
아래의 명령어를 입력하여 부팅 가능한 커널을 확인합니다.
# grep ^menuentry /boot/grub2/grub.cfg | cut -d “’” -f2
CentOS Linux (5.1.7) 7 이 확인됩니다.
이제 아래 명령어를 입력하여 최신 커널로 부팅하도록 설정합니다.
# grub2-set-default “CentOS Linux (5.1.7) 7”
이제 부트 로더도 설정이 되었습니다. 정상적으로 등록이 되었는지 확인해 봐야죠?
아래의 명령어를 또 입력해 봅니다.
# grub2-editenv list
정상적으로 등록이 되었다면, 새로 설치한 커널이 나타납니다!!
이제 재부팅하여, 5.1.7 커널 Cent OS 7 으로 부팅합니다.
정상이라면....
또 성공했습니다!!
Step 6. 오래된 커널 제거
// 이번 스텝에서는 예전 커널을 삭제하는 법을 배웁니다.
새로 커널이 설치되었으니 공간을 위해서 구형 커널을 삭제합시다.
다시 한 번 부팅되어 있는 커널이 새로운 커널이 맞는지 확인합니다.
# uname -r
맞게 부팅되어 있다면, 구형 커널을 삭제합시다.
# yum remove kernel-3.10.el7.x86_64
삭제가 완료되었다면, 이제 5.1.6 커널만 사용됩니다.
-만약 최신 커널들만 놔두고 옛날 커널들을 삭제하고 싶다면 아래의 방법을 이용합니다.
커널 수정을 위해 아래의 명령어를 입력하여 yum-utils 를 설치합니다.
# yum install yum-utils
설치가 완료되면, 아래의 명령어를 입력하여, 최신 커널 2개 (혹은, 그 이상) 를 놔두도록 합시다.
# package-cleanup —oldkernels —count=2
* “ —count=* “ 는 옵션입니다. 2개를 남기고 싶다면, 2를 입력하고, 원하는 숫자를 입력하면 됩니다.
자... 이번 시간에는 정말로 고생 많으셨습니다.
elrepo 저장소에 비해서 굉장히 시간과 손이 많이 가는 방법이었습니다.
아마 여러분들께서도 저와 같이 '다음부턴 elrepo 로....' 라는 마음이 같으리라 생각이 됩니다.
그래도, 무엇인가 해냈다는 생각이 마음을 들뜨게 만듭니다.
여러분께서 성공하셔서 이 글들을 보고 계신다면 참 좋습니다.
이제 여러분께서도 수동으로! 몇 시간씩 커널을 컴파일하고 수동으로 설치하는 방법을 터득하셨습니다!
정말 고생하셨습니다.
다음 시간에는..... 다른 배포판의 업데이트를........ 그런데 꼭 수동 업그레이드 방법을 알려드려야 하나요....?!?!?
감사합니다.
답글삭제감사합니다
답글삭제