私はCentOS 8.2
withを使用しており、Kernel (4.18.0-193.6.3.el8_2.x86_64)
コンパイルに興味がありますKernel version 5.7
。
実際に私のコンピュータにインストールしたくないので、いくつかのライブラリを抽出する必要があります。
私はこのステップに従いますhttps://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
sudo dnf upgrade -y
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.7.tar.xz
unxz -v linux-5.7.tar.xz
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.7.tar.sign
gpg --verify linux-5.7.tar.sign
gpg --recv-keys 647F28654894E3BD457199BE38DBBDC86092693E
gpg --verify linux-5.7.tar.sign
tar xvf linux-5.7.tar
cp -v /boot/config-$(uname -r) .config
sudo dnf group install "Development Tools"
sudo dnf install ncurses-devel bison flex elfutils-libelf-devel openssl-devel
make menuconfig
make
しかしここでmake
私はこれを得ます:
CC kernel/pid_namespace.o
CC kernel/stop_machine.o
CC kernel/audit.o
CC kernel/auditfilter.o
CC kernel/auditsc.o
CC kernel/audit_watch.o
CC kernel/audit_fsnotify.o
CC kernel/audit_tree.o
CC kernel/hung_task.o
CC kernel/watchdog.o
CC kernel/watchdog_hld.o
CC kernel/seccomp.o
CC kernel/relay.o
CC kernel/utsname_sysctl.o
CC kernel/delayacct.o
CC kernel/taskstats.o
CC kernel/tsacct.o
CC kernel/tracepoint.o
CC kernel/irq_work.o
CC kernel/padata.o
CC kernel/crash_dump.o
CC kernel/jump_label.o
CC kernel/iomem.o
CC kernel/rseq.o
AR kernel/built-in.a
CC certs/system_keyring.o
make[1]: *** No rule to make target 'certs/rhel.pem', needed by 'certs/x509_certificate_list'. Stop.
make: *** [Makefile:1729: certs] Error 2
[joseluisbz@centos linux-5.7]$
どうやって解決しますか?
答え1
RHEL / CentOSカーネルはSecure Bootと互換性があるように構築されているため、RedHatの秘密鍵で署名されています。 RedHatではこれを取得できないため、セキュアブート/カーネル署名用に独自のキー+証明書を生成したり、システムでセキュアブートを無効にしたりできます。
関連カーネルコンパイルオプション:
- CONFIG_MODULE_SIG_KEY(Crypto APIの下):カーネルモジュールの署名に使用されるファイルを指定します。
certs/rhel.pem
RHEL/CentOS カーネルで に設定します。 「工場デフォルト」に設定すると、カーネルのcerts/signing_key.pem
コンパイルプロセスは自動的にキーと証明書を生成します。 - CONFIG_MODULE_SIG(「Enable loadable module support」の下):カーネルモジュールの署名検証を有効にします。
- CONFIG_MODULE_SIG_FORCE: カーネルが署名を検証できないか、まったく署名されていないモジュールを拒否するようにします。これがなければ、セキュアブートはあまり効果的ではありません。
- CONFIG_MODULE_SIG_ALL:カーネルビルドプロセスがカーネルでビルドされたすべてのモジュールに自動的に署名するようにします。
あなたは読まなければなりませんDocumentation/admin-guide/module-signing.rst
モジュール署名の詳細については、カーネルソースパッケージを参照してください。これには、自動鍵生成プロセスを構成し、OpenSSLを使用して独自の長期カーネル署名鍵を生成するための指示が含まれています。また、カーネルパッケージに含まれていない一部のモジュール(「サードパーティモジュール」)を使用したい場合は、モジュールに個別に署名する方法も教えてくれます。
システムがセキュアブートをサポートしていて、それを無効にしたくない場合は、次のステップはカーネル署名キーの公開部分をセキュアブート変数に追加するか、ブートローダ用のキーとして追加するdb
ことshim.efi
ですMOK
。しかし、最も簡単なオプションは、セキュアブートを一時的に無効にし、まずセキュアブートの複雑さを心配することなく、新しいカーネルとそのモジュールをコンパイルしてインストールする方法を学ぶことです。セキュアブートなしで動作する署名付きモジュールを含むカーネルがある場合は、特定のハードウェアでカスタムキーを使用してセキュアブートを使用するための最良の方法を見つけることができます。
を実行する前に、Let the Kernel Configuration Toolを実行してmake menuconfig
標準のmake oldconfig
CentOSカーネルバージョン4.18からコピーした設定ファイルを自動的に確認し、バージョン4.18とコンパイル中のカーネルバージョンの間に追加された新しい設定オプションを設定する方法を尋ねてください。 (非常に技術的な質問を含むかなり長いリストになりますが、プロンプトに疑問符を入力すると、尋ねる設定オプションに関するヘルプテキストが表示されます。)