Scripts Shell para obter seu ip 24h por dia na internet discada!

Artigo retirado do site Dicas-L da Unicamp

Colaboração: Rafael Henrique da Silva Correia

Gostaria de mostrar 2 scripts pra vocês que estão me ajudando
muito no meu dia-a-dia. Sou um usuário de internet discada,
como todos sabem, suas características marcantes são a lentidão e as quedas,
1 por hora dependendo do provedor (se não mais). Eu queria desenvolver
um programa que me mantivesse conectado 24h por dia mesmo que eu não estivesse
em casa, essa era minha proposta inicial, porém também gosto de usar meu
computador mesmo que não esteja em casa, resumindo ssh 🙂

Criei então dois scripts (um deles baseado na Mala direta de Júlio César
Neves no Cantinho do Shell) deste mesmo site!

O primeiro é um script para verificar se a conexão está ativa de um em um
minuto, em caso de queda de conexão ele reconecta pelo wvdial

O segundo (que foi baseado na mala direta) envia meu ip de uma em uma hora
para meu e-mail! Porque em uma reconexão eu perco meu ip anterior por não
ser estático.

wvdial
======

(o objetivo desta dica é usar o wvdial para conectar, se no caso seu modem
não estiver em pleno funcionamento descarte essa dica)

O wvdial é um discador em modo texto do GNU/Linux, encontrado em quase
todas as distribuições (se não todas). Ele é muito fácil de ser configurado,
você só precisa escrever um arquivo de configuração chamado wvdial.conf no
diretório /etc.

Como configurá-lo??

Uma coisa acaba se tornando simples quando você quebra a cabeça durante
3 meses pra ver isso funcionar, no meu caso apanhei de 10×0 do meu modem
durante 3 meses, mas quando você passa um tempo quebrando a cabeça você
aprende como funcionam as coisas. Há um tempo atrás usava o gnome-ppp
(discador do Gnome) agora só uso o wvdial, porque gostei mais dele e ele
não tem tantos problemas como o gnome-ppp.

Como configurar seu arquivo “/etc/wvdial.conf:“
=================================================

[Dialer Defaults]
Modem = [local do dev do modem]
ISDN = off
Modem Type = Analog Modem
Baud = 115200
Init = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 =
Init4 =
Init5 =
Init6 =
Init7 =
Init8 =
Init9 =
Phone = [número a ser discado]
Phone1 =
Phone2 =
Phone3 =
Phone4 =
Dial Prefix =
Dial Attempts = 1
Dial Command = [discagem tom=ATM1L3DT pulso=ATM1L3DT]
Ask Password = off
Password = [senha]
Username = [seu username COMPLETO]
Auto Reconnect = off
Abort on Busy = on
Carrier Check = on
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = on
;Minimize = off
;Dock = on
;Do NOT edit this file by hand!

Esta seria a sintaxe do arquivo, o meu arquivo de exemplo está aqui:

[Dialer Defaults]
Modem = /dev/ttySL0
ISDN = off
Modem Type = Analog Modem
Baud = 115200
Init = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 =
Init4 =
Init5 =
Init6 =
Init7 =
Init8 =
Init9 =
Phone = 32418415
Phone1 =
Phone2 =
Phone3 =
Phone4 =
Dial Prefix =
Dial Attempts = 1
Dial Command = ATM1L3DT
Ask Password = off
Password = [minha senha]
Username = rafael_henriqu@itelefonica.com.br
Auto Reconnect = off
Abort on Busy = on
Carrier Check = on
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = on
;Minimize = off
;Dock = on
;Do NOT edit this file by hand!

Se o modem de vocês estiver configurado, e este arquivo
(/etc/wvdial.conf) estiver certo quando vocês derem o comando:

$wvdial

no terminal ele vai conectar automaticamente. Detalhe deixe as permissões do
arquivo /etc/wvdial.conf como 640 e o grupo que vocês tão vendo aí (consultem
comandos chgrp e chmod para mais informações):

-rw-r—– 1 root dialout 616 2006-12-16 22:55 /etc/wvdial.conf

Script pra conexão:
===================

#!/bin/bash
#verifique se o processo wvdial está sendo executado

pstree | grep wvdial >> /dev/null

# se wvdial não estiver rodando execute

if [ $? -ne 0 ]; then
clear
x=0
while [ 10 -gt $x ]; do
sleep 1
done
wvdial

