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.

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.

Como instalar e configurar o sudo no FreeBSD

Novos usuários do FreeBSD, recém chegados de distribuições GNU/Linux, como Debian ou Ubuntu, sentirão falta de realizar tarefas administrativas triviais, sem a necessidade de ter que se autenticar como root, o tempo inteiro.
O sudo permite instalar um programa “rapidinho” e seguir usando o sistema como usuário normal e em segurança.
Algumas instalações padrão do FreeBSD podem não vir com o sudo pronto para usar.
Se você já configurou o Ports no seu sistema, siga o procedimento descrito abaixo:

login root
cd /usr/ports/security/sudo
make install clean

Depois de finalizado, será necessário apenas configurar o sudo.
No FreeBSD, o arquivo de configuração do utilitário fica em /usr/local/etc/sudoers.
Para editá-lo, é necessário usar o comando visudo.
Se você não sabe como deve configurar o sudo, leia este post.
Em seguida, faça logout do usuário root e teste o sudo:

exit
sudo ls 
             
            We trust you have received the usual lecture from the local System
            Administrator. It usually boils down to these three things:

                #1) Respect the privacy of others.
                #2) Think before you type.
                #3) With great power comes great responsibility.

            Password: 
            .cshrc          .login_conf     .mailrc         .rhosts         .ssh
            .login          .mail_aliases   .profile        .shrc
            $  

Como instalar aplicativos do Ports Collection no FreeBSD

O sistema operacional FreeBSD, provê o Ports Collection como recurso simplificador da instalação de aplicativos no seu sistema.
Cada port contém todo e qualquer patch necessário para permitir que o código fonte original do software seja compilado — e o binário resultante possa ser executado.
Normalmente, o Ports Collection é selecionado para download, já durante a instalação do sistema. Se isto não foi feito, você terá um diretório /usr/ports vazio.

Como trazer o Ports Collection

Antes de poder usar o recurso, é necessário obter a coleção e guardá-la no diretório /usr/ports.
O comando portsnap, do FreeBSD, automatiza o processo para você — baixando, instalando e, quando necessário, sincronizando o Ports Collection da internet.
Use o ‘fetch’, para pegar “a coleção”:

portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... none found.
Fetching snapshot tag from portsnap.FreeBSD.org... done.
Fetching snapshot metadata... done.
Updating from Wed Jul 20 15:21:53 BRT 2016 to Wed Jul 20 16:36:14 BRT 2016.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 5 patches.
(5/5) 100.00%  done.
done.
Applying patches...
done.
Fetching 0 new ports or files... done.

A função deste comando é baixar um snapshot, ou imagem, da árvore de ports ou atualizar o que já existe.
Depois do download/sincronização, é hora de extrair a árvore de ports, colocando cada arquivo em seu lugar.
Note que o comando que segue (extract) só deve ser usado na primeira vez em que você for instalar os Ports Collection em seu sistema — uma vez que ele irá sobrepor todo o conteúdo do /usr/ports e seus subdiretórios.

portsnap extract

O processo pode ser um pouco demorado, a depender da sua conexão.
Se o diretório /usr/ports não estiver vazio, o comando ‘update’ deverá ser usado no lugar do ‘extract’.
Daqui pra frente, em resumo, não use mais o ‘extract’.
O comando ‘update’ pode ser usado para atualizar a árvore de ports previamente extraída.
É necessário rodar este comando para aplicar as mudanças feitas aos ports, após os downloads de atualizações através do ‘fetch’ ou do ‘cron’.
Este comando sobrescreve o conteúdo preexistente.

portsnap update
portsnap update 
Removing old files and directories... done.
Extracting new files:
/usr/ports/devel/avro-c/
 ...
/usr/ports/net/ntpa/
Building new INDEX files...  

Como encontrar aplicativos para instalar no FreeBSD

Você pode pesquisar dentro dos ports ou dentro do próprio diretório /usr/ports — para encontrar os aplicativos que necessita e saber exatamente o nome do pacote a ser instalado.
Se souber o nome exato do pacote, pode usar o comando whereis, assim:

whereis mpg123 
mpg123: /usr/ports/audio/mpg123

Caso queira encontrar os nomes dos pacotes relacionados ao Apache 2.4, use um dos dois métodos abaixo:

pkg search apache24 
apache24-2.4.23_1              Version 2.4.x of Apache web server

ou (preferível):

make search name=apache24 

Certifique-se de estar sob o diretório /usr/ports, para executar este comando.

Port:   apache24-2.4.23_1
Path:   /usr/ports/www/apache24
Info:   Version 2.4.x of Apache web server
Maint:  apache@FreeBSD.org
B-deps: apr-1.5.2.1.5.4 autoconf-2.69_1 autoconf-wrapper-20131203 automake-1.15_
1 automake-wrapper-20131203 db5-5.3.28_4 expat-2.2.0 gdbm-1.12 gettext-runtime-0.19.8.1 indexinfo-0.2.4 libtool-2.4.6 libxml2-2.9.3 m4-1.4.17_1,1 pcre-8.39 perl 5-5.20.3_13
R-deps: apr-1.5.2.1.5.4 db5-5.3.28_4 expat-2.2.0 gdbm-1.12 gettext-runtime-0.19.8.1 indexinfo-0.2.4 libxml2-2.9.3 pcre-8.39 perl5-5.20.3_13
WWW:    http://httpd.apache.org/

