1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
|
---
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.
|