by Stiod Desenvolvimento Web
Assine nosso RSS

Archive for the 'Linux' Category

Como fazemos para pegar os valores de uma querystring rodando um shell script por cgi?

Vamos ao código:


for var in `echo $QUERY_STRING | tr "&" "\t"`
do
key=$(echo $var | tr = " " | awk '{print $1}';);
value=$(echo $var | tr = " " | awk '{print $2}';);
declare "query_$key"="$value";
done

Agora a lógica:

Quando chamamos um script via cgi, este cria a variavel de ambiente QUERY_STRING, que conterá o valor do GET em uma string única. Assim temos que tratar esta string para que tenhamos as variáveis com os valores que enviamos.

Vamos começar com este trecho:

`echo $QUERY_STRING | tr "&" "\t"`

Neste estamos mandando exibir o valor da variável QUERY_STRING e jogando a saida para o comando tr, que faz uma tradução de um texto em outro, transformando todos os & em \t no caso.
E o que é esta ` (crase) antes e depois do comando? Serve para você efetivamente executar um comando do shell, onde o resultado é retornado para o script.

Vamos para a próxima linha do script:

key=$(echo $var | tr = " " | awk '{print $1}';);

A partir desta linha, dentro do for, já temos a variavel var com o valor parametro=valor, então temos que pegar este parametro e valor. Exibimos o valor de var, jogando a saída padrão para o tr novamente, só que agora transformamos = em espaço, para aí jogarmos esta saída em outro programa para separar os argumentos, no caso o awk, onde mandamos exibir somente o primeiro parâmetro, rodando direto no shell seria algo como:


$ awk '{print $1}';
parametro valor
parametro

Digitando parametro e valor no awk e mandando exibir apenas o primeiro parâmetro ele retorna somente o primeiro.

Na linha seguinte do nosso script, a mesma coisa é feita, com a diferença de que o segundo parâmetro é pego para termos o valor e não a chave desta vez.

Agora já temos key com a chave do parâmetro do GET, e value com o valor da chave. Vamos a próxima linha:

declare "query_$key"="$value";

Agora estamos criando a variável com o valor de key com o valor de value. Como assim?

Se no GET tivessemos algo como stiod=nozes, $key teria o valor de stiod e $value o valor nozes. Então estariamos criando uma variável stiod com o valor nozes. Seria algo como se estivessemos digitado stiod=nozes no código. Ou seja, a partir deste momento, com o fim do for, temos uma variável com cada chave do GET com o prefixo "query_", e seus respectivos valores.

Seguindo o exemplo anterior, se tivessemos passado arquivo.sh?stiod=nozes, mandando exibir o valor da variável query_stiod seria exibido o valor nozes (echo $query_stiod)

É isso ai,
;)

O comando que extrai todo o conteudo de um arquivo rpm, criando as pastas que o rpm criaria a partir do diretório atual:

rpm2cpio arquivo.rpm | cpio -idmv
;)

Link sobre cpio

Postfix II

pathi

Demorou mas chegou!!

Ai está a segunda parte do servidor de email que subi com Postfix + Squirrelmail um tempo atrás...

Instalando o Squirrelmail:

  
  # aptitude install squirrelmail
  # aptitude install php5

  
Quando instalarmos o pacote do squirrelmail, será instalado também o apache2 e outros pacotes e dependências necessárias para o funcionamento dessas ferramentas. 
Depois de instalado, uma das primeiras coisas que temos que fazer, é criar uma espécie de alias para abrir o squirrelmail no browser. Portanto, adicione as duas linhas abaixo no httpd.conf:

  # vim /etc/apache2/httpd.conf
  Alias /webmail "/usr/share/squirrelmail/"
  DirectoryIndex index.php

  Para definir algumas configurações do Squirrelmail, basta usar o comando abaixo. Esse comando abre várias opções de configurações que podemor alterar para deixar o squirrelmail com uma cara mais pessoal. 
  # squirrelmail-configure

  Para acessar o squirrelmail do seu browser, basta usar:
  http://IP.IP.IP.IP/webmail
  ou
  http://www.dominio.com.br/webmail

  Lembrando que a principio, os logins dos usuários são os mesmos usuários que estão criados dentro de /etc/passwd.
  Execute agora o comando que cria a pasta dentro do diretório /etc/skel, para que todos os homes dos novos usuários criados daqui em diante já sejam criados com o diretório Maildir, fundamental para o armazenamento de mensagens no Postfix:

  # maildirmake /etc/skel/Maildir

 Se você já tem usuários criados mas não tem o Maildir dentro do home deles, basta usar o comando abaixo que será criado o Maildir de maneira correta. Caso não seja criado, é bem provável que apareçam erros quando tentar enviar/receber emails:

  # maildirmake /home/usuario/Maildir

  Para trabalhar com o Postfix autenticado usando o módulo SASL e TLS.

  # aptitude install libsasl2 sasl2-bin libsasl2-modules libdb3-util procmail
  # vim /etc/default/saslauthd

  
  Substitua a linha "START=no" por: "START=yes"
E confirme se a linha abaixo está igual:

MECHANISMS="pam"

Também é necessário fazer mais algumas alterações:

  # vim /etc/postfix/sasl/smtpd.conf"

pwcheck_method: saslauthd

mech_list: plain login

Crie o diretório:

# mkdir -p /var/spool/postfix/var/run/saslauthd

  Novamente edite o arquivo e substitua uma linha:

# vim /etc/default/saslauthd
  OPTIONS="-c"  por: OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

  Reinicie o serviço:

  # /etc/init.d/saslauthd restart
    
  Adicione no postfix o  grupo SASL:

  # adduser postfix sasl

  O proximo passo é adicionar o SASL no  Postfix:

  # vim /etc/postfix/main.cf
  
  Adicione as seguintes linhas:

  smtpd_sasl_local_domain =
  smtpd_sasl_auth_enable = yes
  smtpd_sasl_security_options = noanonymous
  broken_sasl_auth_clients = yes
  smtpd_recipient_restrictions = permit_sasl_authenticated,
  permit_mynetworks,
  reject_unauth_destination
  smtpd_tls_auth_only = no

  Reinicie o Postfix:

  # /etc/init.d/postfix reload
  # /etc/init.d/postfix restart

 

E então, desfrute!! :-D

Postfix I

pathi

People,

Esses dias tive que estudar um pouco sobre Postfix para entender marromenos como que funciona um server de email. Então ai vai um passo-a-passo do que eu fiz para subir  esse servidor de email com Postfix usando o squirrelmail para testar os envios e recebimentos dos emails ;-)
Usei Ubuntu Server (não gosto muito mas era o que eu tinha na mão) e gerenciador de pacote aptitude. O mesmo funciona com apt-get se preferir :-p

Primeiramente, vamos instalar os pacotes básicos na máquina. Esses pacotes não são necessariamente só do Postfix.

# aptitude install openssh-server vim-full mutt nmap postfix

Durante a instalação, provavelmente serão feitas algumas perguntas. Por enquanto, apenas dê ENTER para todas elas. Porque assim que a instalação terminar, iremos reconfigurar algumas opções e depois editar o arquivo de configuração direto.

Feita a instalação, vamos reconfigurar algumas opções básicas:

# dpkg-reconfigure postfix

Abaixo, segue um exemplo de configuração que foi definida:

=> OK
=> Internet Site
=> dominio.com.br
=> (em branco)
=> $myhostname, localhost.$mydomain, $mydomain
=> yes
=> 127.0.0.0/8 192.168.1.0/24
=> yes
=> 0
=> +
=> all

Depois que definirmos todas essas configurações, então automaticamente o postfix será recarregado (reload) e reiniciado.
Nesse server básico de Postfix, estou usando a mesma base de usuários comuns do sistema, como usuários que terão email no postfix. Lembrando que todos esses usuários comuns, são os que possuem ID maior que 1000 e estão dentro de /etc/passwd.

Para esse primeiro teste, vou adicionar um usuário novo no sistema:

# adduser joao

Como o postfix já está instalado e com uma pré-configuração, então vamos enviar alguns emails entre os usuários comuns do sistema. Para isso, vamos usar o telnet mesmo:

$ telnet localhost 25

HELO smtp.dominio.com.br
MAIL From: user@dominio.com.br
RCPT to: joao@dominio.com.br
DATA
Mensagem do email.
.
QUIT

Como estamos fazendo tudo na máquina local por enquanto, então usei um telnet localhost na porta 25. Na linha HELO como o próprio nome já fala, estou dando um "Olá" para o meu server de email e domínio. Na linha MAIL From estou avisando qual o usuário que irá enviar o email e na linha RCPT to está o usuário que irá receber o email. Para escrever a mensagem, chamamos o DATA e então basta escrever o que você quiser. Para finalizar a mensagem, basta dar um . único e ele entenderá como fim da mensagem. E para finalizar o telnet, basta dar um QUIT.
É importante prestar atenção nas palavras e letras maiúsculas.

Quando enviarmos esse email para o joao@dominio.com.br, será criado um arquivo com o nome do usuário em /var/mail/.
Por exemplo:

# ls /var/mail
joao

Então para ler o email, pode-se dar um cat nesse arquivo, ou então usar uma ferramenta chamada mutt, que lê emails em linha de comando.

# cat /var/mail/joao
ou
# su joao
$ mutt

Abaixo, segue a estrutura do arquivo /etc/hostname:

# cat /etc/hostname
dominio.com.br

Abaixo, segue a estrutura do arquivo /etc/hosts:

# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 dominio.com.br dominio.com.br
IP.ex.ter.no dominio.com.br dominio.com.br

A estrutura desses arquivos é importante, porque dependendo dos casos, o hostname e o domínio tem que estar com o mesmo nome.

O arquivo de configuração do Postfix está localizado em /etc/postfix/main.cf.
Abaixo vou colocar umas linhas básicas desse arquivo de configuração para analisar o conteúdo. Não vou explicar o que todas as linhas fazem, mas sites como o do próprio postfix explica o conteúdo de cada linha e muitas vezes cita exemplos =p

# vim /etc/postfix/main.cf
myhostname = IP.ex.ter.no.dominio.com.br
mydomain = dominio.com.br
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, $mydomain
relayhost =
relay_domains = $mydomain
mynetworks = 127.0.0.0/8 192.168.1.0/24
home_mailbox = Maildir/
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0

Vamos configurar os serviços de pop e imap. Para isso, será necessário instalar os seguintes pacotes:

# aptitude install courier-pop courier-pop-ssl
# aptitude install courier-imap courier-imap-ssl

Quando instalarmoas esses pacotes, será criado um diretório courier dentro do /etc/ e dentro desse diretório, teremos diversos arquivos. Antesde editar os arquivos e fazer as alterações, aconselho renomear os arquivos originais:

# cd /etc/courier
# mv imapd.pem imapd.pem.old
# mv pop3d.pem pop3d.pem.old

O próximo passo, é editar os arquivos imap.cnf e pop3d.cnf e alterar as informações necessárias. Por exemplo coloque em Country=BR, State=Sao Paulo e etc:

# vim imapd.cnf
# vim pop3d.cnf

Quando os arquivos forem alterados, devemos devemos criar novamente os arquivos imapd.pem e pop3d.pem com os comandos:

# mkimapdcert
# mkpop3dcert

O próximo passo agora é instalar o squirrelmail, que é uma ferramenta para testar o envio e recebimento de mensagens de email através de uma interface web mesmo. Se preferir, pode usar alguma outra ferramenta, como eu já tinha comentado antes:

# aptitude install squirrelmail
# aptitude install php5

Continua... :-p

Links de Referências:

http://www.postfix.org/documentation.html

https://help.ubuntu.com/7.04/server/C/postfix.html

http://virtual01.lncc.br/~licht/linux/servidores.postfix.arq.html

http://www.gdhpress.com.br/redeseservidores/leia/index.php?p=cap10-2

Gerando pacotes de atualização com base no SVN

Rafael Monteiro

Olá galera,

Hoje vou dar uma dica sobre geração de pacotes utilizando o Subversion.

O cenário é o seguinte: você desenvolve um projeto que utiliza o SVN como controlador de versões.
Periodicamente, você deve enviar pacotes para o cliente com atualizações do sistema (novas implementações, correções, ajustes, enfim...).
Entretanto, tais pacotes são incrementais, já que não é necessário enviar toda a estrutura do sistema a cada atualização.

Pelo Windows, é possível fazer a exportação dos arquivos mediante a utilização da ferramenta TortoiseSVN.
Através da opção Log, é obtido o histórico das revisões. Com base nesse histórico, podemos selecionar a última revisão que fora enviada ao cliente e a revisão desejada, comparar as revisões (a fim de obter os arquivos alterados) e, finalmente, exportá-los para uma pasta que manterá a estrutura do sistema.

Continue Reading »

GoTo: Agilizando acessos a comandos comuns

Rafael Sierra

Quantas vezes você já teve que abrir 5 terminais e em cada um digitar algo como:
ssh usuario@servidor -p porta

Ai depois tem que voltar em cada um pra digitar a senha e só então entrar no servidor.
Afim de agilizar um pouco esse processo, criei esse script que permite que você execute os comandos mais comuns com um simples:
goto 0

Para instalar o programa basta baixar o script aqui, colocar em algum lugar do seu path e adicionar permissão de execução:

$ wget http://blog.stiod.com.br/wp-content/uploads/goto
$ sudo mv goto /usr/bin/
$ sudo chmod +x /usr/bin/goto

A manutenção dos comandos é bastante simples, basta executar o goto sem passar nenhum argumento adicional e você vai cair na interface de gerencia dele, algo como:

Chose an option:

	add <command>
	del <id>
	edit <id <new-command>
	quit
	license
:

Para adicionar um comando na lista, basta digitar:
: add ssh user@servidor -p porta

Em seguida esse comando vai automaticamente aparecer na lista de comandos disponíveis:

Chose an option:
	0: ssh user@servidor -p porta

	add <command>
	del <id>
	edit <id> 

Lembrando que o comando pode ser qualquer coisa que esteja no seu $PATH e o "cd" (que faz parte do shell -seja bash, sh, ksh, etc-)

Para remover um comando da lista, basta digitar "del 0", ou o número do comando listado.
Caso queira modificar um comando, masta digitar "edit 0 comando novo".

Para executar um atalho, basta digitar no shell:

$ goto 0

E ele automaticamente vai executar o comando programado.

P.S.: Essa ideia não foi minha, ela foi kibada de um script que o Ulisses fez.

Convertendo HTML em PDF

gabriel

Esses dias estava precisando converter conteudo HTML em PDF em uma aplicação Python. Ja conhecia o ReportLab, porém é necessário alguns parsers para que as tags html sejam "traduzidas" para o pdf, que podem ser feitos utilizando SGMLlib. A solução mais simples foi utilizar o os com o HTMLDoc utilizando o próprio bash.
A instalação no Ubuntu 7.10 é simples:
[code]
$ sudo aptitude install htmldoc
[/code]
Para outras distribuições existem RPMs para a instalação, além de se poder instalar a partir do fonte.
Para passarmos um arquivo html para pdf o seguinte comando:
[code]
$ htmldoc --webpage -f arquivo.pdf arquivo.html
[/code]
Desta forma eu acesso o bash através de minha aplicação Python, e retorno o PDF do html desejado. ;)

PulseAudio no Ubuntu 7.10

Rafael Sierra

O PulseAudio é um software que se integra ao seu sistema operacional (também funciona em Windowstm) e permite um controle avançado do som, como definir qual placa de áudio que o software X deve usar e controlar o volume isoladamente do software Y, bem como permite que use placas de som remotas.
Continue Reading »

Recuperando comandos no bash

Rafael Sierra

Até 1 semana atrás quando eu precisava executar um comando que eu já tinha rodado, eu apelava pro

history |grep comando

Mas agora aprendi um novo comando (que por vezes eu já havia acessado sem querer), ele é o `CTRL+R`, quando você apertar CTRL+R no terminal irá aparecer escrito algo como
(reverse-i-search)`':

Ai basta digitar o que você lembrar do comando e apertar Enter quando encontra-lo, caso você digite o comando e ele não mostre o que você estava procurando, aperte novamente CTRL+R até encontrar o comando certo.

Como extrair a música de um vídeo

Rafael Sierra

Muita gente assiste a um vídeo e ouve uma música legal nele e pensa: "Que bom seria se eu pudesse pegar esse som e jogar em um MP3", agora eu falo: você pode!!! Claro, desde que você tenha Linux[1], basta instalar o ffmpeg e o mplayer, normalmente o mplayer já vem instalado, se não vier e você usa um debian-like (Ubuntu, Kurumin, e mais uma porrada) basta instalar pelo

aptitude install mplayer
aptitude install ffmpeg

Se você usa Fedora use o gerenciador de pacotes dele e instale o mplayer e o ffmpeg, se você não usa nenhum dos 2 tipos de linux então você gosta de sofrer (just like me) e pode instalar direto pelo fonte.
Continue Reading »