この記事では、アリババクラウドのLinux 2に熱カーネルパッチ(カーネルライブパッチ適用)関数を使用する方法について説明します。
1.準備
カーネルのバージョン1.1
まず、現在実行していることを確認カーネルのバージョンを確認します。オペレーティング・システムの内部では、次のコマンドを実行します。
uname -r
4.19.57-15.1.al7.x86_64
1.2インストールツールとカーネルの依存関係
sudo yum install -y alinux-release-source alinux-release-kernels
sudo yum install -y yum-utils
sudo debuginfo-install -y kernel-$(uname -r) # 安装 Debuginfo 包
sudo yum install -y kpatch pesign zlib-devel \
binutils-devel newt-devel python-devel perl-ExtUtils-Embed \
audit-libs audit-libs-devel numactl-devel pciutils-devel bison patchutils \
kernel-devel-$(uname -r) # 安装依赖工具
sudo yum-builddep -y kernel-$(uname -r) # 检查 build 内核的时候的依赖
1.3インストールkpatchビルド
ホットパッチを作成するには、ツールからYUMソースkpatchビルド、必要性を入れていない使用する必要がありますGitHubのソースコードを取得します。コードを取得するには、次のコマンドを実行し、コンパイルします。
sudo yum install -y git
git clone https://github.com/dynup/kpatch.git
cd kpatch
make
1.4カーネルのソースコードを準備します
sudo yumdownloader --source kernel-$(uname -r) #安装内核源码
export VRDA=$(uname -r)
rpm -ivh kernel-${VRDA/x86_64/src}.rpm
rpmbuild --without debug \
--without doc \
--without perf \
--without tools \
--without bpftool \
--without debuginfo \
-bp ~/rpmbuild/SPECS/kernel.spec
export SourceDir=$(ls -d ~/rpmbuild/BUILD/kernel-${VRDA/-*/}/linux-*)
cp ~/rpmbuild/SOURCES/modsign_alinux.pem $SourceDir/certs
cp ~/rpmbuild/SOURCES/x509.genkey $SourceDir/certs
sed -i "s/CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION=\"${VRDA/*-/-}\"/" $SourceDir/.config
ホットパッチを準備2.は、パッチファイルである必要があります
一般的にカーネルソースのGitツリーパッチファイルから取得したホットパッチファイルを準備する実際の状況に応じて使用することができ、すべてではないのパッチファイルのホットパッチを作るために使用することができ、ホットパッチの使用のために事前に確認してください完全な理解を持って、これが発生する可能性の制限は、オペレーティングシステムのダウンタイムやその他の深刻な問題に限定されるものではありません。
ここではサンプルパッチファイルは、次のとおりです。
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index edda898..8a4a686 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -121,7 +121,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
seq_printf(m, "VmallocTotal: %8lu kB\n",
(unsigned long)VMALLOC_TOTAL >> 10);
show_val_kb(m, "VmallocUsed: ", 0ul);
- show_val_kb(m, "VmallocChunk: ", 0ul);
+ show_val_kb(m, "VMALLOCCHUNK: ", 0ul);
show_val_kb(m, "Percpu: ", pcpu_nr_pages());
ソースがマッチした後、現在のカーネルソースをダウンロードパッケージにパッチファイルを解凍しなければならないことに注意してください。
ホットパッチの生産を行います。3.
cd kpatch
export VRDA=$(uname -r)
export SourceDir=$(ls -d ~/rpmbuild/BUILD/kernel-${VRDA/-*/}/linux-*)
./kpatch-build/kpatch-build -v /usr/lib/debug/usr/lib/modules/$(uname -r)/vmlinux \
meminfo.patch \
-s $SourceDir \
-t vmlinux \
-j$(getconf _NPROCESSORS_ONLN) #meminfo.patch 是前面一步里的补丁文件
成功した場合、実装後、カレントディレクトリにlivepatch-meminfo.koファイルを生成します
4.ロードホットパッチ
kpatch負荷livepatch-meminfo.koをSUDO