Incluir automaticamente as últimas versões do kernel no menu GRUB / GRUB2 na atualização do kernel

3

O que eu gosto no Ubuntu é que o menu GRUB sempre permite que eu escolha a última versão do kernel (padrão) ou a segunda mais recente (etc.) no momento da inicialização.

No Arch Linux, não posso fazer isso por padrão. As únicas opções são imagens normais e de fallback, e ambas inicializam o kernel mais recente. Como posso alcançar o comportamento semelhante ao Ubuntu no Arch? Eu uso o Grub e o Grub2, mas acho que não precisaria configurar muito o bootloader. Provavelmente incluirá as imagens que ele encontra em /boot no menu automaticamente. Eu posso estar errado, no entanto.

Então, o que eu preciso, do mais importante para o menos importante, é:

  1. A nova imagem do kernel criada por mkinitcpio durante a atualização não sobrescreve a anterior;
  2. Que o kernel mais recente está presente no menu do carregador de inicialização como opção padrão;
  3. As versões mais antigas são excluídas do menu ou ocultadas no item de menu "versão mais antiga" (não tão importante) .

Como alguém faria isso? Devo procurar em mkinitcpio config ou talvez pacman config? Eu tentei realmente olhar para arquivos de configuração para ambos, sem idéias até agora.

    
por Lev Levitsky 11.10.2012 / 13:57

2 respostas

1

Veja este bug: link

E este blogpost: link

Até agora não encontrei uma boa solução, mas atualizarei se o fizer.

Uma coisa a ter em mente além do grub, do kernel e do initrd é / usr / lib / modules /. Quando o pacote linux atualiza, o pacote antigo apaga suas pastas em / usr / lib / modules / eo novo kernel adiciona seus novos módulos. Se você quer que ambos os kernels funcionem, você vai querer os dois conjuntos de módulos. E / usr / src / contém os cabeçalhos do kernel (necessários para construir novos módulos, como os drivers da nvidia), então você provavelmente também desejará mantê-los.

Os passos que eu acho que seriam algo como:
1. Detectar pacote linux vai ser atualizado.
2. Faça backup do que será excluído na desinstalação (/ usr / src / $ (uname -r), / usr / lib / modules / $ (uname -r), /boot/{vmlinuz-linux,initramfs-linux.img , initramfs-linux-fallback.img})
3. Deixe o pacman fazer sua atualização | 4. Restaure tudo em 2 (provavelmente dando um novo nome ao material em / boot 5. Edite o grub ou o que for.

Etapas alternativas (um pouco menos boas)
 1. Deixe a atualização do pacman |  2. Detectar o kernel foi atualizado
 3. de /var/cache/packman/pkg/linux-${previous_version}-pkg.tar.xz extrair / usr / src /, / usr / lib / {modules, extramodules}, e / boot / vmlinuz (renomeando o um em / boot, obviamente)
 4. execute o mkinitcpio com a opção -k para construir o init antigo  5. Editar grub ou qualquer outra coisa

Neste método alternativo, você perde seus módulos de terceiros (caixa virtual, ATI / Nvidia, etc), mas pode ser algo que você pode executar a partir do cron e detectar automaticamente atualizações do kernel.

    
por 12.10.2012 / 23:47
0

até onde eu me lembro, o kernel mais novo é sempre o primeiro no arquivo /boot/grub/grub.conf. Para carregar automaticamente a primeira entrada, você precisa colocar as duas linhas seguintes no topo do grub.conf

default         0
timeout         1

O carregador do grub aguarda o tempo timeout em segundos. E default é o kernel x na lista de kernels.

sobre mkinitcpio : não acho que haja um caminho fácil. Mas eu achei que sempre o último e o atual kernel estarão disponíveis no momento da inicialização e o kernel mais novo está sempre na postagem 0 no grub.conf.

    
por 11.10.2012 / 14:09