Um amigo me perguntou se eu sabia fazer a conversão de docs para PDF de forma automatizada no Linux. Eu disse que não mas que podia dar uma pesquisada rapidamente e fazer algo com shell script. Depois de ler algumas páginas do stack overflow e testar diversas formas de fazer a exportação para PDF, eu encontrei o que me pareceu mais legal. A utilização do libreoffice através da linha de comando.

O resultado foi o seguinte:

doc2PDF.sh


#!/bin/bash
#Author: Rodrigo Lira  

EXCLUDE=".pdf|.sh"

TODAY=`date +'%Y%m%d'`
files=`find . | egrep -v "$EXCLUDE"`

echo $files

if [ ! -z "$files" ] 

then	
	for file in $files
	do
#		name=`echo "$file" | awk -F "." '{ print $2 }'`
		echo "Converting $file"
        soffice --headless --convert-to pdf $file
	done

fi

Para minha surpresa, ele disse que na verdade o problema era transformar código fonte, ou seja arquivos de texto para PDF.
Refiz rapidamente o código para utilizar duas outras ferramentas: o enscript e o ps2pdf. O resultado foi o seguinte:

txt2PDF.sh


#!/bin/bash
#Author: Rodrigo Lira  

INCLUDE=".c$|.sh$|.java"

TODAY=`date +'%Y%m%d'`
files=`find . | egrep "$INCLUDE"`

echo $files

if [ ! -z "$files" ] 

then	
	for file in $files
	do
		name=`echo "$file" | awk -F "." '{ print $2 }'`
		echo "Converting $file"
        #soffice --headless --convert-to pdf $file
        enscript -p .${name}.ps ${file}
        ps2pdf .${name}.ps .${name}.pdf
        rm .${name}.ps
	done

fi

Em ambos, o script apenas convertem os arquivos que estão na mesma pasta dele, mas isso pode ser facilmente modificado.

Rodrigo Lira,

It is really simple debug a shell script.  For instance, if you need to trace all the code, you just need insert the code “set -x” into the code.
Let me show you an example:

#!/bin/bash
set -x

num=3

if [ $num -le 1 ]
then
   echo "if"
else
   echo "else"
fi

OUTPUT
rcls@rcls-notebook:~$ ./test.sh
+ num=3
+ ‘[‘ 3 -le 1 ‘]’
+ echo else
else

Um amigo meu perguntou-me um bom material pra começar a estudar C/C++ em Linux, logicamente lembrei-me do livro “Advanced Linux Programming” que fica disponível na web.  Claro que o que ele queria era algo para começar a dar os primeiros passos com a linguagem no ambiente Linux mas se você já tem alguma experiência e quer se aprofundar na manipulação de Threads,  Comunicação entre processos, Syscalls, etc, eu recomendo dá uma lida nesse livro!

http://www.advancedlinuxprogramming.com/

Download de capítulos
http://www.advancedlinuxprogramming.com/alp-folder

 

Recently, I found a way to record shell sessions. It seems nice.

If you need to create a “howto” on the shell, you should use the Asciinema!

See https://asciinema.org/

 

“O livro Shell Script Profissional ensina a fazer programas de qualidade em shell, com ênfase em código legível, portabilidade e manutenção futura. Melhore seus scripts, adicionando opções de linha de comando, arquivo de configuração, banco de dados e interface amigável ao usuário. Use a internet para rodar seu CGI. Domine as ferramentas do sistema, as expressões regulares e os caracteres de controle.

Indicado para administradores de sistemas, programadores, analistas, estudantes e usuários avançados. Indispensável para quem quer dominar o assunto. Os ensinamentos poderão ser usados em diversos sistemas, incluindo Unix, Linux, Mac e Windows. “  Aurélio Marinho.

Nessas férias queria aprender um pouco mais de Shell Script, procurei alguns livros  mas fiquei em dúvida entre  Shell Script Profissional e Programação Shell Script, de Aurélio Marinho e Julio Cezar Neves, respectivamente. Apesar de meu conhecimento ser bastante precário sobre o assunto, acabei optando pelo livro do Aurélio. Pesquisando no BuscaPé encontrei o livro por um preço muito abaixo do normal, e sem frete no Submarino. Prontamente comprei.

