BSD Ports

O BSD Ports em sua definição é um conjunto de makefiles (arquivos do make), alguns patches e informações detalhadas no seu conteúdo que são necessários para obter programas pelo seu simples sistema de gerenciamento. Esta disponível (em toda a sua metodologia) pra sistemas BSD como o FreeBSD, NetBSD e OpenBSD. No caso do DragonFlyBSD ele usa o dports, armazena a sua arvore em /usr/dports e da no mesmo. O sistema também esta em outros sistemas seguindo as mesmas especificações. Com ele voce tem a opção de instalar softwares (programas) de uma maneira bem simples, atualizar, remover e algumas outras opções bem interessantes. No caso isolado do NetBSD se utiliza o pkgsrc (NetBSD Packages Collection), podemos falar sobre o pkgsrc em uma outra vez, porque é um dos meus preferidos. Mas neste post vamos tratar especificamente o FreeBSD Ports.

O Ports fornece uma maneira bem simples para instalar softwares em sistemas BSD, como o FreeBSD por exemplo. Resumindo o seu funcionamento ele é apenas uma plataforma de Makefiles contendo URLs que o atende no nivel basico do seu ecosistema a instalação de programas disponíveis pelo seu esqueleto, como também possui um procedimento semelhante ao seguinte:

(1) ele define onde e como o seu sistema de gerenciamento vai obter o fonte ou binário.
(2) Verifica o que o software depende para funcionar e busca pela hierarquia de dependências e usa principalmente o conteúdo agrupado e disponibilizado em /usr/ports/devel, após sua consulta,
(3) Verifica também se há patch disponível, sendo passo importante para concluir a ordem da instalação de um programa,
(4) Configura o arquivo de dependências e toda a estrutura coletada da informação de cada programa e começa a compilar apos testar,
(5) Instala!

Esse procedimento é o que basicamente acontece quando o ports esta sendo utilizado para instalar um programa e até remover. A sua lista de programas e estrutura do ports estão disponíveis em /usr/ports e que pode ser atualizada ou obtida pelo mirror ou cvs. Seu esqueleto esta sempre organizado e agrupado por categorias, o que facilita bastante a vida do administrador de sistemas. Como ja mencionei, quando voce usa o ports ele apenas faz uma leitura da URL de onde esta aquele fonte e geralmente se encontra disponível na variável MASTER_SITES do MakeFile e com algumas opções de devel em PORTSCOUT, disponibiliza o download do mesmo e armazena na sua arvore de diretórios. Um destes pontos é o diretório “work” em /usr/ports/*/*/work que é um diretório utilizado pelo ports para manter o source enquanto o mesmo esta no processo de resolução de dependências e ate mesmo compilando, após passar este processo e instalar o programa ele armazena o source completo nos formatos .tar.gz (gzip), .tar.bz2 (bzip2) e tambem em .xz (XZ Utils), mantendo tudo tudo no diretório /usr/ports/distfiles.

Vale lembrar que o pkgng, o novo gerenciador de pacote binario para o FreeBSD armazena seus arquivos TXZ em /var/cache/pkg e no caso tanto do pkgng quanto o ports, seus diretórios /usr/ports e /var/cache/pkg, precisam estar em dia com o “espaço em disco” alocado na instalação para /usr e /var ou nos casos pontos de montagens separados, porque se lotar, vai da ruim. Vale lembrar que a area de trabalho “work” do ports, onde ele armazena o respectivo source para ele trabalhar pode ser limpada sem problemas com o comando portsclean (isso se voce achar ainda ele), com a opção -C ou –workclean para limpar o conteudo do diretorio work, -D ou  –distclean para limpar o distfiles logo apos, como ja mencionei. Basta um postsclean -CDD ou apenas um make clean no diretório da aplicacao do ports que voce acabou de instalar. É claro que voce pode fazer as duas coisas ao mesmo tempo, ou seja, instalar e limpar. ;)

O ports, como ja mencionei possui as mesmas caracteristas de um gerenciamento de pacotes e por isso existem alguns procedimentos que voce precisa seguir. Como após a realizar a atualização da sua arvore do ports pelo cvsup é interssante atualizar o INDEX-* de todo o seu catologo, ate se voce depende de realizar uma simples consulta com o make search key. Uma simples consulta na arvore do ports por uma palavra-chave como gcc, rsync, gnome ou vim, o sistema realiza então uma busca em algumas entradas como: “Port” que contem o nome do programa, “Path” que é o local aonde ele esta catalogado na arvore do ports, “Info” que informa alguma breve descrição do pacote (adendo: eu disse uma breve e não o que você esta acostumado em ver no dpkg e rpm), “Maint”que é geralmente o nome e o email do mantenedor, “index” que é o local que ele esta indexado na arvore do ports e é inclusive o que o “make index” e o “make fetchindex” para atualizar e indexar com base nos indices do repositório. Para finalizar o “*deps” que trata todas as dependências da arvore para aquele source e “Archs” que informa a arquitetura deste source a ser compilada no ports. Geralmente “any” para todas.

