apt 패키지 저장소, apt, dpkg

markyang92·2021년 4월 23일
0

linux (ubuntu/debian)

목록 보기
1/36
post-thumbnail
post-custom-banner

명령 바로가기

apt

apt                         description                                   
$ apt update$ sudo apt update는 실제로 패키지를 업데이트하닌게 아닌,
  • /etc/apt/sourcelist
  • /etc/apt/sourcelist.d/*
  • 패키지 리스트최신 업데이트하는 것
    $ apt update --fix-missing-

    apt upgrade 관련         description
    $ apt upgrade [pkg]
  • 패키지를 업그레이드한다.
    하지만, dependency check를 하지 않음
  • [pkg]를 명시하지 않으면, 설치된 패키지 전부를 업그레이드한다.
  • 패키지를 제거하지 않고, 제거가 필요한 경우 old 패키지 업그레이드를 건너뛴다.

  • distro release의 라이프사이클 기간 동안 사용한다
  • Ubuntu 20.4 LTS를 사용하는 경우 이 명령을 사용하여
    2025년까지 패키지를 업그레이드할 수 있다.
  • $ apt full-upgrade
    1. 최신 버전의 패키지 업그레이드의 성능향상을 위해 old 패키지를 제거할 수 있다.
    2. 의존성 체크!! 하여 위의 apt upgrade에서 수행치 못한 dependency까지 설치
    3. distro release 의 라이프사이클이 끝난 경우 사용된다.
    4. 2025년에, next LTS release로 계속 업데이트를 원하는 경우
    $ apt install <pkg>
  • 특정 패키지'만' 설치 한다.
  • $ apt --fix-broken install-
    $ apt install -f <pkg>-
    $ apt install --reinstall-
    $ apt install --upgrade-

    apt list 관련Description
    $ apt list레파지토리에 등록된 패키지 이름만을 조회
    설치 안된 것도 포함
    $ apt list --installed설치된 패키지 리스트
    $ apt list --upgradable설치된 패키지업그레이드 대상 패키지 목록 조회
    $ apt list --all-versions패키지의 모든 버전 목록 조회
    $ apt search패키지 이름, 텍스트 다 찾음
    설치 되지 않은 것도 검색하는 것임

    패키지 정보관련                                                                              Description
    $ apt show <패키지>패키지에 관한 간단한 정보를 출력
    버전, 패키지 크기, 카테고리, 체크섬 등 패키지에 관한 정보 확인
    $ apt-cache showpkg <패키지>좀더 자세한 패키지 정보
    $ apt download <패키지>해당 패키지 다운
    $ apt download <pkg>

    3rd Party Package List 등록                         Description
    $ add-apt-repository -y ppa:linuxuprising/shutter
    $ sudo apt update
    $ sudo apt install shutter
    ppa:linuxuprising/shutter 저장소 추가
    $ add-apt-repository -y ppa:linuxuprising/shutter저장소 제거 명령

    dpkg

    dpkgdescription
    $ dpkg -i <pkg.deb>pkg.deb 패키지 설치 설치
    -iinstall의 약자라고 기억하자.
    $ dpkg -l설치된 패키지 목록 출력
    $ dpkg -l <패키지>해당 패키지 설치 상태
    $ dpkg -s <패키지>해당 패키지 '상세'정보
    $ dpkg -S <검색할 Path>경로명이 포함된 패키지 검색
    $ dpkg -r <패키지>해당 패키지삭제
    $ dpkg -P <패키지>해당 패키지와 설정 정보 모두 삭제
    $ dpkg <-r | -P> --force-depends <package_name>패키지 디펜던시를 무시하고 삭제
    $ dpkg -x <.deb> <dst dir>해당 .deb 파일을 지정한 디렉토리에 풂

    rpm파일을 받아서 풀어서 내용 살펴보기

    $ dpkg -x <src.deb> <dst dir>
    • lsb-release 받아서 풀어보기
    $ apt download lsb-release
    lsb-release_11.1.0ubuntu2_all.deb
    
    $ dpkg -x ./lsb-release_11.1.0ubuntu2_all.deb ./lsb-release
    lsb-release 디렉토리 확인
    
    ➜  lsb-release tree .
    .
    └── usr
        ├── bin
        │   └── lsb_release
        ├── lib
        │   ├── python2.7
        │   │   └── dist-packages
        │   │       └── lsb_release.py -> ../../../share/pyshared/lsb_release.py
        │   └── python3
        │       └── dist-packages
        │           └── lsb_release.py -> ../../../share/pyshared/lsb_release.py
        └── share
            ├── bug
            │   └── lsb-release
            ├── doc
            │   └── lsb-release
            │       ├── README.Debian
            │       ├── changelog.gz
            │       └── copyright
            ├── man
            │   └── man1
            │       └── lsb_release.1.gz
            └── pyshared
                └── lsb_release.py

    리눅스에서 주로 사용하는 패키지

    • deb: 데비안, 우분투 계열 패키지
    • rpm: Redhat Package Manager 레드햇 계열 리눅스에서 사용

    deb 패키지

    • 데비안 패키지 (.deb)는 소프트웨어 파일만 저장되어 있는 것이 아니라 패키지에 대한 많은 정보가 포함되어 있다.
    • 파일 명 rule: 파일명_버전-리비전_아키텍처.deb
      • 파일 명: 패키지의 성격을 나타내는 파일명
      • 버전: 패키지 버전
      • 리비전: 원래 소스의 버전이 업그레이드되지는 않았지만 패키지의 보안 문제나 의존성 변화, 스크립트의 변화 등이 있음을 의미
      • 아키텍처: i386(인텔), all(시스템과 상관 x)
      • 확장자: .deb

    apt 패키지 저장소

    Ubuntu, Debian는 패키지와 패키지에 대한 정보를 저장하고 있는 서버인 apt 패키지 저장소 개념을 가지고 있다.

    • apt 패키지 저장소 정보는 /etc/apt/sources.list 파일에 패키지 변경사항 및 추적
    • GUI Utility로

    apt 패키지 저장소 파일

    • apt 패키지 저장소 서버에서 관리
    • /etc/apt/source.list 에 적힌대로 관리한다.
    deb http://kr.archive.ubuntu.com/ubuntu/ bionic main restricted
    deb-src http://kr.archive.ubuntu.com/ubuntu/ bionic main restricted
    • deb: 미리 컴파일된 바이너리 포함 패키지 관리 저장소라는 의미
    • deb-src: 컴파일 하지 않은 소스코드를 포함한 패키지 저장소
    • http://kr.archive.ubuntu.com/ubuntu: 저장소 URL. 이용할 수 있는 URL의 목록은 official mirror list를 참고하자.
    • bionic: 우분투 배포판 버전 이름(bionic: 18.04, focal: 20.04)
    • main, restricted: 패키지를 저장하는 원격 저장소 구분

    원격 저장소 구분

    • miain: 우분투에서 공식 지원하는 무료 sw
    • universe: 우분투에서 지원X 무료 sw
    • restricted: 우분투에서 공식지원하는 유료sw
    • multiverse: 우분투에서 지원X 유료 sw

    mirror 저장소 사용

    • /etc/apt/source.list에 보통은 공식 아카이브를 사용 할 것임
      • http://archive.ubuntu.com/ubuntu/ -> http://mirror.kakao.com/ubuntu/ 로 변경하자
      • vim 명령 시, / 문자 조심하고.. 그냥 아래와 같이 바꾸는 명령으로 바꾸자.
      :$s/archive.ubuntu.com/mirror.kakao.com/g

    /etc/apt/sources.list.d

    • /etc/apt/sources.list.d 디렉터리에 가면 추가적으로 따로 패키지 저장소를 더할 수 있다.


    위 사진은 proposed 라는 App의 패키지 저장소가 저장되어 있는 것임(proposed.list라는 파일로)

    • 위와 같이 따로 <app_name>.list 형식으로 추가한다.
      • 파일 내용은 아래와 같이 추가하는 패키지 저장소이다.
    deb http://ports.ubuntu.com/ubuntu-ports/ focal-proposed main restricted

    jenkins > sources.list.d

    jenkins install 예:

    • 보통은 저장소 접근권한 key를 얻어야함
    1. https://pkg.jenkins.io/debian-stable 저장소에 접근가능한 key 얻기
    $ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
    OK
    1. https://pkg.jenkins.io/debian-stable 저장소를 sources.list.d 에 넣기
    $ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    
    # /etc/apt/sources.list.d/jenkins.list 
    # deb http://pkg.jenkins.io/debian-stable binary/

    • 참고
      • gnupg키 저장은 local의 ~/.gnupg/에 저장된다.

    1. install
    $ sudo apt update
    $ sudo apt install jenkins

    mariaDB server > sources.list

    1. prerequisite
    $ sudo apt-get install software-properties-common dirmngr apt-transport-https
    1. key 얻기
    sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
    

    • 참고
      • gnupg키 저장은 local의 ~/.gnupg/에 저장된다.

    1. repository를 sources.list에 넣기
    sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirror.yongbok.net/mariadb/repo/10.5/ubuntu focal main'
    1. install
    $ sudo apt update
    $ sudo apt install mariadb-server

    repository 추가 명령

    • shutter 저장소 추가
    $ sudo add-apt-repository -y ppa:linuxuprising/shutter
    $ sudo apt update
    $ sudo apt install shutter

    repository 제거 명령

    • shutter 저장소 제거 명령
    $ sudo add-apt-repository --remove ppa:linuxuprising/shutter

    apt trouble shooting

    Skipping architecture 문제


    1. /etc/apt/source.list

    1. 해당 사이트: https://packages.microsoft.com/ubuntu/20.04/prod/ + dists/focal

      보면 i386이 없다.
      컴퓨터의 아키텍처가 기본적으로 i386에서 찾나보다.
      [arch=amd64] 로 지정하자

    1. /etc/apt/source.list

    1. 수정 완료

    apt 명령어

    $ apt update

    • $ sudo apt update는 실제로 패키지를 업데이트하닌게 아닌,
      /etc/apt/sourcelist, /etc/apt/sourcelist.d/*패키지 리스트최신 업데이트하는 것
    $ sudo apt update

    $ apt update의 process

    1. 설정된 sources에서, 패키지 정보를 다운로드한다.
    2. /etc/apt/source.list, /etc/apt/source.list.d

    $ apt update --fix-missing


    $ apt upgrade

    • 진짜로 패키지를 업그레이드한다.
    • 설치된 패키지 전부를 업그레이드한다.
      • 하지만, dependency check를 하지 않음!!!!
    $ sudo apt upgrade

    $ apt full-upgrade

    • 필요한 이전에 설치된 패키지를 제거해 업그레이드 하게하는 것만 빼고는 똑같다.
    apt upgradeapt full-upgrade
    패키지를 제거하지 않고 제거가 필요한 경우 old 패키지 업그레이드를 건너뛴다.최신 버전의 패키지 업그레이드의 성능향상을 위해 old 패키지를 제거할 수 있다.
    safer optioncaution needed
    distro release의 라이프사이클 기간 동안 사용한다.
    • Ubuntu 20.4 LTS를 사용하는 경우 이 명령을 사용하여 2025년까지 패키지를 업그레이드할 수 있습니다.
    distro release의 라이프사이클이 끝난 경우 사용된다.
    • 2025년에, next LTS release로 계속 업데이트를 원하는 경우
    • sudo apt upgrade는 아래의 출력이 보인다.

    • 위의 경우, software_X가 1.2.2 버전이 내 컴퓨터에 설치되어 있는데, 새로운 버전 1.3.1이 설치할 수 있다. 이경우 sudo apt upgrade할 경우, software_X는 1.3.1 version으로 업데이트된다.

    • 반대로, apt full-upgrade 명령은, apt package manager에게 필요한 경우 패키지를 삭제하라는 의미를 내포한다.


    $ apt upgrade <Package>

    • 지정한 특정 패키지업그레이드한다.

    $ apt dist-upgrade

    • 기존 $ apt upgradedependency check X!! 디펜던시 체크 하지 않음!
    • $ sudo apt dist-upgrade는 1)의존성 체크 및 2)기존 upgrade에서 수행치 못한 dependency 까지 설치
    $ sudo apt dist-upgrade

    $ apt install

    $ apt install --reinstall

    $ apt install --upgrade


    $ apt list

    $ sudo apt list
    • 레파지토리에 등록된 패키지 이름만을 조회
    • 당연히 설치 안된 것도 있겠지?


    $ apt list --installed

    $ sudo apt ist --installed
    • 설치된 패키지 리스트

    $ apt --upgradable list

    $ sudo apt --upgradable list
    • 설치된 패키지업그레이드 대상 패키지 목록 조회

    $ apt --all-versions list

    $ sudo apt --all-versions list
    • 패키지의 모든 버전 목록 조회

    $ sudo apt search [PACKAGE]
    • 패키지 이름, 텍스트 다 찾음
    • 설치 되지 않은 것도 검색하는 것임!

    $ apt show <패키지>

    • 패키지에 관한 간단한 정보를 출력
      • 버전, 패키지 크기, 카테고리, 체크섬 등 패키지에 관한 정보 확인


    $ apt-cache showpkg <패키지>

    • 좀더 자세한 패키지 정보

    $ apt download <패키지>: 해당 패키지 다운


    deb

    $ dpkg -i <.deb>: deb 설치

    • $ dpkg -i PACKAGE.deb
      • PACKAGE.deb 파일을 설치한다.
      • -iinstall의 약자라고 기억하자.

    $ dpkg -l: 설치된 패키지 목록 출력

    $ dpkg -l


    $ dpkg -l <패키지>: 해당 패키지 설치 상태

    $ dpkg -l apt


    $ dpkg -s <패키지>: 해당 패키지 '상세'정보

    $ dpkg -s apt


    $ dpkg -S <검색할 Path>: 경로명이 포함된 패키지 검색


    $ dpkg -r <패키지>: 해당 패키지삭제


    sudo dpkg --remove --force-remove-reinstreq package_name 패키지 강제 삭제


    $ dpkg -P <패키지>: 해당 패키지와 설정 정보 모두 삭제


    $ dpkg -x <.deb> <dst dir>: 해당 .deb 파일을 지정한 디렉토리에 풂

    profile
    pllpokko@alumni.kaist.ac.kr
    post-custom-banner

    0개의 댓글