CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
  • Week 1
    • 1.운영체제와 커널: 리눅스가 하는 일
    • 2.리눅스의 탄생: 유닉스에서 리누스까지
    • 3.자유 소프트웨어와 오픈소스: 라이선스가 정하는 것
    • 4.배포판: 커널과 도구를 하나로 묶어 파는 단위
    • 5.Week 1 종합 복습: 리눅스라는 이름의 정체
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
    • 1.패키지 관리 (1): RPM과 YUM
    • 2.패키지 관리 (2): DEB·APT와 소스 설치
    • 3.장치 파일과 /dev
    • 4.주변장치 활용: 프린터 · 사운드 · 스캐너
    • 5.Week 7 종합 복습: 패키지와 장치
  • Week 8
  • Week 9
  • Week 10
  • Week 11
리눅스마스터 1급 · 1급리눅스마스터 1급
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 2급/Week 7/Day 1

기준: 리눅스마스터 2급 출제 기준·오류 제보

리눅스마스터 2급· AssociateWeek 7 · Day 1읽기 약 9분
핵심 정리
  • 패키지는 프로그램과 설치 정보를 한 덩어리로 묶은 파일이다. 배포판마다 형식이 다르다.
  • 리눅스 패키지는 RPM 계열(레드햇·CentOS·페도라·SUSE) 과 DEB 계열(데비안·우분투) 로 나뉜다.
  • 도구는 두 층이다 — 저수준(rpm)은 의존성을 스스로 해결하지 못하고, 고수준(yum)은 해결한다.
  • rpm 옵션 4개를 외운다 — -i 설치 · -U 업그레이드 · -e 삭제 · -q 질의.
  • YUM의 후계가 DNF, SUSE 계열은 zypper 를 쓴다.

Day 1 - 패키지 관리 (1): RPM과 YUM

패키지란

   패키지 = 실행 파일 + 설정 파일 + 문서 + 설치 정보(의존성 목록)
  • 예전에는 소스를 내려받아 직접 컴파일해야 했다. 그 과정을 미리 해 두고 묶어서 배포하는 것이 패키지다.
  • 의존성(dependency) — 어떤 프로그램이 동작하려면 다른 라이브러리가 먼저 있어야 한다. 이 관계를 패키지가 기록해 둔다.
문제뜻
의존성 문제필요한 다른 패키지가 없어 설치가 막히는 상황
의존성 지옥A를 깔려면 B, B를 깔려면 C… 가 끝없이 이어지는 상황

두 계열

구분RPM 계열DEB 계열
확장자.rpm.deb
배포판레드햇, CentOS, 페도라, SUSE데비안, 우분투, 민트
저수준 도구rpmdpkg
고수준 도구yum, dnfapt, apt-get
  • 어느 배포판이 어느 계열인지를 그대로 묻는 문제가 나온다. 우분투는 데비안 계열이라 .deb을 쓴다는 점이 출제 범위에 든다.
  • RPM은 원래 Red Hat Package Manager의 줄임말이었고, 지금은 RPM Package Manager로 풀이한다.

저수준과 고수준

   고수준 (yum · dnf · apt)
      │  저장소에서 내려받고 의존성을 자동으로 풀어 준다
      ▼
   저수준 (rpm · dpkg)
      │  주어진 파일 하나를 설치·삭제할 뿐
      ▼
   시스템
구분저수준고수준
다루는 것파일 하나저장소(repository)
의존성스스로 해결하지 못한다자동으로 해결한다
예rpm, dpkgyum, dnf, apt

이 구분이 이 단원의 핵심이다. "의존성을 자동으로 해결해 주는 도구는?"이라고 물으면 답은 고수준 도구(yum·apt) 다.

rpm — 저수준 도구

