326 lines
15 KiB
Text
326 lines
15 KiB
Text
---
|
|
title: Guia rápido de FreeBSD para usuários de Linux
|
|
authors:
|
|
- author: John Ferrell
|
|
copyright: 2008 Projeto de Documentação do FreeBSD
|
|
releaseinfo: "$FreeBSD$"
|
|
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
|
|
---
|
|
|
|
= Guia rápido de FreeBSD para usuários de Linux
|
|
:doctype: article
|
|
:toc: macro
|
|
:toclevels: 1
|
|
:icons: font
|
|
:sectnums:
|
|
:sectnumlevels: 6
|
|
:source-highlighter: rouge
|
|
:experimental:
|
|
:toc-title: Índice
|
|
:part-signifier: Parte
|
|
:chapter-signifier: Capítulo
|
|
:appendix-caption: Apêndice
|
|
:table-caption: Tabela
|
|
:figure-caption: Figura
|
|
:example-caption: Exemplo
|
|
|
|
include::shared/pt-br/urls.adoc[]
|
|
|
|
[.abstract-title]
|
|
Resumo
|
|
|
|
Este documento tem a intenção de familiarizar rapidamente usuários intermediários ou avançados do Linux(R) com o básico do FreeBSD.
|
|
|
|
'''
|
|
|
|
toc::[]
|
|
|
|
[[intro]]
|
|
== Introdução
|
|
|
|
Esse documento destaca algumas diferenças técnicas entre o FreeBSD e o Linux(R) para que os usuários intermediários ou avançados do Linux(R) possam se familiarizar rapidamente com o básico do FreeBSD.
|
|
|
|
Este documento assume que o FreeBSD já está instalado. Acesse o link do capítulo link:{handbook}#bsdinstall[Instalando o FreeBSD] no Handbook do FreeBSD para obter ajuda no processo de instalação.
|
|
|
|
[[shells]]
|
|
== Shell Padrão
|
|
|
|
Os usuários do Linux(R) são geralmente surpreendidos quando descobrem que o Bash não é o shell padrão do FreeBSD. De fato, o Bash não é incluído na instalação padrão. Ao invés disto, o FreeBSD usa o man:tcsh[1] como shell padrão para o usuário root, e o man:sh[1], um shell compatível com o Bourne shell, como shell padrão para os demais usuários. O man:sh[1] é muito similar ao Bash mas com um conjunto de funcionalidades muito menor. Geralmente os scripts shell escritos para o man:sh[1] irão ser executados no Bash, mas o contrário não.
|
|
|
|
Entretanto, o Bash e outros shells estão disponíveis para a instalação usando a link:{handbook}#ports[Coleção de Pacotes e a Árvore de Ports].
|
|
|
|
Depois de instalar um novo shell, use o comando man:chsh[1] para trocar o shell padrão do usuário. É recomendado que o shell padrão do usuário `root` se mantenha inalterado uma vez que os shells que não fazem parte da base do sistema são instalados em [.filename]#/usr/local/bin#. No caso de ocorrer algum problema com o sistema de arquivos onde o diretório [.filename]#/usr/local/bin# está localizado e este não puder ser utilizado, o usuário `root` poderá não ter acesso ao shell padrão, evitando que o usuário `root` entre no sistema para corrigir o problema.
|
|
|
|
[[software]]
|
|
== Coleção de Pacotes e Árvore de Ports: Instalando novos programas no FreeBSD
|
|
|
|
FreeBSD provê dois métodos para a instalação de novos aplicativos: pacotes binários e através da compilação do código fonte (Árvore de ports). Cada método tem seu benefício:
|
|
|
|
.Pacotes Binários
|
|
* Instalação rápida quando comparada com a compilação de grandes aplicativos .
|
|
* Não há a necessidade de compreender como compilar um software.
|
|
* Não é necessário a instalação de um compilador.
|
|
|
|
.Árvore de Ports
|
|
* Possibilidade de customizar as opções de instalação
|
|
* Possibilidade de se aplicar patchs customizados
|
|
|
|
Se a instalação da aplicação não necessitar de opções customizadas, a instalação via pacotes é suficiente. Compile o port sempre que o aplicativo exigir a personalização das opções padrão. Se você necessita de pacotes customizados, você poderá obtê-los através da compilação a partir do ports utilizando o comando `make Pacotes`.
|
|
|
|
A lista completa da árvore de ports e dos pacotes pode ser encontrada https://www.freebsd.org/ports/[aqui].
|
|
|
|
[[packages]]
|
|
=== Pacotes
|
|
|
|
Pacotes são aplicações pré-compiladas, os equivalentes no FreeBSD aos arquivos [.filename]#.deb# nos sistemas baseados no Debian/Ubuntu e aos arquivos [.filename]#.rpm# nos sistemas baseados no Fedora/Red Hat. Pacotes são instalados através do comando `pkg`. Por exemplo, o comando a seguir instala o Apache 2.4:
|
|
|
|
[source,shell]
|
|
....
|
|
# pkg install apache24
|
|
....
|
|
|
|
Para mais informações sobre pacotes, veja a seção 5.4 do Handbook do FreeBSD: link:{handbook}#pkgng-intro[Usando pkgng para gerenciar pacotes binários].
|
|
|
|
[[ports]]
|
|
=== Árvore de Ports
|
|
|
|
A árvore de ports do FreeBSD é um framework de [.filename]##Makefiles##s e patches customizados especificamente para a instalação através do código fonte no FreeBSD. Quando um port é instalado, o sistema irá buscar o código fonte, aplicar qualquer patch que seja necessário, compilar o código, instalar a aplicação e qualquer outra dependência da qual ela necessite.
|
|
|
|
A Coleção de Ports, algumas vezes referenciada como a árvore de ports, pode ser instalada em [.filename]#/usr/ports# usando o comando man:portsnap[8] (se estiver rodando FreeBSD 11.4 ou 12.1) ou Subversion (se estiver rodando FreeBSD-CURRENT). Instruções detalhadas para instalação da Coleção de Ports podem ser encontradas na link:{handbook}#ports-using[seção 5.5] do Handbook do FreeBSD.
|
|
|
|
Para compilar um port, mude para o diretório do port e inicie o processo de compilação. O exemplo abaixo instala o Apache 2.4 através da Coleção de Ports:
|
|
|
|
[source,shell]
|
|
....
|
|
# cd /usr/ports/www/apache24
|
|
# make install clean
|
|
....
|
|
|
|
Um dos benefícios de usar a árvore de ports para realizar a instalação de um software é a possibilidade de customizar as opções de instalação. O exemplo a seguir, especifica que o módulo mod_ldap também deve ser instalado:
|
|
|
|
[source,shell]
|
|
....
|
|
# cd /usr/ports/www/apache24
|
|
# make WITH_LDAP="YES" install clean
|
|
....
|
|
|
|
Veja link:{handbook}#ports-using[Usando a Coleção de Ports] para mais informações.
|
|
|
|
[[startup]]
|
|
== Inicialização do Sistema
|
|
|
|
Muitas distribuições Linux(R) usam o sistema init do SysV, enquanto o FreeBSD usa o tradicional man:init[8] estilo BSD. Por utilizar este sistema man:init[8], não existe níveis diferenciados de execução e o arquivo [.filename]#/etc/inittab# não existe. Ao invés disto, a inicialização é controlada por meio de scripts man:rc[8]. Na inicialização do sistema, o [.filename]#/etc/rc# lê o arquivo [.filename]#/etc/rc.conf# e o arquivo [.filename]#/etc/defaults/rc.conf# para determinar quais são os serviços que devem ser inicializados. Os serviços especificados são inicializados pela execução de scripts de inicialização localizados em [.filename]#/etc/rc.d/# e [.filename]#/usr/local/etc/rc.d/#. Esses scripts são similares aos contidos no diretório [.filename]#/etc/init.d/# dos sistemas Linux(R).
|
|
|
|
Os scripts encontrados no diretório [.filename]#/etc/rc.d/# fazem parte das aplicações da "base" do sistema, tais como man:cron[8], man:sshd[8], e man:syslog[3]. Os scripts encontrados no diterório [.filename]#/usr/local/etc/rc.d/# correspondem aos aplicativos instalados pelo usuário, como por exemplo: Apache e Squid.
|
|
|
|
Uma vez que o FreeBSD é desenvolvido como um sistema completo, aplicações instaladas pelos usuários não são consideradas parte do sistema "base". As aplicações dos usuários são geralmente instaladas por meio link:{handbook}#ports-using[dos Pacotes Binários ou da Coleção de Ports]. Para mantê-los separados da base do sistema, eles são instalados sob o diretório [.filename]#/usr/local/#. Portanto, os aplicativos binários instalados pelos usuários localizam-se em [.filename]#/usr/local/bin/#, e os arquivos de configuração em [.filename]#/usr/local/etc/#.
|
|
|
|
Os serviços são habilitados pela adição de uma entrada no arquivo [.filename]#/etc/rc.conf# . As configurações padrões são encontradas no arquivo [.filename]#/etc/defaults/rc.conf# e essas configurações padrões são sobre postas pelas configurações realizadas no arquivo [.filename]#/etc/rc.conf#. Veja o manual do man:rc.conf[5] para maiores informações sobre as entradas disponíveis. Quando você instalar aplicações adicionais, leia as mensagens de instalação da aplicação para determinar como habilitar os serviços associados a essa aplicação.
|
|
|
|
As seguintes entradas no arquivo [.filename]#/etc/rc.conf# habilitam o man:sshd[8], o Apache 2.4, e especifica que o Apache deve ser inicializado com SSL ativado.
|
|
|
|
[.programlisting]
|
|
....
|
|
# enable SSHD
|
|
sshd_enable="YES"
|
|
# enable Apache with SSL
|
|
apache24_enable="YES"
|
|
apache24_flags="-DSSL"
|
|
....
|
|
|
|
Uma vez que o serviço tenha sido habilitado no arquivo [.filename]#/etc/rc.conf#, ele pode ser inicializado sem a necessidade de uma reinicialização do sistema.
|
|
|
|
[source,shell]
|
|
....
|
|
# service sshd start
|
|
# service apache24 start
|
|
....
|
|
|
|
Se o serviço não tiver sido habilitado, ele poderá ser inicializado a partir da linha de comando usando a opção `onestart`:
|
|
|
|
[source,shell]
|
|
....
|
|
|
|
# service sshd onestart
|
|
....
|
|
|
|
[[network]]
|
|
== Configuração de Rede
|
|
|
|
Diferente da identificação genérica _ethX_ usada pelo Linux(R) para identificar a interface de rede, o FreeBSD usa o nome do driver seguido por um número. A seguinte saída do comando man:ifconfig[8] mostra duas interfaces de rede Intel(R) Pro 1000 ([.filename]#em0# e [.filename]#em1#):
|
|
|
|
[source,shell]
|
|
....
|
|
|
|
% ifconfig
|
|
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
|
|
options=b<RXCSUM,TXCSUM,VLAN_MTU>
|
|
inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255
|
|
ether 00:50:56:a7:70:b2
|
|
media: Ethernet autoselect (1000baseTX <full-duplex>)
|
|
status: active
|
|
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
|
|
options=b<RXCSUM,TXCSUM,VLAN_MTU>
|
|
inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255
|
|
ether 00:50:56:a7:03:2b
|
|
media: Ethernet autoselect (1000baseTX <full-duplex>)
|
|
status: active
|
|
....
|
|
|
|
Um endereço IP pode ser designado à uma interface utilizando o comando man:ifconfig[8]. Para torna-lo definitivo e persistente entre as reinicializações, o endereço IP deve ser incluído no arquivo [.filename]#/etc/rc.conf#. A seguinte entrada no arquivo [.filename]#/etc/rc.conf# especifica o nome da máquina, o endereço IP e o gateway padrão da rede:
|
|
|
|
[.programlisting]
|
|
....
|
|
hostname="server1.example.com"
|
|
ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
|
|
defaultrouter="10.10.10.1"
|
|
....
|
|
|
|
Use a seguinte entrada para configurar uma interface para obter sua configuração por meio do DHCP:
|
|
|
|
[.programlisting]
|
|
....
|
|
hostname="server1.example.com"
|
|
ifconfig_em0="DHCP"
|
|
....
|
|
|
|
[[firewall]]
|
|
== Firewall
|
|
|
|
O sistema FreeBSD não utiliza o Linux(R) IPTABLES como seu firewall, o FreeBSD oferece três tipos de firewall a nível de kernel:
|
|
|
|
* link:{handbook}#firewalls-pf[PF]
|
|
* link:{handbook}#firewalls-ipf[IPFILTER]
|
|
* link:{handbook}#firewalls-ipfw[IPFW]
|
|
|
|
O PF é desenvolvido pelo projeto OpenBSD e portado para o FreeBSD. O PF foi criado para substituir o IPFILTER e sua sintaxe é similar ao IPFILTER. O PF pode ser utilizado em conjunto com man:altq[4] para prover funcionalidade de QoS.
|
|
|
|
O exemplo abaixo mostra uma regra do PF para permitir conexões de entrada do SSH:
|
|
|
|
[.programlisting]
|
|
....
|
|
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
|
|
....
|
|
|
|
O IPFILTER é uma aplicação de firewall desenvolvida por Darren Reed. Ela não é específica para o FreeBSD e foi portado para diversos sistemas operacionais, incluindo NetBSD, OpenBSD, SunOS, HP/UX, e Solaris.
|
|
|
|
A sintaxe do IPFILTER para permitir conexões de entrada do SSH é:
|
|
|
|
[.programlisting]
|
|
....
|
|
pass in on $ext_if proto tcp from any to any port = 22
|
|
....
|
|
|
|
O IPFW é o firewall desenvolvido e mantido pelo FreeBSD. Ele pode ser utilizado em conjunto com o man:dummynet[4] para prover a funcionalidade de traffic shaping e simular diferentes tipos de conexões de rede.
|
|
|
|
A sintaxe do IPFW para permitir conexões de entrada do SSH é:
|
|
|
|
[.programlisting]
|
|
....
|
|
ipfw add allow tcp from any to me 22 in via $ext_if
|
|
....
|
|
|
|
[[updates]]
|
|
== Atualizando o FreeBSD
|
|
|
|
Existem dois métodos para realizar a atualização em um sistema FreeBSD: a partir do código fonte ou atualização binária.
|
|
|
|
Atualizar através do código fonte é a forma mais trabalhosa, mas ela oferece uma grande flexibilidade. O processo envolve a sincronização da cópia local do código fonte do FreeBSD com os servidores de Subversion do FreeBSD. Uma vez que o código fonte local esteja atualizado, uma nova versão do kernel e da userland poderão ser compiladas.
|
|
|
|
Atualização binária é similar ao uso do comando `yum` ou `apt-get` para atualizar um sistema Linux(R). No FreeBSD, o comando man:freebsd-update[8] pode ser utilizado para buscar uma nova atualização binária e a instalá-la. Estas atualizações podem ser agendada usando o man:cron[8].
|
|
|
|
[NOTE]
|
|
====
|
|
Quando utilizar o man:cron[8] para agendar as atualizações, use o comando `freebsd-update cron` no arquivo man:crontab[1] para reduzir a possibilidade de que um grande número de máquinas busquem a atualização ao mesmo tempo:
|
|
|
|
[.programlisting]
|
|
....
|
|
0 3 * * * root /usr/sbin/freebsd-update cron
|
|
....
|
|
|
|
====
|
|
|
|
Para maiores informações sobre a atualização por meio do código fonte ou dos updates binários, acesse o link:{handbook}#updating-upgrading[capítulo sobre atualização] do Handbook do FreeBSD.
|
|
|
|
[[procfs]]
|
|
== procfs: É passado, mas foi não esquecido
|
|
|
|
Em algumas distribuições do Linux(R), você pode consultar o [.filename]#/proc/sys/net/ipv4/ip_forward# para verificar se o encaminhamento de IP está ou não abilitado. No FreeBSD, o comando man:sysctl[8] é utilizado para ver o status desta e também de outras variáveis do sistema.
|
|
|
|
Por exemplo, use o seguinte comando para determinar se o encaminhamento de IP está ou não habilitado.
|
|
|
|
[source,shell]
|
|
....
|
|
% sysctl net.inet.ip.forwarding
|
|
net.inet.ip.forwarding: 0
|
|
....
|
|
|
|
Use a opção `-a` para ver todas as variáveis do sistema:
|
|
|
|
[source,shell]
|
|
....
|
|
|
|
% sysctl -a | more
|
|
....
|
|
|
|
Se alguma aplicação necessitar do procfs, adicione a seguinte entrada no arquivo [.filename]#/etc/fstab#:
|
|
|
|
[source,shell]
|
|
....
|
|
proc /proc procfs rw,noauto 0 0
|
|
....
|
|
|
|
Incluindo a opção `noauto` irá previnir que o [.filename]#/proc# seja montado automaticamente durante a inicialização do sistema.
|
|
|
|
Para montar o sistema de arquivos sem reinicializar:
|
|
|
|
[source,shell]
|
|
....
|
|
# mount /proc
|
|
....
|
|
|
|
[[commands]]
|
|
== Comandos Comuns
|
|
|
|
Alguns comandos comuns e equivalentes são os seguintes:
|
|
|
|
[.informaltable]
|
|
[cols="1,1,1", frame="none", options="header"]
|
|
|===
|
|
| Comandos do Linux (Red Hat/Debian)
|
|
| Equivalente no FreeBSD
|
|
| Propósito
|
|
|
|
|`yum install _package_` / `apt-get install _package_`
|
|
|`pkg install _package_`
|
|
|Instalação de um pacote binário de um repositório remoto
|
|
|
|
|`rpm -ivh _package_` / `dpkg -i _package_`
|
|
|`pkg add _package_`
|
|
|Instalação de um pacote local.
|
|
|
|
|`rpm -qa` / `dpkg -l`
|
|
|`pkg info`
|
|
|Listar os pacotes instalados (Pacotes binários e através da árvore de ports)
|
|
|
|
|`lspci`
|
|
|`pciconf`
|
|
|Lista os dispositivos PCI
|
|
|
|
|`lsmod`
|
|
|`kldstat`
|
|
|Lista os módulos do kernel que foram carregados
|
|
|
|
|`modprobe`
|
|
|`kldload` / `kldunload`
|
|
|Carrega/Descarrega módulos do kernel.
|
|
|
|
|`strace`
|
|
|`truss`
|
|
|Rastreia chamadas do sistema
|
|
|===
|
|
|
|
[[conclusion]]
|
|
== Conclusão
|
|
|
|
EEste documento forneceu uma visão geral do FreeBSD. Veja o link:{handbook}[Handbook do FreeBSD] para uma cobertura mais profunda desses tópicos, assim como outros não cobertos por este documento.
|