현재 사용 중인 커널 모듈을 업데이트하는 전체 절차는 무엇입니까?

현재 사용 중인 커널 모듈을 업데이트하는 전체 절차는 무엇입니까?

사용자 정의 ZFS 커널 모듈(0.8.x 대 제공된 0.7.x)이 포함된 서버 18.04가 있습니다.

주기적으로 커널을 업데이트할 때 ZFS 커널 모듈을 다시 컴파일해야 합니다. 그렇지 않으면 자동으로 비활성화됩니다.

지난번에는 이 작업을 완료하기 위해 잠시 바이올린을 켜야 했기 때문에 이번에는 관련된 올바른 단계를 미리 알고 싶습니다.

제 생각에는

  1. 커널 및 커널 소스 업데이트
  2. 모듈 소스 다운로드 및 모듈 컴파일
  3. 이전 kmod 패키지 제거 및 새 패키지 설치

그러나 현재 마운트된 일부 파일 시스템에 액세스하려면 커널 모듈이 필요하므로 다음 단계는 무엇입니까? 새 모듈을 마운트하려면 재부팅하기만 하면 되나요?

또한 어느 시점에서는 자동 가져오기 서비스를 활성화해야 합니다.https://unix.stackexchange.com/questions/338260/zfs-mounting-only-one-of-my-pools-on-boot

답변1

현재 실행 중인 커널에 대한 모듈을 업데이트하는 경우 해당 모듈(예: umount모든 파일 시스템) 의 사용을 중단하고 rmmod zfs새 모듈을 사용할 수 있도록 한 다음 modprobe zfs다시 로드해야 합니다. 일반적으로 재부팅하는 것이 더 쉽지만 원하는 경우 시스템이 실행되는 동안 재부팅하는 데 도움이 되는 예를 다른 곳에서 찾을 수 있습니다.

  1. # # Stop using the module
  2. # rmmod zfs
  3. # modprobe zfs

커널을 업데이트할 때마다 모듈에 대한 업데이트를 자동으로 컴파일하고 설치하려면 다음 사항에 관심이 있을 수 있습니다.DKMS. 훌륭한 것이 있습니다DKMS 패키징 가이드이에 대해 자세히 설명합니다.

아이디어는 모듈이 있거나 각 커널 업데이트에 적용하려는 커널에 대한 일부 변경 사항이 있다는 것입니다. apt사용된 커널을 업데이트할 때 모듈의 컴파일 및 설치를 자동화할 수 있습니다 . VirtualBox뿐만 아니라 일부 제품에서도 이에 대한 좋은 예를 찾을 수 있습니다.NVIDIA DKMS 드라이버.

이를 설정하는 방법을 보여주는 또 다른 좋은 예는 다음과 같습니다.팟작의 bcwc_pcie. bcwc_pcie, 또는 facetimehd모듈을 컴파일하여 새 커널에서 사용할 수 있게 만드는 절차 는 다음과 같습니다.문서화:

DKMS 설정(커널 업데이트 시 자동 컴파일)

이는 Debian/Ubuntu deb 패키지 단계를 이미 따랐다고 가정합니다. dkms.conf모듈 이름 facetimehd과 버전 번호가 0.1올바른지 확인 하고 및가 사용되는 dkms.conf지침을 업데이트하거나 조정 해야 합니다.-m-v

  • 필요한 패키지를 설치합니다:# apt install debhelper dkms
  • 설치된 경우 이전 패키지를 제거하십시오.# dpkg -r bcwc-pcie
  • 작업할 디렉터리를 만듭니다.# mkdir /usr/src/facetimehd-0.1
  • git repo 디렉토리로 변경합니다.$ cd bcwc_pcie
  • 파일 복사:# cp -r * /usr/src/facetimehd-0.1/
  • 해당 디렉토리로 변경하십시오.# cd /usr/src/facetimehd-0.1/
  • 이전 deb 및 백업을 제거하십시오.# rm backup-*tgz bcwc-pcie_*deb
  • 이전 컴파일을 지웁니다.# make clean
  • DKMS에 새 모듈을 등록합니다.# dkms add -m facetimehd -v 0.1
  • 모듈을 빌드합니다.# dkms build -m facetimehd -v 0.1
  • Debian 소스 패키지를 빌드합니다.# dkms mkdsc -m facetimehd -v 0.1 --source-only
  • Debian 바이너리 패키지를 빌드합니다.# dkms mkdeb -m facetimehd -v 0.1 --source-only
  • deb를 로컬로 복사합니다.# cp /var/lib/dkms/facetimehd/0.1/deb/facetimehd-dkms_0.1_all.deb /root/
  • 로컬 빌드 파일을 제거하십시오.# rm -r /var/lib/dkms/facetimehd/
  • 새 deb 패키지를 설치합니다.# dpkg -i /root/facetimehd-dkms_0.1_all.deb

