Run The Bridge

package의 의존성 파일 출력 및 설치 본문

Cloud/Linux

package의 의존성 파일 출력 및 설치

anfrhrl5555 2022. 2. 22. 09:12
728x90

0. 들어가기에 앞서

linux나 ubuntu 같은 OS에서 패키지를 설치할 때 yum, apt-get을 많이 사용한다.

 

또는 rpm파일을 직접 받아와서 rpm -Uvh 명령으로 설치하는데 rpm 명령을 사용하면 의존성 오류가 발생할 수 있다.

 

이러한 문제점을 해결하고, rpm 패키지를 묶어서 배포까지 한 번 해본다.


1. Package 검색

우선은 내가 설치하려는 package의 이름으로 의존성 파일을 검색한다.

 

나는 얼마전에 포스팅한 podman 관련하여 의존성 파일을 찾아본다.

 

다음의 명령을 입력하면 해당 패키지의 의존성 파일을 알 수 있다.

rpm -qR podman  # rpm -qR [패키지명]

/bin/sh
catatonit
config(podman) = 0:3.0.1-2.el7.3.1
conmon >= 2:2.0.16-1
container-selinux
containernetworking-plugins >= 0.9.1-1
containers-common >= 4:1-4
iptables
libassuan.so.0()(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.8)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgpg-error.so.0()(64bit)
libgpgme.so.11()(64bit)
libgpgme.so.11(GPGME_1.0)(64bit)
libgpgme.so.11(GPGME_1.1)(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.12)(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
librt.so.1()(64bit)
librt.so.1(GLIBC_2.2.5)(64bit)
libseccomp.so.2()(64bit)
nftables
podman-plugins = 0:3.0.1-2.el7.3.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
runc >= 2:1.0.0-148.rc93
slirp4netns >= 0.3.0-2
rpmlib(PayloadIsXz) <= 5.2-1

rpm 명령 관련해서는 google에 검색하면 정리가 잘 된 블로그들이 많으므로 한 번씩 명령어를 봐주면 좋다.

 

주요 명령어들은 다음과 같다.

명령어 풀 명령어 용도
-q -query 패키지 정보 질의
-i --install 패키지 설치
-U --upgrade 패키지 업그레이드
-e --erase 패키지 삭제
-V --verify 패키지 검증
-K --checksig 서명 검증

위의 명령어로 우리는 podman에 관련된 의존성 파일은 28개인 것을 알 수 있다.


1. 패키지 의존성 더 자세히 파악하기

우선 자기의 VM이 어떤 OS으로 설치되었는지 확인해야 한다. 다음의 명령어를 입력해서 확인한다.

 

나는 현재 'Centos7.9'를 사용한다. 즉 패키지 관련해서는 'Centos7.x'를 보면 된다.

cat /etc/*release

CentOS Linux release 7.9.2009 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.9.2009 (Core)
CentOS Linux release 7.9.2009 (Core)

위에서는 rpm 명령어로 패키지 의존성을 체크해보았지만 'pkgs.org'라는 사이트를 이용하면 손쉽게 의존성 파일을 알 수 있다.

https://pkgs.org/

search부분에 podman을 입력하고 클릭한다.

현재 내가 사용하는 Podman은 1.6.4 버전이지만, 이 버전은 github에 등록된 이슈도 있고 아직 docker 명령어를 완벽히 지원하지 않는다. 그래서 Centos7.x를 사용하지만 Centos8 버전의 podman 3.0.1을 사용한다.

podman 3.0.1(Manage Pods, Containers and Container Images)


Q.. 내 리눅스가 x84_64인지 arch64인지 어떻게 알아요?...

A. cat /proc/cpuinfo 명령으로 확인하시면 됩니다. Intel이 나온다면 x86_64입니다.


해당 podman 버전을 클릭하면 Requires로 이동한다. 그러면 podman 설치에 필요한 의존성 파일들을 볼 수 있다.

requires


2. 패키지 파일 및 의존성 파일 설치

'common' 의존성 파일을 받아본다. value부분에는 최소 이 버전 이상은 되어야 설치가 되는 걸 명시해준다.

 

common 의존성 파일을 클릭하면 자동으로 검색해준다.

 

우리는 여기서 2.0.29 버전을 설치한다. 클릭!

조금 내리다 보면 Download 방법이 있는데 자신의 VM 서버에서 wget으로 접근이 되면 wget 명령으로 설치하면 된다.

또 다른 방법으로는 Binary Package을 URL에 붙여 넣기 하면 자동으로 다운로드가 된다.

근데 만약 입력을 했는데 404 상태 코드가 나오면서 page not found가 나올 수 있다.

 

이럴 때는 이름을 알기 때문에 google에 똑같이 입력하면 설치를 할 수 있는 사이트를 안내해준다.

404 상태코드
해결법


3. 패키지 설치

Requires를 전부 다 받았다면 linux server로 옮겨주고 rpm 명령으로 설치를 해준다.

audit-libs-python-2.8.5-4.el7.x86_64.rpm                      dnsmasq-2.76-17.el7_9.3.x86_64.rpm         libsemanage-python-2.5-14.el7.x86_64.rpm      protobuf-c-1.0.2-3.el7.x86_64.rpm
catatonit-0.1.5-6.el7.3.1.x86_64.rpm                          fuse-overlayfs-1.5.0-1.el7.1.1.x86_64.rpm  libslirp-4.3.1-4.el7.x86_64.rpm               python-IPy-0.75-6.el7.noarch.rpm
checkpolicy-2.5-8.el7.x86_64.rpm                              fuse3-3.6.1-4.el7.x86_64.rpm               nettle-2.7.1-9.el7_9.x86_64.rpm               runc-1.0.1-0.el7.1.3.x86_64.rpm
conmon-2.0.29-1.el7.1.2.x86_64.rpm                            fuse3-libs-3.6.1-4.el7.x86_64.rpm          nftables-0.8-14.el7.x86_64.rpm                setools-libs-3.3.8-4.el7.x86_64.rpm
container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm          libcgroup-0.41-21.el7.x86_64.rpm           podman-3.0.1-2.el7.3.1.x86_64.rpm             slirp4netns-1.1.8-4.el7.7.1.x86_64.rpm
containernetworking-plugins-1.0.0-0.2.rc1.el7.1.2.x86_64.rpm  libnet-1.1.6-7.el7.x86_64.rpm              podman-plugins-3.0.1-2.el7.3.1.x86_64.rpm
containers-common-1-18.el7.22.1.noarch.rpm                    libnftnl-1.0.8-3.el7.x86_64.rpm            podman.tar
criu-3.12-2.el7.x86_64.rpm                                    libseccomp-2.3.1-4.el7.x86_64.rpm          policycoreutils-python-2.5-34.el7.x86_64.rpm

설치를 할 때 의존성 파일을 다 받았는데도, 의존성 파일에 의존성 파일이 존재할 수 있다.. 끝없는 뫼비우스의 띠...

rpm -Uvh *.rpm
경고: catatonit-0.1.5-6.el7.3.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 75060aa4: NOKEY
오류: Failed dependencies:
        containers-common = 1:0.1.40-11.el7_8 is needed by (installed) skopeo-1:0.1.40-11.el7_8.x86_64
        runc conflicts with (installed) containerd.io-1.4.3-3.1.el7.x86_64
        runc is obsoleted by (installed) containerd.io-1.4.3-3.1.el7.x86_64

그래서 다음 명령을 입력해줌으로써 해결해준다. 어차피 우리는 podman에 필요한 require는 다 모았으니 상관없다.

# --force: 강제설치
# --nodeps: 의존성 무시

rpm -Uvh *.rpm --force --nodeps
rpm -Uvh *.rpm --force --nodeps
경고: catatonit-0.1.5-6.el7.3.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 75060aa4: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:libseccomp-2.3.1-4.el7           ################################# [  3%]
   2:fuse3-libs-3.6.1-4.el7           ################################# [  5%]
   3:fuse3-3.6.1-4.el7                ################################# [  8%]
   4:fuse-overlayfs-1.5.0-1.el7.1.1   ################################# [ 10%]
   5:setools-libs-3.3.8-4.el7         ################################# [ 13%]
   6:python-IPy-0.75-6.el7            ################################# [ 15%]
   7:protobuf-c-1.0.2-3.el7           ################################# [ 18%]
   8:nettle-2.7.1-9.el7_9             ################################# [ 21%]
   9:dnsmasq-2.76-17.el7_9.3          ################################# [ 23%]
  10:libslirp-4.3.1-4.el7             ################################# [ 26%]
  11:slirp4netns-1.1.8-4.el7.7.1      ################################# [ 28%]
  12:libsemanage-python-2.5-14.el7    ################################# [ 31%]
  13:libnftnl-1.0.8-3.el7             ################################# [ 33%]
  14:nftables-1:0.8-14.el7            ################################# [ 36%]
  15:libnet-1.1.6-7.el7               ################################# [ 38%]
  16:criu-3.12-2.el7                  ################################# [ 41%]
  17:libcgroup-0.41-21.el7            ################################# [ 44%]
  18:containernetworking-plugins-1.0.0################################# [ 46%]
  19:conmon-2:2.0.29-1.el7.1.2        ################################# [ 49%]
  20:checkpolicy-2.5-8.el7            ################################# [ 51%]
  21:catatonit-0.1.5-6.el7.3.1        ################################# [ 54%]
  22:audit-libs-python-2.8.5-4.el7    ################################# [ 56%]
  23:policycoreutils-python-2.5-34.el7################################# [ 59%]
  24:container-selinux-2:2.119.2-1.911################################# [ 62%]
  25:runc-2:1.0.1-0.el7.1.3           ################################# [ 64%]
  26:containers-common-4:1-18.el7.22.1경고: /etc/containers/registries.conf(이)가 /etc/containers/registries.conf.                                                                                                                      rpmnew(으)로 생성되었습니다
################################# [ 67%]
  27:podman-plugins-0:3.0.1-2.el7.3.1 ################################# [ 69%]
  28:podman-0:3.0.1-2.el7.3.1         경고: /etc/cni/net.d/87-podman-bridge.conflist(이)가 /etc/cni/net.d/87-podma                                                                                                                      n-bridge.conflist.rpmnew(으)로 생성되었습니다
################################# [ 72%]
Cleaning up / removing...
  29:catatonit-0.1.5-1.el7            ################################# [ 74%]
  30:podman-1.6.4-22.el7_9            ################################# [ 77%]
  31:containers-common-1:0.1.40-11.el7################################# [ 79%]
  32:slirp4netns-1.1.8-1.el7          ################################# [ 82%]
  33:podman-plugins-0:2.2.1-1.el7     ################################# [ 85%]
  34:dnsmasq-2.76-16.el7              ################################# [ 87%]
  35:libslirp-4.3.1-2.el7             ################################# [ 90%]
  36:fuse-overlayfs-0.7.2-6.el7_8     ################################# [ 92%]
  37:conmon-2:2.0.8-1.el7             ################################# [ 95%]
  38:containernetworking-plugins-0.8.3################################# [ 97%]
  39:nettle-2.7.1-8.el7               ################################# [100%]

설치가 다되고 'podman --version'을 입력한다.

podman --version
podman version 3.0.1

정상적으로 업그레이드가 잘 되었다.


4. other

찾다 보니 패키지를 전부 모아둔 사이트를 찾았다.

 

https://mirrorcache.opensuse.org/download/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/x86_64/

 

/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/x86_64 - openSUSE Download

 

mirrorcache.opensuse.org

 

https://download.opensuse.org/

 

openSUSE Download

The openSUSE Download repositories providing all of the software in the openSUSE distributions and openSUSE Build Service repositories

download.opensuse.org

근데 사이트 이름이 openSUSE이다 ㅋㅋ... CentOS_7도 있으니 문제 될 건 없어 보인다.


감사합니다.

728x90
Comments