Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

리눅스 패키지 관리

이 문서는 우분투 리눅스 11.04를 기준으로 만들었습니다.

Ubuntu 리눅스(:12)는 Debian GNU/Linux 배포판을 기반으로하는 운영체제(:12)입니다. 배포판에 대한 구분은 대게가 패키징 관리시스템에 따라 달라집니다. 예를 들어 CentOS나 Fedora는 RedHat 계열 운영체제로 분류를 하는데, 이들은 RPM 패키징 시스템을 이용하고 있습니다. 데비안 계열은 독자적인 deb 패키징 시스템을 가집니다. 확장자도 .deb 이고요.

데비안을 기반으로 하는 Ubuntu 역시 deb 패키징 시스템을 사용합니다.

그동안은 GUI 기반의 패키징 관리 시스템을 사용해왔습니다. gnome에서는 synaptic 패키지 관리 프로그램을 KDE에서는 kpackage 패키지 관리 프로그램을 사용해 왔습니다. 데스크탑이나 개발용으로 사용하려면 이 정도로 충분하죠.

보낸 사람 Linux
보낸 사람 Linux

하지만 시스템/네트워크 관리 목적으로 그러니까 시스템/네트워크 엔지니어 수준에서 리눅스를 다루려면, GUI기반 패키지 관리 프로그램으로는 한계가 있습니다. 최근 cloud(:12)관련 일을 하다 보니, 그동안의 GUI 관리 프로그램으로는 한계에 부닥치더군요. 그래서 요즘 CLI 기반의 패키지 관리 프로그램을 사용하고 있습니다. 이 글은 이렇게 된거, 낮은 수준에서 패키지 관리 방법을 정리해 보자라는 생각으로 만들게 됐습니다.

Ubuntu 리눅스 Package 관리

우분투는 패키지와 패키지의 정보를 저장하고 있는 패키지 저장소라는 개념을 가지고 있습니다. 소프트웨어는 보안패치, 기능패치, 소프트웨어 추가 등의 작업이 수시로 이루어지는데 이들 정보를 집중관리하는 서버를 두고 여기에 연결해서 패키지를 관리하는 거죠. 리눅스 사용자가 패키지 관리 소프트웨어를 이용해서 저장소에 연결하면 패키지 변경사항을 알려주고 업데이트할 수 있도록 서비스합니다. 이 방식을 이용하면 유저가 일일이 업그레이드 내용을 추적해서 패키지를 업데이트할 필요가 없이 간단하게 리눅스를 최신의 상태로 유지할 수 있습니다. 온라인 상에서 이루어지는 윈도우의 보안 패치같은 개념이라고 보시면 될 것 같습니다. 이걸 리눅스는 일반 애플리케이션차원으로 확장한거죠.

패키지 저장소 설정

우선 패키지 저장소의 위치를 설정해야 합니다. 저장소를 설정하는 목적은 다음과 같습니다.
  • 더 빠른 저장소 선택
저장소는 서버/클라이언트 모델로 작동합니다. 물리적으로 가깝고 대역폭이 큰 서버를 선택하는게 좋겠죠.
  • 배포판 버전 선택
저장소는 배포판의 버전에 따라서 운용됩니다. 우분투 리눅스 10.10, 11.04로 따로 유지하는 거죠. 일반사용자야 항상 최신의 버전을 따라가면 되겠지만, 기업은 개발환경, 보안, 소프트웨어 호환 문제로 그렇게 할 수가 없죠. 또한 같은 우분투라도 소프트웨어 구성이 달라질 수가 있습니다. 우분투의 데스크탑 환경은 Gnome 기반인데, KDE 기반의 Kubuntu, XFCE 기반의 Xubuntu도 있습니다. 데스크탑 환경이 달라지면 패키지 구성도 당연히 달라지겠죠 ? 그리고 기업이 자체적으로 저장소를 운영할 수 있습니다. 우분투 기반에 커널을 커스터마이징 하거나 자신들이 개발한 소프트웨어와 이들 소프트웨어를 가동하기 위한 환경설정등을 관리하기 위한 목적이죠.

기본

우분투는 apt를 이용해서 패키지를 관리합니다. 우분투는 원격의 패키지 저장소에 연결해서 패키지웨어를 설치한다고 했으니, 저장소를 제공하는 서버의 정보가 필요할 겁니다. 이 정보는 아래의 파일에 저장돼 있습니다.
/etc/apt/sources.lists
이 파일을 편집해서 저장소를 추가하거나 삭제하는 등의 작업을 할 수 있습니다. 편집하기 전에 backup해 놓는게 좋을 겁니다.
# sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

sources.list파일의 내용은 다음과 같습니다.
# deb cdrom:[Ubuntu 10.10 _Maverick Meerkat_ - Release i386 (20101007)]/ maverick main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

