sábado, 29 de março de 2008

Acelerando o boot do Slackware 11

Bem essa dica aqui eu achei no blog do meu amigo o CIDOLOCO

Ok, eu disse que não iria mais postar tantos tutoriais, mas estava aqui testando algumas coisas para tentar fazer meu celular funcionar no Linux, então fui dar um reboot porque estava fazendos uns testes com o live-cd do Ubuntu. geralmente quando coloco meu computador para iniciar no inicio do dia, vou fazer algumas outras coisas, como abrir a janela, ligar a TV (sim, eu não consigo ficar o PC sem a TV ligada) e outras coisas. Com isso, toda vez que chego no computador, é só colocar a senha e iniciar o KDE. Eu já sabia que demorava um pouco para iniciar, mas como eu nao precisava esperar o boot, nunca me preocupei em dar uma acelerada no boot. Pois então, eu estava em um momento inspirado, e realmente estava achando que meu celular iria finalmente funcionar (só achei mesmo) no Linux. E eu naquele nervosismo tive que esperar o sistema todo iniciar após sair do Ubuntu. Aí que eu vi... Cacete que porcaria demorada! Bom, dei uma olhada lá e vi que maioria da demora eram coisas desnecessárias... HotPlug (sim, ele é desnecessário e você vai ver isso), ScanLuns e etc. Também algumas coisas bem demoradas que poderiam ser "aceleradas", como o LDConfig. Então eu resolvi tirar essas coisas do boot, e achar algo mais rápido que as substituíssem. Realmente eu não tenho nada para fazer as 6 da manhã, mas não é que deu certo? Então, vamos lá! :D

Ok, a primeira coisa a se fazer é iniciar o sistema com todos os scripts de detecção de hardware ativados, do modo mais demorado mesmo. Como você pode ver, o HotPlug é demorado pra caramba! E o que ele faz? Bom, ele simplesmente detecta o hardware do computador. Mas você não troca de hardware todo dia, então seria isso realmente necessário? Não! Simplesmente o que pode ser feito é o seguinte: carregar apenas os modulos que ele detecta na inicialização. Não entendeu? Então abra o terminal como root, e digite:

lsmod


Você vai ver uma lista de modulos, como aqui:

nvidia               3784044   6
slamrmo 127972 0 (unused)
slmdm 1075040 0 [slamrmo]
printer 7520 0 (unused)
ipt_state 504 4
iptable_filter 1644 1
ip_conntrack_irc 2768 0 (unused)
ip_conntrack_ftp 3568 0 (unused)
ipt_REJECT 3096 1
iptable_nat 16838 0 (unused)
iptable_mangle 2072 0 (unused)
ip_conntrack 17764 2 [ipt_state ip_conntrack_irc ip_conntrack_ftp iptable_nat]
ip_tables 12096 7 [ipt_state iptable_filter ipt_REJECT iptable_nat iptable_mangle]
serport 1256 0 (unused)
serio 956 0 [serport]
analog 7552 0 (unused)
pcigame 1352 0 (unused)
joydev 5568 0 (unused)
input 3104 0 [analog joydev]
usb-ohci 18856 0 (unused)
usb-storage 63520 0 (unused)
usbcore 56812 0 [printer usb-ohci usb-storage]
snd-pcm-oss 28928 0 (unused)
snd-mixer-oss 11928 0 [snd-pcm-oss]
snd-seq-oss 23104 0 (unused)
snd-seq-midi-event 3208 0 [snd-seq-oss]
snd-seq 33552 2 [snd-seq-oss snd-seq-midi-event]
snd-trident 22596 1
gameport 1388 0 [analog pcigame snd-trident]
snd-util-mem 1152 0 [snd-trident]
snd-ac97-codec 68160 0 [snd-trident]
snd-pcm 52804 1 [snd-pcm-oss snd-trident snd-ac97-codec]
snd-timer 13168 0 [snd-seq snd-pcm]
snd-mpu401-uart 3120 0 [snd-trident]
snd-rawmidi 12224 0 [snd-mpu401-uart]
snd-seq-device 3716 0 [snd-seq-oss snd-seq snd-trident snd-rawmidi]
snd 34304 0 [snd-pcm-oss snd-mixer-oss snd-seq-oss snd-seq-midi-event snd-seq snd-trident snd-util-mem snd-ac97-codec snd-pcm snd-timer snd-mpu401-uart snd-rawmidi snd-seq-device]
snd-page-alloc 4980 0 [snd-mixer-oss snd-seq-oss snd-seq snd-trident snd-pcm snd-timer snd-rawmidi snd-seq-device snd]
soundcore 3300 6 [snd]
isa-pnp 29328 0 (unused)
sis900 12556 0 (unused)
crc32 2880 0 [sis900]
pcmcia_core 39492 0
ide-scsi 9392 0
agpgart 45092 0


