ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • rpm 패키지 생성하기
    Linux 2025. 4. 3. 10:22

    - OS : rhel 8.2 에서 진행

     

     

    1. 환경 설정

    $ yum     install       rpm-build   
    $ yum     install       rpmdevtools

    $ which      rpmbuild
    $ which      rpmdev-setuptree


    $ rpmdev-setuptree    // rpm 패키지 생성 환경 구축하기위함

     


    $ ls    -lh

    drwxr-xr-x. 7 root root   72  4월  2 17:29  rpmbuild

     

    2. rpm build 환경 구축

    $ tree    rpmbuild/

    rpmbuild/
    ├── BUILD
    ├── RPMS
    ├── SOURCES
    ├── SPECS
    └── SRPMS

     

     

    3. rpm build 테스트 스크립트 생성

    $ cat     myscript.sh

    #!/bin/bash

    echo "hello world"

     

    4. rpm build 를 위한 spec 파일 생성

    - spec 파일의 내용을 통해, rpm에 추가할 파일, 설치/삭제 시 동작을 참고하여 rpm 파일을 생성하게 됨.
    - 필수적으로 (Name, Version, Release, Source0, License) 값은 입력되어야 함.

     

    $ cat     myscript.spec

    Name:           myscript
    Version:        1.0
    Release:        1
    Summary:        rpm package
    License:        GPL
    Source0:        myscript.sh

    %description

    %prep

    %build

    %install
    mkdir -p /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64/usr/bin
    install -m 755 /root/rpmbuild/SOURCES/myscript.sh /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64/usr/bin/myscript

    %files
    /usr/bin/myscript

    %changelog
    * Thu Apr 3 2025 root



    $ mv      myscript.spec        rpmbuild/SPECS/
    $ mv      myscript.sh           rpmbuild/SOURCES/


    $ tree     rpmbuild/

    rpmbuild/
    ├── BUILD
    ├── RPMS
    ├── SOURCES
    │   └── myscript.sh
    ├── SPECS
    │   └── myscript.spec
    └── SRPMS

    5 directories, 2 files

     

    5. rpmbuild 로 rpm 패키지 생성하기


    $ rpmbuild      -ba        rpmbuild/SPECS/myscript.spec

    실행 중(%prep): /bin/sh -e /var/tmp/rpm-tmp.bxtscv
    + umask 022
    + cd /root/rpmbuild/BUILD
    + exit 0
    실행 중(%build): /bin/sh -e /var/tmp/rpm-tmp.HMRn2K
    + umask 022
    + cd /root/rpmbuild/BUILD
    + exit 0
    실행 중(%install): /bin/sh -e /var/tmp/rpm-tmp.2kabU0
    + umask 022
    + cd /root/rpmbuild/BUILD
    + '[' /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64 '!=' / ']'
    + rm -rf /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
    ++ dirname /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
    + mkdir -p /root/rpmbuild/BUILDROOT
    + mkdir /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
    + mkdir -p /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64/usr/bin
    + install -m 755 /root/rpmbuild/SOURCES/myscript.sh /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64/usr/bin/myscript
    + '[' '%{buildarch}' = noarch ']'
    + QA_CHECK_RPATHS=1
    + case "${QA_CHECK_RPATHS:-}" in
    + /usr/lib/rpm/check-rpaths
    + /usr/lib/rpm/check-buildroot
    + /usr/lib/rpm/redhat/brp-ldconfig
    /sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory
    + /usr/lib/rpm/brp-compress
    + /usr/lib/rpm/brp-strip /usr/bin/strip
    + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
    + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
    + /usr/lib/rpm/brp-python-bytecompile '' 1
    + /usr/lib/rpm/brp-python-hardlink
    + PYTHON3=/usr/libexec/platform-python
    + /usr/lib/rpm/redhat/brp-mangle-shebangs
    Processing files: myscript-1.0-1.x86_64
    Provides: myscript = 1.0-1 myscript(x86-64) = 1.0-1
    Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    Requires: /bin/bash
    Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
    작성: /root/rpmbuild/SRPMS/myscript-1.0-1.src.rpm
    작성: /root/rpmbuild/RPMS/x86_64/myscript-1.0-1.x86_64.rpm
    실행 중(%clean): /bin/sh -e /var/tmp/rpm-tmp.dA0soh
    + umask 022
    + cd /root/rpmbuild/BUILD
    + /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/myscript-1.0-1.x86_64
    + exit 0

     

     

    $ tree     rpmbuild/

    rpmbuild/
    ├── BUILD
    ├── BUILDROOT
    ├── RPMS
    │   └── x86_64
    │       └── myscript-1.0-1.x86_64.rpm
    ├── SOURCES
    │   └── myscript.sh
    ├── SPECS
    │   └── myscript.spec
    └── SRPMS
        └── myscript-1.0-1.src.rpm

    7 directories, 4 files

     

     

    6. 생성한 rpm 패키지의 동작 검증

    $ cp       rpmbuild/RPMS/x86_64/myscript-1.0-1.x86_64.rpm      .

    $ ls    -lh

    -rw-r--r--. 1 root root 6.6K  4월  3 09:58    myscript-1.0-1.x86_64.rpm
    drwxr-xr-x. 8 root root   89  4월  3 09:49   rpmbuild

     


    $ rpm     -ivh      myscript-1.0-1.x86_64.rpm

    Verifying...                          ################################# [100%]
    준비 중...                         ################################# [100%]
    Updating / installing...
       1:myscript-1.0-1                   ################################# [100%]
    $ which     myscript
    -----------------------------------
    /usr/bin/myscript
    -----------------------------------

    $ myscript
    -----------------------------------
    hello  world
    -----------------------------------

     

     

    6-1. rpm 패키지 삭제

    $ rpm     -evh     myscript

    준비 중...                         ################################# [100%]
    Cleaning up / removing...
       1:myscript-1.0-1                   ################################# [100%]

     

    $ myscript

    -bash: /usr/bin/myscript: 그런 파일이나 디렉터리가 없습니다

     

     

     

     

    'Linux' 카테고리의 다른 글

    rhel 8,9 패스워드 초기화  (0) 2025.03.07
    rhel(centos) 7 패스워드 초기화  (0) 2025.03.07
    SSH 접속 포트 변경  (0) 2025.02.12
    DHCP 서버 구축하기  (0) 2025.02.11
    DNS 서버 구축  (0) 2024.12.18
Designed by Tistory.