deb http://kr.archive.ubuntu.com/ubuntu/ natty main restricted
deb-src http://kr.archive.ubuntu.com/ubuntu/ natty main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://kr.archive.ubuntu.com/ubuntu/ natty-updates main restricted
deb-src http://kr.archive.ubuntu.com/ubuntu/ natty-updates main restricted
....
....
각 줄의 처음에 #이 있으면 주석입니다. 주석은 관리자에게 정보를 주기위해서 사용하며, apt에 의해서 해석되지 않습니다.

#으로 시작하지 않은 두 줄로 저장소를 어떻게 관리하는지를 살펴보겠습니다.
deb http://kr.archive.ubuntu.com/ubuntu/ natty main restricted
deb-src http://kr.archive.ubuntu.com/ubuntu/ natty main restricted
  • deb : 이 것은 미리 컴파일된 바이너리를 포함한 패키지를 관리하는 저장소라는 것을 의미합니다. 대부분 이 형식을 사용합니다.
  • deb-src : 컴파일하지 않은 소스 코드를 포함한 패키지를 관리하는 저장소라는 것을 의미합니다. 소스를 분석할 일이 많은 개발자가 주로 사용합니다.
  • http://kr.archive.ubuntu.com/ubuntu/ : 저장소의 URI입니다. 이용할 수 있는 URI의 목록은 official mirror list를 참고면 됩니다.
  • natty는 저장소에서 관리하는 배포판의 버전 이름입니다. 버전번호가 아닌 이름으로 돼 있어서, 우분투를 처음 접하는 사람은 도대체 어느 정도의 버전인지 알기가 힘듦니다. 저만 해도 hardy가 최신 버전인지, natty가 최신버전인지 지금도 헛갈립니다. 그냥 버전 번호로 했으면 좋았을 것을. 버전 이름의 정보는 ubuntu Releases 문서를 참고하시기 바랍니다.
  • main 과 restricted는 섹션 이름입니다.

저장소 추가하기

Universe와 Multiverse 저장소

리눅스는 엄청나게 많은 오픈 소프트웨어를 가지고 있습니다. 배포판에 포함된 건 그 중 극히 일부분입니다. Universe와 Multiverse 저장소에 접속하면, 더 많은 패키지를 설치할 수 있습니다.

Universe와 Multiverse 저장소를 추가하면, 너무 많은 패키지를 관리하게 되므로 보통은 주석처리가 돼 있습니다. 주석을 제거하면 사용할 수 있습니다.
deb http://kr.archive.ubuntu.com/ubuntu/ natty universe
deb-src http://kr.archive.ubuntu.com/ubuntu/ natty universe
deb http://kr.archive.ubuntu.com/ubuntu/ natty-updates universe
deb-src http://kr.archive.ubuntu.com/ubuntu/ natty-updates universe

저장소 정보 업데이트

저장소 정보를 추가했으면, apt-get 명령으로 저장소 정보가 업데이트됐음을 알려줘야 합니다. 업데이트를 실행하면 저장소에서 사용할 패키지의 정보를 가져옵니다.
# sudo apt-get update
무시http://kr.archive.ubuntu.com natty InRelease
무시http://kr.archive.ubuntu.com natty-updates InRelease
기존 http://kr.archive.ubuntu.com natty Release.gpg
무시http://security.ubuntu.com natty-security InRelease
기존 http://kr.archive.ubuntu.com natty-updates Release.gpg
무시http://extras.ubuntu.com natty InRelease
기존 http://kr.archive.ubuntu.com natty Release
기존 http://security.ubuntu.com natty-security Release.gpg
기존 http://kr.archive.ubuntu.com natty-updates Release
기존 http://extras.ubuntu.com natty Release.gpg
기존 http://kr.archive.ubuntu.com natty/main Sources
...
...

패키지관리

데비안 계열의 리눅스 운영체제는 apt계열 명령과 dpkg로 패키지를 관리합니다. GUI의 툴이 있기는 합니다만 이들 CLI 프로그램의 사용법을 익혀두는게 여러모로 도움이 될겁니다. 특히 시스템 관리자라면 말이죠.

저장소 업데이트

앞에서 이미 소개 했죠.
# sudo apt-get update

저장소의 패키지 설치

저장소에서 새로운 패키지를 설치합니다.
# sudo apt-get install 패키지명

패키지 업그레이드

설치되어 있는 패키지를 검사해서 최신버전으로 업그레이드 합니다.
# sudo apt-get upgrade

패키지 삭제

설치되어 있는 패키지를 지웁니다. 패키지를 지우더라도 설정파일은 지우지 않습니다.
# sudo apt-get remove 패키지이름
설정파일까지 모두 지우고 싶다면
# sudo apt-get --purge remove 패키지이름

패키지 재 설치

실수로 패키지 구성파일의 일부를 삭제 했다거나 설정파일을 잘 못 건드려서 사용할 수 없게될 경우 패키지를 재 설치해서 복구할 수 있습니다.
# sudo apt-get --reinstall install 패키지이름

패키지 소스코드 다운로드

