다른 시스템에서 커널 컴파일

다른 시스템에서 커널 컴파일

저는 Nimbix에서 일하고 있으며 매우 강력한 멀티 코어 시스템에 액세스할 수 있으며 커널 컴파일 서비스를 만들 계획입니다.

make -j32시스템은 최대 128개의 코어를 가질 수 있으며 32개의 코어를 사용한 초기 테스트에서는 매우 빠르게 컴파일할 수 있었습니다. Linux 4.8.12의 시기는 다음과 같습니다.

real    2m16.366s
user    29m18.732s
sys     2m28.616s

Dell Precision 6500 노트북에서는 약 25분 후에도 여전히 컴파일되지 않습니다.

내 첫 번째 테스트는 내 시스템(Arch Linux)용 커널을 빌드하는 것이었습니다.

/lib/modulesbzImage 디렉터리를 원격 시스템에서 내 시스템으로 복사했습니다 .

이제 실행하려고 하면 mkinitcpio오류가 발생합니다.

==> ERROR: '/lib/modules/4.8.14-2-ck-nehalem' is not a valid kernel module directory

(/proc/config.gz에서 기본 커널 .config 파일을 얻었습니다 - ck-nehalem 커널 버전이 있습니다)

어떻게 작동하게 합니까? 다른 시스템의 모듈을 initramfs 이미지가 빌드된 시스템으로 전송하는 일반적인 방법은 무엇입니까? initramfs를 원격으로 구축할 수도 있나요?

약간 이야기하자면, 이러한 커널 컴파일 서비스가 커널 개발자와 개발자에게 유용할까요? 컴퓨팅 클러스터 사용 비용은 시간당 약 3달러이므로 컴파일 비용은 거의 들지 않습니다.

답변1

그래서 다른 사람들에게 도움이 될 수 있도록 내 질문에 대답하고 있습니다.

실행하는 한 원격으로 initramfs를 절대적으로 빌드할 수 있습니다.

make modules_install

그러나 원격 시스템에서는 필요한 모듈, 특히 md raido 항목을 포함하는 이미지를 얻을 수 없습니다. , 시스템을 부팅할 수 있는 initramfs를 생성할 수 없습니다. 하지만 mkinitcpio.conf에서 모든 모듈을 명시적으로 언급하면 ​​가능할 것 같습니다.

일부 모듈(예: nvidia)도 필수 모듈을 빌드하려면 dkms를 실행해야 합니다.

/lib/modules/에서 로컬 시스템으로 모듈을 복사하는 경우 링크를 다시 생성 build하고 sourceLinux 커널 소스 코드가 포함된 디렉터리를 가리켜야 합니다. 원격 측에서 생성된 링크는 작동하지 않습니다.

답변2

initramfs에서 누락된 md raid 모듈과 관련하여 initramfs 파일을 열고 필요한 모듈을 추가한 다음 원본 파일을 기반으로 새 initramfs를 다시 생성하는 방법도 있지만 이번에는 추가한 모듈을 포함합니다. 저는 Fedora에서 이 작업을 몇 번 해본 적이 있으며 Arch Linux에서도 이 작업을 수행할 수 있다고 믿습니다. 또는 mkinitcpio.conf 파일을 구성하거나 mkinitcpio에 대한 매개변수를 통해 수행할 수도 있습니다.

라미 로젠

답변3

커널을 로컬로 컴파일하고 컴파일된 커널을 .deb/.rpm 패키지로 빌드한 후 원격으로 설치해야 합니다. 저장소에서 바이너리 커널을 설치하는 것과 같습니다.

관련 정보