shell

Uma GUI para chamar serviços

Sabe, é bem chato você ter só 256M de RAM. Depois de um tempo, resolvi desativar o servidor web por utilizá-lo muito pouco. Assim, sempre que preciso utilizá-lo o chamo. Mas também é bem chato fazer isso em linha de comando, não? Por isso fiz um script que pode ser útil pra você também: o zdaemon. (é, este é mais um artigo técnico)

A idéia

Bom, um daemon não tem nada a ver com demônios. Um daemon nada mais é do que um programa que executa sem necessidade de intervenção do usuário. Executa em segundo plano.

É um conceito de Unix, utilizado também pelo GNU/Linux (_GNU is Not Unix_ quanto a código-fonte: em projeto, é sim). Exemplos de programas que rodam como daemons são: Apache e MySQL. Porém há diversos e diversos outros daemons em um sistema Unix.

Um daemon geralmente é chamado de maneira direta, recebendo como parâmetro o que você quer que ele faça. Geralmente, tal ação se resume a: iniciar (start), parar (stop) ou reiniciar (restart). Algumas outras podem aparecer, mas estas são as mais comuns.

Então, quando queremos iniciar um daemon do apache, por exemplo, precisamos saber onde está o script desse daemon. No Debian, provavelmente estará em /etc/init.d e se chamará apache. Então, chamamos /etc/init.d/apache start.

Mas há casos em que nem sempre queremos que o daemon seja iniciado automaticamente (meu caso, citado na introdução deste artigo) ou outros em que precisamos reiniciar um servidor com freqüência.

A idéia, portanto, é termos um programa que faça uma GUI (interface gráfica) simples para um daemon de nossa escolha, nos permitindo iniciá-lo, pará-lo e reiniciá-lo rapidamente.

O script

A solução aqui proposta se resume a um shellscript usando Zenity (por isso o z do zdaemon) para construir janelas de diálogo. É, é como aquele script que monta imagens de CD pro apt-get ou aquele outro que permite trocar a imagem do GRUB.

