segunda-feira, março 31, 2008
sábado, março 29, 2008
csup ou cvsup - O mais rápido
Bom, meu próximo post vai mostrar minha horas extras em um sábado a tarde dedicadas a atualização do FreeBSD 6.2 Stable para o 7 Stable.
Como é necessário baixar os docs, sources do sistema e uma nova árvore do ports é interessante perder o menor tempo possível nisso. Uma vez que não se tem nada pra fazer além de esperar.
Podem ser usados 3 aplicativos pra esse fim: rsync, CVSup ou Csup.
O rsync todos devem conhecer. Se não de uma olhada aqui no blog do Marcelo Terres.
Já o CVSup é um aplicativo escrito em ezm3, seja lá qual for essa linguagem, que é, também, utilizado pra atualizar os sources e a árvore do ports no FreeBSD a partir de um servidor CVS.
Ele, o CVSup, não é um aplicativo que faz parte da base do FreeBSD exatamente pelo motivo de ter sido escrito nessa linguagem aí. Sendo assim, alguma boa alma resolveu reescrever esse mesmo aplicativo porém em C. Eis que nasce o Csup. Que agora sim faz parte da base do sistema. Acho que a partir da versão 6.2. Não tenho certeza... mas enfim...
Bom, voltando ao foco desse post que é descobrir o servidor mais rápido para fazer as atualizações.
Pra essa empreitada pode ser usado um script em Perl chamado fastest_cvsup.
Ele acessa os servidores através de sockets e determina os mais rápidos. Retorna os 3 mais rápidos de um país ou O mais rápido.Como é necessário baixar os docs, sources do sistema e uma nova árvore do ports é interessante perder o menor tempo possível nisso. Uma vez que não se tem nada pra fazer além de esperar.
Podem ser usados 3 aplicativos pra esse fim: rsync, CVSup ou Csup.
O rsync todos devem conhecer. Se não de uma olhada aqui no blog do Marcelo Terres.
Já o CVSup é um aplicativo escrito em ezm3, seja lá qual for essa linguagem, que é, também, utilizado pra atualizar os sources e a árvore do ports no FreeBSD a partir de um servidor CVS.
Ele, o CVSup, não é um aplicativo que faz parte da base do FreeBSD exatamente pelo motivo de ter sido escrito nessa linguagem aí. Sendo assim, alguma boa alma resolveu reescrever esse mesmo aplicativo porém em C. Eis que nasce o Csup. Que agora sim faz parte da base do sistema. Acho que a partir da versão 6.2. Não tenho certeza... mas enfim...
Bom, voltando ao foco desse post que é descobrir o servidor mais rápido para fazer as atualizações.
Pra essa empreitada pode ser usado um script em Perl chamado fastest_cvsup.
Instalação pra lá de trivial:
Para descobrir os 3 mais rápidos do Brasil, por exemplo:
cd /usr/ports/sysutils/fastest_cvsup
make install clean; rehash
fastest_cvsup -c br
Ele também retorna o mais rápido de todos que pode ser usado diretamente em um comando:
cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile -h `fastest_cvsup -c br -Q`
Já que estamos falando disso seguem alguns links.
http://www.freebsd.org/doc/en/books/handbook/cvsup.html#CVSUP-MIRRORS
http://www.freebsd.org/doc/en/books/handbook/cvs-tags.html
Para acelerar o processo de compilação pode ser montado o /tmp na ram.
http://alexsm.blogspot.com/2008/02/freebsd-tmp-em-ramdisk.html
Marcadores: freebsd
quarta-feira, março 26, 2008
Miniaturas de RMVB no nautilus
Isso me deixava encucado desde que instalei o gentoo no note. As miniaturas de arquivos RMVB não eram geradas. Eu sei que é perfumaria(como diriam alguns) mas eu acho simpática a miniatura do vídeo como ícone.
Pra começar e ajudar qualquer um que encontrou uma mensagem de erro e foi correndo ao google vou colocar o erro que aparece quando eu abro o nautilus a partir do terminal como root.
/tmp/rmvb.schema
Agora já importe ele com o seu usuário. Isso é importante de salientar: Existe um diretório .gconf no home de cada usuário. Caso ele seja apagado quando o processo gconfd for reiniciado ele recria essa pasta com os padrões que devem estar em /usr/share/alguma/coisa. Portanto rode o seguinte comando com o usuário que deseja ver as miniaturas:
UPDATE:
o comando acima nao funcionou, por isso alterei o diretorio para /tmp ao inves de ~/
Agora crie o seguinte script /usr/bin/mplayer-video-thum.sh:
Permissão de execução nesse script:
São utilizadas também algumas imagens para montar a miniatura. Colocarei as mesmas aqui com os respectivos nomes de arquivo. Elas devem ser salvas nessa pasta que será criada agora:
Clique para fazer o download:
filmholes-big-left.png
filmholes-big-right.png
Pra começar e ajudar qualquer um que encontrou uma mensagem de erro e foi correndo ao google vou colocar o erro que aparece quando eu abro o nautilus a partir do terminal como root.
** Message: don't know how to handle video/x-pn-realvideo, rmversion=(int)4, format=(int)1073758208, subformat=(int)17305632, width=(int)640, height=(int)468, framerate=(fraction)30/1
totem-video-thumbnailer: 'file:///home/lutieri/mnie/2nd%20Season/2x06_my_name_is_earl.rmvb' isn't thumbnailable
Reason: Media contains no supported video streams.
Bom.. como pode-se ver quem tenta criar o thumbnail(miniatura em tupiguarani) é o totem-video-thumbnailer.
Pois bem, o totem não carrega rmvb. Uso o RealPlayer(que dá umas trancadas) mas normalmente o mplayer.
Ouvi uma história por aí de que o totem xine carrega sim rmvb. Mas por algum motivo não tá disponível no gentoo.
Bom a solução como era de se esperar encontrei em um fórum de ubuntu. Aliás, falou em problemas com desktop tu vai cair num fórum de ubuntu e não tem choro hehe. Mas não tem problema é linux.
Crie um arquivo qualquer em um lugar qualquer com o conteúdo a seguir. Por exemplo:
Pois bem, o totem não carrega rmvb. Uso o RealPlayer(que dá umas trancadas) mas normalmente o mplayer.
Ouvi uma história por aí de que o totem xine carrega sim rmvb. Mas por algum motivo não tá disponível no gentoo.
Bom a solução como era de se esperar encontrei em um fórum de ubuntu. Aliás, falou em problemas com desktop tu vai cair num fórum de ubuntu e não tem choro hehe. Mas não tem problema é linux.
Crie um arquivo qualquer em um lugar qualquer com o conteúdo a seguir. Por exemplo:
/tmp/rmvb.schema
<gconfschemafile>
<schemalist>
<schema>
<key>/schemas/desktop/gnome/thumbnailers/application@octet-stream/enable</key>
<applyto>/desktop/gnome/thumbnailers/application@octet-stream/enable</applyto>
<owner>ooo2-thumb</owner>
<type>bool</type>
<default>true</default>
<locale name="C">
<short></short>
<long></long>
</locale>
</schema>
<schema>
<key>/schemas/desktop/gnome/thumbnailers/application@octet-stream/command</key>
<applyto>/desktop/gnome/thumbnailers/application@octet-stream/command</applyto>
<owner>ooo2-thumb</owner>
<type>string</type>
<default>/usr/bin/mplayer-video-thum.sh -s %s %u %o</default>
<locale name="C">
<short></short>
<long></long>
</locale>
</schema>
<schema>
<key>/schemas/desktop/gnome/thumbnailers/application@vnd.rn-realmedia/enable</key>
<applyto>/desktop/gnome/thumbnailers/application@vnd.rn-realmedia/enable</applyto>
<owner>ooo2-thumb</owner>
<type>bool</type>
<default>true</default>
<locale name="C">
<short></short>
<long></long>
</locale>
</schema>
<schema>
<key>/schemas/desktop/gnome/thumbnailers/application@vnd.rn-realmedia/command</key>
<applyto>/desktop/gnome/thumbnailers/application@vnd.rn-realmedia/command</applyto>
<owner>ooo2-thumb</owner>
<type>string</type>
<default>/usr/bin/mplayer-video-thum.sh -s %s %u %o</default>
<locale name="C">
<short></short>
<long></long>
</locale>
</schema>
</schemalist>
</gconfschemafile>
Agora já importe ele com o seu usuário. Isso é importante de salientar: Existe um diretório .gconf no home de cada usuário. Caso ele seja apagado quando o processo gconfd for reiniciado ele recria essa pasta com os padrões que devem estar em /usr/share/alguma/coisa. Portanto rode o seguinte comando com o usuário que deseja ver as miniaturas:
gconftool-2 --install-schema-file=~/rmvb.schema
UPDATE:
o comando acima nao funcionou, por isso alterei o diretorio para /tmp ao inves de ~/
gconftool-2 --install-schema-file=/tmp/rmvb.schema>
Agora crie o seguinte script /usr/bin/mplayer-video-thum.sh:
#!/bin/bash
file="$3"
file=$(echo "$file" | sed -e 's/%20/ /g' | sed -e 's/%26/\&/g' | sed -e 's/%5B/\[/g' | sed -e 's/%5D/\]/g' | sed -e 's/%40/\@/g' )
cd /tmp
LENGTH=$(mplayer -nocache -identify -vo null -ao null -frames 0 "$file" | awk -F= '/ID_LENGTH/ {print $2}'| awk -F. '{print $1}')
START=$((($LENGTH*15)/100))
END=$((($LENGTH*70)/100))
start=$(($START+($RANDOM%($END-$START+1))))
/usr/bin/mplayer -nocache -vf scale -vo jpeg -ao null -ss "$start" -frames 4 "$file"
rm -f 00000001.jpg 00000002.jpg 00000003.jpg
/usr/bin/mogrify -resize "$2" -draw 'image Over 0,0 10,100 "/usr/share/apps/videothumbnail/filmholes-big-left.png"' -draw 'image Over 118,0 10,100 "/usr/share/apps/videothumbnail/filmholes-big-right.png"' 00000004.jpg
cd -
mv /tmp/00000004.jpg "$4"
Permissão de execução nesse script:
chmod +x /usr/bin/mplayer-video-thum.sh
São utilizadas também algumas imagens para montar a miniatura. Colocarei as mesmas aqui com os respectivos nomes de arquivo. Elas devem ser salvas nessa pasta que será criada agora:
mkdir -p /usr/share/apps/videothumbnail/
Clique para fazer o download:
filmholes-big-left.png
filmholes-big-right.png
Feito isso, teoricamente, está tudo funcionado. No tutorial, do ser humano que montou o script acima, diz para reiniciar o nautilus com killall -9 nautilus. Porém pra mim não foi o necessário. Tive que reiniciar também o gconfd com o seguinte comando: gconftool-2 --shutdown && gconftool-2 --spawn
Tive problemas também com aqueles arquivos que já tinham carregado o ícone padrão, isso quer dizer, a miniatura tinha falhado. Ou se renomeia o arquivo ou apague a pasta ~/.thumbnails que ele vai se obrigar a recriar.
Tive problemas também com aqueles arquivos que já tinham carregado o ícone padrão, isso quer dizer, a miniatura tinha falhado. Ou se renomeia o arquivo ou apague a pasta ~/.thumbnails que ele vai se obrigar a recriar.
Podemos ver acima que o screenshot foi tirado enquanto carregavam os ícones.
A fonte foi essa: http://ubuntuforums.org/showthread.php?t=278162
Aliás, inseri aqui os scripts como texto e as imagens pois penso que não estarão mais disponíveis pra sempre no site do cara. Mas caso queira facilitar a vida acesse a fonte e baixa um bz2 de lá com os scripts e imagens ;-)
Aliás, inseri aqui os scripts como texto e as imagens pois penso que não estarão mais disponíveis pra sempre no site do cara. Mas caso queira facilitar a vida acesse a fonte e baixa um bz2 de lá com os scripts e imagens ;-)
Bash buscando no histórico estilo CSH
Uma das coisas boas do shell padrão do FreeBSD(csh) é a forma de consultar comandos passados. Ao invés do ctrl-r que busca em qualquer parte dos comandos digitados é possível buscar por comandos que iniciam por algo. Um exemplo facilita a vida.
um trecho do meu histórico:
321 cd ..
322 cp Prison_Break-2006--_Great_Dragon_.part1.rar.part lala.part
323 unrar x lala.part
324 unrar x Prison_Break-2006--_Great_Dragon_.part1.rar
325 vi Prison_Break-2006--\(Great\ Dragon\)/My\ Special\ Programmes.txt
326 cd Desktop/
327 ccorreio
Caso eu queira reutilizar o comando número 325 bastaria eu digitar v ou vi e pressionar a seta para cima. E caso tivessem comandos anteriores a esse iniciados com v ou vi, respectivamente, eles iriam também ser sugeridos.
Como foi dito, no CSH isso já é padrão. Para o Bash fazer o mesmo deve-se fazer ou:
Adicione no arquivo ~/.inputrc:
"\e[A~": history-search-backward
"\e[B~": history-search-forward
Ou
os mesmos comandos em /etc/inputrc que vai refletir para todos usuários.
Uma outra dica que encontrei, no arquivo citado acima, no meu gentoo, foi é a que segue. Usada para descobrir o código das teclas para ser usado no bind.
# Quick dirty little note:
# To get the key sequence for binding, you can abuse bash.
# While running bash, hit CTRL+V, and then type the key sequence.
# So, typing 'ALT + left arrow' in Konsole gets you back:
# ^[[1;3D
# The readline entry to make this skip back a word will then be:
# "\e[1;3D" backward-word
#
segunda-feira, março 17, 2008
MySQL Tricks
- Para converter um banco de dados no formato InnoDB para MyISAM pode ser feito de duas maneiras. Porém apenas a segunda funcionou pra mim.
ALTER TABLE myInnoDB_Table ENGINE=MYISAM
OU
Faz um exportação edita o arquivo do dump e alterar as ocorrências engine=innodb para engine=myisam. Se tudo estiver certo é só importar novamente
outra coisa:
- Estava recebendo essa mensagem quando tentava executar o mysqldump:
mysqldump: Got error: 1044: Access denied for user ‘root’@'localhost’ to database ‘information_schema’ when using LOCK TABLES
De acordo com minhas investigações parece ser um bug que voltou a assombrar a versão 4.1.20. Solucionei atualizando para 5.x
Links relacionados:
http://sql-planet.com/2007/8/1178/mysqldump-unusual-error.htm
http://www.linuxadmin.org/blog/mysql-information_schema-error-when-using-mysqldump-utility/
outra coisa ainda:
- Um script, interessantezinho, para fazer backup do MySQL pode ser encontrado aqui. Bem um gerador desse script aqui.
Marcadores: mysql
terça-feira, março 11, 2008
mysqlhotcopy faltando no FreeBSD
Recentemente, após algumas migrações, precisei do script mysqlhotcopy pra "backupear" algumas bases de dados e eis que não encontrei-o na instalação que fiz no FreeBSD.
Por algum motivo qualquer ele não é instalado. Mas para resolver é simples:
Por algum motivo qualquer ele não é instalado. Mas para resolver é simples:
You could go back into the ports directory and extract the sources, then go into them and locate the script.
Like:
cd /usr/ports/databases/mysql50-server ;
make extract ;
cd work/mysql-5.0.51a/
it should be in the scripts/ folder.
Copy it to a location of choice.
Then just go back to /usr/ports/databases/mysql50-server and either
make clean (remove what you buildt/extracted)
or
make distclean (remove downloaded sources and the above including related software).
Fonte:
http://www.freebsdforums.org/forums/showthread.php?t=39319
Fui testar e:
/usr/local/sbin/mysqlhotcopy: Command not found.
A primeira linha do arquivo é:
#!@PERL@ -w
Não sei se é pra ser um variável que aponta pro binário do perl ou não... Mas sei que não funcionou. Logo, troquei por:
#!/usr/bin/perl -w
Aí rodou!!! Mas faltou um módulo chamado BDI. Logo apareceu a mensagem:
Can't locate DBI.pm
Fui instalar:
perl -MCPAN -e shell
install DBI
Beleza.
Funcionou novamente! Porém no momento em que ia ser executada a cópia eis que surge o seguinte:
install_driver(mysql) failed: Can't locate DBD/mysql.pm
Óbvio faltava o suporte ao driver mysql.
Fui instalar:
perl -MCPAN -e shell
install DBD::mysql
Porém, como diz a documentação do site do Mysql sobre instalar os módulos perl, no momento da instalação do módulo ele vai tentar conectar ao mysql usando usuário root e senha em branco. Mas como eu já tinha alterado a senha do root pode-se ver várias linhas de acesso negado na tentativa de conexão ao banco. Devemos forçar a instalação de qualquer maneira. Para isso ao invés de install DBD::mysql usa-se force install DBD::mysql.
This is the end!
This is the end!