Guia do Desenvolvedor de Empacotamento de Aplicativos

Instalando um driver usando a classe sed e scripts de procedimento

Este estudo de caso descreve como instalar um driver usando a classe sed e scripts de procedimento. Também é diferente do estudo de caso anterior (consulte Instalando e removendo um driver com scripts de procedimento) porque este pacote está composto de objetos absolutos e relocáveis.

Técnicas

Este estudo de caso demonstra as seguintes técnicas:

Abordagem

Arquivos de estudo de caso

O arquivo pkginfo

PKG=SUNWsst
NAME=Simple SCSI Target Driver
VERSION=1
CATEGORY=system
ARCH=sparc
VENDOR=Sun Microsystems
BASEDIR=/opt
CLASSES=sed

O arquivo prototype

Este estudo de caso, por exemplo, usa o layout de hierarquia dos objetos de pacote mostrados na figura abaixo.

Figura 5–1 Estrutura hierárquica do diretório do pacote

O contexto seguinte descreve o gráfico.

Os objetos de pacote são instalados nos mesmos locais que no diretório pkg acima. Os módulos do driver (sst e sst.conf) são instalados no /usr/kernel/drv e o arquivo incluído é instalado em /usr/include/sys/scsi/targets. Os arquivos sst, sst.conf e sst_def.h são objetos absolutos. O programa de teste, sstest.c, e seu diretório SUNWsst são relocáveis. O seu local de instalação é definido pelo parâmetro BASEDIR.

Os componentes restantes do pacote (todos os arquivos de controle) se encontram na parte superior do diretório do pacote na máquina de desenvolvimento, exceto o script de classe sed. Denomina-se devlink.tab depois do arquivo que ele modifica, e entra em etc, o diretório que contém o arquivo devlink.tab real.

Do diretório pkg, execute o comando pkgproto da seguinte forma:


find usr SUNWsst -print | pkgproto > prototype

A saída do comando acima se assemelha à saída seguinte:

d none usr 0775 pms mts
d none usr/include 0775 pms mts
d none usr/include/sys 0775 pms mts
d none usr/include/sys/scsi 0775 pms mts
d none usr/include/sys/scsi/targets 0775 pms mts
f none usr/include/sys/scsi/targets/sst_def.h 0444 pms mts
d none usr/kernel 0775 pms mts
d none usr/kernel/drv 0775 pms mts
f none usr/kernel/drv/sst 0664 pms mts
f none usr/kernel/drv/sst.conf 0444 pms mts
d none SUNWsst 0775 pms mts
f none SUNWsst/sstest.c 0664 pms mts

Este arquivo prototype ainda não está completo. Para completar este arquivo, você precisa fazer as seguintes modificações:

Este é o arquivo prototype final:

i pkginfo
i postinstall
i preremove
i copyright
e sed /etc/devlink.tab ? ? ?
f none /usr/include/sys/scsi/targets/sst_def.h 0644 bin bin
f none /usr/kernel/drv/sst 0755 root sys
f none /usr/kernel/drv/sst.conf 0644 root sys
d none SUNWsst 0775 root sys
f none SUNWsst/sstest.c 0664 root sys

Os pontos de interrogação na entrada de cada script sed indicam que as permissões de acesso e a propriedade do arquivo existentes na máquina de instalação não devem ser alterados.

O script de ação de classe sed (/etc/devlink.tab)

No exemplo de driver, um script de classe sed é usado para adicionar uma entrada ao arquivo /etc/devlink.tab no driver. Este arquivo é usado pelo comando devlinks para criar links simbólicos de /dev em /devices. Este é o script sed:

# sed class script to modify /etc/devlink.tab
!install
/name=sst;/d
$i\
type=ddi_pseudo;name=sst;minor=character	rsst\\A1

!remove
/name=sst;/d

O comando pkgrm não executa a remoção de parte do script. Você pode precisar adicionar uma linha ao script preremove para executar sed diretamente para remover a entrada do arquivo /etc/devlink.tab.

O script de instalação postinstall

Neste exemplo, o script precisa apenas executar o comando add_drv.

# Postinstallation script for SUNWsst
# This does not apply to a client.
if [$PKG_INSTALL_ROOT = "/" -o -z $PKG_INSTALL_ROOT]; then
   SAVEBASE=$BASEDIR
   BASEDIR=””; export BASEDIR
   /usr/sbin/add_drv sst
   STATUS=$?
   BASEDIR=$SAVEBASE; export BASEDIR
   if [ $STATUS -eq 0 ]
   then
	     exit 20
   else
	     exit 2
   fi
else
   echo "This cannot be installed onto a client."
   exit 2
fi

O comando add_drv usa o parâmetro BASEDIR, de modo que o script tem que cancelar a definição de BASEDIR antes de executar o comando e restaurá-lo depois.

Uma das ações do comando add_drv é executar devlinks, que usa a entrada colocada em /etc/devlink.tab pelo script de classe sed para criar as entradas /dev no driver.

O código de saíca do script postinstall é importante. O código de saída 20 manda o comando pkgadd dizer ao usuário para reiniciar o sistema (necessário depois da instalação de um driver), e o código de saída 2 manda o comando pkgadd dizer ao usuário que a instalação falhou parcialmente.

O script de remoção preremove

No estudo de caso deste exemplo de driver, ele remove os links em /dev e executa o comando rem_drv no driver.

# Pre removal script for the sst driver
echo “Removing /dev entries”
/usr/bin/rm -f /dev/rsst*

echo “Deinstalling driver from the kernel”
SAVEBASE=$BASEDIR
BASEDIR=””; export BASEDIR
/usr/sbin/rem_drv sst
BASEDIR=$SAVEBASE; export BASEDIR

exit 

O script remove as entradas /dev. As entradas /devices são removidas pelo comando rem_drv.

O arquivo copyright

É um arquivo ASCII simples que contém o texto de um aviso de copyright. O aviso é exibido no início da instalação do pacote exatamente como aparece no arquivo.


	Copyright (c) 1999 Drivers-R-Us, Inc.
	10 Device Drive, Thebus, IO 80586

All rights reserved. This product and related documentation is
protected by copyright and distributed under licenses 
restricting its use, copying, distribution and decompilation. 
No part of this product or related documentation may be 
reproduced in any form by any means without prior written 
authorization of Drivers-R-Us and its licensors, if any.