Dalam skenario tertentu, Anda mungkin perlu mengaktifkan fitur atau modul tertentu di kernel Alibaba Cloud Linux atau menonaktifkan fitur tertentu di kernel default untuk memenuhi persyaratan kinerja atau keamanan. Untuk melakukannya, modifikasi kode sumber kernel Alibaba Cloud Linux dan gunakan Red Hat Package Manager (RPM) untuk mengkompilasi ulang serta membuat ulang paket RPM kernel kustom. Ini memastikan bahwa kernel yang digunakan tetap kompatibel dengan rilis Alibaba Cloud Linux dan dapat secara fleksibel memenuhi persyaratan bisnis tertentu. Topik ini menjelaskan cara memodifikasi dan mengkompilasi paket RPM kernel Alibaba Cloud Linux dalam kontainer berbasis lingkungan Elastic Compute Service (ECS) Alibaba Cloud Linux.
Prasyarat
Sebuah Instance ECS yang menjalankan Alibaba Cloud Linux telah dibuat. Untuk informasi lebih lanjut, lihat Buat instance menggunakan wizard.
Instance tersebut menggunakan gambar Alibaba Cloud Linux 2 atau 3.
Tipe instance yang digunakan memiliki 32 vCPU atau lebih.
CatatanKompilasi paket
RPMmemerlukan waktu yang lama untuk diselesaikan. Kami merekomendasikan agar Anda menggunakan tipe instance yang memiliki 32 vCPU atau lebih untuk meningkatkan efisiensi kompilasi.
Langkah 1: Persiapkan lingkungan
Hubungkan ke Instance ECS tempat Anda ingin memodifikasi dan mengkompilasi paket RPM kernel Alibaba Cloud Linux.
Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk terhubung ke instance Linux melalui SSH.
Jalankan perintah berikut untuk mengunduh gambar Docker Alibaba Cloud Linux dan mengakses kontainer Docker:
#Instal Docker. sudo yum install -y docker #Tarik gambar Docker. sudo docker pull <image_url> #Mulai kontainer Docker. sudo docker run -itd --net host --name alinux-build <image_url> bash #Akses kontainer Docker. sudo docker exec -it alinux-build bashDalam perintah sebelumnya, ganti
<image_url>dengan URL gambar Docker yang sesuai dengan Alibaba Cloud Linux 2 atau 3. Tabel berikut menjelaskan URL gambar Docker.Gambar
URL gambar Docker
Alibaba Cloud Linux 2
alibaba-cloud-linux-2-registry.cn-hangzhou.cr.aliyuncs.com/alinux2/alinux2
Alibaba Cloud Linux 3
alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3
Dalam contoh ini, gambar Docker yang sesuai dengan Alibaba Cloud Linux 3 diunduh. Contoh perintah:
sudo yum install -y docker sudo docker pull alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3 sudo docker run -itd --net host --name alinux-build alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3 bash sudo docker exec -it alinux-build bash
Langkah 2: Unduh kode sumber
Jalankan perintah berikut untuk mengunduh paket RPM yang ingin Anda modifikasi:
# Unduh paket kode sumber.
yum install -y wget
wget <rpm_url>/<src.rpm_name>
# Instal paket kode sumber.
rpm -ivh <src.rpm_name>Dalam perintah sebelumnya, ganti
<rpm_url>dengan URL paketRPMyang sesuai dengan Alibaba Cloud Linux 2 atau 3. Tabel berikut menjelaskan URL unduhan paket RPM yang sesuai dengan Alibaba Cloud Linux 2 atau 3.Gambar
URL paket RPM
Alibaba Cloud Linux 2
Alibaba Cloud Linux 3
https://mirrors.aliyun.com/alinux/3/plus/source/SRPMS/kernels/
Dalam perintah sebelumnya, ganti
<src.rpm_name>dengan nama paketsrc.rpmyang ingin Anda modifikasi.
Dalam contoh ini, paket src.rpm yang sesuai dengan Alibaba Cloud Linux 3, bernama kernel-5.10.134-13.1.al8.src.rpm, diunduh. Contoh perintah:
yum install -y wget
wget https://mirrors.aliyun.com/alinux/3/plus/source/SRPMS/kernels/kernel-5.10.134-13.1.al8.src.rpm
rpm -ivh kernel-5.10.134-13.1.al8.src.rpmSetelah Anda menginstal paket src.rpm, file dari paket src.rpm disimpan di direktori /root/rpmbuild. Anda dapat menjalankan perintah ls /root/rpmbuild untuk menanyakan file. Contoh keluaran perintah:

Langkah 3: Modifikasi kode sumber
Jalankan perintah berikut untuk menginstal dependensi:
yum install -y rpm-build yum-utils yum-builddep -y <src.rpm_name>Dalam perintah sebelumnya, ganti
<src.rpm_name>dengan nama paketsrc.rpmyang ingin Anda modifikasi. Dalam contoh ini,<src.rpm_name>diganti dengankernel-5.10.134-13.1.al8.src.rpm.yum install -y rpm-build yum-utils yum-builddep -y kernel-5.10.134-13.1.al8.src.rpmJalankan perintah berikut untuk mengekstraksi paket kode sumber:
# Masuk ke direktori kode sumber. cd /root/rpmbuild/SOURCES # Ekstrak paket kode sumber. tar xf <Nama paket kode sumber terkompresi>Dalam perintah sebelumnya, ganti
<Nama paket kode sumber terkompresi>berdasarkan kebutuhan bisnis Anda. Dalam contoh ini, <Nama paket kode sumber terkompresi> diganti denganlinux-5.10.134-13.1.al8.tar.xz.cd /root/rpmbuild/SOURCES tar xf linux-5.10.134-13.1.al8.tar.xzJalankan perintah berikut untuk masuk ke direktori tempat paket kode sumber diekstraksi:
cd <Nama paket kode sumber diekstraksi>Dalam perintah sebelumnya, ganti
<Nama paket kode sumber diekstraksi>berdasarkan kebutuhan bisnis Anda. Dalam contoh ini, <Nama paket kode sumber diekstraksi> diganti denganlinux-5.10.134-13.1.al8.cd linux-5.10.134-13.1.al8(Opsional) Modifikasi konfigurasi
config.Modifikasi kode sumber atau file
config(file konfigurasi) berdasarkan kebutuhan bisnis Anda. Pilih metode untuk memodifikasi kode sumber berdasarkan kebutuhan bisnis Anda. Untuk memodifikasi fileconfig, lakukan operasi berikut:Jalankan perintah berikut untuk mencantumkan semua file
configdan pilih file config yang ingin Anda modifikasi:ls /root/rpmbuild/SOURCES
Tabel berikut menjelaskan file
configdi direktori/root/rpmbuild/SOURCES.File config
Deskripsi
kernel-5.10.134-aarch64.config
File konfigurasi untuk arsitektur Arm dan versi rilis.
kernel-5.10.134-aarch64-debug.config
File konfigurasi untuk arsitektur Arm dan versi debug, yang hanya dapat digunakan untuk pengujian.
kernel-5.10.134-x86_64.config
File konfigurasi untuk arsitektur x86 dan versi rilis.
kernel-5.10.134-x86_64-debug.config
File konfigurasi untuk arsitektur x86 dan versi debug, yang hanya digunakan untuk pengujian.
Dalam kebanyakan kasus, Anda dapat memilih file
kernel-5.10.134-aarch64.configataukernel-5.10.134-x86_64.configberdasarkan apakah platform adalah arsitekturArmataux86, atau modifikasi konfigurasi untuk kedua platform.Jalankan perintah berikut untuk memodifikasi file
config:Dalam contoh ini, file
kernel-5.10.134-x86_64.configuntuk arsitekturx86digunakan.Salin file
configke direktori kode sumber.cd /root/rpmbuild/SOURCES cp kernel-5.10.134-x86_64.config linux-5.10.134-13.1.al8/.configMasuk ke direktori kode sumber.
cd linux-5.10.134-13.1.al8Segarkan nilai default di file
config.make olddefconfigGunakan
menuconfiguntuk memodifikasi fileconfiguntuk memastikan konfigurasi dependensi yang tepat.make menuconfigAkses antarmuka
menuconfig. Anda dapat menekan tombol/untuk mencari item yang memerlukan modifikasi dan modifikasi item berdasarkan kebutuhan bisnis Anda.
Salin file
configyang dimodifikasi untuk menimpa konfigurasi asli.cp .config ../kernel-5.10.134-x86_64.configKembali ke direktori induk.
cd ..
CatatanAnda dapat memodifikasi file config untuk arsitektur Arm dengan cara yang sama.
Jalankan perintah berikut untuk memperbarui versi kernel:
cd /root/rpmbuild/SPECS vi kernel.specTekan tombol
Iuntuk masuk ke mode Sisipkan. Tekan tombolEsc, masukkan:wq, lalu tekan tombolEnteruntuk menyimpan dan menutup file config.Saran untuk modifikasi:
Jika kernel memiliki versi utama dalam format *-x, seperti
5.10.134-12, kami sarankan Anda mengubah versi utama menjadi format*-x.y.z, seperti5.10.134-12.0.1. Dengan cara ini, Anda dapat membedakan versi dari versi resmi.Jika kernel memiliki versi minor dalam format
*-x.y, seperti5.10.134-13.1, kami sarankan Anda mengubah versi minor menjadi format *-x.y.z, seperti5.10.134-13.1.1.
Dalam contoh berikut, nomor versi
5.10.134-13.1diperbarui menjadi5.10.134-13.1.1.Dalam file config, temukan
%define pkgrelease %{?KREL:%{KREL}}%{?!KREL:13.1}dan ubah menjadi%define pkgrelease %{?KREL:%{KREL}}%{?!KREL:13.1.1}.
Anda juga dapat menambahkan deskripsi perubahan di bagian
changelogfilekernel.spec.
Langkah 4: Buat ulang paket RPM
Jalankan perintah berikut untuk mengkompres ulang paket src.rpm.
Dalam contoh ini, paket kode sumber
linux-5.10.134-13.1.al8digunakan.Masuk ke direktori SOURCES.
cd /root/rpmbuild/SOURCES/Ubah nama file direktori kode sumber.
Dalam contoh ini, versi
5.10.134-13.1diubah menjadi versi5.10.134-13.1.1dan nama file direktori kode sumber dimodifikasi menjadilinux-5.10.134-13.1.1.al8. Ubah nama file berdasarkan kebutuhan bisnis Anda.mv linux-5.10.134-13.1.al8 linux-5.10.134-13.1.1.al8Kompres ulang paket kode sumber menjadi paket TAR.
tar cJf linux-5.10.134-13.1.1.al8.tar.xz linux-5.10.134-13.1.1.al8Hapus direktori yang diekstraksi dan paket terkompresi asli.
rm -rf linux-5.10.134-13.1.al8 rm -f linux-5.10.134-13.1.al8.tar.xz
Jalankan perintah berikut untuk membuat ulang paket
src.rpm:cd /root rpmbuild -bs rpmbuild/SPECS/kernel.specContoh keluaran perintah berikut menunjukkan bahwa paket
src.rpm packagedisimpan di direktori/root/rpmbuild/SRPMS/kernel-5.10.134-13.1.1.al8.src.rpm.
(Opsional) Jalankan perintah berikut untuk menurunkan versi paket
dwarves:Jika versi kernel yang terkandung dalam paket
src.rpmadalah5.10.134-13.1.al8atau lebih awal, gunakandwarves-1.22-1.al8untuk kompilasi. Jika tidak, kesalahan kompilasi mungkin terjadi.yum downgrade dwarves-1.22-1.al8 -yJalankan perintah berikut untuk membuat ulang paket RPM:
rpmbuild --rebuild /root/rpmbuild/SRPMS/<src.rpm_name>Dalam perintah sebelumnya, ganti
<src.rpm_name>dengan nama baru paket src.rpm. Dalam contoh ini, nama baru paket src.rpm adalahkernel-5.10.134-13.1.1.al8.src.rpm.rpmbuild --rebuild /root/rpmbuild/SRPMS/kernel-5.10.134-13.1.1.al8.src.rpmKompilasi paket RPM memerlukan waktu yang lama untuk diselesaikan. Contoh keluaran perintah berikut menunjukkan bahwa paket RPM dibuat ulang.
