7.10.09

Instalando o Debian Lenny via pendrive

Ontem tive que ajudar um amigo a fazer a instalação do Debian em seu netbook, um ASUS EEE PC 1000H, inicialmente pensei em instalar DebianEeePc
,em que ele disponibiliza uma imagem netinstall com alguns scripts e drives específicos para os Eee Pcs, só que no local onde estávamos só existia uma rede wireless com segurança Wep(Hex) e o instalador do Debian somente aceita WPA/Wep(passphrase).Então resolvi instalar usando o pendrive e uma imagem iso do cd I do Debian.
Material Necessario
  1. Uma pendrive de 256MB ou maior caso você utilize o Debian Netinstall, ou de no minimo 1GB para a imagem do CD I.
  2. A imagem ISO do CD I do Debian Lenny que pode ser pega aqui. No meu caso eu utilizei a I386, mas a dica deve funcionar com qualquer plataforma disponível.
  3. Os tres arquivos desta pagina para inicialização correta do boot. Lembrando que neste caso estes arquivos são para o Debian Lenny I386, pegue o correspondente a sua plataforma e versão do Debian.
  4. O syslinux, programa que se encaregara de criar o bootloader no pendrive.
Mão na massa.
Formate o pendrive como uma partição FAT(16 ou 32), para isto conect o pendrive no computador, agora nos temos que descobrir onde ele esta para isto abra um root-shell e execute o seguinte comando.

#fdisk -l
Vai aparecer um resultado semelhante ao abaixo.
Disk /dev/sda: 4034 MB, 4034838528 bytes
255 heads, 63 sectors/track, 490 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x8eb98eb9

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sda1               1         490     3935893+  83  Linux

Disk /dev/sdb: 16.1 GB, 16139354112 bytes
255 heads, 63 sectors/track, 1962 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000ce815

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1962    15759733+  83  Linux

Disk /dev/sdd: 1000 MB, 1000341504 bytes
31 heads, 62 sectors/track, 1016 cylinders
Units = cilindros of 1922 * 512 = 984064 bytes
Disk identifier: 0xb0bcd68e

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdd1               1        1016      976345    b  W95 FAT32
Isto quer dizer que eu tenho tres dispositivos de armazenamento no meu pc, o /dev/sda de 4 GB com uma partição chamada de /dev/sda1 do tipo linux,o /dev/sdb de 16GB com uma partição chamada de /dev/sdb1 do tipo linux tambem, e por ultimo o /dev/sdd de 1GB com uma partição chamada de /dev/sdd1 do tipo FAT32.
Este ultimo dispositivo é o pendrive que vou utilizar na instalação, mas antes vamos mostrar como se cria uma partição e formata um pendrive. No console execute.

#fdisk /dev/sdd
Comando (m para ajuda): p  <-- aperte para imprimir a tabela de partições.
Disk /dev/sdd: 1000 MB, 1000341504 bytes
31 heads, 62 sectors/track, 1016 cylinders
Units = cilindros of 1922 * 512 = 984064 bytes
Disk identifier: 0xb0bcd68e

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdd1               1        1016      976345    b  W95 FAT32

Comando (m para ajuda): d <-- "d" para apagar a partição
Selected partition 1 <-- como só tínhamos uma partição ele automaticamente selecionou ela, mas se existisse mais ele perguntaria o numero da partição que desejamos apagar.
Comando (m para ajuda): n <-- "n" para criar nova partição.
Comando - ação
   e   estendida
   p   partição primária (1-4)
p  <-- Para partição primaria
Número da partição (1-4): 1 <-- Primeira partição do dispositivo.
Primeiro cilindro (1-1016, default 1): <-- Entre para utilizar o valor default
Using default value 1
Último cilindro ou +tamanho ou +tamanho M ou  +tamanho K (1-1016, default 1016): <-- Entre para utilizar o valor default, o ultimo cilindro.
Using default value 1016

