4 minute read

Linux Package system

  • 리눅스에는 패키지 시스템이 있다.
  • 패키지 시스템은 리눅스의 큰 양대산맥인 redhat 계열과 debian 계열에서 서로 사용하는 시스템이 다르다.
    • redhat : yum ,yum
    • debian : dpkg , 원래는 apt-get을 많이 썼지만, 요새는 apt로 거의 통합이 되었다.

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 [-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 대신에 써도 된다.
  • 예쁘기는 하는데, 사실상 그다지 많이 안쓰입니다.

Categories:

Updated: