Compile pacotes RPM personalizados do kernel do Alibaba Cloud Linux para ativar ou desativar recursos específicos. Este tópico descreve como modificar o código-fonte do kernel e recompilar os pacotes RPM em um contêiner docker em uma instância ECS.
Pré-requisitos
Uma instância ECS com o Alibaba Cloud Linux. Para mais informações, consulte Criar uma instância com Inicialização Personalizada.
Imagem: Alibaba Cloud Linux 2 ou Alibaba Cloud Linux 3.
-
Tipo de instância: Recomenda-se 32 vCPUs ou mais.
NotaA compilação do kernel consome muitos recursos. Use uma instância com 32 ou mais vCPUs para reduzir o tempo de compilação.
Etapa 1: Preparar o ambiente
-
Conecte-se à sua instância ECS.
Para mais informações, consulte Fazer login em uma instância Linux usando o Workbench.
-
Baixe a imagem docker e inicie o contêiner.
#Install Docker. sudo yum install -y docker #Pull a Docker image. sudo docker pull <image_url> #Start the Docker container. sudo docker run -itd --net host --name alinux-build <image_url> bash #Access the Docker container. sudo docker exec -it alinux-build bashSubstitua
<image_url>pela URL da sua versão do Alibaba Cloud Linux.Imagem
URL da imagem 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
Este exemplo usa a imagem docker do Alibaba Cloud Linux 3.
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
Etapa 2: Baixar o código-fonte
Baixe e instale o pacote RPM de source.
# Download the source code package.
yum install -y wget
wget <rpm_url>/<src.rpm_name>
# Install the source code package.
rpm -ivh <src.rpm_name>
-
<rpm_url>é a URL do repositório de pacotes RPM do Alibaba Cloud Linux 2 ou 3.Imagem
URL do pacote RPM
Alibaba Cloud Linux 2
Alibaba Cloud Linux 3
https://mirrors.aliyun.com/alinux/3/plus/source/SRPMS/kernels/
<src.rpm_name>é o nome do pacote RPM de source a ser modificado.
Este exemplo baixa o pacote kernel-5.10.134-13.1.al8.src.rpm do Alibaba Cloud Linux 3.
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.rpm
Os arquivos são instalados no diretório /root/rpmbuild. Execute ls /root/rpmbuild para verificar:

