sexta-feira, 28 de agosto de 2009

Dica Linux - Extraindo arquivos de um pacote RPM

Num dia desses, eu estava tentando compilar um programa, que reclamava a falta de uma biblioteca ou, particularmente, de um arquivo em especial. Descobri que este arquivo estava contido em um pacote RPM.

Todavia, para instalar este pacote eu teria que instalar dezenas de outros apenas para satisfazer as dependências do pacote com a biblioteca requerida. A pergunta surgiu: como pegar deste pacote apenas o arquivo que eu quero? A solução:

$ rpm2cpio | cpio -idmv arquivo.rpm

que "descompacta" o arquivo RPM.

Este processo é feito em duas etapas:

1ª) o comando rpm2cpio converte o pacote RPM para um arquivo CPIO (maiores informações sobre este formato de arquivo pode ser encontrado em http://en.wikipedia.org/wiki/Cpio, em inglês).

2ª) o arquivo CPIO gerado pelo comando rpm2cpio é passado (através do pipe, |) ao comando cpio, que, por sua vez, extrai os arquivos contidos no pacote. As opções passadas ao comando cpio dizem a ele para que extraia os arquivos do arquivo CPIO (-i), que crie os diretórios existentes no arquivo CPIO (-d), que mantenha a data original de modificação dos arquivos (-m) e que mostre o progresso da extração (-v).

Use as páginas manuais desses comandos para maiores informações.

Este exemplo descompacta todo os arquivos, mas o processo pode ser um pouco mais refinado, solicitando, por exemplo, a extração apenas do arquivo que se quer. Para ver se o pacote RPM possui o arquivo desejado, liste o seu conteúdo com

$ rpm2cpio arquivo.rpm | cpio -t

Se o pacote RPM possuir o arquivo desejado, extraia-o diretamente com

$ rpm2cpio arquivo.rpm | cpio -idv arquivo

sendo arquivo o nome do arquivo que se quer extrair, exatamente como ele aparece na listagem gerada com o comando cpio -t.

Não esqueça que o cpio com a opção -d cria os diretórios onde o arquivo seria instalado, no diretório local. Digamos que o arquivo seria instalado em /usr/lib. Depois de extraí-lo, ele estará disponível em usr/lib/, no diretório onde foi executado o comando anterior.

Até mais.

OBS.: a parte final desta dica, que refere-se a extração individual de arquivos, foi retirada de http://www.rpm.org/max-rpm/s1-rpm-miscellania-rpm2cpio.html, que está em inglês.

sexta-feira, 14 de agosto de 2009

Dica Linux - Instalando fontes Metafont (arquivos *.mf) no linux

Ao tentar usar o LaTeX no Fedora 10, deparei-me com um erro devido a falta de uma fonte, a calligra. Achei-a no CTAN, no seguinte endereço:

http://www.ctan.org/tex-archive/fonts/calligra/

Depois de tanto penar procurando como fazer para instalar fontes deste tipo, achei num site (http://www.ctan.org/tex-archive/documentation/beginlatex/html/chapter8.html) uma "receitinha de bolo" que resumo aqui:

1. criar um diretório em /usr/share/texmf/fonts/source/public/ com o nome da fonte. Neste caso será calligra (veja o exemplo do comando abaixo):

# mkdir /usr/share/texmf/fonts/source/public/calligra

2. copiar os arquivos .mf desta fonte para o diretório criado no passo anterior:

# cp callig15.mf calligra.mf /usr/share/texmf/fonts/source/public/calligra/

3. executar o programa indexador do TeX, que pode ser texhash, mktexlsr ou, simplesmente, configure. No meu caso, executei o comando texhash:

# texhash

Pronto. A nova fonte está instalada e pronta para o uso com o LaTeX. ATENÇÃO: os comandos acima devem ser executados como root. Caso não tenha acesso a esta conta, peça para o seu administrador instalar a fonte.

Algumas fontes Metafont possuem arquivos *.fd e *.sty. Se este for o seu caso, antes de executar o terceiro passo, copie estes arquivos para o diretório /usr/share/texmf/tex/latex/mfnfss:

# cp *.fd *.sty /usr/share/texmf/tex/latex/mfnfss/

Outros tipos de fontes requerem outros métodos. O site onde encontrei esta receita possui mais informações.