Linux Day6 패키지와 커널컴파일

김지원·2022년 7월 10일

Linux

목록 보기
6/7

패키지와 커널

패키지

리눅스의 프로그램 설치

: 리눅스에 사용되는 프로그램은 공개 소프트웨어라는 특징과 유닉스으 영향으로 C언어로 된 소스 (Source)파일을 압축하여 배포된다.

  • C언어로 작성된 프로그램으 소스코드를 계층적인 디렉터리 구조이고, 컴파일을 위한 MakeFile과 같은 관련 문서를 포함한다.
소스파일 -> 압축 해제 및 파일 풀기 -> 사용자 설정(Configure) -> 컴파일 디버깅(make) -> 설치 (make install)

make와 cmake(cross platform make system)

  • 패키지의 소스 파일을 받아서 직접 설정 및 컴파일 하는 방식
  • Makefile이라는 파일을 읽음으로써 소스 코드에서 실행 가능한 프로그램과 라이브러리를 자동으로 빌드하는 자동화 도구
  • apt로 설치될 때 적용되지 않는 특별한 옵션, 사용자 설정, 소스코드의 수정등이 필요할 경우 사용
  • 일반 사용자보다 프로그래머 혹은 고급 시스템 사용자에게 적합하다.
  • cmake 사용자 설정(Configure) + 컴파일 디버깅(make) 작업을 통합하는 프로그램으로, 운영체제에 맞는 make파일의 생성을 목적으로 함.

패키지 설치

  • 레드헷계열 : rpm yum : 온라인으로 알아서 설치해준다.
  • 데비안계열 : dpkg apt-get (ubuntu에서 사용)
  • 수세(SUSE)계열 : YaST zypper : 압축 파일을 실제로 받아서 설치하는 것

dpkg(Debian Package)

: windows 의 setup.exe와 같이 바로 실행 할 수 있는 설치 파일.

  • *.deb 확장자를가지며 패키지(Package)라 부름
  • 단점: 의존성
    ex) 우분투의 Firefox는 X 윈도우에 의존적이므로 X 윈도우가 설치 되어있지 않으면 설치가 불가능.

apt(apt-get)

: dpkg가 가지는 의존성 문제를 해결해주며 특정 패키지를 설치하고자 할 때, 의존성이 있는 다른 패키지를 자동으로 먼저 설치해줌.

  • 우분투가 제공하는 deb 파일 저장소에서 deb파일 뿐만 아니라, 의존성이 있는 다른 deb파일까지 인터넷을 통해 알아서 다운로드
    후 자동 설치해줌
  • 단점: 인터넷에 연결되어있어야함

deb 파일과 dpkg 명령어

  • deb 파일이름 형식
패키지명_버전-개정번호_아키텍처.deb
  • 설치
#dpkg –i [패키지파일명.deb] (--install)
  • 삭제
#dpkg –r [패키지명] (-remove)
#dpkg –P [패키지명] (--purge) (기존에 설치된 패키지 및 설정파일 전부 삭제)
  • 패키지 조회
#dpkg -S [패키지명] (해당 패키지명으로 시스템에 설치된 파일 이름을 찾음)
#dpkg - l [패키지명] (해당 패키지명과 일치하는 패키지 리스트 정보)
#dpkg –L [패키지명] (해당 패키지명으로 설치된 파일 목록 정보)
  • deb 파일 내용 조회
#dpkg --info [패키지명.deb]

설치

설치를 해보자!

  • 보통 src에서 다운을 받기 때문에 경로를 변경해주자.
  • firefox 설정에서 다운로드 위치를 usr/local 로 변경해준다.

firefox에서 계산기를 다운로드 받아보자.

  • 해당 명령어로 sources.list에 들어가서 링크를 통해 인터넷 접속을 하자.
  • universe -> g -> galculator 에서 galculator_2.1.4-1build1_amd64.deb 설치
  • universe : 우분투에서 공식적으로 지원하지 않는 무료 소프트웨어이다.

  • dpkg -i gal(+tab) 명령어로 설치 진행하면 된다.

  • 어플리케이션이 설치된 것을 확인할 수 있다.

apt(Advanced Packaging Tool)

  • 설치
#apt –y install [패키지명]
(-y는 yes로, 사용자에게 설치 시 yes/no를 묻는 과정을 생략함-모두 yes)
  • 패키지 목록 업데이트
#apt update (/etc/apt/sources.list 파일의 내용이 수정되었을 경우)
#apt upgrade (받은 패키지의 업그레이드를 해야할 때. apt update 우선 적용 후 사용)
  • 삭제
#apt remove [패키지명]
#apt purge [패키지명] (환경설정까지 전부 삭제)
#apt autoremove (사용하지 않는 패키지 모두 제거)
  • 내려받은 파일 제거
#apt clean (패키지를 설치할 때 내려받기 한 파일 제거)

apt 명령어

  • #apt-cache: 패키지를 설치하기 전에 패키지에 대한 정보나 의존성 문제를 미리 확인해볼 수 있는 명령어
    패키지 정보 보기: apt-cache show 패키지명
    패키지 의존성 확인: apt-cache depends 패키지명
    패키지 역의존성 확인: apt-cache rdepends 패키지명
  • main: 우분투에서 공식적으로 지원하는 무료 소프트웨어
  • universe: 우분투에서 공식적으로 지원하지 않는 무료 소프트웨어
  • restricted: 우분투에서 공식적으로 지원하는 유료 소프트웨어
  • multiverse: 우분투에서 공식적으로 지원하지 않는 유료 소프트웨어
