우분투 패키지 관리 도구, apt 명령어들

리눅스에서 돌아가는 엄청나게 많은 소프트웨어들을 유지하고 업데이트하기 위해 각 배포판마다 자기만의 패키지 관리 툴이 있는데, 그 중 데비안 계열에서 사용하는 것이 apt이다.

가끔 어떤 소프트웨어를 설치하기 위해 데비안용 패키지를 직접 웹사이트에서 다운로드 받을 때도 있다.

이 때는 메타데이터 검색이나 의존성 문제 등을 해결하지 않고 단순히 패키지 파일을 설치하고 삭제하는 저수준 패키지 툴인 dpkg를 사용하면 된다.

dpkg -i filename.deb과 같이 사용한다.


apt / apt-get

패키지를 설치할 때, 어디서는 apt install 을, 어디서는 apt-get install 을 하라고 한다.

사실 둘은 같은 건데, apt-get 이 더 오래된 방식이고 이를 더 보기 편하게 만든 것이 apt 이다.

기존에는 apt-getapt-cache 등을 통해 패키지를 관리했었지만, 이 둘을 통합시켜서 사용자 친화적으로 만들어진 도구가 apt 인 것이다.

apt로 통합되면서 apt-get 보다 줄 수 있는 옵션이 조금 더 줄어들었기 때문에, 일반적으로 스크립트 등에서 사용할 때는 apt-get 을 추천한다고 한다.


apt install (apt-get install)

apt install PACKAGE는 지정한 패키지를 시스템에 새로 설치한다. 이렇게 사용자가 직접 설치한 패키지는 뒤에서 나올 autoremove 로 지워지지 않는다.

재설치는 apt reinstall PACKAGE로 할 수 있다.


apt remove, purge, autoremove

apt remove PACKAGE 는 지정한 패키지를 시스템에서 제거한다.

그러나 패키지를 설치할 때 생성되었던 사용자 파일들을 제거되지 않는데, 이것까지 깔끔하게 제거하는 것이 apt purge PACKAGE이다.

패키지를 지울 때 remove와 purge 를 잘 구분해서 사용해야 한다.

apt autoremove는, 특정 패키지를 설치했을 때 의존성 때문에 자동으로 설치되었지만 지금은 사용되고 있지 않은 패키지들을 지워준다.

apt install 로 직접 설치한 패키지들은 사용자가 명시적으로 설치했기 때문에, 이 autoremove의 제거 대상에 속하지 않게 된다.

만약 자동으로 설치되었음에도 불구하고 필요한 패키지라고 한다면, apt-mark를 통해 autoremove가 제거하지 않게끔 할 수 있다.


Repository

설치할 패키지를 어디서 받아올지를 관리하는 것을 repository라고 한다.

기본적으로는 kr.archive.ubuntu.com로 설정되어 있어서, 만약에 다른 기관에서 운영하는 레포지토리를 통해 패키지들을 다운로드 받고 싶다면 이 링크들을 /etc/apt/sources.list에서 직접 바꿔줄 수 있다.(카카오, 다음 등등이 있다)

설치하려는 패키지가 이런 공식 저장소에서 지원하지 않을 수 있는데, 이럴 경우는 패키지 제작사에서 운영하고있는 레포지토리를 이 리스트에다가 추가해줘야 한다.

이 때 사용하는 것이 add-apt-repository 저장소로, WINE을 설치할때도 공식 저장소에서 관리되지 않는 패키지이기 때문에 WINE 에서 관리하는 레포지토리를 추가해서 설치한다.

sudo apt-key add winehq.key
sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main'

파일을 확인해보면 지정해준 저장소가 목록에 추가된 것을 볼 수 있다.

bconfiden2@bconfiden2:~$ tail -n 5 /etc/apt/sources.list
# entries were disabled at the end of the installation process.
# For information about how to configure apt package sources,
# see the sources.list(5) manual.
deb https://dl.winehq.org/wine-builds/ubuntu/ focal main
# deb-src https://dl.winehq.org/wine-builds/ubuntu/ focal main


apt-key

