Piter Punk's HomePage - Artigos
 
English version
O Slackpkg - histórico e funcionamento

Piter PUNK

1. História

Pessoa: O ruim do slackware é que tem que recompilar um monte de coisa quando sai um exploit em algum programa
Eu: Hein? é só baixar o patch no /patches, não tem segredo.
Pessoa: Mas é muito complicado!
Eu: Como complicado? Envolve 3 passos, 1) olhar o ChangeLog, 2) baixar o pacote e 3) instalar o pacote! Não tem segredo nenhum!
Pessoa: Ah, mas com a ferramenta xyz da distro abcd dá para fazer automático...
Eu: Bah! Fazer algo para baixar pacotes e instalar é coisa para um script de 15 minutos!
Pessoa: Sei...

E foi assim que começou o slackpkg. Para falar a verdade demorou mais de 15 minutos, mas no final da tarde já estava mostrando a ferramenta para alguns amigos (e para a Pessoa). No dia seguinte lancei a primeira versão no sourceforge.

O slackpkg foi criado com uma finalidade bem específica: baixar os patches de segurança do Slackware e facilitar a vida dos preguiçosos. Mas, enquanto estava programando, foram surgindo novas idéias, como possibilitar instalar pacotes novos e remover os já instalados. Então foi o lançado o primeiro release com estas funções (que na minha opinião deveria se chamar 1.0, já que fazia tudo que eu queria).

Depois do pacote pronto e lançado, começaram a vir as sugestões dos usuários e, além das sugestões, os patches e bug reports. Isso mostra algo bem interessante: da mesma maneira que vários outros projetos, o slackpkg começou de um esforço individual e, depois que já havia um release utilizável, a comunidade começou a contribuir. Normalmente esta é uma fórmula vitoriosa, enquanto os projetos que começam pela página/lista de discussão/fórum normalmente caem no limbo.

Ainda hoje 90% do código é escrito e mantido pelo main developer, ou seja, eu. Poucas pessoas que utilizam o slackpkg fazem alguma alteração no código dele e menos ainda enviam o código alterado para mim.

Isso tem um lado bom, ler o código que enviam, verificar o que é útil e qual a melhor maneira de incluí-lo dentro do slackpkg é extremamente trabalhoso. Algumas vezes as idéias são boas e o código não, então eu acabo tendo que reescrever o código para inserir no slackpkg. Outras vezes o código é ótimo e a idéia é não é tão boa, e por aí vai... Muitas idéias e códigos bons ficam de fora pela própria filosofia do slackpkg que é se manter simples. Algumas estruturas de programação são extremamente criptográficas e tentamos manter o código do slackpkg inteligível.

Se você pretende iniciar um projeto de software livre, lembre que ele vai ser *seu* filho e provavelmente você será o principal desenvolvedor por um bom tempo. Se é isso que você gosta: programar, pensar em features, corrigir, melhorar, etc... então estará no céu.

Atualmente o slackpkg está incluso no Slackware 9.1 (diretório /extra) e tenho recebido mais contribuições e idéias que antes. É bem gratificante receber esses e-mails e até mesmo e-mails com dúvidas ou bug-reports... isso mostra que tem gente que usa e se importa com o slackpkg. Como ele já tem todas as funções que acho interessantes, estou na fase de torná-lo mais rápido e mais próximo da perfeição...

2. O que é?

O slackpkg é uma ferramenta para auxiliar o pkgtool no gerenciamento de pacotes do Slackware. Embora tenha sido inicialmente projetado para atualizar os patches de segurança, agora é possível fazer várias outras coisas, como instalar pacotes novos via rede, descobrir em qual pacote está um determinado arquivo e até mesmo fazer o upgrade da distribuição inteira via rede.

Uma diferença dele para outras ferramentas semelhantes é que ele segue a política KISS (Keep It Simple, Stupid) ou seja, tenta se manter o mais simples possível, apenas com os recursos necessários para uma ferramenta de download/upgrade de pacotes. Até mesmo na escolha da linguagem para programar o slackpkg resolvemos mantê-lo simples, ele é todo escrito em shell, uma linguagem conhecida de 11 entre 10 administradores de sistemas e portanto pode ser facilmente adaptável para suas necessidades.

