Contents
(Linux)패키지 설치 방법
   2022년07월21일     5분정도면 다 읽어요     - Comments

[카카오 클라우드 스쿨] RPM, YUM, DNF에 대해 알아 본다

RPM install

  • RPM: 프로그램 설치를 위한 명령어
  • RPM 등장 배경
    • 리눅스는 설치를 위한 모든 코드를 외부에 공개함
    • 특정 애플리케이션을 설치하고자 한다면 다음과 같은 과정이 필요함
    • 소스코드 다운로드 - 컴파일 - 설치
    • 컴파일을 위해 설치 위치, 필요 옵션 등을 수동으로 지정할 수 있지만, 여간 복잡한 과정이 아님
    • 이를 해결하기 위해 .exe와 같은 파일을 redhat 재단에서 개발함 => RPM


  • 하지만 의존성 문제가 있다
    • 패키지 설치 시, 필요한 베이스 패키지를 일일히 찾아서 설치해야 함
    • 자세한 건 하단 참고


1. 패키지 제거

gedit 삭제
[root@srv7 mydata]# rpm -e gedit


2. 패키지 설치

  • 설치 방법
    • rpm -qi httpd
      • httpd 이름, 버전, 아키텍처 등 설치된 패키지의 상세 정보 확인 가능
    • rpm -qagrep httpd
      • 설치여부 확인 가능
    • rpm -ivh 패키지이름.rpm
      • 그냥 무조건 설치, 동일 패키지가 설치되어 있으면 오류가 발생함
    • rpm -Uvh 패키지이름.rpm
      • 설치, 동일 패키지가 있는지 확인한 뒤, 없으면 설치
      • 설치하려는 버전이 더 최신 버전이면 업그레이드를 진행한다
    • v: 확인, h: #를 통해 진행과정 확인


  • https://www.rpmfind.net 사이트에서 gedit 검색
  • img_19
  • 해당 파일의 링크 복사


  • wget으로 다운로드
[root@srv7 mydata]# cd
[root@srv7 ~]# wget https://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/gedit-3.28.1-3.el7.x86_64.rpm


  • 동일 패키지가 있는지 확인한 뒤, 없으면 설치
[root@srv7 ~]# rpm -Uvh gedit-3.28.1-3.el7.x86_64.rpm
Preparing...                                                     ################################# [100%]
Updating / installing...
   1:gedit-2:3.28.1-3.el7                                        ################################# [100%]


  • 한번 더 해보자
[root@srv7 ~]# wget https://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/wireshark-gnome-1.10.14-25.el7.x86_64.rpm

[root@srv7 ~]# rpm -Uvh wireshark-gnome-1.10.14-25.el7.x86_64.rpm
error: Failed dependencies:
       	libwireshark.so.3()(64bit) is needed by wireshark-gnome-1.10.14-25.el7.x86_64
  • 의존성 문제 발생!
    • 하단 프로그램이 있어야 설치 가능하다
    • 비슷한 예로 gedit은 GUI 확정에 의존성을 가짐
  • 의존성 문제를 해결하는 방법?
    • yum/dnf를 사용한다
    • yum/dnf는 ‘저장소’를 이용하여 필요한 패키지를 다운로드 가능
    • 저장소에서는 해당 패키지와 의존성 해결을 위한 패키지를 묶어 다운로드 시켜준다


도커에서 rpm

  • 도커에서 httpd, ngnix등 설치할 경우 rpm과 같은 패키지를 이용함
  • 따라서 설치되는 경로가 달라진다
  • ex) 도커 컨테이너를 사용해 centos 컨테이너를 생성하고, 해당 컨테이너에서 httpd를 설치할 경우?
    • 컨테이너로 httpd 이미지를 사용하면 /var/www/html이 아니라 /usr/local/apache2/htdocs/ 가 됨