A lista no meu computador é enorme, talvez no seu não seja. Alguns modulos aí não são adicionados pelo HotPlug, eu que coloquei para serem carregados na inicialização, como os modulos relativos ao joystick. Bom, agora você já sabe tudo que o HotPlug demora um tempão detectando no boot, ou seja, agora não é mais necessário detectar nada, você ja sabe tudo que deve ser carregado, simple não? Agora vem a parte mais trabalhosa. Abra um editor de textos (como qualquer usuário, no precisa ser como root) e cole a saída do lsmod. Você também pode fazer isso com:

lsmod >> arquivo.txt


Após isso, apague todos os numeros e etc, deixe apenas uma lista com o nome dos modulos, como aqui:

nvidia
slamrmo
slmdm
printer
ipt_state
iptable_filter
ip_conntrack_irc
ip_conntrack_ftp
ipt_REJECT
iptable_nat
iptable_mangle
ip_conntrack
ip_tables
serport
serio
analog
pcigame
joydev
input
usb-ohci
usb-storage
usbcore

(...)


Eu dei uma reduzida no exemplo, mas você deve fazer isso com todas as linhas do lsmod. Após isso, cole um "modprobe" na frente do nome de cada módulo. Você simplesmente pode deixar todos os modulos na mesma linha, e usar apenas um modprobe, mas fazendo um de cada vez é mais facil de achar erros no script que será criado. Erros? Sim, Erros. Como você pode ver no lsmod, alguns módulos dependem de outros, isso significa que certos modulos devem ser carregados antes dos outros, se não você receberá uma mensagem de erro e nada será carregado. Essa ordem você pode ver no próprio lsmod, apenas veja quais os módulos que tem mais dependencia, e vá organizando-os. Separe os modulos de som, os de video e etc, e então organize quais de som devem ser carregados antes, depois os de video e assim vai indo. A maneira com que eu organizei pode ser vista a seguir:

modprobe sis900
modprobe crc32
modprobe pcmcia_core
modprobe ide-scsi
modprobe isa-pnp

modprobe soundcore
modprobe snd
modprobe snd-seq-device
modprobe snd-page-alloc
modprobe snd-trident
modprobe snd-seq
modprobe snd-pcm
modprobe snd-util-mem
modprobe snd-ac97-codec
modprobe snd-timer
modprobe snd-seq-oss
modprobe snd-pcm-oss
modprobe snd-mixer-oss

modprobe usbcore
modprobe usb-storage
modprobe usb-ohci

modprobe input
modprobe gameport
modprobe joydev
modprobe pcigame
modprobe analog
modprobe ns558

modprobe serio
modprobe serport

modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_REJECT
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe iptable_filter
modprobe ipt_state

modprobe printer

modprobe slmdm country=BRAZIL
modprobe slamrmo

modprobe agpgart
modprobe nvidia


Agora que está tudo organizado, você pode colocar uma mensagem para que você saiba quando os modulos forem carregados no boot. Para isso, use o echo. Se você digitar no terminal:

echo "Away!"


Você verá que aparecerá a palavra "Away!". O echo serve para isso, para colocar textos na saida do terminal. Então, você pode colocar alguns textos avisando o que está sendo carregado. Para isso faça como abaixo:

echo "Iniciando modulos..."
modprobe sis900
modprobe crc32
modprobe pcmcia_core
modprobe ide-scsi
modprobe isa-pnp

echo "Iniciando modulos de som..."
modprobe soundcore
modprobe snd
modprobe snd-seq-device
modprobe snd-page-alloc
modprobe snd-trident
modprobe snd-seq
modprobe snd-pcm
modprobe snd-util-mem
modprobe snd-ac97-codec
modprobe snd-timer
modprobe snd-seq-oss
modprobe snd-pcm-oss
modprobe snd-mixer-oss

echo "Iniciando modulos USB..."
modprobe usbcore
modprobe usb-storage
modprobe usb-ohci

