Upload
helio-loureiro
View
836
Download
6
Embed Size (px)
DESCRIPTION
Uma apresentação sobre utilização de python para administração de sistemas. Feita para uma oficina Debian-SP em 2002.
Citation preview
Administração de sistemas usandoPython
Hélio Loureiro <[email protected]> a
http://helio.loureiro.eng.br/presentation_python/ b
http://loureiro.dyndns.org:8080/presentation_python/
Copyleft c 2002
aNão está funcionando no momento.bTambém está fora do ar.
Administração de sistemas usando Python – p.1
Introdução
Esta é uma apresentação introdutória da linguagem de programação Python,
portanto não espere ver exemplos avançados de seu uso aqui.
O objetivo desta apresentação é mostrar a linguagem Python, sua sintaxe, seu uso
e alguns exemplos práticos para administração de sistemas.
Os exemplos usados são programas utilizados em vários ambientes reais,
principalmente na função de consultor onde o objetivo era fazer as tarefas o
melhor possível com o menor tempo possível (tempo é dinheiro).
Os programas apresentados são testados e geralmente utilizados em várias plata-
formas (Debian, FreeBSD, OpenBSD, Solaris e até Windows...).
Administração de sistemas usando Python – p.2
História do Python
Python foi criado no início dos anos 90 por Guido van Rossum no Stichting
Mathematisch Centrum, CWI, http://www.cwi.nl/, Holanda, como um
sucessor da linguagem chamada ABC.
Em 1995, Guido continuou seu trabalho em Python na Corporation for National
Research Initiatives, CNRI, http://www.cnri.reston.va.us/, em Res-
ton, Virginia, onde ele lançou várias versões do programa.
Administração de sistemas usando Python – p.3
História do Python (cont.)
Em maio de 2000, Guido e o grupo de desenvolvedores do Python migraram para
o BeOpen.com para formar o grupo BeOpen PythonLabs. Em outubro do mesmo
ano, o grupo do PythonLabs migrou para o Zope Corporation (então Digital
Creations, veja http://www.zope.com). Em 2001, a Fundação do Programa
Python (PSF, veja http://www.python.org/psf) foi criada, uma
organização sem fins lucrativos criada especificamente para manter a propriedade
intelectual relacionada à Python. A Zope Corporation é um membro patrocinador
do PSF.
Todas as versões de Python são de código aberto (veja
http://www.opensource.org/ para a definição de código aberto).
Historicamente a maioria, mas não todas, das versões de Python têm também sido
compatíveis com a GPL.
Administração de sistemas usando Python – p.4
Por quê é chamado Python?
" "Além de ser um cientista da computação, eu também sou fã do
"Monty Python’s Flying Circus"(uma série cômica dos anos setentas
na BBC, no caso - incomum - de você não conhecer). Ocorreu-me
um dia que eu precisava de um nome que fosse curto, único, e
levemente misterioso. E acontenceu de eu estar lendo alguns textos
da série naquela época... Então eu decidi chamar minha linguagem de
Python." "
Guido van Rossun
Administração de sistemas usando Python – p.5
Onde Python é utilizado
Mailman - gerenciador de listas de discussão
Zope - um ambiente para Webservices (servidor deconteúdo)
Sketch - programa para desenho vetorial
Pydf - programa “df”, para visualização dequantidade de uso de partições do sistema, comsaída colorida
Ipcheck - programa cliente para uso do “dyndns”,registro dinâmico de DNS
Pysol - jogo de cartas “paciência”
Administração de sistemas usando Python – p.6
Descrição
Python, em poucas linhas, é:
Linguagem de scripts
Orientada à objetos
Com a possibilidade de geração de byte-code
Multiplataforma - máquina virtual
Com característica de laços através de identação
Sem tipos!!!
Rápida prototipagem
Fácil integração com C e Java
Administração de sistemas usando Python – p.7
Comparações com outras linguagens
C Python é orientada à objetos e não possui tipos. C é uma linguagem
compilada, enquanto que Python, interpretada.
C++ Linguagem compilada. Python é interpretada. Geralmente não é portável
(bibliotecas dependentes).
Java Linguagem com tipos.
Perl Linguagem pouco estruturada com tipos básicos definidos por inicialização
de váriáveis ($x e @y). Não pode ser usada interativamente.
PHP Mais veloz que Python para criação de páginas web com conteúdo
dinâmico (mesmo utilizando mod_python). Também possui tipos definidos
tal qual a linguagem Perl.
Qual a melhor?
Resposta: e deveria existir uma?Administração de sistemas usando Python – p.8
Documentação e Bibliografia
http://www.python.org/doc/current/tut/tut.html - Python
Tutorial
http://www.python.org/doc/current/lib/lib.html - Python
Library Reference
/usr/share/doc/python2.1/html/index.html - documentação que
acompanha a instalação do Python a
/usr/share/doc/python2.1/examples/ - exemplos e demos
interessantes
ou via Debian:
helio@pasargada in ~# apt-cache search
python � �doc | more
aReferente ao Debian 3.0, woody.
Administração de sistemas usando Python – p.9
Estruturas de dados
números num = 5
strings nome = “Debian”
listas sistemas = [“Debian”, “OpenBSD”, “FreeBSD”]
tuples sequencia = ( “Debian”, [ 1, 2 , 3 ], “nome”)
dicionários agenda = {“helio”: “999-333”, “macan”:“1234”}
Exemplo:nome[0]: “D”nome[-1]: “n”nome[:-2]: “Debi”
Obs: o símbolo “#” é utilizado para marcar comentário.Administração de sistemas usando Python – p.10
Operadores aritméticos
adiçãosubtração �
divisão
�multiplicação �exponenciação � �
AND lógico andOR lógico ornegação not
Administração de sistemas usando Python – p.11
Controles de fluxo: if-elif-else
if (condição):faça
elif (condição):faça
else:faça
ou simplesmente
if (condição): faça
Notas: Final do laço determinado pela indentação.
Administração de sistemas usando Python – p.12
Controles de fluxo: for
variavel = [ “Debian”, “GNU”, “Linux”]
for nome in variavel:print nome
Notas: Sintaxe semelhante ao laço “for” de shell script.
Final do laço determinado pela indentação.
Administração de sistemas usando Python – p.13
Controles de fluxo: while
variavel = 10
while ( variavel ):print “Debian rulez!”variavel = variavel - 1
Notas: Final do laço determinado pela indentação.
Administração de sistemas usando Python – p.14
continue, break e pass
continue Continua o fluxo do programa.
break Finaliza o fluxo.
pass Executa sem realizar processamento.
Administração de sistemas usando Python – p.15
Funções
Declarada com “def”:
def minha_funcao(variavel):print variavel
Exemplo de uso:minha_funcao(“I Oficina Debian Paulista”)
Administração de sistemas usando Python – p.16
Objetos, métodos e classes
class Apache(self): # classedef _init_(self): # método
self.conf = “/etc/apache/httpd.conf” # atributo
def comando(self,tipo):from os import systemsystem(“apachectl “ + tipo)
server = Apache()server.comando(“restart”)
Administração de sistemas usando Python – p.17
Importando módulos
Duas formas:import os
os.system(“uptime”)ou
from os import systemsystem(“uptime”)
O segundo formato é mais rápido, pois todos os objetos
e métodos não são importados. O arquivo com módulo
precisar ter uma das extensões: “ �py” ou “ �pyc” ou “ �pyo”.
Administração de sistemas usando Python – p.18
py, pyc e pyo
py extensão geralmente usada em scripts Pythonpyc byte code. Pode ser usado para não redistribuir os
fontes do programa e funciona em todas asplataformas, desde que se tenha o máquina virtual, ointerpretador Python. É gerado após a primeiraexecução do programa com extensão py.
pyo código objeto. Biblioteca de alguns módulos dePython. Dependente de sistema operacional.
Administração de sistemas usando Python – p.19
Controle de exceções
try:<código>
except KeyboardInterrupt:<código>
except:
pass
Administração de sistemas usando Python – p.20
30 minutos
Espero estar chegando aqui após 30 minutos, ondevimos:
A origem do PythonOnde é usado PythonO que é PythonUma certa idéia de como usar
Dúvidas???
Administração de sistemas usando Python – p.21
Hello World!
#! /usr/bin/python
mensagem="Hello World!"
print mensagemprint "%s" % mensagem
Administração de sistemas usando Python – p.22
Executando o seu primeiro programa
helio@pasargada in ~# python hello.pyHello World!Hello World!
helio@pasargada in ~# pythonPython 2.1.3 (#1, Sep 7 2002, 15:29:56)[GCC 2.95.4 20011002 (Debian prerelease)] on linux2Type "copyright", "credits"or "license"for more information.� � �
import helloHello World!
Hello World!
� � � � �� �� � �Administração de sistemas usando Python – p.23
Autenticação
Módulo criado para iniciar autenticação deprogramas (nunca saiu do estágio inicial...);
é um bom exemplo do uso de classes, simples deentender.
Veja o arquivo autenticacao.py
Administração de sistemas usando Python – p.24
Laserfilter
Programa criado para corrigir o problema do efeito“escada” nas impressões;
utilizado em uma impressora laser nesse exemplo;
o objetivo do filtro é substituir no final de cada linhao “
�
n” por “ˆM
�
n”.
Veja os arquivos laserfilter e printcap.
Administração de sistemas usando Python – p.25
Backup
Programa para realizar backups;
poderia ter sido feito em shell script;
mas está em Python para mostrar a diferença.
Veja o arquivo backup.py.
Administração de sistemas usando Python – p.26
Usando um execv()
Programa para animar o ambiente;
seleciona aleatoriamente um arquivo para tocar;
usada uma chamada execv() para executar ao invésde system().
Veja o arquivo mpy3layer.py.
Administração de sistemas usando Python – p.27
default.ida (code red e nimda)
Programa para registrar as tentativas de code red enimda;
é preciso registra a extensão “ � ida” com CGI noapache para que funcione corretamente;
sem maiores utilidades...
Veja o arquivo default.ida.
Administração de sistemas usando Python – p.28
Logs do code red[Thu March 07 10:04:50 2002] red code attack from 195.82.69.206
(inter-gw1.bfw-michaelshoven.de)
[Fri March 08 02:30:43 2002] red code attack from 61.161.156.17
[Sat March 09 04:50:44 2002] red code attack from 65.94.232.21
(MTL-HSE-ppp202767.qc.sympatico.ca)
[Mon March 11 19:28:27 2002] red code attack from 12.238.129.99
(12-238-129-99.client.attbi.com)
[Mon March 11 21:48:09 2002] red code attack from 209.12.200.2
(www.multi-page.net)
[Tue March 12 03:05:17 2002] red code attack from 195.171.4.130
(server.stricklandgate-house.org.uk)
[Tue March 12 06:38:49 2002] red code attack from 218.13.3.48
[Tue March 12 07:56:30 2002] red code attack from 213.145.184.9
(213-145-184-9.dd.nextgentel.com)
[Mon March 18 09:10:03 2002] red code attack from 210.72.161.107
[Mon March 18 13:50:55 2002] red code attack from 63.197.79.111
(adsl-63-197-79-111.dsl.snfc21.pacbell.net)
Administração de sistemas usando Python – p.29
Boot advertisementUsando em ambiente os as máquinas recebem IP via DHCP;
evita a solicitação de registro de IP fixo para algumas máquinas;
na máquina cliente, que inicializa via DHCP, é executado um shell script;
no servidor, com o web habilitado, é executado um CGI em Python para
tratamento das informações;
a informação é verificada com uso de MD5;
se confere, é enviada por mail.
Nesse exemplo, o servidor roda em uma máquina FreeBSD, enquanto que o
cliente, OpenBSD.
Veja os arquivos system.cgi e bootadvertise.
Administração de sistemas usando Python – p.30
MRTG
Usado para verificar algumas funções da máquina:
load average (carregamento)
uptime
utilizações de disco
servidor Quake
Veja os arquivos
mrtg.conf e system.py.
Administração de sistemas usando Python – p.31
ADSL
Utilizado para verificar o status do link ADSL comum modem “Parks”;
feito para conexão “business”, mas pode sermodificado para “home”;
funciona tal qual um telnet no modem, seguindo aseqüência para dar um “reset” na linha ADSL (paraperda de sinal sem o “re-trainning”);
atualmente não funciona muito, já que o problemade perda de sincronismo é mínimo;
mas ajuda a saber o estado da linha.
Veja o arquivo adsl_check.py.Administração de sistemas usando Python – p.32
Automação de provedor
Criado durante uma consultoria a um provedor;
para inserir automagicamente o cliente no serviço demail de sua empresa (virtualhost do sendmail);
além de registrar seu domínio (named);
e criar seu site default na web (apache).
Problemas com permissões: Python não funcionasetuid!
Para ativar setuid ou utiliza-se o sudo ou cria-se umprograma em C com uma chamada system()/execv()e altera-se as permissões deste para setuid (chmod4755).
Veja os arquivos suporte.py e dominio.py Administração de sistemas usando Python – p.34
Pyqt e Qt-designer
Uso do aplicativo
“pyuic” para gerar o módulo com o código.
Administração de sistemas usando Python – p.35