#senão não execute
else
clear
exit
fi

Problema da conexão resolvida e o ip agora como eu faço??

Agora eu tinha mais um problema. Como fazer para obter meu ip? Eu queria
ficar com o servidor ssh no ar 24h por dia.

Problemas acabados pois já inventaram o sendmail (que é osso pra configurar)
e o msmtp (que é facinho, facinho) ! No meu script 2 eu precisava de um
“programinha” que me enviasse o ip certo, assim eu caio, o wvdial reconecta
e o msmtp me envia o ip por email.

O msmtp é um programa de envio (recebimento não sei pois não testei ainda)
de email em modo texto!!

Instalação e configuração msmtp
===============================

#apt-get install msmtp

No home do user que você quer usar o msmtp (no meu caso do /home/rafael)
você criará o arquivo .msmtprc da seguinte forma:

#touch /home//.msmtprc
#vim /home//.msmtprc

Neste arquivo eu configurei o gmail para o envio de mensagens.

Configuração do .msmtprc
========================

# Set default values for all following accounts.
defaults
tls on

# GMail
account gmail
host smtp.gmail.com
port 587
from rafaelhenriqu@gmail.com
auth on
user rafaelhenriqu@gmail.com
password
account default : gmail

Agora vou explicar:
account = nome da continha
host = smtp do server
port = porta
from = quem é você
auth = pra requerer autenticação
user = vocês
password = senha (ooohhh sério)
account default = conta padrão que vocês querem usar (ou seja pode configurar mais
de uma conta)

Vamos ao script

#!/bin/bash
echo -e “From: EU GMAIL\nSubject: 🙂 \nTo: EU YAHOO \n\n$(ifconfig)\n\n” | msmtp -v “rafael_henriqu@yahoo.com.br”

Esse script é só de uma linha em Não confundam

Usei o echo -e pra escrever a mensagem:

From: EU GMAIL
Subject: 🙂
To: EU YAHOO

$(ifconfig)
Subject = assunto
to = destinatário
from = remetente (pode configura lá no arquivo .msmtprc também)
mensagem = $(ifconfig) pra me enviar o ip de uma em uma hora!

Usei o $ por que senão o echo escreveria como texto e não como comando
ifconfig dando a resposta dessa forma:

rafael@host$ echo -e (ifconfig)
(ifconfig)

rafael@host$ echo -e $(ifconfig)
eth0 Encapsulamento do Link: Ethernet Endereço de HW 00:11:2F:E0:5A:AA
inet end.: 192.168.0.1 Bcast:192.168.0.255 Masc:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Métrica:1
pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
IRQ:185 Endereço de E/S:0xa000

lo Encapsulamento do Link: Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACK RUNNING MTU:16436 Métrica:1
pacotes RX:28569 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:28569 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:0
RX bytes:2131846 (2.0 MiB) TX bytes:2131846 (2.0 MiB)

ppp0 Encapsulamento do Link: Protocolo Ponto-a-Ponto
inet end.: 201.69.62.150 P-a-P:200.205.227.45 Masc:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1100 Métrica:1
pacotes RX:59255 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:57405 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:3
RX bytes:56574238 (53.9 MiB) TX bytes:4910467 (4.6 MiB)

/etc/crontab
============

*/1 * * * * rafael /home/rafael/wv.sh
1 * * * * rafael /home/rafael/mandarip.sh

O script wv.sh conecta e reconecta o wvdial de um em um minuto.
O script mandarip.sh manda o meu ifconfig de uma em uma hora.

Posted in Sem categoria

Duplicando/transferindo instalações do Linux de maneira simples

Este artigo foi retirado do site Dicas-L da Unicamp.

Colaboração: Luís Fernando C. Talora

Mais de uma vez, me deparei com situações nas quais era preciso duplicar uma
instalação já existente de uma máquina com Linux, seja para troca de hardware,
seja para substituição do disco rígido em uso por uma maior, seja para testar
atualizações sem comprometer um servidor de produção, ou simplesmente para
economizar o tempo de instalação, configuração e atualização de uma máquina.

Tentei fazer isso de várias maneiras, entre elas usando o tar (funciona,
mas nunca me lembro da sintaxe), dd (requer discos rígido literalmente
idênticos e, mesmo assim, nem sempre funciona), entre outros métodos.

