본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스 CentOS, Fedora] 앱/프로그램 설치(install applications) RPM과 yum 명령어 및 옵션, 상황별 사용예시

리눅스 완전 정복 : 리눅스 목차

 

핸드폰만 해도 무수히 많은 어플을 깔고~~ 컴퓨터에만 해도 우리는 많은 프로그램을 설치하죠

컴퓨터도 Windows 운영체제이고 핸드폰의 운영체제인 Android도 리눅스 기반이예요

리눅스도 결국 운영체제입니다. 당연히 얘도 어플이나 프로그램을 설치 할 수 있겠죠? 빙고!

 

그럼 이번 포스팅은

리눅스에서 앱/프로그램을 설치하는 방법을 알아봅시다.

포스팅이 길어질거같으니 자주 쓰는 명령어 요약본을 먼저 보여드릴게요

[자주쓰는 주 명령어 요약]

- 패키지 설치할 때!

# yum -y install 패키지이름

- 패키지 삭제하기

# yum remove 패키지이름

- 패키지 설치 확인 

# rpm -qa | grep '패키지명'

 

리눅스에서 프로그램을 설치하는 방법은 크게 3가지가 있습니다.

 

1. 소스코드 설치법

초창기에 사용되었던 방법은 '소스코드 컴파일 설치'방법인데, 이 방법이 너무 복잡하다보니 다른 방법이 생겨나서 이제는 쓰이지 않아요. 그 우리 아직도 윈도우에선 알집같은거 인터넷에서 다운받은 다음에 압축 풀고 실행파일 클릭하잖아요. 근데 이 경우에는 실행파일이 있어 압축풀고 실행하면 되는데, 리눅스에서는 소스파일이라 압축을 풀어도 내가 컴파일도 해서 실행을 해줘야하는거죠. (뭐 암튼 복잡하고 어렵단얘기) 리눅스에서 사용되는 프로그램은 리눅스가 공개 소프트웨어라는 특징과 유닉스의 영향으로 C언어로 된 소스 파일을 tar압축해 배포됩니다. (tar는 일종의 압축/묶음 파일!) 이러한 파일들은 소스 컴파일 단계를 거쳐서 설치해야 하는데 초보자들에게 쉽지가 않습니다.

 

뭐 소스코듯드 설치법은 지금은 잘 사용되지 않는 유닉스의 전통적인 설치방법이었다~~~ 그리고 매번 컴파일하기 번거로운데다가 쉽지 않은 방법이었다 그래서 새로운 방법이 나왔다~ 이정도가 요약!

 

리눅스에서 소스 프로그램을 설치하기 위해서는 보통 

'압축 풀기 -> 디렉터리 이동 -> configure -> make(소프트웨어를 컴파일 하는 유틸리티) -> make install'의 5단계를 거칩니다.

으으으 보기만 해도 복잡해요 ㅎㅎ

 

2. 패키지 설치법

소스코드 설치법에 불편함을 느낀 개발자들은 Windows의 setup.exe와 비슷하게 프로그램을 설치한 후에 바로 실행할 수 있는 설치파일을 제작하게 됩니다. 이러한 설치요소파일들을 묶은 설치 파일을 패키지라고 불러요. 마치 setup.exe나 윈도우 설치마법사 같은 거라고 생각하면 돼요.

 

패키지 파일로 설치한 프로그램은 패키지 시스템에 의해 관리됩니다. 때문에 설치한 프로그램도 간단하게 볼 수 있고 프로그램 제거 또한 설치만큼이나 간단히 할 수 있어요

 

데비안 기반 배포판인 데비안, 우분투, 민트, SolyDX 또는 /

레드햇 기반 배포판인 페도라, centOS 이렇게 

데비안 기반이냐, 레드햇 기반이냐에 따라서 어플리케이션 설치 방법이 달라집니다. 명령어가 다른거 뿐 아니라 소프트웨어를 설치하는 물리적인 방법도 다를 수 있어요 

 

The physical method for installing the software might be different. For example, the graphical tools in Ubuntu are the Software Centre and Synaptic whereas in Fedora there is YUM Extender and openSUSE uses Yast. 

