본문 바로가기
Base/Linux(CentOS)

7. 응용프로그램 설치 tar/ rpm/ yum

by 귀멸 2022. 6. 20.

0. 프로그램 설치 과정
소스파일 다운로드 → compile → 설정 및 파일 배치 → 프로그램 실행    : tar + 압축
패키지 파일 준비    → 명령어를 이용한 설치  → 프로그램 실행              : rpm
(internet 연결) 명령어를 이용한 설치 → 프로그램 실행                          : yum

# 리눅스에서 압축
  - 파일의 용량을 줄이기 위해 사용
  - 원본 파일 자체가 압축 된다(복사본 생성 후 압축 x)
  - 여러 파일을 동시에 압축하면 각각의 파일 개별 압축
  - 디렉토리 압축 X 

  - 형식

압축 형식 압축   압축해제
 .zip zip      unzip
.gz gzip  gunzip (gzip -d)
.bz2 bzip2  bunzip2 (bzip2 -d)

  - 압축효율은 원본 파일 사이즈마다 다르다

1. tar
   - Tape Archive; 초창기에는 여러 파일을 하나의 파일로 묶어서 백업하는 용도로 사용

   - 여러 파일을 하나의 tar로 묶어준다
      > 결과문이 하나의 파일이기 때문에 압축가능

   - 파일을 담을 규격화된 공간을 만들고 그 내부에 파일을 담아주는 개념
      > 생성된 tar 파일의 용량은 내부에 보관한 파일들의 전체 용량보다 클 수 있다

   - 형식
tar 파일 생성      : tar cvf 생성이름.tar [대상] ... [대상]  (확장자를 직접 넣어주어야함)
                                  cfz 생성이름.tar.gz : gz으로 압축하면서 tar 생성 
                                  cfj 생성이름.tar.bz2: bzip2으로 압축하면서 tar 생성

tar 파일 내부 확인 : tar tvf <tar 파일명>

tar 파일 해체      : tar xvf <tar 파일명>

2. rpm
   - redhat package manager; 패키지를 이용한 프로그램/서비스 관리
      * 패키지 : 프로그램을 나눠놓은 조각

   - Linux는 Kernel부터 시작하여 모든 구성이 패키지로 이루어져 있고
     패키지는 다른 패키지와 의존 관계에 놓여있는 경우가 많다
     > 패키지 설치/삭제 과정에서 의존성 관련 오류가 굉장히 많이 나온다

   - rpm은 redhat에서 처음 만들어서 도입했고, redhat 기반의 모든 Linux에서는 rpm 명령어 사용
     > debian 기반의 Linux에서는 dpkg 명령어 사용 (ubuntu)

   - 형식
설치 : rpm -ivh 패키지명-버전.아키텍처.rpm

확인 : rpm -qa | grep 패키지명

삭제 : rpm -e 패키지명[-버전.아키텍처]


   - 패키지 이름 구조
libgphoto2-2.5.15-3.el7.x86_64
<-------->|<---------->|<---->
패키지명     버전     아키텍처

    1) 패키지명
패키지명은 한단어이거나 _기호를 이용하여 여러 단어의 조합으로 구성되어 있다
(이때 숫자만 단독으로 나오는 경우가 없기 때문에 버전과 구별이 가능)

패키지명이 한 단어이면 해당 패키지로 설치되는 프로그램 or 서비스의 이름을 나타낸다

패키지명이 여러단어이면 첫 단어가 설치되는 프로그램 or 서비스의 이름이고
뒤에 이어지는 단어들이 세부 역할을 의미한다

    2) 버전
버전은 여러가지 세부 버전으로 구성
2. : major
5. : minor
15 : patch
-3 : release
el7 : OS
    
* OS 버전 예시
el7     :  CentOS 7.X
el7_9 :  CentOS 7.9
centos  :  all version CentOS
<생략> :  all OS

    3) 아키텍처
CPU의 bit와 관계되어 특정 수준의 CPU 이상에서 사용 가능하다 라는 의미

32bit : i386, i586, i686
64bit : x86_64

* 아키텍처에 noarch가 들어가면 32bit CPU와 64bit CPU에서 전부 사용 가능