개발자라면 소스코드가 필요하기도 할 겁니다.
# sudo apt-get source 패키지이름

패키지 검색

이름의 일부로 사용할 수 있는 패키지를 검색할 수 있습니다.
# sudo apt-cache search 패키지이름의 전부 혹은 일부
# sudo apt-cache search vim
exuberant-ctags - build tag file indexes of source code definitions
kdesdk-scripts - scripts and data files for development
linuxdoc-tools - convert LinuxDoc SGML source into other formats
apvlv - PDF viewer with Vim-like behaviour
bicyclerepair - A refactoring tool for python
bleachbit - delete unnecessary files from the system
colordiff - tool to colorize 'diff' output
cream - VIM macros that make the VIM easier to use for beginners
editmoin - edit MoinMoin wiki pages with your favourite editor
elvis-tiny - Tiny vi compatible editor for the base system
fim - a scriptable frame buffer and ascii art image viewer
global - Source code search and browse tools
glogg - A smart interactive log explorer using Qt4
gramadoir - Irish language grammar checker (integration scripts)
jvim-canna - Japanized VIM (Canna version)
jvim-doc - Documentation for jvim (Japanized VIM)
...

패키지 정보 보기

저장소에 있는 패키지의 정보를 확인할 수 있습니다.
# sudo apt-cache show 패키지이름

패키지 목록 보기

설치돼 있는 모든 패키지 목록 보기
# dpkg -l

-l 뒤에 패키지 이름을 주면, 패키지의 상세 정보를 확인할 수 있습니다.
$ dpkg -l vim
희망상태=알수없음(U)/설치(I)/지우기(R)/깨끗이(P)/고정(H)
| 상태=아님(N)/설치(I)/설정(C)/풀림(U)/절반설정(F)/일부설치(H)/트리거대기(W)/
| /    트리거밀림(T)
|/ 오류?=(없음)/다시설치필요(R) (상태, 오류가 대문자=불량)
||/ 이름           버전           설명
+++-================-================-================================================
ii  vim              2:7.3.035+hg~8fd Vi IMproved - enhanced vi editor

패키지의 구성 파일 보기

서버 패키지를 설치하고 나면, 설정파일을 바꿔줘야 하는데 위치를 찾지못해서 난감할 때가 있습니다. dpkg -L을 이용해서 패키지의 구성파일 목록을 확인할 수 있습니다.
# dpkg -L 패키지이름

로컬 패키지 설치하기

버전관리가 편하기 때문에 대부분 저장소에있는 패키지를 설치합니다만, .deb를 다운로드 받아서 설치해야 하는 경우도 있습니다. 이때는 dpkg를 이용해서 설치하면 됩니다.
# sudo dpkg -i 패키지파일

기타옵션들

의존성 무시

daumcloud 패키지를 설치하려고 했더니, 의존성 에러가 우수수수 떨어진다.
# sudo dpkg -i daumcloud_1.1.0.45.deb 
(데이터베이스 읽는중 ...현재 122258개의 파일과 디렉터리가 설치되어 있습니다.)
daumcloud 1.1.0.45 패키지를 대체할 준비하는 중입니다 (daumcloud_1.1.0.45.deb 사용) ...
대체되는 daumcloud 패키지를 푸는 중입니다 ...
dpkg: dependency problems prevent configuration of daumcloud:
 daumcloud 패키지는 다음 패키지에 의존: libatk1.0-0 (>= 1.20.0).
 daumcloud 패키지는 다음 패키지에 의존: libc6 (>= 2.4).
 daumcloud 패키지는 다음 패키지에 의존: libcairo2 (>= 1.6.0).
 daumcloud 패키지는 다음 패키지에 의존: libglib2.0-0 (>= 2.16.0).
 daumcloud 패키지는 다음 패키지에 의존: libgtk2.0-0 (>= 2.12.0).
 daumcloud 패키지는 다음 패키지에 의존: libpango1.0-0 (>= 1.20.1).
 daumcloud 패키지는 다음 패키지에 의존: openssl (>= 0.9.8).
의존성에 걸린 패키지들을 확인해 봤더니, 모두 문제없이(버전문제도 없음)설치 돼 있었다. 무언가 잘 못 패키징 한 듯 싶다. 그래서 의존성 무시하고 설치했다.
# sudo dpkg --force-depends -i daumcloud_1.1.0.45.deb

GUI 패키지 관리 프로그램

CLI 툴은 강력하긴 하지만 익숙해지기까지 시간이 필요하다. 간단하게 사용하기 원한다면 GUI 프로그램을 사용해볼만 하다. GUI 프로그램들은 패키지 목록을 관리하는 것 외에 패키지들을 그룹별로 관리해주며, 유용한 소프트웨어를 추천해 주기도 한다.

KDE의 패키지 관리자인 muon package manager

 image-1

KDE의 또 다른 패키지 관리자인 muon software center

 image-2

gnome의 패키지 관리자 Synaptic package manager

 image-3