Linux package
Linux Package system
- 리눅스에는 패키지 시스템이 있다.
- 패키지 시스템은 리눅스의 큰 양대산맥인 redhat 계열과 debian 계열에서 서로 사용하는 시스템이 다르다.
- redhat :
yum
,yum
- debian :
dpkg
, 원래는apt-get
을 많이 썼지만, 요새는apt
로 거의 통합이 되었다.
- redhat :
package
- 시스템을 구성하는 파일의 묶음
- 패키지 관리자에 의해서 읽혀지는 pre-built 파일들, 컴파일이 다 끝난것들
과거에는 소스코드를 다운로드하여 빌드하면서 설치하는 경우도 있었다. - 패키지를 사용하면 관리(설치, 삭제 업그레이드 질의)의 편리함을 제공한다.
Linux package manager
- Debian 계열 주요 명령어
dpkg
: debian package manager, 기본 명령apt
: advanced package tools, 네트워크, 의존성 설치 지원툴
- Red Hat 계열 주요 명령어
rpm
: Red Hat Package Manager, 기본 명령yum
: yellow-dog updater modifier, 네트워크, 의존성 설치 지원 툴dnf
package manager : debian
- 패키지를 관리하는 db가 따로 있다. DB를 접근하는 프론트 엔드는 얼마든지 만들수 있어서 패키지 매니저도 여러 종류가 있다.
- dpkg ,apt,aptiude, …
dpkg file 구조
- 패키지라는건 어떻게 포맷이 만들어지는가.
- 데비안계열은 확장자가
deb
로 끝난다. - arch : x86, 64비트를 amd64라고 부른다.
# release 가 올라가는건, 오타수정, 프로그램 누락 같은거.. 버전은 프로그램 업그레이드 package_name_version&release_arch.deb # ex) strace_4.5.20_2.3_amd64.deb
dpkg 역사
- 초기 데비안부터 유래
- 네트워크 설치를 제대로 지원 못하고 디펜던시 해결 부족으로 APT 등장
### dpkg :query : list
-
strace, gcc 패키지 리스트 확인
$ dpkg -l gcc Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-==============-============-============-================================= ii gcc 4:5.3.1-1ubu amd64 GNU C compiler
dpkg -s <package_pattern ...>
: 패키지 상태 확인- 만약에
install ok unpacked
이면 완전히 설치된것이 아니다. 설치 과정에서 ㅍ실패
$dpkg -s strace Package: strace Status: install ok installed Priority: optional Section: utils Installed-Size: 892 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: amd64 Version: 4.11-1ubuntu3 Depends: libc6 (>= 2.15) Description: System call tracer strace is a system call tracer, i.e. a debugging tool which prints out a trace of all the system calls made by a another process/program. The program to be traced need not be recompiled for this, so you can use it on binaries for which you don't have source. . System calls and signals are events that happen at the user/kernel interface. A close examination of this boundary is very useful for bug isolation, sanity checking and attempting to capture race conditions. Homepage: http://sourceforge.net/projects/strace/ Original-Maintainer: Steve McIntyre <93sam@debian.org>
- 만약에
-
dpkg -S <pattern ...>
: 패키지 검색$ dpkg -S '*ros' linux-modules-extra-4.4.0-197-generic: /lib/modules/4.4.0-197-generic/kernel/drivers/net/ethernet/atheros ros-kinetic-roslib, ros-kinetic-roscpp, ros-kinetic-rosconsole, ros-kinetic-roscpp-serialization, ros-kinetic-roscpp-traits, ros-kinetic-rostime, ros-kinetic-cpp-common: /opt/ros/kinetic/include/ros ros-kinetic-tf, ros-kinetic-tf2-msgs, ros-kinetic-polled-camera, ros-kinetic-nodelet, ros-kinetic-bond, ros-kinetic-nav-msgs, ros-kinetic-dynamic-reconfigure, ros-kinetic-diagnostic-msgs, ros-kinetic-gazebo-msgs, ros-kinetic-trajectory-msgs, ros-kinetic-sensor-msgs, ...
apt (adb. package tool)
- debian의 dpkg를 랩핑한 front-end tool
- depency 탐색 및 설치 제공
- dependency
- 프로그램 A를 설치할 때, b,c,d 프로그램 기능을 가져다 쓴다.
- 예로 게임은 directX를 사용한다.
- binary
apt-get
: install/ remove / upgrade ..apt-cache
: query
- new binary :
apt
apt-get
으로 사용하도록 되어있는 메뉴얼은 옛날것일수도/..
apt :source list
- source list
- apt가 package를 가져오는 곳
- apt가 package file을 다운 받는 곳
- CD-ROM, Disk같은 로컬 주소거나 URL일 수 있다.
etc/apt/sources.list
source.list
를 직접 편집해도 되지만, 추가할 경우는etc/apt/sources.list.d/
에*.list
파일 명으로 추가하는 편이 좋다. ```bash apple@apple-MS-7B84:~$ cat /etc/apt/sources.list # deb cdrom:[Ubuntu 16.04.7 LTS Xenial Xerus - Release amd64 (20200806)]/ xenial 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/ xenial main restricted # deb-src http://kr.archive.ubuntu.com/ubuntu/ xenial main restricted deb http://kr.archive.ubuntu.com/ubuntu/ xenial multiverse # deb-src http://kr.archive.ubuntu.com/ubuntu/ xenial multiverse deb http://kr.archive.ubuntu.com/ubuntu/ xenial-updates multiverse # deb-src http://kr.archive.ubuntu.com/ubuntu/ xenial-updates multiverse …
```
-
sources.list format
deb [option1 = value11 option2 = value2 ] uri suite [component1] [component2] [...] # 패키지 받아오기 deb-src [option1 = value1 option2 = value2 ] uri suite [component1] [component2] [...] # 소스코드 받아오기
- uri : DEB 패키지를 제공하는 사이트의 URI
- suite : distiribution codename 디렉터리 이름 (==dist. version)
- 16.04 : xenial, 18.04 : bionic
- component : suit의 구성 요소 및 라이선스 종류별 분류
- main : 공식적으로 우분투에서 서포트하는 패키지
- restricted : 또고같이 서포트 하지만, 완벽하게 프리 라이선스는 아니다.
- universe : 독립적인 회사, 단체
- multiverse : non-free
- security : 보안 관련 업데이트
- apt update
apt : list
apt list [options] [package pattern]
- options
- 옵션이 지정되지 않으면 해당 버전에서 제공되는 패키지의 최신 목록 출력
-installed
: 설치된 패키지 리스트--upgradable
: 업그레이드가 가능한 패키지 리스트--all-versioins
: 모든 버전의 패키지 리스트
apt :search
apt search [-n] <regex>
- 패키지를 키워드로 검색
-n
: 검색 대상을 name 필드로 한정한다.apt search bash # bash가 들어간 단어를 다 찾아준다. 패키지명 뿐만 아니라, package description에서도 적용 apt search -n bash # 검색 대상을 패키지 명으로 한정 apt search -n '^bash' # 패키지 명의 시작 부분에 bash가 있는 경우만 검색 # apt search -n '$bash' # 패키지 명의 끝 부분에 bash가 있는 경우만 탐색
apt : show
apt show <package name>[=version]
- 패키지 정보 출력
apt show bash apt show bash=4.3-14ubuntu1 apt list --all-versions bash Listing... Done bash/xenial-updates,xenial-security,now 4.3-14ubuntu1.4 amd64 [installed] bash/xenial 4.3-14ubuntu1 amd64
apt : remove, purgee, autoremove
apt <remove | purge | autoremove> <package>[=version]
- remove : 패키지만 삭제 (config 파일은 남겨둔다.)
- 피키지를 설치하고 부수적 파일들 생긴건 냅둔다.
- purge : 패키지 삭제
- autoremove : 의존성이 깨지거나 버전 관리로 인해 쓰이지 않는 패키지를 자동제거
Practice
-
pcp
패키지를 검색 및 설치 해보자apt search -n '^pcp*' # 패키지 이름중에 pcp로 시작하는 나머지 모든것..!, 엄청 많이 나온다. 정확하게 패키지 명만 보고 싶다..! apt-cache pkgnames pcp # pcp로 시작되는 패키지 명이 보일 것이다. apt install pcp -y
aptitude : TUI 방식의 apt
aptitude
를 그냥 싫앵하면 된다.apt
대신에 써도 된다.- 예쁘기는 하는데, 사실상 그다지 많이 안쓰입니다.