Etapa 3: Modificar o código-fonte
-
Instale as dependências de compilação.
yum install -y rpm-build yum-utils yum-builddep -y <src.rpm_name>Substitua
<src.rpm_name>pelo nome do seu pacote RPM de source. Exemplo:kernel-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.rpm -
Extraia o pacote de source.
# Enter the source code directory. cd /root/rpmbuild/SOURCES # Decompress the source code package. tar xf <Name of the compressed source code package>Neste exemplo,
<source_archive_name>corresponde alinux-5.10.134-13.1.al8.tar.xz.cd /root/rpmbuild/SOURCES tar xf linux-5.10.134-13.1.al8.tar.xz -
Acesse o diretório extraído.
cd <Name of the decompressed source code package>Neste exemplo,
<extracted_source_directory_name>corresponde alinux-5.10.134-13.1.al8.cd linux-5.10.134-13.1.al8 -
(Opcional) Modifique os arquivos de configuração.
Modifique o código-fonte ou um arquivo
config. As etapas a seguir mostram como modificar um arquivoconfig.-
Liste os arquivos de configuração disponíveis.
ls /root/rpmbuild/SOURCES
O diretório
/root/rpmbuild/SOURCEScontém quatro arquivosconfig.Arquivo config
Descrição
kernel-5.10.134-aarch64.config
Arquitetura Arm, versão de lançamento.
kernel-5.10.134-aarch64-debug.config
Arquitetura Arm, versão de depuração. Apenas para testes.
kernel-5.10.134-x86_64.config
Arquitetura x86, versão de lançamento.
kernel-5.10.134-x86_64-debug.config
Arquitetura x86, versão de depuração. Apenas para testes.
Selecione o arquivo correspondente à sua arquitetura. Se necessário, modifique ambas as plataformas.
-
Modifique o arquivo de configuração.
Este exemplo usa o arquivo
kernel-5.10.134-x86_64.configpara a arquitetura x86.-
Copie o arquivo de configuração para o diretório de source.
cd /root/rpmbuild/SOURCES cp kernel-5.10.134-x86_64.config linux-5.10.134-13.1.al8/.config -
Acesse o diretório de source.
cd linux-5.10.134-13.1.al8 -
Aplique valores padrão para novas opções de configuração.
make olddefconfig -
Use
make menuconfigpara modificar as opções do kernel. Esse comando gerencia as dependências de configuração automaticamente.make menuconfigNa interface do
menuconfig, pressione/para pesquisar opções.
-
Copie a configuração modificada para substituir a original.
cp .config ../kernel-5.10.134-x86_64.config -
Retorne ao diretório pai.
cd ..
NotaUse o mesmo método para modificar o arquivo de configuração da arquitetura Arm.
-
-
-
Atualize o número da versão no arquivo spec.
cd /root/rpmbuild/SPECS vi kernel.specPressione
Ipara entrar no modo de inserção. Ao terminar, pressioneEsc, digite:wqe pressioneEnterpara salvar e sair.Recomendações de versionamento: Atualize o número da versão para distinguir sua compilação dos lançamentos oficiais. Por exemplo:
Altere uma versão principal como
5.10.134-12para5.10.134-12.0.1.Altere uma versão secundária como
5.10.134-13.1para5.10.134-13.1.1.
Este exemplo atualiza o número da versão de
5.10.134-13.1para5.10.134-13.1.1.No arquivo, localize a linha
%define pkgrelease %{?KREL:%{KREL}}%{?!KREL:13.1}e atualize-a para%define pkgrelease %{?KREL:%{KREL}}%{?!KREL:13.1.1}.
Também é possível descrever as alterações na seção de changelog do arquivo
kernel.spec.
Etapa 4: Recompilar os pacotes RPM
-
Recompacte o código-fonte modificado.
Neste exemplo, o nome do diretório de source é
linux-5.10.134-13.1.al8.-
Acesse o diretório
SOURCES.cd /root/rpmbuild/SOURCES/ -
Renomeie o diretório de source.
Na etapa anterior, o número da versão foi atualizado de
5.10.134-13.1para5.10.134-13.1.1. Portanto, renomeie o diretório de source paralinux-5.10.134-13.1.1.al8.mv linux-5.10.134-13.1.al8 linux-5.10.134-13.1.1.al8 -
Recompacte o diretório em um tarball.
tar cJf linux-5.10.134-13.1.1.al8.tar.xz linux-5.10.134-13.1.1.al8 -
Remova o diretório de source original e o tarball antigo.
rm -rf linux-5.10.134-13.1.al8 rm -f linux-5.10.134-13.1.al8.tar.xz
-
-
Recompile o pacote RPM de source.
cd /root rpmbuild -bs rpmbuild/SPECS/kernel.specA saída mostra a localização do pacote recompilado:
/root/rpmbuild/SRPMS/kernel-5.10.134-13.1.1.al8.src.rpm.
-
(Opcional) Faça downgrade do pacote
dwarves.Se a versão do kernel do RPM de source instalado for
5.10.134-13.1.al8ou anterior, a compilação exige o pacotedwarves-1.22-1.al8para evitar erros.yum downgrade dwarves-1.22-1.al8 -y -
Recompile os pacotes RPM.
rpmbuild --rebuild /root/rpmbuild/SRPMS/<src.rpm_name>Substitua
<src.rpm_name>pelo nome do pacote RPM de source modificado. Exemplo:kernel-5.10.134-13.1.1.al8.src.rpm.rpmbuild --rebuild /root/rpmbuild/SRPMS/kernel-5.10.134-13.1.1.al8.src.rpmA compilação leva um tempo considerável. A saída a seguir indica sucesso.