echo "Iniciando modulos de joystick..."
modprobe input
modprobe gameport
modprobe joydev
modprobe pcigame
modprobe analog
modprobe ns558

echo "Iniciando modulos de I/O serial..."
modprobe serio
modprobe serport

echo "Iniciando modulos do IP-Tables..."
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_REJECT
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe iptable_filter
modprobe ipt_state

echo "Iniciando modulos de impressora..."
modprobe printer

echo "Iniciando modulos do modem..."
modprobe slmdm
modprobe slamrmo country=BRAZIL

echo "Iniciando modulos do video..."
modprobe agpgart
modprobe nvidia


Caso você saiba os códigos para colorir os textos, você pode usá-los no script, para que fique mais bonitinho. Bom, como o boot do meu Slackware é todo preto e branco mesmo, eu não vou colocar corzinhas abichornadas. P: Agora, que o script está pronto, você já pode desativar o HotPlug. Abra um terminal como root e digite PKGTOOL, selecione setup, marque a opção hotplug. Após isso responda NO e saia do PKGTOOL. Você também pode apenas tirar a permissão de execução do /etc/rc.d/rc.hotplug:

chmod -x /etc/rc.d/rc.hotplug


Agora você pode desativar mais algumas coisas que demoram no boot. Aqui além do HotPlug, uma que coisa que me encomodava muito era o ScanLuns. Não sei pra que server aquele script, só sei que era bem lerdo e a única coisa que aparentemente fazia era detectar dispositivos USB (pelo menos ele mostrava uma mensagem que tinha detectado um dispositivo de armazenamento USB), mas eu não preciso disso, afinal meu MP3 Player tem que ser montado se qualquer jeito. Então eu desativei ele, e você também pode desativá-lo, fazendo isso:

chmod -x /etc/rc.d/rc.scanluns

Você já deve ter percebido que os scripts de inicialização ficam todos no /etc/rc.d/ certo? Então, agora nós vamos editar um arquivo por lá. Abra um editor de textos como root, e abra o arquivo /etc/rc.d/rc.M . Este é o arquivo de inicialização do sistema. QUALQUER CAGADA NELE E SEU SISTEMA PODE NÃO INICIAR MAIS, portanto, tenha cuidado. Nele que nós vamos fazer algumas coisas que farão toda a diferença. A primeira, nós vamos colar nele aquele script que criamos anteriormente. Mas não cole em qualquer lugar, ele deve ser colado antes que alguma coisa precise dos modulos, e depois da parte em que os modulos já podem ser carregados. Para isso, eu resolvi colar ele imediatamente antes da inicialização do HotPlug, na linha 83. O arquivo fica assim:

(...)

echo "Iniciando modulos variados (ok, eu nao sei pra que servem...)"
modprobe sis900
modprobe crc32
modprobe pcmcia_core
modprobe ide-scsi
modprobe isa-pnp

echo "Iniciando modulos de som..."
modprobe soundcore
modprobe snd
modprobe snd-seq-device
modprobe snd-page-alloc
modprobe snd-trident
modprobe snd-seq
modprobe snd-pcm
modprobe snd-util-mem
modprobe snd-ac97-codec
modprobe snd-timer
modprobe snd-seq-oss
modprobe snd-pcm-oss
modprobe snd-mixer-oss

echo "Iniciando modulos USB..."
modprobe usbcore
modprobe usb-storage
modprobe usb-ohci

echo "Iniciando modulos de joystick..."
modprobe input
modprobe gameport
modprobe joydev
modprobe pcigame
modprobe analog

echo "Iniciando modulos de I/O serial..."
modprobe serio
modprobe serport

echo "Iniciando modulos do IP-Tables..."
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_REJECT
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe iptable_filter
modprobe ipt_state

echo "Iniciando modulos de impressora..."
modprobe printer

echo "Iniciando modulos do modem..."
modprobe slmdm country=BRAZIL
modprobe slamrmo

echo "Iniciando modulos do video..."
modprobe agpgart
modprobe nvidia

echo "Ativando swap..."
swapon /dev/hda2

# Initialize the hotplugging subsystem for Cardbus, IEEE1394, PCI, and
# USB devices. On a 2.4.x kernel this will run the old hotplug system
# started with /etc/rc.d/rc.hotplug. On a newer kernel, hotplugging
# will be handled by udev. If you run a 2.6+ kernel, don't shut off
# udev unless you also don't want hotplugging support.

