Copyright © 2008 The FreeBSD Documentation Project
FreeBSD is a registered trademark of the FreeBSD Foundation.
Linux is a registered trademark of Linus Torvalds.
Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.
Red Hat, RPM, are trademarks or registered trademarks of Red Hat, Inc. in the United States and other countries.
UNIX is a registered trademark of The Open Group in the United States and other countries.
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.
O objetivo deste documento é familiarizar rapidamente os usuários intermediários e avançados de Linux® com o FreeBSD.
Este documento irá destacar as diferenças entre FreeBSD e Linux® para que os usuários intermediários e avançados possam rapidamente se familiarizar com os conceitos básicos do FreeBSD. Esta é apenas uma rápida introdução técnica, ela não tenta discutir as diferenças “filosóficas” entre os dois sistemas operacionais.
Este documento assume que você já tem o FreeBSD instalado. Se você não tem o FreeBSD instalado ou precisa de ajuda com o processo de instalação, por favor, consulte o capítulo Instalando o FreeBSD no Handbook.
Usuários vindos do Linux® são frequentemente
surpreendidos por não encontrarem o
Bash como o
shell
padrão no FreeBSD. De fato, o
Bash nem mesmo está
presente na instalação padrão. Em vez
disso, o FreeBSD usa o tcsh(1) como shell
padrão. Embora o Bash e
seus outros shells
favoritos estejam
disponíveis na
Coleção de Ports
do FreeBSD.
Se você instalar outros shells
, o
chsh(1) poderá ser usado para definir o
shell
padrão dos usuários.
Contudo, é recomendável que o
shell
padrão do
root
permaneça inalterado. A
razão para isso é que
shells
não incluídos na
base do sistema são normalmente instalados em
/usr/local/bin
ou
/usr/bin
. Caso ocorra um
problema no sistema de arquivos no qual estão localizados
o /usr/local/bin
e o
/usr/bin
, eles não poderão
ser montados. Neste caso, o usuário
root
não teria acesso ao seu
shell
padrão, o que o impediria de
efetuar login. Por este motivo uma segunda conta
root
, a conta toor
,
foi criada para uso com shells
que
não fazem parte da base do sistema. Leia o
FAQ
de segurança para obter
informações sobre a conta toor.
Além do tradicional método UNIX® de
instalação de programas (baixar o código
fonte, extrair, editar o código fonte, e compilar),
o FreeBSD oferece dois outros métodos para instalar
aplicações: pacotes e ports
.
Uma lista completa de todos os ports
e
pacotes disponíveis pode ser encontrada aqui.
Pacotes são aplicações
pré-compiladas, o equivalente no FreeBSD ao
.deb
nos sistemas baseados no
Debian/Ubuntu e ao .rpm
nos
sistemas baseados no Red Hat/Fedora. Pacotes
são instalados usando pkg_add(1). Por exemplo,
o seguinte comando instala o
Apache 2.2:
#
pkg_add /tmp/apache-2.2.6_2.tbz
Usar a opção -r
dirá ao pkg_add(1) para baixar automaticamente
o pacote e instalá-lo, juntamente com quaisquer
dependências que ele possua:
#
pkg_add -r apache22
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/Latest/apache22.tbz... Done. Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/expat-2.0.0_1.tbz... Done. Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/perl-5.8.8_1.tbz... Done. [snip] To run apache www server from startup, add apache22_enable="YES" in your /etc/rc.conf. Extra options can be found in startup script.
Se você está rodando uma versão de
release
do FreeBSD (6.2, 6.3, 7.0, etc.,
geralmente instalada a partir de um CD-ROM) o
pkg_add -r
vai baixar o pacote compilado
especificamente para esta versão. Este pacote
pode não ser a versão
mais atual da aplicação. Você pode
usar a variável PACKAGESITE
para
sobrescrever este comportamento padrão. Por
exemplo, ajuste PACKAGESITE
para ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/
para baixar os pacotes mais recentes compilados para a
série 6.X.
Para mais informações sobre pacotes, por favor, consulte a seção 4.4 do Handbook do FreeBSD: Usando o Sistema de Pacotes.
O segundo método para instalação
de aplicações no FreeBSD é a
Coleção de Ports
.
A Coleção de Ports
é um framework de
Makefiles
e
patches especialmente
customizados para a instalação de vários
programas a partir do código fonte no FreeBSD. Ao
instalar um port
o sistema irá
baixar o código fonte, aplicar qualquer
patch necessário,
compilar o código, e instalar a
aplicação. O mesmo processo será
aplicado para todas as suas dependências.
A Coleção de Ports
, por
vezes designada como a árvore de
ports
, pode ser encontrada em
/usr/ports
. Isto assumindo que a
Coleção de Ports
foi
instalada durante o processo de instalação do
FreeBSD. Se a Coleção de Ports
não foi instalada, ela pode ser adicionada a partir
dos discos de instalação usando
sysinstall(8), ou baixada dos servidores do FreeBSD usando
csup(1) ou portsnap(8). Instruções
detalhadas para a instalação da
Coleção de Ports
podem ser
encontradas na
seção 4.5.1 do Handbook.
A instalação de um port
é tão simples (geralmente) quanto entrar no
diretório do port
desejado e
iniciar o processo de compilação. O exemplo
seguinte instala o Apache 2.2 a
partir da Coleção de
Ports
:
#
cd /usr/ports/www/apache22
#
make install clean
Um grande benefício do uso do
ports
para instalar programas é a
possibilidade de personalizar as opções de
instalação. Por exemplo, ao instalar o
Apache 2.2 a partir do
ports
, você poderá habilitar
o mod_ldap definindo a
variável WITH_LDAP
ao executar
make(1):
#
cd /usr/ports/www/apache22
#
make WITH_LDAP="YES" install clean
Por favor, leia a seção 4.5 do Handbook do
FreeBSD,
Usando a Coleção de
Ports
, para maiores
informações sobre a Coleção de
Ports
.
Pacotes são apenas ports
pré-compilados, então na prática é
uma questão de instalarmos a partir do código
fonte (ports
) contra instalarmos de um
pacote binário. Cada método tem seus
próprios benefícios:
Ports
(código fonte)ports
você pode personalizar
várias opções, como a
compilação de módulos adicionais ou
a mudança do path de
instalação
padrão.)Se você não tem qualquer requisito especial,
o sistema de pacotes provavelmente vai se adequar
muito bem à sua situação. Se
você for precisar personalizar a
instalação, o ports
é
a melhor opção. (E lembre-se, se você
precisa personalizar a instalação, mas prefere
pacotes, você pode compilar um pacote personalizado a
partir do ports
usando
make
package
e,
em seguida, copiar o pacote para outros servidores.)
O Linux® usa o sistema SysV init
,
enquanto o FreeBSD usa o tradicional BSD-style
init(8). Sob o BSD-style
init(8)
não existem run-levels e
nem /etc/inittab
, em vez disso a
inicialização é controlada pelo
utilitário rc(8). O script
/etc/rc
lê
/etc/defaults/rc.conf
e
/etc/rc.conf
para determinar quais
serviços serão iniciados. Os serviços
especificados são, então, inicializados rodando
os scripts
de inicialização
correspondentes em /etc/rc.d/
e /usr/local/etc/rc.d/
. Esses
scripts
são similares aos
scripts
localizados em
/etc/init.d/
nos sistemas Linux®.
Os Serviços são ativados espeficificando
NomeDoServiço_enable="YES"
em /etc/rc.conf
(rc.conf(5)).
Dê uma olhada em
/etc/defaults/rc.conf
para visualizar os
padrões do sistema, essas configurações
padrões podem ser sobrescritas por
configurações em
/etc/rc.conf
. Quando instalar
aplicações adicionais não deixe de
analisar a documentação para determinar
como ativar qualquer serviço associado.
O seguinte trecho do /etc/rc.conf
ativa
o sshd(8) e o Apache 2.2. Ele
também determina que o Apache
deve ser iniciado com SSL.
# enable SSHD sshd_enable="YES" # enable Apache with SSL apache22_enable="YES" apache22_flags="-DSSL"
Uma vez que o serviço foi ativado em
/etc/rc.conf
, ele pode ser inicializado
pela linha de comando (sem precisar reinicializar o
sistema):
#
/etc/rc.d/sshd start
Se o serviço não foi ativado, ele pode ser
inicializado pela linha de comando usando
forcestart
:
#
/etc/rc.d/sshd forcestart
Em vez do identificador genérico
ethX, que o Linux® usa para identificar
uma interface de rede, o FreeBSD usa o nome do driver do
dispositivo de rede seguido por um número como
identificador. A seguinte saída do ifconfig(8)
mostra duas interfaces de rede Intel® Pro 1000
(em0
e em1
):
%
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 atribuído a uma
interface de rede usando ifconfig(8). No entanto, para
mantê-lo persistente entre as
reinicializações, a configuração
deve ser incluída em /etc/rc.conf
.
O seguinte exemplo configura o hostname
, o
endereço IP, e o gateway
padrão:
hostname="server1.example.com" ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0" defaultrouter="10.10.10.1"
Use a seguinte sintaxe para configurar a interface para DHCP:
hostname="server1.example.com" ifconfig_em0="DHCP"
Como o IPTABLES no Linux®, o
FreeBSD também oferece um firewall
ao
nível de kernel
; atualmente o FreeBSD
oferece três opções de
firewalls
:
O IPFIREWALL, ou
IPFW (o comando para gerenciar um
conjunto de regras IPFW é
ipfw(8)), é o firewall
desenvolvido e mantido pelos desenvolvedores do FreeBSD. O
IPFW pode ser integrado com
dummynet(4) para prover a capacidade de controle de
tráfego e simular diferentes tipos de conexões de
rede.
Amostra de uma regra do IPFW para permitir uma conexão de entrada do SSH:
ipfw add allow tcp from any to me 22 in via $ext_if
IPFILTER é um aplicativo
de firewall
desenvolvido por
Darren Reed. Ele não é específico
para o FreeBSD e foi portado para vários sistemas
operacionais, incluindo NetBSD, OpenBSD, SunOS, HP/UX, e
Solaris.
Amostra do comando IPFILTER para permitir uma conexão de entrada do SSH:
pass in on $ext_if proto tcp from any to any port = 22
O último aplicativo de firewall
,
PF, é desenvolvido pelo
projeto OpenBSD. O PF foi criado
como um substituto para o IPFILTER.
Como tal, a sintaxe do PF é
muito similar à do IPFILTER.
O PF pode ser integrado com
altq(4) para prover recursos de QoS.
Amostra do comando PF para permitir uma conexão de entrada do SSH:
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
Existem três métodos para atualizar um sistema FreeBSD: a partir do código fonte, atualização binária, e a partir dos discos de instalação.
A atualização a partir do código
fonte é a mais demorada, mas por outro lado é
a que oferece a maior flexibilidade. O processo envolve a
sincronização de uma cópia local do
código fonte do sistema a partir dos servidores
Subversion do FreeBSD. Uma vez que o
código fonte local está atualizado, você pode compilar a nova
versão do kernel
e dos aplicativos de nível
de usuário. Para maiores informações sobre atualizações a
partir do código fonte veja
o capítulo sobre atualização no
Handbook do FreeBSD.
As atualizações binárias são
similares ao uso do yum
ou
apt-get
para atualizar sistemas Linux®. O
comando freebsd-update(8) vai baixar e instalar as novas
atualizações. As atualizações
podem ser agendadas usando cron(8).
Se você utilizar o cron(8) para agendar as
atualizações, por favor, certifique-se de
usar freebsd-update cron
em seu
crontab(1) para reduzir a possibilidade de que um
grande número de máquinas busquem as
atualizações todas ao mesmo tempo.
0 3 * * * root /usr/sbin/freebsd-update cron
O último método de atualização,
a partir dos discos de instalação, é um
processo bastante simples. Efetue o boot
a partir dos discos de instalação e selecione a
opção para atualizar.
No Linux®, para determinar se o encaminhamento IP
está ativado, você pode olhar em
/proc/sys/net/ipv4/ip_forward
. No FreeBSD
você precisa usar o sysctl(8) para ver esta e
outras opções do sistema, pois o procfs(5)
tornou-se obsoleto nas versões mais recentes do FreeBSD.
(Embora sysctl
também esteja
disponível no Linux®.)
No exemplo do encaminhamento IP, você poderia usar o seguinte comando para determinar se ele está ativado no seu sistema FreeBSD:
%
sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
A opção -a
é
utilizada para listar todas as configurações
do sistema:
%
sysctl -a
kern.ostype: FreeBSD kern.osrelease: 6.2-RELEASE-p9 kern.osrevision: 199506 kern.version: FreeBSD 6.2-RELEASE-p9 #0: Thu Nov 29 04:07:33 UTC 2007 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC kern.maxvnodes: 17517 kern.maxproc: 1988 kern.maxfiles: 3976 kern.argmax: 262144 kern.securelevel: -1 kern.hostname: server1 kern.hostid: 0 kern.clockrate: { hz = 1000, tick = 1000, profhz = 666, stathz = 133 } kern.posix1version: 200112 ...
Alguns dos valores do sysctl
estão disponíveis somente para
leitura.
Existem ocasiões nas quais o procfs
é necessário, como na execução de
programas antigos, no uso do truss(1) para rastrear
chamadas de sistema, e para possibilitar a
Compatibilidade Binária com Linux.
(Embora a Compatibilidade Binária com Linux use seu
próprio procfs
, linprocfs(5).)
Se você precisar montar o procfs
,
você pode adicionar a seguinte entrada no
/etc/fstab
:
proc /proc procfs rw,noauto 0 0
noauto
vai prevenir
/proc
de ser montado automaticamente
durante o boot
.
E então monte o procfs
com:
#
mount /proc
Comando no Linux® (Red Hat/Debian) | Equivalente no FreeBSD | propósito |
---|---|---|
yum install pacote / apt-get install pacote | pkg_add -r pacote | Instala o pacote a partir do repositório remoto |
rpm -ivh pacote / dpkg -i pacote | pkg_add -v pacote | Instala um pacote |
rpm -qa / dpkg -l | pkg_info | Lista de pacotes instalados |
Esperamos que este documento tenha fornecido para você o suficiente para começar a utilizar o FreeBSD. Certifique-se de dar uma olhada no Handbook do FreeBSD para se aprofundar nos tópicos abordados, assim como nos muitos tópicos não mencionados neste documento.