A solução que melhor me atendeu foi, provavelmente, a mais simples de
todas: usar o comando cp. Utilizando o cp combinado com os parâmetros
a e v, obtemos uma cópia fiel de um sistema de arquivos ext2 ou ext3
(provavelmente funciona com reiserfs também). É um método um pouco “braçal”,
já que é preciso prepar o particionamento de disco e utilizar uma outra
distro live-on-cd para executar a cópia, mas utiliza um comando simples,
disponível em qualquer distro e é de fácil compreensão (exceto, talvez,
pelos passos que precedem a cópia, que podem ser simplificados com o uso de
ferramentas gráficas de particionamento, como o qtparted). Seguem os passos
para se “clonar” uma instalação do Linux seguindo esse método.

1. Coloque, na mesma máquina, o disco rígido contendo a instalação a ser
“clonada” (vou chamá-lo de HD1 daqui por diante) e o disco rígido que
receberá uma cópia da mesma (chamarei-o de HD2 daqui em diante). Neste
exemplo, manteremos o mesmo esquema de particionamento do HD1 no HD2. Vamos
também supor que HD1 foi instalado como primário na primeira controladora IDE
(/dev/hda) e o HD2 como slave na mesma controladora (/dev/hdb).

Em nosso cenário, o HD1, a ser clonado, está organizado da seguinte maneira:

HD1 (8Gb) Partição Tipo Tam. Aprox. Ponto de Montagem
/dev/hda1 ext3 100Mb /boot
/dev/hda1 swap 1Gb (nenhum)
/dev/hda3 ext3 7Gb /

Da mesma forma, o HD2, de 36 Gb, deverá ficar assim:

HD1 (36Gb) Partição Tipo Tam. Aprox. Ponto de Montagem
/dev/hdb1 ext3 100Mb /boot
/dev/hdb1 swap 1Gb (nenhum)
/dev/hdb3 ext3 34Gb /

2. Reinicialize o microcomputador utilizando uma distribuição live-on-CD do
Linux. Eu costumo usar o Recue CD do Fedora (que é bem leve), mas podem ser
usados o Kurumin, o Knoppix ou outra distro de sua preferência. Uma vez no
prompt, precisaremos verificar como o HD1 foi particionado.

# fdisk -l /dev/hda

Disk /dev/hda: 8455 MB, 8455200768 bytes
255 heads, 63 sectors/track, 1027 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 300 2305327+ 82 Linux swap / Solaris
/dev/hda3 301 1027 10498414 83 Linux

Se o HD2 contiver dados, utilize o comando fdisk /dev/hdb e a opção d
quantas vezes forem necessárias para deixá-lo vazio. Salve o particionamento
com a opção w. A tabela de particionamento do HD2 deverá se parecer com
o exibido abaixo (ou seja, vazia):

# fdisk -l /dev/hdb

Disk /dev/hdb: 36.4 GB, 36419584000 bytes
255 heads, 63 sectors/track, 4427 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

3. Vamos criar o mesmo esquema de particionamento no novo disco. Digite:

# fdisk /dev/hdb (cuidado para não selecionar do disco errado!!!)

Tecle: “n” (para criar uma nova partição),
“p” (para primária),
“1” (número da partição) e
“1” (cilindro inicial)
“+xxxM” (onde “xxx” é o tamanho, em Mbytes. Ex.: +100M para 100 Mbytes)

Obs: 100Mb é mais que suficiente para nosso exemplo, onde a partição 1 (/dev/hda1) é a /boot.

Segunda partição: Está será nossa partição de swap (normalmente, utiliza-se
o dobro da quantidade de memória RAM).

Tecle n, p 2, (para aceitar a sugestão do fdisk e usar o próximo
cilindro livre) Depois, digite +xxxM (onde xxx é o tamanho em Mbytes).

Terceira partição: n, p, 3, , (ocuparemos o restante
do disco com a nova partição – /)

Teclando p você verá o novo esquema de particionamentedo:

Disk /dev/hdb: 36.4 GB, 36419584000 bytes
255 heads, 63 sectors/track, 4427 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/hdb1 1 13 104391 83 Linux
/dev/hdb2 14 138 1004062+ 83 Linux
/dev/hdb3 139 4427 34451392+ 83 Linux

Note que a partição /dev/hdb2 aparece como Linux, mas precisamos que ela mude para swap.