Há pouco tempo o livro chegou, já dei uma lida em alguns capítulos e afirmo que realmente é um livro para se ter em casa. São 480 páginas de boas práticas de programação e muito Shell Script, o autor consegue explicar assuntos complexos de uma forma simples e divertida. Incentivo a quem quiser aprender mais sobre Shell comprar o livro. Porém cuidado, como o próprio Aurélio diz no site, o livro é indicado para pessoas que tenham algum conhecimento básico sobre shell, caso contrário, recomenda-se o Programação Shell Script.

Apenas como dica, costumo ler o livro com a presença do Canivete Suíço do Shell do mesmo autor.

Rodrigo Lira

Encontrei esse post bem legal no Blog Jedizone do Marcelo Barros. Aproveito a oportunidade para usar essa nova função de reblogar do WordPress.

Introdução ao desenvolvimento de drivers para Linux O Alan me passou o link sobre um curso de introdução ao desenvolvimento de drivers para Linux e eu estou aqui republicando. O material é de Artur D’Assumpção, de Portugal, e é realmente muito bem feito. Ele refaz o clássico exemplo do driver tipo char para porta paralela mas acrescentando detalhes e explicações que acabam por tornar o exemplo muito mais real, além de uma grande discussão sobre vários mecanismos do kernel. Leia mais

via Jedizone

Tenho várias versões de Python instalado aqui no meu sistema, e antes de ter instalado a mais nova versão, o Python 2.7, o meu Ubuntu tinha como versão default o Python 2.6. Após a instalação dessa nova versão notei que no terminal ao ser digitado apenas python, sem  especificar a versão do interpretador, ele iniciava o 2.7.  Corrigir esse problema para alguns poderia ser apenas comodismo, mas, em um sistema como o Linux, que possui vários scripts rodando em Python, a simples alteração do interpretador default poderia causar um problema bem maior.

Pesquisei um pouco na internet, e encontrei a solução, mas, para minha surpresa o problema persistiu. O detalhe que estava faltando só encontrei numa lista de discurssão, vou explicar o que se deve fazer. Não tenho certeza mas creio que essa dica funcione em qualquer distro que seja baseada no Debian.

1 – Edite o arquivo /usr/share/python/debian_defaults

$ sudo gedit /usr/share/python/debian_defaults

2 – Coloque na linha default-version a versão desejado do Python

default-version = python2.6

3 – Ainda no arquivo, adicione na linha supported-versions as versões instaladas.

supported-versions = python2.6, python3.0, python2.7

Feche o arquivo, e vamos para a etapa final.

4 – Com o comando which descubra qual link o shell está acessando o interpretador.

$ which python # informa o path

/usr/bin/python

Um breve comentário deve ser feito aqui, quando instalei o Python 2.7 o shell estava acessando python por um link /usr/local/bin/python devido a isso sempre que fazia a etapa 5, nada era modificado. Quando vi pelo comando which que ele estava acessando outro link, apenas o exclui e ele voltou a acessar o do /usr/bin/python.

5 – Remova o link simbólico informado na  etapa 4 ( /usr/bin/python ) e crie um novo link para a versão que deseja ter como default.

sudo rm /usr/bin/python

ln -s /usr/bin/python2.6 /usr/bin/python # cria um link simbólico

Com essas alterações, tudo voltou ao normal. Talvez seja necessário abrir novamente o shell.

Rodrigo Lira

subversion

Como tinha dito no último post falarei  como autenticar um repositório svn mas antes disso darei uma dica para quem precisa encurtar o caminho de acesso.

Se você perceber no ultimo post o caminho do repositório para acesso externo ficou

svn://250.1.168.72/home/rodrigoclira/projeto

Além de ser extremamente grande, revela todo uma série de diretórios no seu pc, uma forma simples de resolver isso é criando um link simbólico no diretório raiz,

rodrigoclira@desktop:/# ln -s /home/rodrigoclira/projeto projeto
rodrigoclira@desktop:/# chmod 777 projeto

Agora podemos utilizar apenas

svn://250.1.168.72/projeto

Vamos para a autenticação…

Primeiramente, há três maneiras de fazer uma autenticação num repositório, via ssh, apache ou svn. Vou explicar utilizando a do próprio svn que é bem simples.