A respeito da atualização do ports e de toda a sua arvore é possível que seja realizado pelo cvsup ou csup, Lembrando que existem ferramentas que não fazem parte do sistema “default” como o portsdb que é parte do portupgrade. O recomendado para atualização da coleção e/ou arvore do ports é utilizar o portsnap para realizar um “extract” e depois um “update”.

Para atualizar o ports e permitir que voce consiga consultar a sua arvore, execute: “portsnap fetch extract” e depois o comando “portsnap fetch update”. Lembrando que existem várias maneiras de voce atualizar o ports, escolha qual voce quiser.

Neste processo o comando fetch do portsnap armazena toda a estrutura da arvore compactada como snapshot em /var/db/portsnap, onde o snap armazena toda a indexação no arquivo INDEX e separa em “categoria/programa/hash” e o extract envia para o /usr/ports, que é o processo mais importante da primeira instalação da arvore do ports. Apos concluir o portsnap é importante atualizar por definitivo o /usr/ports com as opções fetch update, se for necessário (ou fetch primeiro e update depois). Lembrando que a configuração para todos os INDEX e do proprio snap estão em /etc/portsnap.conf. Vale a pena da uma conferida nas opções.

E pelo subversion? Um dos outros metodos de atualização que eu usava muito no passado era via subversion onde bastava instalar o seu ports em /usr/ports/devel/subversion ou pelo pkgng, fazer um svn checkout em svn.FreeBSD.org/ports/head para /usr/ports e depois atualizar com svn update /usr/ports. Mas eu ainda prefiro o método do portsnap.

Após a atualização voce esta pronto para realizar uma consulta como “make search key=vim-lite” dentro da estrutura do ports, ja que todas as variaveis apontam para o seu diretório principal. Neste caso, ele busca pela string vim dentro da estrutura do ports e te fornece o caminho, o local no catalogo onde voce deve entrar para iniciar a instalação ou a remoção do que voce esta procurando.

Segue o resultado:

Port: vim-lite-7.4.1030
Path: /usr/ports/editors/vim-lite
Info: Improved version of the vi editor (lite package)
Maint: sunpoet@FreeBSD.org
B-deps: pkgconf-0.9.12_1
R-deps:
WWW: http://www.vim.org/
Observação importante, se voce usa o vim nem tente instalar o vim-lite ok? Conflita!

Outro exemplo com o zsh

Port: zsh-5.2_1
Path: /usr/ports/shells/zsh
Info: The Z shell
Maint: adamw@FreeBSD.org
B-deps:
R-deps:
WWW: http://www.zsh.org/

Para instalar um ports, basta entrar no diretório correspondente da sua arvore como o exemplo acima do zsh em /usr/ports/shells/zsh e digitar make install. Voce pode adicionar o clean tambem ao parametro do make para que após a resolução do download do source, compilação ele também apague o diretorio work. Note o que ele vai fazer:

===>  License ZSH accepted by the user
===>  Found saved configuration for zsh-5.2_1
===>   zsh-5.2_1 depends on file: /usr/local/sbin/pkg – found
=> zsh-5.2.tar.xz doesn’t seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch http://www.zsh.org/pub/zsh-5.2.tar.xz
zsh-5.2.tar.xz         9% of 2754 kB   34 kBps 00m54s
(continua)

Para remover voce pode usar o make uninstall, para reinstalar todo o processo do source novamente com make reinstall.

O ports sem duvida é um dos melhores ferramentas de fácil entendimento para a instalação de um programa, assim como gosto muito do pkgsrc. Outra forma de instalar pacotes no FreeBSD é através do novo (o novo ja velinho) pkgng que é a nova geração de gerenciamento de pacote que substitui o tradicional bom e velho “FreeBSD package management tools / pkg_install”. Mas no caso os pacotes são pre-compilados e são facilmente gerenciados pela propria ferramenta.

mas isso deixa para depois.

[  ],
Aprigio

Powered by Moblie Video for WordPress + Daniel Watrous