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.
Este estudo de caso demonstra as seguintes técnicas:
Construção de um arquivo prototype com objetos absolutos e relocáveis.
Para obter informações sobre construção de um arquivo prototype, consulte Criando um arquivo prototype.
Uso de um script postinstall
Para obter mais informações sobre este script, consulte Escrevendo scripts de procedimento.
Uso de um script preremove
Para obter mais informações sobre este script, consulte Escrevendo scripts de procedimento.
Uso de um arquivo copyright
Para obter mais informações sobre este arquivo, consulte Escrevendo uma mensagem de copyright.
Criar um arquivo prototype contendo objetos de pacote absolutos e relocáveis.
Este tema é tratado detalhadamente em O arquivo prototype.
Adicionar o script de classe sed ao arquivo prototype.
O nome de um script deve ser o nome do arquivo que será editado. Neste caso, o arquivo a ser editado é /etc/devlink.tab e o script sed também é nomeado /etc/devlink.tab. Não há requisitos de modo, proprietário e grupo de um script sed (representado no prototype de amostra por pontos de interrogação). O tipo de arquivo do script sed deve ser e (indicando que é editável).
Definir o parâmetro CLASSES para incluir a classe sed.
Criar um script de ação de classe sed ( /etc/devlink.tab ).
Criar um script postinstall.
O script postinstall precisa executar o comando add_drv para adicionar o driver do dispositivo ao sistema.
Criar um script preremove.
O script preremove precisa executar o comando rem_drv para remover o driver do dispositivo do sistema, antes que o pacote seja removido.
Criar um arquivo copyright.
Um arquivo copyright contém o texto ASCII de uma mensagem de copyright. A mensagem que aparece no arquivo de amostra é exibida na tela durante a instalação do pacote.
PKG=SUNWsst NAME=Simple SCSI Target Driver VERSION=1 CATEGORY=system ARCH=sparc VENDOR=Sun Microsystems BASEDIR=/opt CLASSES=sed |
Este estudo de caso, por exemplo, usa o layout de hierarquia dos objetos de pacote mostrados na figura abaixo.
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:
Insira as entradas dos arquivos de controle (tipo de arquivo i), porque apresentam um formato diferente do formato dos outros objetos de pacote.
Remova as entradas dos diretórios que já existem no sistema de destino.
Altere a permissão de acesso e a propriedade de cada entrada.
Anteponha uma barra nos objetos de pacote absolutos.
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.
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.
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.
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.
É 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. |