소프트웨어를 설치하는 물리적 방법이 다를 수 있습니다. 예를 들어 우분투 그래픽 도구는 Software Centre와 Synapitc인 반면 페도라는 YUM Extender과 Yast를 사용하는 openSUSE이기 때문이죠

 

자세한 건 몰라도 설치 원리가 다를 수 있답니다. ㅎㅎ

오늘은 레드햇 기반의 설치명령어를 살펴볼거예요. 많이 사용하는 리눅스로는 CentOS, Fedora 겠죠?

2-1. 레드햇 패키지 관리 프로그램 RPM!! 

RPM (설치 파일 확장명: *.rpm)은 _redhat package manager 약자~

 

RPM이란 레드햇사에서 만든 패키지 관리 기법으로 프로그램을 .rpm 형태의 파일로 배포하고, rpm 명령을 사용하여 손쉽게 설치 및 갱신, 제거, 검증, 질의 등을 관리할 수 있습니다. 

그니까 우리가 rpm 명령어로 텔넷이나 웹서버나 FTP나 등등 다 설치할 수 있다는거여~ 

RPM 네 가지 모드

RPM 명령어로 할 수 있는걸 크게 네 가지로 구분할 수 있는데

첫 번째가 내가 패키지를 설치하거나 업데이트 하는 설치/갱신 모드

두 번째가 패키지를 제거하는 제거모드

세 번째가 궁금한 정보를 확인하는 질의모드! 

네 번째가 변경된게 있는지 없는제 검증하는 검증모드

이렇게 구분할 수 있습니다. 

대표적인 RPM 사용 예시를 들어봅시다!

[질의모드 사용예시]

먼저 질의모드부터 몇 개 예를 들어볼게요. 보통 프로그램 설치할 때 프로그램이 설치되었는지 확인하고 설치할그자나요??  이 확인작업이 질의모드에 속하거든요 ㅎㅎ

rpm은 옵션이 매우매우 많은데 아래 명령어들의 예시가 궁금하면 좀 더 내려서 옵션 표를 참조해주세요 ㅎㅎ

참고로 q옵션은 질의시에 꼭 사용해야 하는 옵션으로 필수 입니다!

 

내 컴에 어떤 패키지가 설치되어있는지 확인하려면! 

→ rpm -qa | more (양이 엄청 많을테니 more명령어를 파이프해줬어욯ㅎ )

▶음 텔넷 패키지가 설치되어있는지 확인해보려면? (특정 패키지 설치여부 확인)

 rpm -qa | grep telnet

결과

▶특정 패키지에 대한 정보가 궁금하다면

rpm -qi telnet 

간단한 설명부터 라이센스 정보, 파일 크기, 현재 패키지의 버전정보 등 다양한걸 확인할 수 있어요.

여기보면 버전 정보와 릴리즈, 아키텍쳐 등의 정보를 확인할수 있는데, 참고로 배포되는 rpm의 파일 구성 형식이 이들로 이뤄집니다.

 

- 배포되는 rpm 파일 구성 형식

패키지이름-버전-릴리즈-아키텍처.rpm

여기서 아키텍처는 패키지가 사용 가능한 시스템을 의미해요.

 

▶어떤 파일이 있는데 이게 왜 설치된건지 모르겠어요. 해당 파일이 어떤 패키지 설치할때 생긴건지 알고 싶다면

rpm -qf /etc/named.conf

/etc/named.conf 파일을 설치한 패키지 정보를 출력합니다.

(참고로 이 설정파일은 DNS서버 설치할 때 생기는 DNS설청파일이에요. 그리고 DNS서버 설치할 때 필요한 패키지명이 bind랍니당) 

[query mode OPTIONS] rpm 명령어 질의모드 주 옵션 살펴보기

 옵션

 내용 

