
저는 Nimbix에서 일하고 있으며 매우 강력한 멀티코어 시스템에 액세스할 수 있습니다. 커널 컴파일 서비스를 만들려고 합니다.
시스템은 최대 128개의 코어를 가질 수 있으며 32개의 코어를 사용한 초기 테스트에서는 매우 빠르게 컴파일할 수 있습니다. make -j32
Linux 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 패키지로 빌드한 후 원격에 설치해야 합니다. 저장소에서 바이너리 커널을 설치한 것과 같습니다.