apt-key는 apt가 패키지를 인증할 때 사용하는 키가 된다. 마치 ssh-key 와 비슷하다.

위에서 WINE 레포지토리를 추가하기 전에 winehq.key 를 apt-key 에 추가한 것을 볼 수 있는데, apt key 를 추가하고 repository 도 등록해줬기 때문에 해당 레포와 통신하면서 패키지를 받아올 수 있게 되는 것이다.

현재 어떤 키들이 있는지 확인하기 위해서는 apt-key list를 사용할 수 있고, apt-key export KEYID를 통해 gpg 퍼블릭 키를 추출해서 외부 호스트에 배포할 수도 있다.


apt update (apt-get update)

update는 패키지를 업데이트하는 것이 아닌, 설치할 수 있는 패키지 리스트를 업데이트한다.

실제로 패키지들을 리스트에 있는 최신 버전으로 업그레이드 하는 것은 apt upgrade 명령어이다.

update를 수행할 경우, 레포지토리 목록(/etc/apt/sources.list 혹은 /etc/apt/sources.list.d/*)을 확인하여 /var/lib/apt/lists 경로에다가 패키지 목록들을 새로 업데이트한다.

apt-get install 등을 수행할 때는 /var/lib/apt/lists 의 경로에 캐싱된 패키지 정보를 확인하여 설치하므로, 어떤 패키지를 설치하기 전에는 웬만해서는 update 를 수행하도록 하자.

맨날 update 를 까먹긴 하지만 일반적으로는 매번 잘 설치가 되고, 만약에 install 에서 패키지를 찾을 수 없다는 오류가 날 때 update 를 한번씩 해주는 것도 충분하다고 생각한다.


apt list 는 아래와 같이 3개 옵션을 주어 사용한다.

apt list --installed
apt list --all-versions
apt list --upgradable

먼저 --installed 옵션은 시스템에 설치된 패키지들을, --all-versions은 사용 가능한 모든 패키지 버전들을, --upgradable은 업그레이드 가능한 패키지 목록들을 출력한다.

설치할 수 있는 패키지들 중 특정 패키지의 이름을 찾기 위해서 search가 제공된다.

apt search PACKAGE
apt-cache search PACKAGE
apt list --all-versions | grep ufw PACKAGE

기존에는 apt-cache search 로 사용하던 것을 apt 로 통합되면서 apt search 로 가능해졌고, 이 검색은 사용 가능한 패키지 버전들에서 검색하는 것이기 때문에 apt list 에서 grep 하는 것과 동일하다.

그러나 apt search 가 색깔도 바꿔주고 깔끔하게 나온다(apt-cache search 는 에러메시지처럼 떠서 잘못 친 줄 알았다).


apt show

apt show PACKAGE처럼 사용해서 패키지에 대한 여러 정보들을 확인할 수 있다.

사실 지금까지 써본 적은 한번도 없는 명령어다. 대부분 패키지 필요하니까 설치하고, 도큐먼트에서 이거 설치하라고 하면 그대로 설치하기 때문에 딱히 패키지 정보를 확인한 적은 없다.

아래처럼 ufw 방화벽과 관련된 패키지 정보를 확인할 수 있다.

bconfiden2@bconfiden2:~$ apt show ufw
Package: ufw
Version: 0.36-6
Priority: standard
Section: admin
Origin: Ubuntu
Maintainer: Jamie Strandboge <jamie@ubuntu.com>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 846 kB
Depends: iptables, lsb-base (>= 3.0-6), ucf, python3:any, debconf (>= 0.5) | debconf-2.0
Suggests: rsyslog
Homepage: https://launchpad.net/ufw
Task: standard
Download-Size: 147 kB
APT-Manual-Installed: no
APT-Sources: http://kr.archive.ubuntu.com/ubuntu focal/main amd64 Packages
Description: program for managing a Netfilter firewall
 The Uncomplicated FireWall is a front-end for iptables, to make managing a
 Netfilter firewall easier. It provides a command line interface with syntax
 similar to OpenBSD's Packet Filter. It is particularly well-suited as a
 host-based firewall.