Como encontrar e instalar pacotes de softwares para FreeBSD com o pkg

A lista de aplicações disponíveis para FreeBSD cresce a cada dia.
Tal como em outros sistemas operacionais Unix-like, há várias maneiras de encontrar e instalar os pacotes de softwares que você precisa.
O FreeBSD, a exemplo de várias distribuições GNU/Linux, também seus sistemas de gestão de pacotes.

Como buscar os softwares disponíveis no repositório do FreeBSD

Se quiser fazer a busca por pacotes de softwares binários, dentro do repositório oficial, use o utilitário pkg.
Veja um exemplo:

pkg search tetris

Segue a relação de pacotes que contenham, em sua descrição, a string ‘tetris’:

patapizza-tetris-1.0_6         Unofficial clone of the original Tetris game
vitetris-0.57                  Terminal-based Tetris clone in vein of Nintendo Tetris

Na primeira coluna, vem o nome e a versão do pacote. Na segunda coluna, uma breve descrição.
Para obter a informação sobre a categoria a que cada pacote pertence, use a opção -o:

pkg search -o tetris 

Neste caso, todos os pacotes pertencem a categoria (origem) ‘jogos’ e a versão de cada um não será exibida na primeira coluna:

games/patapizza-tetris         Unofficial clone of the original Tetris game
games/vitetris                 Terminal-based Tetris clone in vein of Nintendo Tetris

Ao usar o ‘search’ simples, o gestor de pacotes pode oferecer informações sobre a versão da linguagem de programação (Python, PHP, Ruby, C etc.) sobre a qual aquele pacote foi construído.
No exemplo, abaixo:

pkg search subversion 
git-subversion-2.9.2           Distributed source code management tool with FreeBSD subversion bindings
java-subversion-1.9.4          Java bindings for Version control system
p5-subversion-1.9.4            Perl bindings for Version control system
py27-hgsubversion-1.8.6        Mercurial extension that allows using it as a Subversion client
py27-subversion-1.9.4          Python bindings for version control system
ruby-subversion-1.9.4          Ruby bindings for version control system

Recomendo usar o comando grep para filtrar resultados muito extensos e obter apenas o que necessita:

pkg search mp3 | grep player 
ksmp3play-0.5.2.1_4            Curses-based MP3 player
mp3blaster-3.2.5_5             MP3 console ncurses-based player
ximp3-0.1.15                   Simple console MP3 player

Conteúdo relacionado pelo Google

Alternativas ao systemd

O systemd é mais um sistema init disponível para sistemas operacionais GNU/LINUX.
Diferente de outros, este é exclusivo de sistemas operacionais Unix-like que usam o kernel Linux.
Se você clicar na tag systemd, vai encontrar vários posts, neste site, sobre o assunto — inclusive um que fala muito mal dele (que coisa feia, Elias…) 😉
ssytemd emot carrousel
Neste texto, vamos abordar o conceito do init system, quais são as opções deste tipo de software e, por fim, conhecer algumas distribuições Linux que usam alternativas ao systemd — não vai dar pra falar de todas, por que são mais de 70.

O que é um init system

Em sistemas operacionais Unix-like, o init é o primeiro processo iniciado, durante a inicialização do sistema.
Init é abreviatura da palavra initialization.
É o ancestral direto ou indireto de todos os processos rodando no seu sistema, neste momento.
Ele adota todos os processos órfãos automaticamente.
O init é iniciado pelo kernel usando nome de arquivo hard-coded.
A principal causa do kernel panic é quando o init não pode ser carregado. Ele é tipicamente identificado como o PID 1.
O systemd é mais do que apenas um sistema init. Enquanto uns avaliam este fato como uma evolução do conceito, outras apontam nele um de seus maiores defeitos.

Alternativas ao systemd

Várias alternativas ao systemd estão disponíveis para uso da comunidade.
Segue uma relação (atual e relevante) de init systems, para Linux:

  • Bootscripts — comumente usado no GoboLinux
  • Initng — é um substituto atual para o UNIX System V init e para o Sysvinit (usado no Linux), escrito em C e lançado em 2005.
    Nas implementações tradicionais do init, processos são iniciados em ordem pre-determinada. Além disto, um processo só será iniciado, depois que o anterior estiver finalizado.
    O Initng inicia processos assim que suas dependências forem satisfeitas. Foi projetado para iniciar vários processos em paralelo e melhorar a velocidade de boot dos sistemas.
  • runit — Esquema init com supervisão de serviços. Concebido como substituto do SysVinit e outros projetos.
  • minit — Um init mínimo com supervisão de processos, ordenação de dependências de serviços, ativação de serviços paralelos etc.

