Gerenciamento de pacotes e repositórios no OpenSolaris TUTORIAL OpenSolaris, parte 4 O gerenciamento de pacotes no OpenSolaris é diferente daquele do Linux, mas isso não significa que seja difícil. por Alexandre Borges Agata Urbaniak – www.sxc.hu S em dúvida, uma importante modificação em termos de tecnologia implementada no OpenSolaris é o gerenciamento de pacotes usando o IPS (Image Packaging System, Sistema de Empacotamento de Imagens). Esse novo sub-sistema muda completamente a forma como se faz o gerenciamento de pacotes em relação ao procedimento no Solaris e torna tudo muito mais simples. O modo mais adequado de abordar esse assunto é lidar com a parte ope- Listagem 1: Comando pkg list # pkg list | more NAME (AUTHORITY) BRCMbnx FSWxorg-fonts-core NVDAgraphics SUNW1394 SUNWDTraceToolkit SUNWPython SUNWPython-extra SUNWTcl SUNWTiff SUNWTk SUNWa2ps SUNWaac 54 VERSION 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 2.4.4-0.101 0.5.11-0.101 8.4.18-0.101 0.5.11-0.101 8.4.18-0.101 4.13-0.101 0.5.11-0.101 STATE installed installed installed installed installed installed installed installed installed installed installed installed UFIX ––––––––––––- racional e, durante a demonstração, ver alguns conceitos importantes. O objetivo não é, obviamente, esgotar o assunto, mas apenas comentar sobre alguns aspectos principais para que o leitor possa trabalhar melhor com seu sistema. Sempre é necessário saber, em primeiro lugar, quais pacotes estão instalados no sistema. A listagem 1 mostra o uso do comando pkg list. Observe a coluna STATE. Um pacote instalado possui a palavra installed nesse campo. Também é possível listar todos os pacotes instalados e os disponíveis para instalação. O comando é quase o mesmo, exceto por uma opção: pkg list -a (listagem 2). Os pacotes cujo campo STATE contenha a palavra known são aqueles disponíveis para instalação. Quando é necessário fazer uma busca para verificar se um pacote específico está instalado, deve-se executar uma variação do comando acima: http://www.linuxmagazine.com.br OpenSolaris | TUTORIAL # pkg list SUNWzone É provável que sejam necessárias mais informações sobre um determinado pacote instalado. Para isso, usa-se o comando pkg info (lis tagem 3). Algumas linhas necessitam de explicação adicional: Authority: indica qual site (repositório) disponibiliza o pacote; Branch Version: indica um número de controle do desenvolvimento do pacote. Pode ser útil no caso de alterações ao software; F MRI: fault management resource identifier. É uma maneira de descrever recursos do OpenSolaris, introduzida no Solaris 10. Pode apontar para um hardware, um serviço ou ainda um pacote, como no caso anterior. Neste ponto, é fundamental não confundir os conceitos de autoridade e repositório. Vale salientar que a autoridade é uma pessoa, grupo ou corporação que disponibiliza um pacote, enquanto que um repositório é o local onde esses pacotes estão disponíveis, geralmente indicado por uma URL. Vamos analisar a FMRI do pacote especificado, pkg:/SUNWzfs@ 0.5.11,5.11-0.101:20081119T231630Z: pkg: indica tratar-se de um pacote; S UNWzfs: indica o nome do pacote; 0 .5.11: conhecido como “component version”, especifica a versão do projeto usada para criação do pacote; 5.11: versão base do sistema operacional usado para criar o pacote. Muitas vezes, ela é necessária para determinar a compatibilidade do software, pois representa a versão mínima do sistema operacional na qual este pacote pode ser instalado. Neste caso, o OpenSolaris serve como base do futuro Solaris 11 a ser lançado pela Sun; 0 .101: número de controle para o desenvolvimento do pacote; Linux Magazine #57 | Agosto de 2009 20081119T231630Z: data e hora em que este pacote foi adicionado no repositório de pacotes. Pode ser preciso ver as informações de um pacote disponível (com o valor known no campo STATE). A listagem 4 Listagem 2: Comando pkg list -a # pkg list -a NAME (AUTHORITY) SUNWesu SUNWesws2 SUNWesxwsvr SUNWeu8os SUNWeuluf SUNWeupdatemgru SUNWeuxwe SUNWevolution SUNWevolution-data-server SUNWevolution-exchange VERSION 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 0.5.11-0.101 STATE installed known known known known known known installed installed installed UFIX –––––––––- Listagem 3: Comando pkg info # pkg info SUNWzfs Name: SUNWzfs Summary: ZFS Category: System/File System State: Installed Authority: opensolaris.org Version: 0.5.11 Build Release: 5.11 Branch: 0.101 Packaging Date: Wed Nov 19 23:16:30 2008 Size: 4.21 MB FMRI: pkg:/[email protected],5.11-0.101:20081119T231630Z Listagem 4: Informações de um pacote # pkg info -r SUNWGtk Name: SUNWGtk Summary: GTK - The GIMP Toolkit Category: Applications/Graphics and Imaging State: Not installed Authority: opensolaris.org Version: 1.2.10 Build Release: 5.11 Branch: 0.101 Packaging Date: Wed Nov 19 21:39:37 2008 Size: 1.34 MB FMRI: pkg:/[email protected],5.11-0.101:20081119T213937Z 55 TUTORIAL | OpenSolaris demonstra essa situação. Note que o campo State desse pacote indica que ele não está instalado. Eventualmente, quando se suspeita de que algo não está funcionando como esperado, é conveniente verificar se o pacote foi realmente instalado de forma cor- reta e se nada está atrapalhando sua operação: # pkg verify SUNWTk Uma saída vazia significa que o pacote foi instalado corretamente e não há qualquer erro associado a Listagem 5: Listar o conteúdo de um pacote # pkg contents SUNWcups PATH etc etc/cups etc/cups/command.types etc/cups/cupsd.conf etc/cups/interfaces etc/cups/mime.convs etc/cups/mime.types etc/cups/ppd etc/cups/snmp.conf etc/cups/ssl etc/dbus-1 etc/dbus-1/system.d etc/dbus-1/system.d/cups.conf etc/security usr usr/bin usr/bin/cups-config Listagem 6: Listagem completa do conteúdo do pacote # pkg contents –m SUNWcups license 03c3b684dcac3c8b4701f01800c661bc7e59970a chash=279cd69cf7802 9639d3058ca9ffcfc248c23191d license=SUNWcupsr.copyright pkg. csize=13998 pkg.size=51314 transaction_id=1227131953_ pkg%3A%2FSUNWcups%401.3.7%2C5.11-0.101%3A20081119T215913Z license 03c3b684dcac3c8b4701f01800c661bc7e59970a chash=279cd69cf7802 9639d3058ca9ffcfc248c23191d license=SUNWcupsu.copyright pkg.csize=13998 pkg.size=51314 transaction_id=1227131953_ pkg%3A%2FSUNWcups%401.3.7%2C5.11-0.101%3A20081119T215913Z set name=description value=CUPS set name=info.classification value=org.opensolaris. category.2008:System/Printing set name=authority value=opensolaris.org set name=fmri value=pkg:/[email protected],5.11-0.101:20081119T215913Z depend [email protected] type=require depend [email protected] type=require 56 esta operação. Não é incomum o comando pkg verify apontar algum erro. Neste caso, sugere-se corrigir a situação com o comando pkg fix da seguinte maneira: # pkg fix SUNWtk Em geral, este comando corrige qualquer erro associado à instalação do pacote em questão. Todo pacote é composto por arquivos, diretórios, links e ações (operações que o IPS executa e aplica ao sistema quando um pacote é instalado ou removido). Para observar o conteúdo de um pacote listando apenas os arquivos, deve-se usar o comando pkg contents (lista gem 5). Para listar todo o conteúdo, incluindo as ações que fazem parte deste pacote, basta usar a opção -m, como na listagem 6. No início da saída do comando, há o aspecto do licenciamento. Caso seja interessante ter informações sobre licenças de um determinado pacote, o comando pkg info pode oferecer mais detalhes: # pkg info -license -r SUNWcups A saída desse comando é bem longa e explica os termos da licença aplicada ao pacote. Instalação Até agora não foi explicado o mais importante: como instalar um pacote. Esta tarefa é bem simples, mas é importante conferir, antes dela, se um pacote está ou não disponível para instalação. A listagem 7 demonstra a procura do software Subversion. Ela mostra que existem múltiplos pacotes do Subversion, mas só temos interesse em um deles – SUNWsvn. Uma outra maneira ainda mais fácil é entrar no site de pacotes do OpenSolaris [1] e usar o mecanismo de busca disponibilizado pela comunidade do OpenSolaris. http://www.linuxmagazine.com.br OpenSolaris | TUTORIAL Para instalar o pacote SUNWsvn, executa-se o seguinte comando: # pkg install SUNWsvn Caso o pacote possua algum tipo de dependência, ela será resolvida e instalada juntamente com ele. Além do repositório principal do OpenSolaris [2] – que possui uma autoridade responsável pelo seu gerenciamento –, que permite procurar e instalar pacotes, há vários outros, como Blastwave [3], o de desenvolvimento [4], o de pacotes contribuídos pela comunidade [5] e o de softwares livres distribuídos pela Sun [6]. Eles oferecem uma ampla diversidade de pacotes, bastando apontar para qualquer um deles, buscar um pacote e em seguida instalá-lo (listagem 8). Depois da busca, o procedimento de instalação deve ser seguido da mesma forma descrita anteriormente. Apesar de improvável, é possível que o índice de procura esteja corrompido por algum motivo. Se isso ocorrer, o comando pkg search irá acusar o erro; em seguida, deve-se reconstruir o índice com o seguinte comando: seja excluído do sistema, sendo que, para forçar sua remoção e de todas as dependências, é necessário usar o comando: # pkg uninstall –r nome_do_pacote Repositórios Vale a pena mencionar que todos os pacotes, por padrão, são obtidos a partir do mesmo repositório. Todavia, é possível adicionar outros repositórios no OpenSolaris de forma que, deste ponto em diante, operações de procura sejam feitas em todos os repositórios incluídos. Para verificar quais repositórios estão presentes, basta usar o comando pkg authority (listagem 9). Para adicionar um novo repositório (com sua respectiva autoridade), o comando adequado é o pkg set-authority (listagem 10). E para removê-lo: Listagem 7: Busca do pacote do Subversion # pkg search SUNWsvn* INDEX ACTION VALUE depend depend [email protected] depend depend [email protected] depend depend [email protected] depend depend [email protected] PACKAGE pkg:/[email protected] pkg:/[email protected] pkg:/[email protected] pkg:/[email protected] Listagem 8: Busca de pacote num repositório # pkg search -s http://blastwave.network.com:10000 nessus INDEX ACTION VALUE PACKAGE basename dir opt/csw/include/nessus pkg:/[email protected] basename dir opt/csw/var/nessus pkg:/[email protected] basename file opt/csw/bin/nessus pkg:/[email protected] basename dir opt/csw/var/nessus pkg:/ [email protected] # pkg rebuild-index Remoção Listagem 9: Listagem dos repositórios ativos Foi apresentado anteriormente o procedimento de instalação de pacotes. Vejamos agora como remover um pacote. De forma simplificada, o comando é: # pkg authority AUTHORITY opensolaris.org (preferred) # pkg uninstall SUNWsvn Listagem 10: Adição de um novo repositório Infelizmente, a remoção de pacotes não é tão simples quando a instalação, já que muitas vezes existem dependências associadas ao pacote. Nesses casos, o OpenSolaris não permite que o pacote Linux Magazine #57 | Agosto de 2009 URL http://pkg.opensolaris.org/release/ # pkg set-authority –O http://pkg.sunfreeware.com:9000 sunfreeware.com # pkg authority AUTHORITY URL opensolaris.org (preferred) http://pkg.opensolaris.org/release/ sunfreeware.com http://pkg.sunfreeware.com:9000/ 57 TUTORIAL | OpenSolaris # pkg unset-authority sunfreeware. com Gerenciamento gráfico Não menos importante do que todos esses comandos, ainda é possível (como descrito no primeiro artigo desta série [7]) fazer todo o gerenciamento de pacotes usando o utilitário gráfico Package Manager (figura 1). Para acessá-lo, basta ir ao menu System | Administration | Package Manager. O gerenciamento de pacotes no OpenSolaris não é diferente daquele do Solaris. Já no gerenciamento de patches existem diferenças. No Solaris, toda vez que é necessário aplicar um patch ao sistema, devemos fazer o download do patch e aplicá-lo usando o comando patchadd. No OpenSolaris existe uma ferramenta chamada Update Manager (figura 2) que pode ser utilizada de maneira a atualizar todo o sistema; ou seja, não é mais necessário aplicar patches ao sistema individualmente. Para executar o UpdateManager, basta acessar o menu System | Administration | Update Manager. A mesma operação de atualização pode ser feita pela linha de comando com o comando: # pkg image-update IPS avançado Em muitos momentos, principalmente num ambiente de desenvolvimento intenso onde múltiplas modificações ocorrem a todo instante, talvez seja necessário manter um repositório de pacotes próprio para atuar como ponto focal, no qual todos os pacotes em desenvolvimento possam ser obtidos de forma a facilitar sua distribuição dentro da empresa. Existem duas formas de criar um repositório próprio: a primeira é utilizar o comando pkg.depotd e a segunda é usar comandos SMF (Service Management Facility – vamos abordar este assunto em mais detalhes em um artigo futuro). Comando pkg.depotd Figura 1Gerenciador de pacotes Package Manager. Listagem 11: Criação de um repositório # svcadm enable application/pkg/server # /usr/lib/pkg.depotd –d /tmp/linuxmagazine –p 11111 [12/Apr/2009:17:46:24] [12/Apr/2009:17:46:24] [12/Apr/2009:17:46:24] [12/Apr/2009:17:46:24] [12/Apr/2009:17:46:24] [12/Apr/2009:17:46:24] TimeoutMonitor’. [12/Apr/2009:17:46:24] [12/Apr/2009:17:46:24] 58 INDEX Search Available ENGINE Listening for SIGHUP. ENGINE Listening for SIGTERM. ENGINE Listening for SIGUSR1. ENGINE Bus STARTING ENGINE Started monitor thread ‘_ ENGINE Serving on 0.0.0.0:11111 ENGINE Bus STARTED A primeira coisa a fazer é iniciar o serviço de repositórios e criar o repositório que será utilizado para armazenar os pacotes (listagem 11). Logo em seguida, é aconselhável verificar com o navegador se o endereço http://localhost:11111 apresenta uma tela anunciando o repositório (figura 3). Outra maneira de verificar se realmente tudo ocorreu bem é demonstrada na listagem 12. Comandos smf O procedimento para criação de um repositório por meio dos comandos smf é tão simples quanto o anterior e também é composto por poucos comandos: # svccfg –s application/pkg/server setprop pkg/port=22222 http://www.linuxmagazine.com.br OpenSolaris | TUTORIAL # svccfg –s application/pkg/server setprop pkg/inst_root=/tmp /linuxmagazine2 # svcadm refresh application/pkg /server # svcadm restart application/pkg /server do date sleep 2 done A terceira etapa é uma das mais críticas, pois é obrigatório informar as ações que devem ser tomadas para adicionar o pacote com sucesso. Então, precisamos criar um manifesto com um conjunto dessas ações (listagem 13). O conteúdo do arquivo é bem simples e totalmente auto-explicativo. Do mesmo modo que antes, para averiguar se o repositório foi criado da forma correta, pode-se apontar o navegador para http://localhost:22222 ou executar um simples: ls -l /tmp/linuxmagazine2 Pacotes no repositório Depois de criar um repositório particular de uma das duas formas diferentes, vamos adicionar pacotes a ele. Aparentemente, pode ser intimidador incluir pacotes no repositório. Entretanto, a chave do processo é que esta inserção tem basicamente duas etapas: p reparação do pacote; e nvio do pacote. O envio do pacote, por sua vez, é subdividido em: a bertura da transação; e nvio do pacote em si; fechamento da transação. Figura 2Gerenciador de atualizações Update Manager. Assim são realizadas essas etapas: Primeiramente, crie alguns diretórios para armazenamento do pacote: # # # # mkdir /var/linuxmagazine cd /var/linuxmagazine mkdir mypackage cd mypackage Em seguida, crie um script ou arquivo binário com qualquer nome para incluir no pacote: # vi alexandreborges.sh #!/bin/bash while true Linux Magazine #57 | Agosto de 2009 Figura 3A tela indica que o repositório foi criado com sucesso. 59 TUTORIAL | OpenSolaris A quarta etapa consiste na exportação do diretório que contém o pacote. Será necessário especificar tanto um número de versão para o pacote quanto um segundo número de versão (subversão). No nosso exemplo, vamos utilizar a versão 1.0 e a subversão 0.1. Mas cuidado: as versões e as subversões não podem ser alteradas depois do comando. # pkgsend -s http:// localhost:11111 open [email protected] O quinto passo é a execução das ações contidas no manifesto: # pkgsend -s http:// localhost:11111 send mypackage.ips Enfim, após as cinco etapas anteriores, é hora de fechar a transação: # pkgsend –s http:// localhost:11111 close Se tudo funcionou como previsto, sem qualquer mensagem de erro, para instalar nosso pacote devemos percorrer os seguintes passos: # pkg set-authority –O http:// localhost:11111 minhaautoridade # pkg refresh # pkg contents –r mypackage # pkg install mypackage # ls –l /usr/bin/alexandreborges.sh # /usr/bin/alexandreborges.sh Conclusão O OpenSolaris apresenta uma fantástica oportunidade no mundo open source. O gerenciamento de pacotes é bastante amigável, colocando o OpenSolaris ao lado do Linux como um sistema operacional fácil de usar, útil para as tarefas do dia a dia tanto para o usuário corporativo quanto para o usuário doméstico e, acima de tudo, extremamente rápido. n 60 Listagem 12: Verificação do repositório # ls /tmp/linuxmagazine total 28 drwxr-xr-x 2 root root 107 -rw-r--r-- 1 root root 503 drwxr-xr-x 2 root root 69 drwxr-xr-x 2 root root 503 drwxr-xr-x 2 root root 69 drwxr-xr-x 2 root root 69 drwxr-xr-x 2 root root 69 2009-04-12 2009-04-12 2009-04-12 2009-04-12 2009-04-12 2009-04-12 2009-04-12 17:46 17:46 17:46 17:46 17:46 17:46 17:46 catalog cfg_cache file index pkg trans updatelog Listagem 13: Arquivo de manifesto # cd /var/linuxmagazine # vi mypackage.ips dir mode=0755 owner=root group=bin path=/var/linuxmagazine/mypackage file mypackage/alexandreborges.sh mode=0555 owner=root group=bin path=/var/linuxmagazine/mypackage/alexandreborges.sh link path=/usr/bin/alexandreborges.sh target=/var/linuxmagazine/ mypackage /alexandreborges.sh depend type=require fmri=SUNWbash Mais informações [1]Pacotes para OpenSolaris: http://pkg.opensolaris.org/release/en/index.shtml [2]Repositório de pacotes do OpenSolaris: http://pkg.opensolaris.org/release [3]Repositório Blastwave: http://blastwave.network.com:10000 [4]Repositório de desenvolvimento: http://pkg.opensolaris.org/dev [5]Repositório de pacotes contribuídos pela comunidade: http://pkg.opensolaris.org/contrib [6]Repositório de softwares livres da Sun: http://pkg.sunfreeware.com:9000 [7]Alexandre Borges, “OpenSolaris 2008.11”: http://lnm.com.br/article/2753 Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em [email protected] Este artigo no nosso site: http://lnm.com.br/article/2969 http://www.linuxmagazine.com.br