From b28b0bd5f13135d64dca024f629100b3e30d47b2 Mon Sep 17 00:00:00 2001
From: rhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58>
Date: Tue, 24 Jul 2007 02:01:18 +0000
Subject: fixed a bug on 0.5 and tagged as 0.5.1

git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@407 04377dda-e619-0410-9926-eae83683ac58
---
 tags/0.5.1/doc/simplepkg.tex | 395 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 395 insertions(+)
 create mode 100644 tags/0.5.1/doc/simplepkg.tex

(limited to 'tags/0.5.1/doc/simplepkg.tex')

diff --git a/tags/0.5.1/doc/simplepkg.tex b/tags/0.5.1/doc/simplepkg.tex
new file mode 100644
index 0000000..610ed08
--- /dev/null
+++ b/tags/0.5.1/doc/simplepkg.tex
@@ -0,0 +1,395 @@
+\documentclass{article}
+\usepackage[brazilian]{babel}
+\usepackage[latin1]{inputenc}
+\usepackage[dvips]{graphics}
+\usepackage{hyperref}
+\newcommand\link{\hyperlink}
+
+\title{Gerenciamento de instalações e metapacotes com o simplepkg}
+\author{Silvio Rhatto}
+
+\begin{document}\label{start}
+\maketitle
+
+\begin{abstract}
+O \emph{simplepkg} é um sistema de gerenciamento de sistemas slackware que roda sobre o pkgtool. Ele é composto por vários scripts que desempenham funções de administração e desenvolvimento de sistemas do tipo Slackware, procurando fechar um circuito de produção, envolvendo a construção, a instalação de pacotes e até mesmo a instalação do sistema de forma automatizada.
+
+Do lado do desenvolvedor/a, ele ajuda na criação de SlackBuilds e construção de pacotes.  Do lado do administrador/a, ele possibilita a instalação automatizada de sistemas, instalação de pacotes e a criação de "templates" de instalação -- que contém todos os arquivos de configuração, informações de permissões e scripts de pós-instalação de uma dada máquina ou jaula.
+\end{abstract}
+
+\section{Descrição}
+
+Todas as distribuições de GNU/Linux já tem algum sistema de empacotamento amadurecido. A questão agora é a praticidade de instalar e controlar o que está instalado, tanto pacotes como arquivos de configuração de uma máquina, além da facilidade na criação de pacotes.
+
+Imagine por exemplo se você precisa manter uma lista de pacotes de 200 máquinas slackware, sendo que algumas são usadas como desktop, outras como servidores web, alguma sendo o servidor de email e assim por diante. Imagine agora que você perca o disco de algumas dessas máquinas ou que precise cotidianamente reinstalar ou atualizar um sistema.
+
+Usar o cd de instalação do slackware e configurar na mão toda a vez que der um pau faria com que você ficasse louco/a e desperdiçasse muito tempo, além do que sempre ocorre de esquecermos algum detalhe ou pacote durante a configuração do sistema. Manter um backup completo de cada máquina, por outro lado, pode ser muito custoso se o número delas for muito grande.
+
+O \emph{simplepkg} permite que você mantenha um template para cada grupo de máquinas e com apenas um comando instalar o template numa partição. Além do template, você precisa configurar o \emph{simplepkg} para obter pacotes de um repositório local ou remoto.
+
+Gerenciar instalações e pacotes não é tudo o que o \emph{simplepkg} faz. Ele pode ser usado até na criação de jaula e vservers, podendo manter toda a configuração das máquinas num repositório Subversion.
+
+O \emph{simplepkg} funciona não apenas com o Slackware mas com qualquer port (oficial ou não) que siga minimamente os padrões oficiais.
+
+\section{Arquitetura}
+
+O \emph{simplepkg} é um conjunto de scripts escritos com a filosofia KISS (Keep It Simple, Stupid) em mente.  Ele é um sistema muito simples, composto pelos seguintes comandos:
+
+\begin{itemize}
+  \item mkjail: constrói uma jaula/instalação de slackware numa pasta
+  \item templatepkg: criar ou adiciona pacotes a um template
+  \item lspkg: lista pacotes instalados
+  \item jail-update: inverso do jail-commit
+  \item jail-commit: atualiza o template
+  \item rebuildpkg: reconstrói um pacote a partir de sua entrada no /var/log/packages
+  \item simplaret: obtém pacotes de repositórios locais ou remotos
+  \item createpkg: baixa, compila e empacota software de acordo com scripts presentes num repositório
+  \item repos: cria e mantém repositórios
+  \item mkbuild: cria scripts de construção de pacotes
+\end{itemize}
+
+\section{Instalando o simplepkg}
+
+Para baixar o pacote do \emph{simplepkg}, vá em \link{http://slack.sarava.org/packages/noarch/}{http://slack.sarava.org/packages/noarch/}. Depois, basta usar o comando
+
+\begin{verbatim}
+installpkg simplepkg-VERSAO-noarch-BUILD.tgz
+\end{verbatim}
+
+\section{Usando o simplepkg}
+
+As três principais aplicações desse conjunto são:
+
+\begin{itemize}
+  \item Gerenciamento de pacotes
+  \item Criação e manutenção de jaulas
+  \item Criação de pacotes
+\end{itemize}
+
+O gerencamento de pacotes é feito através do \link{http://slack.sarava.org/simplaret}{simplaret}, e por ser algo bem específico está detalhado no artigo correspondente. As seções a seguir mostrarão como o \emph{simplepkg} pode ser utilizado para criar e manter jaulas, assim como também criar pacotes.
+
+\section{Criando templates de instalação}
+
+Originalmente, o \emph{simplepkg} foi desenvolvido para ajudar na automatização de instalações de sistemas slackware. Para isso, ele trabalha com templates -- listas com pacotes instalados, scripts e arquivos de configuração -- permitindo criar perfis de instalação que podem ser então usados para instalar o sistema numa outra partição ou criar um chroot.
+
+A construção de um template é feita através do programa templatepkg. Para criar um template de nome "meu-slackware" contendo a lista de pacotes atualmente instalados no seu sistema, digite
+
+\begin{verbatim}
+templatepkg -c meu-slackware
+\end{verbatim}
+
+A opção -c (ou --create) criará a pasta /etc/simplepkg/templates/meu-slackware, que conterá os seguintes componentes:
+
+\begin{itemize}
+  \item \emph{/etc/simplepkg/templates/meu-slackware/meu-slackware.d}: cópia de arquivos de configuração
+  \item \emph{/etc/simplepkg/templates/meu-slackware/meu-slackware.s}: scripts de pós-instalação
+  \item \emph{/etc/simplepkg/templates/meu-slackware/meu-slackware.perms}: informações sobre arquivos
+  \item \emph{/etc/simplepkg/templates/meu-slackware/meu-slackware.template}: lista de pacotes
+\end{itemize}
+
+Esses quatro componentes são suficientes para armazenar todas as características de uma instalação de slackware: a lista de pacotes controla o software instalado (a partir do conteúdo da pasta \emph{/var/log/packages}), a cópia dos arquivos de configuração controla as personalizações feitas para o uso dos aplicativos e os scripts de pós-instalação cuidam de qualquer rotina que precisa ser realizada exatamente após a instalação do sistema. Já o arquivo de informações sobre arquivos contém as permissões, o dono/a e grupo de cada arquivo de configuração presente no template.
+
+Se você quiser criar um template a partir de uma instalação de slackware presente numa outra partição do sistema que não seja a raíz, basta usar um comando do tipo
+
+\begin{verbatim}
+templatepkg -c meu-slackware /mnt/slackware
+\end{verbatim}
+
+onde /mnt/slackware é o local onde o sistema alternativo está instalado. Após criado, o template possuirá apenas a lista de pacotes contendo o nome dos aplicativos instalados no seu sistema. Como a pasta /var/log/packages não preserva a ordem de instalação dos pacotes, então talvez você queira editar manualmente a lista de pacotes de um template. Para isso, use o comando
+
+\begin{verbatim}
+templatepkg -e meu-slackware
+\end{verbatim}
+
+Para adicionar um arquivo de configuração no seu novo template, basta dar um comando como
+
+\begin{verbatim}
+templatepkg -a meu-slackware /etc/hosts
+\end{verbatim}
+
+Isso adicionará o arquivo /etc/hosts no template "meu-slackware". Além de salvar o arquivo e copiá-lo automaticamente quando você instalar seu sistema, o \emph{simplepkg} ainda pode tomar conta de qualquer alteração que o /etc/hosts sofrer no sistema, seja mudança no conteúdo do arquivo, dono ou permissão. Se você ainda estiver armazenando seus templates num repositório svn (o que veremos a seguir), o \emph{simplepkg} pode ainda manter um histórico completo das alterações do arquivo.
+
+ATENÇÂO: evite ao máximo deixar arquivos contendo senhas ou chaves privadas num template. O lugar mais adequado para deixar esse tipo de coisa é num backup seguro.
+
+\section{Criando jaulas e replicando instalações}
+
+Uma vez que um template foi criado com uma lista de pacotes e opcionalmente com arquivos de configuração e scripts de pós-instalação (que serão detalhados a seguir), você pode replicar sua instalação de slackware utilizando o comando
+
+\begin{verbatim}
+mkjail jaula meu-slackware
+\end{verbatim}
+
+Isso cria uma nova árvore do slackware em /vservers/jaula contendo todos os pacotes e arquivos de configuração do template "meu-slackware". A instalação dos pacotes será feita pelo aplicativo \link{http://slack.sarava.org/simplaret}{simplaret}, que deve estar configurado corretamente e cuja configuração padrão deve funcionar para a maioria dos casos.
+
+Se você quiser instalar essa jaula em outro local que não seja a pasta /vservers (esse local padrão pode ser mudado pelo arquivo de configuração do \emph{simplepkg}), basta usar um comando do tipo
+
+\begin{verbatim}
+ROOT=/mnt mkjail hda2 meu-slackware
+\end{verbatim}
+
+O comando acima faz exatamente o que você está pensando: replica sua instalação slackware em /mnt/hda2, dispensando totalmente o programa de instalação do slackware!
+
+Caso nenhum template for especificado, o mkjail utiliza o template /etc/simplepkg/default. O \emph{simplepkg} já vem com alguns templates padrões, presentes em /etc/simplepkg/defaults/templates.
+
+\section{Scripts de pós-instalação}
+
+Opcionalmente, é possível manter scripts de pós-instalação num template. Tais script são executados exatamente
+após a instalação de uma jaula e cópia de arquivos de configuração pelo mkjail. Para criar ou editar um script
+de pós-instalação, use um comando como
+
+\begin{verbatim}
+templatepkg -b meu-slackware nome-do-script.sh
+\end{verbatim}
+
+Isso adicionará o script nome-do-script.sh no template "meu-slackware". O mkjail passa dois argumentos para cada script de pós-instalação: a pasta superior e o nome da jaula ("/mnt" e "hda2" no nosso exemplo anterior). Assim, um exemplo de script seria algo como
+
+\begin{verbatim}
+#!/bin/bash
+chroot $1/$2/ sbin/ldconfig
+\end{verbatim}
+
+\section{Listando o conteúdo de um template}
+
+Para listar os templates disponíveis ou o conteúdo de um template, use comandos como
+
+\begin{verbatim}
+templatepkg -l
+templatepkg -l meu-slackware
+\end{verbatim}
+
+\section{Removendo arquivos de um template}
+
+Analogamente à forma como se adicona arquivos num template, removê-los pode ser feito com o seguinte comando:
+
+\begin{verbatim}
+templatepkg -d meu-slackware /etc/hosts
+\end{verbatim}
+
+Isso remove o arquivo /etc/hosts do template "meu-slackware".
+
+\section{Apagando um template}
+
+Para apagar um template, basta utilizar um comando como
+
+\begin{verbatim}
+templatepkg -r meu-slackware
+\end{verbatim}
+
+\section{Atualizando um template}
+
+Agora que já abordamos as opções do templatepkg, é hora de visitarmos um outro aplicativo, desta vez utilizado para manter um template atualizado. O jail-commit é um script que copia as alterações dos arquivos (conteúdo, propriedade e permissões) de um template a partir do conteúdo de uma jaula ou instalação.
+
+Por exemplo, caso se queira copiar as alterações da jaula /mnt/hda2 no template "meu-slackware", basta usar o comando
+
+\begin{verbatim}
+jail-commit /mnt/hda2 meu-slackware
+\end{verbatim}
+
+Além da lista de pacotes do template "meu-slackware" ser atualizada de acordo com a lista de pacotes presente em /mnt/hda2/var/log/packages, todos os arquivos de configuração presentes no template "meu-slackware" serão comparados com os correspondentes da pasta /mnt/hda2 e as diferenças são copiadas para o template. Da mesma forma, as permissões e informação de dono/grupo dos arquivos também é atualizada no template.
+
+O comando jail-commit possibilita que um template sempre esteja atualizado e refletindo a configuração atual de uma instalação de slackware. Se você quiser atualizar apenas a lista de pacotes de um template, porém, use
+
+\begin{verbatim}
+templatepkg -u meu-template
+\end{verbatim}
+
+Para facilitar ainda mais o controle das alterações do sistema, existe ainda uma facilidade do arquivo /etc/simplepkg/jailist. Esse arquivo serve, além de outros propósitos descritos na \link{http://slack.sarava.org/simplaret}{documentação do simplaret}, para que o jail-commit saiba de antemão quais são as instalações de sistema do tipo Slackware presentes numa máquina, além da instalação principal na raíz do sistema.
+
+Suponha que uma máquina possua duas instalações de slackware, além da principal (raíz):
+
+\begin{itemize}
+  \item /mnt/slackware-1 usando o template "slackware-1"
+  \item /mnt/slackware-2 usando o template "slackware-2"
+\end{itemize}
+
+Se o arquivo /etc/simplepkg/jailist contiver as seguintes linhas,
+
+\begin{verbatim}
+/mnt/slackware-1
+/mnt/slackware-2
+\end{verbatim}
+
+então o comando
+
+\begin{verbatim}
+jail-commit
+\end{verbatim}
+
+atualizará o template "slackware-1" de acordo com o conteúdo da jaula /mnt/slackware-1 e o template "slackware-2" com o conteúdo da jaula /mnt/slackware-2. Se, além desses dois templates, existir um outro de nome "main", então o jail-commit sem argumentos também copiará as atualizações da instalação raíz, deixando-as no template "main".
+
+Você pode inclusive colocar uma entrada no crontab do tipo
+
+\begin{verbatim}
+20 4 * * * jail-commit
+\end{verbatim}
+
+para que seus templates sejam atualizados diariamente. Se você ainda possui o envio de emails configurado na sua máquina, então a saída do jail-commit será enviada pelo cron diariamente para seu email, contendo diffs das alterações de arquivos de configuração a lista de pacotes adicionados ou removidos no sistema.
+
+\section{Restaurando arquivos de configuração numa jaula}
+
+A operação contrária ao que o jail-commit faz também é possível: suponha que você mexeu na configuração do sistema mas se arrependeu das alterações e deseja voltar a configuração para o modo como ela se encontra no seu template, basta usar o comando
+
+\begin{verbatim}
+jail-update /mnt/hda2 meu-slackware
+\end{verbatim}
+
+\section{Armazenando as configurações no repositório Subversion}
+
+Para aumentar ainda mais a flexibilidade e o controle do conteúdo dos templates, é possível armazená-los num repositório Subversion. Para isso, edite o arquivo /etc/simplepkg/simplepkg.conf e deixe o parâmetro de configuração \emph{TEMPLATES\_UNDER\_SVN} com o valor "yes".
+
+Depois, crie um repositório subversion para armazenar seus templates, usando algo como
+
+\begin{verbatim}
+svnadmin create /var/svn/simplepkg --fs-type fsfs
+\end{verbatim}
+
+Com o repositório criado, basta importar seus templates com o comando
+
+\begin{verbatim}
+templatepkg -e file:///var/svn/simplepkg
+\end{verbatim}
+
+A partir daí, o comando jail-commit enviará automaticamente todas as alterações dos templates para o repositório subversion. Se, por outro lado, você quiser baixar as alterações dos templates que estão no repositório remoto para sua cópia local, use o comando
+
+\begin{verbatim}
+templatepkg -s
+\end{verbatim}
+
+Caso você queira importar uma pasta de templates de um repositório já existente, use
+
+\begin{verbatim}
+templatepkg -i file:///var/svn/simplepkg
+\end{verbatim}
+
+onde file:///var/svn/simplepkg é o camninho do repositório.
+
+\section{Atualização de jaulas}
+
+A atualização de jaulas e sistemas instalados é feita através do \link{http://slack.sarava.org/simplaret}{simplaret} e também utiliza o arquivo /etc/simplepkg/jailist. Para mais informações a respeito, consulte a \link{http://slack.sarava.org/simplaret}{documentação do simplaret} para mais detalhes.
+
+\section{Arquiteturas e versões diferentes}
+
+O \emph{simplepkg} foi idealizado para permitir que um mesmo template possa ser usado para criar jaulas de arquiteturas e versões diferentes de sistemas padrão slackware. A atualização desses sistemas também é unificada. Essa possibilidade só é permitida se você usa o \link{http://slack.sarava.org/simplaret}{simplaret} e não o swaret como ferramenta de obtenção de pacotes.
+
+Por exemplo, para criar uma instalação de slackware 10.1 (assumindo que suas definições de repositórios do /etc/simplepkg/repos.conf contenham locais com slack 10.1), basta usar o comando
+
+\begin{verbatim}
+VERSION=10.1 mkjail minha-jaula template-servidor
+\end{verbatim}
+
+Arquiteturas diferentes também podem ser usadas. Se você está num sistema x86\_64 e quer instalar um slack 10.2 numa partição, experimente
+
+\begin{verbatim}
+ARCH=i386 VERSION=10.2 ROOT=/mnt mkjail hda2 meu-slackware
+\end{verbatim}
+
+Note que os templates independem de arquitetura e versão, já que eles só contém nomes de pacotes, arquivos de configuração e scripts.
+
+\section{Criando um pacote de um template}
+
+Se, por algum motivo, você quiser construir um pacote com o conteúdo de um template, experimente o comando
+
+\begin{verbatim}
+templatepkg -p nome-do-template
+\end{verbatim}
+
+No entanto, o \emph{simplepkg} foi criado para que esse tipo de comportamento seja evitado, já que é mais simples manter templates de configuração do que pacotes contendo a configuração de uma instalação.
+
+\section{Construindo pacotes}
+
+Até aqui, apenas mostramos os aplicativos do \emph{simplepkg} usados para a manutenção de instalações de slackware. No entanto, uma das outras finalidades desta suíte é a construção de pacotes, o que é feita pelo programa createpkg, Como dito anteriormente, o createpkg: baixa, compila e empacota software de acordo com scripts presentes num repositório de scripts, funcionando com um gerenciador de "ports" para slackware.
+
+O createpkg pode funcionar com qualquer tipo de script de construção de pacotes (SlackBuilds) mas funcionará melhor se os mesmos seguirem o padrão descrito na página
+
+\begin{verbatim}
+http://slack.sarava.org/wiki/Main/SlackBuilds
+\end{verbatim}
+
+Especificamente, o createpkg foi desenvolvido para utilizar os slackbuild disponíveis em \link{http://slack.sarava.org/slackbuilds}{http://slack.sarava.org/slackbuilds}. O createpkg trabalha com repositórios do tipo subversion.
+
+Para obter os scripts do repositório do slack.sarava.org, digite
+
+\begin{verbatim}
+createpkg --sync
+\end{verbatim}
+
+Em seguida, você pode listas todos os scripts disponíveis:
+
+\begin{verbatim}
+createpkg --list
+\end{verbatim}
+
+Para buscar por um pacote, use
+
+\begin{verbatim}
+createpkg --search latex2html
+\end{verbatim}
+
+No caso, a busca é feita pelo SlackBuild do aplicativo "latex2html". Suponha agora que você queira construir o pacote desse aplicativo:
+
+\begin{verbatim}
+createpkg latex2html
+\end{verbatim}
+
+O pacote resultante estará na pasta /tmp ou no valor especificado pela variável de ambiente \emph{\$REPOS}. Para criar e também instalar o pacote, basta
+
+\begin{verbatim}
+createpkg --install latex2html
+\end{verbatim}
+
+Se o pacote possuir dependências listadas num arquivo slack-required e que não estiverem instaladas no sistema, o createpkg tentará processá-las uma a uma antes de tentar construir o pacote desejado: se as dependências não forem encontradas no repositório de scripts, então o createpkg tentará baixá-las de um repositório binário através do \link{http://slack.sarava.org/simplaret}{simplaret}. Se você não quiser que a resolução de dependências seja seguida, use a opção --no-deps.
+
+Para mais detalhes de funcionamento, experimente o comando
+
+\begin{verbatim}
+createpkg --help
+\end{verbatim}
+
+ou então acesse a página http://slack.sarava.org/wiki/Main/SlackBuilds.
+
+\section{Aplicativos auxiliares}
+
+O \emph{simplepkg} acompanha ainda alguns aplicativos auxiliares:
+
+\begin{itemize}
+   \item lspkg: lista pacotes instalados
+   \item rebuildpkg: reconstrói um pacote a partir de sua entrada no /var/log/packages
+   \item repos: cria e mantém repositórios
+   \item mkbuild: cria scripts de construção de pacotes
+\end{itemize}
+
+O comando lspkg é um utilitário simples para a visualização de pacotes instalados no sistema. Já o rebuildpkg ajuda a recuperar pacotes instalados cujo tgz original foi perdido. O comando rebuildpkg reconstrói um pacote a partir de uma entrada no /var/log/packages. O comando
+
+\begin{verbatim}
+rebuildpkg coreutils
+\end{verbatim}
+
+reconstrói um pacote do coreutils usando os arquivos e as metainformações listadas no arquivo do /var/log/packages/ correspondente ao coreutils.
+
+Por fim, os scripts repos e mkbuild são os que se encontram na etapa de maior desenvolvimento: repos cria um repositório de pacotes a partir de uma pasta contendo pacotes do tipo pkgtool e o mkbuild é um aplicativo para auxiliar a criação de scripts de construção de pacotes que podem ser utilizados sozinhos ou pelo o createpkg.
+
+\section{Parâmetros de configuração}
+
+O arquivo de configuração do \emph{simplepkg} é o /etc/simplepkg/simplepkg.conf. Ele contém parâmetros de configuração de todos os scripts, porém neste texto não trataremos das opções específicas ao \link{http://slack.sarava.org/simplaret}{simplaret}, as quais tem uma seção específica no artigo correspondente.
+
+\begin{itemize}
+  \item \emph{JAIL\_ROOT}: pasta padrão onde as jaulas são criadas pelo mkjail. Valor padrão: "/vservers".
+  \item \emph{ADD\_TO\_JAIL\_LIST}: controla se uma jaula criada pelo mkjail deve ser adicionada automaticamente no arquivo /etc/simplepkg/jailist. O valor padrão é "1" (habilitado).
+  \item \emph{TEMPLATES\_UNDER\_SVN}: indica se os templates estão armazenados num repositório subversion.  O valor padrão é "no" (não).
+  \item \emph{TEMPLATE\_FOLDER}: indica qual é a pasta de templates. O valor padrão é "/etc/simplepkg/templates" e não é recomendável alterá-lo.
+  \item \emph{TEMPLATE\_STORAGE\_STYLE}: controla a forma de armazenamento de templates. O valor padrão é "own-folder" e essa opção apenas deve ser modificada se você armazena seus templates num formato antigo do \emph{simplepkg} e deseja manter compatibilidade.
+\end{itemize}
+
+Vale lembrar que todas as opções booleanas (isto é, que podem ser apenas habilitadas ou desabilitadas) do simplepkg.conf tem os seguintes valores permitidos: "1" e "yes" para habilitado e "0" ou "no" para desabilitado.
+
+\section{Mais informações}
+
+O \emph{simplepkg} foi escrito por Silvio Rhatto (rhatto at riseup.net) sob licença GPL e seu código fonte é disponibilizado através do repositório subversion:
+
+\begin{verbatim}
+svn checkout svn://slack.sarava.org/simplepkg
+\end{verbatim}
+
+O wiki de desenvolvimento: http://slack.sarava.org/wiki/Main/SimplePKG e o endereço da lista de discussão utilizada para discussões sobre o \emph{simplepkg} ou mesmo distribuições e pacotes do tipo Slackware é http://listas.sarava.org/wws/info/slack.
+
+\end{document}
-- 
cgit v1.2.3

