Package Management System, PMS

리눅스 소프트웨어 패키지 관리
리눅스에서 애플리케이션, 라이브러리 설치를 제어할 수 있는 몇가지 유형의 패키지 관리 시스템(PMS)를 이용한다.
(각각의 데이터 베이스를 사용해서 관리)

- 리눅스 시스템에 어떤 소프트웨어 패키지가 설치되어 있는가?
- 각 패키지마다 어떤 파일이 설치되어 있는가?
- 설치된 소프트웨어 패키지 각각의 버전은 무엇인가?

소프트웨어 패키지는 저장소(repository) 서버에 저장되고 인터넷으로 내 리눅스 시스템에서 구동되는 PMS 유틸리티를 통해 저장소에
접근할 수 있다.
PMS 유틸리티는 의존성을 감지하고 원한는 패키지를 설치하기 전에 추가로 필요한 소프트웨어 패키지를 설처한다.

PMS는 표준 유틸리티로 통합되어 있지 않다(리눅스 배포판에 따라 다른 유틸리티(인터페이스) 사용)

- dpkg: 데비안 기반 시스템인 우분투, 리눅스 민트 등에서 사용한다
- RPM: 레드햇 기반의 배포판인 페도라, 오픈수세, 맨드리바 등에서 사용한다.
Debian System(dpkg)
dpkg
    apt-get
    apt-cache
    aptitude: apt-get, apt-cache와 dpkg 명령 모두에 대한 프론트엔드 역할을 수행

aptitude를 사용하면 소프트웨어 의존성 누락, 불안정한 시스템 환경 및 불필요한 번거로움과 같이 소프트웨어 설치 문제에서 벗어나도록
도와준다.
- aptitude
aptitude는 대화형 인터페이스를 제공한다.
aptitude # 대화형 인터페이스 호출
aptitude show <package_name> # 대화형 인터페이스 없이 패키지 정보 출력
aptitude search <package_name> # 와일드 카드 자동으로 넣어짐
# search 출력의 첫번 째 알파벳
# i, u: 패키지가 설치되어 있음
# p, v: 패키지가 사용 가능하지만 설치되지 않음
# a, c: 패키지가 제거 되었지만, 구성 파일은 시스템으로부터 제거되지 않음
# a, p: 패키지가 설정파일까지 모두 제거
sudo aptitutde install <package_name>
aptitude safe-upgrade # 안정화시킬 수 있도록 최신버전 업그레이드
aptitude full-upgrade
aptitude dist-upgrade # 다른 패키지들과 의존성 확인하지 않고 업그레이드
sudo aptitude purge <package_name> # 소프트웨어 패키지를 제거
aptitude로 특정 소프트웨어 패키지와 관련된 모든 파일들의 목록을 얻을 수는 없다.
목록 얻기 위해서는 dpkg 사용
dpkg -L <package_name> # package의 일부로 설치되는 모든 파일의 목록
dpkg --serach <absolute_file_name> # 특정 파일이 소속된 패키지(위와 역)
리눅스 배포판을 설치할 때 aptitude의 기본 소프트웨어 저장소 위치가 설정된다.
/etc/apt/sources.list 파일에 저장된다.
└─$ cat /etc/apt/sources.list
# See https://www.kali.org/docs/general-use/kali-linux-sources-list-repositories/
deb http://http.kali.org/kali kali-rolling main contrib non-free

# Additional line for source packages
# deb-src http://http.kali.org/kali kali-rolling main contrib non-free
deb(-src) <address> <distribution_name> <package_type_list>
deb: 컴파일된 프로그램
deb_src: 소스코드

package_type_list
- main
- restricted
- universe
- partner
RedHat System(RPM)
RPM
    yum: 레드햇과 페도라, CentOS 등에서 사용
    urpm: 맨드리바에서 사용
    zypper: 오픈수세에서 사용
yum list installed > InstalledList.txt
rpm -q > InstalledList.txt
ipper search -I >InstalledList.txt
yum
yum list <package_name>
yum list installed <package_name>
# 특정 소프트웨어가 제공한 특정 파일을 어떤 소프트웨어가 제공했는지 검색
yum provides <file_name>
# ex)
yum provides /etc/yum.conf # yum.conf 설정파일을 제공하는 패키지 검색
sudo yum install <package_name>
yum localinstall <package_name.rpm> # *.rpm을 수동설치 후 로컬 설치
yum list updates # 설치된 패키지 중 사용 가능한 업데이트 목록
yum update <package_name> # 특정 패키지 업데이트
yum update # 업데이트 목록의 모든 패키지 업데이트
yum remove <package_name> # 패키지만 제거하고, config 및 데이터 파일 보존
yum erase <package_name> # 패키지를 포함한 config 및 데이터 파일 제거
# 깨진 의존성
yum clean all
yum deplist <package_name> # 모든 패키지 라이브러리의 의존성과 어떤 소프트웨어가 이를 제공하는지 출력
yum update --skip-broken # 의존성이 깨진 패키지 무시하고 업데이트ㅁ
yum repolist # 현재 소프트웨어를 다운받는 레포지토리(저장소) 출력
/etc/yum.repos.d에 yum 저장소를 정의하는 파일이 저장된다.
소스코드에서 설치하기
소스코드를 압축하고 아카이브한 *.tar.gz or *.tgz로 패키지 소스가 제공되는 경우
tar -zxvf <*.tgz>
위와 같이 디렉토리를 압축해서 패키지로 제공되는 경우 README or AAAREADME 파일과 같은 필요한 지침을 주로 제공한다.
일반적으로
./configure # 시스템 을 구성
make # 여러개의 바이너리 파일 생성(컴파일하고 링커로 실행 파일 생성)
make install # 공통위치(PATH)로 이동(사용자 계정으로 로그인 후 수행!)
configure: 시스템에 필요한 라이브러리, 소스코드를 컴파일하기 위한 컴파일러 등 검사
make: 소스코드 컴파일, 링커로 최종 실행 파일 생성
make install: 사용자 계정으로 로그인 후 실행시, 사용자 공통 위치로 실행 파일 및 라이브러리 이동