Comando (m para ajuda): t <-- t para alterar o tipo da partição
Selected partition 1 <-- como só existe uma partição ele trabalha com ela automaticamente.
Código hexadecimal (digite L para listar os códigos): l <-- l para listar os códigos de tipo de partição. 

 0  Vazia           1e  Hidden W95 FAT1 80  Minix antigo    be  Solaris boot   
 1  FAT12           24  DOS NEC         81  Linux antigo/Mi bf  Solaris        
 2  root XENIX      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT1
 3  usr XENIX       3c  Recuperação d 83  Linux           c4  DRDOS/sec (FAT1
 4  FAT16 < 32 M    40  Venix 80286     84  Unidade C: OS/2 c6  DRDOS/sec (FAT1
 5  Estendida       41  Boot PReP PPC   85  Estendida Linux c7  Syrinx         
 6  FAT16           42  SFS             86  Conjunto de vol da  Dados Não-FS  
 7  HPFS ou NTFS    4d  QNX4.x          87  Conjunto de vol db  CP/M / CTOS / .
 8  AIX             4e  QNX4.x 2ª part 88  Linux plaintext de  Utilitário Del
 9  AIX inicializá 4f  QNX4.x 3ª part 8e  Linux LVM       df  BootIt         
 a  Gerenc. Inicial 50  DM OnTrack      93  Amoeba          e1  Acesso DOS     
 b  W95 FAT32       51  DM6 OnTrack Aux 94  Amoeba BBT      e3  DOS R/O        
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor      
 e  W95 FAT16 (LBA) 53  DM6 OnTrack Aux a0  Hibernação IB eb  sist. arq. BeOS
 f  W95 Ext'd (LBA) 54  DM6 OnTrack     a5  FreeBSD         ee  EFI GPT        
10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
11  FAT12 Escondida 56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
12  Diagnóstico Co 5c  Edisk Priam     a8  Darwin UFS      f1  SpeedStor      
14  FAT16 Escondida 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
16  FAT16 Escondida 63  GNU HURD ou Sys ab  Darwin boot     f2  DOS secundário
17  HPFS ou NTFS Es 64  Novell Netware  b7  sist. arq. BSDI fd  Detecção auto
18  AST SmartSleep  65  Novell Netware  b8  permuta BSDI    fe  LANstep        
1b  Hidden W95 FAT3 70  Multi-Boot Disk bb  Boot Wizard hid ff  BBT            
1c  Hidden W95 FAT3 75  PC/IX          
Código hexadecimal (digite L para listar os códigos): b <-- b para fat32
O tipo da partição 1 foi alterado para b (W95 FAT32)
Comando (m para ajuda): w <-- w para salvar as alterações e sair.
A tabela de partições foi alterada!

Chamando ioctl() para reler tabela de partições.

AVISO: Se você tiver criado ou alterado qualquer
partição DOS 6.x, consulte a página de manual
do fdisk para obter informações adicionais.
Sincronizando discos.

Agora famos formatar a partição criada.

#mkfs.vfat /dev/sdd1
mkfs.vfat 3.0.1 (23 Nov 2008)

Caso na sua instalação do Debian não exista este comando instale o pacote dosfstools com o apt.

#apt-get install dosfstools

Agora copie a imagem iso e os trés arquivos baixados para o pendrive.
Agora vamos configurar o bootloader no pendrive, istale o pacote SysLinux via apt.

#apt-get install syslinux

Agora vamos configurar instalar o bootloader no pendrive.

#syslinux /dev/sdd1

Agora basta criar um arquivo chamado syslinux.cfg no pendrive com o seguinte conteudo.
default vmlinuz
append initrd=initrd.gz
Agora é só dar o boot via pen no computador que ira começar a instalação.

23.9.09

Estudo Python + GTK + Glade - Aula 01

Ola, recentemente resolvi dedicar um tempo para estudar python por ser uma linguagem presente em todas as distribuições Linux, e servir muito bem para criar scripts de automatização de tarefas em servidores. Como sou uma pessoa determinada resolvi estudar Python + GTK para dar uma cara melhor em alguns scripts que eu vier a fazer para algum cliente.
Como uma das melhores forma de aprender é ensinando, vou montar os meus estudos em forma de Aulas, espero poder ajudar alguém.


Aula 01 -  Python + GTK + Glade



Historia
Lançada em 1991 por Guido van Rossum, derivada da linguagem ABC ela tem como características ser uma linguagem de alto nível ( bem próximo da linguagem humana ), interpretada ( não cria executável ) e imperativa( bem próximo da forma humana de pensar), orientada a objetos ( o programa é dividido em partes, chamadas de objetos, onde todo o programa é baseado na interação e composição deste objetos ) de tipagem dinâmica e forte ( o tipo dos dados são definidos em tempo de execução).
Sei que ficou bem curto mas para saber mais basta uma pequena busca no google.

Instalando

Na maioria da distribuições Linux python já vem instalada por padrão, então o unico trabalho que temos é de instalar a libgtk e o glade.
Para as distribuições Debian Like basta um apt-get install


#apt-get update
#apt-get install glade python-lxml vim-glade

Aproveitei para instala o suporte do vim para programação python, já que uso ele como IDE de desenvolvimento.
Apos isto basta acessar "Aplicações->Programação->Construtor de Interfaces Glade".



Para facilitar nossos estudos, acesse no glade "Ver->Aparência da Paleta->Texto ao lado dos Ícones".
A tela do Glade é dividida em 4 partes.


  1. Ferramentas e Menus na areá superior.
  2. Componentes ou widgets, como são chamados, no lado direito.
  3. Tela, ou seja onde será visualizado a interface grafica do seu programa, na parte central.
  4. Propriedades dos componentes ou widgets, no lado direito.
O Glade é um editor de interface gráfica, ele pode ser usado junto com varias linguagens diferentes, não somente com a Python. A ideia por traz dele é que a definição da interface gráfica fiquem fora do seu código, em um arquivo XML separado. Isto serve tanto para simplificar seu código, que fica menor e mais enxuto, ou seja mais fácil de entender, como também para facilitar a alteração da interface gráfica sem a necessidade de alterar o código fonte, simplificando a manutenção do programa ^_^.
Agora vamos criar nossa primeira interface com o Glade!

Primeira interface com o Glade
  1. Em componentes, click em "Janela"
  2. Na parte central aparecera um quadrado cinza, esta seria a janela principal.
  3. Em propriedades no lado direito altere o campo "Nome" da aba "Geral" para mainWindow ( guarde isto pois vamos usar depois na programação).


Ainda em "Propriedades" mas agora na aba "Comum", verifique se o campo "Visível" esta marcado com "sim", caso esteja "não" altere com um click. Isto já me deu dor de cabeça quando estava aprendendo.


Pronto agora salve o seu projeto na mesma pasta que você colocara os fontes. Se você abrir o arquivo salvo em qualquer editor de texto, vai ser parecido com este.


Primeiro programa em Python.

Com o seu editor de texto preferido crie um novo arquivo com o seguinte conteúdo.


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk
pygtk.require("2.0")

import gtk
import gtk.glade

class Programa(object):
 """
 Programa simples que abre uma janela atravez de um arquivo do glade
 """

 def __init__(self):
  # Pegando o arquivo Glade
  self.arquivoglade = "programa.glade"
  # Extraindo a representação xml do arquivo
  self.xml = gtk.glade.XML(self.arquivoglade)

  # Componentes

  # Janela
  self.mainWindow = self.xml.get_widget('mainWindow')

  # Eventos

  # Fecha a janela
  self.mainWindow.connect('destroy', gtk.main_quit)

if __name__ == "__main__":
 w = Programa()
 gtk.main()


Explicando.
Nas linhas,

#!/usr/bin/env python
# -*- coding: utf-8 -*-

Na primeira linha estamos dizendo ao sistema operacional qual o interpretador que iremos usar para executar o programa, isto quer dizer que se dermos permissão de execução ao script ele vai automaticamente chamar o Python.
Na segunda linha estamos falando ao Python qual a codificação que estamos usando no script, isto permite que utilizemos acentuação sem problemas, No caso estamos utilizando UTF-8.

import pygtk
pygtk.require("2.0")

import gtk
import gtk.glade

Nesta parte estamos importando as bibliotecas necessárias para utilizar o python com gtk e glade.

class Programa(object):

Cria uma classe chamada "Programa".

def __init__(self):
  
  self.arquivoglade = "programa.glade"
  
  self.xml = gtk.glade.XML(self.arquivoglade)


Nesta linha estamos dizendo ao programa que quando a classe "Programa" for instanciada, ela ira buscar o arquivo chamado "programa.glade", que é a interface criada anteriormente no Glade e salva na mesma pasta onde está o script, altere para o nome que você utilizou na sua interface.
Depois, na ultima linha, o programa ira extrair as informações da interface no arquivo.
Agora que temos a interface vamos trabalhar com ela.

self.mainWindow = self.xml.get_widget('mainWindow')

Nesta linha estamos pegando a janela principal que criamos no Glade, lembra "mainWindow", e salvando sua referencia em uma variável, "self.mainWindow".
Como já temos a acesso a janela que criamos, colocamos uma funcionalidade nela, toda vez que alguém clickar no botão "x" no alto dela, "destroy", o programa ira fechar, chamamos a função "gtk.main_quit".

self.mainWindow.connect('destroy', gtk.main_quit)

Experimente comentar esta linha para ver, a janela some só que o programa não finaliza.

if __name__ == "__main__":
 w = Programa()
 gtk.main()

Nesta parte final estamos falando que quando rodar o script, instanciar a classe programa na variável "w". E apos isto fica esperando algum evento do usuário, "gtk.main"
Para executar este programa você tem duas opções,
  1. Atribua ao script a permissão de execução.
  2. Em um terminal digite "$python programa.py", no caso substitua pelo nome que você deu para o script.

Algumas observações:
Em python a identação, ou seja os espaços, tabulações contam. Ou seja para que o programa funcione corretamente, ele tem que ser mantido exatamente como esta digitado. Como exemplo podemos pegar as ultimas três linhas do programa.

if __name__ == "__main__":
 w = Programa()
 gtk.main()

Observem como as duas ultimas linhas então com um "tab" em relação a primeira linha. Se elas forem digitadas assim

if __name__ == "__main__":
w = Programa()
gtk.main()

Ou seja sem a tabulação, vai aparecer o seguinte erro.

File "programa.py", line 32
    w = Programa()
    ^
IndentationError: expected an indented block

shell returned 1

Python também é sensível a contexto, ou seja ela diferencia letras maiúsculas de minusculas. Ex: "mainWindow" é diferente de MainWindow que é diferente de MAINWINDOW, lembre-se disto.
Bem para a primeira aula já esta grande demais. Na próxima semana estaremos aprendendo sobre variaveis, entrada de texto e botões com GTK.

21.9.09

Integrando o calendario do Gnome com o Google Calendar

Como recentemente tive que reinstalar o Linux do meu note, tive que refazer varias configurações. Uma delas era a integração do gnome-calendar com a minha agenda do google.

Hello Word

Meu nome é William Pereira de Paula, mas sou conhecido como KBLera, sou consultor de GNU/Linux e administrador de redes. Trabalho com Linux desde 2003,  sei instalar/administrar desde servidores Web(php, apache, MySQL, Postgrey, etc..) até servidores de domínio (LDAP), proxy/cache(Squid), e servidores de terminal leve (LTSP, TCOS). Tenho boa experiencia em servidores de virtualizalção (Xen e KVM) e outras coisas mais.
Montei este Blog com o intuito de compartilhar meu conhecimento e aprendizado.
Espero poder contribuir.