-q (--query) 질의 시에 꼭 사용해야 하는 옵션이다. 패키지를 찾으면 패키지 이름과 버전만 표시한다.
-i (--info) 설치된 패키지의 정보를 출력한다. -p 옵션과 같이 사용하면 rpm 패키지 파일에 대한 정보를 알 수 있다.
-l (--list) 패키지에서 설치한 모든 파일 정보를 출력한다. 역시 -p옵션과 사용하면 rpm 패키지 파일이 설치되는 목록 파일을 알 수 있다.
-a (--all) 시스템에 설치된 모든 패키지 목록을 출력한다
-p 패키지파일명 지정한 파일을 설치한 패키지 이름을 출력한다.
-f 파일명(--file) 지정한 파일을 설치한 패키지 이름을 출력한다 
-c (--configfiles) 해당 패키지의 설정 파일이나 스크립트 파일을 출력한다.
-d (--docfiles) 해당 패키지의 문서 파일을 출력한다 
-R  어떤 패키지에 의존하고 있는지 보여준다. 즉 해당 패키지가 설치되거나 동작시에 필요한 패키지 목록을 보여준다.
--changelog 특정 패키지의 바뀐 내역을 최근부터 연대순으로 보여준다.
--scripts 설치 및 제거 관련 스크립트를 보여준다. 
--queryformat 질의의 결과를 원하는 형태로 출력할 때 쓴다. C언의 printf()함수의 동작 방법과 유사합니다. 

[more examples]

rpm -ql sendmail

sendmail 패키지가 설치한 파일 목록을 출력합니다.

 

rpm -qR sendmail

 sendmail이 의존하고 있는 패키지 정보를 출력합니다.

 

rpm -q --changelog sendmail

 sendmail이 바뀐 내역을 최근부터 연대순으로 보여줍니다.

 

rpm -qip totem-2.28.6-2.el6.i686.rpm

 패키지 파일에 대한 정보를 출력합니다.

 

rpm -qa --queryformat "%10{size} %{name}\n" 

 패키지를 사용자가 지정한 형태로 출력합니다. 

 

[설치 및 갱신 모드 사용예시]

우리 컴퓨터만 봐도 얼마나 많은 프로그램들이 깔려있나요? 

프로그램이나 앱을 다운받는 명령어인만큼 당연히 이 설치 명령어는 엄청 많이쓰겠죠? ㅎㅎ

근데 설치는 사실 rpm명령어보다 yum 명령어를 이용해서 주로 진행합니다. rpm명령어는 프로그램 설치법 3가지중 2번째에 속하는 패키지 설치법이였어요. 설치관련 의존성 문제가 때문에 3번째 자동설치도구 이용방법이 나타났는데 그에 해당하는 명령어가 yum입니다!

 

아무튼 rpm에서 설치에 이용되는 옵션은 install의 첫문자인 -i 입니다. 같은 패키지가 있을 경우 중복설치되지는 않아요.

그 다음 갱신에 해당하는 업그레이드 옵션은 -U 근데 만약 패키지가 없는데 업그레이드 옵션을 썼으면 i옵션과 동일하게 설치됩니당.

 

▶ rpm -i gftp-2.0.19-fc15.i686.rpm 

 해당 rmp 패키지를 설치합니다.

 

