Tenha mais controle do seu ports com o subversion
Posted by gondim | Posted in Dicas, FreeBSD | Posted on 04-01-2013
Tags:portsnap, subversion, svn
0
A vida é uma constante adaptação, seja no trabalho, em casa, com os amigos, nos eventos e fóruns… Estamos sempre presenciando coisas novas e tendo que nos adaptar à elas porque senão ficamos parados no tempo e espaço. 🙂
Usar o ports com subversion é uma dessas mudanças e que embora não tão recente, nos permite ter um controle maior dos pacotes e nos salvar em momentos difíceis.
Primeiramente alguns devem se perguntar: por que usar o ports? por que não usar os binários pré-compilados?
Você pode usá-los mas eu usaria eles em coisas simples que não me exigissem suportes específicos. Por exemplo: eu usaria um pkg_add -r bash para instalar o bash mas não faria isso para instalar um apache. Por que? Porque existem várias opções de compilação em determinados pacotes que você pode querer retirar ou colocar, que pode melhorar ou piorar a performance ou até mesmo ser mais suscetível à falhas de segurança. Sem falar que um pacote binário poderia vir faltando algo em sua compilação que você necessitaria usar. Outra coisa que não combina são usar pacotes pré-compilados com pacotes compilados do ports. Ou você opta por um ou pelo outro mas não use ou tente usar os 2 porque não vai ficar legal, à não ser que sejam pacotes pré-complilados simples como é o caso do bash. Um exemplo ruim de mistura seria instalar todo um ambiente de desktop por pacotes e depois querer usar o ports para atualizar as coisas. São coisas assim que me fazem usar apenas o ports.
Existem 2 formas de se ter o ports e mantê-lo atualizado:
- Usando o programa portsnap.
- Fazendo uso do svn (subversion).
O portsnap é a maneira mais básica e simples de se ter o ports e mantê-lo atualizado, contudo você não consegue fazer coisas como voltar um port de uma determinada versão anterior porque a atual apresentou um problema. Você fica preso sempre na versão mais atual.
O subversion já te permite fazer tudo que o portsnap não faz e mais um pouco. 🙂 Eu posso por exemplo dizer que quero um pacote de um release do svn mais antigo e com isso uma versão daquele programa mais antigo que estou precisando. Nós veremos mais adiante um exemplo.
Para usarmos o ports pelo subversion precisaremos zerar o /usr/ports e fazer o seguinte uma vez apenas. Estou levando em consideração que você já tem o devel/subversion já instalado:
# svn co svn://svn.freebsd.org/ports/head /usr/ports
Nesse momento se a sua Internet não for das mais rápidas, sugiro você fazer uma pipoca e assistir um bom filme enquanto o download é feito. São aproximadamente quase 1Gb. 🙂 Tudo abaixo você deverá fazer dentro de /usr/ports:
Após isso vamos baixar o arquivo INDEX-9 para que possamos fazer buscas com o make search e ele não vem no svn:
# make fetchindex
Para manter o seu ports atualizado basta fazer:
# svn up
Para ver informações como revisão do seu ports:
# svn info
Path: .
Working Copy Root Path: /usr/ports
URL: svn://svn.freebsd.org/ports/head
Repository Root: svn://svn.freebsd.org/ports
Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Revision: 309926
Node Kind: directory
Schedule: normal
Last Changed Author: rm
Last Changed Rev: 309926
Last Changed Date: 2013-01-04 09:14:36 -0200 (Fri, 04 Jan 2013)
Agora vamos pegar um exemplo com o programa nmap. Vamos ver a revisão dele especificamente:
# svn info /usr/ports/security/nmap
Path: security/nmap
Working Copy Root Path: /usr/ports
URL: svn://svn.freebsd.org/ports/head/security/nmap
Repository Root: svn://svn.freebsd.org/ports
Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Revision: 309926
Node Kind: directory
Schedule: normal
Last Changed Author: mm
Last Changed Rev: 308630
Last Changed Date: 2012-12-10 17:11:11 -0200 (Mon, 10 Dec 2012)
Percebemos que a revisão dele ainda é a mais atual do ports, 309926. Vamos olhar qual versão de arquivo ele vai baixar:
# cat /usr/ports/security/nmap/distinfo
SHA256 (nmap-6.01.tar.bz2) = 77f6635b677d28b546cbef97e4ead6c2d4a5aebcaa108fe3a3c135db6448617a
SIZE (nmap-6.01.tar.bz2) = 21640157
Percebemos que vai ser usado a versão 6.01 se eu for instalar esse pacote. Vamos dizer que eu queira uma versão bem mais antiga, por algum motivo. Nesse caso vou ter mudar a revisão desse port em específico para algo muito mais antigo. Então vamos fazer o seguinte:
# svn up -r200000 /usr/ports/security/nmap
Updating ‘security/nmap’:
A security/nmap/pkg-descr.fe
UU security/nmap/pkg-plist
UU security/nmap/Makefile
UU security/nmap/distinfo
UU security/nmap/pkg-descr
D security/nmap/files/patch-libnetutil__netutil.cc
D security/nmap/files/patch-libdnet-stripped__configure
D security/nmap/files/patch-nmap.cc
A security/nmap/files/patch-nmapfe::Makefile.in
A security/nmap/files/patch-nbase::configure
UU security/nmap/files/patch-configure
UU security/nmap/files/patch-Makefile.in
UU security/nmap/files/patch-tcpip.cc
A security/nmap/files/patch-nmapfe::nmapfe_sig.c
UU security/nmap/files/patch-output.cc
UU security/nmap/files/patch-libdnet-stripped__src__eth-bsd.c
A security/nmap/pkg-plist.fe
Updated to revision 200000.
Nesse momento mudei a revisão apenas do nmap para 200000. Vamos olhar novamente o distinfo?
# cat /usr/ports/security/nmap/distinfo
MD5 (nmap-4.20.tar.bz2) = ea50419f99472200c4184a304e3831ea
SHA256 (nmap-4.20.tar.bz2) = c923a6cfa6d3683dc7ee27a721c19d15fd66f264f8ca6dbc9cfac710591f32a8
SIZE (nmap-4.20.tar.bz2) = 2156077
Opa! Agora se eu for instalar o nmap, será a versão 4.20!
Para voltar ao normal as revisões alteradas basta fazer novamente: svn up e todos estarão novamente na revisão mais atual.
É isso pessoal, espero que esse post tenha sido útil e mais uma vez demonstrar o quanto é simples usar FreeBSD e o ports.
Qualquer outra dúvida sobre subversion estudem ele, porque é bem legal. Mais pode ser lido aqui.