FreeBSD Handbook

Esta tradução pode estar desatualizada. Para ajudar com as traduções, acesse a ferramenta de traduções do FreeBSD.

trademarks

FreeBSD is a registered trademark of the FreeBSD Foundation.

IBM, AIX, OS/2, PowerPC, PS/2, S/390, and ThinkPad are trademarks of International Business Machines Corporation in the United States, other countries, or both.

IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and Electronics Engineers, Inc. in the United States.

Red Hat, RPM, are trademarks or registered trademarks of Red Hat, Inc. in the United States and other countries.

3Com and HomeConnect are registered trademarks of 3Com Corporation.

Adobe, Acrobat, Acrobat Reader, Flash and PostScript are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.

Apple, AirPort, FireWire, iMac, iPhone, iPad, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Inc., registered in the U.S. and other countries.

Intel, Celeron, Centrino, Core, 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.

Linux is a registered trademark of Linus Torvalds.

Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media and Windows NT are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.

Motif, OSF/1, and UNIX are registered trademarks and IT DialTone and The Open Group are trademarks of The Open Group in the United States and other countries.

Sun, Sun Microsystems, Java, Java Virtual Machine, JDK, JRE, JSP, JVM, Netra, OpenJDK, Solaris, StarOffice, SunOS and VirtualBox are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.

RealNetworks, RealPlayer, and RealAudio are the registered trademarks of RealNetworks, Inc.

Oracle is a registered trademark of Oracle Corporation.

3ware is a registered trademark of 3ware Inc.

ARM is a registered trademark of ARM Limited.

Adaptec is a registered trademark of Adaptec, Inc.

Android is a trademark of Google Inc.

Heidelberg, Helvetica, Palatino, and Times Roman are either registered trademarks or trademarks of Heidelberger Druckmaschinen AG in the U.S. and other countries.

Intuit and Quicken are registered trademarks and/or registered service marks of Intuit Inc., or one of its subsidiaries, in the United States and other countries.

LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID and Mylex are trademarks or registered trademarks of LSI Logic Corp.

MATLAB is a registered trademark of The MathWorks, Inc.

SpeedTouch is a trademark of Thomson.

VMware is a trademark of VMware, Inc.

Mathematica is a registered trademark of Wolfram Research, Inc.

Ogg Vorbis and Xiph.Org are trademarks of Xiph.Org.

XFree86 is a trademark of The XFree86 Project, Inc.

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.

Índice

Resumo

Bem vindo ao FreeBSD! Este manual cobre a instalação e o uso diário do FreeBSD 12.1-RELEASE e do FreeBSD 11.4-RELEASE. Este livro é o resultado do trabalho contínuo de muitas pessoas. Algumas seções podem estar desatualizadas. Os interessados em ajudar a atualizar e expandir este documento devem enviar e-mails para a lista de discussão do projeto de documentação do FreeBSD.

A última versão deste livro está disponível no site do FreeBSD. Versões anteriores podem ser obtidas em https://docs.FreeBSD.org/doc/. O livro pode ser baixado em uma variedade de formatos e opções de compressão do servidor FTP do FreeBSD ou de um dos inúmeros sites espelho. Cópias impressas podem ser adquiridas da FreeBSD Mall. As pesquisas podem ser realizadas no manual e em outros documentos na página de busca.


Prefácio

Audiência Pretendida

O novato no FreeBSD descobrirá que a primeira seção deste livro guia o usuário através do processo de instalação do FreeBSD e gentilmente apresenta os conceitos e convenções que sustentam o UNIX™. Trabalhar através desta seção exige pouco mais do que o desejo de explorar, e a capacidade de incorporar novos conceitos à medida que eles são introduzidos.

Uma vez que você chegou até aqui, a segunda seção do Handbook, muito maior, é uma referência abrangente a todos os tópicos de interesse para administradores de sistemas FreeBSD. Alguns destes capítulos podem recomendar que você faça alguma leitura prévia, e isto é destacado na sinopse no início de cada capítulo.

Para uma lista de fontes adicionais de informação, por favor veja o Bibliografia.

Mudanças desde a Terceira Edição

A versão online atual do Handbook representa o esforço cumulativo de muitas centenas de contribuidores nos últimos 10 anos. A seguir estão algumas das mudanças significativas desde a publicação da terceira edição do volume em 2004:

  • DTrace foi adicionado com informações sobre a poderosa ferramenta de análise de desempenho DTrace.

  • Outros Sistemas de Arquivos foi adicionado com informações sobre sistemas de arquivos não-nativos no FreeBSD, como o ZFS da Sun™.

  • Auditoria de Evento de Segurança foi adicionado para cobrir os novos recursos de auditoria no FreeBSD e explicar seu uso.

  • Virtualização foi adicionado com informações sobre a instalação do FreeBSD em ambientes virtualizados.

  • Instalando o FreeBSD foi adicionado para cobrir a instalação do FreeBSD usando o novo utilitário de instalação, bsdinstall.

Mudanças desde a Segunda Edição (2004)

A terceira edição foi o culminar de mais de dois anos de trabalho pelos membros dedicados do Projeto de Documentação do FreeBSD. A edição impressa cresceu a tal tamanho que foi necessário publicar como dois volumes separados. A seguir estão as principais mudanças nesta nova edição:

  • Configuração e Ajuste foi expandido com novas informações sobre o gerenciamento de recursos e energia da ACPI, o utilitário de sistema cron e mais opções para ajuste do kernel.

  • Segurança foi expandido com novas informações sobre redes virtuais privadas (VPNs), listas de controle de acesso (ACLs) do sistema de arquivos e avisos de segurança.

  • Controle de acesso obrigatório é um novo capítulo desta edição. Ele explica o que é MAC e como esse mecanismo pode ser usado para proteger um sistema FreeBSD.

  • Armazenamento foi expandido com novas informações sobre dispositivos de armazenamento USB, snapshots do sistema de arquivos, cotas do sistema de arquivos, arquivos e sistemas de arquivos com suporte de rede e partições de disco criptografadas.

  • Uma seção de solução de problemas foi adicionada ao PPP.

  • Correio Eletrônico foi expandido com novas informações sobre o uso de agentes de transporte alternativos, autenticação SMTP, UUCP, fetchmail, procmail e outros tópicos avançados.

  • Servidores de Rede é novidade nesta edição. Este capítulo inclui informações sobre a configuração do Servidor HTTP Apache, ftpd e a configuração de um servidor para clientes Microsoft™Windows™ com Samba. Algumas seções do Rede Avançada foram movidas para cá para melhorar a apresentação.

  • Rede Avançada foi expandido com novas informações sobre o uso de dispositivos Bluetooth™ com o FreeBSD, configuração de redes sem fio e redes ATM (Asynchronous Transfer Mode).

  • Um glossário foi adicionado para fornecer um local central para as definições de termos técnicos utilizados ao longo do livro.

  • Uma série de melhorias estéticas foram feitas nas tabelas e figuras ao longo do livro.

Mudanças desde a Primeira Edição (2001)

A segunda edição foi o culminar de mais de dois anos de trabalho pelos membros dedicados do Projeto de Documentação do FreeBSD. A seguir, as principais mudanças nesta edição:

  • Um índice completo foi adicionado.

  • Todas as figuras ASCII foram substituídas por diagramas gráficos.

  • Uma sinopse padrão foi adicionada a cada capítulo para fornecer um resumo rápido de quais informações o capítulo contém e o que se espera que o leitor saiba.

  • O conteúdo foi logicamente reorganizado em três partes: "Introdução", "Administração do Sistema" e "Apêndices".

  • Fundamentos do FreeBSD foi expandido para conter informações adicionais sobre processos, daemons e sinais.

  • Instalando Aplicativos. Pacotes e Ports foi expandido para conter informações adicionais sobre o gerenciamento de pacotes binários.

  • O sistema X Window foi completamente reescrito com ênfase no uso de tecnologias de desktop modernas como KDE e GNOME sobre o XFree86™ 4.X.

  • O processo de inicialização do FreeBSD foi expandido.

  • Armazenamento foi escrito a partir do que costumava ser dois capítulos separados em "Discos" e "Backups". Sentimos que os tópicos são mais fáceis de compreender quando apresentados como um único capítulo. Uma seção sobre RAID (hardware e software) também foi adicionada.

  • Comunicações Seriais foi completamente reorganizado e atualizado para o FreeBSD 4.X/5.X.

  • PPP foi substancialmente atualizado.

  • Muitas novas seções foram adicionadas ao Rede Avançada.

  • Correio Eletrônico foi expandido para incluir mais informações sobre a configuração do sendmail.

  • Compatibilidade binária com o Linux® foi expandido para incluir informações sobre como instalar o Oracle™ e o SAP™R/3™.

  • Os novos tópicos a seguir são abordados nesta segunda edição:

Organização deste Livro

Este livro é dividido em cinco seções logicamente distintas. A primeira seção, Introdução, cobre a instalação e o uso básico do FreeBSD. Espera-se que o leitor siga estes capítulos em sequência, possivelmente ignorando capítulos que abordam tópicos familiares. A segunda seção, Tarefas Comuns, cobre alguns dos recursos mais usados do FreeBSD. Esta seção e todas as seções subsequentes podem ser lidas fora de ordem. Cada capítulo começa com uma sinopse sucinta que descreve o que o capítulo cobre e o que se espera que o leitor já conheça. Isso permite que o leitor casual pule para encontrar capítulos de interesse. A terceira seção, Administração do Sistema, cobre tópicos de administração. A quarta seção, Comunicação de Rede, aborda tópicos sobre redes e servidores. A quinta seção contém apêndices de informações de referência.

Introdução

Introduz o FreeBSD para um novo usuário. Descreve a história do projeto FreeBSD, seus objetivos e modelo de desenvolvimento.

Instalando o FreeBSD

Guia o usuário durante todo o processo de instalação do FreeBSD 9.x usando o bsdinstall.

Fundamentos do FreeBSD

Cobre os comandos básicos e a funcionalidade do sistema operacional FreeBSD. Se você está familiarizado com Linux™ ou outro tipo de UNIX™, provavelmente você pode pular este capítulo.

Instalando Aplicativos. Pacotes e Ports

Cobre a instalação de softwares de terceiros com a inovadora "Coleção de Ports" do FreeBSD, e com pacotes binários tradicionais.

O sistema X Window

Descreve o Sistema X Window em geral e usa o X11 no FreeBSD em particular. Também descreve ambientes comuns de desktop, como o KDE e GNOME.

Aplicações de Desktop

Lista alguns aplicativos comuns de desktop, como navegadores web e pacotes de produtividade, e descreve como instalá-los no FreeBSD.

Multimídia

Mostra como configurar o suporte a reprodução de som e vídeo para o seu sistema. Também descreve alguns exemplos de aplicativos de áudio e vídeo.

Configurando o kernel do FreeBSD

Explica o porque que você pode precisar configurar um novo kernel e fornece instruções detalhadas para configurar, compilar e instalar um kernel personalizado.

Impressão

Descreve o gerenciamento de impressoras no FreeBSD, incluindo informações sobre páginas de banner, contabilidade de impressoras e configuração inicial.

Compatibilidade binária com o Linux®

Descreve os recursos de compatibilidade Linux™ do FreeBSD. Também fornece instruções detalhadas de instalação para muitos aplicativos Linux™ populares, como o Oracle™ e o Mathematica™.

Configuração e Ajuste

Descreve os parâmetros disponíveis para os administradores do sistema ajustarem um sistema FreeBSD para um ótimo desempenho. Também descreve os vários arquivos de configuração usados no FreeBSD e onde encontrá-los.

O processo de inicialização do FreeBSD

Descreve o processo de inicialização do FreeBSD e explica como controlar este processo com opções de configuração.

Segurança

Descreve muitas ferramentas diferentes disponíveis para ajudar a manter seu sistema FreeBSD seguro, incluindo Kerberos, IPsec e OpenSSH.

Jails

Descreve o framework do jail e as suas vantagens sobre o chroot tradicional do FreeBSD.

Controle de acesso obrigatório

Explica o que é o Mandatory Access Control (MAC) e como esse mecanismo pode ser usado para proteger um sistema FreeBSD.

Auditoria de Evento de Segurança

Descreve o que é a Auditoria de Eventos do FreeBSD, como ela pode ser instalada, configurada e como as trilhas de auditoria podem ser inspecionadas ou monitoradas.

Armazenamento

Descreve como gerenciar mídias de armazenamento e sistemas de arquivos com o FreeBSD. Isto inclui discos físicos, matrizes RAID, mídias óticas e de fita, discos com suporte de memória e sistemas de arquivos de rede.

GEOM. Framework de Transformação de Disco Modular

Descreve o que é o framework GEOM do FreeBSD e como configurar os vários níveis suportados de RAID.

Outros Sistemas de Arquivos

Examina o suporte a sistemas de arquivos não-nativos no FreeBSD, como o Z File System da Sun™.

Virtualização

Descreve o que os sistemas de virtualização oferecem e como eles podem ser usados com o FreeBSD.

Localização - Uso e Configuração do i18n/L10n

Descreve como usar o FreeBSD em outros idiomas além do inglês. Abrange a localização tanto em nível de sistema como em nível de aplicativo.

Atualização e Upgrade do FreeBSD

Explica as diferenças entre FreeBSD-STABLE, FreeBSD-CURRENT e FreeBSD releases. Descreve quais usuários se beneficiariam do uso de um sistema em desenvolvimento e descreve este processo. Cobre os métodos que os usuários podem usar para atualizar seu sistema para a última release de segurança.

DTrace

Descreve como configurar e usar a ferramenta DTrace da Sun™ no FreeBSD. O rastreamento dinâmico pode ajudar a localizar problemas de desempenho, realizando a análise do sistema em tempo real.

Comunicações Seriais

Explica como conectar terminais e modems ao seu sistema FreeBSD para conexões de discagem de entrada e de saída.

PPP

Descreve como usar o PPP para se conectar a sistemas remotos com o FreeBSD.

Correio Eletrônico

Explica os diferentes componentes de um servidor de e-mail e mergulha em tópicos simples de configuração do software mais popular de servidor de e-mails: o sendmail.

Servidores de Rede

Fornece instruções detalhadas e exemplos de arquivos de configuração para configurar sua máquina FreeBSD como um servidor de sistema de arquivos de rede, servidor de nome de domínio, servidor de sistema de informações de rede ou servidor de sincronização de horário.

Firewalls

Explica a filosofia por trás dos firewalls baseados em software e fornece informações detalhadas sobre a configuração dos diferentes firewalls disponíveis para o FreeBSD.

Rede Avançada

Descreve muitos tópicos de rede, incluindo o compartilhamento de uma conexão à Internet com outros computadores em sua LAN, tópicos avançados de roteamento, rede sem fio, Bluetooth™, ATM, IPv6 e muito mais.

Obtendo o FreeBSD

Lista diferentes fontes para obter a mídia de instalação do FreeBSD em CD-ROM ou DVD, bem como diferentes sites na Internet que permitem que você baixe e instale o FreeBSD.

Bibliografia

Este livro aborda muitos assuntos diferentes que podem deixá-lo com a curiosidade de uma explicação mais detalhada. A bibliografia lista muitos livros excelentes que são referenciados no texto.

Recursos na Internet

Descreve os muitos fóruns disponíveis para usuários do FreeBSD postarem perguntas e se engajarem em conversas técnicas sobre o FreeBSD.

Chaves OpenPGP

Lista as fingerprints PGP de vários desenvolvedores do FreeBSD.

Convenções utilizadas neste livro

Para fornecer um texto consistente e fácil de ler, várias convenções são seguidas ao longo do livro.

Convenções Tipográficas

Itálico

Uma fonte itálica é usada para nomes de arquivos, URLs, textos enfatizados e o primeiro uso de termos técnicos.

Monospace

Uma fonte monoespaçada é usada para mensagens de erro, comandos, variáveis de ambiente, nomes de ports, nomes de host, nomes de usuários, nomes de grupos, nomes de dispositivos, variáveis e fragmentos de código.

Negrito

Uma fonte negrita é usada para aplicativos, comandos e chaves.

Entrada do Usuário

As teclas são mostradas em negrito para se destacar do restante do texto. As combinações de teclas que devem ser digitadas simultaneamente são mostradas com + entre as teclas, como:

Ctrl+Alt+Del

Isso significa que o usuário deve digitar as teclas Ctrl, Alt e Del ao mesmo tempo.

As teclas que devem ser digitadas em sequência serão separadas por vírgulas, por exemplo:

Ctrl+X, Ctrl+S

Significaria que o usuário deve digitar as teclas Ctrl e X simultaneamente e, em seguida, digitar as teclas Ctrl e S simultaneamente.

Exemplos

Exemplos começando com C:\> indicam um comando MS-DOS™. Salvo indicação em contrário, estes comandos podem ser executados a partir de uma janela de "Prompt de Comando" em um ambiente Microsoft™Windows™.

E:\> tools\fdimage floppies\kern.flp A:

Exemplos começando com # indicam um comando que deve ser executado como superusuário no FreeBSD. Você pode logar como root para digitar o comando, ou logar como sua conta normal e usar o comando su(1) para obter privilégios de superusuário.

# dd if=kern.flp of=/dev/fd0

Exemplos começando com % indicam um comando que deve ser chamado a partir de uma conta de usuário normal. Salvo indicação em contrário, a sintaxe C-shell é usada para definir variáveis de ambiente e outros comandos do shell.

% top

Agradecimentos

O livro que você está segurando representa os esforços de muitas centenas de pessoas em todo o mundo. Não importa se eles enviaram correções para erros de digitação ou submeteram capítulos completos, todas as contribuições foram úteis.

Várias empresas têm apoiado o desenvolvimento deste documento, pagando aos autores para trabalhar em tempo integral, pagando pela publicação, etc. Em particular, a BSDi (posteriormente adquirida pela Wind River Systems) pagou membros do Projeto de Documentação do FreeBSD para trabalhar na melhoria deste livro em tempo integral, levando à publicação da primeira edição impressa em março de 2000 (ISBN 1-57176-241-8). A Wind River Systems pagou vários autores adicionais para fazer uma série de melhorias na infraestrutura de impressão e adicionar capítulos adicionais ao texto. Este trabalho culminou com a publicação da segunda edição impressa em novembro de 2001 (ISBN 1-57176-303-1). Em 2003-2004, a FreeBSD Mall, Inc. pagou a vários contribuidores para melhorar o Handbook em preparação para a terceira edição impressa.

Parte I: Primeiros Passos

Esta parte do handbook é destinada aos usuários e administradores que são novos no FreeBSD. Estes capítulos:

  • Apresentam o FreeBSD.

  • Guiam os leitores através do processo de instalação.

  • Ensinam conceitos básicos e fundamentais do UNIX™.

  • Mostram como instalar a grande variedade de aplicativos de terceiros disponíveis para o FreeBSD.

  • Apresenta o X, o sistema de janelas UNIX™ e detalha como configurar um ambiente de desktop para tornar os usuários mais produtivos.

O número de referências a tópicos futuros no texto foi mantido no mínimo, para que uma seção possa ser lida do começo ao fim com o mínimo de avanço desnecessário de páginas.

Capítulo 1. Introdução

1.1. Sinopse

Obrigado pelo seu interesse no FreeBSD! O capítulo seguinte cobre vários aspectos do Projeto FreeBSD, como seu histórico, objetivos, modelo de desenvolvimento e assim por diante.

Depois de ler este capítulo, você saberá:

  • Como o FreeBSD se relaciona com outros sistemas operacionais de computadores.

  • A história do projeto FreeBSD.

  • Os objetivos do projeto FreeBSD.

  • O básico do modelo de desenvolvimento de código aberto do FreeBSD.

  • E claro: de onde o nome "FreeBSD" vem.

1.2. Bem vindo ao FreeBSD!

O FreeBSD é um Sistema Operacional de código aberto nos padrões Unix-Like para computadores de arquitetura x86 (32 and 64 bits), ARM™, AArch64, RISC-V™, MIPS™, POWER™, PowerPC™, and Sun UltraSPARC™. Ele fornece todos os recursos que são considerados comuns hoje em dia, como multitarefa preemptiva, proteção de memória, memória virtual, recursos para múltiplos usuários, suporte a SMP, todas as ferramentas de desenvolvimento de código aberto para diferentes linguagens e estruturas e recursos de área de trabalho centralizados no Sistema X Window, KDE ou GNOME. Seus pontos fortes são:

  • Licença Liberal Open Source, que concede a você o direito de modificar e estender livremente seu código-fonte e incorporá-lo em projetos Open Source e produtos fechados, sem impor restrições típicas às licenças copyleft, bem como evita potenciais problemas de incompatibilidade de licença.

  • Rede TCP/IP forte - O FreeBSD implementa protocolos padrões da indústria com desempenho e escalabilidade crescentes. Isso faz com que seja uma boa combinação tanto em funções de servidor quanto de roteamento/firewall - e, de fato, muitas empresas e fornecedores o utilizam precisamente para essa finalidade.

  • Suporte totalmente integrado ao OpenZFS, incluindo root-on-ZFS, ZFS Boot Environments, gerenciamento de falhas, delegação administrativa, suporte a jails, documentação específica ao FreeBSD e suporte ao instalador do sistema.

  • Extensivos recursos de segurança, do Mandatory Access Control ao Capsicum e mecanismos de sandbox.

  • Mais de 30 mil pacotes pré-compilados para todas as arquiteturas suportadas, e a Coleção de Ports, que facilita a compilação de seus próprios pacotes personalizados.

  • Documentação - além do Handbook e livros de diferentes autores que cobrem tópicos que vão da administração do sistema aos internals do kernel, há também as páginas man(), não apenas para daemons do userspace, utilitários e arquivos de configuração, mas também para APIs do driver do kernel (seção 9) e drivers individuais (seção 4).

  • Estrutura de repositório simples e consistente e sistema de compilação - O FreeBSD usa um único repositório para todos os seus componentes, tanto para o kernel quanto para o userspace. Isso, juntamente com um sistema de compilação unificado, fácil de personalizar e um processo de desenvolvimento bem pensado, facilita a integração do FreeBSD com a infraestrutura de compilação do seu próprio produto.

  • Mantem-se fiel à filosofia do Unix, preferindo heterogeneidade ao invés de deamons monolíticos "all in one" com comportamento codificado (hardcoded).

  • Compatibilidade binária com o Linux, o que torna possível executar muitos binários do Linux sem a necessidade de virtualização.

O FreeBSD é baseado na release 4.4BSD-Lite do Computer Systems Research Group (CSRG) da Universidade da Califórnia em Berkeley, e mantém a tradição distinta do desenvolvimento de sistemas BSD. Além do bom trabalho fornecido pelo CSRG, o Projeto FreeBSD colocou milhares de horas-homem para estender a funcionalidade e ajustar o sistema para o máximo desempenho e confiabilidade em situações de carga reais. O FreeBSD oferece desempenho e confiabilidade a altura de outras ofertas de código aberto e comerciais, combinadas com recursos de ponta não disponíveis em nenhum outro lugar.

1.2.1. O que o FreeBSD Pode Fazer?

As aplicações para as quais o FreeBSD pode ser colocado são verdadeiramente limitadas apenas pela sua própria imaginação. Do desenvolvimento de software à automação de fábrica, do controle de estoque à correção de azimute de antenas de satélite remotas; Se isso puder ser feito com um produto comercial UNIX™, é mais do que provável que você também possa fazê-lo com o FreeBSD! O FreeBSD também se beneficia significativamente de milhares de aplicativos de alta qualidade desenvolvidos por centros de pesquisa e universidades em todo o mundo, muitas vezes disponíveis com pouco ou nenhum custo.

Como o código-fonte do FreeBSD está disponível gratuitamente, o sistema também pode ser customizado em um grau quase inédito para aplicações ou projetos especiais, e de maneiras que geralmente não são possíveis com a maioria do sistemas operacionais dos principais fornecedores comerciais. Aqui está apenas uma amostra de algumas das aplicações em que as pessoas estão atualmente usando o FreeBSD:

  • Serviços de Internet: A robusta rede TCP/IP incorporada ao FreeBSD torna-o uma plataforma ideal para uma variedade de serviços de Internet, tais como:

    • Servidores WEB

    • Roteamento IPv4 e IPv6

    • Firewalls e Gateways NAT ("IP masquerading")

    • Servidores FTP

    • Servidores de Email

    • E mais…​

  • Educação: Você é estudante de ciências da computação ou de engenharia relacionada? Não há melhor maneira de aprender sobre sistemas operacionais, arquitetura de computadores e redes do que colocar as mãos no sistema, uma experiência que o FreeBSD pode oferecer. Os vários pacotes CAD, matemáticos e de design gráfico disponíveis gratuitamente também o tornam altamente útil para aqueles cujo principal interesse em um computador é fazer com que outro trabalho seja feito!

  • Pesquisa: Com o código-fonte de todo o sistema disponível, o FreeBSD é uma excelente plataforma para pesquisa em sistemas operacionais, assim como em outros ramos da ciência da computação. A natureza livremente disponível do FreeBSD também possibilita que grupos remotos colaborem em ideias ou desenvolvimento compartilhado sem ter que se preocupar com acordos de licenciamento especiais ou limitações sobre o que pode ser discutido em fóruns abertos.

  • Rede: Precisa de um novo roteador? Um servidor de nomes (DNS)? Um firewall para manter as pessoas fora de sua rede interna? O FreeBSD pode facilmente transformar esse PC não utilizado que está encostado em algum canto em um roteador avançado com recursos sofisticados de filtragem de pacotes.

  • Embarcado: O FreeBSD é uma excelente plataforma para construir sistemas embarcados. Com suporte para plataformas ARM™, MIPS™ e PowerPC™, juntamente com uma pilha de rede robusta, recursos de ponta e a permissiva Licença BSD o FreeBSD é uma excelente base para a criação de roteadores embarcados, firewalls e outros dispositivos.

  • Desktop: O FreeBSD é uma ótima opção para uma solução de desktop barata usando o servidor X11 disponível gratuitamente. O FreeBSD oferece várias opções de ambientes de desktop de código aberto, incluindo as interfaces gráficas de usuário padrão do GNOME e do KDE. O FreeBSD pode até inicializar "diskless" a partir de um servidor central, tornando as estações de trabalho individuais ainda mais baratas e fáceis de administrar.

  • Desenvolvimento de Software: O sistema básico do FreeBSD vem com um conjunto completo de ferramentas de desenvolvimento, incluindo um completo compilador e depurador C/C++ . O suporte para muitas outras linguagens também está disponível por meio da coleção de ports e dos pacotes.

O FreeBSD está disponível para download gratuito, ou pode ser obtido em CD-ROM ou DVD. Por favor, consulte Obtendo o FreeBSD para maiores informações sobre como obter o FreeBSD.

1.2.2. Quem Usa o FreeBSD?

O FreeBSD é conhecido por seus recursos de serviço web - sites que rodam no FreeBSD incluem Hacker News, Netcraft, NetEase, Netflix, Sina, Sony Japan, Rambler, Yahoo!, e Yandex.

Os recursos avançados do FreeBSD, a segurança comprovada, o ciclo de release previsível e a licença permissiva levaram à sua utilização como plataforma para a construção de muitos appliances, dispositivos e produtos tanto comerciais quanto de código aberto. Muitas das maiores empresas de TI do mundo usam o FreeBSD:

  • Apache - A Apache Software Foundation executa a maior parte de sua infraestrutura voltada para o público, incluindo possivelmente um dos maiores repositórios SVN do mundo, com mais de 1.4 milhões de commits, no FreeBSD.

  • Apple - OS X utiliza muito do FreeBSD na sua pilha de rede, no seu sistema de arquivos virtuais e em muitos componentes userland. O Apple iOS também contém elementos emprestados do FreeBSD.

  • Cisco - Os appliances de segurança de rede e anti-spam IronPort executam um kernel modificado do FreeBSD.

  • Citrix - A linha NetScaler de dispositivos de segurança fornece balanceamento de carga nas camadas 4-7, cache de conteúdo, firewall de aplicativos, VPN segura e acesso móvel à rede em nuvem, juntamente com o poder de um shell do FreeBSD.

  • Dell EMC Isilon - Os dispositivos de armazenamento corporativo da Isilon são baseados no FreeBSD. A licença extremamente liberal do FreeBSD permitiu que a Isilon integrasse sua propriedade intelectual ao kernel e se concentrasse em construir seu produto ao invés de um sistema operacional.

  • Quest KACE - Os appliances de gerenciamento de sistemas KACE executam o FreeBSD devido à sua confiabilidade, escalabilidade e a comunidade que apoia seu desenvolvimento contínuo.

  • iXsystems - A linha TrueNAS de dispositivos de armazenamento unificado é baseada no FreeBSD. Além de seus produtos comerciais, a iXsystems também gerencia o desenvolvimento dos projetos de código aberto TrueOS e FreeNAS.

  • Juniper - O sistema operacional JunOS que roda em todos os equipamentos de rede da Juniper (incluindo roteadores, switches, firewalls e dispositivos de rede) é baseado no FreeBSD. A Juniper é um dos muitos fornecedores que mostra a relação simbiótica entre o projeto e os fornecedores de produtos comerciais. Melhorias geradas na Juniper são enviadas para o FreeBSD para reduzir a complexidade de integrar novos recursos do FreeBSD ao JunOS no futuro.

  • McAfee - O SecurOS, a base dos produtos de firewall corporativo da McAfee, incluindo o Sidewinder, é baseado no FreeBSD.

  • NetApp - A linha de dispositivos de armazenamento Data ONTAP GX é baseada no FreeBSD. Além disso, a NetApp contribuiu com muitos recursos, incluindo o novo hipervisor licenciado pelo BSD, bhyve.

  • Netflix - O appliance OpenConnect que a Netflix usa para transmitir filmes para seus clientes é baseado no FreeBSD. A Netflix fez extensas contribuições para a base de código e trabalha para manter um delta zero a partir do FreeBSD mainline. Os appliances Netflix OpenConnect são responsáveis por entregar mais de 32% de todo o tráfego de Internet na América do Norte.

  • Sandvine - A Sandvine usa o FreeBSD como base de suas plataformas de processamento de rede em tempo real de alto desempenho que compõem seus produtos inteligentes de controle de política de rede.

  • Sony - O console de videogame PlayStation 4 executa uma versão modificada do FreeBSD.

  • Sophos - O produto Sophos Email Appliance é baseado em uma versão modificada (hardened) do FreeBSD e varre as mensagens de entrada em busca por spam e vírus, ao mesmo tempo em que monitora as mensagens de saída quanto a malware, bem como a perda acidental de informações confidenciais.

  • Spectra Logic - A linha nTier de dispositivos de armazenamento de dados de arquivamento executa o FreeBSD e o OpenZFS.

  • Stormshield - Os dispositivos Stormshield Network Security são baseados em uma versão modificada do FreeBSD. A licença BSD permite que eles integrem sua própria propriedade intelectual ao sistema enquanto retornam uma grande quantidade de desenvolvimento interessante para a comunidade.

  • The Weather Channel - O appliance IntelliStar que é instalado na central de cada provedor de cabo local e é responsável por injetar previsões meteorológicas locais na programação da rede de TV a cabo, executa o FreeBSD.

  • Verisign - A Verisign é responsável por operar os registros de domínio raiz .com e .net, bem como a infra-estrutura de DNS que a acompanha. Eles contam com diversos sistemas operacionais de rede, incluindo o FreeBSD, para garantir que não haja um ponto comum de falha em sua infraestrutura.

  • Voxer - A Voxer suporta sua plataforma de mensagem de voz móvel com o ZFS no FreeBSD. A Voxer mudou de um derivativo do Solaris para o FreeBSD por causa da sua documentação superior, comunidade maior e mais ativa e ao ambiente mais favorável ao desenvolvedor. Além de recursos críticos como o ZFS e o DTrace, o FreeBSD também oferece suporte a TRIM no ZFS.

  • Fudo Security - O dispositivo de segurança FUDO permite que as empresas monitorem, controlem, registrem e façam auditoria de contratados e administradores que trabalham em seus sistemas. Baseado em todos os melhores recursos de segurança do FreeBSD, incluindo ZFS, GELI, Capsicum, HAST e auditdistd.

O FreeBSD também gerou vários projetos de código aberto relacionados:

  • BSD Router - Um substituto baseado em FreeBSD para grandes roteadores corporativos projetados para rodar em hardware PC padrão.

  • FreeNAS - Um FreeBSD personalizado projetado para ser usado como um dispositivo de servidor de arquivos de rede. Fornece uma interface web baseada em Python para simplificar o gerenciamento dos sistemas de arquivos UFS e ZFS. Inclui suporte para NFS, SMB/CIFS, AFP, FTP e iSCSI. Inclui um sistema extensível de plugins baseado em jails do FreeBSD.

  • GhostBSD - é derivado do FreeBSD, usa o ambiente GTK para fornecer uma aparência bonita e uma experiência confortável na moderna plataforma BSD, oferecendo um ambiente de trabalho natural e nativo UNIX™.

  • mfsBSD - Um kit de ferramentas para compilar uma imagem do sistema FreeBSD que roda inteiramente da memória.

  • NAS4Free - Uma distribuição de servidor de arquivos baseada no FreeBSD com uma interface web PHP.

  • OPNSense - OPNsense é um firewall e uma plataforma de roteamento open source, baseado em FreeBSD, fácil-de-usar e fácil-de-compilar. O OPNsense inclui a maioria dos recursos disponíveis em firewalls comerciais caros e, em muitos casos, muito mais. Ele traz o rico conjunto de recursos de ofertas comerciais com os benefícios de códigos fonte abertos e verificáveis.

  • TrueOS - O TrueOS é baseado na lendária segurança e estabilidade do FreeBSD. O TrueOS segue o FreeBSD-CURRENT, com os drivers, atualizações de segurança e pacotes mais recentes disponíveis.

  • FuryBSD - é um desktop FreeBSD de código aberto novinho em folha. O FuryBSD presta homenagem aos projetos de BSD de desktop do passado, como PC-BSD e TrueOS com sua interface gráfica e adiciona ferramentas adicionais, como uma imagem live USB/DVD híbrida. O FuryBSD é totalmente gratuito para uso e distribuído sob a licença BSD.

  • MidnightBSD - é um sistema operacional derivado do FreeBSD desenvolvido com usuários de desktop em mente. Inclui todo o software que você esperaria para suas tarefas diárias: email, navegação web, processamento de texto, jogos e muito mais.

  • pfSense - Uma distribuição de firewall baseada no FreeBSD com uma enorme variedade de recursos e amplo suporte a IPv6.

  • ZRouter - Um firmware alternativo de código aberto para dispositivos embarcados baseado no FreeBSD. Projetado para substituir o firmware proprietário em roteadores prontos para uso.

Uma lista de depoimentos de empresas que baseiam seus produtos e serviços no FreeBSD pode ser encontrada no site da Fundação FreeBSD. A Wikipedia também mantém uma lista de produtos baseados no FreeBSD.

1.3. Sobre o Projeto FreeBSD

A seção a seguir fornece algumas informações básicas sobre o projeto, incluindo um breve histórico, metas do projeto e o modelo de desenvolvimento do projeto.

1.3.1. Uma Breve História do FreeBSD

O Projeto FreeBSD teve sua gênese no início de 1993, parcialmente como uma evolução natural do Unofficial 386BSD Patchkit por parte dos três últimos coordenadores: Nate Williams, Rod Grimes e Jordan Hubbard.

O objetivo original era produzir um snapshot intermediário do 386BSD, a fim de corrigir um grande número de problemas que o mecanismo do patchkit simplesmente não era capaz de resolver. O título inicial do projeto foi 386BSD 0.5 ou 386BSD Interim em referência a esse fato.

O 386BSD era o sistema operacional do Bill Jolitz, que havia até então sofrido bastante com quase um ano de negligência. Como o patchkit inchava cada vez mais desconfortavelmente a cada dia que passava, eles decidiram ajudar o Bill fornecendo este snapshot "limpo". Esses planos foram interrompidos quando, de repente, Bill Jolitz decidiu retirar sua sanção do projeto sem qualquer indicação clara do que seria feito em seu lugar.

O trio achou que a meta continuava valendo a pena, mesmo sem o apoio de Bill, e então adotaram o nome "FreeBSD" cunhado por David Greenman. Os objetivos iniciais foram definidos após consultar os usuários atuais do sistema e, uma vez que ficou claro que o projeto estava em vias de se tornar realidade, Jordan entrou em contato com a Walnut Creek CDROM com o objetivo de melhorar os canais de distribuição do FreeBSD para aqueles desafortunados sem acesso fácil à Internet. O Walnut Creek CDROM não apenas apoiou a ideia de distribuir o FreeBSD em CD, mas também chegou a fornecer ao projeto uma máquina para trabalhar e uma conexão rápida à Internet. Sem o grau de fé quase sem precedentes da Walnut Creek CDROM no que era, na época, um projeto completamente desconhecido, é bastante improvável que o FreeBSD tivesse chegado tão longe, tão rápido, como hoje.

A primeira distribuição em CD-ROM (e amplo pela rede) foi o FreeBSD 1.0, lançado em dezembro de 1993. Isto foi baseado na fita 4.3BSD-Lite ("Net/2") da U.C. Berkeley, com muitos componentes também fornecidos pelo 386BSD e pela Free Software Foundation. Foi um sucesso bastante razoável para uma primeira oferta, e e eles seguiram com o bem-sucedido FreeBSD 1.1 em maio de 1994.

Por esta altura, algumas nuvens de tempestade inesperadas formaram-se no horizonte, como a Novell e U.C. Berkeley resolveram seu longo processo judicial sobre o status legal da fita do Berkeley Net/2. Uma condição desse acordo foi a concessão da U.C. Berkeley de que grande parte do código Net/2 foi "onerado" e era de propriedade da Novell, que por sua vez o adquiriu da AT&T algum tempo antes. O que a Berkeley recebeu em troca foi a "bênção" da Novell de que o lançamento do 4.4BSD-Lite, quando finalmente fosse lançado, seria declarado livre e todos os atuais usuários do Net/2 seriam fortemente encorajados a mudar. Isso incluiu o FreeBSD, e foi dado ao projeto o tempo para interromper o envio de seu próprio produto baseado em Net/2 até o final de julho de 1994. Sob os termos desse acordo, o projeto recebeu um último lançamento antes do prazo final, sendo esse lançamento o FreeBSD 1.1.5.1.

O FreeBSD então começou a tarefa árdua de literalmente se reinventar de um conjunto completamente novo e incompleto de bits do 4.4BSD-Lite. As versões "Lite" foram leves em parte porque o CSRG da Berkeley removeu grandes pedaços de código necessários para realmente compilar um sistema inicializável (devido a vários requisitos legais) e o fato de que a port Intel do 4.4 era altamente incompleto. O projeto levou até novembro de 1994 para fazer essa transição, e em dezembro lançou o FreeBSD 2.0 para o mundo. Apesar de ainda ser um pouco mais difícil, o lançamento foi um sucesso significativo e foi seguido pela versão mais robusta e fácil de instalar o FreeBSD 2.0.5 em junho de 1995.

Desde aquela época, o FreeBSD fez uma série de lançamentos cada vez melhorando a estabilidade, a velocidade e o conjunto de recursos da versão anterior.

Por enquanto, os projetos de desenvolvimento de longo prazo continuam a ocorrer no ramo 10.X-CURRENT (trunk), e os snapshots de release 10.X são continuamente disponibilizados a partir do servidor de snapshots à medida que o trabalho progride.

1.3.2. Objetivos do Projeto FreeBSD

Os objetivos do Projeto FreeBSD são fornecer software que possa ser usado para qualquer propósito e sem amarras. Muitos de nós temos um investimento significativo no código (e projeto) e certamente não nos importaríamos com uma pequena compensação financeira de vez em quando, mas definitivamente não estamos preparados para insistir nisso. Acreditamos que a nossa primeira e principal "missão" é fornecer código a todos os participantes, e para qualquer finalidade, para que o código obtenha o maior uso possível e forneça o maior benefício possível. Este é, acredito, um dos objetivos mais fundamentais do Software Livre e um dos que apoiamos entusiasticamente.

O código em nossa árvore de código-fonte que se enquadra na GNU General Public License (GPL) ou na Library General Public License (LGPL) vem com um pouco mais de amarras, embora pelo menos do lado do acesso imposto, em vez do oposto usual. Devido às complexidades adicionais que podem evoluir no uso comercial de software GPL, no entanto, preferimos software submetido sob licença BSD quando é uma opção razoável fazê-lo.

1.3.3. O Modelo de Desenvolvimento do FreeBSD

O desenvolvimento do FreeBSD é um processo muito aberto e flexível, sendo construído literalmente a partir das contribuições de milhares de pessoas ao redor do mundo, como pode ser visto na nossa lista de contribuidores. A infraestrutura de desenvolvimento do FreeBSD permite que milhares de colaboradores colaborem pela Internet. Estamos constantemente à procura de novos desenvolvedores e ideias, e os interessados em se envolver mais estreitamente com o projeto precisam simplesmente entrar em contato conosco pelas lista de discussões técnicas do FreeBSD. A lista de discussão de anúncios do FreeBSD também está disponível para aqueles que desejam fazer com que outros usuários do FreeBSD conheçam as principais áreas de trabalho.

Coisas úteis para saber sobre o Projeto FreeBSD e seu processo de desenvolvimento, seja trabalhando independentemente ou em estreita cooperação:

Os repositórios SVN

Por vários anos, a árvore de código-fonte central do FreeBSD foi mantida pelo CVS (Concurrent Versions Systems), uma ferramenta de controle de código-fonte disponível gratuitamente. Em junho de 2008, o Projeto mudou para o SVN (Subversion). A troca foi considerada necessária, pois as limitações técnicas impostas pelo CVS estavam se tornando óbvias devido à rápida expansão da árvore de código-fonte e à quantidade de histórico já armazenada. Os repositórios do Projeto de Documentação e da Coleção de Ports também foram movidos do CVS para o SVN em maio de 2012 e julho de 2012, respectivamente. Por favor, consulte a seção Atualizando o código fonte para maiores informações sobre como obter o repositório src/ do FreeBSD e Usando a Coleção de Ports para detalhes sobre como obter a coleção de ports do FreeBSD.

A lista de committers

Os committers são as pessoas que têm acesso de escrita na árvore do Subversion, e estão autorizados a fazer modificações no código fonte do FreeBSD (o termo "committer" vem de commit, o comando de controle de código-fonte que é usado para trazer novas mudanças para o repositório). Qualquer um pode enviar um relatório de bug para o Banco de Dados de Bugs. Antes de enviar um relatório de bug, as listas de discussão, canais de IRC ou fóruns do FreeBSD podem ser usados para ajudar a verificar se um problema é realmente um bug.

O FreeBSD core team

O FreeBSD core team seria equivalente a um conselho de diretores se o Projeto FreeBSD fosse uma empresa. A principal tarefa do core team é garantir que o projeto, como um todo, esteja saudável e seguindo na direção certa. Convidar desenvolvedores dedicados e responsáveis a ingressar em nosso grupo de committers é uma das funções do core team, assim como o recrutamento de novos membros do core team à medida que os outros saiam. O core team atual foi eleito a partir de um grupo de committers candidatos em junho de 2020. As eleições são realizadas a cada dois anos.

Como a maioria dos desenvolvedores, a maioria dos membros do core team também são voluntários quando se trata de desenvolvimento do FreeBSD e não se beneficiam financeiramente do projeto, então o "compromisso" também não deve ser interpretado erroneamente como significando "suporte garantido". A analogia do "quadro de diretores" da diretriz acima não é muito precisa, e pode ser mais apropriado dizer que estas são as pessoas que deram suas vidas em favor do FreeBSD contra o seu melhor julgamento!

Contribuidores externos

Por último, mas definitivamente não menos importante, o maior grupo de desenvolvedores são os próprios usuários que fornecem feedback e correções de bugs para nós em uma base quase constante. A principal maneira de manter contato com o desenvolvimento não-centralizado do FreeBSD é inscrever-se nas listas de discussões técnicas sobre o FreeBSD onde essas coisas são discutidas. Veja Recursos na Internet para maiores informações sobre as várias listas de discussão do FreeBSD.

A Lista de Colaboradores do FreeBSD é extensa e crescente, então por que não se juntar a ela contribuindo com algo para o FreeBSD hoje?

Fornecer código não é a única maneira de contribuir para o projeto; para uma lista mais completa de coisas que precisam ser feitas, por favor consulte o web site do Projeto FreeBSD.

Em resumo, nosso modelo de desenvolvimento é organizado como um conjunto solto de círculos concêntricos. O modelo centralizado é projetado para a conveniência dos usuários do FreeBSD, que são providos com uma maneira fácil de rastrear uma base de código central, e não para manter potenciais colaboradores fora! Nosso desejo é apresentar um sistema operacional estável com um grande conjunto de aplicações coerentes que os usuários possam facilmente instalar e usar - este modelo funciona muito bem em realizar isso.

Tudo o que pedimos para aqueles que se juntarem a nós como desenvolvedores do FreeBSD é a mesma dedicação que o pessoal atual tem para o seu sucesso contínuo!

1.3.4. Programas de Terceiros

Além das distribuições básicas, o FreeBSD oferece uma coleção de software portada com milhares de programas comumente procurados. No momento da redação deste texto, havia mais de 24.000 ports! A lista de ports varia de servidores http, a jogos, linguagens, editores e quase tudo no meio. Toda a coleção de ports requer aproximadamente 500 MB. Para compilar um port, simplesmente mude para o diretório do programa que você deseja instalar, digite make install e deixe o sistema fazer o resto. A distribuição original completa para cada port que você cria é baixada dinamicamente, para que você precise apenas de espaço em disco suficiente para compilar os ports desejados. Quase todos os ports também são fornecidos como um pacote "pré-compilado", que pode ser instalado com um comando simples (pkg install) por aqueles que não desejam compilar seus próprios ports pelo código fonte. Maiores informações sobre pacotes e ports podem ser encontradas em Instalando Aplicativos. Pacotes e Ports.

1.3.5. Documentação Adicional

Todas as versões suportadas do FreeBSD fornecem uma opção no instalador para instalar documentação adicional em /usr/local/shar/doc/freebsd durante a configuração inicial do sistema. A documentação também pode ser instalada posteriormente, usando os pacotes descritos em Atualizando a documentação a partir do ports. Você pode ver os manuais instalados localmente com qualquer navegador compatível com HTML usando as seguintes URLs:

Você também pode visualizar as cópias principais (e atualizadas com mais frequência) em https://www.FreeBSD.org/.

Capítulo 2. Instalando o FreeBSD

2.1. Sinopse

Existem diversos modos diferentes de colocar o FreeBSD para rodar, dependendo do ambiente. São eles:

  • Imagens de Máquinas Virtuais, para baixar e importar em um ambiente virtual da sua escolha. Elas podem ser baixadas da página de Download do FreeBSD. Existem imagens para KVM ("qcow2"), VMWare ("vmdk"), Hyper-V ("vhd") e imagens de dispositivos brutos (raw device) que são universalmente suportadas . Estas não são imagens de instalação, mas sim as instâncias pré-configuradas ("já instaladas"), prontas para executar e realizar tarefas de pós-instalação.

  • Imagens de máquinas virtuais disponíveis no AWS Marketplace, no Microsoft Azure Marketplace, e na Plataforma Google Cloud, para executar em seus respectivos serviços de hospedagem. Para obter maiores informações sobre como implantar o FreeBSD no Azure, consulte o capítulo relevante na Documentação do Azure.

  • Imagens de cartão SD, para sistemas embarcados, como Raspberry Pi ou BeagleBone Black. Eles podem ser baixados da página de Download do FreeBSD. Esses arquivos devem ser descompactados e gravados como uma imagem bruta para um cartão SD, a partir do qual a placa será inicializada.

  • Imagens de instalação, para instalar o FreeBSD no disco rígido de um desktop padrão, laptop ou servidor.

O resto deste capítulo descreve o quarto caso, explicando como instalar o FreeBSD usando o programa de instalação baseado em texto chamado bsdinstall.

Em geral, as instruções de instalação neste capítulo foram escritas para as arquiteturas i386™ e AMD64. Onde aplicável, instruções específicas para outras plataformas serão listadas. Pode haver pequenas diferenças entre o instalador e o que é mostrado aqui, portanto, use este capítulo como um guia geral, e não como um conjunto de instruções literais.

Usuários que preferem instalar o FreeBSD usando uma instaldor gráfico talvez possam se interessar no FuryBSD, GhostBSD ou MidnightBSD.

Depois de ler este capítulo, você saberá:

  • Quais os requisitos mínimos de hardware e as arquiteturas suportadas pelo FreeBSD.

  • Como criar a mídia de instalação do FreeBSD.

  • Como iniciar o bsdinstall.

  • As perguntas que o bsdinstall fará, o que elas significam e como respondê-las.

  • Como solucionar problemas de uma instalação com falha.

  • Como acessar uma versão live do FreeBSD antes de se comprometer com uma instalação.

Antes de ler este capítulo, você deve:

  • Ler a lista de hardware suportado que acompanha a versão do FreeBSD que será instalada e verificar se o hardware do sistema é suportado.

2.2. Requisitos mínimos de hardware

Os requisitos de hardware para instalar o FreeBSD variam por arquitetura. Arquiteturas de hardware e dispositivos suportados por uma release do FreeBSD estão listados na página Informação de Release do FreeBSD. A página de download do FreeBSD também tem recomendações para escolha a imagem correta para as diferentes arquiteturas.

Uma instalação do FreeBSD requer um mínimo de 96 MB de RAM e 1,5 GB de espaço livre no disco rígido. No entanto, essas pequenas quantidades de memória e espaço em disco são realmente adequadas apenas para aplicativos personalizados, como dispositivos embarcados. Os sistemas de desktop de uso geral precisam de mais recursos. De 2 a 4 GB de RAM e pelo menos 8 GB de espaço no disco rígido é um bom ponto de partida.

Estes são os requisitos do processador para cada arquitetura:

amd64

Esse é o tipo de processador de desktop e laptop mais comum, usado na maioria dos sistemas modernos. A Intel ™ chama ele de Intel64. Outros fabricantes às vezes o chamam de x86-64.

Exemplos de processadores compatíveis com AMD64 incluem: AMD Athlon™ 64, AMD Opteron™, multi-core Intel™Xeon™ e processadores Intel™Core™ 2 e posteriores.

i386

Desktops e laptops mais antigos geralmente usam essa arquitetura x86 de 32 bits.

Quase todos os processadores compatíveis com i386 com uma unidade de ponto flutuante são suportados. Todos os processadores Intel™ 486 ou superior são suportados.

O FreeBSD irá aproveitar o suporte a Extensões de Endereços Físicos (PAE) em CPUs com este recurso. Um kernel com o recurso PAE ativado detectará memória acima de 4 GB e permitirá que ela seja usada pelo sistema. No entanto, o uso do PAE coloca restrições em drivers de dispositivos e outros recursos do FreeBSD.

powerpc

Todos os sistemas New World ROMApple™Mac™ com USB incorporados são suportados. O SMP é suportado em máquinas com vários CPUs.

Um kernel de 32 bits só pode usar os primeiros 2 GB de RAM.

sparc64

Os sistemas suportados pelo FreeBSD/sparc64 estão listados no Projeto FreeBSD/sparc64.

O SMP é suportado em todos os sistemas com mais de 1 processador. Um disco dedicado é necessário, pois não é possível compartilhar um disco com outro sistema operacional neste momento.

2.3. Tarefas de Pré-instalação

Uma vez determinado que o sistema atende aos requisitos mínimos de hardware para instalar o FreeBSD, o arquivo de instalação deve ser baixado e a mídia de instalação preparada. Antes de fazer isso, verifique se o sistema está pronto para uma instalação, verificando os itens nesta lista de controle:

  1. Faça backup dos dados importantes

    Antes de instalar qualquer sistema operacional, sempre faça backup de todos os dados importantes primeiro. Não armazene o backup no sistema que está sendo instalado. Em vez disso, salve os dados em um disco removível, como uma unidade USB, outro sistema na rede ou um serviço de backup online. Teste o backup antes de iniciar a instalação para garantir que ele contenha todos os arquivos necessários. Depois que o instalador formatar o disco do sistema, todos os dados armazenados nesse disco serão perdidos.

  2. Decida onde instalar o FreeBSD

    Se o FreeBSD for o único sistema operacional instalado, esta etapa pode ser ignorada. Mas se o FreeBSD compartilhar o disco com outro sistema operacional, decida qual disco ou partição será usado para o FreeBSD.

    Nas arquiteturas i386 e amd64, os discos podem ser divididos em várias partições usando um dos dois esquemas de particionamento. Um registro de inicialização mestre tradicional (MBR) contém uma tabela de partição que define até quatro partições primárias. Por razões históricas, o FreeBSD chama essas partições primárias de slices. Uma dessas partições primárias pode ser transformada em uma partição estendida contendo várias partições lógicas. A Tabela de Partição GUID (GPT) é um método mais novo e mais simples de particionar um disco. Implementações comuns de GPT permitem até 128 partições por disco, eliminando a necessidade de partições lógicas.

    O boot loader do FreeBSD requer uma partição primária ou GPT. Se todas as partições primárias ou GPT já estiverem em uso, uma deve ser liberada para o FreeBSD. Para criar uma partição sem excluir dados existentes, use uma ferramenta de redimensionamento de partição para reduzir uma partição existente e criar uma nova partição usando o espaço liberado.

    Uma variedade de ferramentas de redimensionamento de partições comerciais e gratuitas estão listadas em http://en.wikipedia.org/wiki/List_of_disk_partitioning_software. O GParted Live (http://gparted.sourceforge.net/livecd.php) é um live CD que inclui o editor de partições GParted. O GParted também está incluído em muitas outras distribuições live CD do Linux.

    Quando usados corretamente, os utilitários de encolhimento de disco podem criar espaço com segurança para criar uma nova partição. Como existe a possibilidade de selecionar a partição errada, sempre faça backup de todos os dados importantes e verifique a integridade do backup antes de modificar as partições do disco.

    Partições de disco contendo diferentes sistemas operacionais tornam possível instalar vários sistemas operacionais em um computador. Uma alternativa é usar virtualização (Virtualização) o que permite que vários sistemas operacionais sejam executados ao mesmo tempo sem modificar nenhuma partição de disco.

  3. Colete informações de rede

    Alguns métodos de instalação do FreeBSD requerem uma conexão de rede para baixar os arquivos de instalação. Após qualquer instalação, o instalador oferecerá a configuração das interfaces de rede do sistema.

    Se a rede tiver um servidor DHCP, ele poderá ser usado para fornecer configuração de rede automática. Se o DHCP não estiver disponível, as seguintes informações de rede para o sistema devem ser obtidas com o administrador de rede local ou com o provedor de serviços de Internet:

    1. Endereço IP

    2. Máscara de sub-rede

    3. Endereço do IP do gateway padrão

    4. Nome de domínio da rede

    5. Endereços IP dos servidores DNS da rede

  4. Verifique a Errata do FreeBSD

    Embora o Projeto FreeBSD se esforce para garantir que cada versão do FreeBSD seja o mais estável possível, ocasionalmente, os bugs aparecem no processo. Em raras ocasiões, esses erros afetam o processo de instalação. A medida que esses problemas são descobertos e corrigidos, eles são anotados na Errata do FreeBSD (https://www.freebsd.org/releases/12.1R/errata/) no site do FreeBSD. Verifique a errata antes de instalar para certificar-se de que não existem problemas que possam afetar a instalação.

    Informações e erratas para todos os releases podem ser encontradas na seção de informações de release do site do FreeBSD (https://www.freebsd.org /releases/).

2.3.1. Prepare a mídia de instalação

O instalador do FreeBSD não é um aplicativo que pode ser executado dentro de outro sistema operacional. Em vez disso, baixe um arquivo de instalação do FreeBSD, grave-o na mídia associada ao seu tipo e tamanho (CD, DVD, ou USB), e inicialize o sistema para instalar a partir da mídia inserida.

Os arquivos de instalação do FreeBSD estão disponíveis em www.freebsd.org/where/. O nome de cada arquivo de instalação inclui a versão de Release do FreeBSD, a arquitetura e o tipo de arquivo. Por exemplo, para instalar o FreeBSD 12.1 em um sistema amd64 de um DVD, baixe o FreeBSD-12.1-RELEASE-amd64-dvd1.iso, grave este arquivo em um DVD, e inicialize o sistema com o DVD inserido.

Os arquivos de instalação estão disponíveis em vários formatos. Os formatos variam dependendo da arquitetura do computador e do tipo de mídia.

Arquivos de instalação adicionais são incluídos para computadores que inicializam com UEFI (Interface de Firmware Extensível Unificada). Os nomes desses arquivos incluem a string uefi.

Tipos de arquivo:

  • -bootonly.iso: Este é o menor arquivo de instalação, pois contém apenas o instalador. É necessária uma conexão de Internet em funcionamento durante a instalação, pois o instalador fará o download dos arquivos necessários para concluir a instalação do FreeBSD. Este arquivo deve ser gravado em um CD usando um aplicativo de gravação CD.

  • -disc1.iso: Este arquivo contém todos os arquivos necessários para instalar o FreeBSD, seu código-fonte e a coleção de ports. Ele deve ser gravado em um CD usando um aplicativo de gravação CD.

  • -dvd1.iso: Este arquivo contém todos os arquivos necessários para instalar o FreeBSD, seu código-fonte e a coleção de ports. Ele também contém um conjunto de pacotes binários populares para instalar um gerenciador de janelas e alguns aplicativos para que um sistema completo possa ser instalado a partir da mídia sem a necessidade de uma conexão com a Internet. Este arquivo deve ser gravado em um DVD usando um aplicativo de gravação DVD.

  • -memstick.img: Este arquivo contém todos os arquivos necessários para instalar o FreeBSD, seu código-fonte e a coleção de ports. Ele deve ser gravado em um pendrive USB usando as instruções abaixo.

  • -mini-memstick.img: Como ` -bootonly.iso `, não inclui arquivos de instalação, mas faz o download conforme necessário. É necessária uma conexão de internet em funcionamento durante a instalação. Grave este arquivo para um pendrive USB como mostrado em Gravando um arquivo de imagem para um pendrive USB.

Depois de baixar o arquivo de imagem, baixe o CHECKSUM.SHA256 do mesmo diretório. Calcule o checksum para o arquivo de imagem. O FreeBSD fornece o sha256(1) para isso, usado como sha256 imagefilename. Outros sistemas operacionais possuem programas semelhantes.

Compare o checksum calculado com a mostrado em CHECKSUM.SHA256. Os checksum devem corresponder exatamente. Se os checksums não corresponderem, o arquivo de imagem está corrompido e deve ser baixado novamente.

2.3.1.1. Gravando um arquivo de imagem para um pendrive USB

O arquivo *. Img é uma imagem do conteúdo completo de um cartão de memória. Ele não pode ser copiado para o dispositivo de destino como um arquivo. Várias aplicações estão disponíveis para escrever o *. Img para um pendrive USB. Esta seção descreve dois destes utilitários.

Antes de continuar, faça backup de todos os dados importantes do pendrive USB. Este procedimento irá apagar todos os dados existentes no mesmo.

Procedure: Usando o dd para gravar a imagem

Este exemplo usa /dev/da0 como o dispositivo de destino em que a imagem será gravada. Seja muito cuidadoso para que o dispositivo correto seja usado, pois esse comando destruirá os dados existentes no dispositivo de destino especificado.

  1. O utilitário de linha de comando dd(1) está disponível no BSD, no Linux™ e no Mac OS™. Para gravar a imagem usando o dd, insira o pendrive USB e determine o nome do dispositivo. Em seguida, especifique o nome do arquivo de instalação baixado e o nome do dispositivo para o pendrive USB. Este exemplo grava a imagem de instalação amd64 no primeiro dispositivo USB em um sistema FreeBSD existente.

    # dd if=FreeBSD-12.1-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync

    Se este comando falhar, verifique se o pendrive USB não está montado e se o nome do dispositivo aponta para o disco, não para uma partição. Alguns sistemas operacionais podem requerer que este comando seja executado com o sudo(8). A sintaxe do dd(1) varia ligeiramente em diferentes plataformas; por exemplo, o Mac OS™ requer um bs=1m em minúsculas. Sistemas como o Linux™ podem gravar em buffer. Para forçar todas as gravações a serem concluídas, use o comando sync(8).

Procedure: Usando o Windows™ para gravar a imagem

Certifique-se de fornecer a letra da unidade correta, pois os dados existentes na unidade especificada serão sobrescritos e destruídos.

  1. Obtendo o Image Writer para Windows™

    O Image Writer para Windows™ é um aplicativo gratuito que pode gravar corretamente um arquivo de imagem em um cartão de memória. Faça o download a partir de https://sourceforge.net/projects/win32diskimager/ e extraia-o em uma pasta.

  2. Escrevendo a imagem com o Image Writer

    Clique duas vezes no ícone Win32DiskImager para iniciar o programa. Verifique se a letra da unidade mostrada em Device é a unidade com o cartão de memória. Clique no ícone da pasta e selecione a imagem a ser gravada no cartão de memória. Clique em Save para aceitar o nome do arquivo de imagem. Verifique se tudo está correto e se nenhuma pasta do cartão de memória está aberta em outras janelas. Quando tudo estiver pronto, clique em Write para gravar o arquivo de imagem no cartão de memória.

Agora você está pronto para começar a instalar o FreeBSD.

2.4. Iniciando a instalação

Por padrão, a instalação não fará alterações no(s) disco(s) antes da seguinte mensagem:

Your changes will now be written to disk. If you
have chosen to overwrite existing data, it will
be PERMANENTLY ERASED. Are you sure you want to
commit your changes?

A instalação pode ser encerrada a qualquer momento antes deste aviso. Se houver uma preocupação de que algo esteja configurado incorretamente, basta desligar o computador antes desse ponto e nenhuma alteração será feita nos discos do sistema.

Esta seção descreve como inicializar o sistema a partir da mídia de instalação que foi preparada usando as instruções em Prepare a mídia de instalação. Ao usar um dispositivo USB inicializável, conecte o dispositivo USB antes de ligar o computador. Ao inicializar a partir do CD ou do DVD, ligue o computador e insira a mídia na primeira oportunidade. O procedimento para configurar o sistema para inicializar a partir da mídia inserida depende da arquitetura.

2.4.1. Inicializando em i386™ e amd64

Estas arquiteturas fornecem um menu BIOS para selecionar o dispositivo de inicialização. Dependendo da mídia de instalação usada, selecione o dispositivo de CD/DVD ou o USB como o primeiro dispositivo de inicialização. A maioria dos sistemas também fornece uma chave para selecionar o dispositivo durante a inicialização sem ter que entrar no BIOS. Normalmente, a chave é F10, F11, F12 ou Escape.

Se o computador carregar o sistema operacional existente em vez do instalador do FreeBSD, então:

  1. A mídia de instalação não foi inserida cedo o suficiente no processo de inicialização. Deixe a mídia inserida e tente reiniciar o computador.

  2. As alterações do BIOS estavam incorretas ou não foram salvas. Verifique novamente se o dispositivo de inicialização correto está selecionado como o primeiro dispositivo de inicialização.

  3. Este sistema é muito antigo para suportar a inicialização a partir da mídia escolhida. Neste caso, o Plop Boot Manager (http://www.plop.at/en/bootmanagers.html) pode ser usado para inicializar o sistema a partir da mídia selecionada.

2.4.2. Inicializando no PowerPC™

Na maioria das máquinas, manter pressionado o C no teclado durante a inicialização irá inicializar a partir do CD. Caso contrário, mantenha pressionados Command+Option+O+F, ou Windows+Alt+O+F em teclados não-Apple™. No prompt 0 >, digite

 boot cd:,\ppc\loader cd:0

2.4.3. Menu de inicialização do FreeBSD

Quando o sistema inicializar a partir da mídia de instalação, um menu semelhante ao seguinte será exibido:

bsdinstall newboot loader menu
Figura 1. Menu do FreeBSD Boot Loader

Por padrão, o menu irá esperar dez segundos por uma ação do usuário antes de inicializar no instalador do FreeBSD ou, se o FreeBSD já estiver instalado, antes de inicializar no FreeBSD. Para pausar o cronômetro de inicialização para rever as seleções, pressione Espaço. Para selecionar uma opção, pressione seu número, caractere ou tecla destacada. As seguintes opções estão disponíveis.

  • Boot Multi User: Isto irá continuar o processo de inicialização do FreeBSD. Se o temporizador de boot tiver sido pausado, pressione 1, B maiúsculo ou minúsculo ou Enter.

  • Boot Single User: Este modo pode ser usado para corrigir uma instalação existente do FreeBSD como descrito em Modo Single-User. Pressione 2 ou S maiúsculo ou minúsculo para entrar neste modo.

  • Escape to loader prompt: Isso inicializará o sistema em um prompt de reparo que contém um número limitado de comandos de baixo nível. Este prompt é descrito em Estágio três. Pressione 3 ou Esc para inicializar neste prompt.

  • Reboot: Reinicia o sistema.

  • Kernel: Carrega um kernel diferente.

  • Configure Boot Options: Abre o menu mostrado e descrito em Menu de Opções de Inicialização do FreeBSD.

bsdinstall boot options menu
Figura 2. Menu de Opções de Inicialização do FreeBSD

O menu de opções de inicialização é dividido em duas seções. A primeira seção pode ser usada para retornar ao menu de inicialização principal ou para redefinir quaisquer opções que tenham sido alteradas de volta para seus valores padrões.

A próxima seção é usada para alternar as opções disponíveis para On ou Off pressionando o número ou caractere realçado da opção. O sistema sempre inicializará usando as configurações dessas opções até serem modificadas. Várias opções podem ser alternadas usando este menu:

  • ACPI Support: Se o sistema travar durante a inicialização, tente alternar essa opção para Off.

  • Safe Mode: Se o sistema ainda travar durante a inicialização, mesmo com Suporte a ACPI definido como Off, tente definir esta opção como On.

  • Single User: Alterne esta opção para On para corrigir uma instalação existente do FreeBSD como descrito em Modo Single-User. Depois que o problema for corrigido, configure-o de volta para Off.

  • Verbose: Alterne esta opção para On para ver mensagens mais detalhadas durante o processo de inicialização. Isso pode ser útil ao solucionar problemas de hardware.

Depois de fazer as seleções necessárias, pressione 1 ou Backspace para retornar ao menu de boot principal, então pressione Enter para continuar a inicialização no FreeBSD. Uma série de mensagens de inicialização irão aparecer enquanto o FreeBSD executa seus testes de dispositivos de hardware e carrega o programa de instalação. Quando a inicialização estiver concluída, o menu de boas-vindas mostrado em Menu de boas-vindas será exibido.

bsdinstall choose mode
Figura 3. Menu de boas-vindas

Pressione Enter para selecionar o padrão de Install para entrar no instalador. O restante deste capítulo descreve como usar este instalador. Caso contrário, use as setas para a direita ou para a esquerda ou a letra colorida para selecionar o item de menu desejado. A opção Shell pode ser usada para acessar um shell do FreeBSD, a fim de usar utilitários de linha de comando para preparar os discos antes da instalação. A opção Live CD pode ser usada para testar o FreeBSD antes de instalá-lo. A versão live é descrita em Usando o Live CD.

Para revisar as mensagens de inicialização, incluindo o probe do dispositivo de hardware, pressione a tecla S maiúscula ou minúscula e, em seguida, Enter para acessar um shell. No prompt do shell, digite more /var/run/dmesg.boot e use a barra de espaço para rolar pelas mensagens. Quando terminar, digite exit para retornar ao menu de boas-vindas.

2.5. Usando o bsdinstall

Esta seção mostra a ordem dos menus do bsdinstall e o tipo de informação que será solicitada antes que o sistema seja instalado. Use as teclas de seta para realçar uma opção de menu e, em seguida, a barra de Espaço para selecionar ou desmarcar esse item de menu. Quando terminar, pressione Enter para salvar a seleção e passar para a próxima tela.

2.5.1. Selecionando o menu do Keymap (Mapa de teclas)

Antes de iniciar o processo, o bsdinstall carregará os arquivos de keymap como mostrado em Carregamento de Keymap.

bsdinstall keymap loading
Figura 4. Carregamento de Keymap

Após o carregamento dos keymaps, o bsdinstall exibe o menu mostrado em Menu de Seleção do Keymap. Use as setas para cima e para baixo para selecionar o mapa de teclas que mais representa o mapeamento do teclado conectado ao sistema. Pressione Enter para salvar a seleção.

bsdinstall keymap 10
Figura 5. Menu de Seleção do Keymap

Pressionar Esc sairá deste menu e usará o mapa de teclas padrão. Se a escolha do mapa de teclado não for clara, a opção United States of America ISO-8859-1 é uma opção segura.

Além disso, ao selecionar um keymap diferente, o usuário pode testar o keymap e garantir que esteja correto antes de continuar, conforme mostrado em Menu de Teste do Keymap.

bsdinstall keymap testing
Figura 6. Menu de Teste do Keymap

2.5.2. Configurando o nome do host

O próximo menu do bsdinstall é usado para definir o nome do host para o sistema recém-instalado.

bsdinstall config hostname
Figura 7. Configurando o nome do host

Digite um nome de host exclusivo para a rede. Ele deve ser um nome de host totalmente qualificado, como machine3.example.com.

2.5.3. Selecionando Componentes para Instalar

Em seguida, o bsdinstall solicitará a seleção de componentes opcionais para instalação.

bsdinstall config components
Figura 8. Selecionando Componentes para Instalar

Decidir quais componentes instalar dependerá em grande parte do uso pretendido para o sistema e da quantidade de espaço em disco disponível. O kernel do FreeBSD e o userland, coletivamente conhecidos como o sistema base, são sempre instalados. Dependendo da arquitetura, alguns desses componentes podem não aparecer:

  • base-dbg - Ferramentas básicas como cat, ls entre outras com símbolos de depuração ativados.

  • kernel-dbg - Kernel e módulos com símbolos de depuração ativados.

  • lib32-dbg - Bibliotecas de compatibilidade para executar aplicativos de 32 bits em uma versão de 64 bits do FreeBSD com símbolos de depuração ativados.

  • lib32 - Bibliotecas de compatibilidade para executar aplicativos de 32 bits em uma versão de 64 bits do FreeBSD.

  • ports - A Coleção de Ports do FreeBSD é uma coleção de arquivos que automatiza o download, a compilação e a instalação de pacotes de software de terceiros. Instalando Aplicativos: Pacotes e Ports discute como usar a coleção de ports.

    O programa de instalação não verifica o espaço em disco adequado. Selecione esta opção apenas se houver espaço suficiente no disco rígido. A Coleção de Ports do FreeBSD ocupa cerca de 500 MB de espaço em disco.

  • src - O código-fonte completo do FreeBSD para o kernel e para o userland. Embora não seja necessário para a maioria dos aplicativos, pode ser necessário para compilar drivers de dispositivo, módulos do kernel ou alguns aplicativos da Coleção de Ports. Ele também é usado para desenvolver o próprio FreeBSD. A árvore de código-fonte completa requer 1 GB de espaço em disco e a recompilação de todo o sistema FreeBSD requer 5 GB adicionais de espaço.

  • tests - FreeBSD Test Suite.

2.5.4. Instalando a partir da rede

O menu mostrado em Instalando a partir da rede apenas aparece ao instalar a partir de um -bootonly.iso ou -mini-memstick.img pois esta mídia de instalação não possui cópias dos arquivos de instalação. Como os arquivos de instalação devem ser recuperados através de uma conexão de rede, esse menu indica que a interface de rede deve ser configurada primeiro. Se o menu é exibido em qualquer etapa do processo lembre-se de seguir as instruções em Configurando as Interfaces de Rede.

bsdinstall netinstall files
Figura 9. Instalando a partir da rede

2.6. Alocando o espaço em disco

O próximo menu é usado para determinar o método de alocação de espaço em disco. As opções disponíveis no menu dependem da versão do FreeBSD sendo instalada.

bsdinstall zfs partmenu
Figura 10. Opções de Particionamento

bsdinstall fornece ao usuário quatro métodos para alocar espaço em disco:

  • O particionamento Auto (UFS) configura automaticamente as partições do disco usando o sistema de arquivos UFS.

  • O particionamento Manual permite que usuários avançados criem partições personalizadas a partir das opções de menu.

  • Shell abre um prompt de shell no qual usuários avançados podem criar partições personalizadas usando utilitários de linha de comando como gpart(8), fdisk(8), e bsdlabel(8).

  • O particionamento Auto (ZFS) cria um sistema root-on-ZFS com suporte opcional à criptografia GELI para boot environments.

Esta seção descreve o que considerar ao definir as partições de disco. Em seguida, demonstra como usar os diferentes métodos de particionamento.

2.6.1. Criando o layout da partição

Ao criar os sistemas de arquivos, lembre-se de que os discos rígidos transferem dados mais rapidamente das trilhas externas para as internas. Assim, sistemas de arquivos menores e mais acessados devem estar mais próximos da parte externa da unidade, enquanto partições maiores, como /usr, devem ser colocadas em direção às partes internas do disco. É uma boa idéia criar partições em uma ordem similar a: /, swap, /var e /usr.

O tamanho da partição /var reflete o uso pretendido para a máquina. Esta partição é usada para armazenar caixas de correio, arquivos de log e spools de impressora. Caixas de correio e arquivos de log podem crescer até tamanhos inesperados, dependendo do número de usuários e de quanto tempo os arquivos de log são mantidos. Na média, a maioria dos usuários raramente precisa de mais do que cerca de um gigabyte de espaço livre em disco no /var.

Às vezes, é necessário muito espaço em disco no /var/tmp. Quando um novo software é instalado, as ferramentas de empacotamento extraem uma cópia temporária dos pacotes no /var/tmp. Grandes pacotes de software, como o Firefox ou LibreOffice podem ser difíceis de instalar se não houver espaço em disco suficiente no /var/tmp.

A partição /usr contém muitos dos arquivos que suportam o sistema, incluindo o a Coleção de Ports do FreeBSD e o código-fonte do sistema. Pelo menos 2 gigabytes de espaço são recomendados para esta partição.

Ao selecionar os tamanhos das partições, lembre-se dos requisitos de espaço. Ficar sem espaço em uma partição enquanto mal usa outra pode ser um aborrecimento.

Como regra geral, a partição swap deve ter o dobro do tamanho da memória física (RAM). Sistemas com pouca memória RAM podem ter um melhor desempenho com mais swap. Configurar um swap pequeno pode levar a ineficiências no código de verificação de página da VM e pode criar problemas mais tarde, se mais memória for adicionada.

Em sistemas maiores com vários discos SCSI ou vários discos IDE operando em diferentes controladoras, é recomendável que uma area de swap seja configurada em cada unidade, até quatro unidades. As partições de swap devem ter aproximadamente o mesmo tamanho. O kernel pode manipular tamanhos arbitrários, mas as estruturas internas de dados podem ser dimensionadas para 4 vezes a maior partição de swap. Manter as partições de swap próximas do mesmo tamanho permitirá que o kernel otimize o espaço de swap entre discos. Partições grandes de swap são uma coisa boa, mesmo se o swap não for muito usado. Pode ser mais fácil de se recuperar de um programa devorador de memória antes de ser forçado a reinicializar.

Ao particionar adequadamente um sistema, a fragmentação introduzida nas partições menores e intensas em gravação não vai prejudicar as partições que são maioritariamente de leitura. Manter as partições com maior carga de gravação mais próximas da borda do disco aumentará o desempenho de I/O nas partições onde ela é mais necessária. Embora o desempenho de I/O nas partições maiores possa ser necessário, mudá-las mais para a borda do disco não levará a uma melhoria de desempenho significativa em relação à movimentação de /var para a borda.

2.6.2. Particionamento Guiado Usando UFS

Quando este método é selecionado, um menu exibirá o(s) disco(s) disponível(s). Se vários discos estiverem conectados, escolha aquele em que o FreeBSD deve ser instalado.

bsdinstall part guided disk
Figura 11. Selecionando a partir de vários discos

Depois que o disco é selecionado, o próximo menu solicita a instalação no disco inteiro ou a criação de uma partição usando o espaço livre. Se Entire Disk for escolhido, um layout de partição geral que preenche todo o disco é criado automaticamente. Selecionar Partition cria um layout de partição do espaço não utilizado no disco.

bsdinstall part entire part
Figura 12. Selecionando todo o disco ou partição

Após  Entire Disk  ser escolhido, bsdinstall exibe uma caixa de diálogo indicando que o disco será apagado.

bsdinstall ufs warning
Figura 13. Confirmação

O próximo menu mostra uma lista com os tipos de esquema de partição. O GPT é geralmente a opção mais apropriada para computadores amd64. Computadores mais antigos que não são compatíveis com o GPT devem usar o MBR. Os outros esquemas de partição são geralmente usados para computadores incomuns ou antigos. Mais informações estão disponíveis em Esquemas de Particionamento.

bsdinstall part manual partscheme
Figura 14. Selecionar Esquema de Particionamento

Depois que o layout da partição tiver sido criado, revise-o para garantir que ele atenda às necessidades da instalação. Selecionar Revert redefinirá as partições para seus valores originais e pressionar Auto recriará as partições automáticas do FreeBSD. As partições também podem ser criadas, modificadas ou excluídas manualmente. Quando o particionamento estiver correto, selecione Finish para continuar com a instalação.

bsdinstall part review
Figura 15. Revise as partições criadas

Depois que os discos são configurados, o próximo menu fornece a última chance de fazer alterações antes que os discos selecionados sejam formatados. Se for necessário fazer alterações, selecione Back para retornar ao menu principal de particionamento.  Revert & Exit  sairá do instalador sem fazer alterações no disco. Selecione Commit para iniciar o processo de instalação.

bsdinstall final confirmation
Figura 16. Confirmação final

Para continuar com o processo de instalação, vá para Fazendo o download dos arquivos de distribuição.

2.6.3. Particionamento Manual

Selecionar este método abre o editor de partições:

bsdinstall part manual create
Figura 17. Criar partições manualmente

Realce a unidade de instalação (ada0 neste exemplo) e selecione Create para exibir um menu dos esquemas de partição disponíveis:

bsdinstall part manual partscheme
Figura 18. Criar partições manualmente

O GPT é geralmente a opção mais apropriada para computadores amd64. Computadores mais antigos que não são compatíveis com o GPT devem usar o MBR. Os outros esquemas de partição são geralmente usados para computadores incomuns ou antigos.

Tabela 1. Esquemas de Particionamento
AbreviaçãoDescrição

APM

Apple Partition Map, usado no PowerPC™.

BSD

O Label BSD sem um MBR, às vezes chamado de modo perigosamente dedicado porque os utilitários de discos não BSD podem não reconhecê-lo.

GPT

Tabela de Partição GUID ( http://en.wikipedia.org/wiki/GUID_Partition_Table ).

MBR

Registro mestre de inicialização ou MBR ( http://en.wikipedia.org/wiki/Master_boot_record ).

VTOC8

Tabela de Volume do Conteúdo usado pelos computadores Sun SPARC64 e UltraSPARC.

Depois que o esquema de particionamento for selecionado e criado, selecione Create novamente para criar as partições.A tecla Tab é utilizada para navegação entre os campos.

bsdinstall part manual addpart
Figura 19. Criar partições manualmente

Uma instalação padrão do FreeBSD GPT usa pelo menos três partições:

  • freebsd-boot - Mantém o código de inicialização do FreeBSD.

  • freebsd-ufs - Um sistema de arquivos UFS do FreeBSD.

  • freebsd-zfs - Um sistema de arquivos ZFS do FreeBSD. Mais informações sobre o ZFS estão disponíveis em O sistema de arquivos Z (ZFS).

  • freebsd-swap - Espaço de swap do FreeBSD.

Consulte gpart(8) para obter informações de todos os tipos de partições GPT disponíveis.

Várias partições do sistema de arquivos podem ser criadas e algumas pessoas preferem um layout tradicional com partições separadas para /, /var, /tmp e /usr. Veja Criando partições tradicionais para um sistema de arquivos dividido para um exemplo.

O tamanho pode ser digitado com abreviações comuns: K para kilobytes, M para megabytes, ou G para gigabytes.

O alinhamento adequado do setor fornece o melhor desempenho, e ao definir os tamanhos das partições em múltiplos de 4K bytes ajuda a garantir o alinhamento em discos com setores de 512 ou 4 bytes. Geralmente, usar tamanhos de partições que são múltiplos de 1M ou 1G é a maneira mais fácil de garantir que cada partição comece em um múltiplo par de 4K. Há uma exceção: a partição freebsd-boot não deve ser maior que 512K devido às limitações atuais do código de inicialização.

Um Mountpoint é necessário se a partição contiver um sistema de arquivos. Se apenas uma única partição UFS for criada, o ponto de montagem deve ser /.

O Label é um nome pelo qual a partição será conhecida. Nomes ou números de unidades podem mudar se a unidade estiver conectada a um controlador ou porta diferente, mas a etiqueta da partição não muda. Referir-se a rótulos em vez de nomes de unidade e números de partição em arquivos como o /etc/fstab torna o sistema mais tolerante a alterações de hardware. Os rótulos GPT aparecem em /dev/gpt/ quando um disco é anexado. Outros esquemas de particionamento têm diferentes capacidades de rótulos e seus rótulos aparecem em diferentes diretórios no /dev/.

Use um rótulo único e exclusivo para cada uma das partições para evitar conflitos de rótulos idênticos. Algumas letras do nome, uso ou localização do computador podem ser adicionadas ao rótulo. Por exemplo, use labroot ou rootfslab para a partição raiz UFS no computador chamado lab.

Exemplo 1. Criando partições tradicionais para um sistema de arquivos dividido

Para um layout de partição tradicional em que os diretórios /, /var, /tmp e /usr são sistemas de arquivos separados em suas próprias partições, crie um esquema de particionamento GPT e crie as partições conforme mostrado. Os tamanhos de partição mostrados são típicos para um disco de destino de 20G. Se houver mais espaço disponível no disco de destino, partições maiores de swap ou /var podem ser úteis. Os rótulos mostrados aqui são prefixados com ex para "exemplo", mas os leitores devem usar outros valores de rótulo exclusivos, conforme descrito acima.

Por padrão, o gptboot do FreeBSD espera que a primeira partição UFS seja a partição /.

Tipo de PartiçãoTamanhoPonto de montagemRótulo

freebsd-boot

512K

freebsd-ufs

2G

/

exrootfs

freebsd-swap

4G

exswap

freebsd-ufs

2G

/var

exvarfs

freebsd-ufs

1G

/tmp

extmpfs

freebsd-ufs

aceite o padrão (restante do disco)

Depois que as partições personalizadas forem criadas, selecione Finish para continuar com a instalação e vá para Fazendo o download dos arquivos de distribuição.

2.6.4. Particionamento Guiado Usando Root-on-ZFS

Este modo de particionamento funciona apenas com discos inteiros e apagará por completo o conteúdo do disco. O menu de configuração principal do ZFS oferece várias opções para controlar a criação do pool.

bsdinstall zfs menu
Figura 20. Menu de particionamento do ZFS

Aqui está um resumo das opções que podem ser usadas neste menu:

  • Instalar - Prosseguir a instalação com as opções selecionadas.

  • Tipo de Pool/Discos - Permite configurar o Tipo de Pool e o(s) disco(s ) que irão constituir o pool. Atualmente o instalador ZFS automático suporta apenas a criação de uma única camada superior vdev, exceto em modo stripe. Para criar pools mais complexos, use as instruções em Particionamento do modo shell para criar o pool.

  • Re-escanear Dispositivos - Re-popular a lista de discos disponíveis.

  • Disk Info - Disk Info pode ser usado para inspecionar cada disco, incluindo sua tabela de partição e várias outras informações, como o número do modelo do dispositivo e o número de série, se disponíveis.

  • Pool Name - Define o nome do pool. O nome default é zroot.

  • Force 4K Sectors? - Forçar o uso de setores em 4K. Por padrão, o instalador irá automaticamente criar partições alinhadas com limites em 4K e forçar o ZFS a usar setores de 4K. Isto é seguro mesmo com discos de setores de 512 bytes, e tem o benefício adicional de garantir que pools criados em discos de 512 bytes conseguirão ter setores de 4K adicionados no futuro, seja como espaço de armazenamento adicional ou como substituição ode discos e falha. Aperte a tecla Enter para escolher ativar isso ou não.

  • Encrypt Disks? - A criptografia dos discos permite ao usuário criptografar os discos usando GELI. Mais informação sobre criptografia de discos está disponível em Criptografia de Disco com geli. Aperte a tecla Enter para escolher ativá-la ou não.

  • Partition Scheme - Permitei escolher o esquema de partição. GPT é a opção recomendada na maioria dos casos. Aperte a tecla Enter para escolher entre diferentes opções.

  • Swap Size - Determina a quantidade de espaço para swap.

  • Mirror Swap? - Permite ao usuário espelhar o swap entre os discos. Fique atento, o espelhamento da swap irá quebrar dumps de crash. Pressione a tecla Enter para ativar ou não.

  • Encrypt Swap? - Permite ao usuário criptografar a swap. Criptografa a swap com uma chave temporária toda vez que o sistema inicializa e a descarta na reinicialização. Pressione a tecla Enter para ativar ou não. Mais informação sobre criptografia de swap em Criptografando Swap.

Selecione T para configurar o Pool Type e o(s) disco(s) que irá constituir o pool.

bsdinstall zfs vdev type
Figura 21. Tipo de pool ZFS

Aqui está um resumo dos Pool Type que podem ser selecionados neste menu:

  • stripe - Striping provê a capacidade máxima de todos os dispositivos conectados, mas não redundância. Se um disco falhar os dados do pool estarão perdidos de forma irrevogável.

  • mirror - O espelhamento armazena uma completa cópia de todos os dados em todos os discos. O espelhamento provê uma boa performance em leitura porque os dados são lidos the todos os discos em paralelo. A performance da escrita é mais lenta pois os dados precisam ser escritos em todos os discos do pool. Torna possível que haja falha nos discos, menos um. Esta opção requer ao menos dois discos.

  • raid10 - Striped mirrors. Provê a melhor performance, mas o menor armazenamento. Esta opção necessita de um número par de discos e no mínimo quatro discos.

  • raidz1 - RAID Único Redundante. Permite que haja falha concorrente de um disco. Esta opção necessita de ao menos três discos.

  • raidz2 - RAID Duplo Redundante. Permite que até dois discos falhem concorrentemente. Esta opção necessita de ao menos quatro discos.

  • raidz3 - RAID Triplo Redundante. Permite que até três discos falhem concorrentemente. Esta opção necessita de ao menos cinco discos.

Quando um Pool Type for selecionado, uma lista de discos disponíveis será exibida, e o usuário é solicitado a selecionar um ou mais discos para compor o pool. A configuração é então validada, para garantir que discos suficientes sejam selecionados. Caso contrário, selecione <Change Selection> para retornar à lista de discos ou <Backgt> para alterar o Pool Type

bsdinstall zfs disk select
Figura 22. Seleção de disco
bsdinstall zfs vdev invalid
Figura 23. Seleção inválida

Se um ou mais discos estiverem faltando na lista, ou se os discos foram anexados depois que o instalador foi iniciado, selecione - Rescan Devices para preencher novamente a lista de discos disponíveis.

bsdinstall zfs rescan devices
Figura 24. Dispositivos de Reescaneamento

Para evitar apagar acidentalmente o disco errado, o menu - Disk Info pode ser usado para inspecionar cada disco, incluindo sua tabela de partição e várias outras informações, como o número do modelo do dispositivo e o número de série, se disponíveis.

bsdinstall zfs disk info
Figura 25. Analisando um disco

Selecione N para configurar o Pool Name. Entre com o nome desejado e então selecione <OK> para confirmar ou <Cancel> para retornar ao menu principal e deixar o nome padrão.

bsdinstall zfs pool name
Figura 26. Nome do Pool

Selecione S para escolher a quantidade de swap. Entre com a quantidade desejada e então selecione <OK> para confirmar isto ou <Cancel> para retornar ao menu principal e deixar a quantidade padrão.

bsdinstall zfs swap amount
Figura 27. Quantidade de Swap

Uma vez que todas opções estejam setadas com os valores desejados, selecione a opção >>> Install no topo do menu. O instalador oferece uma última chance de cancelar antes que o conteúdo das unidades selecionadas seja destruído para criar o pool do ZFS.

bsdinstall zfs warning
Figura 28. Última chance

Se a criptografia de disco GELI foi ativada, o instalador solicitará duas vezes que a frase secreta seja usada para criptografar os discos. E depois dissoa inicialização da criptografia é iniciado.

bsdinstall zfs geli password
Figura 29. Senha de criptografia de disco
bsdinstall zfs init encription
Figura 30. inicializando Criptografia

A instalação então prossegue normalmente. Para continuar com a instalação, vá para Fazendo o download dos arquivos de distribuição.

2.6.5. Particionamento do modo shell

Ao criar instalações avançadas, os menus de particionamento do bsdinstall podem não fornecer o nível de flexibilidade necessário. Usuários avançados podem selecionar a opção Shell no menu de particionamento para particionar manualmente as unidades, criar o(s) sistema(s) de arquivos, preencher o /tmp/bsdinstall_etc/fstab e montar os sistemas de arquivos em /mnt. Feito isso, digite exit para retornar ao bsdinstall e continue com a instalação.

2.7. Fazendo o download dos arquivos de distribuição

O tempo de instalação irá variar dependendo das distribuições escolhidas, mídia de instalação e velocidade do computador. Uma série de mensagens indicará o progresso.

Primeiro, o instalador formata o(s) disco(s) selecionado(s) e inicializa as partições. Em seguida, no caso de uma bootonly media ou mini memstick, ele faz o download dos componentes selecionados:

bsdinstall distfile fetching
Figura 31. Fazendo o download dos arquivos de distribuição

Em seguida, a integridade dos arquivos de distribuição é verificada para garantir que eles não tenham sido corrompidos durante o download ou mal interpretados da mídia de instalação:

bsdinstall distfile verifying
Figura 32. Verificando arquivos de distribuição

Finalmente, os arquivos de distribuição verificados são extraídos para o disco:

bsdinstall distfile extracting
Figura 33. Extraindo arquivos de distribuição

Depois que todos os arquivos de distribuição solicitados tiverem sido extraídos, o bsdinstall exibirá a primeira tela de configuração pós-instalação. As opções de configuração pós-instalação disponíveis estão descritas na próxima seção.

2.8. Contas, Time Zone, Serviços e Hardening

2.8.1. Definindo a Senha de root

Primeiro, a senha do root deve ser definida. Ao digitar a senha, os caracteres digitados não são exibidos na tela. Depois que a senha for digitada, ela deve ser digitada novamente. Isso ajuda a evitar erros de digitação.

bsdinstall post root passwd
Figura 34. Definindo a Senha de root

2.8.2. Defina o fuso horário

A próxima série de menus é usada para determinar a hora local correta, selecionando a região geográfica, o país e o fuso horário. Definir o fuso horário permite que o sistema corrija automaticamente as alterações de horário regionais, como horário de verão, e execute outras funções relacionadas ao fuso horário corretamente.

O exemplo mostrado aqui é para uma máquina localizada no fuso horário do continente da Espanha, Europa. As seleções variam de acordo com a localização geográfica.

bsdinstall timezone region
Figura 35. Selecione uma região

A região apropriada é selecionada usando as teclas de seta e depois pressionando Enter.

bsdinstall timezone country
Figura 36. Selecione um pais

Selecione o país apropriado usando as teclas de seta e pressione Enter.

bsdinstall timezone zone
Figura 37. Selecione um fuso horário

O fuso horário apropriado é selecionado usando as teclas de seta e pressionando Enter.

bsdinstall timezone confirm
Figura 38. Confirme o fuso horário

Confirme se a abreviação do fuso horário está correta.

bsdinstall timezone date
Figura 39. Selecionar Data

A data apropriada é selecionada usando as teclas de seta e pressionando Set Date. Caso contrário, a seleção de data pode ser pulada pressionando  Skip .

bsdinstall timezone time
Figura 40. Selecionar Hora

O horário apropriado é selecionado usando as teclas de seta e, em seguida, pressionando Set Time. Caso contrário, a seleção da hora pode ser pulada pressionando  Skip .

2.8.3. Ativando Serviços

O próximo menu é usado para configurar quais serviços do sistema serão iniciados sempre que o sistema for inicializado. Todos esses serviços são opcionais. Inicie apenas os serviços necessários para o funcionamento do sistema.

bsdinstall config services
Figura 41. Selecionando Serviços Adicionais para Ativar

Aqui está um resumo dos serviços que podem ser ativados neste menu:

  • local_unbound -Ative o DNS local unbound. É necessário ter em mente que esse é o unbound do sistema base e deve ser usado apenas como um cache local de consultas DNS. Se o objetivo é configurar um resolvedor para toda a rede, instale dns/unbound.

  • sshd - O daemon Secure Shell (SSH) é usado para acessar remotamente um sistema através de uma conexão criptografada. Ative este serviço somente se o sistema estiver disponível para logins remotos.

  • moused - Ative este serviço se o mouse for usado a partir do console do sistema de linha de comando.

  • ntpdate - Ative a sincronização automática do relógio no momento do boot. A funcionalidade deste programa agora está disponível no daemon ntpd(8). Após um período considerável de luto, o utilitário ntpdate(8) será aposentado.

  • ntpd - O daemon do Network Time Protocol (NTP) para sincronização automática do relógio. Ative este serviço se houver um servidor Windows™, Kerberos ou LDAP na rede.

  • powerd - Utilitário de controle de energia do sistema para controle de energia e economia de energia.

  • dumpdev - A habilitação de despejos de memória é útil na depuração de problemas com o sistema; portanto, os usuários são incentivados a habilitar despejos de memória.

2.8.4. Ativando Opções de Segurança (Hardening)

O próximo menu é usado para configurar quais opções de segurança serão ativadas. Todas essas opções são opcionais. Mas seu uso é incentivado.

bsdinstall hardening
Figura 42. Selecionando Opções de Segurança (Hardening)

Aqui está um resumo das opções que podem ser ativadas neste menu:

  • hide_uids - Oculta processos em execução de outros usuários para impedir que usuários sem privilégios vejam processos em execução de outros usuários (UID), impedindo o vazamento de informações.

  • hide_gids - Oculta processos em execução de outros grupos para impedir que usuários sem privilégios vejam processos em execução de outros grupos (GID), impedindo o vazamento de informações.

  • hide_jail - Oculta processos em execução em jails para impedir que usuários sem privilégios vejam processos em execução dentro das jails.

  • read_msgbuf - Desativando a leitura do buffer de mensagens do kernel para usuários sem privilégios, impede o uso do dmesg(8) para exibir mensagens do log do kernel em buffer.

  • proc_debug - Desativar os recursos de depuração de processo para usuários sem privilégios desativa uma variedade de serviços de depuração entre processos sem privilégios, incluindo algumas funcionalidades procfs, ptrace() e ktrace(). Observe que isso também irá bloquear ferramentas de depuração, como por exemplo, lldb(1), truss(1), procstat(1), bem como alguns recursos de depuração integrados em certas linguagens de script como PHP, etc., de funcionar para usuários sem privilégios.

  • random_pid - Randomize o PID dos processos recém-criados.

  • clear_tmp - Limpar o /tmp na inicialização do sistema.

  • disable_syslogd - Desative a criação de socket de rede do syslogd. Por padrão, o FreeBSD executa o syslogd de maneira segura com -s. Isso impede que o daemon atenda solicitações UDP recebidas na porta 514. Com esta opção ativada, o syslogd será executado com o sinalizador -ss, que impede o syslogd de abrir qualquer porta. Para obter mais informações, consulte syslogd(8).

  • disable_sendmail - Desative o agente de transporte de email sendmail.

  • secure_console - Quando esta opção está ativada, o prompt solicita a senha de root ao entrar em modo single-user.

  • disable_ddtrace - O DTrace pode ser executado em um modo que realmente afetará o kernel em execução. Ações destrutivas não podem ser usadas, a menos que tenham sido explicitamente ativadas. Para habilitar esta opção ao usar o DTrace, use -w. Para obter mais informações, consulte dtrace(1).

2.8.5. Adicione usuários

O próximo menu pede para criar pelo menos uma conta de usuário. Recomenda-se fazer login no sistema usando uma conta de usuário em vez de utilizar diretamente o root. Quando logado como root, essencialmente não há limites ou proteção sobre o que pode ser feito. Fazer o login como um usuário normal é mais seguro.

Selecione Yes para adicionar novos usuários.

bsdinstall adduser1
Figura 43. Adicione contas de usuário

Siga os prompts e insira as informações solicitadas para a conta do usuário. O exemplo mostrado em Insira as informações do usuário cria a conta de usuário asample.

bsdinstall adduser2
Figura 44. Insira as informações do usuário

Aqui está um resumo das informações para solicitadas:

  • Username - O nome que o usuário digitará para efetuar login. Uma convenção comum é usar a primeira letra do primeiro nome combinada com o sobrenome, desde que cada nome de usuário seja exclusivo para o sistema. O nome de usuário faz distinção entre maiúsculas e minúsculas e não deve conter espaços.

  • Username - O nome completo do usuário. Este campo pode conter espaços e é usado como uma descrição para a conta do usuário.

  • Uid - ID do Usuário. Normalmente, isso é deixado em branco para que o sistema atribua um valor.

  • Login group - O grupo do usuário. Normalmente, isso é deixado em branco para aceitar o padrão.

  • Invite user into other groups? - Grupos adicionais aos quais o usuário será adicionado como membro. Se o usuário precisar de acesso administrativo, digite wheel aqui.

  • Login class - normalmente deixado em branco para seguir com o padrão.

  • Shell - Digite um dos valores listados para definir o shell interativo para o usuário. Consulte Shells para maiores informações sobre shells.

  • Home directory - O diretório inicial do usuário. O padrão geralmente está correto.

  • Home directory permissions - Permissões no diretório inicial do usuário. O padrão geralmente está correto.

  • Use password-based authentication? A resposta deve ser Yes para que o usuário seja solicitado a inserir sua senha no login.

  • Use an empty password? - Normalmente a resposta será No, pois é inseguro ter uma senha em branco.

  • Use a random password? - Normalmente a resposta será No para que o usuário possa definir sua própria senha no próximo prompt.

  • Enter password - Escolha a senha para este usuário. Caracteres digitados não serão exibidos na tela.

  • Enter password again - A senha deve ser digitada novamente para verificação.

  • Lock out the account after creation? - A reposta normalmente será No para que o usuário possa fazer o login.

Depois de inserir tudo, um resumo será exibido para revisão. Se algum erro foi cometido, digite no e tente novamente. Se tudo estiver correto, digite yes para criar o novo usuário.

bsdinstall adduser3
Figura 45. Saia do gerenciamento de usuários e grupos

Se houver mais usuários para adicionar, responda a pergunta Add another user? com yes. Digite no para concluir a adição de usuários e continuar a instalação.

Para obter maiores informações sobre como adicionar usuários e sobre como gerenciá-los de usuários, consulte Usuários e Gerenciamento Básico de Contas.

2.8.6. Configuração final

Depois que tudo tiver sido instalado e configurado, você terá uma chance final para modificar as configurações.

bsdinstall finalconfiguration
Figura 46. Configuração final

Use este menu para fazer alterações ou fazer qualquer configuração adicional antes de concluir a instalação.

Depois que completar qualquer configuração final que tenha faltado, selecione Exit.

bsdinstall final modification shell
Figura 47. Configuração manual

O bsdinstall perguntará se há alguma configuração adicional que precise ser feita antes de reinicializar o novo sistema. Selecione Yes para sair para um shell dentro do novo sistema ou No para prosseguir para a última etapa da instalação.

bsdinstall mainexit
Figura 48. Conclua a instalação

Se outras configurações ou configurações especiais forem necessárias, selecione Live CD para inicializar a mídia de instalação no modo Live CD.

Se a instalação estiver completa, selecione Reboot para reiniciar o computador e iniciar o novo sistema FreeBSD. Não se esqueça de remover a mídia de instalação do FreeBSD ou o computador poderá inicializar novamente a partir dela.

Quando o FreeBSD inicializa, mensagens informativas são exibidas. Depois que o sistema concluir a inicialização, um prompt de login será exibido. No login:, insira o nome de usuário adicionado durante a instalação. Evite efetuar login como root. Consulte A conta de superusuário para instruções sobre como se tornar o superusuário quando o acesso administrativo for necessário.

As mensagens que apareceram durante a inicialização podem ser revisadas pressionando Scroll-Lock para ativar o buffer de rolagem para trás. As teclas PgUp, PgDn e setas podem ser usadas para rolar pelas mensagens. Quando terminar, pressione Scroll-Lock novamente para desbloquear o visor e retornar ao console. Para revisar essas mensagens depois que o sistema estiver ativo por algum tempo, digite less /var/run/dmesg.boot em um prompt de comando. Pressione q para retornar à linha de comando após a visualização.

Se o sshd foi habilitado em Selecionando Serviços Adicionais para Ativar, a primeira inicialização pode ser um pouco mais lenta, pois o sistema gerará as chaves RSA e DSA. As inicializações subseqüentes serão mais rápidas. As impressões digitais das chaves serão exibidas, conforme mostrado neste exemplo:

Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
10:a0:f5:af:93:ae:a3:1a:b2:bb:3c:35:d9:5a:b3:f3 root@machine3.example.com
The key's randomart image is:
+--[RSA1 1024]----+
|    o..          |
|   o . .         |
|  .   o          |
|       o         |
|    o   S        |
|   + + o         |
|o . + *          |
|o+ ..+ .         |
|==o..o+E         |
+-----------------+
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
7e:1c:ce:dc:8a:3a:18:13:5b:34:b5:cf:d9:d1:47:b2 root@machine3.example.com
The key's randomart image is:
+--[ DSA 1024]----+
|       ..     . .|
|      o  .   . + |
|     . ..   . E .|
|    . .  o o . . |
|     +  S = .    |
|    +  . = o     |
|     +  . * .    |
|    . .  o .     |
|      .o. .      |
+-----------------+
Starting sshd.

Consulte OpenSSH para maiores informações sobre fingerprints e o SSH.

O FreeBSD não instala um ambiente gráfico por padrão. Consulte O sistema X Window para maiores informações sobre como instalar e configurar um gerenciador gráfico de janelas.

O desligamento adequado de um computador FreeBSD ajuda a proteger os dados e o hardware contra danos. Não desligue a energia antes do sistema ter sido desligado corretamente! Se o usuário for membro do grupo wheel, torne-se o superusuário digitando su na linha de comando e inserindo a senha do usuário root. Em seguida, digite shutdown -p now e o sistema será desligado corretamente e, se o hardware suportar, irá se desliga-se.

2.9. Interfaces de Rede

2.9.1. Configurando as Interfaces de Rede

Em seguida, é mostrada uma lista das interfaces de rede encontradas no computador. Selecione a interface para configurar.

bsdinstall configure network interface
Figura 49. Escolha uma interface de rede

Se uma interface Ethernet for selecionada, o instalador irá pular para o menu mostrado em Escolha a rede IPv4. Se uma interface de rede sem fio for escolhida, o sistema procurará pontos de acesso sem fio:

bsdinstall configure wireless scan
Figura 50. Buscando por pontos de acesso sem fio

As redes sem fio são identificadas por um identificador de conjunto de serviços (SSID), um nome curto e exclusivo dado a cada rede. Os SSIDs encontrados durante a busca serão listados, seguidos por uma descrição dos tipos de criptografia disponíveis para essa rede. Se o SSID desejado não aparecer na lista, selecione Rescan para buscar novamente. Se a rede desejada ainda não aparecer, verifique se há problemas com as conexões da antena ou tente mover o computador para mais perto do ponto de acesso. refaça a busca após cada alteração ser feita.

bsdinstall configure wireless accesspoints
Figura 51. Escolhendo uma rede sem fio

Em seguida, insira as informações de criptografia para se conectar à rede sem fio selecionada. A encriptação WPA2 é fortemente recomendada, pois os tipos de encriptação mais antigos, como o WEP, oferecem pouca segurança. Se a rede usar WPA2, insira a senha, também conhecida como Chave Pré-Compartilhada (PSK). Por motivos de segurança, os caracteres digitados na caixa de entrada são exibidos como asteriscos.

bsdinstall configure wireless wpa2setup
Figura 52. Configuração WPA2

Em seguida, escolha se um endereço IPv4 deve ou não ser configurado na interface Ethernet ou na interface sem fio:

bsdinstall configure network interface ipv4
Figura 53. Escolha a rede IPv4

Existem dois métodos de configuração de IPv4. O DHCP configurará automaticamente a interface de rede da forma correta e deverá ser usado se a rede fornecer um servidor DHCP. Caso contrário, as informações de endereçamento precisam ser inseridas manualmente como em uma configuração estática.

Não insira informações de rede aleatórias, pois isso não funcionará. Se um servidor DHCP não estiver disponível, obtenha as informações listadas em [bsdinstall-collect-network-information] do administrador da rede ou do provedor de serviços de Internet.

Se um servidor DHCP estiver disponível, selecione Yes no próximo menu para configurar automaticamente a interface de rede. O instalador parecerá pausar por um minuto ou mais enquanto encontra o servidor DHCP e obtém as informações de endereçamento do sistema.

bsdinstall configure network interface ipv4 dhcp
Figura 54. Escolha a configuração IPv4DHCP

Se um servidor DHCP não estiver disponível, selecione No e insira as seguintes informações de endereçamento neste menu:

bsdinstall configure network interface ipv4 static
Figura 55. Configuração IPv4 estática
  • Endereço IP - O endereço IPv4 atribuído a este computador. O endereço deve ser único e não estar em uso por outro equipamento na rede local.

  • Subnet Mask - A máscara de sub-rede da rede.

  • Default Router - O endereço IP do gateway padrão da rede.

A próxima tela perguntará se a interface deve ser configurada para IPv6. Se IPv6 estiver disponível e for desejado, escolha Yes para selecioná-lo.

bsdinstall configure network interface ipv6
Figura 56. Escolha a rede IPv6

O IPv6 também possui dois métodos de configuração. A configuração automática de endereços sem estado (SLAAC) solicitará automaticamente as informações de configuração corretas de um roteador local. Consulte rfc4862 para maiores informações. A configuração estática requer entrada manual das informações da rede.

Se um roteador IPv6 estiver disponível, selecione Yes no próximo menu para configurar automaticamente a interface de rede. O instalador parecerá pausar por um minuto ou mais enquanto localiza o roteador e obtém as informações de endereçamento do sistema.

bsdinstall configure network interface slaac
Figura 57. Escolha a configuração do SLAAC do IPv6

Se um roteador IPv6 não estiver disponível, selecione No e insira as seguintes informações de endereçamento neste menu:

bsdinstall configure network interface ipv6 static
Figura 58. Configuração Estática do IPv6
  • Endereço IPv6 - O endereço IPv6 atribuído a este computador. O endereço deve ser único e não estar em uso por outro equipamento na rede local.

  • Default Router - O endereço IPv6 do gateway padrão da rede.

O último menu de configuração de rede é usado para configurar o resolvedor do Sistema de Nomes de Domínio (DNS), que converte nomes de host de e para endereços de rede. Se o DHCP ou SLAAC foi usado para autoconfigurar a interface de rede, os valores do Resolver Configuration podem já estar preenchidos. Caso contrário, insira o domínio da rede local nome no campo Search. DNS # 1 e DNS # 2 são os endereços IPv4 e/ou IPv6 dos servidores de DNS. Pelo menos um servidor DNS é necessário.

bsdinstall configure network ipv4 dns
Figura 59. Configuração do DNS

Quando a interface estiver configurada, selecione um site espelho localizado na mesma região do mundo que o computador no qual o FreeBSD está sendo instalado. Os arquivos podem ser recuperados mais rapidamente quando o espelho está próximo ao computador de destino, reduzindo o tempo de instalação.

bsdinstall netinstall mirrorselect
Figura 60. Escolhendo um Site Espelho

2.10. Solução de problemas

Esta seção aborda a solução de problemas básicos de instalação, tais como problemas comuns que as pessoas relataram.

Verifique o documento Notas de Hardware (https://www.freebsd.org/releases/) para a versão do FreeBSD para garantir que o hardware é suportado. Se o hardware for suportado e houver travamentos ou outros problemas, compile um kernel personalizado usando as instruções em Configurando o kernel do FreeBSD para adicionar suporte a dispositivos que não estão presentes no kernel GENERIC. O kernel padrão assume que a maioria dos dispositivos de hardware está na configuração padrão de fábrica em termos de IRQs, endereços de I/O e canais DMA. Se o hardware foi reconfigurado, um arquivo de configuração personalizado do kernel pode dizer ao FreeBSD onde encontrar os dispositivos.

Alguns problemas de instalação podem ser evitados ou aliviados com a atualização do firmware em vários componentes de hardware, principalmente na placa-mãe. O firmware da placa-mãe é geralmente chamado de BIOS. A maioria dos fabricantes de placas-mãe e computadores tem um site para atualizações e para informações sobre as atualizações.

Os fabricantes geralmente desaconselham a atualização da BIOS da placa-mãe, a menos que haja uma boa razão para isso, como uma atualização crítica. O processo de atualização pode dar errado, deixando o BIOS incompleto e o computador inoperante.

Se o sistema trava enquanto verifica o hardware durante a inicialização ou se comporta de maneira estranha durante a instalação, o ACPI pode ser o culpado. O FreeBSD faz uso extensivo do sistema ACPI nas plataformas i386 e amd64 para ajudar na configuração do sistema, caso seja detectado durante a inicialização. Infelizmente, alguns bugs ainda existem tanto no driver ACPI como nas placas-mãe do sistema e no firmware BIOS. O ACPI pode ser desativado configurando a opção hint.acpi.0.disabled no terceiro estágio do boot loader:

 set hint.acpi.0.disabled="1"

Isso é redefinido toda vez que o sistema é inicializado, portanto é necessário adicionar hint.acpi.0.disabled="1" ao arquivo /boot/loader.conf . Maiores informações sobre o boot loader podem ser encontradas em Sinopse.

2.11. Usando o Live CD

O menu de boas-vindas do bsdinstall, mostrado em Menu de boas-vindas, fornece uma opção Live CD. Isto é útil para aqueles que ainda estão se perguntando se o FreeBSD é o sistema operacional correto para eles e quer testar alguns dos recursos antes de instalar.

Os seguintes pontos devem ser observados antes de usar o Live CD:

  • Para obter acesso ao sistema, a autenticação é necessária. O nome de usuário é root e a senha está em branco.

  • Como o sistema é executado diretamente da mídia de instalação, o desempenho será significativamente mais lento do que o de um sistema instalado em um disco rígido.

  • Essa opção fornece apenas um prompt de comando e não uma interface gráfica.

Capítulo 3. Fundamentos do FreeBSD

3.1. Sinopse

Este capítulo cobre os comandos básicos e as funcionalidades do sistema operacional FreeBSD. Grande parte deste material é relevante para qualquer sistema operacional do tipo UNIX™. Novos usuários do FreeBSD são encorajados a ler este capítulo cuidadosamente.

Depois de ler este capítulo, você saberá:

  • Como usar e configurar consoles virtuais.

  • Como criar e gerenciar usuários e grupos no FreeBSD.

  • Como funcionam as permissões de arquivo UNIX™ e as flags de arquivos do FreeBSD.

  • O layout padrão do sistema de arquivos do FreeBSD.

  • A organização do disco no FreeBSD.

  • Como montar e desmontar sistemas de arquivos.

  • O que são processos, daemons e sinais.

  • O que é um shell e como alterar o ambiente de login padrão.

  • Como usar editores de texto básicos.

  • O que são devices e device nodes.

  • Como ler páginas de manual para obter maiores informações.

3.2. Consoles e Terminais Virtuais

A menos que o FreeBSD tenha sido configurado para iniciar automaticamente um ambiente gráfico durante a inicialização, o sistema inicializará em um prompt de login da linha de comando, como visto neste exemplo:

FreeBSD/amd64 (pc3.example.org) (ttyv0)

login:

A primeira linha contém algumas informações sobre o sistema. O amd64 indica que o sistema neste exemplo está executando uma versão de 64 bits do FreeBSD. O nome do host é pc3.example.org, e ttyv0 indica que este é o "console do sistema". A segunda linha é o prompt de login.

Como o FreeBSD é um sistema multiusuário, ele precisa de alguma maneira distinguir entre usuários diferentes. Isso é feito exigindo que todos os usuários façam login no sistema antes de obter acesso aos programas no sistema. Cada usuário tem um "nome de usuário" único e uma "senha" pessoal.

Para efetuar login no console do sistema, digite o nome de usuário que foi configurado durante a instalação do sistema, conforme descrito em Adicione usuários e pressione Enter. Em seguida, insira a senha associada ao nome de usuário e pressione Enter. A senha não é ecoada por razões de segurança.

Uma vez que a senha correta é inserida, a mensagem do dia (MOTD) será exibida, seguida de um prompt de comando. Dependendo do shell que foi selecionado quando o usuário foi criado, este prompt será um caractere #, $ ou %. O prompt indica que o usuário está logado no console do sistema FreeBSD e pronto para testar os comandos disponíveis.

3.2.1. Consoles Virtuais

Enquanto o console do sistema pode ser usado para interagir com o sistema, um usuário trabalhando a partir da linha de comando no teclado de um sistema FreeBSD normalmente irá efetuar login em um console virtual. Isso ocorre porque as mensagens do sistema são configuradas por padrão para serem exibidas no console do sistema. Essas mensagens serão exibidas por cima do comando ou arquivo em que o usuário estiver trabalhando, dificultando a concentração no trabalho em questão.

Por padrão, o FreeBSD é configurado para fornecer vários consoles virtuais para a entrada de comandos. Cada console virtual tem seu próprio prompt de login e shell e é fácil alternar entre os consoles virtuais. Isso essencialmente fornece a linha de comando equivalente a ter várias janelas abertas ao mesmo tempo em um ambiente gráfico.

As combinações de teclas Alt+F1 até a Alt+F8 foram reservadas pelo FreeBSD para alternar entre os consoles virtuais. Use Alt+F1 para alternar para o console do sistema (ttyv0), Alt+F2 para acessar o primeiro console virtual (ttyv1), Alt+F3 para acessar o segundo console virtual (ttyv2) e assim por diante. Ao usar o Xorg como um console gráfico, a combinação Ctrl+Alt+F1 é utilizada para retornar para um console virtual baseado em texto.

Ao mudar de um console para o próximo, o FreeBSD gerencia a saída da tela. O resultado é uma ilusão de ter várias telas virtuais e teclados que podem ser usados para digitar comandos para o FreeBSD rodar. Os programas executados em um console virtual não param de ser executados quando o usuário alterna para um console virtual diferente.

Consulte kbdcontrol(1), vidcontrol(1), atkbd:(4), syscons(4), e vt(4) para uma descrição mais técnica do console do FreeBSD e seus drivers de teclado.

No FreeBSD, o número de consoles virtuais disponíveis é configurado nesta seção do /etc/ttys:

# name    getty                         type  status comments
#
ttyv0   "/usr/libexec/getty Pc"         xterm   on  secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv2   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv3   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv4   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv5   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv6   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv7   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure

Para desativar um console virtual, coloque um símbolo de comentário () no início da linha que representa esse console virtual. Por exemplo, para reduzir o número de consoles virtuais disponíveis de oito para quatro, coloque um na frente das últimas quatro linhas que representam os consoles virtuais de ttyv5 até ttyv8. Não comente a linha do console do sistema ttyv0. Note que o último console virtual (ttyv8) é usado para acessar o ambiente gráfico se o Xorg tiver sido instalado e configurado conforme descrito em O sistema X Window.

Para uma descrição detalhada de cada coluna neste arquivo e as opções disponíveis para os consoles virtuais, consulte ttys(5).

3.2.2. Modo "Single User"

O menu de inicialização do FreeBSD fornece uma opção chamada "Boot Single User". Se esta opção for selecionada, o sistema inicializará em um modo especial conhecido como "single user mode". Esse modo é normalmente usado para reparar um sistema que não inicializa ou para redefinir a senha de root quando ela é desconhecida. Quando em modo single user, a rede e outros consoles virtuais não estão disponíveis. No entanto, haverá acesso completo de root ao sistema e, por padrão, a senha de root não é necessária. Por estas razões, o acesso físico ao teclado é necessário para iniciar neste modo e determinar quem tem acesso físico ao teclado é algo a considerar ao proteger um sistema FreeBSD.

As configurações que controlam o modo de single user são encontradas nesta seção do /etc/ttys:

# name  getty                           type  status  comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none                            unknown  off  secure

Por padrão, o status é definido como secure. Isso pressupõe que quem tem acesso físico ao teclado não é importante ou é controlado por uma política de segurança física. Se essa configuração for alterada para insecure, a suposição é que o ambiente em si é inseguro porque qualquer pessoa pode acessar o teclado. Quando esta linha é alterada para insecure, o FreeBSD irá solicitar a senha do root quando um usuário selecionar inicializar no modo single user.

Tenha cuidado ao alterar esta configuração para inseguro! Se a senha do root for esquecida, a inicialização no modo single user ainda é possível, mas pode ser difícil para alguém que não esteja familiarizado com o processo de inicialização do FreeBSD.

3.2.3. Alterar os modos de vídeo do console

O modo de vídeo padrão do console do FreeBSD pode ser ajustado para 1024x768, 1280x1024 ou qualquer outro tamanho suportado pelo chip gráfico e monitor. Para usar um modo de vídeo diferente, carregue o módulo VESA:

# kldload vesa

Para determinar quais modos de vídeo são suportados pelo hardware, use vidcontrol(1). Para obter uma lista de modos de vídeo suportados, execute o seguinte:

# vidcontrol -i mode

A saída deste comando lista os modos de vídeo suportados pelo hardware. Para selecionar um novo modo de vídeo, especifique o modo usando vidcontrol(1) como o usuário root :

# vidcontrol MODE_279

Se o novo modo de vídeo for aceitável, ele pode ser definido permanentemente na inicialização, adicionando-o ao /etc/rc.conf:

allscreens_flags="MODE_279"

3.3. Usuários e Gerenciamento Básico de Contas

O FreeBSD permite que múltiplos usuários usem o computador ao mesmo tempo. Enquanto apenas um usuário pode se sentar em frente à tela e usar o teclado a qualquer momento, qualquer número de usuários pode efetuar o login no sistema através da rede. Para usar o sistema, cada usuário deve ter sua própria conta de usuário.

Este capítulo descreve:

  • Os diferentes tipos de contas de usuários em um sistema FreeBSD.

  • Como adicionar, remover e modificar contas de usuários.

  • Como definir limites para controlar os recursos que usuários e grupos podem acessar.

  • Como criar grupos e adicionar usuários como membros de um grupo.

3.3.1. Tipos de conta

Como todo acesso ao sistema FreeBSD é obtido usando contas e todos os processos são executados por usuários, o gerenciamento de usuários e contas é importante.

Existem três tipos principais de contas: contas do sistema, contas de usuário e a conta de superusuário.

3.3.1.1. Contas do sistema

As contas do sistema são usadas para executar serviços como DNS, correio e servidores web. A razão para isso é a segurança; se todos os serviços fossem executados como superusuário, eles poderiam agir sem restrições.

Exemplos de contas do sistema são daemon, operador, bind, news, e www.

É necessário ter cuidado ao usar o grupo operator, pois privilégios de acesso como o de superusuário podem ser concedidos, incluindo e não limitado a, desligamento, reinicialização e acesso a todos os itens em /dev para o grupo.

A nobody é uma conta genérica sem privilégios do sistema. No entanto, quanto mais serviços usarem nobody, a mais arquivos e processos esse usuário será associado e, portanto, mais privilegiado esse usuário se tornará.

3.3.1.2. Contas de usuário

As contas de usuários são atribuídas a pessoas reais e são usadas para efetuar login e usar o sistema. Todas as pessoas que acessam o sistema devem ter uma conta de usuário exclusiva. Isso permite que o administrador descubra quem está fazendo o que e impede que usuários alterem as configurações de outros usuários.

Cada usuário pode configurar seu próprio ambiente para adequar o sistema ao seu uso, utilizando suas opções padrão para o shell, editor, atalhos de teclado e idioma.

Cada conta de usuário em um sistema FreeBSD tem certas informações associadas:

Nome de usuário

O nome do usuário é digitado no prompt login:. Cada usuário deve ter um nome de usuário exclusivo. Existem diversas regras para criar nomes de usuário válidos que estão documentadas em passwd(5). Recomenda-se usar nomes de usuário que tenham oito ou menos caracteres, todos os caracteres devem ser minúsculos para manter a compatibilidade com aplicativos legados.

Senha

Cada conta tem uma senha associada.

ID do usuário (UID)

O ID do Usuário (UID) é um número usado para identificar unicamente o usuário no sistema FreeBSD. Comandos que permitem que um nome de usuário seja especificado o converterão para o UID. Recomenda-se usar um UID menor que 65535, já que valores mais altos podem causar problemas de compatibilidade com alguns softwares.

ID do grupo (GID)

O ID do grupo (GID) é um número usado para identificar unicamente o grupo principal ao qual o usuário pertence. Os grupos são um mecanismo para controlar o acesso a recursos com base no GID de um usuário, em vez de no seu UID. Isso pode reduzir significativamente o tamanho de alguns arquivos de configuração e permite que os usuários sejam membros de mais de um grupo. Recomenda-se usar um GID de 65535 ou inferior, pois GIDs mais altos podem não funcionar com alguns softwares.

Classe de login

As classes de login são uma extensão do mecanismo de grupo que fornece flexibilidade adicional ao configurar o sistema para diferentes usuários. As classes de login são discutidas em Configurando Classes de Login.

Tempo para mudança de senha

Por padrão as senhas não expiram. No entanto, a expiração de senha pode ser ativada por usuário, forçando alguns ou todos os usuários a alterar suas senhas após um determinado período de tempo.

Tempo de expiração da conta

Por padrão o FreeBSD não expira contas. Ao criar contas que precisam de uma vida útil limitada, como contas de alunos em uma escola, especifique a data de expiração da conta usando o pw(8). Após o tempo de expiração, a conta não poderá ser usada para efetuar login no sistema, embora os diretórios e arquivos da conta permaneçam no servidor.

Nome completo do usuário

O nome de usuário identifica a conta de forma única para o FreeBSD, mas não reflete necessariamente o nome real do usuário. Semelhante a um comentário, essas informações podem conter espaços, caracteres maiúsculos e ter mais de oito caracteres.

Diretório Inicial (home)

O diretório "home" é um caminho completo para um diretório no sistema. Este é o diretório inicial do usuário quando o usuário faz o login. Uma convenção comum é colocar todos os diretórios home dos usuários em /home/username ou /usr/home/username. Cada usuário armazena seus arquivos e subdiretórios pessoais em seu próprio diretório home.

Shell do usuário

O shell fornece o ambiente padrão do usuário para interagir com o sistema. Existem muitos tipos diferentes de shells e usuários experientes terão suas próprias preferências, que podem ser refletidas nas suas configurações da conta.

3.3.1.3. A conta de superusuário

A conta de superusuário, geralmente chamada de root, é usada para gerenciar o sistema sem limitações de privilégios. Por este motivo, não deve ser usado para tarefas do dia-a-dia, como enviar e receber e-mail, exploração geral do sistema ou programação.

O superusuário, ao contrário de outras contas de usuário, pode operar sem limites, e o uso indevido da conta de superusuário pode resultar em desastres espetaculares. As contas de usuário não podem destruir o sistema operacional por engano, por isso é recomendável fazer o login como uma conta de usuário e se tornar o superusuário somente quando um comando exigir privilégios extras.

Sempre cheque duas ou três vezes todos os comandos emitidos como superusuário, pois um espaço extra ou um caractere ausente pode causar uma perda de dados irreparável.

Existem várias maneiras de obter privilégios de superusuário. Embora seja possível efetuar login como root, isso é altamente desencorajado.

Em vez disso, use su(1) para se tornar o superusuário. Se - for especificado ao executar este comando, o usuário também herdará o ambiente do usuário root. O usuário que executa este comando deve estar no grupo wheel ou o comando falhará. O usuário também deve saber a senha da conta de usuário root.

Neste exemplo, o usuário só se torna superusuário para executar make install, pois isso requer privilégios de superusuário. Quando o comando é concluído, o usuário digita exit para deixar a conta de superusuário e retornar à sua conta de usuário.

Exemplo 2. Instalar um programa como superusuário
% configure
% make
% su -
Password:
# make install
# exit
%

O framework integrado su(1) funciona bem para sistemas isolados ou redes pequenas com apenas um administrador. Uma alternativa é instalar o pacote ou port security/sudo. Este software fornece registro de atividades e permite ao administrador configurar quais usuários podem executar quais comandos como superusuário.

3.3.2. Gerenciando Contas

O FreeBSD fornece uma variedade de diferentes comandos para gerenciar contas de usuários. Os comandos mais comuns são descritos em Utilitários para gerenciar contas de usuários, seguidos por alguns exemplos de seu uso. Veja a página de manual para cada utilitário para maiores detalhes e exemplos de uso.

Tabela 2. Utilitários para gerenciar contas de usuários
ComandoResumo

adduser(8)

Aplicativo de linha de comando recomendado para adicionar novos usuários.

rmuser(8)

Aplicativo de linha de comando recomendado para remover usuários.

chpass(1)

Uma ferramenta flexível para alterar as informações do usuário.

passwd(1)

Ferramenta de linha de comando para alterar senhas de usuários.

pw(8)

Uma ferramenta poderosa e flexível para modificar todos os aspectos das contas de usuário.

3.3.2.1. adduser

O programa recomendado para adicionar novos usuários é o adduser(8). Quando um novo usuário é adicionado, este programa atualiza automaticamente o /etc/passwd e o /etc/group. Ele também cria um diretório inicial para o novo usuário, copia os arquivos de configuração padrão de /usr/shared/skel e pode, opcionalmente, enviar uma nova mensagem de boas-vindas ao novo usuário. Este utilitário deve ser executado como o superusuário.

O utilitário adduser(8) é interativo e percorre as etapas para criar uma nova conta de usuário. Como visto em Adicionando um usuário no FreeBSD, insira as informações necessárias ou pressione Enter para aceitar o valor padrão mostrado entre colchetes. Neste exemplo, o usuário foi convidado para o grupo wheel, permitindo que ele se tornasse o superusuário com o uso do su(1). Quando terminar, o utilitário perguntará se deseja criar outro usuário ou finalizar o comando.

Exemplo 3. Adicionando um usuário no FreeBSD
# adduser
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
#

Como a senha não é mostrada quando digitada, tenha cuidado para não digitar a senha incorretamente ao criar a conta do usuário.

3.3.2.2. rmuser

Para remover completamente um usuário do sistema, execute o rmuser(8) como o superusuário. Este comando executa as seguintes etapas:

  1. Remove a entrada crontab(1) do usuário, se existir.

  2. Remove todas as tarefas at(1) pertencentes ao usuário.

  3. Elimina todos os processos pertencentes ao usuário.

  4. Remove o usuário do arquivo de senhas do sistema.

  5. Opcionalmente, remove o diretório pessoal do usuário, se ele for de propriedade do usuário.

  6. Remove os arquivos de mensagens recebidas pertencentes ao usuário de /var/mail.

  7. Remove todos os arquivos pertencentes ao usuário das áreas de armazenamento de arquivos temporários, como /tmp.

  8. Finalmente, remove o nome de usuário de todos os grupos aos quais ele pertence em /etc/group. Se um grupo ficar vazio e o nome do grupo for o mesmo que o nome de usuário, o grupo será removido. Isso complementa os grupos exclusivos por usuário criados por adduser(8).

O rmuser(8) não pode ser usado para remover contas de superusuário, pois isso quase sempre ocasiona uma de destruição em massa.

Por padrão, um modo interativo é usado, conforme mostrado no exemplo a seguir.

Exemplo 4. Remoção de contas interativas com o rmuser
# rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Removing user (jru): mailspool home passwd.
#
3.3.2.3. chpass

Qualquer usuário pode usar o chpass(1) para alterar seu shell padrão e informações pessoais associadas à sua conta de usuário. O superusuário pode usar esse utilitário para alterar informações adicionais da conta de qualquer usuário.

Quando não há opções, além de um nome de usuário opcional, o chpass(1) exibe um editor contendo informações do usuário. Quando o usuário sai do editor, o banco de dados do usuário é atualizado com as novas informações.

Este utilitário solicitará a senha do usuário ao sair do editor, a menos que o utilitário seja executado como superusuário.

Em Usando o chpass como superusuário, o superusuário digitou chpass jru e agora está visualizando os campos que podem ser alterados para este usuário. Se jru executar este comando, apenas os últimos seis campos serão exibidos e estarão disponíveis para edição. Isso é mostrado em Usando o chpass como usuário regular.

Exemplo 5. Usando o chpass como superusuário
#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:
Exemplo 6. Usando o chpass como usuário regular
#Changing user database information for jru.
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:

Os comandos chfn(1) e chsh(1) são links para chpass(1), como são ypchpass(1), ypchfn(1)eypchsh(1). Já que o suporte ao NIS é automático, colocar o yp antes do comando não é necessário. Os procedimentos para configurar o NIS está documentado em Servidores de Rede.

3.3.2.4. passwd

Qualquer usuário pode alterar facilmente sua senha usando o passwd(1). Para prevenir alterações acidentais ou não autorizadas, este comando irá solicitar a senha atual ao usuário antes de configurar uma nova senha:

Exemplo 7. Alterando Sua Senha
% passwd
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done

O superusuário pode alterar a senha de qualquer usuário especificando o nome de usuário ao executar o passwd(1). Quando este utilitário é executado como superusuário, ele não solicita a senha atual do usuário. Isso permite que a senha seja alterada quando um usuário não consegue lembrar a senha original.

Exemplo 8. Mudando a senha de outro usuário como superusuário
# passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done

Como com o chpass(1), o yppasswd(1) é um link para passwd(1), então o NIS funciona com ambos os comandos.

3.3.2.5. pw

O utilitário pw(8) pode criar, remover, modificar e exibir usuários e grupos. Funciona como um front-end para o usuário do sistema e para os arquivos de grupo. O pw(8) tem um conjunto muito poderoso de opções de linha de comando que o torna adequado para uso em shell scripts, mas novos usuários podem achar isso mais complicado que os outros comandos apresentados nesta seção.

3.3.3. Gerenciando Grupos

Um grupo é uma lista de usuários. Um grupo é identificado pelo nome do grupo e pelo GID. No FreeBSD, o kernel usa o UID de um processo, e a lista de grupos a que pertence, para determinar o que o processo pode fazer. Na maioria das vezes, o GID de um usuário ou processo geralmente significa o primeiro grupo na lista.

O mapeamento do nome do grupo para o GID está listado em /etc/group. Este é um arquivo de texto simples com quatro campos delimitados por dois pontos. O primeiro campo é o nome do grupo, o segundo é a senha criptografada, o terceiro é o GID e o quarto é a lista de membros delimitados por vírgulas. Para uma descrição mais completa da sintaxe, consulte group(5).

O superusuário pode modificar o /etc/group usando um editor de texto. Alternativamente, o pw(8) pode ser usado para adicionar e editar grupos. Por exemplo, para adicionar um grupo chamado teamtwo e confirmar se ele existe:

Exemplo 9. Adicionando um grupo usando o pw(8)
# pw groupadd teamtwo
# pw groupshow teamtwo
teamtwo:*:1100:

Neste exemplo, 1100 é o GID de teamtwo. No momento, teamtwo não possui membros. Este comando adicionará jru como um membro de teamtwo.

Exemplo 10. Adicionando contas de usuários a um novo grupo usando o pw(8)
# pw groupmod teamtwo -M jru
# pw groupshow teamtwo
teamtwo:*:1100:jru

O argumento para a opção -M é uma lista de usuários, delimitada por vírgulas, a serem adicionados a um novo grupo (vazio) ou para substituir os membros de um grupo existente. Para o usuário, essa associação ao grupo é diferente (e adicional ao) do grupo principal do usuário listado no arquivo de senha. Isso significa que o usuário não aparecerá como membro ao usar a opção groupshow com o pw(8), mas mostrará quando a informação é consultada via id(1) ou uma ferramenta similar. Quando o pw(8) é usado para adicionar um usuário a um grupo, ele apenas manipula o /etc/group e não tenta ler dados adicionais do /etc/passwd.

Exemplo 11. Adicionando um novo membro a um grupo usando o pw(8)
# pw groupmod teamtwo -m db
# pw groupshow teamtwo
teamtwo:*:1100:jru,db

Neste exemplo, o argumento para -m é uma lista delimitada por vírgulas de usuários que devem ser adicionados ao grupo. Ao contrário do exemplo anterior, esses usuários são adicionados ao grupo e não substituem usuários existentes no grupo.

Exemplo 12. Usando o id(1) para determinar a associação ao grupo
% id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)

Neste exemplo, jru é um membro dos grupos jru e teamtwo.

Para obter mais informações sobre este comando e o formato do /etc/group, consulte pw(8) e group(5).

3.4. Permissões

No FreeBSD, todo arquivo e diretório tem um conjunto associado de permissões e vários utilitários estão disponíveis para visualizar e modificar essas permissões. É necessário entender como as permissões funcionam para garantir que os usuários consigam acessar os arquivos que precisam e não consigam acessar os arquivos usados pelo sistema operacional ou de propriedade de outros usuários.

Esta seção discute as permissões UNIX™ tradicionais usadas no FreeBSD. Para um controle de acesso ao sistema de arquivos mais refinado, consulte Listas de Controle de Acesso.

No UNIX™, as permissões básicas são atribuídas usando três tipos de acesso: ler, escrever e executar. Esses tipos de acesso são usados para determinar o acesso do arquivo ao proprietário, ao grupo e a outros usuários do arquivo (todos os outros). As permissões de leitura, gravação e execução podem ser representadas como as letras r, w e x. Elas também podem ser representados como números binários, pois cada permissão está ativada ou desativada (0). Quando representada como um número, a ordem é sempre lida como rwx, onde r é ativado com o valor 4, w é ativado com o valor 2 e x é ativado com o valor 1.

A Tabela 4.1 resume as possíveis possibilidades numéricas e alfabéticas. Ao ler a coluna "Listagem do Diretório", um - é usado para representar uma permissão que está desativada.

Tabela 3. Permissões UNIX™
ValorPermissãoListagem de diretório

0

Sem leitura, sem escrita, sem execução

---

1

Sem leitura, sem escrita, execução

--x

2

Sem leitura, escrita, sem execução

-w-

3

Sem leitura, escrita, execução

-wx

4

Leitura, sem escrita, sem execução

r--

5

Leitura, sem escrita, execução

r-x

6

Leitura, escrita, sem execução

rw-

7

Leitura, escrita, execução

rwx

Use o argumento -l com o ls(1) para exibir uma lista longa de diretórios que inclua uma coluna de informações sobre um permissões do arquivo para o proprietário, grupo e outros. Por exemplo, um ls -l em um diretório arbitrário pode mostrar:

% ls -l
total 530
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
-rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt

O primeiro caractere (mais à esquerda) da primeira coluna indica se esse arquivo é um arquivo normal, um diretório, um dispositivo de caractere especial, um soquete ou qualquer outro dispositivo especial de pseudo-arquivo. Neste exemplo, o - indica um arquivo regular. Os próximos três caracteres, rw- neste exemplo, fornecem as permissões para o proprietário do arquivo. Os próximos três caracteres, r--, fornecem as permissões para o grupo ao qual o arquivo pertence. Os três últimos caracteres, r--, dão as permissões para o resto do mundo. Um traço significa que a permissão está desativada. Neste exemplo, as permissões são definidas para que o proprietário possa ler e gravar no arquivo, o grupo possa ler o arquivo e o resto do mundo só possa ler o arquivo. De acordo com a tabela acima, as permissões para este arquivo seriam 644, onde cada dígito representa uma das três partes da permissão do arquivo.

Como o sistema controla as permissões nos dispositivos? O FreeBSD trata a maioria dos dispositivos de hardware como um arquivo nos quais os programas podem abrir, ler e gravar dados. Esses arquivos de dispositivos especiais são armazenados em /dev/.

Diretórios também são tratados como arquivos. Eles tem permissões de leitura, gravação e execução. O bit executável de um diretório tem um significado ligeiramente diferente que nos arquivos. Quando um diretório é marcado como executável, isso significa que é possível mudar para esse diretório usando cd(1). Isso também significa que é possível acessar os arquivos dentro desse diretório, sujeito às permissões dos próprios arquivos.

Para executar uma listagem de diretórios, a permissão de leitura deve estar ativada no diretório. Para deletar um arquivo que se conhece o nome, é necessário ter permissões de escrita e execução no diretório que contém o arquivo.

Há mais bits de permissão, mas eles são usados principalmente em circunstâncias especiais, como binários setuid e diretórios fixos. Para obter mais informações sobre permissões de arquivos e como configurá-las, consulte chmod(1).

3.4.1. Permissões simbólicas

Permissões simbólicas usam caracteres em vez de valores octais para atribuir permissões a arquivos ou diretórios. Permissões simbólicas usam a sintaxe de (quem) (ação) (permissões), onde os seguintes valores estão disponíveis:

OpçãoLetraRepresenta

(quem)

u

Usuário

(quem)

g

Grupo

(quem)

o

Outros

(quem)

a

Todos ("resto do mundo")

(açao)

+

Adiciona permissões

(açao)

-

Remove permissões

(açao)

=

Permissões definidas explicitamente

(permissões)

r

Leitura

(permissões)

w

Escrita

(permissões)

x

Execução

(permissões)

t

bit fixador

(permissões)

s

Set UID ou GID

Esses valores são usados com o chmod(1), mas com letras em vez de números. Por exemplo, o comando a seguir impediria que outros usuários acessassem FILE:

% chmod go= FILE

Uma lista separada por vírgula pode ser fornecida quando mais de um conjunto de alterações em um arquivo precisar ser feito. Por exemplo, o comando a seguir remove as permissões de gravação do grupo e "resto do mundo" no FILE e adiciona as permissões de execução para todos:

% chmod go-w,a+x FILE

3.4.2. Flags de arquivos no FreeBSD

Além das permissões de arquivo, o FreeBSD suporta o uso de "flags de arquivo". Esses sinalizadores adicionam um nível a mais de segurança e controle sobre os arquivos, mas não nos diretórios. Com flags de arquivos, mesmo o root pode ser impedido de remover ou alterar arquivos.

Os sinalizadores de arquivo são modificados usando o chflags(1). Por exemplo, para ativar o sinalizador undeletable do sistema no arquivo file1, use o seguinte comando:

# chflags sunlink file1

Para desabilitar o sinalizador undeletable do sistema, coloque um "no" na frente do sunlink:

# chflags nosunlink file1

Para visualizar os sinalizadores de um arquivo, use -lo com o ls(1):

# ls -lo file1
-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1

Vários flags de arquivo só podem ser adicionados ou removidos pelo usuário root. Em outros casos, o proprietário do arquivo pode definir seus sinalizadores. Consulte chflags(1) e chflags(2) para maiores informações.

3.4.3. As permissões setuid, setgid e sticky

Além das permissões já discutidas, existem três outras configurações específicas que todos os administradores devem conhecer. Eles são as permissões setuid, setgid e sticky.

Essas configurações são importantes para algumas operações UNIX™, pois fornecem funcionalidades normalmente não concedidas a usuários normais. Para compreendê-los, a diferença entre o ID real de usuário e o ID efetivo de usuário deve ser explicada.

O ID de usuário real é o UID que inicia ou é o dono do processo. O ID de usuário efetivo é o UID do usuário com o qual o processo é executado. Por exemplo, o passwd(1) é executado com o ID do usuário real quando um usuário altera sua senha. No entanto, para atualizar o banco de dados de senhas, o comando é executado como o ID efetivo do usuário root. Isso permite que os usuários alterem suas senhas sem ver um erro Permission Denied.

A permissão setuid pode ser definida prefixando um conjunto de permissões com o número quatro (4), conforme mostrado no exemplo a seguir:

# chmod 4755 suidexample.sh

As permissões em suidexample.sh agora se parecem com o seguinte:

-rwsr-xr-x   1 trhodes  trhodes    63 Aug 29 06:36 suidexample.sh

Observe que um s agora faz parte do conjunto de permissões designado para o proprietário do arquivo, substituindo o bit executável. Isso viabiliza utilitários que precisam de permissões elevadas, como o passwd(1).

A opção nosuid mount(8) fará com que esses binários falhem silenciosamente sem alertar o usuário. Essa opção não é totalmente confiável, já que um wrapper nosuid pode contorná-la.

Para ver isso em tempo real, abra dois terminais. Em um deles, digite passwd como um usuário normal. Enquanto aguarda uma nova senha, verifique a tabela de processos e observe as informações de usuário do passwd(1):

No terminal A:

Changing local password for trhodes
Old Password:

No terminal B:

# ps aux | grep passwd
trhodes  5232  0.0  0.2  3420  1608   0  R+    2:10AM   0:00.00 grep passwd
root     5211  0.0  0.2  3620  1724   2  I+    2:09AM   0:00.01 passwd

Embora passwd(1) seja executado como um usuário normal, ele está usando o UID do root.

A permissão setgid executa a mesma função que a permissão setuid; exceto que altera as configurações do grupo. Quando um aplicativo ou utilitário é executado com essa configuração, ele recebe as permissões com base no grupo do arquivo, não no usuário que iniciou o processo.

Para definir a permissão setgid em um arquivo, execute o chmod(1) com dois (2) no início:

# chmod 2755 sgidexample.sh

Na listagem a seguir, observe que o s está agora no campo designado para as configurações de permissão do grupo:

-rwxr-sr-x   1 trhodes  trhodes    44 Aug 31 01:49 sgidexample.sh

Nestes exemplos, mesmo que o shell script em questão seja um arquivo executável, ele não será executado com um EUID diferente ou um ID de usuário efetivo. Isso ocorre porque os shell scripts podem não acessar as chamadas de sistema setuid(2).

Os bits de permissão setuid e setgid podem diminuir a segurança do sistema, permitindo permissões elevadas. A terceira permissão especial, o sticky bit, pode fortalecer a segurança de um sistema.

Quando o sticky bit é definido em um diretório, ele permite a exclusão de arquivos apenas pelo proprietário do arquivo. Isso é útil para impedir a exclusão de arquivos em diretórios públicos, como /tmp, por usuários que não possuem o arquivo. Para utilizar essa permissão, use o um (1) no início das permissões:

# chmod 1777 /tmp

A permissão sticky bit será exibida como um t no final do conjunto de permissões:

# ls -al / | grep tmp
drwxrwxrwt  10 root  wheel         512 Aug 31 01:49 tmp

3.5. Estrutura de Diretórios

Entender a hierarquia de diretórios do FreeBSD é fundamental para obter uma compreensão geral do sistema. O diretório mais importante é o root ou raiz ou "/". Esse diretório é o primeiro montado no momento da inicialização e contém a base do sistema necessária para preparar o sistema operacional para a operação multi-usuário. O diretório raiz também contém pontos de montagem para outros sistemas de arquivos que são montados durante a transição para a operação multi-usuário.

Um ponto de montagem é um diretório no qual sistemas de arquivos adicionais podem ser disponibilizados em um sistema de arquivos principal (geralmente o sistema de arquivos raiz). Isso é descrito em Organização dos Discos. Os pontos de montagem padrão incluem /usr/, /var/, /tmp/, /mnt/ e /cdrom/. Esses diretórios são geralmente associados a entradas em /etc/fstab. Este arquivo é uma tabela de vários sistemas de arquivos e pontos de montagem e é lido pelo sistema. A maioria dos sistemas de arquivos em /etc/fstab é montada automaticamente no momento da inicialização do script rc(8) a não ser que haja a opção noauto. Maiores detalhes em O arquivo fstab.

Uma descrição completa da hierarquia do sistema de arquivos está disponível em hier(7). A tabela a seguir fornece uma visão geral dos diretórios mais comuns.

DiretórioDescrição

/

Diretório raiz do sistema de arquivos.

/bin/

Utilitários de usuário fundamentais para ambientes mono e multi-usuário.

/boot/

Programas e arquivos de configuração usados durante o bootstrap do sistema operacional.

/boot/defaults/

Arquivos de configuração de inicialização padrão. Consulte loader.conf(5) para maiores detalhes.

/dev/

Nós de dispositivo (device nodes). Consulte intro(4) para detalhes.

/etc/

Arquivos de configuração do sistema e scripts.

/etc/defaults/

Arquivos padrão de configuração do sistema. Consulte rc(8) para maiores detalhes.

/etc/mail/

Arquivos de configuração para agentes de transporte de mensagens, como o sendmail(8).

/etc/periodic/

Scripts que são executados diariamente, semanalmente e mensalmente, por meio do cron(8). Consulte periodic(8) para maiores detalhes.

/etc/ppp/

Arquivos de configuração do ppp(8).

/mnt/

Diretório vazio comumente usado pelos administradores do sistema como um ponto de montagem temporário.

/proc/

Sistema de arquivos de processos. Consulte procfs(5), mount_procfs(8) para detalhes.

/rescue/

Programas vinculados estaticamente para recuperação de emergência, conforme descrito em rescue(8).

/root/

Diretório da conta root.

/sbin/

Programas do sistema e utilitários de administração fundamentais para ambientes mono e multi-usuário.

/tmp/

Arquivos temporários que normalmente não são preservados em uma reinicialização do sistema. Um sistema de arquivos baseado em memória é frequentemente montado em /tmp. Isso pode ser automatizado usando as variáveis relacionadas ao tmpmfs do rc.conf(5) ou com uma entrada em /etc/fstab; consulte mdmfs(8) para maiores detalhes.

/usr/

A maioria dos utilitários e aplicativos do usuário.

/usr/bin/

Utilitários comuns, ferramentas de programação e aplicativos.

/usr/include/

Arquivos para "include" do C padrão.

/usr/lib/

Arquivos de biblioteca.

/usr/libdata/

Diversos arquivos de dados de utilitários.

/usr/libexec/

Daemons do sistema e utilitários do sistema executados por outros programas.

/usr/local/

Executáveis e bibliotecas locais. Também é usado como o destino padrão para o framework do ports do FreeBSD. Dentro do /usr/local, o layout geral esboçado por hier(7) para /usr deve ser usado. Exceções são o diretório man, que está diretamente sob /usr/local em vez de sob /usr/local/share, e a documentação do ports está em share/doc/port.

/usr/obj/

Árvore de destino específica da arquitetura produzida pela construção da árvore /usr/src.

/usr/ports/

A Coleção de Ports do FreeBSD (opcional).

/usr/sbin/

Daemons do sistema e utilitários do sistema executados pelos usuários.

/usr/shared/

Arquivos independentes de arquitetura.

/usr/src/

Arquivos do código-fonte do BSD.

/var/

Arquivos de log de múltiplos propósitos, temporários, transientes e de spool. Um sistema de arquivos baseado em memória às vezes é montado em /var. Isso pode ser automatizado usando as variáveis relacionadas ao varmfs em rc.conf(5) ou com uma entrada em /etc/fstab; consulte mdmfs(8) para maiores detalhes.

/var/log/

Diversos arquivos de log do sistema.

/var/mail/

Arquivos de caixa de correio do usuário.

/var/spool/

Diretórios de spooling de impressoras e sistemas de email.

/var/tmp/

Arquivos temporários que geralmente são preservados em uma reinicialização do sistema, a menos que /var seja um sistema de arquivos baseado em memória.

/var/yp/

Mapas de NIS.

3.6. Organização dos Discos

A menor unidade de organização que o FreeBSD usa para encontrar arquivos é o nome do arquivo. Os nomes dos arquivos diferenciam maiúsculas de minúsculas, o que significa que readme.txt e README.TXT são dois arquivos distintos. O FreeBSD não usa a extensão de um arquivo para determinar se é um programa, documento ou alguma outra forma de dados.

Os arquivos são armazenados em diretórios. Um diretório pode não conter arquivos ou pode conter centenas deles. Um diretório também pode conter outros diretórios, permitindo uma hierarquia de diretórios entre si para organizar os dados.

Arquivos e diretórios são referenciados por meio de um nome, seguido por uma barra, /, seguido por qualquer outro nome de diretório que seja necessário. Por exemplo, se o diretório foo contiver um diretório bar que contenha o arquivo readme.txt, o nome completo ou caminho, para o arquivo é foo/bar/readme.txt. Observe que isso é diferente do Windows™ que usa \ para separar nomes de arquivos e diretórios. O FreeBSD não usa letras de unidades ou outros nomes de unidades no caminho. Por exemplo, não se deve digitar c:\foo\bar\readme.txt no FreeBSD.

Diretórios e arquivos são armazenados em um sistema de arquivos. Cada sistema de arquivos contém exatamente um diretório no nível superior, chamado de diretório raiz para esse sistema de arquivos. Este diretório raiz pode conter outros diretórios. Um sistema de arquivos é designado como sistema de arquivos raiz ou /. Todos os outros sistemas de arquivos são montados no sistema de arquivos raiz. Não importa quantos discos estejam no sistema FreeBSD, cada diretório parece fazer parte do mesmo disco.

Considere três sistemas de arquivos, chamados A, B e C. Cada sistema de arquivos tem um diretório raiz, que contém dois outros diretórios, chamados A1, A2 (e da mesma forma B1, B2 e C1, C2).

Chame A de sistema de arquivos raiz. Se ls(1) for usado para visualizar o conteúdo deste diretório, ele mostrará dois subdiretórios, A1 e A2. A árvore de diretórios tem esta aparência:

example dir1

Um sistema de arquivos deve ser montado em um diretório em outro sistema de arquivos. Ao montar o sistema de arquivos B no diretório A1, o diretório raiz de B substitui A1 e os diretórios em B aparecem de acordo:

example dir2

Todos os arquivos que estão nos diretórios B1 ou B2 podem ser alcançados com o caminho /A1/B1 ou /A1/B2, conforme necessário. Todos os arquivos que estavam em /A1 foram temporariamente ocultados. Eles reaparecerão se B for desmontado de A.

Se B tivesse sido montado em A2, o diagrama ficaria assim:

example dir3

e os caminhos seriam /A2/B1 e /A2/B2 respectivamente.

Os sistemas de arquivos podem ser montados uns em cima dos outros. Continuando o último exemplo, o sistema de arquivos C pode ser montado no topo do diretório B1 no sistema de arquivos B, levando a esta disposição:

example dir4

Ou C poderia ser montado diretamente no sistema de arquivos A, sob o diretório A1:

example dir5

É perfeitamente possível ter um sistema de arquivos raiz grande e não precisar criar nenhum outro. Existem algumas desvantagens nessa abordagem e uma vantagem.

Benefícios de vários sistemas de arquivos
  • Sistemas de arquivos diferentes podem ter diferentes opções de montagem. Por exemplo, o sistema de arquivos raiz pode ser montado somente para leitura, impossibilitando que os usuários excluam ou editem inadvertidamente um arquivo crítico. Separar sistemas de arquivos graváveis pelo usuário, como /home, de outros sistemas de arquivos permite que eles sejam montados como nosuid. Essa opção impede que os bits suid/guid dos executáveis armazenados no sistema de arquivos entrem em vigor, possivelmente melhorando a segurança.

  • O FreeBSD otimiza automaticamente o layout dos arquivos em um sistema de arquivos, dependendo de como o sistema de arquivos está sendo usado. Portanto, um sistema de arquivos que contém muitos arquivos pequenos que são gravados com freqüência terá uma otimização diferente para um que contenha menos arquivos maiores. Ao ter um sistema de arquivos maior, essa otimização é quebrada.

  • Os sistemas de arquivos do FreeBSD são robustos se a energia for perdida. No entanto, uma perda de energia em um ponto crítico ainda pode danificar a estrutura do sistema de arquivos. Ao dividir dados em vários sistemas de arquivos, é mais provável que o sistema ainda inicialize, facilitando a restauração do backup conforme necessário.

Benefício de um sistema de arquivos único
  • Os sistemas de arquivos são de tamanho fixo. Se você cria um sistema de arquivos quando instala o FreeBSD e dá a ele um tamanho específico, você pode descobrir mais tarde que precisa aumentar a partição. Isso não é facilmente realizado sem um backup, recriando o sistema de arquivos com o novo tamanho e, em seguida, restaurando os dados de backup.

    O FreeBSD possui o comando growfs(8), que torna possível aumentar o tamanho do sistema de arquivos enquanto montado, removendo essa limitação.

Os sistemas de arquivos estão contidos em partições. Isto não tem o mesmo significado que o uso comum do termo partição (por exemplo, a partição MS-DOS™), por causa da herança UNIX™ do FreeBSD. Cada partição é identificada por uma letra de a até h. Cada partição pode conter apenas um sistema de arquivos, o que significa que os sistemas de arquivos geralmente são descritos por seu ponto de montagem típico na hierarquia do sistema de arquivos ou pela letra da partição em que estão contidos.

O FreeBSD também usa espaço em disco para espaço de swap para fornecer memória virtual. Isso permite que o seu computador se comporte como se tivesse muito mais memória do que realmente tem. Quando o FreeBSD fica sem memória, ele move alguns dos dados que não estão sendo usados atualmente para o espaço de swap, e os move de volta (removendo alguma outra coisa) quando precisa.

Algumas partições possuem certas convenções associadas a elas.

PartiçãoConvenção

a

Normalmente contém o sistema de arquivos raiz.

b

Normalmente contém espaço de swap.

c

Normalmente o mesmo tamanho da slice que a envolve. Isso permite que os programas que precisem trabalhar na slice inteira, como um scanner de bloco defeituoso, trabalhem na partição c. Um sistema de arquivos normalmente não seria criado nessa partição.

d

A partição d costumava ter um significado especial associado a ela, mas isso foi descontinuado e d pode funcionar como qualquer partição normal.

Os discos no FreeBSD são divididos em slices, referidas no Windows™ como partições, numeradas de 1 a 4. Estas são então divididas em partições, que contêm sistemas de arquivos, e são rotuladas usando letras.

Os números das slices seguem o nome do dispositivo, prefixado com um s, começando em 1. Então "da0s1" é a primeira slice na primeira unidade SCSI. Pode haver apenas quatro slices físicas em um disco, mas pode haver slices lógicas dentro de slices físicas do tipo apropriado. Essas slices estendidas são numeradas a partir de 5, então "ada0s5" é a primeira slice estendida no primeiro disco SATA. Esses dispositivos são usados por sistemas de arquivos que esperam ocupar uma slice.

Slices, unidades físicas "perigosamente dedicadas" e outras unidades contêm partições, que são representadas como letras de a até h. Esta letra é adicionada ao nome do dispositivo, então "da0a" é a partição a na primeira unidade da, que é "perigosamente dedicada". A "ada1s3e" é a quinta partição na terceira slice da segunda unidade de disco SATA.

Finalmente, cada disco no sistema é identificado. Um nome de disco começa com um código que indica o tipo de disco e, em seguida, um número, indicando qual é o disco. Ao contrário das slices, a numeração de discos começa em 0. Códigos usuais são listados em Nomes de dispositivos de disco.

Ao se referir a uma partição, inclua o nome do disco, s, o número da slice, em seguida, a letra da partição. Exemplos são mostrados em Exemplo de Nomes de Disco, Slice e Partição.

Modelo conceitual de um disco mostra um modelo conceitual de um layout de disco.

Ao instalar o FreeBSD, configure as slices de disco, crie partições dentro da slice a ser usada para o FreeBSD, crie um sistema de arquivos ou espaço de swap em cada partição e decida onde cada sistema de arquivos será montado.

Tabela 4. Nomes de dispositivos de disco
Tipo de driveNome do drive

discos rígidos SATA e IDE

ada ou ad

Discos rígidos SCSI e dispositivos de armazenamento USB

da

drives de CD-ROMSATA e IDE

cd ou acd

Unidades SCSICD-ROM

cd

Unidades de disquete

fd

Unidades de CD-ROM não-padrão variadas

mcd para CD-ROM Mitsumi e scd para dispositivos de CD-ROM Sony

Unidades de fita SCSI

sa

Unidades de fita IDE

ast

Drives RAID

Exemplos incluem aacd para Adaptec™ AdvancedRAID, mlxd e mlyd para Mylex™, amrd para AMI MegaRAID™, idad para Compaq Smart RAID, twed para 3ware™ RAID.

Exemplo 13. Exemplo de Nomes de Disco, Slice e Partição
NomeSignificado

ada0s1a

A primeira partição (a) na primeira slice (s1) no primeiro disco SATA (ada0).

da1s2e

A quinta partição (e) na segunda slice (s2) no segundo disco SCSI (da1).

Exemplo 14. Modelo conceitual de um disco

Este diagrama mostra a visão do FreeBSD do primeiro disco SATA conectado ao sistema. Suponha que o disco tenha 250 GB de tamanho e contenha uma slice de 80 GB e uma slice de 170 GB (partições MS-DOS™). A primeira slice contém um sistema de arquivos Windows™NTFS, C:, e a segunda fatia contém uma instalação do FreeBSD. Este exemplo de instalação do FreeBSD possui quatro partições de dados e uma partição swap.

Cada uma das quatro partições contém um sistema de arquivos. A partição a é usada para o sistema de arquivos raiz, d para /var/, e para /tmp/ e f para /usr/. A letra de partição c refere-se à fatia inteira e, portanto, não é usada para partições comuns.

disk layout

3.7. Montando e Desmontando Sistemas de Arquivos

O sistema de arquivos é melhor visualizado como uma árvore, enraizada, por assim dizer, em /. O /dev, /usr, e os outros diretórios no diretório raiz são ramos, que podem ter suas próprias ramificações, como /usr/local e assim por diante.

Existem várias razões para abrigar alguns desses diretórios em sistemas de arquivos separados. O /var contém os diretórios log/, spool/ e vários tipos de arquivos temporários e, como tal, podem encher. Encher completamente o sistema de arquivos raiz não é uma boa ideia, então separar o /var do / geralmente é vantajoso.

Outro motivo comum para colocar determinadas árvores de diretório em outros sistemas de arquivos é se elas forem ser armazenadas em discos físicos separados ou se são discos virtuais separados, tal como montagens de NFS (Network File System), descritas em Network File System (NFS) ou unidades de CD-ROM.

3.7.1. O arquivo fstab

Durante o processo de inicialização (O processo de inicialização do FreeBSD), os sistemas de arquivos listados em /etc/fstab são automaticamente montados, exceto pelas entradas que contêm noauto. Este arquivo contém entradas no seguinte formato:

device       /mount-point fstype     options      dumpfreq     passno
device

Um nome de dispositivo existente, conforme explicado em Nomes de dispositivos de disco.

mount-point

Um diretório existente no qual montar o sistema de arquivos.

fstype

O tipo de sistema de arquivos para passar para o mount(8). O sistema de arquivos padrão do FreeBSD é o ufs.

options

rw para sistemas de arquivos de leitura/gravação, ou ro para sistemas de arquivos somente de leitura, seguidos por quaisquer outras opções que possam ser necessárias. Uma opção comum é noauto para sistemas de arquivos normalmente não montados durante a seqüência de inicialização. Outras opções estão listadas em mount(8).

dumpfreq

Usado pelo dump(8) para determinar quais sistemas de arquivos requerem o dump. Se o campo estiver faltando, um valor zero será assumido.

passno

Determina a ordem em que os sistemas de arquivos devem ser verificados. Os sistemas de arquivos que devem ser ignorados devem ter seu passno definido como zero. O sistema de arquivos raiz precisa ser verificado antes de todo o restante e deve ter seu passno definido como um. Os outros sistemas de arquivos devem ser configurados para valores maiores que um. Se mais de um sistema de arquivos tiver o mesmo passno, o fsck(8) tentará verificar os sistemas de arquivos em paralelo, se possível.

Consulte fstab(5) para obter maiores informações sobre o formato do /etc/fstab e suas opções.

3.7.2. Usando o mount(8)

Os sistemas de arquivos são montados usando o comando mount(8). A sintaxe mais básica é a seguinte:

# mount device mountpoint

Este comando fornece muitas opções que são descritas em mount(8). As opções mais usadas incluem:

Opções de montagem
-a

Monte todos os sistemas de arquivos listados em /etc/fstab, exceto aqueles marcados como "noauto", excluídos pela opção -t, ou aqueles que já estão montados.

-d

Faz tudo, exceto a chamada real do sistema de montagem. Esta opção é útil em conjunto com a opção -v para determinar o que o mount(8) está realmente tentando fazer.

-f

Força a montagem de um sistema de arquivos sujo (perigoso) ou a revogação do acesso de gravação ao fazer o downgrade do status de montagem de um sistema de arquivos de leitura/gravação para somente leitura.

-r

Monta o sistema de arquivos somente para leitura. Isso é idêntico ao uso de -o ro.

-t fstype

Monta o tipo de sistema de arquivos especificado ou monta somente sistemas de arquivos do tipo especificado, se -aestiver incluído. "ufs" é o tipo de sistema de arquivos padrão.

-u

Atualiza as opções de montagem no sistema de arquivos.

-v

Fica verboso (mostra mais informações).

-w

Monta o sistema de arquivos para leitura/gravação.

As seguintes opções podem ser passadas para -o como uma lista separada por vírgula:

nosuid

Não interprete flags setuid ou setgid no sistema de arquivos. Essa também é uma opção de segurança útil.

3.7.3. Usando o umount(8)

Para desmontar um sistema de arquivos use umount(8). Esse comando usa um parâmetro que pode ser um ponto de montagem, um nome do dispositivo, -a ou -A.

Todos os usos aceitam -f para forçar a desmontagem e -v para ver mais informações. Atenção, em geral -f não é uma boa opção, pois pode travar o computador ou danificar os dados no sistema de arquivos.

Para desmontar todos os sistemas de arquivos montados, ou apenas os tipos de sistema de arquivos listados após -t, use -a ou -A. Note que -A não tenta desmontar o sistema de arquivos raiz.

3.8. Processos e Daemons

O FreeBSD é um sistema operacional multitarefa. Cada programa em execução a qualquer momento é chamado de processo. Todo comando em execução inicia pelo menos um novo processo e há vários processos de sistema que são executados pelo FreeBSD.

Cada processo é identificado exclusivamente por um número chamado ID do processo (PID). Semelhante aos arquivos, cada processo tem um proprietário e um grupo, e as permissões de proprietário e grupo são usadas para determinar quais arquivos e dispositivos o processo pode abrir. A maioria dos processos também possui um processo pai que os iniciou. Por exemplo, o shell é um processo e qualquer comando iniciado no shell é um processo que tem o shell como seu processo pai. A exceção é um processo especial chamado init(8) que é sempre o primeiro processo a rodar na inicialização e que sempre possui um PID de 1.

Alguns programas não são projetados para serem executados com a entrada contínua do usuário e desconectam do terminal na primeira oportunidade. Por exemplo, um servidor da Web responde a solicitações da Web, em vez de entradas do usuário. Servidores de email são outro exemplo desse tipo de aplicativo. Esses tipos de programas são conhecidos como daemons. O termo daemon vem da mitologia grega e representa uma entidade que não é boa nem má, e que invisivelmente realiza tarefas úteis. É por isso que o mascote do BSD é o daemon de aparência alegre com tênis e um tridente.

Existe uma convenção para nomear programas que normalmente são executados como daemons com um "d" à direita. Por exemplo, BIND é o Berkeley Internet Name Domain, mas o programa real que é executado é named. O programa do servidor da web Apache é o httpd e o daemon de spooling da impressora de linha é o lpd. Esta é apenas uma convenção de nomenclatura. Por exemplo, o daemon de correio principal para o aplicativo Sendmail é o sendmail e não maild.

3.8.1. Visualizando Processos

Para ver os processos em execução no sistema, use o ps(1) ou o top(1). Para exibir uma lista estática dos processos em execução no momento, seus PIDs, quanta memória eles estão usando e o comando com o qual eles foram iniciados, use o ps(1). Para exibir todos os processos em execução e atualizar a exibição a cada poucos segundos para ver interativamente o que o computador está fazendo, use o top(1).

Por padrão, o ps(1) mostra apenas os comandos que estão em execução e que são de propriedade do usuário. Por exemplo:

% ps
 PID TT  STAT    TIME COMMAND
8203  0  Ss   0:00.59 /bin/csh
8895  0  R+   0:00.00 ps

A saída do ps(1) é organizada em várias colunas. A coluna PID exibe o ID do processo. Os PIDs são atribuídos a partir de 1, vão até 99999, e depois retornam ao início. No entanto, um PID não é reatribuído se já estiver em uso. A coluna TT mostra o tty em que o programa está sendo executado e STAT mostra o estado do programa. TIME é a quantidade de tempo que o programa foi executado na CPU. Normalmente, esse não é o tempo decorrido desde que o programa foi iniciado, pois a maioria dos programas gasta muito tempo esperando que as coisas aconteçam antes que precisem gastar tempo na CPU. Finalmente, COMMAND é o comando que foi usado para iniciar o programa.

Várias opções diferentes estão disponíveis para alterar as informações exibidas. Um dos conjuntos mais úteis é auxww, onde a exibe informações sobre todos os processos em execução de todos os usuários, u exibe o nome de usuário e o uso de memória do proprietário do processo, x exibe informações sobre os processos do daemon e ww faz com que o ps(1) exiba a linha de comando completa para cada processo, em vez de truncá-la para caber na tela quando é muito longa.

A saída do top(1) é semelhante a abaixo:

% top
last pid:  9609;  load averages:  0.56,  0.45,  0.36              up 0+00:20:03  10:21:46
107 processes: 2 running, 104 sleeping, 1 zombie
CPU:  6.2% user,  0.1% nice,  8.2% system,  0.4% interrupt, 85.1% idle
Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free
ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other
Swap: 2048M Total, 2048M Free

  PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
  557 root          1 -21  r31   136M 42296K select  0   2:20  9.96% Xorg
 8198 dru           2  52    0   449M 82736K select  3   0:08  5.96% kdeinit4
 8311 dru          27  30    0  1150M   187M uwait   1   1:37  0.98% firefox
  431 root          1  20    0 14268K  1728K select  0   0:06  0.98% moused
 9551 dru           1  21    0 16600K  2660K CPU3    3   0:01  0.98% top
 2357 dru           4  37    0   718M   141M select  0   0:21  0.00% kdeinit4
 8705 dru           4  35    0   480M    98M select  2   0:20  0.00% kdeinit4
 8076 dru           6  20    0   552M   113M uwait   0   0:12  0.00% soffice.bin
 2623 root          1  30   10 12088K  1636K select  3   0:09  0.00% powerd
 2338 dru           1  20    0   440M 84532K select  1   0:06  0.00% kwin
 1427 dru           5  22    0   605M 86412K select  1   0:05  0.00% kdeinit4

A saída é dividida em duas seções. O cabeçalho (as primeiras cinco ou seis linhas) mostra o PID do último processo executado, as médias de carga do sistema (que são uma medida de quão ocupado o sistema está), o tempo de atividade do sistema desde a última reinicialização) e a hora atual. As outras informações no cabeçalho se relacionam com quantos processos estão sendo executados, quanta memória e swap estão em uso e quanto tempo o sistema está gastando em diferentes estados da CPU. Se o módulo do sistema de arquivos ZFS foi carregado, uma linha ARC indica a quantidade de dados que foram lidos do cache de memória, e não do disco.

Abaixo do cabeçalho há uma série de colunas contendo informações semelhantes à saída do ps(1), como o PID, nome de usuário, quantidade de tempo de CPU e o comando que iniciou o processo. Por padrão, o top(1) também exibe a quantidade de espaço de memória ocupada pelo processo. Isso é dividido em duas colunas: uma para o tamanho total e outra para o tamanho do residente. O tamanho total é a quantidade de memória que o aplicativo precisa e o tamanho de residente é o quanto ele está realmente usando agora.

O top(1) atualiza automaticamente a exibição a cada dois segundos. Um intervalo diferente pode ser especificado com -s.

3.8.2. Matando Processos

Uma maneira de se comunicar com qualquer processo ou daemon em execução é enviar um sinal usando o kill(1). Existem vários sinais diferentes; alguns têm um significado específico, enquanto outros são descritos na documentação do comando. Um usuário só pode enviar um sinal para um processo que seja seu. Enviar um sinal para o processo de outra pessoa resultará em um erro de permissão negada. A exceção é o usuário root, que pode enviar sinais para os processos de qualquer pessoa.

O sistema operacional também pode enviar um sinal para um processo. Se um aplicativo estiver mal escrito e tentar acessar a memória que não deveria, o FreeBSD enviará ao processo o sinal de "Segmentation Violation" (SIGSEGV). Se uma aplicação foi escrita para usar a chamada de sistema alarm(3) para ser alertada após um período de tempo, será enviado o sinal "Alarm" (SIGALRM).

Dois sinais podem ser usados para interromper um processo: SIGTERM e SIGKILL. SIGTERM é a maneira educada de eliminar um processo, pois o processo pode ler o sinal, fechar quaisquer arquivos de log que possam estar abertos e tentar terminar o que está fazendo antes de desligar. Em alguns casos, um processo pode ignorar SIGTERM se estiver no meio de alguma tarefa que não pode ser interrompida.

SIGKILL não pode ser ignorado por um processo. Enviar um SIGKILL para um processo geralmente interromperá esse processo de uma vez por todas. .

Outros sinais comumente usados são SIGHUP, SIGUSR1 e SIGUSR2. Como esses são sinais de finalidade geral, diferentes aplicativos responderão de maneira diferente.

Por exemplo, depois de alterar o arquivo de configuração de um servidor da Web, o servidor da Web precisa ser instruído a reler sua configuração. Reiniciar o httpd resultaria em um breve período de interrupção no servidor da web. Em vez disso, envie ao daemon o sinal SIGHUP. Esteja ciente de que diferentes daemons terão um comportamento diferente, então consulte a documentação do daemon para determinar se SIGHUP terá os resultados desejados.

Procedure: Enviando um sinal para um processo

Este exemplo mostra como enviar um sinal para o inetd(8). O arquivo de configuração do inetd(8) é o /etc/inetd.conf e o inetd(8) irá reler este arquivo de configuração quando for enviado um SIGHUP.

  1. Encontre o PID do processo para enviar o sinal usando pgrep(1). Neste exemplo, o PID do inetd(8) é 198:

    % pgrep -l inetd
    198  inetd -wW
  2. Use o kill(1) para enviar o sinal. Como o inetd(8) é de propriedade do root, use o su(1) para se tornar root primeiro.

    % su
    Password:
    # /bin/kill -s HUP 198

    Como a maioria dos comandos UNIX™, o kill(1) não imprimirá nenhuma saída se for bem-sucedido. Se um sinal for enviado para um processo que não pertence ao usuário, a mensagem kill: PID: Operation not permitted será exibida. Errar o PID irá enviar o sinal para o processo errado, o que poderia ter resultados negativos, ou enviará o sinal para um PID que não esteja em uso no momento, resultando em o erro kill: PID: No such process.

    Por que usar o /bin/kill?

    Muitos shells fornecem o kill como um comando interno, o que significa que o shell enviará o sinal diretamente, em vez de executar o /bin/kill. Esteja ciente de que diferentes shells possuem uma sintaxe diferente para especificar o nome do sinal a ser enviado. Em vez de tentar aprender todos eles, pode ser mais simples especificar explicitamente o uso do /bin/kill.

Ao enviar outros sinais, substitua TERM ou KILL pelo nome do sinal.

Matar um processo aleatório no sistema é uma má ideia. Em particular, o init(8), PID 1, é especial. Executar /bin/kill -s KILL 1 é uma maneira rápida e não recomendada de desligar o sistema. Sempre verifique os argumentos do kill(1)antes de pressionar a tecla Enter.

3.9. Shells

Um shell fornece uma interface de linha de comandos para interagir com o sistema operacional. Um shell recebe comandos do canal de entrada e os executa. Muitos shells fornecem funções incorporadas para ajudar nas tarefas diárias, como gerenciamento de arquivos, referenciamento de arquivos, edição de linha de comando, macros de comando e variáveis de ambiente. O FreeBSD vem com vários shells, incluindo o shell Bourne (sh(1)) e o shell C estendido (tcsh(1)). Outros shells estão disponíveis na Coleção de Ports do FreeBSD, como o zsh e o bash.

O shell usado é realmente uma questão de gosto. Um programador C pode se sentir mais confortável com um shell semelhante ao C, como o tcsh(1). Um usuário Linux™ pode preferir o bash. Cada shell tem propriedades únicas que podem ou não funcionar com o ambiente de trabalho preferido de um usuário, e é por isso que existe a opção de qual shell usar.

Um recurso de shell comum é a conclusão do nome do arquivo. Depois que um usuário digita as primeiras letras de um comando ou nome de arquivo e pressiona a tecla Tab, o shell completa o restante do comando ou nome do arquivo. Considere dois arquivos chamados foobar e football. Para excluir foobar, o usuário pode digitar rm foo e pressionar a tecla Tab para completar o nome do arquivo.

Mas se o shell mostrar apenas rm foo. Não foi possível completar o nome do arquivo porque ambos foobar e football começam com foo. Algumas shells emitem um sinal sonoro ou mostram todas as opções se houver mais de um nome. O usuário deve digitar mais caracteres para identificar o nome do arquivo desejado. Digitar um t e pressionar a tecla Tab novamente é suficiente para permitir que o shell determine qual nome de arquivo é desejado e preencha o resto.

Outra característica do shell é o uso de variáveis de ambiente. As variáveis de ambiente são um par de variável/chave armazenado no ambiente do shell. Esse ambiente pode ser lido por qualquer programa chamado pela shell e, portanto, contém muitas configurações de programas. Variáveis de Ambiente Comuns fornece uma lista de variáveis de ambiente comuns e seus significados. Observe que os nomes das variáveis de ambiente estão sempre em maiúsculas.

Tabela 5. Variáveis de Ambiente Comuns
VariávelDescrição

USER

Nome do usuário atual.

PATH

Lista de diretórios separados por dois pontos para pesquisa de binários (progamas).

DISPLAY

Nome de rede do display do Xorg para conexão, se disponível.

SHELL

O shell atual.

TERM

O nome do tipo de terminal do usuário. Usado para determinar os recursos do terminal.

TERMCAP

Acesso à base de dados dos códigos de escape do terminal para executar várias funções do terminal.

OSTYPE

Tipo de sistema operacional.

MACHTYPE

A arquitetura da CPU do sistema.

EDITOR

O editor de texto preferencial do usuário.

PAGER

O utilitário preferencial do usuário para visualização de texto página à página.

MANPATH

Lista de diretórios separados por dois pontos para pesquisar páginas de manual.

O processo para definir uma variável de ambiente difere entre as shells. Em tcsh(1) e csh(1), use setenv para definir variáveis de ambiente. Em sh(1) e no bash, use export para definir as variáveis de ambiente atuais. Este exemplo define o EDITOR padrão para /usr/local/bin/emacs para a shell tcsh(1):

% setenv EDITOR /usr/local/bin/emacs

O comando equivalente para bash seria:

% export EDITOR="/usr/local/bin/emacs"

Para expandir uma variável de ambiente para ver sua configuração atual, digite um caracter $ na frente de seu nome na linha de comando. Por exemplo, echo $TERM exibe a configuração atual do $TERM.

Shells tratam caracteres especiais, conhecidos como meta-caracteres, como representações especiais de dados. O meta-caracter mais comum é *, que representa qualquer número de caracteres em um nome de arquivo. Meta-caracteres podem ser usados para executar a globalização de nomes de arquivos. Por exemplo, echo * é equivalente a ls porque a shell pega todos os arquivos que correspondem ao * e echo os lista na linha de comando.

Para evitar que a shell interprete um caractere especial, escape-o a partir da shell, iniciando-o com uma barra invertida (\). Por exemplo, echo $TERM imprime a configuração do terminal, enquanto echo \$TERM imprime literalmente a string $TERM.

3.9.1. Alterando a Shell

A maneira mais fácil de alterar permanentemente a shell padrão é usar o chsh. A execução desse comando abrirá o editor que está configurado na variável de ambiente EDITOR, que por padrão é definido como o vi(1). Altere a linha Shell: para o caminho completo da nova shell.

Como alternativa, use chsh -s, que irá definir a shell especificada sem abrir um editor. Por exemplo, para alterar a shell para bash:

% chsh -s /usr/local/bin/bash

A nova shell deve estar presente no arquivo /etc/shells. Se a shell foi instalada a partir da coleção de ports do FreeBSD, como descrito em Instalando Aplicativos. Pacotes e Ports, ela deve ser adicionada automaticamente a este arquivo. Se estiver faltando, adicione-a usando este comando, substituindo o caminho pelo caminho da shell:

# echo /usr/local/bin/bash >> /etc/shells

Em seguida, execute novamente o chsh(1).

3.9.2. Técnicas Avançadas de Shell

A shell UNIX™ não é apenas um interpretador de comandos, ela atua como uma ferramenta poderosa que permite aos usuários executar comandos, redirecionar sua saída, redirecionar sua entrada e encadear comandos para melhorar o resultado final. Quando essa funcionalidade é mesclada com comandos incorporados, é fornecido ao usuário um ambiente que pode maximizar a eficiência.

O redirecionamento de shell é a ação de enviar a saída ou a entrada de um comando para outro comando ou para um arquivo. Para capturar a saída do comando ls(1), por exemplo, em um arquivo, redirecione a saída:

% ls > directory_listing.txt

O conteúdo do diretório agora será listado em directory_listing.txt. Alguns comandos podem ser usados para ler entradas, como sort(1). Para classificar esta listagem, redirecione a entrada:

% sort < directory_listing.txt

A entrada será classificada e colocada na tela. Para redirecionar essa entrada para outro arquivo, pode-se redirecionar a saída de sort(1) misturando a direção:

% sort < directory_listing.txt > sorted.txt

Em todos os exemplos anteriores, os comandos estão executando o redirecionamento usando descritores de arquivos. Todo sistema UNIX™ possui descritores de arquivos, que incluem entrada padrão (stdin), saída padrão (stdout) e erro padrão (stderr). Cada um tem um propósito, onde a entrada pode ser um teclado ou um mouse, algo que fornece entrada. A saída pode ser uma tela ou papel em uma impressora. E erro seria tudo o que pode ser usado para mensagens de diagnóstico ou erro. Todos os três são considerados descritores de arquivos baseados em I/O e, às vezes, considerados fluxos.

Através do uso desses descritores, a shell permite que a saída e a entrada sejam passadas por vários comandos e redirecionadas para/ou a partir de um arquivo. Outro método de redirecionamento é o operador de pipe.

O operador pipe UNIX™, "|" permite que a saída de um comando seja transmitida diretamente ou direcionada para outro programa. Basicamente, um pipe permite que a saída padrão de um comando seja passada como entrada padrão para outro comando, por exemplo:

% cat directory_listing.txt | sort | less

Nesse exemplo, o conteúdo de directory_listing.txt será classificado e a saída será transmitida para less(1). Isso permite que o usuário role pela saída em seu próprio ritmo e evite que ela role para fora da tela.

3.10. Editores de Texto

A maioria das configurações do FreeBSD é feita através da edição de arquivos de texto. Por isso, é uma boa ideia familiarizar-se com um editor de texto. O FreeBSD vem com alguns como parte do sistema base, e muitos outros estão disponíveis na coleção do ports.

Um editor simples para aprender é o ee(1), que significa editor fácil (Ease Editor). Para iniciar este editor, digite ee filename em que filename é o nome do arquivo a ser editado. Uma vez dentro do editor, todos os comandos para manipular as funções do editor são listados no topo da tela. O cursor (^) representa Ctrl, então ^e expande para Ctrl+e. Para sair do ee(1), pressione Esc e escolha a opção "leave editor" no menu principal. O editor pedirá para salvar as alterações, caso o arquivo tenha sido modificado.

O FreeBSD também vem com editores de texto mais poderosos, como o vi(1), como parte do sistema base. Outros editores, como editors/emacs e editors/vim, fazem parte da coleção do ports do FreeBSD. Esses editores oferecem mais funcionalidade às custas de serem mais complicados de aprender. Aprender um editor mais poderoso como o vim ou o Emacs pode economizar mais tempo a longo prazo.

Muitos aplicativos que modificam arquivos ou exigem entrada digitada abrirão automaticamente um editor de texto. Para alterar o editor padrão, defina a variável de ambiente EDITOR conforme descrito em Shells.

3.11. Dispositivos e nós de dispositivos

Um dispositivo é um termo usado principalmente para atividades relacionadas a hardware em um sistema, incluindo discos, impressoras, placas gráficas e teclados. Quando o FreeBSD inicializa, a maioria das mensagens de inicialização se refere aos dispositivos sendo detectados. Uma cópia das mensagens de inicialização é salva em /var/run/dmesg.boot.

Cada dispositivo tem um nome e um número de dispositivo. Por exemplo, ada0 é o primeiro disco rígido SATA, enquanto kbd0 representa o teclado.

A maioria dos dispositivos no FreeBSD deve ser acessada através de arquivos especiais chamados nós de dispositivos (device nodes), que estão localizados em /dev.

3.12. Páginas de Manual

A documentação mais abrangente sobre o FreeBSD está na forma de páginas de manual. Quase todos os programas do sistema vêm com um breve manual de referência explicando a operação básica e os argumentos disponíveis. Estes manuais podem ser visualizados usando o man:

% man command

onde command é o nome do comando para aprender. Por exemplo, para saber mais sobre o ls(1), digite:

% man ls

As páginas de manual são divididas em seções que representam o tipo de tópico. No FreeBSD, as seguintes seções estão disponíveis:

  1. Comandos de usuário.

  2. Chamadas do sistema e números de erro.

  3. Funções nas bibliotecas C.

  4. Drivers de dispositivos.

  5. Formatos de arquivo.

  6. Jogos e outras diversões.

  7. Informações diversas.

  8. Comandos de manutenção e operação do sistema.

  9. Interfaces do kernel do sistema.

Em alguns casos, o mesmo tópico pode aparecer em mais de uma seção do manual online. Por exemplo, existe um comando de usuário chmod e uma chamada de sistema chmod(). Para informar ao man(1) qual seção exibir, especifique o número da seção:

% man 1 chmod

Isto irá mostrar a página de manual do comando chmod(1). Referências a uma seção em particular do manual online são tradicionalmente colocadas entre parênteses na documentação escrita, então chmod(1) refere-se ao comando do usuário e chmod(2) refere-se à chamada do sistema.

Se o nome da página de manual for desconhecido, use man -k para procurar por palavras-chave nas descrições da página de manual:

% man -k mail

Este comando exibe uma lista de comandos que possuem a palavra-chave "mail" em suas descrições. Isso é equivalente a usar o apropos(1).

Para ler as descrições de todos os comandos em /usr/bin, digite:

% cd /usr/bin
% man -f * | more

ou

% cd /usr/bin
% whatis * |more

3.12.1. Arquivos GNU Info

O FreeBSD inclui vários aplicativos e utilitários produzidos pela Free Software Foundation (FSF). Além das páginas de manual, esses programas podem incluir documentos de hipertexto chamados arquivos info. Elas podem ser visualizadas usando info(1) ou, se o editors/emacs estiver instalado, o modo info do emacs.

Para usar o info(1), digite:

% info

Para uma breve introdução, digite h. Para uma referência rápida de comandos, digite ?.

Capítulo 4. Instalando Aplicativos: Pacotes e Ports

4.1. Sinopse

O FreeBSD tem uma grande coleção de ferramentas dentro do sistema base. Além disso, o FreeBSD fornece duas ferramentas complementares para a instalação de software de terceiros: o a Coleção de Ports do FreeBSD, para instalação a partir do código-fonte, e pacotes, para instalação de binários pré-compilados. Qualquer um dos métodos pode ser usado para instalar um software de uma mídia local ou da rede.

Depois de ler este capítulo, você saberá:

  • A diferença entre pacotes binários e ports.

  • Como encontrar softwares de terceiros que tenham sido portados para o FreeBSD.

  • Como gerenciar pacotes binários usando o pkg.

  • Como compilar software de terceiros a partir do código-fonte usando a coleção de ports.

  • Como encontrar os arquivos instalados do aplicativo para configuração pós-instalação.

  • O que fazer se a instalação do software falhar.

4.2. Visão geral sobre a Instalação de Software

As etapas típicas para instalar um software de terceiros em um sistema UNIX™ incluem:

  1. Encontre e baixe o software, que pode ser distribuído no formato de código-fonte ou como um binário.

  2. Desempacote o software a partir do seu formato de distribuição. Tipicamente é um arquivo tarball compactado com um programa como compress(1),gzip(1), bzip2(1) ou xz(1).

  3. Localize a documentação em INSTALL, README ou algum arquivo em um subdiretório doc/ e leia sobre como instalar o software.

  4. Se o software foi distribuído como código-fonte, compile-o. Isso pode envolver a edição de um Makefile ou a execução de um script configure.

  5. Teste e instale o software.

Um port do FreeBSD é uma coleção de arquivos projetados para automatizar o processo de compilação de um aplicativo a partir do código-fonte. Os arquivos que compõem um port contêm todas as informações necessárias para baixar, extrair, corrigir, compilar e instalar automaticamente o aplicativo.

Se o software ainda não foi adaptado e testado no FreeBSD, o código-fonte pode precisar ser editado para que seja instalado e executado corretamente.

No entanto, mais de 24.000 aplicativos de terceiros já foram portados para o FreeBSD. Quando possível, esses aplicativos são disponibilizados para download como pacotes pré-compilados.

Pacotes podem ser manipulados com os comandos de gerenciamento de pacotes do FreeBSD.

Ambos, pacotes e ports, entendem dependências. Se um pacote ou port for usado para instalar um aplicativo, e uma biblioteca dependente ainda não estiver instalada, a biblioteca será instalada automaticamente primeiro.

Um pacote do FreeBSD contém cópias pré-compiladas de todos os comandos para uma aplicação, assim como quaisquer arquivos de configuração e documentação. Um pacote pode ser manipulado com os comandos pkg(8), como pkg install.

Mesmo as duas tecnologias sendo semelhantes, os pacotes e os ports têm seus próprios pontos fortes. Selecione a tecnologia que melhor atenda aos seus requisitos para instalar um aplicativo específico.

Benefícios dos Pacotes
  • Um tarball compactado de um pacote geralmente é menor que o tarball compactado que contém o código-fonte do aplicativo.

  • Pacotes não requerem tempo de compilação. Para aplicativos grandes, como o Mozilla, KDE ou GNOME, isso pode ser importante em um sistema lento.

  • Pacotes não requerem nenhum entendimento do processo envolvido na compilação de software no FreeBSD.

Benefícios dos Ports
  • Os pacotes são normalmente compilados com opções conservadoras porque eles precisam ser executados no número máximo de sistemas. Ao compilar a partir do port, podem-se alterar as opções de compilação.

  • Alguns aplicativos têm opções em tempo de compilação relacionadas a quais recursos estão instalados. Por exemplo, o Apache pode ser configurado com uma ampla variedade de diferentes opções internas.

    Em alguns casos, vários pacotes existirão para o mesmo aplicativo para especificar determinadas configurações. Por exemplo, o Ghostscript está disponível como um pacote ghostscript e um pacote ghostscript-nox11, dependendo se o Xorg está instalado ou não. Criar vários pacotes rapidamente se torna impossível se um aplicativo tiver mais de uma ou duas opções diferentes de tempo de compilação.

  • As condições de licenciamento de alguns softwares proíbem sua distribuição em binário. Tais softwares devem ser distribuídos como código-fonte o qual deve ser compilado pelo usuário final.

  • Algumas pessoas não confiam em distribuições binárias ou preferem ler o código-fonte para procurar possíveis problemas.

  • O código-fonte é necessário para aplicar patches personalizados.

Para acompanhar a atualização dos ports, inscreva-se na lista de discussão dos ports do FreeBSD e no link Lista de discussão de bugs no FreeBSD.

Antes de instalar qualquer aplicativo, verifique https://vuxml.freebsd.org/ para questões de segurança relacionadas ao aplicativo ou digite pkg audit -F para verificar todas as instâncias instaladas aplicativos para vulnerabilidades conhecidas.

O restante deste capítulo explica como usar pacotes e ports para instalar e gerenciar software de terceiros no FreeBSD.

4.3. Encontrando Software

A lista de aplicativos disponíveis do FreeBSD está crescendo o tempo todo. Existem várias maneiras de encontrar softwares para instalar:

  • O site do FreeBSD mantém uma lista atualizada e pesquisável de todos os aplicativos disponíveis, em https://www.FreeBSD.org/ports/. Os ports podem ser pesquisados por nome do aplicativo ou por categoria de software.

  • Dan Langille mantém o FreshPorts.org, que fornece um utilitário de pesquisa abrangente e também rastreia alterações nos aplicativos da Coleção de Ports. Os usuários registrados podem criar uma lista de observação personalizada para receber um e-mail automatizado quando seus ports sendo monitorados forem atualizados.

  • Se encontrar um aplicativo específico se tornar desafiador, tente pesquisar um site como SourceForge.net ou GitHub.com então volte no site do FreeBSD para ver se o aplicativo foi portado.

  • Para pesquisar o repositório de pacotes binários por um aplicativo:

    # pkg search subversion
    git-subversion-1.9.2
    java-subversion-1.8.8_2
    p5-subversion-1.8.8_2
    py27-hgsubversion-1.6
    py27-subversion-1.8.8_2
    ruby-subversion-1.8.8_2
    subversion-1.8.8_2
    subversion-book-4515
    subversion-static-1.8.8_2
    subversion16-1.6.23_4
    subversion17-1.7.16_2

    Os nomes dos pacotes incluem o número da versão e, no caso de ports baseados em python, o número da versão do pacote python sobre o qual o pacote foi compilado. Alguns ports também possuem várias versões disponíveis. No caso do Subversion, existem diferentes versões disponíveis, bem como diferentes opções de compilação. Neste caso, a versão estaticamente vinculada do Subversion. Ao indicar qual pacote instalar, é melhor especificar o aplicativo pela origem do port, que é o caminho na árvore de ports. Repita o pkg search com -o para listar a origem de cada pacote:

    # pkg search -o subversion
    devel/git-subversion
    java/java-subversion
    devel/p5-subversion
    devel/py-hgsubversion
    devel/py-subversion
    devel/ruby-subversion
    devel/subversion16
    devel/subversion17
    devel/subversion
    devel/subversion-book
    devel/subversion-static

    Pesquisar por shell globs, expressões regulares, correspondência exata, por descrição ou qualquer outro campo no banco de dados do repositório também é suportado pelo pkg search. Depois de instalar o ports-mgmt/pkg ou o ports-mgmt/pkg-devel, veja pkg-search(8) para maiores detalhes.

  • Se a Coleção de Ports já estiver instalada, existem vários métodos para consultar a versão local da árvore de ports. Para descobrir em qual categoria um port está, digite whereisfile, onde file é o programa a ser instalado:

    # whereis lsof
    lsof: /usr/ports/sysutils/lsof

    Como alternativa, uma declaração echo(1) pode ser usada:

    # echo /usr/ports/*/*lsof*
    /usr/ports/sysutils/lsof

    Observe que isso também retornará todos os arquivos correspondentes baixados no diretório /usr/ports/distfiles.

  • Outra maneira de encontrar software é usando o mecanismo de pesquisa integrado da Coleção de Ports. Para usar o recurso de pesquisa, cd para /usr/ports, execute make search name=program-name onde program-name é o nome do software. Por exemplo, para procurar por lsof:

    # cd /usr/ports
    # make search name=lsof
    Port:   lsof-4.88.d,8
    Path:   /usr/ports/sysutils/lsof
    Info:   Lists information about open files (similar to fstat(1))
    Maint:  ler@lerctr.org
    Index:  sysutils
    B-deps:
    R-deps:

    O mecanismo de pesquisa interna usa um arquivo de informações de índice. Se uma mensagem indicar que o INDEX é necessário, execute make fetchindex para baixar o arquivo de índice atual. Com o INDEX presente, o make search poderá realizar a pesquisa solicitada.

    A linha "Path:" indica onde encontrar o port.

    Para receber menos informações, use o recurso quicksearch:

    # cd /usr/ports
    # make quicksearch name=lsof
    Port:   lsof-4.88.d,8
    Path:   /usr/ports/sysutils/lsof
    Info:   Lists information about open files (similar to fstat(1))

    Para uma busca mais aprofundada, use o make search key=string ou o make quicksearch key=string, onde string é algum texto para procurar. O texto pode estar em comentários, descrições ou dependências para encontrar ports relacionados a um assunto em particular quando o nome do programa é desconhecido.

    Ao usar pesquisa ou pesquisa rápida, a cadeia de pesquisa não diferencia maiúsculas de minúsculas. Procurar por "LSOF" produzirá os mesmos resultados que procurar por "lsof".

4.4. Usando o pkg para o gerenciamento de pacotes binários

O pkg é o substituto da próxima geração para as tradicionais ferramentas de gerenciamento de pacotes do FreeBSD, oferecendo muitos recursos que tornam o processamento de pacotes binários mais rápido e fácil.

Para sites que desejam apenas usar pacotes binários pré-construídos a partir dos espelhos do FreeBSD, o gerenciamento de pacotes com pkg pode ser suficiente.

No entanto, para aqueles que optarem por compilar suas aplicações a partir do código-fonte ou que utilizarem seus próprios repositórios, será necessária uma ferramenta de gerenciamento de ports separada.

Como o pkg só funciona com pacotes binários, ele não é um substituto para tais ferramentas. Estas ferramentas podem ser usadas para instalar o software a partir de pacotes binários e da Coleção do Ports, enquanto o pkg instala apenas pacotes binários.

4.4.1. Introdução ao pkg

O FreeBSD inclui um utilitário de bootstrap que pode ser usado para baixar e instalar o pkg e suas páginas de manual. Este utilitário foi projetado para funcionar com versões do FreeBSD começando com 10.X.

Nem todas as versões e arquiteturas do FreeBSD suportam este processo de bootstrap. A lista atual está em https://pkg.freebsd.org/. Para outros casos, o pkg deve ser instalado a partir da coleção de ports ou como um pacote binário.

Para inicializar o sistema, execute:

# /usr/sbin/pkg

Você deve ter uma conexão com a Internet para que o processo de inicialização seja bem-sucedido.

Caso contrário, para instalar o port, execute:

# cd /usr/ports/ports-mgmt/pkg
# make
# make install clean

Ao atualizar um sistema existente que usava originalmente as ferramentas pkg_* mais antigas, o banco de dados deve ser convertido para o novo formato, para que as novas ferramentas estejam cientes dos pacotes já instalados. Uma vez que o pkg tenha sido instalado, o banco de dados de pacotes deve ser convertido do formato tradicional para o novo formato, executando este comando:

# pkg2ng

Esta etapa não é necessária para novas instalações que ainda não possuem nenhum software de terceiros instalado.

Este passo não é reversível. Uma vez que o banco de dados de pacotes tenha sido convertido para o formato pkg, as ferramentas tradicionais pkg_* não devem mais ser usadas.

A conversão do banco de dados de pacotes pode emitir erros conforme o conteúdo é convertido para a nova versão. Geralmente, esses erros podem ser ignorados com segurança. No entanto, uma lista com os softwares que não foram convertidos com sucesso é mostrada após o pkg2ng terminar. Esses aplicativos devem ser reinstalados manualmente.

Para garantir que a Coleção de Ports registre novos softwares com o pkg ao invés do tradicional banco de dados de pacotes, versões do FreeBSD anteriores a 10.X requerem esta linha em /etc/make.conf:

WITH_PKGNG=	yes

Por padrão, o pkg usa os pacotes binários dos espelhos de pacotes do FreeBSD (o repositório). Para obter informações sobre como criar um repositório de pacotes personalizados, consulte Compilando Pacotes com o Poudriere.

Opções adicionais de configuração do pkg são descritas em pkg.conf(5).

As informações de uso do pkg estão disponíveis na página de manual pkg(8) ou executando o pkg sem argumentos adicionais.

Cada argumento do comando pkg é documentado em uma página de manual específica do comando. Para ler a página de manual do pkg install, por exemplo, execute um destes comandos:

# pkg help install
# man pkg-install

O restante desta seção demonstra tarefas comuns de gerenciamento de pacotes binários que podem ser executadas usando o pkg. Cada comando demonstrado fornece muitos switches para personalizar seu uso. Consulte a ajuda de um comando ou a página do manual para obter detalhes e mais exemplos.

4.4.2. Branches Ports Trimestrais e Mais Recentes

As branches Quarterly(trimestrais) provê aos usuários uma experiência mais estável e previsível para instalação e upgrade de ports e pacotes. Isto é feito essencialmente permitindo apenas atualizações que não contém novas features (non-features updates). Branches trimestrais visam receber correções se segurança (que talvez sejam atualizações de versão, ou commits de backports), correções de bugs e compliance de ports ou alterações de frameworks. A branch trimestral é baseada (anualmente) na HEAD no início de Janeiro, Abril, Julho e Outubro. As branches são nomeadas de acordo com o ano (YYYY) e o quarter (Q1-4) em que são criadas. Por exemplo, a branch trimestral criada em Janeiro de 2016, é nomeada 2016Q1. E a branch Latest provê as últimas versões dos pacotes para os usuários.

Para alternar de trimestral para latest execute os seguintes comandos:

# cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf

Edite o arquivo /usr/local/etc/pkg/repos/FreeBSD.conf and change the string quarterly to latest in the url: line.

O resultado deve ser semelhante ao seguinte:

FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

E finalmente rode este comando para atualizar do novo (ultimo) meta dado do repositório.

# pkg update -f

4.4.3. Obtendo informações sobre os pacotes instalados

Informações sobre os pacotes instalados em um sistema podem ser visualizadas executando pkg info que, quando executado sem qualquer opção, listará a versão do pacote para todos os pacotes instalados ou para o pacote especificado.

Por exemplo, para ver qual versão do pkg está instalada, execute:

# pkg info pkg
pkg-1.1.4_1

4.4.4. Instalando e removendo pacotes

Para instalar um pacote binário, use o seguinte comando, em que packagename é o nome do pacote a ser instalado:

# pkg install packagename

Esse comando usa os dados do repositório para determinar qual versão do software instalar e se ele possui alguma dependência faltando. Por exemplo, para instalar o curl:

# pkg install curl
Updating repository catalogue
/usr/local/tmp/All/curl-7.31.0_1.txz          100% of 1181 kB 1380 kBps 00m01s

/usr/local/tmp/All/ca_root_nss-3.15.1_1.txz   100% of  288 kB 1700 kBps 00m00s

Updating repository catalogue
The following 2 packages will be installed:

        Installing ca_root_nss: 3.15.1_1
        Installing curl: 7.31.0_1

The installation will require 3 MB more space

0 B to be downloaded

Proceed with installing packages [y/N]: y
Checking integrity... done
[1/2] Installing ca_root_nss-3.15.1_1... done
[2/2] Installing curl-7.31.0_1... done
Cleaning up cache files...Done

O novo pacote e quaisquer pacotes adicionais que foram instalados como dependências podem ser vistos na lista de pacotes instalados:

# pkg info
ca_root_nss-3.15.1_1	The root certificate bundle from the Mozilla Project
curl-7.31.0_1	Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.1.4_6	New generation package manager

Pacotes que não são mais necessários podem ser removidos com pkg delete. Por exemplo:

# pkg delete curl
The following packages will be deleted:

	curl-7.31.0_1

The deletion will free 3 MB

Proceed with deleting packages [y/N]: y
[1/1] Deleting curl-7.31.0_1... done

4.4.5. Atualizando os Pacotes Instalados

Os pacotes instalados podem ser atualizados para as versões mais recentes executando:

# pkg upgrade

Este comando irá comparar as versões instaladas com as disponíveis no catálogo do repositório e atualizá-las a partir do repositório.

4.4.6. Auditando os Pacotes Instalados

Vulnerabilidades de software são regularmente descobertas em aplicativos de terceiros. Para resolver isso, o pkg inclui um mecanismo de auditoria integrado. Para determinar se há alguma vulnerabilidade conhecida para o software instalado no sistema, execute:

# pkg audit -F

4.4.7. Removendo Pacotes Não Utilizados Automaticamente

Remover um pacote pode deixar dependências que não são mais necessárias. Pacotes desnecessários que foram instalados como dependências podem ser automaticamente detectados e removidos usando:

# pkg autoremove
Packages to be autoremoved:
	ca_root_nss-3.15.1_1

The autoremoval will free 723 kB

Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.15.1_1... done

Os pacotes instalados como dependências são chamados de pacotes automáticos. Pacotes não automáticos, ou seja, os pacotes que não foram instalados como uma dependência para outro pacote, podem ser listados usando:

# pkg prime-list
nginx
openvpn
sudo

O pkg prime-list é um alias de comando declarado no /usr/local/etc/pkg.conf. Existem muitos outros que podem ser usados para consultar o banco de dados de pacotes do sistema. Por exemplo, o comando pkg prime-origins pode ser usado para obter o diretório de origem dos ports da lista mencionada acima:

# pkg prime-origins
www/nginx
security/openvpn
security/sudo

Esta lista pode ser usada para recompilar todos os pacotes instalados em um sistema usando ferramentas de compilação como o ports-mgmt/poudriere ou o ports-mgmt/synth.

Marcar um pacote instalado como automático pode ser feito usando:

# pkg set -A 1 devel/cmake

Uma vez que um pacote é um pacote orfão e está marcado como automático, ele será selecionado por pkg autoremove.

Marcar um pacote instalado como não automático pode ser feito usando:

# pkg set -A 0 devel/cmake

4.4.8. Restaurando o banco de dados de pacotes

Ao contrário do sistema tradicional de gerenciamento de pacotes, o pkg inclui seu próprio mecanismo de backup de banco de dados de pacotes. Essa funcionalidade é habilitada por padrão.

Para desabilitar o script que faz o backup periódico do banco de dados de pacotes, defina daily_backup_pkgdb_enable="NO" no periodic.conf(5).

Para restaurar o conteúdo de um backup anterior do banco de dados de pacotes, execute o seguinte comando substituindo /path/to/pkg.sql pelo local do backup:

# pkg backup -r /path/to/pkg.sql

Se estiver restaurando um backup feito pelo script periódico, ele deve ser descompactado antes de ser restaurado.

Para executar um backup manual do banco de dados pkg, execute o seguinte comando, substituindo /path/to/pkg.sql por um nome de arquivo e local adequados:

# pkg backup -d /path/to/pkg.sql

4.4.9. Removendo Pacotes Obsoletos

Por padrão, o pkg armazena pacotes binários em um diretório de cache definido por PKG_CACHEDIR no pkg.conf(5). Somente cópias dos últimos pacotes instalados são mantidas. Versões mais antigas do pkg mantinham todos os pacotes anteriores. Para remover esses pacotes binários desatualizados, execute:

# pkg clean

O cache inteiro pode ser limpo executando:

# pkg clean -a

4.4.10. Modificando Metadados de Pacotes

Os softwares dentro da Coleção de Ports do FreeBSD podem passar por grandes mudanças no número de versão. Para resolver isso, o pkg possui um comando interno para atualizar as origens do pacote. Isto pode ser útil, por exemplo, se lang/php5 for renomeado para lang/php53 para que lang/php5 possa agora representar a versão 5.4.

Para alterar a origem do pacote para o exemplo acima, execute:

# pkg set -o lang/php5:lang/php53

Como outro exemplo, para atualizar lang/ruby18 para lang/ruby19, execute:

# pkg set -o lang/ruby18:lang/ruby19

Como um exemplo final, para alterar a origem das bibliotecas compartilhadas libglut de graphics/libglut para graphics/freeglut, execute:

# pkg install -Rf graphics/freeglut

Ao alterar as origens do pacote, é importante reinstalar os pacotes que dependem do pacote com a origem modificada. Para forçar uma reinstalação dos pacotes dependentes, execute:

# pkg install -Rf graphics/freeglut

4.5. Usando a Coleção de Ports

A Coleção de Ports é um conjunto de arquivos Makefiless, patches e arquivos de descrição. Cada conjunto desses arquivos é usado para compilar e instalar um aplicativo individual no FreeBSD, e é chamado de port.

Por padrão, a própria coleção de ports é armazenada como um subdiretório de /usr/ports.

Before installing and using the Ports Collection, please be aware that it is generally ill-advised to use the Ports Collection in conjunction with the binary packages provided via pkg to install software. pkg, by default, tracks quarterly branch-releases of the ports tree and not HEAD. Dependencies could be different for a port in HEAD compared to its counterpart in a quarterly branch release and this could result in conflicts between dependencies installed by pkg and those from the Ports Collection. If the Ports Collection and pkg must be used in conjunction, then be sure that your Ports Collection and pkg are on the same branch release of the ports tree.

Antes que um aplicativo possa ser compilado usando um port, a Coleção de Ports deve primeiro ser instalada. Se ela não foi instalada durante a instalação do FreeBSD, use um dos seguintes métodos para instalá-la:

Procedure: Método Portsnap

O sistema base do FreeBSD inclui o Portsnap. Esta é uma ferramenta rápida e de fácil utilização para obter a Coleção de Ports e é a escolha recomendada para a maioria dos usuários que não estão executando o FreeBSD-CURRENT. Este utilitário se conecta a um site do FreeBSD, verifica a chave segura e faz o download de uma nova cópia da Coleção de Ports. A chave é usada para verificar a integridade de todos os arquivos baixados.

  1. Para baixar um snapshot compactado da coleção de ports em /var/db/portsnap:

    # portsnap fetch
  2. Ao executar o Portsnap pela primeira vez, extraia o snapshot em /usr/ports:

    # portsnap extract
  3. Após o primeiro uso do Portsnap ter sido concluído, como mostrado acima, o /usr/ports pode ser atualizado conforme necessário executando:

    # portsnap fetch
    # portsnap update

    Ao usar fetch, a operação extract ou update pode ser executada consecutivamente, da seguinte forma:

    # portsnap fetch update

Procedure: Método Subversion

Se for necessário mais controle sobre a árvore de ports ou se as mudanças locais precisarem ser mantidas, ou se estiver executando o FreeBSD-CURRENT, o Subversion pode ser usado para obter a coleção de ports. Consulte O Subversion Primer para uma descrição detalhada do Subversion.

  1. O Subversion deve ser instalado antes de poder ser usado para fazer o check-out da árvore de ports. Se uma cópia da árvore de ports já estiver presente, instale o Subversion desta forma:

    # cd /usr/ports/devel/subversion
    # make install clean

    Se a árvore de ports não estiver disponível, ou o pkg estiver sendo usado para gerenciar pacotes, o Subversion poderá ser instalado como um pacote:

    # pkg install subversion
  2. Check out a copy of the HEAD branch of the ports tree:

    # svn checkout https://svn.FreeBSD.org/ports/head /usr/ports
  3. Or, check out a copy of a quarterly branch:

    # svn checkout https://svn.FreeBSD.org/ports/branches/2020Q3 /usr/ports
  4. Conforme necessário, atualize o /usr/ports após o check out inicial do Subversion:

    # svn update /usr/ports
  5. As needed, switch /usr/ports to a different quarterly branch:

    # svn switch http://svn.freebsd.org/ports/branches/2020Q4/ /usr/ports

A coleção de ports contém diretórios para categorias de software. Dentro de cada categoria estão subdiretórios para aplicativos individuais. Cada subdiretório de aplicativo contém um conjunto de arquivos que informa ao FreeBSD como compilar e instalar esse programa, chamado de esqueleto do ports. Cada esqueleto de port inclui esses arquivos e diretórios:

  • Makefile: contém instruções que especificam como o aplicativo deve ser compilado e onde seus componentes devem ser instalados.

  • distinfo: contém os nomes e checksums dos arquivos que devem ser baixados para compilar o port.

  • files/: este diretório contém quaisquer patches necessários para o programa compilar e instalar no FreeBSD. Esse diretório também pode conter outros arquivos usados para compilar o port.

  • pkg-descr: fornece uma descrição mais detalhada do programa.

  • pkg-plist: uma lista de todos os arquivos que serão instalados pelo port. Ele também informa ao sistema de ports quais arquivos devem ser removidos após a desinstalação.

Alguns ports incluem pkg-message ou outros arquivos para lidar com situações especiais. Para obter mais detalhes sobre esses arquivos e sobre os ports em geral, consulte o FreeBSD Porter’s Manual.

O port não inclui o código-fonte real, também conhecido como distfile. A etapa de extração da compilação de um port salvará automaticamente o código-fonte transferido por download para /usr/ports/distfiles.

4.5.1. Instalando Ports

Esta seção fornece instruções básicas sobre o uso da Coleção de Ports para instalar ou remover software. A descrição detalhada dos targets disponíveis do make e das variáveis de ambiente está disponível em ports(7).

Antes de compilar qualquer port, certifique-se de atualizar a Coleção de Ports conforme descrito na seção anterior. Como a instalação de qualquer software de terceiros pode introduzir vulnerabilidades de segurança, recomenda-se primeiro verificar https://vuxml.freebsd.org/ para problemas de segurança conhecidos relacionados ao port. Alternativamente, execute pkg -f antes de instalar um novo port. Esse comando pode ser configurado para executar automaticamente uma auditoria de segurança e uma atualização do banco de dados de vulnerabilidades durante a verificação diária do sistema de segurança. Para obter maiores informações, consulte pkg-audit(8) e periodic(8).

O uso da coleção de ports pressupõe uma conexão de Internet ativa. Também requer privilégios de superusuário.

Para compilar e instalar o port, mude para o diretório do port a ser instalado e, em seguida, digite make install no prompt. Mensagens indicarão o progresso:

# cd /usr/ports/sysutils/lsof
# make install
>> lsof_4.88D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===>  Extracting for lsof-4.88
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.88D.freebsd.tar.gz.
===>  Patching for lsof-4.88.d,8
===>  Applying FreeBSD patches for lsof-4.88.d,8
===>  Configuring for lsof-4.88.d,8
...
[configure output snipped]
...
===>  Building for lsof-4.88.d,8
...
[compilation output snipped]
...

===>  Installing for lsof-4.88.d,8
...
[installation output snipped]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.88.d,8
===>   Registering installation for lsof-4.88.d,8
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
/usr/local/sbin/lsof
#

Como o lsof é um programa que é executado com privilégios aumentados, um aviso de segurança é exibido quando é instalado. Quando a instalação estiver concluída, o prompt será retornado.

Algumas shells mantêm um cache dos comandos que estão disponíveis nos diretórios listados na variável de ambiente PATH, para acelerar as operações de pesquisa do arquivo executável desses comandos. Os usuários do shell tcsh devem digitar rehash para que um comando recém-instalado possa ser usado sem especificar seu caminho completo. Use hash -r para o shell sh. Consulte a documentação do shell para mais informações.

Durante a instalação, é criado um subdiretório de trabalho que contém todos os arquivos temporários usados durante a compilação. A remoção desse diretório economiza espaço em disco e minimiza a possibilidade de problemas mais tarde ao atualizar para a versão mais recente do port:

# make clean
===>  Cleaning for lsof-88.d,8
#

Para evitar esta etapa extra, use make install clean ao compilar o port.

4.5.1.1. Personalizando a instalação de ports

Alguns ports fornecem opções de compilação que podem ser usadas para habilitar ou desabilitar componentes do aplicativo, fornecer opções de segurança ou permitir outras personalizações. Os exemplos incluem o www/firefox, security/gpgme, e mail/sylpheed-claws. Se o port depender de outros ports que tenham opções configuráveis, ela poderá pausar várias vezes para interação do usuário, pois o comportamento padrão é solicitar ao usuário que selecione opções de um menu. Para evitar isso e fazer toda a configuração em um lote, execute make config-recursive dentro do diretório do port. Em seguida, execute make install [clean] para compilar e instalar o port.

Ao usar config-recursive, a lista de ports a serem configurados é reunida pelo target all-depends-list. É recomendado executar o make config-recursive até que todas as opções dos ports dependentes tenham sido definidas, e as telas de opções de ports não apareçam mais, para ter certeza de que todas as opções das dependência foram configuradas.

Há várias maneiras de revisitar o menu de opções de compilação de um port para adicionar, remover ou alterar essas opções após a compilação de um port. Um método é efetuar cd no diretório que contém o port e digitar make config. Outra opção é usar o make showconfig. Outra opção é executar make rmconfig, o que removerá todas as opções selecionadas e permitirá que você comece de novo. Todas essas opções, e outras, são explicadas detalhadamente em ports(7).

O sistema de ports usa o fetch(1) para fazer o download dos arquivos com o código-fonte, que suportam várias variáveis de ambiente. As variáveis FTP_PASSIVE_MODE, FTP_PROXY e FTP_PASSWORD podem precisar ser definidas se o sistema FreeBSD estiver por trás de um firewall ou proxy FTP/HTTP. Veja fetch(3) para a lista completa de variáveis suportadas.

Para usuários que não podem estar conectados à Internet o tempo todo, o make fetch pode ser executado dentro do /usr/ports, para buscar todos os distfiles, ou dentro de uma categoria, como /usr/ports/net, ou dentro do diretório de um port especifico. Observe que, se um port tiver alguma dependência, executar este comando em uma categoria ou diretório de um port especifico não buscará os distfiles de ports de outra categoria. Em vez disso, use make fetch-recursive para também buscar os distfiles para todas as dependências de um port.

Em casos raros, como quando uma organização tem um repositório local de distfiles, a variável MASTER_SITES pode ser usada para substituir os locais de download especificados no Makefile. Ao usar, especifique o local alternativo:

# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.organization.org/pub/FreeBSD/ports/distfiles/ fetch

As variáveis WRKDIRPREFIX e PREFIX podem substituir os diretórios de trabalho e de destino padrão. Por exemplo:

# make WRKDIRPREFIX=/usr/home/example/ports install

irá compilar o port em /usr/home/example/ports e instalar tudo sob /usr/local.

# make PREFIX=/usr/home/example/local install

irá compilar o port em /usr/ports e instalá-lo em /usr/home/example/local. E:

# make WRKDIRPREFIX=../ports PREFIX=../local install

vai combinar os dois.

Estes também podem ser definidos como variáveis ambientais. Consulte a página de manual do seu shell para obter instruções sobre como definir uma variável de ambiente.

4.5.2. Removendo Ports Instalados

Ports instalados podem ser desinstalados usando pkg delete. Exemplos para usar este comando podem ser encontrados na página de manual pkg-delete(8).

Alternativamente, o make deinstall pode ser executado no diretório do port:

# cd /usr/ports/sysutils/lsof
# make deinstall
===>  Deinstalling for sysutils/lsof
===>   Deinstalling
Deinstallation has been requested for the following 1 packages:

	lsof-4.88.d,8

The deinstallation will free 229 kB
[1/1] Deleting lsof-4.88.d,8... done

Recomenda-se ler as mensagens quando o port for desinstalado. Se o port tiver algum aplicativo que dependa dele, essas informações serão exibidas, mas a desinstalação continuará. Nesses casos, talvez seja melhor reinstalar o aplicativo para evitar dependências quebradas.

4.5.3. Atualizando os Ports

Com o tempo, novas versões de software ficam disponíveis na coleção de ports. Esta seção descreve como determinar qual software pode ser atualizado e como executar a atualização.

Para determinar se versões mais recentes dos ports instalados estão disponíveis, verifique se a versão mais recente da árvore de ports está instalada, usando o comando de atualização descrito em Método Portsnap ou Método Subversion. No FreeBSD 10 e posterior, ou se o sistema foi convertido para pkg, o seguinte comando listará os ports instalados que estão desatualizadas:

# pkg version -l "<"

Para o FreeBSD 9.X e menor, o seguinte comando listará os ports instalados que estão desatualizados:

# pkg_version -l "<"

Antes de tentar uma atualização, leia o /usr/ports/UPDATING da parte superior do arquivo até a data mais próxima da última vez em que os ports foram atualizados ou o sistema foi instalado. Este arquivo descreve vários problemas e etapas adicionais que os usuários podem encontrar e precisar executar ao atualizar um port, incluindo coisas como alterações de formato de arquivo, alterações nos locais de arquivos de configuração ou incompatibilidades com versões anteriores. Anote quaisquer instruções que correspondam a qualquer um dos ports que precisam de atualização e siga estas instruções ao executar a atualização.

4.5.3.1. Ferramentas para atualizar e gerenciar ports

A coleção de ports contém vários utilitários para executar a atualização real. Cada um tem seus pontos fortes e fracos.

Historicamente, a maioria das instalações usava o Portmaster ou o Portupgrade. O Synth é uma alternativa mais recente.

A escolha da melhor ferramenta para um determinado sistema depende do administrador do sistema. Recomenda-se a prática de fazer backup de seus dados antes de usar qualquer uma dessas ferramentas.

4.5.3.2. Atualizando Ports Usando o Portmaster

O ports-mgmt/portmaster é um utilitário muito pequeno para atualizar os ports instalados. Ele é projetado para usar as ferramentas instaladas com o sistema base do FreeBSD sem depender de outros ports ou bancos de dados. Para instalar este utilitário como um port:

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

O Portmaster define quatro categorias de ports:

  • Port Root: não tem dependências e não é uma dependência de outros ports.

  • Port Trunk: não tem dependências, mas outros ports dependem dele.

  • Port Branch: tem dependências e outros ports dependem dele.

  • Port Leaf: tem dependências, mas nenhum outro port depende dele.

Para listar essas categorias e procurar atualizações:

# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
        ===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache22-2.2.3
        ===>>> New version available: apache22-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
        ===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports

===>>> 137 total installed ports
        ===>>> 83 have new versions available

Este comando é usado para atualizar todos os ports desatualizados:

# portmaster -a

Por padrão, o Portmaster faz um backup do pacote antes de excluir o port existente. Se a instalação da nova versão for bem-sucedida, o Portmaster excluirá o backup. O uso de -b instrui o Portmaster a não excluir automaticamente o backup. Adicionar -i inicia o Portmaster no modo interativo, solicitando a confirmação antes de atualizar cada port. Muitas outras opções estão disponíveis. Leia a página de manual para o portmaster(8) para obter detalhes sobre seu uso.

Se forem encontrados erros durante o processo de atualização, adicione -f para atualizar e recompilar todos os ports:

# portmaster -af

O Portmaster também pode ser usado para instalar novos ports no sistema, atualizando todas as dependências antes de compilar e instalar o novo port. Para usar essa função, especifique o local do port na coleção de ports:

# portmaster shells/bash

Maiores informações sobre ports-mgmt/portmaster podem ser encontradas no pkg-descr.

4.5.3.3. Atualizando Ports Usando o Portupgrade

O ports-mgmt/portupgrade é outro utilitário que pode ser usado para atualizar ports. Ele instala um conjunto de aplicativos que podem ser usados para gerenciar ports. No entanto, ele depende do Ruby. Para instalar o port:

# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

Antes de executar uma atualização usando esse utilitário, é recomendável verificar a lista de ports instalados usando o pkgdb -F e corrigir todas as inconsistências relatadas.

Para atualizar todos os ports desatualizados instalados no sistema, use o portupgrade -a. Como alternativa, inclua -i para ser solicitado da confirmação de cada atualização individual:

# portupgrade -ai

Para atualizar apenas um aplicativo especifico em vez de todos os ports disponíveis, use portupgrade pkgname. É muito importante incluir -R para primeiro atualizar todos os ports requeridos pelo aplicativo fornecido:

# portupgrade -R firefox

Se -P estiver incluído, o Portupgrade procura pacotes disponíveis nos diretórios locais listados em PKG_PATH. Se nenhum estiver disponível localmente, ele buscará pacotes de um site remoto. Se os pacotes não puderem ser encontrados localmente ou buscados remotamente, o Portupgrade utilizará os ports. Para evitar completamente o uso do ports, especifique -PP. Este último conjunto de opções diz ao Portupgrade para cancelar se nenhum pacote estiver disponível:

# portupgrade -PP gnome3

Para obter apenas os distfiles do port, ou pacotes, se -P for especificado, sem compilar ou instalar nada, use -F. Para mais informações sobre todas as opções disponíveis, consulte a página de manual do portupgrade.

Maiores informações sobre o ports-mgmt/portupgrade podem ser encontradas no pkg-descr.

4.5.4. Ports e o Espaço em Disco

A utilização da coleção de ports irá ocupar espaço em disco ao longo do tempo. Depois de compilar e instalar um port, executar make clean dentro do diretório de um port limpará o diretório temporário de trabalho. Se o Portmaster for usado para instalar um port, ele removerá automaticamente esse diretório, a menos que -K seja especificado. Se o Portupgrade estiver instalado, este comando removerá todos os diretórios de trabalho encontrados na cópia local da coleção de ports:

# portsclean -C

Além disso, arquivos de distribuição de código-fonte desatualizados se acumulam no /usr/ports/distfiles ao longo do tempo. Para usar Portupgrade para excluir todos os distfiles que não são mais referenciados por nenhum port:

# portsclean -D

O Portupgrade pode remover todos os distfiles não referenciados por qualquer port atualmente instalado no sistema:

# portsclean -DD

Se o Portmaster estiver instalado, use:

# portmaster --clean-distfiles

Por padrão, esse comando é interativo e solicita que o usuário confirme se um distfile deve ser excluído.

Além desses comandos, o ports-mgmt/pkg_cutleaves automatiza a tarefa de remover os ports instalados que não são mais necessários.

4.6. Compilando Pacotes com o Poudriere

O Poudriere é um utilitário licenciado sob a licença BSD para criar e testar pacotes do FreeBSD. Ele usa o jails do FreeBSD para configurar ambientes de compilação isolados. Esses jails podem ser usados para compilar pacotes para versões do FreeBSD que são diferentes do sistema no qual ele está instalado, e também para construir pacotes para o i386 se o host for um sistema amd64. Uma vez que os pacotes são compilados, eles estão em um layout idêntico aos espelhos oficiais. Esses pacotes podem ser usados pelo pkg(8) e por outras ferramentas de gerenciamento de pacotes.

O Poudriere é instalado usando o pacote ou port ports-mgmt/poudriere. A instalação inclui um arquivo de configuração de exemplo, /usr/local/etc/poudriere.conf.sample. Copie este arquivo para /usr/local/etc/poudriere.conf. Edite o arquivo copiado de acordo com a configuração local.

Embora o ZFS não seja necessário no sistema que executa o poudriere, o seu uso é benéfico. Quando o ZFS é usado, o ZPOOL deve ser especificado em /usr/local/etc/poudriere.conf e o FREEBSD_HOST deve ser definido para um espelho próximo. A definição de CCACHE_DIR permite o uso de devel/ccache para armazenar em cache a compilação e reduzir os tempos de compilação para o código compilado com freqüência. Pode ser conveniente colocar os conjuntos de dados do poudriere em uma árvore isolada montada em /poudriere. Os valores padrões para as outras variáveis de configuração são adequados.

O número de núcleos do processador detectados é usado para definir quantas compilações serão executadas em paralelo. Forneça memória virtual suficiente, seja por meio de RAM ou espaço de swap. Se a memória virtual se esgotar, as jails de compilação serão interrompidas e desativadas, resultando em mensagens de erro estranhas.

4.6.1. Inicializar o Jails e o Port Trees

Após a configuração, inicialize o poudriere para que ele instale um jail com a árvore do FreeBSD requerida e uma árvore de ports. Especifique um nome para o jail usando -j e a versão do FreeBSD com -v. Em sistemas que executam o FreeBSD/amd64, a arquitetura pode ser definida com -a para i386 ou amd64. O padrão é a arquitetura mostrada pelo uname.

# poudriere jail -c -j 11amd64 -v 11.4-RELEASE
[00:00:00] Creating 11amd64 fs at /poudriere/jails/11amd64... done
[00:00:00] Using pre-distributed MANIFEST for FreeBSD 11.4-RELEASE amd64
[00:00:00] Fetching base for FreeBSD 11.4-RELEASE amd64
/poudriere/jails/11amd64/fromftp/base.txz              125 MB 4110 kBps    31s
[00:00:33] Extracting base... done
[00:00:54] Fetching src for FreeBSD 11.4-RELEASE amd64
/poudriere/jails/11amd64/fromftp/src.txz               154 MB 4178 kBps    38s
[00:01:33] Extracting src... done
[00:02:31] Fetching lib32 for FreeBSD 11.4-RELEASE amd64
/poudriere/jails/11amd64/fromftp/lib32.txz              24 MB 3969 kBps    06s
[00:02:38] Extracting lib32... done
[00:02:42] Cleaning up... done
[00:02:42] Recording filesystem state for clean... done
[00:02:42] Upgrading using ftp
/etc/resolv.conf -> /poudriere/jails/11amd64/etc/resolv.conf
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update4.freebsd.org... done.
Fetching metadata signature for 11.4-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 124 patches.....10....20....30....40....50....60....70....80....90....100....110....120.. done.
Applying patches... done.
Fetching 6 files... done.
The following files will be added as part of updating to
11.4-RELEASE-p1:
/usr/src/contrib/unbound/.github
/usr/src/contrib/unbound/.github/FUNDING.yml
/usr/src/contrib/unbound/contrib/drop2rpz
/usr/src/contrib/unbound/contrib/unbound_portable.service.in
/usr/src/contrib/unbound/services/rpz.c
/usr/src/contrib/unbound/services/rpz.h
/usr/src/lib/libc/tests/gen/spawnp_enoexec.sh
The following files will be updated as part of updating to
11.4-RELEASE-p1:
[…]
Installing updates...Scanning //usr/share/certs/blacklisted for certificates...
Scanning //usr/share/certs/trusted for certificates...
 done.
11.4-RELEASE-p1
[00:04:06] Recording filesystem state for clean... done
[00:04:07] Jail 11amd64 11.4-RELEASE-p1 amd64 is ready to be used
# poudriere ports -c -p local -m svn+https
[00:00:00] Creating local fs at /poudriere/ports/local... done
[00:00:00] Checking out the ports tree... done

Em um único computador, o poudriere pode construir ports com várias configurações, em vários jails e de diferentes árvores de ports. Configurações customizadas para estas combinações são chamadas de sets. Veja a seção CUSTOMIZAÇÃO do poudriere(8) para detalhes depois que o ports-mgmt/poudriere ou o ports-mgmt/poudriere-devel estiver instalado.

A configuração básica mostrada aqui coloca um único jail-, port-, e um set específico make.conf em /usr/local/etc/poudriere.d. O nome do arquivo neste exemplo é criado combinando o nome do jail, o nome do port e o nome do set: 11amd64-local-workstation-make.conf. O sistema make.conf e este novo arquivo são combinados em tempo de compilação para criar o make.conf usado pela jail de compilação.

Os pacotes a serem criados são inseridos em 11amd64-local-workstation-pkglist:

editors/emacs
devel/git
ports-mgmt/pkg
...

Opções e dependências para os ports especificados são configuradas:

# poudriere options -j 11amd64 -p local -z workstation -f 11amd64-local-workstation-pkglist

Finalmente, os pacotes são compilados e um repositório de pacotes é criado:

# poudriere bulk -j 11amd64 -p local -z workstation -f 11amd64-local-workstation-pkglist

Durante a execução, pressionar Ctrl+t exibe o estado atual da compilação. O Poudriere também cria arquivos em /poudriere/logs/bulk/jailname que podem ser usados com um servidor da Web para exibir informações de compilação.

Após a conclusão, os novos pacotes estão agora disponíveis para instalação a partir do repositório poudriere.

Para obter maiores informações sobre o uso do poudriere, consulte poudriere(8) e o site principal, https://github.com/freebsd/poudriere/wiki.

4.6.2. Configurando Clientes do pkg para usar um repositório de Poudriere

Embora seja possível usar um repositório personalizado ao lado do repositório oficial, às vezes é útil desativar o repositório oficial. Isso é feito criando um arquivo de configuração que substitui e desativa o arquivo de configuração oficial. Crie o /usr/local/etc/pkg/repos/FreeBSD.conf que deverá conter o seguinte:

FreeBSD: {
	enabled: no
}

Geralmente é mais fácil disponibilizar um repositório poudriere para as máquinas clientes via HTTP. Configure um servidor web para disponibilizar o diretório de pacotes, por exemplo: /usr/local/poudriere/data/packages/11amd64, onde 11amd64 é o nome da compilação.

Se a URL para o repositório de pacotes for: http://pkg.example.com/11amd64, o arquivo de configuração do repositório em /usr/local/etc/pkg/repos/custom.conf ficaria assim:

custom: {
	url: "http://pkg.example.com/11amd64",
	enabled: yes,
}

4.7. Considerações pós-instalação

Independentemente do software ter sido instalado a partir de um pacote binário ou de um port, a maioria dos aplicativos de terceiros requer algum nível de configuração após a instalação. Os seguintes comandos e locais podem ser usados para ajudar a determinar o que foi instalado com o aplicativo.

  • A maioria dos aplicativos instala pelo menos um arquivo de configuração padrão em /usr/local/etc. Nos casos em que um aplicativo possui um grande número de arquivos de configuração, um subdiretório será criado para mantê-los. Geralmente, os arquivos de configuração de exemplo são instalados e terminam com um sufixo, como .sample. Os arquivos de configuração devem ser revisados e possivelmente editados para atender às necessidades do sistema. Para editar um arquivo de amostra, primeiro copie-o sem a extensão .sample.

  • As aplicações que fornecem documentação irão instalá-la em /usr/local/shared/doc e muitos aplicativos também instalam páginas de manual. Esta documentação deve ser consultada antes de continuar.

  • Alguns aplicativos executam serviços que devem ser adicionados ao /etc/rc.conf antes de iniciar o aplicativo. Esses aplicativos geralmente instalam um script de inicialização em /usr/local/etc/rc.d. Veja Iniciando Serviços para maiores informações.

    Por padrão, os aplicativos não executam o script de inicialização durante a instalação, nem executam o script de parada após a desinstalação ou atualização. Essa decisão é deixada para o administrador do sistema.

  • Os usuários de csh(1) devem executar rehash para reconstruir a lista dos binários conhecidos nos shells PATH.

  • Use pkg info para determinar quais arquivos, páginas man e binários foram instalados com o aplicativo.

4.8. Lidando com ports quebrados

Quando um port não é compilado ou instalado, tente o seguinte:

  1. Procure para ver se há uma correção pendente para o port no Banco de Dados do Relatório de Problemas. Nesse caso, implementar a correção proposta pode corrigir o problema.

  2. Peça ajuda ao mantenedor do port. Digite make maintainer no diretório do port ou leia o Makefile do port para encontrar o endereço de e-mail do mantenedor. Lembre-se de incluir a linha $FreeBSD: do Makefile do port e a saída que leva ao erro no e-mail para o mantenedor.

    Alguns ports não são mantidos por um indivíduo, mas sim por um grupo de mantenedores representado por uma lista de discussão. Muitos, mas não todos, esses endereços se parecem com freebsd-listname@FreeBSD.org. Por favor, leve isso em consideração ao enviar um email.

    Em particular, os ports mantidos por ports@FreeBSD.org não são mantidos por um indivíduo específico. Em vez disso, quaisquer correções e suporte vêm da comunidade geral que se inscreve nessa lista de discussão. Mais voluntários são sempre necessários!

    Se não houver resposta ao email, use o Bugzilla para enviar um relatório de bug usando as instruções em Escrevendo Relatórios de Problemas do FreeBSD.

  3. Conserte-o! O Porters Handbook inclui informações detalhadas sobre a infra-estrutura da arvore de ports para que você possa corrigir possiveis erros na compilacao de um ports que quebrou ou ocasionou um erro de compilacao ou até mesmo submeta seu próprio projeto!

  4. Instale o pacote em vez do port usando as instruções em Usando o pkg para o gerenciamento de pacotes binários.

Capítulo 5. O sistema X Window

5.1. Sinopse

Uma instalação padrão do FreeBSD usando o bsdinstall não irá instalar automaticamente uma interface gráfica para o usuário. Este capítulo descreve como instalar e configurar o Xorg, que fornece o sistema X Window open source usado para fornecer um ambiente gráfico. Em seguida, descreve como encontrar e instalar um ambiente de área de trabalho ou um gerenciador de janelas.

Os usuários que preferem um método de instalação que configure automaticamente o Xorg devem consultar FuryBSD, GhostBSD ou MidnightBSD.

Para obter maiores informações sobre o hardware de vídeo suportado pelo Xorg, consulte o web site x.org.

Depois de ler este capítulo, você saberá:

  • Quais são os vários componentes do Sistema X Window e como eles interoperam.

  • Como instalar e configurar o Xorg.

  • Como instalar e configurar vários gerenciadores de janelas e ambientes de desktop.

  • Como usar fontes TrueType™ no Xorg.

  • Como configurar seu sistema para usar um sistema de login gráfico (XDM).

Antes de ler este capítulo, você deve:

5.2. Terminologia

Embora não seja necessário entender todos os detalhes dos vários componentes do Sistema X Window e como eles interagem, algum conhecimento básico desses componentes pode ser útil.

Servidor X

O X foi projetado desde o início para ser centrado em rede e para adotar um modelo "cliente-servidor". Neste modelo, o "Servidor X" é executado no computador que possui o teclado, o monitor e o mouse conectados. A responsabilidade do servidor inclui tarefas como gerenciar o monitor, manipular a entrada do teclado e do mouse e manipular a entrada ou saída de outros dispositivos, como um tablet ou um projetor de vídeo. Isso confunde algumas pessoas, porque a terminologia X é exatamente o oposto do que eles esperam. Eles esperam que o "X server" seja a grande máquina poderosa no final das contas, e o "Ciente X" seja a máquina em sua mesa.

Cliente X

Cada aplicativo X, como o XTerm ou o Firefox, é um "cliente". Um cliente envia mensagens para o servidor, como "Por favor, desenhe uma janela nessas coordenadas", e o servidor envia de volta mensagens como "O usuário apenas clicou no botão OK".

Em um ambiente doméstico ou de uma pequena empresa, o servidor X e os clientes X geralmente são executados no mesmo computador. Também é possível executar o servidor X em um computador menos potente e executar os aplicativos X em um sistema mais poderoso. Nesse cenário, a comunicação entre o cliente X e o servidor ocorre através da rede.

Gerenciador de janelas

O X não dita como as janelas devem se parecer na tela, como movê-las com o mouse, quais teclas devem ser usadas para mover-se entre as janelas, como devem ficar as barras de título em cada janela, se elas têm ou não botões para fechar nelas e assim por diante. Em vez disso, o X delega essa responsabilidade para um gerenciador de janelas separado. Existem dezenas de gerenciadores de janelas disponíveis. Cada gerenciador de janelas oferece uma aparência diferente: alguns oferecem suporte a desktops virtuais, alguns permitem pressionamentos de tecla personalizados para gerenciar a área de trabalho, alguns têm um botão "Iniciar" e alguns são personalizáveis, permitindo uma alteração completa da aparência da área de trabalho. Os gerenciadores de janelas estão disponíveis na categoria x11-wm da coleção de ports.

Cada gerenciador de janelas usa um mecanismo de configuração diferente. Alguns esperam que o arquivo de configuração seja escrito à mão, enquanto outros fornecem ferramentas gráficas para a maioria das tarefas de configuração.

Ambiente de desktop

O KDE e o GNOME são considerados ambientes de desktop, pois incluem um conjunto completo de aplicativos para executar tarefas comuns de desktop. Estes podem incluir pacotes de escritório, navegadores da web e jogos.

Política de foco

O gerenciador de janelas é responsável pela política de foco do mouse. Essa política fornece alguns meios para escolher qual janela está recebendo ativamente as teclas digitadas e também deve indicar visivelmente qual janela está ativa no momento.

Uma política de foco é chamada "click-to-focus". Neste modelo, uma janela fica ativa ao receber um clique do mouse. Na política "focus-follows-mouse", a janela que está sob o ponteiro do mouse tem foco e o foco é alterado apontando para outra janela. Se o mouse estiver sobre a janela raiz, esta janela estará focada. No modelo "sloppy-focus", se o mouse for movido sobre a janela raiz, a janela usada mais recentemente ainda terá o foco. Com sloppy-focus, o foco só é alterado quando o cursor entra em uma nova janela, e não ao sair da janela atual. Na política de "click-to-focus", a janela ativa é selecionada pelo clique do mouse. A janela pode então ser destacada para aparecer na frente de todas as outras janelas. Todas as teclas digitadas serão direcionadas para esta janela, mesmo se o cursor for movido para outra janela.

Diferentes gerenciadores de janela suportam diferentes modelos de foco. Todos eles suportam click-to-focus, e a maioria deles também suporta outras políticas. Consulte a documentação do gerenciador de janelas para determinar quais modelos de foco estão disponíveis.

Widgets

Widget é um termo para todos os itens na interface do usuário que podem ser clicados ou manipulados de alguma forma. Isso inclui botões, caixas de seleção, botões de opção, ícones e listas. Um kit de ferramentas de widget é um conjunto de widgets usado para criar aplicativos gráficos. Existem vários toolkits de widgets populares, incluindo o Qt, usado pelo KDE, e o GTK+, usado pelo GNOME. Como resultado, os aplicativos terão uma aparência e comportamentos diferentes, dependendo de qual kit de ferramentas de widget foi usado para criar o aplicativo.

5.3. Instalando o Xorg

No FreeBSD, o Xorg pode ser instalado como um pacote ou port.

O pacote binário pode ser instalado rapidamente, mas com menos opções de personalização:

# pkg install xorg

Para compilar e instalar a partir da Coleção de Ports:

# cd /usr/ports/x11/xorg
# make install clean

Qualquer uma dessas instalações resulta no sistema completo do Xorg sendo instalado. Pacotes binários são a melhor opção para a maioria dos usuários.

Uma versão menor do sistema X adequada para usuários experientes está disponível em x11/xorg-minimal. A maioria dos documentos, bibliotecas e aplicativos não será instalada. Algumas aplicações requerem esses componentes adicionais para funcionarem.

5.4. Configuração do Xorg

5.4.1. Inicio Rápido

O Xorg suporta as placas de vídeo, teclados e dispositivos USB mais comuns.

Placas de vídeo, monitores e dispositivos de entrada são detectados automaticamente e não exigem nenhuma configuração manual. Não crie o xorg.conf ou execute o passo -configure a menos que a configuração automática falhe.

  1. Se o Xorg tiver sido usado neste computador antes, mova ou remova qualquer arquivo de configuração existente:

    # mv /etc/X11/xorg.conf ~/xorg.conf.etc
    # mv /usr/local/etc/X11/xorg.conf ~/xorg.conf.localetc
  2. Adicione o usuário que executará o Xorg ao grupo video ou wheel para ativar a aceleração 3D quando disponível. Para adicionar o usuário jru ao grupo que estiver disponível:

    # pw groupmod video -m jru || pw groupmod wheel -m jru
  3. O gerenciador de janelas twm é incluído por padrão. Ele é chamado quando o Xorg se inicia:

    % startx
  4. Em algumas versões mais antigas do FreeBSD, o console do sistema deve ser definido como vt(4) antes que a volta para o console de texto funcione corretamente. Veja Configuração do Modo Kernel (KMS).

5.4.2. Grupo de Usuários para Vídeo Acelerado

O acesso ao /dev/dri é necessário para permitir a aceleração 3D nas placas de vídeo. Geralmente é mais simples adicionar o usuário que estará executando o X no grupo video ou no wheel. Aqui, o pw(8) é usado para adicionar o usuário slurms ao grupo video, ou ao grupo wheel se não houver nenhum grupo video:

# pw groupmod video -m slurms || pw groupmod wheel -m slurms

5.4.3. Configuração do Modo Kernel (KMS)

Quando o computador alterna a exibição do console para uma resolução de tela mais alta para o X, ele deve definir o modo da saída de vídeo. Versões recentes do Xorg usam um sistema dentro do kernel para fazer essas mudanças de modo mais eficiente. Versões mais antigas do FreeBSD usam o sc(4), que não tem conhecimento do sistema KMS. O resultado final é que depois de fechar o X, o console do sistema fica em branco, embora ainda esteja funcionando. O console vt(4) mais recente evita esse problema.

Adicione esta linha ao /boot/loader.conf para ativar o vt(4):

kern.vty=vt

5.4.4. Arquivos de Configuração

A configuração manual geralmente não é necessária. Por favor, não crie manualmente arquivos de configuração, a menos que a autoconfiguração não funcione.

5.4.4.1. Diretório

O Xorg procura em vários diretórios por arquivos de configuração. O /usr/local/etc/X11/ é o diretório recomendado para esses arquivos no FreeBSD. Usar esse diretório ajuda a manter os arquivos dos aplicativos separados dos arquivos do sistema operacional.

Armazenar arquivos de configuração no diretório legado /etc/X11/ ainda funciona. No entanto, isso combina arquivos de aplicativos com os arquivos básicos do FreeBSD e não é recomendado.

5.4.4.2. Arquivos Únicos ou Múltiplos

É mais fácil usar multiplos arquivos em que cada um controla uma configuração específica ao invés do único e tradicional xorg.conf. Esses arquivos são armazenados no subdiretório xorg.conf.d/ do diretório principal do arquivo de configuração. O caminho completo é tipicamente /usr/local/etc/X11/xorg.conf.d/.

Exemplos desses arquivos serão mostrados posteriormente nesta seção.

O tradicional e único arquivo xorg.conf ainda funciona, mas não é tão claro e nem tão flexível quanto vários arquivos no subdiretório xorg.conf.d/.

5.4.5. Placas de Vídeo

Devido as mudanças feitas nas versões recentes do FreeBSD, agora é possível usar drivers gráficos fornecidos pelo Framework do Ports, assim como pelos pacotes. Assim sendo, os usuários podem usar um dos seguintes drivers disponíveis em graphics/drm-kmod.

Intel KMS driver

A aceleração 2D e 3D é suportada na maioria das placas gráficas do driver Intel KMS fornecidas pela Intel.

Nome do driver: i915kms

A aceleração 2D e 3D é suportada na maioria das placas gráficas de driver Radeon KMS mais antigas fornecidas pela AMD.

Nome do Driver: radeonkms

A aceleração 2D e 3D é suportada nas mais recentes placas gráficas do driver AMD KMS fornecidas pela AMD.

Nome do Driver: amdgpu

Intel™

A aceleração 3D é suportada na maioria dos chipsets gráficos da Intel™ até o Ivy Bridge (HD Graphics 2500, 4000 e P4000), incluindo Iron Lake (HD Graphics) e Sandy Bridge (HD Graphics 2000) .

Nome do driver: intel

AMD™ Radeon

Aceleração 2D e 3D é suportada em placas Radeon das mais antigas até a série HD6000.

Nome do Driver: radeon

NVIDIA

Vários drivers da NVIDIA estão disponíveis na categoria x11 da Coleção de Ports. Instale o driver que corresponde à sua placa de vídeo.

Gráficos Híbridos de Combinação

Alguns notebooks adicionam unidades de processamento gráfico adicionais àquelas incorporadas ao chipset ou ao processador. O Optimus combina o hardware da Intel™ e da NVIDIA. O Switchable Graphics ou Hybrid Graphics são uma combinação dos processadores Intel™ ou AMD™ e uma GPUAMD™ Radeon.

As implementações desses sistemas gráficos híbridos variam e o Xorg no FreeBSD não é capaz de controlar todas as versões deles.

Alguns computadores fornecem uma opção no BIOS para desativar um dos adaptadores gráficos ou selecionar um modo discreto que pode ser usado com um dos drivers de placa de vídeo padrão. Por exemplo, às vezes é possível desativar a GPU NVIDIA em um sistema Optimus. O vídeo Intel™ pode então ser usado com um driver Intel™.

Configurações de BIOS dependem do modelo do computador. Em algumas situações, ambas GPUs podem ser deixadas ativadas, mas criar um arquivo de configuração que use apenas a GPU principal na seção Device é o suficiente para tornar esse sistema funcional.

Outras placas de vídeo

Drivers para algumas placas de vídeo menos comuns podem ser encontrados no diretório x11-drivers da Coleção de Ports.

PLacas que não são suportadas por um driver específico ainda podem ser usadas com o driver x11-drivers/xf86-video-vesa. Este driver é instalado pelo x11/xorg. Ele também pode ser instalado manualmente como x11-drivers/xf86-video-vesa. O Xorg tenta usar este driver quando um driver específico não é encontrado para a placa de vídeo.

O x11-drivers/xf86-video-scfb é um driver de vídeo não especializado similar que funciona em muitos computadores UEFI e ARM™.

Configurando o driver de vídeo em um arquivo

Para definir o driver Intel™ em um arquivo de configuração:

Exemplo 15. Selecione o driver de vídeo Intel™ em um arquivo

/usr/local/etc/X11/xorg.conf.d/driver-intel.conf

Section "Device"
	Identifier "Card0"
	Driver     "intel"
	# BusID    "PCI:1:0:0"
EndSection

Se mais de uma placa de vídeo estiver presente, o identificador BusID pode ser descomentado e configurado para selecionar a placa desejada. Uma lista de barramento de placa de vídeo ID pode ser exibida com pciconf -lv | grep -B3 display.

Para definir o driver Radeon em um arquivo de configuração:

Exemplo 16. Selecione o driver de vídeo Radeon em um arquivo

/usr/local/etc/X11/xorg.conf.d/driver-radeon.conf

Section "Device"
	Identifier "Card0"
	Driver     "radeon"
EndSection

Para definir o driver VESA em um arquivo de configuração:

Exemplo 17. Selecione o driver de vídeo VESA em um arquivo

/usr/local/etc/X11/xorg.conf.d/driver-vesa.conf

Section "Device"
	Identifier "Card0"
	Driver     "vesa"
EndSection

Para definir o driver scfb para uso com um computador UEFI ou ARM™:

Exemplo 18. Selecione o driver de vídeo scfb em um arquivo

/usr/local/etc/X11/xorg.conf.d/driver-scfb.conf

Section "Device"
	Identifier "Card0"
	Driver     "scfb"
EndSection

5.4.6. Monitores

Quase todos os monitores suportam o padrão Extended Display Identification Data (EDID). O Xorg usa o EDID para se comunicar com o monitor e detectar as resoluções e taxas de atualização suportadas. Em seguida, seleciona a combinação mais adequada de configurações para usar com esse monitor.

Outras resoluções suportadas pelo monitor podem ser escolhidas definindo a resolução desejada nos arquivos de configuração, ou após o servidor X ter sido iniciado com xrandr(1).

Usando xrandr(1)

Execute o xrandr(1) sem nenhum parâmetro para ver uma lista de saídas de vídeo e modos de monitor detectados:

% xrandr
Screen 0: minimum 320 x 200, current 3000 x 1920, maximum 8192 x 8192
DVI-0 connected primary 1920x1200+1080+0 (normal left inverted right x axis y axis) 495mm x 310mm
   1920x1200     59.95*+
   1600x1200     60.00
   1280x1024     85.02    75.02    60.02
   1280x960      60.00
   1152x864      75.00
   1024x768      85.00    75.08    70.07    60.00
   832x624       74.55
   800x600       75.00    60.32
   640x480       75.00    60.00
   720x400       70.08
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 disconnected (normal left inverted right x axis y axis)

Isso mostra que a saída DVI-0 está sendo usada para exibir uma resolução de tela de 1920x1200 pixels a uma taxa de atualização de cerca de 60 Hz. Os monitores não estão conectados aos conectores DisplayPort-0 e HDMI-0.

Qualquer um dos outros modos de exibição pode ser selecionado com xrandr(1). Por exemplo, para mudar para 1280x1024 a 60 Hz:

% xrandr --mode 1280x1024 --rate 60

Uma tarefa comum é usar a saída de vídeo externa em um notebook para um projetor de vídeo.

O tipo e a quantidade de conectores de saída variam entre os dispositivos, e o nome dado a cada saída varia de driver para driver. O que um driver chama de HDMI-1, outro pode chamar de HDMI1. Portanto, o primeiro passo é executar xrandr(1) para listar todas as saídas disponíveis:

% xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768      60.04*+
   1024x768      60.00
   800x600       60.32    56.25
   640x480       59.94
VGA1 connected (normal left inverted right x axis y axis)
   1280x1024     60.02 +  75.02
   1280x960      60.00
   1152x864      75.00
   1024x768      75.08    70.07    60.00
   832x624       74.55
   800x600       72.19    75.00    60.32    56.25
   640x480       75.00    72.81    66.67    60.00
   720x400       70.08
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)

Quatro saídas foram encontradas: os conectores LVDS1 e VGA1, HDMI1 e DP1 do painel interno.

O projetor foi conectado à saída VGA1. O xrandr(1) agora é usado para definir essa saída para a resolução nativa do projetor e adicionar o espaço adicional à direita da área de trabalho:

% xrandr --output VGA1 --auto --right-of LVDS1

A opção --auto escolhe a resolução e a taxa de atualização detectadas pelo EDID. Se a resolução não for detectada corretamente, um valor fixo pode ser fornecido com --mode em vez da instrução --auto. Por exemplo, a maioria dos projetores pode ser usada com uma resolução de 1024x768, que é definida com --mode 1024x768.

O xrandr(1) geralmente é executado a partir do .xinitrc para definir o modo apropriado quando o X é iniciado.

Configurando a resolução do monitor em um arquivo

Para definir uma resolução de tela de 1024x768 em um arquivo de configuração:

Exemplo 19. Defina a resolução de tela em um arquivo

/usr/local/etc/X11/xorg.conf.d/screen-resolution.conf

Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	SubSection "Display"
	Modes      "1024x768"
	EndSubSection
EndSection

Os poucos monitores que não possuem EDID podem ser configurados setando o HorizSync e o VertRefresh para o intervalo de frequências suportado pelo monitor.

Exemplo 20. Configurando Manualmente as Frequências do Monitor

/usr/local/etc/X11/xorg.conf.d/monitor0-freq.conf

Section "Monitor"
	Identifier   "Monitor0"
	HorizSync    30-83   # kHz
	VertRefresh  50-76   # Hz
EndSection

5.4.7. Dispositivos de Entrada

5.4.7.1. Teclados
Layout do Teclado

A localização padronizada das teclas em um teclado é chamada de layout. Layouts e outros parâmetros ajustáveis são listados em xkeyboard-config(7).

Um layout dos Estados Unidos é o padrão. Para selecionar um layout alternativo, defina as opções XkbLayout e XkbVariant em um InputClass. Isso será aplicado a todos os dispositivos de entrada que correspondam à classe.

Este exemplo seleciona um layout de teclado Francês.

Exemplo 21. Definindo um layout de teclado

/usr/local/etc/X11/xorg.conf.d/keyboard-fr.conf

Section	"InputClass"
	Identifier	"KeyboardDefaults"
	MatchIsKeyboard	"on"
	Option		"XkbLayout" "fr"
EndSection
Exemplo 22. Definindo vários layouts de teclado

Define os layouts de teclado para Estados Unidos, Espanhol e Ucraniano. Alterne entre esses layouts pressionando Alt+Shift. O x11/xxkb ou x11/sbxkb pode ser usado para um melhor controle da mudança de layout e dos indicadores do layout atual.

/usr/local/etc/X11/xorg.conf.d/kbd-layout-multi.conf

Section	"InputClass"
	Identifier	"All Keyboards"
	MatchIsKeyboard	"yes"
	Option		"XkbLayout" "us, es, ua"
EndSection
Fechando o Xorg pelo teclado

X pode ser fechado com uma combinação de teclas. Por padrão, essa combinação de teclas não está definida porque entra em conflito com os comandos do teclado para alguns aplicativos. Ativar essa opção requer alterações na seção InputDevice do teclado:

Exemplo 23. Ativando o fechamento de X pelo teclado

/usr/local/etc/X11/xorg.conf.d/keyboard-zap.conf

Section	"InputClass"
	Identifier	"KeyboardDefaults"
	MatchIsKeyboard	"on"
	Option		"XkbOptions" "terminate:ctrl_alt_bksp"
EndSection
5.4.7.2. Mouse e Dispositivos Similares

Se ao usar xorg-server 1.20.8 ou maior no FreeBSD 12.1 e não usar moused(8), adicione kern.evdev.rcpt_mask=12 ao arquivo /etc/sysctl.conf:

Muitos parâmetros do mouse podem ser ajustados com opções de configuração. Veja mousedrv(4) para obter uma lista completa.

Botões do Mouse

O número de botões em um mouse pode ser definido na seção InputDevice do xorg.conf. Para definir o número de botões para 7:

Exemplo 24. Definindo o número de botões do mouse

/usr/local/etc/X11/xorg.conf.d/mouse0-buttons.conf

Section "InputDevice"
	Identifier  "Mouse0"
	Option      "Buttons" "7"
EndSection

5.4.8. Configuração manual

Em alguns casos, a autoconfiguração do Xorg não funciona com alguns hardwares específicos, ou uma configuração diferente é desejada. Para esses casos, um arquivo de configuração personalizado pode ser criado.

Não crie arquivos de configuração manualmente, a menos que seja necessário. A configuração manual desnecessária pode impedir o funcionamento adequado.

Um arquivo de configuração pode ser gerado pelo Xorg baseado no hardware detectado. Esse arquivo geralmente é um ponto de partida útil para configurações personalizadas.

Gerando um arquivo xorg.conf:

# Xorg -configure

O arquivo de configuração é salvo em /root/xorg.conf.new. Faça as alterações desejadas e teste esse arquivo(usando -retro assim será exibido um fundo visível) com:

# Xorg -retro -config /root/xorg.conf.new

Após a nova configuração ter sido ajustada e testada, ela pode ser dividida em arquivos menores no diretorio, /usr/local/etc/X11/xorg.conf.d/.

5.5. Usando fontes no Xorg

5.5.1. Fontes Type1

As fontes padrões que vem com o Xorg não são adequadas para muitas aplicações desktop. As fontes grandes aparecem irregulares e com aparência não profissional, e as fontes pequenas são quase ilegíveis. Contudo existem muitas fontes Type1 (PostScript™) gratuitas de alta qualidade prontas para uso no Xorg. Por exemplo, a coleção de fontes URW (x11-fonts/urwfonts) inclui versões de alta qualidade de fontes type1 padrão (Times Roman™, Helvetica™, Palatino™ e outras). A coleção Freefonts (x11-fonts/freefonts) inclui muito mais fontes, mas a maioria delas direcionadas para uso em softwares gráficos como o Gimp, e não são tão completas para servir como fontes de tela. Além disso, o Xorg pode ser configurado para usar fontes TrueType™ com um minimo esforço. Para maiores detalhes sobre isso veja a página de manual do X(7) ou Fontes TrueType™.

Para instalar as coleções de fontes Type1 usando pacotes binários, execute os seguintes comandos:

# pkg install urwfonts

Como alternativa, para compilar a partir da coleção de Ports, execute os seguintes comandos:

# cd /usr/ports/x11-fonts/urwfonts
# make install clean

Proceda da mesma forma com a freefont ou outras coleções. Para que o servidor X detecte essas fontes, adicione uma linha apropriada ao arquivo de configuração do servidor X (/etc/X11/xorg.conf):

FontPath "/usr/local/shared/fonts/urwfonts/"

Alternativamente, na linha de comando de execução da sessão X:

% xset fp+ /usr/local/shared/fonts/urwfonts
% xset fp rehash

Isso funcionará, mas será perdido quando a sessão X for fechada, a menos que seja adicionada ao arquivo de inicialização (~/.xinitrc para uma sessão startx normal ou ~/.xsession ao efetuar login através de um gerenciador de login gráfico como o XDM). Uma terceira forma é usar o novo /usr/local/etc/fonts/local.conf, como demonstrado em Fontes com Anti-Alias.

5.5.2. Fontes TrueType™

O Xorg tem suporte nativo para renderizar fontes TrueType™. Existem dois módulos diferentes que podem ativar essa funcionalidade. O módulo freetype é usado neste exemplo porque é mais consistente com os outros backends de renderização de fonte. Para habilitar o módulo freetype, basta adicionar a seguinte linha à seção "Module" do /etc/X11/xorg.conf.

Load  "freetype"

Agora crie um diretório para as fontes TrueType™ (por exemplo, /usr/local/shared/fonts/TrueType) e copie todas as fontes TrueType™ para este diretório. Tenha em mente que as fontes TrueType™ não podem ser obtidas diretamente de um Apple™Mac™; elas devem estar no formato UNIX™/MS-DOS™/Windows™ para uso pelo Xorg. Uma vez que os arquivos foram copiados para este diretório, use mkfontdir para criar um fonts.dir, para que o renderizador de fontes do X saiba que esses novos arquivos foram instalados. O mkfontdir pode ser instalado como um pacote binário com o comando:

# pkg install mkfontdir

Em seguida, crie um índice de arquivos de fontes X em um diretório:

# cd /usr/local/shared/fonts/TrueType
# mkfontdir

Agora adicione o diretório TrueType™ ao caminho da fonte. Isso é exatamente o mesmo descrito em Fontes Type1:

% xset fp+ /usr/local/shared/fonts/TrueType
% xset fp rehash

ou adicione uma linha de FontPath ao xorg.conf.

Agora, o Gimp, o Apache OpenOffice e todos os outros aplicativos X devem reconhecer as fontes TrueType™ instaladas. Fontes extremamente pequenas (como o texto em uma tela de alta resolução em uma página da Web) e fontes extremamente grandes (dentro do StarOffice™) ficarão muito melhores agora.

5.5.3. Fontes com Anti-Alias

Todas as fontes do Xorg que são encontradas em /usr/local/shared/fonts/ e ~/.fonts/ são automaticamente disponibilizadas para anti-aliasing para aplicativos compatíveis com Xft-aware. Os aplicativos mais recentes são compatíveis com o Xft-aware, incluindo o KDE, o GNOME e o Firefox.

Para controlar quais fontes são anti-aliased, ou para configurar as propriedades do anti-alias, crie (ou edite, se já existir) o arquivo /usr/local/etc/fonts/local.conf. Vários recursos avançados do sistema de fontes Xft podem ser ajustados usando este arquivo; Esta seção descreve apenas algumas possibilidades simples. Para maiores detalhes, por favor veja fonts-conf(5).

Este arquivo deve estar no formato XML. Preste muita atenção ao uso de letras maiusculas e minusculas e certifique-se de que todas as tags estejam corretamente fechadas. O arquivo começa com o cabeçalho XML usual seguido por uma definição DOCTYPE e, em seguida, a tag <fontconfig>:

<?xml version="1.0"?>
      <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
      <fontconfig>

Como dito anteriormente, todas as fontes em /usr/local/shared/fonts/ e ~/.fonts/ já estão disponíveis para aplicativos Xft-aware. Para adicionar outro diretório fora dessas duas árvores de diretórios, adicione uma linha como essa a /usr/local/etc/fonts/local.conf:

<dir>/path/to/my/fonts</dir>

Depois de adicionar novas fontes e especialmente novos diretórios de fontes, reconstrua os caches de fontes:

# fc-cache -f

O anti-aliasing torna as bordas um pouco confusas, o que torna o texto muito pequeno mais legível e remove os "serrilhados" do texto grande, mas pode causar fadiga ocular se aplicado ao texto normal. Para excluir tamanhos de fonte menores que 14 pontos do anti-aliasing, inclua estas linhas:

        <match target="font">
	    <test name="size" compare="less">
		<double>14</double>
	    </test>
	    <edit name="antialias" mode="assign">
		<bool>false</bool>
	    </edit>
	</match>
	<match target="font">
	    <test name="pixelsize" compare="less" qual="any">
		<double>14</double>
	    </test>
	    <edit mode="assign" name="antialias">
		<bool>false</bool>
	    </edit>
	</match>

O espaçamento para algumas fontes monoespaçadas também pode ser inadequado com o anti-aliasing. Este parece ser um problema com o KDE, em particular. Uma possível correção é forçar o espaçamento dessas fontes para que seja 100. Adicione essas linhas:

	<match target="pattern" name="family">
	   <test qual="any" name="family">
	       <string>fixed</string>
	   </test>
	   <edit name="family" mode="assign">
	       <string>mono</string>
	   </edit>
	</match>
	<match target="pattern" name="family">
	    <test qual="any" name="family">
		<string>console</string>
	    </test>
	    <edit name="family" mode="assign">
		<string>mono</string>
	    </edit>
	</match>

(isto cria um apelido para outros nomes comuns para fontes fixas como "mono"), e então adicione:

         <match target="pattern" name="family">
	     <test qual="any" name="family">
		 <string>mono</string>
	     </test>
	     <edit name="spacing" mode="assign">
		 <int>100</int>
	     </edit>
	 </match>

Determinadas fontes, como Helvetica, podem ter um problema com o anti-alias. Geralmente isso se manifesta como uma fonte que parece cortada ao meio na vertical. Na pior das hipóteses, pode causar falhas nos aplicativos. Para evitar isso, considere adicionar o seguinte ao local.conf:

         <match target="pattern" name="family">
	     <test qual="any" name="family">
		 <string>Helvetica</string>
	     </test>
	     <edit name="family" mode="assign">
		 <string>sans-serif</string>
	     </edit>
	 </match>

Depois de editar o local.conf, certifique-se de finalizar o arquivo com a tag </fontconfig>. Não fazer isso fará com que as alterações sejam ignoradas.

Os usuários podem adicionar configurações personalizadas criando seus próprios arquivos ~/.config/fontconfig/fonts.conf. Este arquivo usa o mesmo formato XML descrito acima.

Um último ponto: com uma tela de LCD, a amostragem de sub-pixels pode ser desejada. Isso basicamente trata os componentes vermelho, verde e azul (separados horizontalmente) separadamente para melhorar a resolução horizontal; os resultados podem ser dramáticos. Para habilitar isso, adicione a linha em algum lugar do local.conf:

	 <match target="font">
	     <test qual="all" name="rgba">
		 <const>unknown</const>
	     </test>
	     <edit name="rgba" mode="assign">
		 <const>rgb</const>
	     </edit>
	 </match>

Dependendo do tipo de display, o rgb pode precisar ser alterado para bgr, vrgb ou vbgr: experimente e veja qual funciona melhor.

5.6. O Gerenciador de Display X

O Xorg fornece um Gerenciador de Display X, o XDM, que pode ser usado para o gerenciamento de sessões de login. O XDM fornece uma interface gráfica para escolher em qual servidor de display se conectar para inserir informações de autorização, tal como uma combinação de login e senha.

Esta seção demonstra como configurar o X Display Manager no FreeBSD. Alguns ambientes de desktop fornecem seu próprio gerenciador de login gráfico. Consulte GNOME para instruções sobre como configurar o GNOME Display Manager e KDE para instruções sobre como configurar o KDE Display Manager.

5.6.1. Configurando o XDM

Para instalar o XDM, use o pacote ou ports x11/xdm. Uma vez instalado, o XDM pode ser configurado para ser executado quando a máquina for inicializada editando esta entrada em /etc/ttys:

ttyv8   "/usr/local/bin/xdm -nodaemon"  xterm   off secure

Altere o off para on e salve a edição. O ttyv8 nesta entrada indica que o XDM será executado no nono terminal virtual.

O diretório de configuração do XDM está localizado em /usr/local/lib/X11/xdm. Esse diretório contém diversos arquivos usados para alterar o comportamento e a aparência do XDM, bem como alguns scripts e programas usados para configurar a área de trabalho quando o XDM está em execução. Arquivos de Configuração do XDM resume a função de cada um desses arquivos. A sintaxe exata e o uso desses arquivos são descritos em xdm(1).

Tabela 6. Arquivos de Configuração do XDM
ArquivoDescrição

Xaccess

O protocolo para conectar ao XDM é chamado de X Display Manager Connection Protocol (XDMCP). Este arquivo é um conjunto de regras de autorização do cliente para controlar conexões de XDMCP de máquinas remotas. Por padrão, esse arquivo não permite a conexão de nenhum cliente remoto.

Xresources

Este arquivo controla a aparência do seletor de display XDM e das telas de login. A configuração padrão é uma janela de login retangular simples com o nome do host da máquina exibido na parte superior em uma fonte grande e "Login:" e "Senha:" solicitado abaixo. O formato deste arquivo é idêntico ao arquivo app-defaults descrito na documentação do Xorg.

Xservers

A lista de exibições locais e remotas que o seletor deve fornecer como opções de login.

Xsession

Script de sessão padrão para logins que é executado pelo XDM após um usuário realizar o login. Isso aponta para um script de sessão personalizado em ~/.xsession.

Xsetup_*

Script para iniciar automaticamente os aplicativos antes de exibir as interfaces de seleção ou de login. Há um script para cada exibição sendo usada, denominada Xsetup_*, em que * é o número de exibição local. Geralmente, esses scripts executam um ou dois programas em segundo plano, como xconsole.

xdm-config

Configuração global para todos os monitores executados nesta máquina.

xdm-errors

Contém os erros gerados pelo programa do servidor. Se um display que o XDM está tentando iniciar travar, procure neste arquivo por mensagens de erro. Essas mensagens também são gravadas no ~/.xsession-errors do usuário.

xdm-pid

O ID do processo XDM em execução.

5.6.2. Configurando o acesso remoto

Por padrão, somente usuários no mesmo sistema podem efetuar login usando o XDM. Para permitir que os usuários em outros sistemas se conectem ao servidor de Display, edite as regras de controle de acesso e ative o listener de conexão.

Para configurar o XDM para escutar qualquer conexão remota, comente a linha DisplayManager.requestPort em /usr/local/etc/X11/xdm/xdm-config colocando um ! na frente dele:

! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
DisplayManager.requestPort:     0

Salve as edições e reinicie o XDM. Para restringir o acesso remoto, veja as entradas de exemplo em /usr/local/lib/X11/xdm/Xaccess e consulte xdm(1) para mais informações.

5.7. Ambientes de desktop

Esta seção descreve como instalar três ambientes de desktop populares em um sistema FreeBSD. Um ambiente de desktop pode variar de um gerenciador de janelas simples a um conjunto completo de aplicativos de desktop. Mais de cem ambientes de área de trabalho estão disponíveis na categoria x11-wm da Coleção de Ports.

5.7.1. GNOME

O GNOME é um ambiente de área de trabalho amigável. Ele inclui um painel para iniciar aplicativos e exibir status, uma área de trabalho, um conjunto de ferramentas e aplicativos e um conjunto de convenções que facilitam a cooperação entre os aplicativos e a compatibilidade entre eles. Mais informações sobre o GNOME no FreeBSD podem ser encontradas em https://www.FreeBSD.org/gnome. Esse site contém documentação adicional sobre instalação, configuração e gerenciamento do GNOME no FreeBSD.

Este ambiente de desktop pode ser instalado a partir de um pacote binario:

# pkg install gnome3

Para instalar o GNOME a partir do ports, use o seguinte comando. O GNOME é um aplicativo grande e levará algum tempo para compilar, mesmo em um computador rápido.

# cd /usr/ports/x11/gnome3
# make install clean

O GNOME requer que o /proc seja montado. Adicione esta linha ao /etc/fstab para montar este sistema de arquivos automaticamente durante a inicialização do sistema:

proc           /proc       procfs  rw  0   0

O GNOME usa o D-Bus e o HAL para barramento de mensagens e abstração de hardware. Esses aplicativos são instalados automaticamente como dependências do GNOME. Habilite-os em /etc/rc.conf para que eles sejam iniciados quando o sistema inicializar:

dbus_enable="YES"
hald_enable="YES"

Após a instalação, configure o Xorg para iniciar o GNOME. A maneira mais fácil de fazer isso é habilitar o Gerenciador de Display do GNOME, o GDM, que é instalado como parte do pacote ou ports do GNOME. Pode ser ativado adicionando esta linha ao /etc/rc.conf:

gdm_enable="YES"

Geralmente é desejável também iniciar todos os serviços do GNOME. Para conseguir isso, adicione uma segunda linha ao /etc/rc.conf:

gnome_enable="YES"

O GDM será iniciado automaticamente quando o sistema for inicializado.

Um segundo método para iniciar o GNOME é digitar startx na linha de comando depois de configurar o ~/.xinitrc. Se este arquivo já existir, substitua a linha que inicia o gerenciador de janelas atual por uma que inicie o /usr/local/bin/gnome-session. Se este arquivo não existir, crie-o com este comando:

% echo "exec /usr/local/bin/gnome-session" > ~/.xinitrc

Um terceiro método é usar o XDM como o gerenciador de Display. Neste caso, crie um executável ~/.xsession:

% echo "exec /usr/local/bin/gnome-session" > ~/.xsession

5.7.2. KDE

O KDE é outro ambiente de trabalho fácil de usar. Essa área de trabalho fornece um conjunto de aplicativos com aparência e comportamento consistentes, um menu e barras de ferramentas padronizadas, atalhos de teclado, esquemas de cores, internacionalização e uma configuração de área de trabalho centralizada e orientada a diálogos. Mais informações sobre o KDE podem ser encontradas em http://www.kde.org/. Para informações específicas do FreeBSD, consulte http://freebsd.kde.org.

Para instalar o pacote KDE, digite:

# pkg install x11/kde5

Para instalar o KDE via ports, use o seguinte comando. A instalação do ports fornecerá um menu para selecionar quais componentes instalar. O KDE é um aplicativo grande e levará algum tempo para compilar, mesmo em um computador rápido.

# cd /usr/ports/x11/kde5
# make install clean

O KDE requer que o /proc esteja montado. Adicione esta linha ao /etc/fstab para montar este sistema de arquivos automaticamente durante a inicialização do sistema:

proc           /proc       procfs  rw  0   0

O KDE usa o D-Bus e o HAL para barramento de mensagens e abstração de hardware. Estas aplicações são automaticamente instaladas como dependências do KDE. Habilite-os em /etc/rc.conf para que eles sejam iniciados quando o sistema inicializar:

dbus_enable="YES"
hald_enable="YES"

Desde o KDE Plasma 5, o Gerenciador de Display do KDE, KDM, não é mais desenvolvido. Uma possível substituição é o SDDM. Para instalá-lo, digite:

# pkg install x11/sddm

Adicione esta linha em /etc/rc.conf:

sddm_enable="YES"

Um segundo método para iniciar o KDE Plasma é digitar startx na linha de comando. Para que isso funcione, a seguinte linha é necessária em ~/.xinitrc:

exec ck-launch-session startplasma-x11

Um terceiro método para iniciar o KDE Plasma é através do XDM. Para fazer isso, crie um arquivo executável ~/.xsession da seguinte maneira:

% echo "exec ck-launch-session startplasma-x11" > ~/.xsession

Uma vez iniciado o KDE Plasma , consulte o sistema de ajuda integrado para obter mais informações sobre como usar seus diversos menus e aplicativos.

5.7.3. Xfce

O Xfce é um ambiente de desktop baseado no kit de ferramentas GTK+ usado pelo GNOME. No entanto, é mais leve e fornece um desktop simples, eficiente e fácil de usar. É totalmente configurável, possui um painel principal com menus, applets e lançadores de aplicativos, fornece um gerenciador de arquivos e um gerenciador de som e é personalizável. Como é rápido, leve e eficiente, é ideal para máquinas mais antigas ou mais lentas com limitações de memória. Mais informações sobre o Xfce podem ser encontradas em http://www.xfce.org.

Para instalar o pacote Xfce:

# pkg install xfce

Alternativamente , para compilar o port:

# cd /usr/ports/x11-wm/xfce4
# make install clean

O Xfce usa o D-Bus para barramento de mensagens. Este aplicativo é instalado automaticamente como dependência do Xfce. Habilite-o em /etc/rc.conf para que ele seja iniciado quando o sistema inicializar:

dbus_enable="YES"

Ao contrário do GNOME ou KDE, o Xfce não disponibiliza seu próprio gerenciador de login. Para iniciar o Xfce à partir da linha de comando digitando startx, mas primeiro adicione sua entrada ao ~/.xinitrc:

% echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xinitrc

Um método alternativo é usar o XDM. Para configurar este método, crie um executável ~/.xsession:

% echo ". /usr/local/etc/xdg/xfce4/xinitrc" > ~/.xsession

5.8. Instalando o Compiz Fusion

Uma maneira de tornar o uso de um computador desktop mais agradável é com bons efeitos 3D.

Instalar o pacote Compiz Fusion é fácil, mas a configuração requer alguns passos que não estão descritos na documentação do ports.

5.8.1. Configurando o Driver nVidia no FreeBSD

Os efeitos da área de trabalho podem causar uma carga considerável na placa gráfica. Para uma placa gráfica baseada na nVidia, o driver proprietário é necessário para um bom desempenho. Usuários de outras placas gráficas podem pular esta seção e continuar com a configuração do xorg.conf.

Para determinar qual o driver nVidia é necessário, consulte a Perguntas frequentes sobre o assunto.

Tendo determinado o driver correto para usar em sua placa gráfica, a instalação é tão simples quanto instalar qualquer outro pacote.

Por exemplo, para instalar o driver mais recente:

# pkg install x11/nvidia-driver

O driver irá criar um módulo do kernel, que precisa ser carregado na inicialização do sistema. Adicione a seguinte linha ao /boot/loader.conf:

nvidia_load="YES"

Para carregar imediatamente o módulo no kernel em execução, você pode executar o comando kldload nvidia. No entanto, foi observado que algumas versões do Xorg não funcionarão corretamente se o driver não for carregado no momento da inicialização. Desta forma, depois de editar o /boot/loader.conf, é recomendado reiniciar o sistema.

Com o módulo do kernel carregado, você normalmente só precisa alterar uma única linha no xorg.conf para habilitar o driver proprietário:

Encontre a seguinte linha no /etc/X11/xorg.conf:

Driver      "nv"

e mude para:

Driver      "nvidia"

Inicie a GUI como de costume, e você será saudado pelo splash da nVidia. Tudo deve funcionar como de costume.

5.8.2. Configurando o xorg.conf para Efeitos de Desktop

Para ativar o Compiz Fusion, o /etc/X11/xorg.conf precisa ser modificado:

Adicione a seguinte seção para habilitar os efeitos compostos:

Section "Extensions"
    Option         "Composite" "Enable"
EndSection

Localize a seção "Screen", que deve ser semelhante à abaixo:

Section "Screen"
    Identifier     "Screen0"
    Device         "Card0"
    Monitor        "Monitor0"
    ...

e adicione as duas linhas seguintes (após "Monitor"):

DefaultDepth    24
Option         "AddARGBGLXVisuals" "True"

Localize a "Subsection" que se refere à resolução da tela que você deseja usar. Por exemplo, se você deseja usar 1280x1024, localize a seção a seguir. Se a resolução desejada não aparecer em nenhuma subseção, você pode adicionar a entrada relevante à mão:

SubSection     "Display"
    Viewport    0 0
    Modes      "1280x1024"
EndSubSection

Uma profundidade de cor de 24 bits é necessária para a composição do desktop, altere a subseção acima para:

SubSection     "Display"
    Viewport    0 0
    Depth       24
    Modes      "1280x1024"
EndSubSection

Finalmente, confirme que os módulos "glx" e "extmod" estão carregados na seção "Module":

Section "Module"
    Load           "extmod"
    Load           "glx"
    ...

A configuração acima pode ser feita automaticamente com o x11/nvidia-xconfig (executando como root):

# nvidia-xconfig --add-argb-glx-visuals
# nvidia-xconfig --composite
# nvidia-xconfig --depth=24

5.8.3. Instalando e Configurando o Compiz Fusion

Instalar o Compiz Fusion é tão simples quanto qualquer outro pacote:

# pkg install x11-wm/compiz-fusion

Quando a instalação estiver concluída, inicie o Desktop Gráfico e, em um terminal, digite os seguintes comandos (como usuário normal):

% compiz --replace --sm-disable --ignore-desktop-hints ccp &
% emerald --replace &

Sua tela piscará por alguns segundos, pois o gerenciador de janelas (por exemplo, Metacity se você estiver usando o GNOME) será substituído pelo Compiz Fusion. O Emerald cuida das decorações da janela (isto é, botões de fechar, minimizar, maximizar, barras de título e assim por diante).

Você pode converter isso em um script trivial e executá-lo na inicialização automaticamente (por exemplo, adicionando a "Sessions" em um Desktop do GNOME):

#! /bin/sh
compiz --replace --sm-disable --ignore-desktop-hints ccp &
emerald --replace &

Salve isso no seu diretório home como, por exemplo, start-compiz e torne-o executável:

% chmod +x ~/start-compiz

Em seguida, utilize a GUI para adicioná-lo a Startup Programs (localizado em System, Preferences, Sessions em um desktop GNOME).

Para selecionar realmente todos os efeitos desejados e suas configurações, execute (novamente como um usuário normal) o Compiz Config Settings Manager:

% ccsm

No GNOME, isso também pode ser encontrado no menu System, Preferences.

Se você selecionou "gconf support" durante a compilação, você também será capaz de ver estas configurações usando o gconf-editor sob apps/compiz.

5.9. Solução de problemas

Se o mouse não funcionar, você precisará primeiro configurá-lo antes de prosseguir. Em versões recentes do Xorg, as seções InputDevice em xorg.conf são ignoradas em favor dos dispositivos autodetectados. Para restaurar o comportamento antigo, adicione a seguinte linha à seção ServerLayout ou ServerFlags deste arquivo:

Option "AutoAddDevices" "false"

Os dispositivos de entrada podem então ser configurados como nas versões anteriores, juntamente com quaisquer outras opções necessárias (por exemplo, troca do layout de teclado).

Como explicado anteriormente, o daemon hald irá, por padrão, detectar automaticamente o seu teclado. Há chances de que o layout ou modelo do teclado não esteja correto, ambientes de Desktop como o GNOME, KDE ou Xfce fornecem ferramentas para configurar o teclado. No entanto, é possível definir as propriedades do teclado diretamente com a ajuda do utilitário setxkbmap(1) ou com uma regra de configuração do aplicativohald.

Por exemplo, se alguém quiser usar um teclado de teclas PC 102 vindo com um layout francês, temos que criar um arquivo de configuração de teclado para o hald chamado x11-input.fdi e salva-lo no diretório /usr/local/etc/hal/fdi/policy. Este arquivo deve conter as seguintes linhas:

<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keyboard">
	  <merge key="input.x11_options.XkbModel" type="string">pc102</merge>
	  <merge key="input.x11_options.XkbLayout" type="string">fr</merge>
    </match>
  </device>
</deviceinfo>

Se este arquivo já existir, apenas copie e adicione ao seu arquivo as linhas referentes à configuração do teclado.

Você terá que reinicializar sua máquina para forçar o hald a ler este arquivo.

É possível fazer a mesma configuração a partir de um terminal X ou um script com esta linha de comando:

% setxkbmap -model pc102 -layout fr

O /usr/local/shared/X11/xkb/rules/base.lst lista os vários teclados, layouts e opções disponíveis.

O arquivo de configuração xorg.conf.new pode agora ser ajustado para o seu gosto. Abra o arquivo em um editor de texto, como emacs(1) ou o ee(1). Se o monitor for um modelo antigo ou incomum que não suporta a detecção automática de frequências de sincronização, essas configurações podem ser adicionadas ao xorg.conf.new na seção "Monitor":

Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
	HorizSync    30-107
	VertRefresh  48-120
EndSection

A maioria dos monitores suporta autodetecção de frequência de sincronização, tornando desnecessária a entrada manual desses valores. Para os poucos monitores que não suportam a detecção automática, evite possíveis danos inserindo apenas valores fornecidos pelo fabricante.

O X permite que os recursos do DPMS (Energy Star) sejam usados com monitores capazes. O programa xset(1) controla os tempos limite e pode forçar os modos de espera, suspensão ou desativação. Se você deseja habilitar recursos de DPMS para o seu monitor, você deve adicionar a seguinte linha à seção do monitor:

Option       "DPMS"

Enquanto o arquivo de configuração xorg.conf.new ainda estiver aberto em um editor, selecione a resolução padrão e a profundidade de cor desejada. Isso é definido na seção "Screen":

Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	Monitor    "Monitor0"
	DefaultDepth 24
	SubSection "Display"
		Viewport  0 0
		Depth     24
		Modes     "1024x768"
	EndSubSection
EndSection

A palavra-chave DefaultDepth descreve a profundidade de cor a ser executada por padrão. Isto pode ser sobrescrito com a opção de linha de comando -depth para Xorg(1). A palavra-chave Modes descreve a resolução a ser executada na profundidade de cor especificada. Observe que somente os modos padrão VESA são suportados, conforme definido pelo hardware gráfico do sistema de destino. No exemplo acima, a profundidade de cor padrão é de vinte e quatro bits por pixel. Nesta profundidade de cor, a resolução aceita é 1024 por 768 pixels.

Finalmente, escreva o arquivo de configuração e teste-o usando o modo de teste dado acima.

Uma das ferramentas disponíveis para ajudá-lo durante o processo de solução de problemas são os arquivos de log do Xorg, que contêm informações sobre cada dispositivo ao qual o servidor Xorg se conecta. Os nomes de arquivos de log do Xorg estão no formato /var/log/Xorg.0.log. O nome exato do log pode variar de Xorg.0.log para Xorg.8.log e assim por diante.

Se tudo estiver bem, o arquivo de configuração precisa ser instalado em um local comum onde o Xorg(1) possa encontrá-lo. Isto é tipicamente /etc/X11/xorg.conf ou /usr/local/etc/X11/xorg.conf.

# cp xorg.conf.new /etc/X11/xorg.conf

O processo de configuração do Xorg agora está completo. O Xorg pode agora ser iniciado com o utilitário startx(1). O servidor Xorg também pode ser iniciado com o uso de xdm(1).

5.9.1. Configuração com Chipsets gráficos Intel™i810

A configuração com chipsets integrados i810 da Intel™ requer a interface de programação AGP agpgart para o Xorg para conduzir a placa. Consulte a página de manual do driver agp(4) para obter maiores informações.

Isso permitirá a configuração do hardware como qualquer outra placa gráfica. Observe que nos sistemas sem o driver agp(4) compilado no kernel, tentar carregar o módulo com kldload(8) não funcionará. Este driver tem que estar no kernel no momento da inicialização, através da compilação ou usando o /boot/loader.conf.

5.9.2. Adicionando um Flatpanel Widescreen ao Mix

Esta seção pressupõe um pouco de conhecimento avançado de configuração. Se as tentativas de usar as ferramentas de configuração padrão acima não resultaram em uma configuração funcional, há informações suficientes nos arquivos de log para serem úteis para fazer a configuração funcionar. O uso de um editor de texto será necessário.

Os formatos widescreen atuais (WSXGA, WSXGA+, WUXGA, WXGA, WXGA+, etc.) suportam formatos ou proporções de formato 16:10 e 10:9 que podem ser problemáticos. Exemplos de algumas resoluções de tela comuns para proporções de 16:10 são:

  • 2560x1600

  • 1920x1200

  • 1680x1050

  • 1440x900

  • 1280x800

Em algum momento, será tão fácil quanto adicionar uma dessas resoluções como um possível Mode na Section "Screen" como tal:

Section "Screen"
Identifier "Screen0"
Device     "Card0"
Monitor    "Monitor0"
DefaultDepth 24
SubSection "Display"
	Viewport  0 0
	Depth     24
	Modes     "1680x1050"
EndSubSection
EndSection

O Xorg é inteligente o suficiente para extrair as informações de resolução da tela widescreen via informações I2C/DDC, para que ele saiba o que o monitor pode suportar em termos de freqüências e resoluções.

Se aqueles ModeLines não existem nos drivers, pode ser necessário dar ao Xorg uma pequena dica. Usando o /var/log/Xorg.0.log pode-se extrair informações suficientes para criar manualmente um ModeLine que funcionará. Basta procurar informações semelhantes:

(II) MGA(0): Supported additional Video Mode:
(II) MGA(0): clock: 146.2 MHz   Image Size:  433 x 271 mm
(II) MGA(0): h_active: 1680  h_sync: 1784  h_sync_end 1960 h_blank_end 2240 h_border: 0
(II) MGA(0): v_active: 1050  v_sync: 1053  v_sync_end 1059 v_blanking: 1089 v_border: 0
(II) MGA(0): Ranges: V min: 48  V max: 85 Hz, H min: 30  H max: 94 kHz, PixClock max 170 MHz

Esta informação é chamada de informação EDID. Criar uma ModeLine a partir disso é apenas uma questão de colocar os números na ordem correta:

ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings>

Assim, o ModeLine na Section "Monitor" para este exemplo ficaria assim:

Section "Monitor"
Identifier      "Monitor1"
VendorName      "Bigname"
ModelName       "BestModel"
ModeLine        "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089
Option          "DPMS"
EndSection

Agora, tendo completado estes passos simples de edição, o X deve iniciar no seu novo monitor widescreen.

5.9.3. Solução de problemas do Compiz Fusion

5.9.3.1. Eu instalei o Compiz Fusion, e depois de executar os comandos que você mencionou, minhas janelas ficaram sem barras de título e botões. O que está errado?

Provavelmente está faltando alguma configuração em /etc/X11/xorg.conf. Revise este arquivo cuidadosamente e verifique especialmente as diretivas DefaultDepth e AddARGBGLXVisuals.

5.9.3.2. Quando executo o comando para iniciar o Compiz Fusion, o servidor X trava e eu volto ao console. O que está errado?

Se você verificar o /var/log/Xorg.0.log, você provavelmente encontrará mensagens de erro durante a inicialização do X. As mais comuns seriam:

(EE) NVIDIA(0):     Failed to initialize the GLX module; please check in your X
(EE) NVIDIA(0):     log file that the GLX module has been loaded in your X
(EE) NVIDIA(0):     server, and that the module is the NVIDIA GLX module.  If
(EE) NVIDIA(0):     you continue to encounter problems, Please try
(EE) NVIDIA(0):     reinstalling the NVIDIA driver.

Este é geralmente o caso quando você atualiza o Xorg. Você precisará reinstalar o pacote x11/nvidia-driver para que o glx seja compilado novamente.

Parte II: Tarefas comuns

Agora que o básico foi abordado, esta parte do livro discute alguns recursos freqüentemente usados do FreeBSD. Estes capítulos:

  • Introduzem aplicativos de desktop populares e úteis: navegadores, ferramentas de produtividade, visualizadores de documentos e muito mais.

  • Introduzem uma série de ferramentas multimídia disponíveis para o FreeBSD.

  • Explicam o processo de compilação de um kernel customizado do FreeBSD para habilitar funcionalidades extras.

  • Descrevem o sistema de impressão em detalhes, tanto configurações de impressoras conectadas em desktops quanto impressoras conectadas à rede.

  • Mostram como executar aplicativos Linux no sistema FreeBSD.

Alguns destes capítulos recomendam leituras prévias, e isso é destacado na sinopse no início de cada capítulo.

Capítulo 6. Aplicações de Desktop

6.1. Sinopse

Embora o FreeBSD seja popular como um servidor por seu desempenho e estabilidade, ele também é adequado para o uso diário como desktop. Com mais de 24.000 aplicativos disponíveis como pacotes ou ports para o FreeBSD, é fácil construir um desktop personalizado que executa uma ampla variedade de aplicativos de desktop. Este capítulo demonstra como instalar vários aplicativos de desktop, incluindo navegadores da Web, software de produtividade, visualizadores de documentos e softwares financeiros.

Os usuários que preferem instalar uma versão de desktop pré-configurada do FreeBSD em vez de configurar um do zero devem consultar FuryBSD., GhostBSD or MidnightBSD.

Os leitores deste capítulo devem saber como:

Para obter informações sobre como configurar um ambiente multimídia, consulte Multimídia.

6.2. Navegadores

O FreeBSD não vem com um navegador Web pré-instalado. Em vez disso, a categoria www da Coleção de Ports contém muitos navegadores que podem ser instalados como um pacote ou compilados a partir da coleção de Ports.

Os ambientes de área de trabalho KDE e GNOME incluem seu próprio navegador HTML. Consulte Ambientes de desktop para mais informações sobre como configurar esses desktops completos.

Alguns navegadores leves incluem o www/dillo2, o www/links e o www/w3m.

Esta seção demonstra como instalar os seguintes navegadores Web populares e indica se o aplicativo é pesado em recursos, se leva tempo para compilar a partir do Ports ou se possui dependências importantes.

Nome da aplicaçãoRecursos necessáriosInstalação a partir do PortsNotas

Firefox

médio

pesado

FreeBSD, Linux™, e versões localizadas estão disponíveis

Konqueror

médio

pesado

Requer bibliotecas do KDE

Chromium

médio

pesado

Requer Gtk+

6.2.1. Firefox

O Firefox é um navegador de código-fonte aberto que apresenta um mecanismo de exibição HTML compatível com os padrões, navegação por guias, bloqueio de pop-up, extensões, segurança aprimorada e muito mais. O Firefox é baseado na base de código Mozilla.

Para instalar o pacote da versão mais recente do Firefox, digite:

# pkg install firefox

Para instalar a versão ESR (Extended Support Release) do Firefox, use:

# pkg install firefox-esr

A Coleção de Ports pode ser usada para compilar a versão desejada do Firefox a partir do código-fonte. Este exemplo compila o www/firefox, onde o firefox pode ser substituído pelo ESR ou pela versão localizada para instalar.

# cd /usr/ports/www/firefox
# make install clean

6.2.2. Konqueror

O Konqueror é mais do que um navegador Web, pois também é um gerenciador de arquivos e um visualizador de multimídia. Suporta WebKit assim como seu próprio KHTML. WebKit é um motor de renderização usado por diversos navegadores modernos incluiindo o Chromium.

O Konqueror pode ser instalado como um pacote digitando:

# pkg install konqueror

Para instalar a partir da Coleção de Ports:

# cd /usr/ports/x11-fm/konqueror/
# make install clean

6.2.3. Chromium

O Chromium é um projeto de navegador de código aberto que visa criar uma experiência de navegação na Web mais segura, mais rápida e mais estável. O Chromium apresenta navegação com guias, bloqueio de pop-up, extensões e muito mais. O Chromium é o projeto de código-fonte aberto no qual o navegador Web do Google Chrome é baseado.

O Chromium pode ser instalado como um pacote digitando:

# pkg install chromium

Alternativamente, o Chromium pode ser compilado a partir do código-fonte usando a Coleção de Ports:

# cd /usr/ports/www/chromium
# make install clean

O executável do Chromium é /usr/local/bin/chrome, não /usr/local/bin/chromium.

6.3. Produtividade

Quando se trata de produtividade, os usuários geralmente procuram uma suíte de escritório ou um processador de texto fácil de usar. Embora alguns ambientes de desktop como o KDE forneçam uma suíte de escritório, não há um pacote de produtividade padrão. Várias suítes de escritório e processadores de texto gráficos estão disponíveis para o FreeBSD, independentemente do gerenciador de janelas instalado.

Esta seção demonstra como instalar os seguintes softwares populares de produtividade e indica se o aplicativo é pesado em recursos, se leva tempo para compilar a partir do ports ou se possui dependências importantes.

Nome da aplicaçãoRecursos necessáriosInstalação a partir do PortsPrincipais Dependências

Calligra

leve

pesado

KDE

AbiWord

leve

leve

Gtk+ ou GNOME

The Gimp

leve

pesado

Gtk+

Apache OpenOffice

pesado

enorme

JDK™ e Mozilla

LibreOffice

um pouco pesado

enorme

Gtk+, ou KDE/ GNOME, ou JDK™

6.3.1. Calligra

O ambiente de área de trabalho do KDE inclui uma suíte de escritório que pode ser instalada separadamente do KDE. O Calligra inclui componentes padrões que podem ser encontrados em outros pacotes de escritório. O Words é o processador de texto, Sheets é o programa de planilha eletrônica, o Stage gerencia apresentações de slides e Karbon é usado para desenhar documentos gráficos.

No FreeBSD, o editors/calligra pode ser instalado como um pacote ou um port. Para instalar o pacote:

# pkg install calligra

Se o pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/editors/calligra
# make install clean

6.3.2. AbiWord

O AbiWord é um programa gratuito de processamento de texto semelhante em aparência ao Microsoft™ Word. É rápido, contém muitos recursos e é de fácil utilização.

O AbiWord pode importar ou exportar muitos formatos de arquivo, incluindo alguns formatos proprietários como o Microsoft™.rtf.

Para instalar o pacote do AbiWord:

# pkg install abiword

Se o pacote não estiver disponível, ele pode ser compilado a partir da Coleção de Ports:

# cd /usr/ports/editors/abiword
# make install clean

6.3.3. O GIMP

Para autoria ou retoque de imagens, o GIMP fornece um sofisticado programa de manipulação de imagens. Ele pode ser usado como um programa de pintura simples ou como um pacote de qualidade para retoque de fotos. Ele suporta um grande número de plugins e possui uma interface de script. O GIMP pode ler e gravar uma grande variedade de formatos de arquivos e suporta interfaces com scanners e tablets.

Para instalar o pacote:

# pkg install gimp

Como alternativa, use a Coleção de Ports:

# cd /usr/ports/graphics/gimp
# make install clean

A categoria de programas gráficos (freebsd.org/ports/) da Coleção de Ports contém vários plugins relacionados ao GIMP, arquivos de ajuda e manuais do usuário.

6.3.4. Apache OpenOffice

O Apache OpenOffice é uma suíte de escritório de código-fonte aberto que é desenvolvida sob a asa da Incubadora da Apache Software Foundation. Ele inclui todos os aplicativos encontrados em um pacote completo de produtividade de escritório: um processador de texto, uma planilha eletrônica, um gerenciador de apresentação e um programa de desenho. Sua interface de usuário é semelhante a outros pacotes de escritório e pode importar e exportar em vários formatos de arquivo populares. Está disponível em vários idiomas diferentes e a internacionalização foi estendida para interfaces, corretores ortográficos e dicionários.

O processador de texto do Apache OpenOffice usa um formato de arquivo XML nativo para maior portabilidade e flexibilidade. O programa de planilha eletrônica possui uma linguagem de macros que pode ser conectada a bancos de dados externos. O Apache OpenOffice é estável e roda nativamente em Windows™, Solaris™, Linux™, FreeBSD, e Mac OS™ X. Maiores informações sobre o Apache OpenOffice podem ser encontradas em openoffice.org. Para informações específicas do FreeBSD, consulte porting.openoffice.org/freebsd/.

Para instalar o pacote Apache OpenOffice:

# pkg install apache-openoffice

Depois que o pacote for instalado, digite o seguinte comando para iniciar o Apache OpenOffice:

% openoffice-X.Y.Z

onde X.Y.Z é o número da versão instalada do Apache OpenOffice. Na primeira vez que o Apache OpenOffice for iniciado, algumas perguntas serão feitas e uma pasta .openoffice.org será criada no diretório pessoal do usuário.

Se o pacote do Apache OpenOffice desejado não estiver disponível, a compilação do port ainda será uma opção. No entanto, isso requer muito espaço em disco e um tempo bastante longo para compilar:

# cd /usr/ports/editors/openoffice-4
# make install clean

Para compilar uma versão localizada, substitua o comando anterior por:

# make LOCALIZED_LANG=your_language install clean

Substitua your_language pelo código ISO do idioma correto. Uma lista de códigos de idiomas suportados está disponível em files/Makefile.localized, localizado no diretório do port.

6.3.5. LibreOffice

O LibreOffice é um pacote de software livre desenvolvido por documentfoundation.org. É compatível com outras grandes suítes de escritórios e está disponível em diversas plataformas. Ele é um fork renomeado do Apache OpenOffice e inclui aplicativos encontrados em um pacote completo de produtividade de escritório: processador de texto, planilha, gerenciador de apresentação, programa de desenho, programa de gerenciamento de banco de dados e uma ferramenta para criar e editar fórmulas matemáticas. Está disponível em vários idiomas diferentes e a internacionalização foi estendida para interfaces, corretores ortográficos e dicionários.

O processador de texto do LibreOffice usa um formato de arquivo XML nativo para maior portabilidade e flexibilidade. O programa de planilha eletrônica possui uma linguagem de macros que pode ser conectada a bancos de dados externos. O LibreOffice é estável e roda nativamente em Windows™, Linux™, FreeBSD e Mac OS™ X. Maiores informações sobre o LibreOffice podem ser encontradas em libreoffice.org.

Para instalar a versão em inglês do pacote LibreOffice:

# pkg install libreoffice

A categoria de editores de texto (freebsd.org/ports/) da Coleção de Ports contém várias versões versões localizadas do LibreOffice. Ao instalar um pacote localizado, substitua libreoffice pelo nome do pacote localizado.

Quando o pacote estiver instalado, digite o seguinte comando para executar o LibreOffice:

% libreoffice

Durante a primeira execução, algumas perguntas serão feitas e uma pasta .libreoffice será criada no diretório pessoal do usuário.

Se o pacote LibreOffice desejado não estiver disponível, a compilação do port ainda será uma opção. No entanto, isso requer muito espaço em disco e um tempo bastante longo para compilar. Este exemplo compila a versão em inglês:

# cd /usr/ports/editors/libreoffice
# make install clean

Para compilar uma versão localizada, faça cd para o diretório do port do idioma desejado. Os idiomas suportados podem ser encontrados na categoria de editores (freebsd.org/ports/) da Coleção de Ports.

6.4. Visualizadores de Documentos

Alguns novos formatos de documentos ganharam popularidade desde o advento do UNIX™ e os visualizadores que eles exigem podem não estar disponíveis no sistema base. Esta seção demonstra como instalar os seguintes visualizadores de documentos:

Nome da aplicaçãoRecursos necessáriosInstalação a partir do PortsPrincipais Dependências

Xpdf

leve

leve

FreeType

gv

leve

leve

Xaw3d

Geeqie

leve

leve

Gtk+ ou GNOME

ePDFView

leve

leve

Gtk+

Okular

leve

pesado

KDE

6.4.1. Xpdf

Para os usuários que preferem um pequeno visualizador de PDF do FreeBSD, o Xpdf fornece um visualizador leve e eficiente que requer poucos recursos. Ele usa as fontes X padrão e não requer nenhum kit de ferramentas adicional.

Para instalar o pacote Xpdf:

# pkg install xpdf

Se o pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/graphics/xpdf
# make install clean

Quando a instalação estiver concluída, inicie o xpdf e use o botão direito do mouse para ativar o menu.

6.4.2. gv

O gv é um visualizador de arquivos PostScript™ e PDF. Ele é baseado no ghostview, mas tem uma aparência mais agradável, pois é baseado no kit de ferramentas do widget Xaw3d. O gv possui muitos recursos configuráveis, como orientação, tamanho do papel, escala e anti-aliasing. Quase qualquer operação pode ser executada com o teclado ou com o mouse.

Para instalar o gv como um pacote:

# pkg install gv

Se um pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/print/gv
# make install clean

6.4.3. Geeqie

O Geeqie é um fork do projeto abandonado GQView, em um esforço para levar o desenvolvimento adiante e integrar os patches existentes. O Geeqie é um gerenciador de imagens que suporta a visualização de um arquivo com um único clique, a execução de um editor externo e a visualização de miniaturas. Ele também possui um modo de apresentação de slides e algumas operações básicas de arquivo, facilitando o gerenciamento das coleções de imagens e a localização de arquivos duplicados. O Geeqie suporta visualização em tela cheia e a internacionalização.

Para instalar o pacote Geeqie:

# pkg install geeqie

Se o pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/graphics/geeqie
# make install clean

6.4.4. ePDFView

O ePDFView é um visualizador de documentos PDF leve que usa somente as bibliotecas Gtk+ e Poppler. Ele está atualmente em desenvolvimento, mas já abre a maioria dos arquivos PDF (até os criptografados), salva cópias de documentos e tem suporte para impressão usando o CUPS.

Para instalar o ePDFView como um pacote:

# pkg install epdfview

Se um pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/graphics/epdfview
# make install clean

6.4.5. Okular

O Okular é um visualizador de documentos universal baseado no KPDF para KDE. Ele pode abrir muitos formatos de documentos, incluindo PDF, PostScript™, DjVu, CHM, XPS e ePub.

Para instalar o Okular como um pacote:

# pkg install okular

Se um pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/graphics/okular
# make install clean

6.5. Finanças

Para gerenciar finanças pessoais em um desktop FreeBSD, alguns aplicativos poderosos e fáceis de usar podem ser instalados. Alguns são compatíveis com formatos de arquivos comuns, como os formatos usados pelo Quicken e Excel.

Esta seção cobre estes programas:

Nome da aplicaçãoRecursos necessáriosInstalação a partir do PortsPrincipais Dependências

GnuCash

leve

pesado

GNOME

Gnumeric

leve

pesado

GNOME

KMyMoney

leve

pesado

KDE

6.5.1. GnuCash

O GnuCash faz parte do esforço do GNOME para fornecer aplicativos fáceis de usar, mas poderosos, para usuários finais. O GnuCash pode ser usado para acompanhar receitas e despesas, contas bancárias e ações. Ele apresenta uma interface intuitiva, mantendo-se profissional.

O GnuCash fornece um registro inteligente, um sistema hierárquico de contas e muitos aceleradores de teclado e métodos de preenchimento automático. Ele pode dividir uma única transação em várias partes mais detalhadas. O GnuCash pode importar e mesclar arquivos QIF do Quicken. Ele também lida com a maioria dos formatos internacionais de data e moeda.

Para instalar o pacote GnuCash:

# pkg install gnucash

Se o pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/finance/gnucash
# make install clean

6.5.2. Gnumeric

O Gnumeric é um programa de planilha eletrônica desenvolvido pela comunidade GNOME. Ele possui adivinhação automática e conveniente de entrada do usuário de acordo com o formato da célula para muitas sequências. Ele pode importar arquivos em vários formatos populares, incluindo Excel, Lotus 1-2-3 e Quattro Pro. Ele tem um grande número de funções internas e permite todos os formatos usuais de célula, como número, moeda, data, hora e muito mais.

Para instalar o Gnumeric como um pacote:

# pkg install gnumeric

Se o pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/math/gnumeric
# make install clean

6.5.3. KMyMoney

O KMyMoney é uma aplicação de finanças pessoais criada pela comunidade KDE. O KMyMoney tem como objetivo fornecer os recursos importantes encontrados em aplicativos comerciais de gerenciamento de finanças pessoais. Ele também destaca a facilidade de uso e a contabilidade adequada de dupla entrada entre seus recursos. O KMyMoney importa a partir de arquivos QIF padrão do Quicken, rastreia investimentos, manipula várias moedas e fornece diversos relatórios.

Para instalar o KMyMoney como um pacote:

# pkg install kmymoney-kde4

Se o pacote não estiver disponível, use a Coleção de Ports:

# cd /usr/ports/finance/kmymoney-kde4
# make install clean

Capítulo 7. Multimídia

7.1. Sinopse

O FreeBSD suporta uma ampla variedade de placas de som, permitindo que os usuários aproveitem a saída de alta fidelidade de um sistema FreeBSD. Isso inclui a capacidade de gravar e reproduzir áudio MPEG Layer 3 (MP3), arquivo de áudio Waveform (WAV), Ogg Vorbis e outros formatos. A coleção de Ports do FreeBSD contém muitas aplicações para editar áudio gravado, adicionar efeitos sonoros e controlar dispositivos MIDI conectados.

O FreeBSD também suporta a reprodução de arquivos de vídeo e DVDs. A coleção de Ports do FreeBSD contém aplicativos para codificar, converter e reproduzir várias mídias de vídeo.

Este capítulo descreve como configurar placas de som, reprodução de vídeo, placas sintonizadoras de TV e scanners no FreeBSD. Também descreve algumas das aplicações que estão disponíveis para usar esses dispositivos.

Depois de ler este capítulo, você irá saber como:

  • Configurar uma placa de som no FreeBSD.

  • Solucionar problemas de configuração de som.

  • Reproduzir e codificar MP3 e outros áudios.

  • Preparar um sistema FreeBSD para reprodução de vídeo.

  • Reproduzir DVDs, arquivos .mpg e .avi.

  • Copiar o conteúdo de um CD ou DVD em arquivos arquivos.

  • Configurar uma placa de TV.

  • Instale e configure o MythTV no FreeBSD

  • Configurar um scanner de imagem.

  • Configurar um headset Bluetooth.

Antes de ler este capítulo, você deve:

7.2. Configurando a Placa de Som

Antes de iniciar a configuração, determine o modelo da placa de som e o chip usado. O FreeBSD suporta uma ampla variedade de placas de som. Verifique a lista de dispositivos de áudio compatíveis nas Notas de Hardware, para ver se a placa de som é suportada e quais drivers do FreeBSD que ela usa.

Para usar um dispositivo de som, seu driver deve ser carregado. A maneira mais fácil é carregar o módulo do kernel para a placa de som com o kldload(8). Este exemplo carrega o driver para um chipset de áudio integrado baseado na especificação Intel:

# kldload snd_hda

Para automatizar o carregamento desse driver no momento da inicialização, faça edição adicionando a seguinte linha ao arquivo /boot/loader.conf:

snd_hda_load="YES"

Outros módulos de som disponíveis estão listados no arquivo /boot/defaults/loader.conf. Quando não tiver certeza de qual driver usar, carregue o módulo snd_driver:

# kldload snd_driver

Este é um metadriver que carrega todos os drivers de som mais comuns e pode ser usado para acelerar a busca pelo driver correto. Também é possível carregar todos os drivers de som adicionando o metadriver no arquivo /boot/loader.conf.

Para determinar qual driver foi selecionado para a placa de som após carregar o metadriver snd_driver, digite, cat /dev/sndstat.

7.2.1. Configurando um kernel Personalizado com Suporte de Som

Esta seção é para usuários que preferem compilar estaticamente em suporte para a placa de som em um kernel personalizado. Para mais informações sobre como recompilar um kernel, consulte Configurando o kernel do FreeBSD.

Ao usar um kernel personalizado para fornecer suporte ao som, verifique se o driver do framework de áudio existe no arquivo de configuração do kernel personalizado:

device sound

Em seguida, adicione suporte para a placa de som. Para continuar o exemplo do chipset de áudio integrado baseado na especificação Intel da seção anterior, use a seguinte linha no arquivo de configuração do kernel personalizado:

device snd_hda

Certifique-se de ler a página de manual do driver para o nome do dispositivo a ser usado pelo driver.

Placas de som ISA não-PnP podem requerer que as configurações de porta IRQ e I/O da placa sejam adicionadas ao arquivo /boot/device.hints. Durante o processo de inicialização, o loader(8) lê este arquivo e passa as configurações para o kernel. Por exemplo, uma placa antiga ISA não-PnP da Creative SoundBlaster™ usará o driver snd_sbc(4) em conjunto com snd_sb16. Para esta placa, as seguintes linhas devem ser adicionadas ao arquivo de configuração do kernel:

device snd_sbc
device snd_sb16

Se a placa usar a porta de I/O 0x220 e a IRQ 5, essas linhas também deverão ser adicionadas ao arquivo /boot/device.hints:

hint.sbc.0.at="isa"
hint.sbc.0.port="0x220"
hint.sbc.0.irq="5"
hint.sbc.0.drq="1"
hint.sbc.0.flags="0x15"

A sintaxe usada no arquivo /boot/device.hints é descrita em sound(4) e na página de manual do driver da placa de som.

As configurações mostradas acima são os padrões. Em alguns casos, a IRQ ou outras configurações podem precisar ser alterados para corresponder à placa. Consulte snd_sbc(4) para obter mais informações sobre esta placa.

7.2.2. Testando o Som

Depois de carregar o módulo necessário ou reinicializar no kernel personalizado, a placa de som deve ser detectada. Para confirmar, execute dmesg | grep pcm. Este exemplo é de um sistema com um chipset integrado Conexant CX20590:

pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 5 on hdaa0
pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> at nid 6 on hdaa0
pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> at nid 31,25 and 35,27 on hdaa1

O status da placa de som também pode ser verificado usando este comando:

# cat /dev/sndstat
FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64)
Installed devices:
pcm0: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
pcm1: <NVIDIA (0x001c) (HDMI/DP 8ch)> (play)
pcm2: <Conexant CX20590 (Analog 2.0+HP/2.0)> (play/rec) default

A saída irá variar dependendo da placa de som. Se nenhum dispositivo pcm estiver listado, verifique se o driver de dispositivo correto foi carregado ou compilado no kernel. A próxima seção lista alguns problemas comuns e suas soluções.

Se tudo correr bem, a placa de som deverá funcionar no FreeBSD. Se a unidade de CD ou DVD estiver corretamente conectada à placa de som, é possível inserir um CD de áudio na unidade e reproduzi-lo com cdcontrol(1):

% cdcontrol -f /dev/acd0 play 1

CD de audio têm codificações especializadas, o que significa que não devem ser montados usando mount(8).

Várias aplicações, como audio/workman, fornecem uma interface mais amigável. O Port audio/mpg123 pode ser instalado para ouvir arquivos de áudio MP3.

Outra maneira rápida de testar a placa é enviar dados para /dev/dsp:

% cat filename > /dev/dsp

onde filename pode ser qualquer tipo de arquivo. Este comando deve produzir algum ruído, confirmando que a placa de som está funcionando.

Os nós de dispositivo /dev/dsp* serão criados automaticamente conforme necessário. Quando não estão em uso, eles não existem e não aparecerão na saída de ls(1).

7.2.3. Configurando Dispositivos de Som Bluetooth

Conectar a um dispositivo Bluetooth está fora do escopo deste capítulo. Consulte a Bluetooth para mais informações.

Para que o dispositivo Bluetooth funcione com o sistema de som do FreeBSD, os usuários precisam primeiramente instalar o audio/virtual_oss:

# pkg install virtual_oss

audio/virtual_oss requer cuse para ser carregado no kernel:

# kldload cuse

Para carregar o cuse durante a inicialização do sistema, execute o comando:

# sysrc -f /boot/loader.conf cuse_load=yes

Para usar fones de ouvido como reprodutor de som com audio/virtual_oss, os usuários precisam criar um dispositivo virtual depois de se conectarem a um dispositivo de áudio Bluetooth:

# virtual_oss -C 2 -c 2 -r 48000 -b 16 -s 768 -R /dev/null -P /dev/bluetooth/headphones -d dsp

headphones neste exemplo é o nome de host de /etc/bluetooth/hosts. BT_ADDR também poderia ser usado.

Consulte virtual_oss(8) para mais informações.

7.2.4. Solução de Problemas de Som

Mensagens de Erros Comuns lista algumas mensagens de erros comuns e suas soluções:

Tabela 7. Mensagens de Erros Comuns
ErroSolução

sb_dspwr(XX) timed out

A porta de I/O não está configurada corretamente.

bad irq XX

A IRQ está definida incorretamente. Certifique-se de que a IRQ definido e a IRQ do som são as mesmas.

xxx: gus pcm not attached, out of memory

Não há memória disponível suficiente para usar o dispositivo.

xxx: can’t open /dev/dsp!

Digite fstat | grep dsp para verificar se outro aplicativo está mantendo o dispositivo aberto. Os causadores de problemas notáveis são o suporte a som do esound e do KDE.

Placas gráficas modernas geralmente vêm com seu próprio driver de som para uso com HDMI. Às vezes, esse dispositivo de som é enumerado antes da placa de som, o que significa que a placa de som não será usada como o dispositivo de reprodução padrão. Para verificar se este é o caso, execute dmesg e procure por pcm. A saída é algo como isto:

...
hdac0: HDA Driver Revision: 20100226_0142
hdac1: HDA Driver Revision: 20100226_0142
hdac0: HDA Codec #0: NVidia (Unknown)
hdac0: HDA Codec #1: NVidia (Unknown)
hdac0: HDA Codec #2: NVidia (Unknown)
hdac0: HDA Codec #3: NVidia (Unknown)
pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
hdac1: HDA Codec #2: Realtek ALC889
pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
...

Neste exemplo, a placa gráfica (NVidia) foi enumerada antes da placa de som (Realtek ALC889). Para usar a placa de som como o dispositivo de reprodução padrão, altere a variável hw.snd.default_unit para a unidade que deve ser usada para reprodução:

# sysctl hw.snd.default_unit=n

onde n é o número do dispositivo de som a ser usado. Neste exemplo, deve ser 4. Deixe esta mudança permanente adicionando a seguinte linha ao arquivo /etc/sysctl.conf:

hw.snd.default_unit=4

7.2.5. Utilizando Múltiplas Fontes de Som

Muitas vezes é desejável ter várias fontes de som capazes de tocar simultaneamente. O FreeBSD usa "Canais de Som Virtuais" para multiplexar a reprodução da placa de som mixando o som no kernel.

Três variáveis no sysctl(8) estão disponíveis para configurar canais virtuais:

# sysctl dev.pcm.0.play.vchans=4
# sysctl dev.pcm.0.rec.vchans=4
# sysctl hw.snd.maxautovchans=4

Este exemplo aloca quatro canais virtuais, que é um número prático para o uso diário. Ambos dev.pcm.0.play.vchans=4 e dev.pcm.0.rec.vchans=4 são configuráveis depois que um dispositivo foi anexado e representa o número de canais virtuais pcm0 para reprodução e gravação. Como o módulo pcm pode ser carregado independentemente dos drivers de hardware, hw.snd.maxautovchans indica quantos canais virtuais serão dados a um dispositivo de áudio quando ele estiver conectado. Consulte pcm(4) para obter mais informações.

O número de canais virtuais para um dispositivo não pode ser alterado enquanto estiver em uso. Primeiramente, feche todos os programas usando o dispositivo, como players de música ou daemons de som.

O dispositivo pcm correto será automaticamente alocado de forma transparente para um programa que solicite /dev/dsp0.

7.2.6. Configurando Valores Padrões para Canais de Mixer

Os valores padrões para os diferentes canais do mixer são codificados permanentemente no código-fonte do driver pcm(4). Embora os níveis do mixer da placa de som possam ser alterados usando mixer(8) ou aplicativos e daemons de terceiros, essa não é uma solução permanente. Para definir os valores padrões do mixer no nível do driver, defina os valores apropriados no arquivo /boot/device.hints, conforme mostrado neste exemplo:

hint.pcm.0.vol="50"

Isso definirá o canal de volume como um valor padrão de 50 quando o módulo pcm(4) for carregado.

7.3. Áudio MP3

Esta seção descreve alguns players MP3 disponíveis para o FreeBSD, como ripar trilhas de CD de áudio e como codificar e decodificar MP3.

7.3.1. Players de MP3

Um popular reprodutor gráfico de MP3 é o Audacious. Ele suporta skins do Winamp e plugins adicionais. A interface é intuitiva, com uma lista de reprodução, equalizador gráfico e muito mais. Para aqueles que estão familiarizados com o Winamp, acharão o Audacious simples de usar. No FreeBSD, o Audacious pode ser instalado a partir de pacotes ou coleção de Ports multimedia/audacious. Audacious é descendente do XMMS.

O pacote ou Port audio/mpg123 fornece um reprodutor de MP3 alternativo em linha de comando. Uma vez instalado, especifique o arquivo MP3 para reproduzir na linha de comando. Se o sistema tiver vários dispositivos de áudio, o dispositivo de som também pode ser especificado:

# mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
        version 1.18.1; written and copyright by Michael Hipp and others
        free software (LGPL) without any warranty but with best wishes

Playing MPEG stream from Foobar-GreatestHits.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo

Outros players MP3 estão disponíveis na Coleção de Ports do FreeBSD.

7.3.2. Copiando Trilhas de CD de Áudio

Antes de codificar um CD ou CD para MP3, os dados de áudio no CD devem ser copiados para o disco rígido. Isso é feito copiando os dados brutos do CD Digital Audio (CDDA) como arquivos WAV.

A ferramenta cdda2wav, que é instalada com o suite de programas sysutils/cdrtools, pode ser usada para extrair informações de áudio do CD.

Com o CD de áudio na unidade, o seguinte comando pode ser executado como root para ripar um CD inteiro em arquivos WAV, por trilhas:

# cdda2wav -D 0,1,0 -B

Neste exemplo, o -D 0,1,0 indica o dispositivo SCSI 0,1,0 contendo o CD para ripar. Use o comando cdrecord -scanbus para determinar os parâmetros corretos do dispositivo para o sistema.

Para ripar trilhas individuais, use a opção -t para especificar a trilha:

# cdda2wav -D 0,1,0 -t 7

Para extrair um intervalo de trilhas, como as trilhas de um a sete, especifique um intervalo:

# cdda2wav -D 0,1,0 -t 1+7

Para extrair de uma unidade ATAPI(IDE) CDROM, especifique o nome do dispositivo no lugar dos números da unidade SCSI. Por exemplo, para extrair a trilha 7 de uma unidade IDE:

# cdda2wav -D /dev/acd0 -t 7

Alternativamente, o comando dd pode ser usado para extrair trilhas de áudio em unidades ATAPI, conforme descrito em Duplicando CDs de Áudio.

7.3.3. Codificação e Decodificação de MP3

Lame é um codificador popular para MP3 que pode ser instalado a partir do port audio/lame. Devido a problemas de patente, o pacote não está disponível.

O comando a seguir converterá o arquivo WAV audio01.wav para audio01.mp3:

# lame -h -b 128 --tt "Foo Song Title" --ta "FooBar Artist" --tl "FooBar Album" \
--ty "2014" --tc "Ripped and encoded by Foo" --tg "Genre" audio01.wav audio01.mp3

Os 128 kbits especificados são uma taxa de bits padrão para MP3, enquanto as taxas de bits 160 e 192 fornecem maior qualidade. Quanto maior a taxa de bits, maior o tamanho do arquivo MP3 resultante. A opção -h ativa o modo " de maior qualidade, mas um pouco mais lento ". As opções que começam com --t indicam as tags ID3, que geralmente contêm informações sobre músicas, para serem incorporadas no arquivo MP3. Opções adicionais de codificação podem ser encontradas na página de manual do lame.

Para gravar um CD de áudio usando arquivos MP3, primeiro estes devem ser convertidos em um formato de arquivo não compactado. O XMMS pode ser usado para converter para o formato WAV, enquanto o mpg123 pode ser usado para converter para o formato de dados de áudio bruto, Pulse Code Modulation (PCM).

Para converter o arquivo audio01.mp3 usando mpg123, especifique o nome do arquivo PCM:

# mpg123 -s audio01.mp3 > audio01.pcm

Para usar XMMS para converter um arquivo MP3 para WAV, use esses passos:

Procedure: Convertendo para o Formato WAV no XMMS

  1. Inicie o XMMS.

  2. Clique com o botão direito do mouse na janela para abrir o menu XMMS.

  3. Selecione Preferences abaixo de Options.

  4. Altere o Plugin de Saída para "Disk Writer Plugin".

  5. Pressione Configure.

  6. Digite ou procure um diretório para gravar os arquivos descompactados.

  7. Carregue o arquivo MP3 no XMMS como de costume, com o volume em 100% e as configurações de EQ desativadas.

  8. Pressione Play. O XMMS aparecerá como se estivesse tocando o MP3, mas nenhuma música será ouvida. Na verdade, está tocando o MP3 para um arquivo.

  9. Quando terminar, certifique-se de ajustar o Plugin de Saída padrão de volta ao que era antes para ouvir MP3 novamente.

Os formatos WAV e PCM podem ser usados com cdrecord. Ao usar arquivos WAV, haverá um pequeno som no início de cada trilha. Este som é o cabeçalho do arquivo WAV. O pacote binário ou port audio/sox pode ser usado para remover o cabeçalho:

% sox -t wav -r 44100 -s -w -c 2 track.wav track.raw

Consulte Criando e Usando Mídia em CD para mais informações sobre o uso de um gravador de CD no FreeBSD.

7.4. Reprodução de Vídeo

Antes de configurar a reprodução de vídeo, determine o modelo e o chipset da placa de vídeo. Embora o Xorg suporte uma ampla variedade de placas de vídeo, nem todas oferecem um bom desempenho de reprodução. Para obter uma lista de extensões suportadas pelo servidor Xorg usando a placa, execute xdpyinfo enquanto o Xorg está sendo executado.

É interessante ter um arquivo de teste MPEG pequeno para avaliar vários players e opções. Como alguns aplicativos de DVD procuram por mídia DVD em /dev/dvd por padrão, ou possuem esse nome de dispositivo codificado neles, pode ser útil fazer um link simbólico para o dispositivo adequado:

# ln -sf /dev/cd0 /dev/dvd

Devido à natureza do devfs(5), os links criados manualmente não persistirão após a reinicialização do sistema. Para recriar o link simbólico automaticamente quando o sistema inicializar, adicione a seguinte linha ao arquivo /etc/devfs.conf:

link cd0 dvd

A decriptografia do DVD invoca certas funções que exigem permissão de gravação para o dispositivo DVD.

Para melhorar a interface de memória compartilhada do Xorg, recomenda-se aumentar os valores dessas variáveis sysctl(8):

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768

7.4.1. Determinando os Recursos de Vídeo

Existem várias maneiras possíveis de exibir vídeo no Xorg e o que funciona é, em grande parte, dependente de hardware. Cada método descrito abaixo terá qualidade variável em diferentes hardwares.

Interfaces de vídeo comuns incluem:

  1. Xorg: saída normal usando memória compartilhada.

  2. XVideo: uma extensão para a interface Xorg que permite que o vídeo seja exibido diretamente em objetos que podem ser desenhados através de uma aceleração especial. Esta extensão oferece reprodução de boa qualidade, mesmo em máquinas de baixo custo. A próxima seção descreve como determinar se esta extensão está sendo executada.

  3. SDL: Simple Directmedia Layer é uma camada de portabilidade para muitos sistemas operacionais, permitindo o desenvolvimento de aplicativos multiplataforma que fazem uso eficiente de som e gráficos. O SDL fornece uma abstração de baixo nível para o hardware, que às vezes pode ser mais eficiente que a interface do Xorg. No FreeBSD, o SDL pode ser instalado usando o pacote ou port devel/sdl20.

  4. DGA: Direct Graphics Access é uma extensão do Xorg que permite que um programa contorne o servidor Xorg e altere diretamente o quadro de buffer. Como ele depende de um mapeamento de memória de baixo nível, os programas que o utilizam devem ser executados como root. A extensão DGA pode ser testada e comparada usando dga(1). Quando o dga está em execução, ele altera as cores do display sempre que uma tecla é pressionada. Para sair, pressione q.

  5. SVGAlib: uma camada gráfica de console de baixo nível.

7.4.1.1. XVideo

Para verificar se esta extensão está em execução, use xvinfo:

% xvinfo

O XVideo é suportado pela placa de vídeo se o resultado for semelhante a:

X-Video Extension version 2.2
  screen #0
  Adaptor #0: "Savage Streams Engine"
    number of ports: 1
    port base: 43
    operations supported: PutImage
    supported visuals:
      depth 16, visualID 0x22
      depth 16, visualID 0x23
    number of attributes: 5
      "XV_COLORKEY" (range 0 to 16777215)
              client settable attribute
              client gettable attribute (current value is 2110)
      "XV_BRIGHTNESS" (range -128 to 127)
              client settable attribute
              client gettable attribute (current value is 0)
      "XV_CONTRAST" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_SATURATION" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_HUE" (range -180 to 180)
              client settable attribute
              client gettable attribute (current value is 0)
    maximum XvImage size: 1024 x 1024
    Number of image formats: 7
      id: 0x32595559 (YUY2)
        guid: 59555932-0000-0010-8000-00aa00389b71
        bits per pixel: 16
        number of planes: 1
        type: YUV (packed)
      id: 0x32315659 (YV12)
        guid: 59563132-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x30323449 (I420)
        guid: 49343230-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x36315652 (RV16)
        guid: 52563135-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x3e0, 0x7c00
      id: 0x35315652 (RV15)
        guid: 52563136-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x7e0, 0xf800
      id: 0x31313259 (Y211)
        guid: 59323131-0000-0010-8000-00aa00389b71
        bits per pixel: 6
        number of planes: 3
        type: YUV (packed)
      id: 0x0
        guid: 00000000-0000-0000-0000-000000000000
        bits per pixel: 0
        number of planes: 0
        type: RGB (packed)
        depth: 1
        red, green, blue masks: 0x0, 0x0, 0x0

Os formatos listados, como YUV2 e YUV12, não estão presentes em todas as implementações do XVideo e sua ausência pode atrapalhar alguns players.

Se o resultado, ao invés disso, se parecer com:

X-Video Extension version 2.2
screen 0
no adaptors present

O XVideo provavelmente não é compatível com a placa. Isso significa que será mais difícil para o monitor atender às demandas computacionais de renderização de vídeo, dependendo da placa de vídeo e do processador.

7.4.2. Ports e Pacotes Lidando com Vídeo

Esta seção apresenta alguns dos softwares disponíveis na Coleção de Ports do FreeBSD, que podem ser usados para reprodução de vídeo.

7.4.2.1. MPlayer e MEncoder

O MPlayer é um reprodutor de vídeo em linha de comando com uma interface gráfica opcional que visa oferecer velocidade e flexibilidade. Outros front-ends gráficos para o MPlayer estão disponíveis na Coleção de Ports do FreeBSD.

O MPlayer pode ser instalado usando o pacote ou port multimedia/mplayer. Várias opções de compilação estão disponíveis e uma variedade de verificações de hardware ocorre durante o processo de compilação. Por esses motivos, alguns usuários preferem compilar um port ao invés de instalar o pacote.

Ao compilar o port, as opções do menu devem ser revisadas para determinar o tipo de suporte a ser compilado no port. Se uma opção não estiver selecionada, o MPlayer não poderá exibir esse tipo de formato de vídeo. Use as setas e a barra de espaço para selecionar os formatos necessários. Quando terminar, pressione Enter para continuar a compilação e instalação do port.

Por padrão, o pacote ou port construirá o utilitário de linha de comando mplayer e o utilitário gráfico gmplayer. Para codificar vídeos, compile o port multimedia/mencoder. Devido a restrições de licenciamento, um pacote não está disponível para o MEncoder.

A primeira vez que o MPlayer for executado, ele criará um arquivo ~/.mplayer no diretório pessoal do usuário. Esse subdiretório contém versões padrões dos arquivos de configurações específicos do usuário.

Esta seção descreve apenas alguns usos comuns. Consulte o mplayer(1) para uma descrição completa de suas inúmeras opções.

Para reproduzir o arquivo testfile.avi, especifique as interfaces de vídeo com -vo, conforme mostrado nos exemplos a seguir:

% mplayer -vo xv testfile.avi
% mplayer -vo sdl testfile.avi
% mplayer -vo x11 testfile.avi
# mplayer -vo dga testfile.avi
# mplayer -vo 'sdl:dga' testfile.avi

Vale a pena tentar todas essas opções, pois seu relativo desempenho depende de muitos fatores e varia significativamente com o hardware.

Para reproduzir um DVD, substitua testfile.avi por dvd://N -dvd-device DEVICE, em que N é o número do título a ser reproduzido e DEVICE é o nó do dispositivo para o DVD. Por exemplo, para reproduzir o filme 3 de /dev/dvd:

# mplayer -vo xv dvd://3 -dvd-device /dev/dvd

O dispositivo padrão de DVD pode ser definido durante a construção do port MPlayer incluindo a opção WITH_DVD_DEVICE=/path/to/desired/device. Por padrão, o dispositivo é /dev/cd0. Mais detalhes podem ser encontrados no Makefile.options do port.

Para parar, pausar, avançar e assim por diante, use uma tecla de atalho. Para ver a lista de atalhos de teclado, execute mplayer -h ou leia o mplayer (1).

Opções de reprodução adicionais incluem -fs -zoom, que ativa o modo de tela cheia e -framedrop, o que ajuda no desempenho.

Cada usuário pode adicionar opções comumente usadas ao seu ~/.mplayer/config assim:

vo=xv
fs=yes
zoom=yes

O mplayer pode ser usado para copiar um filme de DVD para um arquivo .vob. Para gravar o filme em um segundo DVD:

# mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd

O arquivo de saída, out.vob, estará no formato MPEG.

Qualquer pessoa que deseje obter um alto nível de experiência com vídeo UNIX™ deve consultar mplayerhq.hu/DOCS. Como é tecnicamente informativa, esta documentação deve ser considerada como leitura obrigatória antes de enviar qualquer relatório de bug.

Antes de usar o mencoder, é interessante familiarizar-se com as opções descritas em mplayerhq.hu/DOCS/HTML/en/mencoder.html. Existem inúmeras maneiras de melhorar a qualidade, diminuir a taxa de bits e alterar os formatos, e algumas dessas opções podem fazer a diferença entre bom ou mau desempenho. Combinações impróprias de opções de linha de comando podem produzir arquivos de saída que não podem ser reproduzidos até mesmo por mplayer.

Aqui está um exemplo de uma cópia simples:

% mencoder input.avi -oac copy -ovc copy -o output.avi

Para copiar para um arquivo, use -dumpfile com o mplayer.

Para converter input.avi para o codec MPEG4 com codificação de áudio MPEG3, primeiro instale o port audio/lame. Devido a restrições de licenciamento, um pacote não está disponível. Uma vez instalado, digite:

% mencoder input.avi -oac mp3lame -lameopts br=192 \
	 -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi

Isso produzirá uma saída reproduzível por aplicativos como mplayer e xine.

input.avi pode ser substituído por dvd://1 -dvd-device /dev/dvd e executado como root para recodificar um filme de DVD diretamente. Como pode levar algumas tentativas para obter o resultado desejado, recomenda-se gravar o arquivo de um filme e trabalhar nele.

7.4.2.2. O Player (reprodutor) de Vídeo xine

O xine é um reprodutor de vídeo com uma biblioteca base reutilizável e um executável modular que pode ser estendido com plug-ins. Pode ser instalado usando o pacote ou port multimedia/xine.

Na prática, o xine requer uma CPU rápida com uma placa de vídeo rápida ou suporte para a extensão XVideo. O player de vídeo xine apresenta melhor desempenho nas interfaces XVideo.

Por padrão, o player xine inicia uma interface gráfica com o usuário. Os menus podem então ser usados para abrir um arquivo específico.

Alternativamente, o xine pode ser executado a partir da linha de comando, especificando o nome do arquivo a ser reproduzido:

% xine -g -p mymovie.avi

Consulte xine-project.org/faq para mais informações e dicas de solução de problemas.

7.4.2.3. As Utilidades do Transcode

O Transcode fornece um conjunto de ferramentas para recodificar arquivos de vídeo e áudio. O Transcode pode ser usado para mesclar arquivos de vídeo ou reparar arquivos quebrados usando ferramentas de linha de comando com interfaces de fluxo stdin/stdout.

No FreeBSD, o Transcode pode ser instalado usando o pacote ou port multimedia/transcode. Muitos usuários preferem compilar o port, pois fornece um menu de opções de compilação para especificar o suporte e os codecs a serem compilados. Se uma opção não for selecionada, o Transcode não poderá codificar esse formato. Use as setas e a barra de espaço para selecionar os formatos necessários. Quando terminar, pressione Enter para continuar a compilação e instalação do port.

Este exemplo demonstra como converter um arquivo DivX em um arquivo PAL MPEG-1 (PAL VCD):

% transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
% mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa

O arquivo MPEG resultante, output_vcd.mpg, está pronto para ser executado com o MPlayer. O arquivo pode ser gravado em uma mídia (CD), para criar um CD de vídeo usando um utilitário como multimedia/vcdimager ou sysutils/cdrdao.

Além da página de manual do transcode, consulte transcoding.org/cgi-bin/transcode para mais informações e exemplos.

7.5. Placas de TV

As placas de TV podem ser usadas para assistir à transmissão ou à TV a cabo em um computador. A maioria das placas aceitam vídeo composto por meio de uma entrada RCA ou S-video e algumas placas incluem um sintonizador de rádio FM.

O FreeBSD fornece suporte para placas de TV baseadas em PCI usando um chip de captura de vídeo Brooktree Bt848/849/878/879 com o driver bktr(4). Este driver suporta a maioria das placas de vídeo Pinnacle PCTV. Antes de comprar uma placa de TV, consulte bktr(4) para obter uma lista dos sintonizadores suportados.

7.5.1. Carregando o Driver

Para usar a placa, o driver bktr(4) deve ser carregado. Para automatizar isso no momento da inicialização, adicione a seguinte linha ao arquivo /boot/loader.conf:

bktr_load="YES"

Como alternativa, pode-se compilar estaticamente o suporte para a placa de TV em um kernel personalizado. Nesse caso, adicione as seguintes linhas ao arquivo de configuração do kernel personalizado:

device	 bktr
device	iicbus
device	iicbb
device	smbus

Esses dispositivos adicionais são necessários, pois os componentes da placa são interconectados por meio de um barramento I2C. Em seguida, crie e instale um novo kernel.

Para testar se o sintonizador foi detectado corretamente, reinicialize o sistema. A placa de TV deve aparecer nas mensagens de inicialização, conforme mostrado neste exemplo:

bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0
iicbb0: <I2C bit-banging driver> on bti2c0
iicbus0: <Philips I2C bus> on iicbb0 master-only
iicbus1: <Philips I2C bus> on iicbb0 master-only
smbus0: <System Management Bus> on bti2c0
bktr0: Pinnacle/Miro TV, Philips SECAM tuner.

As mensagens serão diferentes de acordo com o hardware. Se necessário, é possível substituir alguns dos parâmetros detectados usando sysctl(8) ou opções de configuração de kernel personalizadas. Por exemplo, para forçar o sintonizador a usar um sintonizador SECAM da Philips, adicione a seguinte linha a um arquivo de configuração de kernel personalizado:

options OVERRIDE_TUNER=6

ou, use sysctl(8):

# sysctl hw.bt848.tuner=6

Consulte bktr(4) para obter uma descrição disponível dos parâmetros do sysctl(8) e opções do kernel.

7.5.2. Aplicações Úteis

Para usar a placa de TV, instale um dos seguintes aplicativos:

  • multimedia/fxtv oferece recursos de captura de imagem/áudio/vídeo numa transmissão de TV no monitor do computador.

  • O multimedia/xawtv é outro aplicativo de TV com recursos semelhantes.

  • O audio/xmradio fornece uma aplicação para usar o sintonizador de rádio FM de uma placa de TV.

Mais aplicações estão disponíveis na Coleção de Ports do FreeBSD.

7.5.3. Solução de problemas

Se forem encontrados problemas com a placa de TV, verifique se o chip de captura de vídeo e o sintonizador são compatíveis com bktr(4) e que as opções corretas de configuração foram usadas. Para obter mais suporte ou para fazer perguntas sobre as placas de TV suportadas, consulte a lista de discussão freebsd-multimedia.

7.6. MythTV

MythTV é um popular aplicativo de gravação de vídeo pessoal (PVR). Esta seção demonstra como instalar e configurar o MythTV no FreeBSD. Consulte mythtv.org/wiki para mais informações sobre como usar o MythTV.

MythTV requer um frontend e um backend. Esses componentes podem ser instalados no mesmo sistema ou em máquinas diferentes.

O frontend pode ser instalado no FreeBSD usando o pacote ou port multimedia/mythtv-frontend. O Xorg também deve ser instalado e configurado conforme descrito em O sistema X Window. Idealmente, este sistema tem uma placa de vídeo que suporta Compensação de Movimento de X-Vídeo (XvMC) e, opcionalmente, um controle remoto compatível com o Controle Remoto Infravermelho do Linux (LIRC).

Para instalar o backend e o frontend no FreeBSD, use o pacote ou port multimedia/mythtv. Um servidor de banco de dados MySQL™ também é necessário e deve ser instalado automaticamente como uma dependência. Opcionalmente, este sistema deve ter uma placa sintonizadora e armazenamento suficiente para armazenar os dados gravados.

7.6.1. Hardware

O MythTV usa o Video for Linux (V4L) para acessar dispositivos de entrada de vídeo, como codificadores e sintonizadores. No FreeBSD, o MythTV funciona melhor com placas USB DVB-S/C/T, pois são bem suportadas pelo pacote multimedia/webcamd ou pelo port que forneça uma aplicação V4L userland. Qualquer placa de transmissão de vídeo digital (DVB) suportada pelo webcamd deve funcionar com o MythTV. Uma lista de placas suportadas conhecidas pode ser encontrada em wiki.freebsd.org/WebcamCompat. Drivers também estão disponíveis para placas Hauppauge nos ports multimedia/pvr250 e multimedia/pvrxxx, mas eles fornecem uma interface de driver não padronizados que não funcionam com versões do MythTV posteriores à 0.23. Devido a restrições de licenciamento, nenhum pacote está disponível e esses dois ports devem ser compilados.

A página wiki.freebsd.org/HTPC contém uma lista de todos os drivers DVB disponíveis.

7.6.2. Configurando o Backend MythTV

Para instalar o MythTV usando pacotes binários:

# pkg install mythtv

Como alternativa, para instalar a partir da Coleção de Ports:

# cd /usr/ports/multimedia/mythtv
# make install

Uma vez instalado, configure o banco de dados do MythTV:

# mysql -uroot -p < /usr/local/shared/mythtv/database/mc.sql

Em seguida, configure o backend:

# mythtv-setup

Finalmente, inicie o backend:

# sysrc mythbackend_enable=yes
# service mythbackend start

7.7. Scanners de Imagem

No FreeBSD, o acesso aos scanners de imagens é fornecido pelo SANE (Scanner Access Now Easy), que está disponível na Coleção de Ports do FreeBSD. O SANE também usará alguns drivers de dispositivos do FreeBSD para fornecer acesso ao hardware do scanner.

O FreeBSD suporta os scanners SCSI e USB. Dependendo da interface do scanner, são necessários drivers de dispositivos diferentes. Certifique-se de que o scanner seja suportado pelo SANE antes de executar qualquer configuração. Consulte http://www.sane-project.org/sane-supported-devices.html para obter mais informações sobre os scanners suportados.

Este capítulo descreve como determinar se o scanner foi detectado pelo FreeBSD. Em seguida, ele fornece uma visão geral de como configurar e usar o SANE em um sistema FreeBSD.

7.7.1. Verificando o Scanner

O kernel GENERIC inclui os drivers de dispositivos necessários para suportar scanners USB. Usuários com um kernel personalizado devem garantir que as seguintes linhas estejam presentes no arquivo de configuração do kernel personalizado:

device usb
device uhci
device ohci
device ehci
device xhci

Para verificar se o scanner USB foi detectado, conecte-o e execute o comando dmesg, sendo então possível ver se o scanner aparece no buffer de mensagens do sistema. Em caso afirmativo, deve ser exibida uma mensagem semelhante a esta:

ugen0.2: <EPSON> at usbus0

Neste exemplo, um scanner EPSON Perfection™ 1650 USB foi detectado em /dev/ugen0.2.

Se o scanner usar uma interface SCSI, é importante saber qual placa controladora SCSI será usada. Dependendo do chipset SCSI, um arquivo de configuração do kernel personalizado pode ser necessário. O kernel GENERIC suporta os controladores SCSI mais comuns. Consulte /usr/src/sys/conf/NOTES para determinar a linha correta a ser adicionada a um arquivo de configuração de kernel personalizado. Além do driver de adaptador SCSI, as seguintes linhas são necessárias em um arquivo de configuração de kernel personalizado:

device scbus
device pass

Verifique se o dispositivo é exibido no buffer de mensagens do sistema:

pass2 at aic0 bus 0 target 2 lun 0
pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device
pass2: 3.300MB/s transfers

Se o scanner não foi ligado na inicialização do sistema, ainda é possível forçar manualmente a detecção executando uma varredura de barramento SCSI com o comando camcontrol:

# camcontrol rescan all
Re-scan of bus 0 was successful
Re-scan of bus 1 was successful
Re-scan of bus 2 was successful
Re-scan of bus 3 was successful

O scanner deve agora aparecer na lista de dispositivos SCSI:

# camcontrol devlist
<IBM DDRS-34560 S97B>              at scbus0 target 5 lun 0 (pass0,da0)
<IBM DDRS-34560 S97B>              at scbus0 target 6 lun 0 (pass1,da1)
<AGFA SNAPSCAN 600 1.10>           at scbus1 target 2 lun 0 (pass3)
<PHILIPS CDD3610 CD-R/RW 1.00>     at scbus2 target 0 lun 0 (pass2,cd0)

Consulte scsi(4) e camcontrol(8) para mais detalhes sobre dispositivos SCSI no FreeBSD.

7.7.2. Configuração do SANE

O sistma SANE provê o acesso ao scanner via backends (graphics/sane-backends). Consulte http://www.sane-project.org/sane-supported-devices.html para determinar qual backend suporta o scanner. Uma interface gráfica é fornecida por aplicações terceiras como Kooka (graphics/kooka) ou XSane (graphics/xsane). Os backends do SANE são suficientes para testar o scanner.

Para instalar os backends do pacote binário:

# pkg install sane-backends

Alternativamente, para instalar a partir da Coleção de Ports

# cd /usr/ports/graphics/sane-backends
# make install clean

Depois de instalar o pacote ou port graphics/sane-backends, use o comando sane-find-scanner para verificar a detecção do scanner pelo sistema SANE:

# sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3

A saída deve mostrar o tipo de interface do scanner e o nó do dispositivo usado para conectar o scanner ao sistema. O fornecedor e o modelo do produto podem ou não aparecer.

Alguns scanners USB exigem que o firmware seja carregado. Consulte sane-find-scanner(1) e sane(7) para mais detalhes.

Em seguida, verifique se o scanner será identificado por uma interface de digitalização. Os backends SANE incluem o comando scanimage, que pode ser usado para listar os dispositivos e realizar uma aquisição de imagens. Use a opção -L para listar os dispositivos do scanner. O primeiro exemplo é para um scanner SCSI e o segundo é para um scanner USB:

# scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner
# scanimage -L
device 'epson2:libusb:000:002' is a Epson GT-8200 flatbed scanner

Neste segundo exemplo,epson2 é o nome do backend e libusb:000:002 significa que /dev/ugen0.2 é o dispositivo usado pelo scanner.

Se o comando scanimage não conseguir identificar o scanner, esta mensagem será exibida:

# scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

Se isso acontecer, edite o arquivo de configuração de backend em /usr/local/etc/sane.d/ e defina o dispositivo de scanner usado. Por exemplo, se o modelo de scanner não detectado for um EPSON Perfection™ 1650 e usar o backend epson2, edite o arquivo /usr/ local/etc/sane.d/epson2.conf. Ao editar, adicione uma linha especificando a interface e o nó do dispositivo usado. Nesse caso, adicione a seguinte linha:

usb /dev/ugen0.2

Salve as edições e verifique se o scanner está identificado com o nome do back-end correto e com o nó do dispositivo:

# scanimage -L
device 'epson2:libusb:000:002' is a Epson GT-8200 flatbed scanner

Depois que o comando scanimage -L identificar o scanner, a configuração estará completa e o scanner estará pronto para ser usado.

Embora o scanimage possa ser usado para realizar uma digitalização de imagem a partir da linha de comando, muitas vezes é preferível usar uma interface gráfica para executar o escaneamento. Aplicações como Kooka ou XSane são interfaces de digitalização populares. Eles oferecem recursos avançados, como vários modos de digitalização, correção de cores e digitalizações em lote. O XSane também pode ser usado como um plugin GIMP.

7.7.3. Permissões do Scanner

Para ter acesso ao scanner, o usuário precisa ler e gravar as permissões no nó do dispositivo usado pelo scanner. No exemplo anterior, o scanner USB usa o nó do dispositivo /dev/ugen0.2 que é realmente um link simbólico para o nó do dispositivo real /dev/usb/0.2.0. O link simbólico e o nó do dispositivo pertencem, respectivamente, aos grupos wheel e operator. Adicionando o usuário a esses grupos, será permitido o acesso ao scanner, considera-se inseguro adicionar um usuário a wheel. Uma solução melhor é criar um grupo e tornar o dispositivo de scanner acessível aos membros desse grupo.

Este exemplo cria um grupo chamado usb:

# pw groupadd usb

Então, crie um link simbólico para /dev/ugen0.2 e o nó do dispositivo /dev/usb/0.2.0 para ficarem acessíveis ao grupo usb com permissões de gravação 0660 ou 0664 adicionando as seguintes linhas ao /etc/devfs.rules:

[system=5]
add path ugen0.2 mode 0660 group usb
add path usb/0.2.0 mode 0666 group usb

Acontece do nó do dispositivo mudar com a adição ou remoção de dispositivos, então você pode querer dar acesso a todos os dispositivos USB usando esse conjunto de regas:

[system=5]
add path 'ugen*' mode 0660 group usb
add path 'usb/*' mode 0666 group usb

Finalmente, adicione os usuários a usb para permitir acesso ao scanner:

# pw groupmod usb -m joe

Para mais detalhes, consulte pw(8).

Capítulo 8. Configurando o kernel do FreeBSD

8.1. Sinopse

O kernel é o núcleo do sistema operacional do FreeBSD. Ele é responsável pelo gerenciamento de memória, aplicação de controles de segurança, rede, acesso ao disco e muito mais. Embora grande parte do FreeBSD seja configurável dinamicamente, ainda é necessário configurar e compilar um kernel personalizado ocasionalmente.

Depois de ler este capítulo, você saberá:

  • Quando compilar um kernel personalizado.

  • Como obter um inventário do hardware.

  • Como personalizar um arquivo de configuração do kernel.

  • Como usar o arquivo de configuração do kernel para criar e compilar um novo kernel.

  • Como instalar o novo kernel.

  • Como solucionar problemas se as coisas derem errado.

Todos os comandos listados nos exemplos deste capítulo devem ser executados como root.

8.2. Por que compilar um kernel personalizado?

Tradicionalmente, o FreeBSD usava um kernel monolítico. O kernel era um grande programa, suportava uma lista fixa de dispositivos e, para mudar o comportamento do kernel, era preciso compilar e depois reinicializar em um novo kernel.

Hoje, a maior parte da funcionalidade do kernel do FreeBSD está contida em módulos que podem ser dinamicamente carregados e descarregados do kernel, conforme necessário. Isso permite que o kernel em execução se adapte imediatamente ao novo hardware e que novas funcionalidades sejam trazidas para o kernel. Isso é conhecido como um kernel modular.

Ocasionalmente, ainda é necessário executar a configuração do kernel estático. Às vezes, a funcionalidade necessária é tão ligada ao kernel que não pode ser carregada dinamicamente. Alguns ambientes de segurança impedem o carregamento e descarregamento de módulos do kernel e exigem que apenas a funcionalidade necessária seja estaticamente compilada no kernel.

Construir um kernel personalizado é muitas vezes um rito de passagem para usuários avançados do BSD. Este processo, embora consuma tempo, pode fornecer benefícios ao sistema FreeBSD. Ao contrário do kernel GENERIC, que deve suportar uma ampla gama de hardware, um kernel personalizado pode ser reduzido para fornecer suporte apenas para o hardware desse computador. Isso tem vários benefícios, tais como:

  • Tempo de inicialização mais rápido. Uma vez que o kernel irá verificar apenas o hardware existente no sistema, o tempo que o sistema leva para inicializar pode diminuir.

  • Diminuir o uso de memória. Um kernel personalizado geralmente usa menos memória que o kernel GENERIC ao omitir recursos e drivers de dispositivo que não são utilizados. Isso é importante porque o código do kernel permanece residente na memória física o tempo todo, impedindo que a memória seja usada pelos aplicativos. Por esse motivo, um kernel personalizado é útil em um sistema com uma pequena quantidade de RAM.

  • Suporte adicional de hardware. Um kernel personalizado pode adicionar suporte para dispositivos que não estão presentes no kernel GENERIC.

Antes de criar um kernel personalizado, considere a razão para isso. Se houver necessidade de suporte para um hardware específico, ele já pode existir como um módulo.

Os módulos do kernel existem em /boot/kernel e podem ser dinamicamente carregados no kernel em execução usando o kldload(8). A maioria dos drivers do kernel tem um módulo carregável e uma página de manual. Por exemplo, o driver Ethernet sem fio ath(4) tem as seguintes informações em sua página de manual:

Como alternativa, para carregar o driver como um módulo no momento da inicialização, coloque o a seguinte linha no loader.conf(5):

    if_ath_load="YES"

Adicionar if_ath_load="YES" ao /boot/loader.conf carregará este módulo dinamicamente no momento da inicialização.

Em alguns casos, não há nenhum módulo associado em /boot/kernel. Isso é verdade principalmente para certos subsistemas.

8.3. Encontrando o hardware do sistema

Antes de editar o arquivo de configuração do kernel, é recomendável realizar um inventário do hardware da máquina. Em um sistema de inicialização dupla, o inventário pode ser criado a partir do outro sistema operacional. Por exemplo, o Device Manager da Microsoft™ contém informações sobre os dispositivos instalados.

Algumas versões do Microsoft ™Windows™ têm um ícone System que pode ser usado para acessar o Device Manager.

Se o FreeBSD for o único sistema operacional instalado, use o dmesg(8) para determinar o hardware que foi encontrado e listado durante a verificação de inicialização. A maioria dos drivers de dispositivos no FreeBSD tem uma página de manual que lista o hardware suportado pelo driver. Por exemplo, as seguintes linhas indicam que o driver psm(4) encontrou um mouse:

psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: [ITHREAD]
psm0: model Generic PS/2 mouse, device ID 0

Como esse hardware existe, esse driver não deve ser removido de um arquivo de configuração de kernel personalizado.

Se a saída do dmesg não exibir os resultados da saída da verificação de inicialização, leia o conteúdo do /var/run/dmesg.boot.

Outra ferramenta para encontrar hardware é o pciconf(8), que fornece uma saída mais detalhada. Por exemplo:

% pciconf -lv
ath0@pci0:3:0:0:        class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
    vendor     = 'Atheros Communications Inc.'
    device     = 'AR5212 Atheros AR5212 802.11abg wireless'
    class      = network
    subclass   = ethernet

Esta saída mostra que o driver ath localizou um dispositivo Ethernet sem fio.

O sinalizador -k do man(1) pode ser usado para fornecer informações úteis. Por exemplo, ele pode ser usado para exibir uma lista de páginas de manual que contêm uma marca ou um nome de dispositivo específico:

# man -k Atheros
ath(4)                   - Atheros IEEE 802.11 wireless network driver
ath_hal(4)               - Atheros Hardware Access Layer (HAL)

Depois que a lista de inventário de hardware for criada, consulte-a para garantir que os drivers para o hardware instalado não sejam removidos à medida que a configuração do kernel personalizado é editada.

8.4. O Arquivo de Configuração

Para criar um arquivo de configuração do kernel personalizado e compilar um kernel personalizado, a árvore de código-fonte completa do FreeBSD deve ser instalada primeira.

Se o /usr/src/ não existir ou estiver vazio, o código-fonte não foi instalado. O fonte pode ser instalado usando o Subversion e as instruções em Usando o Subversion.

Depois que o código-fonte for instalado, revise o conteúdo do /usr/src/sys. Este diretório contém vários subdiretórios, incluindo aqueles que representam as seguintes arquiteturas suportadas: amd64, i386, powerpc e sparc64. Tudo dentro do diretório de uma arquitetura em particular lida apenas com essa arquitetura e o restante do código é código independente de máquina comum a todas as plataformas. Cada arquitetura suportada tem um subdiretório conf que contém o arquivo de configuração do kernel GENERIC para essa arquitetura.

Não faça edições no GENERIC. Em vez disso, copie o arquivo para um nome diferente e faça edições na cópia. A convenção é usar um nome do host com todas as letras maiúsculas. Ao manter várias máquinas FreeBSD com hardware diferente, é uma boa idéia nomeá-lo com o nome do host da máquina. Este exemplo cria uma cópia, denominada MYKERNEL, do arquivo de configuração GENERIC para a arquitetura amd64:

# cd /usr/src/sys/amd64/conf
# cp GENERIC MYKERNEL

O MYKERNEL agora pode ser personalizado com qualquer editor de texto ASCII. O editor padrão é o vi, embora um editor mais fácil para iniciantes, chamado ee, também seja instalado com o FreeBSD.

O formato do arquivo de configuração do kernel é simples. Cada linha contém uma palavra-chave que representa um dispositivo ou subsistema, um argumento e uma breve descrição. Qualquer texto depois de um é considerado um comentário e ignorado. Para remover o suporte do kernel para um dispositivo ou subsistema, coloque um no início da linha que representa esse dispositivo ou subsistema. Não adicione ou remova um # para qualquer linha que você não entenda.

É fácil remover o suporte para um dispositivo ou opção e acabar com um kernel quebrado. Por exemplo, se o driver ata(4) for removido do arquivo de configuração do kernel, um sistema usando os drivers de disco ATA pode não inicializar. Em caso de dúvida, basta deixar o suporte no kernel.

Além das breves descrições fornecidas neste arquivo, descrições adicionais estão contidas no arquivo NOTES, o qual pode ser encontrado no mesmo diretório que o GENERIC para aquela arquitetura. Para opções independentes de arquitetura, consulte /usr/src/sys/conf/NOTES.

Quando terminar de personalizar o arquivo de configuração do kernel, salve uma cópia de backup em um local fora do /usr/src.

Como alternativa, mantenha o arquivo de configuração do kernel em outro lugar e crie um link simbólico para o arquivo:

# cd /usr/src/sys/amd64/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL

Uma diretiva include está disponível para uso em arquivos de configuração. Isso permite que outro arquivo de configuração seja incluído no arquivo atual, facilitando a manutenção de pequenas alterações em relação a um arquivo existente. Se apenas um pequeno número de opções ou drivers adicionais forem necessários, isso permitirá que um delta seja mantido com relação ao GENERIC, conforme mostrado neste exemplo:

include GENERIC
ident MYKERNEL

options         IPFIREWALL
options         DUMMYNET
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPDIVER

Usando este método, o arquivo de configuração local expressa as diferenças locais em relação ao kernel GENERIC. Conforme as atualizações são realizadas, os novos recursos adicionados ao GENERIC também serão adicionados ao kernel local, a menos que sejam especificamente evitados usando nooptions ou nodevice. Uma lista abrangente de diretivas de configuração e suas descrições pode ser encontrada em config(5).

Para compilar um arquivo que contém todas as opções disponíveis, execute o seguinte comando como root:

# cd /usr/src/sys/arch/conf && make LINT

8.5. Criando e Instalando um Kernel Customizado

Depois que as edições no arquivo de configuração personalizada forem salvas, o código-fonte do kernel poderá ser compilado usando as seguintes etapas:

Procedure: Compilando um Kernel

  1. Mude para este diretório:

    # cd /usr/src
  2. Compile o novo kernel especificando o nome do arquivo de configuração do kernel personalizado:

    # make buildkernel KERNCONF=MYKERNEL
  3. Instale o novo kernel associado ao arquivo de configuração do kernel especificado. Este comando irá copiar o novo kernel para /boot/kernel/kernel e salvar o kernel antigo para /boot/kernel.old/kernel:

    # make installkernel KERNCONF=MYKERNEL
  4. Desligue o sistema e reinicie no novo kernel. Se algo der errado, consulte O kernel não inicializa.

Por padrão, quando um kernel personalizado é compilado, todos os módulos do kernel são reconstruídos. Para atualizar um kernel mais rapidamente ou para construir apenas módulos customizados, edite o /etc/make.conf antes de começar a construir o kernel.

Por exemplo, esta variável especifica a lista de módulos para compilar em vez de usar o padrão de construir todos os módulos:

MODULES_OVERRIDE = linux acpi

Como alternativa, essa variável lista quais módulos excluir do processo de criação:

WITHOUT_MODULES = linux acpi sound

Variáveis adicionais estão disponíveis. Consulte make.conf(5) para detalhes.

8.6. Se algo der errado

Existem quatro categorias de problemas que podem ocorrer ao criar um kernel personalizado:

falhas na config

Se o config falhar, ele imprimirá o número da linha que está incorreta. Como exemplo, para a seguinte mensagem, certifique-se de que a linha 17 seja digitada corretamente, comparando-a com GENERIC ou NOTES:

config: line 17: syntax error
falha no make

Se o make falhar, geralmente é devido a um erro no arquivo de configuração do kernel que não é grave o suficiente para o config capturar. Revise a configuração, e se o problema não for aparente, envie um email para a lista de discussão de questões gerais do FreeBSD contendo o arquivo de configuração do kernel.

O kernel não inicializa

Se o novo kernel não inicializar ou não reconhecer os dispositivos, não entre em pânico! Felizmente, o FreeBSD possui um excelente mecanismo para recuperação de kernels incompatíveis. Simplesmente escolha o kernel para inicializar a partir do gerenciador de inicialização do FreeBSD. Isso pode ser acessado quando o menu de inicialização do sistema aparecer, selecionando a opção "Escape to a loader prompt". No prompt, digite boot kernel.old ou o nome de qualquer outro kernel que seja conhecido por inicializar corretamente.

Após inicializar com um kernel correto, verifique o arquivo de configuração e tente construí-lo novamente. Um recurso útil é o /var/log/messages que registra as mensagens do kernel de cada inicialização bem-sucedida. Além disso, o dmesg(8) imprimirá as mensagens do kernel a partir da inicialização atual.

Ao solucionar problemas de um kernel, certifique-se de manter uma cópia do GENERIC, ou algum outro kernel que funcione, como um nome diferente que não será apagado na próxima compilação. Isto é importante porque toda vez que um novo kernel é instalado, o kernel.old é sobrescrito com o último kernel instalado, que pode ou não ser inicializável. Assim que possível, mova o kernel funcional renomeando o diretório que contém o kernel correto:

# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.good /boot/kernel
O kernel funciona, mas o ps(1) não

Se a versão do kernel for diferente daquela com a qual os utilitários do sistema foram construídos, por exemplo, um kernel compilado a partir do código-fonte do -CURRENT é instalado em um sistema -RELEASE, muitos comandos de status do sistema como ps(1) e vmstat(8) não funcionarão. Para corrigir isso, recompile e instale o world usando a mesma versão da árvore de código-fonte que o kernel. Nunca é uma boa ideia usar uma versão diferente do kernel do que o resto do sistema operacional.

Capítulo 9. Impressão

Colocar informações no papel é uma função vital, apesar de muitas tentativas de eliminá-la. A impressão tem dois componentes básicos. Os dados devem ser entregues à impressora e devem estar em um formato que a impressora possa entender.

9.1. Inicio Rápido

A impressão básica pode ser configurada rapidamente. A impressora deve ser capaz de imprimir texto simples ASCII. Para imprimir em outros tipos de arquivos, consulte Filtros.

  1. Crie um diretório para armazenar arquivos enquanto eles estão sendo impressos:

    # mkdir -p /var/spool/lpd/lp
    # chown daemon:daemon /var/spool/lpd/lp
    # chmod 770 /var/spool/lpd/lp
  2. Como root, crie /etc/printcap com estes conteúdos:

    lp:\
    	:lp=/dev/unlpt0:\  (1)
    	:sh:\
    	:mx#0:\
    	:sd=/var/spool/lpd/lp:\
    	:lf=/var/log/lpd-errs:
    1Esta linha é para uma impressora conectada a uma porta USB.Para uma impressora conectada a uma porta paralela ou uma porta de "impressora", use:Para uma impressora conectada diretamente a uma rede, use:Substitua network-printer-name pelo nome de host DNS da impressora de rede.
  3. Ative o lpd editando o /etc/rc.conf, adicionando esta linha:

    lpd_enable="YES"

    Inicie o serviço:

    # service lpd start
    Starting lpd.
  4. Imprima um teste:

    # printf "1. This printer can print.\n2. This is the second line.\n" | lpr

    Se ambas as linhas não iniciarem na borda esquerda, mas em "degrau", consulte Impedindo degraus em impressoras de texto simples.

    Arquivos de texto agora podem ser impressos com lpr. Dê o nome do arquivo na linha de comando ou canalize a saída diretamente no lpr.

    % lpr textfile.txt
    % ls -lh | lpr

9.2. Conexões de Impressora

As impressoras são conectadas a sistemas de computadores de várias maneiras. Geralmente, as impressoras desktop pequenas são conectadas diretamente à porta USB do computador. As impressoras mais antigas são conectadas a uma porta paralela ou a porta de "impressora". Algumas impressoras estão diretamente conectadas a uma rede, facilitando o compartilhamento com vários computadores. Algumas impressoras usam uma rara conexão de porta serial.

O FreeBSD pode se comunicar com todos esses tipos de impressoras.

USB

As impressoras USB podem ser conectadas a qualquer porta USB disponível no computador.

Quando o FreeBSD detecta uma impressora USB, duas entradas de dispositivos são criadas: /dev/ulpt0 e /dev/unlpt0. Os dados enviados para qualquer dispositivo serão retransmitidos para a impressora. Após cada trabalho de impressão, o ulpt0 reseta a porta USB. O reset da porta pode causar problemas em algumas impressoras, portanto, o dispositivo unlpt0 é normalmente usado em seu lugar. O unlpt0 não reseta a porta USB.

Paralela (IEEE-1284)

O dispositivo da porta paralela é o /dev/lpt0. Este dispositivo aparece independentemente se uma impressora está ou não conectada, ela não é autodetectada.

A maior parte dos fabricantes se afastou destas portas "legadas" e muitos computadores não as têm mais. Adaptadores podem ser usados para conectar uma impressora paralela a uma porta USB. Com este tipo de adaptador, a impressora pode ser tratada como se fosse uma impressora USB. Dispositivos chamados servidores de impressão também podem ser usados para conectar impressoras paralelas diretamente a uma rede.

Serial (RS-232)

Portas seriais são outro tipo de porta legada, raramente usada para impressoras, exceto em determinadas aplicações de nicho. Os cabos, os conectores e a fiação necessária variam muito.

Para portas seriais incorporadas em uma placa-mãe, o nome do dispositivo serial é /dev/cuau0 ou /dev/cuau1. Os adaptadores Seriais USB também podem ser usados, e eles aparecerão como /dev/cuaU0.

Vários parâmetros de comunicação devem ser conhecidos para se comunicar com uma impressora serial. Os mais importantes são baud rate ou BPS (Bits por segundo) e paridade. Os valores variam, mas as impressoras seriais típicas usam uma taxa de transmissão de 9600 e nenhuma paridade.

Rede

As impressoras de rede estão conectadas diretamente à rede de computadores local.

O nome de host DNS da impressora deve ser conhecido. Se a impressora tiver um endereço dinâmico atribuído por DHCP, o DNS deverá ser atualizado dinamicamente para que o nome do host tenha sempre o endereço IP correto. As impressoras de rede geralmente recebem endereços IP estáticos para evitar esse problema.

A maioria das impressoras de rede entende os trabalhos de impressão enviados com o protocolo LPD. Um nome de fila de impressão também pode ser especificado. Algumas impressoras processam dados de maneira diferente, dependendo de qual fila é usada. Por exemplo, uma fila raw imprime os dados inalterados, enquanto a fila text adiciona retornos de carro aos textos simples.

Muitas impressoras de rede também podem imprimir dados enviados diretamente para a porta 9100.

9.2.1. Resumo

As conexões de rede com fio geralmente são as mais fáceis de configurar e oferecem a impressão mais rápida. Para conexão direta com o computador, a conexão USB é preferida em função da velocidade e da simplicidade. As conexões paralelas funcionam, mas têm limitações no comprimento do cabo e na velocidade. Conexões seriais são mais difíceis de configurar. A configuração do cabo difere entre os modelos, e os parâmetros de comunicação, como taxa de transmissão e bits de paridade, se somam a complexidade. Felizmente, as impressoras seriais são raras.

9.3. Linguagens de Descrição de Página Comuns

Os dados enviados a uma impressora devem estar em um idioma que a impressora possa entender. Esses idiomas são chamados de Linguagens de Descrição de Página ou PDLs.

Muitas aplicações da Coleção de Ports e muitos utilitários do FreeBSD produzem uma saída em PostScript™. Esta tabela mostra os utilitários disponíveis para converter o postscript em outros PDLs comuns:

Para facilitar a impressão, escolha uma impressora que suporte PostScript™. Impressoras que suportam PCL são as próximas preferidas. Com o print/ghostscript, essas impressoras podem ser usadas como se entendessem nativamente PostScript™. Impressoras que suportam PostScript™ ou PCL diretamente quase sempre suportam a impressão direta de arquivos de texto simples ASCII também.

Impressoras baseadas em linha, como as jatos de tinta comuns, geralmente não suportam PostScript™ ou PCL. Elas geralmente podem imprimir arquivos de texto plano ASCII. O print/ghostscript suporta os PDL usados por algumas dessas impressoras. Entretanto, a impressão de uma página inteira baseada em gráficos nessas impressoras costuma ser muito lenta devido à grande quantidade de dados a serem transferidos e impressos.

Geralmente, as impressoras baseadas em host são mais difíceis de configurar. Algumas não podem ser usadas por causa de PDLs proprietários. Evite essas impressoras quando possível.

Descrições de muitos PDLs podem ser encontradas em http://www.undocprint.org/formats/page_description_languages. O PDL específico usado por vários modelos de impressoras pode ser encontrado em http://www.openprinting.org/printers.

9.4. Impressão Direta

Para impressão ocasional, os arquivos podem ser enviados diretamente para um dispositivo de impressora sem qualquer configuração. Por exemplo, um arquivo chamado exemplo.txt pode ser enviado para uma impressora USB:

# cp sample.txt /dev/unlpt0

A impressão direta para impressoras de rede depende das capacidades da impressora, mas a maioria aceita trabalhos de impressão na porta 9100, e o nc(1) pode ser usado com eles. Para imprimir o mesmo arquivo em uma impressora com o nome de host DNS de netlaser:

# nc netlaser 9100 < sample.txt

9.5. LPD (Daemon de impressora de linha)

A impressão de um arquivo em segundo plano é chamada de spooling. Um spooler permite que o usuário continue com outros programas no computador sem ter de esperar que a impressora conclua lentamente o trabalho de impressão.

O FreeBSD inclui um spooler chamado lpd(8). Os trabalhos de impressão são enviados com o comando lpr(1).

9.5.1. Configuração inicial

Um diretório para armazenar trabalhos de impressão é criado, a propriedade é definida e as permissões são definidas para impedir que outros usuários visualizem o conteúdo desses arquivos:

# mkdir -p /var/spool/lpd/lp
# chown daemon:daemon /var/spool/lpd/lp
# chmod 770 /var/spool/lpd/lp

As impressoras são definidas no /etc/printcap. Uma entrada para cada impressora inclui detalhes como um nome, a porta onde ela está conectada e várias outras configurações. Crie /etc/printcap com estes conteúdos:

lp:\				(1)
	:lp=/dev/unlpt0:\	(2)
	:sh:\			(3)
	:mx#0:\			(4)
	:sd=/var/spool/lpd/lp:\	(5)
	:lf=/var/log/lpd-errs:	(6)
1O nome desta impressora. O lpr(1) envia trabalhos de impressão para a impressora lp, a menos que outra impressora seja especificada com -P, portanto, a impressora padrão deve ser denominada lp.
2O dispositivo em que a impressora está conectada. Substitua esta linha pela apropriada para o tipo de conexão mostrado aqui.
3Suprimir a impressão de uma página de cabeçalho no início de um trabalho de impressão.
4Não limite o tamanho máximo de um trabalho de impressão.
5O caminho para o diretório de spooling desta impressora. Cada impressora usa seu próprio diretório de spooling.
6O arquivo de log no qual os erros nesta impressora serão relatados.

Depois de criar o /etc/printcap, use chkprintcap(8) para testar se há erros:

# chkprintcap

Corrija quaisquer problemas relatados antes de continuar.

Ative o lpd(8) no /etc/rc.conf:

lpd_enable="YES"

Inicie o serviço:

# service lpd start

9.5.2. Imprimindo com o lpr(1)

Os documentos são enviados para a impressora com o lpr. Um arquivo a ser impresso pode ser nomeado na linha de comando ou canalizado para o lpr. Esses dois comandos são equivalentes, enviando o conteúdo de doc.txt para a impressora padrão:

% lpr doc.txt
% cat doc.txt | lpr

Impressoras podem ser selecionadas com -P. Para imprimir em uma impressora chamada laser:

% lpr -Plaser doc.txt

9.5.3. Filtros

Os exemplos mostrados até agora enviaram o conteúdo de um arquivo de texto diretamente para a impressora. Contanto que a impressora entenda o conteúdo desses arquivos, a saída será impressa corretamente.

Algumas impressoras não são capazes de imprimir texto simples, e o arquivo de entrada pode nem ser texto simples.

Filtros permitem que os arquivos sejam traduzidos ou processados. O uso típico é traduzir um tipo de entrada, como texto simples, em um formato que a impressora possa entender, como PostScript™ ou PCL. Os filtros também podem ser usados para fornecer recursos adicionais, como adicionar números de página ou destacar o código-fonte para facilitar a leitura.

Os filtros discutidos aqui são filtros de entrada ou filtros de texto. Esses filtros convertem o arquivo recebido em diferentes formatos. Use su(1) para se tornar root antes de criar os arquivos.

Os filtros são especificados em /etc/printcap com o identificador if=. Para usar /usr/local/libexec/lf2crlf como um filtro, modifique o /etc/printcap assim:

lp:\
	:lp=/dev/unlpt0:\
	:sh:\
	:mx#0:\
	:sd=/var/spool/lpd/lp:\
	:if=/usr/local/libexec/lf2crlf:\   (1)
	:lf=/var/log/lpd-errs:
1if= identifica o filtro de entrada que será usado no texto recebido.

Os caracteres backslash de continuação de linha no final das linhas nas entradas do printcap revelam que uma entrada para uma impressora é na verdade apenas uma linha longa com entradas delimitadas por dois pontos. O exemplo anterior pode ser reescrito como uma única linha menos legível:

lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs:
9.5.3.1. Impedindo degraus em impressoras de texto simples

Os arquivos de texto típicos do FreeBSD contêm apenas um único caractere de feed de linha no final de cada linha. Estas linhas vão ficar em "degraus" em uma impressora padrão:

Um arquivo impresso parece
                    como os degraus de uma escada
                                              espalhados pelo vento

Um filtro pode converter os caracteres de nova linha em retornos de carro e novas linhas. Os retornos de carro fazem a impressora retornar para a esquerda após cada linha. Crie o /usr/local/libexec/lf2crlf com este conteúdo:

#!/bin/sh
CR=$'\r'
/usr/bin/sed -e "s/$/${CR}/g"

Defina as permissões e torne-o executável:

# chmod 555 /usr/local/libexec/lf2crlf

Modifique o /etc/printcap para usar o novo filtro:

:if=/usr/local/libexec/lf2crlf:\

Teste o filtro imprimindo o mesmo arquivo de texto simples. O procedimento fará com que cada linha comece no lado esquerdo da página.

9.5.3.2. Texto simples chique em impressoras PostScript™ com print/enscript

O GNUEnscript converte arquivos de texto simples em arquivos formatados como PostScript™ para impressão em impressoras PostScript™. Ele adiciona números de página, quebra as linhas longas e fornece vários outros recursos para facilitar a leitura dos arquivos de texto impressos. Dependendo do tamanho do papel local, instale o print/enscript-letter ou o print/enscript-a4 da coleção Ports.

Crie o /usr/local/libexec/enscript com este conteúdo:

#!/bin/sh
/usr/local/bin/enscript -o -

Defina as permissões e torne-o executável:

# chmod 555 /usr/local/libexec/enscript

Modifique o /etc/printcap para usar o novo filtro:

:if=/usr/local/libexec/enscript:\

Teste o filtro imprimindo um arquivo de texto simples.

9.5.3.3. Imprimindo PostScript™ em impressoras PCL

Muitos programas produzem documentos PostScript™. No entanto, impressoras baratas geralmente só entendem texto simples ou PCL. Este filtro converte os arquivos PostScript™ para o formato PCL antes de enviá-los para a impressora.

Instale o interpretador de PostScript™ Ghostscript, print/ghostscript9, através da Coleção de Ports.

Crie o /usr/local/libexec/ps2pcl com este conteúdo:

#!/bin/sh
/usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- -

Defina as permissões e torne-o executável:

# chmod 555 /usr/local/libexec/ps2pcl

A entrada PostScript™ enviada para este script será processada e convertida em PCL antes de ser enviada para a impressora.

Modifique o /etc/printcap para usar este novo filtro de entrada:

:if=/usr/local/libexec/ps2pcl:\

Teste o filtro enviando um pequeno programa PostScript™ para ele:

% printf "%%\!PS \n /Helvetica findfont 18 scalefont setfont \
72 432 moveto (PostScript printing successful.) show showpage \004" | lpr
9.5.3.4. Filtros Inteligentes

Um filtro que detecta o tipo de entrada e converte automaticamente para o formato correto da impressora pode ser muito conveniente. Os dois primeiros caracteres de um arquivo PostScript™ são geralmente %!. Um filtro pode detectar esses dois caracteres. Os arquivos PostScript™ podem ser enviados de forma inalterada para uma impressora PostScript™. Arquivos de texto podem ser convertidos para PostScript™ com o Enscript como mostrado anteriormente. Crie o /usr/local/libexec/psif com este conteúdo:

#!/bin/sh
#
#  psif - Print PostScript or plain text on a PostScript printer
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

case "$first_two_chars" in
%!)
    # %! : PostScript job, print it.
    echo "$first_line" && cat && exit 0
    exit 2
    ;;
*)
    # otherwise, format with enscript
    ( echo "$first_line"; cat ) | /usr/local/bin/enscript -o - && exit 0
    exit 2
    ;;
esac

Defina as permissões e torne-o executável:

# chmod 555 /usr/local/libexec/psif

Modifique o /etc/printcap para usar este novo filtro de entrada:

:if=/usr/local/libexec/psif:\

Teste o filtro imprimindo PostScript™ e arquivos de texto simples.

9.5.4. Múltiplas filas

As entradas no /etc/printcap são na verdade definições de filas. Pode haver mais de uma fila para uma única impressora. Quando combinadas com filtros, múltiplas filas fornecem aos usuários um maior controle sobre como seus trabalhos são impressos.

Por exemplo, considere uma impressora laser PostScript™ em rede num escritório. A maioria dos usuários deseja imprimir texto simples, mas alguns usuários avançados querem poder imprimir diretamente os arquivos PostScript™. Duas entradas podem ser criadas para a mesma impressora no /etc/printcap:

textprinter:\
	:lp=9100@officelaser:\
	:sh:\
	:mx#0:\
	:sd=/var/spool/lpd/textprinter:\
	:if=/usr/local/libexec/enscript:\
	:lf=/var/log/lpd-errs:

psprinter:\
	:lp=9100@officelaser:\
	:sh:\
	:mx#0:\
	:sd=/var/spool/lpd/psprinter:\
	:lf=/var/log/lpd-errs:

Os documentos enviados para a fila textprinter serão formatados pelo filtro /usr/local/libexec/enscript mostrado em um exemplo anterior. Usuários avançados podem imprimir arquivos PostScript™ em psprinter, onde nenhuma filtragem é feita.

Esta técnica de múltiplas filas pode ser usada para fornecer acesso direto a todos os tipos de recursos da impressora. Uma impressora com um duplexador pode usar duas filas, uma para impressões em apenas um lado da folha e outra com um filtro que envia a seqüência de comandos para habilitar a impressão frente e verso e, em seguida, envia o arquivo recebido.

9.5.5. Monitoramento e controle de impressão

Vários utilitários estão disponíveis para monitorar trabalhos de impressão e verificar e controlar a operação da impressora.

9.5.5.1. lpq(1)

O lpq(1) mostra o status das tarefas de impressão de um usuário. Trabalhos de impressão de outros usuários não são mostrados.

Mostra os trabalhos pendentes do usuário atual em uma única impressora:

% lpq -Plp
Rank   Owner      Job  Files                                 Total Size
1st    jsmith     0    (standard input)                      12792 bytes

Mostra os trabalhos pendentes do usuário atual em todas as impressoras:

% lpq -a
lp:
Rank   Owner      Job  Files                                 Total Size
1st    jsmith     1    (standard input)                      27320 bytes

laser:
Rank   Owner      Job  Files                                 Total Size
1st    jsmith     287  (standard input)                      22443 bytes
9.5.5.2. lprm(1)

O lprm(1) é usado para remover trabalhos de impressão. Usuários normais só podem remover seus próprios trabalhos. O root pode remover qualquer um ou todos os trabalhos.

Remova todos os trabalhos pendentes de uma impressora:

# lprm -Plp -
dfA002smithy dequeued
cfA002smithy dequeued
dfA003smithy dequeued
cfA003smithy dequeued
dfA004smithy dequeued
cfA004smithy dequeued

Remova um único trabalho de uma impressora. O lpq(1) é usado para encontrar o número do trabalho.

% lpq
Rank   Owner      Job  Files                                 Total Size
1st    jsmith     5    (standard input)                      12188 bytes
% lprm -Plp 5
dfA005smithy dequeued
cfA005smithy dequeued
9.5.5.3. lpc(8)

O lpc(8) é usado para verificar e modificar o status da impressora. O lpc é seguido por um comando e um nome de impressora opcional. O parâmetro all pode ser usado em vez de um nome de impressora específico, e o comando será aplicado a todas as impressoras. Usuários normais podem visualizar o status com lpc(8). Somente o class="username">root pode usar comandos que modificam o status da impressora.

Mostrar o status de todas as impressoras:

% lpc status all
lp:
	queuing is enabled
	printing is enabled
	1 entry in spool area
	printer idle
laser:
	queuing is enabled
	printing is enabled
	1 entry in spool area
	waiting for laser to come up

Impedindo que uma impressora aceite novos trabalhos e fazendo com que ela comece a aceitar novos trabalhos novamente:

# lpc disable lp
lp:
	queuing disabled
# lpc enable lp
lp:
	queuing enabled

Pare de imprimir, mas continue aceitando novos trabalhos. Em seguida, comece a imprimir novamente:

# lpc stop lp
lp:
	printing disabled
# lpc start lp
lp:
	printing enabled
	daemon started

Reinicie uma impressora após alguma condição de erro:

# lpc restart lp
lp:
	no daemon to abort
	printing enabled
	daemon restarted

Desative a fila de impressão e desative a impressão, com uma mensagem para explicar o problema aos usuários:

# lpc down lp Repair parts will arrive on Monday
lp:
	printer and queuing disabled
	status message is now: Repair parts will arrive on Monday

Reative uma impressora que esteja inativa:

# lpc up lp
lp:
	printing enabled
	daemon started

Veja lpc(8) para mais comandos e opções.

9.5.6. Impressoras Compartilhadas

As impressoras costumam ser compartilhadas por vários usuários em empresas e escolas. Recursos adicionais são fornecidos para tornar as impressoras compartilhadas mais convenientes.

9.5.6.1. Aliases

O nome da impressora é definido na primeira linha da entrada em /etc/printcap. Nomes adicionais, ou aliases, podem ser adicionados após esse nome. Os aliases são separados do nome e um do outro por barras verticais:

lp|repairsprinter|salesprinter:\

Os aliases podem ser usados no lugar do nome da impressora. Por exemplo, os usuários do departamento de vendas imprimem em sua impressora com

% lpr -Psalesprinter sales-report.txt

Usuários do departamento de Reparos podem imprimir na sua impressora com

% lpr -Prepairsprinter repairs-report.txt

Todos os documentos são impressos nessa única impressora. Quando o departamento de vendas cresce o suficiente para precisar de sua própria impressora, o alias pode ser removido da entrada da impressora compartilhada e usado como o nome de uma nova impressora. Os usuários nos dois departamentos continuam usando os mesmos comandos, mas os documentos de vendas são enviados para a nova impressora.

9.5.6.2. Páginas de cabeçalho

Pode ser difícil para os usuários localizarem seus documentos na pilha de páginas produzidas por uma impressora compartilhada ocupada. Páginas de cabeçalho foram criadas para resolver este problema. Uma página de cabeçalho com o nome de usuário e o nome do documento é impressa antes de cada trabalho de impressão. Estas páginas são por vezes chamadas de páginas banner ou separadoras.

A ativação das páginas de cabeçalho é diferente, dependendo se a impressora está conectada diretamente ao computador com um cabo USB, paralelo ou serial, ou se está conectada remotamente por uma rede.

As páginas de cabeçalho em impressoras conectadas diretamente são ativadas removendo-se a linha :sh:\ (Suprimir Cabeçalho) da entrada no /etc/printcap. Essas páginas de cabeçalho usam apenas caracteres de feed de linha para novas linhas. Algumas impressoras precisarão do filtro /usr/shared/examples/printing/hpif para evitar imprimir o texto em escada. O filtro configura impressoras PCL para imprimir retornos de carro e alimentações de linha quando um feed de linha é recebido.

As páginas de cabeçalho das impressoras de rede devem ser configuradas na própria impressora. Entradas de página de cabeçalho no /etc/printcap são ignoradas. As configurações geralmente estão disponíveis no painel frontal da impressora ou em uma página da web de configuração acessível com um navegador da web.

9.5.7. Referências

Arquivos de exemplo: /usr/shared/examples/printing/.

O Manual do Spooler de Impressora de Linha do 4.3BSD, /usr/shared/doc/smm/07.lpd/paper.ascii.gz.

Páginas de manual: printcap(5), lpd(8), lpr(1), lpc(8), lprm(1), lpq(1).

9.6. Outros sistemas de impressão

Vários outros sistemas de impressão estão disponíveis, além do lpd(8). Esses sistemas oferecem suporte para outros protocolos ou recursos adicionais.

9.6.1. CUPS (Sistema de impressão comum UNIX™)

O CUPS é um sistema de impressão popular disponível em muitos sistemas operacionais. Usar o CUPS no FreeBSD está documentado em um artigo separado: CUPS

9.6.2. HPLIP

A Hewlett Packard fornece um sistema de impressão que suporta muitas de suas impressoras a jato de tinta e laser. O port é o print/hplip. A página principal da web está em http://hplipopensource.com/hplip-web/index.html. O port lida com todos os detalhes de instalação no FreeBSD. As informações de configuração são mostradas em http://hplipopensource.com/hplip-web/install/manual/hp_setup.html.

9.6.3. LPRng

O LPRng foi desenvolvido como uma alternativa aprimorada para o lpd(8). O port é sysutils/LPRng. Para detalhes e documentação, veja https://lprng.sourceforge.net/.

Capítulo 10. Compatibilidade binária com o Linux®

10.1. Sinopse

O FreeBSD fornece compatibilidade binária com o Linux™, permitindo que os usuários instalem e executem a maioria dos binários do Linux™ em um sistema FreeBSD sem ter que primeiro modificar o binário. Foi até relatado que, em algumas situações, os binários Linux™ têm melhor desempenho no FreeBSD do que no Linux™.

No entanto, alguns recursos do sistema operacional específicos do Linux™ não são suportados no FreeBSD. Por exemplo, os binários Linux™ não funcionarão no FreeBSD se usarem chamadas específicas i386™, mesmo ativando o modo 8086 virtual.

O suporte para compatibilidade binária de 64 bits com o Linux™ foi adicionado no FreeBSD 10.3.

Depois de ler este capítulo, você saberá:

  • Como habilitar a compatibilidade binária com o Linux™ em um sistema FreeBSD.

  • Como instalar bibliotecas compartilhadas adicionais do Linux™.

  • Como instalar aplicativos Linux™ em um sistema FreeBSD.

  • Os detalhes de implementação da compatibilidade com o Linux™ no FreeBSD.

Antes de ler este capítulo, você deve:

10.2. Configurando a compatibilidade binária com o Linux™

Por padrão, as bibliotecas do Linux™ não estão instaladas e a compatibilidade binária com o Linux™ não está ativada. As bibliotecas Linux™ podem ser instaladas manualmente ou a partir da coleção de Ports do FreeBSD.

Antes de tentar compilar o port, carregue o módulo de kernel Linux™, caso contrário a compilação irá falhar:

# kldload linux

Para compatibilidade com 64 bits:

# kldload linux64

Para verificar se o módulo está carregado:

% kldstat
      Id Refs Address    Size     Name
      1    2 0xc0100000 16bdb8   kernel
      7    1 0xc24db000 d000     linux.ko

O pacote ou port emulators/linux_base-c7 é a maneira mais fácil de instalar um conjunto básico de bibliotecas e binários do Linux™ em um sistema FreeBSD. Para instalar o port:

# pkg install emulators/linux_base-c7

Para que a compatibilidade com o Linux™ seja ativada durante a inicialização, adicione esta linha ao /etc/rc.conf:

linux_enable="YES"

Em máquinas de 64 bits, o /etc/rc.d/abi carregará automaticamente o módulo para emulação de 64 bits.

Como a camada de compatibilidade binária do Linux™ ganhou suporte para a execução de binários Linux™ de 32 e 64 bits (em hosts x86 de 64 bits), não é mais possível vincular estaticamente a funcionalidade de emulação a um kernel personalizado.

10.2.1. Instalando Bibliotecas Adicionais Manualmente

Se um aplicativo Linux™ reclamar sobre a falta de bibliotecas compartilhadas após configurar a compatibilidade binária do Linux™, determine quais bibliotecas compartilhadas o Linux™ precisa e instale-as manualmente.

A partir de um sistema Linux™, o ldd pode ser usado para determinar quais bibliotecas compartilhadas o aplicativo precisa. Por exemplo, para verificar quais bibliotecas compartilhadas o linuxdoom precisa, execute este comando a partir de um sistema Linux™ que tenha o Doom instalado:

% ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0
libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0
libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29

Então, copie todos os arquivos listados na última coluna da saída do comando no sistema Linux™ para o diretório /compat/linux no sistema FreeBSD. Depois de copiados, crie links simbólicos para os nomes na primeira coluna. Este exemplo irá resultar nos seguintes arquivos no sistema FreeBSD:

/compat/linux/usr/X11/lib/libXt.so.3.1.0
/compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3.1.0
/compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0
/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Se uma biblioteca compartilhada Linux™ já existir com um número de revisão principal correspondente à primeira coluna da saída do comando ldd, ela não precisará ser copiada para a arquivo nomeado na última coluna, pois a biblioteca existente deve funcionar. No entanto é aconselhável copiar a biblioteca compartilhada se for uma versão mais nova. O arquivo antigo pode ser removido, desde que o link simbólico aponte para o novo.

Por exemplo, essas bibliotecas já existem no sistema FreeBSD:

/compat/linux/lib/libc.so.4.6.27
/compat/linux/lib/libc.so.4 -> libc.so.4.6.27

e o ldd indica que um binário requer uma versão posterior:

libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29

Como a biblioteca existente tem apenas uma ou duas versões desatualizadas no último dígito, o programa ainda deve funcionar com a versão um pouco mais antiga. No entanto, é seguro substituir o libc.so existente pela versão mais nova:

/compat/linux/lib/libc.so.4.6.29
/compat/linux/lib/libc.so.4 -> libc.so.4.6.29

Geralmente, será necessário procurar as bibliotecas compartilhadas que os binários do Linux™ dependem apenas das primeiras vezes que um programa Linux™ é instalado no FreeBSD. Depois de um tempo, haverá um conjunto suficiente de bibliotecas Linux™ compartilhadas no sistema para poder executar binários Linux™ atualizados sem qualquer trabalho extra.

10.2.2. Instalando os binários Linux™ELF

Os binários ELF requerem por vezes um passo extra. Quando um binário ELF sem marca for executado, ele gerará uma mensagem de erro:

% ./my-linux-elf-binary
ELF binary type not known
Abort

Para ajudar o kernel do FreeBSD a distinguir entre um binário do FreeBSD ELF e um binário Linux™, use brandelf(1):

% brandelf -t Linux my-linux-elf-binary

Como o conjunto de ferramentas GNU coloca as informações de branding apropriadas em binários ELF automaticamente, essa etapa geralmente não é necessária.

10.2.3. Instalando um aplicativo baseado em Linux™RPM

Para instalar um aplicativo baseado em Linux™RPM, primeiro instale o pacote ou o port archivers/rpm4. Uma vez instalado, o usuário root pode usar este comando para instalar um .rpm:

# cd /compat/linux
# rpm2cpio < /path/to/linux.archive.rpm | cpio -id

Se necessário, use o brandelf nos binários ELF instalados . Observe que isso impedirá uma desinstalação limpa.

10.2.4. Configurando o Resolver do Hostname

Se o DNS não funcionar ou este erro aparecer:

resolv+: "bind" is an invalid keyword resolv+:
"hosts" is an invalid keyword

configure o /compat/linux/etc/host.conf como segue:

order hosts, bind
multi on

Isso especifica que o /etc/hosts deve ser pesquisado primeiro e o DNS deve ser pesquisado em segundo lugar. Quando o /compat/linux/etc/host.conf não existe, os aplicativos Linux™ usam o /etc/host.conf e avisam sobre a sintaxe incompatível do FreeBSD. Remova o bind se um servidor de nomes não estiver configurado usando o /etc/resolv.conf.

10.3. Tópicos Avançados

Esta seção descreve como funciona a compatibilidade binária com o Linux™ e é baseada em um email escrito para Lista de discussão do chat do FreeBSD por Terry Lambert tlambert@primenet.com (Message ID: <199906020108.SAA07001@usr09.primenet.com>).

O FreeBSD tem uma abstração chamada "loader de classes de execução". Esta é uma cunha na chamada de sistema execve(2) .

Historicamente, o loader UNIX™ examinava o número mágico (geralmente os primeiros 4 ou 8 bytes do arquivo) para ver se era um binário conhecido pelo sistema e, em caso afirmativo, invocava o loader binário.

Se o arquivo não fosse o tipo binário adequado para o sistema, a chamada execve(2) retornava uma falha, e o shell tentava iniciar a execução do mesmo como um comando do shell. A suposição era um padrão de "qualquer que seja o shell atual".

Posteriormente, foi feito um hack para que o sh(1) examinasse os dois primeiros caracteres e se eles fossem :\n, ele invocava o shell csh(1) em seu lugar.

O FreeBSD tem uma lista de loaders, em vez de um único loader, com um fallback para o loader #! para executar interpretadores de shell ou scripts de shell.

Para o suporte ao Linux™ABI, o FreeBSD vê o número mágico como um binário ELF. O loader ELF procura por uma marca especializada, que é uma seção de comentários na imagem ELF e que não esteja presente nos binários ELF SVR4/Solaris™.

Para que os binários Linux™ funcionem, eles devem ser marcados como tipo Linux usando o comando brandelf(1):

# brandelf -t Linux file

Quando o loader ELF vê a marca Linux, ele substitui um ponteiro na estrutura proc. Todas as chamadas do sistema são indexadas por esse ponteiro. Além disso, o processo é sinalizado para manipulação especial do vetor trap para o código de trampolim de sinal, e vários outros (menores) reparos que são manipulados pelo módulo do kernel Linux™.

O vetor de chamada do sistema Linux™ contém, entre outras coisas, uma lista de entradas sysent[] cujos endereços residem no módulo do kernel.

Quando uma chamada de sistema é acionada pelo binário Linux™, o código de interceptação desreferencia o ponteiro de função de chamada do sistema da estrutura proc e obtém a classe Linux™, não a FreeBSD, como ponto de entrada para a chamada do sistema.

O modo Linux™ procura fazer reroots dinamicamente. Isso é, na verdade, equivalente ao union para montagens de sistema de arquivos. Primeiro, é feita uma tentativa de procurar o arquivo em /compat/linux/original-path. Se isso falhar, a pesquisa será feita em /original-path. Isso garante que os binários que exigem outros binários possam ser executados. Por exemplo, o conjunto de ferramentas Linux™ pode ser executado sob o suporte da Linux™ABI. Isso também significa que os binários Linux™ podem carregar e executar binários do FreeBSD, se não houver binários Linux™ correspondentes, e que o comando uname(1) pode ser colocado na árvore de diretórios /compat/linux para garantir que os binários Linux™ não possam dizer que não estão rodando em Linux™.

De fato, existe um kernel Linux™ no kernel do FreeBSD. As várias funções subjacentes que implementam todos os serviços fornecidos pelo kernel são idênticas às entradas da tabela de chamada do sistema FreeBSD, e às entradas da tabela de chamada do sistema Linux™: operações do sistema de arquivos, operações de memória virtual, entrega de sinal e System V IPC. A única diferença é que os binários do FreeBSD obtêm as funções de cola do FreeBSD, e os binários Linux™ recebem as funções de cola do Linux™. As funções de cola do FreeBSD estão estaticamente ligadas ao kernel, e as funções de cola do Linux ™ podem ser estaticamente ligadas, ou podem ser acessadas através de um módulo do kernel.

Tecnicamente, isso não é realmente emulação, é uma implementação de ABI. Às vezes é chamado de "emulação™ Linux " porque a implementação foi feita num momento em que não havia outra palavra para descrever o que estava acontecendo. Dizer que o FreeBSD executava os binários do Linux™ não era verdade, já que o código não era compilado nele.

Parte III: Administração do Sistema

Os capítulos restantes cobrem todos os aspectos da administração do sistema FreeBSD. Cada capítulo começa descrevendo o que será aprendido como resultado da leitura do capítulo e também detalha o que o leitor deve saber antes de abordar o material.

Estes capítulos são projetados para serem lidos conforme as informações são necessárias. Eles não precisam ser lidos em nenhuma ordem específica, nem todos precisam ser lidos antes de começar a usar o FreeBSD.

Capítulo 11. Configuração e Ajuste

11.1. Sinopse

Um dos aspectos importantes do FreeBSD é a configuração adequada do sistema. Este capítulo explica muito do processo de configuração do FreeBSD, incluindo alguns dos parâmetros que podem ser configurados para ajustar um sistema FreeBSD.

Depois de ler este capítulo, você saberá:

  • O básico da configuração do rc.conf e dos scripts de inicialização /usr/local/etc/rc.d.

  • Como configurar e testar uma placa de rede.

  • Como configurar hosts virtuais em dispositivos de rede.

  • Como usar os vários arquivos de configuração em /etc.

  • Como ajustar o FreeBSD usando variáveis sysctl(8).

  • Como ajustar o desempenho do disco e modificar as limitações do kernel.

Antes de ler este capítulo, você deve:

11.2. Inicialização de Serviços

Muitos usuários instalam software de terceiros no FreeBSD a partir da coleção de Ports e precisam que os serviços instalados sejam iniciados durante a inicialização do sistema. Serviços como mail/postfix ou www/apache22 são apenas dois dos muitos pacotes de software que podem ser iniciados durante a inicialização do sistema. Esta seção explica os procedimentos disponíveis para iniciar o software de terceiros.

No FreeBSD, a maioria dos serviços incluídos, como o cron(8), são iniciados através dos scripts de inicialização do sistema.

11.2.1. Configuração Estendida dos Aplicativos

Agora que o FreeBSD inclui o rc.d, a configuração da inicialização do aplicativo é mais fácil e fornece mais recursos. Usando as palavras-chave discutidas em Gerenciando Serviços no FreeBSD, os aplicativos podem ser configurados para iniciar depois de certos outros serviços e flags extras poderem ser passadas através do /etc/rc.conf no lugar de sinalizadores codificados no script de inicialização. Um script básico pode ser semelhante ao seguinte:

#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown

. /etc/rc.subr

name=utility
rcvar=utility_enable

command="/usr/local/sbin/utility"

load_rc_config $name

#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
utility_enable=${utility_enable-"NO"}
pidfile=${utility_pidfile-"/var/run/utility.pid"}

run_rc_command "$1"

Este script irá garantir que o utilitário fornecido será iniciado após o pseudo-serviço DAEMON. Ele também fornece um método para definir e rastrear o ID do processo (PID).

Esta aplicação poderia então ter a seguinte linha colocada no /etc/rc.conf:

utility_enable="YES"

Este método permite a manipulação mais fácil de argumentos de linha de comando, inclusão das funções padrões fornecidas em /etc/rc.subr, compatibilidade com o rcorder(8), e fornece uma configuração mais fácil via rc.conf.

11.2.2. Usando o Services para Inicializar Serviços

Outros serviços podem ser iniciados usando o inetd(8). O uso do inetd(8) e sua configuração é descrita em profundidade em O super-servidor inetd.

Em alguns casos, pode fazer mais sentido usar o cron(8) para iniciar os serviços do sistema. Esta abordagem tem várias vantagens, pois o cron(8) executa estes processos como o proprietário do crontab(5). Isto permite que usuários regulares iniciem e mantenham seus próprios aplicativos.

O recurso @reboot do cron(8), pode ser usado no lugar da especificação de hora. Isso faz com que o job seja executado quando cron(8) é iniciado, normalmente durante a inicialização do sistema.

11.3. Configurando o cron(8)

Um dos utilitários mais úteis no FreeBSD é o cron. Este utilitário é executado em segundo plano e verifica regularmente o /etc/crontab para que as tarefas sejam executadas e procura /var/cron/tabs para arquivos crontab personalizados. Estes arquivos são usados para planejar tarefas que o cron executa nos horários especificados. Cada entrada em um crontab define uma tarefa para ser executada e é conhecida como uma tarefa do cron.

Dois tipos diferentes de arquivos de configuração são usados: o crontab do sistema, que não deve ser modificado, e crontabs de usuário, que podem ser criados e editados conforme necessário. O formato usado por esses arquivos está documentado em crontab(5). O formato do sistema crontab, /etc/crontab inclui uma coluna who que não existe nos crontabs de usuário. No crontab do sistema , o cron executa o comando como o usuário especificado nesta coluna. Em um crontab de usuário, todos os comandos são executados como o usuário que criou o crontab.

Os crontabs de usuário permitem que usuários individuais programem suas próprias tarefas. O usuário root também pode ter um crontab de usuário que pode ser usado para agendar tarefas que não existem no crontab do sistema .

Aqui está uma entrada de amostra do crontab do sistema, /etc/crontab:

# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: head/pt_BR.ISO8859-1/books/handbook/book.xml 53984 2020-03-15 16:03:31Z dbaio $
#(1)
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin (2)
#
#minute	hour	mday	month	wday	who	command (3)
#
*/5	*	*	*	*	root	/usr/libexec/atrun (4)
1Linhas que começam com o caractere # são comentários. Um comentário pode ser colocado no arquivo como um lembrete do que uma ação faz e do porque a sua execução é desejada. Comentários não podem estar na mesma linha que um comando ou então serão interpretados como parte do comando; eles devem estar em uma nova linha. Linhas em branco são ignoradas.
2O caractere igual (=) é usado para definir qualquer configuração de ambiente. Neste exemplo, ele é usado para definir o SHELL e o PATH. Se o SHELL for omitido, o cron usará o shell Bourne padrão. Se o PATH for omitido, o caminho completo deverá ser fornecido ao comando ou script a ser executado.
3Esta linha define os sete campos usados em um crontab do sistema: minute, hora, mday, month, wday, who e command. O campo minute é o tempo em minutos quando o comando especificado será executado, a hour é a hora em que o comando especificado será executado, o mday é o dia do mês, month é o mês e wday é o dia da semana. Estes campos devem ser valores numéricos, representando o relógio de vinte e quatro horas, ou um *, representando todos os valores desse campo. O campo who existe somente no crontab do sistema e especifica com qual usuário o comando deve ser executado. O último campo é o comando a ser executado.
4Esta entrada define os valores para este trabalho do cron. O /5, seguido por vários outros caracteres , especifica que /usr/libexec/atrun é invocado pelo root a cada cinco minutos de cada hora, de cada dia e dia da semana, de cada mês.Comandos podem incluir qualquer número de opções. No entanto, os comandos que se estendem a várias linhas precisam ser quebrados com o caractere de continuação da barra invertida "\".

11.3.1. Criando um Crontab de Usuário

Para criar um crontab de usuário, invoque o crontab no modo editor:

% crontab -e

Isto irá abrir o crontab do usuário usando o editor de texto padrão. A primeira vez que um usuário executa este comando, ele abre um arquivo vazio. Depois que um usuário cria um crontab, esse comando abrirá este arquivo para edição.

É útil adicionar estas linhas a parte superior do arquivo crontab para configurar as variáveis de ambiente e lembrar os significados dos campos no crontab:

SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
# Order of crontab fields
# minute	hour	mday	month	wday	command

Em seguida, adicione uma linha para cada comando ou script a ser executado, especificando o horário para executar o comando. Este exemplo executa o script de shell Bourne personalizado especificado todos os dias às duas da tarde. Como o caminho para o script não está especificado em PATH, o caminho completo para o script é fornecido:

0	14	*	*	*	/usr/home/dru/bin/mycustomscript.sh

Antes de usar um script personalizado, verifique se ele é executável e teste-o com o conjunto limitado de variáveis de ambiente definidas pelo cron. Para replicar o ambiente que seria usado para executar a entrada do cron acima, use:

env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh

O ambiente definido pelo cron é discutido em crontab(5). Verificar se os scripts operam corretamente em um ambiente cron é especialmente importante se incluírem quaisquer comandos que excluam arquivos usando curingas.

Quando terminar de editar o crontab, salve o arquivo. Ele será instalado automaticamente e o cron lerá o crontab e executará seus cron jobs nos horários especificados. Para listar as tarefas agendadas em um crontab, use este comando:

% crontab -l
0	14	*	*	*	/usr/home/dru/bin/mycustomscript.sh

Para remover todas as tarefas cron em um crontab de usuário:

% crontab -r
remove crontab for dru? y

11.4. Gerenciando Serviços no FreeBSD

O FreeBSD usa o sistema rc(8) de scripts de inicialização durante a inicialização do sistema e para gerenciar serviços. Os scripts listados em /etc/rc.d fornecem serviços básicos que podem ser controlados com start, stop e restart opções para service(8). Por exemplo, sshd(8) pode ser reiniciado com o seguinte comando:

# service sshd restart

Este procedimento pode ser usado para iniciar serviços em um sistema em execução. Os serviços serão iniciados automaticamente no momento da inicialização, conforme especificado em rc.conf(5). Por exemplo, para ativar o natd(8) na inicialização do sistema, adicione a seguinte linha ao /etc/rc.conf:

natd_enable="YES"

Se uma linha natd_enable="NO" já estiver presente, altere o NO para YES. Os scripts rc(8) carregarão automaticamente todos os serviços dependentes durante a próxima inicialização, conforme descrito abaixo.

Como o sistema rc(8) é destinado principalmente a iniciar e parar serviços na inicialização do sistema e no tempo de desligamento, o start, as opções stop e restart somente executarão suas ações se a variável apropriada estiver configurada no /etc/rc.conf. Por exemplo, o sshd restart só funcionará se sshd_enable estiver definido como YES em /etc/rc.conf. Para iniciar, parar ou reiniciar um serviço independente das configurações em /etc/rc.conf, estes comandos deve ser prefixado com "one". Por exemplo, para reiniciar sshd(8) independentemente da configuração atual do /etc/rc.conf, execute o seguinte comando:

# service sshd onerestart

Para verificar se um serviço está habilitado em /etc/rc.conf, execute o script apropriado rc(8) com rcvar. Este exemplo verifica se o sshd(8) está habilitado no /etc/rc.conf:

# service sshd rcvar
# sshd
#
sshd_enable="YES"
#   (default: "")

A linha # sshd é gerada pelo comando acima, não pelo console do root.

Para determinar se um serviço está ou não em execução, use status. Por exemplo, para verificar se o sshd(8) está em execução:

# service sshd status
sshd is running as pid 433.

Em alguns casos, também é possível fazer o reload denum serviço. Isso tenta enviar um sinal para um serviço individual, forçando o serviço a recarregar seus arquivos de configuração. Na maioria dos casos, isso significa enviar ao serviço um sinal SIGHUP. O suporte para esse recurso não está incluído para todos os serviços.

O sistema rc(8) é usado para serviços de rede e também contribui para a maior parte da inicialização do sistema. Por exemplo, quando o script /etc/rc.d/bgfsck é executado, ele imprime a seguinte mensagem:

Starting background file system checks in 60 seconds.

Esse script é usado para verificações do sistema de arquivos em segundo plano, que ocorrem apenas durante a inicialização do sistema.

Muitos serviços do sistema dependem de outros serviços para funcionar corretamente. Por exemplo, o yp(8) e outros serviços baseados em RPC podem falhar ao iniciar até que o rpcbind(8) seja iniciado. Para resolver esse problema, informações sobre dependências e outros meta-dados são incluídas nos comentários na parte superior de cada script de inicialização. O programa rcorder(8) é usado para analisar esses comentários durante a inicialização do sistema para determinar a ordem na qual os serviços do sistema devem ser invocados para satisfazer as dependências.

A seguinte palavra-chave deve ser incluída em todos os scripts de inicialização, conforme exigido pelo rc.subr(8) para "habilitar" o script de inicialização:

  • PROVIDE: Especifica os serviços que este arquivo fornece.

As seguintes palavras-chave podem ser incluídas na parte superior de cada script de inicialização. Eles não são estritamente necessárias, mas são úteis como sugestões para rcorder(8):

  • REQUIRE: lista os serviços necessários para este serviço. O script que contém esta palavra chave será executado após os serviços especificados.

  • BEFORE: lista os serviços que dependem deste serviço. O script que contém esta palavra chave será executado antes dos serviços especificados.

Ao definir cuidadosamente essas palavras-chave para cada script de inicialização, um administrador passa a ter um nível refinado de controle da ordem de inicialização dos scripts, sem a necessidade dos "runlevels" usados por alguns sistemas operacionais UNIX™.

Informações adicionais podem ser encontradas em rc(8) e rc.subr(8). Consulte este artigo para obter instruções sobre como criar um script rc(8) personalizado.

11.4.1. Gerenciando a configuração específica do sistema

A localização principal das informações de configuração do sistema é arquivo /etc/rc.conf. Este arquivo contém uma ampla gama de informações de configuração e é lido na inicialização do sistema para configurar o sistema. Ele fornece as informações de configuração para os arquivos rc*.

As entradas em /etc/rc.conf substituem as configurações padrões em /etc/defaults/rc.conf. O arquivo contendo as configurações padrões não deve ser editado. Ao invés disso, todas as alterações específicas do sistema devem ser feitas em /etc/rc.conf.

Várias estratégias podem ser aplicadas em aplicativos em cluster para separar as configurações que afetam todo o site da configuração específica do sistema para reduzir a sobrecarga de administração. A abordagem recomendada é colocar a configuração específica do sistema em /etc/rc.conf.local. Por exemplo, estas entradas em /etc/rc.conf aplicam-se a todos os sistemas:

sshd_enable="YES"
keyrate="fast"
defaultrouter="10.1.1.254"

Considerando que estas entradas em /etc/rc.conf.local se aplicam somente a este sistema:

hostname="node1.example.org"
ifconfig_fxp0="inet 10.1.1.1/8"

Distribua o /etc/rc.conf para cada sistema usando um aplicativo como o rsync ou o puppet, enquanto o /etc/rc.conf.local permanece único.

A atualização do sistema não sobrescreverá o /etc/rc.conf, portanto as informações de configuração do sistema não serão perdidas.

Ambos /etc/rc.conf e /etc/rc.conf.local são analisados pelo sh(1). Isto permite que os operadores do sistema criem cenários de configuração complexos. Consulte rc.conf(5) para obter mais informações sobre este tópico.

11.5. Configurando Placas de Interface de Rede

Adicionar e configurar uma placa de interface de rede (NIC) é uma tarefa comum para qualquer administrador do FreeBSD.

11.5.1. Localizando o Driver Correto

Primeiro, determine o modelo da NIC e o chip utilizado. O FreeBSD suporta uma ampla variedade de NICs. Verifique a lista de compatibilidade de hardware para a release do FreeBSD para ver se a NIC é suportada.

Se a NIC é suportada, determine o nome do driver do FreeBSD para a NIC. Consulte /usr/src/sys/conf/NOTES e /usr/src/sys/arch/conf/NOTES para a lista de Drivers NIC com algumas informações sobre os chipsets suportados. Em caso de dúvida, leia a página de manual do driver, pois ele fornecerá mais informações sobre o hardware suportado e quaisquer limitações conhecidas do driver.

Os drivers para as NICs comuns já estão presentes no kernel GENERIC, o que significa que a NIC deve ser verificada durante a inicialização. As mensagens de inicialização do sistema podem ser visualizadas digitando more /var/run/dmesg.boot e usando a barra de espaço para percorrer o texto. Neste exemplo, duas NICs Ethernet que utilizam o driver dc(4) estão presentes no sistema:

dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
miibus0: <MII bus> on dc0
bmtphy0: <BCM5201 10/100baseTX PHY> PHY 1 on miibus0
bmtphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc0: Ethernet address: 00:a0:cc:da:da:da
dc0: [ITHREAD]
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
miibus1: <MII bus> on dc1
bmtphy1: <BCM5201 10/100baseTX PHY> PHY 1 on miibus1
bmtphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: Ethernet address: 00:a0:cc:da:da:db
dc1: [ITHREAD]

Se o driver da NIC não estiver presente em GENERIC, mas houver um driver disponível, o driver precisará ser carregado antes que a NIC possa ser configurada e usada. Isso pode ser feito de duas maneiras:

  • A maneira mais fácil é carregar um módulo do kernel para a NIC usando o kldload(8). Para carregar automaticamente o driver no momento da inicialização, adicione a linha apropriada ao /boot/loader.conf. Nem todos os drivers NIC estão disponíveis como módulos.

  • Como alternativa, compile estaticamente o suporte para a NIC em um kernel personalizado. Consulte /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES e a página de manual do driver para determinar qual linha adicionar ao arquivo de configuração do kernel personalizado. Para mais informações sobre como recompilar o kernel, consulte Configurando o kernel do FreeBSD. Se a NIC foi detectada na inicialização, o kernel não precisa ser recompilado.

11.5.1.1. Utilizando os Drivers Windows™NDIS

Infelizmente, ainda existem muitos fornecedores que não fornecem esquemas para seus drivers para a comunidade de código aberto porque consideram essas informações como segredos comerciais. Consequentemente, os desenvolvedores do FreeBSD e de outros sistemas operacionais são deixados com duas opções: desenvolver os drivers por um processo longo e complexo de engenharia reversa ou usar os binários de drivers existentes disponíveis para plataforma Microsoft™ Windows™.

O FreeBSD fornece suporte "nativo" para a especificação de interface de driver de rede (NDIS). Ele inclui o ndisgen(8) que pode ser utilizado para converter um driver Windows™ XP num formato que pode ser usado no FreeBSD. Como o driver ndis(4) usa um binário Windows™ XP, ele só é executado em sistemas i386™ e amd64. Dispositivos PCI, CardBus, PCMCIA e USB são suportados.

Para usar o ndisgen(8), três coisas são necessárias:

  1. Código-fonte do kernel do FreeBSD.

  2. Um binário do driver do Windows™ XP com uma extensão .SYS.

  3. Um arquivo de configuração do driver do Windows™ XP com uma extensão .INF.

Faça o download dos arquivos .SYS e .INF para a NIC específica. Geralmente, eles podem ser encontrados no CD do driver ou no site do fornecedor. Os exemplos a seguir usam o W32DRIVER.SYS e o W32DRIVER.INF.

A largura do bit do driver deve corresponder à versão do FreeBSD. Para FreeBSD/i386, use um driver de 32 bits Windows™. Para o FreeBSD/amd64, é necessário um driver de 64 bits do Windows™.

O próximo passo é compilar o binário do driver em um módulo do kernel carregável. Como root, use ndisgen(8):

# ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS

Este comando é interativo e solicita qualquer informação extra necessária. Um novo módulo do kernel será gerado no diretório atual. Use kldload(8) para carregar o novo módulo:

# kldload ./W32DRIVER_SYS.ko

Além do módulo do kernel gerado, os módulos ndis.ko e if_ndis.ko devem ser carregados. Isso deve acontecer automaticamente quando qualquer módulo que dependa do ndis(4) for carregado. Caso contrário, carregue-os manualmente, usando os seguintes comandos:

# kldload ndis
# kldload if_ndis

O primeiro comando carrega o wrapper do driver da miniporta ndis(4) e o segundo carrega o driver NIC gerado.

Execute o comando dmesg(8) para ver se houve algum erro de carregamento. Se tudo correu bem, a saída deve ser semelhante à seguinte:

ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps

A partir daqui, o ndis0 pode ser configurado como qualquer outra NIC.

Para configurar o sistema para carregar os módulos ndis(4) no momento da inicialização, copie o módulo gerado, W32DRIVER_SYS.ko, para /boot/modules. Em seguida, adicione a seguinte linha ao /boot/loader.conf:

W32DRIVER_SYS_load="YES"

11.5.2. Configurando a placa de rede

Quando o driver correto é carregado para a NIC, a placa precisa ser configurada. Ele pode ter sido configurado no momento da instalação por bsdinstall(8).

Para exibir a configuração da NIC, digite o seguinte comando:

% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80008<VLAN_MTU,LINKSTATE>
        ether 00:a0:cc:da:da:da
        inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80008<VLAN_MTU,LINKSTATE>
        ether 00:a0:cc:da:da:db
        inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet 10baseT/UTP
        status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
        nd6 options=3<PERFORMNUD,ACCEPT_RTADV>

Neste exemplo, os seguintes dispositivos foram exibidos:

  • dc0: A primeira interface Ethernet.

  • dc1: A segunda interface Ethernet.

  • lo0: o dispositivo de loopback.

O FreeBSD usa o nome do driver seguido da ordem em que a placa é detectada na inicialização para nomear a NIC. Por exemplo, sis2 é a terceira NIC no sistema usando driver sis(4).

Neste exemplo, o dc0 está ativo e em execução. Os principais indicadores são:

  1. UP significa que a placa está configurada e pronta.

  2. A placa tem um endereço da Internet (inet), 192.168.1.3.

  3. Ela tem uma máscara de sub-rede válida (netmask), onde 0xffffff00 é o mesmo que 255.255.255.0 .

  4. Tem um endereço de broadcast válido, 192.168.1.255.

  5. O endereço MAC da placa (ether) é 00:a0:cc:da:da:da.

  6. A seleção de mídia física está no modo de seleção automática (media:Ethernet autoselect (100baseTX <full-duplex>)). Neste exemplo, o dc1 está configurado para ser executado com a mídia 10baseT/UTP. Para obter mais informações sobre tipos de mídia disponíveis para um driver, consulte sua página de manual.

  7. O status do link (status) é active, indicando que o sinal da portadora foi detectado. Para dc1, o status status: no carrier é normal quando um cabo Ethernet não está conectado à placa.

Se a saída ifconfig(8) tivesse mostrado algo semelhante a:

dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=80008<VLAN_MTU,LINKSTATE>
	ether 00:a0:cc:da:da:da
	media: Ethernet autoselect (100baseTX <full-duplex>)
	status: active

isso indicaria que a placa não foi configurada.

A placa deve ser configurada como root. A configuração da NIC pode ser realizada a partir da linha de comando com o ifconfig(8), mas não persistirá após uma reinicialização, a menos que a configuração também seja adicionada ao /etc/rc.conf. Se um servidor DHCP estiver presente na LAN, basta adicionar esta linha:

ifconfig_dc0="DHCP"

Substitua dc0 com o valor correto para o sistema.

A linha adicionada, então, segue as instruções dadas em Teste e solução de problemas.

Se a rede foi configurada durante a instalação, algumas entradas para a NIC podem já estar presentes. Verifique novamente o /etc/rc.conf antes de adicionar novas linhas.

Se não existir um servidor DHCP, a NIC deve ser configurada manualmente. Adicione uma linha para cada NIC presente no sistema, conforme mostrado neste exemplo:

ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"

Substitua dc0 e dc1 e as informações de endereço IP com os valores corretos para o sistema. Consulte a man page do driver, ifconfig(8) e rc.conf(5) para maiores detalhes sobre as opções permitidas e a sintaxe de /etc/rc.conf.

Se a rede não estiver usando DNS, edite o /etc/hosts para adicionar os nomes e endereços IP dos hosts na LAN, se eles ainda não estiverem lá. Para maiores informações, consulte hosts(5) e /usr/shared/examples/etc/hosts.

Se não houver um servidor DHCP e o acesso à Internet for necessário, configure manualmente o gateway padrão e o nameserver:

# echo 'defaultrouter="your_default_router"' >> /etc/rc.conf
# echo 'nameserver your_DNS_server' >> /etc/resolv.conf

11.5.3. Teste e solução de problemas

Uma vez que as alterações necessárias no /etc/rc.conf sejam salvas, uma reinicialização pode ser usada para testar a configuração de rede e verificar se o sistema é reiniciado sem nenhum erro. Como alternativa, aplique as configurações ao sistema de rede com este comando:

# service netif restart

Se um gateway padrão foi configurado no /etc/rc.conf, também execute este comando:

# service routing restart

Uma vez que o sistema de rede tiver sido reiniciado, teste as NIC.

11.5.3.1. Testando uma placa Ethernet

Para verificar se uma placa Ethernet está configurada corretamente, execute um ping(8) na própria interface e, em seguida, ping(8) outra máquina na LAN:

% ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms

--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms
% ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms

Para testar a resolução da rede, use o nome do host em vez do endereço IP. Se não houver nenhum servidor DNS na rede, o /etc/hosts deve ser configurado primeiro. Para este propósito, edite o /etc/hosts para adicionar os nomes e os endereços IP dos hosts na LAN, se eles ainda não estiverem lá . Para maiores informações, consulte hosts(5) e /usr/shared/examples/etc/hosts.

11.5.3.2. Solução de problemas

Ao solucionar problemas de configurações de hardware e software, verifique primeiro as coisas simples. O cabo de rede está conectado? Os serviços de rede estão configurados corretamente? O firewall está configurado corretamente? A NIC é suportada pelo FreeBSD? Antes de enviar um relatório de bug, sempre verifique as Notas de Hardware, atualize a versão do FreeBSD para a versão mais recente do STABLE, verifique os arquivos da lista de discussão e pesquise na Internet.

Se a placa funcionar, mas o desempenho for ruim, leia tuning(7). Além disso, verifique a configuração da rede, pois configurações de rede incorretas podem causar conexões lentas.

Alguns usuários experimentam uma ou duas mensagens de device timeout, o que é normal para algumas placas. Se eles continuarem ou forem incômodos, verifique se o dispositivo está em conflito com outro. Verifique novamente as conexões dos cabos. Considere tentar outra placa.

Para resolver erros de watchdog timeout, primeiro verifique o cabo de rede. Muitas placas requerem um slot PCI que suporte a masterização de barramento. Em algumas placas-mãe antigas, apenas um slot PCI permite, normalmente o slot 0. Verifique a NIC e a documentação da placa-mãe para determinar se esse pode ser o problema.

As mensagens No route to host ocorrem se o sistema não puder rotear um pacote para o host de destino. Isso pode acontecer se nenhuma rota padrão for especificada ou se um cabo for desconectado. Verifique a saída do netstat -rn e certifique-se de que haja uma rota válida para o host. Se não houver, leia Gateways e Rotas.

As mensagens de erro ping: sendto: Permission denied são geralmente causadas por um firewall mal configurado. Se um firewall está habilitado no FreeBSD, mas nenhuma regra foi definida, a política padrão é negar todo o tráfego, mesmo o ping(8). Consulte Firewalls para maiores informações.

Às vezes, o desempenho da placa é ruim ou abaixo da média. Nesses casos, tente configurar o modo de seleção de mídia de autoselect para a seleção de mídia correta. Embora isso funcione para a maioria dos hardwares, isso pode ou não resolver o problema. Novamente, verifique todas as configurações de rede e consulte tuning(7).

11.6. Hosts Virtuais

Um uso comum do FreeBSD é a hospedagem de sites virtuais, onde um servidor aparece na rede como muitos servidores. Isso é conseguido atribuindo vários endereços de rede a uma única interface.

Uma determinada interface de rede tem um endereço "real" e pode ter qualquer número de endereços "alias". Esses aliases são normalmente adicionados colocando entradas de alias no /etc/rc.conf, como mostrado neste exemplo:

ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"

As entradas de alias devem começar com alias_0_ usando um número sequencial como alias0, alias1 e assim por diante. O processo de configuração será interrompido no primeiro número ausente.

O cálculo de máscaras de alias é importante. Para uma determinada interface, deve haver um endereço que represente corretamente a máscara de rede da rede. Qualquer outro endereço dentro dessa rede deve ter uma máscara de rede toda de 1s, expressa como 255.255.255.255 ou 0xffffffff.

Por exemplo, considere o caso em que a interface fxp0 está conectada a duas redes: 10.1.1.0 com uma máscara de rede de 255.255.255.0 e 202.0.75.16 com uma máscara de rede de 255.255.255.240. O sistema deve ser configurado para aparecer nos intervalos 10.1.1.1 até 10.1.1.5 e 202.0.75.17 até 202.0.75.20. Somente o primeiro endereço em um determinado intervalo de rede deve ter uma máscara de rede real. Todo o resto de (10.1.1.2 até 10.1.1.5 e de 202.0.75.18 até 202.0.75.20) deve ser configurado com uma máscara de rede 255.255.255.255.

As seguintes entradas /etc/rc.conf configuram o adaptador corretamente para este cenário:

ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"

Uma maneira mais simples de expressar isso é com uma lista separada por espaço de intervalos de endereços IP. O primeiro endereço receberá a máscara de sub-rede indicada e os endereços adicionais terão uma máscara de sub-rede 255.255.255.255.

ifconfig_fxp0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"

11.7. Configurando o log do sistema

Gerar e ler logs do sistema é um aspecto importante da administração do sistema. As informações nos registros do sistema podem ser usadas para detectar problemas de hardware e software, bem como erros de configuração dos aplicativos e do sistema. Essas informações também desempenham um papel importante na auditoria de segurança e na resposta a incidentes. A maioria dos daemons e aplicativos do sistema geram entradas de log.

O FreeBSD fornece um registrador de sistema, o syslogd, para gerenciar o registro. Por padrão, o syslogd é iniciado quando o sistema é inicializado. Isto é controlado pela variável syslogd_enable no /etc/rc.conf. Existem vários argumentos de aplicação que podem ser definidos usando syslogd_flags no /etc/rc.conf. Consulte syslogd(8) para obter maiores informações sobre os argumentos disponíveis.

Esta seção descreve como configurar o criador de logs do sistema FreeBSD para log local e remoto e como executar a rotação de log e o gerenciamento de log.

11.7.1. Configurando os logs locais

O arquivo de configuração, /etc/syslog.conf, controla o que o syslogd faz com as entradas de log à medida que são recebidas. Existem vários parâmetros para controlar o tratamento de eventos recebidos. O facility descreve qual subsistema gerou a mensagem, como o kernel ou um daemon, e o level descreve a gravidade do evento que ocorreu. Isso possibilita configurar onde uma mensagem de log é registrada, dependendo da instalação e do nível. Também é possível executar uma ação dependendo do aplicativo que enviou a mensagem e, no caso de log remoto, o nome do host da máquina que gera o evento de log.

Este arquivo de configuração contém uma linha por ação, em que a sintaxe de cada linha é um campo seletor seguido por um campo de ação. A sintaxe do campo seletor é facility.level, que corresponderá às mensagens de log de facility no nível level ou superior. Também é possível adicionar um sinalizador de comparação opcional antes do nível para especificar mais precisamente o que está registrado. Vários campos seletores podem ser usados para a mesma ação e são separados por um ponto-e-vírgula (;). Usar * irá corresponder a tudo. O campo de ação indica para onde enviar a mensagem de log, como para um arquivo ou host de log remoto. Por exemplo, aqui está o syslog.conf padrão do FreeBSD:

# $FreeBSD: head/pt_BR.ISO8859-1/books/handbook/book.xml 53984 2020-03-15 16:03:31Z dbaio $
#
#       Spaces ARE valid field separators in this file. However,
#       other *nix-like systems still insist on using tabs as field
#       separators. If you are sharing this file between systems, you
#       may want to use only tabs as field separators here.
#       Consult the syslog.conf(5) manpage.
*.err;kern.warning;auth.notice;mail.crit                /dev/console
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err   /var/log/messages
security.*                                      /var/log/security
auth.info;authpriv.info                         /var/log/auth.log
mail.info                                       /var/log/maillog
lpr.info                                        /var/log/lpd-errs
ftp.info                                        /var/log/xferlog
cron.*                                          /var/log/cron
!-devd
*.=debug                                        /var/log/debug.log
*.emerg                                         *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info                                   /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
#*.*                                            /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.*                                            @loghost
# uncomment these if you're running inn
# news.crit                                     /var/log/news/news.crit
# news.err                                      /var/log/news/news.err
# news.notice                                   /var/log/news/news.notice
# Uncomment this if you wish to see messages produced by devd
# !devd
# *.>=info
!ppp
*.*                                             /var/log/ppp.log
!*

Neste exemplo:

  • A linha 8 combina todas as mensagens com um nível de err ou superior, bem como kern.warning, auth.notice e mail.crit, e envia essas mensagens de log para o console (/dev/console).

  • A linha 12 combina todas as mensagens do recurso mail no nível info ou acima e registra as mensagens em /var/log/maillog.

  • A linha 17 usa um sinalizador de comparação (=) para corresponder apenas as mensagens no nível debug e registrá-las em /var/log/debug.log.

  • A linha 33 é um exemplo de uso de uma especificação de programa. Isso faz com que as regras que a seguem apenas sejam válidas para o programa especificado. Neste caso, somente as mensagens geradas pelo ppp são registradas em /var/log/ppp.log.

Os níveis disponíveis, na ordem dos mais para o menos críticos, são emerg, alert, crit, err, warning, notice, info, and debug.

As facilities, em nenhuma ordem particular, são auth, authpriv, console, cron, daemon, ftp, kern, lpr, mail, mark, news, security, syslog, user, uucp, and local0 through local7. Esteja ciente de que outros sistemas operacionais podem ter recursos diferentes.

Para registrar tudo do nível notice e superior para /var/log/daemon.log, adicione a seguinte entrada:

daemon.notice                                        /var/log/daemon.log

Para obter mais informações sobre os diferentes níveis e facilities, consulte syslog(3) e syslogd(8). Para maiores informações sobre /etc/syslog.conf, sua sintaxe e exemplos de uso mais avançados, veja syslog.conf(5).

11.7.2. Gerenciamento de log e rotação

Os arquivos de log podem crescer rapidamente, ocupando espaço em disco e dificultando a localização de informações úteis. O gerenciamento de log tenta atenuar isso. No FreeBSD, o newsyslog é usado para gerenciar arquivos de log. Este programa interno rotaciona e comprime periodicamente arquivos de log e, opcionalmente, cria arquivos de log ausentes e sinaliza os programas quando os arquivos de log são movidos. Os arquivos de log podem ser gerados pelo syslogd ou por qualquer outro programa que gere arquivos de log. Enquanto o newsyslog é normalmente executado a partir do cron(8), ele não é um daemon do sistema. Na configuração padrão, ele é executado a cada hora.

Para saber quais ações executar, o newsyslog lê seu arquivo de configuração, /etc/newsyslog.conf. Este arquivo contém uma linha para cada arquivo de log que o newsyslog gerencia. Cada linha indica o proprietário do arquivo, suas permissões, quando rotacionar esse arquivo, flags opcionais que afetam a rotação do log, como compactação, e programas para sinalizar quando o log é rotacionado. Aqui está a configuração padrão no FreeBSD:

# configuration file for newsyslog
# $FreeBSD: head/pt_BR.ISO8859-1/books/handbook/book.xml 53984 2020-03-15 16:03:31Z dbaio $
#
# Entries which do not specify the '/pid_file' field will cause the
# syslogd process to be signalled when that log file is rotated.  This
# action is only appropriate for log files which are written to by the
# syslogd process (ie, files listed in /etc/syslog.conf).  If there
# is no process which needs to be signalled when a given log file is
# rotated, then the entry for that file should include the 'N' flag.
#
# The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'.
#
# Note: some sites will want to select more restrictive protections than the
# defaults.  In particular, it may be desirable to switch many of the 644
# entries to 640 or 600.  For example, some sites will consider the
# contents of maillog, messages, and lpd-errs to be confidential.  In the
# future, these defaults may change to more conservative ones.
#
# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/all.log                        600  7     *    @T00  J
/var/log/amd.log                        644  7     100  *     J
/var/log/auth.log                       600  7     100  @0101T JC
/var/log/console.log                    600  5     100  *     J
/var/log/cron                           600  3     100  *     JC
/var/log/daily.log                      640  7     *    @T00  JN
/var/log/debug.log                      600  7     100  *     JC
/var/log/kerberos.log                   600  7     100  *     J
/var/log/lpd-errs                       644  7     100  *     JC
/var/log/maillog                        640  7     *    @T00  JC
/var/log/messages                       644  5     100  @0101T JC
/var/log/monthly.log                    640  12    *    $M1D0 JN
/var/log/pflog                          600  3     100  *     JB    /var/run/pflogd.pid
/var/log/ppp.log        root:network    640  3     100  *     JC
/var/log/devd.log                       644  3     100  *     JC
/var/log/security                       600  10    100  *     JC
/var/log/sendmail.st                    640  10    *    168   B
/var/log/utx.log                        644  3     *    @01T05 B
/var/log/weekly.log                     640  5     1    $W6D0 JN
/var/log/xferlog                        600  7     100  *     JC

Cada linha começa com o nome do log a ser rotacionado, seguido opcionalmente por um proprietário e um grupo para arquivos rotacionados e recém-criados. O campo mode define as permissões no arquivo de log e count indica quantos arquivos de log rotacionados devem ser mantidos. Os campos size e when informam o newsyslog quando rotacionar o arquivo. Um arquivo de log é rotacionado quando seu tamanho é maior que o campo size ou quando o tempo no campo when tiver terminado. Um asterisco (*) significa que este campo é ignorado. O campo flags fornece instruções adicionais, por exemplo, como compactar o arquivo rotacionado ou criar o arquivo de log se ele estiver ausente. Os dois últimos campos são opcionais e especificam o nome do arquivo de ID de Processo (PID) e um número de sinal para enviar a esse processo quando o arquivo é rotacionado.

Para obter maiores informações sobre todos os campos, sinalizadores válidos e como sobre especificar o tempo de rotação, consulte newsyslog.conf(5). Como o newsyslog é executado a partir do cron(8), ele não pode rotacionar arquivos com mais frequência do que a que está planejada para ser executada no cron(8).

11.7.3. Configurando o log remoto

Monitorar os arquivos de log de vários hosts pode se tornar difícil à medida que o número de sistemas aumenta. Configurar o log centralizado pode reduzir parte da carga administrativa da administração dos arquivos de log.

No FreeBSD, a agregação, a fusão e a rotação centralizada de arquivos de log podem ser configuradas usando o syslogd e o newsyslog. Esta seção demonstra um exemplo de configuração, em que host o A, chamado logserv.example.com, coletará informações de log para a rede local. O host B, denominado logclient.example.com, será configurado para transmitir informações de log para o servidor de registro em log.

11.7.3.1. Configuração do servidor de log

Um servidor de log é um sistema que foi configurado para aceitar informações de log de outros hosts. Antes de configurar um servidor de log, verifique o seguinte:

  • Se houver um firewall entre o servidor de log e qualquer cliente de log, certifique-se de que o conjunto de regras do firewall permita a porta 514 do UDP para os clientes e o servidor.

  • O servidor de log e todas as máquinas clientes devem ter entradas de nome diretas e reversas no DNS local. Se a rede não tiver um servidor DNS, crie entradas no /etc/hosts de cada sistema. A resolução adequada de nomes é necessária para que as entradas de log não sejam rejeitadas pelo servidor de log.

No servidor de log, edite o /etc/syslog.conf para especificar o nome do cliente para receber as entradas de log, o recurso de log a ser usado e o nome do log para armazenar as entradas de log do host. Este exemplo adiciona o nome do host de B, registra todos os recursos e armazena as entradas de log em /var/log/logclient.log.

Exemplo 25. Configuração do servidor de log de exemplo
+logclient.example.com
*.*     /var/log/logclient.log

Ao adicionar vários clientes de log, adicione uma entrada semelhante de duas linhas para cada cliente. Maiores informações sobre os recursos disponíveis podem ser encontradas em syslog.conf(5).

Em seguida, configure o /etc/rc.conf:

syslogd_enable="YES"
syslogd_flags="-a logclient.example.com -v -v"

A primeira entrada inicia o syslogd na inicialização do sistema. A segunda entrada permite entradas de log do cliente especificado. A opção -v -v aumenta a verbosidade das mensagens registradas. Isso é útil para ajustar os recursos, pois os administradores podem ver o tipo de mensagens que estão sendo registradas em cada facility.

Múltiplas opções -a podem ser especificadas para permitir o registro de múltiplos clientes. Endereços IP e netblocks inteiros também podem ser especificados. Consulte syslogd(8) para obter uma lista completa de opções possíveis.

Finalmente, crie o arquivo de log:

# touch /var/log/logclient.log

Neste ponto, o syslogd deve ser reiniciado e verificado:

# service syslogd restart
# pgrep syslog

Se um PID for retornado, o servidor será reiniciado com êxito e a configuração do cliente poderá ser iniciada. Se o servidor não reiniciar, consulte /var/log/messages para visualizar o erro.

11.7.3.2. Configuração do cliente de log

Um cliente de log envia entradas de log para um servidor de log na rede. O cliente também mantém uma cópia local de seus próprios logs.

Uma vez que o servidor de log foi configurado, edite o /etc/rc.conf no cliente de registro:

syslogd_enable="YES"
syslogd_flags="-s -v -v"

A primeira entrada ativa o syslogd na inicialização. A segunda entrada impede que os logs sejam aceitos por esse cliente de outros hosts (-s) e aumenta a verbosidade das mensagens registradas.

Em seguida, defina o servidor de log no /etc/syslog.conf do cliente. Neste exemplo, todos os facilities registrados são enviados para um sistema remoto, indicado pelo símbolo @, com o nome do host especificado:

*.*		@logserv.example.com

Depois de salvar a edição, reinicie o syslogd para que as alterações entrem em vigor:

# service syslogd restart

Para testar se as mensagens de log estão sendo enviadas pela rede, use o logger(1) no cliente para enviar uma mensagem para syslogd:

# logger "Test message from logclient"

Esta mensagem agora deve existir tanto no /var/log/messages do cliente e no /var/log/logclient.log do servidor de log.

11.7.3.3. Debugando servidores de log

Se nenhuma mensagem estiver sendo recebida no servidor de log, a causa provavelmente é um problema de conectividade de rede, um problema de resolução de nome de host ou um erro de digitação em um arquivo de configuração. Para isolar a causa, certifique-se de que o servidor de log e o cliente de log sejam capazes de comunicarem através do ping usando o nome do host especificado em seu /etc/rc.conf. Se isso falhar, verifique o cabeamento da rede, o conjunto de regras do firewall e as entradas de nome de host no servidor DNS ou /etc/hosts no servidor de log e nos clientes. Repita até que o ping seja bem-sucedido em ambos os hosts.

Se o ping for bem-sucedido em ambos os hosts, mas as mensagens de log ainda não estiverem sendo recebidas, aumente temporariamente o detalhamento do log para diminuir o problema de configuração. No exemplo a seguir, o /var/log/logclient.log no servidor de log está vazio e o /var/log/messages no cliente de log não indica uma razão para a falha. Para aumentar a saída de debug, edite a entrada syslogd_flags no servidor de log e execute uma reinicialização:

syslogd_flags="-d -a logclient.example.com -v -v"
# service syslogd restart

Dados de debug semelhantes aos seguintes irão aparecer no console imediatamente após a reinicialização:

logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart
syslogd: restarted
logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel
Logging to FILE /var/log/messages
syslogd: kernel boot file is /boot/kernel/kernel
cvthname(192.168.1.10)
validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com;
rejected in rule 0 due to name mismatch.

Neste exemplo, as mensagens de log estão sendo rejeitadas devido a um erro de digitação que resulta em uma incompatibilidade de nome de host. O nome do host do cliente deve ser logclient, não logclien. Corrija o erro de digitação, execute uma reinicialização e verifique os resultados:

# service syslogd restart
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart
syslogd: restarted
logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel
syslogd: kernel boot file is /boot/kernel/kernel
logmsg: pri 166, flags 17, from logserv.example.com,
msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2
cvthname(192.168.1.10)
validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com;
accepted in rule 0.
logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2
Logging to FILE /var/log/logclient.log
Logging to FILE /var/log/messages

Neste ponto, as mensagens estão sendo recebidas e colocadas corretamente no arquivo correto.

11.7.3.4. Considerações de segurança

Como com qualquer serviço de rede, os requisitos de segurança devem ser considerados antes de implementar um servidor de log. Os arquivos de log podem conter dados confidenciais sobre serviços ativados no host local, contas de usuário e dados de configuração. Os dados enviados pela rede do cliente para o servidor não serão criptografados nem protegidos por senha. Se houver necessidade de criptografia, considere o uso do security/stunnel, que transmitirá os dados de log em um túnel criptografado.

A segurança local também é um problema. Os arquivos de log não são criptografados durante o uso ou após a rotação do log. Usuários locais podem acessar arquivos de log para obter informações adicionais sobre a configuração do sistema. Definir permissões adequadas nos arquivos de log é crítico. O rotacionador de log integrado, newsyslog, suporta a configuração de permissões em arquivos de log recém-criados e rotacionados. A configuração de arquivos de log no modo 600 deve impedir o acesso indesejado por usuários locais. Consulte newsyslog.conf(5) para obter informações adicionais.

11.8. Arquivos de Configuração

11.8.1. Layout do /etc

Existem vários diretórios nos quais as informações de configuração são mantidas. Estes incluem:

/etc

Informações de configuração específica do sistema genérico.

/etc/defaults

Versões padrão dos arquivos de configuração do sistema.

/etc/mail

Configuração extra do sendmail(8) e outros arquivos de configuração MTA.

/etc/ppp

Configuração para ambos os programas, user- e kernel-ppp.

/usr/local/etc

Arquivos de configuração para aplicativos instalados. Pode conter subdiretórios para cada aplicativo.

/usr/local/etc/rc.d

scripts rc(8) para os aplicativos instalados.

/var/db

Arquivos de banco de dados específicos do sistema gerados automaticamente, como o banco de dados de pacotes e o banco de dados locate(1).

11.8.2. Hostnames

11.8.2.1. /etc/resolv.conf

Como um sistema FreeBSD acessa o Sistema de Nomes de Domínio da Internet (Internet Domain Name System - DNS) é controlado por resolv.conf(5).

As entradas mais comuns para o /etc/resolv.conf são:

nameserver

O endereço IP de um servidor de nomes que o resolvedor deve consultar. Os servidores são consultados na ordem listada com um máximo de três.

search

Lista de pesquisa, para busca de nomes de host. Isso é normalmente determinado pelo domínio do nome do host local.

domain

O nome do domínio local.

Um típico /etc/resolv.conf é assim:

search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30

Apenas uma das opções search e domain deve ser usada.

Ao usar o DHCP, o dhclient(8) geralmente reescreve o /etc/resolv.conf com informações recebidas do servidor DHCP.

11.8.2.2. /etc/hosts

O /etc/hosts é um banco de dados de texto simples que funciona em conjunto com o DNS e o NIS para fornecer o nome do host aos mapeamentos de endereços IP. Entradas para computadores locais conectados através de uma LAN podem ser adicionadas a este arquivo para propósitos simplistas de nomeação em vez de configurar um servidor named(8). Além disso, o /etc/hosts pode ser usado para fornecer um registro local de nomes da Internet, reduzindo a necessidade de consultar servidores DNS externos para nomes comumente acessados.

# $FreeBSD: head/pt_BR.ISO8859-1/books/handbook/book.xml 53984 2020-03-15 16:03:31Z dbaio $
#
#
# Host Database
#
# This file should contain the addresses and aliases for local hosts that
# share this file.  Replace 'my.domain' below with the domainname of your
# machine.
#
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
#
::1			localhost localhost.my.domain
127.0.0.1		localhost localhost.my.domain
#
# Imaginary network.
#10.0.0.2		myname.my.domain myname
#10.0.0.3		myfriend.my.domain myfriend
#
# According to RFC 1918, you can use the following IP networks for
# private nets which will never be connected to the Internet:
#
#	10.0.0.0	-   10.255.255.255
#	172.16.0.0	-   172.31.255.255
#	192.168.0.0	-   192.168.255.255
#
# In case you want to be able to connect to the Internet, you need
# real official assigned numbers.  Do not try to invent your own network
# numbers but instead get one from your network provider (if any) or
# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)
#

O formato do /etc/hosts é o seguinte:

[Internet address] [official hostname] [alias1] [alias2] ...

Por exemplo:

10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2

Consulte hosts(5) para obter maiores informações.

11.9. Efetuando ajustes com o sysctl(8)

O sysctl(8) é usado para fazer mudanças em um sistema FreeBSD em execução. Isso inclui muitas opções avançadas da stack TCP/IP e do sistema de memória virtual as quais podem melhorar drasticamente o desempenho do FreeBSD para um administrador de sistema experiente. Mais de quinhentas variáveis do sistema podem ser lidas e definidas usando o sysctl(8).

Em sua essência, o sysctl(8) serve duas funções: ler e modificar as configurações do sistema.

Para ver todas as variáveis legíveis:

% sysctl -a

Para ler uma variável específica, especifique seu nome:

% sysctl kern.maxproc
kern.maxproc: 1044

Para definir uma variável específica, use a sintaxe variable=value:

# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000

As configurações das variáveis sysctl são geralmente strings, números ou booleanos, onde um booleano é 1 para sim 0 para não.

Para definir automaticamente algumas variáveis sempre que a máquina inicializar, adicione-as ao /etc/sysctl.conf. Para maiores informações, consulte sysctl.conf(5) e sysctl.conf.

11.9.1. sysctl.conf

O arquivo de configuração para o sysctl(8), /etc/sysctl.conf, se parece muito com o /etc /rc.conf. Os valores são definidos na forma variable=value. Os valores especificados são definidos após o sistema entrar no modo multiusuário. Nem todas as variáveis são configuráveis neste modo.

Por exemplo, para desativar o log de saídas de sinais fatais e impedir que os usuários vejam processos iniciados por outros usuários, os seguintes ajustes podem ser configurados em /etc/sysctl.conf:

# Do not log fatal signal exits (e.g., sig 11)
kern.logsigexit=0

# Prevent users from seeing information about processes that
# are being run under another UID.
security.bsd.see_other_uids=0

11.9.2. Variáveis sysctl(8) apenas de leitura

Em alguns casos, pode ser desejável modificar os valores de variáveis do sysctl(8) que são somente de leitura, o que exigirá uma reinicialização do sistema.

Por exemplo, em alguns modelos de laptops, o dispositivo cardbus(4) não examinará os intervalos de memória e falhará com erros semelhantes a:

cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12

A correção requer a modificação de uma configuração definida por uma variável do sysctl(8) que é somente de leitura. Adicione hw.pci.allow_unsupported_io_range=1 ao arquivo /boot/loader.conf e reinicie. Agora o cardbus(4) deve funcionar corretamente.

11.10. Otimização de Discos

A seção a seguir discutirá vários mecanismos e opções de ajuste que podem ser aplicados a dispositivos de disco. Em muitos casos, discos com partes mecânicas, como unidades SCSI, serão o gargalo que reduz o desempenho geral do sistema. Embora a solução seja instalar uma unidade sem peças mecânicas, como uma unidade de estado sólido, as unidades mecânicas não irão desaparecer num futuro próximo. Quando estiver otimizando discos, é aconselhável utilizar os recursos do comando iostat(8) para testar várias mudanças no sistema. Este comando permitirá ao usuário obter informações valiosas sobre o sistema IO.

11.10.1. Variáveis Sysctl

11.10.1.1. vfs.vmiodirenable

A variável vfs.vmiodirenable sysctl(8) pode ser definida como 0 (off ) ou 1 (on). Está definida para 1 por padrão. Esta variável controla como os diretórios são armazenados em cache pelo sistema. A maioria dos diretórios é pequena, usando apenas um único fragmento (normalmente 1K) no sistema de arquivos e, normalmente, 512 bytes no cache de buffer. Com esta variável desativada, o cache de buffer armazenará apenas um número fixo de diretórios, mesmo que o sistema tenha uma quantidade enorme de memória. Quando ativado, este sysctl(8) permite que o cache de buffer use o cache de página VM para armazenar em cache os diretórios, disponibilizando toda a memória para fazer cache dos diretórios. No entanto, a memória mínima no núcleo usada para armazenar em cache um diretório é o tamanho da página física (geralmente 4K) em vez de 512 bytes. Manter esta opção ativada é recomendado se o sistema estiver executando quaisquer serviços que manipulem um grande número de arquivos. Esses serviços podem incluir caches da web, grandes sistemas de correio e sistemas de notícias. Manter essa opção geralmente não reduz o desempenho, mesmo com a memória desperdiçada, mas deve-se experimentar para descobrir.

11.10.1.2. vfs.write_behind

A variável vfs.write_behind sysctl(8) é padronizada para 1 (ligada). Isso informa ao sistema de arquivos para emitir gravações de mídia à medida que clusters completos são coletados, o que normalmente ocorre ao gravar arquivos sequenciais grandes. Isso evita saturar o cache de buffer com buffers sujos quando não beneficia o desempenho de I/O. No entanto, isso pode atrasar os processos e, sob certas circunstâncias, deve ser desativado.

11.10.1.3. vfs.hirunningspace

A variável vfs.hirunningspace sysctl(8) determina quanto de I/O de gravação pendente pode ser enfileirado no sistema de controladores de disco como um todo em qualquer instância. O padrão é geralmente suficiente, mas em máquinas com muitos discos, tente aumentar para quatro ou cinco megabytes. Definir um valor muito alto, que exceda o limite de gravação do cache de buffer, pode levar a um mau desempenho de cluster. Não defina esse valor arbitrariamente alto, pois valores de gravação mais altos podem adicionar latência a leituras que ocorrem ao mesmo tempo.

Há vários outros caches de buffer e valores de cache de página VM relacionados a sysctl(8). Modificar esses valores não é recomendado, pois o sistema VM faz um bom trabalho de ajuste automático.

11.10.1.4. vm.swap_idle_enabled

A variável vm.swap_idle_enabled sysctl(8) é útil em grandes sistemas multiusuários com muitos usuários ativos, e muitos processos ociosos. Tais sistemas tendem a gerar pressão contínua nas reservas de memória livre. Ativar esse recurso e aprimorar a histerese de troca (em segundos ociosos) por meio de vm.swap_idle_threshold1 e vm.swap_idle_threshold2 reduz a prioridade das páginas de memória associadas aos processos inativos mais rapidamente do que no algoritmo de pageout normal. Isso dá uma ajuda ao daemon de pageout. Apenas ative essa opção se necessário, porque a compensação é essencialmente fazer o pre-page da memoria mais cedo, o que consome mais swap e largura de banda de disco. Em um sistema pequeno, esta opção terá um efeito determinável, mas em um sistema grande que já está paginando moderadamente, esta opção permite que o sistema VM instale processos inteiros dentro e fora da memória facilmente.

11.10.1.5. hw.ata.wc

Desativar o cache de gravação IDE reduz a largura de banda de gravação em discos IDE, mas às vezes pode ser necessário devido a problemas de consistência de dados introduzidos por fornecedores de disco rígido. O problema é que algumas unidades IDE mentem sobre quando uma gravação é concluída. Com o cache de gravação IDE ativado, os discos rígidos IDE gravam os dados fora de ordem e às vezes atrasam a gravação de alguns blocos indefinidamente quando estão sob carga pesada de disco. Uma falha ou falha de energia pode causar corrupção séria do sistema de arquivos. Verifique o padrão no sistema observando a variável hw.ata.wc sysctl(8). Se o cache de gravação IDE estiver desativado, pode-se definir essa variável somente leitura como 1 em /boot/loader.conf para ativar no momento da inicialização.

Para maiores informações, consulte ata(4).

11.10.1.6. SCSI_DELAY (kern.cam.scsi_delay)

A opção de configuração do kernel SCSI_DELAY pode ser usada para reduzir os tempos de inicialização do sistema. Os padrões são razoavelmente altos e podem ser responsáveis por 15 segundos de atraso no processo de inicialização. Reduzindo-o para 5 segundos geralmente funciona com unidades modernas. A variável de tempo de inicialização kern.cam.scsi_delay deve ser usada. A opção de configuração ajustável e a configuração do kernel aceitam valores em termos de milissegundos e não__segundos.

11.10.2. Soft Updates

Para ajustar um sistema de arquivos, use tunefs(8). Este programa tem muitas opções diferentes. Para ativar e desativar o Soft Updates, use:

# tunefs -n enable /filesystem
# tunefs -n disable /filesystem

Um sistema de arquivos não pode ser modificado com tunefs(8) enquanto estiver montado. Um bom momento para ativar o Soft Updates é antes que qualquer partição tenha sido montada, no modo de single-user.

O Soft Updates é recomendado para sistemas de arquivos UFS, pois melhora drasticamente o desempenho de metadados, principalmente a criação e exclusão de arquivos, através do uso de um cache em memória. Há duas desvantagens no Soft Updates que você deve conhecer. Primeiro, o Soft Updates garante a consistência do sistema de arquivos no caso de uma falha, mas pode facilmente levar vários segundos ou até um minuto para atualizar o disco físico. Se o sistema falhar, os dados não gravados poderão ser perdidos. Em segundo lugar, os Soft Updates atrasam a liberação de blocos do sistema de arquivos. Se o sistema de arquivos raiz estiver quase cheio, a execução de uma atualização importante, como make installworld, poderá causar a falta de espaço do sistema de arquivos e a atualização falhará.

11.10.2.1. Mais detalhes sobre soft updates

As atualizações de metadados são atualizações para dados que não são de conteúdo, como inodes ou diretórios. Existem duas abordagens tradicionais para gravar os metadados de um sistema de arquivos em disco.

Historicamente, o comportamento padrão era gravar atualizações de metadados de forma síncrona. Se um diretório fosse alterado, o sistema aguardava até que a alteração fosse gravada no disco. Os buffers de dados do arquivo (conteúdo do arquivo) foram passados pelo cache de buffer e foram copiados para o disco posteriormente de maneira assíncrona. A vantagem dessa implementação é que ela opera com segurança. Se houver uma falha durante uma atualização, os metadados estarão sempre em um estado consistente. Um arquivo é criado completamente ou não é de todo. Se os blocos de dados de um arquivo não encontrarem saída do cache de buffer para o disco no momento da falha, o fsck(8) reconhece isso e repara o sistema de arquivos definindo o comprimento do arquivo como 0. Além disso, a implementação é clara e simples. A desvantagem é que as alterações nos metadados são lentas. Por exemplo, rm -r toca todos os arquivos em um diretório sequencialmente, mas cada alteração de diretório será gravada de forma síncrona no disco. Isso inclui atualizações para o próprio diretório, para a tabela de inode e possivelmente para blocos indiretos alocados pelo arquivo. Considerações semelhantes aplicam-se ao desenrolar hierarquias grandes usando tar -x.

A segunda abordagem é usar atualizações de metadados assíncronas. Este é o padrão para um sistema de arquivos UFS montado com mount -o async. Como todas as atualizações de metadados também são passadas pelo cache de buffer, elas serão mescladas com as atualizações dos dados de conteúdo do arquivo. A vantagem dessa implementação é que não há necessidade de esperar até que cada atualização de metadados seja gravada no disco, portanto, todas as operações que causam grandes quantidades de atualizações de metadados funcionam muito mais rápido do que no caso síncrono. Essa implementação ainda é clara e simples, portanto, há um baixo risco de erros se infiltrarem no código. A desvantagem é que não há garantia para um estado consistente do sistema de arquivos. Se houver uma falha durante uma operação que atualizou grandes quantidades de metadados, como uma falha de energia ou alguém pressionando o botão de reinicialização, o sistema de arquivos será deixado em um estado imprevisível. Não há oportunidade de examinar o estado do sistema de arquivos quando o sistema é reativado, pois os blocos de dados de um arquivo já podem ter sido gravados no disco enquanto as atualizações da tabela de inodes ou do diretório associado não foram. É impossível implementar um fsck(8) que é capaz de limpar o caos resultante porque as informações necessárias não estão disponíveis no disco. Se o sistema de arquivos foi danificado além do reparo, a única opção é reformatá-lo e restaurá-lo a partir do backup.

A solução usual para este problema é implementar dirty region logging, que também é chamado de journaling. As atualizações de metadados ainda são gravadas de forma síncrona, mas apenas em uma pequena região do disco. Mais tarde, eles são movidos para o local apropriado. Como a área de registro é uma região pequena e contígua no disco, não há longas distâncias para as cabeças de disco se moverem, mesmo durante operações pesadas, portanto, essas operações são mais rápidas do que as atualizações síncronas. Além disso, a complexidade da implementação é limitada, portanto, o risco de erros estarem presentes é baixo. Uma desvantagem é que todos os meta-dados são gravados duas vezes, uma vez na região de registro e uma vez no local apropriado, portanto, pode resultar em "piora" na performance. Por outro lado, em caso de falha, todas as operações de metadados pendentes podem ser rapidamente recuperadas ou concluídas a partir da área de registro depois que o sistema for ativado novamente, resultando em uma inicialização rápida do sistema de arquivos.

Kirk McKusick, o desenvolvedor do Berkeley FFS, resolveu esse problema com o Soft Updates. Todas as atualizações de meta-dados pendentes são mantidas na memória e gravadas no disco em uma sequência ordenada ("atualizações de metadados ordenadas"). Isso tem o efeito de que, no caso de operações pesadas de meta-dados, atualizações posteriores em um item "catch" as anteriores que ainda estão na memória e ainda não foram gravadas no disco. Todas as operações são geralmente executadas na memória antes da atualização ser gravada no disco e os blocos de dados são classificados de acordo com sua posição, de modo que não estarão no disco antes de seus meta-dados. Se o sistema travar, um "reenvio de log" implícito faz com que todas as operações que não foram gravadas no disco apareçam como se nunca tivessem acontecido. Um estado consistente do sistema de arquivos é mantido e parece ser o de 30 a 60 segundos antes. O algoritmo usado garante que todos os recursos em uso sejam marcados como tal em seus blocos e inodes. Após uma falha, o único erro de alocação de recursos que ocorre é que os recursos são marcados como "used", que são, na verdade, "free". O fsck(8) reconhece essa situação e libera os recursos que não são mais usados. É seguro ignorar o estado sujo do sistema de arquivos após uma falha forçando a montagem com mount -f. Para liberar recursos que podem não ser utilizados, O fsck(8) precisa ser executado posteriormente. Esta é a idéia por trás do fsck(8) em background: no momento da inicialização do sistema, apenas um snapshot do sistema de arquivos é gravado e o fsck(8) é executado posteriormente. Todos os sistemas de arquivos podem ser montados "sujos", para que a inicialização do sistema prossiga no modo multiusuário. Em seguida, o fsck(8) em background é planejado para todos os sistemas de arquivos em que isso é necessário, para liberar recursos que podem não ser utilizados. Os sistemas de arquivos que não usam Soft Updates ainda precisam executar o fsck(8) em primeiro plano de forma usual .

A vantagem é que as operações de meta-dados são quase tão rápidas quanto as atualizações assíncronas e são mais rápidas que o logging, que precisa escrever os meta-dados duas vezes. As desvantagens são a complexidade do código, um maior consumo de memória e algumas idiosincrasias. Depois de uma falha, o estado do sistema de arquivos parece ser um pouco mais "velho". Em situações onde a abordagem síncrona padrão teria causado a existencia de alguns arquivos de comprimento zero após o fsck(8), esses arquivos sequer chegam a existir com Soft Updates porque nem os metadados e nem o conteúdo do arquivo foram gravados no disco. O espaço em disco não é liberado até que as atualizações tenham sido gravadas no disco, o que pode ocorrer algum tempo depois de executar rm(1). Isso pode causar problemas ao instalar grandes quantidades de dados em um sistema de arquivos que não tenha espaço livre suficiente para armazenar todos os arquivos duas vezes.

11.11. Ajustando os Limites do Kernel

11.11.1. Limites de arquivos/processos

11.11.1.1. kern.maxfiles

A variável kern.maxfiles sysctl(8) pode ser aumentada ou diminuída com base nos requisitos do sistema. Essa variável indica o número máximo de descritores de arquivos no sistema. Quando a tabela do descritor de arquivos estiver cheia, o erro file: table is full aparecerá repetidamente no buffer de mensagem do sistema, que pode ser visualizado usando dmesg(8).

Cada arquivo aberto, socket ou fifo usa um descritor de arquivo. Um servidor de produção em larga escala pode facilmente exigir muitos milhares de descritores de arquivos, dependendo do tipo e número de serviços executados simultaneamente.

Em versões mais antigas do FreeBSD, o valor padrão de kern.maxfiles é derivado do maxusers no arquivo de configuração do kernel. O kern.maxfiles cresce proporcionalmente ao valor do maxusers. Ao compilar um kernel personalizado, considere configurar esta opção de configuração do kernel de acordo com o uso do sistema. A partir desse número, o kernel recebe a maioria dos seus limites predefinidos. Mesmo que uma máquina de produção não tenha 256 usuários simultâneos, os recursos necessários podem ser semelhantes a um servidor da Web de alta escala.

A variável read-only sysctl(8)kern.maxusers é dimensionada automaticamente na inicialização com base na quantidade de memória disponível no sistema, e pode ser determinado em tempo de execução, inspecionando o valor de kern.maxusers. Alguns sistemas requerem valores maiores ou menores de kern.maxusers e valores de 64, 128, e 256 não são incomuns. Ir acima de 256 não é recomendado, a menos que seja necessário um grande número de descritores de arquivos. Muitos dos valores ajustáveis definidos para seus padrões por kern.maxusers podem ser individualmente sobrescritos no tempo de inicialização ou em tempo de execução no /boot/loader.conf. Consulte loader.conf(5) e /boot/defaults/loader.conf para mais detalhes e algumas dicas.

Em versões mais antigas, o sistema ajustará automaticamente o maxusers se ele estiver definido como 0. . Ao configurar esta opção, configure o maxusers para pelo menos 4, especialmente se o sistema executar o Xorg ou se for usado para compilar software. A tabela mais importante definida por maxusers é o número máximo de processos, que é definido como 20 + 16 * maxusers. Se maxusers for definido como 1, só podem existir 36 processos simultâneos, incluindo 18 ou mais para que o sistema seja iniciado no boot ou 15 usado pelo Xorg. Até mesmo uma tarefa simples, como ler uma página de manual, iniciará nove processos para filtrar, descompactar e visualizar. Configurar o maxusers para 64 permite até 1044 processos simultâneos, o que deve ser suficiente para quase todos os usos. Se, no entanto, o erro for exibido ao tentar iniciar outro programa ou se um servidor estiver sendo executado com um grande número de usuários simultâneos, aumente o número e recompile.

O maxusers não limita o número de usuários que podem logar na máquina. Em vez disso, ele configura vários tamanhos de tabela para valores razoáveis, considerando o número máximo de usuários no sistema e quantos processos cada usuário executará.

11.11.1.2. kern.ipc.soacceptqueue

A variável kern.ipc.soacceptqueue do sysctl(8) limita o tamanho da fila de escuta para aceitar novas conexões TCP. O valor padrão de 128 é normalmente muito baixo para o manuseio robusto de novas conexões em um servidor Web com carga pesada. Para tais ambientes, recomenda-se aumentar este valor para 1024 ou superior. Um serviço como o sendmail(8), ou Apache pode limitar por ele mesmo o tamanho da fila de escuta, mas frequentemente terá uma diretiva em seu arquivo de configuração para ajustar o tamanho da fila. Filas de escuta grandes fazem um trabalho melhor evitando ataques de negação de serviço (Denial of Service - DoS).

11.11.2. Limites de rede

A opção de configuração do kernel NMBCLUSTERS determina a quantidade de Mbufs de rede disponível para o sistema. Um servidor com muito tráfego e um baixo número de Mbufs prejudicará o desempenho. Cada cluster representa aproximadamente 2K de memória, portanto, um valor de 1024 representa 2 megabytes de memória do kernel reservada para buffers de rede. Um cálculo simples pode ser feito para descobrir quantos são necessários. Um servidor web que suporte um maximo de 1000 conexões simultâneas onde cada conexão usa um buffer de envio de 16K e recebe 6K, requer aproximadamente 32 MB de buffers de rede para cobrir o servidor web. Uma boa regra é multiplicar por 2, então 2x32MB / 2KB = 64MB / 2kB = 32768. Valores entre 4096 e 32768 são recomendados para máquinas com maiores quantidades de memória. Nunca especifique um valor arbitrariamente alto para este parâmetro, pois isso pode levar a uma falha no tempo de inicialização. Para observar o uso do cluster de rede, use a opção -m com o netstat(1).

A variável kern.ipc.nmbclusters deve ser usada para configurar isso no momento da inicialização. Apenas as versões mais antigas do FreeBSD irão requerer o uso da opção NMBCLUSTERS no config(8) do kernel.

Para servidores ocupados que fazem uso extensivo da chamada de sistema sendfile(2), pode ser necessário aumentar o número de buffers sendfile(2) através da opção de configuração do kernel NSFBUFS ou definindo seu valor no /boot/loader.conf (veja loader(8) para detalhes). Um indicador comum de que esse parâmetro precisa ser ajustado é quando os processos são vistos no estado sfbufa. A variável sysctl(8)kern.ipc.nsfbufs é somente de leitura. Este parâmetro nominalmente escala com o kern.maxusers, no entanto, pode ser necessário ajustar de acordo.

Mesmo que um socket tenha sido marcado como non-blocking, chamar o sendfile(2) em um socket non-blocking pode resultar no bloqueio do sendfile(2) até que sejam disponibilizados struct sf_buf suficientes.

11.11.2.1. net.inet.ip.portrange.*

As variáveis net.inet.ip.portrange.* do sysctl(8) controlam os intervalos de números de porta automaticamente ligados a sockets TCP e UDP. Existem três intervalos: um intervalo baixo, um intervalo padrão e um intervalo alto. A maioria dos programas de rede usam o intervalo padrão que é controlado por net.inet.ip.portrange.first e net.inet.ip.portrange.last, cujo padrão é 1024 e 5000, respectivamente. Intervalos de porta ligados são usados para conexões de saída e é possível executar o sistema fora das portas sob certas circunstâncias. Isso ocorre mais comumente ao executar um proxy web com muita carga. O intervalo de portas não é um problema ao executar um servidor que lida principalmente com conexões de entrada, como um servidor Web, ou que tenha um número limitado de conexões de saída, como um mail relay. Para situações em que há falta de portas, é recomendado aumentar modestamente o net.inet.ip.portrange.last. Um valor de 10000, 20000 ou 30000 pode ser razoável. Considere os efeitos do firewall ao alterar o intervalo de portas. Alguns firewalls podem bloquear grandes intervalos de portas, geralmente portas de numeração baixa, e esperam que os sistemas usem intervalos mais altos de portas para conexões de saída. Por esta razão, não é recomendado que o valor de net.inet.ip.portrange.first seja diminuído.

11.11.2.2. Produto de atraso de largura de banda TCP

A limitação do produto de atraso de largura de banda TCP pode ser ativada configurando a variável net.inet.tcp.inflight.enable do sysctl(8) para 1. Isso instrui o sistema a tentar calcular o produto de atraso de largura de banda para cada conexão e a limitar a quantidade de dados na fila para envio à rede para a quantidade necessária para manter o rendimento ideal.

Esse recurso é útil ao servir dados sobre modems, Gigabit Ethernet, links WAN de alta velocidade ou qualquer outro link com um produto de atraso de largura de banda alta, especialmente quando também estiver usando dimensionamento de janela ou quando uma janela de envio grande tiver sido configurado. Ao habilitar essa opção, defina também a variável net.inet.tcp.inflight.debug para 0 para desabilitar a depuração. Para uso em produção, definir a variável net.inet.tcp.inflight.min para pelo menos 6144 pode ser benéfico. Definir valores mínimos altos pode efetivamente desabilitar a limitação de largura de banda, dependendo do link. O recurso de limitação reduz a quantidade de dados acumulados nas rotas intermediárias e nas filas de pacotes de switchs e reduz a quantidade de dados acumulados na fila de interface do host local. Com menos pacotes enfileirados, as conexões interativas, especialmente os modems lentos, funcionarão com menores Round Trip Times. Esse recurso afeta apenas a transmissão de dados do lado do servidor, como o upload. Não tem efeito na recepção ou download de dados.

Ajustar o valor da variável net.inet.tcp.inflight.stab não é recomendado. Este parâmetro é padronizado para 20, representando 2 pacotes máximos adicionados ao cálculo da janela de produto de atraso de largura de banda. A janela adicional é necessária para estabilizar o algoritmo e melhorar a capacidade de resposta às mudanças de condições, mas também pode resultar em um ping(8) mais alto em links lentos , embora ainda muito menor do que sem o algoritmo inflight. Nesses casos, tente reduzir esse parâmetro para 15, 10 ou 5 e reduza a variável net.inet.tcp.inflight.min para um valor como 3500 para obter o efeito desejado. A redução desses parâmetros deve ser feita apenas como último recurso.

11.11.3. Memória virtual

11.11.3.1. kern.maxvnodes

Um vnode é a representação interna de um arquivo ou diretório. Aumentar o número de vnodes disponíveis para o sistema operacional reduz a I/O do disco. Normalmente, isso é tratado pelo sistema operacional e não precisa ser alterado. Em alguns casos em que o I/O de disco é um gargalo e o sistema está ficando sem vnodes, essa configuração precisa ser aumentada. A quantidade de RAM inativa e livre precisará ser levada em conta.

Para ver o número atual de vnodes em uso:

# sysctl vfs.numvnodes
vfs.numvnodes: 91349

Para ver o máximo de vnodes:

# sysctl kern.maxvnodes
kern.maxvnodes: 100000

Se o uso atual do vnode estiver próximo do máximo, tente aumentar o kern.maxvnodes por um valor de 1000. Fique de olho no número de vfs.numvnodes. Se subir até o máximo novamente, o kern.maxvnodes precisará ser aumentado ainda mais. Caso contrário, uma mudança no uso da memória como reportado pelo top(1) deve estar visível e mais memória deve estar ativa.

11.12. Adicionando Espaço de Swap

Às vezes, um sistema requer mais espaço de swap. Esta seção descreve dois métodos para aumentar o espaço de troca: adicionar swap a uma partição existente ou em um novo disco rígido e criar um arquivo de swap em uma partição existente.

Para obter informações sobre como criptografar o espaço de swap, quais opções existem e por que isso deve ser feito, consulte Criptografando Swap.

11.12.1. Swap em um novo disco rígido ou partição existente

Adicionar um novo disco rígido para swap resulta em um melhor desempenho do que usando uma partição em uma unidade existente. A configuração de partições e discos rígidos é explicada em Adicionando Discos enquanto Criando o layout da partição discute layouts de partições e considerações sobre o tamanho de partições de swap.

Use o swapon para adicionar uma partição swap ao sistema. Por exemplo:

# swapon /dev/ada1s1b

É possível usar qualquer partição que não esteja atualmente montada, mesmo que já contenha dados. O uso do swapon em uma partição que contém dados sobrescreverá e destruirá esses dados. Certifique-se de que a partição a ser incluída como swap seja realmente a partição pretendida antes de executar o swapon.

Para adicionar automaticamente essa partição swap na inicialização, adicione uma entrada ao /etc/fstab:

/dev/ada1s1b	none	swap	sw	0	0

Veja fstab(5) para uma explicação das entradas do /etc/fstab. Maiores informações sobre swapon podem ser encontradas em swapon(8).

11.12.2. Criando um arquivo de swap

Esses exemplos criam um arquivo de swap de 512M chamado /usr/swap0 em vez de usar uma partição.

O uso de arquivos de swap requer que o módulo necessário pelo md(4) tenha sido embutido no kernel ou tenha sido carregado antes do swap ser ativado. Veja Configurando o kernel do FreeBSD para informações sobre como compilar um kernel customizado.

Exemplo 26. Criando um arquivo de swap
  1. Crie o arquivo de swap:

    # dd if=/dev/zero of=/usr/swap0 bs=1m count=512
  2. Defina as permissões adequadas no novo arquivo:

    # chmod 0600 /usr/swap0
  3. Informe o sistema sobre o arquivo de swap adicionando uma linha ao /etc/fstab:

    md99	none	swap	sw,file=/usr/swap0,late	0	0

    O dispositivo md99 do md(4) é usado, deixando números de dispositivos inferiores disponíveis para uso interativo.

  4. O espaço de swap será adicionado na inicialização do sistema. Para adicionar espaço de swap imediatamente, use o swapon(8):

    # swapon -aL

11.13. Gerenciamento de energia e recursos

É importante utilizar recursos de hardware de maneira eficiente. O gerenciamento de energia e recursos permite que o sistema operacional monitore os limites do sistema e, possivelmente, forneça um alerta se a temperatura do sistema aumentar inesperadamente. Uma especificação anterior para fornecer gerenciamento de energia foi o recurso Gerenciamento Avançado de Energia (Advanced Power Management - APM). O APM controla o uso de energia de um sistema com base em sua atividade. No entanto, era difícil e inflexível para os sistemas operacionais gerenciar o uso de energia e as propriedades térmicas de um sistema. O hardware era gerenciado pelo BIOS e o usuário tinha configuração e visibilidade limitadas nas configurações de gerenciamento de energia. O APMBIOS fornecido é específico da plataforma de hardware. Um driver APM no sistema operacional intermedia o acesso à interface do software APM, que permite o gerenciamento dos níveis de energia.

Existem quatro problemas principais no APM. Primeiro, o gerenciamento de energia é feito pelo BIOS específico do fornecedor, separado do sistema operacional. Por exemplo, o usuário pode definir valores de tempo ocioso para um disco rígido no APMBIOS para que, quando excedido, o BIOS diminua o disco rígido sem o consentimento do sistema operacional. Segundo, a lógica do APM é incorporada no BIOS e opera fora do escopo do sistema operacional. Isso significa que os usuários só podem corrigir problemas no APMBIOS, fazendo o flash de um novo ROM, que é um procedimento perigoso com potencial para deixar o sistema em um estado irrecuperável se falhar. Terceiro, o APM é uma tecnologia específica do fornecedor, o que significa que há muita duplicidade de esforços e que os erros encontrados no BIOS de um fornecedor podem não serem resolvidos em outros. Por fim, o APMBIOS não tinha espaço suficiente para implementar uma política de energia sofisticada ou que pudesse se adaptar bem ao propósito da máquina.

O BIOS plug and play (PNPBIOS) não era confiável em muitas situações. O PNPBIOS é uma tecnologia de 16 bits, portanto, o sistema operacional precisa usar a emulação de 16 bits para fazer interface com os métodos PNPBIOS. O FreeBSD fornece um driver APM, pois o APM ainda deve ser usado para sistemas fabricados antes do ano 2000. O driver está documentado em apm(4).

O sucessor do APM é a Interface Avançada de Configuração e Energia (Advanced Configuration and Power Interface - ACPI). O ACPI é um padrão escrito por uma aliança de fornecedores para fornecer uma interface para recursos de hardware e gerenciamento de energia. É um elemento-chave na configuração direcionada do sistema operacional e gerenciamento de energia, pois proporciona mais controle e flexibilidade ao sistema operacional.

Este capítulo demonstra como configurar o ACPI no FreeBSD. Em seguida, ele oferece algumas dicas sobre como depurar o ACPI e como enviar um relatório de problemas contendo informações de depuração para que os desenvolvedores possam diagnosticar e corrigir problemas no ACPI.

11.13.1. Configurando o ACPI

No FreeBSD, o driver acpi(4) é carregado por padrão na inicialização do sistema e não deve ser compilado no kernel. Este driver não pode ser descarregado após a inicialização porque o barramento do sistema o utiliza para várias interações de hardware. No entanto, se o sistema estiver com problemas, o ACPI pode ser desativado completamente ao reinicializar após a configurar hint.acpi.0.disabled="1" no /boot/loader.conf ou definindo esta variável no prompt do loader, como descrito em Estágio três.

O ACPI e o APM não podem coexistir e devem ser usados separadamente. O último a ser carregado terminará se o driver perceber que o outro já está sendo executado.

O ACPI pode ser usado para colocar o sistema em modo de suspensão com o acpiconf, a opção -s e um número de 1 a 5. A maioria dos usuários só precisa de 1 (suspensão rápida para RAM) ou 3 (suspender para RAM). A opção 5 executa um soft-off que é o mesmo que executar halt -p.

Outras opções estão disponíveis usando o sysctl. Consulte acpi(4) e acpiconf(8) para maiores informações.

11.13.2. Problemas comuns

O ACPI está presente em todos os computadores modernos que estão em conformidade com as arquiteturas ia32 (x86) e amd64 (AMD). O padrão completo tem muitos recursos, incluindo gerenciamento de desempenho da CPU, controle de planos de energia, zonas térmicas, vários sistemas de bateria, controladores incorporados e enumeração de barramento. A maioria dos sistemas implementa menos que o padrão completo. Por exemplo, um sistema de desktop geralmente só implementa a enumeração de barramento, enquanto um laptop também pode ter suporte a refrigeração e gerenciamento de bateria. Os laptops também têm suspensão e retomada, com sua própria complexidade associada.

Um sistema compatível com ACPI possui vários componentes. Os fornecedores de BIOS e chipset fornecem várias tabelas fixas, como FADT, na memória que especificam coisas como o mapa APIC (usado para SMP), registros de configuração e valores simples de configuração. Além disso, uma tabela de bytecode, a Tabela de Descrição de Sistema Diferenciada DSDT, especifica um espaço de nome de dispositivos e métodos em forma de árvore.

O driver ACPI deve analisar as tabelas fixas, implementar um interpretador para o bytecode e modificar os drivers de dispositivos e o kernel para aceitar informações do subsistema ACPI. Para o FreeBSD, a Intel™ forneceu um interpretador (ACPI-CA) que é compartilhado com o Linux™ e o NetBSD. O caminho para o código-fonte ACPI-CA é src/sys/contrib/dev/acpica. O código especifico que permite que o ACPI-CA funcione no FreeBSD está em src/sys/dev/acpica/Osd. Finalmente, drivers que implementam vários dispositivos ACPI são encontrados em src/sys/dev/acpica.

Para que o ACPI funcione corretamente, todas as partes devem funcionar corretamente. Aqui estão alguns problemas comuns, em ordem de freqüência em que ocorrem, e algumas possíveis soluções ou correções. Se uma correção não resolver o problema, consulte Obtendo e enviando informações de depuração para obter instruções sobre como enviar um relatório de bug.

11.13.2.1. Problemas do mouse

Em alguns casos, retomar a partir de uma operação de suspensão fará com que o mouse falhe. Um work around conhecido é adicionar hint.psm.0.flags="0x3000" ao /boot/loader.conf.

11.13.2.2. Suspend/Resume

O ACPI tem três estados de suspensão para RAM (STR), S1-S3, e um de suspensão de estado para disco (STD), chamado S4. O STD pode ser implementado de duas maneiras separadas. O S4 BIOS é uma suspensão para disco auxiliada pelo BIOSe o S4OS é implementado inteiramente pelo sistema operacional. O estado normal em que o sistema se encontra quando conectado, mas não ligado, é "soft off" (S5).

Use o sysctl hw.acpi para verificar os itens relacionados à suspensão. Estes resultados de exemplo são de um Thinkpad:

hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0

Use o acpiconf -s para testar os estados S3, S4 e S5. Um s4bios de um (1) indica suporte ao S4 BIOS em vez do S4 suportado pelo sistema operacional.

Ao testar as ações de suspend/resume, inicie com o S1, se suportado. É mais provável que esse estado funcione, pois não requer muito suporte ao driver. Ninguém implementou S2, que é similar ao S1. Em seguida, tente o S3. Este é o estado mais profundo do STR e requer muito suporte ao driver para reinicializar corretamente o hardware.

Um problema comum com suspend/resume é que muitos drivers de dispositivo não salvam, restauram ou reinicializam seu firmware, registros ou memória do dispositivo adequadamente. Como primeira tentativa de depuração do problema, tente:

# sysctl debug.bootverbose=1
# sysctl debug.acpi.suspend_bounce=1
# acpiconf -s 3

Esse teste emula o ciclo de suspend/resume de todos os drivers de dispositivo sem entrar realmente no estado S3. Em alguns casos, problemas como perder o estado do firmware, tempo limite do watchdog do dispositivo e tentar novamente para sempre podem ser capturados com esse método. Note que o sistema não entrará realmente no estado S3, o que significa que os dispositivos não perderão energia, e muitos funcionarão bem mesmo se os métodos suspend/resume estiverem totalmente ausentes, ao contrário do real estado S3.

Casos mais difíceis requerem hardware adicional, como uma porta serial e um cabo para depuração através de um console serial, uma porta Firewire e um cabo para o uso do dcons(4) e habilidades de depuração do kernel.

Para ajudar a isolar o problema, descarregue o maior número possível de drivers. Se funcionar, diminua o driver que é o problema carregando os drivers até que ele falhe novamente. Normalmente, drivers binários como nvidia.ko, drivers de exibição e USB terão mais problemas, enquanto as interfaces Ethernet normalmente funcionam bem. Se os drivers puderem ser carregados e descarregados adequadamente, automatize isso colocando os comandos apropriados em /etc/rc.suspend e /etc/rc.resume. Tente configurar o hw.acpi.reset_video para 1 se a tela estiver desarrumada após a retomada. Tente definir valores mais longos ou mais curtos para hw.acpi.sleep_delay para ver se isso ajuda.

Tente carregar uma distribuição recente do Linux™ para ver se o suspend/resume funciona no mesmo hardware. Se funciona no Linux™, é provável que seja um problema no driver do FreeBSD. Descobrir qual driver causa o problema ajudará os desenvolvedores a corrigir o problema. Como os mantenedores do ACPI raramente mantêm outros drivers, como som ou ATA, qualquer problema de driver também deve ser postado na lista freebsd-current e enviada para o mantenedor do driver. Os usuários avançados podem incluir os printf(3)s de debug do driver problemático para rastrear onde, em sua função de reinício, ele é interrompido.

Por fim, tente desativar o ACPI e ativar o APM. Se o comando suspend/resume funcionar com APM, use o APM, especialmente em hardware mais antigo (anterior a 2000). Demorou algum tempo para que os fornecedores obtivessem suporte ACPI correto e os hardwares antigos são mais prováveis de terem problemas de BIOS com ACPI.

11.13.2.3. Travamentos do sistema

A maioria dos travamentos do sistema é resultado de interrupções perdidas ou de uma tempestade de interrupções. Chipsets podem ter problemas com base na inicialização, como o BIOS configura as interrupções antes da correção da tabela APIC (MADT) e o roteamento do sistema de controle de interrupções (SCI).

Tempestades de interrupção podem ser distinguidas de interrupções perdidas, verificando a saída do vmstat -i e observando a linha que possui acpi0. Se o contador está aumentando em mais de um par por segundo, há uma tempestade de interrupção. Se o sistema parece travado, tente acessar o DDB (CTRL+ALT+ESC no console) e digite show interrupts.

Ao lidar com problemas de interrupção, tente desativar o suporte ao APIC com hint.apic.0.disabled="1" no /boot/loader.conf .

11.13.2.4. Panics

Os panics são relativamente raros para ACPI e são a prioridade máxima a ser corrigida. O primeiro passo é isolar as etapas para reproduzir o panic, se possível, e obter um backtrace. Siga as instruções para habilitar options DDB e configurar um console serial em Entrando no Depurador DDB da Linha Serial ou configurar uma partição de despejo. Para obter um backtrace no DDB, use tr. Ao escrever o backtrace, obtenha pelo menos as cinco últimas e as cinco principais linhas do rastro.

Em seguida, tente isolar o problema inicializando com ACPI desabilitado. Se isso funcionar, isole o subsistema ACPI usando vários valores de debug.acpi.disable. Veja acpi(4) para alguns exemplos.

11.13.2.5. O sistema é ativado após a sua suspensão ou desligamento

Primeiro, tente definir hw.acpi.disable_on_poweroff="0" no /boot/loader.conf. Isso impede que a ACPI desative vários eventos durante o processo de desligamento. Alguns sistemas precisam desse valor definido como 1 (o padrão) pelo mesmo motivo. Isso geralmente corrige o problema de um sistema ser ativado espontaneamente após uma suspensão ou desligamento.

11.13.2.6. BIOS contém Bytecode com bugs

Alguns fornecedores de BIOS fornecem bytecode incorreto ou com bugs. Isso geralmente é manifestado por mensagens do console do kernel como esta:

ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
(Node 0xc3f6d160), AE_NOT_FOUND

Geralmente, esses problemas podem ser resolvidos com a atualização do BIOS para a revisão mais recente. A maioria das mensagens do console é inofensiva, mas se houver outros problemas, como o status da bateria não estar funcionando, essas mensagens são um bom lugar para começar a procurar por problemas.

11.13.3. Substituindo o padrão AML

O bytecode do BIOS, conhecido como ACPI Machine Language (AML), é compilado de uma linguagem de origem chamada ACPI Source Language (ASL). O AML é encontrado na tabela conhecida como Tabela de Descrição do Sistema Diferenciado (Differentiated System Description Table - DSDT).

O objetivo do FreeBSD é que todos trabalhem com ACPI sem qualquer intervenção do usuário. Soluções alternativas ainda estão sendo desenvolvidas para erros comuns feitos pelos fornecedores de BIOS. O interpretador Microsoft™ (acpi.sys e acpiec.sys) não verifica rigorosamente a conformidade com o padrão e, portanto, muitos fornecedores de BIOS que testam apenas ACPI sob Windows™ nunca corrigem seu ASL. Os desenvolvedores do FreeBSD continuam a identificar e documentar qual comportamento não padrão é permitido pelo interpretador da Microsoft™ para replicá-lo para que o FreeBSD possa funcionar sem forçar os usuários a corrigir o ASL.

Para ajudar a identificar o comportamento de bugs e possivelmente corrigi-lo manualmente, uma cópia pode ser feita do ASL do sistema. Para copiar o ASL do sistema para um nome de arquivo especificado, use acpidump com -t, para mostrar o conteúdo das tabelas fixas e -d, para desmontar o AML:

# acpidump -td > my.asl

Algumas versões de AML assumem que o usuário está executando o Windows™. Para sobrescrever isto, defina hw.acpi.osname="Windows 2009" no /boot/loader.conf, usando a mais recente versão do Windows™ listada no ASL.

Outras soluções alternativas podem exigir que o my.asl seja personalizado. Se este arquivo for editado, compile o novo ASL usando o seguinte comando. Os avisos geralmente podem ser ignorados, mas erros são bugs que geralmente impedem que o ACPI funcione corretamente.

# iasl -f my.asl

Incluir -f força a criação do AML, mesmo que haja erros durante a compilação. Alguns erros, como a falta de declarações de retorno, são automaticamente contornados pelo interpretador do FreeBSD.

O nome do arquivo de saída padrão para iasl é DSDT.aml. Carregue este arquivo em vez da cópia com bugs do BIOS, que ainda está presente na memória flash, editando o /boot/loader.conf como segue:

acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/DSDT.aml"

Certifique-se de copiar o DSDT.aml para /boot e, em seguida, reinicialize o sistema. Se isso resolver o problema, envie um diff(1) do antigo e novo ASL para a lista freebsd-acpi para que os desenvolvedores possam contornar o comportamento de bugs no acpica.

11.13.4. Obtendo e enviando informações de depuração

O driver ACPI possui um recurso de depuração flexível. Um conjunto de subsistemas e o nível de detalhamento podem ser especificados. Os subsistemas a serem depurados são especificados como camadas e são divididos em componentes (ACPI_ALL_COMPONENTS) e suporte de hardware ACPI (ACPI_ALL_DRIVERS). O detalhamento da saída de depuração é especificado como o nível e varia de apenas erros de relatório (ACPI_LV_ERROR) para tudo (ACPI_LV_VERBOSE). O nível é uma máscara de bits, por isso, várias opções podem ser definidas de uma só vez, separadas por espaços. Na prática, um console serial deve ser usado para registrar a saída para que ela não seja perdida quando o buffer de mensagem do console for liberado. Uma lista completa das camadas e níveis individuais é encontrada em acpi(4).

A saída de depuração não está ativada por padrão. Para ativá-la, adicione as opções ACPI_DEBUG ao arquivo de configuração do kernel personalizado se ACPI estiver compilado no kernel. Adicione ACPI_DEBUG=1 ao /etc/make.conf para ativá-lo globalmente. Se um módulo for usado em vez de um kernel personalizado, recompile apenas o módulo acpi.ko como segue:

# cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1

Copie o acpi.ko compilado para /boot/kernel e adicione o nível e camada desejados ao /boot/loader.conf. As entradas neste exemplo permitem mensagens de depuração para todos os componentes e drivers de hardware ACPI e mensagens de erro de saída no nível menos detalhado:

debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
debug.acpi.level="ACPI_LV_ERROR"

Se as informações necessárias forem acionadas por um evento específico, como suspend e resume, não modifique o /boot/loader.conf. Em vez disso, use o sysctl para especificar o layer e o nível após inicializar e preparar o sistema para o evento específico. As variáveis que podem ser definidas usando sysctl são nomeadas da mesma forma que os parâmetros no /boot/loader.conf.

Depois que as informações de depuração forem coletadas, elas podem ser enviadas para a lista freebsd-acpi para que possam ser usadas pelos mantenedores do FreeBSD ACPI para identificar a causa raiz do problema e desenvolver uma solução.

Antes de enviar as informações de depuração para esta lista, certifique-se de que a versão mais recente do BIOS esteja instalada e, se disponível, a versão do firmware do controlador incorporado.

Ao enviar um relatório de problemas, inclua as seguintes informações:

  • Descrição do comportamento de bugs, incluindo tipo de sistema, modelo e qualquer coisa que faça com que o erro apareça. Explique com a maior precisão possível quando o bug começou a ocorrer se for novo.

  • A saída do dmesg após executar boot -v, incluindo quaisquer mensagens de erro geradas pelo bug.

  • A saída dmesg do boot -v com o ACPI desabilitado, se a desativação do ACPI ajudar a corrigir o problema.

  • Saída do sysctl hw.acpi. Isso lista quais recursos o sistema oferece.

  • A URL para uma versão do ASL do sistema hospedada na web. Não envie o ASL diretamente para a lista, pois pode ser muito grande. Gere uma cópia do ASL executando este comando:

    # acpidump -dt > name-system.asl

    Substitua o nome de login para name e fabricante/modelo para system. Por exemplo, use njl-FooCo6000.asl.

A maioria dos desenvolvedores do FreeBSD assina a lista de discussão FreeBSD-CURRENT, mas deve-se enviar os problemas para a lista freebsd-acpi para ter certeza de que ele será visto. Seja paciente ao esperar por uma resposta. Se o bug não for imediatamente aparente, envie um relatório de bug. Ao inserir um PR, inclua as mesmas informações solicitadas acima. Isso ajuda os desenvolvedores a rastrear o problema e resolvê-lo. Não envie um PR sem enviar primeiro um e-mail para a lista freebsd-acpi pois é provável que o problema já tenha sido relatado antes.

11.13.5. Referências

Mais informações sobre ACPI podem ser encontradas nos seguintes locais:

Capítulo 12. O processo de inicialização do FreeBSD

12.1. Sinopse

O processo de iniciar um computador e carregar o sistema operacional é chamado de "processo de bootstrap", ou de "inicialização". O processo de boot do FreeBSD fornece uma grande flexibilidade na personalização do que acontece quando o sistema é iniciado, incluindo a capacidade de selecionar diferentes sistemas operacionais instalados no mesmo computador, diferentes versões do mesmo sistema operacional ou um kernel instalado diferente.

Este capítulo detalha as opções de configuração que podem ser definidas. Ele demonstra como personalizar o processo de inicialização do FreeBSD, incluindo tudo o que acontece até que o kernel do FreeBSD tenha iniciado, procurado por dispositivos e iniciado o init(8). Isso ocorre quando a cor do texto das mensagens de inicialização muda de branco brilhante para cinza.

Depois de ler este capítulo, você reconhecerá:

  • Os componentes do sistema de boot do FreeBSD e como eles interagem.

  • As opções que podem ser passadas para os componentes no bootstrap do FreeBSD para controlar o processo de inicialização.

  • Como configurar uma tela personalizada de inicialização.

  • O básico da configuração de device hints.

  • Como inicializar no modo de usuário único e multiusuário e como encerrar corretamente um sistema FreeBSD.

Este capítulo descreve apenas o processo de inicialização do FreeBSD rodando em sistemas x86 e amd64.

12.2. Processo de Inicialização do FreeBSD

Ligar um computador e iniciar o sistema operacional representa um dilema interessante. Por definição, o computador não sabe como fazer nada até que o sistema operacional seja iniciado. Isso inclui executar programas a partir do disco. Se o computador não pode executar um programa a partir do disco sem o sistema operacional e os programas do sistema operacional estão no disco, como o sistema operacional é iniciado?

Este problema é semelhante ao do livro As Aventuras do Barão de Munchausen. Um personagem tinha caído no meio de um bueiro, e se retirou agarrando suas botas e levantando. Nos primeiros dias da computação, o termo bootstrap era aplicado ao mecanismo usado para carregar o sistema operacional. Desde então, foi encurtado para "booting".

No hardware x86, o Sistema Básico de Entrada/Saída (BIOS) é responsável por carregar o sistema operacional. O BIOS procura no disco rígido pelo Master Boot Record (MBR), que deve estar localizado em um local específico do disco. O BIOS tem conhecimento suficiente para carregar e executar o MBR, e assume que o MBR pode então executar o restante das tarefas envolvidas no carregamento do sistema operacional, possivelmente com a ajuda do BIOS.

O FreeBSD permite inicializar a partir do padrão mais antigo do MBR e da nova Tabela de Partição GUID (GPT). O particionamento GPT geralmente é encontrado em computadores com a Interface de Firmware Unificada e Extensivel (UEFI). No entanto, o FreeBSD pode inicializar a partir de partições de GPT mesmo em máquinas com apenas BIOS legado com o gptboot(8). O trabalho está em andamento para fornecer a inicialização direta a partir do UEFI.

O código dentro do MBR é normalmente chamado de gerenciador de inicialização, especialmente quando ele interage com o usuário. O gerenciador de inicialização geralmente tem mais código na primeira faixa do disco ou dentro do sistema de arquivos. Exemplos de gerenciadores de inicialização incluem o gerenciador de boot padrão do FreeBSD boot0, também chamado Boot Easy, e o Grub, que é usado por muitas distribuições Linux™.

Se apenas um sistema operacional estiver instalado, o MBR procura pelo primeiro slice inicializável (ativo) no disco e, em seguida, executa o código nesse slice para carregar o restante do sistema operacional. Quando vários sistemas operacionais estão presentes, um gerenciador de inicialização diferente pode ser instalado para exibir uma lista de sistemas operacionais para que o usuário possa selecionar um para inicializar.

O restante do sistema de boot do FreeBSD é dividido em três estágios. O primeiro estágio sabe apenas o suficiente para colocar o computador em um estado específico e executar o segundo estágio. O segundo estágio pode fazer um pouco mais, antes de executar o terceiro estágio. O terceiro estágio termina a tarefa de carregar o sistema operacional. O trabalho é dividido em três etapas porque o MBR coloca limites no tamanho dos programas que podem ser executados nos estágios um e dois. Encadear as tarefas juntas permite que o FreeBSD forneça um carregador mais flexível.

O kernel é então iniciado e começa a sondar os dispositivos e inicializá-los para uso. Quando o processo de inicialização do kernel é finalizado, o kernel passa o controle para o processo de usuário init(8), que garante que os discos estejam em estado utilizável, inicia a configuração de recursos no nível de usuário que monta sistemas de arquivos, configura placas de rede para se comunicar na rede e inicia os processos que foram configurados para serem executados na inicialização.

Esta seção descreve esses estágios em mais detalhes e demonstra como interagir com o processo de inicialização do FreeBSD.

12.2.1. O gerenciador de inicialização

O código do gerenciador de inicialização no MBR é às vezes chamado de estágio zero do processo de inicialização. Por padrão, o FreeBSD usa o gerenciador de boot boot0.

O MBR instalado pelo instalador do FreeBSD é baseado no /boot/boot0. O tamanho e a capacidade do boot0 são restritos a 446 bytes devido à tabela de slices e ao identificador 0x55AA no final do MBR. Se o boot0 e vários sistemas operacionais estiverem instalados, uma mensagem semelhante a este exemplo será exibida no momento da inicialização:

Exemplo 27. Captura de tela do boot0
F1 Win
F2 FreeBSD

Default: F2

Outros sistemas operacionais sobrescreverão um MBR existente se forem instalados após o FreeBSD. Se isto acontecer, ou para substituir o MBR existente com o MBR do FreeBSD, use o seguinte comando:

# fdisk -B -b /boot/boot0 device

onde device é o disco de inicialização, como ad0 para o primeiro disco IDE, ad2 para o primeiro disco IDE em um segundo controlador IDE, ou da0 para o primeiro disco SCSI. Para criar uma configuração personalizada do MBR, consulte boot0cfg(8).

12.2.2. Estágio Um e Estágio Dois

Conceitualmente, o primeiro e o segundo estágios fazem parte do mesmo programa na mesma área do disco. Por causa das restrições de espaço, eles foram divididos em dois, mas são sempre instalados juntos. Eles são copiados do combinado /boot/boot pelo instalador do FreeBSD ou pelo bsdlabel.

Estes dois estágios estão localizados fora do sistema de arquivos, na primeira trilha do slice de inicialização, começando pelo primeiro setor. É ali onde o boot0, ou qualquer outro gerenciador de inicialização, espera encontrar um programa para executar, o qual continuará o processo de inicialização.

O primeiro estágio, boot1, é muito simples, pois pode ter apenas 512 bytes de tamanho. Ele sabe o suficiente sobre o FreeBSD bsdlabel, que armazena informações sobre o slice, para localizar e executar o boot2.

O estágio dois, boot2, é um pouco mais sofisticado, e entende o sistema de arquivos do FreeBSD o suficiente para encontrar arquivos. Ele pode fornecer uma interface simples para escolher o kernel ou loader para ser executado. Ele executa o loader, que é muito mais sofisticado e fornece um arquivo de configuração de inicialização. Se o processo de inicialização for interrompido no estágio dois, a seguinte tela interativa será exibida:

Exemplo 28. Captura de tela do boot2
>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:

Para substituir o boot1 e boot2 instalados, use o bsdlabel, onde diskslice é o disco e o slice para inicializar, como ad0s1 para o primeiro slice no primeiro disco IDE:

# bsdlabel -B diskslice

Se apenas o nome do disco for usado, como ad0, o bsdlabel criará o disco no "modo perigosamente dedicado", sem slices. Esta provavelmente não é a ação desejada, então verifique novamente o diskslice antes de pressionar Return.

12.2.3. Estágio três

O loader é o estágio final do processo de bootstrap de três estágios. Ele está localizado no sistema de arquivos, geralmente como /boot/loader.

O loader é projetado como um método interativo para configuração, usando um conjunto de comandos embutidos, auxiliado por um interpretador mais poderoso que possui um conjunto de comandos mais complexo.

Durante a inicialização, o loader procurará por um console e por discos, e descobrirá de qual disco está sendo inicializado. Ele irá definir as variáveis de acordo, e um interpretador é iniciado onde os comandos do usuário podem ser passados a partir de um script ou usados interativamente.

O loader então lerá o /boot/loader.rc, que por padrão lê o /boot/defaults/loader.conf que define padrões razoáveis para variáveis e lê o /boot/loader.conf para mudanças locais nessas variáveis. O loader.rc então age sobre essas variáveis, carregando os módulos e o kernel selecionados.

Finalmente, por padrão, o loader realiza uma espera de 10 segundos por pressionamentos de teclas, e inicializa o kernel se não for interrompido. Se interrompido, o usuário é apresentado a um prompt que compreende o conjunto de comandos, no qual o usuário pode ajustar variáveis, descarregar todos os módulos, carregar módulos e finalmente inicializar ou reinicializar. Comandos Internos do Loader lista os comandos do loader mais usados. Para uma discussão completa de todos os comandos disponíveis, consulte loader(8).

Tabela 9. Comandos Internos do Loader
VariávelDescrição

autoboot segundos

Prossegue para inicializar o kernel se não for interrompido dentro do intervalo de tempo dado, em segundos. Ele exibe uma contagem regressiva e o intervalo de tempo padrão é de 10 segundos.

boot [-options] [kernelname]

Imediatamente prossegue a inicialização do kernel, com qualquer opção especificada ou nome do kernel. Fornecer um nome de kernel na linha de comando só é aplicável depois que um unload foi emitido. Caso contrário, o kernel previamente carregado será usado. Se o nomedokernel não estiver qualificado, ele será pesquisado em /boot/kernel e /boot/modules.

boot-conf

Passa pela mesma configuração automática de módulos baseada em variáveis especificadas, mais comumente kernel. Isso só faz sentido se unload for usado primeiro, antes de alterar algumas variáveis.

help [tópico]

Mostra mensagens de ajuda lidas de /boot/loader.help. Se o tópico fornecido for index, a lista de tópicos disponíveis será exibida.

include nomedoarquivo…​

Lê o arquivo especificado e interpreta-o linha por linha. Um erro interrompe imediatamente o include.

load [-t type] filename

Carrega o kernel, módulo do kernel ou arquivo do tipo especificado, com o nome de arquivo especificado. Quaisquer argumentos após o nomedoarquivo são passados para o arquivo. Se nomedoarquivo não estiver qualificado, ele será pesquisado em /boot/kernel e /boot/modules.

ls [-l] [path]

Exibe uma listagem de arquivos do caminho fornecido ou do diretório raiz, se o caminho não for especificado. Se -l for especificado, os tamanhos dos arquivos também serão mostrados.

lsdev [-v]

Lista todos os dispositivos dos quais é possível carregar módulos. Se -v for especificado, mais detalhes serão impressos.

lsmod [-v]

Exibe os módulos carregados. Se -v for especificado, mais detalhes serão mostrados.

more nomedoarquivo

Exibe os arquivos especificados, com uma pausa em cada LINES exibidas.

reboot

Reinicia imediatamente o sistema.

set variable, set variable=value

Define as variáveis de ambiente especificadas.

unload

Remove todos os módulos carregados.

Aqui estão alguns exemplos práticos de uso do loader. Para inicializar o kernel usual no modo single-user :

 boot -s

Para descarregar o kernel e os módulos usuais e, em seguida, carregar o kernel anterior ou outro especificado:

 unload
 load kernel.old

Use o kernel.GENERIC para se referir ao kernel padrão que vem com uma instalação, ou kernel.old, para se referir ao kernel previamente instalado antes de uma atualização do sistema ou antes de configurar um kernel personalizado.

Use o seguinte para carregar os módulos usuais com outro kernel:

 unload
 set kernel="kernel.old"
 boot-conf

Para carregar um script de configuração do kernel automatizado:

 load -t userconfig_script /boot/kernel.conf

12.2.4. Último estágio

Quando o kernel é carregado pelo loader ou pelo boot2, que ignora o loader, ele examina qualquer flag de inicialização e ajusta seu comportamento conforme necessário. Interação do Kernel durante o Boot lista os flags de inicialização comumente usados. Consulte boot(8) para obter mais informações sobre os outros sinalizadores de inicialização.

Tabela 10. Interação do Kernel durante o Boot
OpçãoDescrição

-a

Durante a inicialização do kernel, solicita que o dispositivo seja montado como o sistema de arquivos raiz.

-C

Inicialize o sistema de arquivos raiz a partir de um CDROM.

-s

Inicialize no modo single-user.

-v

Seja mais detalhado durante a inicialização do kernel.

Uma vez que o kernel terminou a inicialização, ele passa o controle para o processo de usuário init(8), localizado em /sbin/init, ou o caminho do programa especificado na variável init_path no loader. Este é o último estágio do processo de inicialização.

A sequência de inicialização garante que os sistemas de arquivos disponíveis no sistema estejam consistentes. Se um sistema de arquivos UFS não estiver e o fsck não puder corrigir as inconsistências, o init jogará o sistema no modo single-user para que o administrador do sistema possa resolver o problema diretamente. Caso contrário, o sistema é inicializado no modo multi-user.

12.2.4.1. Modo Single-User

Um usuário pode especificar este modo inicializando com -s ou definindo a variável boot_single no loader. Ele também pode ser alcançado executando o shutdown now do modo multi-user. O modo single-user começa com esta mensagem:

Enter full pathname of shell or RETURN for /bin/sh:

Se o usuário pressionar Enter, o sistema entrará no Bourne shell padrão. Para especificar um shell diferente, insira o caminho completo para o shell.

O modo single-user é geralmente usado para reparar um sistema que não inicializa devido a um sistema de arquivos inconsistente ou a um erro em um arquivo de configuração de inicialização. Ele também pode ser usado para redefinir a senha do root quando ela é desconhecida. Essas ações são possíveis porque o prompt do modo single-user fornece acesso local completo ao sistema e seus arquivos de configuração. Não há rede neste modo.

Embora o modo single-user seja útil para reparar um sistema, ele representa um risco de segurança, a menos que o sistema esteja em um local fisicamente seguro. Por padrão, qualquer usuário que possa obter acesso físico a um sistema terá controle total desse sistema após a inicialização no modo single-user.

Se o console do sistema for alterado para insecure em /etc/ttys, o sistema solicitará primeiro a senha do root antes de iniciar o modo single-user. Isso adiciona uma medida de segurança ao remover a capacidade de redefinir a senha do root quando ela é desconhecida.

Exemplo 29. Configurando um Console Inseguro em /etc/ttys
# name  getty                           type    status          comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none                            unknown off insecure

Um console inseguro significa que a segurança física para o console é considerada insegura, portanto, apenas alguém que conheça a senha do root pode usar o modo single-user.

12.2.4.2. Modo Multi-User

Se o init encontrar os sistemas de arquivos em ordem, ou quando o usuário tiver concluído seus comandos no modo de usuário único e tiver digitado exit para deixar o modo single-user, o sistema entra no modo multi-user, no qual inicia a configuração de recursos do sistema.

O sistema de configuração de recursos lê os padrões de configuração do /etc/defaults/rc.conf e detalhes específicos do sistema a partir do /etc/rc.conf. Em seguida, ele monta os sistemas de arquivos do sistema listados em /etc/fstab. Ele inicia serviços de rede, daemons diversos do sistema e, em seguida, os scripts de inicialização dos pacotes instalados localmente.

Para saber mais sobre o sistema de configuração de recursos, consulte rc(8) e examine os scripts localizados em /etc/rc.d.

12.3. Configurando telas iniciais de inicialização

Normalmente, quando um sistema FreeBSD inicializa, ele exibe seu progresso com uma série de mensagens no console. Uma tela inicial de inicialização cria uma tela de inicialização alternativa que oculta todo o probe de inicialização e as mensagens de inicialização de serviços. Algumas mensagens do boot loader, incluindo o menu de opções de inicialização e um prompt de contagem regressiva de espera, são exibidas no momento da inicialização, mesmo quando a tela inicial está ativada. A exibição da tela inicial pode ser desativada pressionando qualquer tecla do teclado durante o processo de inicialização.

Existem dois ambientes básicos disponíveis no FreeBSD. O primeiro é o ambiente padrão de linha de comando do console virtual legado. Depois que o sistema conclui a inicialização, é exibido um prompt de login do console. O segundo ambiente é um ambiente gráfico configurado. Consulte O sistema X Window para obter maiores informações sobre como instalar e configurar um gerenciador gráfico de tela e um gerenciador gráfico de login.

Depois que o sistema inicializa, a tela inicial é definida como proteção de tela. Após um período sem uso, a tela inicial será exibida e passará por etapas de mudança de intensidade da imagem, de brilhante a muito escuro e vice-versa. A configuração do protetor de tela inicial pode ser sobrescrita, adicionando-se uma linha saver= ao /etc/rc.conf. Vários protetores de tela embutidos estão disponíveis e descritos em splash(4). A opção saver= aplica-se apenas aos consoles virtuais e não tem efeito nos gerenciadores gráficos de telas.

Ao instalar o pacote ou port sysutils/bsd-splash-changer, uma imagem inicial aleatória de uma coleção será exibida na inicialização. A função tela inicial suporta 256 cores nos formatos bitmap (.bmp), ZSoft PCX (.pcx), ou TheDraw (.bin). A imagem .bmp, .pcx, ou .bin tem que ser colocada na partição root, em /boot por exemplo. Os arquivos de imagens iniciais tem que ter a resolução de 320 por 200 pixels ou menos para funcionarem em adaptadores VGA padrão. Para a tela inicial padrão de 256 cores e 320 por 200 pixels ou menos, adicione as seguintes linhas ao /boot/loader.conf. Substitua splash.bmp com o nome do arquivo bitmap a ser utilizado:

splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Para usar um arquivo PCX em vez de um arquivo bitmap:

splash_pcx_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.pcx"

Em vez disso, use ASCII art no formato https://en.wikipedia.org/wiki/TheDraw:

splash_txt="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bin"

Outras opções interessantes do arquivo loader.conf incluem:

beastie_disable="YES"

Isso impedirá que o menu de opções de inicialização seja exibido, mas o prompt de contagem regressiva da espera programada ainda estará presente. Mesmo com a exibição do menu de opções de inicialização desabilitada, entrar com uma seleção de opção no prompt de contagem decrescente de tempo programado ativará a opção de inicialização correspondente.

loader_logo="beastie"

Isso substituirá as palavras padrão "FreeBSD", que são exibidas à direita do menu de opções de inicialização, com o logotipo colorido do beastie.

Para maiores informações, consulte splash(4), loader.conf(5), and vga(4).

12.4. Sugestões de dispositivos

Durante o começo da inicialização do sistema, o boot loader(8) lê o device.hints(5). Este arquivo armazena informações de inicialização do kernel conhecidas como variáveis, algumas vezes referenciadas como "sugestão de devices". Estas "sugestões de devices" são usados pelos drivers de dispositivo para configuração do dispositivo.

As sugestões de dispositivos também são especificadas no estágio 3 do prompt do boot loader, conforme demonstrado em Estágio três. As variáveis podem ser adicionadas usando set, removidas com unset e visualizadas show. Variáveis configuradas no arquivo /boot/device.hints também podem ser sobrescritas. As sugestões de dispositivos inseridas no boot loader não são permanentes e não serão aplicadas na próxima reinicialização.

Uma vez que o sistema é inicializado, kenv(1) pode ser usado para despejar todas as variáveis.

A sintaxe para o arquivo /boot/device.hints é uma variável por linha, usando o hash "#" como marcadores de comentário. As linhas são construídas da seguinte forma:

 hint.driver.unit.keyword="value"

A sintaxe para o estágio 3 do boot loader é:

 set hint.driver.unit.keyword=value

onde driver é o nome do driver de dispositivo, unit é o número da unidade de driver do dispositivo, e keyword é a palavra-chave sugerida. A palavra-chave pode consistir das seguintes opções:

  • at: especifica o barramento ao qual o dispositivo está conectado.

  • port: especifica o endereço inicial de I/O a ser usado.

  • irq: especifica o número da requisição de interrupção a ser usada.

  • drq: especifica o número do canal DMA.

  • maddr: especifica o endereço de memória física ocupado pelo dispositivo.

  • flags: define vários bits de flags para o dispositivo.

  • disabled: se definido como 1, o dispositivo é desativado.

Como os drivers de dispositivo podem aceitar ou exigir mais sugestões não listadas aqui, é recomendável exibir uma página de manual do driver. Para obter mais informações, consulte device.hints(5), kenv(1), loader.conf(5), e loader(8).

12.5. Sequência de Desligamento

Após desligamento controlado usando shutdown(8), o init(8) tentará executar o script /etc/rc.shutdown e, em seguida, enviará a todos os processos o sinal TERM e, subsequentemente, o sinal KILL para qualquer um que não termine em tempo hábil.

Para desligar uma máquina FreeBSD em arquiteturas e sistemas que suportam gerenciamento de energia, use o shutdown -p now para desligar a energia imediatamente. Para reinicializar um sistema FreeBSD, use o shutdown -r now. É preciso ser root ou um membro de operator para executar shutdown(8). Também é possível usar halt(8) e reboot(8). Consulte as páginas de manual e o shutdown(8) para obter mais informações.

Modifique a associação ao grupo referindo-se a Usuários e Gerenciamento Básico de Contas.

O gerenciamento de energia requer que o acpi(4) seja carregado como um módulo ou estaticamente compilado em um kernel personalizado.

Capítulo 13. Segurança

13.1. Sinopse

A segurança, seja física ou virtual, é um tópico tão amplo que todo um setor evoluiu em torno dele. Centenas de práticas padrão foram criadas sobre como proteger sistemas e redes e, como usuário do FreeBSD, é essencial entender como se proteger contra ataques e intrusos.

Neste capítulo, vários fundamentos e técnicas serão discutidos. O sistema FreeBSD vem com múltiplas camadas de segurança, e muitos outros utilitários de terceiros podem ser adicionados para aumentar a segurança.

Depois de ler este capítulo, você saberá:

  • Conceitos básicos de segurança do sistema FreeBSD.

  • Os vários mecanismos de criptografia disponíveis no FreeBSD.

  • Como configurar a autenticação de senha única.

  • Como configurar o TCP Wrapper para uso com o inetd(8).

  • Como configurar o Kerberos no FreeBSD.

  • Como configurar o IPsec e criar uma VPN.

  • Como configurar e usar o OpenSSH no FreeBSD.

  • Como usar ACLs para o sistema de arquivos .

  • Como usar o pkg para auditar pacotes de software de terceiros instalados a partir da Coleção de Ports.

  • Como utilizar os alertas de segurança do FreeBSD.

  • O que é Auditoria de Processos e como ativá-la no FreeBSD.

  • Como controlar os recursos do usuário usando classes de login ou o banco de dados de limites de recursos.

Antes de ler este capítulo, você deve:

  • Entender os conceitos básicos do FreeBSD e de Internet.

Tópicos de segurança adicionais são abordados em outras partes deste Manual. Por exemplo, o Controle de Acesso Obrigatório é discutido em Controle de acesso obrigatório e os firewalls da Internet são discutidos em Firewalls.

13.2. Introdução

Segurança é responsabilidade de todos. Um ponto de entrada fraco em qualquer sistema pode permitir que intrusos obtenham acesso a informações críticas e causem estragos em toda a rede. Um dos princípios centrais da segurança da informação é a tríade CIA, que significa Confidencialidade, Integridade e Disponibilidade dos sistemas de informação.

A tríade CIA é um conceito básico de segurança de computadores, pois os clientes e usuários esperam que seus dados sejam protegidos. Por exemplo, um cliente espera que as informações do cartão de crédito sejam armazenadas com segurança (confidencialidade), que os pedidos não sejam alterados nos bastidores (integridade) e que tenham acesso às informações do pedido em todos os momentos (disponibilidade).

Para fornecer CIA, os profissionais de segurança aplicam uma estratégia de defesa em profundidade. A ideia de defesa em profundidade é adicionar várias camadas de segurança para evitar que uma falha em uma única camada e faça com que todo o sistema de segurança entre em colapso. Por exemplo, um administrador do sistema não pode simplesmente ativar um firewall e considerar a rede ou o sistema seguro. É preciso também auditar contas, verificar a integridade dos binários e garantir que ferramentas maliciosas não estejam instaladas. Para implementar uma estratégia de segurança eficaz, é preciso entender as ameaças e como se defender delas.

O que é uma ameaça no que se refere à segurança do computador? As ameaças não se limitam a invasores remotos que tentam acessar um sistema sem permissão de um local remoto. As ameaças também incluem funcionários, softwares mal-intencionados, dispositivos de rede não autorizados, desastres naturais, vulnerabilidades de segurança e até corporações concorrentes.

Sistemas e redes podem ser acessados sem permissão, às vezes por acidente, ou por atacantes remotos e, em alguns casos, por meio de espionagem corporativa ou ex-funcionários. Como usuário, é importante se preparar e admitir quando um erro levou a uma violação de segurança e relatar possíveis problemas à equipe de segurança. Como administrador, é importante conhecer as ameaças e estar preparado para mitigá-las.

Ao aplicar a segurança aos sistemas, recomenda-se começar protegendo as contas básicas e a configuração do sistema e, em seguida, proteger a camada de rede de modo a aderir à política do sistema e aos procedimentos de segurança da organização. Muitas organizações já possuem uma política de segurança que abrange a configuração de dispositivos de tecnologia. A política deve incluir a configuração de segurança de estações de trabalho, desktops, dispositivos móveis, telefones, servidores de produção e servidores de desenvolvimento. Em muitos casos, procedimentos operacionais padrão (SOPs) já existem. Em caso de dúvida, pergunte à equipe de segurança.

O restante desta introdução descreve como algumas dessas configurações básicas de segurança são executadas em um sistema FreeBSD. O restante deste capítulo descreve algumas ferramentas específicas que podem ser usadas ao implementar uma política de segurança em um sistema FreeBSD.

13.2.1. Prevenindo Logins

Ao garantir a segurança de um sistema, um bom ponto de partida é uma auditoria de contas. Assegure-se de que o root tenha uma senha forte e que essa senha não seja compartilhada. Desabilite todas as contas que não precisam de acesso de para logar.

Para negar acesso de login a contas, existem dois métodos. O primeiro é bloquear a conta. Este exemplo bloqueia a conta toor:

# pw lock toor

O segundo método é impedir o acesso ao login alterando o shell para /usr/sbin/nologin. Apenas o superusuário pode alterar o shell para outros usuários:

# chsh -s /usr/sbin/nologin toor

O shell /usr/sbin/nologin impede que o sistema atribua um shell ao usuário quando ele tenta efetuar login.

13.2.2. Escalonamento de Contas Permitido

Em alguns casos, a administração do sistema precisa ser compartilhada com outros usuários. O FreeBSD tem dois métodos para lidar com isso. O primeiro, que não é recomendado, é uma senha de root compartilhada usada por membros do grupo wheel. Com esse método, um usuário digita su e insere a senha para wheel sempre que o acesso do superusuário for necessário. O usuário deve então digitar exit para deixar o acesso privilegiado após terminar os comandos que requereram acesso administrativo. Para adicionar um usuário a este grupo, edite /etc/group e adicione o usuário ao final da entrada wheel. O usuário deve ser separado por um caractere vírgula sem espaço.

O segundo e recomendado método para permitir o escalonamento de privilégios é instalar o pacote ou port security/sudo. Este software fornece auditoria adicional, controle de usuário mais refinado e pode ser configurado para bloquear os usuários para que executem apenas os comandos privilegiados especificados.

Após a instalação, use o visudo para editar o /usr/local/etc/sudoers. Este exemplo cria um novo grupo webadmin, adiciona a conta trhodes a esse grupo e configura esse acesso de grupo para reiniciar o apache24:

# pw groupadd webadmin -M trhodes -g 6000
# visudo
%webadmin ALL=(ALL) /usr/sbin/service apache24 *

13.2.3. Hashes de Senhas

As senhas são um mal necessário da tecnologia. Quando elas devem ser usadas, elas devem ser complexas e um poderoso mecanismo de hash deve ser usado para criptografar a versão armazenada no banco de dados de senhas. O FreeBSD suporta os algoritmos de DES, MD5, SHA256, SHA512 e Blowfish na sua biblioteca crypt(). O padrão de SHA512 não deve ser alterado para um algoritmo hash menos seguro, mas pode ser alterado para o algoritmo Blowfish mais seguro.

O Blowfish não faz parte do AES e não é considerado compatível com nenhum Federal Information Processing Standard (FIPS). Seu uso pode não ser permitido em alguns ambientes.

Para determinar qual algoritmo de hash é usado para criptografar a senha de um usuário, o superusuário pode visualizar o hash do usuário no banco de dados de senhas do FreeBSD. Cada hash começa com um símbolo que indica o tipo de mecanismo de hash usado para criptografar a senha. Se DES for usado, não haverá símbolo de início. Para MD5, o símbolo é $. Para SHA256 e SHA512, o símbolo é $6$. Para o Blowfish, o símbolo é $2a$. Neste exemplo, a senha para dru é criptografada usando o algoritmo SHA512 padrão quando o hash começa com $6$. Observe que o hash criptografado, não a senha em si, é armazenado no banco de dados de senhas:

# grep dru /etc/master.passwd
dru:$6$pzIjSvCAn.PBYQBA$PXpSeWPx3g5kscj3IMiM7tUEUSPmGexxta.8Lt9TGSi2lNQqYGKszsBPuGME0:1001:1001::0:0:dru:/usr/home/dru:/bin/csh

O mecanismo de hash é definido na classe de login do usuário. Para este exemplo, o usuário está na classe de login default e o algoritmo de hash é definido com esta linha em /etc/login.conf:

        :passwd_format=sha512:\

Para alterar o algoritmo para Blowfish, modifique a linha para ficar assim:

        :passwd_format=blf:\

Em seguida, execute cap_mkdb /etc/login.conf conforme descrito em Configurando Classes de Login. Observe que essa alteração não afetará os hashes de senha existentes. Isso significa que todas as senhas devem ser refeitas pedindo aos usuários que executem passwd para alterar sua senha.

Para logins remotos, a autenticação de dois fatores deve ser usada. Um exemplo de autenticação de dois fatores é "algo que você tem", como uma chave, e "algo que você conhece", como a senha para essa chave. Como o OpenSSH é parte do sistema básico do FreeBSD, todos os logins de rede devem ser sobre uma conexão criptografada e usar autenticação baseada em chave em vez de senhas. Para mais informações, consulte OpenSSH. Os usuários do Kerberos podem precisar fazer alterações adicionais para implementar o OpenSSH em sua rede. Essas alterações são descritas em Kerberos.

13.2.4. Aplicação de Política de Senha

Aplicar uma política de senha forte para contas locais é um aspecto fundamental da segurança do sistema. No FreeBSD, o tamanho da senha, a força da senha e a complexidade da senha podem ser implementados usando os Módulos de Autenticação Conectáveis (PAM).

Esta seção demonstra como configurar o tamanho mínimo e máximo da senha e a imposição de caracteres mistos usando o módulo pam_passwdqc.so. Este módulo é aplicado quando um usuário altera sua senha.

Para configurar este módulo, torne-se o superusuário e remova o comentário da linha contendo pam_passwdqc.so em /etc/pam.d/passwd. Em seguida, edite essa linha para corresponder à política de senha:

password        requisite       pam_passwdqc.so         min=disabled,disabled,disabled,12,10 similar=deny retry=3 enforce=users

Este exemplo define vários requisitos para novas senhas. A configuração min controla o tamanho mínimo da senha. Ele tem cinco valores porque este módulo define cinco tipos diferentes de senhas com base em sua complexidade. Complexidade é definida pelo tipo de caracteres que devem existir em uma senha, como letras, números, símbolos e maiúsculas e minúsculas. Os tipos de senhas são descritos em pam_passwdqc(8). Neste exemplo, os três primeiros tipos de senha são desativados, o que significa que as senhas que atendem a esses requisitos de complexidade não serão aceitas, independentemente da sua duração. O 12 define uma política de senha mínima de pelo menos doze caracteres, se a senha também contiver caracteres com três tipos de complexidade. O 10 define a política de senha para também permitir senhas de pelo menos dez caracteres, se a senha contiver caracteres com quatro tipos de complexidade.

A configuração similar nega senhas semelhantes à senha anterior do usuário. A configuração retry fornece ao usuário três oportunidades para inserir uma nova senha.

Depois que este arquivo for salvo, um usuário que alterar sua senha verá uma mensagem semelhante a seguinte:

% passwd
Changing local password for trhodes
Old Password:

You can now choose the new password.
A valid password should be a mix of upper and lower case letters,
digits and other characters.  You can use a 12 character long
password with characters from at least 3 of these 4 classes, or
a 10 character long password containing characters from all the
classes.  Characters that form a common pattern are discarded by
the check.
Alternatively, if no one else can see your terminal now, you can
pick this as your password: "trait-useful&knob".
Enter new password:

Se uma senha que não corresponde à política for inserida, ela será rejeitada com um aviso e o usuário terá a oportunidade de tentar novamente, até o número configurado de novas tentativas.

A maioria das políticas de senha exige que as senhas expirem depois de tantos dias. Para definir um tempo de expiração da senha no FreeBSD, defina passwordtime para a classe de login do usuário em /etc/login.conf. A classe de login default contém um exemplo:

#       :passwordtime=90d:\

Portanto, para definir uma expiração de 90 dias para esta classe de login, remova o símbolo de comentário (#), salve a edição e execute o cap_mkdb /etc/login.conf.

Para definir a expiração em usuários individuais, passe uma data de expiração ou o número de dias para expirar e um nome de usuário para o comando pw:

# pw usermod -p 30-apr-2015 -n trhodes

Como visto aqui, uma data de expiração é definida na forma de dia, mês e ano. Para obter maiores informações, consulte pw(8).

13.2.5. Detectando Rootkits

Um rootkit é qualquer software não autorizado que tente obter acesso como root a um sistema. Uma vez instalado, esse software mal-intencionado normalmente abrirá outro caminho de entrada para um invasor. Realisticamente, uma vez que um sistema foi comprometido por um rootkit e uma investigação foi realizada, o sistema deve ser reinstalado do zero. Existe um tremendo risco de que mesmo o engenheiro de sistemas ou segurança mais prudente perca algo que um invasor deixou para trás.

Um rootkit faz uma coisa útil para administradores: uma vez detectado, é um sinal de que um comprometimento aconteceu em algum momento. Mas, esses tipos de aplicativos tendem a ser muito bem ocultos. Esta seção demonstra uma ferramenta que pode ser usada para detectar rootkits, security/rkhunter.

Após a instalação deste pacote ou port, o sistema pode ser verificado usando o seguinte comando. Ele produzirá muitas informações e exigirá uma entrada manual da tecla ENTER:

# rkhunter -c

Depois que o processo for concluído, uma mensagem de status será impressa na tela. Esta mensagem incluirá a quantidade de arquivos verificados, arquivos suspeitos, possíveis rootkits e mais. Durante a verificação, alguns avisos de segurança genéricos podem ser produzidos sobre arquivos ocultos, a seleção do protocolo OpenSSH e versões vulneráveis conhecidas do software instalado. Estes podem ser tratados agora ou após uma análise mais detalhada ter sido realizada.

Todo administrador deve saber o que está sendo executado nos sistemas pelos quais é responsável. Ferramentas de terceiros como o rkhunter e o sysutils/lsof e comandos nativos como o netstat e o ps, podem mostrar uma grande quantidade de informações sobre o sistema. Faça anotações sobre o que é normal, faça perguntas quando algo parecer fora do lugar e seja paranoico. Embora evitar um comprometimento seja ideal, detectar um comprometimento é imprescindível.

13.2.6. Verificação Binária

A verificação de arquivos e binários do sistema é importante porque fornece às equipes de administração e segurança do sistema informações sobre alterações no sistema. Uma aplicação de software que monitora o sistema para alterações é chamado de Sistema de Detecção de Intrusão (IDS).

O FreeBSD fornece suporte nativo para um sistema de IDS básico. Embora os emails de segurança noturnos notifiquem o administrador sobre alterações, as informações são armazenadas localmente e há uma chance de que um usuário mal-intencionado modifique essas informações para ocultar suas alterações no sistema. Como tal, recomenda-se criar um conjunto separado de assinaturas binárias e armazená-las em um diretório de read-only, propriedade do root ou, de preferência, em um disco USB removível ou servidor rsync remoto.

O utilitário mtree embutido pode ser usado para gerar uma especificação do conteúdo de um diretório. Um seed, ou uma constante numérica, é usada para gerar a especificação e é necessária para verificar se a especificação não foi alterada. Isso possibilita determinar se um arquivo ou binário foi modificado. Como o valor inicial do seed é desconhecido por um invasor, disfarçar ou impossibilitar a verificação dos valores de checksum dos arquivos será difícil ou impossível. O exemplo a seguir gera um conjunto de hashes SHA256, um para cada sistema binário no diretório /bin e salva esses valores em um arquivo oculto no diretório inicial do root, /root/.bin_chksum_mtree:

# mtree -s 3483151339707503 -c -K cksum,sha256digest -p /bin > /root/.bin_chksum_mtree
# mtree: /bin checksum: 3427012225

O 3483151339707503 representa o seed. Este valor deve ser lembrado, mas não compartilhado.

Visualizar o arquivo /root/.bin_cksum_mtree deve produzir uma saída semelhante à seguinte:

#          user: root
#       machine: dreadnaught
#          tree: /bin
#          date: Mon Feb  3 10:19:53 2014

# .
/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=none
.               type=dir mode=0755 nlink=2 size=1024 \
                time=1380277977.000000000
    \133        nlink=2 size=11704 time=1380277977.000000000 \
                cksum=484492447 \
                sha256digest=6207490fbdb5ed1904441fbfa941279055c3e24d3a4049aeb45094596400662a
    cat         size=12096 time=1380277975.000000000 cksum=3909216944 \
                sha256digest=65ea347b9418760b247ab10244f47a7ca2a569c9836d77f074e7a306900c1e69
    chflags     size=8168 time=1380277975.000000000 cksum=3949425175 \
                sha256digest=c99eb6fc1c92cac335c08be004a0a5b4c24a0c0ef3712017b12c89a978b2dac3
    chio        size=18520 time=1380277975.000000000 cksum=2208263309 \
                sha256digest=ddf7c8cb92a58750a675328345560d8cc7fe14fb3ccd3690c34954cbe69fc964
    chmod       size=8640 time=1380277975.000000000 cksum=2214429708 \
                sha256digest=a435972263bf814ad8df082c0752aa2a7bdd8b74ff01431ccbd52ed1e490bbe7

O nome do host da máquina, a data e a hora em que a especificação foi criada e o nome do usuário que criou a especificação são incluídos neste relatório. Há um checksum, tamanho, hora e um digest SHA256 para cada binário no diretório.

Para verificar se as assinaturas binárias não foram alteradas, compare o conteúdo atual do diretório com a especificação gerada anteriormente e salve os resultados em um arquivo. Este comando requer o seed que foi usado para gerar a especificação original:

# mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
# mtree: /bin checksum: 3427012225

Isso deve produzir o mesmo checksum para /bin que foi produzido quando a especificação foi criada. Se nenhuma alteração tiver ocorrido nos binários nesse diretório, o arquivo de saída /root/.bin_chksum_output estará vazio. Para simular uma alteração, altere a data no arquivo /bin/cat usando o touch e execute o comando de verificação novamente:

# touch /bin/cat
# mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
# more /root/.bin_chksum_output
cat changed
	modification time expected Fri Sep 27 06:32:55 2013 found Mon Feb  3 10:28:43 2014

Recomenda-se criar especificações para os diretórios que contêm binários e arquivos de configuração, bem como quaisquer diretórios que contenham dados sensíveis. Normalmente, as especificações são criadas para /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /etc e /usr/local/etc.

Existem sistemas de IDS mais avançados, como o security/aide. Na maioria dos casos, o mtree fornece a funcionalidade que os administradores precisam. É importante manter o valor inicial e a saída do checksum oculta de usuários mal-intencionados. Maiores informações sobre o mtree podem ser encontradas em mtree(8).

13.2.7. Otimizando o Sistema para Segurança

No FreeBSD, muitos recursos do sistema podem ser ajustados usando o sysctl. Alguns dos recursos de segurança que podem ser ajustados para impedir ataques de negação de serviço (DoS) serão abordados nesta seção. Mais informações sobre o uso do sysctl, incluindo como alterar temporariamente os valores e como tornar as alterações permanentes após o teste, podem ser encontradas em Efetuando ajustes com o sysctl(8).

Sempre que uma configuração é alterada com o sysctl, a chance de causar danos indesejados é aumentada, afetando a disponibilidade do sistema. Todas as alterações devem ser monitoradas e, se possível, testadas em um sistema de teste antes de serem usadas em um sistema de produção.

Por padrão, o kernel do FreeBSD é inicializado com um nível de segurança -1. Isso é chamado de "modo inseguro" porque as flags de arquivos imutáveis podem ser desativadas e todos os dispositivos podem ser lidos ou gravados. O nível de segurança permanecerá em -1, a menos que seja alterado através do sysctl ou por uma configuração nos scripts de inicialização. O nível de segurança pode ser aumentado durante a inicialização do sistema, definindo kern_securelevel_enable para YES no arquivo /etc/rc.conf, e o valor de kern_securelevel para o nível de segurança desejado. Veja security(7) e init(8) para maiores informações sobre essas configurações e os níveis de segurança disponíveis.

Aumentar o valor da variável securelevel pode quebrar o Xorg e causar outros problemas. Esteja preparado para fazer alguma depuração.

As configurações da variável net.inet.tcp.blackhole e net.inet.udp.blackhole podem ser usadas para descartar pacotes SYN de entrada em portas fechadas sem enviar uma resposta RST. O comportamento padrão é retornar um RST para mostrar que uma porta está fechada. A alteração do padrão fornece algum nível de proteção contra varreduras de portas, que são usadas para determinar quais aplicativos estão sendo executados em um sistema. Defina net.inet.tcp.blackhole para 2 e net.inet.udp.blackhole para 1. Consulte blackhole(4) para obter maiores informações sobre essas configurações.

As configurações das variáveis net.inet.icmp.drop_redirect e net.inet.ip.redirect ajudam a evitar ataques de redirecionamento. Um ataque de redirecionamento é um tipo de DoS que envia um grande número de pacotes ICMP tipo 5. Como esses pacotes não são necessários, configure net.inet.icmp.drop_redirect para 1 e configure net.inet.ip.redirect para 0.

O roteamento de origem é um método para detectar e acessar endereços não roteáveis na rede interna. Isso deve ser desativado, pois endereços não roteáveis normalmente não são roteáveis de propósito. Para desativar este recurso, defina net.inet.ip.sourceroute e net.inet.ip.accept_sourceroute como 0.

Quando uma máquina na rede precisa enviar mensagens para todos os hosts em uma sub-rede, uma mensagem de solicitação echo do ICMP é enviada para o endereço de broadcast. No entanto, não há motivo para um host externo executar essa ação. Para rejeitar todas as solicitações externas de transmissão, defina net.inet.icmp.bmcastecho como 0.

Algumas configurações adicionais estão documentadas em security(7).

13.3. Senhas de Uso Unico

Por padrão, o FreeBSD inclui suporte para senhas de uso único em tudo (OPIE). O OPIE é projetado para evitar ataques repetidos, nos quais um atacante descobre a senha de um usuário e a usa para acessar um sistema. Como uma senha é usada apenas uma vez em OPIE, uma senha descoberta é de pouca utilidade para um invasor. O OPIE usa um hash seguro e um sistema de desafio/resposta para gerenciar senhas. A implementação do FreeBSD usa o hash MD5 por padrão.

O OPIE usa três tipos diferentes de senhas. A primeira é a senha usual UNIX™ ou Kerberos. A segunda é a senha única que é gerada pelo opiekey. O terceiro tipo de senha é a "senha secreta" que é usada para gerar senhas de uso único. A senha secreta não tem nada a fazer com ela e deve ser diferente da senha UNIX™.

Existem duas outras partes de dados importantes para o OPIE. Uma é o "seed" ou "chave", composta por duas letras e cinco dígitos. A outra é a "contagem de iteração", um número entre 1 e 100. O OPIE cria a senha única concatenando o seed e a senha secreta, aplicando o hash MD5 quantas vezes forem especificadas pela contagem de iterações e transformando o resultado em seis palavras inglesas curtas que representam a senha de uso único. O sistema de autenticação controla a última senha descartável usada e o usuário é autenticado se o hash da senha fornecida pelo usuário for igual à senha anterior. Como um hash unidirecional é usado, é impossível gerar futuras senhas de uso único se uma senha usada com êxito for capturada. A contagem de iteração é diminuída após cada login bem-sucedido para manter o usuário e o programa de login em sincronia. Quando a contagem de iterações descer para 1, o OPIE deve ser reinicializado.

Existem alguns programas envolvidos neste processo. Uma senha de uso único, ou uma lista consecutiva de senhas de uso único, é gerada passando uma contagem de iteração, um seed e uma senha secreta para o opiekey(1). Além de inicializar o OPIE, o opiepasswd(1) é usado para alterar senhas, contagens de iteração ou seeds. Os arquivos de credenciais relevantes em /etc/opiekeys são examinados pelo opieinfo(1) o qual imprime a iteração atual e o seed do usuário solicitante atual.

Esta seção descreve quatro tipos diferentes de operações. A primeira é como configurar senhas de uso único pela primeira vez em uma conexão segura. A segunda é como usar o opiepasswd em uma conexão insegura. A terceira é como efetuar login em uma conexão insegura. A quarta é como gerar um número de chaves que podem ser escritas ou impressas para uso em locais inseguros.

13.3.1. Inicializando o OPIE

Para inicializar o OPIE pela primeira vez, execute este comando a partir de um local seguro:

% opiepasswd -c
Adding unfurl:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:

ID unfurl OTP key is 499 to4268
MOS MALL GOAT ARM AVID COED

A opção -c define o modo de console que assume que o comando está sendo executado de um local seguro, como um computador sob o controle do usuário ou uma sessão SSH para um computador sob o controle do usuário.

Quando solicitado, insira a senha secreta que será usada para gerar as chaves de login de uso único. Essa senha deve ser difícil de adivinhar e deve ser diferente da senha associada à conta de login do usuário. Deve ter entre 10 e 127 caracteres. Lembre-se desta senha.

A linha ID lista o nome de login (unfurl), a contagem de iterações padrão (499) e o seed padrão (to4268). Ao efetuar o login, o sistema lembrará esses parâmetros e os exibirá, o que significa que eles não precisam ser memorizados. A última linha lista a senha única gerada que corresponde a esses parâmetros e a senha secreta. No próximo login, use essa senha única.

13.3.2. Inicialização de uma Conexão Insegura

Para inicializar ou alterar a senha secreta em um sistema inseguro, é necessária uma conexão segura em algum lugar onde o opiekey possa ser executado. Isso pode ser um prompt de shell em uma máquina confiável. Uma contagem de iteração é necessária, em que 100 é provavelmente um bom valor, e o seed pode ser especificado ou a gerado aleatoriamente. Na conexão insegura, a máquina sendo inicializada, use opiepasswd(1):

% opiepasswd

Updating unfurl:
You need the response from an OTP generator.
Old secret pass phrase:
	otp-md5 498 to4268 ext
	Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
	otp-md5 499 to4269
	Response: LINE PAP MILK NELL BUOY TROY

ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROY

Para aceitar o seed padrão, pressione Return. Antes de inserir uma senha de acesso, passe para a conexão segura e forneça os mesmos parâmetros:

% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT

Volte para a conexão insegura e copie a senha única gerada para o programa relevante.

13.3.3. Gerando uma Senha de Uso Único

Depois de inicializar o OPIE e efetuar login, um prompt como este será exibido:

% telnet example.com
Trying 10.0.0.1...
Connected to example.com
Escape character is '^]'.

FreeBSD/i386 (example.com) (ttypa)

login: <username>
otp-md5 498 gr4269 ext
Password:

Os prompts do OPIE fornecem um recurso útil. Se o Enter for pressionado no prompt de senha, o prompt ativará o echo e exibirá o que foi digitado. Isso pode ser útil ao tentar digitar uma senha manualmente a partir de uma impressão.

Neste ponto, gere a senha de uso único para responder a este aviso de login. Isso deve ser feito em um sistema confiável em que seja seguro executar o opiekey(1). Existem versões deste comando para Windows™, Mac OS™ e FreeBSD. Esse comando precisa da contagem de iteração e do seed como opções da linha de comandos. Use recortar e colar no prompt de login da máquina que está sendo conectada.

No sistema confiável:

% opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHAT

Depois que a senha descartável for gerada, continue a logar.

13.3.4. Gerando Múltiplas Senhas de Uso Único

Às vezes, não há acesso a uma máquina confiável ou conexão segura. Neste caso, é possível usar o opiekey(1) para gerar algumas de senhas de uso único antecipadamente. Por exemplo:

% opiekey -n 5 30 zz99999
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: <secret password>
26: JOAN BORE FOSS DES NAY QUIT
27: LATE BIAS SLAY FOLK MUCH TRIG
28: SALT TIN ANTI LOON NEAL USE
29: RIO ODIN GO BYE FURY TIC
30: GREW JIVE SAN GIRD BOIL PHI

A opção -n 5 solicita cinco chaves em seqüência e 30 especifica qual deve ser o último número de iteração. Note que estes são impressos na ordem reversa de uso. O usuário realmente paranóico pode querer escrever os resultados manualmente; caso contrário, imprima a lista. Cada linha mostra a contagem de iteração e a senha de uso único. Risque as senhas conforme elas forem usadas.

13.3.5. Restringindo o Uso de Senhas UNIX™

O OPIE pode restringir o uso de senhas UNIX™ com base no endereço IP de uma sessão de login. O arquivo relevante é o /etc/opieaccess, que está presente por padrão. Consulte opieaccess(5) para obter maiores informações sobre esse arquivo e sobre quais considerações de segurança você deve estar ciente ao usá-lo.

Aqui está um exemplo do arquivo opieaccess:

permit 192.168.0.0 255.255.0.0

Esta linha permite que os usuários cujo endereço de origem IP (que é vulnerável a spoofing) corresponda ao valor e à máscara especificados, para usar as senhas UNIX™ a qualquer momento.

Se nenhuma regra do arquivo opieaccess for correspondida, o padrão é negar logins que não sejam OPIE.

13.4. TCP Wrapper

O TCP Wrapper é um sistema de controle de acesso baseado em host que estende as habilidades do O super-servidor inetd. Ele pode ser configurado para fornecer suporte de registro, mensagens de retorno e restrições de conexão para os daemons do servidor sob o controle do inetd. Consulte tcpd(8) para obter maiores informações sobre o TCP Wrapper e seus recursos.

O TCP Wrapper não deve ser considerado um substituto para um firewall configurado adequadamente. Em vez disso, TCP Wrapper deve ser usado em conjunto com um firewall e outros aprimoramentos de segurança para fornecer outra camada de proteção na implementação de uma política de segurança.

13.4.1. Configuração Inicial

Para ativar o TCP Wrapper no FreeBSD, adicione as seguintes linhas ao arquivo /etc/rc.conf:

inetd_enable="YES"
inetd_flags="-Ww"

Então, configure corretamente o arquivo /etc/hosts.allow.

Ao contrário de outras implementações do TCP Wrapper, o uso do arquivo hosts.deny foi preterido no FreeBSD. Todas as opções de configuração devem ser colocadas no arquivo /etc/hosts.allow.

Na configuração mais simples, as políticas de conexão do daemon são configuradas para permitir ou bloquear, dependendo das opções no arquivo /etc/hosts.allow. A configuração padrão no FreeBSD é permitir todas as conexões para os daemons iniciados com o inetd.

A configuração básica geralmente assume a forma de daemon : address : action, onde daemon é o daemon que o inetd iniciou, address é um nome de host válido ou um endereço IP ou um endereço IPv6 entre colchetes ([]) e action é allow ou deny. O TCP Wrapper usa uma semântica de correspondência de primeira regra, o que significa que o arquivo de configuração é varrido desde o início para uma regra correspondente. Quando uma correspondência é encontrada, a regra é aplicada e o processo de pesquisa é interrompido.

Por exemplo, para permitir conexões POP3 através do daemon mail/qpopper, as seguintes linhas devem ser anexadas ao arquivo hosts.allow:

# This line is required for POP3 connections:
qpopper : ALL : allow

Sempre que este arquivo for editado, reinicie o inetd:

# service inetd restart

13.4.2. Configuração Avançada

O TCP Wrapper fornece opções avançadas para permitir mais controle sobre o modo como as conexões são tratadas. Em alguns casos, pode ser apropriado retornar um comentário para determinados hosts ou conexões de daemon. Em outros casos, uma entrada de log deve ser registrada ou um email enviado ao administrador. Outras situações podem exigir o uso de um serviço apenas para conexões locais. Isso tudo é possível através do uso de opções de configuração conhecidas como wildcards, caracteres de expansão e execução de comandos externos.

Suponha que uma situação ocorra onde uma conexão deva ser negada, mas uma razão deve ser enviada ao host que tentou estabelecer essa conexão. Essa ação é possível com a opção twist. Quando uma tentativa de conexão é feita, o twist executa um comando ou script shell. Existe um exemplo no arquivo hosts.allow:

# The rest of the daemons are protected.
ALL : ALL \
	: severity auth.info \
	: twist /bin/echo "You are not welcome to use %d from %h."

Neste exemplo, a mensagem "You are not allowed to use daemon name from hostname." será retornada para qualquer daemon não configurado no hosts.allow. Isso é útil para enviar uma resposta de volta ao inicializador de conexão logo após a conexão estabelecida ser descartada. Qualquer mensagem a ser retornada deve ser delimitada por caracteres de aspas duplas (").

Pode ser possível iniciar um ataque de negação de serviço no servidor se um invasor inunda esses daemons com solicitações de conexão.

Outra possibilidade é usar a opção spawn. Como a opção twist, a opção spawn implicitamente nega a conexão e pode ser usado para executar comandos ou scripts externos do shell. Ao contrário da twist, a spawn não enviará uma resposta ao host que estabeleceu a conexão. Por exemplo, considere a seguinte configuração:

# We do not allow connections from example.com:
ALL : .example.com \
	: spawn (/bin/echo %a from %h attempted to access %d >> \
	  /var/log/connections.log) \
	: deny

Isso negará todas as tentativas de conexão de *.example.com e registrará o nome do host, endereço IP e o daemon ao qual o acesso foi tentado no arquivo /var/log/connections.log. Este exemplo usa os caracteres de substituição %a e %h. Consulte hosts_access(5) para a lista completa.

Para corresponder a cada instância de um daemon, domínio ou endereço IP, use ALL. Outro wildcard é o PARANOID, que pode ser usado para corresponder a qualquer host que forneça um endereço IP que possa ser forjado, porque o endereço IP difere do nome resolvido para o host. Neste exemplo, todas as solicitações de conexão para o Sendmail que possuem um endereço IP que varia de seu nome de host serão negadas:

# Block possibly spoofed requests to sendmail:
sendmail : PARANOID : deny

Usar o wildcard PARANOID resultará em conexões negadas se o cliente ou servidor tiver uma configuração de DNS incorreta.

Para saber mais sobre wildcards e sua funcionalidade associada, consulte hosts_access(5).

Ao adicionar novas linhas de configuração, certifique-se de que quaisquer entradas desnecessárias para esse daemon sejam comentadas no arquivo hosts.allow.

13.5. Kerberos

O Kerberos é um protocolo de autenticação de rede que foi originalmente criado pelo Instituto de Tecnologia de Massachusetts (MIT) como uma maneira segura de fornecer autenticação em uma rede potencialmente hostil. O protocolo Kerberos usa criptografia robusta para que tanto um cliente quanto um servidor possam provar sua identidade sem enviar nenhum segredo não criptografado pela rede. O Kerberos pode ser descrito como um sistema proxy de verificação de identidade e como um sistema confiável de autenticação de terceiros. Depois que um usuário autentica com Kerberos, suas comunicações podem ser criptografadas para garantir privacidade e integridade dos dados.

A única função do Kerberos é fornecer a autenticação segura de usuários e servidores na rede. Ele não fornece funções de autorização ou auditoria. Recomenda-se que o Kerberos seja usado com outros métodos de segurança que forneçam serviços de autorização e auditoria.

A versão atual do protocolo é a versão 5, descrita na RFC 4120. Várias implementações gratuitas deste protocolo estão disponíveis, abrangendo uma ampla gama de sistemas operacionais. O MIT continua desenvolvendo o pacote Kerberos. É comumente usado no US como um produto de criptografia e, historicamente, está sujeito aos regulamentos de exportação dos US. No FreeBSD, o MITKerberos está disponível como o pacote ou port security/krb5. A implementação do Kerberos do Heimdal foi explicitamente desenvolvida fora do US para evitar regulamentações de exportação. A distribuição Kerberos do Heimdal está incluída na instalação base do FreeBSD, e outra distribuição com opções mais configuráveis está disponível como security/heimdal na Coleção de Ports.

No Kerberos, os usuários e serviços são identificados como "principals", que estão contidos em um agrupamento administrativo chamado de "realm". Um usuário principal típico teria o formato user@REALM (os realms são tradicionalmente em caracteres maiúsculos).

Esta seção fornece um guia sobre como configurar o Kerberos usando a distribuição Heimdal incluída no FreeBSD.

Para fins de demonstração de uma instalação do Kerberos , os namespaces serão os seguintes:

  • O domínio (zona) de domínio DNS será example.org.

  • O realm Kerberos será EXAMPLE.ORG.

Use nomes de domínio reais ao configurar o Kerberos, mesmo que ele seja executado internamente. Isso evita problemas de DNS e garante a interoperabilidade com outros realms do Kerberos.

13.5.1. Configurando um KDC do Heimdal

O Centro de Distribuição de Chaves (KDC) é o serviço de autenticação centralizada que o Kerberos fornece, a "a parte de terceiros confiáveis" do sistema. É o computador que emite os tíquetes Kerberos, que são usados para autenticação dos clientes nos servidores. Como o KDC é considerado confiável por todos os outros computadores no realm do Kerberos, isso aumenta as preocupações com a segurança. O acesso direto ao KDC deve ser limitado.

Embora a execução de um KDC exija poucos recursos de computação, uma máquina dedicada que atua apenas como um KDC é recomendada por motivos de segurança.

Para começar, instale o pacote security/heimdal assim:

# pkg install heimdal

Em seguida, edite o /etc/rc.conf como a seguir:

# sysrc kdc_enable=yes
# sysrc kadmind_enable=yes

Em seguida, edite o arquivo /etc/krb5.conf como a seguir:

[libdefaults]
    default_realm = EXAMPLE.ORG
[realms]
    EXAMPLE.ORG = {
	kdc = kerberos.example.org
	admin_server = kerberos.example.org
    }
[domain_realm]
    .example.org = EXAMPLE.ORG

Neste exemplo, o KDC usará o nome completo do host kerberos.example.org. O nome do host do KDC precisa ser resolvido no DNS.

O Kerberos também pode usar o DNS para localizar os KDCs, em vez de uma seção [realms] no arquivo /etc/krb5.conf. Para grandes organizações que possuem seus próprios servidores DNS, o exemplo acima pode ser reduzido para:

[libdefaults]
      default_realm = EXAMPLE.ORG
[domain_realm]
    .example.org = EXAMPLE.ORG

Com as seguintes linhas sendo incluídas no arquivo de zona do domínio example.org:

_kerberos._udp      IN  SRV     01 00 88 kerberos.example.org.
_kerberos._tcp      IN  SRV     01 00 88 kerberos.example.org.
_kpasswd._udp       IN  SRV     01 00 464 kerberos.example.org.
_kerberos-adm._tcp  IN  SRV     01 00 749 kerberos.example.org.
_kerberos           IN  TXT     EXAMPLE.ORG

Para que os clientes possam encontrar os serviços Kerberos, eles devem ter um /etc/krb5.conf totalmente configurado ou um /etc/krb5.conf minimamente configurado e um servidor DNS corretamente configurado.

Em seguida, crie o banco de dados do Kerberos que contém as chaves de todos os principals (usuários e hosts) criptografados com uma senha master. Não é necessário lembrar essa senha, pois ela será armazenada no arquivo /var/heimdal/m-key; Seria razoável usar uma senha aleatória de 45 caracteres para essa finalidade. Para criar a chave master, execute kstash e digite uma senha:

# kstash
Master key: xxxxxxxxxxxxxxxxxxxxxxx
Verifying password - Master key: xxxxxxxxxxxxxxxxxxxxxxx

Depois que a chave master é criada, o banco de dados deve ser inicializado. A ferramenta administrativa do Kerberoskadmin(8) pode ser usada no KDC em um modo que opera diretamente no banco de dados, sem usar o serviço de rede kadmind(8), como kadmin -l. Isso resolve o problema do ovo e da galinha de tentar se conectar ao banco de dados antes de criá-lo. No prompt do kadmin, use o init para criar o banco de dados inicial do realm:

# kadmin -l
kadmin> init EXAMPLE.ORG
Realm max ticket life [unlimited]:

Por fim, enquanto ainda estiver no kadmin, crie o primeiro principal usando add. Atenha-se às opções padrão para o principal por enquanto, pois elas podem ser alteradas posteriormente com modify. Digite ? no prompt para ver as opções disponíveis.

kadmin> add tillman
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
Password: xxxxxxxx
Verifying password - Password: xxxxxxxx

Em seguida, inicie o serviço KDC executando:

# service kdc start
# service kadmind start

Embora não tenha nenhum daemon do kerberos em execução neste ponto, é possível confirmar que o KDC está funcionando obtendo um ticket para o principal que acabou de ser criado:

% kinit tillman
tillman@EXAMPLE.ORG's Password:

Confirme se um ticket foi obtido com sucesso usando klist:

% klist
Credentials cache: FILE:/tmp/krb5cc_1001
	Principal: tillman@EXAMPLE.ORG

  Issued                Expires               Principal
Aug 27 15:37:58 2013  Aug 28 01:37:58 2013  krbtgt/EXAMPLE.ORG@EXAMPLE.ORG

O ticket temporário pode ser destruído quando o teste terminar:

% kdestroy

13.5.2. Configurando um Servidor para Usar o Kerberos

A primeira etapa na configuração de um servidor para usar a autenticação Kerberos é garantir que ele tenha a configuração correta no arquivo /etc/krb5.conf. A versão do KDC pode ser usada como está, ou pode ser regenerada no novo sistema.

Em seguida, crie o arquivo /etc/krb5.keytab no servidor. Esta é a parte principal de "Kerberizar" um serviço - ele corresponde a gerar uma chave secreta compartilhada entre o serviço e o KDC. O segredo é uma chave criptográfica, armazenada em um "keytab". O keytab contém a chave do host do servidor, que permite que ele e o KDC verifiquem a identidade um do outro. Ele deve ser transmitido para o servidor de maneira segura, pois a segurança do servidor pode ser quebrada se a chave for tornada pública. Normalmente, o keytab é gerado na máquina confiável de um administrador usando o kadmin, e então transferido com segurança para o servidor, por exemplo, com scp(1); Ele também pode ser criado diretamente no servidor, se isso for consistente com a política de segurança desejada. É muito importante que o keytab seja transmitido para o servidor de forma segura: se a chave for conhecida por outra parte, essa parte pode representar qualquer usuário para o servidor! Usar o kadmin diretamente no servidor é conveniente, porque a entrada para o principal do host no banco de dados do KDC também é criada usando o kadmin.

Naturalmente, o kadmin é um serviço kerberizado; um tíquete Kerberos é necessário para autenticar-se no serviço de rede, mas para garantir que o usuário que está executando o kadmin esteja presente (e sua sessão não tenha sido invadida), o kadmin solicitará a senha para obter um novo ticket. O principal autenticando no serviço kadmin deve ter permissão para usar a interface kadmin, conforme especificado no arquivo /var/heimdal/kadmind.acl. Veja a seção intitulada "Administração Remota" em info heimdal para detalhes sobre a criação de listas de controle de acesso. Em vez de ativar o acesso remoto ao kadmin, o administrador pode conectar-se com segurança ao KDC através do console local ou por ssh() e executar a administração localmente usando o kadmin -l.

Depois de instalar o arquivo /etc/krb5.conf, use o add --random-key no kadmin. Isso adiciona o principal do host do servidor ao banco de dados, mas não extrai uma cópia da chave principal do host para um keytab. Para gerar o keytab, use ext para extrair a chave principal do host do servidor para seu próprio keytab:

# kadmin
kadmin> add --random-key host/myserver.example.org
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
kadmin> ext_keytab host/myserver.example.org
kadmin> exit

Note que o ext_keytab por padrão armazena a chave extraída no arquivo /etc/krb5.keytab. Isso é bom quando executado no servidor que está sendo kerberizado, mas o argumento --keytab path/to/file deve ser usado quando o keytab estiver sendo extraído em outro lugar:

# kadmin
kadmin> ext_keytab --keytab=/tmp/example.keytab host/myserver.example.org
kadmin> exit

O keytab pode então ser copiado com segurança para o servidor usando o scp(1) ou uma mídia removível. Certifique-se de especificar um nome de keytab não padrão para evitar a inserção de chaves desnecessárias na keytab do sistema.

Neste ponto, o servidor pode ler mensagens criptografadas do KDC usando sua chave compartilhada, armazenada no arquivo krb5.keytab. Agora ele está pronto para ativar os serviços de uso do Kerberos. Um dos serviços mais comuns é o sshd(8), que suporta o Kerberos através do GSS-API. No arquivo /etc/ssh/sshd_config, adicione a linha:

GSSAPIAuthentication yes

Depois de fazer essa alteração, o sshd(8) deve ser reiniciado para que a nova configuração tenha efeito: service sshd restart.

13.5.3. Configurando um cliente para usar o Kerberos

Assim como foi no servidor, o cliente requer configuração no arquivo /etc/krb5.conf. Copie o arquivo no local (com segurança) ou insira-o novamente conforme necessário.

Teste o cliente usando o kinit, klist e kdestroy a partir do cliente para obter, mostrar e excluir um ticket para um principal existente. Os aplicativos Kerberos também devem poder se conectar a servidores habilitados pelo Kerberos. Se isso não funcionar, mas a obtenção de um ticket ocorrer, provavelmente o problema está no servidor e não no cliente ou no KDC. No caso do ssh(1) kerberizado, o GSS-API está desabilitado por padrão, portanto teste usando ssh -o GSSAPIAuthentication=yes hostname.

Ao testar um aplicativo Kerberizado, tente usar um sniffer de pacote, como o tcpdump, para confirmar que nenhuma informação confidencial é enviada sem proteção.

Várias aplicações Kerberos cliente estão disponíveis. Com o advento de uma ponte para que aplicações usando SASL para autenticação possam usar mecanismos GSS-API, grandes classes de aplicativos clientes podem usar o Kerberos para autenticação, de clientes Jabber a clientes IMAP.

Os usuários em um realm geralmente têm seu principal Kerberos mapeado para uma conta de usuário local. Ocasionalmente, é necessário conceder acesso a uma conta de usuário local a alguém que não tenha um principal Kerberos correspondente. Por exemplo, tillman@EXAMPLE.ORG pode precisar de acesso à conta de usuário local webdevelopers. Outros diretores também podem precisar de acesso a essa conta local.

Os arquivos .k5login e .k5users, colocados no diretório home de um usuário, podem ser usados para resolver este problema. Por exemplo, se o seguinte .k5login for colocado no diretório inicial de webdevelopers, os dois principals listados terão acesso a essa conta sem exigir uma senha compartilhada:

tillman@example.org
jdoe@example.org

Consulte ksu(1) para obter maiores informações sobre o .k5users.

13.5.4. Diferenças com a implementação do MIT

A principal diferença entre as implementações do MIT e a Heimdal é que o kadmin tem um conjunto de comandos diferente, mas equivalente, e usa um protocolo diferente. Se o KDC for MIT, a versão Heimdal do kadmin não poderá ser usada para administrar o KDC remotamente, e vice versa.

Aplicações cliente também podem usar opções de linha de comando ligeiramente diferentes para realizar as mesmas tarefas. Seguir as instruções em http://web.mit.edu/Kerberos/www/ é recomendado. Cuidado com os problemas de caminho: o port MIT é instalado em /usr/local/ por padrão, e os aplicativos do sistema FreeBSD serão executados em vez das versões do MIT se o PATH listar os diretórios do sistema primeiro.

Ao usar o MIT Kerberos como um KDC no FreeBSD, as seguintes edições também devem ser feitas no rc.conf:

kdc_program="/usr/local/sbin/kdc"
kadmind_program="/usr/local/sbin/kadmind"
kdc_flags=""
kdc_enable="YES"
kadmind_enable="YES"

13.5.5. Dicas, Truques e Solução de Problemas do Kerberos

Ao configurar e solucionar problemas do Kerberos, tenha em mente os seguintes pontos:

  • Ao usar o Heimdal ou MITKerberos do ports, certifique-se de que o PATH liste as versões do port dos aplicativos clientes antes das versões do sistema.

  • Se todos os computadores no realm não tiverem configurações de horário sincronizadas, a autenticação poderá falhar. Sincronização de Relógio com NTP descreve como sincronizar os relógios usando o NTP.

  • Se o nome do host for alterado, o host/ principal deve ser alterado e o keytab atualizado. Isso também se aplica a entradas de keytab especiais como o HTTP/ principal usado para o www/mod_auth_kerb do Apache.

  • Todos os hosts no realm devem ser resolvidos tanto de forma direta quanto reversa no DNS ou, no mínimo, no arquivo /etc/hosts. Os CNAMEs funcionarão, mas os registros A e PTR devem estar corretos e no lugar. A mensagem de erro para hosts não resolvidos não é intuitiva: Kerberos5 refuses authentication because Read req failed: Key table entry not found.

  • Alguns sistemas operacionais que agem como clientes para o KDC não definem as permissões para o ksu para serem setuid root. Isso significa que o ksu não funciona. Este é um problema de permissões, não um erro do KDC.

  • Com o MITKerberos, para permitir que um principal tenha uma duração de ticket maior que a duração padrão de dez horas, use modify_principal no kadmin(8) para alterar o maxlife do principal em questão e do krbtgt principal. O principal pode então usar o kinit -l para solicitar um ticket com uma vida útil mais longa.

  • Ao executar um sniffer de pacotes no KDC para auxiliar na solução de problemas enquanto executa kinit de uma estação de trabalho, o Ticket de Concessão de Tickets (TGT) é enviado imediatamente, mesmo antes da digitação da senha. Isso ocorre porque o servidor Kerberos transmite livremente um TGT para qualquer solicitação não autorizada. No entanto, cada TGT é criptografado em uma chave derivada da senha do usuário. Quando um usuário digita sua senha, ela não é enviada para o KDC, ela é usada para descriptografar o TGT que o kinit já obteve. Se o processo de descriptografia resultar em um tíquete válido com um registro de data e hora válido, o usuário terá credenciais do Kerberos válidas. Essas credenciais incluem uma chave de sessão para estabelecer comunicações seguras com o servidor Kerberos no futuro, bem como o TGT, que é criptografado com a chave do próprio servidor Kerberos. Essa segunda camada de criptografia permite que o servidor Kerberos verifique a autenticidade de cada TGT.

  • Os principals do host podem ter uma vida útil maior do ticket. Se o usuário do principal tiver uma vida útil de uma semana, mas o host ao qual está conectado tiver uma vida útil de nove horas, o cache do usuário terá um host principal expirado e o cache do ticket não funcionará como esperado.

  • Ao configurar o arquivo krb5.dict para evitar que senhas incorretas específicas sejam usadas, conforme descrito em kadmind(8), lembre-que só se aplica a entidades que tenham uma política de senha atribuída a elas. O formato usado em krb5.dict é uma string por linha. Criar um link simbólico para /usr/shared/dict/words pode ser útil.

13.5.6. Atenuando as Limitações do Kerberos

Uma vez que com o Kerberos a abordagem é tudo ou nada, cada serviço habilitado na rede deve ser modificado para funcionar com o Kerberos ou ser protegido contra ataques de rede. Isso impede que as credenciais do usuário sejam roubadas e reutilizadas. Um exemplo é quando o Kerberos está habilitado em todos os shells remotos, mas o servidor de email POP3 não-Kerberizado envia senhas em texto simples.

O KDC é um ponto único de falha. Por design, o KDC deve ser tão seguro quanto seu banco de dados de senhas master. O KDC não deve ter absolutamente nenhum outro serviço sendo executado e deve estar fisicamente seguro. O perigo é alto porque o Kerberos armazena todas as senhas criptografadas com a mesma chave mestra que é armazenada como um arquivo no KDC.

Uma chave mestra comprometida não é tão ruim quanto se pode temer. A chave mestra é usada apenas para criptografar o banco de dados do Kerberos e como um seed para o gerador de números aleatórios. Desde que o acesso ao KDC seja seguro, um invasor não poderá fazer muito com a chave mestra.

Se o KDC não estiver disponível, os serviços de rede não poderão ser utilizados, pois a autenticação não poderá ser executada. Isso pode ser mitigado com um único KDC master e um ou mais slaves, e com a implementação cuidadosa da autenticação secundária ou de fallback usando PAM.

O Kerberos permite que usuários, hosts e serviços se autentiquem entre si. Ele não possui um mecanismo para autenticar o KDC para os usuários, hosts ou serviços. Isso significa que um kinit infectado por um trojan pode registrar todos os nomes de usuário e senhas. As ferramentas de verificação de integridade do sistema de arquivos, como security/tripwire, podem mitigar isso.

13.6. OpenSSL

O OpenSSL é uma implementação de software livre dos protocolos SSL e TLS. Ele fornece uma camada de transporte de criptografia sobre a camada de comunicação normal, permitindo que ela seja entrelaçada com muitos aplicativos e serviços de rede.

A versão do OpenSSL incluída no FreeBSD suporta os protocolos de segurança de redes Secure Sockets Layer 3.0 (SSLv3) e Transport Layer Security 1.0/1.1/1.2 (TLSv1/TLSv1.1/TLSv1.2) e pode ser usado como uma biblioteca de criptografia geral. No FreeBSD 12.0-RELEASE e posterior, OpenSSL também suporta Transport Layer Security 1.3 (TLSv1.3).

O OpenSSL é muitas vezes usado para encriptar a autenticação de clientes de email e proteger transações baseadas na web como pagamentos com cartões de crédito. Alguns ports, como o www/apache24 e databases/postgresql11-server, incluem uma opção de compilação para inserir o OpenSSL. Se selecionado, o port vai adicionar suporte ao OpenSSL da base do sistema. Para ter o port compilado com o suporte do OpenSSL do port security/openssl, adicione o seguinte ao arquivo /etc/make.conf:

DEFAULT_VERSIONS+= ssl=openssl

Outro uso comum do OpenSSL é fornecer certificados para uso com aplicaçõe de software. Os certificados podem ser usados para verificar as credenciais de uma empresa ou indivíduo. Se um certificado não tiver sido assinado por uma Autoridade de Certificação externa ( CA ), como http://www.verisign.com, o aplicativo que usa o certificado produzirá um aviso. Há um custo associado à obtenção de um certificado assinado e o uso de um certificado assinado não é obrigatório, pois os certificados podem ser auto-assinados. No entanto, o uso de uma autoridade externa evitará avisos e poderá deixar os usuários mais à vontade.

Esta seção demonstra como criar e usar certificados em um sistema FreeBSD. Consulte Configurando um servidor LDAP para um exemplo de como criar uma CA para assinar seus próprios certificados.

Para obter maiores informações sobre o SSL, leia o OpenSSL Cookbook gratuito.

13.6.1. Gerando Certificados

Para gerar um certificado que será assinado por uma CA externa, emita o seguinte comando e insira as informações solicitadas nos prompts. Esta informação de entrada será gravada no certificado. No prompt Common Name, insira o nome completo para o sistema que usará o certificado. Se esse nome não corresponder ao servidor, a aplicação que estiver verificando o certificado emitirá um aviso para o usuário, tornando a verificação provida pelo certificado inútil.

# openssl req -new -nodes -out req.pem -keyout cert.key -sha256 -newkey rsa:2048
Generating a 2048 bit RSA private key
..................+++
.............................................................+++
writing new private key to 'cert.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (eg, YOUR name) []:localhost.example.org
Email Address []:trhodes@FreeBSD.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Another Name

Outras opções, como o tempo de expiração e algoritmos de criptografia alternativos, estão disponíveis ao criar um certificado. Uma lista completa de opções é descrita em openssl(1).

Este comando irá criar dois arquivos no diretório atual. A solicitação de certificado, req.pem, pode ser enviada para uma CA que validará as credenciais inseridas, assinará a solicitação e retornará o certificado assinado. O segundo arquivo, cert.key, é a chave privada do certificado e deve ser armazenado em um local seguro. Se ele cair nas mãos de outros, ele pode ser usado para representar o usuário ou o servidor.

Como alternativa, se uma assinatura de uma CA não for necessária, um certificado auto-assinado poderá ser criado. Primeiro, gere a chave RSA:

# openssl genrsa -rand -genkey -out cert.key 2048
0 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
.............................................+++
.................................................................................................................+++
e is 65537 (0x10001)

Use essa chave para criar um certificado auto-assinado. Siga os prompts usuais para criar um certificado:

# openssl req -new -x509 -days 365 -key cert.key -out cert.crt -sha256
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (e.g. server FQDN or YOUR name) []:localhost.example.org
Email Address []:trhodes@FreeBSD.org

Isso criará dois novos arquivos no diretório atual: um arquivo de chave privada cert.key e o próprio certificado, cert.crt. Estes devem ser colocados em um diretório, preferencialmente sob /etc/ssl/, que é legível somente pelo root. As permissões de 0700 são apropriadas para esses arquivos e podem ser definidas usando o chmod.

13.6.2. Usando Certificados

Um uso para um certificado é criptografar conexões do servidor de email Sendmail para evitar o trafego de informações de autenticação em texto não criptografado.

Alguns clientes de email exibirão um erro se o usuário não tiver instalado uma cópia local do certificado. Consulte a documentação incluída com o software para obter maiores informações sobre a instalação do certificado.

No FreeBSD 10.0-RELEASE e posterior, é possível criar um certificado auto-assinado para o Sendmail automaticamente. Para habilitar isso, adicione as seguintes linhas ao arquivo /etc/rc.conf:

sendmail_enable="YES"
sendmail_cert_create="YES"
sendmail_cert_cn="localhost.example.org"

Isso criará automaticamente um certificado auto-assinado, /etc/mail/certs/host.cert, uma chave de assinatura, /etc/mail/certs/host.key, e um certificado CA, /etc/mail/certs/cacert.pem. O certificado usará o Common Name especificado em sendmail_cert_cn. Depois de salvar as edições, reinicie o Sendmail:

# service sendmail restart

Se tudo correr bem, não haverá mensagens de erro no arquivo /var/log/maillog. Para um teste simples, conecte-se à porta de escuta do servidor de correio usando o telnet:

# telnet example.com 25
Trying 192.0.34.166...
Connected to example.com.
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.14.7/8.14.7; Fri, 18 Apr 2014 11:50:32 -0400 (EDT)
ehlo example.com
250-example.com Hello example.com [192.0.34.166], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 example.com closing connection
Connection closed by foreign host.

Se a linha STARTTLS aparecer na saída, tudo está funcionando corretamente.

13.7. VPN Sobre IPsec

O Protocolo de Segurança da Internet (IPsec) é um conjunto de protocolos que se situam no topo da camada do Protocolo da Internet (IP). Ele permite que dois ou mais hosts se comuniquem de maneira segura, autenticando e criptografando cada pacote IP de uma sessão de comunicação. A pilha de rede IPsec do FreeBSD é baseada na implementação do http://www.kame.net/ e suporta as sessões IPv4 e IPv6.

O IPsec é composto pelos seguintes sub-protocolos:

  • Encapsulated Securtity Payload (ESP): este protocolo protege os dados do pacote IP da interferência de terceiros, criptografando o conteúdo usando algoritmos de criptografia simétricos, como Blowfish e 3DES.

  • _Authentication Header (AH) _: este protocolo protege o cabeçalho do pacote IP da interferência e spoofing de terceiros calculando um checksum criptográfico e gerando o hash dos campos de cabeçalho do pacote IP com uma função de hash segura. Isso é seguido por um cabeçalho adicional que contém o hash, para permitir que as informações no pacote sejam autenticadas.

  • IP Payload Compression Protocol (IPComp): este protocolo tenta aumentar o desempenho da comunicação comprimindo o payload IP para reduzir a quantidade de dados enviados .

Esses protocolos podem ser usados juntos ou separadamente, dependendo do ambiente.

O IPsec suporta dois modos de operação. O primeiro modo, Modo de Transporte, protege as comunicações entre dois hosts. O segundo modo, Modo de túnel, é usado para construir túneis virtuais, comumente conhecidos como redes privadas virtuais (VPNs). Consulte ipsec(4) para obter informações detalhadas sobre o subsistema IPsec no FreeBSD.

O suporte a IPsec é ativado por padrão no FreeBSD 11 e posteriores. Para versões anteriores do FreeBSD, adicione estas opções a um arquivo de configuração de kernel personalizado e recompile o kernel usando as instruções em Configurando o kernel do FreeBSD:

options   IPSEC        IP security
device    crypto

Se o suporte a depuração do IPsec for desejado, a seguinte opção de kernel também deve ser adicionada:

options   IPSEC_DEBUG  debug for IP security

Este restante deste capítulo demonstra o processo de configuração de uma VPNIPsec entre uma rede doméstica e uma rede corporativa. No cenário de exemplo:

  • Ambos os sites estão conectados à Internet através de um gateway que está executando o FreeBSD.

  • O gateway em cada rede tem pelo menos um endereço IP externo. Neste exemplo, o endereço IP externo da LAN corporativa é 172.16.5.4 e o IP externo da LAN doméstica é 192.168.1.12.

  • Os endereços internos das duas redes podem ser endereços IP públicos ou privados. No entanto, o espaço de endereço não deve colidir. Por exemplo, ambas as redes não podem usar 192.168.1.x. Neste exemplo, o endereço IP interno da LAN corporativa é 10.246.38.1 e o endereço do IP interno da LAN doméstica é 10.0.0.5.

13.7.1. Configurando uma VPN no FreeBSD

Para começar, o security/ipsec-tools deve ser instalado a partir da Coleção de Ports. Este software fornece várias aplicações que suportam a configuração.

O próximo requisito é criar dois pseudo-dispositivos gif(4) que serão usados para encapsular pacotes e permitir que ambas as redes se comuniquem adequadamente. Como root, execute os seguintes comandos, substituindo internal e external pelos endereços IP reais das interfaces internas e externas dos dois gateways:

# ifconfig gif0 create
# ifconfig gif0 internal1 internal2
# ifconfig gif0 tunnel external1 external2

Verifique a configuração em cada gateway, usando o ifconfig. Aqui está a saída do Gateway 1:

gif0: flags=8051 mtu 1280
tunnel inet 172.16.5.4 --> 192.168.1.12
inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6
inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00

Aqui está a saída do Gateway 2:

gif0: flags=8051 mtu 1280
tunnel inet 192.168.1.12 --> 172.16.5.4
inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00
inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4

Depois de concluídos, os dois endereços de IP internos devem ser acessados usando ping(8):

priv-net# ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms
--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms
corp-net# ping 10.246.38.1
PING 10.246.38.1 (10.246.38.1): 56 data bytes
64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms
64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms
64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms
64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms
64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms
--- 10.246.38.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms

Como esperado, ambos os lados têm a capacidade de enviar e receber pacotes ICMP dos endereços configurados de forma privada. Em seguida, os dois gateways devem ser informados sobre como rotear pacotes para enviar corretamente o tráfego de qualquer rede. Os seguintes comandos atingirão esse objetivo:

corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0
corp-net# route add net 10.0.0.0: gateway 10.0.0.5
priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0
priv-net# route add host 10.246.38.0: gateway 10.246.38.1

Neste ponto, as máquinas internas devem ser alcançadas de cada gateway, bem como das máquinas atrás dos gateways. Novamente, use o ping(8) para confirmar:

corp-net# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8): 56 data bytes
64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms
64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms
64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms
--- 10.0.0.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms

priv-net# ping 10.246.38.107
PING 10.246.38.1 (10.246.38.107): 56 data bytes
64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms
64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms
64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms
64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms
64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms
--- 10.246.38.107 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms

Configurar os túneis é a parte fácil. Configurar um link seguro é um processo mais aprofundado. A seguinte configuração usa chaves RSA pré-compartilhadas (PSK). Além dos endereços IP, o arquivo /usr/local/etc/racoon/racoon.conf em ambos os gateways será idêntico e será semelhante a:

path    pre_shared_key  "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file
log     debug;	#log verbosity setting: set to 'notify' when testing and debugging is complete

padding	# options are not to be changed
{
        maximum_length  20;
        randomize       off;
        strict_check    off;
        exclusive_tail  off;
}

timer	# timing options. change as needed
{
        counter         5;
        interval        20 sec;
        persend         1;
#       natt_keepalive  15 sec;
        phase1          30 sec;
        phase2          15 sec;
}

listen	# address [port] that racoon will listen on
{
        isakmp          172.16.5.4 [500];
        isakmp_natt     172.16.5.4 [4500];
}

remote  192.168.1.12 [500]
{
        exchange_mode   main,aggressive;
        doi             ipsec_doi;
        situation       identity_only;
        my_identifier   address 172.16.5.4;
        peers_identifier        address 192.168.1.12;
        lifetime        time 8 hour;
        passive         off;
        proposal_check  obey;
#       nat_traversal   off;
        generate_policy off;

                        proposal {
                                encryption_algorithm    blowfish;
                                hash_algorithm          md5;
                                authentication_method   pre_shared_key;
                                lifetime time           30 sec;
                                dh_group                1;
                        }
}

sainfo  (address 10.246.38.0/24 any address 10.0.0.0/24 any)	# address $network/$netmask $type address $network/$netmask $type ( $type being any or esp)
{								# $network must be the two internal networks you are joining.
        pfs_group       1;
        lifetime        time    36000 sec;
        encryption_algorithm    blowfish,3des;
        authentication_algorithm        hmac_md5,hmac_sha1;
        compression_algorithm   deflate;
}

Para descrições de cada opção disponível, consulte a página de manual do racoon.conf.

O Banco de Dados da Política de Segurança (SPD) precisa ser configurado para que o FreeBSD e o racoon consigam criptografar e descriptografar o tráfego de rede entre os hosts.

Isso pode ser obtido com um shell script, semelhante ao seguinte, no gateway corporativo. Este arquivo será usado durante a inicialização do sistema e deve ser salvo como /usr/local/etc/racoon/setkey.conf.

flush;
spdflush;
# To the home network
spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use;
spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;

Uma vez que o arquivo estiver no seu lugar, o racoon pode ser iniciado em ambos os gateways usando o seguinte comando:

# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log

A saída deve ser semelhante à seguinte:

corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf
Foreground mode.
2006-01-30 01:35:47: INFO: begin Identity Protection mode.
2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a
2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)
2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)

Para garantir que o túnel esteja funcionando corretamente, mude para outro console e use o tcpdump(1) para exibir o tráfego de rede usando o comando a seguir. Substitua em0 pela placa de interface de rede conforme necessário:

# tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12

Dados semelhantes aos seguintes devem aparecer no console. Caso contrário, há um problema e a depuração dos dados retornados será necessária.

01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa)
01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb)
01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)

Neste ponto, as duas redes devem estar disponíveis e parecem fazer parte da mesma rede. Muito provavelmente ambas as redes estão protegidas por um firewall. Para permitir que o tráfego flua entre elas, regras precisam ser adicionadas para liberar a passagem dos pacotes. Para o firewall ipfw(8), adicione as seguintes linhas ao arquivo de configuração do firewall:

ipfw add 00201 allow log esp from any to any
ipfw add 00202 allow log ah from any to any
ipfw add 00203 allow log ipencap from any to any
ipfw add 00204 allow log udp from any 500 to any

Os números das regras podem precisar ser alterados dependendo da configuração atual do host.

Para usuários do pf(4) ou do ipf(8) , as seguintes regras devem fazer o truque:

pass in quick proto esp from any to any
pass in quick proto ah from any to any
pass in quick proto ipencap from any to any
pass in quick proto udp from any port = 500 to any port = 500
pass in quick on gif0 from any to any
pass out quick proto esp from any to any
pass out quick proto ah from any to any
pass out quick proto ipencap from any to any
pass out quick proto udp from any port = 500 to any port = 500
pass out quick on gif0 from any to any

Finalmente, para permitir que a máquina inicie o suporte para a VPN durante a inicialização do sistema, adicione as seguintes linhas ao arquivo /etc/rc.conf:

ipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot
racoon_enable="yes"

13.8. OpenSSH

O OpenSSH é um conjunto de ferramentas de conectividade de rede usadas para fornecer acesso seguro a máquinas remotas. Além disso, as conexões TCP/IP podem ser encapsuladas ou encaminhadas com segurança através de conexões SSH. O OpenSSH criptografa todo o tráfego para eliminar efetivamente a interceptação, o sequestro de conexão e outros ataques no nível da rede.

O OpenSSH é mantido pelo projeto OpenBSD e é instalado por padrão no FreeBSD. É compatível com os protocolos de versão 1 e 2 do SSH.

Quando os dados são enviados pela rede em um formato não criptografado, sniffers de rede posicionados em qualquer lugar entre o cliente e o servidor podem roubar as informações do usuário/senha ou os dados transferidos durante a sessão. O OpenSSH oferece uma variedade de métodos de autenticação e criptografia para evitar que isso aconteça. Mais informações sobre o OpenSSH estão disponíveis em http://www.openssh.com/.

Esta seção fornece uma visão geral dos utilitários embutidos de cliente para acessar com segurança outros sistemas e transferir arquivos com segurança de um sistema FreeBSD. Em seguida, descreve como configurar um servidor SSH em um sistema FreeBSD. Maiores informações estão disponíveis nas páginas man mencionadas neste capítulo.

13.8.1. Usando os Utilitários de Cliente SSH

Para logar em um servidor SSH, use ssh e especifique um nome de usuário que exista naquele servidor e o endereço IP ou nome de host do servidor. Se esta for a primeira vez que uma conexão foi feita ao servidor especificado, o usuário será solicitado a primeiro verificar a impressão digital do servidor:

# ssh user@example.com
The authenticity of host 'example.com (10.0.0.1)' can't be established.
ECDSA key fingerprint is 25:cc:73:b5:b3:96:75:3d:56:19:49:d2:5c:1f:91:3b.
Are you sure you want to continue connecting (yes/no)? yes
Permanently added 'example.com' (ECDSA) to the list of known hosts.
Password for user@example.com: user_password

O SSH utiliza um sistema de impressão digital de chaves para verificar a autenticidade do servidor quando o cliente se conecta. Quando o usuário aceita a impressão digital da chave digitando yes ao conectar-se pela primeira vez, uma cópia da chave é salva em .ssh/known_hosts no diretório pessoal do usuário. Futuras tentativas de login são verificadas em relação à chave salva e o ssh exibirá um alerta se a chave do servidor não corresponder à chave salva. Se isso ocorrer, o usuário deve primeiro verificar por que a chave foi alterada antes de continuar com a conexão.

Por padrão, versões recentes do OpenSSH aceitam apenas conexões SSH v2. Por padrão, o cliente usará a versão 2 se possível e voltará para a versão 1 se o servidor não suportar a versão 2. Para forçar o ssh a usar somente o protocolo especificado, inclua -1 ou -2. Opções adicionais são descritas em ssh(1).

Use o scp(1) para copiar com segurança um arquivo para ou de uma máquina remota. Este exemplo copia o arquivo COPYRIGHT do sistema remoto para um arquivo com o mesmo nome no diretório atual do sistema local:

# scp user@example.com:/COPYRIGHT COPYRIGHT
Password for user@example.com: *******
COPYRIGHT            100% |*****************************|  4735
00:00
#

Como a impressão digital já foi verificada para esse host, a chave do servidor é verificada automaticamente antes de solicitar a senha do usuário.

Os argumentos passados para o scp são semelhantes ao comando cp. O arquivo ou arquivos para copiar é o primeiro argumento e o destino para copiar é o segundo. Como o arquivo é buscado pela rede, um ou mais dos argumentos do arquivo assumem o formato user@host:<path_to_remote_file>. Esteja ciente ao copiar recursivamente diretórios que o scp usa a opção -r, enquanto cp usa a -R.

Para abrir uma sessão interativa para copiar arquivos, use o sftp. Consulte sftp(1) para obter uma lista de comandos disponíveis enquanto estiver em uma sessão sftp.

13.8.1.1. Autenticação Baseada em Chave

Em vez de usar senhas, um cliente pode ser configurado para se conectar à máquina remota usando chaves. Para gerar chaves de autenticação RSA, use o ssh-keygen. Para gerar um par de chaves pública e privada, especifique o tipo de chave e siga os prompts. Recomenda-se proteger as chaves com uma senha memorável, mas difícil de se adivinhar.

% ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):  (1)
Enter same passphrase again:                 (2)
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:54Xm9Uvtv6H4NOo6yjP/YCfODryvUU7yWHzMqeXwhq8 user@host.example.com
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|                 |
|        . o..    |
|       .S*+*o    |
|      . O=Oo . . |
|       = Oo= oo..|
|      .oB.* +.oo.|
|       =OE**.o..=|
+----[SHA256]-----+
1Digite uma senha aqui. Pode conter espaços e símbolos.
2Digite novamente a senha para verificá-la.

A chave privada é armazenada no arquivo ~/.ssh/id_rsa e a chave pública é armazenada no arquivo ~/.ssh/id_rsa.pub. A chave publica deve ser copiada para ~/.ssh/ authorized_keys na máquina remota para que a autenticação baseada em chave funcione.

Muitos usuários acreditam que as chaves são seguras por design e usarão uma chave sem uma senha. Este é um comportamento perigoso. Um administrador pode verificar se um par de chaves está protegido por uma senha, visualizando a chave privada manualmente. Se o arquivo de chave privada contiver a palavra ENCRYPTED, o dono da chave está usando uma senha. Além disso, para proteger melhor os usuários finais, o termo from pode ser colocado no arquivo de chave pública. Por exemplo, adicionar from "192.168.10.5" na frente do prefixo ssh-rsa só permitirá que esse usuário específico efetue login a partir desse endereço IP.

As opções e arquivos variam de acordo com as diferentes versões do OpenSSH. Para evitar problemas, consulte ssh-keygen(1).

Se uma senha for usada, o usuário será solicitado a inserir a senha toda vez que uma conexão for feita ao servidor. Para carregar as chaves de SSH na memória e remover a necessidade de digitar a senha toda vez, use o ssh-agent(1) e o ssh-add(1).

A autenticação é feita pelo ssh-agent, usando as chaves privadas que estão carregadas nele. O ssh-agent pode ser usado para iniciar outro aplicativo como um shell ou um gerenciador de janelas.

Para usar o ssh-agent em um shell, inicie-o com um shell como um argumento. Adicione a identidade executando ssh-add e inserindo a senha para a chave privada. O usuário então poderá executar o ssh para se conectar em qualquer host que tenha a chave pública correspondente instalada. Por exemplo:

% ssh-agent csh
% ssh-add
Enter passphrase for key '/usr/home/user/.ssh/id_rsa':  (1)
Identity added: /usr/home/user/.ssh/id_rsa (/usr/home/user/.ssh/id_rsa)
%
1Digite a senha para a chave.

Para usar o ssh-agent no Xorg, adicione uma entrada para ele em ~/.xinitrc. Isso fornece os serviços do ssh-agent para todos os programas iniciados no Xorg. Um exemplo do arquivo ~/.xinitrc pode ter esta aparência:

exec ssh-agent startxfce4

Isso inicia o ssh-agent, que, por sua vez, ativa o XFCE, sempre que o Xorg é iniciado. Uma vez que o Xorg tenha sido reiniciado para que as mudanças entrem em vigor, execute ssh-add para carregar todas as chaves SSH.

13.8.1.2. Tunelamento SSH

O OpenSSH tem a capacidade de criar um tunel para encapsular outro protocolo em uma sessão criptografada.

O comando a seguir informa ao ssh para criar um túnel para o telnet:

% ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
%

Este exemplo usa as seguintes opções:

-2

Força o comando ssh a usar a versão 2 para conectar-se ao servidor.

-N

Indica nenhum comando ou apenas túnel. Se omitido, o ssh inicia uma sessão normal.

-f

Força o comando ssh a ser executado em segundo plano.

-L

Indica um túnel local no formato localport:remotehost:remoteport.

user@foo.example.com

O nome de login para usar no servidor SSH remoto especificado.

Um túnel SSH funciona criando um socket de escuta em localhost na localport especificada. Em seguida, ele encaminha quaisquer conexões recebidas em localport por meio da conexão SSH com o remotehost:remoteport especificado. No exemplo, a porta 5023 no cliente é encaminhada para a porta 23 na máquina remota. Como a porta 23 é usada pelo telnet, isso cria uma sessão telnet criptografada através de um túnel SSH.

Esse método pode ser usado para agrupar qualquer número de protocolos TCP inseguros, como SMTP, POP3 e FTP, como visto nos exemplos a seguir.

Exemplo 30. Criar um Túnel Seguro para SMTP
% ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
user@mailserver.example.com's password: *****
% telnet localhost 5025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailserver.example.com ESMTP

Isso pode ser usado em conjunto com ssh-keygen e contas de usuário adicionais para criar um ambiente de encapsulamento SSH mais uniforme. As chaves podem ser usadas no lugar de digitar uma senha e os túneis podem ser executados como um usuário separado.

Exemplo 31. Acesso Seguro de um Servidor POP3

Neste exemplo, há um servidor SSH que aceita conexões de fora. Na mesma rede, existe um servidor de email que executa um servidor POP3. Para verificar o e-mail de maneira segura, crie uma conexão SSH com o servidor SSH e encaminhe para o servidor de e-mail:

% ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
user@ssh-server.example.com's password: ******

Quando o túnel estiver ativo e em execução, aponte o cliente de e-mail para enviar solicitações POP3 para localhost na porta 2110. Essa conexão será encaminhada com segurança pelo encapsulamento para mail.example.com.

Exemplo 32. Ignorando um Firewall

Alguns firewalls filtram as conexões de entrada e saída. Por exemplo, um firewall pode limitar o acesso de máquinas remotas às portas 22 e 80 para permitir apenas o SSH e navegação na web. Isso impede o acesso a qualquer outro serviço que use uma porta diferente de 22 ou 80.

A solução é criar uma conexão SSH com uma máquina fora do firewall da rede e usá-la para encapsular o serviço desejado:

% ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
user@unfirewalled-system.example.org's password: *******

Neste exemplo, um cliente Ogg Vorbis de streaming pode agora ser apontado para localhost na porta 8888, que será encaminhado para music.example.com na porta 8000, ignorando com êxito o firewall.

13.8.2. Ativando o Servidor SSH

Além de fornecer utilitários de cliente SSH embutidos, um sistema FreeBSD pode ser configurado como um servidor SSH, aceitando conexões de outros clientes SSH.

Para ver se o sshd está operando, use o comando service(8):

# service sshd status

Se o serviço não estiver em execução, adicione a seguinte linha ao arquivo /etc/rc.conf.

sshd_enable="YES"

Isso iniciará o sshd, o programa daemon para o OpenSSH, na próxima vez que o sistema for inicializado. Para iniciá-lo agora:

# service sshd start

A primeira vez que o sshd inicia em um sistema FreeBSD, as chaves de host do sistema serão criadas automaticamente e a impressão digital será exibida no console. Forneça aos usuários a impressão digital para que eles possam verificá-la na primeira vez que se conectarem ao servidor.

Consulte o sshd(8) para obter a lista de opções disponíveis ao iniciar o sshd e uma discussão mais completa sobre autenticação, processo de login e os vários arquivos de configuração.

Neste ponto, o sshd deve estar disponível para todos os usuários com um nome de usuário e senha no sistema.

13.8.3. Segurança do Servidor SSH

Enquanto o sshd é o recurso de administração remota mais usado para o FreeBSD, a força bruta e o drive por ataques são comuns a qualquer sistema exposto a redes públicas. Vários parâmetros adicionais estão disponíveis para evitar o sucesso desses ataques e serão descritos nesta seção.

É uma boa ideia limitar quais usuários podem efetuar login no servidor SSH e de onde usar a palavra-chave AllowUsers no arquivo de configuração do servidor OpenSSH. Por exemplo, para permitir que somente o root efetue login de 192.168.1.32, inclua esta linha no arquivo /etc/ssh/sshd_config:

AllowUsers root@192.168.1.32

Para permitir que o usuário admin efetue login de qualquer lugar, liste esse usuário sem especificar um endereço IP:

AllowUsers admin

Multiplos usuários devem ser listados na mesma linha, assim:

AllowUsers root@192.168.1.32 admin

Depois de fazer alterações no arquivo /etc/ssh/sshd_config, informe o sshd para recarregar seu arquivo de configuração executando:

# service sshd reload

Quando essa palavra-chave é usada, é importante listar cada usuário que precisa efetuar login nesta máquina. Qualquer usuário que não esteja especificado nessa linha será bloqueado. Além disso, as palavras-chave usadas no arquivo de configuração do servidor OpenSSH fazem distinção entre maiúsculas e minúsculas. Se a palavra-chave não estiver escrita corretamente, incluindo esse detalhe, ela será ignorada. Sempre teste as alterações neste arquivo para garantir que as edições estejam funcionando conforme o esperado. Consulte o sshd_config(5) para verificar a ortografia e o uso das palavras-chave disponíveis.

Além disso, os usuários podem ser forçados a usar a autenticação de dois fatores por meio do uso de uma chave pública e privada. Quando necessário, o usuário pode gerar um par de chaves usando o ssh-keygen(1) e enviar ao administrador a chave pública. Este arquivo de chave será colocado no arquivo authorized_keys como descrito acima na seção cliente. Para forçar os usuários a usar apenas as chaves, a seguinte opção pode ser configurada:

AuthenticationMethods publickey

Não confunda o arquivo /etc/ssh/sshd_config com /etc/ssh/ssh_config (observe o d extra no primeiro nome do arquivo). O primeiro arquivo configura o servidor e o segundo arquivo configura o cliente. Consulte o ssh_config(5) para obter uma listagem das configurações do cliente disponíveis.

13.9. Listas de Controle de Acesso

As Listas de Controle de Acesso (ACLs) estendem o modelo de permissão padrão do UNIX™ em um compatível com o modo POSIX™.1e. Isso permite que um administrador aproveite um modelo de permissões mais refinado.

O kernel FreeBSD GENERIC fornece suporte a ACL para sistemas de arquivos UFS. Usuários que preferem compilar um kernel personalizado devem incluir a seguinte opção em seu arquivo de configuração do kernel personalizado:

options UFS_ACL

Se esta opção não for ativada na compilação, uma mensagem de aviso será exibida ao tentar montar um sistema de arquivos com o suporte a ACL. As ACLs dependem de atributos estendidos que são suportados nativamente pelo UFS2.

Este capítulo descreve como ativar o suporte a ACL e fornece alguns exemplos de uso.

13.9.1. Ativando o Suporte a ACL

As ACLs são habilitadas pela flag administrativa de tempo de montagem, acls, que podem ser adicionadas ao arquivo /etc/fstab. As flags de tempo de montagem também podem ser configuradas automaticamente de forma persistente usando-se o tunefs(8) para modificar um superbloco de flags ACLs no cabeçalho do sistema de arquivos. Em geral, é preferível usar flags de superbloco por vários motivos:

  • A flag de superbloco não pode ser alterada por um remount usando mount -u, pois requer um umount completo e um mount completo. Isso significa que as ACLs não podem ser ativadas no sistema de arquivos raiz após a inicialização. Isso também significa que o suporte a ACL em um sistema de arquivos não pode ser alterado enquanto o sistema estiver em uso.

  • Definir a flag de superbloco faz com que o sistema de arquivos seja sempre montado com a ACL ativada, mesmo que não haja uma entrada no fstab ou se os dispositivos forem reordenados. Isso evita a montagem acidental do sistema de arquivos sem o suporte a ACL.

É desejável desencorajar a montagem acidental sem que a ACL esteja habilitada porque coisas desagradáveis podem acontecer se ACLs estiverem habilitadas, e então desabilitadas e então reativadas sem limpar os atributos estendidos. Em geral, uma vez que as ACLs forem habilitadas em um sistema de arquivos, elas não devem ser desabilitadas, pois as proteções de arquivos resultantes podem não ser compatíveis com aquelas pretendidas pelos usuários do sistema e ACLs reativadas podem reconectar as ACLs anteriores aos arquivos que tiveram suas permissões alteradas, resultando em um comportamento imprevisível.

Os sistemas de arquivos com a ACL ativada exibirão um sinal de mais (+) nas configurações de permissão:

drwx------  2 robert  robert  512 Dec 27 11:54 private
drwxrwx---+ 2 robert  robert  512 Dec 23 10:57 directory1
drwxrwx---+ 2 robert  robert  512 Dec 22 10:20 directory2
drwxrwx---+ 2 robert  robert  512 Dec 27 11:57 directory3
drwxr-xr-x  2 robert  robert  512 Nov 10 11:54 public_html

Neste exemplo, o directory1, directory2 e directory3 estão todos fazendo uso de ACLs, enquanto public_html não está.

13.9.2. Usando ACLs

As ACLs de um sistema de arquivos podem ser visualizadas usando getfacl. Por exemplo, para visualizar as configurações de ACL no arquivo test:

% getfacl test
	#file:test
	#owner:1001
	#group:1001
	user::rw-
	group::r--
	other::r--

Para alterar as configurações de ACL neste arquivo, use setfacl. Para remover todos os ACLs atualmente definidos de um arquivo ou sistema de arquivos, inclua -k. No entanto, o método preferido é usar -b, pois ela deixa os campos básicos necessários para que as ACLs funcionem.

% setfacl -k test

Para modificar as entradas padrões das ACLs, use -m:

% setfacl -m u:trhodes:rwx,group:web:r--,o::--- test

Neste exemplo, não havia entradas predefinidas, pois elas foram removidas pelo comando anterior. Este comando restaura as opções padrões e atribui as opções listadas. Se um usuário ou grupo for adicionado e não existir no sistema, um erro de Invalid argument será exibido.

Consulte getfacl(1) e setfacl(1) para maiores informações sobre as opções disponíveis para esses comandos.

13.10. Monitorando Problemas de Segurança de Terceiros

Nos últimos anos, o mundo da segurança fez muitas melhorias em como a avaliação de vulnerabilidades é tratada. A ameaça de invasão do sistema aumenta à medida que utilitários de terceiros são instalados e configurados para praticamente qualquer sistema operacional disponível atualmente.

A avaliação de vulnerabilidade é um fator importante na segurança. Enquanto o FreeBSD libera avisos para o sistema base, fazê-lo para cada utilitário de terceiros está além da capacidade do Projeto FreeBSD. Existe uma maneira de mitigar vulnerabilidades de terceiros e avisar os administradores sobre problemas de segurança conhecidos. Um utilitário do FreeBSD conhecido como pkg inclui opções explicitamente para este propósito.

O pkg pesquisa um banco de dados em busca de problemas de segurança. O banco de dados é atualizado e mantido pela equipe de segurança do FreeBSD e pelos desenvolvedores de ports.

Por favor, consulte as instruções para instalar o pkg.

A instalação fornece arquivos de configuração do periodic(8) para manter o banco de dados de auditoria do pkg e fornece um método programático para mantê-lo atualizado . Esta funcionalidade é ativada se daily_status_security_pkgaudit_enable estiver definido como YES em periodic.conf(5) . Certifique-se de que os e-mails de execução de segurança diários, que são enviados para a conta de e-mail do root, estejam sendo lidos.

Após a instalação e para auditar utilitários de terceiros como parte da Coleção de Ports a qualquer momento, um administrador pode optar por atualizar o banco de dados e visualizar as vulnerabilidades conhecidas dos pacotes instalados, invocando:

# pkg audit -F

O pkg exibe as vulnerabilidades publicadas dos pacotes instalados:

Affected package: cups-base-1.1.22.0_1
Type of problem: cups-base -- HPGL buffer overflow vulnerability.
Reference: <https://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html>

1 problem(s) in your installed packages found.

You are advised to update or deinstall the affected package(s) immediately.

Ao apontar um navegador da web para a URL exibida, um administrador pode obter mais informações sobre a vulnerabilidade. Isto incluirá as versões afetadas, pela versão do port do FreeBSD, juntamente com outros sites que podem conter avisos de segurança.

O pkg é um poderoso utilitário e é extremamente útil quando acoplado com o