sexta-feira, 29 de janeiro de 2010

Wish + Interpretador de comandos do linux para criação de janelas em interface gráfica

Um dia fiz um concurso e na prova caiu a pergunta: "Para que serve o comando wish?".
Chutei e acertei! Estou escrevendo esse artigo pois não acho muito pela Internet a explicação sobre esse comando, somente o man, que também não explica muito sobre sua funcionalidade.


[O que é o Wish]
Wish é um comando para criação de janelas para seus scripts feito em bash. Na verdade, o wish é um interpretador de comandos TCL/TK. Se quer saber como utilizar o wish, pesquise sobre TCL/TK, se pesquisar somente sobre o wish não encontrará muita coisa.


[TCL e TK]
TCL é uma linguagem de programação e o TK é um conjunto de funções gráficas para o TCL (criação de botões, labels, select, ...).


[Exemplo de aplicação]
Recentemente tive o seguinte problema: "rdesktop - Como utiliza-lo com interface gráfica?"
Utilizo muito o rdesktop para logar nos servidores Windows. O ruim é que esse é um programa de linha de comando, queria que ele fosse ativado com um clique em um ícone, mas como informar o endereço do servidor que quero logar? Se simplesmente fizer um script que chama o rdesktop não vai dar certo pois você precisa do parâmetro 1 que é o nome do servidor:
===
Script 1 - rdesktop em linha de comando
===
#!/bin/bash
rdesktop ${1}


Eis que surge o wish. Ao executar o script abaixo, uma janela com um input text aparecerá, informe o nome do servidor que queira logar que o rdesktop entrará em ação:
===
Script 2 - rdesktop com interface gráfica
===
#!/usr/bin/wish
#titulo da janela
wm title . "RDW - Nome do servidor"
#tamanho da janela
#larguraXaltura+x+y
#100000 faz ficar colado em baixo
wm geometry . 300x50+200+10000
#criando input text, nomeando variavel inputText e focando cursor do teclado nele
grid [entry .inputText -textvar inputText -just left] -ipadx 50 -rowspan 100
focus .inputText
#associando teclas ao input text e respectivas acoes
bind .inputText RDesktop
bind .inputText Sair

#########
# Funcoes
#########
proc RDesktop {} {
exec rdesktop -u usuario -d dominio -g 90% $::inputText &
exit
}

proc Sair {} {
exit 0
}


[Download]
Baixe o "Script 2 - rdesktop com interface gráfica" clicando em rdw-publico.sh.

quarta-feira, 27 de janeiro de 2010

Capslock no rdesktop do ubuntu não funciona

Comente a linha que inibe o Caps_lock no arquivo /usr/share/rdesktop/keymaps/common:

.
.
.
# COMENTE A LINHA ABAIXO PARA NÃO INIBIR O CAPSLOCK
#Caps_Lock 0x0 inhibit
.
.
.

sexta-feira, 2 de outubro de 2009

GBU - Gerenciador de BackUps - versão 0.1.1 - Sistema para gerenciamento de backups em php+bash

===============================
[GBU - Gerenciador de BackUps]

Versão Beta 0.1.1
Licensa GPL
Autor André Oshiro Barcelos

GBU é um sistema para gerenciamento de backups feito em php+bash que realiza backup de servidores remotos via comando SCP.


===============================
[Tipos de backups realizados]

- arquivos
- diretórios
- dump de banco MySQL.


===============================
[Instalação]

Para instala-lo você deve possuir um servidor de backups com linux e o php5-cli instalado. Execute o arquivo do gbu com o comando install (ex.: php gbu.0-1-1.php install). Siga as mensagens que forem exibidas na tela.


===============================
[Cluster de storages de backup]

Você pode eleger mais de 1 servidor para efetuar os backups e manter a gerência centralizada, basta instalar o gbu em outros servidores e manter a lista de backups em 1 único.
Ex.:
Existem 2 servidores para backup: bkp1 e bkp2. Onde bkp1 é o nosso gerenciador e também storage; bkp2 é somente storage.
Efetuando "gbufes list" no bkp1

