sábado, 22 de dezembro de 2012

Servidor PXE

A utilização de um servidor PXE numa rede permitirá que os clientes da rede possam arrancar através da rede. Isto permitirá por exemplo:

  • fazer instalações por rede;
  • utilizar o Clonezilla Live para fazer o upload/download de imagens de discos;
  • executar ferramentas de teste: memtest;
  • executar LiveCD por rede;
  • etc...

0. Resumo

  • Servidor com ubuntu server 12.04 LTS
  • Instalação do serviço TFTP
  • Configuração do serviço DHCP para suporte ao arranque por PXE

1. Instalação

O serviço TFTP pode ser instalado a partir de vários pacotes, contudo o que melhor suporte dá ao pxelinux é o tftpd-hpa [www].
sudo aptitude install tftpd-hpa
O ficheiro de configuração por defeito pode ser editado para confirmar os diretórios a utilizar pelo servidor TFTP:
sudo nano /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Neste caso o diretório será: /tftpboot

1. Instalação

Como o serviço vai necessitar de vários ficheiros, será criada a seguinte estrutura de ficheiros e diretórios para melhor os organizar:
/tftpboot/
|-- pxelinux.0

|-- pxelinux.cfg/
    |-- default
    |-- local.cfg

    |-- menu.conf
    |-- splash.png

    |-- vesamenu.c32

|-- install/
    |-- install.cfg

    |-- ubuntu_12.04/
        |-- amd64

        |-- i386/ 

|-- live/
    |-- live.cfg
    |-- core/

|-- utils

    |-- utils.cfg

    |-- memtest/
    |-- clonezilla/

        |-- amd64

        |-- i486 


Os ficheiros .cfg serão criados de forma a permitir ter as opções de arranque necessárias.
Cada diretório está destinado a um tipo de utilização que pode conter diversos sistemas. Em cada sistema poderá existir depois uma separação por arquitetura (i386, amd64, etc).

É necessário obter então os ficheiros necessários ao arranque por PXE:
wget http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-i386/current/images/netboot/netboot.tar.gz

tar -zxvf netboot.tar.gz