rpm -ivh 패키지.rpm       # 설치 (install, verbose, hash)
rpm -Uvh 패키지.rpm       # 업그레이드 (없으면 설치)
rpm -e 패키지명           # 삭제 (erase)
rpm -qa                   # 설치된 패키지 전부 (query all)
rpm -q 패키지명           # 그 패키지가 깔려 있나
rpm -ql 패키지명          # 그 패키지가 설치한 파일 목록 (list)
rpm -qi 패키지명          # 패키지 정보 (info)
rpm -qf /경로/파일        # 이 파일이 어느 패키지 것인가 (file)
rpm -V 패키지명           # 변조 검증 (verify)
옵션뜻
-i설치 (install)
-U업그레이드 — 없으면 설치까지
-F업그레이드 — 이미 있을 때만 (freshen)
-e삭제 (erase)
-q질의 (query)
-v / -h자세히 / 진행 표시(#)
--nodeps의존성 무시하고 강행
  • -i와 -U의 차이 — -U는 없으면 새로 설치하지만 -F는 이미 있을 때만 갱신한다.
  • rpm은 의존성을 해결해 주지 않는다. 필요한 패키지가 없으면 오류를 내고 멈춘다.
  • -v와 -h는 보여 주는 방식일 뿐 동작을 바꾸지 않는다. -ivh·-Uvh처럼 세 글자를 묶어 쓰는 것이 관례다.
  • 커널 패키지는 -U가 아니라 -i로 설치하는 것이 관례다. -U는 옛 버전을 지우므로, 새 커널이 부팅되지 않을 때 돌아갈 옛 커널이 사라진다.

의존성에 막혔을 때의 화면

# rpm -ivh httpd-2.4.6-97.el7.x86_64.rpm
error: Failed dependencies:
        httpd-tools = 2.4.6-97.el7 is needed by httpd-2.4.6-97.el7.x86_64
        /etc/mime.types is needed by httpd-2.4.6-97.el7.x86_64
  • rpm은 무엇이 모자란지 알려 주기만 하고 가져오지는 않는다. 위에서는 httpd-tools 패키지와 /etc/mime.types 파일을 가진 패키지가 먼저 있어야 한다.
  • 지울 때도 똑같이 막힌다. 다른 패키지가 기대고 있는 것을 rpm -e로 지우려 하면 is needed by (installed) … 오류가 난다.
대처명령평가
모자란 패키지를 먼저 설치rpm -ivh httpd-tools-….rpm정석이지만 그 패키지가 또 다른 것을 요구할 수 있다
고수준 도구에 맡김yum install httpd권장 — 필요한 것을 저장소에서 함께 받아 온다
무시하고 강행rpm -ivh --nodeps 파일.rpm설치는 되지만 실행이 안 될 수 있다
강제 옵션뜻
--nodeps의존성 검사를 건너뛴다 (설치·삭제 모두)
--force이미 설치된 패키지나 파일이 있어도 덮어써서 설치
--test실제로 설치하지 않고 문제가 없는지만 점검

설치는 파일 이름, 삭제는 패키지 이름

# rpm -q httpd
httpd-2.4.6-97.el7.x86_64
# rpm -e httpd-2.4.6-97.el7.x86_64.rpm
error: package httpd-2.4.6-97.el7.x86_64.rpm is not installed
# rpm -e httpd
# rpm -q httpd
package httpd is not installed
작업인자로 주는 것이유
설치 -i · 업그레이드 -U -F패키지 파일 (….rpm)아직 시스템에 없으니 파일을 건네야 한다
삭제 -e · 질의 -q · 검증 -V패키지 이름 (httpd)이미 설치되어 RPM 데이터베이스에 등록된 것을 가리킨다
질의 -qp패키지 파일설치하기 전의 파일을 들여다본다
  • 설치된 패키지 정보는 RPM 데이터베이스(/var/lib/rpm) 에 기록된다. rpm -q 계열은 이 데이터베이스를 읽는다.
  • rpm -e는 성공하면 아무것도 출력하지 않는다. 조용하면 된 것이다.

-q 뒤에 붙는 글자

옵션묻는 것인자
-qa설치된 패키지 전부 (all)없음
-qi패키지 정보 — 버전·설명·설치 시각 (info)패키지 이름
-ql그 패키지가 설치한 파일 목록 (list)패키지 이름
-qc그중 설정 파일만 (config)패키지 이름
-qd그중 문서 파일만 (doc)패키지 이름
-qf이 파일이 속한 패키지 (file)파일 경로
-qR그 패키지가 필요로 하는 것 (requires)패키지 이름
-qp설치 전 파일을 대상으로 — -qpi, -qpl로 조합.rpm 파일
# rpm -qa | grep httpd
httpd-2.4.6-97.el7.x86_64
httpd-tools-2.4.6-97.el7.x86_64
# rpm -qf /etc/httpd/conf/httpd.conf
httpd-2.4.6-97.el7.x86_64
  • -ql과 -qf는 방향이 반대다. -ql은 패키지 → 파일들, -qf는 파일 → 패키지다. 보기에 둘을 나란히 놓고 묻는다.
  • -qa는 수백 줄이 나오므로 보통 grep으로 걸러 본다. -q만 쓰면 이름을 정확히 알아야 하지만 -qa | grep은 이름의 일부만으로 찾는다.

검증 -V 읽기

# rpm -V httpd
S.5....T.  c /etc/httpd/conf/httpd.conf
  • 설치할 때 기록해 둔 값과 지금 파일을 비교한다. 아무것도 출력되지 않으면 바뀐 것이 없다는 뜻이다.
  • 글자가 나온 자리가 달라진 항목이다 — S 크기, 5 내용(해시값), T 수정 시각, M 권한, U 소유자, G 그룹. 점(.)은 그대로라는 표시다.
  • 가운데 c는 그 파일이 설정 파일이라는 뜻이다. 설정 파일은 관리자가 고치는 것이 정상이라 위 결과는 문제가 아니다. 실행 파일에서 5가 뜨면 의심해야 한다.

패키지 파일 이름 읽기

   httpd - 2.4.6 - 97 . el7 . x86_64 . rpm
     │       │      │     │      │      │
     │       │      │     │      │      └── 확장자
     │       │      │     │      └───────── 아키텍처 (x86_64, i386, noarch)
     │       │      │     └──────────────── 배포판 (el7 = RHEL 7)
     │       │      └────────────────────── 릴리스 번호
     │       └───────────────────────────── 버전
     └───────────────────────────────────── 패키지 이름
  • 이름-버전-릴리스.아키텍처.rpm 구조를 그대로 묻는다.
  • noarch 는 CPU 구조와 무관한 패키지(문서, 스크립트)를 뜻한다.
  • 버전은 프로그램 자체의 판 번호, 릴리스는 같은 버전을 배포판이 몇 번째로 다시 묶었는가다. 프로그램은 그대로인데 보안 패치만 넣어 다시 내면 릴리스만 오른다.
  • 이름에 하이픈이 들어간 패키지도 있다. httpd-tools-2.4.6-97.el7.x86_64.rpm 은 오른쪽부터 읽는다 — 아키텍처, 릴리스(97.el7), 버전(2.4.6)을 떼고 남은 httpd-tools가 이름이다.
아키텍처 자리뜻
x86_6464비트 인텔·AMD
i386 · i68632비트 인텔 계열
noarch아키텍처와 무관
src컴파일 전의 소스 패키지 (.src.rpm)

yum — 고수준 도구

yum install httpd          # 설치 (의존성 자동)
yum remove httpd           # 삭제
yum update                 # 전체 업데이트
yum update httpd           # 특정 패키지만
yum list installed         # 설치된 목록
yum search 키워드          # 검색
yum info httpd             # 정보
yum repolist               # 저장소 목록
yum clean all              # 캐시 정리
  • 저장소(repository) 에서 필요한 것을 알아서 내려받고 의존 패키지까지 함께 설치한다.
  • 저장소 설정은 /etc/yum.repos.d/ 아래의 .repo 파일에 있다.

저장소 설정 파일 읽기

# /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
항목뜻
[base]저장소 ID. 대괄호 한 덩어리가 저장소 하나다
name사람이 읽는 설명
baseurl패키지를 받아 올 저장소 주소
enabled1이면 사용, 0이면 끔
gpgcheck1이면 패키지의 서명을 검사한다
gpgkey검사에 쓸 공개 키의 위치
위치역할
/etc/yum.confYUM 전체 설정
/etc/yum.repos.d/*.repo저장소별 설정
/var/cache/yum내려받은 목록과 패키지의 캐시 — yum clean all이 비운다
/var/log/yum.log설치·삭제 기록
  • 파일 이름이 .repo로 끝나야 읽힌다. 저장소를 잠시 끄려면 파일을 지울 필요 없이 enabled=0으로 바꾼다.

그 밖의 하위 명령

명령하는 일
yum check-update업데이트할 것이 있는지 확인만 한다
yum localinstall 파일.rpm내려받아 둔 파일을 설치하되 의존성은 저장소에서 채운다
yum provides /경로/파일그 파일을 제공하는 패키지 찾기
yum grouplist · groupinstall패키지 묶음(그룹) 보기 · 설치
yum eraseremove와 같다
yum history지금까지의 작업 이력
yum -y install httpd묻는 말에 모두 yes — 확인 없이 진행

rpm과 yum 나란히 놓기

하는 일rpmyum
설치rpm -ivh 파일.rpmyum install 이름
업그레이드rpm -Uvh 파일.rpmyum update 이름
삭제rpm -e 이름yum remove 이름
설치 목록rpm -qayum list installed
정보rpm -qi 이름yum info 이름
파일의 소속rpm -qf 파일yum provides 파일
의존성직접 챙긴다자동
재료를 얻는 곳내가 건넨 파일저장소
  • rpm은 옵션(하이픈+글자), yum은 영어 단어로 일을 시킨다. 보기에서 yum -i나 rpm install 같은 섞인 표기는 틀린 것이다.
  • yum도 결국 내부에서 RPM 패키지를 설치한다. 그래서 yum으로 설치한 것이 rpm -qa에 그대로 보인다. 둘은 경쟁자가 아니라 위아래 층이다.
도구쓰는 곳
yumCentOS 7, RHEL 7 이하
dnfYUM의 후계 — 페도라, RHEL 8 이상
zypperSUSE 계열
  • dnf는 명령 구조가 yum과 거의 같다. dnf install처럼 쓴다.
  • SUSE는 RPM 계열이지만 도구가 zypper 라는 점이 함정으로 나온다.
  • DNF는 Dandified YUM의 줄임말이다. RHEL 8 이상에서도 yum 명령은 남아 있지만 실제로는 dnf를 부르는 이름일 뿐이다.
  • zypper도 쓰는 법이 닮았다 — zypper install, zypper remove, zypper update.
증상원인확인·대처
Failed dependencies 로 설치가 멈춤저수준 도구는 의존성을 풀지 못한다yum install로 설치
rpm -e 파일.rpm 이 is not installed삭제는 패키지 이름으로 한다rpm -e httpd
rpm -q가 is not installed 인데 분명 깔았다이름이 정확하지 않다rpm -qa를 grep으로 걸러 본다
yum install이 패키지를 못 찾음그 패키지를 가진 저장소가 없거나 꺼져 있다yum repolist, .repo의 enabled
설정 파일을 고쳤는지 알고 싶다—rpm -V 패키지명

내일은 데비안 계열의 dpkg·apt, 그리고 소스를 직접 컴파일하는 방법을 다룬다.

📖 용어

  • 패키지 : 프로그램 파일과 설치 정보를 하나로 묶은 배포 단위.
  • 의존성 : 어떤 패키지가 동작하기 위해 필요한 다른 패키지와의 관계.
  • RPM 계열 : .rpm을 쓰는 배포판 계열. 레드햇, CentOS, 페도라, SUSE.
  • 저수준 도구 : 패키지 파일 하나를 다루며 의존성을 해결하지 않는 도구. rpm, dpkg.
  • 고수준 도구 : 저장소를 이용해 의존성까지 자동 해결하는 도구. yum, dnf, apt.
  • 저장소(repository) : 패키지를 모아 둔 서버. /etc/yum.repos.d/에 설정한다.
  • dnf : YUM을 대체한 차세대 패키지 관리 도구.
  • zypper : SUSE 계열에서 사용하는 고수준 패키지 관리 도구.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 .rpm 패키지 형식을 사용하는 배포판으로 알맞은 것은?

문제 2

다음 중 rpm 명령에서 패키지를 삭제할 때 사용하는 옵션으로 알맞은 것은?

문제 3

다음 중 의존성 문제를 자동으로 해결하며 저장소에서 패키지를 내려받아 설치하는 도구로 알맞은 것은?

문제 4

다음 중 httpd-2.4.6-97.el7.x86_64.rpm에서 x86_64가 나타내는 것으로 알맞은 것은?

문제 5

다음 중 SUSE 리눅스에서 사용하는 고수준 패키지 관리 도구로 알맞은 것은?

이전Week 6 종합 복습: 에디터와 프로세스Week 6 · Day 5다음 패키지 관리 (2): DEB·APT와 소스 설치Week 7 · Day 2

참고 공식 자료

  • 리눅스마스터 2급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 패키지란
  • 두 계열
  • 저수준과 고수준
  • rpm — 저수준 도구
  • 의존성에 막혔을 때의 화면
  • 설치는 파일 이름, 삭제는 패키지 이름
  • q` 뒤에 붙는 글자
  • 검증 `-V` 읽기
  • 패키지 파일 이름 읽기
  • yum — 고수준 도구
  • 저장소 설정 파일 읽기
  • 그 밖의 하위 명령
  • rpm과 yum 나란히 놓기
  • 용어
  • 연습 문제