패키지(Package)
리눅스에서 패키지란 리눅스 시스템에서 프로그램을 실행하는데 필요한 파일들(실행 파일, 설정 파일, 라이브러리 등)이 담겨 있는 설치 파일 묶음이다.
패키지 종류로는 소스 패키지(Source Package)와 바이너리 패키지(Binary Package)가 있다.
소스 패키지는 소스 코드가 들어있는 패키지로, 소스 코드를 사용자가 직접 컴파일 해 바이너리 파일로 만들어야 실행할 수 있다. 직접 컴파일해야 한다는 번거로움이 있지만, 원하는 대로 소스 코드를 수정할 수 있으며 자신의 환경에 맞춰 컴파일 할 수 있다.
반면에 바이너리 패키지는 이미 컴파일이 되어 있어 바로 설치할 수 있으며, 설치 시간도 짧고 설치 시 오류가 발생할 가능성이 적다. 따라서 리눅스의 기본 설치 패키지들은 대부분은 바이너리 패키지이다.
리눅스 배포판 별로 다양한 패키징 방식이 존재하지만, 대표적으로 두 가지 방식이 있다.
- Debian 계열 (Debian, Ubuntu, Linux Mint 등)에서 사용하는 패키징 방식 : DEB
- Red Hat 계열 (Red Hat, Fedora, CentOS 등)에서 사용하는 패키징 방식 : RPM
DEB 패키지 파일의 확장자는 *.deb이고 RPM 패키지 파일의 확장자는 *.rpm이다.
패키지 관리 도구
리눅스에서는 패키지를 관리하기 위한 Tool을 제공한다. Debian 계열에서는 dpkg, apt를 제공하며 Red Hat 계열에서는 rpm, yum을 제공한다. 이 중 dpkg와 rpm은 저수준 패키지 도구로서 패키지 간의 의존성을 알지 못하기에 쓰이지 않는다.
dpkg
우분투에서 패키지를 설치하는 데 가장 많이 사용하는 도구는 apt이지만 apt는 dpkg의 개념과 기능을 확장한 것이다. apt를 보기 전 dpkg 도구를 간략히 살펴보자.
deb 파일의 형식은 다음과 같다.
패키지이름_버전-개정번호_아키텍처.deb
아래는 자주 사용하는 dpkg 명령어이다.
dpkg -i 패키지파일이름.deb | 패키지 설치 |
dpkg -r 패키지이름 | 기존에 설치된 패키지 삭제 |
dpkg -P 패키지이름 | 기존에 설치된 패키지 삭제 및 설정 파일 모두 제거 |
dpkg -l 패키지이름 | 설치된 패키지에 대한 정보를 보여줌 |
dpkg -L 패키지이름 | 패키지가 설치한 파일 목록을 보여줌 |
dpkg --info 패키지이름파일.deb | 패키지 파일에 대한 정보를 보여줌 |
apt
dpkg 도구로는 의존성을 가진 패키지를 설치할 수 없다. 예를 들어 A 라는 패키지를 설치할 때 사전에 B 패키지가 설치되어 있어야한다면(B 패키지를 의존한다면) B 패키지를 설치 한 후 A 패키지를 설치해야 한다. 의존이 계속해서 이어진다면 설치 과정이 매우 험난해진다.
이런 문제를 해결한 명령어가 apt이다. 특정 패키지를 설치 할 경우 의존성이 있는 다른 패키지를 자동으로 먼저 설치해준다. 우분투가 제공하는 deb 파일 저장소(repository)에서 설치할 deb 파일과 의존성이 있는 deb 파일을 인터넷을 통해 다운로드한다. deb 파일 저장소의 URL은 /etc/apt/sources.list에 저장되어 있다.
sources.list에 저장된 정보들은 아래와 같다.
deb http://www.deb-multimedia.org buster main
[deb or deb-src] [repository url] [distribution] [component]
- deb or deb-src : 바이너리 패키지 저장소와 소스 패키지 저장소 중 어떤 저장소를 사용하는지를 의미
- repository url : 해당 저장소의 주소
- distribution : 릴리즈하는 리눅스 버전을 의미
- component : main(표준으로 제고오디는 무료 오픈소스 소프트웨어), restricted(공식적으로 지원하는 사유 소프트웨어), universe(커뮤니티에 의해 유지되고 지원되는 오픈소스 소프트웨어), multiverse(공식적으로 지원되지 않는 사유 소트웨어)
sources.list에 모든 패키지 저장소를 저장하면 관리가 어렵다. 때문에 /etc/apt/sources.list.d 디렉터리에서 패키지 별로 파일을 만들어 패키지 저장소를 지정할 수 있다.
각 파일의 데이터 형식도 sources.list와 같다.
패키지 설치 과정
- 사용자가 apt update 명령어를 수행한다. → 패키지 관리자는 패키지 목록(/etc/apt/sources.list, /etc/apt/sources.list.d/*)에 정의된 패키지 저장소로부터 설치할 수 있는 패키지 정보들을 담은 메타 정보를 로컬 캐시에 저장한다.
- 사용자가 apt install 패키지명으로 패키지를 설치한다. → 패키지 관리자는 로컬 캐시를 참조하여 패키지 정보를 찾고 패키지 저장소를 통해 설치한다. 이때 종속성이 있는 패키지들도 자동으로 설치한다.
apt 명령어
아래는 자주 사용하는 apt 관련 명령어이다.
apt -y install 패키지이름 | 패키지 다운로드 |
apt update | /etc/apt/sources.list 파일의 내용이 수정되면 이 명령으로 다운로드 받을 패키지 목록을 업데이트 |
apt remove 패키지이름 | 기존의 설치된 패키지 삭제 |
apt purge 패키지이름 | 기존 설치된 패키지를 설정 파일을 포함해 완전히 제거 |
apt automove | 사용하지 않는 패키지를 모두 제거 |
apt clean | 설치할 때 내려받은 파일 및 과거의 파일 제거 |
apt-cache 명령어를 사용하여 패키지를 설치하기 전 패키지에 대한 정보나 의존성 정보를 미리 확인 할 수 있다.
apt-cache show 패키지이름 | 패키지의 정보를 화면에 출력 |
apt-cache depends 패키지이름 | 패키지에 대한 의존성 정보 출력 |
apt-cache redepends 패키지이름 | 이 패키지에 의존하는 다른 패키지의 목록을 보여줌 |
'Linux > Ubuntu' 카테고리의 다른 글
사용자와 그룹 (0) | 2024.01.22 |
---|---|
파일, 디렉터리의 소유권과 허가권 (0) | 2024.01.22 |
Ubuntu 기본 명령어 (0) | 2024.01.22 |
우분투 su, sudo 명령어 (0) | 2023.01.28 |
우분투 디렉터리 (0) | 2023.01.28 |