sudo mv ubuntu-installer/i386/pxelinux.0 /tftpboot
sudo mv ubuntu-installer/i386/boot-screens/syslinux.cfg /tftpboot/pxelinux.cfg/default
sudo mv ubuntu-installer/i386/boot-screens/* /tftpboot/pxelinux.cfg/
rm -r ubuntu-installer/i386/boot-screens

rm -r ubuntu-installer/i386/pxelinux.cfg

sudo mv ubuntu-installer/i386 /tftpboot/install/ubuntu_12.04/

A partir daqui toda a configuração será feita nos ficheiros existentes em /tftpboot/pxelinux.cfg/:
sudo nano pxelinux.cfg/default
include pxelinux.cfg/menu.cfg
default pxelinux.cfg/vesamenu.c32
prompt 0
timeout 0





2. Configurar servidor DHCP

É necessário adicionar:
allow booting;
allow bootp;

next-server 192.168.2.101;
filename "pxelinux.0";


3. Personalização

3.1 INCLUDE
Permite incluir o conteúdo de outro ficheiro de configuração no local em que é invocado.

3.2 LABEL
String que descreve o kernel e as opções, tem que ser único depois de convertido para um nome de ficheiro DOS (8 caracteres mais extensão).
Pode ser seguida de diversos comandos.

KERNEL - indica o ficheiro que vai arrancar.
Em alternativa pode ser utilizado:
LINUX image - para arrancar uma imagem de kernel linux
BOOT image - para arrancar um bootstrap (.bs ou .bin)
FDIMAGE image - para arrancar uma floppy disk image (.img)
CONFIG file - para reiniciar o bootloader com um ficheiro de configuração diferente.

APPEND - permite adicionar opções ao comando do kernel.

INITRD initrd_file - permite definir um initrd ou vários, separados por vírgulas.

LOCALBOOT 0 - permite arrancar o disco local.


3.3 DEFAULT
Indica o comando por defeito introduzido no boot:.

3.4 Módulos para User Interface
Podem ser selecionados diferentes modos de interface: menu.c32 ou vesamenu.c32)

PROMPT flag - caso a flag seja 1, mostra sempre o prompt de boot:; caso a flag seja 0, apenas mostra o prompt de boot: se for pressionada a tecla Shift ou Alt.

NOESCAPE flag - caso a flag seja 1, ignora as teclas para mostrar ao prompt de boot; caso a flag seja 0 e esteja definido PROMPT 0, será arrancado boot definido por default.

NOCOMPLETE flag - caso a flag seja 1, a tecla 'tab' não mostra as labels definidas no prompt de boot:.

ALLOWOPTIONS flag - por defeito a flag é 1, e permite carregar as opções definidas no APPEND; caso a flag seja 0 o utilizador não poderá especificar qualquer opção.

TIMEOUT timeout - Indica quanto tempo pausa no prompt de boot, a unidade é 1/10 segundos. O timeout é cancelado quando se pressiona qualquer tecla. Por defeito é 0 o que indica que não tem qualquer timeout.

SAY mensagem - apresenta a mensagem no ecrã.

DISPLAY filename - Apresenta o ficheiro indicado no arranque antes do prompt de boot:.
F1 filename
F2 filename
...etc...
F9 filename
F10 filename
F11 filename
F12 filename

A imagem splash.png tem que ter a resolução 640x480 e o modo de cor indexado com 256 cores.

quarta-feira, 19 de dezembro de 2012

Raspbian - Rpi

Raspbian é um sistema operativo baseado na versão wheezy do Debian GNU/Linux e especialmente adaptado ao Raspberry Pi.

1. Instalação

1.1. Obter a imagem do Raspbian

É possível obter a imagem a partir do site do Raspberry: http://www.raspberrypi.org/downloads

1.2. Gravar a imagem Raspbian num cartão SD

Neste caso foi utilizado um cartão SDHC Samsung 8GB Categoria 6.
O processo de gravação da imagem é relativamente rápido, menos de 5 minutos.
dd bs=4M if=2012-12-16-wheezy-raspbian.img of=/dev/sdb

Tue Dec 18 16:22:03 WET 2012
462+1 records in 462+1 records out 1939865600 bytes (1.9 GB) copied, 286.539 s, 6.8 MB/s
Tue Dec 18 16:26:49 WET 2012

2. Utilização

Depois de introduzir o SD no Raspberry Pi basta arrancar o mesmo e realizar os passos de configuração inicial que permitirão definir as opções mais comuns, incluindo o arranque automático do ambiente gráfico.

2.1. Autenticação

Os dados de acesso por defeito são:
utilizador: pi
palavra-passe: raspberry

3. Resolução de Problemas

3.1. Problemas com a deteção do teclado

Apesar da na instalação o teclado Logitech K400 ter sido detetado corretamente, nos arranques normais nem sempre era detetado (75% das vezes).

A resolução do problema passa por desligar/ligar o recetor USB do Rpi.

Para uma solução permanente sem esta necessidade, basta seguir os passos do Jan Karger aqui.

Editar o ficheiro /etc/rc.local
sudo nano /etc/rc.local

E acrescentar a seguinte linha antes do exit 0
sleep 5
rmmod hid-logitch-dj
modprobe hid-logitech-dj

3.2. Problemas com o layout do teclado

Apesar de corretamente definido no sistema, no ambiente gráfico LXDE o layout não era reconhecido.
A solução passa por editar o ficheiro /etc/xdg/lxsession/LXDE/autosatart e no final acrescentar a linha:
setxkbmap -layout "pt"

sexta-feira, 14 de dezembro de 2012

Configurações pxelinux

Comandos Principais


INCLUDE

Permite incluir o conteúdo de outro ficheiro de configuração no local em que é invocado.

LABEL

String que descreve o kernel e as opções, tem que ser único depois de convertido para um nome de ficheiro DOS (8 caracteres mais extensão).
Pode ser seguida de diversos comandos.
Para não conter nenhum valor colocar o símbolo '-' (LABEL - ).

KERNEL

Define o ficheiro que vai arrancar.
Em alternativa podem ser utilizadas outras designações para situações específicas:
LINUX image - para arrancar uma imagem de kernel linux
BOOT image - para arrancar um bootstrap (.bs ou .bin)
FDIMAGE image - para arrancar uma floppy disk image (.img)
CONFIG file - para reiniciar o bootloader com um ficheiro de configuração diferente.

APPEND

Permite adicionar opções ao comando do kernel.

INITRD initrd_file

Permite definir um initrd ou vários, separados por vírgulas.

LOCALBOOT 0

Permite arrancar o disco local.

Módulos para User Interface

Podem ser selecionados diferentes modos de interface: menu.c32 ou vesamenu.c32.

PROMPT flag - caso a flag seja 1, mostra sempre o prompt de boot:; caso a flag seja 0, apenas mostra o prompt de boot: se for pressionada a tecla Shift ou Alt.

NOESCAPE flag - caso a flag seja 1, ignora as teclas para mostrar ao prompt de boot; caso a flag seja 0 e esteja definido PROMPT 0, será arrancado boot definido por default.

NOCOMPLETE flag - caso a flag seja 1, a tecla 'tab' não mostra as labels definidas no prompt de boot:.

ALLOWOPTIONS flag - por defeito a flag é 1, e permite carregar as opções definidas no APPEND; caso a flag seja 0 o utilizador não poderá especificar qualquer opção.

TIMEOUT timeout - Indica quanto tempo pausa no prompt de boot, a unidade é 1/10 segundos. O timeout é cancelado quando se pressiona qualquer tecla. Por defeito é 0 o que indica que não tem qualquer timeout.

ONTIMEOUT tagname - Ao atingir o timeout arranca a tagname indicada.

SAY message - apresenta a mensagem no ecrã.

DISPLAY filename - Apresenta o ficheiro indicado no arranque antes do prompt de boot:.
É possível indicar os ficheiros associados a cada uma das teclas de função: F1 a F10 da seguinte forma:
F1 filename
F2 filename
...etc...
F9 filename
F10 filename
F11 filename
F12 filename

Menus

MENU TITLE title

Permite especificar o título de um menu, no topo deste e ao centro

MENU BEGIN [tagname] | MENU END

Permite criar um menu, opcionalmente com uma designação definida em tagname. O conteúdo do menu estará entre as linhas MENU BEGIN e MENU END.

MENU LABEL label

Apenas válido após um comando LABEL anterior. Permite alterar o texto apresentado para um entrada do menu e definir a tecla de atalho através do símbolo ^.
Ao contrário das LABEL normais, estas não precisam de ser únicas.

MENU SEPARATOR

Insere uma linha em branco.

MENU INDENT count

Permite colocar count espaços antes.

MENU DISABLE

Define a entrada como não selecionável. Útil para criar secções.

MENU DEFAULT

Define a entrada como a selecionada por defeito.

TEXT HELP | ENDTEXT

Permite colocar várias linhas de texto de ajuda entre a linha que contém TEXT HELP e a que contém ENDTEXT

MENU EXIT [tagname]

Permite sair do menu para o menu anterior ou para o menu com o nome definido em tagname.

MENU GOTO tagname

Permite ir para o menu com o nome definido em tagname.

MENU BACKGROUND background

Define a imagem de fundo.

MENU COLOR element ansi foreground background shadow

Permite especificar as cores a utilizar por cada um dos elementos:
  • element
screen Rest of the screen
border Border area
title Title bar
unsel Unselected menu item
hotkey Unselected hotkey
sel Selection bar
hotsel Selected hotkey
disabled Disabled menu item
scrollbar Scroll bar
tabmsg Press [Tab] message
cmdmark Command line marker
cmdline Command line
pwdborder Password box border
pwdheader Password box header
pwdentry Password box contents
timeout_msg Timeout message
timeout Timeout counter
help Help text
msgXX  Message (F-key) file attribute XX
  • ansi - é uma sequência de valores separadas por ponto-e-vírgula (;):
0 reset all attributes to their defaults
1 set bold
4 set underscore (simulated with color on a color display)
5 set blink
7 set reverse video
22 set normal intensity
24 underline off
25 blink off
27 reverse video off
30 set black foreground
31 set red foreground
32 set green foreground
33 set brown foreground
34 set blue foreground
35 set magenta foreground
36 set cyan foreground
37 set white foreground
38 set underscore on, set default foreground color
39 set underscore off, set default foreground color
40 set black background
41 set red background
42 set green background
43 set brown background
44 set blue background
45 set magenta background
46 set cyan background
47 set white background
49 set default background color

  • background e foreground são valores na forma #AARRGGBB - AA alpha, RR red, GG green e BB blue.
    Onde #00000000 é totalmente transparente e #ffffffff é branco opaco.
  • shadow - permite controlar a sombra com: "none" (sem sombra); "std"|"standard" (foreground mais elevado); "all" (tanto foreground como background estão elevados); "rev"|"reverse" (background mais elevado).
Se qualquer das opções for "*" ou omitida (no final da linha), o seu valor não será alterado.

MENU MSGCOLOR fg_filter bg_filter shadow - permite especificar o mesmo estilo a todas as caixas de mensagem de ajuda.

Posicionamento

Os valores por defeito são os indicados abaixo, que podem ser alterados.
O ecrã tem 80 colunas e 28 linhas (com vesamenu.c32), valores negativos de linha são calculados a partir deste valor.

MENU WIDTH 80
MENU MARGIN 10
MENU PASSWORDMARGIN 3
MENU ROWS 12
MENU TABMSGROW 18
MENU CMDLINEROW 18
MENU ENDROW -1
MENU PASSWORDROW 11
MENU TIMEOUTROW 20
MENU HELPMSGROW 22
MENU HELPMSGENDROW -1
MENU HIDDENROW -2
MENU HSHIFT 0
MENU VSHIFT 0