This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Kernel/Atualização
Este artigo descreve as etapas para atualizar para um novo kernel.
Instalando e usando um novo kernel
Uma atualização do kernel pode ser uma boa ideia quando novas sources do kernel forem instaladas. Novas sources do kernel são às vezes instaladas durante a atualização do sistema, executando o seguinte comando:
root #
emerge --ask --update --deep --with-bdeps=y --newuse @world
Claro, eles podem ser instalados diretamente usando o comando. (substitua gentoo-sources por hardened-sources caso utilize o perfil hardened):
root #
emerge --ask --update --deep --with-bdeps=y --newuse sys-kernel/gentoo-sources
A instalação de novas sources do kernel não fornece ao usuário um novo kernel. É necessário compilar um novo kernel a partir das novas sources e, em seguida, reiniciar o sistema para realmente executar o novo kernel.
Fazer um novo kernel a partir das novas sources é basicamente o mesmo processo de quando instalou o sistema. A diferença é que pode utilizar a configuração do kernel antigo para criar uma configuração para o kernel novo. Usando a configuração antiga salva o usuário de passar por todas as opções do kernel (like make menuconfig) novamente.
A configuração do kernel é salva em um arquivo chamado .config No diretório que contém as sources do kernel. Um novo kernel pode ter opções ou recursos que o kernel antigo não possui, ou pode não ter mais um recurso ou opção que o kernel antigo ainda possua. A configuração do kernel especifica se os recursos e opções de um kernel devem ser ativados ou não, talvez incorporados ao kernel, ou talvez construídos como módulos que podem ser carregados no kernel em execução sob demanda. Assim, o arquivo de configuração do novo kernel pode ter novas entradas que o arquivo de configuração do kernel antigo não possui e pode não ter mais entradas que estejam presentes no arquivo de configuração do kernel antigo.
Para lidar com essas alterações do arquivo de configuração, o arquivo de configuração do kernel antigo precisa ser convertido em uma configuração que pode ser usada com o novo kernel. Este artigo mostra como fazer um novo kernel a partir de novas sources do kernel com a conversão do arquivo de configuração do kernel antigo.
Fazer um backup da configuração atual do kernel
É aconselhável fazer um backup da configuração do kernel para que as configurações anteriores não sejam perdidas. Afinal, muitos usuários dedicam um tempo considerável para descobrir a melhor configuração para o sistema, e perder essa informação é definitivamente desagradável.
É fácil fazer um backup da configuração atual do kernel:
root #
cd /usr/src/linux
root #
cp .config ~/kernel-config-`uname -r`
Desde que o symlink para as sources do kernel tenha sido definido corretamente, isso copia a configuração do kernel atualmente usado para o diretório home do root, renomeando a configuração para kernel-config- seguido pela versão do kernel atual em execução.
Definir symlink para novas sources do kernel
O symlink /usr/src/linux deve sempre apontar para o diretório que contém as sources do kernel que atualmente é executado. Isso pode ser feito de três maneiras:
- Instalando as sources do kernel com
USE="symlink"
- Configurando o link com eselect
- Atualização manual do link simbólico
Instalando as fontes do kernel com o USE flag symlink
Isso fará com que o /usr/src/linux aponte para as fontes do kernel recém-instaladas.
Se necessário, ele ainda pode ser modificado posteriormente com um dos outros dois métodos.
Configurando o link com eselect
Para definir symlink com eselect:
root #
eselect kernel list
Available kernel symlink targets: [1] linux-3.14.14-gentoo * [2] linux-3.16.3-gentoo
Isso fornece as sources de kernel disponíveis. O asterisco indica as sources escolhidas.
Para alterar as sources do kernel, e.g. Para a segunda entrada, faça:
root #
eselect kernel set 2
Atualização manual do link simbólico
Para definir o link simbólico manualmente:
root #
ln -sf /usr/src/linux-3.16.3 /usr/src/linux
root #
ls -l /usr/src/linux
lrwxrwxrwx 1 root root 19 Oct 4 10:21 /usr/src/linux -> linux-3.16.3-gentoo
Copiar a configuração anterior do kernel
A configuração do kernel antigo precisa ser copiada para o novo. Pode ser encontrado em vários lugares:
- Em procfs, se a opção do kernel Habilitar acesso ao .config através de /proc/config.gz foi ativada no kernel presente:
root #
zcat /proc/config.gz > /usr/src/linux/.config
- Do kernel antigo. Isso só funcionará se o kernel antigo tiver sido compilado com CONFIG_IKCONFIG:
root #
/usr/src/linux/scripts/extract-ikconfig /path/to/old/kernel >/usr/src/linux/.config
- No diretório /boot, se a configuração foi instalada lá:
root #
cp /boot/config-3.14.14-gentoo /usr/src/linux/.config
- No diretório do kernel atualmente em execução:
root #
cp /usr/src/linux-3.14.14-gentoo/.config /usr/src/linux/
- No diretório /etc/kernels/, embora
SAVE_CONFIG="yes"
é definido em /etc/genkernel.conf e genkernel for utilizado anteriormente:
root #
cp /etc/kernels/kernel-config-x86_64-3.14.14-gentoo /usr/src/linux/.config
Configurando o novo kernel
Para usar a configuração do kernel antigo com o novo kernel, ele precisa ser convertido. A conversão pode ser feita executando make silentoldconfig ou make olddefconfig. Use um ou outro, não ambos.
make silentoldconfig
A configuração a seguir é como a configuração baseada em texto com make config. Para novas opções de configuração, o usuário é solicitado a tomar uma decisão. Por exemplo:
root #
cd /usr/src/linux
root #
make silentoldconfig
Anticipatory I/O scheduler (IOSCHED_AS) [Y/n/m/?] (NEW)
A string (NEW) no final da linha está marcado a opção como nova. Da esquerda para a direita, em colchetes, são as possíveis respostas: Sim, Não, Módulos ou ? para mostrar a ajuda. É recomendado (i.e. padrão) a resposta capitalizada (aqui é S). A ajuda esclarece a opção ou driver.
Infelizmente make silentoldconfig não mostra muito mais informações para cada opção, como o contexto, por isso às vezes é difícil dar a resposta certa. Neste caso, o melhor caminho a seguir é lembrar o nome da opção e revê-lo depois através de uma das graphical kernel ferramentas de configuração do kernel.
make olddefconfig
Todas as novas opções de configuração devem ser definidas (i.e. padrão) usando make olddefconfig:
root #
cd /usr/src/linux
root #
make olddefconfig
make help
Use make help para ver outros métodos de conversão disponíveis:
root #
make help
Compilação
Quando módulos externos do kernel são instalados (como nvidia ou zfs), pode ser necessário executar make modules_prepare como descrito abaixo antes de compilar o kernel. Alguns módulos não podem ser instalados ou preparados antes que o kernel tenha sido construído.
Não esqueça de reconfigurar o bootloader para os novos arquivos do kernel, e reconstruir o initramfs caso seja utilizado.
Nesta etapa, siga o procedimento deste artigo: configuração manual.
Reinstalando módulos externos do kernel
Qualquer módulo externo do kernel, como módulos binários do kernel, precisam ser reconstruídos em cada novo kernel. Se o kernel ainda não foi construído, ele deve primeiro ser preparado para a construção dos módulos externos do kernel:
root #
make modules_prepare
Os pacotes que contêm módulos do kernel podem ser reconstruídos com @module-rebuild
root #
emerge --ask @module-rebuild
Solução de problemas de compilação
Ao presenciar problemas de compilação durante a reconstrução do kernel atual, uma ajuda seria a limpeza das sources do kernel. Certifique-se de fazer backup do arquivo .config, pois a operação irá removê-lo. Certifique-se de não usar .bak ou ~ de sufixo no backup pois make distclean irá limpar também.
root #
cp .config /usr/src/kernel_config_bk
root #
make distclean
root #
mv /usr/src/kernel_config_bk .config
Removendo kernel antigo
Veja em remoção do kernel.