segunda-feira, 26 de março de 2012

Tutorial Instalando Codecs proprietários no Debian


Olá, estou aqui, postando sobre uma tarefa simples e corriqueira, para todos os usuários linux.
A instalação de codecs não livres no Debian. São tantos que a gente sempre esquece de alguns.
Neste tutorial, ensino a instalar apenas os mais comuns.
Primeiro, iremos habilitar os repositórios que contém os pacotes que desejamos (multimídia).
Em nosso caso, os repositórios non-free.
Veja abaixo, os repositórios que eu utilizei:


" deb http://http.us.debian.org/debian/ squeeze main contrib non-free

  deb http://security.debian.org/ squeeze/updates main contrib non-free
  deb http://ftp.br.debian.org/debian/ squeeze-updates main
  deb-src http://ftp.br.debian.org/debian/ squeeze-updates main
  deb http://ftp.br.debian.org/debian/ squeeze main contrib non-free
  deb http://www.debian-multimedia.org squeeze main non-free "

Use o editor de texto de sua preferência, para incluir os repositórios no arquivo
/etc/apt/source.list.
Como podemos ver, na figura abaixo:



Obs: Notem, que no meu caso, usei o editor vim para editar o arquivo  /etc/apt/source.list.




Aqui temos a pegadinha: O repositório
"deb http://www.debian-multimedia.org squeeze main non-free " Precisa de uma "PUBKEY" para funcionar. Ai você me pergunta, onde diabos eu 
arranjo uma PUBKEY ? Ora, muito simples é só fazer download com o comando baixo:




"wget -c http://www.debian-multimedia.org/pool/main/d/debian-multimedia-keyring/debian-multimedia-keyring_2010.12.26_all.deb"

Como podemos ver na figura abaixo: 



Após baixarmos o pacote com o wget,  instalamos ele como o comando abaixo:

# dpkg -i debian-multimedia-keyring_2010.12.26_all.deb

Como vemos na figura:


Após adicionarmos os repositórios nós devemos habilita-los
Com o comando # apt-get update
veja figura abaixo:


Após a configurarmos os repositórios, agora podemos, instalar os codecs e os players propriamente ditos.
conforme você pode observar,  não instalei todos os pacotes de uma vez. Pois quando, estava fazendo a instalação dos codecs, não pensava em escrever este tutorial e  não gosto
de instalar muitos pacotes de uma vez. Gosto de testar  o funcionamento de cada pacote, ou uma pequena quantidade pois, se der algum problema, fica mais fácil identificar e resolver.
Começaremos  instalando primeiro o comando abaixo:


# apt-get install w64codecs
Como vemos na figura abaixo.

Em seguida, instalaremos o pacote ffmpeg com o comando:
#apt-get install ffmpeg
O pacote ffmpeg, provê suporte a vídeo e áudio  mpeg, para vários players.
Em seguida, instalamos o pacote lame. Ele provê, suporte ao formato mp3
Instalaremos também os pacotes vlc ( player de áudio e vídeo), audacios (player de áudio), audacios-plugins, mplayer (o nome já diz :.) ) totem-xine(player padrão do gnome), totem-plugins  Instalamos ele com o comando:
#apt-get install lame vlc audacious audacious-plugins mplayer totem-xine totem-plugins 
Veja figura abaixo:



Em seguida, não ocorrendo erros instalamos o pacote x264, que prove suporte melhorado a vídeos
em formato avi. Instalamos ele com o comando:
# Apt-get install x264

Veja figura abaixo:



Por último, mas não menos importante, instalaremos o smplayer. Um player, baseado no mplayer mas que, vem com suporte a mais formatos de áudio vídeo incluindo, o famoso rmvb. Instalamos ele com o comando:
#apt-get install smplayer
Como podemos observar na figura abaixo:


 Caros Leitores,  finalmente acabamos de instalar suporte aos mais diversos codecs e formatos de audío e vídeo espero que este tutorial seja útil a vocês. Gostaria que vocês comentasse, sugerissem mais opções de
formatos e player. desde já agradeço a todos.



domingo, 18 de março de 2012

Opções de comandos para compilação e gerenciamento de módulos de kernel