(...)


Ok, estamos quase lá. :D Agora, use a ferramenta de procura do seu editor de textos para procurar o bloco de código que inicia o LDConfig. O Código em questão é esse:

# Update all the shared library links:
if [ -x /sbin/ldconfig ]; then
echo "Updating shared library links: /sbin/ldconfig"
/sbin/ldconfig
fi


Bom, esta parte pode ser controversa para alguns. Você tem 3 opções: Simplesmente desativar o LDConfig, não desativar o LDConfig ou então, fazer o que eu fiz. Bom, o LDConfig atrasa a inicialização porque enquanto ele está sendo executado, nada mais acontece, ele faz a parte dele e só depois que ele termina o boot continua. Então, porque ao invés disso, ele nao vai fazendo o trabalho dele enquanto o resto vai iniciando? Muito mais lógico, não? Caso ache esta a melhor opção, coloque um "&" após o "/sbin/ldconfig", ficando o código assim:

# Update all the shared library links:
if [ -x /sbin/ldconfig ]; then
echo "Updating shared library links: /sbin/ldconfig"
/sbin/ldconfig &
fi


Agora, que vem a parte controversa. Alguns podem achar inútil isso, pois mesmo que o boot continue, ele vai continuar bem mais lento até que o LDConfig termine. Já que o LDConfig exige um uso intenso do processador, tudo que for acontecer enquanto ele está sendo executado obviamente ficará mais lento. E em sistemas que ele demora mais para terminar, o X irá iniciar, e o LDConfig poderá continar executando, deixando as vezes com que o carregamento do gerenciador de janelas fique mais lento. No meu caso quando eu digito a senha e aperto enter ele acaba, e o carregamento do KDE continua normalmente. Se você usa um WM mais leve, isto também não irá encomodar. A pricipal vantagem é de quem tem um processador com SMP (Symmetric Multi-Processing), ou seja, com mais de um núcleo (como um Intel Core Duo) ou com HT (Hyper Threading). Caso o módulo para o SMP esteja carregado ou então seja built-in no kernel, esta parte do LDConfig irá representar uma economia de tempo substancial. Caso queira simplesmente desativar o LDConfig (que irá acelerar mais ainda o boot), simplesmente comente todas as linhas da inicialização do LDConfig, ficando assim o código:

# Update all the shared library links:
#if [ -x /sbin/ldconfig ]; then
# echo "Updating shared library links: /sbin/ldconfig"
# /sbin/ldconfig
#fi


Assim ele não inicia mais, e não deixa mais seu boot lerdo. Mas também não irá mais atualizar o cache fazer os links necessários para as bibliotecas do sistema. Então toda vez que você instalar uma biblioteca que não tem o LDConfig por padrão no instalador, você terá que fazer isso na mão mesmo, porque no boot isso não irá mais acontecer. Para evitar maiores problemas eu deixo isso tudo ativado mesmo.
É isso, com essas modificações, meu boot que demorava em média vergonhosos 2 minutos passou a demorar apenas 36 segundos, legal não? Isso é super útil para quem precisa ficar reiniciado o pc muitas vezes para mudar de sistema operacional por exemplo. Caso tenha um computador rápido que faz o boot em poucos segundos, faça isso e deixe o boot mais rápido ainda. Não esqueça, este tutorial é focado para Slackware e distribuições baseadas nele, pois no Slackware a estrutura dos diretórios de inicialização é diferente das outras distribuições.

Complemento adicional: :D

Após postar o artigo no fórum Slacklife, recebi algumas dicas interessantes do user teo e resolvi editar o post para complementar o texto.
Primeiramente, há uma maneira mais rápida de se acrescentar os módulos à inicialização do sistema. Para isso, basta adicionar o nome dos módulos ao arquivo /etc/rc.modules (o qual me esqueci completamente enquanto escrevia o artigo), e eles serão automaticamente carregados. Além disso, tem uma maneira de se evitar toda a mão de obra na hora de adicionar os nomes ao arquivo. Para isso, basta usar o seguinte script no bash:

for i in `lsmod | grep -v Module | cut -d' ' -f1`; do echo /sbin/modprobe $i >> /etc/rc.d/rc.modules; done 