Você vai encontrar mais itens na página do Wikipedia — fique atento para o fato de que alguns projetos estão mortos.

Distribuições Linux que usam outros init systems

Como disse, no começo, são muitas dezenas de opções. E ter opções, no mundo do software livre é importante.
Não vai dar para citar todas, contudo sugiro visitar o site without-systemd para ver uma relação mais completa.
O Distrowatch também tem uma relação de distribuições Linux que não usam o systemd.
Na lista, abaixo, separei uma relação de distribuições livres do systemd, que se destacam por diversos motivos:

  1. FreeBSD, OpenBSD etc — Os BSD não são Linux e não existe compatibilidade entre o systemd e estas distros — embora seja possível usá-los com o kernel Linux.
    O site tem vários posts sobre BSD, caso você se interesse.
  2. Slackware — no momento, a distro não aderiu ao systemd, mas não existe nenhum comprometimento do Patrick Volkerding no sentido de se manter distante deste sistema. Para quem gosta do Slackware, vale experimentar o Porteus — http://www.porteus.org/.
    Este projeto tem o comprometimento de seguir sem o systemd.
  3. Devuan — este é o projeto Debian, tocado por ex-integrantes que não concordaram com a mudança para o systemd. Veja mais no site http://devuan.org. Experimente também o Finnix, o Overclockix, o Trios, o Debian GNU/Hurd e o Debian KFreeBSD. Estes 2 últimos são opções para puristas e vale a pena conhecer.
  4. Tails — este é um projeto derivado do Debian e voltado para oferecer mais criptografia e segurança, com mais conforto para o usuário.
    Temos alguns textos, no site, mencionando este projeto.
  5. UbuntuBSD — como o nome indica, é baseado no Ubuntu e usa o núcleo do FreeBSD. Em vez do Unity, usa o ambiente gráfico XFCE. Também é uma opção interessante. Dá uma olhada no site oficial da distro: https://www.ubuntubsd.org/.
  6. Alpine Linux — Distro independente, de propósito genérico e projetada para power users.
    usea OpenRC como init systemhttp://www.alpinelinux.org/.
  7. Gentoo — Uma das distribuições mais conhecidas, que não se rendeu ao systemd — https://www.gentoo.org/.
  8. ReactOS — Tal como o Gentoo, trata-se de uma distro Linux, já estabelecida e com uma comunidade formada ao seu redor — https://www.reactos.org/.

Conhece alguma outra distro livre do systemd, que você gostaria de recomendar? Escreva nos comentários!

Referências

https://en.wikipedia.org/wiki/Init.
https://distrowatch.com/search.php?pkg=systemd&distrorange=NotInLatest#pkgsearch.
http://without-systemd.org/wiki/index.php/Main_Page#GNU.2FLinux_distributions.

Conteúdo relacionado pelo Google

Aprenda a usar o comando getfacl do Linux

O comando getfacl é um dos comandos padrão do Linux e serve para obter uma lista do controle de acesso de qualquer arquivo no seu sistema.
O utilitário está presente também no FreeBSD e, para cada arquivo, o getfacl exibe uma quantidade de informações a respeito dele.
De acordo com a documentação, ele relaciona os seguintes dados sobre um arquivo:

  • nome do arquivo
  • nome do usuário que é dono dele
  • nome do grupo a que ele pertence
  • informações sobre permissões

Vamos ver um exemplo, para clarear o assunto:

getfacl /etc/machine-info 
getfacl: Removing leading '/' from absolute path names
# file: etc/machine-info
# owner: root
# group: root
user::rw-
group::r--
other::r--