① apt install 입력
② /etc/apt/sources.list 파일에서 URL 주소 확인
③ 설치와 관련된 패키지 목록 요청
④ 전체 패키지 목록 파일만 다운로드
⑤ 설치할 패키지와 관련된 패키지의 이름을 화면에 출력
⑥ y를 입력하면 설치에 필요한 패키지 파일 요청
⑦ 설치할 패키지 파일을 다운로드해서 자동 설치


커널

Kernel Compile

  • 커널에 포함될 것과 모듈로 나누는 작업으로, 최근 하드웨어와의 호환 혹은 효율적 사용을 위해 최신버전으로 업데이트 하는 것
  • 모듈: 별도로 보관했다가 필요할 때마다 호출하여 사용되는 코드들
  • /boot/vmliuz-커널버전파일명 : 부팅 시 메모리에 로딩되며 부팅 시 꼭 필요한 부분만 포함
  • /lib/modules/커널버전/ : 부팅 시에는 꼭 필요하지 않거나, 언제 사용할지 모르는 유동적인 정보들
  • 주로 하드웨어 지원 문제를 해결하기 위함
  • make, gcc, g++ 등 의존 패키지 필수
  • make : 커널 이미지와 모듈들이 컴파일되며, 환경에 따라 몇십분~몇시간 소요( -jcpu개수-1 로 설정하여 스레딩 작업 가능)
  • make modules_install : 새로 컴파일된 모듈들이 /lib/modules/커널버전/kernel 디렉터리로 설치됨
    새 커널로 부팅 후 의존성 오류가 날 때의 조치: #depmod -a
  • make install : 컴파일된 커널 이미지를 /boot 디렉터리로 옮기며 부팅 이미지 생성
  • makefile : 어느 파일들을 어떤 방법으로 컴파일링하여 최종적으로 어떤 실행파일을 만들 것인지를 알려주는 설정 파일
  • 커널컴파일을 한다는 것은 내부 시스템을 바꾼다는 의미인데 왠만하면 잘 하지 않는다. 그렇지만 하는 방법은 알고 있어야한다.
1. 커널 아카이브에서 커널 다운
2. 커널 압축 풀고 폴더로 이동
3. 필요한 패키지 설치 `qt5-default`, `libssl-dev`, `gcc`, `g++`, `make`, `flex`, `bison`, `libelf-dev` 
4. 커널 설정을 초기화한다. `# make mrproper`
5. 커널 환경 설정(configure과정)`#make xconfig`
6. 원하는 옵션 선택하고 저장하고 종료 
6.5. 컴파일 과정에서 나올 수 있는 오류 제거 `nano ./.config`
7. 컴파일 `#make`
8. 컴파일 된 모듈을 `/lib/modules`에 설치 `#make modules_install`
9. 설치 `make install`
10. 컴파일 과정에서 나온 파일들 정리. `#make clean`
11. 설치가 완료되었습니다.
12. reboot해서 GRUB환경으로 들어가서 커널 확인 및 선택
13. 시작 후 `#uname-r` 명령어로 커널 적용 확인 

1. 커널 아카이브에서 커널 다운
www.kernel.org(최신 커널 파일)에서 다운을 받자.

  • mainlinetarball 설치
mainline : 주버전
stable : 안정화된 버전

시스템 커널 버전 확인 방법

cat /proc/version
버전명 : #uname -r
모든 정보 : #uname -a
커널명 : #uname -s
CPU 종류 : #uname -p

  • 내 우분투의 커널 버전 확인법 2가지

2. 커널 압축 풀고 폴더로 이동
-> usr/local 로 가서 커널 압축을 풀자.

  • linux-5.19rc5들어가보니 Makefile이 있다.

3. 필요한 패키지 설치 qt5-default, libssl-dev, gcc, g++, make, flex, bison, libelf-dev
커널 컴파일 하기 위해서 설치해야 하는 것.

4. 커널 설정을 초기화한다. # make mrproper

  • 커널 설정 초기화 : 조금 기다려보고 아무 메세지도 안나오면 정상 동작한 것이다.

5. 커널 환경 설정(configure과정)#make xconfig

6. 원하는 옵션 선택하고 저장하고 종료

  • File system -> DOS/... -> 맨 밑쯤 NTFS file 관련된 거 전부 체크
  • NTFS : window 파일시스템
  • 리눅스와 윈도우는 파일 시스템이 다른데 이 두개를 체크하면 윈도우의 NTFS 파일 시스템을 호환가능하도록 한다.

6.5. 컴파일 과정에서 나올 수 있는 오류 제거

  • 얘네들을 쌍따옴표 안에있는 것들을 다 지워야한다. 수정 후 저장한다.
  • CONFIG SYSTEM TRUSTED KEYS=""
  • 커널을 그냥 받으면 기본 설정이 되어있어서 수정해야 오류 안남.

명령어 동시 실행 하는법

  • 세미콜론을 넣어주면 된다.

8. 컴파일 된 모듈을 /lib/modules에 설치
9. 설치 make install

  • make 이거는 진짜 오래걸린다. 너무 오래걸리게 때문에 하는 방법만 알자. 취소는 ctrl + c

10. 컴파일 과정에서 나온 파일들 정리.

  • config할 때 생긴 필요없는 파일을 지워준다.

0개의 댓글