# 의존성 오류
Failed dependencies:
        /usr/bin/vi is needed by (installed) sudo-1.8.23-10.el7.x86_64

  1) 확인 방법
  A is needed by B : B에게 A가 필요하다

  2) 설치할 때
  B를 설치하기 위해 A가 먼저 설치되어야 한다

  3) 삭제할 때
  설치되어 있는 B에게 A가 필요해서 A를 지울 수 없다

 ## 해결 방법
  1) 의존성 오류 메세지를 읽고 해당 내용 해결
       > 설치할 때는 요구하는 패키지를 먼저 설치
       > 삭제할 때는 의존성 오류를 제시한 패키지를 먼저 삭제
  2) 의존성 오류를 무시하는 보조 옵션 --nodeps 사용
       > 패키지를 확인했을 때 중요 패키지이거나(삭제할 때_) 찾을 수 없는 패키지라면 의존성 오류 무시

 ### 의존성 오류에서 패키지명이 아닌 다른 내용이 출력되면?
  1) 파일의 절대경로
      > 패키지에 해당 파일이 포함되어 있는 경우(일반적으로 삭제할 때 출력)
          파일명을 패키지 이름처럼 읽으면 된다
  2) lib~~~.so.숫자(~~~~)
      >~~~~ 부분이 패키지를 의미(설치/삭제 시 전부 출력)
     해당 의존성 오류를 검색하여 패키지명 확인
  3) pkgconfig(~~~~)
      > ~~~~ 부분이 패키지를 의미 (일반적으로 설치할 때 출력)
      해당 의존성 오류를 검색하여 패키지명 확인

  - rpm 명령어를 사용하기 위한 패키지 파일을 구하는 방법
   1) 설치 CD에 있는 패키지 파일을 사용
   2) Internet에서 패키지 파일을 다운로드 받은 후 사용

3. VIM Package 설치 실습

  1) CentOS 홈페이지 미러사이트 X86_64 OS Package 에서 vim 찾아서 5개 다운로드
  2) ftp server로 설치 파일 업로드
      ftp mput ---* 같은 이름 한번에 ftp 서버로 업로드
  3) rpm -ivh vim-[tab 키]
      의존성 오류 내용에 따라 순서대로 설치

 구글 오류 내용 검색
 pkgconfig()나오는 오류들
 libmysqlclient.so.18 Pkgs.org 사이트로 해당 파일 이름 확인

- rpm 작업 시 주의 사항
  1) 의존성 오류는 가급적이면 무시 X
  >의존성 오류를 무시하면 작게는 프로그램부터 크게는 운영체제까지도 문제가 생길 수 있다.

  2) 설치/삭제 작업은 눈에 보이는 순서대로 진행
     단, main 패키지가 있는 경우에는 main 패키지를 최우선으로 진행
     (프로그램 이름으로 되어 있는 것들이 main)
 
  3) 동일한 프로그램 or 서비스의 패키지들은 가급적이면 버전 정보를 일치
     > 의존성 오류에 나오는 내용
     패키지명 = 버전 : 해당 버전의 패키지
     패키지명 > 버전 : 해당 버전보다 높은 버전의 패키지

     > 동일한 CD or site에 있는 패키지들은 버전이 일치한다
 
  4) 패키지 설치 시 * 기호를 이용하여 모든 패키지를 한번에 설치 X
     >의존성 오류 발생 시 패키지 의존 관계 확인이 힘들다

keyutils-libs-devel is needed by krb5-devel-1.15.1-50.el7.x86_64
libcom_err-devel is needed by krb5-devel-1.15.1-50.el7.x86_64
libkadm5(x86-64) = 1.15.1-50.el7 is needed by krb5-devel-1.15.1-50.el7.x86_64
libselinux-devel is needed by krb5-devel-1.15.1-50.el7.x86_64
libverto-devel is needed by krb5-devel-1.15.1-50.el7.x86_64


 libsepol-devel(x86-64) >= 2.5-10 is needed by libselinux-devel-2.5-15.e                                              l7.x86_64
 pkgconfig(libpcre) is needed by libselinux-devel-2.5-15.el7.x86_64
 pkgconfig(libsepol) is needed by libselinux-devel-2.5-15.el7.x86_64

3. yum
 - Internet을 이용한 자동 패키지 관리
 - 반드시 Internet이 연결되어 있어야 사용 가능
 - 의존성 오류를 알아서 처리

 - 형식    * { A | B } 이것들 중에 하나를 선택하여 사용
 
yum [옵션] {install | update | remove} 패키지명

install : 설치
update  : 업데이트
remove : 삭제

* 옵션
 -y : y/N 물어볼 때 자동으로 y 선택

 - yum -y update       : 전체 패키지 최신화

댓글