Tecle t para efetuar essa alteração, 2 (partição 2) e 82 (que é o
código para partição de swap).

Digite p novamente e você deverá ver o seguinte:

Disk /dev/hdb: 36.4 GB, 36419584000 bytes
255 heads, 63 sectors/track, 4427 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 13 104391 83 Linux
/dev/sdb2 14 138 1004062+ 82 Linux swap / Solaris
/dev/sdb3 139 4427 34451392+ 83 Linux

Tudo OK, tecle w para salvar. Se notou algo errado, a opção q sai sem salvar as alterações.

4. Vamos montar as partições de origem e destino para começarmos a cópia. Vamos
criar uma estrutura HD1 e outra HD2 na raiz do sistema de arquivos “virtual”
de nossa distribuição live-on-cd (note que não copiaremos a partição de swap,
já que ela é utilizada apenas quando o sistema requer memória RAM extra):

Criando pontos de montagem:

# mkdir -p /hd1/particao1
# mkdir /hd1/particao3
# mkdir -p /hd2/particao1
# mkdir /hd2/particao3

Montando partições:

# mount -t ext3 /dev/hda1 /hd1/particao1
# mount -t ext3 /dev/hda3 /hd1/particao3
# mount -t ext3 /dev/hdb1 /hd2/particao1
# mount -t ext3 /dev/hdb3 /hd2/particao3

5. Tudo isso para, FINALMENTE, chegarmos ao que interessa: a cópia!

# cp -av /hd1/particao1/* /hd2/particao1
# cp -av /hd1/particao3/* /hd2/particao3

6. (obrigatório apenas para Fedora) Concluída a cópia, use o comando e2label
para verificar os labels (nomes) das partições e os anote (se houver):

# e2label /dev/hda1 (resultado: /boot)
# e2label /dev/hda3 (resultado: /)

Vamos colocar os mesmos nomes para as partições do HD2

# e2label /dev/hdb1 /boot
# e2label /dev/hdb3 /

7. (Recomendação para o Fedora) É certo que haverá problemas acessando a
partição swap pelo label, que é o padrão no Fedora (já que o label para
partições swap é sempre um conjunto ilegível de caracteres – algo como
IÏÌ+D²ùIÏÌIi²ù). Isso é facilmente solucionável editando-se o arquivo
/etc/fstab do HD2:

# vi /hd2/particao3/etc/fstab

Altere a linha semelhante à abaixo:

LABEL=IÏÌ+D²ùIÏÌIi²ù swap swap defaults 0 0

Para

/dev/hda2 swap swap defaults 0 0

Obs.: Lembre-se: a linha acima começa com /dev/hda2, e não com /dev/hdb2

8. Desmonte as partições, por segurança:

# umount /hd1/particao1
# umount /hd1/particao3
# umount /hd2/particao1
# umount /hd2/particao3

9. É preciso fazer o gerenciador de boot funcionar. Tentei vários métodos para isso, mas o menos problemático me pareceu o seguinte:

10. Desligue a máquina, desconecte o HD1 e coloque o HD2 em seu lugar (em
nosso exemplo, ele deixará de ser slave e passará a ser master na IDE0);

11. Inicialize a máquina com a distro live-on-cd novamente. Criaremos uma
estrutura para montarmos os sistemas de arquivos como ele ficaria na
prática. Isso é preciso para que o gerenciador de boot seja instalado
adequadamente.

# mkdir /hd_copiado (ponto de montagem para a partição 3)
# mkdir /hd_copiado/boot (ponto de montagem para a partição 1)

12. Montando… (Note que, agora, o HD2 passou a ser o /dev/hda, já mudamos ele de lugar)

# mkdir -t ext3 /dev/hda3 /hd_copiado
(“/“ é sempre montado antes)
# mkdir -t ext3 /dev/hda1 /hd_copiado/boot

13. Daremos um chroot para acessar essa instalação como se a pasta /hd_copiado fosse a raiz:

# chroot /hd_copiado

14. Por último, reinstalaremos o gerenciador de boot:

Se você usa o GRUB, digite:

# grub-install /dev/hda

Se você usa o LILO, digite:

# lilo

E pronto! Desmonte as partições, reinicialize a máquina, remova o CD do drive e
a inicilização do sistema deverá ocorrer normalmente, utilizando o HD-Clone.

Posted in Sem categoria