rpm -Uvh vsftpd-2.2.2-11.el6_4.1.i686.rpm

 해당 패키지를 업그레이드 설치해주고 메시지와 진행사항을 #기호로 출력합니다.

 

 rpm -Fvh /usr/local/src/*.rpm

 현재 설치된 패키지만 찾아서 업데이트하고 메세지와 진행 상황을 '#'기호로 출력합니다.

 

[install & upgrade mode OPTIONS] rpm 명령어 설치 및 업그레이드 모드 주 옵션 살펴보기

 옵션

 내용 

-i (--install) 새로운 패키지를 설치할 때사용합니다. 기본적으로 이전 버전의 같은 패키지가 있을 경우 설치가 되지 않아요.
-U (--upgrade) 기존의 패키지를 새로운 버전의 패키지로 업그레이드 할 때 사용합니다. 만약 설치된 패키지가 없을 겨웅에도 새로운 버전을 설치할 수 있는데 이 경우에는 -i 옵션과 같다고 볼 수 있습니다.
-F (--freshen) 이전 버전이 설치되어 있는 경우에만 설치합니다.
-v 메세지를 자세히 보여줍니다.
-h (--hash) 설치 상황을 '#'기호로 표시해줍니다. 
--force 기존 버전이 설치되었을 경우처럼 강제로 설치할 때 사용합니다. 
--nodeps 의존성 관계를 무시하고 설치합니다. rpm 설치 시에 읜종성 관계에 있는 패키지가 존재하지 않을 경우에는 설치가 되지 않는데, 그런 경우 강제로 설치할 때 사용합니다.
-vv 메세지를 아주 자세하게 보여줌
--rebuilddb 특정한 패키지 설치 후에 rpm 패키지를 검색했으나 나타나지 않을 때, rpm 데이터베이스를 업데이트 할 때 사용합니다.

[삭제모드 사용예시]

삭제모드는 옵션이 간단해요. ㅎㅎ

 

rpm -e eog

eog라는 패키지를 제거합니다. 의존성있는 패키지가 존재할 경우에는 제거되지 않습니다.

 

 rpm -e httpd --nodeps

 httpd라는 패키지를 제거하는데, 의존성이 있는 패키지가 존재할 경우에도 제거합니다.

 

[erase mode OPTIONS] rpm 명령어 삭제 모드 주 옵션 살펴보기

 옵션

 내용 

-e (--erase) 설치된 패키지를 삭제합니다. 의존성을 갖는 패키지가 있는 경우에는 삭제되지 않아요
--nodeps 의존성을 갖는 패키지가 존재하는 경우에도 삭제합니다.
-vv 메세지를 아주 자세하게 보여줌
--test 실제로 제거하지 않고 테스트를 합니다, 보통 -vv 옵션과 함께 사용됨
--allmatches 동일한 이름을 갖는 패키지가 중복 되어 설치되어 있을ㄹ 경우에 모두 제거합니다.

 

[검증모드 사용예시]

검증모드는 rpm 데이터베이스에 저장되어 있는 패키지의 메타데이터 정보를 이용하여 변경된 정보를 찾아내는 모드입니다. 검증모드는 -V(--verify)옵션을 사용하고 파일의 크기, 허가권, 소유권, 파일 형식 등에 대한 변경 정보를 출력합니다. 

 rpm -Va

 시스템에 설치된 모든 패키지를 검증합니다.

 

 rpm -V vsftpd

 vsftpd 패키지를 검증합니다.

 

3. 자동 설치 도구 이용

매우매우 길었지만,, 자 지금까지 알아본 rpm은 패키지설치방법에 해당하는 명령어예요. 총 설치 방법은 3개가 있다 했는데 나머지 한 개가 무엇일까요? 바로 이 '자동 설치 도구 이용'방법입니다. 패키지 설치에서는 따로 패키지 파일을 다운로드 받아야 했어요. 하지만 자동설치도구를 이용하면 패키지 파일 다운로드부터 설치까지 모든 것이 자동으로 이루어집니다.

 

2방법이 예전 리눅스 소스컴파일설치 방법보다는 획기적으로 편해지기는 했지만 '의존성' 문제가 있었습니다. 

예를 들어 페도라의 기본 웹 브라우저인 Firefox는 당연히 X윈도상에서 가동됩니다. 그런데 X윈도가 설치되지 않은 상태에서 Firefox를 설치한다면 어떻게 될까요? Firefox는 X윈도에 의존성이 있으므로 설치가 안될거예요.

이게 한 두개면 문제가 되지 않지만 이러한 의존성이 서로 얽히고 얽히고 뭉쳐있다면..? 나중에는 왜 설치가 안되는지 어떤걸 위해 뭘 설치했더니 얘를 설치하려면 또 딴게 있어야하고... 생각만해도 힘들어요.

 

그래서 나온 명령어가 데비안 계열에서는 apt-get 래드햇 계열에서는 yum입니다.

 

* 레드햇 계열 : yum

- YUM 나오기 이전에는 주로 RPM이 사용되었으나, YUM은 RPM의 개념과 기능을 포함하기 때문에 최신 버전에서는 YUM을 사용하면 됩니다. 

yum 명령어는 rpm 명령어의 패키지 의존성 문제를 완전하게 해결해줍니다. 또 yum은 페도라 프로젝트가 제공하는 rpm 파일 저장소에서 설치할 rpm 파일은 물론이고 해당 파일과 의존성이 있는 다른 rpm 파일까지 인터넷을 통해 모두 알아서 다운로드한 후 자동으로 설치까지 해줍니다. 저장소의 url은 /etc/yum.repos.d/ 디렉터리 파일에 저장되어 있어요.

 

기본 설치방법

 yum install 패키지이름

 패키지를 설치합니다. 의존성 관련 패키지도 자동으로 설치해줘요.

yum -y install 패키지이름

 설치할 때 어쩌구저쩌구확인했습니까? 이런식으로 중간중간 물어봐서 yes를 체크해줘야하는 경우들이 있는데 내가 뭔가 따로 입력하지 않아도 yes로 설치하겠다는거.

 

업데이트 관련

 yum check-update

 업데이트 가능한 목록 보기

 yum update 패키지이름

 업데이트 (사실 yum install 패키지이름이 기존에 설치되어 있다면 업데이트를 해주기 때문에 딱히 필요는 없다)

 

삭제

 yum remove 패키지이름

 패키지 삭제. 

 

정보 확인

 yum info 패키지이름

→ '패키지이름' 에 대한 정보를 출력합니다.

yum list installed

 설치된 패키지에 대한 정보를 출력합니다.

 yum search player music

player와 music이라는 문자열이 들어있는 패키지를 찾아줍니다.

yum history

yum관련한 작업 이력을 출력합니다.

 

[우분투 - 데비안 계열의 설치 명령어를 살펴 보고 싶으면 아래 포스팅을 참조!]

https://jhnyang.tistory.com/281

 

[리눅스 Ubuntu 우분투] 프로그램 설치 dpkg, apt 명령어 사용법 알기, 옵션 및 사용 예시 정리 (프로��

[리눅스 완전정복 목차 링크집] 안녕하세요. 주인장 양햄찌입니당. 지난 시간에 레드햇 계열 프로그램 설치 명령어에 대해서 살펴봤는데요, 오늘은 우분투 설치 명령어에 대해 살펴보려고 합니�

jhnyang.tistory.com

기출 문제 

[리눅스마스터 2급 2016년 1회 기출]

다음 중 하위 버전의 패키지가 있다면 업데이트를 진행하고, 존재하지 않는다면 초기 설치를 진행하는 rpm 옵션으로 알맞은 것은?

1. rpm -uvh [package 명]

2. rpm -ivh [package 명]

3. rpm  install [package 명]

4. rpm -Uvh [package 명]

답: 4번

 

다음 중 yum을 통해 설치된 telnet-server 패키지를 제거하는 명령으로 알맞은 것은?

1. yum -e telnet-server

2. yum rm telnet-server

3. yum telnet-server --delete

4. yum remove telnet-server

답: 4번

 

[리눅스마스터 1급 2차 1602회 기출]

다음은 rpm 패키지 관련하여 질의 및 작업하는 과정이다. (괄호)안에 알맞은 내용을 적으시오.

------------------------------------

가. 아직 설치되지 않은 패키지 파일에 대한 정보 출력

# rpm ( ① ) ./httpd-2.4.6-40.el7.x86_64.rpm

나. 패키지가 설치된 이후 RPM DB에 저장된 내용과 원본의 내용을 비교 검증 정보 출력

# rpm ( ② ) vsftpd

다 RPM 데이터베이스에 문제 발생 시 RPM 데이터베이스를 최신의 정보로 갱신

# rpm ( ③ ) 

------------------------------------

답: -qip -V  --rebuilddb

■조건

- 관련 옵션을 적는다.

- 옵션은 대소문자를 구분하고, 띄어쓰기, 기호 등을 정확히 기술한다.

 

[리눅스마스터 1급 2차 1701회 기출]

다음은 RPM 패키지에 대한 명령어이다. (괄호)안에 알맞은 옵션을 넣으시오.

------------------------------------

[root@www ~]# rpm (  ) /bin/mount

util-linux-ng2.17.2.x86_64

[root@ihd ~] rpm -i (  ) util-linux-ng2.17.2.x86_64.rpm

------------------------------------

답:   -qf --force

■조건

- 관리자의 실수로 /bin/mount 파일이 삭제되었다. 

- ①: 다른 시스템을 통해 패키지명을 확인 후에 설치하려고 한다.

- ②: /bin/mount 파일을 포함한 관련 RPM 패키지를 강제로 재설치한다.

오늘은 여기까지입니다.