aboutsummaryrefslogtreecommitdiff
path: root/doc/simplepkg.tex
blob: 7c98e5428ee007b6a6ebbf1d9aafd69f039bc403 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
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}