systemd 서비스 분석을 위해 소스코드 획득이 필요하다
기본적으로 redhat 계열 코드들은 source rpm 이라는 특수한 rpm 을 획득한 후,
rpmbuild 라는 명령을 통해 생성가능하다
1) 현재 시스템의 systemd 버전은 systemd-239-68.el8.x86_64
[user@localhost SOURCES]$ rpm -qa | grep systemd
...
systemd-239-68.el8.x86_64
[user@localhost SOURCES]$ systemctl --version
systemd 239 (239-68.el8)
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy
[user@localhost SOURCES]$
2) source rpm 다운로드 후 설치, 현재 유저 디렉토리에 rpmbuild 디렉토리가 생성된걸 확인
https://dl.rockylinux.org/vault/rocky/8.7/Devel/source/tree/Packages/s/systemd-239-68.el8_7.4.src.rpm
[user@localhost ~]$ rpm -ivh systemd-219-78.el7.src.rpm
[user@localhost ~]$ cd rpmbuild
3) rpmbuild 매크로, 디렉토리 구성
[user@localhost rpmbuild]$ cat ~/.rpmmacros
%_topdir %(echo $HOME)/rpmbuild
[user@localhost rpmbuild]$
4) rpmbuild 수행
[user@localhost rpmbuild]$ rpmbuild -bp --nodeps SPECS/systemd.spec
SOURCE 에 있는 systemd-239.tar.gz 에 patch 들을 적용후
BUILD 에 소스코드를 생성하는 구조이다.
패치 전
[user@localhost rpmbuild]$ ls
SOURCES SPECS
[user@localhost rpmbuild]$
패치 후
[user@localhost rpmbuild]$ ls
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
[user@localhost rpmbuild]$
upstream 코드 위에 적용한 cent7 패치갯수를 보면 837개로 확인된다.
[user@localhost SOURCES]$ ls *.tar.gz
SOURCES/systemd-239.tar.gz
[user@localhost SOURCES]$ ls *\.patch | wc -l
837
[user@localhost SOURCES]$