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
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.
|