Post em Destaque

Quando serviços ficam caindo… o que fazer até a solução chegar?

Serviços rodando não deveriam cair simplesmente do nada. Muitos deles informam a causa em seus logs ou tentam pelo menos dar uma dica do problema. Pode estar relacionado muitas das vezes com problemas de memória como os segfaults (signal 11) mas as vezes os segfaults podem indicar um bug na aplicação...

Leia mais...

Gerenciando seus pacotes no FreeBSD com o portmaster

Postado por gondim | Categoria Dicas, FreeBSD, Software Livre | Dia 18-05-2012

Tags:, ,

12

Uma coisa que sempre foi complicada quando trabalhamos com pacotes compilados, é a famosa dependência. Quando instalamos uma aplicação pelo ports, o mesmo se encarrega de baixar, compilar e instalar todas as dependências que aquela aplicação necessita. Dependendo da aplicação e dependência ainda podem aparecer janelas de configurações de opções de compilação para aquele determinado pacote e aí dependendo das marcações, mais dependências poderão surgir no contexto. Até aqui tudo bem, o problema maior é quando você precisa atualizar uma lib ou aplicação que envolverá atualizar outras aplicações da sua dependência. Para você ter uma idéia do que estou dizendo vou pegar como exemplo a libpcre e usar o comando “pkg_info -R” para mostrar quais pacotes dependem dele:

# pkg_info -R pcre-8.30_2
Information for pcre-8.30_2:

Required by:
ap22-mod_auth_mysql_another-3.0.0_4
ap22-mod_wsgi-2.8_2
apache-2.2.22_5
pecl-APC-3.1.9_1
pecl-intl-1.1.2_3
pecl-pdflib-2.1.8_1
phpMyAdmin-3.4.10.2
postfixadmin-2.3.5
roundcube-0.7,1
php5-5.3.13
php5-zip-5.3.13
php5-zlib-5.3.13
php5-mbstring-5.3.13
php5-gettext-5.3.13
php5-mysqli-5.3.13
php5-gd-5.3.13
php5-imap-5.3.13
php5-xml-5.3.13
php5-openssl-5.3.13
php5-session-5.3.13
php5-iconv-5.3.13
php5-pspell-5.3.13
php5-dom-5.3.13
php5-sqlite-5.3.13
php5-json-5.3.13
php5-ldap-5.3.13
php5-hash-5.3.13
php5-ctype-5.3.13
php5-bz2-5.3.13
php5-mysql-5.3.13
php5-xmlrpc-5.3.13
php5-filter-5.3.13
php5-mcrypt-5.3.13
postfix-2.8.10,1

Isso quer dizer que se eu atualizar essa lib, terei que recompilar todos esses pacotes que dependem dela. Imagine o trabalho e agora imagine ter que fazer isso em mais de um servidor. Uns 2 anos atrás isso me assombrou pois na época tentei usar o portupgrade e não me adaptei muito bem. Foi quando conheci o portmaster e realmente fiquei maravilhado com essa ferramenta fabulosa escrita em shell script por Douglas Barton.

Para usarmos o portmaster precisamos primeiramente instala-lo:

# cd /usr/ports/ports-mgmt/portmaster

# make install clean

# rehash <- se tiver usando csh

O man portmaster pode lhe apresentar todas as opções disponíveis e por isso vou mostrar apenas algumas básicas aqui:

Instalando um pacote:

# portmaster lang/php5-extensions   <- esse comando fará a instalação do PHP5 e as extensões que você selecionar para ele.

Excluir um pacote:

# portmaster -e php5-bz2-5.3.13   <- nesse caso estou querendo excluir esse pacote php5-bz2

Substituir uma versão de pacote já instalada por outra:

# portmaster -o /usr/ports/mail/postfix28 postfix-2.7.8_1,1   <- nesse exemplo estou substituindo o postfix 2.7 que já está instalado no meu sistema, pelo postfix 2.8. Repare que o parâmetro “-o” especifica o local onde se encontra o novo pacote que será colocado no lugar do anterior.

Atualizar e recompilar todos os pacotes instalados:

# portmaster -a -f   <- quando você quiser atualizar e recompilar todos os pacotes instalados no seu sistema. Dependendo da quantidade de pacotes isso poderá demorar um bocado.

Atualizar um pacote e todas as suas dependências e ainda apagando os distfiles:

# portmaster -d -Rf databases/rrdtool    <- nesse caso vai atualizar e recompilar o pacote rrdtool e todas as suas depências. O “-d” vai dizer para o portmaster apagar os distfiles.

Para excluir um pacote da atualização:

# portmaster -a -f -x roundcube   <- aqui vou atualizar todos os pacotes exceto o pacote roundcube

Bem é isso pessoal. Mais detalhes estudem o man do portmaster.

Ah! Não esqueçam de fazer um “portsnap fetch update” antes de usar o portmaster.  🙂

Share Button

Comments (12)

Tinha que ser logo o libpcre ??? 3 dias de dor de cabea até consertar com uma “pequena” grande ajuda de Marcelo Gondim.

