# NablaUtils: meu pequeno canivete suíço

## Operador Nabla

Como eu hava dito em outro tópico, estou escrevendo um utilitário em Python que utiliza os recursos do Portage para automatizar algumas tarefas que costumo realizar com freqüência. Também prometi disponibilizar o script aqui no fórum quando estivesse começando a ficar satisfeito com os seus recursos...

Pois bem. Hoje eu concluí uma das etapas que eu mais almejava concluir e, por isso, achei que este é um bom momento para trazer o utilitário ao conhecimento de vocês.

O link para o download do script é este. O modo de uso do utilitário é o seguinte (é obrigatório indicar a opção):

```
nablautils.py opção pacote1 [pacote2 pacote3 ...]
```

Até o presente momento, as seguintes opções são suportadas:

-l, --list-versions: Exibe um quadro com todas as versões disponíveis para o pacote, com informações um pouco mais detalhadas sobre o masking status de cada versão.

-u, --unmask-package: Adiciona uma entrada referente ao pacote no arquivo /etc/portage/package.keywords.

-U, --unmask-depgraph: A menina dos meus olhos  :Very Happy:  . Similar à opção -u, mas com um "pequeno" adicional: ele faz uma varredura nas dependências do(s) pacote(s), adicionando-as também ao arquivo /etc/portage/package.keywords, conforme necessário.

-r, --remask-package: Remove a entrada referente ao pacote do arquivo /etc/portage/package.keywords.

-c, --clean: Outro recurso que me cativa  :Very Happy:  . O utilitário faz uma limpeza no arquivo /etc/portage/package.keywords, removendo entradas que se encontram em uma das seguintes situações:

    - A versão mais recente disponível para o pacote é estável.

    - Nenhuma versão estável ou ~x86 foi encontrada. Em princípio, isto dá cabo de entradas incorretas no arquivo.

[Nova opção] -g, --regenerate: Dê uma olhada na descrição desta opção mais abaixo!

Não se preocupem em passar na linha de comando o qualificador completo do pacote, categoria/pacote. Basta passar o nome do pacote que, em caso de ambiguidade, o utilitário lhe apresentará os possíveis qualificadores completos e solicitará quais deles você quer adicionar à sua lista de argumentos.

Vale ressaltar que, como eu comecei a desenvolver este utilitário para meu uso particular, só coloquei suporte para a arquitetura x86 (por enquanto). Além disso, os recursos de adição recursiva de pacotes e de limpeza do arquivo /etc/portage/package.keywords podem ainda não ter sido suficientemente testados (sugiro que você faça um backup do seu arquivo /etc/portage/package.keywords para o caso de algo sair errado).

Espero que gostem (quem quiser experimentar)...

PS: para os pythonmaníacos que quiserem [se atrever a] ler o script, deixo um recado: o script está muito grande, feio e mal documentado  :Embarassed:  .

ERRATA: Na verdade, o script trabalha com outras arquiteturas, sim. A questão é que, até o presente momento, o script trabalha apenas com keywords do tipo ~ARCH no arquivo /etc/portage/package.keywords. Particularmente, não creio que alguém precise instalar um pacote mascarado como -x86 ou -* mas, se houver a necessidade, coloco tal suporte depois.Last edited by Operador Nabla on Mon May 02, 2005 6:18 pm; edited 1 time in total

----------

## nafre

Gostei do teu canivete.

Vou testar aqui  :Smile: 

----------

## nafre

Outra coisa que percebi agora antes de usar vc tera que da permissao de executacao:

```
#chmod +x nablautils.py
```

e depois de preferencia pode colocar no diretorios dos binarios:

```
mv nablautils.py /usr/bin
```

Um abraco.

Pra usar e so 

```
./nablautils opcao ...
```

----------

## nafre

depois de um tempo maquinando teu script venho a  recorrer a vc:

```
bash-2.05b# nablautils.py -c

Traceback (most recent call last):

  File "/usr/bin/nablautils.py", line 743, in ?

    maskingManager.cleanPackageKeywordsFile()

  File "/usr/bin/nablautils.py", line 664, in cleanPackageKeywordsFile

    bestStableVersion = checker.sortByVersion( checker.availableVersions, package, '+', constraint = 'not masked' )[0]

  File "/usr/bin/nablautils.py", line 446, in sortByVersion

    if versionsDict.has_key( depend ):

AttributeError: 'str' object has no attribute 'has_key'

```

----------

## Operador Nabla

Eu tinha mudado a assinatura do método sortByVersion() e não tinha atualizado as invocações a este método dentro do método cleanPackageKeywordsFile().

Já fiz a correção. Baixe o script novamente e teste-o (não se esqueça de fazer um backup do seu arquivo /etc/portage/package.keywords até ter certeza de que está tudo funcionando...)

----------

## nafre

agora funcionou perfeitamente:

```
bash-2.05b# nablautils.py -c

The following entry was removed from /etc/portage/package.keywords:

    [S] x11-wm/enlightenment

[S]: the best version available for this package is "x86"-stable.

```

----------

## coffeeman

Gostei mesmo... vai me quebrar um galho danado...

----------

## Kobal

legal, não teria como mudar amarelo para outra cor ?

Um laranja, é que uso terminal branco, e fica muito ruim. 

Bom script.

----------

## Operador Nabla

 *Kobal wrote:*   

> legal, não teria como mudar amarelo para outra cor ?
> 
> Um laranja, é que uso terminal branco, e fica muito ruim.

 

Fiz uma alteração "emergencial" no script, colocando background preto nos textos coloridos por padrão.

Vê se assim fica menos pior (só vou poder mexer com calma no script neste final de semana).

----------

## Kobal

Ajudou bastante, fica feio mais como provisorio ta muito bom, é so mudar o amarelo para outra cor que fica bom com fundo branco.

----------

## nafre

eu so a favor do background preto por padrao nos textos colorido.

----------

## AngusYoung

Legal seu programa Nabla  :Smile: 

Para os preguiçosos como eu, eu fiz um ebuild.

----------

## Operador Nabla

Eu fiz uma reestruturação no script, criando objetos para os ebuilds, e adicionei uma opção nova (depois que um usuário italiano manifestou interesse por ela):

-g, --regenerate: Faz uma varredura em todos os pacotes instalados e adiciona-os ao arquivo /etc/portage/package.keywords conforme necessário

Suponhamos que você instalou uma série de pacotes do modo "antigo":

```
ACCEPT_KEYWORDS='~ARCH' emerge <lista-de-pacotes>
```

e agora não sabe quais deles você deve adicionar ao arquivo /etc/portage/package.keywords (para não ter problemas com downgrades indesejados). Neste caso, você pode invocar o comando:

```
nablautils.py -g
```

para que eles sejam devidamente adicionados.

Para ter uma idéia do poder deste recurso, faça a seguinte brincadeira:

1. Renomeie o seu arquivo /etc/portage/package.keywords (por exemplo, para /etc/portage/package.keywords.old).

2. Execute o comando nablautils.py -g

3. Compare o arquivo /etc/portage/package.keywords recém-gerado com o seu arquivo original:

```
diff /etc/portage/package.keywords.old /etc/portage/package.keywords
```

Você verá que, exceto em casos incomuns, o novo arquivo será muito parecido com o original (talvez por isso eu tehna batizado esta nova opção como regenerate  :Very Happy:  ).

No momento, eu identifiquei um inconveniente: ele não funciona corretamente com pacotes obsoletos (i.e., pacotes instalados cujos ebuilds foram removidos da Portage Tree).

EDITADO: Eu alterei o esquema de cores utilizado no script, procurando algo que ficasse bom tanto em um terminal escuro como em um branco. Dêem uma olhada.

----------

## Operador Nabla

Gostaria de saber de quem está experimentando o script se ele está rodando bem.

É que no meu micro tá demorando muito para carregar os módulos do Portage (o que atrapalha a execução não só do meu script, como do próprio emerge). E olha que o meu micro é um Atlhon XP 1800+ com 256 MB de RAM...

----------