O resultado do comando, acima, mostra uma mensagem informativa de que ele removeu o primeiro ‘/’ do nome do arquivo — para facilitar a compreensão.
Em seguida, ele mostra o nome do arquivo, seguido pelo usuário e grupo a que ele pertence.
As 3 últimas linhas mostram o ACL (Access Control List), ou seja, a “lista de controle de acesso” — o que cada um (usuário, grupo e outros) pode fazer com o arquivo: (r)ead (ler) e (w)rite (escrever).
No caso do exemplo, o superusuário é o único que pode alterar o arquivo. Os outros podem apenas ler.
Se o getfacl for usado contra um sistema de arquivos que não suporta ACLs, ele exibe as permissões de acesso definidas no modo tradicional de bits de permissão.

Exemplos de uso do getfacl

É possível rodar o programa contra vários arquivos, de uma vez só, usando curingas:

getfacl Documentos/Unigine_Valley_Benchmark_1.0_20160825_14*
_
# file: Documentos/Unigine_Valley_Benchmark_1.0_20160825_1402.html
# owner: mclane
# group: mclane
user::rw-
group::r--
other::r--

# file: Documentos/Unigine_Valley_Benchmark_1.0_20160825_1414.html
# owner: justincase
# group: justincase
user::rw-
group::r--
other::r--

É possível usar o comando setfacl para ajustar as permissões, bem como atributos de dono, de seus arquivos.
No exemplo acima, observe que o primeiro arquivos pertence ao usuário ‘mclane’.
Vamos dar permissões de leitura e escrita dele ao usuário ‘justincase’. Veja como:

setfacl -m u:justincase:rw- Unigine_Valley_Benchmark_1.0_20160825_1402.html
getfacl Unigine_Valley_Benchmark_1.0_20160825_1402.html 
_

Veja o rsultado, na 5a linha:

# file: Unigine_Valley_Benchmark_1.0_20160825_1402.html
# owner: mclane
# group: mclane
user::rw-
user:justincase:rw-
group::r--
mask::rw-
other::r--

Se você tiver “permissão negada” para ajustar as permissões de um arquivo com o setfacl, execute com privilégios administrativos.

Referências

http://linuxcommand.org/man_pages/getfacl1.html.

Conteúdo relacionado pelo Google

Verifique se há atualizações no FreeBSD com o portmaster

Se você prefere compilar seus softwares a partir do código fonte, usando o sistema de ports, no FreeBSD, uma alternativa atraente é usar o comando portmaster.
Este comando é usado nas tarefas de gestão de software no FreeBSD — para verificar/aplicar atualizações, instalar/remover ports e todas as suas dependências.
Leia mais sobre gestão de pacotes no FreeBSD, com o Portsnap.
Neste post, estou usando exemplos baseados no FreeBSD 10.3 STABLE.
freebsd flat logo bumper badge
Para obter o utilitário portmaster, faça a sua instalação via ports system, se ainda não vez.

Como instalar o portmaster no FreeBSD

Se ainda não tiver o portmaster instalado no sistema, use um destes 2 métodos de instalação.
Para baixar e instalar, via pkg:

sudo pkg install portmaster
Password:
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%    944 B   0.9kB/s    00:01
Fetching packagesite.txz: 100%    6 MiB   1.5MB/s    00:04
Processing entries: 100%
FreeBSD repository update completed. 25560 packages processed.
Updating database digests format: 100%
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):
Installed packages to be UPGRADED:
    pkg: 1.8.7 -> 1.8.7_1
Number of packages to be upgraded: 1
    2 MiB to be downloaded.

Proceed with this action? [y/N]: 

… ou compile a ferramenta, a partir dos fontes. Para isto, vá até o diretório do pacote, na árvore de ports e instale-o com o make:


cd /usr/ports/ports-mgmt/portmaster/ 
sudo make install clean 

freebsd make install clean
Especificamente sobre este processo, o sistema poderá perguntar se você deseja instalar extensões programáveis para uma ou mais shells. Eu optei por não e as desmarquei (figura acima).
É possível ver mensagem sobre adicionar informações ao /etc/make.conf e converter seu banco de dados de pacotes (package database) — o que não é necessário nas versões do FreeBSD 10.1 ou superiores.

Como atualizar o sistema com o portmaster

Uma vez instalado o portmaster, verfique se há atualizações disponíveis:

portmaster -L

Como você pode ver, no exemplo acima, não é necessário ter privilégios administrativos para fazer este procedimento.
O meu resultado (parcial, abaixo), mostra que há 47 atualizações pendentes:

===>>> 47 total installed ports
       ===>>> 2 have new versions available

