From f9a8dfcd51e481a49355d94a3e74f2762519378f Mon Sep 17 00:00:00 2001
From: rhatto <rhatto@04377dda-e619-0410-9926-eae83683ac58>
Date: Sun, 11 Feb 2007 14:29:54 +0000
Subject: changed repository layout to trunk/, tags/ and branches/ scheme

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

(limited to 'trunk/doc/simplepkg.tex')

diff --git a/trunk/doc/simplepkg.tex b/trunk/doc/simplepkg.tex
new file mode 100644
index 0000000..7c98e54
--- /dev/null
+++ b/trunk/doc/simplepkg.tex
@@ -0,0 +1,241 @@
+\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 pacotes que roda sobre o \emph{pkgtool}. 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, criar um chroot específico ou até trabalhar com o conceito de \emph{metapacotes}: uma lista de pacotes que pode ser instalada e removida com apenas um comando.
+\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.
+
+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 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 do \emph{swaret} configurado para os repositórios de pacote que possuem seus aplicativos.
+
+Gerenciar instalações e metapacotes não é tudo o que o simplepkg faz. Ele pode ser usado até na criação de \emph{vservers}. O simplepkg inclusive é um amadurecimento de idéias delineadas nos seguintes artigos:
+
+\begin{itemize}
+  \item \link{/node/3}{Rodando o OpenOffice.org em chroot no Slamd64}
+  \item \link{/node/6}{Criando Vservers em Slackware}
+  \item \link{/node/7}{Instalando o Slackware sem programa de instalação}
+\end{itemize}
+
+O \emph{simplepkg} permite que o trampo proposto nos artigos acima seja simplificado a uma meia dúzia de comandos, desde que existam templates prontos.
+
+\section{Arquitetura}
+
+O \emph{simplepkg} é um conjunto de scripts escritos com a filosofia KISS 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 metapkg: instala ou remove um metapacote
+  \item templatepkg: criar ou adiciona pacotes a um template
+  \item lspkg: lista pacotes instalados
+  \item jail-upgrade: faz o upgrade nas jaulas
+  \item rebuildpkg: reconstrói um pacote a partir de sua entrada no \emph{/var/log/packages}
+  \item simplaret: obtém pacotes de repositórios locais ou remotos
+\end{itemize}
+
+A pasta de configuração e armazenamento de templates é a \emph{/etc/simplepkg}. Templates são arquivos contendo uma lista de pacotes, um pacote por linha e com a extensão \emph{.template}.  Como exemplo, um template poderia se chamar \emph{minimo.template} e conter a seguinte lista:
+
+\begin{verbatim}
+aaa_base
+aaa_elflibs
+apache
+bash
+bin
+coreutils
+findutils
+\end{verbatim}
+
+Se você quiser também é possível usar um \emph{tagfile} do slackware como template, sem nem precisar editá-lo.
+
+\section{Instalando o simplepkg}
+
+Para baixar o pacote do simplepkg, vá em http://slack.midiatatica.org/packages/noarch/. Depois de instalá-lo.
+
+\begin{verbatim}
+installpkg simplepkg-VERSAO-noarch-BUILD.tgz
+\end{verbatim}
+
+Alternativamente, se você usa o swaret, adicione em seu \emph{swaret.conf} a linha
+
+\begin{verbatim}
+REPOS_ROOT=SlackMidiataticaNoarch%http://slack.midiatatica.org/packages/noarch
+\end{verbatim}
+
+e então digite
+
+\begin{verbatim}
+swaret --update
+swaret --install simplepkg
+\end{verbatim}
+
+\section{Configurando o simplepkg}
+
+Como exemplo, vamos criar uma jaula baseada nos pacotes instalados no seu slackware. Edite o arquivo \emph{/etc/simplepkg/simplepkg.conf}:
+
+\begin{verbatim}
+# /etc/simplepkg/simplepkg.conf
+JAIL_ROOT="/vservers" # local onde as jaulas serão criadas
+SIMPLARET="simplaret" # programa que baixa os pacotes (pode ser o swaret se voce o tiver)
+STORAGE="/var/simplaret" # local onde o swaret armazena seus pacotes
+SIMPLARET_CLEAN="1" # apaga o cache de pacotes antes da instalação da jaula
+SIMPLARET_DELETE_DOWN="1" # apaga o cache de pacotes após a instalação
+SIMPLARET_UPDATE="0" # atualiza as listas de pacotes antes de iniciar a instalação da jaula
+SIMPLARET_PURGE_WEEKS="N" # apaga os pacotes mais velhos que N semanas antes de instalar
+PATCHES_DIR="/var/simplaret/patches" # local os patches são armazenados
+\end{verbatim}
+
+Para definir quais repositórios de pacotes você usará, edite o arquivo \emph{/etc/simplepkg/repos.conf}, colocando algo como
+
+\begin{verbatim}
+ROOT-i386="http://slack.midiatatica.org/packages/slackware"
+REPOS-i386="slack-midiatatica%http://slack.midiatatica.org/packages/slackware"
+ROOT-x86_64-10.2="http://darkstar.ist.utl.pt/pub/slamd64/"
+REPOS-x86_64-10.2="slamd-midiatatica%http://slack.midiatatica.org/packages/slamd64"
+\end{verbatim}
+
+Se você quer utilizar o swaret em lugar do simplaret, o swaret.conf deve estar bem configurado para que ele seja capaz de baixar e instalar todos os pacotes dos templates. Parâmetros como \emph{EXCLUDE} podem ser um empecilho, e se você os remover da sua instalação tenha muito cuidado ao atualizar o seu sistema via \emph{swaret --upgrade}. A desvantagem de usar o swaret é que você não terá como administrar jaulas e instalações de múltiplas arquiteturas.
+
+Para informações detalhadas sobre o simplaret, consulte seu \link{/node/16}{artigo específico}.
+
+\section{Criando jaulas e replicando instalações}
+
+\begin{verbatim}
+templatepkg meu-slackware
+mkjail jaula meu-slackware
+\end{verbatim}
+
+Isso cria o template \emph{meu-slackware} a partir da sua lista de pacotes em \emph{/var/log/packages} e cria uma nova árvore com esses pacotes na pasta \emph{/vservers/jaula} (dependendo de qual o valor da variável \emph{JAIL\_ROOT} do simplepkg.conf, é claro).
+
+Se você quiser que alguns arquivos de configuração e executar scripts após a instalação dessa jaula, basta colocarmos na pasta \emph{/etc/simplepkg/meu-slackware.d/} os arquivos de configuração (dentro da hierarquia de pastas do sistema, isto é, \emph{/etc/simplepkg/meu-slackware.d/etc/apache/httpd.conf}) e os script em \emph{/etc/simplepkg/meu-slackware.s}. O template \emph{vserver}, que já vem no mkjail, contém um exemplo de script.
+
+Você pode especificar também destinos alternativos para sua jaula, através de 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 \emph{/mnt/hda2}, dispensando totalmente o programa de instalação do slackware!
+
+Caso nenhum template for especificado, o \emph{mkjail} utiliza o template \emph{/etc/simplepkg/default.template}.
+
+Se você manter uma jaula em \emph{JAIL\_ROOT} com o mesmo nome que um template, é possível ainda usar o script \emph{jail-update} para copiar todas as alterações de arquivos da jaula na pasta de arquivos do seu template (\emph{/etc/simplepkg/nome-da-jaula.d}). Assim, basta que você copie todos os arquivos de configuração que você editou para essa pasta e deixar o \emph{jail-update} numa crontab para que você tenha sempre um template atualizado e baseado nas jaulas / instalações que você tem rodando e que estiverem listadas no arquivo \emph{/etc/simplepkg/jailist}:
+
+\begin{verbatim}
+jail-update
+\end{verbatim}
+
+O \emph{jail-update} considera que o template \emph{main}, caso exista, se refere à instalação principal da sua máquina, isto é, o sistema de você roda. Dessa forma a invocação do \emph{jail-update} atualiza todos os templates cujas jaulas estão em \emph{JAIL\_ROOT} e ainda atualiza o template da instalação principal.
+
+Para adicionar ou remover pacotes de um template, basta editar o arquivo de template. Uma outra forma de adicionar arquivos é usando o \emph{templatepkg} com a opção \emph{-a}, que adiciona apenas novos pacotes ao template. Se você quiser que o \emph{templatepkg} crie um template a partir de uma jaula, simplesmente use
+
+\begin{verbatim}
+templatepkg jaula /vservers/jaula
+\end{verbatim}
+
+\section{Metapacotes}
+
+Outro uso dos templates é a criação de pacotes: imagine por exemplo a dificuldade de um usuário/a novo de slackware para instalar o cinelerra e todas as suas dependências. Criando um template contendo o nome de todos os pacotes necessários para rodar esse software permite que um usuário instale-o simplesmente com o comando
+
+\begin{verbatim}
+metapkg --install cinelerra
+\end{verbatim}
+
+O comando sugere uma semelhança com o uso direto do \emph{swaret} ou do \emph{slapt-get}, com a única diferença residindo no modo como cada um desses programas lida com as dependências de um pacote. Os \emph{slapt-get} suporta o arquivo \emph{slack-required}, que pode ou não estar presente no pacote. Já o \emph{swaret} possui uma ferramenta própria para a criação de uma lista de dependências.
+
+O \emph{simplepkg} não pretende substituir esses dois modos de checagem e sim propor uma alternativa de distribuição de pacotes em que as dependências são resolvidas sem precisar de um repositório de dependências ou uma modificação no próprio pacote, que é o caso do \emph{slack-required}, um arquivo que na maioria das vezes não está presente.
+
+A remoção de um aplicativo e todas as suas dependências podem ser feitas simplesmente com o comando
+
+\begin{verbatim}
+metapkg --remove cinelerra
+\end{verbatim}
+
+\section{Upgrade de jaulas}
+
+O upgrade de jaulas que estejam em \emph{JAIL\_ROOT} pode ser efetuado com o comando \emph{jail-upgrade}. Simplesmente coloque os patches em \emph{PATCHES\_DIR} e dê o comando
+
+\begin{verbatim}
+jail-upgrade
+\end{verbatim}
+
+Se você quiser atualizar apenas uma das jaulas que estão em \emph{JAIL\_ROOT}, use
+
+\begin{verbatim}
+jail-upgrade nome-da-jaula
+\end{verbatim}
+
+Para especificar uma pasta contendo patches diferente de \emph{PATCHES\_DIR} (útil quando você possui jaulas com diferentes versões do slackware), simplesmente use
+
+\begin{verbatim}
+PATCHES=/local/dos/patches jail-upgrade nome-da-jaula
+\end{verbatim}
+
+De modo análogo ao \emph{mkjail}, é possível indicar ao \emph{jail-upgrade} uma outra pasta onde a jaula está armazenada:
+
+\begin{verbatim}
+ROOT=/otherroot jail-upgrade
+\end{verbatim}
+
+\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 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 \emph{/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 \emph{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. Por isso, o \emph{templatepkg}, o \emph{metapkg}, o \emph{lspkg} e o \emph{jail-update} funcionam normalmente.
+
+Para atualizar suas jaulas, o \emph{jail-upgrade} checa antes qual a versão e arquitetura de cada uma
+de suas jaulas através do \emph{/etc/slackware-version} correspondente e a partir disso aplica os patches da arquitetura e versão da mesma, usando para isso o simplaret (veja a \link{node/16}{documentação própria}).
+
+Desse modo, mesmo que você tenha jaulas de versões e arquiteturas diversas, usar o comando \emph{jail-upgrade} faz a atualização sem problemas, desde que seus patches estejam organizados por arquitetura e versão, conforme é detalhado na \link{/node/16}{documentação do simplaret}.
+
+\section{Aplicativo auxiliar: rebuildpkg}
+
+O simplepkg acompanha ainda um aplicativo auxiliar que ajuda a recuperar pacotes instalados cujo \emph{.tgz} original foi perdido. O comando \emph{rebuildpkg} reconstrói um pacote a partir de uma entrada no \emph{/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 \emph{/var/log/packages/} correspondente ao coreutils.
+
+\section{Fonte}
+
+Se você quiser obter diretamente o código-fonte do \emph{simplepkg}, baixe-o do repositório:
+
+\begin{verbatim}
+svn checkout svn://slack.midiatatica.org:40/simplepkg
+\end{verbatim}
+
+\section{Página de desenvolvimento}
+
+A página do \emph{simplepkg} fica em \link{http://slack.midiatatica.org/wiki/Main/SimplePKG}{http://slack.midiatatica.org/wiki/Main/SimplePKG}.
+
+\end{document}
-- 
cgit v1.2.3

