aboutsummaryrefslogtreecommitdiff
path: root/doc/simplepkg.html
blob: 85b2b06c72fb2a60fe07c1cc4454f76c396ba9a1 (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
O <i>simplepkg</i> é um sistema de gerenciamento de pacotes que roda sobre o <i>pkgtool</i> e o <i>swaret</i>. 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 <i>metapacotes</i>: uma lista de pacotes que pode ser instalada e removida com apenas um comando.
<!--break-->
<b>Descrição</b>

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 <i>swaret</i> 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 <i>vservers</i>. O simplepkg inclusive é um amadurecimento de idéias delineadas nos seguintes artigos:

- <a href="/node/3">Rodando o OpenOffice.org em chroot no Slamd64</a>
- <a href="/node/6">Linux Vservers e segurança por contexto</a>
- <a href="/node/7">Instalando o Slackware sem programa de instalação</a>

O <i>simplepkg</i> permite que o trampo proposto nos artigos acima seja simplificado a uma meia dúzia de comandos, desde que existam templates prontos.

<b>Arquitetura</b>

O <i>simplepkg</i> é um conjunto de scripts escritos com a filosofia KISS em mente. Ele é um sistema muito simples, composto pelos seguintes comandos:

- mkjail: constrói uma jaula/instalação de slackware numa pasta
- metapkg: instala ou remove um metapacote
- templatepkg: criar ou adiciona pacotes a um template
- lspkg: lista pacotes instalados
- jail-upgrade: faz o upgrade nas jaulas
- rebuildpkg: reconstrói um pacote a partir de sua entrada no <i>/var/log/packages</i>

A pasta de configuração e armazenamento de templates é a <i>/etc/simplepkg</i>. Templates são arquivos contendo uma lista de pacotes, um pacote por linha e com a extensão <i>.template</i>.  Como exemplo, um template poderia se chamar <i>minimo.template</i> e conter a seguinte lista:


<pre>
aaa_base
aaa_elflibs
apache
bash
bin
coreutils
findutils
</pre>

<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;
Se você quiser também é possível usar um <i>tagfile</i> do slackware como template, sem nem precisar editá-lo.

<b>Instalando o simplepkg</b>

Para baixar o pacote do simplepkg, vá em http://slack.midiatatica.org/packages/noarch/. Depois de instalá-lo, não esqueça de configurar seu <i>swaret</i>:

<pre>
installpkg swaret-VERSAO-noarch-BUILD.tgz simplepkg-VERSAO-noarch-BUILD.tgz
</pre>

<br>&nbsp;
Alternativamente, se você já está com o swaret instalado, adicione em seu <i>swaret.conf</i> a linha

<pre>
REPOS_ROOT=SlackMidiataticaNoarch%http://slack.midiatatica.org/packages/noarch
</pre>

<br>&nbsp;
e então digite

<pre>
swaret --update
swaret --install simplepkg
</pre>

<br>&nbsp;<br>&nbsp;
<b>Configurando o simplepkg</b>

Como exemplo, vamos criar uma jaula baseada nos pacotes instalados no seu slackware. Edite o arquivo <i>/etc/simplepkg/simplepkg.conf</i>:

<pre>
# /etc/simplepkg/simplepkg.conf
JAIL_ROOT="/vservers" # local onde as jaulas serão criadas
SWARET_PACKS="/var/swaret" # local onde o swaret armazena seus pacotes
SWARET_CLEAN="1" # apaga o cache de pacotes antes da instalação da jaula
SWARET_DELETE_DOWN="1" # apaga o cache de pacotes após a instalação
SWARET_UPDATE="0" # executa um swaret --update antes de iniciar a instalação da jaula
SWARET_PURGE_WEEKS="N" # apaga os pacotes do cache mais velhos que N semanas antes de instalar
PATCHES_DIR="/var/swaret/patches" # local os patches são armazenados
</pre>

<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;
O <i>swaret.conf</i> deve estar bem configurado para que ele seja capaz de baixar e instalar todos os pacotes dos templates. Parâmetros como <i>EXCLUDE</i> podem ser um empecilho, e se você os remover da sua instalação tenha muito cuidado ao atualizar o seu sistema via <i>swaret --upgrade</i>.

<b>Criando jaulas e replicando instalações</b>

<pre>
templatepkg meu-slackware
mkjail jaula meu-slackware
</pre>

<br>&nbsp;<br>&nbsp;
Isso cria o template <i>meu-slackware</i> a partir da sua lista de pacotes em <i>/var/log/packages</i> e cria uma nova árvore com esses pacotes na pasta <i>/vservers/jaula</i> (dependendo de qual o valor da variável <i>JAIL_ROOT</i> 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 <i>/etc/simplepkg/meu-slackware.d/</i> os arquivos de configuração (dentro da hierarquia de pastas do sistema, isto é, <i>/etc/simplepkg/meu-slackware.d/etc/apache/httpd.conf</i>) e os script em <i>/etc/simplepkg/meu-slackware.s/</i>. O template <i>vserver</i>, 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

<pre>
ROOT=/mnt mkjail hda2 meu-slackware
</pre>

<br>&nbsp;
O comando acima faz exatamente o que você está pensando: replica sua instalação slackware em </i>/mnt/hda2</i>, dispensando totalmente o programa de instalação do slackware!

Caso nenhum template for especificado, o <i>mkjail</i> utiliza o template <i>/etc/simplepkg/default.template</i>.

Se você manter uma jaula em <i>JAIL_ROOT</i> com o mesmo nome que um template, é possível ainda usar o script <i>jail-update</i> para copiar todas as alterações de arquivos da jaula na pasta de arquivos do seu template (<i>/etc/simplepkg/nome-da-jaula.d</i>). Assim, basta que você copie todos os arquivos de configuração que você editou para essa pasta e deixar o <i>jail-update</i> 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 <i>/etc/simplepkg/jailist</i>:

<pre>
jail-update
</pre>

<br>&nbsp;
O <i>jail-update</i> considera que o template <i>main</i>, caso exista, se refere à instalação principal da sua máquina, isto é, o sistema de você roda. Dessa forma a invocação do <i>jail-update</i> atualiza todos os templates cujas jaulas estão em <i>JAIL_ROOT</i> 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 <i>templatepkg</i> com a opção <i>-a</i>, que adiciona apenas novos pacotes ao template. Se você quiser que o <i>templatepkg</i> crie um template a partir de uma jaula, simplesmente use

<pre>
templatepkg jaula /vservers/jaula
</pre>

<br>&nbsp;
<b>Metapacotes</b>

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

<pre>
metapkg --install cinelerra
</pre>

<br>&nbsp;
O comando sugere uma semelhança com o uso direto do <i>swaret</i> ou do <i>slapt-get</i>, com a única diferença residindo no modo como cada um desses programas lida com as dependências de um pacote. Os <i>slapt-get</i> suporta o arquivo <i>slack-required</i>, que pode ou não estar presente no pacote. Já o <i>swaret</i> possui uma ferramenta própria para a criação de uma lista de dependências.

O <i>simplepkg</i> 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 <i>slack-required</i>, 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

<pre>
metapkg --remove cinelerra
</pre>

<br>&nbsp;
<b>Upgrade de jaulas</b>

O upgrade de jaulas que estejam em <i>JAIL_ROOT</i> pode ser efetuado com o comando <i>jail-upgrade</i>. Simplesmente coloque os patches em <i>PATCHES_DIR</i> e dê o comando

<pre>
jail-upgrade
</pre>

<br>&nbsp;
Se você quiser atualizar apenas uma das jaulas que estão em <i>JAIL_ROOT</i>, use

<pre>
jail-upgrade nome-da-jaula
</pre>

<br>&nbsp;
Para especificar uma pasta contendo patches diferente de <i>PATCHES_DIR</i> (útil quando você possui jaulas com diferentes versões do slackware), simplesmente use

<pre>
PATCHES=/local/dos/patches jail-upgrade nome-da-jaula
</pre>

<br>&nbsp;
De modo análogo ao <i>mkjail</i>, é possível indicar ao <i>jail-upgrade</i> uma outra pasta onde a jaula está armazenada:

<pre>
ROOT=/otherroot jail-upgrade
</pre>

<br>&nbsp;
<b>Aplicativo auxiliar: rebuildpkg</b>

O simplepkg acompanha ainda um aplicativo auxiliar que ajuda a recuperar pacotes instalados cujo tgz original foi perdido. O comando <i>rebuildpkg</i> reconstrói um pacote a partir de uma entrada no <i>/var/log/packages</i>. O comando

<pre>
rebuildpkg coreutils
</pre>

<br>&nbsp;
reconstrói um pacote do coreutils usando os arquivos e as metainformações listadas no arquivo do <i>/var/log/packages/</i> correspondente ao coreutils.

<b>Fonte</b>

Se você quiser obter diretamente o código-fonte do <i>simplepkg</i>, baixe-o do repositório:

<pre>
svn checkout svn://slack.midiatatica.org:40/simplepkg
</pre>

<br>&nbsp;
<b>Página de desenvolvimento</b>

A página de desenvolvimento do <i>simplepkg</i> fica <a href="http://slack.midiatatica.org/wiki/Main/SimplePKG">aqui</a>.