Very descriptive blog, I enjoyed that a lot.
Will there be a part 2?

Thanks!!! 🙂
Maybe, who knows? 😀

Boa noite Gondim,

Após um erro instalando o xfce4 pelo portmaster (marquei muitas opções e provavelmente deu algum erro de incompatibilidade), eu executei o comando “portmaster –force-config” para reconfigurar tudo novamente.
Acontece que ele entra na GUI de configuração já com todas as opções que eu havia marcado anteriormente.
Ou seja, eu fiz uma zona só e agora ele sempre aparece com tudo o que eu marquei.

Tem como eu rodar o portmaster para instalar o XFCE4 novamente com as opções padrão?

Obrigado

Tem sim, você pode ir no diretório do port xfce4 e de lá fazer:

# make rmconfig-recursive

Ele vai voltar todas as confs recursivamente para o padrão.

[]’s
Gondim

Bom dia Gomdin,

Eu cheguei a pensar nisso.
Mas fiquei na dúvida.
Como todos os pacotes instalados depois da instalação básica foram via portmaster (inclusive o Xorg), eu não teria problemas instalando o xfce4 pelo método do “make rm-config-recursive” ao invés de usar o portmaster?

obrigado

Teria não porque o portmaster usa essas confs dos pacotes, ele não cria uma base própria delas. 🙂

I am in fact delighted to glance at this web site posts which includes tons of valuable information,
thanks for providing these information.

Bom dia Gondim,

Estou procurando na documentação uma forma de desinstalar o Xorg que instalei da seguinte forma:

cd /usr/ports && portmaster /x11/xorg

Quando tento desinstalar com o comando: “portmaster -e /x11/xorg” eu não tenho sucesso.
Como faria para desinstalar o xorg e todas as dependencias instaladas com ela anteriormente?

Obrigado pela ajuda.

Ricardo Moscou

Boa tarde Ricardo,

Faz o seguinte: checa se você já tem atualizado o pkg, senão faz primeiro um portmaster -d pkg. Aí depois você pode fazer o seguinte:

# pkg delete xorg

Aí com o pkg mais recente ele vai desinstalar o xorg e todas as suas dependências. 🙂

Boa noite Gondim,

Desculpa pela demora em responder os testes.

Vou responder aqui as suas dicas:

1) Faz o seguinte: checa se você já tem atualizado o pkg, senão faz primeiro um portmaster -d pkg. Aí depois você pode fazer o seguinte.

Resposta: Eu instalei o Release 10 e depois fiz um freebsd-update install passando a ter o “10.0-RELEASE-p7”.
Logo após o update, eu pensei o seguinte: Estou instalando a versão 10 do FreeBSD. Pelo que sei, a partir desta versão, ele trabalha automaticamente com o pkg no lugar do pkg_add.
Sendo assim, eu não preciso rodar o comando “portmaster -d” como você Gondim recomendou.

Pensando desta forma, eu partir para o “pkg delete xorg”.
Tive algumas mensagens de sucesso, mas quando rodo em seguida o portmaster x11/xorg os mesmos erros acontecem.

Me parece que existe algum arquivo (oculto ou não) que fica fora do diretório /usr/ports/x11/xorg que guarda as opções que marquei durante o processo de compilação.
Digo isso porque se executo novamente o portmaster, mesmo com a opção –force-config para definir novamente o que vai ser incluído, os mesmos erros aparecem.

Vou sentar e ler um pouco mais a forma como funciona a estrutura do ports e os seus diretórios.
Acho que estou entendendo muito mal e devo estar me confundindo com muitos conceitos de o que fica em que dentro de cada diretório do ports e dos que ficam em /var/db/pkg e /var/db/ports.

De qualquer forma eu agradeço a boa vontade se sempre Gondim.
Forte abraço.

Att,

Ricardo Moscou

Ola Ricardo,

Isso pode se tornar realmente um pouco confuso. Existem 3 maneiras de se instalar uma aplicação no FreeBSD:

1ª instalando um pacote binário que nesse caso usamos o pkg. O pacote binário normalmente é a mesma versão que se encontra no ports mas as options de compilação são definidas pelo empacotador. Você até pode consultar as options de um pacote antes mesmo de instalar ele fazendo. Exemplo:pkg search -f xorg-apps.

2ª instalando pelo ports, nesse caso usando o portmaster, você vai poder baixar, compilar e instalar o pacote com as options de que desejar. No final será gerado um pacote binário igual ao baixado pelo pkg mas com as suas definições. Esse pacote será registrado da mesma forma que baixando o binário direto.

3ª baixando os fontes de um programa, compilando e instalando você mesmo. Nesse caso não será gerado um pacote binário e nem registrado no sistema. Será de seu controle mantê-lo atualizado e seguro.

Quando coloquei pra você fazer o portmaster -d pkg, não sabia que você já havia atualizado o sistema e provavelmente você já deva estar usando a versão 1.3.6 que lida muito melhor com as dependências que versões < 1.3. Tenta colar aqui os erros ou envia pro meu e-mail gondim at bsdinfo.com.br para eu ter uma ideia do que está acontecendo.

Write a comment

*