Ele depende exclusivamente de arquivos encontrados nos mirrors do Slackware (ou no CD-ROM), não dependendo de nenhum arquivo externo à distribuição. Não é realizada nenhuma resolução de dependências e muito menos executadas configurações automáticas.

Sinceramente, esse tipo de coisa é tarefa do administrador do sistema. Uma coisa é automatizar o download/upgrade que é uma tarefa mecânica, saber se deve fazer ou não uma determinada configuração não é tarefa da ferramenta de download/upgrade e sim de quem a executa.

3. Como funciona?

Como foi dito, o funcionamento do slackpkg é bem simples (e mesmo a estrutura interna do programa é simples). Antes de começar, você deve editar o arquivo /etc/slackpkg/mirrors e selecionar o mirror que achar mais conveniente. Se você não selecionar um mirror, ou selecionar mais de um, e tentar executar o slackpkg receberá uma mensagem de erro lhe convidando a editar o /etc/slackpkg/mirrors.

Depois de selecionado o mirror, é necessário baixar os arquivos com o nome dos pacotes (FILELIST.TXT), o conteúdo dos pacotes (MANIFEST.bz2) e o checksum deles (CHECKSUMS.md5). Depois de baixados, o slackpkg irá reformatá-los para um formato mais simples (para o slackpkg) de manipular. Todas estas operações são realizadas com um:

	# slackpkg update

A partir de agora você tem acesso a todas as outras funções do slackpkg: upgrade, install, reinstall, blacklist, search e remove. Com excessão do search, todas essas funções seguem o padrão:

	# slackpkg função <padrão>

Onde o padrão pode ser o nome de um pacote (ou parte dele) ou de um diretório do CD do slackware, por exemplo:

	# slackpkg install kde/

Irá instalar todos os pacotes da série KDE. Enquanto:

	# slackpkg upgrade patches

Irá realizar o upgrade de todos os patches de segurança. Só com isso que mostramos já cumprimos as principais funções de uma ferramenta de manipulação de pacotes via rede: instalar e atualizar os pacotes. Estes e os outros comandos estão explicados melhor na próxima seção.

4. Comandos

Os comandos são descritos na manpage (contribuição de um usuário, agora faltam as manpages dos arquivos de configuração), mas vamos vê-los um pouco melhor:

  • install|reinstall

      Os dois fazem basicamente a mesma coisa, baixam e instalam um pacote. A diferença de um para o outro é que o reinstall instala apenas pacotes já instalados, enquanto o install instala apenas pacotes novos.

      Como explicado anteriormente, você pode utilizar o nome de um pacote, parte do nome ou uma série inteira. Depois do slackpkg detectar quais pacotes casam com o padrão, irá lhe mostrar uma lista com todos os pacotes que serão instalados/reinstalados.

      Basta responder sim (Y) ou não (n) e, no caso da resposta afirmativa, irá começar o download e instalação dos pacotes.

  • upgrade

      Segue o mesmo padrão do install|reinstall, serve apenas para atualizar pacotes já instalados. O padrão mais comum a ser utilizado com ele é:

      		# slackpkg upgrade patches
      		

      Embora possa ser utilizado para efetuar o upgrade da distribuição inteira:

      		# slackpkg upgrade slackware
      		

      Apenas tome cuidado com isso, um upgrade completo requer alguns pequenos cuidados (como executar o lilo depois de fazer upgrade do pacote do kernel).

  • blacklist

      Este é um comando novo e serve para colocar um pacote (ou um conjunto deles) na blacklist do slackpkg. Os pacotes listados em /etc/slackpkg/blacklist não são mais instalados/upgradeados/reinstalados pelo slackpkg.

      Esse comando é ideal para colocar vários pacotes ao mesmo tempo na blacklist. Eu acho particularmente útil colocar todos os kdei lá dentro:

      		# slackpkg blacklist kde-i18n
      		

      E nunca mais ver pacotes com traduções do KDE em aramaico, sanscrito, tuaregue e outras línguas estranhas.

  • remove

      Sem nenhum segredo. Irá remover os pacotes instalados que casarem com o padrão dado.

  • download

      Outra função simples. Ela apenas realiza o download dos pacotes selecionados, deixando-os no /var/cache/packages.

  • search

      Procura um determinado arquivo e/ou diretório. Com este comando é possível saber em que pacote está cada arquivo, útil para detectar em qual pacote está uma biblioteca misteriosa qualquer.