O portmaster examina todos os softwares instalados no seu sistema e o compara com o arquivo de índice, a procura de novas versões disponíveis.
Funciona como o comando pkg e independe do fato de os softwares terem sido instalados via package ou ports.
No que tange as dependências, ele os categoriza e determina como estão conectados entre si.
Repare a saída (acima) do comando. Todos os que tenham atualização disponível, terão uma linha indentada, em destaque (exemplo abaixo):

===>>> pt-freebsd-doc-48963,1
       ===>>> New version available: pt-freebsd-doc-49071,1

Novamente, você pode optar por um destes 2 métodos de atualização: packages ou portmaster.
Se optar por fazer a atualização através do primeiro, use novamente o comando pkg:

sudo pkg upgrade 
Password: 
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
          pkg: 1.8.7 -> 1.8.7_1

Number of packages to be upgraded: 1

          2 MiB to be downloaded.

Proceed with this action? [y/N]:  

Se você prefere o segundo método, para atualizar todos os ports que necessitam de atualização, use a seguinte opção:

portmaster -aD

Para remover os distfiles velhos, use ‘–clean-distfiles’:

portmaster --clean-distfiles

Fique atento, pois este processo pode pedir sua intervenção algumas ou várias vezes, até ser concluído.

Conteúdo relacionado pelo Google

Como descobrir a versão do FreeBSD?

Quando você precisa fornecer informações sobre o software instalado, para obter ajuda ou saber se um determinado tutorial vai servir ou não, conhecer a versão do FreeBSD e o kernel instalado, pode ser muito útil.
Veja, aqui, algumas maneiras de obter estas informações.
O comando freebsd-version procura determinar a versão e o patch level do sistema instalado.
Pode ser executado “puro” ou acompanhado das opções ‘-k’ ou ‘-u’. Veja o exemplo:

freebsd-version 
10.3-STABLE

A opção ‘-k’ exibe a versão e o patch level do kernel instalado.
Diferente do uname, que iremos abordar mais a frente, se alguma versão mais nova do kernel tiver sido instalada, o freebsd-version vai imprimir a versão do novo kernel e não do atual, mesmo que você ainda não tenha reiniciado a máquina.
A opção ‘-u’ exibe a versão e o patch level do userland instalado.


O comando uname vai exibir um conjunto maior de informações, que inclui a versão do kernel instalado e a arquitetura da máquina.
No exemplo, abaixo, o comando exibe todas as informações que ele consegue obter do sistema:

uname -a 
FreeBSD brain 10.3-STABLE FreeBSD 10.3-STABLE #0 r300060: Tue May 17 19:23:37 UT
C 2016
root@releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64

Você pode obter apenas a versão do FreeBSD, com o comando uname, assim:

uname -rs 
FreeBSD 10.3-STABLE

Veja um conjunto de exemplos:

# exibe o kernel ident 
uname -i 
GENERIC

# mostra a versão do kernel do FreeBSD
uname -K 
1003502

# exibe o tipo de arquitetura da plataforma em que está sendo executado
uname -m 
amd64

# mostra o nome dado a este sistema
uname -n 
brain

# faz o mesmo que -s, para manter a compatibilidade com outros sistemas
uname -o 
FreeBSD

# exibe o tipo de arquitetura do processador atual
uname -p 
amd64

# exibe a versão atual do sistema operacional
uname -r 
10.3-STABLE

# exibe o nome do sistema operacional instalado
uname -s 
FreeBSD

# mostra a versão do FreeBSD dentro do ambiente de usuário
uname -U 
1003502

# mostra o nível de versão do sistema operacional
uname -v
FreeBSD 10.3-STABLE #0 r300060: Tue May 17 19:23:37 UTC 2016     root@releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC

Você pode obter informações sobre a arquitetura do sistema com o getconf:

getconf LONG_BIT 
64

Por fim, é possível saber mais sobre o processador do sistema de hardware, com o comando sysctl. Veja um exemplo:

sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu' 
hw.machine: amd64
hw.model: AMD Phenom(tm) 9550 Quad-Core Processor
hw.ncpu: 1
hw.machine_arch: amd64

Referências

http://serverfault.com/questions/593318/where-does-uname-get-version-number-in-freebsd-release.

Conteúdo relacionado pelo Google