Primeiro checamos se foi passado o endereço de um executável válido (ou se foi pedida ajuda sobre o uso (famoso parâmetro "--help"). Caso exista, o script simplesmente mostrará uma janela com as opções: start, stop, restart e quit, sendo quit a forma de sair do programa. Ao pedir uma das três opções que lidam com o daemon, o script mostrará em outra janela de diálogo a informação que o daemon retornou (se a operação foi ou bem ou mal sucedida).

Bem, aqui temos o script:

#!/bin/bash

if [ $# = 1 ]
then
if [ "$1" = "--help" ]
then
echo "$0 <Caminho para o daemon desejado>"
exit
else
THEDAEMON=$1
fi
fi

if [ "
exit
fi

TOQUIT=0

while [ "$TOQUIT" = "0" ]
do
OPTION=`zenity --list --text "Escolha a operacao a \
executar no daemon $THEDAEMON:" --column Operacao start \
restart stop quit`
if [ "$OPTION" = "quit" ]
then
TOQUIT=1
else
zenity --info --text "Executando $THEDAEMON $OPTION."
$THEDAEMON $OPTION | zenity --text-info
fi
done

Como usar

Suponha que você use um computador com GNU/Linux sem poder instalar um servidor web. Sem problema! Você pode usar o Monkey, um servidor web muito leve e simples de instalar. Seu script de daemon se chama banana. Então, para executá-lo, basta chamar:

$ ./zdaemon.sh monkey/bin/banana

Certo, mas e se você quer rodar é o apache mesmo? Você tem a senha de root, mas é claro que utiliza o computador com um usuario sem privilégios na maior parte do tempo. Então, o que fazer?

Para isso, você pode chamar o GKSu. Tudo o que o GKSu faz é pedir a senha de root e então executar o comando passado como root.

Para rodar o apache:

$ gksu ./zdaemon.sh /etc/init.d/apache

Tudo isso considerando que o zdaemon esteja na pasta corrente. Você pode colocá-lo no /usr/bin para facilitar as coisas. E se você mexe muito com o Apache, por exemplo, pode criar um atalho com o comando acima mostrado. Isso facilita as coisas.

Bem, é isso. O zdaemon tem me ajudado um bocado e aqui está, se acharem útil também. ;-)

-- Cárlisson Galdino

Apt-get e Imagens de CD

Digamos que você tenha um computador sem Internet - ou não tenha Internet o tempo todo - e queira instalar Debian. Digamos que tenha conseguido uns DVDs com as imagens ".iso" de todos os CDs do Debian gravadas neles (ou as imagens em um outro HD). O apt-get é uma maravilha, mas é chato ter que trocar CD quando vamos fazer muitas instalações de uma vez (ou mesmo em casos normais). Que tal uma forma mais prática?

Montagem

Em Unix existe um conceito de "montagem de dispositivos". Quando você acessa um disquete ou CD-ROM, ele é "montado" antes, o que consiste precisamente em se mapear todo o conteúdo da mídia para uma pasta existente no seu computador. Assim, um arquivo "documento.odt" no disquete aparece magicamente em "/media/floppy0/documento.odt".

O que é importante perceber sobre montagem é que qualquer dispositivo de armazenamento pode ser montado em qualquer diretório. Se você reinstala seu GNU/Linux com freqüência, é bom colocar uma partição para ser montada no "/home", assim seus arquivos pessoais sempre estarão protegidos. Se tem um servidor, talvez seja interessante uma partição para o "/var", e assim por diante.

Mas você também pode montar "imagens de CD" em diretórios, sabia? Se você baixou uma imagem do Kurumin há muito tempo e salvou simplesmente como "kurumin.iso", como saber que versão é? Você pode montar o CD em um diretório qualquer e fuçar nos arquivos que estão lá pra ver se descobre.

Perceber esses "detalhes" é importante pois o leque de possibilidades é muito grande.

Imagens

Para preparar o ambiente:

  1. Consiga os arquivos de imagem de CD do Debian (arquivos ".iso");
  2. Coloque-os em uma mesma pasta, com nomes padronizados (por exemplo: "cd-1.iso", "cd-2.iso"...);
  3. Sempre que precisar de um CD do debian para instalar algo, você pode simplesmente montá-lo em /dev/cdrom0.

Bem, então para facilitar isso, você pode utilizar um script que mostre os CDs existentes e permita que você escolha um deles, montando-o em seguida. Criei um código simples utilizando o Zenity (programa que cria janelas de diálogo do GNOME), mas fica a seu critério qual utilizar. Veja como fica:

#!/bin/bash

CD='/media/cdrom' # ponto de montagem do CD
DEB='/debian-sarge-iso' # diretório onde estão as imagens
QUIT="Nenhum"
PREFIX="debian-31r3-i386-binary-" # prefixo do nome de cada imagem

umount $CD

LISTA=`ls -1 /debian-sarge-iso/ | sed "s/$PREFIX//g" | sed 's/\.iso//g'`

OPCAO=`zenity --list --text="Escolha o número do CD Debian" \
--column="CD Número" $QUIT $LISTA`
if [ '$OPCAO' != "$QUIT" ]
then
mount -o loop "$DEB/$PREFIX$OPCAO.iso" $CD
fi

Se quiser, você pode chamar antes o zenity com "--info" para explicar seu uso.

Só tem um problema com isso: você vai precisar de permissão de root para montar. Se preferir, opcionalmente, você pode instalar o "sudo" (ferramenta que permite que usuários normais executem comandos como se fossem o root) e configurá-lo para este caso específico.

Para configurá-lo, vamos supor que seu login habitual seja "ian". Entre como "root" e modifique o arquivo "/etc/sudoers" acrescentando a seguinte linha:

 ian ALL=(ALL) NOPASSWD:/bin/mount

Pronto, altere seu script trocando onde tem "mount" por "sudo mount" e já dá pra utilizar normalmente.


Apt-get

Agora falta informar ao apt-get que CDs você tem. Para isso, digite, como root:

 apt-cdrom add

Ele pedirá para inserir o CD no drive. Ao invés disso, execute o script e escolha o CD. Só então pressione ENTER no terminal com o comando "apt-cdrom" esperando. Repita a operação para cada CD.

Dessa forma você poderá instalar tudo no Debian sem precisar gastar com CDs adicionais e sem aborrecimento de "abre-fecha gaveta". Além de ficar muito mais rápido que CDs propriamente. É realmente uma maravilha. ...mas acessar os repositórios oficiais é sempre muito melhor! :-)

Bardo

BR AL Arr
Sou Cárlisson Galdino, da Terra dos Marechais. Seja bem-vindo ao meu lar. Aqui você encontra Opinião e Arte. Use o menu no topo da página.

Iniciar sessão