Conforme prometido, postarei sobre algumas opções do comando make e outros comandos que podem facilitar o processo de compilação de kernel no Debian e em outras distribuições.
Então chega de conversa,  mãos ao teclado.
Começaremos falando primeiramente sobre o que é o kernel.
O kernel Linux é o núcleo do sistema operacional, na maioria das vezes é confundido com o próprio sistema como um todo. Mas, o correto de ser dizer é o Sistema GNU/Linux. Uma vez que o kernel  é utilizável devido a ser acompanhado, por diversos aplicativos do projeto GNU.
O kernel é composto por diversos módulos. Sendo que, cada módulo gerência um ou mais recursos da maquina e do sistema.
Obtendo o kernel:
Há varias maneiras de obter o código fonte do kernel para compilação mas, as duas mais comuns são:
Primeira maneira: baixar o source do kernel através do gerenciador de pacotes da sua distribuição.
Exemplos: apt, yum , synaptic etc. Através do gerenciador de pacotes da sua distribuição você encontrara
diversas opções de kernel para download com várias customizações.
Segunda maneira: baixar: uma imagem oficial do kernel Vanilla, em: http://www.kernel.org lá você encontrará a imagem oficial do kernel  linux e também patches de correção e atualização. Distribuídos sobre a forma de código fonte.
Numeração da versão do kernel:
A numeração do kernel é  composta por 04 números no formato no formato A.B.C.D sendo que D nem sempre está presente. os números indicam se o kernel é recente.
Os números no exemplo abaixo representam
3.  -Versão Principal
2.  - Numero de Revisão Principal, até a versão 2.4 um número par, representava uma versão
estável e um impar uma versão instável.
7  - Número de revisão secundário, nas versões antigas determinava correções e patches de segurança.
hoje determina a adição de novos recursos exemplo: drivers de dispositivos.
D - Nem sempre utilizado mais indica a revisões de segurança urgentes que alteram detalhes das revisões secundárias. 
Alem da numeração a versão do kernel pode ter sufixos que informam que o kernel é diferente do oficial.
Os mais comuns São rc (release candidate) e mm.

Comando make principais opções: 


Opções de interface de compilação:


# make menuconfig: Provê uma interface de modo texto baseada na biblioteca ncurses para configuração das opções de compilação do kernel .
# make nconfig Provê uma interface de menus de configuração baseada em ncurses  muito similar, a opção
menuconfig
# make config: Provê uma interface de configuração em modo texto orientada a linha baseada em perguntas e respostas  (intermináveis...) para configuração das opções de compilação do kernel
# make gconfig:  Provê uma interface de menus de configuração baseada em GTK ideal para quem tem trauma do famigerado modo texto
# make xconfig: Provê uma interface de menus de configuração baseada em Qt .
Opções para compilação
# make  oldconfig: gera um novo .config utilizando um antigo fornecido como base ideal para quem
salvou um .config de uma compilação anterior já marcando as opções selecionadas anteriormente.


Opções  básicas para utilizar antes da compilação:


# make clean Opção para limpar arquivos temporários gerados por uma compilação anterior
ideal para compilar em seguida módulos de terceiros.
# make mrproper Remove todos os arquivos gerados por uma compilação anterior inclusive o .config 

Opções  básicas de compilação:

# make bzImage Opção que gera a opção a imagem de kernel propriamente dita
com o nome de bzImage
#  make - j4  bzimage a opção -j numero divide a compilação em 04 processos simultâneos
agilizando a compilação ideal para que tem processadores com mais de um núcleo
# make install  Instala a imagem do kernel em /boot 
# make modules  Compila os módulos do kernel
# make modules_install    Instala os módulos compilados


Opções personalizadas de configuração:


#  make rpm-pkg  Gera um pacote rpm do kernel compilado com o código fonte
#  make binrpm-pkg Gera um pacote rpm do kernel compilado sem o código fonte
#  make deb-pkg  Gera um pacote .deb do kernel compilado
As 03 opções acima, são ideais para quem precisa replicar o kernel em diversas maquinas com o mesmo
hardware.
# make tar-pkg  Gera um arquivo tar do kernel sem compressão.

Gerando imagem initrd.


O comando  mkinitramfs:

Outro comando, muito importante para compilação é o mkinitramfs.
Este comando, cria a Initial Ram disk  (initrd) ou seja, uma imagem de disco para inicialização que é montada inicialmente como um sistema de arquivos temporários. O qual fornece, o suporte inicial aos dispositivos básicos do hardware e sistemas de arquivos. Como ext2, ext3, reiserfs. Todas as configurações deles estão definidas no arquivo /etc/initramfs-tools/initramfs.conf.  Neste arquivo são definidos quais módulos incluídos individualmente ou em grupos. Seu uso no Debian é:
# mkinitramfs -o initrd.img-3.2.7C01  3.2.7C01
No Red Hat e Fedora é usado o comando :
# Mkinitrd -c -k 3.2.7C01 -o /boot/initrd-3.2.7C01
Ele possui mais opções de configuração,  por exemplo: a opção -m  módulo1:modulo2    que determina  que os módulos desejados sejam incluídos na imagem.

