Administração de sistemas usando Python

36
Administração de sistemas usando Python Hélio Loureiro <[email protected]> a <[email protected]> http://helio.loureiro.eng.br/presentation_python/ b http://loureiro.dyndns.org:8080/presentation_python/ Copyleft c 2002 a Não está funcionando no momento. b Também está fora do ar. Administração de sistemas usando Python – p.1

description

Uma apresentação sobre utilização de python para administração de sistemas. Feita para uma oficina Debian-SP em 2002.

Transcript of Administração de sistemas usando Python

Administração de sistemas usandoPython

Hélio Loureiro <[email protected]> a

<[email protected]>

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

Gráfico ADSL

Administração de sistemas usando Python – p.33

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

wxPython

Biblioteca semelhante à MFC, Microsoft FoundationClasses, mas é GPL e multi-plataforma;

existe para Python e C++, entre outras;

não existe um RAD para desenvolvimento, comopyqt.

Administração de sistemas usando Python – p.36