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

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

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

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

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

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

나의 첫 번째 테스트는 내 시스템(Arch Linux)용 커널을 구축하는 것입니다.

원격 시스템의 디렉토리인 bzImage를 /lib/modules내 시스템으로 복사했습니다.

이제 작업을 수행하려고 하면 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/의 모듈을 로컬 시스템에 복사하는 경우 링크를 다시 만들고 Linux 커널 소스가 포함된 디렉터리를 가리켜야 합니다 build. source원격 측에서 만든 링크는 유효하지 않습니다.

답변2

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

라미 로젠

답변3

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

관련 정보