Aplicando patches ao kernel:
Aplicar um patch ao kernel é um procedimento muito simples, para isso usa-se o comando patch.
Antes de aplicarmos um patch, devemos verificar com atenção se o patch que aplicaremos é o patch para o referido kernel pois, cada kernel tem seu referido patch.
O comando bzcat  deve ser aplicado dentro deve ser aplicado dentro do diretório padrão de compilação
no caso /usr/scr/linux
como no exemplo abaixo:
bzcat pacth-2.6.30.3.bz2 | patch  -p1


Removendo um patch aplicado:
Para remover um patch aplicado usamos o comando :
# bzcat pacth-2.6.30.3.bz2 | patch  -p1 -R

Um detalhe muito importante é que não podemos aplicar 02 patches ao mesmo kernel.
Então, para aplicarmos um novo patch, necessitamos remover o patch aplicado antes.

Gerenciamento de módulos do kernel:

Temos uma série de comandos e arquivos de configuração, que controlam o funcionamento do kernel e seus
módulos. Seja os carregando, impedindo seu carregamento ou descarregando da memória, ou passando parâmetros para a execução dos mesmos. Falaremos sobre os principais comandos para gerenciamento dos módulos do kernel.

# lsmod:  O comando lsmod, lista os módulos de kernel em execução.
vejo o exemplo de saída do lsmod:

root@notebookhp:/home/ricardo# lsmod
Module                  Size  Used by
pci_stub                1309  1
vboxpci                11721  0
vboxnetadp              4667  0
vboxnetflt             14085  0
vboxdrv              1762739  3 vboxpci,vboxnetadp,vboxnetflt
ipt_MASQUERADE          1554  1
iptable_nat             4299  1
nf_nat                 13388  2 ipt_MASQUERADE,iptable_nat
nf_conntrack_ipv4       9833  3 iptable_nat,nf_nat
nf_conntrack           46535  4 ipt_MASQUERADE,iptable_nat,nf_nat,nf_conntrack_ipv4
nf_defrag_ipv4          1139  1 nf_conntrack_ipv4
ip_tables              13915  1 iptable_nat
x_tables               12845  3 ipt_MASQUERADE,iptable_nat,ip_tables
parport_pc             18855  0
------------------------------------------------------------------------------------------------------------
Saída do comando cortada devido ao tamanho

A primeira coluna da saída do comando,  indica o nome dos módulos atualmente em execução.
A segunda coluna, mostra o tamanho em bytes ocupados pelos módulos na memória.
A terceira coluna, mostra o numero de  recursos ou módulos ou que estão utilizando o módulo indicado
na primeira coluna. Quando os módulos listados não apresenta módulos dependentes é porque,
eles provavelmente foram compilados internamente no kernel.


# insmod: O comando insmod carrega na memória o módulo desejado
Seu uso é : #  insmod  caminho_completo_modulo  opções.
A desvantagem do comando insmod é que ele não carrega as dependência necessárias
para o carregamento do módulo sendo necessário subir as dependências manualmente.
Fato que as vezes pode ser complicado.

# rmmod: O comando rmmod  descarrega da memória sua sintaxe é
# rmmod  nome_do_módulo o comando rmmod  só consegue descarregar módulos que não
estão sendo utilizados. Módulos em uso não são descarregados.

# modprobe:  Com o comando modprobe gerência a carga e descarga de módulos na memória.
Com ele podemos passar parâmetros para a execução dos módulos que queremos carregar.
Formas de uso:
Carregar módulos de kernel na memória:
# modprobe nome_do_modulo parâmetro(opcional)
O comando modprobe carrega inclusive as dependências dos módulos os quais foram solicitados
o carregamento.
Descarregar módulos:


# modprobe -r nome_do_módulo descarrega o módulo desde que não esteja sendo utilizado.
o comando descarrega também sua dependências se elas não estiverem sendo utilizadas por outros
recursos.


# modinfo: O comando modinfo provê informações detalhas sobre sobre os módulos do kernel.
Informações como caminho para o módulo, autor, versão, hardware suportado, parâmetros de configuração suportados e muitos outros.

Abaixo vemos um exemplo  de saída do comando modinfo.


root@notebook:/home/ribeiro# modinfo libata
filename:       /lib/modules/2.6.32-5-amd64/kernel/drivers/ata/libata.ko


