코드를 수정하여 iso 이미지가 만들어지는 원리
커널 모듈을 수정한 후 이를 RPM 패키지에 반영하려면, 먼저 커널 모듈을 재빌드해야 합니다. 이렇게 해야 수정된 모듈이 새로운 RPM 패키지에 포함될 수 있습니다. 다음은 이 과정을 자세히 설명합니다.
1. 소스 파일 수정
먼저 igb.c
파일을 수정합니다. 예를 들어, 파일 경로가 /home/user/igb/src/igb.c
라고 가정합니다. 원하는 수정 작업을 완료합니다.
2. 커널 모듈 재빌드
수정된 소스 파일을 기반으로 커널 모듈을 재빌드해야 합니다. 이를 위해 커널 소스 트리와 필요한 빌드 도구들이 설정되어 있어야 합니다.
cd /home/user/igb/src
make
이 명령어는 Makefile
을 사용하여 igb.ko
커널 모듈을 생성합니다.
3. RPM 패키지 생성
수정된 커널 모듈을 포함하는 RPM 패키지를 생성합니다. 이를 위해 SPEC 파일을 작성하거나 수정해야 합니다. 예를 들어, igb.spec
파일을 작성하거나 수정합니다:
igb.spec 파일 예시:
Name: igb
Version: 5.4.0
Release: 2%{?dist}
Summary: Intel Gigabit Ethernet driver
License: GPLv2
Source0: %{name}-%{version}.tar.gz
BuildRequires: kernel-devel
Requires: kernel
%description
This package contains the Intel Gigabit Ethernet driver.
%prep
%setup -q
%build
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
%install
mkdir -p %{buildroot}/lib/modules/%{kver}/extra
install -m 644 igb.ko %{buildroot}/lib/modules/%{kver}/extra/
%files
/lib/modules/%{kver}/extra/igb.ko
%changelog
* Thu Jul 18 2024 Your Name <your.email@example.com> - 5.4.0-2
- Rebuilt with modified igb.c
4. 소스 아카이브 생성
수정된 소스 파일을 포함하는 디렉터리를 tar.gz 아카이브로 압축합니다:
tar czvf igb-5.4.0.tar.gz igb/
5. RPM 빌드 환경 설정
RPM 빌드를 위해 홈 디렉터리에 RPM 빌드 환경을 설정합니다:
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
cp igb-5.4.0.tar.gz ~/rpmbuild/SOURCES/
cp igb.spec ~/rpmbuild/SPECS/
6. RPM 패키지 빌드
rpmbuild
명령을 사용하여 RPM 패키지를 빌드합니다:
rpmbuild -ba ~/rpmbuild/SPECS/igb.spec
이 명령은 새로운 igb.ko
모듈이 포함된 RPM 패키지를 생성합니다.
7. ISO 이미지 생성
RPM 패키지를 포함하는 ISO 이미지를 생성하기 위해 다음 단계를 따릅니다.
디렉터리 구조 설정
ISO 이미지에 필요한 디렉터리 구조를 설정합니다:
mkdir -p /iso-root/Packages
RPM 패키지 복사
생성된 RPM 패키지를 ISO 이미지 디렉터리에 복사합니다:
cp ~/rpmbuild/RPMS/x86_64/igb-5.4.0-2.x86_64.rpm /iso-root/Packages/
YUM 리포지토리 생성
YUM 리포지토리를 생성합니다:
createrepo /iso-root/Packages/
부팅 설정 파일 작성
부팅 설정 파일을 작성합니다 (isolinux.cfg
등):
default vesamenu.c32
timeout 600
menu background splash.png
menu title Welcome to Custom Linux
label linux
menu label ^Install Custom Linux
kernel vmlinuz
append initrd=initrd.img
초기 램디스크 이미지 생성
커널 이미지와 초기 램디스크 이미지를 준비하고 ISO 디렉터리에 복사합니다:
cp /boot/vmlinuz-$(uname -r) /iso-root/images/vmlinuz
cp /boot/initrd.img-$(uname -r) /iso-root/images/initrd.img
ISO 이미지 생성
최종 ISO 이미지를 생성합니다:
mkisofs -o /path/to/output.iso \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-J -R -V "Custom Linux" /iso-root
요약
- 소스 파일 수정:
igb.c
파일을 수정합니다. - 커널 모듈 재빌드: 수정된 소스 파일로 커널 모듈을 빌드합니다.
- RPM 패키지 생성: 수정된 커널 모듈을 포함하는 RPM 패키지를 생성합니다.
- ISO 디렉터리 구조 설정: ISO 이미지의 디렉터리 구조를 설정합니다.
- RPM 패키지 복사: 생성된 RPM 패키지를 ISO 디렉터리에 복사합니다.
- YUM 리포지토리 생성: 리포지토리를 생성합니다.
- 부팅 설정 파일 작성: 부팅 설정 파일을 작성합니다.
- 초기 램디스크 이미지 생성: 초기 램디스크 이미지를 준비합니다.
- ISO 이미지 생성: 최종 ISO 이미지를 생성합니다.
이 과정을 통해 수정된 igb.c
파일이 반영된 커스터마이즈된 리눅스 설치 ISO 이미지를 만들 수 있습니다.