Dentro de qualquer repositório há algumas pastas entre elas a ‘conf’, essa pasta contém os arquivos que iremos alterar.

É no arquivo ‘passwd’ que iremos definir os usuários e suas respectivas senhas.

[users]
rodrigo = 1234

Dessa forma o repositório terá apenas um usuário, ‘rodrigo’ com a senha ‘1234’.

Agora é necessário alterar algumas linhas da tag [general] do arquivo ‘svnserve.conf’, que se encontra na mesma pasta.

No final a sua aparência será algo como

[general]
# Acesso anônimo não é autorizado
anon-access = none # outras opções, read ou write
# Usuários autenticados podem ler e escrever
auth-access = write
# O arquivo que define os usuários
password-db = passwd
# Nome real do repositório
realm = Repositorio do Rodrigo


Com essa configuração qualquer acesso ao repositório só será permitido após uma autenticação.

Instalando servidor svn no linux

| Controle de versão com Subversion

Rodrigo Lira

“Um sistema de controle de versão é um software que tem finalidade gerenciar diferentes tipos de versões no desenvolvimento de um documento qualquer. Esses sistemas são comumente utilizados no desenvolvimento de software para controlar as diferentes versões – histórico e desenvolvimento – dos códigos-fontes e também da documentação. Este tipo de sistema é muito presente em empresas e instituições de tecnologia e desenvolvimento de software. É também muito comum no desenvolvimento de software livre. É útil, em diversos aspectos, tanto para projetos pessoais pequenos e simples como também para grandes projetos comerciais.”

Texto retirado do Wikipedia

Recentemente foi necessário instalar e configurar um servidor svn na empresa que estagio. Devido a grande quantidade de informação inútil absorvida na internet e minha total inexperiência no assunto, a instalação demorou mais do que o necessário porém o procedimento é bem simples. A instalação foi feita numa máquina virtualizada através do VMware com o Debian Lenny.

Vamos lá !

Para o funcionamento do Servidor SVN é necessário a instalação de três pacotes, o subversion, apache2 e a libapache2-svn. Para instalar os pacotes, como root, digite no terminal

#apt-get install subversion

#apt-get install apache2

#apt-get install libapache2-svn

Bem agora é necessário adicionar duas linhas no arquivo de configuração do apache, “httpd.conf” e caso você esteja usando Debian é necessário fazer o mesmo para o “apache2.conf”. Ambos são encontrados em /etc/apache2/

Adicione o seguinte

LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so

LoadModule dav_svn_module /usr/lib/apache2/modules/mod_dav_svn.so

Depois é necessário reiniciar o servidor apache

rodrigoclira:/etc/apache2/# /etc/init.d/apache2 restart

Será impresso algo parecido com isso na tela

Forcing reload of web server: Apache2[Sun Apr 03 22:16:45 2010] [warn] module dav_module is already loaded,skipping

[Sun Apr 03 22:16:45 2010] module dav_svn_module is already loaded,skipping

[Sun Apr 03 22:16:48 2010] module dav_module is already loaded, skipping.

[Sun Apr 03 22:16:48 2010] module dav_svn_module is already loaded,skipping

Bem, está quase tudo pronto, agora é necessário rodar o comando svnserve que permite acessar aos repositórios usando o svn network protocol.

#svnserve -d

DICA Adicione esse comando no script de inicialização da máquina, veja como no artigo do vivaolinux

Acabada as configurações, vamos criar um repositório SVN

rodrigoclira@desktop:/home/rodrigoclira# svnadmin create projeto

Onde “projeto” é o nome do repositório a ser criado. Para acessar externamento ao repositório por um cliente SVN, como o TortoiseSVN , RapidSVN ou o svn, dê um checkout informando na url o seguinte

svn://IPdaMAQUINA/CAMINHOdoREPOSITORIO

 

Se tudo foi feito corretamente aparecerá a confirmação do checkout, informando que não há alterações no repositório.

Esse tutorial é baseado no Playing with SVN do Debian Administrator

Próximo post eu escreverei algumas dicas e explicarei como colocar autenticação no repositório SVN.

| Autenticação no repositório svn

| Controle de Versão com Subversion

| HP12C on line

Rodrigo Lira