version:        3.00
license:        GPL
description:    Library module for ATA devices
author:         Jeff Garzik
srcversion:     762274E81373BA6D34D663D
depends:        scsi_mod
vermagic:       2.6.32-5-amd64 SMP mod_unload modversions
parm:           acpi_gtf_filter:filter mask for ACPI _GTF commands, set to filter out (0x1=set xfermode, 0x2=lock/freeze lock, 0x4=DIPM, 0x8=FPDMA non-zero offset, 0x10=FPDMA DMA Setup FIS auto-activate) (int)
parm:           force:Force ATA configurations including cable type, link speed and transfer mode (see Documentation/kernel-parameters.txt for details) (string)
parm:           atapi_enabled:Enable discovery of ATAPI devices (0=off, 1=on [default]) (int)
parm:           atapi_dmadir:Enable ATAPI DMADIR bridge support (0=off [default], 1=on) (int)
parm:           atapi_passthru16:Enable ATA_16 passthru for ATAPI devices (0=off, 1=on [default]) (int)
parm:           fua:FUA support (0=off [default], 1=on) (int)
parm:           ignore_hpa:Ignore HPA limit (0=keep BIOS limits, 1=ignore limits, using full disk) (int)
parm:           dma:DMA enable/disable (0x1==ATA, 0x2==ATAPI, 0x4==CF) (int)
parm:           ata_probe_timeout:Set ATA probing timeout (seconds) (int)
parm:           noacpi:Disable the use of ACPI in probe/suspend/resume (0=off [default], 1=on) (int)
parm:           allow_tpm:Permit the use of TPM commands (0=off [default], 1=on) (int)
parm:           atapi_an:Enable ATAPI AN media presence notification (0=0ff [default], 1=on) (int)


#################################################################################


Obs:Para listar apenas as opções de parâmetros configuração utiliza-se a opção -p.
Segue abaixo exemplo de saída do comando modinfo com a opção -p


root@notebook:/home/ribeiro# modinfo libata -p
atapi_an:Enable ATAPI AN media presence notification (0=0ff [default], 1=on)


allow_tpm:Permit the use of TPM commands (0=off [default], 1=on)
noacpi:Disable the use of ACPI in probe/suspend/resume (0=off [default], 1=on)
ata_probe_timeout:Set ATA probing timeout (seconds)
dma:DMA enable/disable (0x1==ATA, 0x2==ATAPI, 0x4==CF)
ignore_hpa:Ignore HPA limit (0=keep BIOS limits, 1=ignore limits, using full disk)
fua:FUA support (0=off [default], 1=on)
atapi_passthru16:Enable ATA_16 passthru for ATAPI devices (0=off, 1=on [default])
atapi_dmadir:Enable ATAPI DMADIR bridge support (0=off [default], 1=on)
atapi_enabled:Enable discovery of ATAPI devices (0=off, 1=on [default])
force:Force ATA configurations including cable type, link speed and transfer mode (see Documentation/kernel-parameters.txt for details)
acpi_gtf_filter:filter mask for ACPI _GTF commands, set to filter out (0x1=set xfermode, 0x2=lock/freeze lock, 0x4=DIPM, 0x8=FPDMA non-zero offset, 0x10=FPDMA DMA Setup FIS auto-activate)


################################################################################
Obs:  O comando #  lspci não gerencia ou  interage diretamente com os módulos mas é uma ótima ferramenta para levantamento do hardware e consequentemente seus módulos

Comando uname principais opções:
 O comando uname fornece varias informações sobre o kernel em execução e a máquina que o
está executando. Veja como exemplo a saída deste comando com a opção -a


root@notebook:/home/ribeiro# uname -a
Linux notebook 2.6.32-5-amd64 #1 SMP Tue Jun 14 09:42:28 UTC 2011 x86_64 GNU/Linux

 A opção -a fornece todas a informações sobre o kernel atual em execução.
Porém podemos obter informações isoladas utilizando outras opções como as opções abaixo:

uname  -n nome da maquina (hostname)
uname -o Sistema operacional
uname  -p  Processador da máquina 
uname -r Versão do kernel em execução
uname -s Nome do kernel
uname -v Versão de compilação do kernel

Obs: comando uname  dependendo da opção usada pode apresentar valores escrito como unknow
como na saida abaixo:

root@notebook:/home/ribeiro# uname -p
unknown

Isto ocorre devido ao kernel ter sido compilado de forma genérica, sem informação especifica.
Neste caso, sobre o processador, o comando uname extrai sua informações dos arquivos existentes em:
/proc/sys/kernel/ 



Espero que este texto seja útil para vocês. Aceito alias desejo, criticas positivas ou negativas sobre o texto, o assunto e eventuais erros por favor comente poste aqui seu comentário.
Assim, poderei corrigir o mais rápido possível.
Desde já agradeço a todos os leitores a colaboração.

Referências:
Guia foca linux, Linux ManPages dos comandos lsmod, insmod, uname, modprobe, make e etc
Documentção do kernel e www.kernel.org