yum & dnf

  • RPM의 의존성울 해결한 것: dnf, yum
  • yum, dnf는 인터넷이나 회사 내에 다수의 패키지를 저장소에 보관
  • 사용자가 패키지를 요청했을 때, 해당 패키지와 의존성 해결을 위한 패키지를 묶어 사용자에게 전달
  • repository가 필요하다


  • 이렇게도 가능!
    • rpm 파일을 yum으로 설치
    • 해결해야 할 의존성 패키지는 yum에 연결하여 다운로드 및 설치해 줌!
wget http://......./com/test3.rpm
yum -y install test3.rpm


epel에서 제공하는 패키지

  • epel에서 제공하는 패키지는 CentOS에는 설치할 수 없다
  • 이 경우 epel 목록을 설치하여 해결할 수 있다


yum, dnf 차이

  • yum
    • RPM 설치시 함께 설치된 의존성 해결 패키지를 remove 시 함께 지우지 않음
    • python으로 작성됨
  • dnf
    • yum의 업그레이드 형태
    • yum에 비해 훨씬 메모리를 적게 먹음, 성능 향상
    • 제거 시 의존성 문제로 설치한 패키지도 같이 제거함
    • c, c++, python으로 작성됨
    • api가 문서화됨, 원하는 버전 설치 가능


dnf의 버전 선택 방법

  • yum에서는 버전을 고를 수가 없음
[root@srv8 ~]# yum -y install php
[root@srv8 ~]# php -v


  • dnf에는 버전을 고를 수가 있다
[root@srv8 ~]# dnf module list php
Last metadata expiration check: 1 day, 0:55:01 ago on Wed 20 Jul 2022 04:44:31 PM KST.
CentOS Stream 8 - AppStream
Name Stream     Profiles           Summary
php  7.2 [d][e] common [d], devel, PHP scripting
                 minimal           language
php  7.3        common [d], devel, PHP scripting
                 minimal           language
php  7.4        common [d], devel, PHP scripting
                 minimal           language
php  8.0        common [d], devel, PHP scripting
                 minimal           language
  • 삭제 시 의존성 걸려있는 친구들도 같이 지워줌
[root@srv8 ~]# dnf -y remove php
Dependencies resolved.
  • 초기화하고 7.4를 enable
[root@srv8 ~]# dnf modile reset php
[root@srv8 ~]# dnf module enable php:7.4

[root@srv8 ~]# dnf module list php
Last metadata expiration check: 1 day, 0:58:38 ago on Wed 20 Jul 2022 04:44:31 PM KST.
CentOS Stream 8 - AppStream
Name Stream  Profiles            Summary
php  7.2 [d] common [d], devel,  PHP scripting la
             minimal             nguage
php  7.3     common [d], devel,  PHP scripting la
             minimal             nguage
php  7.4 [e] common [d], devel,  PHP scripting la
             minimal             nguage
php  8.0     common [d], devel,  PHP scripting la
             minimal             nguage

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
  • 설치시 방금 선택했던 7.4 버전이 설치된다
[root@srv8 ~]# dnf -y install php
[root@srv8 ~]# php -v
PHP 7.4.19 (cli) (built: May  4 2021 11:06:37) ( NTS )
  • 파이썬: 의존성 문제시 설치할 파이썬 버전을 원하는 버전으로 설치할 수 있다
[root@srv8 ~]# dnf module list python*
Last metadata expiration check: 1 day, 1:01:27 ago on Wed 20 Jul 2022 04:44:31 PM KST.
CentOS Stream 8 - AppStream
Name     Stream     Profiles Summary
python27 2.7 [d]    common [ Python programming l
                    d]       anguage, version 2.7
python36 3.6 [d][e] build, c Python programming l
                    ommon [d anguage, version 3.6
                    ]
python38 3.8 [d]    build, c Python programming l
                    ommon [d anguage, version 3.8
                    ]
python39 3.9 [d]    build, c Python programming l
                    ommon [d anguage, version 3.9
                    ]


  • 그룹으로 설치하기
    • yum -y groupinstall “Server with GUI” 와 같이 그룹으로 한꺼번에 설치도 가능!
    • (모든 패키지를 minimal로 인스톨 하기에는 쉽지 않으니 그룹으로 설치하면 편리함)