문제가 있는 경우 DKMS 패키지 제작에 대한 이 가이드를 읽어보세요. http://www.xkyle.com/building-linux-packages-for-kernel-drivers/


이 예제에서 누락된 유일한 부분은 bcwc_pcie이 코드베이스가 업데이트되지 않는 반면, 컴파일 중인 모듈 코드는 시간이 지남에 따라 변경될 수 있다는 것입니다. 이 작업은 다음을 찾을 수 있으면 가장 쉽게 수행할 수 있습니다.최신다운로드와 컴파일하려는 소스의 특정 버전 비교.

dkms.conf우리는 다음을 볼 수 있습니다.DKMS 커뮤니티 문서:

$ cat dkms.conf 
MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=awesome
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=awesome
PACKAGE_VERSION=1.1
REMAKE_INITRD=yes

또한 빌드 또는 설치 전후에 스크립트를 호출하는 옵션을 추가하고 추가(조건부) make 명령, 패치 명령 등을 제공할 수 있습니다. dkms.conf는 실제로 쉘 스크립트에 소스로 제공되므로 상당한 양의 속임수를 수행할 수 있습니다. 필요하다면. 이러한 옵션과 자세한 내용은 man dkms의 dkms.conf 섹션에 설명되어 있습니다.

그리고매뉴얼 페이지:

PRE_BUILD= 빌드가 수행되기 전에 실행할 스크립트의 이름입니다. 경로는 소스의 루트 디렉터리를 기준으로 지정되어야 합니다.

다운로드하고 추출하는 스크립트를 포함하는 디렉토리를 만들 수 있습니다.최신 버전의 ZFS빌드 준비중. 이는 프로세스를 자동화하는 데 도움이 됩니다. 소스를 사용 git하거나 다운로드하여 추출 할 수 있습니다 latest. 다음은 ZFS의 최신 다운로드 URL을 확인하는 방법의 예입니다.

$ curl -s https://api.github.com/repos/zfsonlinux/zfs/releases/latest | jq '.assets[].browser_download_url' | tr -d '"' | grep -E 'tar.gz$'
https://github.com/zfsonlinux/zfs/releases/download/zfs-0.8.1/zfs-0.8.1.tar.gz

systemd서비스가 비활성화되는 합병증을 언급했습니다 . 자체 ZFS dkms설정을 설정하면 이 문제가 해결됩니까? zfs-dkms충돌을 일으키는 실제 패키지에 의존하는 패키지가 설치되어 있습니까 ? 최소한 비활성화된 서비스를 활성화하기 위해 연결 POST_INSTALL하고 실행할 수 있습니다.systemctl enable


즉, ZFS는 매우 인기 있는 파일 시스템이므로 DKMS 패키지를 이미 사용할 수 있어야 합니다. 이것이 사실인 것 같고,zfs-dkms에서 사용할 수 있습니다우주. 이 패키지의 세부 사항을 살펴보고 이미 사용 가능한 패키지가 zfs-dkms귀하에게 적합한지 확인할 수 있습니다.

관련 정보