😡 Born2beroot 스크립트에 처음 보는 개념들이 너무 많이 등장한다. 정리하고 들어가자!
🤔 과제에 등장하는 aptitude와 apt는 무엇일까? 그 전에 패키지 관리자에 대해 알아야 한다.
패키지 관리자(package manager, 이하 패키지 매니저)는 패키지를 관리하는 작업을 편리하고 안전하게 수행하기 위해서 사용되는 툴이다. 여기서 패키지를 관리하는 작업이란, 패키지 설치, 업데이트, 수정, 삭제하는 작업을 의미한다.
homebrew
apt
❓소프트웨어 저장소(Software repository)
소프트웨어 저장소는 소프트웨어 패키지가 컴퓨터에서 조회되고 설치될 수 있는 저장 위치이다.
그렇다면, 패키지 매니저가 관리하는 패키지(Package)는 무엇일까?
패키지는 코드의 배포를 위해서 사용되는 코드의 묶음이다. 라이브러리(library)와 유사한 개념으로, 라이브러리는 코드 작성을 위해 필요한 코드 모임이라면, 패키지는 코드의 배포를 위해 사용되는 코드 모음이다. 패키지는 일반적으로 다음과 같은 정보를 포함하는 코드의 배포 단위이다.
❓바이너리(binary)
바이너리는 소프트웨어와 하드웨어를 연결하는 인터페이스이다. 소스 코드로 작성된 프로그램은 바이너리라는 형태로 CPU에 전달된다.❓의존성(dependency)
어떤 패키지를 동작하기 위해 필수적으로 필요한 다른 패키지를 "dependency"라고 한다. 패키지의 패키지의 패키지... 꼬리를 물고 수많은 의존성이 존재(의존성 지옥, dependency hell)하기 때문에 사용자가 수동으로 관리하기는 불가능하다.따라서 각각의 패키지가 자신의 의존성에 대한 정보를 가지게 해 패키지 매니저가 자동으로 설치하도록 도와준다.
우분투(Ubuntu)의 패키지 관리 툴로 aptitude
, apt
, dpkg
로 세 가지가 있다. 이제 본격적으로 과제에 등장하는 APT와 Aptitude에 대해서 알아보자.
APT(Advanced Packaging Tool)는 소프트웨어의 설치와 제거를 처리하는 패키지 관리 툴이다. 처음에는 Debian의 .deb 패키지용으로 설계되었지만 현재는 RPM 패키지 관리자와도 호환된다. apt, apt-get, apt-mark, apt-cache 등이 있다.
apt는 현재 권장하고 있는 명령어로, 더 사용하기 쉽게 발전시킨 명령어이다. 내부 동작에는 차이가 거의 없지만, apt는 apt-get에서 자주 사용하는 옵션들을 뽑아서 만들어 더 짧고 쓰기 편하다. 스크립트를 쓸 때는 옵션이 많은 apt-get
을, 평소에는 apt
를 사용해도 충분하다.
APT는 GUI가 없는 커맨드 라인(command line)으로 사용한다.
설치할 패키지 명을 입력하면, '/etc/apt/sources.list'에 지정된 소스 목록에서 해당 패키지에 대한 의존성(dependency) 목록을 함께 찾아 자동으로 설치한다. 따라서 사용자는 의존성 문제를 걱정하지 않아도 된다.
또한 굉장히 유연해서 사용자가 직접 새로운 소스 목록을 추가하거나, 시스템 업그레이드 중 사용할 수 없는 패키지를 표시해 해당 패키지를 업데이트 하지 않게 하여 현재 버전을 계속 사용하는 등의 작업을 할 수 있게 해준다.
$ sudo apt install package_name # 패키지 설치
$ sudo apt install package_name -y # 패키지 설치, 모든 질문에 yes라고 답함
$ sudo apt remove package_name # 패키지 삭제
$ sudo apt autoremove # 사용하지 않는 패키지 제거
$ sudo apt list --installed # 설치한 패키지 목록
Aptitude는 사용자 인터페이스를 추가하여 사용자가 대화식으로 패키지검색, 설치, 제거할 수 있도록 하는 고급 패키징 도구의 프론트 엔드이다. 처음에 Debain용으로 제작된 Aptitude는 RPM 기반 배포판으로도 기능을 확장했다.
인터페이스는 다양한 요소를 추가할 수 있는 ncurses 라이브러리에 기반을 둔다. apt-get의 커맨드 라인(command line)을 애물레이트할 수 있다.
higher-level 패키지 매니저로, apt나 dpkg를 사용할 경우 사용자가 직접 해주어야 하는 번거로운 작업(사용하지 않는 패키지 처리, 패키지 설치 혹은 삭제 중 충돌)을 자동화해준다. 따라서 apt나 dpkg 보다 쉽게 사용할 수 있다.
텍스트 기반 interactive 인터페이스(UI, user interface)와 non-interactive 커맨드 라인(command line)모드에서도 작동한다.
$ sudo apt install aptitude # aptitude 설치
$ sudo aptitude # gui 모드로 실행
$ sudo aptitude install package_name # 패키지 설치
$ sudo aptitude remove package_name # 패키지 삭제
Aptitude가 APT 보다 기능면에서 광범위하며, apt-get과 apt-mark 및 apt-cache 등의 기능을 포함한다. apt-get는 모든 패키지 설치, 업그레이드, 시스템 업그레이드, 패키지 제거, 의존성 해결 등을 처리한다.
Aptitude는 앞서 말한 apt-get의 일을 비롯해서 설치된 패키지 목록, 패키지를 자동 혹은 수동으로 설치하도록 표시하기, 패키지를 업그레이드할 수 없도록 유지하는 등의 훨씬 더 많은 작업을 수행한다.
Aptitude | APT |
---|---|
higher-level 패키지 관리자 | higher-level 패키지 매니저가 사용할 수 있는 low-level 패키지 관리자 |
패키지 설치 혹은 삭제 중 충돌될 경우 해결방법 제안함 | 패키지 설치 혹은 삭제 중 충돌될 경우 종료됨 |
사용하지 않는 패키지를 자동으로 제거 | 사용하지 않는 패키지에 대해 사용자가 명시해주어야 함 |
커맨드 라인(command line)과 텍스트 기반 UI | 커맨드 라인(command line), UI 없음 |
aptitude | apt apt-get apt-cache 등 |