Posts TaggedLinux
JasperServer – Backup/Export Repositório
O JasperServer é uma excelente opção gratuita para desenvolver relatórios de forma profissional, rápida (na maioria das vezes) e segura. Não sei porque parece que não ganhou muitos adaptos ou os usuários não costumam falar sobre a ferramenta
. É muito difícil achar algum material sobre Jasper/iReports. Então vou dando minhas trumbicadas diárias e postando aqui as soluções que encontro e/ou invento.
Hoje precisei publicar um repositório do JasperServer em um servidor de desenvolvimento. Já vi por ai que muita gente dizendo que faz o backup/export usando o dump do banco do jasper server. Não me pareceu uma opção muito segura e resolvi procurar uma outra forma de fazer e dai lembrei do js-export e js-import que usei para migrar do jasperserver 3.1 para o 3.5 (Upgrade do JasperServer 3.1 para o 3.5). Esses dois scripts, como o nome já diz, exportam e importam dados do repositório do JS. Para exportar todos os dados do repositório, use o comando:
Linux:
js-export.sh --everything --output-zip js-backup.zip
Windows:
js-export.bat --everything --output-zip js-backup.zip
Onde –everything diz que tudo será exportado, –output-zip indica que o formato de saída será um arquivo compactado e js-backup.zip é o arquivo de saída.
obs.: Os scripts citados estão no diretório <JASPERSERVER_HOME>/scripts
Para exportar apenas um ou N repositórios, basta usar a opção –uris.
Linux:
js-export.sh --uris /reports/samples,/reports/cms --output-zip js-backup.zip
Windows:
js-export.bat --uris /reports/samples,/reports/cms --output-zip js-backup.zip
Para importar os dados, execute o js-import:
Linux:
js-import.sh --input-zip js-backup.zip
Windows:
js-import.bat --input-zip js-backup.zip
Se o repositório já existir, use a opção –update.
Não se desespere se aparecer um erro do tipo:
blábláblá bundles.jsexceptions_messages, locale pt_BR blábláblá
jsexception.folder.details.not.found
ou ainda:
blábláblá jsexception.uri.not.found
Fique calmo, provavelmente foi um erro de digitação no js-export. Cuidado com as “/” e com as letras maiúsculas e minúsculas. Ao informar o caminho para o repositório, coloque extamente o caminho apresentado no JasperServer.
Abraços e até o próximo post.
Add comment Setembro 15, 2009
Listando conteúdo de um arquivo sem repetição usando cat + sed + sort
Hoje precisei fazer um parse em um arquivo de configuração de um script de backup de bases de dados MySQL. O arquivo tem os dados de acesso de vários bancos, organizados por linha e estruturado da seguinte forma:
servidor porta banco usuario senha
O objetivo de fazer o parse nesse arquivo era de recuperar as duas primeiras colunas (servidor e porta) para formar o path de onde os arquivos sql estão armazenados, já que o dump é feito de acordo com o servidor, instância (porta) e período (mês-ano). Um caminho válido seria:
/media/servidor.com.br/3306/09-2009.
Meu problema é que existem várias entradas para a mesma instância do MySQL (Servidor/Porta) e precisava de um lista sem duplicidade, como num SELECT DISTINCT.
Para resolver o problema basta usar a linha de comando:
cat arquivo | sed -e 's/\(.*\) \(.*\) \(.*\) \(.*\) \(.*\)/\1\/\2/' | sort -u
Mas o que diabos isso ai faz? De uma forma bem resumida, o comando acima realiza a leitura do arquivo e passa a saída via pipe para o sed. O sed por sua vez, divide os dados em cinco colunas (cada \(.*\) representa uma coluna) e retorna como saída apenas as duas primeiras (servidor e porta no sed é o trecho /\1\/\2/) e passa o resultado para o comando sort. O sort é que faz a “mágica” do DISTINCT, sort -u exibe apenas as linhas únicas :p
Problema resolvido, mais uma batalha vencida
Abrasss
2 comments Setembro 2, 2009
Perl + DBI + MySQL
Essa semana precisei criar alguns scripts de migração e estatística de dados em bases MySQL. Esse tipo de problema é bem a area do Perl e Python. Ambos tem uma boa performance em tratamento de dados principalmente arquivos.
Vou tentar explicar como instalar os recursos necessários para fazer uma aplicação em Perl que possa manipular bases de dados em MySQL.
DBI
O DBI é uma interface de acesso e manipulação de dados. Funciona como uma camada entre o script perl e o driver especifico de um SGBD. Com o DBI não é necessário saber a API de cada SGBD ( Oracle, MySQL, PostgreSQL, etc ). Quando um métido da interface é invocado, a ação é transferida para o driver especifico de forma transparente para o usuário final.
Vamo fazer o troço funcionar.
INGREDIENTES
- Internet
- Perl ou ActivePerl ( Caso seja usuário Windows )
- Teclado
INSTALANDO
Vá até o shell ou prompt de comando e digite:
ppm install DBI
ppm install DBD-mysql
Pronto, agora é só incluir o modulo DBI e já está pronto para usar.
use strict;
use warnings;
use DBI;
my $conexao = DBI->connect('DBI:mysql:database=meu_banco;host=servidor;port=3306','usuario','senha');
É isso ai … a documentação está aqui: http://search.cpan.org/~timb/DBI/DBI.pm
divirtam-se!
Add comment Maio 23, 2009
Acentuação no Firefox, Firebird, etc / – Teclado Layout Americano
O firefox no meu notebook insistia em não exibir corretamento o “ç” … exibia um “c” com um acento agudo … nem sei simular essa aberração kkkkkkk. Ok, pesquisando por ai encontrei a solução:
Basta editar o arquivo /etc/profile.d/gtk+.sh adicionando a linha: export GTK_IM_MODULE=xim
Como você pode perceber, o problema era no GTK. Variável de ambiente criada, problema resolvido. Basta reiniciar e enjoy.
obs.: Set o arquivo como executável se ele não estiver: chmod +x /etc/profile.d/gtk+.sh
Abraços
Add comment Novembro 29, 2008
hda intel realtek alc861-vd + Slackware 12.1 ll – O Regresso
Se você leu esse post: Audio HDA INTEL Realtek ALC861-VD + Linux (Slackware 12), seguiu a receita a risca e bolo saiu solado … não se desespere. Ainda há esperança
.
Os sintomas são os mesmos … tudo parece estar funcionando bem, exceto pelo som que insiste em não sair.
Adicione seu usuário ao grupo “audio” e pronto … problema resolvido
Add comment Novembro 29, 2008
Tutorial básico de shell script
Hoje eu precisei criar um pequeno script shell para realizar algumas configurações de um software que desenvolvi e ai me lembrei que a um tempo atrás, quando eu ainda estava na faculdade ( putz, faz trocentos anos isso ), fiz um tutorial básicão para mexer com shell script e acabei não disponibilizando isso .. não lembro bem porque. Bom desenterrei ele e vou postar ele aqui.
1 – Introdução
2 – Estrutura Básica
3 – Váriáveis
4 – Aspas simples, Aspas duplas e Crase
5 – O Comando Echo
6 – Expressões
7 – O Comando if
8 – Laço condicional While
9 – For
10- Case
11- Finalizando
12- Fonte de Pesquisa e Recomendação de leitura
1 – Introdução
Shell Script são programas interpretados por programas conhecidos como Shell.
A Shell é o elo de ligação entre o usuário e o Sistema. A shell é responsável por
interpretar os comandos passados pelo usuário.
Os Shell Scripts são largamente utilizados para automatizar tarefas administrativas
e simplificar ações dirárias como por exemplo efetuar um backup, mapear unidades de
rede samba, limpar diretório temporários etc.
Nesse artigo, iremos trabalhar com a shell bash, mas fique a vontade para trabalhar
com a shell que mas lhe agrade.
2 – Estrutura Básica
Todo shell script deve começar com uma instrução tipo #!/bin/bash. Essa instrução indica
quem é o programa responsável por interpretar os camandos contidos no script.
Caso o script fosse escrito em KSH, por exemplo, a linha ficaria #!/bin/ksh. Isso também
acontece em outras linguagens de programação interpretada tais como perl
(#!/bin/perl). Em seguida vem a sequencia de comandos que se deseja executar.
O caracter # é o caracter de comentário de linha (exceto na primeira instrução mencionada acima).
Tudo que estiver após o caracter # é ignorado pelo interpretador até que o caracter de fim de linha
seja encontrado.
Ex.:
#!/bin/bash
# Exemplo classico do alo mundo
echo “Alo Mundo”
Para que seu script possa ser executado, você tem que torna-lo executável com o comando chmod:
user@linuxbox:/$ chmod a+x meu_script
3 – Variáveis
3.1 – Declarando váriaveis
As variáveis em shell Script são declaradas implicitamente. para se declarar a variável, basta
atribuir-lhe um valor.
Ex.:
#!/bin/bash
var1=’Minha primeira variavel’
Para se referir a uma variavel dentro do script, é necessário usar o caracter $ antes do nome
da mesma. Assim você está se referindo ao conteudo da variavel.
Para se atribuir valores a variável o caracter $ não é utilizado
Ex.:
#!/bin/bash
var1=”Minha primeira variavel” #Atribuindo valor
echo $var1 #Se referindo ao conteúdo da variável
3.2 – Recebendo entradas externas
O comando Read faz com que variaveis possam receber entradas do usuário.
Quando o script encontra um comando Read, ele para sua execução e aguarda
que o usuário informe os dados e tecle enter, para concluir a operação.
Ex.:
#!/bin/bash
Read nome
Echo “Meu nome é $nome”
3.3 – Variáveis passadas por parâmentro de linha de comando
As variáveis passadas por linha de comando, podem ser acessadas pelo número referente a posição em que
ela se encontrava quando foi passada. A variável $0 se refere ao nome do programa, $1 ao primeiro
parâmentro e assim por diante.
Ex.:
user@linuxbox:/$ meu_script.sh parametro1 parametro2
Sendo que:
$0 = meu_script.sh
$1 = parametro1
$2 = parametro2
A quantidade de parâmetros passados para o script (equivalente ao argc do C) fica armazenado
na variável $#.
Ex.:
#!/bin/bash
echo “Foram passados “$#” parâmetros”
4 – Aspas simples, Aspas duplas e Crase
Há muita diferença entre eles. A função da Aspas Simples é a de assumir a string sem que nada
seja processado. Já com as Aspas Duplas, as variáveis são processados dentro da string.
A Crase processam COMANDOS e adcionam à string, a resposta do mesmo.
Ex:
var = ‘Olá, eu sou $USER’
O Conteúdo de var é: Olá, eu sou $USER – A variavel $USER não foi processado. Tudo que
se encontra dentro das aspas simples é entendido literalmente.
var = “Olá, eu sou $USER”
Agora var contém: Olá, eu sou root – A variavel $USER agora vai devidamente processada e
seu valor passado para string.
var = “Eu agora estou em: `pwd`”
A Crase passa a saida de pwd para a string.
O conteúdo de var ficou: Eu agora estou em: /etc/rc.d
5 – O Comando Echo
A finalidade do comando Echo é exibir informações, que vão desde simples strings até uma mescla de
strings e variaveis e passar o cursor para a proxima linha. É bem similar ao puts() do C.
Ex.:
#!/bin/bash
var1=”Fernando”
echo “Aews $var1″
O Resultado será: Aewz Fernando
6 – Expressões
O comando Expr, informa o script que a proxima instrução se trata de uma expressão.
O formato de uma expressão é algo do tipo: expr $var “+” 1 ou `expr $var + 1`
Ex.:
#!/bin/bash
Echo “Digite um numero”
read num1
echo “Digite outro numero”
read num2
echo “`expr $num1 + $num2`”
7 – O comando if
O comando if, como você já deve saber, executa determinados comandos caso a expressão
em questão seja verdadeira. Acontece que uma expressão verdadeira para ele não é como
da forma que agente está acostumado. Uma condição no if é sempre um comando e todo comando
tem uma saida. Normalmente, quando a saida é 0, significa que o comando foi concluido
com sucesso. Valores superiores a 0, normalmente significam que algo de errado aconteceu,
logo, 0 significa verdadeiro para o if e 1 falso.
Um if normalmente é seguido do comando test.
Ex.:
if rm /etc/teste.txt; then
echo “Arquivo excluido”
fi
No bloco if acima, o comando rm é executado e o valor de retorno é passado para o if.
Caso rm termine sem problemas, 0 é retornado e a condição se torna verdadeira.
if test “a” = “a”; then
echo “Igual”
else
echo “Diferentes”
fi
Na instrução acima, o comando test retorna 0, pois “a” = “a”. Para entender melhor
o funcionamento do comando test vá a linha de comando e execute-o, para saber o que ele
retornou basta recorrer a variavel de ambiente $? que armazena a saida do ultimo comando.
Ex.:
user@linuxbox:/$ test “a” = “a”
user@linuxbox:/$ echo $?
0
user@linuxbox:/$ test “a” = “b”
user@linuxbox:/$ echo $?
1
Segue abaixo alguns dos parametros do comando test:
-b arquivo – Verdadeiro se arquivo é um arquivo de bloco, como /dev/hda.
-c arquivo – Verdadeiro se arquivo é um arquivo de caracter, como /dev/tty1.
-d arquivo – Verdadeiro se arquivo é um diretório.
-e arquivo – Verdadeiro se arquivo existe.
-f arquivo – Verdadeiro se arquivo existe e é um arquivo comum.
-s arquivo – Verdadeiro se arquivo existe e não é vazio.
-h arquivo – Verdadeiro se arquivo é um link simbólico.
-p arquivo – Verdadeiro se arquivo é um “named pipe” (fifo, lifo, etc).
-S arquivo – Verdadeiro se arquivo é um “socket”.
-k arquivo – Verdadeiro se arquivo tem seu “sticky bit” ligado.
-r arquivo – Verdadeiro se arquivo pode ser lido pelo usuário atual.
-w arquivo – Verdadeiro se arquivo pode ser escrito pelo usuário atual.
-x arquivo – Verdadeiro se arquivo pode ser executado pelo usuário atual.
-O arquivo – Verdadeiro se arquivo pertence ao usuário atual.
-G arquivo – Verdadeiro se arquivo pertence ao grupo do usuário atual.
-N arquivo – Verdadeiro se arquivo foi modificado desde a ultima vez que foi lido.
-eq (equal): Igual;
-ne (not-equal): Não Igual (diferente);
-lt (less than): Menor que (<);
-le (less than or equal): Menor ou igual ( <= );
-gt (greater than): Maior que (>);
-ge (greater than or equal): Maior ou igual (>=);
Test pode ser substituido por [], tornando o código mais legivél.
Ex.:
if ["a" = "a"];then
echo “Igual”
else
echo “diferente”
fi
8 – Laço condicional While
O Comando while, como o nome diz, executa um bloco de instruções enquanto uma
condição for verdadeira. O tratamento de expressões é feita da mesma forma que
acontece com o comando if.
Ex.:
cont = 0
while [$cont -ne 10]; do
echo $cont;
cont = expr $cont “+” 1;
done;
9 – For
for {variavel} in {lista} [lista]*;
do
comandos..
done;
O comando For executa um bloco de instruções até que a lista de elemntos termine.
a variavel é associada a cada elemento da lista e então o bloco de comandos é executado
a cada vez que a variavel é associada.
Ex.:
for arquivo in rc.local rc.M rc.httpd;
do
echo $arquivo
done;
A saida será:
rc.local
rc.M
rc.httpd
10 – Case
Um das intruções mais utilizadas em Shell Script. O Case funciona de maneira bem
similar ao if. Na verdade uma sequencia de ifs aninhados.
Ele é muito usado para checar parametros de linha de comando para realizar operações
com daemons (startar, restartar, parar daemons).
Ex.: – retirado do site Olinux
case “$1″ in
’start’ )
echo “Iniciando o serviço…”
<comandos para iniciar o serviço>
;;
‘restart’ )
echo “Reinicializando o serviço…”
<comandos para reinicializar o serviço>
;;
’stop’ )
echo “Parando o serviço…”
<comandos para parar o serviço>
;;
*)
echo “Opção invalida!”
echo “As opções válidas são:
start, stop e restart”
;;
esac
11- Finalizando
Espero ter ajudado a passar um pouco sobre o poder dos shell scripts.
Qualquer dúvida, sugestão, correção etc… manda uma email.
flw, Abraços, T+
12- Fonte de Pesquisa e Recomendação de leitura
www.olinux.com.br
http://tlm.conectiva.com.br/shell_script/
http://thobias.org/doc/cgi_shell.html
http://thobias.org/doc/shell_bd.html
www.vivaolinux.com.br
Add comment Setembro 9, 2008
Aplicações Desktop com PHP – Parte 1
Que o PHP é uma das linguagens de programação mais usadas em ambiente web, todo mundo sabe. Mas pouca gente sabe que também é possível criar aplicações desktop com ela. E é isso que nós iremos fazer. Para tal, iremos utilizar o PHP-GTK.
O que é GTK/GTK+?
O GTK (Gimp Tool Kit) é uma poderosa biblioteca para desenvolvimento de aplicações GUI multi-plataforma, muito utilizada no mundo linux e que vem ganhando seu espaço também no windows.
PHP-GTK
É linguagem binding que permite aos desenvolvedores PHP criarem aplicações gráficas multi-plataforma sem abrir mão dos recursos do PHP.
Vamos então instalar os trecos \o/
Ingredientes
- PHP-GTK
- Uma caneca com café
Instalação do PHP-GTK no Windows
Baixe aqui http://sourceforge.net/project/downloading.php?groupname=agata&filename=php-gtk2b.exe&use_mirror=ufpr o instalador, execute-o e seja feliz.
Instalação do PHP-GTK no Linux
Baixe aqui http://sourceforge.net/project/downloading.php?groupname=agata&filename=php-gtk2b.tar.gz&use_mirror=ufpr o pacote pré-compilado e siga os passos abaixo:
# mv php-gtk2 /usr/local/
# ln -sf /usr/local/php-gtk2/bin/php /usr/bin/php-gtk2
1,2,3, testando
Para testar crie um novo arquivo chamdo exemplo.php com o código abaixo:
if (!class_exists(‘gtk’)) {
die(“O módulo php-gtk2 não foi carregado corretamente. Verifique seu php.ini.”);
}$wnd = &new GtkWindow();
$wnd->set_title(‘Exemplo’);
$wnd->connect_simple(‘destroy’, array(‘gtk’, ‘main_quit’));$label = &new GtkLabel(“Perdeu preiboy!’”);
$wnd->add($label);
$wnd->show_all();
Gtk::main();
?>
Para executar, vá até a linha de comando e execute:
No Linux
No Windows
É isso ai. No próximo post vamos explorar melhor os recursos do PHP-GTK.
Pra quem quiser saber mais sobre o projeto:
http://www.php-gtk.com.br/
http://gtk.php.net/
Abraços!
Add comment Junho 24, 2008
Audio HDA INTEL Realtek ALC861-VD + Linux (Slackware 12)
Uma dica rápida pra quem tem problemas em configurar a placa de som HDA ALC861 no linux, em especial no Slackware 12.
Estou usando um notebook TOSHIBA SATELLITE A135 com linux Slackware 12, kernel 2.6.21.5-smp
Problema:
A placa de som parece estar funcionando corretamente, exceto pelo som que não sai
Antes de mais nada, verifique se o som não está no mute (perguntar não ofende) . Vá no shell e execute o alsamixer. Para ativar/desativar o mute, pressione a tecla “M”.
Ok, não está no mute e o som continua não saindo. Vamos então a solução.
INGREDIENTES
Alsa Drivers
Alsa Libs
Alsa Utils
- Baixe os itens acima no endereço oficial do projeto alsa: http://www.alsa-project.org/
- Descompacte os arquivos em uma pasta de sua preferência.
- Compile os pacotes desta forma:cd alsa-driver-xxxx
./configure –with-cards=hda-intel
make
sudo make install /* ou como root, apenas make install */cd alsa-lib-xxxx
./configure
sudo make install /* idem ao item acima */cd alsa-utils-xxxx
sudo make install /* idem aos itens anteriores */ - Como root ou usando sudo pare o alsa:
/etc/init.d/alsasound stop - Agora derrube e levante novamente o módulo snd-hda-intel
modprobe -r snd-hda-intel /* derraba o módulo */
modprobe snd-hda-intel /* levanta novamente */ - Agora você já pode configurar o volume com o kmix ou o alsamixer. Se usar o alsamixer, use depois o alsactl store 0 para salvar suas configuraçoes.
Agora você já pode fazer uma rave em sua casa. Até o próximo post.
5 comments Maio 12, 2008
Gerando documentos PDF com FPDF – Parte 02
Antes tarde do que nunca. Hoje iremos falar do método AddFont(). Este método serve para importar uma nova font TrueType ou Type1 ao documento PDF.
Ingredientes:
- Conversor de fonts TrueType/Type1
- Fonts TrueType/Type1
- FPDF
>> ttf2pt1
Se você é usuário *nix, baixe a última versão aqui: http://ttf2pt1.sourceforge.net/download.html se for usuário windows, tente aqui: http://gnuwin32.sourceforge.net/packages/ttf2pt1.htm ou aqui: http://public.box.net/ischool
Após concluir o download, descompacte o arquivo em um diretório de sua preferência. Vá até a console ( bash, ksh, etc ou prompt de comando para os usuários do windows ) e execute o comando:
C:\Downloads\ttf2pt1>ttf2pt1 -a C:\WINDOWS\Fonts\Verdana.ttf Verdana
$./ttf2pt1 -a /mnt/WINDOWS/Fonts/Verdana.ttf Verdana
O comando acima irá produzir dois arquivos. Um com a extensão .AFM e o outro T1A. Agora vamos retornar ao PHP. Pegue os balai de gato gerados anteriormente e a fonte ttf ( em nosso caso Verdana.ttf ) e leve para o diretório font do FPDF. Agora estamos prontos pra criar o arquivo que irá gerar as fonts que serão usadas de fato em nosso script PHP. Crie um script PHP com o código abaixo.
require_once ‘makefont/makefont.php’;MakeFont( ‘Verdana.ttf’, ‘Verdana.afm’, ‘ISO-8859-1′ );
?>
Tá pronta a bagaça. Agora basta executar o arquivo via CLI ( linha de comando ) ou por HTTP mesmo.
Pronto, agora você tem dois arquivos novos: Verdana.php e Verdana.z. Agora você já pode usar sua font Verdana em suas relatórios em PDF usando o método AddFont() como no exemplo abaixo.
require_once “fpdf_dir/fpdf.php”;
$pdf = &new FPDF(”L”,”mm”,”A4″);
$pdf->Open();
$pdf->AddPage();
$pdf->AddFont(“Verdana”);
$pdf->SetFont(“Verdana”,”B”, 14);
$pdf->Text(40,20,”Título do Relatório”);
$pdf->SetLineWidth(0.7);
$pdf->Line(40,22,200,22);
$pdf->SetXY(40,26);
$pdf->SetFont(”,”,12);
$pdf->Cell(30,5,”Modelo”,0,0,”C”,0);
$pdf->Cell(30,5,”Fabricante”,0,0,”C”,0);
$pdf->Output();
?>
É isso ai, mangaba não é não? Se ainda tiverem dúvidas, olhem este artigo feito pela iSchool http://ischool.000webhost.info/php/curso-fpdf-recursos-2 que é muito bom.
Abraços e até a próxima!
4 comments Abril 28, 2008