1.5. 커널 모듈 컨테이너 빌드 및 테스트
커널 모듈을 OpenShift Container Platform 클러스터에 배포하기 전에 별도의 RHEL 시스템에서 프로세스를 테스트할 수 있습니다.
프로세스를 테스트하기 전에 kernal 모듈, KVC 프레임워크 및 kmod-via-containers 소프트웨어의 소스 코드를 수집합니다. 그런 다음 RHEL 시스템에서 모듈을 빌드하고 테스트할 수 있습니다.
프로세스
RHEL 8 시스템을 등록합니다.
# subscription-manager registerRHEL 8 시스템에 서브스크립션을 연결합니다.
# subscription-manager attach --auto소프트웨어 및 컨테이너를 빌드하는 데 필요한 소프트웨어를 설치합니다.
# yum install podman make git -ykmod-via-containers리포지토리를 복제합니다.저장소의 폴더를 만듭니다.
$ mkdir kmods; cd kmods저장소를 복제합니다.
$ git clone https://github.com/kmods-via-containers/kmods-via-containers
RHEL 8 빌드 호스트에 KVC 프레임 워크 인스턴스를 설치하여 모듈을 테스트합니다.
kmods-via-containersystemd 서비스가 추가되어 로드됩니다.kmod-via-containers디렉터리로 변경합니다.$ cd kmods-via-containers/KVC 프레임워크 인스턴스를 설치합니다.
$ sudo make installsystemd 관리자 설정을 다시로드합니다.
$ sudo systemctl daemon-reload
커널 모듈의 소스 코드를 가져옵니다. 소스 코드는 제어할 수 없지만 다른 사람이 제공하는 타사 모듈을 빌드하는 데 사용될 수 있습니다. 다음과 같이 시스템에 복제할 수있는
kvc-simple-kmod예제에 표시된 내용과 유사한 내용이 필요합니다.$ cd .. ; git clone https://github.com/kmods-via-containers/kvc-simple-kmod설정 파일
simple-kmod.conf을 편집하고 Dockerfile의 이름을Dockerfile.rhel로 변경합니다.kvc-simple-kmod디렉터리로 변경합니다.$ cd kvc-simple-kmodDockerfile의 이름을 바꿉니다.
$ cat simple-kmod.confDockerfile 예
KMOD_CONTAINER_BUILD_CONTEXT="https://github.com/kmods-via-containers/kvc-simple-kmod.git" KMOD_CONTAINER_BUILD_FILE=Dockerfile.rhel KMOD_SOFTWARE_VERSION=dd1a7d4 KMOD_NAMES="simple-kmod simple-procfs-kmod"
커널 모듈의
kmods-via-containers @.service인스턴스 (이 예제에서는simple-kmod)를 만듭니다.$ sudo make installkmods-via-containers @.service인스턴스를 활성화합니다.$ sudo kmods-via-containers build simple-kmod $(uname -r)systemd 서비스를 활성화하고 시작합니다.
$ sudo systemctl enable kmods-via-containers@simple-kmod.service --now서비스 상태를 확인합니다.
$ sudo systemctl status kmods-via-containers@simple-kmod.service출력 예
● kmods-via-containers@simple-kmod.service - Kmods Via Containers - simple-kmod Loaded: loaded (/etc/systemd/system/kmods-via-containers@.service; enabled; vendor preset: disabled) Active: active (exited) since Sun 2020-01-12 23:49:49 EST; 5s ago...
커널 모듈이 로드되었는지 확인하려면
lsmod명령을 사용하여 모듈을 나열하십시오.$ lsmod | grep simple_출력 예
simple_procfs_kmod 16384 0 simple_kmod 16384 0선택사항. 다른 방법을 사용하여
simple-kmod예제가 작동하는지 확인합니다.dmesg를 사용하여 커널 링 버퍼에 "Hello world"메시지를 찾으십시오.$ dmesg | grep 'Hello world'출력 예
[ 6420.761332] Hello world from simple_kmod./proc에서simple-procfs-kmod의 값을 확인합니다.$ sudo cat /proc/simple-procfs-kmod출력 예
simple-procfs-kmod number = 0spkut명령을 실행하여 모듈에 대한 자세한 정보를 가져옵니다.$ sudo spkut 44출력 예
KVC: wrapper simple-kmod for 4.22.0-147.3.1.el8_1.x86_64 Running userspace wrapper using the kernel module container... + podman run -i --rm --privileged simple-kmod-dd1a7d4:4.22.0-147.3.1.el8_1.x86_64 spkut 44 simple-procfs-kmod number = 0 simple-procfs-kmod number = 44
결과
시스템이 부팅되면 서비스는 새 커널이 실행 중인지 확인합니다. 새 커널이 있으면 서비스는 새 버전의 커널 모듈을 빌드한 다음 로드합니다. 모듈이 이미 구축 된 경우 이를 로드합니다.