5. Fazendo o Upgrade Completo

Para passar o slackware do 9 para o 9.1 utilizando o slackpkg são necessários alguns comandos:

	# slackpkg update		[ realiza o update das listas de pacotes ]
	# slackpkg install coreutils	[ pacote novo, mas necessário para o 9.1 ]
	# slackpkg install utempter	[ mesmo caso do coreutils		 ]
	# slackpkg upgrade slackware	[ realiza o upgrade de todos os pacotes
					  instalados. Se não fossem adicionados
					  pacotes novos na distribuição, este 
					  seria o único comando necessário além
					  do "update"				 ]

Para instalar os pacotes novos incluídos no slackware, faça:

	# slackpkg install slackware

Com isso serão instalados todos os pacotes do slackware 9.1 que você não tem instalados na sua máquina. Recomendo que você instale os pacotes do alsa e o module-init-tools, para não ter surpresas desagradáveis.

Uma ÓTIMA idéia, é executar o lilo após um upgrade completo, já que o kernel também será atualizado. Também é interessante dar uma olhada nos arquivos .new que estão no /etc, para (talvez) substituir as versões antigas por estas, mais novas.

6. Arquivos de Configuração

Todas as configurações do slackpkg ficam dentro do /etc/slackpkg. Elas estão distribuídas em três arquivos:

  • mirrors

      O mirrors tem a lista de mirrors do Slackware. Você pode incluir lá qualquer mirror que goste, precisa apenas seguir a regra:

      		http://lal.../lal...lala/ 	-> para mirrors via web
      		ftp://lala.../lala...ala/	-> para mirrors via ftp
      		file://la...l/lalal...la/	-> para mirrors locais
      	

      Um sinônimo para file:// é cdrom:// os dois são tratados como sendo mirrors locais, podendo ser um CDROM, um HD ou mesmo um diretório montado via NFS ou SAMBA.

  • blacklist

      Neste arquivo ficam listados os pacotes que NÃO deverão ser instalados ou atualizados. É muito importante colocar apenas o nome de UM pacote por linha e que não haja nada depois do nome do pacote. Sim, é um arquivo bem "fresco" para ser editado, mas os pacotes podem ser inclusos nele através do comando "blacklist"

  • slackpkg.conf

      Aqui ficam as verdadeiras configurações do slackpkg. São uma série de variáveis de ambiente, com fartos comentários de como utilizar cada uma mas, nunca é demais esclarecer:

      TEMP Os pacotes quando forem baixados da internet irão todos para este diretório. É interessante que esse diretório tenha espaço para pacotes grandes como os do TEX ou o kernel-source
      DELALL Se for 0, os pacotes que estão no TEMP serão mantidos (até você apagá-los manualmente) se for 1, eles serão todos apagados após o download (o que é uma boa idéia para você não acabar com o espaço no seu HD com zilhões de pacotes)
      CHECKPKG Esta variável indica se o pacote que você baixou será verificado ou não antes de ser instalado. Dica de amigo, faça a verificação.
      WGETFLAGS Parâmetros para passar ao wget. Você pode querer colocar aqui as configurações do seu proxy, por exemplo.
      FIRST
      SECOND
      THIRD
      FOURTH
      Estabelecem a prioridade de busca dos pacotes. Por default primeiro eles são procurados no patches, depois no slackware, no extra e por fim no pasture. Com isso, se você mandar fazer um "upgrade slackware" e um pacote do patches for mais novo, ele irá baixar o pacote do patches.

      São poucas variáveis e a configuração padrão costuma ser suficiente para todos os casos. Um cuidado especial para a definição do diretório temporário. Coisas estranhas acontecem se acabar o espaço nele.

7. Finalizando

Neste artigo vimos como foi criado o slackpkg, como ele funciona e para quê serve. Se você tem alguma dúvida, sugestão, patch, bug-report para o slackpkg ou para este artigo, entre em contato: piterpk@terra.com.br. Questões sobre o desenvolvimento e uso do slackpkg também podem ser respondidas no canal #slackpkg na freenode.


Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 30 Oct 2004