quarta-feira, 8 de setembro de 2010

Nvidia no Fedora 14: O Tutorial

Quem acompanha a gente pelo identi.ca, já deve estar sabendo que eu andei tendo muitos problemas para instalar o driver Nvidia proprietário no Fedora 14 Alpha. Investiguei o problema e cheguei a conclusão que era uma configuração na compilação do Kernel do Fedora em si, que é compilado para não aceitar módulos que não sejam GPL. É, rídiculo, eu sei.


Alguns irão pensar no porquê desse que vos fala não ter simplesmente instalado o driver utilizando o prático repositório RPMFusion. Eu estou utilizando o Fedora 14 Alpha com Gnome, uma versão Alpha, para a qual o repositório em questão ainda não tem versão disponível - por razões óbvias, é claro. E um outro ponto: acho muito legal instalar o driver em modo texto.


Com a ajuda do embaixador do Fedora no meu estado, o LonelySpooky - diga-se de passagem dono do melhor blog sobre RPMs based no Brasil - que mais uma vez me aturou e foi super simpático e prestativo no email de resposta, consegui a solução para o problema. Ela não é simples, ela não é prática, muito menos rápida, mas é uma solução.


Primeiro vou contar o que será feito. Se o problema é na configuração com a qual o Kernel foi compilado, vamos simplesmente recompilá-lo sem essa maldita configuração. Você pode estar pensando que será complicado, você precisará reconfigurar o Kernel totalmente, muito chato, muito trabalhoso. Mas até que não é, mesmo para alguém que não entenda nada de fazer um RPM. Antes de tudo, vá ao site da Nvidia e baixe o driver proprietário referente a sua placa.


É lógico que, em como toda e qualquer compilação de qualquer coisa, precisam ser instaladas. São menos do que eu achei que seriam (juro que pensei que teria que instalar até o Padre Quevedo para o negócio funcionar...). Vamos ao comando:




su -c "yum install rpmdevutils yum-utils ncurses-devel gcc redhat-rpm-config xmlto asciidoc elfutils-devel zlib-devel binutils-devel"



Baixadas as dependências, é hora de baixar o nosso arquivo src em si. O comando também é bem simples:



yumdownloader --source kernel

Esse comando irá baixar o pacote src do Kernel que está  atualmente em uso. Baixado o Kernel, vamos entender porque baixamos o src.rpm ao invés do código fonte do Kernel logo. Pensando em velocidade e praticidade, o pacote src.rpm é muito melhor, uma vez que ele já vem preparado para ser "fechado" em RPM. Ou seja, enquanto com o código fonte do Kernel você precisaria arrumar tudo, criar o arquivo *.spec e essas coisas, com o pacote "prépronto" você só dá alguns poucos comandos e corre para o abraço.


Dito isso, vamos a instalação do arquivo src.rpm. Uma coisa que é fundamental esclarecer nessa parte é que esse comando NÃO, isso mesmo, NÃO deve ser executado como root, execute o comando sem 'su -c' ou 'sudo'. Não queremos dar poderes demais para o nosso pacote e criar um monstrinho que irá engolir seu PC. Primeiro criamos a estrutura de diretórios para a compilação, famoso "ambiente de desenvolvimento:



rpmdev-setuptree

E depois instalamos o nosso Kernel src (como usuário normal):



rpm -ivh kernel*.src.rpm

Essa foi a parte mais tranquila do tutorial. Agora vamos a parte chata. A nossa configuração malvada ficará dentro de ~/rpmbuild/SOURCES e estará dentro do arquivo config-nodebug. Fácil, né? #NOT. Você vai abrir o arquivo indicado e deixá-lo exatamente assim (não vá fazer a besteira de copiar e colar, ok?):



CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_DEBUG=y
CONFIG_SND_PCM_XRUN_DEBUG=y

# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_PROVE_RCU is not set
# CONFIG_PROVE_RCU_REPEATEDLY is not set
# CONFIG_DEBUG_PER_CPU_MAPS is not set
# CONFIG_CPUMASK_OFFSTACK is not set

# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set

Como você irá perceber, essa é só uma pequena parte do arquivo e, ao abrir o seu, ele não estará assim, afinal de contas, o meu já está todo configurado. Basicamente você irá colocar um '#' no inicio da linha, acompanhado de um espaço e ao final, no lugar de "=y" você deverá colocar "is not set". Faça isso em todas as linhas, menos nas três primeiras.


Agora chegou a hora de compilar em si. Vamos nos mudar para o diretório SPECS e começar a festa:




cd ~/rpmbuild/SPECS
rpmbuild -bb --without debug --with baseonly kernel.spec



Recomendo que você não espere a compilação acabar, pois ficará com tendinite no olho (?????)  de tanto olhar para tela. Vá dormir, passear no bosque, namorar, fazer qualquer coisa que demore, porque o processo irá demorar. Eu iniciei o meu era pouco mais de 8:00h e só terminou por volta das 15:00h. E não fique tentando utilizar o computador enquanto a compilação ocorre, caso contrário poderá aumentar ainda mais esse tempo.


Depois de terminada a compilação, instale os pacotes desejados. Ele irá criar o kernel normal, junto com o headers, o devel e o debuginfo e o Kernel-PAE e os mesmo pacotes extras. Instale os que você desejar. Mas esse ainda não é o fim do nosso tutorial.


O driver Nouveau conflita com o driver Nvidia. Por isso, antes de instalar o driver Nvidia você precisa dar um fim ao driver Nouveau. Vamos adicioná-lo a lista negra. Para isso, após a instalação do seu kernel novo, abra o arquivo /boot/grub/grub.conf como root e adicione o seguinte termo ao final da linha do kernel:



rdblacklist=nouveau

Ele ficará mais ou menos assim:
title Fedora (2.6.33.5-112.fc13.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.33.5-112.fc13.x86_64 ro root=/dev/mapper/vg_fedorabox-LogVol01 rd_LVM_LV=vg_fedorabox/LogVol01 rd_LVM_LV=vg_fedorabox/LogVol00 rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=en rhgb quiet rdblacklist=nouveau vga=792
initrd /initramfs-2.6.33.5-112.fc13.x86_64.img

Pronto, agora basta reiniciar seu sistema. Quando a tela do GDM aparecer, não se logue. Ao invés disso, pressione CTRL+ ALT + F2 para entrar no modo texto. Faça login nele. Depois disso, execute os seguintes comandos:
su -
init 3
cd <local onde está o driver NVIDIA.run>
chmod +x <Nome do Driver>
systemctl stop prefdm.service
./<Nome do Driver>

Básicamente, esse comando loga você como root no modo texto, muda o diretório de trabalho para o local onde está o driver Nvidia, torna esse driver executável. Depois disso, o próximo comando para o modo gráfico e em seguida é só executar a instalação do driver, sem problemas. Depois da instalação, apenas reinicie o sistema. O seu driver estará instalado.

Com o driver Nvidia instalado, eu finalmente pude utilizar e testar o Gnome Shell no Fedora 14  e ter mais performance de vídeo até.

Agradecimentos:

LonelySpooky, embaixador do Fedora no Rio de Janeiro e dono do Blog LonelySpooky.

Fontes:

http://www.projetofedora.org/wiki/index.php/Recompilando_o_kernel
http://forums.fedoraforum.org/showpost.php?p=1262379&postcount=4
http://www.if-not-true-then-false.com/2009/howto-install-nvidia-driver-on-fedora-and-just-disable-the-nouveau-driver/

3 comentários:

  1. Muito bom o tutorial Cleiton! Abçs!

    ResponderExcluir
  2. Não consigo executar "rpmdev-setuptree"
    recebo a seguinte mensagem:
    $ rpmdev-setuptree
    bash: rpmdev-setuptree: command not found...

    ResponderExcluir
  3. Você tem certeza de que instalou todas As dependências indicadas?
    Porque o erro me parece ser a
    ausência do pacote 'rpmdevutils'.

    ResponderExcluir