(Linux)패키지 설치 방법
[카카오 클라우드 스쿨] RPM, YUM, DNF에 대해 알아 본다
RPM install
- RPM: 프로그램 설치를 위한 명령어
- RPM 등장 배경
- 리눅스는 설치를 위한 모든 코드를 외부에 공개함
- 특정 애플리케이션을 설치하고자 한다면 다음과 같은 과정이 필요함
- 소스코드 다운로드 - 컴파일 - 설치
- 컴파일을 위해 설치 위치, 필요 옵션 등을 수동으로 지정할 수 있지만, 여간 복잡한 과정이 아님
- 이를 해결하기 위해 .exe와 같은 파일을 redhat 재단에서 개발함 => RPM
- 하지만 의존성 문제가 있다
- 패키지 설치 시, 필요한 베이스 패키지를 일일히 찾아서 설치해야 함
- 자세한 건 하단 참고
1. 패키지 제거
gedit 삭제
[root@srv7 mydata]# rpm -e gedit
2. 패키지 설치
- 설치 방법
- rpm -qi httpd
- httpd 이름, 버전, 아키텍처 등 설치된 패키지의 상세 정보 확인 가능
rpm -qa grep httpd - 설치여부 확인 가능
- rpm -ivh 패키지이름.rpm
- 그냥 무조건 설치, 동일 패키지가 설치되어 있으면 오류가 발생함
- rpm -Uvh 패키지이름.rpm
- 설치, 동일 패키지가 있는지 확인한 뒤, 없으면 설치
- 설치하려는 버전이 더 최신 버전이면 업그레이드를 진행한다
- v: 확인, h: #를 통해 진행과정 확인
- rpm -qi httpd
- https://www.rpmfind.net 사이트에서 gedit 검색
- 해당 파일의 링크 복사
- 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로 인스톨 하기에는 쉽지 않으니 그룹으로 설치하면 편리함)