Copyright © 1995-2013 The FreeBSD Documentation Project
Copyright
Redistribution and use in source (XML DocBook) and 'compiled' forms (XML, HTML, PDF, PostScript, RTF and so forth) with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code (XML DocBook) must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified.
Redistributions in compiled form (transformed to other DTDs, converted to PDF, PostScript, RTF and other formats) must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS DOCUMENTATION IS PROVIDED BY THE FREEBSD DOCUMENTATION PROJECT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD DOCUMENTATION PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
FreeBSD is a registered trademark of the FreeBSD Foundation.
3Com and HomeConnect are registered trademarks of 3Com Corporation.
3ware and Escalade are registered trademarks of 3ware Inc.
ARM is a registered trademark of ARM Limited.
Adaptec is a registered trademark of Adaptec, Inc.
Adobe, Acrobat, Acrobat Reader, and PostScript are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.
Apple, AirPort, FireWire, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of Apple Computer, Inc., registered in the United States and other countries.
Sound Blaster is a trademark of Creative Technology Ltd. in the United States and/or other countries.
CVSup is a registered trademark of John D. Polstra.
Heidelberg, Helvetica, Palatino, and Times Roman are either registered trademarks or trademarks of Heidelberger Druckmaschinen AG in the U.S. and other countries.
IBM, AIX, EtherJet, Netfinity, 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.
Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.
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.
Linux is a registered trademark of Linus Torvalds.
LSI Logic, AcceleRAID, eXtremeRAID, MegaRAID and Mylex are trademarks or registered trademarks of LSI Logic Corp.
M-Systems and DiskOnChip are trademarks or registered trademarks of M-Systems Flash Disk Pioneers, Ltd.
Macromedia, Flash, and Shockwave are trademarks or registered trademarks of Macromedia, Inc. in the United States and/or other countries.
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.
GateD and NextHop are registered and unregistered trademarks of NextHop in the U.S. and 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.
Oracle is a registered trademark of Oracle Corporation.
RealNetworks, RealPlayer, and RealAudio are the registered trademarks of RealNetworks, Inc.
Red Hat, RPM, are trademarks or registered trademarks of Red Hat, Inc. in the United States and other countries.
SAP, R/3, and mySAP are trademarks or registered trademarks of SAP AG in Germany and in several other countries all over the world.
Sun, Sun Microsystems, Java, Java Virtual Machine, JavaServer Pages, JDK, JRE, JSP, JVM, Netra, OpenJDK, Solaris, StarOffice, Sun Blade, Sun Enterprise, Sun Fire, SunOS, Ultra and VirtualBox are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.
MATLAB is a registered trademark of The MathWorks, Inc.
SpeedTouch is a trademark of Thomson.
U.S. Robotics and Sportster are registered trademarks of U.S. Robotics Corporation.
VMware is a trademark of VMware, Inc.
Waterloo Maple and Maple are trademarks or registered trademarks of Waterloo Maple Inc.
Mathematica is a registered trademark of Wolfram Research, Inc.
XFree86 is a trademark of The XFree86 Project, Inc.
Ogg Vorbis and Xiph.Org are trademarks of Xiph.Org.
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.
Welcome to FreeBSD! This handbook covers the installation and day to day use of FreeBSD 8.4-RELEASE and FreeBSD 9.1-RELEASE. This manual is a work in progress and is the work of many individuals. As such, some sections may become dated and require updating. If you are interested in helping out with this project, send email to the FreeBSD documentation project mailing list. The latest version of this document is always available from the FreeBSD web site (previous versions of this handbook can be obtained from http://docs.FreeBSD.org/doc/). It may also be downloaded in a variety of formats and compression options from the FreeBSD FTP server or one of the numerous mirror sites. If you would prefer to have a hard copy of the handbook, you can purchase one at the FreeBSD Mall. You may also want to search the handbook.
X and
LaterXsyslogdsyslogdroot Passworded0inetd.confexportsboot0 Screenshotboot2 Screenshot/etc/ttysrmuser Interactive Account
Removalchpass by
Superuserchpass by Normal
Userdump over
sshdump over
ssh with RSH
Setmdconfig to Mount an Existing
File System Imagemdconfigmdmfsmdconfigmdmfs/etc/ttysThe FreeBSD newcomer will find that the first section of this book guides the user through the FreeBSD installation process and gently introduces the concepts and conventions that underpin UNIX®. Working through this section requires little more than the desire to explore, and the ability to take on board new concepts as they are introduced.
Once you have traveled this far, the second, far larger, section of the Handbook is a comprehensive reference to all manner of topics of interest to FreeBSD system administrators. Some of these chapters may recommend that you do some prior reading, and this is noted in the synopsis at the beginning of each chapter.
For a list of additional sources of information, please see Appendix B, Bibliography.
The current online version of the Handbook represents the cumulative effort of many hundreds of contributors over the past 10 years. The following are some of the significant changes since the two volume third edition was published in 2004:
Chapter 25, DTrace, DTrace, has been added with information about the powerful DTrace performance analysis tool.
Chapter 21, File Systems Support, File Systems Support, has been added with information about non-native file systems in FreeBSD, such as ZFS from Sun™.
Chapter 18, Security Event Auditing, Security Event Auditing, has been added to cover the new auditing capabilities in FreeBSD and explain its use.
Chapter 22, Virtualization, Virtualization, has been added with information about installing FreeBSD on virtualization software.
Chapter 2, Installing FreeBSD 9.X and
Later, Installing
FreeBSD 9.x and Later, has been
added to cover installation of FreeBSD using the new
installation utility,
bsdinstall.
The third edition was the culmination of over two years of work by the dedicated members of the FreeBSD Documentation Project. The printed edition grew to such a size that it was necessary to publish as two separate volumes. The following are the major changes in this new edition:
Chapter 12, Configuration and Tuning, Configuration and
Tuning, has been expanded with new information about the
ACPI power and resource management, the
cron system utility, and more kernel
tuning options.
Chapter 15, Security, Security, has been expanded with new information about virtual private networks (VPNs), file system access control lists (ACLs), and security advisories.
Chapter 17, Mandatory Access Control, Mandatory Access Control (MAC), is a new chapter with this edition. It explains what MAC is and how this mechanism can be used to secure a FreeBSD system.
Chapter 19, Storage, Storage, has been expanded with new information about USB storage devices, file system snapshots, file system quotas, file and network backed filesystems, and encrypted disk partitions.
A troubleshooting section has been added to Chapter 27, PPP and SLIP, PPP and SLIP.
Chapter 28, Electronic Mail, Electronic Mail, has been expanded with new information about using alternative transport agents, SMTP authentication, UUCP, fetchmail, procmail, and other advanced topics.
Chapter 29, Network Servers, Network Servers, is all new with this edition. This chapter includes information about setting up the Apache HTTP Server, ftpd, and setting up a server for Microsoft® Windows® clients with Samba. Some sections from Chapter 31, Advanced Networking, Advanced Networking, were moved here to improve the presentation.
Chapter 31, Advanced Networking, Advanced Networking, has been expanded with new information about using Bluetooth® devices with FreeBSD, setting up wireless networks, and Asynchronous Transfer Mode (ATM) networking.
A glossary has been added to provide a central location for the definitions of technical terms used throughout the book.
A number of aesthetic improvements have been made to the tables and figures throughout the book.
The second edition was the culmination of over two years of work by the dedicated members of the FreeBSD Documentation Project. The following were the major changes in this edition:
A complete Index has been added.
All ASCII figures have been replaced by graphical diagrams.
A standard synopsis has been added to each chapter to give a quick summary of what information the chapter contains, and what the reader is expected to know.
The content has been logically reorganized into three parts: “Getting Started”, “System Administration”, and “Appendices”.
Chapter 3, Installing FreeBSD 8.X (“Installing
FreeBSD”) was completely rewritten with many
screenshots to make it much easier for new users to grasp
the text.
Chapter 4, UNIX Basics (“UNIX® Basics”) has been expanded to contain additional information about processes, daemons, and signals.
Chapter 5, Installing Applications: Packages and Ports (“Installing Applications”) has been expanded to contain additional information about binary package management.
Chapter 6, The X Window System (“The X Window System”) has been completely rewritten with an emphasis on using modern desktop technologies such as KDE and GNOME on XFree86™ 4.X.
Chapter 13, The FreeBSD Booting Process (“The FreeBSD Booting Process”) has been expanded.
Chapter 19, Storage (“Storage”) has been written from what used to be two separate chapters on “Disks” and “Backups”. We feel that the topics are easier to comprehend when presented as a single chapter. A section on RAID (both hardware and software) has also been added.
Chapter 26, Serial Communications (“Serial Communications”) has been completely reorganized and updated for FreeBSD 4.X/5.X.
Chapter 27, PPP and SLIP (“PPP and SLIP”) has been substantially updated.
Many new sections have been added to Chapter 31, Advanced Networking (“Advanced Networking”).
Chapter 28, Electronic Mail (“Electronic Mail”) has been expanded to include more information about configuring sendmail.
Chapter 11, Linux® Binary Compatibility (“Linux® Compatibility”) has been expanded to include information about installing Oracle® and SAP® R/3®.
The following new topics are covered in this second edition:
Configuration and Tuning (Chapter 12, Configuration and Tuning).
Multimedia (Chapter 8, Multimedia)
This book is split into five logically distinct sections. The first section, Getting Started, covers the installation and basic usage of FreeBSD. It is expected that the reader will follow these chapters in sequence, possibly skipping chapters covering familiar topics. The second section, Common Tasks, covers some frequently used features of FreeBSD. This section, and all subsequent sections, can be read out of order. Each chapter begins with a succinct synopsis that describes what the chapter covers and what the reader is expected to already know. This is meant to allow the casual reader to skip around to find chapters of interest. The third section, System Administration, covers administration topics. The fourth section, Network Communication, covers networking and server topics. The fifth section contains appendices of reference information.
Introduces FreeBSD to a new user. It describes the history of the FreeBSD Project, its goals and development model.
X, Installation of
FreeBSD 8.x and
EarlierWalks a user through the entire installation process of
FreeBSD 8.x and earlier using
sysinstall. Some advanced
installation topics, such as installing through a serial
console, are also covered.
X and
Later, Installation of
FreeBSD 9.x and
LaterWalks a user through the entire installation process of
FreeBSD 9.x and later using
bsdinstall.
Covers the basic commands and functionality of the FreeBSD operating system. If you are familiar with Linux® or another flavor of UNIX® then you can probably skip this chapter.
Covers the installation of third-party software with both FreeBSD's innovative “Ports Collection” and standard binary packages.
Describes the X Window System in general and using X11 on FreeBSD in particular. Also describes common desktop environments such as KDE and GNOME.
Lists some common desktop applications, such as web browsers and productivity suites, and describes how to install them on FreeBSD.
Shows how to set up sound and video playback support for your system. Also describes some sample audio and video applications.
Explains why you might need to configure a new kernel and provides detailed instructions for configuring, building, and installing a custom kernel.
Describes managing printers on FreeBSD, including information about banner pages, printer accounting, and initial setup.
Describes the Linux® compatibility features of FreeBSD. Also provides detailed installation instructions for many popular Linux® applications such as Oracle® and Mathematica®.
Describes the parameters available for system administrators to tune a FreeBSD system for optimum performance. Also describes the various configuration files used in FreeBSD and where to find them.
Describes the FreeBSD boot process and explains how to control this process with configuration options.
Describes the creation and manipulation of user accounts. Also discusses resource limitations that can be set on users and other account management tasks.
Describes many different tools available to help keep your FreeBSD system secure, including Kerberos, IPsec and OpenSSH.
Describes the jails framework, and the improvements of jails over the traditional chroot support of FreeBSD.
Explains what Mandatory Access Control (MAC) is and how this mechanism can be used to secure a FreeBSD system.
Describes what FreeBSD Event Auditing is, how it can be installed, configured, and how audit trails can be inspected or monitored.
Describes how to manage storage media and filesystems with FreeBSD. This includes physical disks, RAID arrays, optical and tape media, memory-backed disks, and network filesystems.
Describes what the GEOM framework in FreeBSD is and how to configure various supported RAID levels.
Examines support of non-native file systems in FreeBSD, like the Z File System from Sun™.
Describes what virtualization systems offer, and how they can be used with FreeBSD.
Describes how to use FreeBSD in languages other than English. Covers both system and application level localization.
Explains the differences between FreeBSD-STABLE, FreeBSD-CURRENT, and FreeBSD releases. Describes which users would benefit from tracking a development system and outlines that process. Covers the methods users may take to update their system to the latest security release.
Describes how to configure and use the DTrace tool from Sun™ in FreeBSD. Dynamic tracing can help locate performance issues, by performing real time system analysis.
Explains how to connect terminals and modems to your FreeBSD system for both dial in and dial out connections.
Describes how to use PPP, SLIP, or PPP over Ethernet to connect to remote systems with FreeBSD.
Explains the different components of an email server and dives into simple configuration topics for the most popular mail server software: sendmail.
Provides detailed instructions and example configuration files to set up your FreeBSD machine as a network filesystem server, domain name server, network information system server, or time synchronization server.
Explains the philosophy behind software-based firewalls and provides detailed information about the configuration of the different firewalls available for FreeBSD.
Describes many networking topics, including sharing an Internet connection with other computers on your LAN, advanced routing topics, wireless networking, Bluetooth®, ATM, IPv6, and much more.
Lists different sources for obtaining FreeBSD media on CDROM or DVD as well as different sites on the Internet that allow you to download and install FreeBSD.
This book touches on many different subjects that may leave you hungry for a more detailed explanation. The bibliography lists many excellent books that are referenced in the text.
Describes the many forums available for FreeBSD users to post questions and engage in technical conversations about FreeBSD.
Lists the PGP fingerprints of several FreeBSD Developers.
To provide a consistent and easy to read text, several conventions are followed throughout the book.
An italic font is used for filenames, URLs, emphasized text, and the first usage of technical terms.
MonospaceA monospaced font is
used for error messages, commands, environment variables,
names of ports, hostnames, user names, group names, device
names, variables, and code fragments.
A bold font is used for applications, commands, and keys.
Keys are shown in bold to stand out from
other text. Key combinations that are meant to be typed
simultaneously are shown with `+' between
the keys, such as:
Ctrl+Alt+Del
Meaning the user should type the Ctrl, Alt, and Del keys at the same time.
Keys that are meant to be typed in sequence will be separated with commas, for example:
Ctrl+X, Ctrl+S
Would mean that the user is expected to type the Ctrl and X keys simultaneously and then to type the Ctrl and S keys simultaneously.
Examples starting with E:\>
indicate a MS-DOS® command. Unless otherwise noted, these
commands may be executed from a “Command Prompt”
window in a modern Microsoft® Windows®
environment.
E:\> tools\fdimage floppies\kern.flp A:Examples starting with # indicate a command that
must be invoked as the superuser in FreeBSD. You can login as
root to type the command, or login as your
normal account and use su(1) to gain
superuser privileges.
# dd if=kern.flp of=/dev/fd0Examples starting with % indicate a command that
should be invoked from a normal user account. Unless otherwise
noted, C-shell syntax is used for setting environment variables
and other shell commands.
% topThe book you are holding represents the efforts of many hundreds of people around the world. Whether they sent in fixes for typos, or submitted complete chapters, all the contributions have been useful.
Several companies have supported the development of this document by paying authors to work on it full-time, paying for publication, etc. In particular, BSDi (subsequently acquired by Wind River Systems) paid members of the FreeBSD Documentation Project to work on improving this book full time leading up to the publication of the first printed edition in March 2000 (ISBN 1-57176-241-8). Wind River Systems then paid several additional authors to make a number of improvements to the print-output infrastructure and to add additional chapters to the text. This work culminated in the publication of the second printed edition in November 2001 (ISBN 1-57176-303-1). In 2003-2004, FreeBSD Mall, Inc, paid several contributors to improve the Handbook in preparation for the third printed edition.
This part of the FreeBSD Handbook is for users and administrators who are new to FreeBSD. These chapters:
Introduce you to FreeBSD.
Guide you through the installation process.
Teach you UNIX® basics and fundamentals.
Show you how to install the wealth of third party applications available for FreeBSD.
Introduce you to X, the UNIX® windowing system, and detail how to configure a desktop environment that makes you more productive.
We have tried to keep the number of forward references in the text to a minimum so that you can read this section of the Handbook from front to back with the minimum page flipping required.
X and
LaterXThank you for your interest in FreeBSD! The following chapter covers various aspects of the FreeBSD Project, such as its history, goals, development model, and so on.
After reading this chapter, you will know:
How FreeBSD relates to other computer operating systems.
The history of the FreeBSD Project.
The goals of the FreeBSD Project.
The basics of the FreeBSD open-source development model.
And of course: where the name “FreeBSD” comes from.
FreeBSD is a 4.4BSD-Lite based operating system for Intel (x86 and Itanium®), AMD64, Sun UltraSPARC® computers. Ports to other architectures are also underway. You can also read about the history of FreeBSD, or the current release. If you are interested in contributing something to the Project (code, hardware, funding), see the Contributing to FreeBSD article.
FreeBSD has many noteworthy features. Some of these are:
Preemptive multitasking with dynamic priority adjustment to ensure smooth and fair sharing of the computer between applications and users, even under the heaviest of loads.
Multi-user facilities which allow many people to use a FreeBSD system simultaneously for a variety of things. This means, for example, that system peripherals such as printers and tape drives are properly shared between all users on the system or the network and that individual resource limits can be placed on users or groups of users, protecting critical system resources from over-use.
Strong TCP/IP networking with support for industry standards such as SCTP, DHCP, NFS, NIS, PPP, SLIP, IPsec, and IPv6. This means that your FreeBSD machine can interoperate easily with other systems as well as act as an enterprise server, providing vital functions such as NFS (remote file access) and email services or putting your organization on the Internet with WWW, FTP, routing and firewall (security) services.
Memory protection ensures that applications (or users) cannot interfere with each other. One application crashing will not affect others in any way.
The industry standard X Window System (X11R7) provides a graphical user interface (GUI) for the cost of a common VGA card and monitor and comes with full sources.
Binary compatibility with many programs built for Linux, SCO, SVR4, BSDI and NetBSD.
Thousands of ready-to-run applications are available from the FreeBSD ports and packages collection. Why search the net when you can find it all right here?
Thousands of additional and easy-to-port applications are available on the Internet. FreeBSD is source code compatible with most popular commercial UNIX® systems and thus most applications require few, if any, changes to compile.
Demand paged virtual memory and “merged VM/buffer cache” design efficiently satisfies applications with large appetites for memory while still maintaining interactive response to other users.
A full complement of C and C++ development tools. Many additional languages for advanced research and development are also available in the ports and packages collection.
Source code for the entire system means you have the greatest degree of control over your environment. Why be locked into a proprietary solution at the mercy of your vendor when you can have a truly open system?
Extensive online documentation.
And many more!
FreeBSD is based on the 4.4BSD-Lite release from Computer Systems Research Group (CSRG) at the University of California at Berkeley, and carries on the distinguished tradition of BSD systems development. In addition to the fine work provided by CSRG, the FreeBSD Project has put in many thousands of hours in fine tuning the system for maximum performance and reliability in real-life load situations. As many of the commercial giants struggle to field PC operating systems with such features, performance and reliability, FreeBSD can offer them now!
The applications to which FreeBSD can be put are truly limited only by your own imagination. From software development to factory automation, inventory control to azimuth correction of remote satellite antennae; if it can be done with a commercial UNIX® product then it is more than likely that you can do it with FreeBSD too! FreeBSD also benefits significantly from literally thousands of high quality applications developed by research centers and universities around the world, often available at little to no cost. Commercial applications are also available and appearing in greater numbers every day.
Because the source code for FreeBSD itself is generally available, the system can also be customized to an almost unheard of degree for special applications or projects, and in ways not generally possible with operating systems from most major commercial vendors. Here is just a sampling of some of the applications in which people are currently using FreeBSD:
Internet Services: The robust TCP/IP networking built into FreeBSD makes it an ideal platform for a variety of Internet services such as:
With FreeBSD, you can easily start out small with an inexpensive 386 class PC and upgrade all the way up to a quad-processor Xeon with RAID storage as your enterprise grows.
Education: Are you a student of computer science or a related engineering field? There is no better way of learning about operating systems, computer architecture and networking than the hands on, under the hood experience that FreeBSD can provide. A number of freely available CAD, mathematical and graphic design packages also make it highly useful to those whose primary interest in a computer is to get other work done!
Research: With source code for the entire system available, FreeBSD is an excellent platform for research in operating systems as well as other branches of computer science. FreeBSD's freely available nature also makes it possible for remote groups to collaborate on ideas or shared development without having to worry about special licensing agreements or limitations on what may be discussed in open forums.
Networking: Need a new router? A name server (DNS)? A firewall to keep people out of your internal network? FreeBSD can easily turn that unused 386 or 486 PC sitting in the corner into an advanced router with sophisticated packet-filtering capabilities.
X Window workstation: FreeBSD is a fine choice for an inexpensive X terminal solution, using the freely available X11 server. Unlike an X terminal, FreeBSD allows many applications to be run locally if desired, thus relieving the burden on a central server. FreeBSD can even boot “diskless”, making individual workstations even cheaper and easier to administer.
Software Development: The basic FreeBSD system comes with a full complement of development tools including the renowned GNU C/C++ compiler and debugger.
FreeBSD is available in both source and binary form on CD-ROM, DVD, and via anonymous FTP. Please see Appendix A, Obtaining FreeBSD for more information about obtaining FreeBSD.
The following section provides some background information on the project, including a brief history, project goals, and the development model of the project.
The FreeBSD Project had its genesis in the early part of 1993, partially as an outgrowth of the Unofficial 386BSDPatchkit by the patchkit's last 3 coordinators: Nate Williams, Rod Grimes and Jordan Hubbard.
The original goal was to produce an intermediate snapshot of 386BSD in order to fix a number of problems with it that the patchkit mechanism just was not capable of solving. The early working title for the project was 386BSD 0.5 or 386BSD Interim in reference of that fact.
386BSD was Bill Jolitz's operating system, which had been up to that point suffering rather severely from almost a year's worth of neglect. As the patchkit swelled ever more uncomfortably with each passing day, they decided to assist Bill by providing this interim “cleanup” snapshot. Those plans came to a rude halt when Bill Jolitz suddenly decided to withdraw his sanction from the project without any clear indication of what would be done instead.
The trio thought that the goal remained worthwhile, even without Bill's support, and so they adopted the name "FreeBSD" coined by David Greenman. The initial objectives were set after consulting with the system's current users and, once it became clear that the project was on the road to perhaps even becoming a reality, Jordan contacted Walnut Creek CDROM with an eye toward improving FreeBSD's distribution channels for those many unfortunates without easy access to the Internet. Walnut Creek CDROM not only supported the idea of distributing FreeBSD on CD but also went so far as to provide the project with a machine to work on and a fast Internet connection. Without Walnut Creek CDROM's almost unprecedented degree of faith in what was, at the time, a completely unknown project, it is quite unlikely that FreeBSD would have gotten as far, as fast, as it has today.
The first CD-ROM (and general net-wide) distribution was FreeBSD 1.0, released in December of 1993. This was based on the 4.3BSD-Lite (“Net/2”) tape from U.C. Berkeley, with many components also provided by 386BSD and the Free Software Foundation. It was a fairly reasonable success for a first offering, and they followed it with the highly successful FreeBSD 1.1 release in May of 1994.
Around this time, some rather unexpected storm clouds formed on the horizon as Novell and U.C. Berkeley settled their long-running lawsuit over the legal status of the Berkeley Net/2 tape. A condition of that settlement was U.C. Berkeley's concession that large parts of Net/2 were “encumbered” code and the property of Novell, who had in turn acquired it from AT&T some time previously. What Berkeley got in return was Novell's “blessing” that the 4.4BSD-Lite release, when it was finally released, would be declared unencumbered and all existing Net/2 users would be strongly encouraged to switch. This included FreeBSD, and the project was given until the end of July 1994 to stop shipping its own Net/2 based product. Under the terms of that agreement, the project was allowed one last release before the deadline, that release being FreeBSD 1.1.5.1.
FreeBSD then set about the arduous task of literally re-inventing itself from a completely new and rather incomplete set of 4.4BSD-Lite bits. The “Lite” releases were light in part because Berkeley's CSRG had removed large chunks of code required for actually constructing a bootable running system (due to various legal requirements) and the fact that the Intel port of 4.4 was highly incomplete. It took the project until November of 1994 to make this transition, at which point it released FreeBSD 2.0 to the net and on CD-ROM (in late December). Despite being still more than a little rough around the edges, the release was a significant success and was followed by the more robust and easier to install FreeBSD 2.0.5 release in June of 1995.
Since that time, FreeBSD has made a series of releases each time improving the stability, speed, and feature set of the previous version.
For now, long-term development projects continue to take place in the 10.X-CURRENT (trunk) branch, and snapshot releases of 10.X are continually made available from the snapshot server as work progresses.
The goals of the FreeBSD Project are to provide software that may be used for any purpose and without strings attached. Many of us have a significant investment in the code (and project) and would certainly not mind a little financial compensation now and then, but we are definitely not prepared to insist on it. We believe that our first and foremost “mission” is to provide code to any and all comers, and for whatever purpose, so that the code gets the widest possible use and provides the widest possible benefit. This is, I believe, one of the most fundamental goals of Free Software and one that we enthusiastically support.
That code in our source tree which falls under the GNU General Public License (GPL) or Library General Public License (LGPL) comes with slightly more strings attached, though at least on the side of enforced access rather than the usual opposite. Due to the additional complexities that can evolve in the commercial use of GPL software we do, however, prefer software submitted under the more relaxed BSD copyright when it is a reasonable option to do so.
The development of FreeBSD is a very open and flexible process, being literally built from the contributions of hundreds of people around the world, as can be seen from our list of contributors. FreeBSD's development infrastructure allow these hundreds of developers to collaborate over the Internet. We are constantly on the lookout for new developers and ideas, and those interested in becoming more closely involved with the project need simply contact us at the FreeBSD technical discussions mailing list. The FreeBSD announcements mailing list is also available to those wishing to make other FreeBSD users aware of major areas of work.
Useful things to know about the FreeBSD Project and its development process, whether working independently or in close cooperation:
For several years, the central source tree for FreeBSD
was maintained by
CVS
(Concurrent Versions System), a freely available source
code control tool that comes bundled with FreeBSD. In June
2008, the Project switched to using SVN
(Subversion). The switch was deemed necessary, as the
technical limitations imposed by
CVS were becoming obvious
due to the rapid expansion of the source tree and the
amount of history already stored. The Documentation
Project and Ports Collection repositories also moved
from CVS to
SVN in May 2012 and July
2012, respectively. Please
refer to the Synchronizing
your source tree section for more information on
obtaining the FreeBSD src/ repository
and Using the Ports
Collection for details on obtaining the FreeBSD
Ports Collection.
The committers
are the people who have write
access to the Subversion tree, and are authorized to
make modifications to the FreeBSD source (the term
“committer” comes from the source control
commit command, which is used to
bring new changes into the repository). The best way of
making submissions for review by the committers list is
to use the send-pr(1) command. If something
appears to be jammed in the system, then you may also
reach them by sending mail to the FreeBSD committer's mailing list.
The FreeBSD core team would be equivalent to the board of directors if the FreeBSD Project were a company. The primary task of the core team is to make sure the project, as a whole, is in good shape and is heading in the right directions. Inviting dedicated and responsible developers to join our group of committers is one of the functions of the core team, as is the recruitment of new core team members as others move on. The current core team was elected from a pool of committer candidates in July 2012. Elections are held every 2 years.
Some core team members also have specific areas of responsibility, meaning that they are committed to ensuring that some large portion of the system works as advertised. For a complete list of FreeBSD developers and their areas of responsibility, please see the Contributors List
Most members of the core team are volunteers when it comes to FreeBSD development and do not benefit from the project financially, so “commitment” should also not be misconstrued as meaning “guaranteed support.” The “board of directors” analogy above is not very accurate, and it may be more suitable to say that these are the people who gave up their lives in favor of FreeBSD against their better judgement!
Last, but definitely not least, the largest group of developers are the users themselves who provide feedback and bug fixes to us on an almost constant basis. The primary way of keeping in touch with FreeBSD's more non-centralized development is to subscribe to the FreeBSD technical discussions mailing list where such things are discussed. See Appendix C, Resources on the Internet for more information about the various FreeBSD mailing lists.
The FreeBSD Contributors List is a long and growing one, so why not join it by contributing something back to FreeBSD today?
Providing code is not the only way of contributing to the project; for a more complete list of things that need doing, please refer to the FreeBSD Project web site.
In summary, our development model is organized as a loose set of concentric circles. The centralized model is designed for the convenience of the users of FreeBSD, who are provided with an easy way of tracking one central code base, not to keep potential contributors out! Our desire is to present a stable operating system with a large set of coherent application programs that the users can easily install and use — this model works very well in accomplishing that.
All we ask of those who would join us as FreeBSD developers is some of the same dedication its current people have to its continued success!
In addition to the base distributions, FreeBSD offers a
ported software collection with thousands of commonly
sought-after programs. At the time of this writing, there
were over 24,000 ports! The list of ports ranges from
http servers, to games, languages, editors, and almost
everything in between. The entire Ports Collection requires
approximately 500 MB. To compile a port, you simply
change to the directory of the program you wish to install,
type make install, and let the system do
the rest. The full original distribution for each port you
build is retrieved dynamically so you need only enough disk
space to build the ports you want. Almost every port is also
provided as a pre-compiled “package”, which can
be installed with a simple command
(pkg_add) by those who do not wish to
compile their own ports from source. More information on
packages and ports can be found in
Chapter 5, Installing Applications: Packages and Ports.
All recent FreeBSD versions provide an option in the
installer (either sysinstall(8) or bsdinstall(8)) to
install additional documentation under /usr/local/share/doc/freebsd
during the initial system setup. Documentation may also be
installed at any later time using packages as described in
Section 24.4.6.2, “Using Documentation Packages”. You may view the
locally installed manuals with any HTML capable browser using
the following URLs:
You can also view the master (and most frequently updated) copies at http://www.FreeBSD.org/.
FreeBSD comes with a text-based, easy to use installation
program. FreeBSD 9.0-RELEASE and later use an installation
program called bsdinstall, while
releases prior to FreeBSD 9.0-RELEASE using
sysinstall for installation. This
chapter describes the use of
bsdinstall. The use of
sysinstall is covered in Chapter 3, Installing FreeBSD 8.X.
After reading this chapter, you will know:
How to create the FreeBSD installation media.
How FreeBSD subdivides and refers to hard disks.
How to start bsdinstall.
The questions bsdinstall will ask you, what they mean, and how to answer them.
Before reading this chapter, you should:
Read the supported hardware list that shipped with the version of FreeBSD you are installing, and verify that your hardware is supported.
In general, these installation instructions are written for i386™ (“PC compatible”) architecture computers. Where applicable, instructions specific to other platforms will be listed. There may be minor differences between the installer and what is shown here, so use this chapter as a general guide rather than as exact literal instructions.
The minimal configuration to install FreeBSD varies with the FreeBSD version and the hardware architecture.
A summary of this information is given in the following sections. Depending on the method you choose to install FreeBSD, you may also need a supported CDROM drive, and in some cases a network adapter. This will be covered by Section 2.3.5, “Prepare the Installation Media”.
FreeBSD/i386 requires a 486 or better processor and at least 64 MB of RAM. At least 1.1 GB of free hard drive space is needed for the most minimal installation.
On old computers, increasing RAM and hard drive space is usually more effective at improving performance than installing a faster processor.
There are two classes of processors capable of running FreeBSD/amd64. The first are AMD64 processors, including the AMD Athlon™64, AMD Athlon™64-FX, AMD Opteron™ or better processors.
The second class of processors that can use FreeBSD/amd64 includes those using the Intel® EM64T architecture. Examples of these processors include the Intel® Core™ 2 Duo, Quad, Extreme processor families, the Intel® Xeon™ 3000, 5000, and 7000 sequences of processors, and the Intel® Core™ i3, i5 and i7 processors.
If you have a machine based on an nVidia nForce3 Pro-150, you must use the BIOS setup to disable the IO APIC. If you do not have an option to do this, you will likely have to disable ACPI instead. There are bugs in the Pro-150 chipset for which we have not yet found a workaround.
All New World Apple® Macintosh® systems with built-in USB are supported. SMP is supported on machines with multiple CPUs.
A 32-bit kernel can only use the first 2 GB of RAM. FireWire® is not supported on the Blue & White PowerMac G3.
Systems supported by FreeBSD/sparc64 are listed at the FreeBSD/sparc64 Project.
A dedicated disk is required for FreeBSD/sparc64. It is not possible to share a disk with another operating system at this time.
Hardware architectures and devices supported by a FreeBSD
release are listed in the Hardware Notes file. Usually named
HARDWARE.TXT, the file is located in the
root directory of the release media. Copies of the supported
hardware list are also available on the Release
Information page of the FreeBSD web site.
Back up all important data on the target computer where FreeBSD will be installed. Test the backups before continuing. The FreeBSD installer will ask before making changes to the disk, but once the process has started it cannot be undone.
If FreeBSD will be the only operating system installed, and will be allowed to use the entire hard disk, the rest of this section can be skipped. But if FreeBSD will share the disk with other operating systems, an understanding of disk layout is useful during the installation.
Hard disks can be divided into multiple sections. These sections are called partitions.
There are two ways of dividing a disk into partitions. A traditional Master Boot Record (MBR) holds a partition table defining up to four primary partitions. (For historical reasons, FreeBSD calls primary partitions slices.) A limit of only four partitions is restrictive for large disks, so one of these primary partitions can be made into an extended partition. Multiple logical partitions may then be created inside the extended partition. This may sound a little unwieldy, and it is.
The GUID Partition Table (GPT) is a newer and simpler method of partitioning a disk. GPT is far more versatile than the traditional MBR partition table. Common GPT implementations allow up to 128 partitions per disk, eliminating the need for inconvenient workarounds like logical partitions.
Some older operating systems like Windows® XP are not compatible with the GPT partition scheme. If FreeBSD will be sharing a disk with such an operating system, MBR partitioning is required.
FreeBSD's standard boot loader requires either a primary or GPT partition. (See Chapter 13, The FreeBSD Booting Process for more information about the FreeBSD booting process.) If all of the primary or GPT partitions are already in use, one must be freed for FreeBSD.
A minimal installation of FreeBSD takes as little as 1 GB of disk space. However, that is a very minimal install, leaving almost no free space. A more realistic minimum is 3 GB without a graphical environment, and 5 GB or more if a graphical user interface will be used. Third-party application software requires more space.
A variety of free and commercial partition resizing tools are available. GParted Live is a free Live CD which includes the GParted partition editor. GParted is also included with many other Linux Live CD distributions.
Disk partition applications can destroy data. Make a full backup and verify its integrity before modifying disk partitions.
Resizing Microsoft® Vista partitions can be difficult. A Vista installation CDROM can be useful when attempting such an operation.
A Windows® computer has a single 40 GB disk that
has been split into two 20 GB partitions. Windows®
calls them C: and
D:. The
C: partition contains 10 GB
of data, and the D: partition
contains 5 GB of data.
Moving the data from D: to
C: frees up the second partition
to be used for FreeBSD.
A Windows® computer has a single 40 GB disk and
one large partition using the whole disk. Windows® shows
this 40 GB partition as a single
C:. 15 GB of space is being
used. The goal is to end up with Windows® in a
20 GB partition, and have another 20 GB
partition for FreeBSD.
There are two ways to do this:
Back up your Windows® data. Then reinstall Windows®, creating a 20 GB partition during the install.
Use a partition resizing tool like GParted to shrink the Windows® partition and create a new partition in the freed space for FreeBSD.
Disk partitions containing different operating systems make it possible to run any one of those operating systems at a time. An alternative method that allows running multiple operating systems at the same time is covered in Chapter 22, Virtualization.
Some FreeBSD installation methods need a network connection to download files. To connect to an Ethernet network (or cable or DSL modem with an Ethernet interface), the installer will request some information about the network.
DHCP is commonly used to provide automatic network configuration. If DHCP is not available, this network information must be obtained from the local network administrator or service provider:
IP address
Subnet mask
Default router IP address
Domain name of the local network
DNS server IP address(es)
Although the FreeBSD Project strives to ensure that each release of FreeBSD is as stable as possible, bugs occasionally creep into the process. On very rare occasions those bugs affect the installation process. As these problems are discovered and fixed, they are noted in the FreeBSD Errata on the FreeBSD web site. Check the errata before installing to make sure that there are no problems that might affect the installation.
Information and errata for all the releases can be found on the release information section of the FreeBSD web site.
A FreeBSD installation is started by booting the computer with a FreeBSD installation CD, DVD, or USB memory stick. The installer is not a program that can be run from within another operating system.
In addition to the standard installation media which contains copies of all the FreeBSD installation files, there is a bootonly variant. Bootonly install media does not have copies of the installation files, but downloads them from the network during an install. The bootonly install CD is consequently much smaller, and reduces bandwidth usage during the install by only downloading required files.
Copies of FreeBSD installation media are available at the FreeBSD web site.
If you already have a copy of FreeBSD on CDROM, DVD, or USB memory stick, this section can be skipped.
FreeBSD CD and DVD images are bootable ISO files. Only one CD or DVD is needed for an install. Burn the ISO image to a bootable CD or DVD using the CD recording applications available with your current operating system.
To create a bootable memory stick, follow these steps:
Acquire the Memory Stick Image
Memory stick images for FreeBSD 9.0-RELEASE and
later can be downloaded from the
ISO-IMAGES/
directory at
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/.
Replace arch/arch/ISO-IMAGES/version/FreeBSD-version-RELEASE-arch-memstick.imgarch and
version with the
architecture and the version number which you want to
install, respectively. For example, the memory stick
images for FreeBSD/i386 9.0-RELEASE are
available from ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/i386/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-i386-memstick.img.
A different directory path is used for
FreeBSD 8.X and earlier
versions. Details of download and installation of
FreeBSD 8.X and earlier is
covered in Chapter 3, Installing FreeBSD 8.X.
The memory stick image has a .img
extension. The ISO-IMAGES/ directory
contains a number of different images, and the one needed
depends on the version of FreeBSD being installed, and in
some cases, the target hardware.
Before proceeding, back up the data on the USB stick, as this procedure will erase it.
Write the Image File to the Memory Stick
The example below shows /dev/da0 as the target
device where the image will be written. Be very
careful that the correct device is used as the output
target, or you may destroy existing data.
Be sure to give the correct drive letter as the output target, or you may overwrite and destroy existing data.
Obtaining Image Writer for Windows®
Image Writer for Windows® is a free application that can correctly write an image file to a memory stick. Download it from https://launchpad.net/win32-image-writer/ and extract it into a folder.
Writing the Image with Image Writer
Double-click the
Win32DiskImager icon to
start the program. Verify that the drive letter shown
under Device is the
drive with the memory stick. Click the folder icon
and select the image to be written to the memory
stick. Click
to accept
the image file name. Verify that everything is
correct, and that no folders on the memory stick are
open in other windows. When everything is ready,
click to
write the image file to the memory stick.
Installation from floppy disks is no longer supported.
You are now ready to start installing FreeBSD.
By default, the installation will not make any changes to your disk(s) until you see the following message:
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?
The install can be exited at any time prior to this warning without changing the contents of the hard drive. If you are concerned that you have configured something incorrectly you can just turn the computer off before this point, and no damage will be done.
If you prepared a “bootable” USB stick, as described in Section 2.3.5, “Prepare the Installation Media”, then plug in your USB stick before turning on the computer.
If you are booting from CDROM, then you will need to turn on the computer, and insert the CDROM at the first opportunity.
Configure your machine to boot from either the CDROM or from USB, depending on the media being used for the installation. BIOS configurations allow the selection of a specific boot device. Most systems also provide for selecting a boot device during startup, typically by pressing F10, F11, F12, or Escape.
If your computer starts up as normal and loads your existing operating system, then either:
The disks were not inserted early enough in the boot process. Leave them in, and try restarting your computer.
The BIOS changes earlier did not work correctly. You should redo that step until you get the right option.
Your particular BIOS does not support booting from the desired media. The Plop Boot Manager can be used to boot older computers from CD or USB media.
FreeBSD will start to boot. If you are booting from CDROM you will see a display similar to this (version information omitted):
The FreeBSD boot loader is displayed:
Either wait ten seconds, or press Enter.
On most machines, holding C on the
keyboard during boot will boot from the CD. Otherwise, hold
Command+Option+O+F,
or
Windows+Alt+O+F
on non-Apple® keyboards. At the 0 >
prompt, enter
boot cd:,\ppc\loader cd:0For Xserves without keyboards, see Apple®'s support web site about booting into Open Firmware.
Most SPARC64® systems are set up to boot automatically from disk. To install FreeBSD, you need to boot over the network or from a CDROM, which requires you to break into the PROM (OpenFirmware).
To do this, reboot the system, and wait until the boot message appears. It depends on the model, but should look about like:
If your system proceeds to boot from disk at this point,
you need to press
L1+A
or
Stop+A
on the keyboard, or send a BREAK over the
serial console (using for example ~# in
tip(1) or cu(1)) to get to the PROM
prompt. It looks like this:
This is the prompt used on systems with just one CPU. | |
This is the prompt used on SMP systems, the digit indicates the number of the active CPU. |
At this point, place the CDROM into your drive, and from
the PROM prompt, type
boot cdrom.
The last few hundred lines that have been displayed on screen are stored and can be reviewed.
To review the buffer, press Scroll Lock. This turns on scrolling in the display. You can then use the arrow keys, or PageUp and PageDown to view the results. Press Scroll Lock again to stop scrolling.
Do this now, to review the text that scrolled off the screen when the kernel was carrying out the device probes. You will see text similar to Figure 2.2, “Typical Device Probe Results”, although the precise text will differ depending on the devices that you have in your computer.
Check the probe results carefully to make sure that FreeBSD
found all the devices you expected. If a device was not
found, then it will not be listed. Kernel modules allows
you to add in support for devices which are not in the
GENERIC kernel.
After the procedure of device probing, you will see Figure 2.3, “Selecting Installation Media Mode”. The install media can be used in three ways: to install FreeBSD, as a live CD, or to simply access a FreeBSD shell. Use the arrow keys to choose an option, and Enter to select.
Selecting here will enter the installer.
bsdinstall is a text-based FreeBSD
installer program written by Nathan Whitehorn <nwhitehorn@FreeBSD.org> and introduced in
2011 for FreeBSD 9.0.
Kris Moore <kmoore@FreeBSD.org>'s pc-sysinstall is
included with PC-BSD,
and can also be used to
install FreeBSD. Although sometimes confused with
bsdinstall, the two are not
related.
The bsdinstall menu system is controlled by the arrow keys, Enter, Tab, Space, and other keys.
Depending on the system console being used, bsdinstall may initially prompt to select a non-default keyboard layout.
If is selected, the following keyboard selection screen will be displayed. Otherwise, this selection menu will not be displayed, and a default keyboard mapping will be used.
Select the keymap that most closely represents the mapping of the keyboard attached to the system, using the up/down arrow keys and pressing Enter.
Pressing Esc will use the default keymap. is also a safe option if the choice of keymap is not clear.
Next, bsdinstall will prompt for the hostname to be given to the newly installed system.
The entered hostname should be a fully-qualified hostname,
such as
machine3.example.com
Next, bsdinstall will prompt to select optional components to install.
Deciding which components to install will depend largely on the intended use of the system and the amount of disk space available. The FreeBSD Kernel and userland (collectively the “base system”) are always installed.
Depending on the type of installation, some of these components may not appear.
doc - Additional documentation,
mostly of historical interest. Documentation provided by
the FreeBSD Documentation Project may be installed
later.
games - Several traditional BSD
games, including fortune,
rot13, and others.
lib32 - Compatibility libraries for
running 32-bit applications on a 64-bit version of
FreeBSD.
ports - The FreeBSD Ports
Collection.
The ports collection is an easy and convenient way to install software. The Ports Collection does not contain the source code necessary to compile the software. Instead, it is a collection of files which automates the downloading, compiling and installation of third-party software packages. Chapter 5, Installing Applications: Packages and Ports discusses how to use the ports collection.
The installation program does not check to see if you have adequate space. Select this option only if you have adequate hard disk space. As of FreeBSD 9.0, the FreeBSD Ports Collection takes up about 500 MB of disk space. You can safely assume a larger value for more recent versions of FreeBSD.
src - System source code.
FreeBSD comes with full source code for both the kernel and the userland. Although not required for the majority of applications, it may be required to build certain software supplied as source (for example, device drivers or kernel modules), or for developing FreeBSD itself.
The full source tree requires 1 GB of disk space, and recompiling the entire FreeBSD system requires an additional 5 GB of space.
The bootonly installation media does not hold copies of the installation files. When a bootonly installation method is used, the files must be retrieved over a network connection as they are needed.
After the network connection has been configured as shown in Section 2.9.2, “Configuring Network Interfaces”, a mirror site is selected. Mirror sites cache copies of the FreeBSD files. Choose a mirror site located in the same region of the world as the computer on which FreeBSD is being installed. Files can be retrieved more quickly when the mirror is close to the target computer, and installation time will be reduced.
Installation will continue as if the installation files were located on local media.
There are three ways to allocate disk space for FreeBSD. Guided partitioning automatically sets up disk partitions, while Manual partitioning allows advanced users to create customized partitions. Finally, there's the option of starting a shell where command-line programs like gpart(8), fdisk(8), and bsdlabel(8) can be used directly.
If multiple disks are connected, choose the one where FreeBSD is to be installed.
The entire disk can be allocated to FreeBSD, or just a portion of it. If is chosen, a general partition layout filling the whole disk is created. Selecting creates a partition layout in unused space on the disk.
After the partition layout has been created, review it carefully for accuracy. If a mistake has been made, selecting will reset the partitions as they were previously, or will recreate the automatic FreeBSD partitions. Partitions can be manually created, modified, or deleted. When the partitioning is correct, select to continue with the installation.
Manual partitioning goes straight to the partition editor.
Highlighting a drive (ada0 in
this example) and selecting
displays a menu
for choosing the type of partitioning
scheme.
GPT partitioning is usually the most appropriate choice for PC-compatible computers. Older PC operating systems that are not compatible with GPT may require MBR partitioning instead. The other partitioning schemes are generally used for uncommon or older computer systems.
| Abbreviation | Description |
|---|---|
| APM | Apple Partition Map, used by PowerPC® Macintosh®. |
| BSD | BSD Labels without an MBR, sometimes called "dangerously dedicated mode". See bsdlabel(8). |
| GPT | GUID Partition Table. |
| MBR | Master Boot Record. |
| PC98 | MBR variant, used by NEC PC-98 computers. |
| VTOC8 | Volume Table Of Contents, used by Sun SPARC64 and UltraSPARC computers. |
After the partitioning scheme has been selected and created, selecting again will create new partitions.
A standard FreeBSD GPT installation uses at least three partitions:
freebsd-boot - FreeBSD boot
code.
freebsd-ufs - A FreeBSD UFS
filesystem.
freebsd-swap - FreeBSD swap
space.
Another partition type worth noting is
freebsd-zfs, used for partitions that will
contain a FreeBSD ZFS filesystem. See
Section 21.2, “The Z File System (ZFS)”. gpart(8) shows more
of the available GPT partition
types.
Multiple filesystem partitions can be used, and some
people may prefer a traditional layout with separate
partitions for the /,
/var, /tmp, and
/usr filesystems. See
Example 2.3, “Creating Traditional Split Filesystem
Partitions” for an
example.
Size may be entered with common abbreviations: K for kilobytes, M for megabytes, or G for gigabytes.
Proper sector alignment provides the best performance, and making partition sizes even multiples of 4K bytes helps to ensure alignment on drives with either 512-byte or 4K-byte sectors. Generally, using partition sizes that are even multiples of 1M or 1G is the easiest way to make sure every partition starts at an even multiple of 4K. One exception: at present, the freebsd-boot partition should be no larger than 512K due to boot code limitations.
A mountpoint is needed if this partition will contain a
filesystem. If only a single UFS partition will be created,
the mountpoint should be /.
A label is also requested. A label
is a name by which this partition will be known. Drive
names or numbers can change if the drive is connected to
a different controller or port, but the partition label does
not change. Referring to labels instead of drive names
and partition numbers in files like
/etc/fstab makes the system more tolerant
of changing hardware. GPT labels appear in
/dev/gpt/ when a disk is attached.
Other partitioning schemes have different label
capabilities, and their labels appear in different directories
in /dev/.
Use a unique label on every filesystem to avoid conflicts from identical labels. A few letters from the computer's name, use, or location can be added to the label. "labroot" or "rootfs-lab" for the UFS root partition on the lab's computer, for example.
For a traditional partition layout where the
/, /var,
/tmp, and /usr
directories are separate filesystems on their own
partitions, create a GPT partitioning scheme, then create
the partitions as shown. Partition sizes shown are typical
for a 20G target disk. If more space is available on the
target disk, larger swap or /var
partitions may be useful. Labels shown here are prefixed
with ex for "example", but readers
should use other unique label values as described
above.
By default, FreeBSD's gptboot expects
the first UFS partition found to be the
/ partition.
| Partition Type | Size | Mountpoint | Label |
|---|---|---|---|
freebsd-boot | 512K | ||
freebsd-ufs | 2G | / | exrootfs |
freebsd-swap | 4G | exswap | |
freebsd-ufs | 2G | /var | exvarfs |
freebsd-ufs | 1G | /tmp | extmpfs |
freebsd-ufs | accept the default (remainder of the disk) | /usr | exusrfs |
After the custom partitions have been created, select to continue with the installation.
This is the last chance for aborting the installation to prevent changes to the hard drive.
Select and press Enter to proceed. If changes need to be made, select to return to the partition editor. will exit the installer without making any changes to the hard drive.
Installation time will vary depending on the distributions chosen, installation media, and speed of the computer. There will be a series of messages displayed indicating progress.
Firstly, the installer will write the partitions to the
disk, and perform a newfs to initialise the
partitions.
If doing a network install, bsdinstall will then proceed to download the required distribution files.
Next, the integrity of the distribution files is verified, to ensure they have not been corrupted during download or misread from the installation media.
Finally, the verified distribution files are extracted to the disk.
Once all requested distribution files have been extracted, bsdinstall will then drop straight into the post-installation configuration tasks (see Section 2.9, “Post-Installation”).
Configuration of various options follows a successful installation of FreeBSD. An option can be configured by re-entering the configuration options from the final menu before booting into the newly installed FreeBSD system.
The root password must be set. Note
that while entering the password, the characters being typed
are not displayed on the screen. After the password has been
entered, it must be entered again. This helps prevent typing
errors.
After the password has been successfully entered, the installation will continue.
Network configuration will be skipped if it has already been done as part of a bootonly installation.
A list of all the network interfaces found on the computer is shown next. Select one to be configured.
If a wireless network interface is chosen, wireless identification and security parameters must be entered to allow it to connect to the network.
Wireless networks are identified by a Service Set Identifier, or SSID. The SSID is a short, unique name given to each network.
Most wireless networks encrypt transmitted data to protect information from unauthorized viewing. WPA2 encryption is strongly recommended. Older encryption types, like WEP, offer very little security.
The first step in connecting to a wireless network is to scan for wireless access points.
SSIDs found during the scan are listed, followed by a description of the encryption types available for that network. If the desired SSID does not appear in the list, select to scan again. If the desired network still does not appear, check for problems with antenna connections or try moving the computer closer to the access point. Rescan after each change is made.
The encryption information for connecting to the selected wireless network is entered after selecting the network. With WPA2, only a password (also known as the Pre-Shared Key, or PSK) is needed. Characters typed into the input box are shown as asterisks for security.
Network configuration continues after selection of the wireless network and entry of the connection information.
Choose whether IPv4 networking is to be used. This is the most common type of network connection.
There are two methods of IPv4 configuration. DHCP will automatically configure the network interface correctly, and is the preferred method. Static configuration requires manual entry of network information.
Do not enter random network information, as it will not work. Obtain the information shown in Section 2.3.3, “Collect Network Information” from the network administrator or service provider.
If a DHCP server is available, select to automatically configure the network interface.
Static configuration of the network interface requires entry of some IPv4 information.
IP Address - The
manually-assigned IPv4 address to be assigned to this
computer. This address must be unique and not already
in use by another piece of equipment on the local
network.
Subnet Mask - The subnet mask
used for the local network. Typically, this is
255.255.255.0.
Default Router - The IP address
of the default router on this network. Usually this
is the address of the router or other network
equipment that connects the local network to the
Internet. Also known as the default
gateway.
IPv6 is a newer method of network configuration. If IPv6 is available and desired, choose to select it.
IPv6 also has two methods of configuration. SLAAC , or StateLess Address AutoConfiguration, will automatically configure the network interface correctly. Static configuration requires manual entry of network information.
SLAAC allows an IPv6 network component to request autoconfiguration information from a local router. See RFC4862 for more information.
Static configuration of the network interface requires entry of the IPv6 configuration information.
IPv6 Address - The
manually-assigned IP address to be
assigned to this computer. This address must be
unique and not already in use by another piece of
equipment on the local network.
Default Router - The IPv6
address of the default router on this network.
Usually this is the address of the router or other
network equipment that connects the local network to
the Internet. Also known as the default
gateway.
The Domain Name System (or DNS) Resolver converts hostnames to and from network addresses. If DHCP or SLAAC was used to autoconfigure the network interface, the Resolver Configuration values may already be present. Otherwise, enter the local network's domain name in the Search field. DNS #1 and DNS #2 are the IP addresses for the local DNS servers. At least one DNS server is required.
Setting the time zone for your machine will allow it to automatically correct for any regional time changes and perform other time zone related functions properly.
The example shown is for a machine located in the Eastern time zone of the United States. Your selections will vary according to your geographical location.
Select or according to how the machine's clock is configured and press Enter. If you do not know whether the system uses UTC or local time, select to choose the more commonly-used local time.
The appropriate region is selected using the arrow keys and then pressing Enter.
Select the appropriate country using the arrow keys and press Enter.
The appropriate time zone is selected using the arrow keys and pressing Enter.
Confirm the abbreviation for the time zone is correct. If it looks okay, press Enter to continue with the post-installation configuration.
Additional system services which will be started at boot can be enabled. All of these services are optional.
sshd - Secure Shell
(SSH) daemon for
secure remote access.
moused - Provides mouse usage
within the system console.
ntpd - Network Time Protocol
(NTP)
daemon for automatic clock synchronization.
powerd - System power control
utility for power control and energy saving.
bsdinstall will prompt if crash dumps should be enabled on the target system. Enabling crash dumps can be very useful in debugging issues with the system, so users are encouraged to enable crash dumps whenever possible. Select to enable crash dumps, or to proceed without crash dumps enabled.
Adding at least one user during the installation allows
the system to be used without being logged in as
root. When logged in as
root, there are essentially no limits or
protection on what can be done. Logging in as a normal user
is safer and more secure.
Select to add new users.
Enter the information for the user to be added.
Username - The name the user will
enter to log in. Typically the first letter of their
first name combined with their last name.
Full name - The user's full
name.
Uid - User ID. Typically, this
is left blank so the system will assign a value.
Login group - The user's group.
Typically left blank to accept the default.
Invite - Additional groups to which the
user will be added as a member.user into
other groups?
Login class - Typically left blank
for the default.
Shell - The interactive shell for
this user. In the example, csh(1) has been
chosen.
Home directory - The user's home
directory. The default is usually correct.
Home directory permissions -
Permissions on the user's home directory. The default is
usually correct.
Use password-based authentication?
- Typically "yes".
Use an empty password? -
Typically "no".
Use a random password? - Typically
"no".
Enter password - The actual
password for this user. Characters typed will not show on
the screen.
Enter password again - The password
must be typed again for verification.
Lock out the account after
creation? - Typically "no".
After entering everything, a summary is shown, and the
system asks if it is correct. If a mistake was made during
entry, enter no and try again. If
everything is correct, enter yes to create
the new user.
If there are more users to add, answer the "Add another
user?" question with yes. Enter
no to finish adding users and continue the
installation.
For more information on adding users and user management, see Chapter 14, Users and Basic Account Management.
After everything has been installed and configured, a final chance is provided to modify settings.
Use this menu to make any changes or do any additional configuration before completing the installation.
Add User - Described in
Section 2.9.6, “Add Users”.
Root Password - Described in
Section 2.9.1, “Setting the root Password”.
Hostname - Described in
Section 2.5.2, “Setting the Hostname”.
Network - Described in
Section 2.9.2, “Configuring Network Interfaces”.
Services - Described in
Section 2.9.4, “Selecting Services to Enable”.
Time Zone - Described in
Section 2.9.3, “Setting the Time Zone”.
Handbook - Download and install the
FreeBSD Handbook (which is what you are reading now).
After any final configuration is complete, select to leave the installation.
bsdinstall will prompt if there are any additional configuration that needs to be done before rebooting into the new system. Select to exit to a shell within the new system, or to proceed to the last step of the installation.
If further configuration or special setup is needed, selecting will boot the install media into Live CD mode.
When the installation is complete, select to reboot the computer and start the new FreeBSD system. Do not forget to remove the FreeBSD install CD, DVD, or USB memory stick, or the computer may boot from it again.
As FreeBSD boots, many informational messages are displayed. Most will scroll off the screen; this is normal. After the system finishes booting, a login prompt is displayed. Messages that scrolled off the screen can be reviewed by pressing Scroll-Lock to turn on the scroll-back buffer. The PgUp, PgDn, and arrow keys can be used to scroll back through the messages. Pressing Scroll-Lock again unlocks the display and returns to the normal screen.
At the login: prompt, enter the
username added during the installation,
asample in the example. Avoid logging
in as root except when
necessary.
The scroll-back buffer examined above is limited in
size, so not all of the messages may have been visible.
After logging in, most of them can be seen from the command
line by typing dmesg | less at the
prompt. Press q to return to the command
line after viewing.
Typical boot messages (version information omitted):
Generating the RSA and DSA keys may take some time on slower machines. This happens only on the initial boot-up of a new installation, and only if sshd is set to start automatically. Subsequent boots will be faster.
FreeBSD does not install graphical environments by default, but many are available. See Chapter 6, The X Window System for more information.
Proper shutdown of a FreeBSD computer helps protect data and
even hardware from damage. Do not just turn off the power.
If the user is a member of the wheel
group, become the superuser by typing su at
the command line and entering the root
password. Otherwise, log in as root and
use shutdown -p now. The system will close
down cleanly and turn itself off.
The Ctrl+Alt+Del key combination can be used to reboot the system, but is not recommended during normal operation.
The following section covers basic installation troubleshooting, such as common problems people have reported.
Due to various limitations of the PC architecture, it is impossible for probing to be 100% reliable, however, there are a few things you can do if it fails.
Check the Hardware Notes document for your version of FreeBSD to make sure your hardware is supported.
If your hardware is supported and you still experience
lock-ups or other problems, you will need to build a
custom kernel. This will
allow you to add in support for devices which are not present
in the GENERIC kernel. The kernel on the
boot disks is configured assuming that most hardware devices
are in their factory default configuration in terms of IRQs,
IO addresses, and DMA channels. If your hardware has been
reconfigured, you will most likely need to edit the kernel
configuration and recompile to tell FreeBSD where to find
things.
It is also possible that a probe for a device not present will cause a later probe for another device that is present to fail. In that case, the probes for the conflicting driver(s) should be disabled.
Some installation problems can be avoided or alleviated by updating the firmware on various hardware components, most notably the motherboard. Motherboard firmware is usually referred to as the BIOS. Most motherboard and computer manufacturers have a website for upgrades and upgrade information.
Manufacturers generally advise against upgrading the motherboard BIOS unless there is a good reason for doing so, like a critical update. The upgrade process can go wrong, leaving the BIOS incomplete and the computer inoperative.
2.10.2.1. | My system hangs while probing hardware during boot, or it behaves strangely during install. |
FreeBSD makes extensive use of the system
ACPI service on the i386, amd64, and ia64 platforms to
aid in system configuration if it is detected during
boot. Unfortunately, some bugs still exist in both the
ACPI driver and within system motherboards and
BIOS
firmware. ACPI can be disabled by setting
the set hint.acpi.0.disabled="1"This is reset each time the system is booted, so it
is necessary to
add |
A live CD of FreeBSD is available on the same CD as the main installation program. This is useful for those who are still wondering whether FreeBSD is the right operating system for them and want to test some of the features before installing.
The following points should be noted while using the live CD:
To gain access to the system, authentication is
required. The username is root, and
the password is blank.
As the system runs directly from the CD, performance will be significantly slower than that of a system installed on a hard disk.
The live CD provides a command prompt and not a graphical interface.
FreeBSD provides a text-based, easy to use installation
program. FreeBSD 9.0-RELEASE and later use the installation program
known as bsdinstall(8)
while FreeBSD 8.X uses
sysinstall(8). This chapter describes
how to use sysinstall(8).
The use of bsdinstall(8)
is covered in Chapter 2, Installing FreeBSD 9.X and
Later.
After reading this chapter, you will know:
How to create the FreeBSD installation media.
How FreeBSD refers to and subdivides hard disks.
How to start sysinstall(8).
The questions sysinstall(8) asks, what they mean, and how to answer them.
Before reading this chapter, you should:
Read the supported hardware list that shipped with the version of FreeBSD to install, and verify that the system's hardware is supported.
In general, these installation instructions are written for the i386™ and FreeBSD/amd64 architectures. Where applicable, instructions specific to other platforms will be listed. There may be minor differences between the installer and what is shown here. This chapter should be used as a general guide rather than a literal installation manual.
The minimal configuration to install FreeBSD varies with the FreeBSD version and the hardware architecture.
A summary of this information is given in the following sections. Depending on the method chosen to install FreeBSD, a floppy drive, CDROM drive, or network adapter may be needed. Instructions on how to prepare the installation media can be found in Section 3.3.7, “Prepare the Boot Media”.
Both FreeBSD/i386 and FreeBSD/pc98 require a 486 or better processor, at least 24 MB of RAM, and at least 150 MB of free hard drive space for the most minimal installation.
In the case of older hardware, installing more RAM and more hard drive space is often more important than a faster processor.
There are two classes of processors capable of running FreeBSD/amd64. The first are AMD64 processors, including the AMD Athlon™64, AMD Athlon™64-FX, and AMD Opteron™ or better processors.
The second class of processors includes those using the Intel® EM64T architecture. Examples of these processors include the Intel® Core™ 2 Duo, Quad, Extreme processor families, and the Intel® Xeon™ 3000, 5000, and 7000 sequences of processors.
If the machine is based on an nVidia nForce3 Pro-150, the BIOS setup must be used to disable the IO APIC. If this option does not exist, disable ACPI instead as there are bugs in the Pro-150 chipset.
To install FreeBSD/sparc64, use a supported platform (see Section 3.2.2, “Supported Hardware”).
A dedicated disk is needed for FreeBSD/sparc64 as it is not possible to share a disk with another operating system at this time.
A list of supported hardware is provided with each FreeBSD
release in the FreeBSD Hardware Notes. This document can usually
be found in a file named HARDWARE.TXT, in
the top-level directory of a CDROM or FTP distribution, or in
sysinstall(8)'s documentation menu.
It lists, for a given architecture, which hardware devices are
known to be supported by each release of FreeBSD. Copies of the
supported hardware list for various releases and architectures
can also be found on the Release
Information page of the FreeBSD website.
Before installing FreeBSD it is recommended to inventory the components in the computer. The FreeBSD installation routines will show components such as hard disks, network cards, and CDROM drives with their model number and manufacturer. FreeBSD will also attempt to determine the correct configuration for these devices, including information about IRQ and I/O port usage. Due to the vagaries of computer hardware, this process is not always completely successful, and FreeBSD may need some manual configuration.
If another operating system is already installed,
use the facilities provided
by that operating systems to view the hardware configuration.
If the settings of an expansion
card are not obvious, check if they are printed on the
card itself. Popular IRQ
numbers are 3, 5, and 7, and I/O port addresses are normally
written as
hexadecimal numbers, such as 0x330.
It is recommended to print or write down this information before installing FreeBSD. It may help to use a table, as seen in this example:
| Device Name | IRQ | I/O port(s) | Notes |
|---|---|---|---|
| First hard disk | N/A | N/A | 40 GB, made by Seagate, first IDE master |
| CDROM | N/A | N/A | First IDE slave |
| Second hard disk | N/A | N/A | 20 GB, made by IBM, second IDE master |
| First IDE controller | 14 | 0x1f0 | |
| Network card | N/A | N/A | Intel® 10/100 |
| Modem | N/A | N/A | 3Com® 56K faxmodem, on COM1 |
| … |
Once the inventory of the components in the computer is complete, check if it matches the hardware requirements of the FreeBSD release to install.
If the computer contains valuable data, ensure it is backed up, and that the backup has been tested before installing FreeBSD. The FreeBSD installer will prompt before writing any data to disk, but once that process has started, it cannot be undone.
If FreeBSD is to be installed on the entire hard disk, skip this section.
However, if FreeBSD will co-exist with other operating systems, a rough understanding of how data is laid out on the disk is useful.
A PC disk can be divided into discrete chunks known as partitions. Since FreeBSD also has partitions, naming can quickly become confusing. Therefore, these disk chunks are referred to as slices in FreeBSD. For example, the FreeBSD version of fdisk(8) refers to slices instead of partitions. By design, the PC only supports four partitions per disk. These partitions are called primary partitions. To work around this limitation and allow more than four partitions, a new partition type was created, the extended partition. A disk may contain only one extended partition. Special partitions, called logical partitions, can be created inside this extended partition.
Each partition has a partition ID, which is
a number used to identify the type of data on the partition. FreeBSD
partitions have the partition ID of 165.
In general, each operating system will identify
partitions in a particular way. For example,
Windows®, assigns each primary and logical partition a
drive letter, starting with
C:.
FreeBSD must be installed into a primary partition. If there are multiple disks, a FreeBSD partition can be created on all, or some, of them. When FreeBSD is installed, at least one partition must be available. This might be a blank partition or it might be an existing partition whose data can be overwritten.
If all the partitions on all the disks are in use,
free one of them for FreeBSD using the tools
provided by an existing operating system, such as Windows®
fdisk.
If there is a spare partition, use that. If it is too small, shrink one or more existing partitions to create more available space.
A minimal installation of FreeBSD takes as little as 100 MB of disk space. However, that is a very minimal install, leaving almost no space for files. A more realistic minimum is 250 MB without a graphical environment, and 350 MB or more for a graphical user interface. If other third-party software will be installed, even more space is needed.
You can use a tool such as GParted to resize your partitions and make space for FreeBSD. GParted is known to work on NTFS and is available on a number of Live CD Linux distributions, such as SystemRescueCD.
Incorrect use of a shrinking tool can delete the data on the disk. Always have a recent, working backup before using this type of tool.
Consider a computer with a single 4 GB disk
that
already has a version of Windows® installed, where the
disk has been split into two drive letters,
C: and
D:, each of which is 2 GB in size.
There is 1 GB of data on C:,
and
0.5 GB of data on
D:.
This disk has two partitions, one per
drive letter. Copy all existing data from
D: to C:, which
will free up the second partition, ready for FreeBSD.
Consider a computer with a single 4 GB disk
that already has a version of Windows® installed. When
Windows® was installed, it created one large partition,
a
C: drive that is 4 GB in size.
Currently, 1.5 GB of space is used, and FreeBSD should
have 2 GB
of space.
In order to install FreeBSD, either:
Backup the Windows® data and then reinstall Windows®, asking for a 2 GB partition at install time.
Use one of the tools described above to shrink your Windows® partition.
Before installing from an FTP site or an NFS server, make note of the network configuration. The installer will prompt for this information so that it can connect to the network to complete the installation.
If using an Ethernet network or an Internet connection using an Ethernet adapter via cable or DSL, the following information is needed:
IP address
IP address of the default gateway
Hostname
DNS server IP addresses
Subnet Mask
If this information is unknown, ask the system administrator or service provider. Make note if this information is assigned automatically using DHCP.
If using a dialup modem, FreeBSD can still be installed over the Internet, it will just take a very long time.
You will need to know:
The phone number to dial the Internet Service Provider (ISP)
The COM: port the modem is connected to
The username and password for the ISP account
Although the FreeBSD Project strives to ensure that each release of FreeBSD is as stable as possible, bugs do occasionally creep into the process. On rare occasions those bugs affect the installation process. As these problems are discovered and fixed, they are noted in the FreeBSD Errata, which is found on the FreeBSD website. Check the errata before installing to make sure that there are no late-breaking problems to be aware of.
Information about all releases, including the errata for each release, can be found on the release information section of the FreeBSD website.
The FreeBSD installer can install FreeBSD from files located in any of the following places:
A CDROM or DVD
A USB Memory Stick
A MS-DOS® partition on the same computer
Floppy disks (FreeBSD/pc98 only)
An FTP site through a firewall or using an HTTP proxy
An NFS server
A dedicated parallel or serial connection
If installing from a purchased FreeBSD CD/DVD, skip ahead to Section 3.3.7, “Prepare the Boot Media”.
To obtain the FreeBSD installation files, skip ahead to Section 3.13, “Preparing Custom Installation Media” which explains how to prepare the installation media. After reading that section, come back here and read on to Section 3.3.7, “Prepare the Boot Media”.
The FreeBSD installation process is started by booting the computer into the FreeBSD installer. It is not a program that can be run within another operating system. The computer normally boots using the operating system installed on the hard disk, but it can also be configured to boot from a CDROM or from a USB disk.
If installing from a CD/DVD to a computer whose BIOS supports booting from the CD/DVD, skip this section. The FreeBSD CD/DVD images are bootable and can be used to install FreeBSD without any other special preparation.
To create a bootable memory stick, follow these steps:
Acquire the Memory Stick Image
Memory stick images for
FreeBSD 8.X can be downloaded
from
the ISO-IMAGES/
directory at
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/.
Replace arch/ISO-IMAGES/version/FreeBSD-version-RELEASE-arch-memstick.imgarch and
version with the
architecture and the version number to
install. For example, the memory stick
images for FreeBSD/i386 8.4-RELEASE are
available from ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.4/FreeBSD-8.4-RELEASE-i386-memstick.img.
A different directory path is used for
FreeBSD 9.0-RELEASE and later versions. How to
download and install
FreeBSD 9.X
is covered in Chapter 2, Installing FreeBSD 9.X and
Later.
The memory stick image has a .img
extension. The ISO-IMAGES/ directory
contains a number of different images and the one to
use depends on the version of FreeBSD and the
type of media supported by the hardware being installed
to.
Before proceeding, back up the data on the USB stick, as this procedure will erase it.
Write the Image File to the Memory Stick
The example below
lists /dev/da0 as the
target device where the image will be written. Be very careful
that you have the correct device as the output target, or you
may destroy your existing data.
Writing the Image with dd(1)
The .img file
is not a regular file that can
just be copied to the
memory stick. It is an image of the complete contents of the
disk. This means that
dd(1) must be used to write the image directly to
the disk:
# dd if=FreeBSD-8.4-RELEASE-i386-memstick.img of=/dev/da0 bs=64kIf an
Operation not permitted
error is displayed, make certain that the target device
is not in use, mounted, or being automounted by
another program. Then try
again.
Make sure to use the correct drive letter as the output target, as this command will overwrite and destroy any existing data on the specified device.
Obtaining Image Writer for Windows
Image Writer for Windows is a free application that can correctly write an image file to a memory stick. Download it from https://launchpad.net/win32-image-writer/ and extract it into a folder.
Writing the Image with Image Writer
Double-click
the Win32DiskImager icon to start
the program. Verify that the drive letter shown
under Device is the drive
with the memory stick. Click the folder icon and select the
image to be written to the memory stick.
Click to accept the image file
name. Verify that everything is correct, and that no folders
on the memory stick are open in other windows. Finally,
click to write the image file to
the drive.
To create the boot floppy images for a FreeBSD/pc98 installation, follow these steps:
Acquire the Boot Floppy Images
The FreeBSD/pc98 boot disks
can be downloaded from the floppies directory,
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/pc98/.
Replace version-RELEASE/floppies/version with the
version number to install.
The floppy images have a .flp
extension. floppies/ contains a number
of different images. Download
boot.flp as well as the number of
files associated with the type of installation, such as
kern.small* or
kern*.
The FTP program must use binary mode to download these disk images. Some web browsers use text or ASCII mode, which will be apparent if the disks are not bootable.
Prepare the Floppy Disks
Prepare one floppy disk per downloaded image file. It is imperative that these disks are free from defects. The easiest way to test this is to reformat the disks. Do not trust pre-formatted floppies. The format utility in Windows® will not tell about the presence of bad blocks, it simply marks them as “bad” and ignores them. It is advised to use brand new floppies.
If the installer crashes, freezes, or otherwise misbehaves, one of the first things to suspect is the floppies. Write the floppy image files to new disks and try again.
Write the Image Files to the Floppy Disks
The .flp files are
not regular files that can be copied
to the disk.
They are images of the complete contents of the
disk.
Specific tools must be used to write the
images directly to the disk.
FreeBSD provides a tool called
rawrite for creating the floppies on a
computer running
Windows®. This tool can be downloaded from
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/pc98/
on the FreeBSD FTP site. Download this tool, insert a
floppy, then specify the filename to write to the floppy
drive:
version-RELEASE/tools/
C:\> rawrite boot.flp A:Repeat this command for each .flp
file, replacing the floppy disk each time, being sure to label
the disks with the name of the file.
Adjust the command line as necessary, depending on where
the .flp files are located.
When writing the floppies on a UNIX®-like system, such as another FreeBSD system, use dd(1) to write the image files directly to disk. On FreeBSD, run:
# dd if=boot.flp of=/dev/fd0On FreeBSD, /dev/fd0 refers to the
first floppy disk. Other UNIX®
variants might have different names for the floppy disk
device, so check the documentation for the
system as necessary.
You are now ready to start installing FreeBSD.
By default, the installer will not make any changes to the disk(s) until after the following message:
Last Chance: Are you SURE you want continue the installation? If you're running this on a disk with data you wish to save then WE STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before proceeding! We can take no responsibility for lost disk contents!
The install can be exited at any time prior to this final warning without changing the contents of the hard drive. If there is a concern that something is configured incorrectly, turn the computer off before this point, and no damage will be done.
Turn on the computer. As it starts it should display an option to enter the system set up menu, or BIOS, commonly reached by keys like F2, F10, Del, or Alt+S. Use whichever keystroke is indicated on screen. In some cases the computer may display a graphic while it starts. Typically, pressing Esc will dismiss the graphic and display the boot messages.
Find the setting that controls which devices the system boots
from. This is usually labeled as the “Boot Order”
and commonly shown as a list of devices, such as
Floppy, CDROM,
First Hard Disk, and so on.
If booting from the CD/DVD, make sure that the CDROM drive is selected. If booting from a USB disk, make sure that it is selected instead. When in doubt, consult the manual that came with the computer or its motherboard.
Make the change, then save and exit. The computer should now restart.
If using a prepared a “bootable” USB stick, as described in Section 3.3.7, “Prepare the Boot Media”, plug in the USB stick before turning on the computer.
If booting from CD/DVD, turn on the computer, and insert the CD/DVD at the first opportunity.
For FreeBSD/pc98, installation boot floppies are
available and can be prepared as described in Section 3.3.7, “Prepare the Boot Media”. The first floppy
disc will contain boot.flp. Put
this floppy in the floppy drive to boot into the
installer.
If the computer starts up as normal and loads the existing operating system, then either:
The disks were not inserted early enough in the boot process. Leave them in, and try restarting the computer.
The BIOS changes did not work correctly. Redo that step until the right option is selected.
That particular BIOS does not support booting from the desired media.
FreeBSD will start to boot. If booting from CD/DVD, messages will be displayed, similar to these:
If booting from floppy disc, a display similar to this will be shown:
Remove the
boot.flp floppy, insert the
next floppy, and press
Enter.
When prompted, insert the other disks as required.
The boot process will then display the FreeBSD boot loader menu:
Either wait ten seconds, or press Enter.
Most SPARC64® systems are set to boot automatically from disk. To install FreeBSD, boot over the network or from a CD/DVD and wait until the boot message appears. The message depends on the model, but should look similar to:
If the system proceeds to boot from disk,
press
L1+A
or
Stop+A
on the keyboard, or send a BREAK over the
serial console using ~# in
tip(1) or cu(1) to get to the PROM prompt. It
looks like this:
This is the prompt used on systems with just one CPU. | |
This is the prompt used on SMP systems and the digit indicates the number of the active CPU. |
At this point, place the CD/DVD into the drive and from
the PROM prompt, type boot cdrom.
The last few hundred lines that have been displayed on screen are stored and can be reviewed.
To review this buffer, press Scroll Lock to turn on scrolling in the display. Use the arrow keys or PageUp and PageDown to view the results. Press Scroll Lock again to stop scrolling.
Do this now, to review the text that scrolled off the screen when the kernel was carrying out the device probes. Text similar to Figure 3.2, “Typical Device Probe Results” will be displayed, although it will differ depending on the devices in the computer.
Check the probe results carefully to make sure that FreeBSD found
all the devices. If a device was not found, it will
not be listed. A custom kernel
can be used to add in support for devices which are not in the
GENERIC kernel.
After the device probe, the menu shown in Figure 3.3, “Selecting Country Menu” will be displayed. Use the arrow key to choose a country, region, or group. Then press Enter to set the country.
If is selected as the country, the standard American keyboard map will be used. If a different country is chosen, the following menu will be displayed. Use the arrow keys to choose the correct keyboard map and press Enter.
After the country selection, the sysinstall(8) main menu will display.
The FreeBSD 8.X installer,
sysinstall(8), is console based and
is
divided into a number of menus and screens that can be used to
configure and control the installation process.
This menu system is controlled by the arrow keys, Enter, Tab, Space, and other keys. To view a detailed description of these keys and what they do, ensure that the entry is highlighted and that the button is selected, as shown in Figure 3.5, “Selecting Usage from Sysinstall Main Menu”, then press Enter.
The instructions for using the menu system will be displayed. After reviewing them, press Enter to return to the Main Menu.
From the Main Menu, select with the arrow keys and press Enter.
This will display the Documentation Menu.
It is important to read the documents provided. To view a document, select it with the arrow keys and press Enter. When finished reading a document, press Enter to return to the Documentation Menu.
To return to the Main Installation Menu, select with the arrow keys and press Enter.
To change the keyboard mapping, use the arrow keys to select from the menu and press Enter. This is only required when using a non-standard or non-US keyboard.
A different keyboard mapping may be chosen by selecting the menu item using the up and down arrow keys and pressing Space. Pressing Space again will unselect the item. When finished, choose the using the arrow keys and press Enter.
Only a partial list is shown in this screen representation. Selecting by pressing Tab will use the default keymap and return to the Main Install Menu.
Select and press Enter.
The default values are usually fine for most users and do not need to be changed. The release name will vary according to the version being installed.
The description of the selected item will appear at the bottom of the screen highlighted in blue. Notice that one of the options is to reset all values to startup defaults.
Press F1 to read the help screen about the various options.
Press Q to return to the Main Install menu.
The first task is to allocate disk space for FreeBSD, and label that space so that sysinstall(8) can prepare it. In order to do this you need to know how FreeBSD expects to find information on the disk.
Before installing and configuring FreeBSD it is important to be aware how FreeBSD deals with BIOS drive mappings.
In a PC running a BIOS-dependent operating system such as Microsoft® Windows®, the BIOS is able to abstract the normal disk drive order and the operating system goes along with the change. This allows the user to boot from a disk drive other than the "primary master". This is especially convenient for users buy an identical second hard drive, and perform routine copies of the first drive to the second drive. If the first drive fails, is attacked by a virus, or is scribbled upon by an operating system defect, they can easily recover by instructing the BIOS to logically swap the drives. It is like switching the cables on the drives, without having to open the case.
Systems with SCSI controllers often include BIOS extensions which allow the SCSI drives to be re-ordered in a similar fashion for up to seven drives.
A user who is accustomed to taking advantage of these features may become surprised when the results with FreeBSD are not as expected. FreeBSD does not use the BIOS, and does not know the “logical BIOS drive mapping”. This can lead to perplexing situations, especially when drives are physically identical in geometry and have been made as data clones of one another.
When using FreeBSD, always restore the BIOS to natural drive numbering before installing FreeBSD, and then leave it that way. If drives need to be switched around, take the time to open the case and move the jumpers and cables.
After choosing to begin a standard installation in sysinstall(8), this message will appear:
Press Enter and
a list of all the hard drives that the kernel found when it
carried out the device probes will be displayed.
Figure 3.13, “Select Drive for FDisk” shows an example from a
system with two IDE disks called
ad0 and ad2.
Note that ad1 is not
listed here.
Consider two IDE hard disks where one
is the master on the first IDE controller and one is the
master on
the second IDE controller. If FreeBSD numbered these as
ad0 and
ad1, everything would work.
But if a third disk is later added as the slave device on
the
first IDE controller, it would now be ad1,
and the previous ad1 would become
ad2. Because device names
are used to find filesystems,
some filesystems may no longer
appear correctly, requiring a change to the FreeBSD
configuration.
To work around this, the kernel can be configured to name IDE
disks based on where they are and not the order in which they
were
found. With this scheme, the master disk on the second IDE
controller will always be
ad2, even if there are no
ad0 or ad1
devices.
This configuration is the default for the FreeBSD kernel, which
is why the display in this example shows
ad0 and
ad2. The machine on which this screenshot
was taken had IDE disks on both master channels of the IDE
controllers and no disks on the slave channels.
Select the disk on which to install FreeBSD, and then press . FDisk will start, with a display similar to that shown in Figure 3.14, “Typical Default FDisk Partitions”.
The FDisk display is broken into three sections.
The first section, covering the first two lines of the display, shows details about the currently selected disk, including its FreeBSD name, the disk geometry, and the total size of the disk.
The second section shows the slices that are currently on the
disk, where they start and end, how large they are, the name FreeBSD
gives them, and their description and sub-type. This example shows two
small unused slices which are artifacts of disk layout schemes
on the
PC. It also shows one large FAT slice, which
appears as C: in
Windows®, and an extended slice, which may contain other
drive letters in Windows®.
The third section shows the commands that are available in FDisk.
This step varies, depending on how the disk is to be sliced.
To install FreeBSD to the entire disk, which will delete
all the other data on this disk, press A,
which
corresponds to the option.
The existing slices will be removed and replaced with a small
area
flagged as unused
and one large slice for FreeBSD. Then,
select the newly created FreeBSD slice using the arrow
keys and press S to mark the slice as being
bootable. The screen will then look similar to
Figure 3.15, “Fdisk Partition Using Entire Disk”. Note the
A in the Flags column, which
indicates that this slice is active, and will be
booted from.
If an existing slice needs to be deleted to make space for FreeBSD, select the slice using the arrow keys and press D. Then, press C to be prompted for the size of the slice to create. Enter the appropriate value and press Enter. The default value in this box represents the largest possible slice to make, which could be the largest contiguous block of unallocated space or the size of the entire hard disk.
If you have already made space for FreeBSD then you can press C to create a new slice. Again, you will be prompted for the size of slice you would like to create.
When finished, press Q. Any changes will be saved in sysinstall(8), but will not yet be written to disk.
The next menu provides the option to install a boot manager. In general, install the FreeBSD boot manager if:
There is more than one drive and FreeBSD will be installed onto a drive other than the first one.
FreeBSD will be installed alongside another operating system on the same disk, and you want to choose whether to start FreeBSD or the other operating system when the computer starts.
If FreeBSD is going to be the only operating system on this machine, installed on the first hard disk, then the boot manager will suffice. Choose if using a third-party boot manager capable of booting FreeBSD.
Make a selection and press Enter.
The help screen, reached by pressing F1, discusses the problems that can be encountered when trying to share the hard disk between operating systems.
If there is more than one drive, it will return to the Select Drives screen after the boot manager selection. To install FreeBSD on to more than one disk, select another disk and repeat the slice process using FDisk.
If installing FreeBSD on a drive other than the first drive, the FreeBSD boot manager needs to be installed on both drives.
Use Tab to toggle between the last drive selected, , and .
Press Tab once to toggle to , then press Enter to continue with the installation.
Next, create some partitions inside each slice.
Remember that each partition is lettered, from
a through to h, and that
partitions b, c, and
d have conventional meanings that should
be adhered
to.
Certain applications can benefit from particular partition schemes, especially when laying out partitions across more than one disk. However, for a first FreeBSD installation, do not give too much thought to how to partition the disk. It is more important to install FreeBSD and start learning how to use it. You can always re-install FreeBSD to change the partition scheme after becoming more familiar with the operating system.
The following scheme features four partitions: one for swap space and three for filesystems.
| Partition | Filesystem | Size | Description |
|---|---|---|---|
a | / | 1 GB | This is the root filesystem. Every other filesystem will be mounted somewhere under this one. 1 GB is a reasonable size for this filesystem as user files should not be stored here and a regular FreeBSD install will put about 128 MB of data here. |
b | N/A | 2-3 x RAM | The system's swap space is kept on the |
e | /var | 512 MB to 4096 MB | /var
contains
files that are constantly varying, such as
log files and other administrative files. Many
of these files are read from or written to extensively
during
FreeBSD's day-to-day running. Putting these files on another
filesystem allows FreeBSD to optimize the access of these
files without affecting other files in other directories that
do not have the same access pattern. |
f | /usr | Rest of disk (at least 8 GB) | All other files will typically be stored in
/usr and its
subdirectories. |
The values above are given as example and should be used
by experienced users only. Users are encouraged to use the
automatic partition layout called Auto
Defaults by the FreeBSD partition editor.
If installing FreeBSD on to more than one disk, create partitions in the other configured slices. The easiest way to do this is to create two partitions on each disk, one for the swap space, and one for a filesystem.
| Partition | Filesystem | Size | Description |
|---|---|---|---|
b | N/A | See description | Swap space can be split across
each disk. Even though the a partition is
free, convention dictates that swap space stays on the
b partition. |
e | /diskn | Rest of disk | The rest of the disk is taken up with one big partition.
This could easily be put on the a
partition, instead of the e partition.
However, convention says that the a
partition on a slice is reserved for the filesystem that will
be the root (/)
filesystem. Following
this convention is not necessary, but
sysinstall(8) uses it, so following it
makes the installation slightly cleaner.
This filesystem can be mounted anywhere; this example
mounts it as
/disk,
where
n is a number that changes for each
disk. |
Having chosen the partition layout, create it using sysinstall(8).
Press Enter to start the FreeBSD partition editor, called Disklabel.
Figure 3.18, “Sysinstall Disklabel Editor” shows the display when Disklabel starts. The display is divided into three sections.
The first few lines show the name of the disk being
worked on and the slice that contains the partitions to
create. At this point, Disklabel
calls
this the Partition name rather than slice
name.
This display also shows the amount of free space within the slice;
that is, space that was set aside in the slice, but that has not yet
been assigned to a partition.
The middle of the display shows the partitions that have been created, the name of the filesystem that each partition contains, their size, and some options pertaining to the creation of the filesystem.
The bottom third of the screen shows the keystrokes that are valid in Disklabel.
Disklabel can automatically create partitions and assign them default sizes. The default sizes are calculated with the help of an internal partition sizing algorithm based on the disk size. Press A to see a display similar to that shown in Figure 3.19, “Sysinstall Disklabel Editor with Auto Defaults”. Depending on the size of the disk, the defaults may or may not be appropriate.
The default partitioning assigns
/tmp its own
partition instead
of being part of the / partition. This
helps avoid filling the / partition with
temporary files.
To replace the default partitions, use the arrow keys to select the first partition and press D to delete it. Repeat this to delete all the suggested partitions.
To create the first partition, a,
mounted as
/, make sure the
proper disk slice
at the top of
the screen is selected and press C. A dialog box
will appear, prompting for the size of the new partition,
as shown
in Figure 3.20, “Free Space for Root Partition”. The size can
be entered as
the number of disk blocks to use or as a
number followed by either M for megabytes,
G for gigabytes, or C for
cylinders.
The default size shown will create a partition that takes up the
rest of the slice. If using the partition sizes described
in the earlier example, delete the existing figure using
Backspace, and then type in
512M, as shown in
Figure 3.21, “Edit Root Partition Size”. Then press
.
After choosing the partition's size, the installer will ask whether this partition will contain a filesystem or swap space. The dialog box is shown in Figure 3.22, “Choose the Root Partition Type”. This first partition will contain a filesystem, so check that is selected and press Enter.
Finally, tell
Disklabel where the filesystem will
be
mounted. The dialog box is shown in
Figure 3.23, “Choose the Root Mount Point”. Type
/, and
then press Enter.
The display will then update to show the newly created
partition. Repeat this procedure for the other
partitions. When creating the swap partition, it will not
prompt for the filesystem mount point. When creating the
final partition,
/usr, leave the
suggested size as is to
use the rest of the slice.
The final FreeBSD DiskLabel Editor screen will appear similar to Figure 3.24, “Sysinstall Disklabel Editor”, although the values chosen may be different. Press Q to finish.
Deciding which distribution set to install will depend largely on the intended use of the system and the amount of disk space available. The predefined options range from installing the smallest possible configuration to everything. Those who are new to UNIX® or FreeBSD should select one of these canned options. Customizing a distribution set is typically for the more experienced user.
Press F1 for more information on the distribution set options and what they contain. When finished reviewing the help, press Enter to return to the Select Distributions Menu.
If a graphical user interface is desired, the configuration of Xorg and selection of a default desktop must be done after the installation of FreeBSD. More information regarding the installation and configuration of a Xorg can be found in Chapter 6, The X Window System.
If compiling a custom kernel is anticipated, select an option which includes the source code. For more information on why a custom kernel should be built or how to build a custom kernel, see Chapter 9, Configuring the FreeBSD Kernel.
The most versatile system is one that includes everything. If there is adequate disk space, select , as shown in Figure 3.25, “Choose Distributions”, by using the arrow keys and pressing Enter. If there is a concern about disk space, consider using an option that is more suitable for the situation. Do not fret over the perfect choice, as other distributions can be added after installation.
After selecting the desired distribution, an opportunity to install the FreeBSD Ports Collection is presented. The Ports Collection is an easy and convenient way to install software as it provides a collection of files that automate the downloading, compiling, and installation of third-party software packages. Chapter 5, Installing Applications: Packages and Ports discusses how to use the Ports Collection.
The installation program does not check to see if you have adequate space. Select this option only if you have adequate hard disk space. As of FreeBSD 9.1, the FreeBSD Ports Collection takes up about 500 MB of disk space. You can safely assume a larger value for more recent versions of FreeBSD.
Select with the arrow keys to install the Ports Collection or to skip this option. Press Enter to continue. The Choose Distributions menu will redisplay.
Once satisfied with the options, select with the arrow keys, ensure that is highlighted, and press Enter to continue.
If installing from a CD/DVD, use the arrow keys to highlight . Ensure that is highlighted, then press Enter to proceed with the installation.
For other methods of installation, select the appropriate option and follow the instructions.
Press F1 to display the Online Help for installation media. Press Enter to return to the media selection menu.
There are three FTP installation modes to choose from: active FTP, passive FTP, or via a HTTP proxy.
This option makes all FTP transfers use “Active” mode. This will not work through firewalls, but will often work with older FTP servers that do not support passive mode. If the connection hangs with passive mode (the default), try using active mode.
This option instructs sysinstall(8) to use passive mode for all FTP operations. This allows the user to pass through firewalls that do not allow incoming connections on random TCP ports.
This option instructs sysinstall(8) to use the HTTP protocol to connect to a proxy for all FTP operations. The proxy will translate the requests and send them to the FTP server. This allows the user to pass through firewalls that do not allow FTP, but offer a HTTP proxy. In this case, specify the proxy in addition to the FTP server.
For a proxy FTP server, give the name of the server as
part of the username, after an “@” sign. The
proxy server then “fakes” the real server. For
example, to install from
ftp.FreeBSD.org, using the proxy
FTP server foo.example.com,
listening on port 1234, go to the options menu, set the FTP
username to ftp@ftp.FreeBSD.org and the
password to an email address. As the installation media,
specify FTP (or passive FTP, if the proxy supports it), and
the URL
ftp://foo.example.com:1234/pub/FreeBSD.
Since /pub/FreeBSD
from
ftp.FreeBSD.org is proxied under
foo.example.com, the proxy
will fetch the files
from ftp.FreeBSD.org as the
installer requests them.
The installation can now proceed if desired. This is also the last chance for aborting the installation to prevent changes to the hard drive.
Select and press Enter to proceed.
The installation time will vary according to the distribution chosen, installation media, and the speed of the computer. There will be a series of messages displayed, indicating the status.
The installation is complete when the following message is displayed:
Press Enter to proceed with post-installation configurations.
Selecting and pressing Enter will abort the installation so no changes will be made to the system. The following message will appear:
This message is generated because nothing was installed. Pressing Enter will return to the Main Installation Menu to exit the installation.
Configuration of various options can be performed after a successful installation. An option can be configured by re-entering the configuration menus before booting the new FreeBSD system or after boot using sysinstall(8) and then selecting the menu.
If PPP was previously configured for an FTP install, this screen will not display and can be configured after boot as described above.
For detailed information on Local Area Networks and configuring FreeBSD as a gateway/router refer to the Advanced Networking chapter.
To configure a network device, select and press Enter. Otherwise, select to continue.
Select the interface to be configured with the arrow keys and press Enter.
In this private local area network, the current Internet type protocol (IPv4) was sufficient and was selected with the arrow keys and Enter pressed.
If connected to an existing IPv6 network with an RA server, choose and press Enter. It will take several seconds to scan for RA servers.
If Dynamic Host Configuration Protocol DHCP) is not required, select with the arrow keys and press Enter.
Selecting will execute dhclient(8) and, if successful, will fill in the network configuration information automatically. Refer to Section 29.6, “Automatic Network Configuration (DHCP)” for more information.
The following Network Configuration screen shows the configuration of the Ethernet device for a system that will act as the gateway for a Local Area Network.
Use Tab to select the information fields and fill in appropriate information:
The fully-qualified hostname, such as
k6-2.example.com in
this case.
The name of the domain that the machine is
in, such as example.com
for this case.
IP address of host forwarding packets to non-local destinations. This must be filled in if the machine is a node on the network. Leave this field blank if the machine is the gateway to the Internet for the network. The IPv4 Gateway is also known as the default gateway or default route.
IP address of the local DNS server. There is no
local
DNS server on this private local area network so the IP
address of the provider's DNS server
(208.163.10.2) was used.
The IP address to be used for this interface was
192.168.0.1
The address block being used for this local area
network is
192.168.0.0 -
192.168.0.255
with a netmask of
255.255.255.0.
Any additional interface-specific options to ifconfig(8). There were none in this case.
Use Tab to select when finished and press Enter.
Choosing and pressing Enter will bring the machine up on the network so it is ready for use. However, this does not accomplish much during installation, since the machine still needs to be rebooted.
If the machine will be acting as the gateway for a local area network and forwarding packets between other machines, select and press Enter. If the machine is a node on a network, select and press Enter to continue.
If is selected, various services
will not be enabled. These services can be enabled after
installation by editing
/etc/inetd.conf with a text editor.
See Section 29.2.1, “Overview” for more information.
Otherwise, select to configure these services during install. An additional confirmation will display:
Select to continue.
Selecting allows services to be enabled
by deleting the # at the beginning
of the lines representing those services.
Once the edits are complete, press Esc to display a menu which will exit the editor and save the changes.
Selecting will enable sshd(8), the daemon for OpenSSH. This allows secure remote access to the machine. For more information about OpenSSH, see Section 15.10, “OpenSSH”.
Selecting the default and pressing Enter will still allow users who have accounts with passwords to use FTP to access the machine.
Anyone can access the machine if anonymous FTP connections are allowed. The security implications should be considered before enabling this option. For more information about security, see Chapter 15, Security.
To allow anonymous FTP, use the arrow keys to select and press Enter. An additional confirmation will display:
This message indicates that the FTP service will also
have to be enabled in /etc/inetd.conf
to allow anonymous FTP connections. Select and
press
Enter to continue. The following screen
will display:
Use Tab to select the information fields and fill in appropriate information:
The user ID to assign to the anonymous FTP user. All files uploaded will be owned by this ID.
Which group to place the anonymous FTP user into.
String describing this user in
/etc/passwd.
Where files available for anonymous FTP will be kept.
Where files uploaded by anonymous FTP users will go.
The FTP root directory will be put in /var
by default. If there is not enough room there for the
anticipated FTP needs, use /usr instead
by setting the FTP root directory to
/usr/ftp.
Once satisfied with the values, press Enter to continue.
If is selected, press Enter and the cu(1) editor will automatically start.
Use the instructions to change the message. Note the file name location at the bottom of the editor screen.
Press Esc and a pop-up menu will default to . Press Enter to exit and continue. Press Enter again to save any changes.
The Network File System (NFS) allows sharing of files across a network. A machine can be configured as a server, a client, or both. Refer to Section 29.3, “Network File System (NFS)” for more information.
If there is no need for a NFS server, select and press Enter.
If is chosen, a message will
pop-up indicating that /etc/exports
must be
created.
Press Enter to continue. A text editor will
start, allowing /etc/exports to be
edited.
Use the instructions to add the exported filesystems. Note the file name location at the bottom of the editor screen.
Press Esc and a pop-up menu will default to . Press Enter to exit and continue.
There are several options available to customize the system console.
To view and configure the options, select and press Enter.
A commonly used option is the screen saver. Use the arrow keys to select and then press Enter.
Select the desired screen saver using the arrow keys and then press Enter. The System Console Configuration menu will redisplay.
The default time interval is 300 seconds. To change the time interval, select again. At the Screen Saver Options menu, select using the arrow keys and press Enter. A pop-up menu will appear:
The value can be changed, then select and press Enter to return to the System Console Configuration menu.
Select and press Enter to continue with the post-installation configuration.
Setting the time zone allows the system to automatically correct for any regional time changes and perform other time zone related functions properly.
The example shown is for a machine located in the Eastern time zone of the United States. The selections will vary according to the geographic location.
Select and press Enter to set the time zone.
Select or according to how the machine's clock is configured, then press Enter.
The appropriate region is selected using the arrow keys and then pressing Enter.
Select the appropriate country using the arrow keys and press Enter.
The appropriate time zone is selected using the arrow keys and pressing Enter.
Confirm that the abbreviation for the time zone is correct. If it looks okay, press Enter to continue with the post-installation configuration.
This option allows cut and paste in the console and user programs using a 3-button mouse. If using a 2-button mouse, refer to moused(8) for details on emulating the 3-button style. This example depicts a non-USB mouse configuration:
Select for a PS/2, serial, or bus mouse, or for a USB mouse, then press Enter.
Use the arrow keys to select and press Enter.
The mouse used in this example is a PS/2 type, so the default is appropriate. To change the mouse protocol, use the arrow keys to select another option. Ensure that is highlighted and press Enter to exit this menu.
Use the arrow keys to select and press Enter.
This system had a PS/2 mouse, so the default is appropriate. To change the port, use the arrow keys and then press Enter.
Last, use the arrow keys to select , and press Enter to enable and test the mouse daemon.
Move the mouse around the screen to verify that the cursor responds properly. If it does, select and press Enter. If not, the mouse has not been configured correctly. Select and try using different configuration options.
Select with the arrow keys and press Enter to continue with the post-installation configuration.
Packages are pre-compiled binaries and are a convenient way to install software.
Installation of one package is shown for purposes of illustration. Additional packages can also be added at this time if desired. After installation, sysinstall(8) can be used to add additional packages.
Select and press Enter to be presented with the Package Selection screens:
Only packages on the current installation media are available for installation at any given time.
All packages available will be displayed if is selected. Otherwise, select a particular category. Highlight the selection with the arrow keys and press Enter.
A menu will display showing all the packages available for the selection made:
The bash shell is shown as selected. Select as many packages as desired by highlighting the package and pressing Space. A short description of each package will appear in the lower left corner of the screen.
Press Tab to toggle between the last selected package, , and .
Once finished marking the packages for installation, press Tab once to toggle to and press Enter to return to the Package Selection menu.
The left and right arrow keys will also toggle between and . This method can also be used to select and press Enter to return to the Package Selection menu.
Use the Tab and arrow keys to select and press Enter to see the installation confirmation message:
Select and press Enter to start the package installation. Installation messages will appear until all of the installations have completed. Make note if there are any error messages.
The final configuration continues after packages are installed. If no packages are selected, select to return to the final configuration.
Add at least one user during the installation so
that the system can be used without logging in as
root. The root partition is generally small
and running applications as root can quickly
fill it. A bigger danger is noted below:
Select and press Enter to continue with adding a user.
Select with the arrow keys and press Enter.
The following descriptions will appear in the lower part of the screen as the items are selected with Tab to assist with entering the required information:
The login name of the new user (mandatory).
The numerical ID for this user (leave blank for automatic choice).
The login group name for this user (leave blank for automatic choice).
The password for this user (enter this field with care!).
The user's full name (comment).
The groups this user belongs to.
The user's home directory (leave blank for default).
The user's login shell (leave blank for
default of /bin/sh).
In this example, the login shell was changed from
/bin/sh to
/usr/local/bin/bash to use the
bash shell that was previously installed as
a package. Do not use a shell that does not exist or the user
will
not be able to login. The most common shell used in FreeBSD
is the C shell,
/bin/tcsh.
The user was also added to the wheel group
to be able to become a superuser with root
privileges.
Once satisfied, press and the User and Group Management menu will redisplay:
Groups can also be added at this time. Otherwise, this menu may be accessed using sysinstall(8) at a later time.
When finished adding users, select with the arrow keys and press Enter to continue the installation.
Press Enter to set the root
password.
The password will need to be typed in twice correctly. Do not forget this password. Notice that the typed password is not echoed, nor are asterisks displayed.
The installation will continue after the password is successfully entered.
A message will ask if configuration is complete:
Select with the arrow keys and press Enter to return to the Main Installation Menu.
Select with the arrow keys and press Enter. The installer will prompt to confirm exiting the installation:
Select . If booting from the CDROM drive, the following message will remind you to remove the disk:
The CDROM drive is locked until the machine starts to reboot, then the disk can quickly be removed from the drive. Press to reboot.
The system will reboot so watch for any error messages that may appear, see Section 3.10.15, “FreeBSD Bootup” for more details.
Configuring network services can be a daunting task for users that lack previous knowledge in this area. Since networking and the Internet are critical to all modern operating systems, it is useful to have some understanding of FreeBSD's extensive networking capabilities.
Network services are programs that accept input from
anywhere on the network. Since
there have been cases where bugs in network services have been
exploited by attackers, it is important to
only enable needed network services. If
in doubt, do not enable a network service until
it is needed. Services can be enabled
with sysinstall(8) or by
editing
/etc/rc.conf.
Selecting the option will display a menu similar to the one below:
The first option, , is covered in Section 3.10.1, “Network Device Configuration”.
Selecting the option adds support for amd(8). This is usually used in conjunction with NFS for automatically mounting remote filesystems.
Next is the option. When selected, a menu will pop up where specific AMD flags can be entered. The menu already contains a set of default options:
-a sets the default mount
location which is specified here as
/.amd_mnt. -l
specifies the default log;
however, when syslogd(8) is used, all log
activity will be sent to the system log daemon.
/host is used
to mount an exported file system from a remote
host, while /net
is used to mount an exported filesystem from an
IP address. The default
options for AMD exports are defined in
/etc/amd.map.
The option permits anonymous FTP connections. Select this option to make this machine an anonymous FTP server. Be aware of the security risks involved with this option. Another menu will be displayed to explain the security risks and configuration in depth.
The menu will configure the machine to be a gateway. This menu can also be used to unset the option if it was accidentally selected during installation.
The option can be used to configure or completely disable inetd(8).
The option is used to configure the system's default Mail Transfer Agent (MTA). Selecting this option will bring up the following menu:
This menu offers a choice as to which MTA to install and set as the default. An MTA is a mail server which delivers email to users on the system or the Internet.
Select to install Sendmail as the default MTA. Select to set Sendmail as the default MTA, but disable its ability to receive incoming email from the Internet. The other options, and , provide alternatives to Sendmail.
The next menu after the MTA menu is . This menu is used to configure the system to communicate with a NFS server which in turn is used to make filesystems available to other machines on the network over the NFS protocol. See Section 29.3, “Network File System (NFS)” for more information about client and server configuration.
Below that option is the option, for setting the system up as an NFS server. This adds the required information to start up the Remote Procedure Call RPC services. RPC is used to coordinate connections between hosts and programs.
Next in line is the option, which deals with time synchronization. When selected, a menu like the one below shows up:
From this menu, select the server which is geographically closest. This will make the time synchronization more accurate as a farther server may have more connection latency.
The next option is the PCNFSD selection.
This option will install the
net/pcnfsd package from
the Ports Collection. This is a useful utility which provides
NFS authentication services for systems which
are unable to provide their own, such as Microsoft's
MS-DOS® operating system.
Now, scroll down a bit to see the other options:
RPC.
communication
between NFS servers and clients is managed
by rpcbind(8) which is
required for NFS servers to operate
correctly. Status monitoring is provided by
rpc.statd(8) and the reported status is usually held
in /var/db/statd.status. The
next option is for rpc.lockd(8)
which provides file locking
services. This is usually used with
rpc.statd(8) to monitor which hosts are
requesting locks and how frequently they request them.
While these last two options are useful for debugging, they
are not required for NFS servers and clients
to operate correctly.
The next menu,
, configures the routing
daemon.
routed(8), manages network routing tables,
discovers multicast routers, and supplies a copy of the routing
tables to any physically connected host on the network upon
request. This is mainly used for machines which act as a
gateway for the local network. If selected, a menu will
request the default location of the utility.
To accept the default location,
press Enter. Yet
another menu will ask for the
flags to pass to routed(8). The
default of -q should appear
on the screen.
The next menu, , starts rwhod(8) during system initialization. This utility broadcasts system messages across the network periodically, or collects them when in “consumer” mode. More information can be found in ruptime(1) and rwho(1).
The next to last option in the list is for sshd(8), the secure shell server for OpenSSH. It is highly recommended over the standard telnetd(8) and ftpd(8) servers as it is used to create a secure, encrypted connection from one host to another.
The final option is which are defined in RFC 1323 and RFC 1644. While on many hosts this can speed up connections, it can also cause some connections to be dropped. It is not recommended for servers, but may be beneficial for stand alone machines.
Once the network services are configured, scroll up to the very top item which is and continue on to the next configuration item or simply exit sysinstall(8) by selecting twice then .
If everything went well, messages will scroll along the screen and a login prompt will appear. To view these messages, press Scroll-Lock then use PgUp and PgDn. Press Scroll-Lock again to return to the prompt.
All of the messages may not display due to buffer limitations, but they can be read after logging using dmesg(8).
Login using the username and password which were set
during installation. Avoid logging in as
root except when necessary.
Typical boot messages (version information omitted):
Generating the RSA and DSA keys may take some time on slower machines. This happens only on the initial boot-up of a new installation. Subsequent boots will be faster.
If Xorg has been configured
and a default desktop
chosen, it can be started by typing startx at
the command line.
It is important to properly shutdown the operating
system. Do not just turn off the power. First, become the
superuser using
su(1) and entering the
root password. This will work only if the user
is a member of wheel.
Otherwise, login as root. To shutdown
the system, type
shutdown -h now.
It is safe to turn off the power after the shutdown command has been issued and the message “Please press any key to reboot” appears. If any key is pressed instead of turning off the power switch, the system will reboot.
The Ctrl+Alt+Del key combination can also be used to reboot the system; however, this is not recommended.
This section covers basic installation troubleshooting of common problems. There are also a few questions and answers for people wishing to dual-boot FreeBSD with Windows®.
Due to various limitations of the PC architecture, it is impossible for device probing to be 100% reliable. However, there are a few things to try if it fails.
Check the Hardware Notes document for the version of FreeBSD to make sure the hardware is supported.
If the hardware is supported but still experiences
lock-ups or other problems, build a custom kernel
to add in support for devices which are not present in the
GENERIC kernel. The default kernel
assumes that most hardware devices are in their
factory default configuration in terms of IRQs, I/O addresses,
and
DMA channels. If the hardware has been reconfigured,
create a custom kernel configuration file and recompile to
tell
FreeBSD where to find things.
It is also possible that a probe for a device not present will cause a later probe for another device that is present to fail. In that case, the probes for the conflicting driver(s) should be disabled.
Some installation problems can be avoided or alleviated by updating the firmware on various hardware components, most notably the motherboard BIOS. Most motherboard and computer manufacturers have a website where upgrade information may be located.
Most manufacturers strongly advise against upgrading the motherboard BIOS unless there is a good reason for doing so, such as a critical update. The upgrade process can go wrong, causing permanent damage to the BIOS chip.
At this time, FreeBSD does not support file systems compressed with the Double Space™ application. Therefore the file system will need to be uncompressed before FreeBSD can access the data. This can be done by running the Compression Agent located in the > > menu.
FreeBSD can support MS-DOS® file systems (sometimes called
FAT file systems). The mount_msdosfs(8) command grafts such file
systems onto the existing directory hierarchy, allowing the file
system's contents to be accessed. The mount_msdosfs(8) program
is not usually
invoked directly; instead, it is called by the system through a line
in /etc/fstab or by using
mount(8)
with the appropriate parameters.
A typical line in /etc/fstab is:
/dos must
already
exist for this to work. For details about the format of
/etc/fstab, see fstab(5).
A typical call to mount(8) for a FAT filesystem looks like:
# mount -t msdosfs /dev/ad0s1 /mntIn this example, the FAT filesystem is located on the first partition of the primary hard disk. The output from dmesg(8) and mount(8) should produce enough information to give an idea of the partition layout.
FreeBSD may number FAT partitions differently than other operating systems. In particular, extended partitions are usually given higher slice numbers than primary partitions. Use fdisk(8) to help determine which slices belong to FreeBSD and which belong to other operating systems.
NTFS partitions can also be mounted in a similar manner using mount_ntfs(8).
3.11.3.1. | My system hangs while probing hardware during boot or it behaves strangely during install. |
FreeBSD makes extensive use of the system
ACPI service on the i386, amd64, and ia64 platforms to
aid in system configuration if it is detected during
boot. Unfortunately, some bugs still exist in the
ACPI driver and various system motherboards.
The use of ACPI can be disabled by setting
set hint.acpi.0.disabled="1"This is reset each time the system is booted, so it
is necessary to
add | |
3.11.3.2. | When booting from the hard disk for the first time after installing FreeBSD, the kernel loads and probes hardware, but stops with messages like: changing root device to ad1s1a panic: cannot mount root What is wrong? |
This can occur when the boot disk is not the first disk in the system. The BIOS uses a different numbering scheme to FreeBSD, and working out which numbers correspond to which is difficult to get right. If this occurs, tell FreeBSD where the root filesystem is by specifying the BIOS disk number, the disk type, and the FreeBSD disk number for that type. Consider two IDE disks,
each configured as the master on their respective IDE
bus, where FreeBSD should be booted from the second disk.
The
BIOS sees these as disk 0 and disk 1, while FreeBSD sees
them as If FreeBSD is on BIOS disk 1, of type
1:ad(2,a)kernelNote that if there is a slave on the primary bus, the above is not necessary and is effectively wrong. The second situation involves booting from a SCSI
disk when there are one or more IDE disks in the system.
In this case, the FreeBSD disk number is lower than the
BIOS disk number. For two IDE disks and a
SCSI disk, where the SCSI disk is BIOS disk 2,
type 2:da(0,a)kernelThis tells FreeBSD to boot from BIOS disk 2,
which is the first SCSI disk in the system. If there
is only IDE disk, use Once the correct value to use is determined,
put the command
in | |
3.11.3.3. | When booting from the hard disk for the first time
after installing FreeBSD, the Boot Manager prompt just
prints |
The hard disk geometry was set incorrectly in the partition editor when FreeBSD was installed. Go back into the partition editor and specify the actual geometry of the hard disk. FreeBSD must be reinstalled again from the beginning with the correct geometry. For a dedicated FreeBSD system that does not need future compatibility with another operating system, use the entire disk by selecting in the installer's partition editor. | |
3.11.3.4. | The system finds the ed(4) network card but continuously displays device timeout errors. |
The card is probably on a different IRQ from what
is specified in
Either move the jumper on the card to the
configuration setting or specify the IRQ as
Another possibility is that the card is at IRQ 9, which is shared by IRQ 2 and frequently a cause of problems, especially if a VGA card is using IRQ 2. Do not use IRQ 2 or 9 if at all possible. | |
3.11.3.5. | When sysinstall(8) is used in an Xorg terminal, the yellow font is difficult to read against the light gray background. Is there a way to provide higher contrast for this application? |
If the default
colors chosen by sysinstall(8)
make text illegible while using |
This section describes how to install FreeBSD in exceptional cases.
This type of installation is called a “headless install” because the machine to be installed does not have either an attached monitor or a VGA output. This type of installation is possible using a serial console, another machine which acts as the main display and keyboard. To do this, follow the steps to create an installation USB stick, explained in Section 3.3.7, “Prepare the Boot Media”, or download the correct installation ISO image as described in Section 3.13.1, “Creating an Installation ISO”.
To modify the installation media to boot into a serial console, follow these steps. If using a CD/DVD media, skip the first step):
Enabling the Installation USB Stick to Boot into a Serial Console
By default, booting into the USB stick boots into the installer. To instead boot into a serial console, mount the USB disk onto a FreeBSD system using mount(8):
# mount /dev/da0a /mntAdapt the device node and the mount point to the situation.
Once the USB stick is mounted, set
it to boot into a serial console.
Add this line to /boot/loader.conf
on the USB stick:
# echo 'console="comconsole"' >> /mnt/boot/loader.confNow that the USB is stick configured correctly, unmount the disk using umount(8):
# umount /mntNow, unplug the USB stick and jump directly to the third step of this procedure.
Enabling the Installation CD/DVD to Boot into a Serial Console
By default, when booting into the installation CD/DVD, FreeBSD boots into its normal install mode. To instead boot into a serial console, extract, modify, and regenerate the ISO image before burning it to the CD/DVD media.
From the FreeBSD system with the saved installation ISO image, use tar(1) to extract all the files:
# mkdir /path/to/headless-iso
# tar -C /path/to/headless-iso -pxvf FreeBSD-9.1-RELEASE-i386-disc1.isoNext, set the installation media to boot into a
serial console. Add this line to the
/boot/loader.conf of the extracted
ISO image:
# echo 'console="comconsole"' >> /path/to/headless-iso/boot/loader.confThen, create a new ISO image from the modified
tree. This example uses mkisofs(8) from the
sysutils/cdrtools
package or port:
# mkisofs -v -b boot/cdboot -no-emul-boot -r -J -V "Headless_install" \
-o Headless-FreeBSD-8.4-RELEASE-i386-disc1.iso/path/to/headless-isoNow that the ISO image is configured correctly, burn it to a CD/DVD media using a burning application.
Connecting the Null-modem Cable
Connect a null-modem cable to the serial ports of the two machines. A normal serial cable will not work. A null-modem cable is required.
Booting Up for the Install
It is now time to go ahead and start the install. Plug in the USB stick or insert the CD/DVD media in the headless install machine and power it on.
Connecting to the Headless Machine
Next, connect to that machine with cu(1):
# cu -l /dev/cuau0The headless machine can now be controlled using cu(1). It will load the kernel and then dispaly a selection of which type of terminal to use. Select the FreeBSD color console and proceed with the installation.
Some situations may require a customized FreeBSD installation media and/or source. This might be physical media or a source that sysinstall(8) can use to retrieve the installation files. Some example situations include:
A local network with many machines has a private FTP server hosting the FreeBSD installation files which the machines should use for installation.
FreeBSD does not recognize the CD/DVD drive but Windows® does. In this case, copy the FreeBSD installation files to a Windows® partition on the same computer, and then install FreeBSD using those files.
The computer to install does not have a CD/DVD drive or a network card, but can be connected using a null-printer cable to a computer that does.
A tape will be be used to install FreeBSD.
As part of each release, the FreeBSD Project provides ISO images for each supported architecture. These images can be written (“burned”) to CD or DVD media using a burning application, and then used to install FreeBSD. If a CD/DVD writer is available, this is the easiest way to install FreeBSD.
Download the Correct ISO Images
The ISO images for each release can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES- or the closest mirror.
or the closest mirror. Substitute
arch/versionarch and
version as appropriate.
An image directory normally contains the following images:
| Filename | Contents |
|---|---|
FreeBSD- | This CD image starts the installation process by booting from a CD-ROM drive but it does not contain the support for installing FreeBSD from the CD itself. Perform a network based install, such as from an FTP server, after booting from this CD. |
FreeBSD- | This DVD image contains everything necessary to install the base FreeBSD operating system, a collection of pre-built packages, and the documentation. It also supports booting into a “livefs” based rescue mode. |
FreeBSD- | This image can be written to an USB memory stick in order to install machines capable of booting from USB drives. It also supports booting into a “livefs” based rescue mode. The only included package is the documentation package. |
FreeBSD- | This CD image contains the base FreeBSD operating system and the documentation package but no other packages. |
FreeBSD- | A CD image with as many third-party packages
as would fit on the disc. This image is not
available for FreeBSD 9.X. |
FreeBSD- | Another CD image with as many third-party
packages as would fit on the disc. This image is
not available for FreeBSD 9.X. |
FreeBSD- | This CD image contains support for booting into a “livefs” based rescue mode but does not support doing an install from the CD itself. |
When performing a CD installation, download either
the bootonly ISO image
or disc1. Do not download
both, since disc1
contains everything that the bootonly
ISO image contains.
Use the bootonly ISO to perform a
network install over the Internet. Additional software
can be installed as needed using
the Ports Collection as described in
Chapter 5, Installing Applications: Packages and Ports.
Use dvd1 to
install FreeBSD
and a selection of third-party packages
from the disc.
Burn the Media
Next, write the downloaded image(s) to disc. If using another FreeBSD system, refer to Section 19.5.3, “burncd” and Section 19.5.4, “cdrecord” for instructions.
If using another platform, use any burning utility that exists for that platform. The images are in the standard ISO format which most CD writing applications support.
To build a customized release of FreeBSD, refer to the Release Engineering Article.
FreeBSD discs are laid out in the same way as the FTP site. This makes it easy to create a local FTP site that can be used by other machines on a network to install FreeBSD.
On the FreeBSD computer that will host the FTP site, ensure that the CD/DVD is in the drive and mounted:
# mount /cdromCreate an account for anonymous FTP. Use vipw(8) to insert this line:
Ensure that the FTP service is enabled in
/etc/inetd.conf.
Anyone with network connectivity to the machine can now
chose a media type of FTP and type in
ftp://
after picking “Other” in the FTP sites menu during
the install.your machine
If the boot media for the FTP clients is not precisely the same version as that provided by the local FTP site, sysinstall(8) will not complete the installation. To override this, go into the menu and change the distribution name to .
This approach is acceptable for a machine on the local network which is protected by a firewall. Offering anonymous FTP services to other machines over the Internet exposes the computer to increased security risks. It is strongly recommended to follow good security practices when providing services over the Internet.
To prepare for an installation from a Windows®
partition,
copy the files from the distribution into a directory
in the root directory of the
partition, such as c:\freebsd. Since the
directory structure must be
reproduced, it is recommended to use
robocopy when copying from a CD/DVD.
For example, to prepare for a minimal installation of
FreeBSD:
C:\> md c:\freebsd
C:\> robocopy e:\bin c:\freebsd\bin\ /s
C:\> robocopy e:\manpages c:\freebsd\manpages\ /sThis example assumes that C:
has enough
free space and E: is where the
CD/DVD
is mounted.
Alternatively, download the distribution from ftp.FreeBSD.org. Each distribution is in its own directory; for example, the base distribution can be found in the 8.4/base/ directory.
Copy the distributions to install from a Windows®
partition to c:\freebsd. Both the
base and kernel
distributions are needed for
the most minimal installation.
There are three types of network installations available: Ethernet, PPP, and PLIP.
For the fastest possible network installation, use an Ethernet adapter. FreeBSD supports most common Ethernet cards. A list of supported cards is provided in the Hardware Notes for each release of FreeBSD. If using a supported PCMCIA Ethernet card, be sure that it is plugged in before the system is powered on as FreeBSD does not support hot insertion of PCMCIA cards during installation.
Make note of the system's IP address, subnet mask, hostname, default gateway address, and DNS server addresses if these values are statically assigned. If installing by FTP through a HTTP proxy, make note of the proxy's address. If you do not know these values, ask the system administrator or ISP before trying this type of installation.
If using a dialup modem, have the service provider's PPP information handy as it is needed early in the installation process.
If PAP or CHAP are used to connect to the
ISP without using a script,
type dial at the FreeBSD
ppp prompt. Otherwise,
know how to dial the ISP using the
“AT commands”
specific to the modem, as the PPP dialer provides only a
simple terminal emulator. Refer to Section 27.2, “Using User PPP” and ../../../../doc/en_US.ISO8859-1/books/faq/ppp.html
for further information.
Logging can be directed to the screen using
set log local ....
If a hard-wired connection to another FreeBSD machine is available, the installation can occur over a null-modem parallel port cable. The data rate over the parallel port is higher than what is typically possible over a serial line.
To perform an NFS installation, copy the needed FreeBSD distribution files to an NFS server and then point the installer's NFS media selection to it.
If the server supports only a “privileged
port”,
set the option NFS Secure in the
menu so that the installation
can
proceed.
If using a poor quality Ethernet card which suffers
from slow transfer rates, toggle the
NFS Slow flag to on.
In order for an NFS installation to
work, the server must
support subdir mounts. For example, if the
FreeBSD 9.1 distribution lives on:
ziggy:/usr/archive/stuff/FreeBSD,
ziggy will have to allow the direct mounting
of /usr/archive/stuff/FreeBSD,
not just
/usr or
/usr/archive/stuff.
In FreeBSD, this
is controlled by using -alldirs in
/etc/exports. Other
NFS
servers may have different conventions. If the server is
displaying
permission denied messages,
it is likely that this is not enabled
properly.
This chapter covers the basic commands and functionality of the FreeBSD operating system. Much of this material is relevant for any UNIX®-like operating system. New FreeBSD users are encouraged to read through this chapter carefully.
After reading this chapter, you will know:
How to use the “virtual consoles” of FreeBSD.
How UNIX® file permissions and FreeBSD file flags work.
The default FreeBSD file system layout.
The FreeBSD disk organization.
How to mount and unmount file systems.
What processes, daemons, and signals are.
What a shell is, and how to change the default login environment.
How to use basic text editors.
What devices and device nodes are.
How to read manual pages for more information.
FreeBSD can be used in various ways. One of them is typing commands to a text terminal. A lot of the flexibility and power of a UNIX® operating system is readily available when using FreeBSD this way. This section describes what “terminals” and “consoles” are, and how to use them in FreeBSD.
Unless FreeBSD has been configured to automatically start a graphical environment during startup, the system will boot into a command line login prompt, as seen in this example:
The first line contains some information about the system.
The amd64 indicates that the system in this
example is running a 64-bit version of FreeBSD. The hostname is
pc3.example.org, and
ttyv0 indicates that this is the
system console.
The second line is the login prompt. The next section describes how to log into FreeBSD at this prompt.
FreeBSD is a multiuser, multiprocessing system. This is the formal description that is usually given to a system that can be used by many different people, who simultaneously run a lot of programs on a single machine.
Every multiuser system needs some way to distinguish one “user” from the rest. In FreeBSD (and all the UNIX®-like operating systems), this is accomplished by requiring that every user must “log into” the system before being able to run programs. Every user has a unique name (the “username”) and a personal, secret key (the “password”). FreeBSD will ask for these two before allowing a user to run any programs.
When a FreeBSD system boots, startup scripts are automatically executed in order to prepare the system and to start any services which have been configured to start at system boot. Once the system finishes running its startup scripts, it will present a login prompt:
Type the username that was configured during system installation, as described in Section 2.9.6, “Add Users”, and press Enter. Then enter the password associated with the username and press Enter. The password is not echoed for security reasons.
Once the correct password is input, the message of the
day (MOTD) will be displayed followed
by a command prompt (a #,
$, or % character). You
are now logged into the FreeBSD console and ready to try the
available commands.
FreeBSD can be configured to provide many virtual consoles for inputting commands. Each virtual console has its own login prompt and output channel, and FreeBSD takes care of properly redirecting keyboard input and monitor output as switching occurs between virtual consoles.
Special key combinations have been reserved by FreeBSD for switching consoles.[1]. Use Alt+F1, Alt+F2, through Alt+F8 to switch to a different virtual console in FreeBSD.
When switching from one console to the next, FreeBSD takes care of saving and restoring the screen output. The result is an “illusion” of having multiple “virtual” screens and keyboards that can be used to type commands for FreeBSD to run. The programs that are launched in one virtual console do not stop running when that console is not visible because the user has switched to a different virtual console.
By default, FreeBSD is configured to start eight virtual
consoles. The configuration can be customized to start
more or fewer virtual consoles. To change the number of and
the settings of the virtual consoles, edit
/etc/ttys.
Each uncommented line in /etc/ttys
(lines that do not start with a #
character) contains settings for a single terminal or virtual
console. The default version configures nine virtual
consoles, and enables eight of them. They are the lines that
start with ttyv:
For a detailed description of every column in this file and the available options for the virtual consoles, refer to ttys(5).
A detailed description of “single user mode”
can be found in Section 13.6.2, “Single-User Mode”. There is
only one console when FreeBSD is in single user mode as no other
virtual consoles are available in this mode. The settings
for single user mode are found in this section of
/etc/ttys:
As the comments above the console
line indicate, editing secure to
insecure will prompt for the
root password when booting into single
user mode. The default setting enters single user mode
without prompting for a password.
Be careful when changing this setting to
insecure. If the
root password is forgotten, booting
into single user mode is still possible, but may be
difficult for someone who is not comfortable with the FreeBSD
booting process.
The FreeBSD console default video mode may be adjusted to
1024x768, 1280x1024, or any other size supported by the
graphics chip and monitor. To use a different video mode
load the VESA module:
# kldload vesaTo determine which video modes are supported by the hardware, use vidcontrol(1). To get a list of supported video modes issue the following:
# vidcontrol -i modeThe output of this command lists the video modes that are
supported by the hardware. To select a new video mode,
specify the mode using vidcontrol(1) as the
root user:
# vidcontrol MODE_279If the new video mode is acceptable, it can be permanently
set on boot by adding it to
/etc/rc.conf:
FreeBSD, being a direct descendant of BSD UNIX®, is based on several key UNIX® concepts. The first and most pronounced is that FreeBSD is a multi-user operating system that can handle several users working simultaneously on completely unrelated tasks. The system is responsible for properly sharing and managing requests for hardware devices, peripherals, memory, and CPU time fairly to each user.
Much more information about user accounts is in the chapter about accounts. It is important to understand that each person (user) who uses the computer should be given their own username and password. The system keeps track of the people using the computer based on this username. Since it is often the case that several people are working on the same project UNIX® also provides groups. Several users can be placed in the same group.
Because the system is capable of supporting multiple users, everything the system manages has a set of permissions governing who can read, write, and execute the resource. These permissions are stored as three octets broken into three pieces, one for the owner of the file, one for the group that the file belongs to, and one for everyone else. This numerical representation works like this:
This section will discuss the traditional UNIX® permissions. For finer grained file system access control, see the File System Access Control Lists section.
| Value | Permission | Directory Listing |
|---|---|---|
| 0 | No read, no write, no execute | --- |
| 1 | No read, no write, execute | --x |
| 2 | No read, write, no execute | -w- |
| 3 | No read, write, execute | -wx |
| 4 | Read, no write, no execute | r-- |
| 5 | Read, no write, execute | r-x |
| 6 | Read, write, no execute | rw- |
| 7 | Read, write, execute | rwx |
Use the -l argument to ls(1) to view a
long directory listing that includes a column of information
about a file's permissions for the owner, group, and everyone
else. For example, a ls -l in an arbitrary
directory may show:
% 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.txtThe first (leftmost) character in the first column indicates
whether this file is a regular file, a directory, a special
character device, a socket, or any other special pseudo-file
device. In this example, the - indicates a
regular file. The next three characters, rw-
in this example, give the permissions for the owner of the file.
The next three characters, r--, give the
permissions for the group that the file belongs to. The final
three characters, r--, give the permissions
for the rest of the world. A dash means that the permission is
turned off. In this example, the permissions are set so the
owner can read and write to the file, the group can read the
file, and the rest of the world can only read the file.
According to the table above, the permissions for this file
would be 644, where each digit represents the
three parts of the file's permission.
How does the system control permissions on devices? FreeBSD
treats most hardware devices as a file that programs can open,
read, and write data to. These special device files are
stored in /dev/.
Directories are also treated as files. They have read, write, and execute permissions. The executable bit for a directory has a slightly different meaning than that of files. When a directory is marked executable, it means it is possible to change into that directory using cd(1). This also means that it is possible to access the files within that directory, subject to the permissions on the files themselves.
In order to perform a directory listing, the read permission must be set on the directory. In order to delete a file that one knows the name of, it is necessary to have write and execute permissions to the directory containing the file.
There are more permission bits, but they are primarily used in special circumstances such as setuid binaries and sticky directories. For more information on file permissions and how to set them, refer to chmod(1).
Symbolic permissions use characters instead of octal values to assign permissions to files or directories. Symbolic permissions use the syntax of (who) (action) (permissions), where the following values are available:
| Option | Letter | Represents |
|---|---|---|
| (who) | u | User |
| (who) | g | Group owner |
| (who) | o | Other |
| (who) | a | All (“world”) |
| (action) | + | Adding permissions |
| (action) | - | Removing permissions |
| (action) | = | Explicitly set permissions |
| (permissions) | r | Read |
| (permissions) | w | Write |
| (permissions) | x | Execute |
| (permissions) | t | Sticky bit |
| (permissions) | s | Set UID or GID |
These values are used with chmod(1), but with
letters instead of numbers. For example, the following
command would block other users from accessing
FILE:
% chmod go= FILEA comma separated list can be provided when more than one
set of changes to a file must be made. For example, the
following command removes the group and
“world” write permission on
FILE, and adds the execute
permissions for everyone:
% chmod go-w,a+x FILEIn addition to file permissions, FreeBSD supports the use of
“file flags”. These flags add an additional
level of security and control over files, but not directories.
With file flags, even root can be
prevented from removing or altering files.
File flags are modified using chflags(1). For
example, to enable the system undeletable flag on the file
file1, issue the following
command:
# chflags sunlink file1To disable the system undeletable flag, put a
“no” in front of the
sunlink:
# chflags nosunlink file1To view the flags of a file, use -lo with
ls(1):
# ls -lo file1Several file flags may only be added or removed by the
root user. In other cases, the file
owner may set its file flags. Refer to chflags(1) and
chflags(2) for more information.
Other than the permissions already discussed, there are
three other specific settings that all administrators should
know about. They are the setuid,
setgid, and sticky
permissions.
These settings are important for some UNIX® operations as they provide functionality not normally granted to normal users. To understand them, the difference between the real user ID and effective user ID must be noted.
The real user ID is the UID who owns
or starts the process. The effective UID
is the user ID the process runs as. As an example,
passwd(1) runs with the real user ID when a user changes
their password. However, in order to update the password
database, the command runs as the effective ID of the
root user. This allows users to change
their passwords without seeing a
Permission Denied error.
The setuid permission may be set by prefixing a permission set with the number four (4) as shown in the following example:
# chmod 4755 suidexample.shThe permissions on
now look like the following:suidexample.sh
Note that a s is now part of the
permission set designated for the file owner, replacing the
executable bit. This allows utilities which need elevated
permissions, such as passwd(1).
The nosuid mount(8) option will
cause such binaries to silently fail without alerting
the user. That option is not completely reliable as a
nosuid wrapper may be able to circumvent
it.
To view this in real time, open two terminals. On
one, type passwd as a normal user.
While it waits for a new password, check the process
table and look at the user information for
passwd(1):
In terminal A:
In terminal B:
# ps aux | grep passwdAlthough passwd(1) is run as a normal user, it is
using the effective UID of
root.
The setgid permission performs the
same function as the setuid permission;
except that it alters the group settings. When an application
or utility executes with this setting, it will be granted the
permissions based on the group that owns the file, not the
user who started the process.
To set the setgid permission on a
file, provide chmod(1) with a leading two (2):
# chmod 2755 sgidexample.shIn the following listing, notice that the
s is now in the field designated for the
group permission settings:
In these examples, even though the shell script in question is an executable file, it will not run with a different EUID or effective user ID. This is because shell scripts may not access the setuid(2) system calls.
The setuid and
setgid permission bits may lower system
security, by allowing for elevated permissions. The third
special permission, the sticky bit, can
strengthen the security of a system.
When the sticky bit is set on a
directory, it allows file deletion only by the file owner.
This is useful to prevent file deletion in public directories,
such as /tmp, by users
who do not own the file. To utilize this permission, prefix
the permission set with a one (1):
# chmod 1777 /tmpThe sticky bit permission will display
as a t at the very end of the permission
set:
# ls -al / | grep tmpThe FreeBSD directory hierarchy is fundamental to obtaining an overall understanding of the system. The most important directory is root or, “/”. This directory is the first one mounted at boot time and it contains the base system necessary to prepare the operating system for multi-user operation. The root directory also contains mount points for other file systems that are mounted during the transition to multi-user operation.
A mount point is a directory where additional file systems
can be grafted onto a parent file system (usually the root file
system). This is further described in Section 4.5, “Disk Organization”. Standard mount points
include /usr/,
/var/,
/tmp/,
/mnt/, and
/cdrom/. These
directories are usually referenced to entries in
/etc/fstab. This file is a table of
various file systems and mount points and is read by the system.
Most of the file systems in /etc/fstab are
mounted automatically at boot time from the script rc(8)
unless their entry includes noauto. Details
can be found in Section 4.6.1, “The fstab File”.
A complete description of the file system hierarchy is available in hier(7). The following table provides a brief overview of the most common directories.
| Directory | Description |
|---|---|
/ | Root directory of the file system. |
/bin/ | User utilities fundamental to both single-user and multi-user environments. |
/boot/ | Programs and configuration files used during operating system bootstrap. |
/boot/defaults/ | Default boot configuration files. Refer to loader.conf(5) for details. |
/dev/ | Device nodes. Refer to intro(4) for details. |
/etc/ | System configuration files and scripts. |
/etc/defaults/ | Default system configuration files. Refer to rc(8) for details. |
/etc/mail/ | Configuration files for mail transport agents such as sendmail(8). |
/etc/namedb/ | named(8) configuration files. |
/etc/periodic/ | Scripts that run daily, weekly, and monthly, via cron(8). Refer to periodic(8) for details. |
/etc/ppp/ | ppp(8) configuration files. |
/mnt/ | Empty directory commonly used by system administrators as a temporary mount point. |
/proc/ | Process file system. Refer to procfs(5), mount_procfs(8) for details. |
/rescue/ | Statically linked programs for emergency recovery as described in rescue(8). |
/root/ | Home directory for the root
account. |
/sbin/ | System programs and administration utilities fundamental to both single-user and multi-user environments. |
/tmp/ | Temporary files which are usually
not preserved across a system
reboot. A memory-based file system is often mounted
at /tmp. This
can be automated using the tmpmfs-related variables of
rc.conf(5) or with an entry in
/etc/fstab; refer to
mdmfs(8) for details. |
/usr/ | The majority of user utilities and applications. |
/usr/bin/ | Common utilities, programming tools, and applications. |
/usr/include/ | Standard C include files. |
/usr/lib/ | Archive libraries. |
/usr/libdata/ | Miscellaneous utility data files. |
/usr/libexec/ | System daemons and system utilities executed by other programs. |
/usr/local/ | Local executables and libraries. Also used as
the default destination for the FreeBSD ports framework.
Within /usr/local, the
general layout sketched out by hier(7) for
/usr should be
used. Exceptions are the man directory, which is
directly under /usr/local
rather than under /usr/local/share,
and the ports documentation is in share/doc/. |
/usr/obj/ | Architecture-specific target tree produced by
building the /usr/src
tree. |
/usr/ports/ | The FreeBSD Ports Collection (optional). |
/usr/sbin/ | System daemons and system utilities executed by users. |
/usr/share/ | Architecture-independent files. |
/usr/src/ | BSD and/or local source files. |
/var/ | Multi-purpose log, temporary, transient, and
spool files. A memory-based file system is sometimes
mounted at
/var. This can
be automated using the varmfs-related variables in
rc.conf(5) or with an entry in
/etc/fstab; refer to
mdmfs(8) for details. |
/var/log/ | Miscellaneous system log files. |
/var/mail/ | User mailbox files. |
/var/spool/ | Miscellaneous printer and mail system spooling directories. |
/var/tmp/ | Temporary files which are usually preserved
across a system reboot, unless
/var is a
memory-based file system. |
/var/yp/ | NIS maps. |
The smallest unit of organization that FreeBSD uses to find
files is the filename. Filenames are case-sensitive, which
means that readme.txt and
README.TXT are two separate files. FreeBSD
does not use the extension of a file to determine whether the
file is a program, document, or some other form of data.
Files are stored in directories. A directory may contain no files, or it may contain many hundreds of files. A directory can also contain other directories, allowing a hierarchy of directories within one another in order to organize data.
Files and directories are referenced by giving the file or
directory name, followed by a forward slash,
/, followed by any other directory names that
are necessary. For example, if the directory
foo contains a directory
bar which contains the
file readme.txt, the full name, or
path, to the file is
foo/bar/readme.txt. Note that this is
different from Windows® which uses \ to
separate file and directory names. FreeBSD does not use drive
letters, or other drive names in the path. For example, one
would not type c:/foo/bar/readme.txt on
FreeBSD.
Directories and files are stored in a file system. Each
file system contains exactly one directory at the very top
level, called the root directory for that
file system. This root directory can contain other directories.
One file system is designated the
root file system or /.
Every other file system is mounted under
the root file system. No matter how many disks are on the FreeBSD
system, every directory appears to be part of the same
disk.
Consider three file systems, called A,
B, and C. Each file
system has one root directory, which contains two other
directories, called A1, A2
(and likewise B1, B2 and
C1, C2).
Call A the root file system. If
ls(1) is used to view the contents of this directory,
it will show two subdirectories, A1 and
A2. The directory tree looks like
this:

A file system must be mounted on to a directory in another
file system. When mounting file system B
on to the directory A1, the root directory
of B replaces A1, and
the directories in B appear
accordingly:

Any files that are in the B1 or
B2 directories can be reached with the path
/A1/B1 or
/A1/B2 as necessary. Any
files that were in /A1
have been temporarily hidden. They will reappear if
B is unmounted from
A.
If B had been mounted on
A2 then the diagram would look like
this:

and the paths would be
/A2/B1 and
/A2/B2
respectively.
File systems can be mounted on top of one another.
Continuing the last example, the C file
system could be mounted on top of the B1
directory in the B file system, leading to
this arrangement:

Or C could be mounted directly on to the
A file system, under the
A1 directory:

It is entirely possible to have one large root file system, and not need to create any others. There are some drawbacks to this approach, and one advantage.
Different file systems can have different
mount options. For example, the root
file system can be mounted read-only, making it impossible
for users to inadvertently delete or edit a critical file.
Separating user-writable file systems, such as
/home, from other
file systems allows them to be mounted
nosuid. This option prevents the
suid/guid bits
on executables stored on the file system from taking effect,
possibly improving security.
FreeBSD automatically optimizes the layout of files on a file system, depending on how the file system is being used. So a file system that contains many small files that are written frequently will have a different optimization to one that contains fewer, larger files. By having one big file system this optimization breaks down.
FreeBSD's file systems are robust if power is lost. However, a power loss at a critical point could still damage the structure of the file system. By splitting data over multiple file systems it is more likely that the system will still come up, making it easier to restore from backup as necessary.
File systems are a fixed size. If you create a file system when you install FreeBSD and give it a specific size, you may later discover that you need to make the partition bigger. This is not easily accomplished without backing up, recreating the file system with the new size, and then restoring the backed up data.
FreeBSD features the growfs(8) command, which makes it possible to increase the size of file system on the fly, removing this limitation.
File systems are contained in partitions. This does not
have the same meaning as the common usage of the term partition
(for example, MS-DOS® partition), because of FreeBSD's UNIX®
heritage. Each partition is identified by a letter from
a through to h. Each
partition can contain only one file system, which means that
file systems are often described by either their typical mount
point in the file system hierarchy, or the letter of the
partition they are contained in.
FreeBSD also uses disk space for swap space to provide virtual memory. This allows your computer to behave as though it has much more memory than it actually does. When FreeBSD runs out of memory, it moves some of the data that is not currently being used to the swap space, and moves it back in (moving something else out) when it needs it.
Some partitions have certain conventions associated with them.
| Partition | Convention |
|---|---|
a | Normally contains the root file system. |
b | Normally contains swap space. |
c | Normally the same size as the enclosing slice.
This allows utilities that need to work on the entire
slice, such as a bad block scanner, to work on the
c partition. A file system would not
normally be created on this partition. |
d | Partition d used to have a
special meaning associated with it, although that is now
gone and d may work as any normal
partition. |
Disks in FreeBSD are divided into slices, referred to in Windows® as partitions, which are numbered from 1 to 4. These are then divided into partitions, which contain file systems, and are labeled using letters.
Slice numbers follow the device name, prefixed with an
s, starting at 1. So
“da0s1” is the first slice on
the first SCSI drive. There can only be four physical slices on
a disk, but there can be logical slices inside physical slices
of the appropriate type. These extended slices are numbered
starting at 5, so “ad0s5” is
the first extended slice on the first IDE disk. These devices
are used by file systems that expect to occupy a slice.
Slices, “dangerously dedicated” physical
drives, and other drives contain
partitions, which are represented as
letters from a to h. This
letter is appended to the device name, so
“da0a” is the
a partition on the first
da drive, which is
“dangerously dedicated”.
“ad1s3e” is the fifth
partition in the third slice of the second IDE disk
drive.
Finally, each disk on the system is identified. A disk name starts with a code that indicates the type of disk, and then a number, indicating which disk it is. Unlike slices, disk numbering starts at 0. Common codes are listed in Table 4.1, “Disk Device Codes”.
When referring to a partition, include the disk name,
s, the slice number, and then the partition
letter. Examples are shown in
Example 4.1, “Sample Disk, Slice, and Partition Names”.
Example 4.2, “Conceptual Model of a Disk” shows a conceptual model of a disk layout.
When installing FreeBSD, configure the disk slices, create partitions within the slice to be used for FreeBSD, create a file system or swap space in each partition, and decide where each file system will be mounted.
| Code | Meaning |
|---|---|
ad | ATAPI (IDE) disk |
da | SCSI direct access disk |
acd | ATAPI (IDE) CDROM |
cd | SCSI CDROM |
fd | Floppy disk |
| Name | Meaning |
|---|---|
ad0s1a | The first partition (a) on the
first slice (s1) on the first IDE
disk (ad0). |
da1s2e | The fifth partition (e) on the
second slice (s2) on the second
SCSI disk (da1). |
This diagram shows FreeBSD's view of the first IDE disk
attached to the system. Assume that the disk is 4 GB in
size, and contains two 2 GB slices (MS-DOS® partitions).
The first slice contains a MS-DOS® disk,
C:, and the second slice contains a
FreeBSD installation. This example FreeBSD installation has three
data partitions, and a swap partition.
The three partitions will each hold a file system.
Partition a will be used for the root file
system, e for the
/var/ directory
hierarchy, and f for the
/usr/ directory
hierarchy.

The file system is best visualized as a tree, rooted, as it
were, at /.
/dev,
/usr, and the other
directories in the root directory are branches, which may have
their own branches, such as
/usr/local, and so
on.
There are various reasons to house some of these
directories on separate file systems.
/var contains the
directories log/,
spool/, and various types
of temporary files, and as such, may get filled up. Filling up
the root file system is not a good idea, so splitting
/var from
/ is often
favorable.
Another common reason to contain certain directory trees on other file systems is if they are to be housed on separate physical disks, or are separate virtual disks, such as Network File System mounts, described in Section 29.3, “Network File System (NFS)”, or CDROM drives.
During the boot process (Chapter 13, The FreeBSD Booting Process), file
systems listed in /etc/fstab are
automatically mounted except for the entries containing
noauto. This file contains entries in the
following format:
device /mount-point fstype options dumpfreq passnodeviceAn existing device name as explained in Section 19.2, “Device Names”.
mount-pointAn existing directory on which to mount the file system.
fstypeThe file system type to pass to mount(8). The
default FreeBSD file system is
ufs.
optionsEither rw for read-write file
systems, or ro for read-only file
systems, followed by any other options that may be
needed. A common option is noauto for
file systems not normally mounted during the boot
sequence. Other options are listed in
mount(8).
dumpfreqUsed by dump(8) to determine which file systems require dumping. If the field is missing, a value of zero is assumed.
passnoDetermines the order in which file systems should be
checked. File systems that should be skipped should
have their passno set to zero. The
root file system needs to be checked before everything
else and should have its passno set
to one. The other file systems should be set to
values greater than one. If more than one file system
has the same passno, fsck(8)
will attempt to check file systems in parallel if
possible.
Refer to fstab(5) for more information on the format
of /etc/fstab and its options.
File systems are mounted using mount(8). The most basic syntax is as follows:
# mount device mountpointThis command provides many options which are described in mount(8), The most commonly used options include:
-aMount all the file systems listed in
/etc/fstab, except those marked as
“noauto”, excluded by the
-t flag, or those that are already
mounted.
-dDo everything except for the actual mount system
call. This option is useful in conjunction with the
-v flag to determine what mount(8)
is actually trying to do.
-fForce the mount of an unclean file system (dangerous), or the revocation of write access when downgrading a file system's mount status from read-write to read-only.
-rMount the file system read-only. This is identical
to using -o ro.
-t
fstypeMount the specified file system type or mount only
file systems of the given type, if -a
is included. “ufs” is the default file
system type.
-uUpdate mount options on the file system.
-vBe verbose.
-wMount the file system read-write.
The following options can be passed to -o
as a comma-separated list:
Do not interpret setuid or setgid flags on the file system. This is also a useful security option.
To unmount a file system use umount(8). This command
takes one parameter which can be a mountpoint, device name,
-a or -A.
All forms take -f to force unmounting,
and -v for verbosity. Be warned that
-f is not generally a good idea as it might
crash the computer or damage data on the file system.
To unmount all mounted file systems, or just the file
system types listed after -t, use
-a or -A. Note that
-A does not attempt to unmount the root file
system.
FreeBSD is a multi-tasking operating system. Each program running at any one time is called a process. Every running command starts at least one new process and there are a number of system processes that are run by FreeBSD.
Each process is uniquely identified by a number called a process ID (PID). Similar to files, each process has one owner and group, and the owner and group permissions are used to determine which files and devices the process can open. Most processes also have a parent process that started them. For example, the shell is a process, and any command started in the shell is a process which has the shell as its parent process. The exception is a special process called init(8) which is always the first process to start at boot time and which always has a PID of 1.
To see the processes on the system, use ps(1) and top(1). To display a static list of the currently running processes, their PIDs, how much memory they are using, and the command they were started with, use ps(1). To display all the running processes and update the display every few seconds in order to interactively see what the computer is doing, use top(1).
By default, ps(1) only shows the commands that are running and owned by the user. For example:
% ps
PID TT STAT TIME COMMAND
298 p0 Ss 0:01.10 tcsh
7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
72210 p0 R+ 0:00.00 ps
390 p1 Is 0:01.14 tcsh
7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y
6688 p3 IWs 0:00.00 tcsh
10735 p4 IWs 0:00.00 tcsh
20256 p5 IWs 0:00.00 tcsh
262 v0 IWs 0:00.00 -tcsh (tcsh)
270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc
285 v0 S 0:38.45 /usr/X11R6/bin/sawfishThe output from ps(1) is organized into a number of
columns. The PID column displays the process
ID. PIDs are assigned starting at 1, go up
to 99999, then wrap around back to the beginning. However, a
PID is not reassigned if it is already in
use. The TT column shows the tty the program
is running on and STAT shows the program's
state. TIME is the amount of time the
program has been running on the CPU. This is usually not the
elapsed time since the program was started, as most programs
spend a lot of time waiting for things to happen before they
need to spend time on the CPU. Finally,
COMMAND is the command that was used to start
the program.
ps(1) supports a number of different options to change
the information that is displayed. One of the most useful sets
is auxww. a displays
information about all the running processes of all users.
u displays the username of the process' owner,
as well as memory usage. x displays
information about daemon processes, and ww
causes ps(1) to display the full command line for each
process, rather than truncating it once it gets too long to fit
on the screen.
The output from top(1) is similar. A sample session looks like this:
% top
last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10
47 processes: 1 running, 46 sleeping
CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle
Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
Swap: 256M Total, 38M Used, 217M Free, 15% Inuse
PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top
7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14
281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA
296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm
175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd
7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt
...The output is split into two sections. The header (the first five lines) shows the PID of the last process to run, the system load averages (which are a measure of how busy the system is), the system uptime (time since the last reboot) and the current time. The other figures in the header relate to how many processes are running (47 in this case), how much memory and swap space has been used, and how much time the system is spending in different CPU states.
Below the header is a series of columns containing similar information to the output from ps(1), such as the PID, username, amount of CPU time, and the command that started the process. By default, top(1) also displays the amount of memory space taken by the process. This is split into two columns: one for total size and one for resident size. Total size is how much memory the application has needed and the resident size is how much it is actually using at the moment. In this example, mutt has required almost 8 MB of RAM, but is currently only using 5 MB.
top(1) automatically updates the display every two
seconds. A different interval can be specified with
-s.
When using an editor, it is easy to control the editor and load files because the editor provides facilities to do so, and because the editor is attached to a terminal. Some programs are not designed to be run with continuous user input and disconnect from the terminal at the first opportunity. For example, a web server responds to web requests, rather than user input. Mail servers are another example of this type of application.
These programs are known as daemons. The term daemon comes from Greek mythology and represents an entity that is neither good or evil, and which invisibly performs useful tasks. This is why the BSD mascot is the cheerful-looking daemon with sneakers and a pitchfork.
There is a convention to name programs that normally run as
daemons with a trailing “d”.
BIND is the Berkeley Internet Name
Domain, but the actual program that executes is named(8).
The Apache web server program is
httpd and the line printer spooling daemon
is lpd(8). This is only a naming convention. For example,
the main mail daemon for the Sendmail
application is sendmail(8), and not
maild.
One way to communicate with a daemon, or any running
process, is to send a signal using
kill(1). There are a number of different signals; some
have a specific meaning while others are described in the
application's documentation. A user can only send a signal to a
process they own and sending a signal to someone else's process
will result in a permission denied error. The exception is the
root user, who can send signals to anyone's
processes.
FreeBSD can also send a signal to a process. If an application
is badly written and tries to access memory that it is not
supposed to, FreeBSD will send the process the
Segmentation Violation signal
(SIGSEGV). If an application has used the
alarm(3) system call to be alerted after a period of time
has elapsed, it will be sent the Alarm signal
(SIGALRM).
Two signals can be used to stop a process:
SIGTERM and SIGKILL.
SIGTERM is the polite way to kill a process
as the process can read the signal, close any log files it may
have open, and attempt to finish what it is doing before
shutting down. In some cases, a process may ignore
SIGTERM if it is in the middle of some task
that can not be interrupted.
SIGKILL can not be ignored by a process.
This is the “I do not care what you are doing, stop right
now” signal. Sending a SIGKILL to a
process will usually stop that process there and then.[2].
Other commonly used signals are SIGHUP,
SIGUSR1, and SIGUSR2.
These are general purpose signals and different applications
will respond differently.
For example, after changing a web server's configuration
file, the web server needs to be told to re-read its
configuration. Restarting httpd would result
in a brief outage period on the web server. Instead, send the
daemon the SIGHUP signal. Be aware that
different daemons will have different behavior, so refer to the
documentation for the daemon to determine if
SIGHUP will achieve the desired
results.
This example shows how to send a signal to inetd(8).
The inetd(8) configuration file is
/etc/inetd.conf, and inetd(8) will
re-read this configuration file when it is sent a
SIGHUP.
Find the PID of the process to send the signal to using pgrep(1). In this example, the PID for inetd(8) is 198:
% pgrep -l inetd
198 inetd -wWUse kill(1) to send the signal. Because
inetd(8) is owned by root, use
su(1) to become root first.
% su
Password:
# /bin/kill -s HUP 198Like most UNIX® commands, kill(1) will not print
any output if it is successful. If a signal is sent to a
process not owned by that user, the message
kill: PID: Operation
not permitted will be displayed. Mistyping
the PID will either send the signal to
the wrong process, which could have negative results, or
will send the signal to a PID that is
not currently in use, resulting in the error
kill: PID: No such
process.
/bin/kill?: Many shells provide kill as a built
in command, meaning that the shell will send the signal
directly, rather than running
/bin/kill. Be aware that different
shells have a different syntax for specifying the name of
the signal to send. Rather than try to learn all of them,
it can be simpler to use /bin/kill
directly....
When sending other signals, substitute
TERM or KILL in the
command line as necessary.
FreeBSD provides a command line interface called a shell. A
shell receives commands from the input channel and executes
them. Many shells provide built in functions to help with
everyday tasks such as file management, file globbing, command
line editing, command macros, and environment variables. FreeBSD
comes with several shells, including the Bourne shell
(sh(1)) and the extended C shell (tcsh(1)). Other
shells are available from the FreeBSD Ports Collection, such as
zsh and bash.
The shell that is used is really a matter of taste. A C
programmer might feel more comfortable with a C-like shell such
as tcsh(1). A Linux® user might prefer
bash. Each shell has unique properties that
may or may not work with a user's preferred working environment,
which is why there is a choice of which shell to use.
One common shell feature is filename completion. After a
user types the first few letters of a command or filename and
presses Tab, the shell will automatically
complete the rest of the command or filename. Consider two
files called foobar and
foo.bar. To delete
foo.bar, type rm
fo[Tab].[Tab].
The shell should print out
rm foo[BEEP].bar.
The [BEEP] is the console bell, which the shell used to
indicate it was unable to complete the filename because there
is more than one match. Both foobar and
foo.bar start with fo.
By typing ., then pressing
Tab again, the shell would be able to fill in
the rest of the filename.
Another feature of the shell is the use of environment variables. Environment variables are a variable/key pair stored in the shell's environment. This environment can be read by any program invoked by the shell, and thus contains a lot of program configuration. Here is a list of common environment variables and their meanings:
| Variable | Description |
|---|---|
USER | Current logged in user's name. |
PATH | Colon-separated list of directories to search for binaries. |
DISPLAY | Network name of the Xorg display to connect to, if available. |
SHELL | The current shell. |
TERM | The name of the user's type of terminal. Used to determine the capabilities of the terminal. |
TERMCAP | Database entry of the terminal escape codes to perform various terminal functions. |
OSTYPE | Type of operating system. |
MACHTYPE | The system's CPU architecture. |
EDITOR | The user's preferred text editor. |
PAGER | The user's preferred text pager. |
MANPATH | Colon-separated list of directories to search for manual pages. |
How to set an environment variable differs between shells.
In tcsh(1) and csh(1), use
setenv to set environment variables. In
sh(1) and bash, use
export to set the current environment
variables. This example sets the default EDITOR
to /usr/local/bin/emacs for the
tcsh(1) shell:
% setenv EDITOR /usr/local/bin/emacsThe equivalent command for bash
would be:
% export EDITOR="/usr/local/bin/emacs"To expand an environment variable in order to see its
current setting, type a $ character in front
of its name on the command line. For example,
echo $TERM displays the current
$TERM setting.
Shells treat special characters, known as meta-characters,
as special representations of data. The most common
meta-character is *, which represents any
number of characters in a filename. Meta-characters can be
used to perform filename globbing. For example,
echo * is equivalent to ls(1) because
the shell takes all the files that match *
and echo(1) lists them on the command line.
To prevent the shell from interpreting a special character,
escape it from the shell by starting it with a backslash
(\). For example,
echo $TERM prints the terminal setting
whereas echo \$TERM literally prints the
string $TERM.
The easiest way to permanently change the default shell is
to use chsh. Running this command will
open the editor that is configured in the
EDITOR environment variable, which by default
is set to vi(1). Change the “Shell:” line
to the full path of the new shell.
Alternately, use chsh -s which will set
the specified shell without opening an editor. For example,
to change the shell to bash:
% chsh -s /usr/local/bin/bashThe new shell must be present in
/etc/shells. If the shell was
installed from the FreeBSD Ports Collection as described in
Chapter 5, Installing Applications: Packages and Ports, it should be automatically added
to this file. If it is missing, add it using this
command, replacing the path with the path of the
shell:
# echo /usr/local/bin/bash >> /etc/shellsThen rerun chsh(1).
Most FreeBSD configuration is done by editing text files. Because of this, it is a good idea to become familiar with a text editor. FreeBSD comes with a few as part of the base system, and many more are available in the Ports Collection.
A simple editor to learn is ee(1), which stands for
easy editor. To start this editor, type ee
where
filenamefilename is the name of the file to
be edited. Once inside the editor, all of the commands for
manipulating the editor's functions are listed at the top of the
display. The caret ^ represents
Ctrl, so ^e expands to
Ctrl+e.
To leave ee(1), press Esc, then choose the
“leave editor” option from the main menu. The
editor will prompt to save any changes if the file has been
modified.
FreeBSD also comes with more powerful text editors, such as
vi(1), as part of the base system. Other editors, like
editors/emacs and
editors/vim, are part of the
FreeBSD Ports Collection. These editors offer more functionality
at the expense of being a more complicated to learn. Learning a
more powerful editor such as vim or
Emacs can save more time in the long
run.
Many applications which modify files or require typed input
will automatically open a text editor. To alter the default
editor used, set the EDITOR environment
variable as described in Section 4.9, “Shells”.
A device is a term used mostly for hardware-related
activities in a system, including disks, printers, graphics
cards, and keyboards. When FreeBSD boots, the majority of the boot
messages refer to devices being detected. A copy of the boot
messages are saved to
/var/run/dmesg.boot.
Each device has a device name and number. For example,
acd0 is the first IDE CD-ROM drive,
while kbd0 represents the
keyboard.
Most devices in a FreeBSD must be accessed through special
files called device nodes, which are located in
/dev.
The most comprehensive documentation on FreeBSD is in the
form of manual pages. Nearly every program on the system
comes with a short reference manual explaining the basic
operation and available arguments. These manuals can be
viewed using man:
% man commandwhere command is the name of
the command to learn about. For example, to learn more about
ls(1), type:
% man lsThe online manual is divided into numbered sections:
User commands.
System calls and error numbers.
Functions in the C libraries.
Device drivers.
File formats.
Games and other diversions.
Miscellaneous information.
System maintenance and operation commands.
Kernel developers.
In some cases, the same topic may appear in more than one
section of the online manual. For example, there is a
chmod(1) user command and a
chmod() system call. To tell man(1)
which section to display, specify the section number:
% man 1 chmodThis will display the manual page for the user command chmod(1). References to a particular section of the online manual are traditionally placed in parenthesis in written documentation, so chmod(1) refers to the user command and chmod(2) refers to the system call.
If the command name is unknown, use man
-k to search for keywords in the command
descriptions:
% man -k mailThis command displays a list of commands that have the keyword “mail” in their descriptions. This is equivalent to using apropos(1).
To determine what the commands in
/usr/bin do,
type:
% cd /usr/bin
% man -f *or
% cd /usr/bin
% whatis *FreeBSD includes many applications and utilities produced
by the Free Software Foundation (FSF). In addition to manual
pages, these programs may include hypertext documents called
info files. These can be viewed using
info(1) or, if
editors/emacs is
installed, the info mode of
emacs.
To use info(1), type:
% infoFor a brief introduction, type h. For
a quick command reference, type ?.
[1] Refer to syscons(4), atkbd(4), vidcontrol(1) and kbdcontrol(1) for a more technical description of the FreeBSD console and its keyboard drivers.
[2] There are a few tasks that can not be interrupted. For example, if the process is trying to read from a file that is on another computer on the network, and the other computer is unavailable, the process is said to be “uninterruptible”. Eventually the process will time out, typically after two minutes. As soon as this time out occurs the process will be killed.
FreeBSD is bundled with a rich collection of system tools as part of the base system. In addition, FreeBSD provides two complementary technologies for installing third-party software: the FreeBSD Ports Collection, for installing from source, and packages, for installing from pre-built binaries. Either method may be used to install software from local media or from the network.
After reading this chapter, you will know:
The difference between binary packages and ports.
How to find third-party software that has been ported to FreeBSD.
How to manage binary packages using the traditional package system.
How to manage binary packages using pkgng.
How to build third-party software from source using the Ports Collection.
How to find the files installed with the application for post-installation configuration.
What to do if a software installation fails.
The typical steps for installing third-party software on a UNIX® system include:
Download the software, which might be distributed in source code format, or as a binary.
Unpack the software from its distribution format (typically a tarball compressed with compress(1), gzip(1), or bzip2(1)).
Locate the documentation in
INSTALL, README
or some file in a doc/ subdirectory and
read up on how to install the software.
If the software was distributed in source format,
compile it. This may involve editing a
Makefile, or running a
configure script, and other work.
Test and install the software.
If you are installing a software package that was not deliberately ported to FreeBSD you may even have to go in and edit the code to make it work properly.
FreeBSD provides two technologies which perform these steps for you. At the time of writing, over 24,000 third-party applications are available.
A FreeBSD package contains pre-compiled copies of all the commands for an application, as well as any configuration files and documentation. A package can be manipulated with FreeBSD package management commands, such as pkg_add(1), pkg_delete(1), and pkg_info(1).
A FreeBSD port is a collection of files designed to automate the process of compiling an application from source code. The files that comprise a port contain all the necessary information to automatically download, extract, patch, compile, and install the application.
The ports system can also be used to generate packages which can be manipulated with the FreeBSD package management commands.
Both packages and ports understand dependencies. If pkg_add(1) or the Ports Collection is used to install an application and a dependent library is not already installed, the library will automatically be installed first.
While the two technologies are quite similar, packages and ports each have their own strengths. Select the technology that meets your requirements for installing a particular application.
A compressed package tarball is typically smaller than the compressed tarball containing the source code for the application.
Packages do not require compilation time. For large applications, such as Mozilla, KDE, or GNOME this can be important, on a slow system.
Packages do not require any understanding of the process involved in compiling software on FreeBSD.
Packages are normally compiled with conservative options because they have to run on the maximum number of systems. By compiling from the port, one can change the compilation options.
Some applications have compile-time options relating to which features are installed. For example, Apache can be configured with a wide variety of different built-in options.
In some cases, multiple packages will exist for the same
application to specify certain settings. For example,
Ghostscript is available as a
ghostscript package and a
ghostscript-nox11 package, depending on
whether or not Xorg is installed.
Creating multiple packages rapidly becomes impossible if an
application has more than one or two different compile-time
options.
The licensing conditions of some software forbid binary distribution. These must be distributed as source code which must be compiled by the end-user.
Some people do not trust binary distributions or prefer to read through source code in order to look for potential problems.
If you have local patches, you will need the source in order to apply them.
To keep track of updated ports, subscribe to the FreeBSD ports mailing list and the FreeBSD ports bugs mailing list.
Before installing any application, check http://vuxml.freebsd.org/ for security issues
related to the application or install ports-mgmt/portaudit. Once
installed, type portaudit -F -a to check
all installed applications for known vulnerabilities.
The remainder of this chapter explains how to use packages and ports to install and manage third-party software on FreeBSD.
FreeBSD's list of available applications is growing all the time. There are a number of ways to find software to install:
The FreeBSD web site maintains an up-to-date searchable list of all the available applications, at http://www.FreeBSD.org/ports/. The ports can be searched by application name or by software category.
Dan Langille maintains FreshPorts which provides a comprehensive search utility and also tracks changes to the applications in the Ports Collection. Registered users can create a customized watch list in order to receive an automated email when their watched ports are updated.
If you do not know the name of the application you want, try using a site like Freecode (http://www.freecode.com/) to find an application, then check back at the FreeBSD site to see if the application has been ported yet.
To find out which category a port is in, type
whereis ,
where filefile is the program to be
installed:
# whereis lsof
lsof: /usr/ports/sysutils/lsofAlternately, an echo(1) statement can be used:
# echo /usr/ports/*/*lsof*
/usr/ports/sysutils/lsofNote that this will return any matched files downloaded
into the /usr/ports/distfiles
directory.
Another way to find software is by using the Ports
Collection's built-in search mechanism. To use
the search feature, cd to
/usr/ports then run make
where search
name=program-nameprogram-name is the name of
the software. For example, to search for
lsof:
# cd /usr/ports
# make search name=lsof
Port: lsof-4.56.4
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))
Maint: obrien@FreeBSD.org
Index: sysutils
B-deps:
R-deps: make search searches through a file
of index information. If a message indicates the
INDEX is required, run
make fetchindex to download the current
index file. With the INDEX present,
make search will be able to perform the
requested search.
The “Path:” line indicates where to find the port.
To receive less information, use the
quicksearch feature:
# cd /usr/ports
# make quicksearch name=lsof
Port: lsof-4.87.a,7
Path: /usr/ports/sysutils/lsof
Info: Lists information about open files (similar to fstat(1))For more in-depth searching, use
make or
search
key=stringmake , where
quicksearch
key=stringstring is some text to search
for. The text can be in comments, descriptions, or dependencies
in order to find ports which relate to a particular subject
when the name of the program is unknown.
When using (search and
quicksearch), the search string
is case-insensitive. Searching for “LSOF” will
yield the same results as searching for
“lsof”.
At the present time, FreeBSD is transitioning toward a new
method of package management. Users of the latest releases
may wish to investigate the benefits of using
PKGng to manage third
party software on FreeBSD. For those not yet migrated to the
pkgng tool, the tools discussed
here may be used for managing the package database. For
simplicity, the sysinstall utility is
also available post-install for package management.
All package installation files are stored in the
package database directory,
/var/db/pkg.
Use pkg_add(1) to install a FreeBSD binary package from a local file or from a server on the network.
# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230- This machine is in Vienna, VA, USA, hosted by Verio.
230- Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375 00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgzIf you do not have a source of local packages, such as a
FreeBSD CD-ROM set, include -r with
pkg_add(1). This automatically determines the correct
object format and release, and then fetches and installs the
package from an FTP site without any further user
intervention.
# pkg_add -r lsofTo specify an alternative FreeBSD FTP mirror, specify the
mirror in the PACKAGESITE environment variable.
pkg_add(1) uses fetch(3) to download files, which
uses various environment variables, including
FTP_PASSIVE_MODE, FTP_PROXY, and
FTP_PASSWORD. You may need to set one or more
of these if you are behind a firewall, or need to use an
FTP/HTTP proxy. See fetch(3) for the complete list of variables.
Note that in the example above lsof is used
instead of lsof-4.56.4. When the remote
fetching feature is used, the version number of the package
must be removed.
pkg_add(1) will automatically download the latest
version of the application if you are using FreeBSD-CURRENT or
FreeBSD-STABLE. If you run a -RELEASE version, it instead
installs the version of the package that was built with that
release. It is possible to change this behavior by
overriding PACKAGESITE. For example, on a
FreeBSD 8.1-RELEASE system, by default pkg_add(1)
will try to fetch packages from
ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/.
To force pkg_add(1) to download FreeBSD 8-STABLE
packages, set PACKAGESITE to
ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/.
Package files are distributed in .tgz
and .tbz formats. Packages are
available from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/,
or the /packages directory of the FreeBSD
DVD distribution. The layout of the packages directory is similar to
that of the /usr/ports tree. Each
category has its own directory, and every package can be found
within the All directory.
pkg_info(1) can be used to list and describe installed packages:
# pkg_info
colordiff-1.0.13 A tool to colorize diff output
docbook-1.2 Meta-port for the different versions of the DocBook DTD
...pkg_version(1) summarizes the versions of all installed packages and compares the package version to the current version found in the ports tree.
# pkg_version
colordiff =
docbook =
...The symbols in the second column indicate the relative age of the installed version and the version available in the local ports tree.
| Symbol | Meaning |
|---|---|
| = | The version of the installed package matches the one in the local ports tree. |
| < | The version of the installed package is older than the one in the local ports tree. |
| > | The version of the installed package is newer than the one in the local ports tree, meaning that the local ports tree is probably out of date. |
| ? | The installed package cannot be found in the ports index. This can happen when an installed port is removed from the Ports Collection or is renamed. |
| * | There are multiple versions of the package. |
| ! | The installed package exists in the index but for
some reason, pkg_version was unable
to compare the version number of the installed package
with the corresponding entry in the index. |
To remove a previously installed software package, use pkg_delete(1):
# pkg_delete xchat-1.7.1Note that pkg_delete(1) requires the full package
name and number; the above command would not work if
xchat was given instead of
xchat-1.7.1. Use
pkg_version(1) to find the version of the
installed package, or use a wildcard:
# pkg_delete xchat\*in this case, all packages whose names start with
xchat will be deleted.
pkgng is an improved replacement for the traditional FreeBSD package management tools, offering many features that make dealing with binary packages faster and easier. The first release of pkgng was in August, 2012.
pkgng is not a replacement for
port management tools like ports-mgmt/portmaster or ports-mgmt/portupgrade. While
ports-mgmt/portmaster and
ports-mgmt/portupgrade can
install third-party software from both binary packages and the
Ports Collection, pkgng installs
only binary packages.
FreeBSD 9.1 and later includes a "bootstrap" utility for pkgng. The bootstrap utility will download and install pkgng.
To bootstrap the system, run:
# /usr/sbin/pkgFor earlier FreeBSD versions, pkgng must be installed from the Ports Collection, or as a binary package.
To install the pkgng port, run:
# cd /usr/ports/ports-mgmt/pkg
# make
# make install cleanTo install the binary package, run:
# pkg_add -r pkgExisting FreeBSD installations require conversion of the pkg_install package database to the new format. To convert the package database, run:
# pkg2ngThis step is not required for new installations that do not have third-party software installed.
This step is not reversible. Once the package database has been converted to the pkgng format, the pkg_install tools should not be used.
The package database conversion may emit errors as the
contents are converted to the new version. Generally, these
errors can be safely ignored, however a list of third-party
software that was not successfully converted will be listed
after pkg2ng has finished. These must be
fixed by hand.
To ensure the FreeBSD Ports Collection registers new
software with pkgng, and not
pkg_install, FreeBSD versions earlier
than 10.X require this line in
/etc/make.conf:
The pkgng package management
system uses a package repository for most operations. The
default package repository location is defined in
/usr/local/etc/pkg.conf or the
PACKAGESITE environment variable, which
overrides the configuration file.
Additional pkgng configuration options are described in pkg.conf(5).
Usage information for pkgng is
available in the pkg(8) manual page, or by running
pkg without additional arguments.
Each pkgng command argument is
documented in a command-specific manual page. To read the
manual page for pkg install, for example,
run either:
# pkg help install# man pkg-installInformation about the packages installed on a system can
be viewed by running pkg info. Similar
to pkg_info(1), the package version and
description for all packages will be listed.
Information about a specific package is available by running:
# pkg info packagenameFor example, to see which version of pkgng is installed on the system, run:
# pkg info pkg
pkg-1.0.2 New generation package managerIn general, most FreeBSD users will install binary packages by running:
# pkg install packagenamepkg install uses repository data, as
mentioned in Section 5.5.2, “Configuring the pkgng
Environment”. Conversely,
pkg-add(8) does not use repository data, nor does it use the
defined PACKAGESITE, so dependencies may not
be properly tracked, and missing dependencies will not be
fetched from a remote source. This section covers usage of
pkg install. For information on usage of
pkg add, see pkg-add(8).
Additional binary packages can be installed with
pkg install. For example, to install
curl:
# pkg install curl
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:
Installing ca_root_nss: 3.13.5
Installing curl: 7.24.0
The installation will require 4 MB more space
1 MB to be downloaded
Proceed with installing packages [y/N]: y
ca_root_nss-3.13.5.txz 100% 255KB 255.1KB/s 255.1KB/s 00:00
curl-7.24.0.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00
Checking integrity... done
Installing ca_root_nss-3.13.5... done
Installing curl-7.24.0... doneThe new package and any additional packages that were installed as dependencies can be seen in the installed packages list:
# pkg info
ca_root_nss-3.13.5 The root certificate bundle from the Mozilla Project
curl-7.24.0 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers
pkg-1.0.2 New generation package managerPackages that are no longer needed can be removed with
pkg delete. For example, if it turns out
that curl is not needed after
all:
# pkg delete curl
The following packages will be deleted:
curl-7.24.0_1
The deletion will free 3 MB
Proceed with deleting packages [y/N]: y
Deleting curl-7.24.0_1... donePackages that are outdated can be found with
pkg version. If a local ports tree
does not exist, pkg-version(8) will use the remote
repository catalogue, otherwise the local ports tree will
be used to identify package versions.
Packages can be upgraded to newer versions with pkgng. Suppose a new version of curl has been released. The local package can be upgraded to the new version:
# pkg upgrade
Updating repository catalogue
repo.txz 100% 297KB 296.5KB/s 296.5KB/s 00:00
The following packages will be upgraded:
Upgrading curl: 7.24.0 -> 7.24.0_1
1 MB to be downloaded
Proceed with upgrading packages [y/N]: y
curl-7.24.0_1.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00
Checking integrity... done
Upgrading curl from 7.24.0 to 7.24.0_1... doneRemoving a package may leave behind unnecessary
dependencies, like security/ca_root_nss in the
example above. Such packages are still installed, but
nothing depends on them any more. Unneeded packages that
were installed as dependencies can be automatically detected
and removed:
# pkg autoremove
Packages to be autoremoved:
ca_root_nss-3.13.5
The autoremoval will free 723 kB
Proceed with autoremoval of packages [y/N]: y
Deinstalling ca_root_nss-3.13.5... doneUnlike the traditional package management system, pkgng includes its own package database backup mechanism. To manually back up the package database contents, run:
# pkg backup -d pkgng.dbReplace the file name
pkgng.db to a suitable file
name.
Additionally, pkgng includes
a periodic(8) script to automatically back up the
package database daily if
daily_backup_pkgng_enable is set to
YES in periodic.conf(5).
To prevent the pkg_install
periodic script from also backing up the package database,
set daily_backup_pkgdb_enable to
NO in periodic.conf(5).
To restore the contents of a previous package database backup, run:
# pkg backup -r /path/to/pkgng.dbBy default, pkgng stores
binary packages in a cache directory as defined by
PKG_CACHEDIR in pkg.conf(5). When
upgrading packages with pkg upgrade, old
versions of the upgraded packages are not automatically
removed.
To remove the outdated binary packages, run:
# pkg cleanHistorically, software within the FreeBSD Ports
Collection can undergo major version number changes. Unlike
pkg_install,
pkgng has a built-in command to
update package origins. For example, if lang/php5 was originally at
version 5.3, but has been renamed to
lang/php53 for the
inclusion of version 5.4,
pkg_install would require the use
of additional software such as ports-mgmt/portmaster to update
the package database, reflecting from which port the
installation originated.
Unlike the ports-mgmt/portmaster and
ports-mgmt/portupgrade
ports, the order in which the new and old versions are
listed differ. For pkgng, the
syntax is:
# pkg set -o category/oldport:category/newportFor example, to change the package origin for the above example, run:
# pkg set -o lang/php5:lang/php53As another example, to update lang/ruby18 to lang/ruby19, run:
# pkg set -o lang/ruby18:lang/ruby19As a final example, to change the origin of the
libglut shared libraries from graphics/libglut to graphics/freeglut, run:
# pkg set -o graphics/libglut:graphics/freeglutWhen changing package origins, in most cases it is important to reinstall packages that are dependent on the package that has had the origin changed. To force a reinstallation of dependent packages, run:
# pkg install -Rf graphics/freeglutThis section provides basic instructions on using the Ports
Collection to install or remove software. The detailed
description of available make targets and
environment variables is available in ports(7).
As of mid 2012, the FreeBSD Ports Project has migrated revision control systems from CVS to Subversion. The preferred method for obtaining and maintaining the ports tree is Portsnap. Users requiring local customization of ports (that is, maintaining additional local patches) will probably prefer to use Subversion directly. The CVSup service was phased out as of February 28, 2013.
The Ports Collection is a set of
Makefiles, patches, and description files
stored in /usr/ports. This set of files
is used to compile and install applications on FreeBSD. The
instructions below show several methods of obtaining the Ports
Collection if it was not installed during initial FreeBSD
setup.
Portsnap is a fast and user-friendly tool for retrieving the Ports Collection, the preferred choice for most users. See Using Portsnap for a detailed description of Portsnap.
Download a compressed snapshot of the Ports Collection
into /var/db/portsnap.
# portsnap fetchWhen running Portsnap
for the first time, extract the snapshot into
/usr/ports:
# portsnap extractAfter the first use of
Portsnap has been completed as
shown above,
/usr/ports can be
updated with:
# portsnap fetch
# portsnap updateIf more control over the ports tree is needed (for example, for maintaining local changes), Subversion can be used to obtain the Ports Collection. Refer to the Subversion Primer for a detailed description of Subversion.
Subversion must be installed before it can be used to check out the ports tree. If a copy of the ports tree is already present, install Subversion like this:
# cd /usr/ports/devel/subversion
# make install cleanIf the ports tree is not available, Subversion can be installed as a package:
# pkg_add -r subversionIf pkgng is being used to manage packages, Subversion can be installed with it instead:
# pkg install subversionCheck out a copy of the ports tree. Use a specific
Subversion
mirror close to your geographic location instead
of svn0.us-east.FreeBSD.org in the
command below for better performance. Committers should
read the Subversion
Primer first to be sure the correct protocol is
chosen.
# svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/portsTo update
/usr/ports after
the initial Subversion
checkout:
# svn update /usr/portsThis method involves using sysinstall to install the Ports Collection from the installation media. Note that the old copy of Ports Collection from the date of the release will be installed. If you have Internet access, you should always use one of the methods mentioned above.
As root, run
sysinstall as shown below:
# sysinstallScroll down and select , press Enter.
Scroll down and select , press Enter.
Scroll down to , press Space.
Scroll up to , press Enter.
Select your desired installation media, such as CDROM, FTP, and so on.
Scroll up to and press Enter.
Press X to exit sysinstall.
By February 28, 2013, the ports tree will no longer be exported to CVS and therefore CVSup and csup will no longer provide updates for the ports tree.
The migration will require about 1 GB of disk space
on /usr, plus
Portsnap requires about
150 MB disk space on /var.
Disable any automated ports updates you may use, such as a cron(8) job calling CVSup or csup.
Move the existing ports tree to a temporary location:
# mv /usr/ports /usr/ports.oldFetch the new ports tree with
Portsnap and extract it to
/usr/ports:
# portsnap fetch extractMove distfiles and saved packages to the new ports tree:
# mv /usr/ports.old/distfiles /usr/ports
# mv /usr/ports.old/packages /usr/portsDelete the old ports tree:
# rm -rf /usr/ports.oldIf CVSup was used before, it can now be uninstalled:
# pkg_delete -r -v cvsup-without-gui-\*Users of pkgng can use the following command:
# pkg delete cvsup-without-guiSee Using Portsnap for a detailed description of Portsnap and how to update the ports tree with Portsnap.
A port skeleton is a set of files that tell FreeBSD system how to compile and install a program. Each port skeleton includes:
Makefile: The
Makefile contains statements that
specify how the application should be compiled and where
its components should be installed.
distinfo: This file contains
information about the files that must be downloaded to
build the port, and their checksums (using
sha256(1)), to verify that files have not been
corrupted during the download.
files/: This directory contains
any patches needed for the program to compile and install
on FreeBSD. This directory may also contain other files used
to build the port.
pkg-descr: This file provides a
more detailed description of the program.
pkg-plist: This is a list
of all the files that will be installed by the port. It
also tells the ports system what files to remove upon
deinstallation.
Some ports include other files, such as
pkg-message. The ports system uses these
files to handle special situations. If you want more details
on these files, and on ports in general, refer to the
FreeBSD
Porter's Handbook.
The port does not include the actual source code, also known as a “distfile”. Source code is distributed in whatever manner the software author desires. The two methods for installing a FreeBSD port are described below.
You must be logged in as root to
install ports.
Before compiling any port, be sure to have an
up-to-date Ports Collection and check http://vuxml.freebsd.org/ for security
issues related to your port. If ports-mgmt/portaudit is
installed, run portaudit -F before
installing a new port, to fetch the current vulnerabilities
database. A security audit and an update of the database
will be performed during the daily security system check.
For more information read the portaudit(1) and
periodic(8) manual pages.
Using the Ports Collection assumes a working Internet
connection. Otherwise, manually obtain and place a copy of
the distfile into
/usr/ports/distfiles.
To begin, change to the directory of the port to be installed:
# cd /usr/ports/sysutils/lsofTo compile, or “build”, the port, type
make at the prompt. You should see
messages similar to the ones in this example:
# make
>> lsof_4.57D.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.57
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===> Patching for lsof-4.57
===> Applying FreeBSD patches for lsof-4.57
===> Configuring for lsof-4.57
...
[configure output snipped]
...
===> Building for lsof-4.57
...
[compilation output snipped]
...
#Once the compile is complete, you are returned to the
prompt. The next step is to install the port using
make :install
# make install
===> Installing for lsof-4.57
...
[installation output snipped]
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.57
===> Registering installation for lsof-4.57
===> SECURITY NOTE:
This port has installed the following binaries which execute with
increased privileges.
#Once you are returned to the prompt, you should be able
to run the installed application. Since
lsof is a program that runs with increased
privileges, a security warning is shown. During the building
and installation of ports, take heed of any other warnings
that may appear.
It is a good idea to delete the working subdirectory, which contains all the temporary files used during compilation. Doing so saves disk space and minimizes the chance of problems later when upgrading to the newer version of the port.
# make clean
===> Cleaning for lsof-4.57
#You can save two extra steps by just running
make
instead of install cleanmake,
make
and installmake
as three separate steps.clean
Using only
make
means there will potentially be many
waiting periods between user interaction as the default
behaviour is to prompt the user for options. To avoid this
when there are many dependencies, first run installmake
to do
the configuration in one batch. Then run config-recursivemake
afterwards.install [clean]
When using config-recursive,
the list of ports to configure are gathered by the
all-depends-list make(1)
target. It is often recommended to run make
until all dependent ports options have been defined, and
ports options dialog(1) screens no longer
appear, to be certain all ports options have been
configured as intended.config-recursive
Some shells keep a cache of the commands that are
available in the directories listed in the
PATH environment variable, to speed up lookup
operations for the executable file of these commands. If
you are using tcsh, you might have to
type rehash so that a newly installed
command can be used without specifying its full path. Use
hash -r instead for the
sh shell. Refer to the documentation for
the shell for more information.
Some third-party DVD products such as the FreeBSD
Toolkit from the FreeBSD
Mall contain distfiles. They can be used with the
Ports Collection. Mount the DVD on
/cdrom. If you use a different mount
point, set CD_MOUNTPTS make variable. The
needed distfiles will be automatically used if they are
present on the disk.
The licenses of a few ports do not allow their inclusion on the DVD. This could be because a registration form needs to be filled out before downloading or redistribution is not allowed. If you wish to install a port not included on the DVD, you will need to be connected to the Internet.
The ports system uses fetch(1) to download the
files, which honors various environment variables, including
FTP_PASSIVE_MODE, FTP_PROXY, and
FTP_PASSWORD. You may need to set one or more
of these if you are behind a firewall, or need to use an
FTP/HTTP proxy. See fetch(3) for the complete
list.
For users which cannot be connected all the time, the
make option
is provided. Run this command within
fetch/usr/ports and the required files will
be downloaded. This command also works in the
lower level categories, such as
/usr/ports/net. Note that if a port
depends on libraries or other ports, this will
not fetch the distfiles of ports
from another category. Use
make
to fetch
all the dependencies of a port.fetch-recursive
You can build all the ports in a category or as a
whole by running make in the top level
directory. This is dangerous, however, as some ports cannot
co-exist. In other cases, some ports can install two
different files with the same filename.
In some rare cases, users may need to acquire the
tarballs from a site other than the default
MASTER_SITES. You can override the
MASTER_SITES option with the following
command:
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetchIn this example, MASTER_SITES is
changed to ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Some ports provide build options which can be used to
enable/disable parts of the application which are unneeded,
provide security options, or allow for other customizations.
Examples include
www/firefox,
security/gpgme, and
mail/sylpheed-claws. A
menu will be displayed at the beginning of a port
compile when compile options are available.
The WRKDIRPREFIX and
PREFIX variables can override the default
working and target directories. For example:
# make WRKDIRPREFIX=/usr/home/example/ports installwill compile the port in
/usr/home/example/ports and install
everything under /usr/local.
# make PREFIX=/usr/home/example/local installwill compile the port in /usr/ports
and install it in
/usr/home/example/local.
And
# make WRKDIRPREFIX=../ports PREFIX=../local installwill combine the two.
Alternatively, these can be set as environmental variables. Refer to the manual page for your shell for instructions on how to set an environmental variable.
Certain ports provide an ncurses-based menu containing
build options. There are several ways to revisit this menu
in order to add, remove, or change these options after a
port has been built. One method is to
cd into the directory containing the
port and type
make .
Another option is to use
configmake .
Another option is to execute
showconfigmake
which will remove all selected options and allow you to
start over. All of these options, and others, are explained
in great detail in the manual page for ports(7).rmconfig
First, list outdated ports that have a newer version available in the Ports Collection with the pkg_version(1) command:
# pkg_version -vOnce you have updated your Ports Collection, before
attempting a port upgrade, you should check
/usr/ports/UPDATING. This file
describes various issues and additional steps users may
encounter and need to perform when updating a port,
including such things as file format changes, changes in
locations of configuration files, or other such
incompatibilities with previous versions.
If UPDATING contradicts something
you read here, UPDATING takes
precedence.
The portupgrade utility is
designed to easily upgrade installed ports. It is available
from the
ports-mgmt/portupgrade
port. Install it like any other port, using
make :install
clean
# cd /usr/ports/ports-mgmt/portupgrade
# make install cleanScan the list of installed ports using
pkgdb -F and fix all the inconsistencies
it reports. It is a good idea to do this regularly, before
every upgrade.
Use portupgrade -a to upgrade all the
outdated ports installed on the system. Include
-i to be asked for confirmation of every
individual upgrade.
# portupgrade -aiTo upgrade only a specified application instead of all
available ports, use portupgrade
. Include
pkgname-R to first upgrade all the ports required
by the given application.
# portupgrade -R firefoxTo use packages instead of ports, include the
-P flag. With this option,
portupgrade searches the local
directories listed in PKG_PATH, then fetches
packages from a remote site if not found locally. If
packages can not be found locally or fetched remotely,
portupgrade will use ports. To
avoid using ports, specify -PP.
# portupgrade -PP gnome2To just fetch distfiles (or packages, if
-P is specified) without building or
installing anything, use -F. For further
information see portupgrade(1).
ports-mgmt/portmaster is another
utility for upgrading installed ports.
portmaster was designed to
use the tools found in the “base” system
without depending upon other ports. It uses the information
in /var/db/pkg/ to
determine which ports to upgrade. To install the
port:
# cd /usr/ports/ports-mgmt/portmaster
# make install cleanPortmaster groups ports into four categories:
Root ports: no dependencies and is not depended on by other ports
Trunk ports: no dependencies, but other ports depend upon it
Branch ports: have dependencies and are depended upon by other ports
Leaf ports: have dependencies but are not depended upon by other ports
To list all installed software and search for updates,
use -L:
# 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 availableAll the installed ports can be upgraded using this command:
# portmaster -aBy default, portmaster will
make a backup package before deleting the existing port.
If the installation of the new version is successful,
portmaster will delete the
backup. Using -b will instruct
portmaster not to automatically
delete the backup. Adding -i will start
portmaster in interactive mode,
prompting for confirmation before upgrading each
port.
If you encounter errors during the upgrade process, use
-f to upgrade/rebuild all ports:
# portmaster -afYou can also use portmaster to install new ports on the system, upgrading all dependencies before building and installing the new port:
# portmaster shells/bashRefer to portmaster(8) for more information.
Using the Ports Collection will use up disk space over
time. After building and installing a port, make
will clean up the
temporary cleanwork
directory. To sweep the whole Ports Collection:
# portsclean -CA lot of out-dated source distribution files will collect
in distfiles over time.
The following command will delete all the distfiles that are
no longer referenced by any ports:
# portsclean -DTo remove all distfiles not referenced by any port currently installed on the system:
# portsclean -DDThe portsclean utility is part of the
ports-mgmt/portupgrade
suite.
ports-mgmt/pkg_cutleaves automates
the task of removing installed ports that are no longer
needed.
Regardless of whether the software was installed from a binary package or port, most third-party applications require some level of configuration after installation. The following commands and locations can be used to help determine what was installed with the application.
Most applications install at least one default
configuration file in /usr/local/etc. The
configuration files should be reviewed and possibly edited
to meet the system's needs.
Applications which provide documentation will install
it into /usr/local/share/doc and many
applications also install manual pages. This documentation
should be consulted before continuing.
Some applications run services which must be added
to /etc/rc.conf
before starting the application. These applications usually
install a startup script in
/usr/local/etc/rc.d. See Starting
Services for more information.
Users of csh(1) should run
rehash to rebuild the known binary
list in the shells PATH.
If the system is running the traditional package system,
use pkg_info(1) to determine which files, man pages,
and binaries were installed with the application. If the
system is running pkgng, instead
use pkg info.
When coming across a port that does not build or install:
Find out if there is a fix pending for the port in the Problem Report database. If so, the proposed fix may work.
Ask the maintainer of the port for help. Type
make
or read the maintainerMakefile to find the
maintainer's email address. Remember to include the name
and version of the port (send the
$FreeBSD: line from the
Makefile) and the output leading up to
the error when you email the maintainer.
Some ports are not maintained by an individual but
instead by a mailing
list. Many, but not all, of these addresses look
like <freebsd-listname@FreeBSD.org>.
Please take this into account when phrasing your
questions.
In particular, ports shown as maintained by
<ports@FreeBSD.org> are
actually not maintained by anyone. Fixes and support, if
any, come from the general community who subscribe to that
mailing list. More volunteers are always needed!
If you do not get a response, use send-pr(1) to submit a bug report (see Writing FreeBSD Problem Reports).
Fix it! The Porter's Handbook includes detailed information on the “Ports” infrastructure so that you can fix the occasional broken port or even submit your own!
Use pkg_add(1) to instead install the package.
FreeBSD uses X11 to provide users with a powerful graphical user interface. X11 is a freely available version of the X Window System that is implemented in Xorg (and other software packages not discussed here). The default and official flavor of X11 in FreeBSD is Xorg, the X11 server developed by the X.Org Foundation under a license very similar to the one used by FreeBSD.
For more information on the video hardware that X11 supports, check the Xorg web site.
After reading this chapter, you will know:
The various components of the X Window System, and how they interoperate.
How to install and configure X11.
How to install and use different window managers.
How to use TrueType® fonts in X11.
How to set up your system for graphical logins (XDM).
Before reading this chapter, you should:
Know how to install additional third-party software (Chapter 5, Installing Applications: Packages and Ports).
Using X for the first time can be somewhat of a shock to someone familiar with other graphical environments, such as Microsoft® Windows® or Mac OS®.
While it is not necessary to understand all of the details of various X components and how they interact, some basic knowledge makes it possible to take advantage of X's strengths.
X is not the first window system written for UNIX®, but it is the most popular of them. X's original development team had worked on another window system prior to writing X. That system's name was “W” (for “Window”). X was just the next letter in the Roman alphabet.
X can be called “X”, “X Window System”, “X11”, and a number of other terms. You may find that using the term “X Windows” to describe X11 can be offensive to some people; for a bit more insight on this, see X(7).
X was designed from the beginning to be network-centric, and adopts a “client-server” model.
In the X model, the “X server” runs on the computer that has the keyboard, monitor, and mouse attached. The server's responsibility includes tasks such as managing the display, handling input from the keyboard and mouse, and other input or output devices (i.e., a “tablet” can be used as an input device, and a video projector may be an alternative output device). Each X application (such as XTerm or Firefox) is a “client”. A client sends messages to the server such as “Please draw a window at these coordinates”, and the server sends back messages such as “The user just clicked on the OK button”.
In a home or small office environment, the X server and the X clients commonly run on the same computer. However, it is perfectly possible to run the X server on a less powerful desktop computer, and run X applications (the clients) on, say, the powerful and expensive machine that serves the office. In this scenario the communication between the X client and server takes place over the network.
This confuses some people, because the X terminology is exactly backward to what they expect. They expect the “X server” to be the big powerful machine down the hall, and the “X client” to be the machine on their desk.
It is important to remember that the X server is the machine with the monitor and keyboard, and the X clients are the programs that display the windows.
There is nothing in the protocol that forces the client and server machines to be running the same operating system, or even to be running on the same type of computer. It is certainly possible to run an X server on Microsoft® Windows® or Apple's Mac OS®, and there are various free and commercial applications available that do exactly that.
The X design philosophy is much like the UNIX® design philosophy, “tools, not policy”. This means that X does not try to dictate how a task is to be accomplished. Instead, tools are provided to the user, and it is the user's responsibility to decide how to use those tools.
This philosophy extends to X not dictating what windows should look like on screen, how to move them around with the mouse, what keystrokes should be used to move between windows (i.e., Alt+Tab, in the case of Microsoft® Windows®), what the title bars on each window should look like, whether or not they have close buttons on them, and so on.
Instead, X delegates this responsibility to an
application called a “Window Manager”. There
are dozens of window managers
available for X. Each of these window managers provides a
different look and feel; some of them support
“virtual desktops”; some of them allow customized
keystrokes to manage the desktop; some have a
“Start” button or similar device; some are
“themeable”, allowing a complete change of
look-and-feel by applying a new theme. Window managers are
available in the x11-wm category of the
Ports Collection.
In addition, the KDE and GNOME desktop environments both have their own window managers which integrate with the desktop.
Each window manager also has a different configuration mechanism; some expect configuration file written by hand, others feature GUI tools for most of the configuration tasks; at least one (Sawfish) has a configuration file written in a dialect of the Lisp language.
Another feature the window manager is responsible for is the mouse “focus policy”. Every windowing system needs some means of choosing a window to be actively receiving keystrokes, and should visibly indicate which window is active as well.
A familiar focus policy is called “click-to-focus”. This is the model utilized by Microsoft® Windows®, in which a window becomes active upon receiving a mouse click.
X does not support any particular focus policy. Instead, the window manager controls which window has the focus at any one time. Different window managers will support different focus methods. All of them support click to focus, and the majority of them support several others.
The most popular focus policies are:
The window that is under the mouse pointer is the window that has the focus. This may not necessarily be the window that is on top of all the other windows. The focus is changed by pointing at another window, there is no need to click in it as well.
This policy is a small extension to focus-follows-mouse. With focus-follows-mouse, if the mouse is moved over the root window (or background) then no window has the focus, and keystrokes are simply lost. With sloppy-focus, focus is only changed when the cursor enters a new window, and not when exiting the current window.
The active window is selected by mouse click. The window may then be “raised”, and appear in front of all other windows. All keystrokes will now be directed to this window, even if the cursor is moved to another window.
Many window managers support other policies, as well as variations on these. Be sure to consult the documentation for the window manager itself.
The X approach of providing tools and not policy extends to the widgets seen on screen in each application.
“Widget” is a term for all the items in the user interface that can be clicked or manipulated in some way; buttons, check boxes, radio buttons, icons, lists, and so on. Microsoft® Windows® calls these “controls”.
Microsoft® Windows® and Apple's Mac OS® both have a very rigid widget policy. Application developers are supposed to ensure that their applications share a common look and feel. With X, it was not considered sensible to mandate a particular graphical style, or set of widgets to adhere to.
As a result, do not expect X applications to have a common look and feel. There are several popular widget sets and variations, including Qt, used by KDE, and GTK+, used by the GNOME project. In this respect, there is some convergence in look-and-feel of the UNIX® desktop, which certainly makes things easier for the novice user.
Xorg is the X11 implementation for FreeBSD. Xorg is the X server of the open source X Window System implementation released by the X.Org Foundation. Xorg is based on the code of XFree86™ 4.4RC2 and X11R6.6. The version of Xorg currently available in the FreeBSD Ports Collection is 7.7.
To build and install Xorg from the Ports Collection:
# cd /usr/ports/x11/xorg
# make install cleanTo build Xorg in its entirety, be sure to have at least 4 GB of free space available.
Alternatively, X11 can be installed directly from packages. Binary packages to use with pkg_add(1) tool are also available for X11. When the remote fetching feature of pkg_add(1) is used, the version number of the package must be removed. pkg_add(1) will automatically fetch the latest version of the application.
So to fetch and install the package of Xorg, simply type:
# pkg_add -r xorgThe examples above will install the complete X11 distribution including the servers, clients, fonts etc. Separate packages and ports of X11 are also available.
To install a minimal X11 distribution you can
alternatively install
x11/xorg-minimal.
The rest of this chapter will explain how to configure X11, and how to set up a productive desktop environment.
In most cases, X11 is self-configuring. Those with older or unusual equipment may find it helpful to gather some hardware information before beginning configuration.
Monitor sync frequencies
Video card chipset
Video card memory
Screen resolution and refresh rate are determined by the monitor's horizontal and vertical sync frequencies. Almost all monitors support electronic autodetection of these values. A few monitors do not provide these values, and the specifications must be determined from the printed manual or manufacturer web site.
The video card chipset is also autodetected, and used to select the proper video driver. It is beneficial for the user to be aware of which chipset is installed for when autodetection does not provide the desired result.
Video card memory determines the maximum resolution and color depth which can be displayed.
Xorg uses
HAL to autodetect keyboards and mice. The
sysutils/hal and
devel/dbus ports are
installed as dependencies of
x11/xorg, but must be
enabled by the following entries in the
/etc/rc.conf file:
These services should be started (either manually or by rebooting) before further Xorg configuration or use is attempted.
Xorg can often work without any further configuration steps by simply typing at prompt:
% startxThe automatic configuration may fail to work with some hardware, or may not set things up quite as desired. In these cases, manual configuration will be necessary.
Desktop environments like GNOME, KDE or Xfce have tools allowing the user to easily set the screen parameters such as the resolution. So if the default configuration is not acceptable and you planned to install a desktop environment then just continue with the installation of the desktop environment and use the appropriate screen settings tool.
Configuration of X11 is a multi-step process. The first step is to build an initial configuration file. As the super user, simply run:
# Xorg -configureThis will generate an X11 configuration skeleton file in
the /root directory called
xorg.conf.new (whether you su(1) or
do a direct login affects the inherited supervisor
$HOME directory variable). The X11 program
will attempt to probe the graphics hardware on the system and
write a configuration file to load the proper drivers for the
detected hardware on the target system.
The next step is to test the existing configuration to verify that Xorg can work with the graphics hardware on the target system. Type:
# Xorg -config xorg.conf.new -retroIf a black and grey grid and an X mouse cursor appear,
the configuration was successful. To exit the test, switch
to the virtual console used to start it by pressing
Ctrl+Alt+Fn (F1 for the first virtual
console) and press
Ctrl+C.
The Ctrl+Alt+Backspace key combination may also be used to break out of Xorg. To enable it, you can either type the following command from any X terminal emulator:
% setxkbmap -option terminate:ctrl_alt_bkspor create a keyboard configuration file for
hald called
x11-input.fdi and saved in the
/usr/local/etc/hal/fdi/policy
directory. This file should contain the following
lines:
You will have to reboot your machine to force hald to read this file.
The following line will also have to be added to
xorg.conf.new, in the
ServerLayout or
ServerFlags section:
If the mouse does not work, you will need to first
configure it before proceeding. See Section 3.10.9, “Mouse Settings”
in the FreeBSD install chapter. In recent
Xorg versions,
the InputDevice sections in
xorg.conf are ignored in favor of the
autodetected devices. To restore the old behavior, add the
following line to the ServerLayout or
ServerFlags section of this file:
Input devices may then be configured as in previous versions, along with any other options needed (e.g., keyboard layout switching).
As previously explained the hald daemon will, by default, automatically detect your keyboard. There are chances that your keyboard layout or model will not be correct, desktop environments like GNOME, KDE or Xfce provide tools to configure the keyboard. However, it is possible to set the keyboard properties directly either with the help of the setxkbmap(1) utility or with a hald's configuration rule.
For example if one wants to use a PC 102 keys keyboard
coming with a french layout, we have to create a keyboard
configuration file for hald
called x11-input.fdi and saved in the
/usr/local/etc/hal/fdi/policy
directory. This file should contain the following
lines:
If this file already exists, just copy and add to your file the lines regarding the keyboard configuration.
You will have to reboot your machine to force hald to read this file.
It is possible to do the same configuration from an X terminal or a script with this command line:
% setxkbmap -model pc102 -layout frThe
/usr/local/share/X11/xkb/rules/base.lst
file lists the various keyboard, layouts and options
available.
The xorg.conf.new configuration file
may now be tuned to taste. Open the file in a text editor
such as emacs(1) or ee(1). If the monitor is an
older or unusual model that does not support autodetection of
sync frequencies, those settings can be added to
xorg.conf.new under the
"Monitor" section:
Most monitors support sync frequency autodetection, making manual entry of these values unnecessary. For the few monitors that do not support autodetection, avoid potential damage by only entering values provided by the manufacturer.
X allows DPMS (Energy Star) features to be used with capable monitors. The xset(1) program controls the time-outs and can force standby, suspend, or off modes. If you wish to enable DPMS features for your monitor, you must add the following line to the monitor section:
While the xorg.conf.new
configuration file is still open in an editor, select the
default resolution and color depth desired. This is defined
in the "Screen" section:
The DefaultDepth keyword describes the
color depth to run at by default. This can be overridden with
the -depth command line switch to
Xorg(1). The Modes keyword describes
the resolution to run at for the given color depth. Note that
only VESA standard modes are supported as defined by the
target system's graphics hardware. In the example above, the
default color depth is twenty-four bits per pixel. At this
color depth, the accepted resolution is 1024 by 768
pixels.
Finally, write the configuration file and test it using the test mode given above.
One of the tools available to assist you during
troubleshooting process are the X11 log files, which contain
information on each device that the X11 server attaches to.
Xorg log file names are in the
format of /var/log/Xorg.0.log. The
exact name of the log can vary from
Xorg.0.log to
Xorg.8.log and so forth.
If all is well, the configuration file needs to be
installed in a common location where Xorg(1) can find it.
This is typically /etc/X11/xorg.conf or
/usr/local/etc/X11/xorg.conf.
# cp xorg.conf.new /etc/X11/xorg.confThe X11 configuration process is now complete. Xorg may be now started with the startx(1) utility. The X11 server may also be started with the use of xdm(1).
Configuration with Intel® i810 integrated chipsets
requires the agpgart AGP
programming interface for X11 to drive the card. See the
agp(4) driver manual page for more information.
This will allow configuration of the hardware as any
other graphics board. Note on systems without the
agp(4) driver compiled in the kernel, trying to load
the module with kldload(8) will not work. This driver
has to be in the kernel at boot time through being compiled
in or using /boot/loader.conf.
This section assumes a bit of advanced configuration knowledge. If attempts to use the standard configuration tools above have not resulted in a working configuration, there is information enough in the log files to be of use in getting the setup working. Use of a text editor will be necessary.
Current widescreen (WSXGA, WSXGA+, WUXGA, WXGA, WXGA+, et.al.) formats support 16:10 and 10:9 formats or aspect ratios that can be problematic. Examples of some common screen resolutions for 16:10 aspect ratios are:
2560x1600
1920x1200
1680x1050
1440x900
1280x800
At some point, it will be as easy as adding one of these
resolutions as a possible Mode in the
Section "Screen" as such:
Xorg is smart enough to pull the resolution information from the widescreen via I2C/DDC information so it knows what the monitor can handle as far as frequencies and resolutions.
If those ModeLines do not exist in
the drivers, one might need to give
Xorg a little hint. Using
/var/log/Xorg.0.log one can extract
enough information to manually create a
ModeLine that will work. Simply look for
information resembling this:
This information is called EDID information. Creating a
ModeLine from this is just a matter of
putting the numbers in the correct order:
So that the ModeLine in
Section "Monitor" for this example would
look like this:
Now having completed these simple editing steps, X should start on your new widescreen monitor.
The default fonts that ship with X11 are less than ideal
for typical desktop publishing applications. Large
presentation fonts show up jagged and unprofessional looking,
and small fonts are almost completely unintelligible.
However, there are several free, high quality Type1
(PostScript®) fonts available which can be readily used with
X11. For instance, the URW font collection
(x11-fonts/urwfonts)
includes high quality versions of standard type1 fonts
(Times Roman®,
Helvetica®,
Palatino® and
others). The Freefonts collection
(x11-fonts/freefonts)
includes many more fonts, but most of them are intended for
use in graphics software such as the
Gimp, and are not complete enough
to serve as screen fonts. In addition, X11 can be configured
to use TrueType® fonts with a minimum of effort. For more
details on this, see the X(7) manual page or the
section on TrueType®
fonts.
To install the above Type1 font collections from the Ports Collection, run the following commands:
# cd /usr/ports/x11-fonts/urwfonts
# make install cleanAnd likewise with the freefont or other collections. To
have the X server detect these fonts, add an appropriate line
to the X server configuration file
(/etc/X11/xorg.conf), which reads:
Alternatively, at the command line in the X session run:
% xset fp+ /usr/local/lib/X11/fonts/URW
% xset fp rehashThis will work but will be lost when the X session is
closed, unless it is added to the startup file
(~/.xinitrc for a normal
startx session, or
~/.xsession when logging in through a
graphical login manager like XDM).
A third way is to use the new
/usr/local/etc/fonts/local.conf file: see
the section on
anti-aliasing.
Xorg has built in support for
rendering TrueType® fonts. There are two different modules
that can enable this functionality. The freetype module is
used in this example because it is more consistent with the
other font rendering back-ends. To enable the freetype module
just add the following line to the "Module"
section of the /etc/X11/xorg.conf
file.
Now make a directory for the TrueType® fonts (for
example,
/usr/local/lib/X11/fonts/TrueType) and
copy all of the TrueType® fonts into this directory. Keep in
mind that TrueType® fonts cannot be directly taken from a
Macintosh®; they must be in UNIX®/MS-DOS®/Windows® format
for use by X11. Once the files have been copied into this
directory, use ttmkfdir to create a
fonts.dir file, so that the X font
renderer knows that these new files have been installed.
ttmkfdir is available from the FreeBSD
Ports Collection as
x11-fonts/ttmkfdir.
# cd /usr/local/lib/X11/fonts/TrueType
# ttmkfdir -o fonts.dirNow add the TrueType® directory to the font path. This is just the same as described above for Type1 fonts, that is, use
% xset fp+ /usr/local/lib/X11/fonts/TrueType
% xset fp rehashor add a FontPath line to the
xorg.conf file.
That's it. Now Gimp, Apache OpenOffice, and all of the other X applications should now recognize the installed TrueType® fonts. Extremely small fonts (as with text in a high resolution display on a web page) and extremely large fonts (within StarOffice™) will look much better now.
All fonts in X11 that are found in
/usr/local/lib/X11/fonts/ and
~/.fonts/ are automatically made
available for anti-aliasing to Xft-aware applications. Most
recent applications are Xft-aware, including
KDE,
GNOME, and
Firefox.
In order to control which fonts are anti-aliased, or to
configure anti-aliasing properties, create (or edit, if it
already exists) the file
/usr/local/etc/fonts/local.conf. Several
advanced features of the Xft font system can be tuned using
this file; this section describes only some simple
possibilities. For more details, please see
fonts-conf(5).
This file must be in XML format. Pay careful attention to
case, and make sure all tags are properly closed. The file
begins with the usual XML header followed by a DOCTYPE
definition, and then the <fontconfig>
tag:
As previously stated, all fonts in
/usr/local/lib/X11/fonts/ as well as
~/.fonts/ are already made available to
Xft-aware applications. If you wish to add another directory
outside of these two directory trees, add a line similar to
the following to
/usr/local/etc/fonts/local.conf:
After adding new fonts, and especially new font directories, you should run the following command to rebuild the font caches:
# fc-cache -fAnti-aliasing makes borders slightly fuzzy, which makes very small text more readable and removes “staircases” from large text, but can cause eyestrain if applied to normal text. To exclude font sizes smaller than 14 point from anti-aliasing, include these lines:
Spacing for some monospaced fonts may also be inappropriate with anti-aliasing. This seems to be an issue with KDE, in particular. One possible fix for this is to force the spacing for such fonts to be 100. Add the following lines:
(this aliases the other common names for fixed fonts as
"mono"), and then add:
Certain fonts, such as Helvetica, may have a problem when
anti-aliased. Usually this manifests itself as a font that
seems cut in half vertically. At worst, it may cause
applications to crash. To avoid this, consider adding the
following to local.conf:
Once you have finished editing
local.conf make sure you end the file
with the </fontconfig> tag. Not
doing this will cause your changes to be ignored.
Finally, users can add their own settings via their
personal .fonts.conf files. To do this,
each user should simply create a
~/.fonts.conf. This file must also be in
XML format.
One last point: with an LCD screen, sub-pixel sampling may
be desired. This basically treats the (horizontally
separated) red, green and blue components separately to
improve the horizontal resolution; the results can be
dramatic. To enable this, add the line somewhere in the
local.conf file:
Depending on the sort of display,
rgb may need to be changed to
bgr, vrgb or
vbgr: experiment and see which works
best.
The X Display Manager (XDM) is an optional part of the X Window System that is used for login session management. This is useful for several types of situations, including minimal “X Terminals”, desktops, and large network display servers. Since the X Window System is network and protocol independent, there are a wide variety of possible configurations for running X clients and servers on different machines connected by a network. XDM provides a graphical interface for choosing which display server to connect to, and entering authorization information such as a login and password combination.
Think of XDM as providing the same functionality to the user as the getty(8) utility (see Section 26.3.2, “Configuration” for details). That is, it performs system logins to the display being connected to and then runs a session manager on behalf of the user (usually an X window manager). XDM then waits for this program to exit, signaling that the user is done and should be logged out of the display. At this point, XDM can display the login and display chooser screens for the next user to login.
To start using XDM, install
the x11/xdm port (it is
not installed by default in recent versions of
Xorg). The
XDM daemon program may then be
found in /usr/local/bin/xdm. This
program can be run at any time as root
and it will start managing the X display on the local machine.
If XDM is to be run every time the
machine boots up, a convenient way to do this is by adding an
entry to /etc/ttys. For more information
about the format and usage of this file, see
Section 26.3.2.1, “Adding an Entry to
/etc/ttys”. There is a line in the
default /etc/ttys file for running the
XDM daemon on a virtual
terminal:
By default this entry is disabled; in order to enable it
change field 5 from off to
on and restart init(8) using the
directions in Section 26.3.2.2, “Force init to Reread
/etc/ttys”. The first field,
the name of the terminal this program will manage, is
ttyv8. This means that
XDM will start running on the 9th
virtual terminal.
The XDM configuration directory
is located in /usr/local/lib/X11/xdm. In
this directory there are several files used to change the
behavior and appearance of XDM.
Typically these files will be found:
| File | Description |
|---|---|
Xaccess | Client authorization ruleset. |
Xresources | Default X resource values. |
Xservers | List of remote and local displays to manage. |
Xsession | Default session script for logins. |
Xsetup_* | Script to launch applications before the login interface. |
xdm-config | Global configuration for all displays running on this machine. |
xdm-errors | Errors generated by the server program. |
xdm-pid | The process ID of the currently running XDM. |
Also in this directory are a few scripts and programs used to set up the desktop when XDM is running. The purpose of each of these files will be briefly described. The exact syntax and usage of all of these files is described in xdm(1).
The default configuration is a simple rectangular login window with the hostname of the machine displayed at the top in a large font and “Login:” and “Password:” prompts below. This is a good starting point for changing the look and feel of XDM screens.
The protocol for connecting to
XDM-controlled displays is
called the X Display Manager Connection Protocol (XDMCP).
This file is a ruleset for controlling XDMCP connections
from remote machines. It is ignored unless the
xdm-config is changed to listen for
remote connections. By default, it does not allow any
clients to connect.
This is an application-defaults file for the display chooser and login screens. In it, the appearance of the login program can be modified. The format is identical to the app-defaults file described in the X11 documentation.
This is the default session script for
XDM to run after a user has
logged in. Normally each user will have a customized
session script in ~/.xsession that
overrides this script.
These will be run automatically before displaying the
chooser or login interfaces. There is a script for each
display being used, named Xsetup_
followed by the local display number (for instance
Xsetup_0). Typically these scripts
will run one or two programs in the background such as
xconsole.
This contains settings in the form of app-defaults that are applicable to every display that this installation manages.
In order for other clients to connect to the display
server, you must edit the access control rules and enable
the connection listener. By default these are set to
conservative values. To make XDM
listen for connections, first comment out a line in the
xdm-config file:
and then restart XDM.
Remember that comments in app-defaults files begin with a
“!” character, not the usual “#”.
More strict access controls may be desired — look at the
example entries in Xaccess, and refer to
the xdm(1) manual page for further information.
Several replacements for the default XDM program exist. One of them, KDM (bundled with KDE) is described later in this chapter. The KDM display manager offers many visual improvements and cosmetic frills, as well as the functionality to allow users to choose their window manager of choice at login time.
This section describes the different desktop environments available for X on FreeBSD. A “desktop environment” can mean anything ranging from a simple window manager to a complete suite of desktop applications, such as KDE or GNOME.
GNOME is a user-friendly desktop environment that enables users to easily use and configure their computers. GNOME includes a panel (for starting applications and displaying status), a desktop (where data and applications can be placed), a set of standard desktop tools and applications, anda set of conventions that make it easy for applications to cooperate and be consistent with each other. Users of other operating systems or environments should feel right at home using the powerful graphics-driven environment that GNOME provides. More information regarding GNOME on FreeBSD can be found on the FreeBSD GNOME Project's web site. The web site also contains fairly comprehensive FAQs about installing, configuring, and managing GNOME.
The software can be easily installed from a package or the Ports Collection:
To install the GNOME package from the network, simply type:
# pkg_add -r gnome2For pkgng users, the equivalent command is:
# pkg install gnome2To build GNOME from source, use the ports tree:
# cd /usr/ports/x11/gnome2
# make install cleanFor proper operation, GNOME
requires the /proc filesystem to be
mounted. Add
to /etc/fstab to mount
procfs(5) automatically during
startup.
Once GNOME is installed, the X server must be told to start GNOME instead of a default window manager.
The easiest way to start
GNOME is with
GDM, the GNOME Display Manager.
GDM is installed as part
of the GNOME desktop, although
it is disabled by default. It can be enabled by adding this
line to /etc/rc.conf:
Once you have rebooted, GDM will start automatically.
It is often desirable to start all
GNOME services together with
GDM. To achieve this, add the
following line to /etc/rc.conf:
GNOME may also be started
from the command-line by properly configuring a file named
.xinitrc. If a custom
.xinitrc is already in place, simply
replace the line that starts the current window manager with
one that starts
/usr/local/bin/gnome-session
instead. If nothing special has been done to the
configuration file, then it is enough simply to type:
% echo "/usr/local/bin/gnome-session" > ~/.xinitrcNext, type startx, and the
GNOME desktop environment will
be started.
If an older display manager, like
XDM, is being used, this will
not work. Instead, create an executable
.xsession file with the same command
in it. To do this, edit the file and replace the existing
window manager command with
/usr/local/bin/gnome-session:
% echo "#!/bin/sh" > ~/.xsession
% echo "/usr/local/bin/gnome-session" >> ~/.xsession
% chmod +x ~/.xsessionYet another option is to configure the display manager to allow choosing the window manager at login time; the section on KDE details explains how to do this for KDM, the display manager of KDE.
KDE is an easy to use contemporary desktop environment. Some of the things that KDE brings to the user are:
A beautiful contemporary desktop
A desktop exhibiting complete network transparency
An integrated help system allowing for convenient, consistent access to help on the use of the KDE desktop and its applications
Consistent look and feel of all KDE applications
Standardized menu and toolbars, keybindings, color-schemes, etc.
Internationalization: KDE is available in more than 55 languages
Centralized, consistent, dialog-driven desktop configuration
A great number of useful KDE applications
KDE comes with a web browser called Konqueror, which is a solid competitor to other existing web browsers on UNIX® systems. More information on KDE can be found on the KDE website. For FreeBSD specific information and resources on KDE, consult the KDE/FreeBSD initiative's website.
Just as with GNOME or any other desktop environment, the software can be easily installed from a package or the Ports Collection:
To install the KDE 4 package from the network, type:
# pkg_add -r kde4pkg_add(1) will automatically fetch the latest version of the application.
For pkgng users, the equivalent command is:
# pkg install kde4To build KDE from source, use the ports tree:
# cd /usr/ports/x11/kde4
# make install cleanThe first time the port is installed, a menu will be shown for selecting options. Accepting the defaults is recommended.
KDE 4 is a large application, and will take quite some time to compile even on a fast computer.
After KDE has been installed,
the X server must be told to launch this application
instead of the default window manager. This is accomplished
by editing the .xinitrc file:
% echo "exec /usr/local/kde4/bin/startkde" > ~/.xinitrcNow, whenever the X Window System is invoked with
startx, KDE
will be the desktop.
If a display manager such as
XDM is being used, the
configuration is slightly different. Edit the
.xsession file instead. Instructions
for KDM are described later in
this chapter.
Now that KDE is installed on the system, most things can be discovered through the help pages, or just by pointing and clicking at various menus. Windows® or Mac® users will feel quite at home.
The best reference for KDE is the on-line documentation. KDE comes with its own web browser, Konqueror, dozens of useful applications, and extensive documentation. The remainder of this section discusses the technical items that are difficult to learn by random exploration.
An administrator of a multi-user system may wish to have a graphical login screen to welcome users. XDM can be used, as described earlier. However, KDE includes an alternative, KDM, which is designed to look more attractive and include more login-time options. In particular, users can easily choose (via a menu) which desktop environment (KDE, GNOME, or something else) to run after logging on.
KDE 4 requires that
procfs(5) be mounted, and this line must be added to
/etc/rc.conf:
Xfce is a desktop environment based on the GTK+ toolkit used by GNOME, but is much more lightweight and meant for those who want a simple, efficient desktop which is nevertheless easy to use and configure. Visually, it looks very much like CDE, found on commercial UNIX® systems. Some of Xfce's features are:
A simple, easy-to-handle desktop
Fully configurable via mouse, with drag and drop, etc.
Main panel similar to CDE, with menus, applets and applications launchers
Integrated window manager, file manager, sound manager, GNOME compliance module, and more
Themeable (since it uses GTK+)
Fast, light and efficient: ideal for older/slower machines or machines with memory limitations
More information on Xfce can be found on the Xfce website.
To install the Xfce from the network, simply type:
# pkg_add -r xfce4For pkgng users, the equivalent command is:
# pkg install xfce4Alternatively, to build from source, use the Ports Collection:
# cd /usr/ports/x11-wm/xfce4
# make install cleanNow, tell the X server to launch Xfce the next time X is started. Simply type this:
% echo "/usr/local/bin/startxfce4" > ~/.xinitrcThe next time X is started,
Xfce will be the desktop. As
before, if a display manager like
XDM is being used, create an
.xsession, as described in the section
on GNOME, but with the
/usr/local/bin/startxfce4 command; or,
configure the display manager to allow choosing a desktop at
login time, as explained in the section on
kdm.
Now that the basics have been covered, this part of the FreeBSD Handbook will discuss some frequently used features of FreeBSD. These chapters:
Introduce you to popular and useful desktop applications: browsers, productivity tools, document viewers, etc.
Introduce you to a number of multimedia tools available for FreeBSD.
Explain the process of building a customized FreeBSD kernel, to enable extra functionality on your system.
Describe the print system in detail, both for desktop and network-connected printer setups.
Show you how to run Linux applications on your FreeBSD system.
Some of these chapters recommend that you do some prior reading, and this is noted in the synopsis at the beginning of each chapter.
While FreeBSD is popular as a server for its performance and stability, it is also suited for day-to-day use as a desktop. With over 24,000 applications available as packages or ports, it is easy to build a customized desktop that runs a wide variety of desktop applications. This chapter demonstrates how to install some popular desktop applications effortlessly using packages or the FreeBSD Ports Collection.
As FreeBSD features Linux® binary compatibility, many applications developed for Linux® can be installed on a FreeBSD desktop. Many of the ports using Linux® binary compatibility start with “linux-”. This chapter assumes that Linux® binary compatibility has been enabled before any Linux® applications are installed.
This chapter demonstrates how to install the following desktop applications:
| Type of Application | Application Name | Package Name | Ports Name |
|---|---|---|---|
| Browser | Firefox | firefox | www/firefox |
| Browser | Opera | opera | www/opera |
| Browser | Konqueror | kde4-baseapps | x11/kde4-baseapps |
| Browser | Chromium | chromium | www/chromium |
| Productivity | Calligra | calligra | editors/calligra |
| Productivity | AbiWord | abiword | editors/abiword |
| Productivity | The GIMP | gimp | graphics/gimp |
| Productivity | Apache OpenOffice | openoffice | editors/openoffice-3 |
| Productivity | LibreOffice | libreoffice | editors/libreoffice |
| Document Viewer | Acrobat Reader® | no package due to
license restriction | print/acroread9 |
| Document Viewer | gv | gv | print/gv |
| Document Viewer | Xpdf | xpdf | graphics/xpdf |
| Document Viewer | GQview | gqview | graphics/gqview |
| Finance | GnuCash | gnucash | finance/gnucash |
| Finance | Gnumeric | gnumeric | math/gnumeric |
| Finance | KMyMoney | kmymoney-kde4 | finance/kmymoney-kde4 |
Before reading this chapter, you should know how to:
Install additional software using packages or ports.
Enable Linux® binary compatibility.
For information on how to configure a multimedia environment, refer to Chapter 8, Multimedia. For information on how to set up and use electronic mail, refer to Chapter 28, Electronic Mail.
FreeBSD does not come with a pre-installed web browser. Instead, the www category of the Ports Collection contains many browsers which can be installed as a package or compiled from the Ports Collection.
The KDE and GNOME desktop environments include their own HTML browser. Refer to Section 6.7, “Desktop Environments” for more information on how to set up these complete desktops.
Some light-weight browsers include
www/dillo2,
www/links, and
www/w3m.
This section demonstrates how to install the following popular web browsers and indicates if the application is resource-heavy, takes time to compile from ports, or has any major dependencies.
| Application Name | Resources Needed | Installation from Ports | Notes |
|---|---|---|---|
| Firefox | medium | heavy | FreeBSD and Linux® versions are available |
| Opera | light | light | FreeBSD and Linux® versions are available |
| Konqueror | medium | heavy | Requires KDE libraries |
| Chromium | medium | heavy | Requires Gtk+ |
Firefox is a modern, free, open source browser that is fully ported to FreeBSD. It features a standards-compliant HTML display engine, tabbed browsing, popup blocking, extensions, improved security, and more. Firefox is based on the Mozilla codebase.
Install the package of the latest release version of Firefox by typing:
# pkg_add -r firefoxTo instead install Firefox Extended Support Release (ESR) version, use:
# pkg_add -r firefox-esrLocalized versions are available in www/firefox-i18n and www/firefox-esr-i18n.
The Ports Collection can instead be used to compile
the desired version of firefox from
source code. This example builds www/firefox, where
firefox can be replaced with the ESR or
localized version to install.
# cd /usr/ports/www/firefox
# make install cleanThe following sections assume that Firefox is already installed.
java/icedtea-web
provides a free software web browser plugin for running
Java applets. It can be installed as a package. To
alternately compile the port:
# cd /usr/ports/java/icedtea-web
# make install cleanKeep the default configuration options when compiling the port.
Once installed, start firefox,
enter about:plugins in the location bar and
press Enter. A page listing the installed
plugins will be displayed. The
Java™ plugin should be
listed.
If the browser is unable to find the plugin, each user will have to run the following command and relaunch the browser:
% ln -s /usr/local/lib/IcedTeaPlugin.so \
$HOME/.mozilla/plugins/A native Adobe® Flash™ plugin is not available for FreeBSD. However, a software layer (wrapper) for running the Linux® version of the plugin exists. This wrapper also provides support for other browser plugins such as RealPlayer®.
To install and enable this plugin:
Install the www/nspluginwrapper port.
Due to licensing restrictions, a package is not available.
This port requires emulators/linux_base-f10 which
is a large port.
Install the www/linux-f10-flashplugin11
port. Due to licensing restrictions, a package is not
available.
# ln -s /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so \
/usr/local/lib/browser_plugins/Create the /usr/local/lib/browser_plugins
directory if it is not already present.
Before the plugin is first used, each user must run:
% nspluginwrapper -v -a -iWhen the plugin port has been updated and reinstalled, each user must run:
% nspluginwrapper -v -a -uStart the browser, enter
about:plugins in the location bar and
press Enter. A list of
all the currently available plugins will be shown.
Swfdec is the library for decoding and rendering Flash™ animations. Swfdec-Mozilla is a plugin for Firefox browsers that uses the Swfdec library for playing SWF files. It is still in heavy development.
To install the package:
# pkg_add -r swfdec-pluginIf the package is not available, compile and install it from the Ports Collection:
# cd /usr/ports/www/swfdec-plugin
# make install cleanRestart the browser for this plugin to take effect.
Opera is a full-featured and standards-compliant browser which is still lightweight and fast. It comes with a built-in mail and news reader, an IRC client, an RSS/Atom feeds reader, and more. It is available as a native FreeBSD version and as a version that runs under Linux® emulation.
This command installs the package of the FreeBSD version of
Opera. Replace
opera with linux-opera
to instead install the Linux® version.
# pkg_add -r operaAlternately, install either version through the Ports Collection. This example compiles the native version:
# cd /usr/ports/www/opera
# make install cleanTo install the Linux® version, substitute
linux-opera in place of
opera.
To install Adobe® Flash™ plugin support, first compile
the www/linux-f10-flashplugin11 port,
as a package is not available due to licensing restrictions.
Then install either the www/opera-linuxplugins port
or package. This example compiles both from ports:
# cd /usr/ports/www/linux-f10-flashplugin11
# make install clean
# cd /usr/ports/www/opera-linuxplugins
# make install cleanOnce installed, check the presence of the plugin by
starting the browser, entering
opera:plugins in the location bar and
pressing Enter. A list should appear with
all the currently available plugins.
To add the Java™ plugin, follow the instructions for Firefox.
Konqueror is part of x11/kde4-baseapps.
Konqueror is more than a web
browser as it is also a file manager and a multimedia
viewer.
Konqueror supports WebKit as
well as its own KHTML. WebKit is a rendering engine used by
many modern browsers including Chromium. To use WebKit with
Konqueror on FreeBSD, install
the www/kwebkitpart package or
port. This example compiles the port:
# cd /usr/ports/www/kwebkitpart
# make install cleanTo enable WebKit within Konqueror, click “Settings”, “Configure Konqueror”. In the “General” settings page, click the drop-down menu next to “Default web browser engine” and change “KHTML” to “WebKit”.
Konqueror also supports Flash™. A “How To” guide for getting Flash™ support on Konqueror is available at http://freebsd.kde.org/howtos/konqueror-flash.php.
Chromium is an open source browser project that aims to build a safer, faster, and more stable web browsing experience. Chromium features tabbed browsing, popup blocking, extensions, and much more. Chromium is the open source project upon which the Google Chrome web browser is based.
Chromium can be installed as a package by typing:
# pkg_add -r chromiumAlternatively, Chromium can be compiled from source using the Ports Collection:
# cd /usr/ports/www/chromium
# make install cleanThe executable for Chromium
is /usr/local/bin/chrome, not
/usr/local/bin/chromium.
The following sections assume that Chromium is already installed.
To install Java™ plugin support, follow the instructions in Section 7.2.1.1, “Firefox and Java™ Plugin”.
Once Java™ support is installed, start
Chromium, and enter
about:plugins in the address bar.
IcedTea-Web should be listed as one of the installed
plugins.
If Chromium does not display the IcedTea-Web plugin, run the following commands, and restart the web browser:
# mkdir -p /usr/local/share/chromium/plugins
# ln -s /usr/local/lib/IcedTeaPlugin.so \
/usr/local/share/chromium/plugins/Configuring Chromium and Adobe® Flash™ is similar to the instructions for Firefox. No additional configuration should be necessary, since Chromium is able to use some plugins from other browsers.
When it comes to productivity, new users often look for a good office suite or a friendly word processor. While some desktop environments like KDE already provide an office suite, there is no default productivity package. Several office suites and word processors are available for FreeBSD, regardless of the installed desktop environment.
This section demonstrates how to install the following popular productivity software and indicates if the application is resource-heavy, takes time to compile from ports, or has any major dependencies.
| Application Name | Resources Needed | Installation from Ports | Major Dependencies |
|---|---|---|---|
| Calligra | light | heavy | KDE |
| AbiWord | light | light | Gtk+ or GNOME |
| The Gimp | light | heavy | Gtk+ |
| Apache OpenOffice | heavy | huge | JDK™ and Mozilla |
| LibreOffice | somewhat heavy | huge | Gtk+, or KDE/ GNOME, or JDK™ |
The KDE community provides its desktop environment with an office suite which can be used outside of KDE. Calligra includes standard components that can be found in other office suites. Words is the word processor, Sheets is the spreadsheet program, Stage manages slide presentations, and Karbon is used to draw graphical documents.
editors/calligra can be installed
as a package or a port. To install the package:
# pkg_add -r calligraIf the package is not available, use the Ports Collection instead:
# cd /usr/ports/editors/calligra
# make install cleanAbiWord is a free word processing program similar in look and feel to Microsoft® Word. It is suitable for typing papers, letters, reports, memos, and so forth. It is fast, contains many features, and is user-friendly.
AbiWord can import or export
many file formats, including some proprietary ones like
Microsoft® .doc.
To install the AbiWord package:
# pkg_add -r abiwordIf the package is not available, it can be compiled from the Ports Collection:
# cd /usr/ports/editors/abiword
# make install cleanFor image authoring or picture retouching, The GIMP provides a sophisticated image manipulation program. It can be used as a simple paint program or as a quality photo retouching suite. It supports a large number of plugins and features a scripting interface. The GIMP can read and write a wide range of file formats and supports interfaces with scanners and tablets.
To install the package:
# pkg_add -r gimpAlternately, use the Ports Collection:
# cd /usr/ports/graphics/gimp
# make install cleanThe graphics category of the Ports Collection contains several GIMP-related plugins, help files, and user manuals.
On 1 June 2011, Oracle® donated the OpenOffice.org code base to the Apache Software Foundation. OpenOffice.org is now known as Apache OpenOffice and is developed under the wing of the Apache Software Foundation's Incubator.
Apache OpenOffice includes all of the mandatory applications in a complete office productivity suite: a word processor, spreadsheet, presentation manager, and drawing program. Its user interface is very similar to other office suites, and it can import and export in various popular file formats. It is available in a number of different languages and internationalization has been extended to interfaces, spell checkers, and dictionaries.
The word processor of Apache OpenOffice uses a native XML file format for increased portability and flexibility. The spreadsheet program features a macro language which can be interfaced with external databases. Apache OpenOffice is stable and runs natively on Windows®, Solaris™, Linux®, FreeBSD, and Mac OS® X. More information about Apache OpenOffice can be found on the Apache OpenOffice web site. For FreeBSD specific information, and to directly download packages, refer to the web site of the FreeBSD Apache OpenOffice Porting Team.
To install the Apache OpenOffice package:
# pkg_add -r apache-openofficeWhen running a -RELEASE version of FreeBSD, this should work. Otherwise, download the latest package from the website of the FreeBSD Apache OpenOffice Porting Team and install it using pkg_add(1). Both the current release and development versions are available for download at this web site.
Once the package is installed, type the following command to launch Apache OpenOffice:
% openoffice-X.Y.Zwhere X.Y.Z is the version
number of the installed version of
Apache OpenOffice.
During the first launch, some questions will be asked
and a .openoffice.org folder
will be created in the user's home directory.
If the desired Apache OpenOffice package is not available, compiling the port is still an opton. However, this requires a lot of disk space and a fairly long time to compile:
# cd /usr/ports/editors/openoffice-3
# make install cleanTo build a localized version, replace the previous command with:
# make LOCALIZED_LANG=your_language install cleanReplace
your_language with the correct
language ISO-code. A list of supported language codes is
available in
files/Makefile.localized, located in
the port's directory.
LibreOffice is a free software office suite developed by The Document Foundation. It is compatible with other major office suites and available on a variety of platforms. It is a rebranded fork of OpenOffice.org which includes all of the mandatory applications in a complete office productivity suite: a word processor, spreadsheet, presentation manager, drawing program, database management program, and a tool for creating and editing mathematical formula. It is available in a number of different languages and internationalization has been extended to interfaces, spell checkers, and dictionaries.
The word processor of LibreOffice uses a native XML file format for increased portability and flexibility. The spreadsheet program features a macro language which can be interfaced with external databases. LibreOffice is stable and runs natively on Windows®, Linux®, FreeBSD, and Mac OS® X. More information about LibreOffice can be found on the LibreOffice web site.
To install the English version of the LibreOffice package:
# pkg_add -r libreofficeThe editors
category of the Ports Collection contains several
localizations for LibreOffice.
When installing a localized package, replace
libreoffice with the name of the
localized package.
Once the package is installed, type the following command to run LibreOffice:
% libreofficeDuring the first launch, some questions will be asked
and a .libreoffice
folder will be created in the user's home directory.
If the desired LibreOffice package is not available, compiling the port is still an option. However, this requires a lot of disk space and a fairly long time to compile. This example compiles the English version:
# cd /usr/ports/editors/libreoffice
# make install cleanTo build a localized version, cd into the port directory of the desired language. Supported languages can be found in the editors category of the Ports Collection.
Some new document formats have gained popularity since the advent of UNIX® and the viewers they require may not be available in the base system. This section demonstrates how to install the following viewers:
| Application Name | Resources Needed | Installation from Ports | Major Dependencies |
|---|---|---|---|
| Acrobat Reader® | light | light | Linux® binary compatibility |
| gv | light | light | Xaw3d |
| Xpdf | light | light | FreeType |
| GQview | light | light | Gtk+ or GNOME |
Many documents are now distributed as Portable Document Format (PDF) files. One popular viewer for PDFs is Acrobat Reader®, released by Adobe® for Linux®. As FreeBSD can run Linux® binaries, it is also available for FreeBSD. Due to licensing restrictions, a package is not available so it must be compiled from ports. Several localizations are available from the print category of the Ports Collection.
This command installs the English version of Acrobat Reader® 9 from the Ports Collection. To instead install a localized version, cd into the desired port's directory.
# cd /usr/ports/print/acroread9
# make install cleangv is a PostScript® and PDF viewer. It is based on ghostview, but has a nicer look due to the Xaw3d library. It is fast with a clean interface. gv has many configurable features, such as orientation, paper size, scale, and anti-aliasing. Almost any operation can be performed with either the keyboard or the mouse.
To install gv as a package:
# pkg_add -r gvIf a package is unavailable, use the Ports Collection:
# cd /usr/ports/print/gv
# make install cleanFor users that prefer a small FreeBSD PDF viewer, xpdf provides a light-weight and efficient viewer which requires few resources. It uses the standard X fonts and does not require Motif® or any other X toolkit.
To install the Xpdf package:
# pkg_add -r xpdfIf the package is not available, use the Ports Collection:
# cd /usr/ports/graphics/xpdf
# make install cleanOnce the installation is complete, launch
xpdf and use the right mouse button to
activate the menu.
GQview is an image manager which supports viewing a file with a single click, launching an external editor, and thumbnail previews. It also features a slideshow mode and some basic file operations, making it easy to manage image collections and to find duplicate files. GQview supports full screen viewing and internationalization.
To install the GQview package:
# pkg_add -r gqviewIf the package is not available, use the Ports Collection:
# cd /usr/ports/graphics/gqview
# make install cleanFor managing personal finances on a FreeBSD desktop, some powerful and easy-to-use applications can be installed. Some are compatible with widespread file formats, such as the formats used by Quicken® and Excel.
This section covers these programs:
| Application Name | Resources Needed | Installation from Ports | Major Dependencies |
|---|---|---|---|
| GnuCash | light | heavy | GNOME |
| Gnumeric | light | heavy | GNOME |
| KMyMoney | light | heavy | KDE |
GnuCash is part of the GNOME effort to provide user-friendly, yet powerful, applications to end-users. GnuCash can be used to keep track of income and expenses, bank accounts, and stocks. It features an intuitive interface while remaining professional.
GnuCash provides a smart register, a hierarchical system of accounts, and many keyboard accelerators and auto-completion methods. It can split a single transaction into several more detailed pieces. GnuCash can import and merge Quicken QIF files. It also handles most international date and currency formats.
To install the GnuCash package:
# pkg_add -r gnucashIf the package is not available, use the Ports Collection:
# cd /usr/ports/finance/gnucash
# make install cleanGnumeric is a spreadsheet program developed by the GNOME community. It features convenient automatic “guessing” of user input according to the cell format with an autofill system for many sequences. It can import files in a number of popular formats, including Excel, Lotus 1-2-3, and Quattro Pro. It has a large number of built-in functions and allows all of the usual cell formats such as number, currency, date, time, and much more.
To install Gnumeric as a package:
# pkg_add -r gnumericIf the package is not available, use the Ports Collection:
# cd /usr/ports/math/gnumeric
# make install cleanKMyMoney is a personal finance application created by the KDE community. KMyMoney intends to provide and incorporate all the important features found in commercial personal finance manager applications. It also highlights ease-of-use and proper double-entry accounting among its features. KMyMoney imports from standard Quicken Interchange Format (QIF) files, tracks investments, handles multiple currencies, and provides a wealth of reports.
To install KMyMoney as a package:
# pkg_add -r kmymoney-kde4If the package is not available, use the Ports Collection:
# cd /usr/ports/finance/kmymoney-kde4
# make install cleanFreeBSD supports a wide variety of sound cards, allowing users to enjoy high fidelity output from a FreeBSD system. This includes the ability to record and playback audio in the MPEG Audio Layer 3 (MP3), Waveform Audio File (WAV), Ogg Vorbis, and other formats. The FreeBSD Ports Collection contains many applications for editing recorded audio, adding sound effects, and controlling attached MIDI devices.
FreeBSD also supports the playback of video files and DVDs. The FreeBSD Ports Collection contains applications to encode, convert, and playback various video media.
This chapter describes how to configure sound cards, video playback, TV tuner cards, and scanners on FreeBSD. It also describes some of the applications which are available for using these devices.
After reading this chapter, you will know how to:
Configure a sound card on FreeBSD.
Troubleshoot the sound setup.
Playback and encode MP3s and other audio.
Prepare a FreeBSD system for video playback.
Playback DVDs, .mpg, and
.avi files.
Rip CD and DVD content into files.
Configure a TV card.
Install and setup MythTV on FreeBSD
Configure an image scanner.
How to configure an image scanner.
Before reading this chapter, you should:
Know how to configure and install a new kernel (Chapter 9, Configuring the FreeBSD Kernel).
Audio CDs have specialized encodings which differ from the usual ISO-filesystem. This means that they should not be mounted using mount(8).
Before beginning the configuration, determine the model of the sound card and the chip it uses. FreeBSD supports a wide variety of sound cards. Check the supported audio devices list of the Hardware Notes to see if the card is supported and which FreeBSD driver it uses.
In order to use the sound device, the proper device driver must be loaded. This may be accomplished in one of two ways. The easiest way is to load a kernel module for the sound card with kldload(8). This example loads the driver for a Creative SoundBlaster® Live! sound card:
# kldload snd_emu10k1To automate the loading of this driver at boot time, add the
driver to /boot/loader.conf. The line for
this driver is:
Other available sound modules are listed in
/boot/defaults/loader.conf. When unsure
which driver to use, load the snd_driver
module:
# kldload snd_driverThis is a metadriver which loads all of the most common
sound drivers and can be used to speed up the search for the
correct driver. It is also possible to load all sound drivers
by adding the metadriver to
/boot/loader.conf.
To determine which driver was selected for the sound card
after loading the snd_driver metadriver,
type cat /dev/sndstat.
Users who prefer to statically compile in support for the sound card in a custom kernel should refer to the instructions in the next section. For more information about recompiling a kernel, refer to Chapter 9, Configuring the FreeBSD Kernel.
When using a custom kernel to provide sound support, make sure that the audio framework driver exists in the custom kernel configuration file:
Next, add support for the sound card. Therefore, you need to know which driver supports the card. To continue the example of the Creative SoundBlaster® Live! sound card from the previous section, use the following line in the custom kernel configuration file:
Be sure to read the manual page of the driver for the
syntax to use. The explicit syntax for the kernel
configuration of every supported sound driver can also be
found in /usr/src/sys/conf/NOTES.
Non-PnP ISA sound cards may require the IRQ and I/O port
settings of the card to be added to
/boot/device.hints. During the boot
process, loader(8) reads this file and passes the
settings to the kernel. For example, an old Creative
SoundBlaster® 16 ISA non-PnP card will use the
snd_sbc(4) driver in conjunction with
snd_sb16. For this card, the following
lines must be added to the kernel configuration file:
If the card uses the 0x220 I/O port and
IRQ 5, these lines must also be added to
/boot/device.hints:
In this case, the card uses the 0x220
I/O port and the IRQ 5.
The syntax used in
/boot/device.hints is described in
sound(4) and the manual page for the driver of the sound
card.
The settings shown above are the defaults. In some cases, the IRQ or other settings may need to be changed to match the card. Refer to snd_sbc(4) for more information about this card.
After rebooting into the custom kernel, or after loading the required module, the sound card should appear in the system message buffer. Run dmesg(8) and look for a message like:
The status of the sound card may also be checked using this command:
# cat /dev/sndstat
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384
kld snd_ich (1p/2r/0v channels duplex default)The output may vary between systems. If no
pcm devices are listed, go back and
review the kernel configuration file and make sure the correct
device driver was chosen. Common problems are listed in Section 8.2.2.1, “Common Problems”.
If all goes well, the sound card should now work in os;. If the CD-ROM or DVD-ROM drive's audio-out pins are properly connected to the sound card, one can insert an audio CD in the drive and play it with cdcontrol(1):
% cdcontrol -f /dev/acd0 play 1Various applications, such as audio/workman provide a friendlier
interface. The audio/mpg123
port can be installed to listen to MP3 audio files.
Another quick way to test the card is to send data to
/dev/dsp:
% cat filename > /dev/dspwhere
can
be any file. This command should produce some noise, confirming
that the sound card is actually working.filename
The /dev/dsp* device nodes will
be created automatically as needed. When not in use, they
do not exist and will not appear in the output of
ls(1).
Sound card mixer levels can be changed using mixer(8). More details can be found in mixer(8).
| Error | Solution |
|---|---|
| sb_dspwr(XX) timed out | The I/O port is not set correctly. |
| bad irq XX | The IRQ is set incorrectly. Make sure that the set IRQ and the sound IRQ are the same. |
| xxx: gus pcm not attached, out of memory | There is not enough available memory to use the device. |
| xxx: can't open /dev/dsp! | Check with |
Another issue is that modern graphics cards often come
with their own sound driver, for use with
HDMI and similar. This sound device will
sometimes be enumerated before the sound card and the sound
card will subsequently not be used as the default playback
device. To check if this is the case, run
dmesg and look for
pcm. The output looks something like
this:
Here the graphics card (NVidia) has
been enumerated before the sound card (Realtek
ALC889). To use the sound card as the default
playback device, change hw.snd.default_unit
to the unit that should be used for playback:
# sysctl hw.snd.default_unit=nHere, n is the number of the sound
device to use. In this example, it should be
4. Make this change permanent by adding
the following line to
/etc/sysctl.conf:
4It is often desirable to have multiple sources of sound that are able to play simultaneously. FreeBSD uses Virtual Sound Channels, which can be enabled using sysctl(8). Virtual channels allow one to multiplex the sound card's playback by mixing sound in the kernel.
To set the number of virtual channels, three sysctl(8) knobs are available:
# sysctl dev.pcm.0.play.vchans=4
# sysctl dev.pcm.0.rec.vchans=4
# sysctl hw.snd.maxautovchans=4The above example allocates four virtual channels, which
is a practical number for everyday use. Both
dev.pcm.0.play.vchans=4 and
dev.pcm.0.rec.vchans=4 are the number of
virtual channels pcm0 has for playback
and recording, and are configurable after a device has been
attached. hw.snd.maxautovchans is the number
of virtual channels a new audio device is given when it is
attached using kldload(8). Since the
pcm module can be loaded independently
of the hardware drivers, hw.snd.maxautovchans
indicates how many virtual channels will be given to devices
when they are attached. Refer to pcm(4) for more
information.
The number of virtual channels for a device cannot be changed while it is in use. First, close any programs using the device, such as music players or sound daemons.
The correct pcm device will
automatically be allocated transparently to a program that
requests /dev/dsp0.
The default values for the different mixer channels are
hardcoded in the source code of the pcm(4) driver. There
are many different applications and daemons that allow values to
be set for the mixer that are remembered between invocations,
but this is not a clean solution. It is possible to set default
mixer values at the driver level. This is accomplished by
defining the appropriate values in
/boot/device.hints, as seen in this
example:
This will set the volume channel to a default value of
50 when the pcm(4) module is
loaded.
This section describes some MP3 players available for FreeBSD, how to rip audio CD tracks, and how to encode and decode MP3s.
A popular graphical MP3 player is XMMS. Winamp skins can be used with XMMS since the interface is almost identical to that of Nullsoft's Winamp. XMMS also has native plug-in support.
XMMS can be installed from
the multimedia/xmms port
or package.
XMMS's interface is intuitive, with a playlist, graphic equalizer, and more. Those familiar with Winamp will find XMMS simple to use.
The audio/mpg123 port
provides an alternative, command-line MP3
player.
mpg123 can be run by specifying
the sound device and the MP3 file on the
command line. Assuming the audio device is
/dev/dsp1.0 and the
MP3 file is
Foobar-GreatestHits.mp3, enter the
following to play the file:
# mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2 and 3.
Version 0.59r (1999/Jun/15). Written and copyrights by Michael Hipp.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
Playing MPEG stream from Foobar-GreatestHits.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereoBefore encoding a CD or CD track to MP3, the audio data on the CD must be ripped to the hard drive. This is done by copying the raw CD Digital Audio (CDDA) data to WAV files.
The cdda2wav tool, which is installed
with the sysutils/cdrtools
suite, is used for ripping audio information from CDs and the
information associated with them.
With the audio CD in the drive, the following command can
be issued as root to rip an entire CD
into individual (per track) WAV
files:
# cdda2wav -D 0,1,0 -BThe -D
indicates the SCSI device 0,1,00,1,0,
which corresponds to the output of cdrecord
-scanbus.
cdda2wav will support ATAPI (IDE) CDROM drives. To rip from an IDE drive, specify the device name in place of the SCSI unit numbers. For example, to rip track 7 from an IDE drive:
# cdda2wav -D /dev/acd0 -t 7To rip individual tracks, make use of the
-t as shown:
# cdda2wav -D 0,1,0 -t 7This example rips track seven of the audio CDROM. To rip a range of tracks, such as track one to seven, specify a range:
# cdda2wav -D 0,1,0 -t 1+7dd(1) can also be used to extract audio tracks on ATAPI drives, as described in Section 19.5.5, “Duplicating Audio CDs”.
Lame is a popular
MP3 encoder which can be installed from the
audio/lame port. Due to
licensing restrictions, a package is not available.
The following command will convert the ripped
WAV files
to
audio01.wav:audio01.mp3
# lame -h -b 128 \
--tt "Foo Song Title" \
--ta "FooBar Artist" \
--tl "FooBar Album" \
--ty "2001" \
--tc "Ripped and encoded by Foo" \
--tg "Genre" \
audio01.wav audio01.mp3128 kbits is a standard MP3
bitrate. The 160 and 192 bitrates provide higher quality.
The higher the bitrate, the larger the size of the resulting
MP3. -h turns on the
“higher quality but a little slower” mode. The
options beginning with --t indicate ID3 tags,
which usually contain song information, to be embedded within
the MP3 file. Additional encoding options
can be found in the lame manual
page.
In order to burn an audio CD from MP3s, they must first be converted to a non-compressed WAV format. Both XMMS and mpg123 support the output of MP3 to an uncompressed file format.
Writing to Disk in XMMS:
Launch XMMS.
Right-click the window to bring up the XMMS menu.
Select Preferences under
Options.
Change the Output Plugin to “Disk Writer Plugin”.
Press Configure.
Enter or browse to a directory to write the uncompressed files to.
Load the MP3 file into XMMS as usual, with volume at 100% and EQ settings turned off.
Press Play. The
XMMS will appear as if it is
playing the MP3, but no music will be
heard. It is actually playing the MP3
to a file.
When finished, be sure to set the default Output Plugin back to what it was before in order to listen to MP3s again.
Writing to stdout in mpg123:
Run mpg123 -s
audio01.mp3 >
audio01.pcm
XMMS writes a file in the
WAV format, while
mpg123 converts the
MP3 into raw PCM audio data. Both of these
formats can be used with cdrecord
to create audio CDs, whereas burncd(8) requires a raw
Pulse-Code Modulation (PCM). When using
WAV files, there will be a small tick
sound at the beginning of each track. This sound is the
header of the WAV file. One can remove the
header with SoX, which can be
installed from the audio/sox port or package:
% sox -t wav -r 44100 -s -w -c 2 track.wav track.rawRefer to Section 19.5, “Creating and Using CD Media” for more information on using a CD burner in FreeBSD.
Before configuring video playback, determine the model of the video card and the chip it uses. While Xorg supports a wide variety of video cards, fewer give good playback performance. To obtain a list of extensions supported by the Xorg server using the card, run xdpyinfo(1) while Xorg is running.
It is a good idea to have a short MPEG test file for
evaluating various players and options. Since some DVD
applications look for DVD media in /dev/dvd by default, or have this
device name hardcoded in them, it might be useful to make
symbolic links to the proper devices:
# ln -sf /dev/acd0 /dev/dvd
# ln -sf /dev/acd0 /dev/rdvdDue to the nature of devfs(5), manually created links
will not persist after a system reboot. In order to create the
symbolic links automatically when the system boots, add the
following lines to /etc/devfs.conf:
DVD decryption invokes special DVD-ROM functions and requires write permission on the DVD devices.
To enhance the shared memory Xorg interface, it is recommended to increase the values of these sysctl(8) variables:
There are several possible ways to display video under Xorg. What works is largely hardware dependent. Each method described below will have varying quality across different hardware.
Common video interfaces include:
Xorg: normal output using shared memory.
XVideo: an extension to the Xorg interface which supports video in any drawable object.
SDL: the Simple Directmedia Layer.
DGA: the Direct Graphics Access.
SVGAlib: low level console graphics layer.
Xorg has an extension called XVideo, also known as Xvideo, Xv, and xv. It allows video to be directly displayed in drawable objects through a special acceleration. This extension provides good quality playback even on low-end machines.
To check whether the extension is running, use
xvinfo:
% xvinfoXVideo is supported for the card if the result looks like:
The formats listed, such as YUV2 and YUV12, are not present with every implementation of XVideo and their absence may hinder some players.
If the result looks like:
XVideo is probably not supported for the card. This means that it will be more difficult for the display to meet the computational demands of rendering video. Depending on the video card and processor, one might still be able to have a satisfying experience.
The Simple Directmedia Layer, SDL, is a porting layer for many operating systems allowing cross-platform applications to be developed which make efficient use of sound and graphics. The SDL layer provides a low-level abstraction to the hardware which can sometimes be more efficient than the Xorg interface.
SDL can be installed using the devel/sdl12 package or port.
DGA is an
Xorg extension which allows a
program to bypass the Xorg server
and directly alter the framebuffer. Because it relies on a low
level memory mapping, programs using it must be run as
root.
The DGA extension can be tested and
benchmarked using dga(1). When dga is
running, it changes the colors of the display whenever a key is
pressed. To quit, press q.
This section introduces some of the software available from the FreeBSD Ports Collection which can be used for video playback.
Many of the video applications which run on FreeBSD were developed as Linux® applications. Many of these applications are still beta-quality. Some of the problems commonly encountered with video packages on FreeBSD include:
An application cannot playback a file which another application produced.
An application cannot playback a file which the application itself produced.
The same application on two different machines, rebuilt on each machine for that machine, plays back the same file differently.
A seemingly trivial filter, like rescaling of the image size, results in bad artifacts from a buggy rescaling routine.
An application frequently dumps core.
Documentation is not installed with the port and can be
found either on the web or under the port's work
directory.
Many applications may also exhibit “Linux®-isms”. There may be issues resulting from the way some standard libraries are implemented in the Linux® distributions, or some features of the Linux® kernel which have been assumed by the authors of the applications. These issues are not always noticed and worked around by the port maintainers, which can lead to problems like these:
The use of /proc/cpuinfo to detect
processor characteristics.
A misuse of threads which causes a program to hang upon completion instead of truly terminating.
Relies on software which is not yet available in the FreeBSD Ports Collection.
MPlayer is a command-line video player with an optional graphical interface which aims to provide speed and flexibility. This application, as well as other graphical front-ends, is available from the FreeBSD Ports Collection.
MPlayer is available as a
package or port in multimedia/mplayer. Several
compile options are available and a variety of hardware
checks occur during the build process. For these reasons,
some users prefer to build the port rather than install the
package. The available options will be displayed in a
menu after these commands are input:
# cd /usr/ports/multimedia/mplayer
# makeThe menu options should be reviewed to determine the type of support to compile into the port. If an option is not selected, MPlayer will not be able to display that type of video format. Use the arrow keys and spacebar to select the required formats. When finished, press Enter to continue the port compile and installation.
By default, this package or port will build the
mplayer command line utility and the
gmplayer graphical utility. To encode
videos, install the multimedia/mencoder port. Due
to licensing restrictions, a package is not available for
MEncoder.
The first time MPlayer is
run, it will create ~/.mplayer in the user's
home directory. This subdirectory contains default versions
of the user-specific configuration files.
This section describes only a few common uses. Refer
to the mplayer manual page for a complete
description of its numerous options.
To play the file
,
specify the video interfaces with
testfile.avi-vo:
% 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.aviIt is worth trying all of these options, as their relative performance depends on many factors and will vary significantly with hardware.
To play a DVD, replace the
with testfile.avidvd://, where
N -dvd-device
DEVICEN is the title number to play
and
is the device node for the DVD-ROM. For example, to play
title 3 from DEVICE/dev/dvd:
# mplayer -vo xv dvd://3 -dvd-device /dev/dvdThe default DVD device can be defined during the build
of the MPlayer port by
including the
WITH_DVD_DEVICE=/path/to/desired/device
option. By default, the device is
/dev/acd0. More details can be found
in the port's
Makefile.options.
To stop, pause, advance, and so on, consult the
keybindings, which are displayed by running mplayer
-h, or read the manual page.
Additional playback options include
-fs -zoom, which engages fullscreen mode,
and -framedrop, which helps
performance.
Each user can add commonly used options to their
~/.mplayer/config like so:
mplayer can be used to rip a DVD
title to a .vob. To dump the second
title from a DVD:
# mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvdThe output file, out.vob, will be
MPEG and can be manipulated by the other packages described
in this section.
The MPlayer documentation is technically informative and should be consulted by anyone wishing to obtain a high level of expertise with UNIX® video. The MPlayer mailing list is hostile to anyone who has not bothered to read the documentation, so before making a bug report, read the documentation first.
Before using mencoder, it is a good
idea to become familiar with the options described in the
HTML
documentation. There are innumerable ways to
improve quality, lower bitrate, and change formats, and some
of these options may make the difference between good or bad
performance. Improper combinations of command line options
can yield output files that are unplayable even by
mplayer.
Here is an example of a simple copy:
% mencoder input.avi -oac copy -ovc copy -o output.aviTo rip to a file, use -dumpfile with
mplayer.
To convert
to the MPEG4 codec with MPEG3 audio encoding, first install
the input.aviaudio/lame port.
Due to licensing restrictions, a package is not available.
Once installed, type:
% mencoder input.avi -oac mp3lame -lameopts br=192 \
-ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.aviThis will produce output playable by applications such
as mplayer and
xine.
can be replaced with input.avidvd://1 -dvd-device
/dev/dvd and run as root
to re-encode a DVD title directly. Since it may take a few
tries to get the desired result, it is recommended to dump
the title to a file and to work on the file.
xine is a video player with a
reusable base library and a modular executable which can be
extended with plugins. It can be installed using the
multimedia/xine package or
port.
In practice, xine requires either a fast CPU with a fast video card, or support for the XVideo extension. The xine video player performs best on XVideo interfaces.
By default, the xine player starts a graphical user interface. The menus can then be used to open a specific file.
Alternatively, xine may be invoked to play a file immediately without the graphical interface:
% xineAlternatively, it may be invoked to play a file immediately without the GUI with the command:
% xine -g -p mymovie.aviThe xine HOWTO contains a chapter on performance improvement which is general to all players.
transcode provides a suite of
tools for re-encoding video and audio files.
transcode can be used to merge
video files or repair broken files using command line tools
with stdin/stdout stream
interfaces.
transcode can be installed
using the multimedia/transcode package or
port. Many users prefer to compile the port as it provides a
menu of compile options for specifying the support and codecs
to compile in. If an option is not selected,
transcode will not be able to
encode that format. Use the arrow keys and spacebar to select
the required formats. When finished, press
Enter to continue the port compile and
installation.
This example demonstrates how to convert a DivX file into a PAL MPEG-1 file (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.mpaThe resulting MPEG file,
,
is ready to be played with MPlayer.
The file can be burned on a CD-R media to create a Video CD. In
this, install and use the output_vcd.mpgmultimedia/vcdimager and sysutils/cdrdao programs.
In addition to the manual page for
transcode, refer to the transcode
wiki for further information and examples.
TV cards allow can be used to watch broadcast or cable TV on a computer. Most cards accept composite video via an RCA or S-video input and some cards include a FM radio tuner.
FreeBSD provides support for PCI-based TV cards using a Brooktree Bt848/849/878/879 or a Conexant CN-878/Fusion 878a video capture chip with the bktr(4) driver. Ensure the board comes with a supported tuner. Consult bktr(4) for a list of supported tuners.
In order to use the card, the bktr(4) driver must be
loaded. To automate this at boot time, add the following line
to /boot/loader.conf:
Alternatively, one can statically compile support for the TV card into a custom kernel. In that case, add the following lines to the custom kernel configuration file:
These additional devices are necessary as the card components are interconnected via an I2C bus. Then, build and install a new kernel.
To test the driver, reboot the system. The TV card should appear in the boot messages, as seen in this example:
The messages will differ according to the hardware. Check the messages to determine if the tuner is correctly detected. It is still possible to override some of the detected parameters with sysctl(8) MIBs and kernel configuration file options. For example, to force the tuner to a Philips SECAM tuner, add the following line to a custom kernel configuration file:
or, use sysctl(8):
# sysctl hw.bt848.tuner=6Refer to bktr(4) and
/usr/src/sys/conf/NOTES for more
details on the available options.
To use the TV card, install one of the following applications:
multimedia/fxtv
provides TV-in-a-window and image/audio/video capture
capabilities.
multimedia/xawtv
is another TV application with similar features.
audio/xmradio
provides an application for using the FM radio tuner of a
TV card.
More applications are available in the FreeBSD Ports Collection.
If any problems are encountered with the TV card, check that the video capture chip and the tuner are supported by bktr(4) and that the right configuration options were used. For more support and various questions about TV cards, refer to the archives of the freebsd-multimedia mailing list.
MythTV is a popular, open source PVR application. This section demonstrates how to install and setup MythTV on FreeBSD. Refer to the MythTV wiki for more information on how to use MythTV.
MythTV requires a frontend and a backend; however, it allows the user to have the frontend and backend on different machines.
For the frontend, multimedia/mythtv-frontend is
required, as well as an X server, which can be found in
x11/xorg. Ideally, the
frontend computer also has a video card that supports XvMC and,
optionally, a LIRC-compatible remote.
For the backend, multimedia/mythtv is required,
along with the MySQL™ database server. Optionally a tuner
and storage for any recorded data. The MySQL™ package should
be automatically installed as a dependency when installing
multimedia/mythtv.
MythTV is designed to utilize V4L to access video input
devices such as encoders and tuners. At this time, MythTV
works best with USB DVB-S/C/T cards supported by multimedia/webcamd, as it provides
a V4L userland application.
Any DVB
card supported by webcamd should
work with MythTV. A list of known working cards can be
found here.
Drivers are also available for Hauppauge cards in the
following ports: multimedia/pvr250 and multimedia/pvrxxx, but they
provide a non-standard driver interface that does not work
with versions of MythTV greater than 0.23. Due to licensing
restrictions, no packages are available and these two ports
must be compiled.
The HTPC wiki page contains a list of all available DVB drivers.
To install the MythTV port:
# cd /usr/ports/multimedia/mythtv
# make installOnce installed, set up the MythTV database:
# mysql -uroot -p < /usr/local/share/mythtv/database/mc.sqlConfigure the backend:
# mythtv-setupStart the backend:
# echo 'mythbackend_enable="YES"' >> /etc/rc.conf
# service mythbackend startIn FreeBSD, access to image scanners is provided by the SANE (Scanner Access Now Easy) API available through the FreeBSD Ports Collection. SANE will also use some FreeBSD device drivers to provide access to the scanner hardware.
FreeBSD supports both SCSI and USB scanners. Be sure the scanner is supported by SANE prior to performing any configuration. Refer to the supported devices list for more information about supported scanners.
Both SCSI and USB interfaces are supported. Depending upon the scanner interface, different device drivers are required.
The GENERIC kernel by default
includes the device drivers needed to support USB scanners.
Users with a custom kernel should ensure that the following
lines are present in the custom kernel configuration
file:
Plug in the USB scanner. Use dmesg(8) to determine whether the scanner appears in the system message buffer:
These messages indicate that the scanner is using
either /dev/ugen0.2 or
/dev/uscanner0, depending on the FreeBSD
version. For this example, a
EPSON
Perfection® 1650 USB scanner was used.
If the scanner uses a SCSI interface, it is important to
know which SCSI controller board it will use. Depending
upon the SCSI chipset, a custom kernel configuration file
may be needed. The GENERIC kernel
supports the most common SCSI controllers. Refer to
/usr/src/sys/conf/NOTES to determine
the correct line to add to a custom kernel configuration
file. In addition to the SCSI adapter driver, the following
lines are needed in the kernel configuration file:
Verify that the device is displayed in the system message buffer:
If the scanner was not powered-on at system boot, it is still possible to manually force the detection by performing a SCSI bus scan with the camcontrol(8) command:
# 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 successfulThe scanner should now appear in the SCSI devices list:
# 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)Refer to scsi(4) and camcontrol(8) for more details about SCSI devices on FreeBSD.
The SANE system is split in two
parts: the backends (graphics/sane-backends) and the
frontends (graphics/sane-frontends). The
backends provide access to the scanner. The
SANE's supported
devices list specifies which backend will support the
image scanner. The correct backend is needed in order to use
the scanner. The frontends provide the graphical scanning
interface, xscanimage.
After installing the graphics/sane-backends port or
package, use sane-find-scanner to check the
scanner detection by the
SANE system:
# sane-find-scanner -q
found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3The output should show the interface type of the scanner and the device node used to attach the scanner to the system. The vendor and the product model may or may not appear.
Some USB scanners require firmware to be loaded. Refer to sane-find-scanner(1) and sane(7) for details.
Next, check if the scanner will be identified by a
scanning frontend. By default, the
SANE backends come with a command
line tool called scanimage(1). This command can be used
to list the devices and perform an image acquisition. Use
-L to list the scanner devices:
# scanimage -L
device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scannerHere is the output for the USB scanner used in Section 8.7.1.1, “USB Interface”:
# scanimage -L
device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scannerIn this output,
'epson2:libusb:/dev/usb:/dev/ugen0.2' is
the backend name (epson2) and the device
node (/dev/ugen0.2) used by the
scanner.
No output or a message saying that no scanners were
identified indicates that scanimage(1) is unable to
identify the scanner. If this happens, edit the backend
configuration file in /usr/local/etc/sane.d/
and define the scanner device used.
In the above example, the USB scanner is perfectly detected and working.
To determine if the scanner is correctly identified:
# 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).Since the scanner is not identified, edit
/usr/local/etc/sane.d/epson2.conf. In
this example, the scanner model is
EPSON
Perfection® 1650 and it uses the
epson2 backend. When editing, read the
help comments in the backend configuration file. Line
changes are simple: comment out all lines that have the
wrong interface for the scanner. In this example, comment
out all lines starting with the word scsi
as the scanner uses the USB interface. Then, at the end
of the file, add a line specifying the interface and the
device node used. In this case, add the following
line:
Save the edits and verify that the scanner is identified:
# scanimage -L
device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scannerThe `epson:/dev/uscanner0' field now
gives the right backend name and the device node.
Once scanimage -L sees the scanner, the
configuration is complete and the device is now ready to
scan.
While scanimage(1) can be used to perform an image
acquisition from the command line, it is often preferable to
use a graphical interface to perform image scanning. The
graphics/sane-frontends
package or port installs a simple but efficient graphical
interface, xscanimage.
Xsane, which is installed with
the graphics/xsane package
or port, is another popular graphical scanning frontend. It
offers advanced features such as various scanning modes, color
correction, and batch scans. Both of these applications are
usable as a GIMP plugin.
In order to have access to the scanner, a user needs
read and write permissions to the device node used by the
scanner. In the previous example, the USB scanner uses the
device node /dev/ugen0.2 which is really a
symlink to the real device node
/dev/usb/0.2.0. The symlink and the device
node are owned, respectively, by the
wheel and
operator groups. Adding the user to
these groups will allow access to the scanner. However, for
security reasons, always think twice before adding a user
to any group, especially wheel. A better
solution is to create a group to make the scanner device
accessible to members of this group.
This example creates a group called
using
pw(8):usb
# pw groupadd usbThen, make the /dev/ugen0.2 symlink
and the /dev/usb/0.2.0 device node
accessible to the usb group with write
permissions of (0660 or
0664. All of this is done by adding the
following lines to
/etc/devfs.rules:
Finally, add the users to
in order
to allow access to the scanner:usb
# pw groupmod usb -m joeFor more details refer to pw(8).
The kernel is the core of the FreeBSD operating system. It is responsible for managing memory, enforcing security controls, networking, disk access, and much more. While much of FreeBSD is dynamically configurable, it is still occasionally necessary to configure and compile a custom kernel.
After reading this chapter, you will know:
When to build a custom kernel.
How to customize a kernel configuration file.
How to use the kernel configuration file to create and build a new kernel.
How to install the new kernel.
How to troubleshoot if things go wrong.
All of the commands listed in the examples in this chapter
should be executed as root.
Traditionally, FreeBSD used a “monolithic” kernel. The kernel was one large program, supported a fixed list of devices, and in order to change the kernel's behavior, one had to compile a new kernel, and then reboot into the new kernel.
Today, most of the functionality in the FreeBSD kernel is contained in modules which can be dynamically loaded and unloaded from the kernel as necessary. This allows the running kernel to adapt immediately to new hardware or for new functionality to be brought into the kernel. This is known as a modular kernel.
Occasionally, it is still necessary to perform static kernel configuration. This may be because the functionality is so tied to the kernel that it can not be made dynamically loadable. Some security environments prevent the loading and unloading of kernel modules, and require that only needed functionality is statically compiled into the kernel.
Building a custom kernel is often a rite of passage for
advanced BSD users. This process, while time consuming, can
provide benefits to the FreeBSD system. Unlike the
GENERIC kernel, which must support a wide
range of hardware, a custom kernel can be stripped down to only
provide support for that computer's hardware. This has a number
of benefits, such as:
Faster boot time. Since the kernel will only probe the hardware on the system, the time it takes the system to boot can decrease.
Lower memory usage. A custom kernel often uses less
memory than the GENERIC kernel by
omitting unused features and device drivers. This is
important because the kernel code remains resident in
physical memory at all times, preventing that memory from
being used by applications. For this reason, a custom
kernel is useful on a system with a small amount of
RAM.
Additional hardware support. A custom kernel can add in
support for devices which are not present in the
GENERIC kernel.
Before venturing into kernel configuration, it would be wise to get an inventory of the machine's hardware. In cases where FreeBSD is not the primary operating system, the inventory list can be created by viewing the current operating system configuration. For example, Microsoft®'s Device Manager contains information about installed devices.
Some versions of Microsoft® Windows® have a System icon which will display a screen where Device Manager may be accessed.
If another operating system does not exist on the machine, the administrator must find this information out manually. One method is using dmesg(8) and man(1). Most device drivers on FreeBSD have a manual page, listing supported hardware. During the boot probe, found hardware will be listed. For example, the following lines indicate that the psm(4) driver found a mouse:
This driver will need to be included in the custom kernel configuration file or loaded using loader.conf(5).
On occasion, the data from dmesg will
only show system messages instead of the boot probe output. In
these situations, the output may be obtained by reading
/var/run/dmesg.boot.
Another method for finding hardware is to use pciconf(8) which provides more verbose output. For example:
This output, obtained by using
pciconf , shows that the
-lvath driver located a wireless Ethernet
device. Type man
to read
ath(4).ath
The -k flag, when passed to man(1)
can be used to provide useful information. For example, to
display a list of manual pages which contain the specified
word:
# man -k AtherosArmed with a hardware inventory list, the process of building a custom kernel should appear less daunting.
Before building a custom kernel, consider the reason for doing so. If there is a need for specific hardware support, it may already exist as a module.
Kernel modules exist in /boot/kernel and may be
dynamically loaded into the running kernel using
kldload(8). Most, if not all kernel drivers have a
loadable module and manual page. For example, the ath(4)
wireless Ethernet driver has the following information in its
manual page:
Adding if_ath_load="YES" to
/boot/loader.conf will enable loading this
module dynamically at boot time.
In some cases, there is no associated module. This is mostly true for certain subsystems. One way to tell if a driver is available is to check for the module itself.
It is easy to remove support for a device or option and end up with a broken kernel. For example, if the ata(4) driver is removed from the kernel configuration file, a system using ATA disk drivers may not boot. When in doubt, just leave support in the kernel.
It is required to have the full FreeBSD source tree installed to build the kernel.
The kernel build is located at /usr/src/sys. It contains a
number of subdirectories representing different parts of the
kernel. These include ,
which contains the kernel configuration file, and
arch/confcompile, which is the
staging area where the kernel will be built.
arch contains subdirectories for each
supported architecture: i386, amd64, ia64, powerpc, sparc64, and pc98. Everything inside a
particular architecture's directory deals with that architecture
only and the rest of the code is machine independent code common
to all platforms. Notice the logical organization of the
directory structure, with each supported device, file system,
and option in its own subdirectory.
The examples in this chapter assume the i386 architecture. If the system has a different architecture, change the path names accordingly.
If /usr/src/ does
not exist or it is empty, source has not been installed. The
easiest way to install source is to use
svn as described in Section A.5, “Using Subversion”. One should also create a symlink to
/usr/src/sys/:
# ln -s /usr/src/sys /sysNext, cd to
and copy the arch/confGENERIC configuration file to
the name of the custom kernel. For example:
# cd /usr/src/sys/i386/conf
# cp GENERIC MYKERNELTraditionally, this name is in all capital letters. When
maintaining multiple FreeBSD machines with different hardware, it
is a good idea to name it after the machine's hostname. This
example uses
.MYKERNEL
When finished customizing the kernel configuration file,
save a backup copy to a location outside of /usr/src. Do not edit
GENERIC directly.
Alternately, keep the kernel configuration file elsewhere
and create a symbolic link to the file in .i386
For example:
# cd /usr/src/sys/i386/conf
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNELEdit
with a text editor. The default editor is
vi, whose usage is covered well in
many books in the bibliography. An easier editor
for beginners, called ee, is also
available. Feel free to change the comment lines at the top to
reflect the configuration or the changes made to differentiate
it from MYKERNELGENERIC.
If the GENERIC configuration file seems
overwhelming, follow the descriptions in the Configuration File
section slowly and carefully.
After syncing the source tree
with the latest sources, always read
/usr/src/UPDATING
before performing any update steps. This file describes any
important issues or areas requiring special attention within
the updated source code.
/usr/src/UPDATING always matches
the version of the FreeBSD source and contains more up-to-date
information than this Handbook.
After saving the edits, compile the source code for the kernel.
It is required to have the full FreeBSD source tree installed to build the kernel.
cd to /usr/src:
# cd /usr/srcCompile the new kernel by specifying the name of the custom kernel configuration file:
# make buildkernel KERNCONF=MYKERNELInstall the new kernel:
# make installkernel KERNCONF=MYKERNELBy default, when a custom kernel is compiled,
all kernel modules are rebuilt as well.
To update a kernel faster or to build only custom modules,
edit /etc/make.conf before starting to
build the kernel:
This variable specifies the list of modules to build instead the default of building of all of them.
This variable sets up a list of top level modules to exclude from the build process. For other available variables, refer to make.conf(5).
The new kernel will be copied to /boot/kernel as
/boot/kernel/kernel and the old kernel
will be moved to /boot/kernel.old/kernel.
Now, shutdown the system and reboot into the new kernel.
If something goes wrong, refer to the troubleshooting
instructions and the section which explains how to
recover when the new kernel does not boot.
Other files relating to the boot process, such as the boot
loader(8) and configuration, are stored in /boot. Third party or
custom modules can be placed in /boot/kernel, although users
should be aware that keeping modules in sync with the compiled
kernel is very important. Modules not intended to run with
the compiled kernel may result in instability.
The general format of a configuration file is quite simple.
Each line contains a keyword and one or more arguments. For
simplicity, most lines only contain one argument. Anything
following a # is considered a comment and
ignored. The following sections describe each keyword, in
the order they are listed in GENERIC.
For an exhaustive list of architecture dependent options and
devices, refer to NOTES in the same
directory as GENERIC for that architecture.
For architecture independent options, refer to
/usr/src/sys/conf/NOTES.
An include directive is available for use
in configuration files. This allows another configuration file
to be included in the current one, making it easy to maintain
small changes relative to an existing file. For example, if
only a small number of additional options or drivers are
required, this allows a delta to be maintained with respect
to GENERIC:
Using this method, the local configuration file expresses
local differences from a GENERIC
kernel. As upgrades are performed, new features added to
GENERIC will be also be added to the local
kernel unless they are specifically prevented using
nooptions or nodevice.
A comprehensive list of configuration directives and their
descriptions may be found in config(5).
The remainder of this chapter addresses the contents of a typical configuration file and the role various options and devices play.
To build a file which contains all available options,
run the following command as root:
# cd /usr/src/sys/i386/conf && make LINTThe following is an example of the
GENERIC kernel configuration file with
various additional comments where needed for clarity. This
example should match the copy in
/usr/src/sys/
fairly closely.i386/conf/GENERIC
This is the machine architecture. It must be either
amd64, i386,
ia64, pc98,
powerpc, or
sparc64.
This option specifies the type of CPU. It is fine to have
multiple instances of the CPU entries, but for a custom kernel
it is best to specify the CPU. To determine the CPU type,
review the boot messages in
/var/run/dmesg.boot.
This is the identification of the kernel. Change
this to the new kernel name, such as
.
The value in the MYKERNELident string will
print when the kernel boots.
device.hints(5) is used to configure options for device
drivers. The default location is
/boot/device.hints. The
hints option compiles these hints statically
into the kernel so that there is no need to create
/boot/device.hints.
This option enables debugging information when passed to gcc(1).
The default system scheduler for FreeBSD. Keep this.
Allows kernel threads to be preempted by higher priority threads. This helps with interactivity and allows interrupt threads to run sooner rather than waiting.
Networking support. This is mandatory as most programs require at least loopback networking.
This enables the IPv6 communication protocols.
This is the basic hard drive file system. Leave it in if the system boots from the hard disk.
This option enables Soft Updates in the kernel which helps
to speed up write access on the disks. Even when this
functionality is provided by the kernel, it must be turned on
for specific disks. Review the output of mount(8) to
determine if Soft Updates is enabled. If the
soft-updates option is not in the output, it
can be activated using tunefs(8) for existing file systems
or newfs(8) for new file systems.
This option enables kernel support for access control lists (ACLs). This relies on the use of extended attributes and UFS2, and the feature is described in detail in Section 15.11, “Filesystem Access Control Lists (ACL)s”. ACLs are enabled by default and should not be disabled in the kernel if they have been used previously on a file system, as this will remove the ACLs, changing the way files are protected in unpredictable ways.
This option includes functionality to speed up disk operations on large directories, at the expense of using additional memory. Keep this for a large server or interactive workstation, and remove it from smaller systems where memory is at a premium and disk access speed is less important, such as a firewall.
This option enables support for a memory backed virtual disk used as a root device.
The network file system (NFS). These lines can be commented unless the system needs to mount partitions from a NFS file server over TCP/IP.
The MS-DOS® file system. Unless the system needs to mount
a DOS formatted hard drive partition at boot time, comment this
out. It will be automatically loaded the first time a DOS
partition is mounted. The emulators/mtools package allows
access to DOS floppies without having to mount and unmount
them and does not require MSDOSFS.
The ISO 9660 file system for CDROMs. Comment it out if the system does not have a CDROM drive or only mounts data CDs occasionally since it will be dynamically loaded the first time a data CD is mounted. Audio CDs do not need this file system.
The process file system. This is a “pretend”
file system mounted on /proc which allows some programs
to provide more information on what processes are running. Use
of PROCFS is not required under most
circumstances, as most debugging and monitoring tools have been
adapted to run without PROCFS. The default
installation will not mount this file system by default.
Kernels making use of PROCFS must
also include support for PSEUDOFS.
Adds support for GUID Partition Tables (GPT). GPT provides the ability to have a large number of partitions per disk, 128 in the standard configuration.
Compatibility with 4.3BSD. Leave this in as some programs will act strangely if this is commented out.
This option is required to support applications compiled on older versions of FreeBSD that use older system call interfaces. It is recommended that this option be used on all i386™ systems that may run older applications. Platforms that gained support after FreeBSD 4.X, such as ia64 and SPARC64®, do not require this option.
This option is required to support applications compiled on FreeBSD 5.X versions that use FreeBSD 5.X system call interfaces.
This option is required to support applications compiled on FreeBSD 6.X versions that use FreeBSD 6.X system call interfaces.
This option is required on FreeBSD 8 and above to support applications compiled on FreeBSD 7.X versions that use FreeBSD 7.X system call interfaces.
This causes the kernel to pause for 5 seconds before probing each SCSI device in the system. If the system only has IDE hard drives, ignore this or lower the number to speed up booting. However, if FreeBSD has trouble recognizing the SCSI devices, the number will have to be raised again.
This enables kernel process tracing, which is useful in debugging.
This option provides for System V shared memory. The most common use of this is the XSHM extension in X, which many graphics-intensive programs will automatically take advantage of for extra speed. If Xorg is installed, include this.
Support for System V messages. This option only adds a few hundred bytes to the kernel.
Support for System V semaphores. Less commonly used, but only adds a few hundred bytes to the kernel.
Using -p with ipcs(1) will list any
processes using each of these System V facilities.
Real-time extensions added in the 1993 POSIX®. Certain applications in the Ports Collection use these.
This option is required to allow the creation of keyboard
device nodes in /dev.
This device enables the use of the I/O APIC for interrupt
delivery. It can be used in both uni-processor and SMP kernels,
but is required for SMP kernels. Add options
SMP to include support for multiple
processors.
This device exists only on the i386 architecture and this configuration line should not be used on other architectures.
Include this for systems with an EISA motherboard. This enables auto-detection and configuration support for all devices on the EISA bus.
Include this for systems with a PCI motherboard. This enables auto-detection of PCI cards and gatewaying from the PCI to ISA bus.
This is the floppy drive controller.
This driver supports all ATA and ATAPI devices. Only
one device ata line is needed for the kernel
to detect all PCI ATA/ATAPI devices on modern machines.
This is needed along with device ata for
ATA disk drives.
This is needed along with device ata
for ATA RAID drives.
This is needed along with device ata
for ATAPI CDROM drives.
This is needed along with device ata for
ATAPI floppy drives.
This is needed along with device ata for
ATAPI tape drives.
This makes the controller number static. Without this, the device numbers are dynamically allocated.
In this section, comment out any SCSI controllers not on
the system. For an IDE only system, these lines can be removed.
The *_REG_PRETTY_PRINT lines are
debugging options for their respective drivers.
Comment out any SCSI peripherals not on the system. If the system only has IDE hardware, these lines can be removed completely.
The USB umass(4) driver and a few other drivers use the SCSI subsystem even though they are not real SCSI devices. Do not remove SCSI support if any such drivers are included in the kernel configuration.
Supported RAID controllers. If the system does not have any of these, comment them out or remove them.
The atkbdc keyboard controller provides
I/O services for the AT keyboard and PS/2 style pointing
devices. This controller is required by atkbd(4) and
psm(4).
The atkbd(4) driver, together with the atkbdc(4) controller, provides access to the AT 84 keyboard or the AT enhanced keyboard which is connected to the AT keyboard controller.
Use this device if the mouse plugs into the PS/2 mouse port.
Basic support for keyboard multiplexing. If the system does not use more than one keyboard, this line can be safely removed.
The vga(4) video card driver.
Required by the boot splash screen and screen savers.
sc(4) is the default console driver and resembles a SCO
console. Since most full-screen programs access the console
through a terminal database library like
termcap, it should not matter whether
this or vt, the
VT220 compatible console driver, is used.
When a user logs in, the TERM variable can be set
to scoansi if full-screen programs have
trouble running under this console.
This is a VT220-compatible console driver, backward
compatible to VT100/102. It works well on some laptops which
have hardware incompatibilities with sc.
Users may need to set TERM to
vt100 or vt220 after
login. This driver is useful when connecting to a large number
of different machines over the network, where
termcap or terminfo
entries for the sc device are not
available as vt100 should be available
on virtually any platform.
Include this if the system has an AGP card. This will enable support for AGP and AGP GART for boards which have these features.
Timer device driver for power management events, such as APM and ACPI.
PCMCIA support. Keep this on laptop systems.
These are the serial ports referred to as
COM ports in Windows®.
If the system has an internal modem on
COM4 and a serial port at
COM2, change the IRQ of the modem to
2. For a multiport serial card, refer to sio(4) for more
information on the proper values to add to
/boot/device.hints. Some video cards,
notably those based on S3 chips, use I/O addresses in the
form of 0x*2e8. Since many cheap serial
cards do not fully decode the 16-bit I/O address space, they
clash with these cards, making the
COM4 port practically
unavailable.
Each serial port is required to have a unique IRQ and the
default IRQs for COM3 and
COM4 cannot be used. The exception
is multiport cards where shared interrupts are
supported.
This is the ISA bus parallel port interface.
Provides support for the parallel port bus.
Adds support for parallel port printers.
All three of the above are required to enable parallel printer support.
The general-purpose I/O (“geek port”) + IEEE1284 I/O.
This is for an Iomega Zip drive. It requires
scbus and da support.
Best performance is achieved with ports in EPP 1.9 mode.
Uncomment this device if the system has a “dumb” serial or parallel PCI card that is supported by the puc(4) glue driver.
Various PCI network card drivers. Comment out or remove any of these which are not present in the system.
MII bus support is required for some PCI 10/100 Ethernet
NICs, namely those which use MII-compliant transceivers or
implement transceiver control interfaces that operate like an
MII. Adding device miibus to the kernel
config pulls in support for the generic miibus API and all of
the PHY drivers, including a generic one for PHYs that are not
specifically handled by an individual driver.
Drivers that use the MII bus controller code.
ISA Ethernet drivers. See
/usr/src/sys/
for details of which cards are supported by which driver.i386/conf/NOTES
Generic 802.11 support. This line is required for wireless networking.
Crypto support for 802.11 devices. These lines are needed on systems which use encryption and 802.11i security protocols.
Support for various wireless cards.
This is the generic loopback device for TCP/IP. This is mandatory.
Cryptographically secure random number generator.
ether is only needed if the system has
an Ethernet card. It includes generic Ethernet protocol
code.
sl provides SLIP support. This has been
almost entirely supplanted by PPP, which is easier to set up,
better suited for modem-to-modem connection, and more
powerful.
This is for kernel PPP support for dial-up connections.
There is also a version of PPP implemented as a userland
application that uses tun and offers more
flexibility and features such as demand dialing.
This is used by the userland PPP software. See the PPP section of the Handbook for more information.
This is a “pseudo-terminal” or simulated
login port. It is used by incoming telnet
and rlogin sessions,
xterm, and some other applications
such as Emacs.
Memory disk pseudo-devices.
This implements IPv6 over IPv4 tunneling, IPv4 over IPv6
tunneling, IPv4 over IPv4 tunneling, and IPv6 over IPv6
tunneling. The gif device is
“auto-cloning”, and will create device nodes as
needed.
This pseudo-device captures packets that are sent to it and diverts them to the IPv4/IPv6 translation daemon.
The Berkeley Packet Filter pseudo-device allows network interfaces to be placed in promiscuous mode, capturing every packet on a broadcast network such as an Ethernet network. These packets can be captured to disk and or examined using tcpdump(1).
The bpf(4) device is also used by dhclient(8). If DHCP is used, leave this uncommented.
Support for various USB devices.
Support for various Firewire devices.
For more information and additional devices supported by
FreeBSD, see
/usr/src/sys/.i386/conf/NOTES
Large memory configuration machines require access to more than the 4 gigabyte limit on User+Kernel Virtual Address (KVA) space. Due to this limitation, Intel added support for 36-bit physical address space access in the Pentium® Pro and later line of CPUs.
The Physical Address Extension (PAE)
capability of the Intel® Pentium® Pro and later CPUs allows
memory configurations of up to 64 gigabytes. FreeBSD provides
support for this capability via the PAE
kernel configuration option, available in all current release
versions of FreeBSD. Due to the limitations of the Intel memory
architecture, no distinction is made for memory above or below
4 gigabytes. Memory allocated above 4 gigabytes is simply
added to the pool of available memory.
To enable PAE support in the kernel, add the following line to the kernel configuration file:
The PAE support in FreeBSD is only available for Intel® IA-32 processors. It should also be noted that the PAE support in FreeBSD has not received wide testing, and should be considered beta quality compared to other stable features of FreeBSD.
PAE support in FreeBSD has a few limitations:
A process is not able to access more than 4 gigabytes of virtual memory space.
Device drivers that do not use the bus_dma(9)
interface will cause data corruption in a
PAE enabled kernel and are not
recommended for use. For this reason, a
PAE kernel configuration file is
provided in FreeBSD which excludes all drivers not known to
work in a PAE enabled kernel.
Some system tunables determine memory resource usage
by the amount of available physical memory. Such
tunables can unnecessarily over-allocate due to the
large memory nature of a PAE system.
One such example is the
kern.maxvnodes sysctl, which controls
the maximum number of vnodes allowed in the kernel. It
is advised to adjust this and other such tunables to a
reasonable value.
It might be necessary to increase the kernel virtual
address (KVA) space or to reduce the
amount of specific kernel resource that is heavily used
in order to avoid KVA exhaustion.
The KVA_PAGES kernel option can be used
for increasing the KVA space.
For performance and stability concerns, it is advised to consult tuning(7). pae(4) contains up-to-date information on FreeBSD's PAE support.
There are four categories of trouble that can occur when building a custom kernel. They are:
config fails:If config(8) fails, it is probably a simple error. Fortunately, config(8) will print the line number that it had trouble with. For example, for this message:
Make sure the keyword on line 17 is typed correctly by
comparing it to the
GENERIC kernel or another
reference.
make fails:If make fails, it usually signals
an error in the kernel description which is not severe
enough for config(8) to catch. Review the
configuration, and if you still cannot resolve the
problem, send an email to the FreeBSD general questions mailing list with the
kernel configuration.
If the new kernel does not boot, or fails to recognize
devices, do not panic! Fortunately, FreeBSD has an excellent
mechanism for recovering from incompatible kernels.
Simply choose the kernel to boot from at the FreeBSD boot
loader. This can be accessed when the system boot menu
appears by selecting the “Escape to a loader
prompt” option. At the prompt, type
boot
, or
the name of any other kernel that will boot properly.
When reconfiguring a kernel, it is always a good idea to
keep a kernel that is known to work on hand.kernel.old
After booting with a good kernel, check over the
configuration file and try to build it again. One helpful
resource is /var/log/messages which
records the kernel messages from every successful boot.
Also, dmesg(8) will print the kernel messages from
the current boot.
When troubleshooting a kernel, make sure to keep
GENERIC, or some other kernel that
is known to work, on hand as a different name that will
not get erased on the next build. Do not rely on
kernel.old because when installing
a new kernel, kernel.old is
overwritten with the last installed kernel which may
be non-functional. As soon as possible, move the
working kernel to the proper /boot/kernel
location or commands such as ps(1) may not work
properly. To do this, simply rename the directory
containing the good kernel:
# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.good /boot/kernelIf the kernel version differs from the one that the system utilities have been built with, for example, a -CURRENT kernel on a -RELEASE, many system status commands like ps(1) and vmstat(8) will not work. To fix this, recompile and install a world built with the same version of the source tree as the kernel. This is one reason why it is not a good idea to use a different version of the kernel than the rest of the operating system.
FreeBSD can be used to print with a wide variety of printers, from the oldest impact printer to the latest laser printers, and everything in between, allowing you to produce high-quality printed output from the applications you run.
FreeBSD can also be configured to act as a print server on a network; in this capacity FreeBSD can receive print jobs from a variety of other computers, including other FreeBSD computers, Windows® and Mac OS® hosts. FreeBSD will ensure that one job at a time is printed, and can keep statistics on which users and machines are doing the most printing, produce “banner” pages showing whose printout is whose, and more.
After reading this chapter, you will know:
How to configure the FreeBSD print spooler.
How to install print filters, to handle special print jobs differently, including converting incoming documents to print formats that your printers understand.
How to enable header, or banner pages on your printout.
How to print with printers connected to other computers.
How to print with printers connected directly to the network.
How to control printer restrictions, including limiting the size of print jobs, and preventing certain users from printing.
How to keep printer statistics, and account for printer usage.
How to troubleshoot printing problems.
Before reading this chapter, you should:
Know how to configure and install a new kernel (Chapter 9, Configuring the FreeBSD Kernel).
In order to use printers with FreeBSD you may set them up to work with the Berkeley line printer spooling system, also known as the LPD spooling system, or just LPD. It is the standard printer control system in FreeBSD. This chapter introduces LPD and will guide you through its configuration.
If you are already familiar with LPD or another printer spooling system, you may wish to skip to section Basic Setup.
LPD controls everything about a host's printers. It is responsible for a number of things:
It controls access to attached printers and printers attached to other hosts on the network.
It enables users to submit files to be printed; these submissions are known as jobs.
It prevents multiple users from accessing a printer at the same time by maintaining a queue for each printer.
It can print header pages (also known as banner or burst pages) so users can easily find jobs they have printed in a stack of printouts.
It takes care of communications parameters for printers connected on serial ports.
It can send jobs over the network to a LPD spooler on another host.
It can run special filters to format jobs to be printed for various printer languages or printer capabilities.
It can account for printer usage.
Through a configuration file
(/etc/printcap), and by providing the
special filter programs, you can enable the
LPD system to do all or some subset
of the above for a great variety of printer hardware.
The spooler still provides benefit on a single-user system and should be used because:
LPD prints jobs in the background; you do not have to wait for data to be copied to the printer.
LPD can conveniently run a job to be printed through filters to add date/time headers or convert a special file format (such as a TeX DVI file) into a format the printer will understand. You will not have to do these steps manually.
Many free and commercial programs that provide a print feature usually expect to talk to the spooler on your system. By setting up the spooling system, you will more easily support other software you may later add or already have.
To use printers with the LPD spooling system, you will need to set up both your printer hardware and the LPD software. This document describes two levels of setup:
See section Simple Printer Setup to learn how to connect a printer, tell LPD how to communicate with it, and print plain text files to the printer.
See section Advanced Printer Setup to learn how to print a variety of special file formats, to print header pages, to print across a network, to control access to printers, and to do printer accounting.
This section tells how to configure printer hardware and the LPD software to use the printer. It teaches the basics:
Section Hardware Setup gives some hints on connecting the printer to a port on your computer.
Section Software
Setup shows how to set up the
LPD spooler configuration
file (/etc/printcap).
If you are setting up a printer that uses a network protocol to accept data to print instead of a computer's local interfaces, see Printers With Networked Data Stream Interfaces.
Although this section is called “Simple Printer Setup”, it is actually fairly complex. Getting the printer to work with your computer and the LPD spooler is the hardest part. The advanced options like header pages and accounting are fairly easy once you get the printer working.
This section tells about the various ways you can connect a printer to your PC. It talks about the kinds of ports and cables, and also the kernel configuration you may need to enable FreeBSD to speak to the printer.
If you have already connected your printer and have successfully printed with it under another operating system, you can probably skip to section Software Setup.
Printers sold for use on PC's today generally come with one or more of the following three interfaces:
Serial interfaces, also known as RS-232 or COM ports, use a serial port on your computer to send data to the printer. Serial interfaces are common in the computer industry and cables are readily available and also easy to construct. Serial interfaces sometimes need special cables and might require you to configure somewhat complex communications options. Most PC serial ports have a maximum transmission rate of 115200 bps, which makes printing large graphic print jobs with them impractical.
Parallel interfaces use a parallel port on your computer to send data to the printer. Parallel interfaces are common in the PC market and are faster than RS-232 serial. Cables are readily available but more difficult to construct by hand. There are usually no communications options with parallel interfaces, making their configuration exceedingly simple.
Parallel interfaces are sometimes known as “Centronics” interfaces, named after the connector type on the printer.
USB interfaces, named for the Universal Serial Bus, can run at even faster speeds than parallel or RS-232 serial interfaces. Cables are simple and cheap. USB is superior to RS-232 Serial and to Parallel for printing, but it is not as well supported under UNIX® systems. A way to avoid this problem is to purchase a printer that has both a USB interface and a Parallel interface, as many printers do.
In general, Parallel interfaces usually offer just one-way communication (computer to printer) while serial and USB gives you two-way. Newer parallel ports (EPP and ECP) and printers can communicate in both directions under FreeBSD when a IEEE-1284-compliant cable is used.
Two-way communication to the printer over a parallel port is generally done in one of two ways. The first method uses a custom-built printer driver for FreeBSD that speaks the proprietary language used by the printer. This is common with inkjet printers and can be used for reporting ink levels and other status information. The second method is used when the printer supports PostScript®.
PostScript® jobs are actually programs sent to the printer; they need not produce paper at all and may return results directly to the computer. PostScript® also uses two-way communication to tell the computer about problems, such as errors in the PostScript® program or paper jams. Your users may be appreciative of such information. Furthermore, the best way to do effective accounting with a PostScript® printer requires two-way communication: you ask the printer for its page count (how many pages it has printed in its lifetime), then send the user's job, then ask again for its page count. Subtract the two values and you know how much paper to charge to the user.
To hook up a printer using a parallel interface, connect the Centronics cable between the printer and the computer. The instructions that came with the printer, the computer, or both should give you complete guidance.
Remember which parallel port you used on the computer.
The first parallel port is
ppc0 to FreeBSD;
the second is ppc1, and so on. The
printer device name uses the same scheme:
/dev/lpt0 for
the printer on the first parallel ports etc.
To hook up a printer using a serial interface, connect the proper serial cable between the printer and the computer. The instructions that came with the printer, the computer, or both should give you complete guidance.
If you are unsure what the “proper serial cable” is, you may wish to try one of the following alternatives:
A modem cable connects each pin of the connector on one end of the cable straight through to its corresponding pin of the connector on the other end. This type of cable is also known as a “DTE-to-DCE” cable.
A null-modem cable connects some pins straight through, swaps others (send data to receive data, for example), and shorts some internally in each connector hood. This type of cable is also known as a “DTE-to-DTE” cable.
A serial printer cable, required for some unusual printers, is like the null-modem cable, but sends some signals to their counterparts instead of being internally shorted.
You should also set up the communications parameters
for the printer, usually through front-panel controls or
DIP switches on the printer. Choose the highest
bps (bits per second, sometimes
baud rate) that both your computer
and the printer can support. Choose 7 or 8 data bits;
none, even, or odd parity; and 1 or 2 stop bits. Also
choose a flow control protocol: either none, or XON/XOFF
(also known as “in-band” or
“software”) flow control. Remember these
settings for the software configuration that
follows.
This section describes the software setup necessary to print with the LPD spooling system in FreeBSD.
Here is an outline of the steps involved:
Configure your kernel, if necessary, for the port you are using for the printer; section Kernel Configuration tells you what you need to do.
Set the communications mode for the parallel port, if you are using a parallel port; section Setting the Communication Mode for the Parallel Port gives details.
Test if the operating system can send data to the printer. Section Checking Printer Communications gives some suggestions on how to do this.
Set up LPD for the
printer by modifying the file
/etc/printcap. You will find out
how to do this later in this chapter.
The operating system kernel is compiled to work with a specific set of devices. The serial or parallel interface for your printer is a part of that set. Therefore, it might be necessary to add support for an additional serial or parallel port if your kernel is not already configured for one.
To find out if the kernel you are currently using supports a serial interface, type:
# grep sioN /var/run/dmesg.bootWhere N is the number of
the serial port, starting from zero. If you see output
similar to the following:
then the kernel supports the port.
To find out if the kernel supports a parallel interface, type:
# grep ppcN /var/run/dmesg.bootWhere N is the number of
the parallel port, starting from zero. If you see output
similar to the following:
then the kernel supports the port.
You might have to reconfigure your kernel in order for the operating system to recognize and use the parallel or serial port you are using for the printer.
To add support for a serial port, see the section on kernel configuration. To add support for a parallel port, see that section and the section that follows.
When you are using the parallel interface, you can choose whether FreeBSD should use interrupt-driven or polled communication with the printer. The generic printer device driver (lpt(4)) on FreeBSD uses the ppbus(4) system, which controls the port chipset with the ppc(4) driver.
The interrupt-driven method is the default with the GENERIC kernel. With this method, the operating system uses an IRQ line to determine when the printer is ready for data.
The polled method directs the operating system to repeatedly ask the printer if it is ready for more data. When it responds ready, the kernel sends more data.
The interrupt-driven method is usually somewhat faster but uses up a precious IRQ line. Some newer HP printers are claimed not to work correctly in interrupt mode, apparently due to some (not yet exactly understood) timing problem. These printers need polled mode. You should use whichever one works. Some printers will work in both modes, but are painfully slow in interrupt mode.
You can set the communications mode in two ways: by configuring the kernel or by using the lptcontrol(8) program.
To set the communications mode by configuring the kernel:
Edit your kernel configuration file. Look for
an ppc0 entry. If you are setting up
the second parallel port, use ppc1
instead. Use ppc2 for the third
port, and so on.
If you want interrupt-driven mode, edit the following line:
N"in the /boot/device.hints
file and replace N with
the right IRQ number. The kernel configuration file
must also contain the ppc(4) driver:
If you want polled mode, remove in your
/boot/device.hints file, the
following line:
N"In some cases, this is not enough to put the port in polled mode under FreeBSD. Most of time it comes from acpi(4) driver, this latter is able to probe and attach devices, and therefore, control the access mode to the printer port. You should check your acpi(4) configuration to correct this problem.
Save the file. Then configure, build, and install the kernel, then reboot. See kernel configuration for more details.
To set the communications mode with lptcontrol(8):
Type:
# lptcontrol -i -d /dev/lptNto set interrupt-driven mode for
lpt.N
Type:
# lptcontrol -p -d /dev/lptNto set polled-mode for
lpt.N
You could put these commands in your
/etc/rc.local file to set the mode each
time your system boots. See lptcontrol(8) for more
information.
Before proceeding to configure the spooling system, you should make sure the operating system can successfully send data to your printer. It is a lot easier to debug printer communication and the spooling system separately.
To test the printer, we will send some text to it. For printers that can immediately print characters sent to them, the program lptest(1) is perfect: it generates all 96 printable ASCII characters in 96 lines.
For a PostScript® (or other language-based) printer, we will need a more sophisticated test. A small PostScript® program, such as the following, will suffice:
The above PostScript® code can be placed into a file and used as shown in the examples appearing in the following sections.
When this document refers to a printer language, it is assuming a language like PostScript®, and not Hewlett Packard's PCL. Although PCL has great functionality, you can intermingle plain text with its escape sequences. PostScript® cannot directly print plain text, and that is the kind of printer language for which we must make special accommodations.
This section tells you how to check if FreeBSD can communicate with a printer connected to a parallel port.
To test a printer on a parallel port:
Become root with
su(1).
Send data to the printer.
If the printer can print plain text, then use lptest(1). Type:
# lptest > /dev/lptNWhere N is the
number of the parallel port, starting from
zero.
If the printer understands PostScript® or other printer language, then send a small program to the printer. Type:
# cat > /dev/lptNThen, line by line, type the program
carefully as you cannot edit
a line once you have pressed
RETURN or
ENTER. When you have finished
entering the program, press
CONTROL+D, or whatever your
end of file key is.
Alternatively, you can put the program in a file and type:
# cat file > /dev/lptNWhere file is the
name of the file containing the program you want
to send to the printer.
You should see something print. Do not worry if the text does not look right; we will fix such things later.
This section tells you how to check if FreeBSD can communicate with a printer on a serial port.
To test a printer on a serial port:
Become root with
su(1).
Edit the file /etc/remote.
Add the following entry:
/dev/port:br#bps-rate:pa=parityWhere port is the
device entry for the serial port
(ttyu0, ttyu1,
etc.), bps-rate is the
bits-per-second rate at which the printer
communicates, and parity
is the parity required by the printer (either
even, odd,
none, or
zero).
Here is a sample entry for a printer connected via a serial line to the third serial port at 19200 bps with no parity:
/dev/ttyu2:br#19200:pa=noneConnect to the printer with tip(1). Type:
# tip printerIf this step does not work, edit the file
/etc/remote again and try using
/dev/cuaa
instead of
N/dev/ttyu.N
Send data to the printer.
If the printer can print plain text, then use lptest(1). Type:
% $lptestIf the printer understands PostScript® or
other printer language, then send a small program
to the printer. Type the program, line by line,
very carefully as backspacing
or other editing keys may be significant to the
printer. You may also need to type a special
end-of-file key for the printer so it knows it
received the whole program. For PostScript®
printers, press
CONTROL+D.
Alternatively, you can put the program in a file and type:
% >fileWhere file is the
name of the file containing the program. After
tip(1) sends the file, press any required
end-of-file key.
You should see something print. Do not worry if the text does not look right; we will fix that later.
At this point, your printer should be hooked up, your kernel configured to communicate with it (if necessary), and you have been able to send some simple data to the printer. Now, we are ready to configure LPD to control access to your printer.
You configure LPD by editing
the file /etc/printcap. The
LPD spooling system reads this
file each time the spooler is used, so updates to the
file take immediate effect.
The format of the printcap(5) file is
straightforward. Use your favorite text editor to make
changes to /etc/printcap. The format
is identical to other capability files like
/usr/share/misc/termcap and
/etc/remote. For complete information
about the format, see the cgetent(3).
The simple spooler configuration consists of the following steps:
Pick a name (and a few convenient aliases) for the
printer, and put them in the
/etc/printcap file; see the
Naming the
Printer section for more information on
naming.
Turn off header pages (which are on by default) by
inserting the sh capability; see the
Suppressing
Header Pages section for more
information.
Make a spooling directory, and specify its location
with the sd capability; see the Making the Spooling
Directory section for more information.
Set the /dev
entry to use for the printer, and note it in
/etc/printcap with the
lp capability; see the Identifying the Printer
Device for more information. Also, if the
printer is on a serial port, set up the communication
parameters with the ms# capability
which is discussed in the Configuring Spooler
Communications Parameters section.
Install a plain text input filter; see the Installing the Text Filter section for details.
Test the setup by printing something with the lpr(1) command. More details are available in the Trying It Out and Troubleshooting sections.
Language-based printers, such as PostScript® printers, cannot directly print plain text. The simple setup outlined above and described in the following sections assumes that if you are installing such a printer you will print only files that the printer can understand.
Users often expect that they can print plain text to any of the printers installed on your system. Programs that interface to LPD to do their printing usually make the same assumption. If you are installing such a printer and want to be able to print jobs in the printer language and print plain text jobs, you are strongly urged to add an additional step to the simple setup outlined above: install an automatic plain-text-to-PostScript® (or other printer language) conversion program. The section entitled Accommodating Plain Text Jobs on PostScript® Printers tells how to do this.
The first (easy) step is to pick a name for your printer. It really does not matter whether you choose functional or whimsical names since you can also provide a number of aliases for the printer.
At least one of the printers specified in the
/etc/printcap should have the alias
lp. This is the default printer's
name. If users do not have the PRINTER
environment variable nor specify a printer name on the
command line of any of the LPD
commands, then lp will be the default
printer they get to use.
Also, it is common practice to make the last alias for a printer be a full description of the printer, including make and model.
Once you have picked a name and some common aliases,
put them in the /etc/printcap file.
The name of the printer should start in the leftmost
column. Separate each alias with a vertical bar and put
a colon after the last alias.
In the following example, we start with a skeletal
/etc/printcap that defines two
printers (a Diablo 630 line printer and a Panasonic
KX-P4455 PostScript® laser printer):
In this example, the first printer is named
rattan and has as aliases
line, diablo,
lp, and Diablo 630 Line
Printer. Since it has the alias
lp, it is also the default printer.
The second is named bamboo, and has
as aliases ps, PS,
S, panasonic, and
Panasonic KX-P4455 PostScript
v51.4.
The LPD spooling system will by default print a header page for each job. The header page contains the user name who requested the job, the host from which the job came, and the name of the job, in nice large letters. Unfortunately, all this extra text gets in the way of debugging the simple printer setup, so we will suppress header pages.
To suppress header pages, add the
sh capability to the entry for the
printer in /etc/printcap. Here is
an example /etc/printcap with
sh added:
Note how we used the correct format: the first line starts in the leftmost column, and subsequent lines are indented. Every line in an entry except the last ends in a backslash character.
The next step in the simple spooler setup is to make a spooling directory, a directory where print jobs reside until they are printed, and where a number of other spooler support files live.
Because of the variable nature of spooling
directories, it is customary to put these directories
under /var/spool.
It is not necessary to backup the contents of spooling
directories, either. Recreating them is as simple as
running mkdir(1).
It is also customary to make the directory with a name that is identical to the name of the printer, as shown below:
# mkdir /var/spool/printer-nameHowever, if you have a lot of printers on your
network, you might want to put the spooling directories
under a single directory that you reserve just for
printing with LPD. We
will do this for our two example printers
rattan and
bamboo:
# mkdir /var/spool/lpd
# mkdir /var/spool/lpd/rattan
# mkdir /var/spool/lpd/bambooIf you are concerned about the privacy of jobs that
users print, you might want to protect the spooling
directory so it is not publicly accessible. Spooling
directories should be owned and be readable, writable,
and searchable by user daemon and
group daemon, and no one else.
We will do this for our example printers:
# chown daemon:daemon /var/spool/lpd/rattan
# chown daemon:daemon /var/spool/lpd/bamboo
# chmod 770 /var/spool/lpd/rattan
# chmod 770 /var/spool/lpd/bambooFinally, you need to tell
LPD about these directories
using the /etc/printcap file. You
specify the pathname of the spooling directory with the
sd capability:
/var/spool/lpd/rattan:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:Note that the name of the printer starts in the first column but all other entries describing the printer should be indented and each line end escaped with a backslash.
If you do not specify a spooling directory with
sd, the spooling system will use
/var/spool/lpd as
a default.
In the Hardware
Setup section, we identified the port and the
relevant /dev
directory entry that FreeBSD will use to communicate with
the printer. Now, we tell LPD
that information. When the spooling system has a job to
print, it will open the specified device on behalf of the
filter program (which is responsible for passing data to
the printer).
List the /dev
entry pathname in the /etc/printcap
file using the lp capability.
In our running example, let us assume that
rattan is on the first parallel port,
and bamboo is on a sixth serial port;
here are the additions to
/etc/printcap:
/var/spool/lpd/rattan:\
:lp=/dev/lpt0:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyu5:If you do not specify the lp
capability for a printer in your
/etc/printcap file,
LPD uses
/dev/lp as a
default. /dev/lp
currently does not exist in FreeBSD.
If the printer you are installing is connected to a parallel port, skip to the section entitled, Installing the Text Filter. Otherwise, be sure to follow the instructions in the next section.
For printers on serial ports, LPD can set up the bps rate, parity, and other serial communication parameters on behalf of the filter program that sends data to the printer. This is advantageous since:
It lets you try different communication parameters
by simply editing the
/etc/printcap file; you do not
have to recompile the filter program.
It enables the spooling system to use the same filter program for multiple printers which may have different serial communication settings.
The following /etc/printcap
capabilities control serial communication parameters of
the device listed in the lp
capability:
br#bps-rateSets the communications speed of the device to
bps-rate, where
bps-rate can be 50, 75,
110, 134, 150, 200, 300, 600, 1200, 1800, 2400,
4800, 9600, 19200, 38400, 57600, or 115200
bits-per-second.
ms#stty-modeSets the options for the terminal device after opening the device. stty(1) explains the available options.
When LPD opens the device
specified by the lp capability, it sets
the characteristics of the device to those specified with
the ms# capability. Of particular
interest will be the parenb,
parodd, cs5,
cs6, cs7,
cs8, cstopb,
crtscts, and ixon
modes, which are explained in the stty(1)
manual page.
Let us add to our example printer on the sixth serial
port. We will set the bps rate to 38400. For the mode,
we will set no parity with -parenb,
8-bit characters with cs8,
no modem control with clocal and
hardware flow control with
crtscts:
/var/spool/lpd/bamboo:\
:lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:We are now ready to tell
LPD what text filter to use
to send jobs to the printer. A text
filter, also known as an input
filter, is a program that
LPD runs when it has a job to
print. When LPD runs the text
filter for a printer, it sets the filter's standard input
to the job to print, and its standard output to the
printer device specified with the lp
capability. The filter is expected to read the job from
standard input, perform any necessary translation for the
printer, and write the results to standard output, which
will get printed. For more information on the text
filter, see the Filters
section.
For our simple printer setup, the text filter can be a
small shell script that just executes
/bin/cat to send the job to the
printer. FreeBSD comes with another filter called
lpf that handles backspacing and
underlining for printers that might not deal with such
character streams well. And, of course, you can use any
other filter program you want. The filter
lpf is described in detail in section
entitled lpf: a
Text Filter.
First, let us make the shell script
/usr/local/libexec/if-simple be a
simple text filter. Put the following text into that
file with your favorite text editor:
Make the file executable:
# chmod 555 /usr/local/libexec/if-simpleAnd then tell LPD to use it by specifying it with the
if capability in
/etc/printcap. We will add it to
the two printers we have so far in the example
/etc/printcap:
/var/spool/lpd/rattan:\
:lp=/dev/lpt0:\
:if=/usr/local/libexec/if-simple:
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
:sh:sd=/var/spool/lpd/bamboo:\
:lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:\
:if=/usr/local/libexec/if-simple:A copy of the if-simple script
can be found in the /usr/share/examples/printing
directory.
lpd(8) is run from /etc/rc,
controlled by the lpd_enable variable.
This variable defaults to NO. If you
have not done so already, add the line:
to /etc/rc.conf, and then either
restart your machine, or just run lpd(8).
# lpdYou have reached the end of the simple LPD setup. Unfortunately, congratulations are not quite yet in order, since we still have to test the setup and correct any problems. To test the setup, try printing something. To print with the LPD system, you use the command lpr(1), which submits a job for printing.
You can combine lpr(1) with the lptest(1) program, introduced in section Checking Printer Communications to generate some test text.
To test the simple LPD setup:
Type:
# lptest 20 5 | lpr -Pprinter-nameWhere printer-name is a the
name of a printer (or an alias) specified in
/etc/printcap. To test the default
printer, type lpr(1) without any -P
argument. Again, if you are testing a printer that
expects PostScript®, send a PostScript® program in that
language instead of using lptest(1). You can do so
by putting the program in a file and typing lpr
.file
For a PostScript® printer, you should get the results of the program. If you are using lptest(1), then your results should look like the following:
To further test the printer, try downloading larger
programs (for language-based printers) or running
lptest(1) with different arguments. For example,
lptest 80 60 will produce 60 lines of
80 characters each.
If the printer did not work, see the Troubleshooting section.
This section describes filters for printing specially formatted files, header pages, printing across networks, and restricting and accounting for printer usage.
Although LPD handles network protocols, queuing, access control, and other aspects of printing, most of the real work happens in the filters. Filters are programs that communicate with the printer and handle its device dependencies and special requirements. In the simple printer setup, we installed a plain text filter—an extremely simple one that should work with most printers (section Installing the Text Filter).
However, in order to take advantage of format conversion, printer accounting, specific printer quirks, and so on, you should understand how filters work. It will ultimately be the filter's responsibility to handle these aspects. And the bad news is that most of the time you have to provide filters yourself. The good news is that many are generally available; when they are not, they are usually easy to write.
Also, FreeBSD comes with one,
/usr/libexec/lpr/lpf, that works with
many printers that can print plain text. (It handles
backspacing and tabs in the file, and does accounting, but
that is about all it does.) There are also several filters
and filter components in the FreeBSD Ports Collection.
Here is what you will find in this section:
Section How Filters Work, tries to give an overview of a filter's role in the printing process. You should read this section to get an understanding of what is happening “under the hood” when LPD uses filters. This knowledge could help you anticipate and debug problems you might encounter as you install more and more filters for each of your printers.
LPD expects every printer to be able to print plain text by default. This presents a problem for PostScript® printers (or other language-based printers) which cannot directly print plain text. Section Accommodating Plain Text Jobs on PostScript® Printers tells you what you should do to overcome this problem. You should read this section if you have a PostScript® printer.
PostScript® is a popular output format for many programs. Some people even write PostScript® code directly. Unfortunately, PostScript® printers are expensive. Section Simulating PostScript® on Non PostScript® Printers tells how you can further modify a printer's text filter to accept and print PostScript® data on a non PostScript® printer. You should read this section if you do not have a PostScript® printer.
Section Conversion
Filters tells about a way you can automate the
conversion of specific file formats, such as graphic or
typesetting data, into formats your printer can
understand. After reading this section, you should be
able to set up your printers such that users can type
lpr to print troff
data, or -tlpr to
print TeX DVI data, or -dlpr
to print raster image
data, and so forth. The reading of this section is
recommended.-v
Section Output Filters tells all about a not often used feature of LPD: output filters. Unless you are printing header pages (see Header Pages), you can probably skip that section altogether.
Section lpf:
a Text Filter describes lpf,
a fairly complete if simple text filter for line
printers (and laser printers that act like line
printers) that comes with FreeBSD. If you need a quick
way to get printer accounting working for plain text,
or if you have a printer which emits smoke when it sees
backspace characters, you should definitely consider
lpf.
A copy of the various scripts described below can be
found in the /usr/share/examples/printing
directory.
As mentioned before, a filter is an executable program started by LPD to handle the device-dependent part of communicating with the printer.
When LPD wants to print a
file in a job, it starts a filter program. It sets the
filter's standard input to the file to print, its standard
output to the printer, and its standard error to the error
logging file (specified in the lf
capability in /etc/printcap, or
/dev/console by
default).
Which filter LPD starts and
the filter's arguments depend on what is listed in the
/etc/printcap file and what arguments
the user specified for the job on the lpr(1) command
line. For example, if the user typed
lpr ,
LPD would start the troff filter,
listed in the -ttf capability for the
destination printer. If the user wanted to print plain
text, it would start the if filter (this
is mostly true: see Output Filters for
details).
There are three kinds of filters you can specify in
/etc/printcap:
The text filter, confusingly called the input filter in LPD documentation, handles regular text printing. Think of it as the default filter. LPD expects every printer to be able to print plain text by default, and it is the text filter's job to make sure backspaces, tabs, or other special characters do not confuse the printer. If you are in an environment where you have to account for printer usage, the text filter must also account for pages printed, usually by counting the number of lines printed and comparing that to the number of lines per page the printer sup