MAL - Memória Auxiliar do Lutieri

terça-feira, abril 01, 2008

Atualizando o ports e preservado as opções anteriores

O freebsd utiliza um ferramenta pra atualizar os pacotes(ports) instalados que é o portupgrade. Ele é inteligentizinho, mas nem tanto quanto eu queria que fosse.

portupgrade squid, por exemplo, baixa o fonte do squid, baixas patches(caso existam), aplica os patches, compila utilizando as últimas opções usadas(na última compilação), remove a versão anterior, instala e registra essa versão recém-compilada. Muito bem!

Quando eu disse que ele, compila utilizando as últimas opções usadas, me refiro a um arquivo em /var/db/ports/<nome>/options.

Esse arquivo é criado quando é executado o make config. Que exibe um tela ncurses com algumas opções pra compilação. Aí depende de cada ports. Alguns trabalham com essa forma de selecionar o que vai ser habilitado/desabilitado outros não. Caso o ports use OPTIONS no Makefile e exista esse arquivo citado acima, toda vez que for executado o make ou make install, inclusive a partir do portupgrade, essas opções serão utilizadas para compilação sem exibir a tela para selecionar. Caso o ports use OPTIONS no Makefile e NÃO exista esse arquivo citado, a tela será exibida, o arquivo então será criado com as opções selecionadas, e a compilação ocorrerá normalmente. E todas as futuras compilações utilizarão essas mesmas opções.

Um problema comum é o Makefile não fazer uso do OPTIONS ou mesmo fazer uso e não ter todas as opções inclusas. Uma vez que apenas escolhe-se se quer ou se não quer uma determinada opção, opções que o valor é string, exemplo:

SQUID_DEFAULT_LANG=Portuguese

Não são exibidas nessa tela ncurses. Pois lá só existe um checkbox e ponto.

O portuprgade utiliza um arquivo de configuração que nos diz que pode ser especificado argumentos de compilação em /usr/local/etc/pkgtools.conf da seguinte maneira:

MAKE_ARGS = {
# a) Separate them with the space
'databases/mysql41-*' => 'WITH_LINUXTHREADS=1 SKIP_DNS_CHECK=1',

# b) Specify them using an array
'databases/mysql41-*' => [
'WITH_LINUXTHREADS=1',
'SKIP_DNS_CHECK=1',
],
}

Muito bom, resolve meu problema, massssssss.... se um dia eu for atualizar diretamente pela árvore do ports, sem utilizar o portupgrade, aí ferrou!! As opções não serão utilizadas. Uma vez que quem lê esse arquivo é o aplicativo portupgrade.

Cansei... de escrever... mais opções leia esse artigo.
http://blog.innerewut.de/2006/1/14/upgrading-ports-and-preserve-make-options

Resumindo, pra compilar o mesmo ports sempre, forever and ever, com as mesmas opções, independente do modo de atualização/instalação. Adicione o seguinte no /etc/make.conf:

.if ${.CURDIR:M*www/squid}
NO_KERBEROS=yes
SQUID_CONFIGURE_ARGS=--enable-dlmalloc --enable-async-io --with-pthreads --with-aio --enable-ntlm-fail-open
SQUID_LANGUAGES=English Portuguese
SQUID_DEFAULT_LANG=Portuguese
.endif

Quando a compilação ocorre, independente do método usado, o make entra no diretório do ports.

O que o código acima faz é ver se o make está dentro de algum diretório que termine com www/squid. Caso esteja ele setará aquelas variáveis dentro bloco do if.

Como eu sou pior que São Tomé. Precisei testar pra ver se realmente funcionava antes de compilar. No caso do código acima é simples:

# cd ~
# make -V SQUID_CONFIGURE_ARGS
# cd /usr/ports/www/squid
# make -V SQUID_CONFIGURE_ARGS
--enable-dlmalloc --enable-async-io --with-pthreads --with-aio --enable-ntlm-fail-open

Viu! Funcionou!
'make -V VARIAVEL' retorna o valor da variável especificada.


Bye...

Marcadores:

0 Comentários:

Postar um comentário

<< Home



Chat with Lutieri G. B.

Subscribe in a reader