linux

rpm 패키지 관리

jhinux 2026. 1. 5. 10:59

response-gpio RPM 빌드 및 배포 가이드

Rtlinux 에서 gpio 관련 예제를 생성하는데 패키지 관리까지 넣어서 배포하기

1. 개요

CentOS Stream 8 환경에서 수동 설치된 외부 라이브러리(libgefcmn-gpio.so)를 참조하는 response-gpio 프로그램의 RPM 패키징 및 배포 프로세스를 정의함.

2. 사전 필수 패키지 설치 (dnf)

RPM 빌드 환경 구축 및 컴파일 수행을 위해 아래 명령어를 사용하여 필수 도구를 설치함.

  • 실행 명령어: sudo dnf install -y rpm-build rpmdevtools gcc make

3. SPEC 파일 구성 (~/rpmbuild/SPECS/response-gpio.spec)

Name: response-gpio
Version: 1.0
Release: 1%{?dist}
Summary: GPIO Response Application
License: MIT
Source0: %{name}-%{version}.tar.gz
BuildRequires: gcc, make

[의존성 예외 설정]

자동 의존성 추출에서 특정 라이브러리를 제외하여 RPM DB 체크로 인한 설치 차단을 방지함.

%define __requires_exclude ^libgefcmn-gpio.so.*$

%description
GPIO response application. Installs to /home/GPIO and verifies gef library existence.

%prep
%setup -q

%build

빌드 시점 라이브러리 체크

if [ ! -f /usr/lib64/gef/libgefcmn-gpio.so ]; then
echo "BUILD WARNING: /usr/lib64/gef/libgefcmn-gpio.so not found."
fi
make %{?_smp_mflags}

%pre

[설치 전 검증] 실물 파일 존재 여부 확인 및 사용자 경고 출력

if [ ! -f /usr/lib64/gef/libgefcmn-gpio.so ]; then
echo "****"
echo " WARNING: /usr/lib64/gef/libgefcmn-gpio.so 파일이 없습니다!"
echo " 이대로 설치하면 프로그램이 정상 동작하지 않을 수 있습니다."
echo "****"
fi

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p %{buildroot}/home/GPIO
install -m 755 response-gpio %{buildroot}/home/GPIO/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%dir /home/GPIO
/home/GPIO/response-gpio

%changelog

  • Sun Jan 04 2026 jjung - 1.0-1
  • 설치 경로 /home/GPIO 고정
  • 라이브러리 의존성 예외 처리 및 설치 전 검증 로직 추가

4. 디버그 패키지 정보

  • debuginfo: 바이너리에서 추출된 디버그 심볼을 포함함. 프로세스 비정상 종료(Segfault 등) 시 gdb를 이용한 코어 덤프 분석 및 스택 트레이스 확인에 필수적임.
  • debugsource: 빌드 과정에 사용된 원본 소스 코드를 포함함. gdb 디버깅 시 실행 지점의 실제 소스 코드 라인을 대조하며 분석할 수 있도록 지원함.

5. 결과물 확인

생성 패키지 및 디렉토리

  • 실행 패키지: ./RPMS/x86_64/response-gpio-1.0-1.el8.x86_64.rpm
  • 디버그 소스: ./RPMS/x86_64/response-gpio-debugsource-1.0-1.el8.x86_64.rpm
  • 디버그 정보: ./RPMS/x86_64/response-gpio-debuginfo-1.0-1.el8.x86_64.rpm
  • 소스 RPM: ./SRPMS/response-gpio-1.0-1.el8.src.rpm (SPEC 및 원본 소스 포함)
  • 빌드 작업 디렉토리: ./BUILD/response-gpio-1.0 (컴파일 작업이 수행된 실제 공간)

최종 설치 위치

  • 바이너리: /home/GPIO/response-gpio

6. 설치 방법 및 검증

패키지 설치

  • 실행 명령어: sudo rpm -ivh ./RPMS/x86_64/response-gpio-1.0-1.el8.x86_64.rpm

설치 확인 및 환경 구성

  • 설치 파일 확인: ls -l /home/GPIO/response-gpio
  • (필요 시) 공유 라이브러리 경로 등록:
    1. echo "/usr/lib64/gef" | sudo tee /etc/ld.so.conf.d/gef.conf
    2. sudo ldconfig