RPM
RPM은 RedHat에서 개발한 오픈소스 패키지 관리시스템으로 CentOS와 Fedora, RedHat과 같은 RedHat 계열의 Linux 배포판을 위한 디폴트 패키지 관리도구이다.
RPM 소프트웨어 개발자들이 자신의 소프트웨어를 이진(binary) 코드 RPM 포맷으로 꾸려서(이를 package로 부름) 배포하면, 사용자들이 이 RPM 포맷의 패키지를 얻어서 자신의 시스템에서 rpm 명령어(rpm -ivh ~)로 설치하면 해당 소프트웨어를 사용할 수 있다.
RPM 패키지에는 이진 코드(~.rpm)뿐만 아니라 소스 코드(~.src.rpm(=srpm))도 들어 있기 때문에 소스 코드를 이해할 수 있는 다른 개발자들은 이 배포 패키지의 소스 코드를 개선해서 더욱 성능을 높이거나 자신의 조직에 적합한 형태로 변형한 뒤 rebuild 해서 RPM 이진 파일로 만들어서 설치하거나 재배포할 수 있다.
현재는 yum ~으로 편리하게 종속적인 파일까지 관리하면서 소프트웨어를 설치할 수 있지만 RedHat 계열의 소프트웨어는 rpm 포맷으로 배포하기 때문에 여전히 잘 알아 두어야 한다.
Linux 시스템의 RPM 패키지 관리시스템은 /var/lib/rpm에 있는 데이터베이스 디렉터리를 사용해서 사용자 시스템에 설치된 RPM 패키지의 변경을 추적한다. 이 데이터베이스 디렉터리에는 CentOS 최초 설치(이를 clean Install이라고 부른다) 상태인 디폴트나 관리자 등에 의해서 새롭게 설치되거나 업데이트 된 파일 정보들과 이들 패키지의 변동 추이를 지켜보는 RPM Package Manager가 들어있다.
RPM 패키지 소프트웨어에 관한 것은 전적으로 RPM 패키지 관리시스템이 수행하므로 사용자는 이들 패키지에 대해서 수정이나 설정, 관리가 필요가 없다. RPM 패키지는 ~.rpm 확장자를 가지고 있기 때문에 쉽게 구별할 수 있다.
ls /var/lib/rpm 해본다.
SRPM
RPM 패키지에 ~.src.rpm이 보이면 RPM 소스코드로써 SRPM으로 부른다. 이 SRPM은 실제 설치되는 RPM 이진 파일의 전 단계 코드로써 사람이 읽을 수 있다. 개발자가 배포판 별로 여러 SRPM 소스 파일들을 생성해서 배포하면 사용자는 필요한 경우 이 SRPM 코드를 시스템의 목적에 맞춰서 편집 한 뒤 rebuild 과정을 거쳐서 다시 이진 RPM 파일로 만들어서 설치한다. 그냥 프로그램을 설치하지 않고 ./configure= 뒤에 많은 옵션을 주고 컴파일해서 설치하는 개념으로 이해해도 된다. 따라서 RPM에는 여러 SRPM 파일들이 들어 있을 수 있다.
예를 들어서 Googling으로 rpmforge-release-0.5.2-1 파일을 서치해서 rpmfind.net 사이트로 가면 Binary Package ~.rpm과 Source RPM Package ~.src.rpm 파일 두 개가 있다고 보이기도 한다.
∎ ~.src.rpm은 목적에 따라 변경할 수 있는 소스파일이고,
∎ ~.spec은 RPM의 리빌드(rebuild) 한 뒤 rpm 파일로 만드는 과정이 있는 스펙파일이며,
∎ ~.rpm은 바로 설치하면 실행되는 이진파일이다.
kernel-2.4.2-3kr.i386.rpm 식으로 RPM 파일이 보이면
패키지_명 2.4.2는 2 major, 4 minor, 2 patch 순으로 minor가 짝수면 안정(stable)하고 홀수면 개발(developing) 이라는 의미이다. 따라서 rpm 파일을 다운받을 때에는 두번째 minor 숫자가 짝수인 것을 받는 것이 좋다. 3kr은 패키지 릴리즈(몇 번 빌드했는지 보임), i386은 Architecture(CPU 구조) 이다.
rpm의 옵션으로 여러가지가 있는데
충돌을 무시하고 설치하는 —force, 의존성을 무시하고 설치하는 —nodeps, 기존 패키지에 이상이 있을 때 대체해주는 --replacepkgs, 기존 패키지와 버전이 다를 때 대체해주는 --replacefiles도 있다.
설치는 rpm -i(설치)vh/U(업그레이드 설치)vh(#)
OR rpm -iv --percent(%) ~ .rpm
yum -y install ~.rpm
rpm -ivh https:// ~ 도 가능
삭제는 rpm -e rpm으로_설치된_패키지 한다.
rpm -qa telnet-server 해서 telnet-server 설치 여부 확인
rpm -ql telnet-server 해서 telnet-server와 관련된 파일들 확인
rpm --version telnet-server 해서 이 패키지의 버전 확인
rpm 패키지 서명
웹상에서 배포되는 rpm 패키지는 OpenGPG 표준(RFC2440)을 따르는 GPG(Gnu Privacy Guard) 도구로 DSA 암호화 알고리즘(md5/sha1)을 사용해서 생성한 배포자의 공개키와 패키지에 들어있는 개인키로 상호 서명(signature)할 것을 요구한다. A 사용자가 B 패키지를 다운받아서 사용한다면 B 패키지에는 배포자의 개인키가 들어있고, 이 패키지를 설치하는 A 사용자(머신)(혹은 배포 웹상에)에는 B 패키지의 공개키를 다운받거나 해서 비교해서 파일의 무결성(Integrity)을 확인할 수 있다는 뜻이다.
개인키와 공개키는 동시에 생성(pair)되므로 패키지가 상호 동일한 개인키와 공개키로 서명되면 해당 패키지에 유일한 ID가 부여되어서 rpm 명령어로 해당 패키지를 설치할 때 이 숫자로 해당 패키지가 오리지널 소유자로부터 배포된 것이라는 것이 확인된다. 설치 시 NOKEY라는 단어가 보이면 해당 패키지에 대한 개인키가 설치하는 머신에 없거나 배포자가 이런 공개키를 생성해 두지 않아도 NOKEY로 나온다.
=>CentOS 설치 DVD에 있는 무수한 rpm 파일로 CentOS 7 운영체제가 설치되었는데
이 rpm 파일들은 GPG-KEY에 의해서 모두 정식 파일로 인증받은 것이다.
이들과 기타 GPG 키로 인증받은 패키지가 있으면 이들은 모두 /etc/pki/rpm-gpg/ 디렉터리에 들어있게 되는데 이 곳을 Key-ring이라고 부른다.
여기에 추가적으로 암호화된 키 ssl(secure socket layer)을 사용하는 패키지(https, smtps, sftp, ....)의 키는 /etc/pki/tls에 들어 있게 된다.
http://www.amazon.com으로 들어갈 때에는 평문자으로 연결되지만
https://www.amazon.com으로 들어갈 때에는 ssl로 인증되는 키가 있어야 연결된다. 하지만 브라우저별로(firefox, chrome, Edge....) 대표적인 포털 사이트는 이미 SSL 키를 넣어 두었다!!!
만일 https://www.itkoreaacademy.com으로 들어간다면 ssl 키가 없어서 못 들어가거나 위험을 감수하고 들어가게 간다.
rpm 파일은 어느 프로그램을 설치할 때 거기에 딸려있는 종속적인 파일들을 일일히 설치해주어야 하는 문제가 있다. 이를 위해서 yum을 사용해서 종속적 파일까지 일괄적으로 설치/삭제하게 해준다.
bison-2.3-2.1.src.rpm =>편집한 뒤 =>rpmbuild -bb bison.spec =>
bison-2.3-2.1.rpm 파일이 되면 =>바로 설치해서 사용한다.
YUM(Yellowdog Updater Modified)
RedHat 계열의 시스템을 관리하다 보면 시스템 업데이트나 사용 중인 패키지의 업데이트가 필요할 때가 많다. 이런 대부분의 소프트웨어 관련 문제는 YUM 도구로 원활하게 해결될 수 있다. yum 명령어를 통해서 간편하게 종속적인 패키지 문제도 일괄적으로 해결해 가면서 작업할 수 있는 이유는 바로 리포지터리(Repository:저장소)가 있기 때문이다. 여기서 리포지터리 관한 내용도 yum과 함께 알아보자.
앞에서 RPM 도구를 알아보았지만 rpm 명령어의 단점은 앞에서도 rpm -Uvh ~ 에서 본 바와 같이 RPM 패키지를 설치/삭제, 업데이트할 때 하나의 파일과 관련된 다른 패키지의 종속성 문제가 매우 귀찮다는 것이었다. 이런 패키지 종속성 문제를 자동으로 알아서 해결하면서 패키지를 설치해주는 패키지 관리시스템이 바로 YUM인데, yum은 RedHat 계열 시스템의 rpm 패키지를 위한 패키지 관리도구이다.
RedHat 계열의 YUM은 Debian Linux 계열에서의 APT(Advanced Packaging Tool)와 비슷한 역할을 한다. 사용자가 설치하고자 하는 패키지의 시스템 경로나 RPM 파일의 위치, 해당 패키지의 종속적인 파일들을 알지 못해도 일련의 패키지들이 제대로 설치되는 이유는 소프트웨어 리포지터리인 /etc/yum.repos.d/ 디렉터리에 대부분 패키지 사이트에 관한 경로정보를 가지고 있는 *.repo 확장자를 가지는 리포지터리 파일들이 들어있기 때문이다. 이 파일에 들어 있는 경로정보는 인터넷 사이트가 대부분이지만 CentOS 설치 DVD나 로컬에 형상서버(Configuration Server) 등을 두고 이를 지정해서 사용해도 된다.
=>리포지터리는 로컬/네트워크 디렉터리일 수도 있고 외부 HTTP나 FTP 서버일 수 있다.
정리하면
▪ ~.rpm =>rpm -ivh(-Uvh) ~.rpm로 설치하거나
yum install ~.rpm 해주고
rpm –qa nmap 해서 설치 여부를 보고
rpm –e nmap 해서 nmap 패키지를 삭제한다.
=>/etc/yum.repos.d에 ~.repo 파일을 넣어두면 된다.
▪ ~.deb =>dpkg -iv ~.deb로 설치하거나
apt(-get) install ~.deb 해주면 설치된다.
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 해서 다운받고 설치해보라.
dpkg –s nmap 해서 설치 여부를 보고
dpkg –P namp 해서 nmap 패키지를 삭제한다.
=>/etc/apt/sources.list에 ~.repo 파일에 설정해두면 된다.
YUM을 사용해서 어느 패키지를 설치한다면 설치 전에 해당 패키지뿐만 아니라 그 패키지가 필요로 하는 종속적인 패키지들을 리포지터리가 미리 확인해서 준비시킴으로써 관리자가 일일이 수동으로 이들 패키지를 찾아서 설치해야 하는 수고를 덜어준다. 또한 yum은 해당 패키지의 올바른 공개키를 찾아서 시스템의 키링에 넣어줌으로써 해당 패키지의 전자서명도 스스로 알아서 해준다.
YUM은 패키지 설치뿐만 아니라 패키지 제거도 뛰어난 도구이다. 어느 패키지를 제거할 때 yum은 제거하려는 패키지와 거기에 종속된 모든 패키지들을 패키지 데이터베이스 디렉터리에서 찾아서 제거할 준비를 시킨 뒤 해당 패키지가 제거될 때 종속되는 패키지들을 먼저 제거해서 패키지 제거 시 종속성 문제가 없게 한다. 그리고 캐시 비우기, yum-cron을 사용한 자동 yum 리포지터리 업데이트, rpm 패키지 설치하기, 그리고 패키지 찾기 등도 할 수 있다.
디폴트 리포지터리인 CentOS-Base.repo 이외에 nginx.repo와 같은 특정 패키지에 대한 리포지터리 파일을 사용하거나, EPEL, REMI, 그리고 IUS 등 추가적인 리포지터리 설정을 해두면 소프트웨어 관리를 더욱 풍부하게 할 수 있다.
yum info nmap
yum search nmap
yum provides nmap
yum list installed nmap =>yum list all | less
yum deplist nmap
yum clean packages/dbcache/metadata 식으로 해서 캐시된 정보 지움
yum update nmap --skip-broken =>yum check-update
yum -y install nmap
yum -y install namp~.rpm도 가능 =>yum -y install nmap --nogpgcheck
yum -y remove nmap (종속패키지도 한꺼번에 삭제됨)
=>yum -y erase nmap (그냥 nmap만 삭제)
보통 네 가지 방법으로 리포지터리를 사용해서 필요한 패키지를 설치할 수 있는데
▪ CentOS 설치 시 자동으로 생성되는 BASE와 같은 리포지터리를 사용하거나
▪ CentOS 설치 DVD 등을 리포지터리로 사용하거나,
▪ EPEL이나 REMI와 같은 별도의 리포지터리 설치해서 사용하거나,
▪ NginX와 같은 특정 패키지에 관한 리포지터리 파일을 생성하거나, 해당 ~.repo 파일을 다운받아서 /etc/yum.repos.d/ 디렉터리에 넣어두고 사용하는 경우로 나눌 수 있다.
형상서버(Configuration Server)
로컬에 서버를 구툭해두고 조직에서 필요로하는 모든 파일을 다운받게 해주는 서버로써
형상서버를 구축해두면
a) LAN에서 다운하므로 WAN에서보다 다운로드 속도가 빠르고
b) 인터넷 회선과 무관하므로 대역폭 사용이 적어지고
c) 관리자에 의해서 검증받은 파일만 사용하게 되므로 보안상 안전하고
d) 조직의 일관된 정책과 관리자의 규칙에 따라서 패키지가 관리되게 할 수 있다.
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1