Ainda assim é necessária a verificação da ordem do carregamento dos módulos, mas já corta a parte mais chata do tutorial. Caso você adicione o carregamento dos módulos no /etc/rc.d/rc.modules, não é necessário criar o código para carregar os módulos no /etc/rc.d/rc.M, se não ele irá carregar cada modulo duas vezes (não que esteja errado, mas aí o objetivo do tutorial acaba sendo desvirtuado).
Também pode-se acelerar ainda mais o boot, desativando o fc-cache na inicialização. O fc-cache simplesmente atualiza o cache das fontes do sistema, coisa que só é necessária quando você instala novas fontes no seu servidor gráfico. Para desativá-lo faça o seguinte: abra o arquivo /etc/rc.d/rc.M (o mesmo que foi editado anteriormente), e localize o seguinte bloco de código:

# Update the X font indexes:
if [ -x /usr/X11R6/bin/fc-cache ]; then
echo "Updating X font indexes: /usr/X11R6/bin/fc-cache"
/usr/X11R6/bin/fc-cache
fi


Para desativá-lo, comente-o colocando um "#" na frente de cada linha:

# Update the X font indexes:
#if [ -x /usr/X11R6/bin/fc-cache ]; then
# echo "Updating X font indexes: /usr/X11R6/bin/fc-cache"
# /usr/X11R6/bin/fc-cache
#fi


Quanto aos módulos do kernel estarem built-in, tem uma explicação mais clara aqui, então deletei a parte do texto que falava sobre os módulos built-in, pois a informação não estava 100% correta (o boot acelerava, mas o sistema poderia perder desempenho).

Agora sim está tudo esclarecido, falowz! :yes:


[url="http://my.opera.com/CidoLoco/blog/acelerando-o-boot-do-slackware-11"] Link do Blog[/url]

Instalando o Mplayer no Slack sem complicações.

Como nos todos sabemos o mplayer é um poderoso player e ferramenta para o sistema Linux.

Aqui vou insinar como instala ele sem complicações, pois na maioria dos casos quando você instala via pacotes em .tgz da falta das lib...


Vamos la entao precisaremos dos seguintes pacotes:


libdvdcss -> http://download.videolan.org/pub/videolan/libdvdcss/ (pegue a versão mais recente)

mplayer -> http://www.mplayerhq.hu/design7/dload.html (pegue a versão mais nova)

Skins -> http://www.mplayerhq.hu/design7/dload.html (qualquer uma)

codecs essenciais -> http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20061022.tar.bz2



Agora depois dos downloads vamos a instalação:

ATENÇÃO ESTOU USANDO AS ULTIMAS VERSÕES DISPONIVEIS NA DATA DESSE TUTORIAL: 29/03/2008



Instalando libdvdcss

$ tar xvf libdvdcss-1.2.9.tar.bz2
$ cd /usr/src/libdvdcss-1.2.9/
$ ./configure --prefix=/usr
$ make
# make install



Instalando o Mplayer

$ tar xvf MPlayer-1.0rc1.tar.bz2
$ cd /usr/src/MPlayer-1.0rc1/
$ ./configure --prefix=/usr --language=pt_BR --enable--gui
$ make
# make install



Instalando Skins

$ tar xvf Blue-1.7.tar.bz2
# mv Blue /usr/share/mplayer/skins/default

Atenção: Para escolhe mais skins, crie uma pasta dentro /usr/share/mplayer/skins/ com o nome da skin.



Instalando os codecs

$ tar xvf all-20061022.tar.bz2
# mv all-20061022 /usr/local/lib/codec



Instalando fontes:

Para assistir a DVDs com legendas são necessárias fontes que não acompanham o MPlayer. A sugestão fica por conta de usar as próprias fontes TrueType que acompanham o Slackware. As fontes TrueType ficam localizadas em “/usr/X11R6/lib/X11/fonts/TTF/”, basta o usuário criar um link simbólico apontando para sua fonte preferida apartir de “~/.mplayer/subfont.ttf”. Pessoalmente gosto da DejaVuSans:

$ ln -s /usr/X11R6/lib/X11/fonts/TTF/DejaVuSans.ttf ~/.mplayer/subfont.ttf

Cada usuário deverá criar seu próprio link. Qualquer fonte TrueType (.ttf) pode ser usada, basta indicar de maneira correta a localização dela no link ou colocá-la na pasta ~/.mplayer/ renomeando-a para “subfont.ttf”.


Por enquanto é só ^^