Ao usar o ‘make search’ ou o ‘pkg search’, não é necessário saber o nome exato do pacote. Você pode fazer uma busca por parte do nome e usar o comando grep para filtrar os resultados:

make search name=libreoffice | grep -i portuguese
Path:   /usr/ports/portuguese/libreoffice
Path:   /usr/ports/portuguese/libreoffice-pt_BR

Use os parâmetros ‘search key’ para obter uma lista de pacotes relacionados ao que você deseja:

make search key=php7

Se a lista for muito grande, use o comando less, para pausar a exibição:

make search key=php7 | less 

Como instalar aplicativos no sistema

Entre no diretório do aplicativo e execute a instalação.
Veja um exemplo de como instalar o emulador dosbox no FreeBSD:

cd /usr/ports/emulators/dosbox
make install clean  
===> Building/installing dialog4ports as it is required for the config dialog
===>  Cleaning for dialog4ports-0.1.6
===> Skipping 'config' as NO_DIALOG is defined
===>  License BSD2CLAUSE accepted by the user
===>   dialog4ports-0.1.6 depends on file: /usr/local/sbin/pkg - found
=> dialog4ports-0.1.6.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch http://m1cro.me/dialog4ports/dialog4ports-0.1.6.tar.gz
===>  License GPLv2 accepted by the user
===>  Found saved configuration for dosbox-0.74_11
===>   dosbox-0.74_11 depends on file: /usr/local/sbin/pkg - found
=> dosbox-0.74.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch http://downloads.sourceforge.net/project/dosbox/dosbox/0.
74/dosbox-0.74.tar.gz

Para remover este mesmo pacote, futuramente, use o ‘deinstall’:

make deinstall all

Note que o comando deve ser executado dentro daquele mesmo diretório. Fique atento.

Como obter a fase da Lua, em qualquer data, no Linux.

O comando pom é um dos comandos tradicionais e presentes, por padrão, nas distribuições Linux.
Pode ser usado dentro de um script, em que se precise estabelecer que “algo” aconteça em determinada fase da Lua.
Pelo fato de o comando ser muito simples, vou mostrar o seu funcionamento em uma máquina Debian 9 Stretch e em uma FreeBSD 10.3.
Há pequenas variações em seu funcionamento.
Em ambas, é possível obter a fase lunar atual, com uma simples execução:

pom
The Moon is Waxing Gibbous (81% of Full)

Ou seja “A Lua está um Quarto Minguante (81% cheia)”.

O pom no Linux

A versão empacotada no Debian, é escrita por Keith Brandt e é bastante simplificada.
Você pode ver um exemplo de uso do comando no site http://www.die.net/moon/moon phase
Se quiser obter a fase da Lua em uma data específica, informe-a da seguinte maneira:

pom 2016080623
Sat 2016 Aug  6 23:00:00 (UTC):  The Moon will be Waxing Crescent (17% of Full)

Repare no formato correto da data.

Os significados dos textos do pom

O pom irá usar, em função da fase lunar, os seguintes textos:

  • The Moon will be new — A Lua será nova.
  • The Moon will be Waning Crescent — A Lua estará Minguante Crescente.
  • The Moon will be Waxing Crescent — A Lua estará Quarto Crescente
  • The Moon will be Waxing Gibbous — A Lua estará Quarto Minguante
  • The Moon will be Full — A Lua será cheia
  • The Moon will be Waning Gibbous — A Lua estará Minguante
  • The Moon will be at the Last Quarter — A Lua estará no Último Quarto

O pom no FreeBSD

O pom faz parte do meta pacote bsd-games, presente nos sistemas operacionais da família BSD e no GNU/Linux.
O código do pom, no FreeBSD 10.3 é um pouco mais novo do que a versão presente no Debian.
A página do manual, contudo, não informa seu autor — mas o funcionamento básico é exatamente o mesmo.
Há algumas opções a mais para quem rodar o pom no sistema do Beastie.
Se quiser obter apenas o valor percentual, indicativo do quanto a Lua está cheia, use ‘-p’:

pom -p            
#79

Este resultado é perfeito para ser usado dentro de um script.
O formato da data é diferente também:

pom -d 2017.08.15
The Moon is Waning Crescent (50% of Full)

Se você não informar a hora, o padrão será às 23h daquele dia.
Se quiser obter uma informação com a precisão de hora, minuto e segundo, use este exemplo:

pom -d 2022.10.20 -t 15:03:45 
The Moon is Waning Crescent (23% of Full)

Referências

Coleção de jogos Unix/Linux para brincar no terminal.
https://pt.wikipedia.org/wiki/Fases_da_Lua.
http://www.calendario-365.com.br/lua/fases-da-lua.html.