====================================================
ID HOST/ALVO STORAGE TIPO FREQ CIC ULTBKP
====================================================
1 web.aob.br#1 dire s:2 2 021009
/www/site /sto/hd01/ 000010
gbu/site 3600s

----------------------------------------------------
2 dns.aob.br#1 bkp2.aob.br dire s:6 2 021009
/etc/dns.conf /sto/hd01/gb 010203
u/dns 17s

----------------------------------------------------

Como podemos ver, nossa lista de backup está centralizada em bkp1.aob.br, e utilizamos o servidor bkp1.ufes.br como (quando oculto é assumido o host local) e o host bkp2.ufes.br como storage.


===============================
[Erros conhecidos]

- Erro ao copiar arquivos maiores de 60GB:
Se ao tentar efetuar backup de um arquivo/pasta maior que 60GB e o mesmo parar a cópia em 60GB, verifique o usuário gbufes criado na máquina de backup, o mesmo deve possuir a pasta /home/gbufes/.ssh criada com permissões de owner e grupo setadas para gbufes. Esse erro ocorre pois o fingerprint da máquina alvo não é escrito dentro do diretório /home/gbufes/.ssh, expirando a sessão do ssh a cada 1 hora e terminando a cópia do arquivo (cerca de 60GB são copiados em 1 hora numa rede FastEthernet).


===============================
[Ajude-nos a melhorar]
Para ajudar a melhorar o GBU, postem seus comentários, dúvidas, sugestões, bugs, ...


===============================
[Download GBU]

Clique aqui para baixar o GBU Versao 0.1.1

.

quarta-feira, 26 de agosto de 2009

Como adicionar monitoramento de partições no snmpd do linux

- Altere o arquivo /etc/snmp/snmpd.conf, descomente a linha:
.
.
.
disk / 10000
.
.
.
Nota: isso fara com que a particao / seja monitorada. 10000 informa que se a partição retornar um tamanho abaixo desse, um erro é iniciado.


- Para adicionar outras partições, acrescente novas linhas:
.
.
.
disk / 10000
disk /tmp 10000
disk /home 10000
.
.
.

- Utilize a mib UCD-SNMP-MIB::dskAvail para verificar o valor das partições:
Ex.: snmpwalk -v 1 -c trash12 hp8.ufes.br UCD-SNMP-MIB::dskAvail

Outras mibs que podem ajudar:

UCD-SNMP-MIB::dskTotal.1 = KiBs totais da partição 1
UCD-SNMP-MIB::dskTotal.2 = KiBs totais da partição 2
UCD-SNMP-MIB::dskAvail.1 = KiBs restantes na partição 1
UCD-SNMP-MIB::dskAvail.2 = KiBs restantes na partição 2
UCD-SNMP-MIB::dskUsed.1 = KiBs usados na partição 1
UCD-SNMP-MIB::dskUsed.2 = KiBs usados na partição 2
UCD-SNMP-MIB::dskPercent.1 = percentual usado na partição 1
UCD-SNMP-MIB::dskPercent.2 = percentual usado na partição 2

sexta-feira, 10 de julho de 2009

Script para alterar senha em texto plano de um usuário linux

Algo muito útil para criação de usuários por script é informar seu password. Porém os comandos adduser e passwd só permitem que a senha seja informada pelo usuário, não por um script, o passwd segue a mesma linha.
Não conhecia o comando chpasswd, com ele podemos informar a senha do usuário em texto plano como no script abaixo:

#!/bin/bash

sUsuario="suelen"
sSenha="su3l3n"

echo ${sUsuario}:${sSenha} | chpasswd -m

#Nota: -m utiliza MD5

sexta-feira, 19 de junho de 2009

Como criar um outro disco para maquinas virtuais Xen

Tenho um servidor web linux rodando em um servidor de maquinas virtuais Xen.
O espaço em disco do meu servidor web encheu! Precisei criar outro disco para o servidor web utilizar.
Fiz os passos abaixo:

[Criando arquivo/disco]
- Precisamos criar um novo arquivo para servir como disco rígido:
dd if=/dev/zero of=/xen/SRV-WEB1.disk2 bs=1M seek=10000 count=1
Nota: estou criando um arquivo/disco de 10000MB.

- Formatando arquivo/disco com sistema ext3:
mkfs.ext3 /xen/SRV-WEB1.disk2
Nota: será alertado que o arquivo não é de bloco, apenas confirme que quer continuar.


[Adicionando arquivo/disco à maquina virtual]
- Recuperando configurações da máquina virtual Xen:
virsh dumpxml SRV-WEB1 > /tmp/SRV-WEB1.xml

- Edite as configurações:
vim /tmp/SRV-WEB1.xml

- Adicione o novo arquivo/disco. No exemplo abaixo temos um pedaço do arquivo /tmp/SRV-WEB1.xml com configuração do primeiro e segundo disco.
Preste atenção que também foi informado o device 'xvdb' no segundo disco:
.
.
.
<disk type='file' device='disk'>
<driver name='file'/>
<source file='/xen/SRV-WEB1.disk1'/>
<target dev='xvda' bus='xen'/>
</disk>

<disk type='file' device='disk'>
<driver name='file'/>
<source file='/xen/SRV-WEB1.disk2'/>
<target dev='xvdb' bus='xen'/>
</disk>

.
.
.

- Desligue a maquina virtual:
xm shutdown SRV-WEB1

- Remova as configurações da máquina:
virsh undefine SRV-WEB1

- Adicione as novas configurações inseridas no arquivo /tmp/SRV-WEB1.xml:
virsh define /tmp/SRV-WEB1.xml

- Inicie novamente a máquina:
xm start SRV-WEB1

- Por fim, monte o novo HD em seu sistema:
mount /dev/xvdb1 /novohd
Nota: Se o disco não estiver formatado e particionado não aparecerá xvdb1 somente xvdb.

quinta-feira, 18 de junho de 2009

Como montar um device ISCSI, cliente ISCSI

Um servidor ISCSI permite que você crie um servidor de discos scsi. Deste modo, um servidor A com 500GB pode compartilha-los para que outros servidores utilizem esse espaço como um disco scsi local.
Veja como montar um servidor ISCSI em http://www.1bit.com.br/content.1bit/weblog/iscsi_cluster.
Nesse post ensinarei como montar um disco ISCSI existente em um servidor, isso não foi comentado no artigo do 1bit.

A seguinte instalação foi realizada no unbuntu 9.

- Baixe o pacote que permite a conexão com o servidor:
apt-get install open-iscsi

- Edite o arquivo que indica o modo de autenticação, login e senha do servidor
vim /etc/iscsi/iscsid.conf

informe as seguintes linhas:
.
.
.
node.session.auth.authmethod = CHAP
node.session.auth.username = USUARIO
node.session.auth.password = SENHA

.
.
.

- Reinicie o serviço cliente para que as configurações tenham efeito
/etc/init.d/open-iscsi restart

- Conecte ao servidor ISCSI:
iscsiadm -m discovery -t sendtargets --login -p IP_DO_SERVIDOR_ISCSI

Nota:
Esse comando faz login no servidor ISCSI com as credenciais informadas em /etc/iscsi/iscsid.conf.
Após a execução desse comando será criado um novo device scsi. Ex.: /dev/sdb


[Possíveis Erros]
- "iscsiadm: automatic login after discovery is not fully implemented yet."
Se está utilizando o debian etch, baixe os pacotes do open-iscsi da versão lenny. Pelo que se pode ver, na versão etch não é suportado o login para os servidores.


[Dúvidas]
Ainda não sei como criar vários devices de servidores ISCSI diferentes. Pois o arquivo /etc/iscsi/iscsid.conf não permite informar diferentes logins para diferentes servidores. Se alguém sabe a solução, por favor comente-a aqui.