Index: head/en_US.ISO8859-1/books/handbook/advanced-networking/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/advanced-networking/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/advanced-networking/chapter.xml (revision 46052)
@@ -1,5218 +1,5217 @@
-
Advanced NetworkingSynopsisThis chapter covers a number of advanced networking
topics.After reading this chapter, you will know:The basics of gateways and routes.How to set up USB tethering.How to set up &ieee; 802.11 and &bluetooth;
devices.How to make &os; act as a bridge.How to set up network PXE
booting.How to set up IPv6 on a &os;
machine.How to enable and utilize the features of the Common
Address Redundancy Protocol (CARP) in
&os;.Before reading this chapter, you should:Understand the basics of the
/etc/rc scripts.Be familiar with basic network terminology.Know how to configure and install a new &os; kernel
().Know how to install additional third-party software
().Gateways and RoutesCoranthGryphonContributed by routinggatewaysubnetRouting is the mechanism that allows
a system to find the network path to another system. A
route is a defined pair of addresses
which represent the destination and a
gateway. The route indicates that when trying
to get to the specified destination, send the packets through
the specified gateway. There are three types of destinations:
individual hosts, subnets, and default. The
default route is used if no other routes apply.
There are also three types of gateways: individual hosts,
interfaces, also called links, and Ethernet hardware
(MAC) addresses. Known routes are stored in
a routing table.This section provides an overview of routing basics. It
then demonstrates how to configure a &os; system as a router and
offers some troubleshooting tips.Routing BasicsTo view the routing table of a &os; system, use
&man.netstat.1;:&prompt.user; netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default outside-gw UGS 37 418 em0
localhost localhost UH 0 181 lo0
test0 0:e0:b5:36:cf:4f UHLW 5 63288 re0 77
10.20.30.255 link#1 UHLW 1 2421
example.com link#1 UC 0 0
host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0
host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>
host2.example.com link#1 UC 0 0
224 link#1 UC 0 0The entries in this example are as follows:defaultThe first route in this table specifies the
default route. When the local system
needs to make a connection to a remote host, it checks
the routing table to determine if a known path exists.
If the remote host matches an entry in the table, the
system checks to see if it can connect using the
interface specified in that entry.If the destination does not match an entry, or if
all known paths fail, the system uses the entry for the
default route. For hosts on a local area network, the
Gateway field in the default route is
set to the system which has a direct connection to the
Internet. When reading this entry, verify that the
Flags column indicates that the
gateway is usable (UG).The default route for a machine which itself is
functioning as the gateway to the outside world will be
the gateway machine at the Internet Service Provider
(ISP).localhostThe second route is the localhost
route. The interface specified in the
Netif column for
localhost is
lo0, also known as the loopback
device. This indicates that all traffic for this
destination should be internal, rather than sending it
out over the network.MAC addressThe addresses beginning with 0:e0: are
MAC addresses. &os; will
automatically identify any hosts,
test0 in the example, on the
local Ethernet and add a route for that host over the
Ethernet interface, re0. This type
of route has a timeout, seen in the
Expire column, which is used if the
host does not respond in a specific amount of time.
When this happens, the route to this host will be
automatically deleted. These hosts are identified using
the Routing Information Protocol
(RIP), which calculates routes to
local hosts based upon a shortest path
determination.subnet&os; will automatically add subnet routes for the
local subnet. In this example, 10.20.30.255 is the
broadcast address for the subnet 10.20.30 and
example.com is the
domain name associated with that subnet. The
designation link#1 refers to the
first Ethernet card in the machine.Local network hosts and local subnets have their
routes automatically configured by a daemon called
&man.routed.8;. If it is not running, only routes which
are statically defined by the administrator will
exist.hostThe host1 line refers to the host
by its Ethernet address. Since it is the sending host,
&os; knows to use the loopback interface
(lo0) rather than the Ethernet
interface.The two host2 lines represent
aliases which were created using &man.ifconfig.8;. The
=> symbol after the
lo0 interface says that an alias
has been set in addition to the loopback address. Such
routes only show up on the host that supports the alias
and all other hosts on the local network will have a
link#1 line for such routes.224The final line (destination subnet 224) deals with
multicasting.Various attributes of each route can be seen in the
Flags column.
summarizes some of these flags and their meanings:
Commonly Seen Routing Table FlagsCommandPurposeUThe route is active (up).HThe route destination is a single host.GSend anything for this destination on to this
gateway, which will figure out from there where to
send it.SThis route was statically configured.CClones a new route based upon this route for
machines to connect to. This type of route is
normally used for local networks.WThe route was auto-configured based upon a local
area network (clone) route.LRoute involves references to Ethernet (link)
hardware.
On a &os; system, the default route can defined in
/etc/rc.conf by specifying the
IP address of the default gateway:defaultrouter="10.20.30.1"It is also possible to manually add the route using
route:&prompt.root; route add default 10.20.30.1Note that manually added routes will not survive a reboot.
For more information on manual manipulation of network
routing tables, refer to &man.route.8;.Configuring a Router with Static RoutesAlHoangContributed by dual homed hostsA &os; system can be configured as the default gateway, or
router, for a network if it is a dual-homed system. A
dual-homed system is a host which resides on at least two
different networks. Typically, each network is connected to a
separate network interface, though IP
aliasing can be used to bind multiple addresses, each on a
different subnet, to one physical interface.routerIn order for the system to forward packets between
interfaces, &os; must be configured as a router. Internet
standards and good engineering practice prevent the &os;
Project from enabling this feature by default, but it can be
configured to start at boot by adding this line to
/etc/rc.conf:gateway_enable="YES" # Set to YES if this host will be a gatewayTo enable routing now, set the &man.sysctl.8; variable
net.inet.ip.forwarding to
1. To stop routing, reset this variable to
0.BGPRIPOSPFThe routing table of a router needs additional routes so
it knows how to reach other networks. Routes can be either
added manually using static routes or routes can be
automatically learned using a routing protocol. Static routes
are appropriate for small networks and this section describes
how to add a static routing entry for a small network.For large networks, static routes quickly become
unscalable. &os; comes with the standard
BSD routing daemon &man.routed.8;, which
provides the routing protocols RIP,
versions 1 and 2, and IRDP. Support for
the BGP and OSPF
routing protocols can be installed using the
net/zebra package or port.Consider the following network:
INTERNET
| (10.0.0.1/24) Default Router to Internet
|
|Interface xl0
|10.0.0.10/24
+------+
| | RouterA
| | (FreeBSD gateway)
+------+
| Interface xl1
| 192.168.1.1/24
|
+--------------------------------+
Internal Net 1 | 192.168.1.2/24
|
+------+
| | RouterB
| |
+------+
| 192.168.2.1/24
|
Internal Net 2In this scenario, RouterA is a
&os; machine that is acting as a router to the rest of the
Internet. It has a default route set to 10.0.0.1 which allows it to
connect with the outside world.
RouterB is already configured to use
192.168.1.1 as its
default gateway.Before adding any static routes, the routing table on
RouterA looks like this:&prompt.user; netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.0.0.1 UGS 0 49378 xl0
127.0.0.1 127.0.0.1 UH 0 6 lo0
10.0.0.0/24 link#1 UC 0 0 xl0
192.168.1.0/24 link#2 UC 0 0 xl1With the current routing table,
RouterA does not have a route to the
192.168.2.0/24
network. The following command adds the Internal Net
2 network to RouterA's
routing table using 192.168.1.2 as the next
hop:&prompt.root; route add -net 192.168.2.0/24 192.168.1.2Now, RouterA can reach any host
on the 192.168.2.0/24 network.
However, the routing information will not persist if the &os;
system reboots. If a static route needs to be persistent, add
it to /etc/rc.conf:# Add Internal Net 2 as a persistent static route
static_routes="internalnet2"
route_internalnet2="-net 192.168.2.0/24 192.168.1.2"The static_routes configuration
variable is a list of strings separated by a space, where each
string references a route name. The variable
route_internalnet2
contains the static route for that route name.Using more than one string in
static_routes creates multiple static
routes. The following shows an example of adding static
routes for the 192.168.0.0/24 and
192.168.1.0/24
networks:static_routes="net1 net2"
route_net1="-net 192.168.0.0/24 192.168.0.1"
route_net2="-net 192.168.1.0/24 192.168.1.1"TroubleshootingWhen an address space is assigned to a network, the
service provider configures their routing tables so that all
traffic for the network will be sent to the link for the site.
But how do external sites know to send their packets to the
network's ISP?There is a system that keeps track of all assigned
address spaces and defines their point of connection to the
Internet backbone, or the main trunk lines that carry Internet
traffic across the country and around the world. Each
backbone machine has a copy of a master set of tables, which
direct traffic for a particular network to a specific
backbone carrier, and from there down the chain of service
providers until it reaches a particular network.It is the task of the service provider to advertise to
the backbone sites that they are the point of connection, and
thus the path inward, for a site. This is known as route
propagation.&man.traceroute.8;Sometimes, there is a problem with route propagation and
some sites are unable to connect. Perhaps the most useful
command for trying to figure out where routing is breaking
down is traceroute. It is useful when
ping fails.When using traceroute, include the
address of the remote host to connect to. The output will
show the gateway hosts along the path of the attempt,
eventually either reaching the target host, or terminating
because of a lack of connection. For more information, refer
to &man.traceroute.8;.Multicast Considerationsmulticast routingkernel optionsMROUTING&os; natively supports both multicast applications and
multicast routing. Multicast applications do not require any
special configuration in order to run on &os;. Support for
multicast routing requires that the following option be
compiled into a custom kernel:options MROUTINGThe multicast routing daemon,
mrouted can be installed using the
net/mrouted package or port. This daemon
implements the DVMRP multicast routing
protocol and is configured by editing
/usr/local/etc/mrouted.conf in order to
set up the tunnels and DVMRP. The
installation of mrouted also
installs map-mbone and
mrinfo, as well as their associated
man pages. Refer to these for configuration examples.DVMRP has largely been replaced by
the PIM protocol in many multicast
installations. Refer to &man.pim.4; for more
information.Wireless NetworkingLoaderMarcFonvieilleMurrayStokelywireless networking802.11wireless networkingWireless Networking BasicsMost wireless networks are based on the &ieee; 802.11
standards. A basic wireless network consists of multiple
stations communicating with radios that broadcast in either
the 2.4GHz or 5GHz band, though this varies according to the
locale and is also changing to enable communication in the
2.3GHz and 4.9GHz ranges.802.11 networks are organized in two ways. In
infrastructure mode, one station acts as
a
master with all the other stations associating to it, the
network is known as a BSS, and the master
station is termed an access point (AP).
In a BSS, all communication passes through
the AP; even when one station wants to
communicate with another wireless station, messages must go
through the AP. In the second form of
network, there is no master and stations communicate directly.
This form of network is termed an IBSS
and is commonly known as an ad-hoc
network.802.11 networks were first deployed in the 2.4GHz band
using protocols defined by the &ieee; 802.11 and 802.11b
standard. These specifications include the operating
frequencies and the MAC layer
characteristics, including framing and transmission rates,
as communication can occur at various rates. Later, the
802.11a standard defined operation in the 5GHz band, including
different signaling mechanisms and higher transmission rates.
Still later, the 802.11g standard defined the use of 802.11a
signaling and transmission mechanisms in the 2.4GHz band in
such a way as to be backwards compatible with 802.11b
networks.Separate from the underlying transmission techniques,
802.11 networks have a variety of security mechanisms. The
original 802.11 specifications defined a simple security
protocol called WEP. This protocol uses a
fixed pre-shared key and the RC4 cryptographic cipher to
encode data transmitted on a network. Stations must all
agree on the fixed key in order to communicate. This scheme
was shown to be easily broken and is now rarely used except
to discourage transient users from joining networks. Current
security practice is given by the &ieee; 802.11i specification
that defines new cryptographic ciphers and an additional
protocol to authenticate stations to an access point and
exchange keys for data communication. Cryptographic keys
are periodically refreshed and there are mechanisms for
detecting and countering intrusion attempts. Another
security protocol specification commonly used in wireless
networks is termed WPA, which was a
precursor to 802.11i. WPA specifies a
subset of the requirements found in 802.11i and is designed
for implementation on legacy hardware. Specifically,
WPA requires only the
TKIP cipher that is derived from the
original WEP cipher. 802.11i permits use
of TKIP but also requires support for a
stronger cipher, AES-CCM, for encrypting data. The
AES cipher was not required in
WPA because it was deemed too
computationally costly to be implemented on legacy
hardware.The other standard to be aware of is 802.11e. It defines
protocols for deploying multimedia applications, such as
streaming video and voice over IP (VoIP),
in an 802.11 network. Like 802.11i, 802.11e also has a
precursor specification termed WME (later
renamed WMM) that has been defined by an
industry group as a subset of 802.11e that can be deployed now
to enable multimedia applications while waiting for the final
ratification of 802.11e. The most important thing to know
about 802.11e and
WME/WMM is that it
enables prioritized traffic over a wireless network through
Quality of Service (QoS) protocols and
enhanced media access protocols. Proper implementation of
these protocols enables high speed bursting of data and
prioritized traffic flow.&os; supports networks that operate using 802.11a,
802.11b, and 802.11g. The WPA and 802.11i
security protocols are likewise supported (in conjunction with
any of 11a, 11b, and 11g) and QoS and
traffic prioritization required by the
WME/WMM protocols are
supported for a limited set of wireless devices.Quick StartConnecting a computer to an existing wireless network is
a very common situation. This procedure shows the steps
required.Obtain the SSID (Service Set
Identifier) and PSK (Pre-Shared Key)
for the wireless network from the network
administrator.Identify the wireless adapter. The &os;
GENERIC kernel includes drivers for
many common wireless adapters. If the wireless adapter is
one of those models, it will be shown in the output from
&man.ifconfig.8;:&prompt.user; ifconfig | grep -B3 -i wirelessIf a wireless adapter is not listed, an additional
kernel module might be required, or it might be a model
not supported by &os;.This example shows the Atheros ath0
wireless adapter.Add an entry for this network to
/etc/wpa_supplicant.conf. If the
file does not exist, create it. Replace
myssid and
mypsk with the
SSID and PSK
provided by the network administrator.network={
ssid="myssid"
psk="mypsk"
}Add entries to /etc/rc.conf to
configure the network on startup:wlans_ath0="wlan0"
ifconfig_wlan0="WPA SYNCDHCP"Restart the computer, or restart the network service
to connect to the network:&prompt.root; service netif restartBasic SetupKernel ConfigurationTo use wireless networking, a wireless networking card
is needed and the kernel needs to be configured with the
appropriate wireless networking support. The kernel is
separated into multiple modules so that only the required
support needs to be configured.The most
commonly used wireless devices are those that use parts made
by Atheros. These devices are supported by &man.ath.4;
and require the following line to be added to
/boot/loader.conf:if_ath_load="YES"The Atheros driver is split up into three separate
pieces: the driver (&man.ath.4;), the hardware support
layer that handles chip-specific functions
(&man.ath.hal.4;), and an algorithm for selecting the
rate for transmitting frames. When this support is loaded
as kernel modules, any dependencies are automatically
handled. To load support for a different type of wireless
device, specify the module for that device. This example
is for devices based on the Intersil Prism parts
(&man.wi.4;) driver:if_wi_load="YES"The examples in this section use an &man.ath.4;
device and the device name in the examples must be
changed according to the configuration. A list of
available wireless drivers and supported adapters can be
found in the &os; Hardware Notes, available on
the Release
Information page of the &os; website. If a
native &os; driver for the wireless device does not
exist, it may be possible to use the &windows; driver
with the help of the NDIS driver
wrapper.In addition, the modules that implement cryptographic
support for the security protocols to use must be loaded.
These are intended to be dynamically loaded on demand by
the &man.wlan.4; module, but for now they must be manually
configured. The following modules are available:
&man.wlan.wep.4;, &man.wlan.ccmp.4;, and &man.wlan.tkip.4;.
The &man.wlan.ccmp.4; and &man.wlan.tkip.4; drivers are
only needed when using the WPA or
802.11i security protocols. If the network does not use
encryption, &man.wlan.wep.4; support is not needed. To
load these modules at boot time, add the following lines to
/boot/loader.conf:wlan_wep_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"Once this information has been added to
/boot/loader.conf, reboot the &os;
box. Alternately, load the modules by hand using
&man.kldload.8;.For users who do not want to use modules, it is
possible to compile these drivers into the kernel by
adding the following lines to a custom kernel
configuration file:device wlan # 802.11 support
device wlan_wep # 802.11 WEP support
device wlan_ccmp # 802.11 CCMP support
device wlan_tkip # 802.11 TKIP support
device wlan_amrr # AMRR transmit rate control algorithm
device ath # Atheros pci/cardbus NIC's
device ath_hal # pci/cardbus chip support
options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors
device ath_rate_sample # SampleRate tx rate control for athWith this information in the kernel configuration
file, recompile the kernel and reboot the &os;
machine.Information about the wireless device should appear
in the boot messages, like this:ath0: <Atheros 5212> mem 0x88000000-0x8800ffff irq 11 at device 0.0 on cardbus1
ath0: [ITHREAD]
ath0: AR2413 mac 7.9 RF2413 phy 4.5Infrastructure ModeInfrastructure (BSS) mode is the
mode that is typically used. In this mode, a number of
wireless access points are connected to a wired network.
Each wireless network has its own name, called the
SSID. Wireless clients connect to the
wireless access points.&os; ClientsHow to Find Access PointsTo scan for available networks, use &man.ifconfig.8;.
This request may take a few moments to complete as it
requires the system to switch to each available wireless
frequency and probe for available access points. Only
the superuser can initiate a scan:&prompt.root; ifconfig wlan0 create wlandev ath0
&prompt.root; ifconfig wlan0 up scan
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
dlinkap 00:13:46:49:41:76 11 54M -90:96 100 EPS WPA WME
freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPAThe interface must be before
it can scan. Subsequent scan requests do not require
the interface to be marked as up again.The output of a scan request lists each
BSS/IBSS network
found. Besides listing the name of the network, the
SSID, the output also shows the
BSSID, which is the
MAC address of the access point. The
CAPS field identifies the type of
each network and the capabilities of the stations
operating there:
Station Capability CodesCapability CodeMeaningEExtended Service Set
(ESS). Indicates that
the station is part of an infrastructure network
rather than an IBSS/ad-hoc
network.IIBSS/ad-hoc network.
Indicates that the station is part of an ad-hoc
network rather than an ESS
network.PPrivacy. Encryption is required for all
data frames exchanged within the
BSS using cryptographic means
such as WEP,
TKIP or
AES-CCMP.SShort Preamble. Indicates that the network
is using short preambles, defined in 802.11b High
Rate/DSSS PHY, and utilizes a 56 bit sync field
rather than the 128 bit field used in long
preamble mode.sShort slot time. Indicates that the 802.11g
network is using a short slot time because there
are no legacy (802.11b) stations present.
One can also display the current list of known
networks with:&prompt.root; ifconfig wlan0 list scanThis information may be updated automatically by the
adapter or manually with a request.
Old data is automatically removed from the cache, so over
time this list may shrink unless more scans are
done.Basic SettingsThis section provides a simple example of how to make
the wireless network adapter work in &os; without
encryption. Once familiar with these concepts, it is
strongly recommend to use WPA to set up
the wireless network.There are three basic steps to configure a wireless
network: select an access point, authenticate the
station, and configure an IP address.
The following sections discuss each step.Selecting an Access PointMost of the time, it is sufficient to let the system
choose an access point using the builtin heuristics.
This is the default behaviour when an interface is
marked as up or it is listed in
/etc/rc.conf:wlans_ath0="wlan0"
ifconfig_wlan0="DHCP"If there are multiple access points, a specific
one can be selected by its
SSID:wlans_ath0="wlan0"
ifconfig_wlan0="ssid your_ssid_here DHCP"In an environment where there are multiple access
points with the same SSID, which
is often done to simplify roaming, it may be necessary
to associate to one specific device. In this case, the
BSSID of the access point can be
specified, with or without the
SSID:wlans_ath0="wlan0"
ifconfig_wlan0="ssid your_ssid_here bssid xx:xx:xx:xx:xx:xx DHCP"There are other ways to constrain the choice of an
access point, such as limiting the set of frequencies
the system will scan on. This may be useful for a
multi-band wireless card as scanning all the possible
channels can be time-consuming. To limit operation to a
specific band, use the
parameter:wlans_ath0="wlan0"
ifconfig_wlan0="mode 11g ssid your_ssid_here DHCP"This example will force the card to operate in
802.11g, which is defined only for 2.4GHz frequencies
so any 5GHz channels will not be considered. This can
also be achieved with the
parameter, which locks
operation to one specific frequency, and the
parameter, to specify a list
of channels for scanning. More information about these
parameters can be found in &man.ifconfig.8;.AuthenticationOnce an access point is selected, the station
needs to authenticate before it can pass data.
Authentication can happen in several ways. The most
common scheme, open authentication, allows any station
to join the network and communicate. This is the
authentication to use for test purposes the first time
a wireless network is setup. Other schemes require
cryptographic handshakes to be completed before data
traffic can flow, either using pre-shared keys or
secrets, or more complex schemes that involve backend
services such as RADIUS. Open
authentication is the default setting. The next most
common setup is WPA-PSK, also
known as WPA Personal, which is
described in .If using an &apple; &airport; Extreme base
station for an access point, shared-key authentication
together with a WEP key needs to
be configured. This can be configured in
/etc/rc.conf or by using
&man.wpa.supplicant.8;. For a single &airport; base
station, access can be configured with:wlans_ath0="wlan0"
ifconfig_wlan0="authmode shared wepmode on weptxkey 1 wepkey 01234567 DHCP"In general, shared key authentication should be
avoided because it uses the WEP key
material in a highly-constrained manner, making it
even easier to crack the key. If
WEP must be used for compatibility
with legacy devices, it is better to use
WEP with open
authentication. More information regarding
WEP can be found in .Getting an IP Address with
DHCPOnce an access point is selected and the
authentication parameters are set, an
IP address must be obtained in
order to communicate. Most of the time, the
IP address is obtained via
DHCP. To achieve that, edit
/etc/rc.conf and add
DHCP to the configuration for the
device:wlans_ath0="wlan0"
ifconfig_wlan0="DHCP"The
wireless interface is now ready to bring up:&prompt.root; service netif startOnce the interface is running, use &man.ifconfig.8;
to see the status of the interface
ath0:&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
status: associated
ssid dlinkap channel 11 (2462 Mhz 11g) bssid 00:13:46:49:41:76
country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
roam:rate 5 protmode CTS wme burstThe status: associated line means
that it is connected to the wireless network. The
bssid 00:13:46:49:41:76 is the
MAC address of the access point and
authmode OPEN indicates that the
communication is not encrypted.Static IP AddressIn an IP address cannot be
obtained from a DHCP server, set a
fixed IP address. Replace the
DHCP keyword shown above with the
address information. Be sure to retain any other
parameters for selecting the access point:wlans_ath0="wlan0"
ifconfig_wlan0="inet 192.168.1.100 netmask 255.255.255.0 ssid your_ssid_here"WPAWi-Fi Protected Access (WPA) is a
security protocol used together with 802.11 networks to
address the lack of proper authentication and the weakness
of WEP. WPA leverages the 802.1X
authentication protocol and uses one of several ciphers
instead of WEP for data integrity.
The only cipher required by WPA is the
Temporary Key Integrity Protocol
(TKIP). TKIP is a
cipher that extends the basic RC4 cipher used by
WEP by adding integrity checking,
tamper detection, and measures for responding to detected
intrusions. TKIP is designed to work
on legacy hardware with only software modification. It
represents a compromise that improves security but is
still not entirely immune to attack.
WPA also specifies the
AES-CCMP cipher as an alternative to
TKIP, and that is preferred when
possible. For this specification, the term
WPA2 or RSN is
commonly used.WPA defines authentication and
encryption protocols. Authentication is most commonly
done using one of two techniques: by 802.1X and a backend
authentication service such as RADIUS,
or by a minimal handshake between the station and the
access point using a pre-shared secret. The former is
commonly termed WPA Enterprise and the
latter is known as WPA Personal. Since
most people will not set up a RADIUS
backend server for their wireless network,
WPA-PSK is by far the most commonly
encountered configuration for
WPA.The control of the wireless connection and the key
negotiation or authentication with a server is done using
&man.wpa.supplicant.8;. This program requires a
configuration file,
/etc/wpa_supplicant.conf, to run.
More information regarding this file can be found in
&man.wpa.supplicant.conf.5;.WPA-PSKWPA-PSK, also known as
WPA Personal, is based on a
pre-shared key (PSK) which is
generated from a given password and used as the master
key in the wireless network. This means every wireless
user will share the same key.
WPA-PSK is intended for small
networks where the use of an authentication server is
not possible or desired.Always use strong passwords that are sufficiently
long and made from a rich alphabet so that they will
not be easily guessed or attacked.The first step is the configuration of
/etc/wpa_supplicant.conf with
the SSID and the pre-shared key of
the network:network={
ssid="freebsdap"
psk="freebsdmall"
}Then, in /etc/rc.conf,
indicate that the wireless device configuration will be
done with WPA and the
IP address will be obtained with
DHCP:wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"Then, bring up the interface:&prompt.root; service netif start
Starting wpa_supplicant.
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
DHCPOFFER from 192.168.0.1
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPACK from 192.168.0.1
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUALOr, try to configure the interface manually using
the information in
/etc/wpa_supplicant.conf:&prompt.root; wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz)
Associated with 00:11:95:c3:0d:ac
WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to 00:11:95:c3:0d:ac completed (auth) [id=0 id_str=]The next operation is to launch &man.dhclient.8;
to get the IP address from the
DHCP server:&prompt.root; dhclient wlan0
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPACK from 192.168.0.1
bound to 192.168.0.254 -- renewal in 300 seconds.
&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUALIf /etc/rc.conf has an
ifconfig_wlan0="DHCP" entry,
&man.dhclient.8; will be launched automatically after
&man.wpa.supplicant.8; associates with the access
point.If DHCP is not possible or
desired, set a static IP address
after &man.wpa.supplicant.8; has authenticated the
station:&prompt.root; ifconfig wlan0 inet 192.168.0.100 netmask 255.255.255.0
&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUALWhen DHCP is not used, the
default gateway and the nameserver also have to be
manually set:&prompt.root; route add default your_default_router
&prompt.root; echo "nameserver your_DNS_server" >> /etc/resolv.confWPA with
EAP-TLSThe second way to use WPA is with
an 802.1X backend authentication server. In this case,
WPA is called
WPA Enterprise to differentiate it
from the less secure WPA Personal.
Authentication in WPA Enterprise is
based on the Extensible Authentication Protocol
(EAP).EAP does not come with an
encryption method. Instead, EAP is
embedded inside an encrypted tunnel. There are many
EAP authentication methods, but
EAP-TLS, EAP-TTLS,
and EAP-PEAP are the most
common.EAP with Transport Layer Security
(EAP-TLS) is a well-supported
wireless authentication protocol since it was the
first EAP method to be certified
by the Wi-Fi
Alliance. EAP-TLS requires
three certificates to run: the certificate of the
Certificate Authority (CA) installed
on all machines, the server certificate for the
authentication server, and one client certificate for
each wireless client. In this EAP
method, both the authentication server and wireless
client authenticate each other by presenting their
respective certificates, and then verify that these
certificates were signed by the organization's
CA.As previously, the configuration is done via
/etc/wpa_supplicant.conf:network={
ssid="freebsdap"
proto=RSN
key_mgmt=WPA-EAP
eap=TLS
identity="loader"
ca_cert="/etc/certs/cacert.pem"
client_cert="/etc/certs/clientcert.pem"
private_key="/etc/certs/clientkey.pem"
private_key_passwd="freebsdmallclient"
}This field indicates the network name
(SSID).This example uses the RSN
&ieee; 802.11i protocol, also known as
WPA2.The key_mgmt line refers to
the key management protocol to use. In this
example, it is WPA using
EAP authentication.This field indicates the EAP
method for the connection.The identity field contains
the identity string for
EAP.The ca_cert field indicates
the pathname of the CA
certificate file. This file is needed to verify
the server certificate.The client_cert line gives
the pathname to the client certificate file. This
certificate is unique to each wireless client of the
network.The private_key field is the
pathname to the client certificate private key
file.The private_key_passwd field
contains the passphrase for the private key.Then, add the following lines to
/etc/rc.conf:wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"The next step is to bring up the interface:&prompt.root; service netif start
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUALIt is also possible to bring up the interface
manually using &man.wpa.supplicant.8; and
&man.ifconfig.8;.WPA with
EAP-TTLSWith EAP-TTLS, both the
authentication server and the client need a certificate.
With EAP-TTLS, a client certificate
is optional. This method is similar to a web server
which creates a secure SSL tunnel
even if visitors do not have client-side certificates.
EAP-TTLS uses an encrypted
TLS tunnel for safe transport of
the authentication data.The required configuration can be added to
/etc/wpa_supplicant.conf:network={
ssid="freebsdap"
proto=RSN
key_mgmt=WPA-EAP
eap=TTLS
identity="test"
password="test"
ca_cert="/etc/certs/cacert.pem"
phase2="auth=MD5"
}This field specifies the EAP
method for the connection.The identity field contains
the identity string for EAP
authentication inside the encrypted
TLS tunnel.The password field contains
the passphrase for the EAP
authentication.The ca_cert field indicates
the pathname of the CA
certificate file. This file is needed to verify
the server certificate.This field specifies the authentication
method used in the encrypted TLS
tunnel. In this example,
EAP with MD5-Challenge is used.
The inner authentication phase is
often called phase2.Next, add the following lines to
/etc/rc.conf:wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"The next step is to bring up the interface:&prompt.root; service netif start
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUALWPA with
EAP-PEAPPEAPv0/EAP-MSCHAPv2 is the most
common PEAP method. In this
chapter, the term PEAP is used to
refer to that method.Protected EAP (PEAP) is designed
as an alternative to EAP-TTLS and
is the most used EAP standard after
EAP-TLS. In a network with mixed
operating systems, PEAP should be
the most supported standard after
EAP-TLS.PEAP is similar to
EAP-TTLS as it uses a server-side
certificate to authenticate clients by creating an
encrypted TLS tunnel between the
client and the authentication server, which protects
the ensuing exchange of authentication information.
PEAP authentication differs from
EAP-TTLS as it broadcasts the
username in the clear and only the password is sent
in the encrypted TLS tunnel.
EAP-TTLS will use the
TLS tunnel for both the username
and password.Add the following lines to
/etc/wpa_supplicant.conf to
configure the EAP-PEAP related
settings:network={
ssid="freebsdap"
proto=RSN
key_mgmt=WPA-EAP
eap=PEAP
identity="test"
password="test"
ca_cert="/etc/certs/cacert.pem"
phase1="peaplabel=0"
phase2="auth=MSCHAPV2"
}This field specifies the EAP
method for the connection.The identity field contains
the identity string for EAP
authentication inside the encrypted
TLS tunnel.The password field contains
the passphrase for the EAP
authentication.The ca_cert field indicates
the pathname of the CA
certificate file. This file is needed to verify
the server certificate.This field contains the parameters for the
first phase of authentication, the
TLS tunnel. According to the
authentication server used, specify a specific
label for authentication. Most of the time, the
label will be client EAP
encryption which is set by using
peaplabel=0. More information
can be found in &man.wpa.supplicant.conf.5;.This field specifies the authentication
protocol used in the encrypted
TLS tunnel. In the
case of PEAP, it is
auth=MSCHAPV2.Add the following to
/etc/rc.conf:wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"Then, bring up the interface:&prompt.root; service netif start
Starting wpa_supplicant.
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15
DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21
DHCPACK from 192.168.0.20
bound to 192.168.0.254 -- renewal in 300 seconds.
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF
AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan
bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS
wme burst roaming MANUALWEPWired Equivalent Privacy (WEP) is
part of the original 802.11 standard. There is no
authentication mechanism, only a weak form of access
control which is easily cracked.WEP can be set up using
&man.ifconfig.8;:&prompt.root; ifconfig wlan0 create wlandev ath0
&prompt.root; ifconfig wlan0 inet 192.168.1.100 netmask 255.255.255.0 \
ssid my_net wepmode on weptxkey 3 wepkey 3:0x3456789012The weptxkey specifies which
WEP key will be used in the
transmission. This example uses the third key.
This must match the setting on the access point.
When unsure which key is used by the access point,
try 1 (the first key) for this
value.The wepkey selects one of the
WEP keys. It should be in the
format index:key. Key
1 is used by default; the index
only needs to be set when using a key other than the
first key.Replace the 0x3456789012
with the key configured for use on the access
point.Refer to &man.ifconfig.8; for further
information.The &man.wpa.supplicant.8; facility can be used to
configure a wireless interface with
WEP. The example above can be set up
by adding the following lines to
/etc/wpa_supplicant.conf:network={
ssid="my_net"
key_mgmt=NONE
wep_key3=3456789012
wep_tx_keyidx=3
}Then:&prompt.root; wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz)
Associated with 00:13:46:49:41:76Ad-hoc ModeIBSS mode, also called ad-hoc mode, is
designed for point to point connections. For example, to
establish an ad-hoc network between the machines
A and B,
choose two IP addresses and a
SSID.On A:&prompt.root; ifconfig wlan0 create wlandev ath0 wlanmode adhoc
&prompt.root; ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap
&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:11:95:c3:0d:ac
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>
status: running
ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
protmode CTS wme burstThe adhoc parameter indicates that the
interface is running in IBSS mode.B should now be able to detect
A:&prompt.root; ifconfig wlan0 create wlandev ath0 wlanmode adhoc
&prompt.root; ifconfig wlan0 up scan
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
freebsdap 02:11:95:c3:0d:ac 2 54M -64:-96 100 IS WMEThe I in the output confirms that
A is in ad-hoc mode. Now, configure
B with a different
IP address:&prompt.root; ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap
&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc>
status: running
ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac
country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
protmode CTS wme burstBoth A and
B are now ready to exchange
information.&os; Host Access Points&os; can act as an Access Point (AP)
which eliminates the need to buy a hardware
AP or run an ad-hoc network. This can
be particularly useful when a &os; machine is acting as a
gateway to another network such as the Internet.Basic SettingsBefore configuring a &os; machine as an
AP, the kernel must be configured with
the appropriate networking support for the wireless card
as well as the security protocols being used. For more
details, see .The NDIS driver wrapper for
&windows; drivers does not currently support
AP operation. Only native &os;
wireless drivers support AP
mode.Once wireless networking support is loaded, check if
the wireless device supports the host-based access point
mode, also known as hostap mode:&prompt.root; ifconfig wlan0 create wlandev ath0
&prompt.root; ifconfig wlan0 list caps
drivercaps=6f85edc1<STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG>
cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC>This output displays the card's capabilities. The
HOSTAP word confirms that this wireless
card can act as an AP. Various supported
ciphers are also listed: WEP,
TKIP, and AES. This
information indicates which security protocols can be used
on the AP.The wireless device can only be put into hostap mode
during the creation of the network pseudo-device, so a
previously created device must be destroyed first:&prompt.root; ifconfig wlan0 destroythen regenerated with the correct option before setting
the other parameters:&prompt.root; ifconfig wlan0 create wlandev ath0 wlanmode hostap
&prompt.root; ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1Use &man.ifconfig.8; again to see the status of the
wlan0 interface:&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:11:95:c3:0d:ac
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
status: running
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60
protmode CTS wme burst dtimperiod 1 -dfsThe hostap parameter indicates the
interface is running in the host-based access point
mode.The interface configuration can be done automatically at
boot time by adding the following lines to
/etc/rc.conf:wlans_ath0="wlan0"
create_args_wlan0="wlanmode hostap"
ifconfig_wlan0="inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1"Host-based Access Point Without Authentication or
EncryptionAlthough it is not recommended to run an
AP without any authentication or
encryption, this is a simple way to check if the
AP is working. This configuration is
also important for debugging client issues.Once the AP is configured, initiate
a scan from another wireless machine to find the
AP:&prompt.root; ifconfig wlan0 create wlandev ath0
&prompt.root; ifconfig wlan0 up scan
SSID/MESH ID BSSID CHAN RATE S:N INT CAPS
freebsdap 00:11:95:c3:0d:ac 1 54M -66:-96 100 ES WMEThe client machine found the AP and
can be associated with it:&prompt.root; ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap
&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:11:95:d5:43:62
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
status: associated
ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7
scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7
roam:rate 5 protmode CTS wme burstWPA Host-based Access PointThis section focuses on setting up a &os;
AP using the WPA
security protocol. More details regarding
WPA and the configuration of
WPA-based wireless clients can be found
in .The &man.hostapd.8; daemon is used to deal with client
authentication and key management on the
WPA-enabled AP.The following configuration operations are performed
on the &os; machine acting as the AP.
Once the AP is correctly working,
&man.hostapd.8; should be automatically enabled at boot
with the following line in
/etc/rc.conf:hostapd_enable="YES"Before trying to configure &man.hostapd.8;, first
configure the basic settings introduced in .WPA-PSKWPA-PSK is intended for small
networks where the use of a backend authentication server
is not possible or desired.The configuration is done in
/etc/hostapd.conf:interface=wlan0
debug=1
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
ssid=freebsdap
wpa=1
wpa_passphrase=freebsdmall
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP This field indicates the wireless interface used
for the AP.This field sets the level of verbosity during the
execution of &man.hostapd.8;. A value of
1 represents the minimal
level.The ctrl_interface field gives
the pathname of the directory used by &man.hostapd.8;
to store its domain socket files for the communication
with external programs such as &man.hostapd.cli.8;.
The default value is used in this example.The ctrl_interface_group line
sets the group which is allowed to access the control
interface files.This field sets the network name.The wpa field enables
WPA and specifies which
WPA authentication protocol will
be required. A value of 1
configures the AP for
WPA-PSK.The wpa_passphrase field
contains the ASCII passphrase for
WPA authentication.Always use strong passwords that are
sufficiently long and made from a rich alphabet so
that they will not be easily guessed or
attacked.The wpa_key_mgmt line refers
to the key management protocol to use. This example
sets WPA-PSK.The wpa_pairwise field
indicates the set of accepted encryption algorithms by
the AP. In this example, both
TKIP (WPA) and
CCMP (WPA2)
ciphers are accepted. The CCMP
cipher is an alternative to TKIP
and is strongly preferred when possible.
TKIP should be used solely for
stations incapable of doing
CCMP.The next step is to start &man.hostapd.8;:&prompt.root; service hostapd forcestart&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2290
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::211:95ff:fec3:dac%ath0 prefixlen 64 scopeid 0x4
ether 00:11:95:c3:0d:ac
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
status: associated
ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac
authmode WPA2/802.11i privacy MIXED deftxkey 2 TKIP 2:128-bit txpowmax 36 protmode CTS dtimperiod 1 bintval 100Once the AP is running, the
clients can associate with it. See for more details. It
is possible to see the stations associated with the
AP using ifconfig
wlan0 list
sta.WEP Host-based Access PointIt is not recommended to use WEP for
setting up an AP since there is no
authentication mechanism and the encryption is easily
cracked. Some legacy wireless cards only support
WEP and these cards will only support
an AP without authentication or
encryption.The wireless device can now be put into hostap mode and
configured with the correct SSID and
IP address:&prompt.root; ifconfig wlan0 create wlandev ath0 wlanmode hostap
&prompt.root; ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 \
ssid freebsdap wepmode on weptxkey 3 wepkey 3:0x3456789012 mode 11gThe weptxkey indicates which
WEP key will be used in the
transmission. This example uses the third key as key
numbering starts with 1. This
parameter must be specified in order to encrypt the
data.The wepkey sets the selected
WEP key. It should be in the format
index:key. If the index is
not given, key 1 is set. The index
needs to be set when using keys other than the first
key.Use &man.ifconfig.8; to see the status of the
wlan0 interface:&prompt.root; ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:11:95:c3:0d:ac
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
status: running
ssid freebsdap channel 4 (2427 Mhz 11g) bssid 00:11:95:c3:0d:ac
country US ecm authmode OPEN privacy ON deftxkey 3 wepkey 3:40-bit
txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfsFrom another wireless machine, it is now possible to
initiate a scan to find the AP:&prompt.root; ifconfig wlan0 create wlandev ath0
&prompt.root; ifconfig wlan0 up scan
SSID BSSID CHAN RATE S:N INT CAPS
freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPSIn this example, the client machine found the
AP and can associate with it using the
correct parameters. See for more details.Using Both Wired and Wireless ConnectionsA wired connection provides better performance and
reliability, while a wireless connection provides flexibility
and mobility. Laptop users typically want to roam seamlessly
between the two types of connections.On &os;, it is possible to combine two or even more
network interfaces together in a failover
fashion. This type of configuration uses the most preferred
and available connection from a group of network interfaces,
and the operating system switches automatically when the link
state changes.Link aggregation and failover is covered in and an example for using
both wired and wireless connections is provided at .TroubleshootingThis section describes
a number of steps to help troubleshoot common wireless
networking problems.If the access point is not listed when scanning,
check that the configuration has not limited the wireless
device to a limited set of channels.If the device cannot associate with an access point,
verify that the configuration matches the settings on the
access point. This includes the authentication scheme and
any security protocols. Simplify the configuration as
much as possible. If using a security protocol such as
WPA or WEP,
configure the access point for open authentication and
no security to see if traffic will pass.Debugging support is provided by
&man.wpa.supplicant.8;. Try running this utility manually
with the option and look at the
system logs.Once the system can associate with the access point,
diagnose the network configuration using tools like
&man.ping.8;.There are many lower-level debugging tools.
Debugging messages can be enabled in the 802.11 protocol
support layer using &man.wlandebug.8;. On a &os; system
prior to &os; 9.1, this program can be found in
/usr/src/tools/tools/net80211.
For example, to enable console messages related to
scanning for access points and the 802.11 protocol
handshakes required to arrange communication:&prompt.root; wlandebug -i ath0 +scan+auth+debug+assoc
net.wlan.0.debug: 0 => 0xc80000<assoc,auth,scan>Many useful statistics are maintained by the 802.11
layer and wlanstats, found in /usr/src/tools/tools/net80211,
will dump this information. These statistics should
display all errors identified by the 802.11 layer.
However, some errors are identified in the device drivers
that lie below the 802.11 layer so they may not show up.
To diagnose device-specific problems, refer to the
drivers' documentation.If the above information does not help to clarify the
problem, submit a problem report and include output from the
above tools.USB TetheringtetherMany cellphones provide the option to share their data
connection over USB (often called "tethering"). This feature
uses either the RNDIS, CDC
or a custom &apple; &iphone;/&ipad;
protocol.&android; devices generally use the &man.urndis.4;
driver.&apple; devices use the &man.ipheth.4; driver.Older devices will often use the &man.cdce.4;
driver.Before attaching a device, load the appropriate driver
into the kernel:&prompt.root; kldload if_urndis
&prompt.root; kldload if_cdce
&prompt.root; kldload if_iphethOnce the device is attached
ue0 will be
available for use like a normal network device. Be sure that
the USB tethering option is enabled on the
device.BluetoothPavLucistnikWritten by pav@FreeBSD.orgBluetoothBluetooth is a wireless technology for creating personal
networks operating in the 2.4 GHz unlicensed band, with a
range of 10 meters. Networks are usually formed ad-hoc from
portable devices such as cellular phones, handhelds, and
laptops. Unlike Wi-Fi wireless technology, Bluetooth offers
higher level service profiles, such as
FTP-like file servers, file pushing, voice
transport, serial line emulation, and more.This section describes the use of a USB
Bluetooth dongle on a &os; system. It then describes the
various Bluetooth protocols and utilities.Loading Bluetooth SupportThe Bluetooth stack in &os; is implemented using the
&man.netgraph.4; framework. A broad variety of Bluetooth
USB dongles is supported by &man.ng.ubt.4;.
Broadcom BCM2033 based Bluetooth devices are supported by the
&man.ubtbcmfw.4; and &man.ng.ubt.4; drivers. The 3Com
Bluetooth PC Card 3CRWB60-A is supported by the
&man.ng.bt3c.4; driver. Serial and UART based Bluetooth
devices are supported by &man.sio.4;, &man.ng.h4.4;, and
&man.hcseriald.8;.Before attaching a device, determine which of the above
drivers it uses, then load the driver. For example, if the
device uses the &man.ng.ubt.4; driver:&prompt.root; kldload ng_ubtIf the Bluetooth device will be attached to the system
during system startup, the system can be configured to load
the module at boot time by adding the driver to
/boot/loader.conf:ng_ubt_load="YES"Once the driver is loaded, plug in the
USB dongle. If the driver load was
successful, output similar to the following should appear on
the console and in
/var/log/messages:ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
wMaxPacketSize=49, nframes=6, buffer size=294To start and stop the Bluetooth stack, use its startup
script. It is a good idea to stop the stack before unplugging
the device. When starting the stack, the output should be
similar to the following:&prompt.root; service bluetooth start ubt0
BD_ADDR: 00:02:72:00:d4:1a
Features: 0xff 0xff 0xf 00 00 00 00 00
<3-Slot> <5-Slot> <Encryption> <Slot offset>
<Timing accuracy> <Switch> <Hold mode> <Sniff mode>
<Park mode> <RSSI> <Channel quality> <SCO link>
<HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD>
<Paging scheme> <Power control> <Transparent SCO data>
Max. ACL packet size: 192 bytes
Number of ACL packets: 8
Max. SCO packet size: 64 bytes
Number of SCO packets: 8Finding Other Bluetooth DevicesHCIThe Host Controller Interface (HCI)
provides a uniform method for accessing Bluetooth baseband
capabilities. In &os;, a netgraph HCI node
is created for each Bluetooth device. For more details, refer
to &man.ng.hci.4;.One of the most common tasks is discovery of Bluetooth
devices within RF proximity. This
operation is called inquiry. Inquiry and
other HCI related operations are done using
&man.hccontrol.8;. The example below shows how to find out
which Bluetooth devices are in range. The list of devices
should be displayed in a few seconds. Note that a remote
device will only answer the inquiry if it is set to
discoverable mode.&prompt.user; hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: 00:80:37:29:19:a4
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 00
Page Scan Mode: 00
Class: 52:02:04
Clock offset: 0x78ef
Inquiry complete. Status: No error [00]The BD_ADDR is the unique address of a
Bluetooth device, similar to the MAC
address of a network card. This address is needed for further
communication with a device and it is possible to assign a
human readable name to a BD_ADDR. Information regarding the
known Bluetooth hosts is contained in
/etc/bluetooth/hosts. The following
example shows how to obtain the human readable name that was
assigned to the remote device:&prompt.user; hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4
BD_ADDR: 00:80:37:29:19:a4
Name: Pav's T39If an inquiry is performed on a remote Bluetooth device,
it will find the computer as
your.host.name (ubt0). The name assigned to
the local device can be changed at any time.The Bluetooth system provides a point-to-point connection
between two Bluetooth units, or a point-to-multipoint
connection which is shared among several Bluetooth devices.
The following example shows how to obtain the list of active
baseband connections for the local device:&prompt.user; hccontrol -n ubt0hci read_connection_list
Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State
00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPENA connection handle is useful when
termination of the baseband connection is required, though
it is normally not required to do this by hand. The stack
will automatically terminate inactive baseband
connections.&prompt.root; hccontrol -n ubt0hci disconnect 41
Connection handle: 41
Reason: Connection terminated by local host [0x16]Type hccontrol help for a complete
listing of available HCI commands. Most
of the HCI commands do not require
superuser privileges.Device PairingBy default, Bluetooth communication is not authenticated,
and any device can talk to any other device. A Bluetooth
device, such as a cellular phone, may choose to require
authentication to provide a particular service. Bluetooth
authentication is normally done with a
PIN code, an ASCII
string up to 16 characters in length. The user is required
to enter the same PIN code on both devices.
Once the user has entered the PIN code,
both devices will generate a link key.
After that, the link key can be stored either in the devices
or in a persistent storage. Next time, both devices will
use the previously generated link key. This procedure is
called pairing. Note that if the link
key is lost by either device, the pairing must be
repeated.The &man.hcsecd.8; daemon is responsible for handling
Bluetooth authentication requests. The default configuration
file is /etc/bluetooth/hcsecd.conf. An
example section for a cellular phone with the
PIN code set to 1234 is
shown below:device {
bdaddr 00:80:37:29:19:a4;
name "Pav's T39";
key nokey;
pin "1234";
}The only limitation on PIN codes is
length. Some devices, such as Bluetooth headsets, may have
a fixed PIN code built in. The
switch forces &man.hcsecd.8; to stay in
the foreground, so it is easy to see what is happening. Set
the remote device to receive pairing and initiate the
Bluetooth connection to the remote device. The remote device
should indicate that pairing was accepted and request the
PIN code. Enter the same
PIN code listed in
hcsecd.conf. Now the computer and the
remote device are paired. Alternatively, pairing can be
initiated on the remote device.The following line can be added to
/etc/rc.conf to configure &man.hcsecd.8;
to start automatically on system start:hcsecd_enable="YES"The following is a sample of the &man.hcsecd.8; daemon
output:hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist
hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists
hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4Network Access with
PPP ProfilesA Dial-Up Networking (DUN) profile can
be used to configure a cellular phone as a wireless modem for
connecting to a dial-up Internet access server. It can also
be used to configure a computer to receive data calls from a
cellular phone.Network access with a PPP profile can
be used to provide LAN access for a single
Bluetooth device or multiple Bluetooth devices. It can also
provide PC to PC
connection using PPP networking over serial
cable emulation.In &os;, these profiles are implemented with &man.ppp.8;
and the &man.rfcomm.pppd.8; wrapper which converts a
Bluetooth connection into something
PPP can use. Before a profile can be used,
a new PPP label must be created in
/etc/ppp/ppp.conf. Consult
&man.rfcomm.pppd.8; for examples.In this example, &man.rfcomm.pppd.8; is used to open a
connection to a remote device with a
BD_ADDR of
00:80:37:29:19:a4 on a
DUN RFCOMM
channel:&prompt.root; rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialupThe actual channel number will be obtained from the remote
device using the SDP protocol. It is
possible to specify the RFCOMM channel by
hand, and in this case &man.rfcomm.pppd.8; will not perform
the SDP query. Use &man.sdpcontrol.8; to
find out the RFCOMM channel on the remote
device.In order to provide network access with the
PPP LAN service,
&man.sdpd.8; must be running and a new entry for
LAN clients must be created in
/etc/ppp/ppp.conf. Consult
&man.rfcomm.pppd.8; for examples. Finally, start the
RFCOMM PPP server on a
valid RFCOMM channel number. The
RFCOMM PPP server will
automatically register the Bluetooth LAN
service with the local SDP daemon. The
example below shows how to start the RFCOMM
PPP server.&prompt.root; rfcomm_pppd -s -C 7 -l rfcomm-serverBluetooth ProtocolsThis section provides an overview of the various Bluetooth
protocols, their function, and associated utilities.Logical Link Control and Adaptation Protocol
(L2CAP)L2CAPThe Logical Link Control and Adaptation Protocol
(L2CAP) provides connection-oriented and
connectionless data services to upper layer protocols.
L2CAP permits higher level protocols and
applications to transmit and receive
L2CAP data packets up to 64 kilobytes in
length.L2CAP is based around the concept of
channels. A channel is a logical
connection on top of a baseband connection, where each
channel is bound to a single protocol in a many-to-one
fashion. Multiple channels can be bound to the same
protocol, but a channel cannot be bound to multiple
protocols. Each L2CAP packet received on
a channel is directed to the appropriate higher level
protocol. Multiple channels can share the same baseband
connection.In &os;, a netgraph L2CAP node is
created for each Bluetooth device. This node is normally
connected to the downstream Bluetooth HCI
node and upstream Bluetooth socket nodes. The default name
for the L2CAP node is
devicel2cap. For more details refer to
&man.ng.l2cap.4;.A useful command is &man.l2ping.8;, which can be used to
ping other devices. Some Bluetooth implementations might
not return all of the data sent to them, so 0
bytes in the following example is normal.&prompt.root; l2ping -a 00:80:37:29:19:a4
0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0The &man.l2control.8; utility is used to perform various
operations on L2CAP nodes. This example
shows how to obtain the list of logical connections
(channels) and the list of baseband connections for the
local device:&prompt.user; l2control -a 00:02:72:00:d4:1a read_channel_list
L2CAP channels:
Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State
00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN
&prompt.user; l2control -a 00:02:72:00:d4:1a read_connection_list
L2CAP connections:
Remote BD_ADDR Handle Flags Pending State
00:07:e0:00:0b:ca 41 O 0 OPENAnother diagnostic tool is &man.btsockstat.1;. It is
similar to &man.netstat.1;, but for Bluetooth
network-related data structures. The example below shows
the same logical connection as &man.l2control.8;
above.&prompt.user; btsockstat
Active L2CAP sockets
PCB Recv-Q Send-Q Local address/PSM Foreign address CID State
c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN
Active RFCOMM sessions
L2PCB PCB Flag MTU Out-Q DLCs State
c2afe900 c2b53380 1 127 0 Yes OPEN
Active RFCOMM sockets
PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State
c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPENRadio Frequency Communication
(RFCOMM)The RFCOMM protocol provides
emulation of serial ports over the L2CAP
protocol. RFCOMM is a simple transport
protocol, with additional provisions for emulating the 9
circuits of RS-232 (EIATIA-232-E) serial ports. It
supports up to 60 simultaneous connections
(RFCOMM channels) between two Bluetooth
devices.For the purposes of RFCOMM, a
complete communication path involves two applications
running on the communication endpoints with a communication
segment between them. RFCOMM is intended
to cover applications that make use of the serial ports of
the devices in which they reside. The communication segment
is a direct connect Bluetooth link from one device to
another.RFCOMM is only concerned with the
connection between the devices in the direct connect case,
or between the device and a modem in the network case.
RFCOMM can support other configurations,
such as modules that communicate via Bluetooth wireless
technology on one side and provide a wired interface on the
other side.In &os;, RFCOMM is implemented at the
Bluetooth sockets layer.Service Discovery Protocol
(SDP)SDPThe Service Discovery Protocol (SDP)
provides the means for client applications to discover the
existence of services provided by server applications as
well as the attributes of those services. The attributes of
a service include the type or class of service offered and
the mechanism or protocol information needed to utilize the
service.SDP involves communication between a
SDP server and a SDP
client. The server maintains a list of service records that
describe the characteristics of services associated with the
server. Each service record contains information about a
single service. A client may retrieve information from a
service record maintained by the SDP
server by issuing a SDP request. If the
client, or an application associated with the client,
decides to use a service, it must open a separate connection
to the service provider in order to utilize the service.
SDP provides a mechanism for discovering
services and their attributes, but it does not provide a
mechanism for utilizing those services.Normally, a SDP client searches for
services based on some desired characteristics of the
services. However, there are times when it is desirable to
discover which types of services are described by an
SDP server's service records without any
prior information about the services. This process of
looking for any offered services is called
browsing.The Bluetooth SDP server,
&man.sdpd.8;, and command line client, &man.sdpcontrol.8;,
are included in the standard &os; installation. The
following example shows how to perform a
SDP browse query.&prompt.user; sdpcontrol -a 00:01:03:fc:6e:ec browse
Record Handle: 00000000
Service Class ID List:
Service Discovery Server (0x1000)
Protocol Descriptor List:
L2CAP (0x0100)
Protocol specific parameter #1: u/int/uuid16 1
Protocol specific parameter #2: u/int/uuid16 1
Record Handle: 0x00000001
Service Class ID List:
Browse Group Descriptor (0x1001)
Record Handle: 0x00000002
Service Class ID List:
LAN Access Using PPP (0x1102)
Protocol Descriptor List:
L2CAP (0x0100)
RFCOMM (0x0003)
Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
LAN Access Using PPP (0x1102) ver. 1.0Note that each service has a list of attributes, such
as the RFCOMM channel. Depending on the
service, the user might need to make note of some of the
attributes. Some Bluetooth implementations do not support
service browsing and may return an empty list. In this
case, it is possible to search for the specific service.
The example below shows how to search for the
OBEX Object Push
(OPUSH) service:&prompt.user; sdpcontrol -a 00:01:03:fc:6e:ec search OPUSHOffering services on &os; to Bluetooth clients is done
with the &man.sdpd.8; server. The following line can be
added to /etc/rc.conf:sdpd_enable="YES"Then the &man.sdpd.8; daemon can be started with:&prompt.root; service sdpd startThe local server application that wants to provide a
Bluetooth service to remote clients will register the
service with the local SDP daemon. An
example of such an application is &man.rfcomm.pppd.8;. Once
started, it will register the Bluetooth LAN service with the
local SDP daemon.The list of services registered with the local
SDP server can be obtained by issuing a
SDP browse query via the local control
channel:&prompt.root; sdpcontrol -l browseOBEX Object Push
(OPUSH)OBEXObject Exchange (OBEX) is a widely
used protocol for simple file transfers between mobile
devices. Its main use is in infrared communication, where
it is used for generic file transfers between notebooks or
PDAs, and for sending business cards or
calendar entries between cellular phones and other devices
with Personal Information Manager (PIM)
applications.The OBEX server and client are
implemented by obexapp, which can
be installed using the comms/obexapp
package or port.The OBEX client is used to push
and/or pull objects from the OBEX server.
An example object is a business card or an appointment.
The OBEX client can obtain the
RFCOMM channel number from the remote
device via SDP. This can be done by
specifying the service name instead of the
RFCOMM channel number. Supported service
names are: IrMC, FTRN,
and OPUSH. It is also possible to
specify the RFCOMM channel as a number.
Below is an example of an OBEX session
where the device information object is pulled from the
cellular phone, and a new object, the business card, is
pushed into the phone's directory.&prompt.user; obexapp -a 00:80:37:29:19:a4 -C IrMC
obex> get telecom/devinfo.txt devinfo-t39.txt
Success, response: OK, Success (0x20)
obex> put new.vcf
Success, response: OK, Success (0x20)
obex> di
Success, response: OK, Success (0x20)In order to provide the OPUSH
service, &man.sdpd.8; must be running and a root folder,
where all incoming objects will be stored, must be created.
The default path to the root folder is
/var/spool/obex. Finally, start the
OBEX server on a valid
RFCOMM channel number. The
OBEX server will automatically register
the OPUSH service with the local
SDP daemon. The example below shows how
to start the OBEX server.&prompt.root; obexapp -s -C 10Serial Port Profile (SPP)The Serial Port Profile (SPP) allows
Bluetooth devices to perform serial cable emulation. This
profile allows legacy applications to use Bluetooth as a
cable replacement, through a virtual serial port
abstraction.In &os;, &man.rfcomm.sppd.1; implements
SPP and a pseudo tty is used as a virtual
serial port abstraction. The example below shows how to
connect to a remote device's serial port service. A
RFCOMM channel does not have to be
specified as &man.rfcomm.sppd.1; can obtain it from the
remote device via SDP. To override this,
specify a RFCOMM channel on the command
line.&prompt.root; rfcomm_sppd -a 00:07:E0:00:0B:CA -t
rfcomm_sppd[94692]: Starting on /dev/pts/6...
/dev/pts/6Once connected, the pseudo tty can be used as serial
port:&prompt.root; cu -l /dev/pts/6The pseudo tty is printed on stdout and can be read by
wrapper scripts:PTS=`rfcomm_sppd -a 00:07:E0:00:0B:CA -t`
cu -l $PTSTroubleshootingBy default, when &os; is accepting a new connection, it
tries to perform a role switch and become master. Some older
Bluetooth devices which do not support role switching will not
be able to connect. Since role switching is performed when a
new connection is being established, it is not possible to ask
the remote device if it supports role switching. However,
there is a HCI option to disable role
switching on the local side:&prompt.root; hccontrol -n ubt0hci write_node_role_switch 0To display Bluetooth packets, use the third-party package
hcidump, which can be installed
using the comms/hcidump package or port.
This utility is similar to &man.tcpdump.1; and can be used to
display the contents of Bluetooth packets on the terminal and
to dump the Bluetooth packets to a file.BridgingAndrewThompsonWritten by IP subnetbridgeIt is sometimes useful to divide a network, such as an
Ethernet segment, into network segments without having to
create IP subnets and use a router to connect
the segments together. A device that connects two networks
together in this fashion is called a
bridge.A bridge works by learning the MAC
addresses of the devices on each of its network interfaces. It
forwards traffic between networks only when the source and
destination MAC addresses are on different
networks. In many respects, a bridge is like an Ethernet switch
with very few ports. A &os; system with multiple network
interfaces can be configured to act as a bridge.Bridging can be useful in the following situations:Connecting NetworksThe basic operation of a bridge is to join two or more
network segments. There are many reasons to use a
host-based bridge instead of networking equipment, such as
cabling constraints or firewalling. A bridge can also
connect a wireless interface running in hostap mode to a
wired network and act as an access point.Filtering/Traffic Shaping FirewallA bridge can be used when firewall functionality is
needed without routing or Network Address Translation
(NAT).An example is a small company that is connected via
DSL or ISDN to an
ISP. There are thirteen public
IP addresses from the
ISP and ten computers on the network.
In this situation, using a router-based firewall is
difficult because of subnetting issues. A bridge-based
firewall can be configured without any
IP addressing issues.Network TapA bridge can join two network segments in order to
inspect all Ethernet frames that pass between them using
&man.bpf.4; and &man.tcpdump.1; on the bridge interface or
by sending a copy of all frames out an additional
interface known as a span port.Layer 2 VPNTwo Ethernet networks can be joined across an
IP link by bridging the networks to an
EtherIP tunnel or a &man.tap.4; based solution such as
OpenVPN.Layer 2 RedundancyA network can be connected together with multiple
links and use the Spanning Tree Protocol
(STP) to block redundant paths.This section describes how to configure a &os; system as a
bridge using &man.if.bridge.4;. A netgraph bridging driver is
also available, and is described in &man.ng.bridge.4;.Packet filtering can be used with any firewall package
that hooks into the &man.pfil.9; framework. The bridge can be
used as a traffic shaper with &man.altq.4; or
&man.dummynet.4;.Enabling the BridgeIn &os;, &man.if.bridge.4; is a kernel module which is
automatically loaded by &man.ifconfig.8; when creating a
bridge interface. It is also possible to compile bridge
support into a custom kernel by adding
device if_bridge to the custom kernel
configuration file.The bridge is created using interface cloning. To create
the bridge interface:&prompt.root; ifconfig bridge create
bridge0
&prompt.root; ifconfig bridge0
bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 96:3d:4b:f1:79:7a
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0When a bridge interface is created, it is automatically
assigned a randomly generated Ethernet address. The
maxaddr and timeout
parameters control how many MAC addresses
the bridge will keep in its forwarding table and how many
seconds before each entry is removed after it is last seen.
The other parameters control how STP
operates.Next, specify which network interfaces to add as members
of the bridge. For the bridge to forward packets, all member
interfaces and the bridge need to be up:&prompt.root; ifconfig bridge0 addm fxp0 addm fxp1 up
&prompt.root; ifconfig fxp0 up
&prompt.root; ifconfig fxp1 upThe bridge can now forward Ethernet frames between
fxp0 and fxp1. Add
the following lines to /etc/rc.conf so
the bridge is created at startup:cloned_interfaces="bridge0"
ifconfig_bridge0="addm fxp0 addm fxp1 up"
ifconfig_fxp0="up"
ifconfig_fxp1="up"If the bridge host needs an IP
address, set it on the bridge interface, not on the member
interfaces. The address can be set statically or via
DHCP. This example sets a static
IP address:&prompt.root; ifconfig bridge0 inet 192.168.0.1/24It is also possible to assign an IPv6
address to a bridge interface. To make the changes permanent,
add the addressing information to
/etc/rc.conf.When packet filtering is enabled, bridged packets will
pass through the filter inbound on the originating interface
on the bridge interface, and outbound on the appropriate
interfaces. Either stage can be disabled. When direction
of the packet flow is important, it is best to firewall on
the member interfaces rather than the bridge itself.The bridge has several configurable settings for passing
non-IP and IP packets,
and layer2 firewalling with &man.ipfw.8;. See
&man.if.bridge.4; for more information.Enabling Spanning TreeFor an Ethernet network to function properly, only one
active path can exist between two devices. The
STP protocol detects loops and puts
redundant links into a blocked state. Should one of the
active links fail, STP calculates a
different tree and enables one of the blocked paths to restore
connectivity to all points in the network.The Rapid Spanning Tree Protocol (RSTP
or 802.1w) provides backwards compatibility with legacy
STP. RSTP provides
faster convergence and exchanges information with neighboring
switches to quickly transition to forwarding mode without
creating loops. &os; supports RSTP and
STP as operating modes, with
RSTP being the default mode.STP can be enabled on member interfaces
using &man.ifconfig.8;. For a bridge with
fxp0 and fxp1 as the
current interfaces, enable STP with:&prompt.root; ifconfig bridge0 stp fxp0 stp fxp1
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether d6:cf:d5:a0:94:6d
id 00:01:02:4b:d4:50 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:01:02:4b:d4:50 priority 32768 ifcost 0 port 0
member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
port 3 priority 128 path cost 200000 proto rstp
role designated state forwarding
member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
port 4 priority 128 path cost 200000 proto rstp
role designated state forwardingThis bridge has a spanning tree ID of
00:01:02:4b:d4:50 and a priority of
32768. As the root id
is the same, it indicates that this is the root bridge for the
tree.Another bridge on the network also has
STP enabled:bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 96:3d:4b:f1:79:7a
id 00:13:d4:9a:06:7a priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4
member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
port 4 priority 128 path cost 200000 proto rstp
role root state forwarding
member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
port 5 priority 128 path cost 200000 proto rstp
role designated state forwardingThe line root id 00:01:02:4b:d4:50 priority 32768
ifcost 400000 port 4 shows that the root bridge is
00:01:02:4b:d4:50 and has a path cost of
400000 from this bridge. The path to the
root bridge is via port 4 which is
fxp0.Bridge Interface ParametersSeveral ifconfig parameters are unique
to bridge interfaces. This section summarizes some common
uses for these parameters. The complete list of available
parameters is described in &man.ifconfig.8;.privateA private interface does not forward any traffic to
any other port that is also designated as a private
interface. The traffic is blocked unconditionally so no
Ethernet frames will be forwarded, including
ARP packets. If traffic needs to be
selectively blocked, a firewall should be used
instead.spanA span port transmits a copy of every Ethernet frame
received by the bridge. The number of span ports
configured on a bridge is unlimited, but if an
interface is designated as a span port, it cannot also
be used as a regular bridge port. This is most useful
for snooping a bridged network passively on another host
connected to one of the span ports of the bridge. For
example, to send a copy of all frames out the interface
named fxp4:&prompt.root; ifconfig bridge0 span fxp4stickyIf a bridge member interface is marked as sticky,
dynamically learned address entries are treated at
static entries in the forwarding cache. Sticky entries
are never aged out of the cache or replaced, even if the
address is seen on a different interface. This gives
the benefit of static address entries without the need
to pre-populate the forwarding table. Clients learned
on a particular segment of the bridge can not roam to
another segment.An example of using sticky addresses is to combine
the bridge with VLANs in order to
isolate customer networks without wasting
IP address space. Consider that
CustomerA
is on vlan100, CustomerB is on
vlan101, and the bridge has the
address 192.168.0.1:&prompt.root; ifconfig bridge0 addm vlan100 sticky vlan100 addm vlan101 sticky vlan101
&prompt.root; ifconfig bridge0 inet 192.168.0.1/24In this example, both clients see 192.168.0.1 as their
default gateway. Since the bridge cache is sticky, one
host can not spoof the MAC address of
the other customer in order to intercept their
traffic.Any communication between the
VLANs can be blocked using a firewall
or, as seen in this example, private interfaces:&prompt.root; ifconfig bridge0 private vlan100 private vlan101The customers are completely isolated from each
other and the full /24 address range can be
allocated without subnetting.The number of unique source MAC
addresses behind an interface can be limited. Once the
limit is reached, packets with unknown source addresses
are dropped until an existing host cache entry expires
or is removed.The following example sets the maximum number of
Ethernet devices for CustomerA on
vlan100 to 10:&prompt.root; ifconfig bridge0 ifmaxaddr vlan100 10Bridge interfaces also support monitor mode, where the
packets are discarded after &man.bpf.4; processing and are not
processed or forwarded further. This can be used to
multiplex the input of two or more interfaces into a single
&man.bpf.4; stream. This is useful for reconstructing the
traffic for network taps that transmit the RX/TX signals out
through two separate interfaces. For example, to read the
input from four network interfaces as one stream:&prompt.root; ifconfig bridge0 addm fxp0 addm fxp1 addm fxp2 addm fxp3 monitor up
&prompt.root; tcpdump -i bridge0SNMP MonitoringThe bridge interface and STP
parameters can be monitored via &man.bsnmpd.1; which is
included in the &os; base system. The exported bridge
MIBs conform to IETF
standards so any SNMP client or monitoring
package can be used to retrieve the data.To enable monitoring on the bridge, uncomment this line in
/etc/snmp.config by removing the
beginning # symbol:begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"Other configuration settings, such as community names and
access lists, may need to be modified in this file. See
&man.bsnmpd.1; and &man.snmp.bridge.3; for more information.
Once these edits are saved, add this line to
/etc/rc.conf:bsnmpd_enable="YES"Then, start &man.bsnmpd.1;:&prompt.root; service bsnmpd startThe following examples use the
Net-SNMP software
(net-mgmt/net-snmp) to query a bridge
from a client system. The
net-mgmt/bsnmptools port can also be used.
From the SNMP client which is running
Net-SNMP, add the following lines
to $HOME/.snmp/snmp.conf in order to
import the bridge MIB definitions:mibdirs +/usr/share/snmp/mibs
mibs +BRIDGE-MIB:RSTP-MIB:BEGEMOT-MIB:BEGEMOT-BRIDGE-MIBTo monitor a single bridge using the IETF BRIDGE-MIB
(RFC4188):&prompt.user; snmpwalk -v 2c -c public bridge1.example.com mib-2.dot1dBridge
BRIDGE-MIB::dot1dBaseBridgeAddress.0 = STRING: 66:fb:9b:6e:5c:44
BRIDGE-MIB::dot1dBaseNumPorts.0 = INTEGER: 1 ports
BRIDGE-MIB::dot1dStpTimeSinceTopologyChange.0 = Timeticks: (189959) 0:31:39.59 centi-seconds
BRIDGE-MIB::dot1dStpTopChanges.0 = Counter32: 2
BRIDGE-MIB::dot1dStpDesignatedRoot.0 = Hex-STRING: 80 00 00 01 02 4B D4 50
...
BRIDGE-MIB::dot1dStpPortState.3 = INTEGER: forwarding(5)
BRIDGE-MIB::dot1dStpPortEnable.3 = INTEGER: enabled(1)
BRIDGE-MIB::dot1dStpPortPathCost.3 = INTEGER: 200000
BRIDGE-MIB::dot1dStpPortDesignatedRoot.3 = Hex-STRING: 80 00 00 01 02 4B D4 50
BRIDGE-MIB::dot1dStpPortDesignatedCost.3 = INTEGER: 0
BRIDGE-MIB::dot1dStpPortDesignatedBridge.3 = Hex-STRING: 80 00 00 01 02 4B D4 50
BRIDGE-MIB::dot1dStpPortDesignatedPort.3 = Hex-STRING: 03 80
BRIDGE-MIB::dot1dStpPortForwardTransitions.3 = Counter32: 1
RSTP-MIB::dot1dStpVersion.0 = INTEGER: rstp(2)The dot1dStpTopChanges.0 value is two,
indicating that the STP bridge topology has
changed twice. A topology change means that one or more links
in the network have changed or failed and a new tree has been
calculated. The
dot1dStpTimeSinceTopologyChange.0 value
will show when this happened.To monitor multiple bridge interfaces, the private
BEGEMOT-BRIDGE-MIB can be used:&prompt.user; snmpwalk -v 2c -c public bridge1.example.com
enterprises.fokus.begemot.begemotBridge
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge0" = STRING: bridge0
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge2" = STRING: bridge2
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge0" = STRING: e:ce:3b:5a:9e:13
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge2" = STRING: 12:5e:4d:74:d:fc
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge0" = INTEGER: 1
BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge2" = INTEGER: 1
...
BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge0" = Timeticks: (116927) 0:19:29.27 centi-seconds
BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge2" = Timeticks: (82773) 0:13:47.73 centi-seconds
BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge0" = Counter32: 1
BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge2" = Counter32: 1
BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge0" = Hex-STRING: 80 00 00 40 95 30 5E 31
BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge2" = Hex-STRING: 80 00 00 50 8B B8 C6 A9To change the bridge interface being monitored via the
mib-2.dot1dBridge subtree:&prompt.user; snmpset -v 2c -c private bridge1.example.com
BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2Link Aggregation and FailoverAndrewThompsonWritten by laggfailoverFECLACPloadbalanceroundrobin&os; provides the &man.lagg.4; interface which can be used
to aggregate multiple network interfaces into one virtual
interface in order to provide failover and link aggregation.
Failover allows traffic to continue to flow as long as at least
one aggregated network interface has an established link. Link
aggregation works best on switches which support
LACP, as this protocol distributes traffic
bi-directionally while responding to the failure of individual
links.The aggregation protocols supported by the lagg interface
determine which ports are used for outgoing traffic and whether
or not a specific port accepts incoming traffic. The following
protocols are supported by &man.lagg.4;:failoverThis mode sends and receives traffic only through
the master port. If the master port becomes
unavailable, the next active port is used. The first
interface added to the virtual interface is the master
port and all subsequently added interfaces are used as
failover devices. If failover to a non-master port
occurs, the original port becomes master once it
becomes available again.fec / loadbalance&cisco; Fast ðerchannel; (FEC)
is found on older &cisco; switches. It provides a
static setup and does not negotiate aggregation with the
peer or exchange frames to monitor the link. If the
switch supports LACP, that should be
used instead.lacpThe &ieee; 802.3ad Link Aggregation Control Protocol
(LACP) negotiates a set of
aggregable links with the peer into one or more Link
Aggregated Groups (LAGs). Each
LAG is composed of ports of the same
speed, set to full-duplex operation, and traffic is
balanced across the ports in the
LAG with the greatest total speed.
Typically, there is only one LAG
which contains all the ports. In the event of changes
in physical connectivity,
LACP will quickly converge to a new
configuration.LACP balances outgoing traffic
across the active ports based on hashed protocol header
information and accepts incoming traffic from any active
port. The hash includes the Ethernet source and
destination address and, if available, the
VLAN tag, and the
IPv4 or IPv6
source and destination address.roundrobinThis mode distributes outgoing traffic using a
round-robin scheduler through all active ports and
accepts incoming traffic from any active port. Since
this mode violates Ethernet frame ordering, it should be
used with caution.Configuration ExamplesThis section demonstrates how to configure a &cisco;
switch and a &os; system for LACP load
balancing. It then shows how to configure two Ethernet
interfaces in failover mode as well as how to configure
failover mode between an Ethernet and a wireless
interface.LACP Aggregation with a &cisco;
SwitchThis example connects two &man.fxp.4; Ethernet
interfaces on a &os; machine to the first two Ethernet ports
on a &cisco; switch as a single load balanced and fault
tolerant link. More interfaces can be added to increase
throughput and fault tolerance. Replace the names of the
&cisco; ports, Ethernet devices, channel group number, and
IP address shown in the example to match
the local configuration.Frame ordering is mandatory on Ethernet links and any
traffic between two stations always flows over the same
physical link, limiting the maximum speed to that of one
interface. The transmit algorithm attempts to use as much
information as it can to distinguish different traffic flows
and balance the flows across the available
interfaces.On the &cisco; switch, add the
FastEthernet0/1 and
FastEthernet0/2 interfaces to
channel group 1:interface FastEthernet0/1
channel-group 1 mode active
channel-protocol lacp
!
interface FastEthernet0/2
channel-group 1 mode active
channel-protocol lacpOn the &os; system, create the &man.lagg.4; interface
using the physical interfaces
fxp0 and
fxp1 and bring the interfaces up
with an IP address of
10.0.0.3/24:&prompt.root; ifconfig fxp0 up
&prompt.root; ifconfig fxp1 up
&prompt.root; ifconfig lagg0 create
&prompt.root; ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp110.0.0.3/24Next, verify the status of the virtual interface:&prompt.root; ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:05:5d:71:8d:b8
media: Ethernet autoselect
status: active
laggproto lacp
laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>Ports
marked as ACTIVE are part of the
LAG that has been negotiated with the
remote switch. Traffic will be transmitted and received
through these active ports. Add to the
above command to view the LAG
identifiers.To see the port status on the &cisco; switch:switch# show lacp neighbor
Flags: S - Device is requesting Slow LACPDUs
F - Device is requesting Fast LACPDUs
A - Device is in Active mode P - Device is in Passive mode
Channel group 1 neighbors
Partner's information:
LACP port Oper Port Port
Port Flags Priority Dev ID Age Key Number State
Fa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3D
Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3DFor more detail, type show lacp neighbor
detail.To retain this configuration across reboots, add the
following entries to
/etc/rc.conf on the &os; system:ifconfig_fxp0="up"
ifconfig_fxp1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp110.0.0.3/24"Failover ModeFailover mode can be used to switch over to a secondary
interface if the link is lost on the master interface. To
configure failover, make sure that the underlying physical
interfaces are up, then create the &man.lagg.4; interface.
In this example, fxp0 is the
master interface, fxp1 is the
secondary interface, and the virtual interface is assigned
an IP address of
10.0.0.15/24:&prompt.root; ifconfig fxp0 up
&prompt.root; ifconfig fxp1 up
&prompt.root; ifconfig lagg0 create
&prompt.root; ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp110.0.0.15/24The virtual interface should look something like
this:&prompt.root; ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:05:5d:71:8d:b8
inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet autoselect
status: active
laggproto failover
laggport: fxp1 flags=0<>
laggport: fxp0 flags=5<MASTER,ACTIVE>Traffic will be transmitted and received on
fxp0. If the link is lost on
fxp0,
fxp1 will become the active link.
If the link is restored on the master interface, it will
once again become the active link.To retain this configuration across reboots, add the
following entries to
/etc/rc.conf:ifconfig_fxp0="up"
ifconfig_fxp1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport fxp0 laggport fxp110.0.0.15/24"Failover Mode Between Ethernet and Wireless
InterfacesFor laptop users, it is usually desirable to configure
the wireless device as a secondary which is only used when
the Ethernet connection is not available. With
&man.lagg.4;, it is possible to configure a failover which
prefers the Ethernet connection for both performance and
security reasons, while maintaining the ability to transfer
data over the wireless connection.This is achieved by overriding the physical wireless
interface's MAC address with that of the
Ethernet interface.In this example, the Ethernet interface,
bge0, is the master and the
wireless interface, wlan0, is
the failover. The wlan0 device
was created from iwn0 wireless
interface, which will be configured with the
MAC address of the Ethernet interface.
First, determine the MAC address of the
Ethernet interface:&prompt.root; ifconfig bge0
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
ether 00:21:70:da:ae:37
inet6 fe80::221:70ff:feda:ae37%bge0 prefixlen 64 scopeid 0x2
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect (1000baseT <full-duplex>)
status: activeReplace bge0 to match the
system's Ethernet interface name. The
ether line will contain the
MAC address of the specified interface.
Now, change the MAC address of the
underlying wireless interface:&prompt.root; ifconfig iwn0 ether 00:21:70:da:ae:37Bring the wireless interface up, but do not set an
IP address:&prompt.root; ifconfig wlan0 create wlandev iwn0 ssid my_router upMake sure the bge0 interface
is up, then create the &man.lagg.4; interface with
bge0 as master with failover to
wlan0:&prompt.root; ifconfig bge0 up
&prompt.root; ifconfig lagg0 create
&prompt.root; ifconfig lagg0 up laggproto failover laggport bge0 laggport wlan0The virtual interface should look something like
this:&prompt.root; ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:21:70:da:ae:37
media: Ethernet autoselect
status: active
laggproto failover
laggport: wlan0 flags=0<>
laggport: bge0 flags=5<MASTER,ACTIVE>Then, start the DHCP client to
obtain an IP address:&prompt.root; dhclient lagg0To retain this configuration across reboots, add the
following entries to
/etc/rc.conf:ifconfig_bge0="up"
ifconfig_iwn0="ether 00:21:70:da:ae:37"
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport bge0 laggport wlan0 DHCP"Diskless Operation with PXEJean-FrançoisDockèsUpdated by AlexDupreReorganized and enhanced by diskless workstationdiskless operationThe &intel; Preboot eXecution Environment
(PXE) allows an operating system to boot over
the network. For example, a &os; system can boot over the
network and operate without a local disk, using file systems
mounted from an NFS server.
PXE support is usually available in the
BIOS. To use PXE when the
machine starts, select the Boot from network
option in the BIOS setup or type a function
key during system initialization.In order to provide the files needed for an operating system
to boot over the network, a PXE setup also
requires properly configured DHCP,
TFTP, and NFS servers,
where:Initial parameters, such as an IP
address, executable boot filename and location, server name,
and root path are obtained from the
DHCP server.The operating system loader file is booted using
TFTP.The file systems are loaded using
NFS.When a computer PXE boots, it receives
information over DHCP about where to obtain
the initial boot loader file. After the host computer receives
this information, it downloads the boot loader via
TFTP and then executes the boot loader. In
&os;, the boot loader file is
/boot/pxeboot. After
/boot/pxeboot executes, the &os; kernel is
loaded and the rest of the &os; bootup sequence proceeds, as
described in .This section describes how to configure these services on a
&os; system so that other systems can PXE
boot into &os;. Refer to &man.diskless.8; for more
information.As described, the system providing these services is
insecure. It should live in a protected area of a network and
be untrusted by other hosts.Setting Up the PXE
EnvironmentCraigRodrigues
rodrigc@FreeBSD.org
Written by The steps shown in this section configure the built-in
NFS and TFTP servers.
The next section demonstrates how to install and configure the
DHCP server. In this example, the
directory which will contain the files used by
PXE users is
/b/tftpboot/FreeBSD/install. It is
important that this directory exists and that the same
directory name is set in both
/etc/inetd.conf and
/usr/local/etc/dhcpd.conf.Create the root directory which will contain a &os;
installation to be NFS mounted:&prompt.root; export NFSROOTDIR=/b/tftpboot/FreeBSD/install
&prompt.root; mkdir -p ${NFSROOTDIR}Enable the NFS server by adding
this line to /etc/rc.conf:nfs_server_enable="YES"Export the diskless root directory via
NFS by adding the following to
/etc/exports:/b -ro -alldirsStart the NFS server:&prompt.root; service nfsd startEnable &man.inetd.8; by adding the following line to
/etc/rc.conf:inetd_enable="YES"Uncomment the following line in
/etc/inetd.conf by making sure it
does not start with a # symbol:tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpbootSome PXE versions require the
TCP version of
TFTP. In this case, uncomment the
second tftp line which contains
stream tcp.Start &man.inetd.8;:&prompt.root; service inetd startRebuild the &os; kernel and userland (refer to for more detailed
instructions):&prompt.root; cd /usr/src
&prompt.root; make buildworld
&prompt.root; make buildkernelInstall &os; into the directory mounted over
NFS:&prompt.root; make installworld DESTDIR=${NFSROOTDIR}
&prompt.root; make installkernel DESTDIR=${NFSROOTDIR}
&prompt.root; make distribution DESTDIR=${NFSROOTDIR}Test that the TFTP server works and
can download the boot loader which will be obtained via
PXE:&prompt.root; tftp localhost
tftp> get FreeBSD/install/boot/pxeboot
Received 264951 bytes in 0.1 secondsEdit ${NFSROOTDIR}/etc/fstab and
create an entry to mount the root file system over
NFS:# Device Mountpoint FSType Options Dump Pass
myhost.example.com:/b/tftpboot/FreeBSD/install / nfs ro 0 0Replace myhost.example.com
with the hostname or IP address of the
NFS server. In this example, the root
file system is mounted read-only in order to prevent
NFS clients from potentially deleting
the contents of the root file system.Set the root password in the PXE
environment for client machines which are
PXE booting :&prompt.root; chroot ${NFSROOTDIR}
&prompt.root; passwdIf needed, enable &man.ssh.1; root logins for client
machines which are PXE booting by
editing
${NFSROOTDIR}/etc/ssh/sshd_config and
enabling PermitRootLogin. This option
is documented in &man.sshd.config.5;.Perform any other needed customizations of the
PXE environment in
${NFSROOTDIR}. These customizations
could include things like installing packages or editing
the password file with &man.vipw.8;.When booting from an NFS root volume,
/etc/rc detects the
NFS boot and runs
/etc/rc.initdiskless. In this case,
/etc and /var need
to be memory backed file systems so that these directories are
writable but the NFS root directory is
read-only:&prompt.root; chroot ${NFSROOTDIR}
&prompt.root; mkdir -p conf/base
&prompt.root; tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc
&prompt.root; tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip varWhen the system boots, memory file systems for
/etc and /var will
be created and mounted and the contents of the
cpio.gz files will be copied into
them.Configuring the DHCP ServerDHCPdiskless operationThe DHCP server does not need to be the
same machine as the TFTP and
NFS server, but it needs to be accessible
in the network.DHCP is not part of the &os; base
system but can be installed using the
net/isc-dhcp42-server port or
package.Once installed, edit the configuration file,
/usr/local/etc/dhcpd.conf. Configure
the next-server,
filename, and
root-path settings as seen in this
example:subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.3 ;
option subnet-mask 255.255.255.0 ;
option routers 192.168.0.1 ;
option broadcast-address 192.168.0.255 ;
option domain-name-servers 192.168.35.35, 192.168.35.36 ;
option domain-name "example.com";
# IP address of TFTP server
next-server 192.168.0.1 ;
# path of boot loader obtained via tftp
filename "FreeBSD/install/boot/pxeboot" ;
# pxeboot boot loader will try to NFS mount this directory for root FS
option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/" ;
}The next-server directive is used to
specify the IP address of the
TFTP server.The filename directive defines the path
to /boot/pxeboot. A relative filename is
used, meaning that /b/tftpboot is not
included in the path.The root-path option defines the path
to the NFS root file system.Once the edits are saved, enable NFS at
boot time by adding the following line to
/etc/rc.conf:dhcpd_enable="YES"Then, start the DHCP service:&prompt.root; service isc-dhcpd startDebugging PXE ProblemsOnce all of the services are configured and started,
PXE clients should be able to
automatically load &os; over the network. If a particular
client is unable to connect, when that client machine boots
up, enter the BIOS configuration menu and
confirm that it is set to boot from the network.This section describes some troubleshooting tips for
isolating the source of the configuration problem should no
clients be able to PXE boot.Use the net/wireshark package or
port to debug the network traffic involved during the
PXE booting process, which is
illustrated in the diagram below.PXE Booting Process with
NFS Root MountClient broadcasts a
DHCPDISCOVER message.The DHCP server responds
with the IP address,
next-server,
filename, and
root-path values.The client sends a TFTP
request to next-server,
asking to retrieve
filename.The TFTP server responds
and sends filename to
client.The client executes
filename, which is
&man.pxeboot.8;, which then loads the kernel.
When the kernel executes, the root file system
specified by root-path is
mounted over NFS.On the
TFTP server, read
/var/log/xferlog to ensure that the
pxeboot file is being retrieved from
the correct location. To test this example
configuration:&prompt.root; tftp 192.168.0.1
tftp> get FreeBSD/install/boot/pxeboot
Received 264951 bytes in 0.1 secondsThe BUGS sections in &man.tftpd.8;
and &man.tftp.1; document some limitations with
TFTP.Make sure that the root file system can be mounted
via NFS. To test this example
configuration:&prompt.root; mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mntIPv6AaronKaplanOriginally Written by TomRhodesRestructured and Added by BradDavisExtended by IPv6 is the new version of the well known
IP protocol, also known as
IPv4. IPv6 provides
several advantages over IPv4 as well as many
new features:Its 128-bit address space allows for
340,282,366,920,938,463,463,374,607,431,768,211,456
addresses. This addresses the IPv4
address shortage and eventual IPv4
address exhaustion.Routers only store network aggregation addresses in
their routing tables, thus reducing the average space of a
routing table to 8192 entries. This addresses the
scalability issues associated with IPv4,
which required every allocated block of
IPv4 addresses to be exchanged between
Internet routers, causing their routing tables to become too
large to allow efficient routing.Address autoconfiguration (RFC2462).Mandatory multicast addresses.Built-in IPsec (IP
security).Simplified header structure.Support for mobile IP.IPv6-to-IPv4
transition mechanisms.&os; includes the http://www.kame.net/
IPv6 reference implementation and comes
with everything needed to use IPv6. This
section focuses on getting IPv6 configured
and running.Background on IPv6 AddressesThere are three different types of IPv6
addresses:UnicastA packet sent to a unicast address arrives at the
interface belonging to the address.AnycastThese addresses are syntactically indistinguishable
from unicast addresses but they address a group of
interfaces. The packet destined for an anycast address
will arrive at the nearest router interface. Anycast
addresses are only used by routers.MulticastThese addresses identify a group of interfaces. A
packet destined for a multicast address will arrive at
all interfaces belonging to the multicast group. The
IPv4 broadcast address, usually
xxx.xxx.xxx.255, is
expressed by multicast addresses in
IPv6.When reading an IPv6 address, the
canonical form is represented as
x:x:x:x:x:x:x:x, where each
x represents a 16 bit hex value. An
example is
FEBC:A574:382B:23C1:AA49:4592:4EFE:9982.Often, an address will have long substrings of all zeros.
A :: (double colon) can be used to replace
one substring per address. Also, up to three leading
0s per hex value can be omitted. For
example, fe80::1 corresponds to the
canonical form
fe80:0000:0000:0000:0000:0000:0000:0001.A third form is to write the last 32 bits using the well
known IPv4 notation. For example,
2002::10.0.0.1 corresponds to the
hexadecimal canonical representation
2002:0000:0000:0000:0000:0000:0a00:0001,
which in turn is equivalent to
2002::a00:1.To view a &os; system's IPv6 address,
use &man.ifconfig.8;:&prompt.root; ifconfigrl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
ether 00:00:21:03:08:e1
media: Ethernet autoselect (100baseTX )
status: activeIn this example,
fe80::200:21ff:fe03:8e1%rl0 is an
auto-configured link-local address which was automatically
generated from the MAC address.Some IPv6 addresses are reserved. A
summary of these reserved addresses is seen in :
Reserved IPv6 AddressesIPv6 addressPrefixlength (Bits)DescriptionNotes::128 bitsunspecifiedEquivalent to 0.0.0.0 in
IPv4.::1128 bitsloopback addressEquivalent to 127.0.0.1 in
IPv4.::00:xx:xx:xx:xx96 bitsembedded IPv4The lower 32 bits are the compatible
IPv4 address.::ff:xx:xx:xx:xx96 bitsIPv4 mapped
IPv6 addressThe lower 32 bits are the IPv4
address for hosts which do not support
IPv6.fe80::/1010 bitslink-localEquivalent to 169.254.0.0/16 in
IPv4.fc00::/77 bitsunique-localUnique local addresses are intended for local
communication and are only routable within a set of
cooperating sites.ff00::8 bitsmulticast2000::-3fff:: 3 bitsglobal unicastAll global unicast addresses are assigned from
this pool. The first 3 bits are
001.
For further information on the structure of
IPv6 addresses, refer to RFC3513.Configuring IPv6To configure a &os; system as an IPv6
client, add these two lines to
rc.conf:ifconfig_em0_ipv6="inet6 accept_rtadv"
rtsold_enable="YES"The first line enables the specified interface to receive
router solicitation messages. The second line enables the
router solicitation daemon, &man.rtsol.8;.For &os; 8.x, add a third
line:ipv6_enable="YES"If the interface needs a statically assigned
IPv6 address, add an entry to specify the
static address and associated prefix length:ifconfig_fxp0_ipv6="inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64"On a &os; 8.x system, that
line uses this format instead:ipv6_ifconfig_fxp0="2001:db8:4672:6565:2026:5043:2d42:5344"To assign a default router, specify its address:ipv6_defaultrouter="2001:db8:4672:6565::1"Connecting to a ProviderIn order to connect to other IPv6
networks, one must have a provider or a tunnel that supports
IPv6:Contact an Internet Service Provider to see if they
offer IPv6.SixXS
offers tunnels with end-points all around the
globe.Hurricane
Electric offers tunnels with end-points all
around the globe.Install the net/freenet6 package or
port for a dial-up connection.This section demonstrates how to take the directions from
a tunnel provider and convert them into
/etc/rc.conf settings that will persist
through reboots.The first /etc/rc.conf entry creates
the generic tunneling interface
gif0:gif_interfaces="gif0"Next, configure that interface with the
IPv4 addresses of the local and remote
endpoints. Replace MY_IPv4_ADDR
and REMOTE_IPv4_ADDR with the
actual IPv4 addresses:gifconfig_gif0="MY_IPv4_ADDR REMOTE_IPv4_ADDR"To apply the IPv6 address that has been
assigned for use as the IPv6 tunnel
endpoint, add this line, replacing
MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR
with the assigned address:ifconfig_gif0_ipv6="inet6 MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR"For &os; 8.x, that line
should instead use this format:ipv6_ifconfig_gif0="MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR"Then, set the default route for the other side of the
IPv6 tunnel. Replace
MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR
with the default gateway address assigned by the
provider:ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR"If the &os; system will route IPv6
packets between the rest of the network and the world, enable
the gateway using this line:ipv6_gateway_enable="YES"Router Advertisement and Host Auto ConfigurationThis section demonstrates how to setup &man.rtadvd.8; to
advertise the IPv6 default route.To enable &man.rtadvd.8;, add the following to
/etc/rc.conf:rtadvd_enable="YES"It is important to specify the interface on which to
do IPv6 router solicitation. For example,
to tell &man.rtadvd.8; to use
fxp0:rtadvd_interfaces="fxp0"Next, create the configuration file,
/etc/rtadvd.conf as seen in this
example:fxp0:\
:addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether:Replace fxp0 with the interface
to be used and 2001:471:1f11:246::
with the prefix of the allocation.For a dedicated /64 subnet, nothing else needs
to be changed. Otherwise, change the
prefixlen# to the correct value.IPv6 and IPv6
Address MappingWhen IPv6 is enabled on a server, there
may be a need to enable IPv4 mapped
IPv6 address communication. This
compatibility option allows for IPv4
addresses to be represented as IPv6
addresses. Permitting IPv6 applications
to communicate with IPv4 and vice versa
may be a security issue.This option may not be required in most cases and is
available only for compatibility. This option will allow
IPv6-only applications to work with
IPv4 in a dual stack environment. This
is most useful for third party applications which may not
support an IPv6-only environment. To
enable this feature,
add the following to /etc/rc.conf:ipv6_ipv4mapping="YES"Reviewing the information in RFC 3493,
section 3.6 and 3.7 as well as RFC 4038
section 4.2 may be useful to some adminstrators.Common Address Redundancy Protocol
(CARP)TomRhodesContributed by AllanJudeUpdated by CARPCommon Address Redundancy ProtocolThe Common Address Redundancy Protocol
(CARP) allows multiple hosts to share the
same IP address and Virtual Host ID
(VHID) in order to provide high
availability for one or more services. This means
that one or more hosts can fail, and the other hosts will
transparently take over so that users do not see a service
failure.In addition to the shared IP address,
each host has its own IP address for
management and configuration. All of the machines that share an
IP address have the same
VHID. The VHID for each
virtual IP address must be unique across the
broadcast domain of the network interface.High availability using CARP is built
into &os;, though the steps to configure it vary slightly
depending upon the &os; version. This section provides the same
example configuration for versions before and equal to or after
&os; 10.This example configures failover support with three hosts,
all with unique IP addresses, but providing
the same web content. It has two different masters named
hosta.example.org and
hostb.example.org, with a shared backup
named hostc.example.org.These machines are load balanced with a Round Robin
DNS configuration. The master and backup
machines are configured identically except for their hostnames
and management IP addresses. These servers
must have the same configuration and run the same services.
When the failover occurs, requests to the service on the shared
IP address can only be answered correctly if
the backup server has access to the same content. The backup
machine has two additional CARP interfaces,
one for each of the master content server's
IP addresses. When a failure occurs, the
backup server will pick up the failed master machine's
IP address.Using CARP on &os; 10 and
LaterEnable boot-time support for CARP by
adding an entry for the carp.ko kernel
module in /boot/loader.conf:carp_load="YES"To load the module now without rebooting:&prompt.root; kldload carpFor users who prefer to use a custom kernel, include the
following line in the custom kernel configuration file and
compile the kernel as described in :device carpThe hostname, management IP address and
subnet mask, shared IP address, and
VHID are all set by adding entries to
/etc/rc.conf. This example is for
hosta.example.org:hostname="hosta.example.org"
ifconfig_em0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 1 pass testpass alias 192.168.1.50/32"The next set of entries are for
hostb.example.org. Since it
represents a second master, it uses a different shared
IP address and VHID.
However, the passwords specified with
must be identical as CARP will only listen
to and accept advertisements from machines with the correct
password.hostname="hostb.example.org"
ifconfig_em0="inet 192.168.1.4 netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 2 pass testpass alias 192.168.1.51/32"The third machine,
hostc.example.org, is configured to
handle failover from either master. This machine is
configured with two CARP
VHIDs, one to handle the virtual
IP address for each of the master hosts.
The CARP advertising skew,
, is set to ensure that the backup
host advertises later than the master, since
controls the order of precedence when
there are multiple backup servers.hostname="hostc.example.org"
ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 1 advskew 100 pass testpass alias 192.168.1.50/32"
ifconfig_em0_alias1="vhid 2 advskew 100 pass testpass alias 192.168.1.51/32"Having two CARP
VHIDs configured means that
hostc.example.org will notice if
either of the master servers becomes unavailable. If a master
fails to advertise before the backup server, the backup server
will pick up the shared IP address until
the master becomes available again.Preemption is disabled by default. If preemption has
been enabled, hostc.example.org
might not release the virtual IP address
back to the original master server. The administrator
can force the backup server to return the
IP address to the master with the
command:&prompt.root; ifconfig em0 vhid 1 state backupOnce the configuration is complete, either restart
networking or reboot each system. High availability is now
enabled.CARP functionality can be controlled
via several &man.sysctl.8; variables documented in the
&man.carp.4; manual pages. Other actions can be triggered
from CARP events by using
&man.devd.8;.Using CARP on &os; 9 and
EarlierThe configuration for these versions of &os; is similar to
the one described in the previous section, except that a
CARP device must first be created and
referred to in the configuration.Enable boot-time support for CARP by
loading the if_carp.ko kernel module in
/boot/loader.conf:if_carp_load="YES"To load the module now without rebooting:&prompt.root; kldload carpFor users who prefer to use a custom kernel, include the
following line in the custom kernel configuration file and
compile the kernel as described in :device carpNext, on each host, create a CARP
device:&prompt.root; ifconfig carp0 createSet the hostname, management IP
address, the shared IP address, and
VHID by adding the required lines to
/etc/rc.conf. Since a virtual
CARP device is used instead of an alias,
the actual subnet mask of /24 is used
instead of /32. Here are the entries for
hosta.example.org:hostname="hosta.example.org"
ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass testpass192.168.1.50/24"On hostb.example.org:hostname="hostb.example.org"
ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 2 pass testpass192.168.1.51/24"The third machine,
hostc.example.org, is configured to
handle failover from either of the master hosts:hostname="hostc.example.org"
ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"
cloned_interfaces="carp0 carp1"
ifconfig_carp0="vhid 1 advskew 100 pass testpass192.168.1.50/24"
ifconfig_carp1="vhid 2 advskew 100 pass testpass192.168.1.51/24"Preemption is disabled in the GENERIC &os; kernel. If
preemption has been enabled with a custom kernel,
hostc.example.org may not release
the IP address back to the original
content server. The administrator can force the backup
server to return the IP address to the
master with the command:&prompt.root; ifconfig carp0 down && ifconfig carp0 upThis should be done on the carp
interface which corresponds to the correct host.Once the configuration is complete, either restart
networking or reboot each system. High availability is now
enabled.
Index: head/en_US.ISO8859-1/books/handbook/basics/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/basics/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/basics/chapter.xml (revision 46052)
@@ -1,3440 +1,3438 @@
-
-
UNIX BasicsSynopsisThis chapter covers the basic commands and functionality of
the &os; operating system. Much of this material is relevant
for any &unix;-like operating system. New &os; users are
encouraged to read through this chapter carefully.After reading this chapter, you will know:How to use and configure virtual consoles.How to create and manage users and groups on
&os;.How &unix; file permissions and &os; file flags
work.The default &os; file system layout.The &os; 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.Virtual Consoles and Terminalsvirtual consolesterminalsconsoleUnless &os; 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:FreeBSD/amd64 (pc3.example.org) (ttyv0)
login: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 &os;. The hostname is
pc3.example.org, and
ttyv0 indicates that this is the
system console. The second line is the login
prompt.Since &os; is a multiuser system, it needs some way to
distinguish between different users. This is accomplished by
requiring every user to log into the system before gaining
access to the programs on the system. Every user has a
unique name username and a personal
password.To log into the system console, type the username that
was configured during system installation, as described in
, 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. Depending upon the shell that was
selected when the user was created, this prompt will be a
#, $, or
% character. The prompt indicates that
the user is now logged into the &os; system console and ready
to try the available commands.Virtual ConsolesWhile the system console can be used to interact with
the system, a user working from the command line at the
keyboard of a &os; system will typically instead log into a
virtual console. This is because system messages are
configured by default to display on the system console.
These messages will appear over the command or file that the
user is working on, making it difficult to concentrate on
the work at hand.By default, &os; is configured to provide several virtual
consoles for inputting commands. Each virtual console has
its own login prompt and shell and it is easy to switch
between virtual consoles. This essentially provides the
command line equivalent of having several windows open at the
same time in a graphical environment.The key combinations
AltF1
through
AltF8
have been reserved by &os; for switching between virtual
consoles. Use
AltF1
to switch to the system console
(ttyv0),
AltF2
to access the first virtual console
(ttyv1),
AltF3
to access the second virtual console
(ttyv2), and so on.When switching from one console to the next, &os;
manages the screen output. The result is an illusion of
having multiple virtual screens and keyboards that can be used
to type commands for &os; to run. The programs that are
launched in one virtual console do not stop running when
the user switches to a different virtual console.Refer to &man.syscons.4;, &man.atkbd.4;,
&man.vidcontrol.1; and &man.kbdcontrol.1; for a more
technical description of the &os; console and its keyboard
drivers.In &os;, the number of available virtual consoles is
configured in this section of
/etc/ttys:# name getty type status comments
#
ttyv0 "/usr/libexec/getty Pc" xterm on secure
# Virtual terminals
ttyv1 "/usr/libexec/getty Pc" xterm on secure
ttyv2 "/usr/libexec/getty Pc" xterm on secure
ttyv3 "/usr/libexec/getty Pc" xterm on secure
ttyv4 "/usr/libexec/getty Pc" xterm on secure
ttyv5 "/usr/libexec/getty Pc" xterm on secure
ttyv6 "/usr/libexec/getty Pc" xterm on secure
ttyv7 "/usr/libexec/getty Pc" xterm on secure
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secureTo disable a virtual console, put a comment symbol
(#) at the beginning of the line
representing that virtual console. For example, to reduce the
number of available virtual consoles from eight to four, put a
# in front of the last four lines
representing virtual consoles ttyv5
through ttyv8.
Do not comment out the line for the
system console ttyv0. Note that the last
virtual console (ttyv8) is used to access
the graphical environment if &xorg;
has been installed and configured as described in
.For a detailed description of every column in this file
and the available options for the virtual consoles, refer to
&man.ttys.5;.Single User ModeThe &os; boot menu provides an option labelled as
Boot Single User. If this option is selected,
the system will boot into a special mode known as
single user mode. This mode is typically used
to repair a system that will not boot or to reset the
root password when
it is not known. While in single user mode, networking and
other virtual consoles are not available. However, full
root access to the
system is available, and by default, the
root password is not
needed. For these reasons, physical access to the keyboard is
needed to boot into this mode and determining who has physical
access to the keyboard is something to consider when securing
a &os; system.The settings which control single user mode are found in
this section of /etc/ttys:# name getty type status comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none unknown off secureBy default, the status is set to
secure. This assumes that who has physical
access to the keyboard is either not important or it is
controlled by a physical security policy. If this setting is
changed to insecure, the assumption is that
the environment itself is insecure because anyone can access
the keyboard. When this line is changed to
insecure, &os; will prompt for the
root password when a
user selects to boot into single user mode.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 familiar with
the &os; booting process.Changing Console Video ModesThe &os; 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:&prompt.root; kldload vesaTo determine which video modes are supported by the
hardware, use &man.vidcontrol.1;. To get a list of supported
video modes issue the following:&prompt.root; 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 &man.vidcontrol.1; as the
root user:&prompt.root; vidcontrol MODE_279If the new video mode is acceptable, it can be permanently
set on boot by adding it to
/etc/rc.conf:allscreens_flags="MODE_279"Users and Basic Account Management&os; allows multiple users to use the computer at the same
time. While only one user can sit in front of the screen and
use the keyboard at any one time, any number of users can log
in to the system through the network. To use the system, each
user should have their own user account.This chapter describes:The different types of user accounts on a
&os; system.How to add, remove, and modify user accounts.How to set limits to control the
resources that users and
groups are allowed to access.How to create groups and add users as members of a
group.Account TypesSince all access to the &os; system is achieved using
accounts and all processes are run by users, user and account
management is important.There are three main types of accounts: system accounts,
user accounts, and the superuser account.System AccountsaccountssystemSystem accounts are used to run services such as DNS,
mail, and web servers. The reason for this is security; if
all services ran as the superuser, they could act without
restriction.accountsdaemonaccountsoperatorExamples of system accounts are
daemon,
operator,
bind,
news, and
www.accountsnobodynobody is the
generic unprivileged system account. However, the more
services that use
nobody, the more
files and processes that user will become associated with,
and hence the more privileged that user becomes.User AccountsaccountsuserUser accounts are assigned to real people and are used
to log in and use the system. Every person accessing the
system should have a unique user account. This allows the
administrator to find out who is doing what and prevents
users from clobbering the settings of other users.Each user can set up their own environment to
accommodate their use of the system, by configuring their
default shell, editor, key bindings, and language
settings.Every user account on a &os; system has certain
information associated with it:User nameThe user name is typed at the
login: prompt. Each user must have
a unique user name. There are a number of rules for
creating valid user names which are documented in
&man.passwd.5;. It is recommended to use user names
that consist of eight or fewer, all lower case
characters in order to maintain backwards
compatibility with applications.PasswordEach account has an associated password.User ID (UID)The User ID (UID) is a number
used to uniquely identify the user to the &os; system.
Commands that allow a user name to be specified will
first convert it to the UID. It is
recommended to use a UID less than 65535, since higher
values may cause compatibility issues with some
software.Group ID (GID)The Group ID (GID) is a number
used to uniquely identify the primary group that the
user belongs to. Groups are a mechanism for
controlling access to resources based on a user's
GID rather than their
UID. This can significantly reduce
the size of some configuration files and allows users
to be members of more than one group. It is
recommended to use a GID of 65535 or lower as higher
GIDs may break some software.Login classLogin classes are an extension to the group
mechanism that provide additional flexibility when
tailoring the system to different users. Login
classes are discussed further in
.Password change timeBy default, passwords do not expire. However,
password expiration can be enabled on a per-user
basis, forcing some or all users to change their
passwords after a certain amount of time has
elapsed.Account expiry timeBy default, &os; does not expire accounts. When
creating accounts that need a limited lifespan, such
as student accounts in a school, specify the account
expiry date using &man.pw.8;. After the expiry time
has elapsed, the account cannot be used to log in to
the system, although the account's directories and
files will remain.User's full nameThe user name uniquely identifies the account to
&os;, but does not necessarily reflect the user's real
name. Similar to a comment, this information can
contain spaces, uppercase characters, and be more
than 8 characters long.Home directoryThe home directory is the full path to a directory
on the system. This is the user's starting directory
when the user logs in. A common convention is to put
all user home directories under /home/username
or /usr/home/username.
Each user stores their personal files and
subdirectories in their own home directory.User shellThe shell provides the user's default environment
for interacting with the system. There are many
different kinds of shells and experienced users will
have their own preferences, which can be reflected in
their account settings.The Superuser Accountaccountssuperuser (root)The superuser account, usually called
root, is used to
manage the system with no limitations on privileges. For
this reason, it should not be used for day-to-day tasks like
sending and receiving mail, general exploration of the
system, or programming.The superuser, unlike other user accounts, can operate
without limits, and misuse of the superuser account may
result in spectacular disasters. User accounts are unable
to destroy the operating system by mistake, so it is
recommended to login as a user account and to only become
the superuser when a command requires extra
privilege.Always double and triple-check any commands issued as
the superuser, since an extra space or missing character can
mean irreparable data loss.There are several ways to gain superuser privilege.
While one can log in as
root, this is
highly discouraged.Instead, use &man.su.1; to become the superuser. If
- is specified when running this command,
the user will also inherit the root user's environment. The
user running this command must be in the
wheel group or
else the command will fail. The user must also know the
password for the
root user
account.In this example, the user only becomes superuser in
order to run make install as this step
requires superuser privilege. Once the command completes,
the user types exit to leave the
superuser account and return to the privilege of their user
account.Install a Program As the Superuser&prompt.user; configure
&prompt.user; make
&prompt.user; su -
Password:
&prompt.root; make install
&prompt.root; exit
&prompt.user;The built-in &man.su.1; framework works well for single
systems or small networks with just one system
administrator. An alternative is to install the
security/sudo package or port. This
software provides activity logging and allows the
administrator to configure which users can run which
commands as the superuser.Managing Accountsaccountsmodifying&os; provides a variety of different commands to manage
user accounts. The most common commands are summarized in
, followed by some
examples of their usage. See the manual page for each utility
for more details and usage examples.
Utilities for Managing User AccountsCommandSummary&man.adduser.8;The recommended command-line application for
adding new users.&man.rmuser.8;The recommended command-line application for
removing users.&man.chpass.1;A flexible tool for changing user database
information.&man.passwd.1;The command-line tool to change user
passwords.&man.pw.8;A powerful and flexible tool for modifying all
aspects of user accounts.
adduseraccountsaddingadduser/usr/share/skelskeleton directoryThe recommended program for adding new users is
&man.adduser.8;. When a new user is added, this program
automatically updates /etc/passwd and
/etc/group. It also creates a home
directory for the new user, copies in the default
configuration files from
/usr/share/skel, and can optionally
mail the new user a welcome message. This utility must be
run as the superuser.The &man.adduser.8; utility is interactive and walks
through the steps for creating a new user account. As seen
in , either input
the required information or press Return
to accept the default value shown in square brackets.
In this example, the user has been invited into the
wheel group,
allowing them to become the superuser with &man.su.1;.
When finished, the utility will prompt to either
create another user or to exit.Adding a User on &os;&prompt.root; adduser
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : jru
Password : ****
Full Name : J. Random User
Uid : 1001
Class :
Groups : jru wheel
Home : /home/jru
Shell : /usr/local/bin/zsh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
&prompt.root;Since the password is not echoed when typed, be
careful to not mistype the password when creating the user
account.rmuserrmuseraccountsremovingTo completely remove a user from the system, run
&man.rmuser.8; as the superuser. This command performs the
following steps:Removes the user's &man.crontab.1; entry, if one
exists.Removes any &man.at.1; jobs belonging to the
user.Kills all processes owned by the user.Removes the user from the system's local password
file.Optionally removes the user's home directory, if it
is owned by the user.Removes the incoming mail files belonging to the
user from /var/mail.Removes all files owned by the user from temporary
file storage areas such as
/tmp.Finally, removes the username from all groups to
which it belongs in /etc/group. If
a group becomes empty and the group name is the same as
the username, the group is removed. This complements
the per-user unique groups created by
&man.adduser.8;.&man.rmuser.8; cannot be used to remove superuser
accounts since that is almost always an indication of
massive destruction.By default, an interactive mode is used, as shown
in the following example.rmuser Interactive Account
Removal&prompt.root; rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Removing user (jru): mailspool home passwd.
&prompt.root;chpasschpassAny user can use &man.chpass.1; to change their default
shell and personal information associated with their user
account. The superuser can use this utility to change
additional account information for any user.When passed no options, aside from an optional username,
&man.chpass.1; displays an editor containing user
information. When the user exits from the editor, the user
database is updated with the new information.This utility will prompt for the user's password when
exiting the editor, unless the utility is run as the
superuser.In , the
superuser has typed chpass jru and is
now viewing the fields that can be changed for this user.
If jru runs this
command instead, only the last six fields will be displayed
and available for editing. This is shown in
.Using chpass as
Superuser#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:Using chpass as Regular
User#Changing user database information for jru.
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:The commands &man.chfn.1; and &man.chsh.1; are links
to &man.chpass.1;, as are &man.ypchpass.1;,
&man.ypchfn.1;, and &man.ypchsh.1;. Since
NIS support is automatic, specifying
the yp before the command is not
necessary. How to configure NIS is covered in .passwdpasswdaccountschanging passwordAny user can easily change their password using
&man.passwd.1;. To prevent accidental or unauthorized
changes, this command will prompt for the user's original
password before a new password can be set:Changing Your Password&prompt.user; passwd
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: doneThe superuser can change any user's password by
specifying the username when running &man.passwd.1;. When
this utility is run as the superuser, it will not prompt for
the user's current password. This allows the password to be
changed when a user cannot remember the original
password.Changing Another User's Password as the
Superuser&prompt.root; passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: doneAs with &man.chpass.1;, &man.yppasswd.1; is a link to
&man.passwd.1;, so NIS works with
either command.pwpwThe &man.pw.8; utility can create, remove,
modify, and display users and groups. It functions as a
front end to the system user and group files. &man.pw.8;
has a very powerful set of command line options that make it
suitable for use in shell scripts, but new users may find it
more complicated than the other commands presented in this
section.Managing Groupsgroups/etc/groupsaccountsgroupsA group is a list of users. A group is identified by its
group name and GID. In &os;, the kernel
uses the UID of a process, and the list of
groups it belongs to, to determine what the process is allowed
to do. Most of the time, the GID of a user
or process usually means the first group in the list.The group name to GID mapping is listed
in /etc/group. This is a plain text file
with four colon-delimited fields. The first field is the
group name, the second is the encrypted password, the third
the GID, and the fourth the comma-delimited
list of members. For a more complete description of the
syntax, refer to &man.group.5;.The superuser can modify /etc/group
using a text editor. Alternatively, &man.pw.8; can be used to
add and edit groups. For example, to add a group called
teamtwo and then
confirm that it exists:Adding a Group Using &man.pw.8;&prompt.root; pw groupadd teamtwo
&prompt.root; pw groupshow teamtwo
teamtwo:*:1100:In this example, 1100 is the
GID of
teamtwo. Right
now, teamtwo has no
members. This command will add
jru as a member of
teamtwo.Adding User Accounts to a New Group Using
&man.pw.8;&prompt.root; pw groupmod teamtwo -M jru
&prompt.root; pw groupshow teamtwo
teamtwo:*:1100:jruThe argument to is a comma-delimited
list of users to be added to a new (empty) group or to replace
the members of an existing group. To the user, this group
membership is different from (and in addition to) the user's
primary group listed in the password file. This means that
the user will not show up as a member when using
with &man.pw.8;, but will show up
when the information is queried via &man.id.1; or a similar
tool. When &man.pw.8; is used to add a user to a group, it
only manipulates /etc/group and does not
attempt to read additional data from
/etc/passwd.Adding a New Member to a Group Using &man.pw.8;&prompt.root; pw groupmod teamtwo -m db
&prompt.root; pw groupshow teamtwo
teamtwo:*:1100:jru,dbIn this example, the argument to is a
comma-delimited list of users who are to be added to the
group. Unlike the previous example, these users are appended
to the group and do not replace existing users in the
group.Using &man.id.1; to Determine Group Membership&prompt.user; id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)In this example,
jru is a member of
the groups jru and
teamtwo.For more information about this command and the format of
/etc/group, refer to &man.pw.8; and
&man.group.5;.PermissionsUNIXIn &os;, every file and directory has an associated set of
permissions and several utilities are available for viewing
and modifying these permissions. Understanding how permissions
work is necessary to make sure that users are able to access
the files that they need and are unable to improperly access
the files used by the operating system or owned by other
users.This section discusses the traditional &unix; permissions
used in &os;. For finer grained file system access control,
refer to .In &unix;, basic permissions are assigned using
three types of access: read, write, and execute. These access
types are used to determine file access to the file's owner,
group, and others (everyone else). The read, write, and execute
permissions can be represented as the letters
r, w, and
x. They can also be represented as binary
numbers as each permission is either on or off
(0). When represented as a number, the
order is always read as rwx, where
r has an on value of 4,
w has an on value of 2
and x has an on value of
1.Table 4.1 summarizes the possible numeric and alphabetic
possibilities. When reading the Directory
Listing column, a - is used to
represent a permission that is set to off.permissionsfile permissions
&unix; PermissionsValuePermissionDirectory Listing0No read, no write, no execute---1No read, no write, execute--x2No read, write, no execute-w-3No read, write, execute-wx4Read, no write, no executer--5Read, no write, executer-x6Read, write, no executerw-7Read, write, executerwx
&man.ls.1;directoriesUse the argument to &man.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:&prompt.user; 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? &os;
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 &man.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 &man.chmod.1;.Symbolic PermissionsTomRhodesContributed by permissionssymbolicSymbolic 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:OptionLetterRepresents(who)uUser(who)gGroup owner(who)oOther(who)aAll (world)(action)+Adding permissions(action)-Removing permissions(action)=Explicitly set permissions(permissions)rRead(permissions)wWrite(permissions)xExecute(permissions)tSticky bit(permissions)sSet UID or GIDThese values are used with &man.chmod.1;, but with
letters instead of numbers. For example, the following
command would block other users from accessing
FILE:&prompt.user; 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:&prompt.user; chmod go-w,a+x FILE&os; File FlagsTomRhodesContributed by In addition to file permissions, &os; 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 &man.chflags.1;. For
example, to enable the system undeletable flag on the file
file1, issue the following
command:&prompt.root; chflags sunlink file1To disable the system undeletable flag, put a
no in front of the
:&prompt.root; chflags nosunlink file1To view the flags of a file, use with
&man.ls.1;:&prompt.root; ls -lo file1-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 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
&man.chflags.1; and &man.chflags.2; for more
information.The setuid,
setgid, and sticky
PermissionsTomRhodesContributed by 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,
&man.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:&prompt.root; chmod 4755 suidexample.shThe permissions on
suidexample.sh
now look like the following:-rwsr-xr-x 1 trhodes trhodes 63 Aug 29 06:36 suidexample.shNote 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 &man.passwd.1;.The nosuid &man.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
&man.passwd.1;:In terminal A:Changing local password for trhodes
Old Password:In terminal B:&prompt.root; ps aux | grep passwdtrhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd
root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwdAlthough &man.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 &man.chmod.1; with a leading two (2):&prompt.root; chmod 2755 sgidexample.shIn the following listing, notice that the
s is now in the field designated for the
group permission settings:-rwxr-sr-x 1 trhodes trhodes 44 Aug 31 01:49 sgidexample.shIn 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
&man.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):&prompt.root; chmod 1777 /tmpThe sticky bit permission will display
as a t at the very end of the permission
set:&prompt.root; ls -al / | grep tmpdrwxrwxrwt 10 root wheel 512 Aug 31 01:49 tmpDirectory Structuredirectory hierarchyThe &os; 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
. 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 &man.rc.8; unless their entry includes
. Details can be found in
.A complete description of the file system hierarchy is
available in &man.hier.7;. The following table provides a brief
overview of the most common directories.DirectoryDescription/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
&man.loader.conf.5; for details./dev/Device nodes. Refer to &man.intro.4; for
details./etc/System configuration files and scripts./etc/defaults/Default system configuration files. Refer to
&man.rc.8; for details./etc/mail/Configuration files for mail transport agents
such as &man.sendmail.8;./etc/namedb/&man.named.8; configuration files./etc/periodic/Scripts that run daily, weekly, and monthly,
via &man.cron.8;. Refer to &man.periodic.8; for
details./etc/ppp/&man.ppp.8; configuration files./mnt/Empty directory commonly used by system
administrators as a temporary mount point./proc/Process file system. Refer to &man.procfs.5;,
&man.mount.procfs.8; for details./rescue/Statically linked programs for emergency
recovery as described in &man.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 &man.rc.conf.5;
or with an entry in /etc/fstab;
refer to &man.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 &os; ports framework.
Within
/usr/local, the
general layout sketched out by &man.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/port./usr/obj/Architecture-specific target tree produced by
building the /usr/src
tree./usr/ports/The &os; 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
&man.rc.conf.5; or with an entry in
/etc/fstab; refer to
&man.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.Disk OrganizationThe smallest unit of organization that &os; uses to find
files is the filename. Filenames are case-sensitive, which
means that readme.txt and
README.TXT are two separate files. &os;
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. &os; does not use drive
letters, or other drive names in the path. For example, one
would not type c:\foo\bar\readme.txt on
&os;.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 &os;
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
&man.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: /
|
+--- A1
|
`--- A2A 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: /
|
+--- A1
| |
| +--- B1
| |
| `--- B2
|
`--- A2Any 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: /
|
+--- A1
|
`--- A2
|
+--- B1
|
`--- B2and 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: /
|
+--- A1
|
`--- A2
|
+--- B1
| |
| +--- C1
| |
| `--- C2
|
`--- B2Or C could be mounted directly on to the
A file system, under the
A1 directory: /
|
+--- A1
| |
| +--- C1
| |
| `--- C2
|
`--- A2
|
+--- B1
|
`--- B2It 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.Benefits of Multiple File SystemsDifferent 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.&os; 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.&os;'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.Benefit of a Single File SystemFile systems are a fixed size. If you create a file
system when you install &os; 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.&os; features the &man.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 &os;'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.&os; 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 &os; 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.PartitionConventionaNormally contains the root file system.bNormally contains swap space.cNormally 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.dPartition 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 &os; 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.slicespartitionsdangerously dedicatedSlice 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 ada0s5 is
the first extended slice on the first SATA 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.
ada1s3e is the fifth
partition in the third slice of the second SATA 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
.When referring to a partition, include the disk name,
s, the slice number, and then the partition
letter. Examples are shown in
. shows a
conceptual model of a disk layout.When installing &os;, configure the disk slices, create
partitions within the slice to be used for &os;, create a file
system or swap space in each partition, and decide where each
file system will be mounted.
Disk Device NamesDrive TypeDrive Device NameSATA and IDE
hard drivesada or
adSCSI hard drives and
USB storage devicesdaSATA and IDE
CD-ROM drivescd or
acdSCSI CD-ROM
drivescdFloppy drivesfdAssorted non-standard CD-ROM
drivesmcd for Mitsumi
CD-ROM and scd for
Sony CD-ROM devicesSCSI tape drivessaIDE tape drivesastRAID drivesExamples include aacd for
&adaptec; AdvancedRAID, mlxd and
mlyd for &mylex;,
amrd for AMI &megaraid;,
idad for Compaq Smart RAID,
twed for &tm.3ware; RAID.
Sample Disk, Slice, and Partition NamesNameMeaningada0s1aThe first partition (a) on the
first slice (s1) on the first IDE
disk (ada0).da1s2eThe fifth partition (e) on the
second slice (s2) on the second
SCSI disk (da1).Conceptual Model of a DiskThis diagram shows &os;'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
&os; installation. This example &os; 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..-----------------. --.
| | |
| DOS / Windows | |
: : > First slice, ad0s1
: : |
| | |
:=================: ==: --.
| | | Partition a, mounted as / |
| | > referred to as ad0s2a |
| | | |
:-----------------: ==: |
| | | Partition b, used as swap |
| | > referred to as ad0s2b |
| | | |
:-----------------: ==: | Partition c, no
| | | Partition e, used as /var > file system, all
| | > referred to as ad0s2e | of FreeBSD slice,
| | | | ad0s2c
:-----------------: ==: |
| | | |
: : | Partition f, used as /usr |
: : > referred to as ad0s2f |
: : | |
| | | |
| | --' |
`-----------------' --'Mounting and Unmounting File SystemsThe 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.root file systemThere 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 ,
or CDROM drives.The fstab Filefile systemsmounted with fstabDuring the boot process (), file
systems listed in /etc/fstab are
automatically mounted except for the entries containing
. This file contains entries in the
following format:device/mount-pointfstypeoptionsdumpfreqpassnodeviceAn existing device name as explained in
.mount-pointAn existing directory on which to mount the file
system.fstypeThe file system type to pass to &man.mount.8;. The
default &os; file system is
ufs.optionsEither for read-write file
systems, or for read-only file
systems, followed by any other options that may be
needed. A common option is for
file systems not normally mounted during the boot
sequence. Other options are listed in
&man.mount.8;.dumpfreqUsed by &man.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, &man.fsck.8;
will attempt to check file systems in parallel if
possible.Refer to &man.fstab.5; for more information on the format
of /etc/fstab and its options.Using &man.mount.8;file systemsmountingFile systems are mounted using &man.mount.8;. The most
basic syntax is as follows:&prompt.root; mount devicemountpointThis command provides many options which are described in
&man.mount.8;, The most commonly used options include:Mount OptionsMount all the file systems listed in
/etc/fstab, except those marked as
noauto, excluded by the
flag, or those that are already
mounted.Do everything except for the actual mount system
call. This option is useful in conjunction with the
flag to determine what &man.mount.8;
is actually trying to do.Force 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.Mount the file system read-only. This is identical
to using .fstypeMount the specified file system type or mount only
file systems of the given type, if
is included. ufs is the default file
system type.Update mount options on the file system.Be verbose.Mount the file system read-write.The following options can be passed to
as a comma-separated list:nosuidDo not interpret setuid or setgid flags on the
file system. This is also a useful security
option.Using &man.umount.8;file systemsunmountingTo unmount a file system use &man.umount.8;. This command
takes one parameter which can be a mountpoint, device name,
or .All forms take to force unmounting,
and for verbosity. Be warned that
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 , use
or . Note that
does not attempt to unmount the root file
system.Processes and Daemons&os; 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 &os;.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 &man.init.8; which is
always the first process to start at boot time and which always
has a PID of 1.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 types of programs
are known as daemons. The term daemon
comes from Greek mythology and represents an entity that is
neither good nor 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. For example,
BIND is the Berkeley Internet Name
Domain, but the actual program that executes is
named. The
Apache web server program is
httpd and the line printer spooling daemon
is lpd. This is only a naming convention.
For example, the main mail daemon for the
Sendmail application is
sendmail, and not
maild.Viewing ProcessesTo see the processes running on the system, use &man.ps.1;
or &man.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 &man.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 &man.top.1;.By default, &man.ps.1; only shows the commands that are
running and owned by the user. For example:&prompt.user; ps
PID TT STAT TIME COMMAND
8203 0 Ss 0:00.59 /bin/csh
8895 0 R+ 0:00.00 psThe output from &man.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.A number of different options are available to change the
information that is displayed. One of the most useful sets is
auxww, where displays
information about all the running processes of all users,
displays the username and memory usage of
the process' owner, displays
information about daemon processes, and
causes &man.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 &man.top.1; is similar:&prompt.user; top
last pid: 9609; load averages: 0.56, 0.45, 0.36 up 0+00:20:03 10:21:46
107 processes: 2 running, 104 sleeping, 1 zombie
CPU: 6.2% user, 0.1% nice, 8.2% system, 0.4% interrupt, 85.1% idle
Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free
ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other
Swap: 2048M Total, 2048M Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
557 root 1 -21 r31 136M 42296K select 0 2:20 9.96% Xorg
8198 dru 2 52 0 449M 82736K select 3 0:08 5.96% kdeinit4
8311 dru 27 30 0 1150M 187M uwait 1 1:37 0.98% firefox
431 root 1 20 0 14268K 1728K select 0 0:06 0.98% moused
9551 dru 1 21 0 16600K 2660K CPU3 3 0:01 0.98% top
2357 dru 4 37 0 718M 141M select 0 0:21 0.00% kdeinit4
8705 dru 4 35 0 480M 98M select 2 0:20 0.00% kdeinit4
8076 dru 6 20 0 552M 113M uwait 0 0:12 0.00% soffice.bin
2623 root 1 30 10 12088K 1636K select 3 0:09 0.00% powerd
2338 dru 1 20 0 440M 84532K select 1 0:06 0.00% kwin
1427 dru 5 22 0 605M 86412K select 1 0:05 0.00% kdeinit4The output is split into two sections. The header (the
first five or six 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, how much memory and swap space has been used, and how
much time the system is spending in different CPU states. If
the ZFS file system module has been loaded,
an ARC line indicates how much data was
read from the memory cache instead of from disk.Below the header is a series of columns containing similar
information to the output from &man.ps.1;, such as the
PID, username, amount of CPU time, and the
command that started the process. By default, &man.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 now.&man.top.1; automatically updates the display every two
seconds. A different interval can be specified with
.Killing ProcessesOne way to communicate with any running process or daemon
is to send a signal using &man.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.The operating system 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, &os; will send the process the
Segmentation Violation signal
(SIGSEGV). If an application has been
written to use the &man.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. Sending a SIGKILL to a
process will usually stop that process there and then.
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..Other commonly used signals are SIGHUP,
SIGUSR1, and SIGUSR2.
Since these are general purpose signals, 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.Sending a Signal to a ProcessThis example shows how to send a signal to
&man.inetd.8;. The &man.inetd.8; configuration file is
/etc/inetd.conf, and &man.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 &man.pgrep.1;. In this example, the
PID for &man.inetd.8; is 198:&prompt.user; pgrep -l inetd
198 inetd -wWUse &man.kill.1; to send the signal. Because
&man.inetd.8; is owned by
root, use
&man.su.1; to become
root
first.&prompt.user; suPassword:
&prompt.root; /bin/kill -s HUP 198Like most &unix; commands, &man.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.Why Use /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 specify
/bin/kill.When sending other signals, substitute
TERM or KILL with the
name of the signal.Killing a random process on the system is a bad idea.
In particular, &man.init.8;, PID 1, is
special. Running /bin/kill -s KILL 1 is
a quick, and unrecommended, way to shutdown the system.
Always double check the arguments to
&man.kill.1; before pressing
Return.Shellsshellscommand lineA shell provides a command line
interface for interacting with the operating system. 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. &os; comes
with several shells, including the Bourne shell (&man.sh.1;) and
the extended C shell (&man.tcsh.1;). Other shells are available
from the &os; 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 &man.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 completes the rest of
the command or filename. Consider two files called
foobar and football.
To delete foobar, the user might type
rm foo and press Tab to
complete the filename.But the shell only shows rm foo. It was
unable to complete the filename because both
foobar and football
start with foo. Some shells sound a beep or
show all the choices if more than one name matches. The user
must then type more characters to identify the desired filename.
Typing a t and pressing Tab
again is enough to let the shell determine which filename is
desired and fill in the rest.environment variablesAnother 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. provides a list
of common environment variables and their meanings. Note that
the names of environment variables are always in
uppercase.
Common Environment VariablesVariableDescriptionUSERCurrent logged in user's name.PATHColon-separated list of directories to search for
binaries.DISPLAYNetwork name of the
&xorg;
display to connect to, if available.SHELLThe current shell.TERMThe name of the user's type of terminal. Used to
determine the capabilities of the terminal.TERMCAPDatabase entry of the terminal escape codes to
perform various terminal functions.OSTYPEType of operating system.MACHTYPEThe system's CPU architecture.EDITORThe user's preferred text editor.PAGERThe user's preferred utility for viewing text one
page at a time.MANPATHColon-separated list of directories to search for
manual pages.
Bourne shellsHow to set an environment variable differs between shells.
In &man.tcsh.1; and &man.csh.1;, use
setenv to set environment variables. In
&man.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
&man.tcsh.1; shell:&prompt.user; setenv EDITOR /usr/local/bin/emacsThe equivalent command for bash
would be:&prompt.user; 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 because
the shell takes all the files that match *
and echo 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.Changing the ShellThe 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 &man.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:&prompt.user; chsh -s /usr/local/bin/bashThe new shell must be present in
/etc/shells. If the shell was
installed from the &os; Ports Collection as described in
, 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:&prompt.root; echo /usr/local/bin/bash >> /etc/shellsThen, rerun &man.chsh.1;.Advanced Shell TechniquesTomRhodesWritten by The &unix; shell is not just a command interpreter, it
acts as a powerful tool which allows users to execute
commands, redirect their output, redirect their input and
chain commands together to improve the final command output.
When this functionality is mixed with built in commands, the
user is provided with an environment that can maximize
efficiency.Shell redirection is the action of sending the output or
the input of a command into another command or into a file.
To capture the output of the &man.ls.1; command, for example,
into a file, simply redirect the output:&prompt.user; ls > directory_listing.txtThe directory_listing.txt file will
now contain the directory contents. Some commands allow you
to read input in a similar one, such as &man.sort.1;. To sort
this listing, redirect the input:&prompt.user; sort < directory_listing.txtThe input will be sorted and placed on the screen. To
redirect that input into another file, one could redirect the
output of &man.sort.1; by mixing the direction:&prompt.user; sort < directory_listing.txt > sorted.txtIn all of the previous examples, the commands are
performing redirection using file descriptors. Every unix
system has file descriptors; however, here we will focus on
three, so named as Standard Input, Standard Output, and
Standard Error. Each one has a purpose, where input could be
a keyboard or a mouse, something that provides input. Output
could be a screen or paper in a printer for example. And
error would be anything that is used for diagnostic or error
messages. All three are considered I/O
based file descriptors and sometimes considered
streams.Through the use of these descriptors, short named stdin,
stdout, and stderr, the shell allows output and input to be
passed around through various commands and redirected to or
from a file. Another method of redirection is the pipe
operator.The &unix; pipe operator, | allows the
output of one command to be directly passed, or directed to
another program. Basically a pipe will allow the standard
output of a command to be passed as standard input to another
command, for example:&prompt.user; cat directory_listing.txt | sort | lessIn that example, the contents of
directory_listing.txt will be sorted and
the output passed to &man.less.1;. This allows the user to
scroll through the output at their own pace and prevent it
from scrolling off the screen.Text Editorstext editorseditorsMost &os; configuration is done by editing text files.
Because of this, it is a good idea to become familiar with a
text editor. &os; comes with a few as part of the base system,
and many more are available in the Ports Collection.eeeditors&man.ee.1;A simple editor to learn is &man.ee.1;, which stands for
easy editor. To start this editor, type ee
filename where
filename 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
Ctrle. To leave &man.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.vieditorsemacs&os; also comes with more powerful text editors, such as
&man.vi.1;, as part of the base system. Other editors, like
editors/emacs and
editors/vim, are part of the
&os; Ports Collection. These editors offer more functionality
at the expense of being 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 change the default
editor, set the EDITOR environment
variable as described in .Devices and Device NodesA device is a term used mostly for hardware-related
activities in a system, including disks, printers, graphics
cards, and keyboards. When &os; 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,
ada0 is the first SATA hard drive,
while kbd0 represents the
keyboard.Most devices in a &os; must be accessed through special
files called device nodes, which are located in
/dev.Manual Pagesmanual pagesThe most comprehensive documentation on &os; 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:&prompt.user; man commandwhere command is the name of the
command to learn about. For example, to learn more about
&man.ls.1;, type:&prompt.user; man lsManual pages are divided into sections which represent the
type of topic. In &os;, the following sections are
available: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.System kernel interfaces.In some cases, the same topic may appear in more than one
section of the online manual. For example, there is a
chmod user command and a
chmod() system call. To tell &man.man.1;
which section to display, specify the section number:&prompt.user; man 1 chmodThis will display the manual page for the user command
&man.chmod.1;. References to a particular section of the
online manual are traditionally placed in parenthesis in
written documentation, so &man.chmod.1; refers to the user
command and &man.chmod.2; refers to the system call.If the name of the manual page is unknown, use man
-k to search for keywords in the manual page
descriptions:&prompt.user; man -k mailThis command displays a list of commands that have the
keyword mail in their descriptions. This is
equivalent to using &man.apropos.1;.To read the descriptions for all of the commands in
/usr/bin, type:&prompt.user; cd /usr/bin
&prompt.user; man -f * | moreor&prompt.user; cd /usr/bin
&prompt.user; whatis * |moreGNU Info FilesFree Software Foundation&os; includes several 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
&man.info.1; or, if editors/emacs is
installed, the info mode of
emacs.To use &man.info.1;, type:&prompt.user; infoFor a brief introduction, type h. For
a quick command reference, type ?.
Index: head/en_US.ISO8859-1/books/handbook/dtrace/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/dtrace/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/dtrace/chapter.xml (revision 46052)
@@ -1,358 +1,359 @@
+ xml:id="dtrace">
+ &dtrace;TomRhodesWritten
by Synopsis&dtrace;&dtrace; support&dtrace;&dtrace;, also known as Dynamic Tracing, was developed by
&sun; as a tool for locating performance bottlenecks in
production and pre-production systems. In addition to
diagnosing performance problems, &dtrace; can be used to help
investigate and debug unexpected behavior in both the &os;
kernel and in userland programs.&dtrace; is a remarkable profiling tool, with an impressive
array of features for diagnosing system issues. It may also be
used to run pre-written scripts to take advantage of its
capabilities. Users can author their own utilities using the
&dtrace; D Language, allowing them to customize their profiling
based on specific needs.The &os; implementation provides full support for kernel
&dtrace; and experimental support for userland &dtrace;.
Userland &dtrace; allows users to perform function boundary
tracing for userland programs using the pid
provider, and to insert static probes into userland programs for
later tracing. Some ports, such as
databases/postgres-server and
lang/php5 have a &dtrace; option to enable
static probes. &os; 10.0-RELEASE has reasonably good userland
&dtrace; support, but it is not considered production ready. In
particular, it is possible to crash traced programs.After reading this chapter, you will know:What &dtrace; is and what features it provides.Differences between the &solaris; &dtrace;
implementation and the one provided by &os;.How to enable and use &dtrace; on &os;.Before reading this chapter, you should:Understand &unix; and &os; basics
().Have some familiarity with security and how it pertains
to &os; ().Implementation DifferencesWhile the &dtrace; in &os; is similar to that found in
&solaris;, differences do exist. The primary difference is that
in &os;, &dtrace; is implemented as a set of kernel modules and
&dtrace; can not be used until the modules are loaded. To load
all of the necessary modules:&prompt.root; kldload dtraceallBeginning with &os; 10.0-RELEASE, the modules are
automatically loaded when dtrace is
run.&os; uses the DDB_CTF kernel option to
enable support for loading CTF data from
kernel modules and the kernel itself. CTF is
the &solaris; Compact C Type Format which encapsulates a reduced
form of debugging information similar to
DWARF and the venerable stabs.
CTF data is added to binaries by the
ctfconvert and ctfmerge
build tools. The ctfconvert utility parses
DWARF ELF debug sections
created by the compiler and ctfmerge merges
CTF ELF sections from
objects into either executables or shared libraries.Some different providers exist for &os; than for &solaris;.
Most notable is the dtmalloc provider, which
allows tracing malloc() by type in the &os;
kernel. Some of the providers found in &solaris;, such as
cpc and mib, are not
present in &os;. These may appear in future versions of &os;.
Moreover, some of the providers available in both operating
systems are not compatible, in the sense that their probes have
different argument types. Thus, D scripts
written on &solaris; may or may not work unmodified on &os;, and
vice versa.Due to security differences, only root may use &dtrace; on &os;.
&solaris; has a few low level security checks which do not yet
exist in &os;. As such, the
/dev/dtrace/dtrace is strictly limited to
root.&dtrace; falls under the Common Development and Distribution
License (CDDL) license. To view this license
on &os;, see
/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE
or view it online at http://opensource.org/licenses/CDDL-1.0.
While a &os; kernel with &dtrace; support is
BSD licensed, the CDDL is
used when the modules are distributed in binary form or the
binaries are loaded.Enabling &dtrace; SupportIn &os; 9.2 and 10.0, &dtrace; support is built into the
GENERIC kernel. Users of earlier versions
of &os; or who prefer to statically compile in &dtrace; support
should add the following lines to a custom kernel configuration
file and recompile the kernel using the instructions in :options KDTRACE_HOOKS
options DDB_CTF
options DEBUG=-gUsers of the AMD64 architecture should also add this
line:options KDTRACE_FRAMEThis option provides support for FBT.
While &dtrace; will work without this option, there will be
limited support for function boundary tracing.Once the &os; system has rebooted into the new kernel, or
the &dtrace; kernel modules have been loaded using
kldload dtraceall, the system will need
support for the Korn shell as the &dtrace;
Toolkit has several utilities written in ksh.
Make sure that the shells/ksh93 package or
port is installed. It is also possible to run these tools under
shells/pdksh or
shells/mksh.Finally, install the current &dtrace; Toolkit,
a collection of ready-made scripts
for collecting system information. There are scripts to check
open files, memory, CPU usage, and a lot
more. &os; 10
installs a few of these scripts into
/usr/share/dtrace. On other &os; versions,
or to install the full
&dtrace; Toolkit, use the
sysutils/DTraceToolkit package or
port.The scripts found in
/usr/share/dtrace have been specifically
ported to &os;. Not all of the scripts found in the &dtrace;
Toolkit will work as-is on &os; and some scripts may require
some effort in order for them to work on &os;.The &dtrace; Toolkit includes many scripts in the special
language of &dtrace;. This language is called the D language
and it is very similar to C++. An in depth discussion of the
language is beyond the scope of this document. It is
extensively discussed at http://wikis.oracle.com/display/DTrace/Documentation.Using &dtrace;&dtrace; scripts consist of a list of one or more
probes, or instrumentation points, where
each probe is associated with an action. Whenever the condition
for a probe is met, the associated action is executed. For
example, an action may occur when a file is opened, a process is
started, or a line of code is executed. The action might be to
log some information or to modify context variables. The
reading and writing of context variables allows probes to share
information and to cooperatively analyze the correlation of
different events.To view all probes, the administrator can execute the
following command:&prompt.root; dtrace -l | moreEach probe has an ID, a
PROVIDER (dtrace or fbt), a
MODULE, and a
FUNCTION NAME. Refer to &man.dtrace.1; for
more information about this command.The examples in this section provide an overview of how to
use two of the fully supported scripts from the
&dtrace; Toolkit: the
hotkernel and
procsystime scripts.The hotkernel script is designed to
identify which function is using the most kernel time. It will
produce output similar to the following:&prompt.root; cd /usr/share/dtrace/toolkit
&prompt.root; ./hotkernel
Sampling... Hit Ctrl-C to end.As instructed, use the
CtrlC key combination to stop the process. Upon
termination, the script will display a list of kernel functions
and timing information, sorting the output in increasing order
of time:kernel`_thread_lock_flags 2 0.0%
0xc1097063 2 0.0%
kernel`sched_userret 2 0.0%
kernel`kern_select 2 0.0%
kernel`generic_copyin 3 0.0%
kernel`_mtx_assert 3 0.0%
kernel`vm_fault 3 0.0%
kernel`sopoll_generic 3 0.0%
kernel`fixup_filename 4 0.0%
kernel`_isitmyx 4 0.0%
kernel`find_instance 4 0.0%
kernel`_mtx_unlock_flags 5 0.0%
kernel`syscall 5 0.0%
kernel`DELAY 5 0.0%
0xc108a253 6 0.0%
kernel`witness_lock 7 0.0%
kernel`read_aux_data_no_wait 7 0.0%
kernel`Xint0x80_syscall 7 0.0%
kernel`witness_checkorder 7 0.0%
kernel`sse2_pagezero 8 0.0%
kernel`strncmp 9 0.0%
kernel`spinlock_exit 10 0.0%
kernel`_mtx_lock_flags 11 0.0%
kernel`witness_unlock 15 0.0%
kernel`sched_idletd 137 0.3%
0xc10981a5 42139 99.3%This script will also work with kernel modules. To use this
feature, run the script with :&prompt.root; ./hotkernel -m
Sampling... Hit Ctrl-C to end.
^C
MODULE COUNT PCNT
0xc107882e 1 0.0%
0xc10e6aa4 1 0.0%
0xc1076983 1 0.0%
0xc109708a 1 0.0%
0xc1075a5d 1 0.0%
0xc1077325 1 0.0%
0xc108a245 1 0.0%
0xc107730d 1 0.0%
0xc1097063 2 0.0%
0xc108a253 73 0.0%
kernel 874 0.4%
0xc10981a5 213781 99.6%The procsystime script captures and
prints the system call time usage for a given process
ID (PID) or process name.
In the following example, a new instance of
/bin/csh was spawned. Then,
procsystime was executed and remained
waiting while a few commands were typed on the other incarnation
of csh. These are the results of this
test:&prompt.root; ./procsystime -n csh
Tracing... Hit Ctrl-C to end...
^C
Elapsed Times for processes csh,
SYSCALL TIME (ns)
getpid 6131
sigreturn 8121
close 19127
fcntl 19959
dup 26955
setpgid 28070
stat 31899
setitimer 40938
wait4 62717
sigaction 67372
sigprocmask 119091
gettimeofday 183710
write 263242
execve 492547
ioctl 770073
vfork 3258923
sigsuspend 6985124
read 3988049784As shown, the read() system call used
the most time in nanoseconds while the
getpid() system call used the least amount
of time.
Index: head/en_US.ISO8859-1/books/handbook/filesystems/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/filesystems/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/filesystems/chapter.xml (revision 46052)
@@ -1,218 +1,219 @@
+ xml:id="filesystems">
+ Other File SystemsTomRhodesWritten
by SynopsisFile SystemsFile Systems SupportFile SystemsFile systems are an integral part of any operating system.
They allow users to upload and store files, provide access to
data, and make hard drives useful. Different operating systems
differ in their native file system. Traditionally, the native
&os; file system has been the Unix File System
UFS which has been modernized as
UFS2. Since &os; 7.0, the Z File System
(ZFS) is also available as a native file
system. See for more information.In addition to its native file systems, &os; supports a
multitude of other file systems so that data from other
operating systems can be accessed locally, such as data stored
on locally attached USB storage devices,
flash drives, and hard disks. This includes support for the
&linux; Extended File System (EXT) and the
Reiser file system.There are different levels of &os; support for the various
file systems. Some require a kernel module to be loaded and
others may require a toolset to be installed. Some non-native
file system support is full read-write while others are
read-only.After reading this chapter, you will know:The difference between native and supported file
systems.Which file systems are supported by &os;.How to enable, configure, access, and make use of
non-native file systems.Before reading this chapter, you should:Understand &unix; and &os; basics.Be familiar with the basics of kernel configuration and
compilation.Feel comfortable installing
software in &os;.Have some familiarity with disks, storage, and device names in
&os;.&linux; File Systems&os; provides built-in support for several &linux; file
systems. This section demonstrates how to load support for and
how to mount the supported &linux; file systems.ext2Kernel support for ext2 file systems has
been available since &os; 2.2. In &os; 8.x and
earlier, the code is licensed under the
GPL. Since &os; 9.0, the code has
been rewritten and is now BSD
licensed.The &man.ext2fs.5; driver allows the &os; kernel to both
read and write to ext2 file systems.
This driver can also be used to access ext3 and ext4 file
systems. However, ext3 journaling, extended attributes, and
inodes greater than 128-bytes are not supported. Support
for ext4 is read-only.To access an ext file system, first
load the kernel loadable module:&prompt.root; kldload ext2fsThen, mount the ext volume by specifying its &os;
partition name and an existing mount point. This example
mounts /dev/ad1s1 on
/mnt:&prompt.root; mount -t ext2fs /dev/ad1s1/mntXFSA &os; kernel can be configured to provide read-only
support for XFS
file systems.To compile in XFS support, add the
following option to a custom kernel configuration file and
recompile the kernel using the instructions in :options XFSThen, to mount an XFS volume located on
/dev/ad1s1:&prompt.root; mount -t xfs /dev/ad1s1/mntThe sysutils/xfsprogs package or
port provides additional
utilities, with man pages, for using, analyzing, and repairing
XFS file systems.ReiserFS&os; provides read-only support for The Reiser file
system, ReiserFS.To load the &man.reiserfs.5; driver:&prompt.root; kldload reiserfsThen, to mount a ReiserFS volume located on
/dev/ad1s1:&prompt.root; mount -t reiserfs /dev/ad1s1/mnt
Index: head/en_US.ISO8859-1/books/handbook/install/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/install/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/install/chapter.xml (revision 46052)
@@ -1,4624 +1,4625 @@
+ xml:id="install">
+ Installing &os; 8.XJimMockRestructured,
reorganized, and parts rewritten by RandyPrattThe
sysinstall walkthrough, screenshots, and general copy by
Synopsisinstallation&os; provides a text-based, easy to use installation
program. &os; 9.0-RELEASE and later use the installation
program known as &man.bsdinstall.8; while
&os; 8.X uses
&man.sysinstall.8;. This chapter describes how to use
&man.sysinstall.8;. The use of &man.bsdinstall.8; is covered in
.After reading this chapter, you will know:How to create the &os; installation media.How &os; refers to and subdivides hard disks.How to start &man.sysinstall.8;.The questions &man.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 &os; to install, and verify that the system's
hardware is supported.In general, these installation instructions are written
for the &i386; and &os;/&arch.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.Hardware RequirementsMinimal ConfigurationThe minimal configuration to install &os; varies with the
&os; version and the hardware architecture.A summary of this information is given in the following
sections. Depending on the method chosen to install &os;,
a floppy drive, CDROM drive, or network adapter may be needed.
Instructions on how to prepare the installation media can be
found in .&os;/&arch.i386; and &os;/&arch.pc98;Both &os;/&arch.i386; and &os;/&arch.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.&os;/&arch.amd64;There are two classes of processors capable of running
&os;/&arch.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.&os;/&arch.sparc64;To install &os;/&arch.sparc64;, use a supported platform
(see ).A dedicated disk is needed for &os;/&arch.sparc64; as it
is not possible to share a disk with another operating
system at this time.Supported HardwareA list of supported hardware is provided with each &os;
release in the &os; 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
&man.sysinstall.8;'s documentation menu. It lists, for a
given architecture, which hardware devices are known to be
supported by each release of &os;. Copies of the supported
hardware list for various releases and architectures can also
be found on the Release
Information page of the &os; website.Pre-installation TasksInventory the ComputerBefore installing &os; it is recommended to inventory the
components in the computer. The &os; installation routines
will show components such as hard disks, network cards, and
CDROM drives with their model number and manufacturer. &os;
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 &os; 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 &os;. It may help to use a table, as seen
in this example:
Sample Device InventoryDevice NameIRQI/O port(s)NotesFirst hard diskN/AN/A40 GB, made by Seagate, first IDE
masterCDROMN/AN/AFirst IDE slaveSecond hard diskN/AN/A20 GB, made by IBM, second IDE
masterFirst IDE controller140x1f0Network cardN/AN/A&intel; 10/100ModemN/AN/A&tm.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
&os; release to install.Make a BackupIf the computer contains valuable data, ensure it is
backed up, and that the backup has been tested before
installing &os;. The &os; installer will prompt before
writing any data to disk, but once that process has started,
it cannot be undone.Decide Where to Install &os;If &os; is to be installed on the entire hard disk, skip
this section.However, if &os; will co-exist with other operating
systems, a rough understanding of how data is laid out on the
disk is useful.Disk Layouts for &os;/&arch.i386;A PC disk can be divided into discrete chunks known as
partitions. Since &os; also has
partitions, naming can quickly become confusing. Therefore,
these disk chunks are referred to as slices in &os;. For
example, the &os; version of &man.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. &os; 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:.&os; must be installed into a primary partition. If
there are multiple disks, a &os; partition can be created on
all, or some, of them. When &os; 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 &os; 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 &os; 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 &os;. 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.Using an Existing Partition UnchangedConsider 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 &os;.Shrinking an Existing PartitionConsider 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 &os; should
have 2 GB of space.In order to install &os;, 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.Collect the Network Configuration DetailsBefore 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.Connecting to an Ethernet Network or Cable/DSL
ModemIf using an Ethernet network or an Internet connection
using an Ethernet adapter via cable or DSL, the following
information is needed:IP addressIP address of the default gatewayHostnameDNS server IP addressesSubnet MaskIf this information is unknown, ask the system
administrator or service provider. Make note if this
information is assigned automatically using
DHCP.Connecting Using a ModemIf using a dialup modem, &os; 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 toThe username and password for the
ISP accountCheck for &os; ErrataAlthough the &os; Project strives to ensure that each
release of &os; 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 &os;
Errata, which is found on the &os; 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 &os;
website.Obtain the &os; Installation FilesThe &os; installer can install &os; from files located in
any of the following places:Local MediaA CDROM or DVDA USB Memory StickA &ms-dos; partition on the same computerFloppy disks (&os;/&arch.pc98; only)NetworkAn FTP site through a firewall or using an HTTP
proxyAn NFS serverA dedicated parallel or serial connectionIf installing from a purchased &os; CD/DVD, skip ahead to
.To obtain the &os; installation files, skip ahead to which explains how to prepare
the installation media. After reading that section, come back
here and read on to .Prepare the Boot MediaThe &os; installation process is started by booting the
computer into the &os; 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
&os; CD/DVD images are bootable and can be used to install
&os; without any other special preparation.To create a bootable memory stick, follow these
steps:Acquire the Memory Stick ImageMemory stick images for
&os; 8.X can be downloaded
from the ISO-IMAGES/ directory at
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/arch/ISO-IMAGES/version/&os;-version-RELEASE-arch-memstick.img.
Replace arch and
version with the architecture
and the version number to install. For example, the
memory stick images for
&os;/&arch.i386; &rel2.current;-RELEASE are
available from ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/&arch.i386;/ISO-IMAGES/&rel2.current;/&os;-&rel2.current;-RELEASE-&arch.i386;-memstick.img.A different directory path is used for
&os; 9.0-RELEASE and later versions. How to
download and install
&os; 9.X
is covered in .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 &os; 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 StickUsing &os; to Write the ImageThe 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 &man.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
&man.dd.1; must be used to write the image directly to
the disk:&prompt.root; dd if=&os;-&rel2.current;-RELEASE-&arch.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.Using &windows; to Write the ImageMake 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
WindowsImage 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 WriterDouble-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 Save 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
Write to write the image file
to the drive.To create the boot floppy images for a &os;/&arch.pc98;
installation, follow these steps:Acquire the Boot Floppy ImagesThe &os;/&arch.pc98; boot disks can be downloaded from
the floppies directory,
ftp://ftp.FreeBSD.org/pub/FreeBSD/releases/pc98/version-RELEASE/floppies/.
Replace 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 DisksPrepare 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 DisksThe .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.DOS&os; 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/
version-RELEASE/tools/ on the
&os; FTP site. Download this tool, insert a floppy, then
specify the filename to write to the floppy drive: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 &os; system, use &man.dd.1; to write the
image files directly to disk. On &os;, run:&prompt.root; dd if=boot.flp of=/dev/fd0On &os;, /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 &os;.Starting the InstallationBy 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.BootingBooting for the &i386;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
AltS. 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 , 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 &os;/&arch.pc98;, installation boot floppies
are available and can be prepared as described in
. 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.&os; will start to boot. If booting from CD/DVD,
messages will be displayed, similar to these:Booting from CD-Rom...
645MB medium detected
CD Loader 1.2
Building the boot loader arguments
Looking up /BOOT/LOADER... Found
Relocating the loader and the BTX
Starting the BTX loader
BTX loader 1.00 BTX version is 1.02
Consoles: internal video/keyboard
BIOS CD is cd0
BIOS drive C: is disk0
BIOS drive D: is disk1
BIOS 636kB/261056kB available memory
FreeBSD/i386 bootstrap loader, Revision 1.1
Loading /boot/defaults/loader.conf
/boot/kernel/kernel text=0x64daa0 data=0xa4e80+0xa9e40 syms=[0x4+0x6cac0+0x4+0x88e9d]
\If booting from floppy disc, a display similar to
this will be shown:Booting from Floppy...
Uncompressing ... done
BTX loader 1.00 BTX version is 1.01
Console: internal video/keyboard
BIOS drive A: is disk0
BIOS drive C: is disk1
BIOS 639kB/261120kB available memory
FreeBSD/i386 bootstrap loader, Revision 1.1
Loading /boot/defaults/loader.conf
/kernel text=0x277391 data=0x3268c+0x332a8 |
Insert disk labelled "Kernel floppy 1" and press any key...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 &os; boot
loader menu:&os; Boot Loader MenuEither wait ten seconds, or press
Enter.Booting for &sparc64;Most &sparc64; systems are set to boot automatically
from disk. To install &os;, 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:Sun Blade 100 (UltraSPARC-IIe), Keyboard Present
Copyright 1998-2001 Sun Microsystems, Inc. All rights reserved.
OpenBoot 4.2, 128 MB memory installed, Serial #51090132.
Ethernet address 0:3:ba:b:92:d4, Host ID: 830b92d4.If the system proceeds to boot from disk, press
L1A
or StopA
on the keyboard, or send a BREAK over the
serial console using ~# in &man.tip.1; or
&man.cu.1; to get to the PROM prompt. It looks like
this:ok ok {0} 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.Reviewing the Device Probe ResultsThe 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 will be
displayed, although it will differ depending on the devices in
the computer.Typical Device Probe Resultsavail memory = 253050880 (247120K bytes)
Preloaded elf kernel "kernel" at 0xc0817000.
Preloaded mfs_root "/mfsroot" at 0xc0817084.
md0: Preloaded image </mfsroot> 4423680 bytes at 0xc03ddcd4
md1: Malloc disk
Using $PIR table, 4 entries at 0xc00fde60
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
pcib1:<VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0
pci1: <PCI bus> on pcib1
pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11
isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0
isa0: <iSA bus> on isab0
atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ata1: at 0x170 irq 15 on atapci0
uhci0 <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci
0
usb0: <VIA 83572 USB controller> on uhci0
usb0: USB revision 1.0
uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr1
uhub0: 2 ports with 2 removable, self powered
pci0: <unknown card> (vendor=0x1106, dev=0x3040) at 7.3
dc0: <ADMtek AN985 10/100BaseTX> port 0xe800-0xe8ff mem 0xdb000000-0xeb0003ff ir
q 11 at device 8.0 on pci0
dc0: Ethernet address: 00:04:5a:74:6b:b5
miibus0: <MII bus> on dc0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xec00-0xec1f irq 9 at device 10.
0 on pci0
ed0 address 52:54:05:de:73:1b, type NE2000 (16 bit)
isa0: too many dependant configs (8)
isa0: unexpected small tag 14
orm0: <Option ROM> at iomem 0xc0000-0xc7fff on isa0
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5” drive> on fdc0 drive 0
atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq1 on atkbdc0
kbd0 at atkbd0
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model Generic PS/@ mouse, device ID 0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
pppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/15 bytes threshold
plip0: <PLIP network interface> on ppbus0
ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master UDMA33
acd0: CD-RW <LITE-ON LTR-1210B> at ata1-slave PIO4
Mounting root from ufs:/dev/md0c
/stand/sysinstall running as init on vty0Check the probe results carefully to make sure that &os;
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 will be displayed. Use the
arrow key to choose a country, region, or group. Then press
Enter to set the country.Selecting Country MenuIf United States 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.Selecting Keyboard MenuAfter the country selection, the &man.sysinstall.8;
main menu will display.Introducing &man.sysinstall.8;The &os; 8.X installer,
&man.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
Usage entry is highlighted and that
the [Select] button is selected, as shown
in , then press
Enter.The instructions for using the menu system will be
displayed. After reviewing them, press Enter
to return to the Main Menu.Selecting Usage from Sysinstall Main MenuSelecting the Documentation MenuFrom the Main Menu, select Doc
with the arrow keys and press Enter.Selecting Documentation MenuThis will display the Documentation Menu.Sysinstall Documentation MenuIt 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
Exit with the arrow keys and press
Enter.Selecting the Keymap MenuTo change the keyboard mapping, use the arrow keys to
select Keymap from the menu and
press Enter. This is only required when
using a non-standard or non-US keyboard.Sysinstall Main MenuA 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 &gui.ok;
using the arrow keys and press Enter.Only a partial list is shown in this screen
representation. Selecting &gui.cancel; by pressing
Tab will use the default keymap and return to
the Main Install Menu.Sysinstall Keymap MenuInstallation Options ScreenSelect Options and press
Enter.Sysinstall Main MenuSysinstall OptionsThe 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 Use Defaults 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.Begin a Standard InstallationThe Standard installation is
the option recommended for those new to &unix; or &os;. Use
the arrow keys to select Standard
and then press Enter to start the
installation.Begin Standard InstallationAllocating Disk SpaceThe first task is to allocate disk space for &os;, and label
that space so that &man.sysinstall.8; can prepare it. In order
to do this you need to know how &os; expects to find
information on the disk.BIOS Drive NumberingBefore installing and configuring &os; it is important to
be aware how &os; deals with BIOS drive mappings.MS-DOSMicrosoft WindowsIn a PC running a BIOS-dependent operating system such as
µsoft.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.SCSIBIOSSystems 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 &os; are
not as expected. &os; 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 &os;, always restore the BIOS to natural drive
numbering before installing &os;, 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.An Illustration from the Files of Bill and Fred's
Exceptional Adventures:Bill breaks-down an older Wintel box to make another
&os; box for Fred. Bill installs a single SCSI drive as
SCSI unit zero and installs &os; on it.Fred begins using the system, but after several days
notices that the older SCSI drive is reporting numerous
errors.To address the situation, Bill grabs an identical SCSI
drive and installs this drive as SCSI unit four and makes an
image copy from drive zero to drive four. Now that the new
drive is installed and functioning, Bill decides to start
using it, so he uses features in the SCSI BIOS to re-order
the disk drives so that the system boots from SCSI unit
four. &os; boots and runs just fine.Fred continues his work and soon decides that it is time
to upgrade to a newer version of &os;. Bill removes SCSI
unit zero because it was a bit flaky and replaces it with
another identical disk drive. Bill then installs the new
version of &os; onto the new SCSI unit zero and the
installation goes well.Fred uses the new version of &os; for a few days, and
certifies that it is good enough for use in the engineering
department. It is time to copy all of his work from the old
version, so Fred mounts SCSI unit four which should contain
the latest copy of the older &os; version. Fred is dismayed
to find that none of his work is present on SCSI unit
four.It turns out that when Bill made an image copy of the
original SCSI unit zero onto SCSI unit four, unit four
became the new clone. When Bill re-ordered
the SCSI BIOS so that he could boot from SCSI unit four,
&os; was still running on SCSI unit zero. Making this kind
of BIOS change causes some or all of the boot and loader
code to be fetched from the selected BIOS drive. But when
the &os; kernel drivers take over, the BIOS drive numbering
is ignored, and &os; transitions back to normal drive
numbering. In this example, the system continued to operate
on the original SCSI unit zero, and all of Fred's data was
there, not on SCSI unit four. The fact that the system
appeared to be running on SCSI unit four was simply an
artifact of human expectations.Fortunately, the older SCSI unit zero was retrieved and
all of Fred's work was restored.Although SCSI drives were used in this illustration, the
concepts apply equally to IDE drives.Creating Slices Using FDiskAfter choosing to begin a standard installation in
&man.sysinstall.8;, this message will appear: Message
In the next menu, you will need to set up a DOS-style ("fdisk")
partitioning scheme for your hard disk. If you simply wish to devote
all disk space to FreeBSD (overwriting anything else that might be on
the disk(s) selected) then use the (A)ll command to select the default
partitioning scheme followed by a (Q)uit. If you wish to allocate only
free space to FreeBSD, move to a partition marked "unused" and use the
(C)reate command.
[ OK ]
[ Press enter or space ]Press Enter and a list of all the hard
drives that the kernel found when it carried out the device
probes will be displayed. shows an example from a
system with two IDE disks called ad0 and
ad2.Select Drive for FDiskNote 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 &os; 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 &os;
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 &os; 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 &os;, and then press
&gui.ok;. FDisk will start, with a
display similar to that shown in .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 &os; 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 &os; 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.Typical Default FDisk
PartitionsThis step varies, depending on how the disk is to be
sliced.To install &os; to the entire disk, which will delete all
the other data on this disk, press A, which
corresponds to the Use Entire Disk
option. The existing slices will be removed and replaced with
a small area flagged as unused and one
large slice for &os;. Then, select the newly created &os;
slice using the arrow keys and press S to
mark the slice as being bootable. The screen will then look
similar to . 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
&os;, 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 &os; 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.Fdisk Partition Using Entire DiskWhen finished, press Q. Any changes will
be saved in &man.sysinstall.8;, but will not yet be written to
disk.Install a Boot ManagerThe next menu provides the option to install a boot
manager. In general, install the &os; boot manager if:There is more than one drive and &os; will be
installed onto a drive other than the first one.&os; will be installed alongside another operating
system on the same disk, and you want to choose whether to
start &os; or the other operating system when the computer
starts.If &os; is going to be the only operating system on this
machine, installed on the first hard disk, then the
Standard boot manager will suffice.
Choose None if using a third-party
boot manager capable of booting &os;.Make a selection and press Enter.Sysinstall Boot Manager MenuThe help screen, reached by pressing F1,
discusses the problems that can be encountered when trying to
share the hard disk between operating systems.Creating Slices on Another DriveIf there is more than one drive, it will return to the
Select Drives screen after the boot manager selection. To
install &os; on to more than one disk, select another disk and
repeat the slice process using
FDisk.If installing &os; on a drive other than the first
drive, the &os; boot manager needs to be installed on both
drives.Exit Select DriveUse Tab to toggle between the last drive
selected, &gui.ok;, and &gui.cancel;.Press Tab once to toggle to &gui.ok;,
then press Enter to continue with the
installation.Creating Partitions Using
DisklabelNext, 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 &os; installation, do not
give too much thought to how to partition the disk. It is
more important to install &os; and start learning how to use
it. You can always re-install &os; 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 Layout for First DiskPartitionFilesystemSizeDescriptiona/1 GBThis 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
&os; install will put about 128 MB of data
here.bN/A2-3 x RAMThe system's swap space is kept on the
b partition. Choosing the right
amount of swap space can be a bit of an art. A good
rule of thumb is that swap space should be two or
three times as much as the available physical memory
(RAM). There should be at least 64 MB of swap,
so if there is less than 32 MB of RAM in the
computer, set the swap amount to 64 MB. If there
is more than one disk, swap space can be put on each
disk. &os; will then use each disk for swap, which
effectively speeds up the act of swapping. In this
case, calculate the total amount of swap needed and
divide this by the number of disks to give the amount
of swap to put on each disk.e/var512 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 &os;'s
day-to-day running. Putting these files on another
filesystem allows &os; to optimize the access of these
files without affecting other files in other
directories that do not have the same access
pattern.f/usrRest 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 &os; partition editor.If installing &os; 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 Layout for Subsequent DisksPartitionFilesystemSizeDescriptionbN/ASee descriptionSwap 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/disknRest of diskThe 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
&man.sysinstall.8; uses it, so following it makes the
installation slightly cleaner. This filesystem can be
mounted anywhere; this example mounts it as /diskn,
where n is a number that
changes for each disk.
Having chosen the partition layout, create it using
&man.sysinstall.8;. Message
Now, you need to create BSD partitions inside of the fdisk
partition(s) just created. If you have a reasonable amount of disk
space (1GB or more) and don't have any special requirements, simply
use the (A)uto command to allocate space automatically. If you have
more specific needs or just don't care for the layout chosen by
(A)uto, press F1 for more information on manual layout.
[ OK ]
[ Press enter or space ]Press Enter to start the &os; partition
editor, called Disklabel. 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.Sysinstall Disklabel EditorDisklabel 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
. 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.Sysinstall Disklabel Editor with Auto DefaultsTo 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 . 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.Free Space for Root PartitionThe 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 . Then press
&gui.ok;.Edit Root Partition SizeAfter 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 . This first partition
will contain a filesystem, so check that
FS is selected and press
Enter.Choose the Root Partition TypeFinally, tell Disklabel where
the filesystem will be mounted. The dialog box is shown in
. Type
/, and then press
Enter.Choose the Root Mount PointThe 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 &os; DiskLabel Editor screen will appear similar
to , although the values
chosen may be different. Press Q to
finish.Sysinstall Disklabel EditorChoosing What to InstallSelect the Distribution SetDeciding 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 &os; 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 &os;. More information regarding the
installation and configuration of a
&xorg; can be found in .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 .The most versatile system is one that includes everything.
If there is adequate disk space, select
All, as shown in , 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.Choose DistributionsInstalling the Ports CollectionAfter selecting the desired distribution, an opportunity
to install the &os; 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. 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 &os; &rel.current;, the &os;
Ports Collection takes up about &ports.size; of disk space.
You can safely assume a larger value for more recent versions
of &os;. User Confirmation Requested
Would you like to install the FreeBSD ports collection?
This will give you ready access to over &os.numports; ported software packages,
at a cost of around &ports.size; of disk space when "clean" and possibly much
more than that if a lot of the distribution tarballs are loaded
(unless you have the extra CDs from a FreeBSD CD/DVD distribution
available and can mount it on /cdrom, in which case this is far less
of a problem).
The Ports Collection is a very valuable resource and well worth having
on your /usr partition, so it is advisable to say Yes to this option.
For more information on the Ports Collection & the latest ports,
visit:
http://www.FreeBSD.org/ports
[ Yes ] NoSelect &gui.yes; with the arrow keys to install the Ports
Collection or &gui.no; to skip this option. Press
Enter to continue. The Choose Distributions
menu will redisplay.Confirm DistributionsOnce satisfied with the options, select
Exit with the arrow keys, ensure
that &gui.ok; is highlighted, and press
Enter to continue.Choosing the Installation MediaIf installing from a CD/DVD, use the arrow keys to highlight
Install from a &os; CD/DVD. Ensure
that &gui.ok; 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.Choose Installation MediaFTP Installation ModesinstallationnetworkFTPThere are three FTP installation modes to choose from:
active FTP, passive FTP, or via a HTTP proxy.FTP Active: Install from an FTP
serverThis 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.FTP Passive: Install from an FTP server
through a firewallThis option instructs &man.sysinstall.8; to use
passive modeFTPpassive mode for all FTP operations. This allows the
user to pass through firewalls that do not allow
incoming connections on random TCP ports.FTP via a HTTP proxy: Install from an FTP
server through a http proxyThis option instructs &man.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 proxyFTPvia 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.Committing to the InstallationThe installation can now proceed if desired. This is also
the last chance for aborting the installation to prevent changes
to the hard drive. User Confirmation Requested
Last Chance! Are you SURE you want to 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!
[ Yes ] NoSelect &gui.yes; 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: Message
Congratulations! You now have FreeBSD installed on your system.
We will now move on to the final configuration questions.
For any option you do not wish to configure, simply select No.
If you wish to re-enter this utility after the system is up, you may
do so by typing: /usr/sbin/sysinstall.
[ OK ]
[ Press enter or space ]Press Enter to proceed with
post-installation configurations.Selecting &gui.no; and pressing Enter will
abort the installation so no changes will be made to the system.
The following message will appear: Message
Installation complete with some errors. You may wish to scroll
through the debugging messages on VTY1 with the scroll-lock feature.
You can also choose "No" at the next prompt and go back into the
installation menus to retry whichever operations have failed.
[ OK ]This message is generated because nothing was installed.
Pressing Enter will return to the Main
Installation Menu to exit the installation.Post-installationConfiguration 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 &os;
system or after boot using &man.sysinstall.8; and then selecting
the Configure menu.Network Device ConfigurationIf 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 &os; as a gateway/router refer to the Advanced Networking
chapter. User Confirmation Requested
Would you like to configure any Ethernet or PPP network devices?
[ Yes ] NoTo configure a network device, select &gui.yes; and press
Enter. Otherwise, select &gui.no; to
continue.Selecting an Ethernet DeviceSelect the interface to be configured with the arrow keys
and press Enter. User Confirmation Requested
Do you want to try IPv6 configuration of the interface?
Yes [ No ]In this private local area network, the current Internet
type protocol (IPv4) was sufficient and
&gui.no; was selected with the arrow keys and
Enter pressed.If connected to an existing IPv6
network with an RA server, choose
&gui.yes; and press Enter. It will take
several seconds to scan for RA servers. User Confirmation Requested
Do you want to try DHCP configuration of the interface?
Yes [ No ]If Dynamic Host Configuration Protocol
DHCP) is not required, select &gui.no; with
the arrow keys and press Enter.Selecting &gui.yes; will execute &man.dhclient.8; and, if
successful, will fill in the network configuration information
automatically. Refer to 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.Set Network Configuration for
ed0Use Tab to select the information fields
and fill in appropriate information:HostThe fully-qualified hostname, such as k6-2.example.com in
this case.DomainThe name of the domain that the machine is in, such
as example.com for this
case.IPv4 GatewayIP 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.Name serverIP 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.IPv4 addressThe IP address to be used for this interface was
192.168.0.1NetmaskThe 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.Extra options to &man.ifconfig.8;Any additional interface-specific options to
&man.ifconfig.8;. There were none in this case.Use Tab to select &gui.ok; when finished
and press Enter. User Confirmation Requested
Would you like to bring the ed0 interface up right now?
[ Yes ] NoChoosing &gui.yes; 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.Configure Gateway User Confirmation Requested
Do you want this machine to function as a network gateway?
[ Yes ] NoIf the machine will be acting as the gateway for a local
area network and forwarding packets between other machines,
select &gui.yes; and press Enter. If the
machine is a node on a network, select &gui.no; and press
Enter to continue.Configure Internet Services User Confirmation Requested
Do you want to configure inetd and the network services that it provides?
Yes [ No ]If &gui.no; 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 for more
information.Otherwise, select &gui.yes; to configure these services
during install. An additional confirmation will
display: User Confirmation Requested
The Internet Super Server (inetd) allows a number of simple Internet
services to be enabled, including finger, ftp and telnetd. Enabling
these services may increase risk of security problems by increasing
the exposure of your system.
With this in mind, do you wish to enable inetd?
[ Yes ] NoSelect &gui.yes; to continue. User Confirmation Requested
inetd(8) relies on its configuration file, /etc/inetd.conf, to determine
which of its Internet services will be available. The default FreeBSD
inetd.conf(5) leaves all services disabled by default, so they must be
specifically enabled in the configuration file before they will
function, even once inetd(8) is enabled. Note that services for
IPv6 must be separately enabled from IPv4 services.
Select [Yes] now to invoke an editor on /etc/inetd.conf, or [No] to
use the current settings.
[ Yes ] NoSelecting &gui.yes; allows services to be enabled by
deleting the # at the beginning of the
lines representing those services.Editing inetd.confOnce the edits are complete, press Esc to
display a menu which will exit the editor and save the
changes.Enabling SSH LoginSSHsshd User Confirmation Requested
Would you like to enable SSH login?
Yes [ No ]Selecting &gui.yes; will enable &man.sshd.8;, the daemon
for OpenSSH. This allows secure
remote access to the machine. For more information about
OpenSSH, see .Anonymous FTPFTPanonymous User Confirmation Requested
Do you want to have anonymous FTP access to this machine?
Yes [ No ]Deny Anonymous FTPSelecting the default &gui.no; and pressing
Enter will still allow users who have
accounts with passwords to use FTP to access the
machine.Allow Anonymous FTPAnyone 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 .To allow anonymous FTP, use the arrow keys to select
&gui.yes; and press Enter. An additional
confirmation will display: User Confirmation Requested
Anonymous FTP permits un-authenticated users to connect to the system
FTP server, if FTP service is enabled. Anonymous users are
restricted to a specific subset of the file system, and the default
configuration provides a drop-box incoming directory to which uploads
are permitted. You must separately enable both inetd(8), and enable
ftpd(8) in inetd.conf(5) for FTP services to be available. If you
did not do so earlier, you will have the opportunity to enable inetd(8)
again later.
If you want the server to be read-only you should leave the upload
directory option empty and add the -r command-line option to ftpd(8)
in inetd.conf(5)
Do you wish to continue configuring anonymous FTP?
[ Yes ] NoThis message indicates that the FTP service will also
have to be enabled in /etc/inetd.conf
to allow anonymous FTP connections. Select &gui.yes; and
press Enter to continue. The following
screen will display:Default Anonymous FTP ConfigurationUse Tab to select the information
fields and fill in appropriate information:UIDThe user ID to assign to the anonymous FTP user.
All files uploaded will be owned by this ID.GroupWhich group to place the anonymous FTP user
into.CommentString describing this user in
/etc/passwd.FTP Root DirectoryWhere files available for anonymous FTP will be
kept.Upload SubdirectoryWhere 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. User Confirmation Requested
Create a welcome message file for anonymous FTP users?
[ Yes ] NoIf &gui.yes; is selected, press Enter
and the &man.ee.1; editor will automatically start.Edit the FTP Welcome MessageUse 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 a) leave editor.
Press Enter to exit and continue. Press
Enter again to save any changes.Configure the Network File SystemThe 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 for more information.NFS Server User Confirmation Requested
Do you want to configure this machine as an NFS server?
Yes [ No ]If there is no need for a NFS server,
select &gui.no; and press Enter.If &gui.yes; is chosen, a message will pop-up indicating
that /etc/exports must be
created. Message
Operating as an NFS server means that you must first configure an
/etc/exports file to indicate which hosts are allowed certain kinds of
access to your local filesystems.
Press [Enter] now to invoke an editor on /etc/exports
[ OK ]Press Enter to continue. A text editor
will start, allowing /etc/exports to be
edited.Editing exportsUse 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 a) leave editor.
Press Enter to exit and continue.NFS ClientThe NFS client allows the machine to
access NFS servers. User Confirmation Requested
Do you want to configure this machine as an NFS client?
Yes [ No ]With the arrow keys, select &gui.yes; or &gui.no; as
appropriate and press Enter.System Console SettingsThere are several options available to customize the
system console. User Confirmation Requested
Would you like to customize your system console settings?
[ Yes ] NoTo view and configure the options, select &gui.yes; and
press Enter.System Console Configuration OptionsA commonly used option is the screen saver. Use the arrow
keys to select Saver and then press
Enter.Screen Saver OptionsSelect 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 Saver again.
At the Screen Saver Options menu, select
Timeout using the arrow keys and
press Enter. A pop-up menu will
appear:Screen Saver TimeoutThe value can be changed, then select &gui.ok; and press
Enter to return to the System Console
Configuration menu.System Console Configuration ExitSelect Exit and press
Enter to continue with the post-installation
configuration.Setting the Time ZoneSetting 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. User Confirmation Requested
Would you like to set this machine's time zone now?
[ Yes ] NoSelect &gui.yes; and press Enter to set
the time zone. User Confirmation Requested
Is this machine's CMOS clock set to UTC? If it is set to local time
or you don't know, please choose NO here!
Yes [ No ]Select &gui.yes; or &gui.no; according to how the
machine's clock is configured, then press
Enter.Select the RegionThe appropriate region is selected using the arrow keys
and then pressing Enter.Select the CountrySelect the appropriate country using the arrow keys and
press Enter.Select the Time ZoneThe appropriate time zone is selected using the arrow
keys and pressing Enter. Confirmation
Does the abbreviation 'EDT' look reasonable?
[ Yes ] NoConfirm that the abbreviation for the time zone is
correct. If it looks okay, press Enter to
continue with the post-installation configuration.Mouse SettingsThis option allows cut and paste in the console and user
programs using a 3-button mouse. If using a 2-button mouse,
refer to &man.moused.8; for details on emulating the 3-button
style. This example depicts a non-USB mouse
configuration: User Confirmation Requested
Does this system have a PS/2, serial, or bus mouse?
[ Yes ] No Select &gui.yes; for a PS/2, serial, or bus mouse, or
&gui.no; for a USB mouse, then press
Enter.Select Mouse Protocol TypeUse the arrow keys to select
Type and press
Enter.Set Mouse ProtocolThe mouse used in this example is a PS/2 type, so the
default Auto is appropriate. To
change the mouse protocol, use the arrow keys to select
another option. Ensure that &gui.ok; is highlighted and press
Enter to exit this menu.Configure Mouse PortUse the arrow keys to select
Port and press
Enter.Setting the Mouse PortThis system had a PS/2 mouse, so the default
PS/2 is appropriate. To change the
port, use the arrow keys and then press
Enter.Enable the Mouse DaemonLast, use the arrow keys to select
Enable, and press
Enter to enable and test the mouse
daemon.Test the Mouse DaemonMove the mouse around the screen to verify that the cursor
responds properly. If it does, select &gui.yes; and press
Enter. If not, the mouse has not been
configured correctly. Select &gui.no; and try using different
configuration options.Select Exit with the arrow keys
and press Enter to continue with the
post-installation configuration.Install PackagesPackages 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, &man.sysinstall.8; can
be used to add additional packages. User Confirmation Requested
The FreeBSD package collection is a collection of hundreds of
ready-to-run applications, from text editors to games to WEB servers
and more. Would you like to browse the collection now?
[ Yes ] NoSelect &gui.yes; and press Enter to be
presented with the Package Selection screens:Select Package CategoryOnly packages on the current installation media are
available for installation at any given time.All packages available will be displayed if
All 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:Select PackagesThe 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, &gui.ok;, and &gui.cancel;.Once finished marking the packages for installation, press
Tab once to toggle to &gui.ok; and press
Enter to return to the Package Selection
menu.The left and right arrow keys will also toggle between
&gui.ok; and &gui.cancel;. This method can also be used to
select &gui.ok; and press Enter to return to
the Package Selection menu.Install PackagesUse the Tab and arrow keys to select
[ Install ] and press
Enter to see the installation confirmation
message:Confirm Package InstallationSelect &gui.ok; 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
Install to return to the final
configuration.Add Users/GroupsAdd 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: User Confirmation Requested
Would you like to add any initial user accounts to the system? Adding
at least one account for yourself at this stage is suggested since
working as the "root" user is dangerous (it is easy to do things which
adversely affect the entire system).
[ Yes ] NoSelect &gui.yes; and press Enter to
continue with adding a user.Select UserSelect User with the arrow keys
and press Enter.Add User InformationThe 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:Login IDThe login name of the new user (mandatory).UIDThe numerical ID for this user (leave blank for
automatic choice).GroupThe login group name for this user (leave blank for
automatic choice).PasswordThe password for this user (enter this field with
care!).Full nameThe user's full name (comment).Member groupsThe groups this user belongs to.Home directoryThe user's home directory (leave blank for
default).Login shellThe 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 &os; 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 &gui.ok; and the User and Group
Management menu will redisplay:Exit User and Group ManagementGroups can also be added at this time. Otherwise, this
menu may be accessed using &man.sysinstall.8; at a later
time.When finished adding users, select
Exit with the arrow keys and press
Enter to continue the installation.Set the root
Password Message
Now you must set the system manager's password.
This is the password you'll use to log in as "root".
[ OK ]
[ Press enter or space ]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.New password:
Retype new password :The installation will continue after the password is
successfully entered.Exiting InstallA message will ask if configuration is complete: User Confirmation Requested
Visit the general configuration menu for a chance to set any last
options?
Yes [ No ]Select &gui.no; with the arrow keys and press
Enter to return to the Main Installation
Menu.Exit InstallSelect [X Exit Install] with the
arrow keys and press Enter. The installer
will prompt to confirm exiting the installation: User Confirmation Requested
Are you sure you wish to exit? The system will reboot.
[ Yes ] NoSelect &gui.yes;. If booting from the CDROM drive, the
following message will remind you to remove the disk: Message
Be sure to remove the media from the drive.
[ OK ]
[ Press enter or space ]The CDROM drive is locked until the machine starts to
reboot, then the disk can quickly be removed from the drive.
Press &gui.ok; to reboot.The system will reboot so watch for any error messages
that may appear, see for more
details.Configure Additional Network ServicesTomRhodesContributed
by 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
&os;'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 &man.sysinstall.8; or by editing
/etc/rc.conf.Selecting the Networking option will
display a menu similar to the one below:Network Configuration Upper-levelThe first option, Interfaces,
is covered in .Selecting the AMD option adds
support for &man.amd.8;. This is usually used in conjunction
with NFS for automatically mounting remote
filesystems.Next is the AMD Flags 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 /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map sets the default mount location which
is specified here as /.amd_mnt.
specifies the default
log; however, when &man.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.FTPanonymousThe Anon FTP 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 Gateway menu will configure
the machine to be a gateway. This menu can also be used to
unset the Gateway option if it was
accidentally selected during installation.The Inetd option can be used to
configure or completely disable &man.inetd.8;.The Mail option is used to
configure the system's default Mail Transfer Agent
(MTA). Selecting this option will bring up
the following menu:Select a Default MTAThis 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 Sendmail to install
Sendmail as the default
MTA. Select Sendmail
local to set
Sendmail as the default
MTA, but disable its ability to receive
incoming email from the Internet. The other options,
Postfix and
Exim, provide alternatives to
Sendmail.The next menu after the MTA menu is
NFS client. 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 for more information about client
and server configuration.Below that option is the NFS
server 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 Ntpdate
option, which deals with time synchronization. When selected,
a menu like the one below shows up:Ntpdate ConfigurationFrom 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:Network Configuration Lower-levelRPC communication between
NFS servers and clients is managed by
&man.rpcbind.8; which is required for NFS
servers to operate correctly. Status monitoring is provided
by &man.rpc.statd.8; and the reported status is usually held
in /var/db/statd.status. The next option
is for &man.rpc.lockd.8; which provides file locking
services. This is usually used with &man.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, Routed,
configures the routing daemon. &man.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 &man.routed.8;. The default of
should appear on the screen.The next menu, Rwhod, starts
&man.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 &man.ruptime.1; and
&man.rwho.1;.The next to last option in the list is for &man.sshd.8;,
the secure shell server for
OpenSSH. It is highly recommended
over the standard &man.telnetd.8; and &man.ftpd.8; servers as
it is used to create a secure, encrypted connection from one
host to another.The final option is TCP
Extensions 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 X Exit and
continue on to the next configuration item or simply exit
&man.sysinstall.8; by selecting X
Exit twice then [X
Exit Install].&os; Bootup&os;/&arch.i386; BootupIf 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
&man.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):Copyright (c) 1992-2002 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
Timecounter "i8254" frequency 1193182 Hz
CPU: AMD-K6(tm) 3D processor (300.68-MHz 586-class CPU)
Origin = "AuthenticAMD" Id = 0x580 Stepping = 0
Features=0x8001bf<FPU,VME,DE,PSE,TSC,MSR,MCE,CX8,MMX>
AMD Features=0x80000800<SYSCALL,3DNow!>
real memory = 268435456 (262144K bytes)
config> di sn0
config> di lnc0
config> di le0
config> di ie0
config> di fe0
config> di cs0
config> di bt0
config> di aic0
config> di aha0
config> di adv0
config> q
avail memory = 256311296 (250304K bytes)
Preloaded elf kernel "kernel" at 0xc0491000.
Preloaded userconfig_script "/boot/kernel.conf" at 0xc049109c.
md0: Malloc disk
Using $PIR table, 4 entries at 0xc00fde60
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
pcib1: <VIA 82C598MVP (Apollo MVP3) PCI-PCI (AGP) bridge> at device 1.0 on pci0
pci1: <PCI bus> on pcib1
pci1: <Matrox MGA G200 AGP graphics accelerator> at 0.0 irq 11
isab0: <VIA 82C586 PCI-ISA bridge> at device 7.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <VIA 82C586 ATA33 controller> port 0xe000-0xe00f at device 7.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ata1: at 0x170 irq 15 on atapci0
uhci0: <VIA 83C572 USB controller> port 0xe400-0xe41f irq 10 at device 7.2 on pci0
usb0: <VIA 83C572 USB controller> on uhci0
usb0: USB revision 1.0
uhub0: VIA UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
chip1: <VIA 82C586B ACPI interface> at device 7.3 on pci0
ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0xe800-0xe81f irq 9 at
device 10.0 on pci0
ed0: address 52:54:05:de:73:1b, type NE2000 (16 bit)
isa0: too many dependant configs (8)
isa0: unexpected small tag 14
fdc0: <NEC 72065B or clone> at port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on isa0
fdc0: FIFO enabled, 8 bytes threshold
fd0: <1440-KB 3.5" drive> on fdc0 drive 0
atkbdc0: <keyboard controller (i8042)> at port 0x60-0x64 on isa0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
kbd0 at atkbd0
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: model Generic PS/2 mouse, device ID 0
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
sc0: <System console> at flags 0x1 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 16550A
sio1 at port 0x2f8-0x2ff irq 3 on isa0
sio1: type 16550A
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/15 bytes threshold
ppbus0: IEEE1284 device found /NIBBLE
Probing for PnP devices on ppbus0:
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
ad0: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata0-master using UDMA33
ad2: 8063MB <IBM-DHEA-38451> [16383/16/63] at ata1-master using UDMA33
acd0: CDROM <DELTA OTC-H101/ST3 F/W by OIPD> at ata0-slave using PIO4
Mounting root from ufs:/dev/ad0s1a
swapon: adding /dev/ad0s1b as swap device
Automatic boot in progress...
/dev/ad0s1a: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1a: clean, 48752 free (552 frags, 6025 blocks, 0.9% fragmentation)
/dev/ad0s1f: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1f: clean, 128997 free (21 frags, 16122 blocks, 0.0% fragmentation)
/dev/ad0s1g: FILESYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1g: clean, 3036299 free (43175 frags, 374073 blocks, 1.3% fragmentation)
/dev/ad0s1e: filesystem CLEAN; SKIPPING CHECKS
/dev/ad0s1e: clean, 128193 free (17 frags, 16022 blocks, 0.0% fragmentation)
Doing initial network setup: hostname.
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
inet6 fe80::5054::5ff::fede:731b%ed0 prefixlen 64 tentative scopeid 0x1
ether 52:54:05:de:73:1b
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x8
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
Additional routing options: IP gateway=YES TCP keepalive=YES
routing daemons:.
additional daemons: syslogd.
Doing additional network setup:.
Starting final network daemons: creating ssh RSA host key
Generating public/private rsa1 key pair.
Your identification has been saved in /etc/ssh/ssh_host_key.
Your public key has been saved in /etc/ssh/ssh_host_key.pub.
The key fingerprint is:
cd:76:89:16:69:0e:d0:6e:f8:66:d0:07:26:3c:7e:2d root@k6-2.example.com
creating ssh DSA host key
Generating public/private dsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
The key fingerprint is:
f9:a1:a9:47:c4:ad:f9:8d:52:b8:b8:ff:8c:ad:2d:e6 root@k6-2.example.com.
setting ELF ldconfig path: /usr/lib /usr/lib/compat /usr/X11R6/lib
/usr/local/lib
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout /usr/X11R6/lib/aout
starting standard daemons: inetd cron sshd usbd sendmail.
Initial rc.i386 initialization:.
rc.i386 configuring syscons: blank_time screensaver moused.
Additional ABI support: linux.
Local package initialization:.
Additional TCP options:.
FreeBSD/i386 (k6-2.example.com) (ttyv0)
login: rpratt
Password: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.&os; ShutdownIt is important to properly shutdown the operating system.
Do not just turn off the power. First, become the superuser
using &man.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.The operating system has halted.
Please press any key to reboot.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 CtrlAltDel key combination can also be used to reboot the
system; however, this is not recommended.TroubleshootinginstallationtroubleshootingThis section covers basic installation troubleshooting of
common problems. There are also a few questions and answers for
people wishing to dual-boot &os; with &windows;.If Something Goes WrongDue 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 &os; 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 &os;
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.Using &windows; FilesystemsAt this time, &os; does not support file systems
compressed with the
Double Space™ application.
Therefore the file system will need to be uncompressed before
&os; can access the data. This can be done by running the
Compression Agent located in the
Start>
Programs >
System Tools menu.&os; can support &ms-dos; file systems (sometimes called
FAT file systems). The &man.mount.msdosfs.8; command grafts
such file systems onto the existing directory hierarchy,
allowing the file system's contents to be accessed. The
&man.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 &man.mount.8; with
the appropriate parameters.A typical line in /etc/fstab
is:/dev/ad0sN /dos msdosfs rw 0 0/dos must already exist for this to
work. For details about the format of
/etc/fstab, see &man.fstab.5;.A typical call to &man.mount.8; for a FAT filesystem looks
like:&prompt.root; 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
&man.dmesg.8; and &man.mount.8; should produce enough
information to give an idea of the partition layout.&os; may number FAT partitions differently than other
operating systems. In particular, extended partitions are
usually given higher slice numbers than primary partitions.
Use &man.fdisk.8; to help determine which slices belong to
&os; and which belong to other operating systems.Troubleshooting Questions and AnswersMy system hangs while probing hardware during boot
or it behaves strangely during install.&os; 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
hint.acpi.0.disabled in the third
stage boot loader:set hint.acpi.0.disabled="1"This is reset each time the system is booted, so it
is necessary to add
hint.acpi.0.disabled="1" to
/boot/loader.conf to make this
change permanent. More information about the boot
loader can be found in .When booting from the hard disk for the first time
after installing &os;, the kernel loads and probes
hardware, but stops with messages like:changing root device to ad1s1a panic: cannot mount rootWhat 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 &os;, and working out which numbers correspond
to which is difficult to get right.If this occurs, tell &os; where the root filesystem
is by specifying the BIOS disk number, the disk type,
and the &os; disk number for that type.Consider two IDE disks, each configured as the
master on their respective IDE bus, where &os; should be
booted from the second disk. The BIOS sees these as
disk 0 and disk 1, while &os; sees them as
ad0 and
ad2.If &os; is on BIOS disk 1, of type
ad and the &os; disk number is 2,
this is the correct value: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 &os; 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
da, and &os; disk number 0, the
correct value is:2:da(0,a)kernelThis tells &os; to boot from BIOS disk 2, which is
the first SCSI disk in the system. If there is only IDE
disk, use 1: instead.Once the correct value to use is determined, put the
command in /boot.config using a
text editor. Unless instructed otherwise, &os; will use
the contents of this file as the default response to the
boot: prompt.When booting from the hard disk for the first time
after installing &os;, the Boot Manager prompt just
prints F? at the boot menu and the
boot will not go any further.The hard disk geometry was set incorrectly in the
partition editor when &os; was installed. Go back into
the partition editor and specify the actual geometry of
the hard disk. &os; must be reinstalled again from the
beginning with the correct geometry.For a dedicated &os; system that does not need
future compatibility with another operating system, use
the entire disk by selecting
A in the installer's
partition editor.The system finds the &man.ed.4; network card but
continuously displays device timeout errors.The card is probably on a different IRQ from what
is specified in
/boot/device.hints. The
&man.ed.4; driver does not use software configuration by
default, but it will if -1 is
specified in the hints for the interface.Either move the jumper on the card to the
configuration setting or specify the IRQ as
-1 by setting the hint
hint.ed.0.irq="-1". This tells the
kernel to use the software configuration.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.When &man.sysinstall.8; is usedin an
&xorg; terminal, the yellow
font is difficult to read against the light gray
background. Is there a way to provide higher
contrastcolorcontrast for this
application?If the default colors chosen by &man.sysinstall.8;
make text illegible while using
x11/xterm or
x11/rxvt, add the following to
~/.Xdefaults to get a darker
background gray: XTerm*color7:
#c0c0c0Advanced Installation GuideValentinoVaschettoContributed
by MarcFonvieilleUpdated
by This section describes how to install &os; in exceptional
cases.Installing &os; on a System Without a Monitor or
Keyboardinstallationheadless (serial console)serial consoleThis 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 , or download
the correct installation ISO image as described in .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&man.mount.8;By default, booting into the USB stick boots into the
installer. To instead boot into a serial console, mount
the USB disk onto a &os; system using
&man.mount.8;:&prompt.root; 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:&prompt.root; echo 'console="comconsole"' >> /mnt/boot/loader.confNow that the USB is stick configured correctly,
unmount the disk using &man.umount.8;:&prompt.root; 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&man.mount.8;By default, when booting into the installation CD/DVD,
&os; 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 &os; system with the saved installation ISO
image, use &man.tar.1; to extract all the files:&prompt.root; mkdir /path/to/headless-iso
&prompt.root; tar -C /path/to/headless-iso -pxvf &os;-&rel.current;-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:&prompt.root; echo 'console="comconsole"' >> /path/to/headless-iso/boot/loader.confThen, create a new ISO image from the modified tree.
This example uses &man.mkisofs.8; from the
sysutils/cdrtools package or
port:&prompt.root; mkisofs -v -b boot/cdboot -no-emul-boot -r -J -V "Headless_install" \
-o Headless-&os;-&rel2.current;-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 Cablenull-modem cableConnect 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 InstallIt 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&man.cu.1;Next, connect to that machine with &man.cu.1;:&prompt.root; cu -l /dev/cuau0The headless machine can now be controlled using
&man.cu.1;. It will load the kernel and then display a
selection of which type of terminal to use. Select the &os;
color console and proceed with the installation.Preparing Custom Installation MediaSome situations may require a customized &os; installation
media and/or source. This might be physical media or a source
that &man.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 &os; installation files which the
machines should use for installation.&os; does not recognize the CD/DVD drive but &windows;
does. In this case, copy the &os; installation files to a
&windows; partition on the same computer, and then install
&os; 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 used to install &os;.Creating an Installation ISOAs part of each release, the &os; 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 &os;. If a
CD/DVD writer is available, this is the easiest way to install
&os;.Download the Correct ISO ImagesThe ISO images for each release can be downloaded from
ftp://ftp.FreeBSD.org/pub/FreeBSD/ISO-IMAGES-arch/version
or the closest mirror. Substitute
arch and
version as appropriate.An image directory normally contains the following
images:
&os;
ISO Image Names and MeaningsFilenameContents&os;-version-RELEASE-arch-bootonly.isoThis CD image starts the installation process
by booting from a CD-ROM drive but it does not
contain the support for installing &os; from the
CD itself. Perform a network based install, such
as from an FTP server, after booting from this
CD.&os;-version-RELEASE-arch-dvd1.iso.gzThis DVD image contains everything necessary
to install the base &os; operating system, a
collection of pre-built packages, and the
documentation. It also supports booting into a
livefs based rescue mode.&os;-version-RELEASE-arch-memstick.imgThis image can be written to a 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.&os;-version-RELEASE-arch-disc1.isoThis image can be written to a USB memory
stick in order to install machines capable of
booting from USB drives. Similar to the
bootonly.iso image, it does
not contain the distribution sets on the medium
itself, but does support network-based
installations (for example, via ftp).&os;-version-RELEASE-arch-disc1.isoThis CD image contains the base &os;
operating system and the documentation package but
no other packages.&os;-version-RELEASE-arch-disc2.isoA CD image with as many third-party packages
as would fit on the disc. This image is not
available for
&os; 9.X.&os;-version-RELEASE-arch-disc3.isoAnother CD image with as many third-party
packages as would fit on the disc. This image is
not available for
&os; 9.X.&os;-version-RELEASE-arch-livefs.isoThis 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 .Use dvd1 to install &os; and a
selection of third-party packages from the disc.Burn the MediaNext, write the downloaded image(s) to disc. If using
another &os; system, refer to
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 &os;, refer to the
Release Engineering
Article.Creating a Local FTP Site with a &os; DiscinstallationnetworkFTP&os; 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 &os;.On the &os; computer that will host the FTP site,
ensure that the CD/DVD is in the drive and mounted:&prompt.root; mount /cdromCreate an account for anonymous FTP. Use &man.vipw.8;
to insert this line:ftp:*:99:99::0:0:FTP:/cdrom:/nonexistentEnsure 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://your
machine after picking
Other in the FTP sites menu during the
install.If the boot media for the FTP clients is not precisely
the same version as that provided by the local FTP site,
&man.sysinstall.8; will not complete the installation. To
override this, go into the Options menu
and change the distribution name to
any.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.Installing from an &windows; Partitioninstallationfrom &windows;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 &os;:C:\>md c:\freebsdC:\>robocopy e:\bin c:\freebsd\bin\ /sC:\>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
&rel2.current;/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.Before Installing over a Networkinstallationnetworkserial (PPP)installationnetworkparallel (PLIP)installationnetworkEthernetThere are three types of network installations
available: Ethernet, PPP, and PLIP.For the fastest possible network installation, use an
Ethernet adapter. &os; supports most common Ethernet cards.
A list of supported cards is provided in the Hardware Notes
for each release of &os;. If using a supported PCMCIA
Ethernet card, be sure that it is plugged in
before the system is powered on as &os;
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 &os;
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 and &url.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 &os; 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.Before Installing via NFSinstallationnetworkNFSTo perform an NFS installation, copy
the needed &os; 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 Options 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 &os; &rel.current; 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 &os;, this is controlled by using
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.
Index: head/en_US.ISO8859-1/books/handbook/jails/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/jails/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/jails/chapter.xml (revision 46052)
@@ -1,1624 +1,1625 @@
+ xml:id="jails">
+ JailsMatteoRiondatoContributed
by jailsSynopsisSince system administration is a difficult task, many tools
have been developed to make life easier for the administrator.
These tools often enhance the way systems are installed,
configured, and maintained. One of the tools which can be used
to enhance the security of a &os; system is
jails. Jails have been available since
&os; 4.X and continue to be enhanced in their usefulness,
performance, reliability, and security.Jails build upon the &man.chroot.2; concept, which is used
to change the root directory of a set of processes, creating a
safe environment, separate from the rest of the system.
Processes created in the chrooted environment can not access
files or resources outside of it. For that reason, compromising
a service running in a chrooted environment should not allow the
attacker to compromise the entire system. However, a chroot has
several limitations. It is suited to easy tasks which do not
require much flexibility or complex, advanced features. Over
time many ways have been found to escape from a chrooted
environment, making it a less than ideal solution for securing
services.Jails improve on the concept of the traditional chroot
environment in several ways. In a traditional chroot
environment, processes are only limited in the part of the file
system they can access. The rest of the system resources,
system users, running processes, and the networking subsystem
are shared by the chrooted processes and the processes of the
host system. Jails expand this model by virtualizing access to
the file system, the set of users, and the networking subsystem.
More fine-grained controls are available for tuning the access
of a jailed environment. Jails can be considered as a type of
operating system-level virtualization.A jail is characterized by four elements:A directory subtree: the starting point from which a
jail is entered. Once inside the jail, a process is not
permitted to escape outside of this subtree.A hostname: which will be used by the jail.An IP address: which is assigned to
the jail. The IP address of a jail is
often an alias address for an existing network
interface.A command: the path name of an executable to run inside
the jail. The path is relative to the root directory of the
jail environment.Jails have their own set of users and their own root account which are limited
to the jail environment. The root account of a jail is not
allowed to perform operations to the system outside of the
associated jail environment.This chapter provides an overview of jail terminology are
how to use &os; jails. Jails are a powerful tool for system
administrators, but their basic usage can also be useful for
advanced users.After reading this chapter, you will know:What a jail is and what purpose it may serve in &os;
installations.How to build, start, and stop a jail.The basics of jail administration, both from inside and
outside the jail.Jails are a powerful tool, but they are not a security
panacea. While it is not possible for a jailed process to
break out on its own, there are several ways in which an
unprivileged user outside the jail can cooperate with a
privileged user inside the jail to obtain elevated privileges
in the host environment.Most of these attacks can be mitigated by ensuring that
the jail root is not accessible to unprivileged users in the
host environment. As a general rule, untrusted users with
privileged access to a jail should not be given access to the
host environment.Terms Related to JailsTo facilitate better understanding of parts of the &os;
system related to jails, their internals and the way they
interact with the rest of &os;, the following terms are used
further in this chapter:&man.chroot.8; (command)Utility, which uses &man.chroot.2; &os; system call to
change the root directory of a process and all its
descendants.&man.chroot.2; (environment)The environment of processes running in a
chroot. This includes resources such as
the part of the file system which is visible, user and
group IDs which are available, network interfaces and
other IPC mechanisms, etc.&man.jail.8; (command)The system administration utility which allows
launching of processes within a jail environment.host (system, process, user, etc.)The controlling system of a jail environment. The
host system has access to all the hardware resources
available, and can control processes both outside of and
inside a jail environment. One of the important
differences of the host system from a jail is that the
limitations which apply to superuser processes inside a
jail are not enforced for processes of the host
system.hosted (system, process, user, etc.)A process, user or other entity, whose access to
resources is restricted by a &os; jail.Creating and Controlling JailsSome administrators divide jails into the following two
types: complete jails, which resemble a real &os;
system, and service jails, dedicated to one
application or service, possibly running with privileges. This
is only a conceptual division and the process of building a jail
is not affected by it. When creating a complete
jail there are two options for the source of the userland: use
prebuilt binaries (such as those supplied on an install media)
or build from source.To install the userland from installation media, first
create the root directory for the jail. This can be done by
setting the DESTDIR variable to the proper
location. The command to use depends on which shell is being
used.When using &man.sh.1;:&prompt.root; export DESTDIR=/here/is/the/jailIf csh/tcsh is used,
execute this instead:&prompt.root; setenv DESTDIR /here/is/the/jailMount the install media as covered in &man.mdconfig.8;
when using the install ISO:&prompt.root; mount -t cd9660 /dev/`mdconfig -f cdimage.iso` /mntExtract the binaries from the tarballs on the install media
into the declared destination. Minimally, only the base set
needs to be extracted, but a complete install can be performed
when preferred.To install just the base system, run the next command when
using &os; 9.x or newer:&prompt.root; tar -xf /mnt/freebsd_install/usr/freebsd_dist/base.txz -C $DESTDIROn &os; 8.x systems, use this command instead:&prompt.root; /mnt/8.4-RELEASE/base/install.shTo install everything but the kernel, issue this
command:When using &man.sh.1; on &os; 9.x and newer, issue this
command:&prompt.root; for sets in BASE DOC GAMES PORTS; do (tar -xf /mnt/FREEBSD_INSTALL/USR/FREEBSD_DIST/$sets.TXZ -C $DESTDIR) ; doneWhen using &os; 8.x, run this:&prompt.root; cd /mnt/8.4-RELEASE; for dir in base catpages dict doc games info manpages ports; do (cd $dir; ./install.sh) ; doneIf csh/tcsh is used on
&os; 9.x and newer, execute this command:&prompt.root; foreach sets ( BASE DOC GAMES PORTS )
tar -xf /mnt/FREEBSD_INSTALL/USR/FREEBSD_DIST/$sets.TXZ -C $DESTDIR
doneOn &os; 8.x, run this command:&prompt.root; foreach dir ( base catpages dict doc games info manpages ports )
cd /mnt/8.4-RELEASE/$dir; ./install.sh
doneThe &man.jail.8; manual page explains the procedure for
building a jail:&prompt.root; setenv D /here/is/the/jail
&prompt.root; mkdir -p $D
&prompt.root; cd /usr/src
&prompt.root; make buildworld
&prompt.root; make installworld DESTDIR=$D
&prompt.root; make distribution DESTDIR=$D
&prompt.root; mount -t devfs devfs $D/devSelecting a location for a jail is the best starting
point. This is where the jail will physically reside within
the file system of the jail's host. A good choice can be
/usr/jail/jailname,
where jailname is the hostname
identifying the jail. The
/usr/ file system
usually has enough space for the jail file system, which for
complete jails is, essentially, a replication
of every file present in a default installation of the &os;
base system.If you have already rebuilt your userland using
make world or
make buildworld, you can skip this step
and install your existing userland into the new jail.This command will populate the directory subtree chosen
as jail's physical location on the file system with the
necessary binaries, libraries, manual pages and so
on.The distribution target for
make installs every needed
configuration file. In simple words, it installs every
installable file of
/usr/src/etc/ to the
/etc directory of the
jail environment:
$D/etc/.Mounting the &man.devfs.8; file system inside a jail is
not required. On the other hand, any, or almost any
application requires access to at least one device,
depending on the purpose of the given application. It is
very important to control access to devices from inside a
jail, as improper settings could permit an attacker to do
nasty things in the jail. Control over &man.devfs.8; is
managed through rulesets which are described in the
&man.devfs.8; and &man.devfs.conf.5; manual pages.Once a jail is installed, it can be started by using the
&man.jail.8; utility. The &man.jail.8; utility takes four
mandatory arguments which are described in the . Other arguments may be specified
too, e.g., to run the jailed process with the credentials of a
specific user. The
argument
depends on the type of the jail; for a
virtual system,
/etc/rc is a good choice, since it will
replicate the startup sequence of a real &os; system. For a
service jail, it depends on the service or
application that will run within the jail.Jails are often started at boot time and the &os;
rc mechanism provides an easy way to do
this.A list of the jails which are enabled to start at boot
time should be added to the &man.rc.conf.5; file:jail_enable="YES" # Set to NO to disable starting of any jails
jail_list="www" # Space separated list of names of jailsJail names in jail_list should
contain alphanumeric characters only.For each jail listed in jail_list, a
group of &man.rc.conf.5; settings, which describe the
particular jail, should be added:jail_www_rootdir="/usr/jail/www" # jail's root directory
jail_www_hostname="www.example.org" # jail's hostname
jail_www_ip="192.168.0.10" # jail's IP address
jail_www_devfs_enable="YES" # mount devfs in the jailThe default startup of jails configured in
&man.rc.conf.5;, will run the /etc/rc
script of the jail, which assumes the jail is a complete
virtual system. For service jails, the default startup
command of the jail should be changed, by setting the
jail_jailname_exec_start
option appropriately.For a full list of available options, please see the
&man.rc.conf.5; manual page.&man.service.8; can be used to start or stop a jail by hand,
if an entry for it exists in
rc.conf:&prompt.root; service jail start www
&prompt.root; service jail stop wwwA clean way to shut down a &man.jail.8; is not available at
the moment. This is because commands normally used to
accomplish a clean system shutdown cannot be used inside a jail.
The best way to shut down a jail is to run the following command
from within the jail itself or using the &man.jexec.8; utility
from outside the jail:&prompt.root; sh /etc/rc.shutdownMore information about this can be found in the &man.jail.8;
manual page.Fine Tuning and AdministrationThere are several options which can be set for any jail, and
various ways of combining a host &os; system with jails, to
produce higher level applications. This section
presents:Some of the options available for tuning the behavior
and security restrictions implemented by a jail
installation.Some of the high-level applications for jail management,
which are available through the &os; Ports Collection, and
can be used to implement overall jail-based
solutions.System Tools for Jail Tuning in &os;Fine tuning of a jail's configuration is mostly done by
setting &man.sysctl.8; variables. A special subtree of sysctl
exists as a basis for organizing all the relevant options: the
security.jail.* hierarchy of &os; kernel
options. Here is a list of the main jail-related sysctls,
complete with their default value. Names should be
self-explanatory, but for more information about them, please
refer to the &man.jail.8; and &man.sysctl.8; manual
pages.security.jail.set_hostname_allowed:
1security.jail.socket_unixiproute_only:
1security.jail.sysvipc_allowed:
0security.jail.enforce_statfs:
2security.jail.allow_raw_sockets:
0security.jail.chflags_allowed:
0security.jail.jailed: 0These variables can be used by the system administrator of
the host system to add or remove some of
the limitations imposed by default on the root user. Note that there
are some limitations which cannot be removed. The
root user is not
allowed to mount or unmount file systems from within a
&man.jail.8;. The root inside a jail may not
load or unload &man.devfs.8; rulesets, set firewall rules, or
do many other administrative tasks which require modifications
of in-kernel data, such as setting the
securelevel of the kernel.The base system of &os; contains a basic set of tools for
viewing information about the active jails, and attaching to a
jail to run administrative commands. The &man.jls.8; and
&man.jexec.8; commands are part of the base &os; system, and
can be used to perform the following simple tasks:Print a list of active jails and their corresponding
jail identifier (JID),
IP address, hostname and path.Attach to a running jail, from its host system, and
run a command inside the jail or perform administrative
tasks inside the jail itself. This is especially useful
when the root
user wants to cleanly shut down a jail. The &man.jexec.8;
utility can also be used to start a shell in a jail to do
administration in it; for example:&prompt.root; jexec 1 tcshHigh-Level Administrative Tools in the &os; Ports
CollectionAmong the many third-party utilities for jail
administration, one of the most complete and useful is
sysutils/ezjail. It is a set of scripts
that contribute to &man.jail.8; management. Please refer to
the
handbook section on ezjail
for more information.Keeping Jails Patched and up to DateJails should be kept up to date from the host operating
system as attempting to patch userland from within the jail
may likely fail as the default behaviour in FreeBSD is to
disallow the use of &man.chflags.1; in a jail which prevents
the replacement of some files. It is possible to change this
behavior but it is recommended to use &man.freebsd-update.8;
to maintain jails instead. Use to specify
the path of the jail to be updated.&prompt.root; freebsd-update -b /here/is/the/jail fetch
&prompt.root; freebsd-update -b /here/is/the/jail installUpdating Multiple JailsDanielGerzoContributed by SimonL. B. NielsenBased upon an idea presented by KenTomAnd an article written by The management of multiple jails can become problematic
because every jail has to be rebuilt from scratch whenever it is
upgraded. This can be time consuming and tedious if a lot of
jails are created and manually updated.This section demonstrates one method to resolve this issue
by safely sharing as much as is possible between jails using
read-only &man.mount.nullfs.8; mounts, so that updating is
simpler. This makes it more attractive to put single services,
such as HTTP, DNS, and
SMTP, into individual jails. Additionally,
it provides a simple way to add, remove, and upgrade
jails.Simpler solutions exist, such as
ezjail, which provides an easier
method of administering &os; jails but is less versatile than
this setup. ezjail is covered in
more detail in .The goals of the setup described in this section are:Create a simple and easy to understand jail structure
that does not require running a full installworld on each
and every jail.Make it easy to add new jails or remove existing
ones.Make it easy to update or upgrade existing jails.Make it possible to run a customized &os; branch.Be paranoid about security, reducing as much as
possible the possibility of compromise.Save space and inodes, as much as possible.This design relies on a single, read-only master template
which is mounted into each jail and one read-write device per
jail. A device can be a separate physical disc, a partition, or
a vnode backed memory device. This example uses read-write
nullfs mounts.The file system layout is as follows:The jails are based under the
/home partition.Each jail will be mounted under the
/home/j directory.The template for each jail and the read-only partition
for all of the jails is
/home/j/mroot.A blank directory will be created for each jail under
the /home/j directory.Each jail will have a /s directory
that will be linked to the read-write portion of the
system.Each jail will have its own read-write system that is
based upon /home/j/skel.The read-write portion of each jail will be created in
/home/js.Creating the TemplateThis section describes the steps needed to create the
master template.It is recommended to first update the host &os; system to
the latest -RELEASE branch using the instructions in . Additionally, this template uses the
sysutils/cpdup package or port and
portsnap will be used to download
the &os; Ports Collection.First, create a directory structure for the read-only
file system which will contain the &os; binaries for the
jails. Then, change directory to the &os; source tree and
install the read-only file system to the jail
template:&prompt.root; mkdir /home/j /home/j/mroot
&prompt.root; cd /usr/src
&prompt.root; make installworld DESTDIR=/home/j/mrootNext, prepare a &os; Ports Collection for the jails as
well as a &os; source tree, which is required for
mergemaster:&prompt.root; cd /home/j/mroot
&prompt.root; mkdir usr/ports
&prompt.root; portsnap -p /home/j/mroot/usr/ports fetch extract
&prompt.root; cpdup /usr/src /home/j/mroot/usr/srcCreate a skeleton for the read-write portion of the
system:&prompt.root; mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles
&prompt.root; mv etc /home/j/skel
&prompt.root; mv usr/local /home/j/skel/usr-local
&prompt.root; mv tmp /home/j/skel
&prompt.root; mv var /home/j/skel
&prompt.root; mv root /home/j/skelUse mergemaster to install
missing configuration files. Then, remove the extra
directories that mergemaster
creates:&prompt.root; mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i
&prompt.root; cd /home/j/skel
&prompt.root; rm -R bin boot lib libexec mnt proc rescue sbin sys usr devNow, symlink the read-write file system to the
read-only file system. Ensure that the symlinks are
created in the correct s/ locations
as the creation of directories in the wrong locations will
cause the installation to fail.&prompt.root; cd /home/j/mroot
&prompt.root; mkdir s
&prompt.root; ln -s s/etc etc
&prompt.root; ln -s s/home home
&prompt.root; ln -s s/root root
&prompt.root; ln -s s/usr-local usr/local
&prompt.root; ln -s s/usr-X11R6 usr/X11R6
&prompt.root; ln -s s/distfiles usr/ports/distfiles
&prompt.root; ln -s s/tmp tmp
&prompt.root; ln -s s/var varAs a last step, create a generic
/home/j/skel/etc/make.conf containing
this line:WRKDIRPREFIX?= /s/portbuildThis makes it possible to compile &os; ports inside
each jail. Remember that the ports directory is part of
the read-only system. The custom path for
WRKDIRPREFIX allows builds to be done
in the read-write portion of every jail.Creating JailsThe jail template can now be used to setup and configure
the jails in /etc/rc.conf. This example
demonstrates the creation of 3 jails: NS,
MAIL and WWW.Add the following lines to
/etc/fstab, so that the read-only
template for the jails and the read-write space will be
available in the respective jails:/home/j/mroot /home/j/ns nullfs ro 0 0
/home/j/mroot /home/j/mail nullfs ro 0 0
/home/j/mroot /home/j/www nullfs ro 0 0
/home/js/ns /home/j/ns/s nullfs rw 0 0
/home/js/mail /home/j/mail/s nullfs rw 0 0
/home/js/www /home/j/www/s nullfs rw 0 0To prevent
fsck from checking
nullfs mounts during boot and
dump from backing up the
read-only nullfs mounts of the jails, the last two
columns are both set to 0.Configure the jails in
/etc/rc.conf:jail_enable="YES"
jail_set_hostname_allow="NO"
jail_list="ns mail www"
jail_ns_hostname="ns.example.org"
jail_ns_ip="192.168.3.17"
jail_ns_rootdir="/usr/home/j/ns"
jail_ns_devfs_enable="YES"
jail_mail_hostname="mail.example.org"
jail_mail_ip="192.168.3.18"
jail_mail_rootdir="/usr/home/j/mail"
jail_mail_devfs_enable="YES"
jail_www_hostname="www.example.org"
jail_www_ip="62.123.43.14"
jail_www_rootdir="/usr/home/j/www"
jail_www_devfs_enable="YES"The
jail_name_rootdir
variable is set to
/usr/home instead
of /home because
the physical path of /home on a default &os;
installation is /usr/home. The
jail_name_rootdir
variable must not be set to a path
which includes a symbolic link, otherwise the jails will
refuse to start.Create the required mount points for the read-only
file system of each jail:&prompt.root; mkdir /home/j/ns /home/j/mail /home/j/wwwInstall the read-write template into each jail using
sysutils/cpdup:&prompt.root; mkdir /home/js
&prompt.root; cpdup /home/j/skel /home/js/ns
&prompt.root; cpdup /home/j/skel /home/js/mail
&prompt.root; cpdup /home/j/skel /home/js/wwwIn this phase, the jails are built and prepared to
run. First, mount the required file systems for each
jail, and then start them:&prompt.root; mount -a
&prompt.root; service jail startThe jails should be running now. To check if they have
started correctly, use jls. Its output
should be similar to the following:&prompt.root; jls
JID IP Address Hostname Path
3 192.168.3.17 ns.example.org /home/j/ns
2 192.168.3.18 mail.example.org /home/j/mail
1 62.123.43.14 www.example.org /home/j/wwwAt this point, it should be possible to log onto each
jail, add new users, or configure daemons. The
JID column indicates the jail
identification number of each running jail. Use the following
command to perform administrative tasks in the jail whose
JID is 3:&prompt.root; jexec 3 tcshUpgradingThe design of this setup provides an easy way to upgrade
existing jails while minimizing their downtime. Also, it
provides a way to roll back to the older version should a
problem occur.The first step is to upgrade the host system. Then,
create a new temporary read-only template in
/home/j/mroot2.&prompt.root; mkdir /home/j/mroot2
&prompt.root; cd /usr/src
&prompt.root; make installworld DESTDIR=/home/j/mroot2
&prompt.root; cd /home/j/mroot2
&prompt.root; cpdup /usr/src usr/src
&prompt.root; mkdir sThe installworld creates a
few unnecessary directories, which should be
removed:&prompt.root; chflags -R 0 var
&prompt.root; rm -R etc var root usr/local tmpRecreate the read-write symlinks for the master file
system:&prompt.root; ln -s s/etc etc
&prompt.root; ln -s s/root root
&prompt.root; ln -s s/home home
&prompt.root; ln -s ../s/usr-local usr/local
&prompt.root; ln -s ../s/usr-X11R6 usr/X11R6
&prompt.root; ln -s s/tmp tmp
&prompt.root; ln -s s/var varNext, stop the jails:&prompt.root; service jail stopUnmount the original file systems as the read-write
systems are attached to the read-only system
(/s):&prompt.root; umount /home/j/ns/s
&prompt.root; umount /home/j/ns
&prompt.root; umount /home/j/mail/s
&prompt.root; umount /home/j/mail
&prompt.root; umount /home/j/www/s
&prompt.root; umount /home/j/wwwMove the old read-only file system and replace it with
the new one. This will serve as a backup and archive of
the old read-only file system should something go wrong.
The naming convention used here corresponds to when a new
read-only file system has been created. Move the original
&os; Ports Collection over to the new file system to save
some space and inodes:&prompt.root; cd /home/j
&prompt.root; mv mroot mroot.20060601
&prompt.root; mv mroot2 mroot
&prompt.root; mv mroot.20060601/usr/ports mroot/usrAt this point the new read-only template is ready, so
the only remaining task is to remount the file systems and
start the jails:&prompt.root; mount -a
&prompt.root; service jail startUse jls to check if the jails started
correctly. Run mergemaster in each jail to
update the configuration files.Managing Jails with
ezjailWarrenBlockOriginally contributed by Creating and managing multiple jails can quickly become
tedious and error-prone. Dirk Engling's
ezjail automates and greatly
simplifies many jail tasks. A basejail is
created as a template. Additional jails use
&man.mount.nullfs.8; to share many of the basejail directories
without using additional disk space. Each additional jail takes
only a few megabytes of disk space before applications are
installed. Upgrading the copy of the userland in the basejail
automatically upgrades all of the other jails.Additional benefits and features are described in detail on
the ezjail web site, .Installing ezjailInstalling ezjail consists of
adding a loopback interface for use in jails, installing the
port or package, and enabling the service.To keep jail loopback traffic off the host's loopback
network interface lo0, a second
loopback interface is created by adding an entry to
/etc/rc.conf:cloned_interfaces="${cloned_interfaces} lo1"The second loopback interface lo1
will be created when the system starts. It can also be
created manually without a restart:&prompt.root; service netif cloneup
Created clone interfaces: lo1.Jails can be allowed to use aliases of this secondary
loopback interface without interfering with the
host.Inside a jail, access to the loopback address
127.0.0.1 is
redirected to the first IP address
assigned to the jail. To make the jail loopback
correspond with the new lo1 interface,
that interface must be specified first in the list of
interfaces and IP addresses given when
creating a new jail.Give each jail a unique loopback address in the
127.0.0.0/8 netblock.Install
sysutils/ezjail:&prompt.root; cd /usr/ports/sysutils/ezjail
&prompt.root; make install cleanEnable ezjail by adding
this line to /etc/rc.conf:ezjail_enable="YES"The service will automatically start on system boot.
It can be started immediately for the current
session:&prompt.root; service ezjail startInitial SetupWith ezjail installed, the
basejail directory structure can be created and populated.
This step is only needed once on the jail host
computer.In both of these examples, causes the
ports tree to be retrieved with &man.portsnap.8; into the
basejail. That single copy of the ports directory will be
shared by all the jails. Using a separate copy of the ports
directory for jails isolates them from the host. The
ezjail FAQ
explains in more detail: .To Populate the Jail with &os;-RELEASEFor a basejail based on the &os; RELEASE matching
that of the host computer, use
install. For example, on a host
computer running &os; 10-STABLE, the latest
RELEASE version of &os; -10 will be installed in
the jail):&prompt.root; ezjail-admin install -pTo Populate the Jail with
installworldThe basejail can be installed from binaries
created by buildworld on
the host with
ezjail-admin update.In this example, &os; 10-STABLE has been
built from source. The jail directories are created.
Then installworld is
executed, installing the host's
/usr/obj into the
basejail.&prompt.root; ezjail-admin update -i -pThe host's /usr/src is used
by default. A different source directory on the host
can be specified with and a path,
or set with ezjail_sourcetree in
/usr/local/etc/ezjail.conf.The basejail's ports tree is shared by other jails.
However, downloaded distfiles are stored in the jail that
downloaded them. By default, these files are stored in
/var/ports/distfiles within each
jail. /var/ports inside each jail is
also used as a work directory when building ports.Creating and Starting a New JailNew jails are created with
ezjail-admin create. In these examples,
the lo1 loopback interface is used as
described above.Create and Start a New JailCreate the jail, specifying a name and the loopback
and network interfaces to use, along with their
IP addresses. In this example, the
jail is named dnsjail.&prompt.root; ezjail-admin create dnsjail 'lo1|127.0.1.1,em0|192.168.1.50'Most network services run in jails without
problems. A few network services, most notably
&man.ping.8;, use
raw network sockets. In jails, raw
network sockets are disabled by default for security.
Services that require them will not work.Occasionally, a jail genuinely needs raw sockets.
For example, network monitoring applications often use
&man.ping.8; to check the availability of other
computers. When raw network sockets are actually needed
in a jail, they can be enabled by editing the
ezjail
configuration file for the individual jail,
/usr/local/etc/ezjail/jailname.
Modify the parameters
entry:export jail_jailname_parameters="allow.raw_sockets=1"Do not enable raw network sockets unless services in
the jail actually require them.Start the jail:&prompt.root; ezjail-admin start dnsjailUse a console on the jail:&prompt.root; ezjail-admin console dnsjailThe jail is operating and additional configuration can be
completed. Typical settings added at this point
include:Set the
root
PasswordConnect to the jail and set the
root user's
password:&prompt.root; ezjail-admin console dnsjail
&prompt.root; passwd
Changing local password for root
New Password:
Retype New Password:Time Zone ConfigurationThe jail's time zone can be set with &man.tzsetup.8;.
To avoid spurious error messages, the &man.adjkerntz.8;
entry in /etc/crontab can be
commented or removed. This job attempts to update the
computer's hardware clock with time zone changes, but
jails are not allowed to access that hardware.DNS ServersEnter domain name server lines in
/etc/resolv.conf so
DNS works in the jail.Edit /etc/hostsChange the address and add the jail name to the
localhost entries in
/etc/hosts.Configure /etc/rc.confEnter configuration settings in
/etc/rc.conf. This is much like
configuring a full computer. The host name and
IP address are not set here. Those
values are already provided by the jail
configuration.With the jail configured, the applications for which the
jail was created can be installed.Some ports must be built with special options to be used
in a jail. For example, both of the network monitoring
plugin packages
net-mgmt/nagios-plugins and
net-mgmt/monitoring-plugins
have a JAIL option which must be enabled
for them to work correctly inside a jail.Updating JailsUpdating the Operating SystemBecause the basejail's copy of the userland is shared by
the other jails, updating the basejail automatically updates
all of the other jails. Either source or binary updates can
be used.To build the world from source on the host, then
install it in the basejail, use:&prompt.root; ezjail-admin update -bIf the world has already been compiled on the host,
install it in the basejail with:&prompt.root; ezjail-admin update -iBinary updates use &man.freebsd-update.8;. These
updates have the same limitations as if
&man.freebsd-update.8; were being run directly. The most
important one is that only -RELEASE versions of &os; are
available with this method. To update the basejail to the
latest patched release of the version of &os; on the host
computer, use:&prompt.root; ezjail-admin update -rAfter updating the basejail, &man.mergemaster.8; can be
run to update each jail's configuration files.How to use &man.mergemaster.8; depends on the purpose
and trustworthiness of a jail. If a jail's services or
users are not trusted, then &man.mergemaster.8; should only
be run from within that jail:&man.mergemaster.8; on Untrusted JailDelete the link from the jail's
/usr/src into the basejail and
create a new /usr/src in the jail
as a mountpoint. Mount the host computer's
/usr/src read-only on the jail's
new /usr/src mountpoint:&prompt.root; rm /usr/jails/jailname/usr/src
&prompt.root; mkdir /usr/jails/jailname/usr/src
&prompt.root; mount -t nullfs -o ro /usr/src /usr/jails/jailname/usr/srcGet a console in the jail:&prompt.root; ezjail-admin console jailnameInside the jail, run mergemaster.
Then exit the jail console:&prompt.root; cd /usr/src
&prompt.root; mergemaster -U
&prompt.root; exitFinally, unmount the jail's
/usr/src:&prompt.root; umount /usr/jails/jailname/usr/src&man.mergemaster.8; on Trusted JailIf the users and services in a jail are trusted,
&man.mergemaster.8; can be run from the host:&prompt.root; mergemaster -U -D /usr/jails/jailnameUpdating PortsThe ports tree in the basejail is shared by the other
jails. Updating that copy of the ports tree gives the other
jails the updated version also.The basejail ports tree is updated with
&man.portsnap.8;:&prompt.root; ezjail-admin update -PControlling JailsStopping and Starting Jailsezjail automatically starts
jails when the computer is started. Jails can be manually
stopped and restarted with stop and
start:&prompt.root; ezjail-admin stop sambajail
Stopping jails: sambajail.By default, jails are started automatically when the
host computer starts. Autostarting can be disabled
with config:&prompt.root; ezjail-admin config -r norun seldomjailThis takes effect the next time the host computer is
started. A jail that is already running will not be
stopped.Enabling autostart is very similar:&prompt.root; ezjail-admin config -r run oftenjailArchiving and Restoring JailsUse archive to create a
.tar.gz archive of a jail. The file
name is composed from the name of the jail and the current
date. Archive files are written to the archive directory,
/usr/jails/ezjail_archives. A
different archive directory can be chosen by setting
ezjail_archivedir in the configuration
file.The archive file can be copied elsewhere as a backup, or
an existing jail can be restored from it with
restore. A new jail can be created from
the archive, providing a convenient way to clone existing
jails.Stop and archive a jail named
wwwserver:&prompt.root; ezjail-admin stop wwwserver
Stopping jails: wwwserver.
&prompt.root; ezjail-admin archive wwwserver
&prompt.root; ls /usr/jails/ezjail-archives/
wwwserver-201407271153.13.tar.gzCreate a new jail named
wwwserver-clone from the archive created
in the previous step. Use the em1
interface and assign a new IP address to
avoid conflict with the original:&prompt.root; ezjail-admin create -a /usr/jails/ezjail_archives/wwwserver-201407271153.13.tar.gz wwwserver-clone 'lo1|127.0.3.1,em1|192.168.1.51'Full Example: BIND in a
JailPutting the BIND
DNS server in a jail improves security by
isolating it. This example creates a simple caching-only name
server.The jail will be called
dns1.The jail will use IP address
192.168.1.240 on the host's
re0 interface.The upstream ISP's DNS servers are
at 10.0.0.62 and
10.0.0.61.The basejail has already been created and a ports tree
installed.Running BIND in a JailCreate a cloned loopback interface by adding a line to
/etc/rc.conf:cloned_interfaces="${cloned_interfaces} lo1"Immediately create the new loopback interface:&prompt.root; service netif cloneup
Created clone interfaces: lo1.Create the jail:&prompt.root; ezjail-admin create dns1 'lo1|127.0.2.1,re0|192.168.1.240'Start the jail, connect to a console running on it, and
perform some basic configuration:&prompt.root; ezjail-admin start dns1
&prompt.root; ezjail-admin console dns1
&prompt.root; passwd
Changing local password for root
New Password:
Retype New Password:
&prompt.root; tzsetup
&prompt.root; sed -i .bak -e '/adjkerntz/ s/^/#/' /etc/crontab
&prompt.root; sed -i .bak -e 's/127.0.0.1/127.0.2.1/g; s/localhost.my.domain/dns1.my.domain dns1/' /etc/hostsTemporarily set the upstream DNS
servers in /etc/resolv.conf so ports
can be downloaded:nameserver 10.0.0.62
nameserver 10.0.0.61Still using the jail console, install
dns/bind99.&prompt.root; cd /usr/ports/dns/bind99
&prompt.root; make -C /usr/ports/dns/bind99 install cleanConfigure the name server by editing
/usr/local/etc/namedb/named.conf.Create an Access Control List (ACL)
of addresses and networks that are permitted to send
DNS queries to this name server. This
section is added just before the options
section already in the file:...
// or cause huge amounts of useless Internet traffic.
acl "trusted" {
192.168.1.0/24;
localhost;
localnets;
};
options {
...Use the jail IP address in the
listen-on setting to accept
DNS queries from other computers on the
network: listen-on { 192.168.1.240; };A simple caching-only DNS name server
is created by changing the forwarders
section. The original file contains:/*
forwarders {
127.0.0.1;
};
*/Uncomment the section by removing the
/* and */ lines.
Enter the IP addresses of the upstream
DNS servers. Immediately after the
forwarders section, add references to the
trusted ACL defined
earlier: forwarders {
10.0.0.62;
10.0.0.61;
};
allow-query { any; };
allow-recursion { trusted; };
allow-query-cache { trusted; };Enable the service in
/etc/rc.conf:named_enable="YES"Start and test the name server:&prompt.root; service named start
wrote key file "/usr/local/etc/namedb/rndc.key"
Starting named.
&prompt.root; /usr/local/bin/dig @192.168.1.240 freebsd.orgA response that includes;; Got answer;shows that the new DNS server is
working. A long delay followed by a response
including;; connection timed out; no servers could be reachedshows a problem. Check the configuration settings and
make sure any local firewalls allow the new
DNS access to the upstream
DNS servers.The new DNS server can use itself for
local name resolution, just like other local computers. Set
the address of the DNS server in the
client computer's
/etc/resolv.conf:nameserver 192.168.1.240A local DHCP server can be configured
to provide this address for a local DNS
server, providing automatic configuration on
DHCP clients.
Index: head/en_US.ISO8859-1/books/handbook/l10n/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/l10n/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/l10n/chapter.xml (revision 46052)
@@ -1,1040 +1,1041 @@
+ xml:id="l10n">
+ Localization -
i18n/L10n Usage and
SetupAndreyChernovContributed
by Michael
C.WuRewritten
by Synopsis&os; is a distributed project with users and contributors
located all over the world. As such, &os; supports localization
into many languages, allowing users to view, input, or process
data in non-English languages. One can choose from most of the
major languages, including, but not limited to: Chinese,
German, Japanese, Korean, French, Russian, and
Vietnamese.internationalizationlocalizationlocalizationThe term internationalization has been shortened to
i18n, which represents the number of letters
between the first and the last letters of
internationalization.
L10n uses the same naming scheme, but from
localization. The
i18n/L10n methods,
protocols, and applications allow users to use languages of
their choice.This chapter discusses the internationalization and
localization features of &os;. After reading this chapter, you
will know:How locale names are constructed.How to set the locale for a login shell.How to configure the console for non-English
languages.How to configure Xorg for
different languages.How to find i18n-compliant
applications.Where to find more information for configuring specific
languages.Before reading this chapter, you should:Know how to install
additional third-party
applications.Using LocalizationlocaleLocalization settings are based on three components:
the language code, country code, and encoding. Locale names are
constructed from these parts as follows:LanguageCode_CountryCode.Encodinglanguage codescountry codesThe LanguageCode and
CountryCode are used to determine
the country and the specific language variation. provides some examples of
LanguageCode_CountryCode:
Common Language and Country CodesLanguageCode_Country CodeDescriptionen_USEnglish, United Statesru_RURussian, Russiazh_TWTraditional Chinese, Taiwan
A complete listing of available locales can be found by
typing:&prompt.user; locale -a | moreTo determine the current locale setting:&prompt.user; localeencodingsASCIILanguage specific character sets, such as ISO8859-1,
ISO8859-15, KOI8-R, and CP437, are described in
&man.multibyte.3;. The active list of character sets can be
found at the IANA
Registry.Some languages, such as Chinese or Japanese, cannot be
represented using ASCII characters and
require an extended language encoding using either wide or
multibyte characters. Examples of wide or multibyte encodings
include EUC and Big5. Older applications may mistake these
encodings for control characters while newer applications
usually recognize these characters. Depending on the
implementation, users may be required to compile an
application with wide or multibyte character support, or to
configure it correctly.&os; uses Xorg-compatible locale encodings.The rest of this section describes the various methods for
configuring the locale on a &os; system. The next section
will discuss the considerations for finding and compiling
applications with i18n support.Setting Locale for Login ShellLocale settings are configured either in a user's
~/.login_conf
or in the startup file of the user's shell:
~/.profile,
~/.bashrc, or
~/.cshrc.Two environment
variables should be set:LANG, which sets the localePOSIXMIMEMM_CHARSET, which sets the
MIME character set used by
applicationsIn addition to the user's shell configuration, these
variables should also be set for specific application
configuration and Xorg
configuration.localelogin classTwo methods are available for making the needed variable
assignments: the login
class method, which is the recommended method, and
the startup file method.
The next two sections demonstrate how to use both
methods.Login Classes MethodThis first method is the recommended method as it
assigns the required environment variables for locale name
and MIME character sets for every
possible shell. This setup can either be performed by each
user or it can be configured for all users by the
superuser.This minimal example sets both variables for Latin-1
encoding in the .login_conf of an
individual user's home directory:me:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:Traditional ChineseBIG-5 encodingHere is an example of a user's
~/.login_conf that sets the variables
for Traditional Chinese in BIG-5 encoding. More variables
are needed because some applications do not correctly
respect locale variables for Chinese, Japanese, and
Korean:#Users who do not wish to use monetary units or time formats
#of Taiwan can manually change each variable
me:\
:lang=zh_TW.Big5:\
:setenv=LC_ALL=zh_TW.Big5:\
:setenv=LC_COLLATE=zh_TW.Big5:\
:setenv=LC_CTYPE=zh_TW.Big5:\
:setenv=LC_MESSAGES=zh_TW.Big5:\
:setenv=LC_MONETARY=zh_TW.Big5:\
:setenv=LC_NUMERIC=zh_TW.Big5:\
:setenv=LC_TIME=zh_TW.Big5:\
:charset=big5:\
:xmodifiers="@im=gcin": #Set gcin as the XIM Input ServerAlternately, the superuser can configure all users of
the system for localization. The following variables in
/etc/login.conf are used to set the
locale and MIME character set:language_name|Account Type Description:\
:charset=MIME_charset:\
:lang=locale_name:\
:tc=default:So, the previous Latin-1 example would look like
this:german|German Users Accounts:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:\
:tc=default:See &man.login.conf.5; for more details about these
variables.Whenever /etc/login.conf is edited,
remember to execute the following command to update the
capability database:&prompt.root; cap_mkdb /etc/login.confUtilities Which Change Login ClassesvipwIn addition to manually editing
/etc/login.conf, several utilities
are available for setting the locale for newly created
users.When using vipw to add new users,
specify the language to set the
locale:user:password:1111:11:language:0:0:User Name:/home/user:/bin/shadduserlogin classWhen using adduser to add new
users, the default language can be pre-configured for all
new users or specified for an individual user.If all new users use the same language, set
defaultclass =
language in
/etc/adduser.conf.To override this setting when creating a user, either
input the required locale at this prompt:Enter login class: default []:or specify the locale to set when invoking
adduser:&prompt.root; adduser -class languagepwIf pw is used to add new users,
specify the locale as follows:&prompt.root; pw useradd user_name -L languageShell Startup File MethodThis second method is not recommended as each shell
that is used requires manual configuration, where each
shell has a different configuration file and differing
syntax. As an example, to set the German language for the
sh shell, these lines could be added to
~/.profile to set the shell for that
user only. These lines could also be added to
/etc/profile or
/usr/share/skel/dot.profile to set
that shell for all users:LANG=de_DE.ISO8859-1; export LANGMM_CHARSET=ISO-8859-1; export MM_CHARSETHowever, the name of the configuration file and the
syntax used differs for the csh shell.
These are the equivalent settings for
~/.csh.login,
/etc/csh.login, or
/usr/share/skel/dot.login:setenv LANG de_DE.ISO8859-1setenv MM_CHARSET ISO-8859-1To complicate matters, the syntax needed to configure
Xorg in
~/.xinitrc also depends upon the
shell. The first example is for the sh
shell and the second is for the csh
shell:LANG=de_DE.ISO8859-1; export LANGsetenv LANG de_DE.ISO8859-1Console SetupSeveral localized fonts are available for the console. To
see a listing of available fonts, type
ls /usr/share/syscons/fonts. To configure
the console font, specify the
font_name,
without the .fnt suffix, in
/etc/rc.conf:font8x16=font_name
font8x14=font_name
font8x8=font_namekeymapscreenmapThe keymap and screenmap can be set by adding the
following to /etc/rc.conf:scrnmap=screenmap_name
keymap=keymap_name
keychange="fkey_number sequence"To see the list of available screenmaps, type
ls /usr/share/syscons/scrnmaps. Do not
include the .scm suffix when specifying
screenmap_name. A screenmap with a
corresponding mapped font is usually needed as a workaround
for expanding bit 8 to bit 9 on a VGA adapter's font character
matrix so that letters are moved out of the pseudographics
area if the screen font uses a bit 8 column.To see the list of available keymaps, type
ls /usr/share/syscons/keymaps. When
specifying the keymap_name, do not
include the .kbd suffix. To test
keymaps without rebooting,
use &man.kbdmap.1;.The keychange entry is usually needed
to program function keys to match the selected terminal type
because function key sequences cannot be defined in the
keymap.Next, set the correct console terminal type in
/etc/ttys for all virtual terminal
entries. summarizes the
available terminal types.:
Defined Terminal Types for Character SetsCharacter SetTerminal TypeISO8859-1 or ISO8859-15cons25l1ISO8859-2cons25l2ISO8859-7cons25l7KOI8-Rcons25rKOI8-Ucons25uCP437 (VGA default)cons25US-ASCIIcons25w
mousedFor languages with wide or multibyte characters, install a
console for that language from the &os; Ports Collection. The
available ports are summarized in . Once installed, refer to the
port's pkg-message or man pages for
configuration and usage instructions.
Available Console From Ports CollectionLanguagePort LocationTraditional Chinese (BIG-5)chinese/big5conChinese/Japanese/Koreanchinese/cceChinese/Japanese/Koreanchinese/zhconJapanesechinese/kon2Japanesejapanese/kon2-14dotJapanesejapanese/kon2-16dot
If moused is enabled in
/etc/rc.conf, additional configuration
may be required. By default, the mouse cursor of the
&man.syscons.4; driver occupies the
0xd0-0xd3 range in the
character set. If the language uses this range, move the
cursor's range by adding the
following line to /etc/rc.conf:mousechar_start=3Xorg Setup describes how to install and
configure Xorg. When configuring
Xorg for localization, additional
fonts and input methods are available from the &os; Ports
Collection. Application specific i18n
settings such as fonts and menus can be tuned in
~/.Xresources and should allow users to
view their selected language in graphical application
menus.X Input Method (XIM)The X Input Method (XIM) protocol is an
Xorg standard for inputting
non-English characters.
summarizes the input method applications which are available
in the &os; Ports Collection. Additional Fcitx and Uim
applications are also available.
Available Input MethodsLanguageInput MethodChinesechinese/gcinChinesechinese/ibus-chewingChinesechinese/ibus-pinyinChinesechinese/oximChinesechinese/scim-fcitxChinesechinese/scim-pinyinChinesechinese/scim-tablesJapanesejapanese/ibus-anthyJapanesejapanese/ibus-mozcJapanesejapanese/ibus-skkJapanesejapanese/im-jaJapanesejapanese/kinput2Japanesejapanese/scim-anthyJapanesejapanese/scim-cannaJapanesejapanese/scim-honokaJapanesejapanese/scim-honoka-plugin-romkanJapanesejapanese/scim-honoka-plugin-wnnJapanesejapanese/scim-primeJapanesejapanese/scim-skkJapanesejapanese/scim-tablesJapanesejapanese/scim-tomoeJapanesejapanese/scim-uimJapanesejapanese/skkinputJapanesejapanese/skkinput3Japanesejapanese/uim-anthyKoreankorean/ibus-hangulKoreankorean/imhangulKoreankorean/nabiKoreankorean/scim-hangulKoreankorean/scim-tablesVietnamesevietnamese/xvnkbVietnamesevietnamese/x-unikey
Finding i18n Applicationsi18n applications are programmed using
i18n kits under libraries. These allow
developers to write a simple file and translate displayed menus
and texts to each language.The &os;
Ports Collection contains many applications with
built-in support for wide or multibyte characters for several
languages. Such applications include i18n in
their names for easy identification. However, they do not
always support the language needed.Some applications can be compiled with the specific
charset. This is usually done in the port's
Makefile or by passing a value to
configure. Refer to the
i18n documentation in the respective &os;
port's source for more information on how to determine the
needed configure value or the port's
Makefile to determine which compile options
to use when building the port.Locale Configuration for Specific LanguagesThis section provides configuration examples for localizing
a &os; system for the Russian language. It then provides some
additional resources for localizing other languages.Russian Language (KOI8-R Encoding)AndreyChernovOriginally
contributed by localizationRussianThis section shows the specific settings needed to
localize a &os; system for the Russian language. Refer to
Using Localization
for a more complete description of each type of
setting.To set this locale for the login shell, add the following
lines to each user's
~/.login_conf:me:My Account:\
:charset=KOI8-R:\
:lang=ru_RU.KOI8-R:To configure the console, add the following lines to
/etc/rc.conf:keymap="ru.koi8-r"
scrnmap="koi8-r2cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"
mousechar_start=3For each ttyv entry in
/etc/ttys, use
cons25r as the terminal type.printersTo configure printing, a special output filter is needed
to convert from KOI8-R to CP866 since most printers with
Russian characters come with hardware code page CP866. &os;
includes a default filter for this purpose,
/usr/libexec/lpr/ru/koi2alt. To use this
filter, add this entry to
/etc/printcap:lp|Russian local line printer:\
:sh:of=/usr/libexec/lpr/ru/koi2alt:\
:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:Refer to &man.printcap.5; for a more detailed
explanation.To configure support for Russian filenames in mounted
&ms-dos; file systems, include and the
locale name when adding an entry to
/etc/fstab:/dev/ad0s2 /dos/c msdos rw,-Lru_RU.KOI8-R 0 0Refer to &man.mount.msdosfs.8; for more details.To configure Russian fonts for
&xorg;, install the
x11-fonts/xorg-fonts-cyrillic package.
Then, check the "Files" section in
/etc/X11/xorg.conf. The following line
must be added before any other
FontPath entries:FontPath "/usr/local/lib/X11/fonts/cyrillic"Additional Cyrillic fonts are available in the Ports
Collection.To activate a Russian keyboard, add the following to the
"Keyboard" section of
/etc/xorg.conf:Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:toggle"Make sure that XkbDisable is
commented out in that file.For grp:toggle use
Right Alt, for
grp:ctrl_shift_toggle use CtrlShift.
For grp:caps_toggle use
CapsLock. The old
CapsLock function is still available in LAT
mode only using ShiftCapsLock.
grp:caps_toggle does not work in
&xorg; for some unknown
reason.If the keyboard has &windows; keys, and
some non-alphabetical keys are mapped incorrectly, add the
following line to /etc/xorg.conf:Option "XkbVariant" ",winkeys"The Russian XKB keyboard may not work with
non-localized applications. Minimally localized
applications should call a XtSetLanguageProc
(NULL, NULL, NULL); function early in the
program.See http://koi8.pp.ru/xwin.html
for more instructions on localizing
Xorg applications. For more
general information about KOI8-R encoding, refer to http://koi8.pp.ru/.Additional Language-Specific ResourcesThis section lists some additional resources for
configuring other locales.localizationTraditional ChineselocalizationGermanlocalizationGreeklocalizationJapaneselocalizationKoreanTraditional Chinese for TaiwanThe &os;-Taiwan Project has a Chinese HOWTO for &os;
at http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/.German Language Localization for All ISO 8859-1
LanguagesA
tutorial on using umlauts on &os; is
available in German at http://user.cs.tu-berlin.de/~eserte/FreeBSD/doc/umlaute/umlaute.html.Greek Language LocalizationA complete article on Greek support in &os;
is available here,
in Greek only, as part of the official &os; Greek
documentation.Japanese and Korean Language LocalizationFor Japanese, refer to http://www.jp.FreeBSD.org/,
and for Korean, refer to http://www.kr.FreeBSD.org/.Non-English &os; DocumentationSome &os; contributors have translated parts of the
&os; documentation to other languages. They are
available through links on the &os; web
site or in
/usr/share/doc.
Index: head/en_US.ISO8859-1/books/handbook/mac/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/mac/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/mac/chapter.xml (revision 46052)
@@ -1,1775 +1,1776 @@
+ xml:id="mac">
+ Mandatory Access ControlTomRhodesWritten
by SynopsisMACMandatory Access ControlMAC&os; supports security extensions based on the
&posix;.1e draft. These security mechanisms include file system
Access Control Lists () and Mandatory
Access Control (MAC). MAC
allows access control modules to be loaded in order to implement
security policies. Some modules provide protections for a
narrow subset of the system, hardening a particular service.
Others provide comprehensive labeled security across all
subjects and objects. The mandatory part of the definition
indicates that enforcement of controls is performed by
administrators and the operating system. This is in contrast to
the default security mechanism of Discretionary Access Control
(DAC) where enforcement is left to the
discretion of users.This chapter focuses on the MAC framework
and the set of pluggable security policy modules &os; provides
for enabling various security mechanisms.After reading this chapter, you will know:The terminology associated with the
MAC framework.The capabilities of MAC security
policy modules as well as the difference between a labeled
and non-labeled policy.The considerations to take into account before
configuring a system to use the
MAC framework.Which MAC security policy modules
are included in &os; and how to configure them.How to implement a more secure environment using the
MAC framework.How to test the MAC configuration
to ensure the framework has been properly
implemented.Before reading this chapter, you should:Understand &unix; and &os; basics ().Have some familiarity with security and how it pertains
to &os; ().Improper MAC configuration may cause
loss of system access, aggravation of users, or inability to
access the features provided by
Xorg. More importantly,
MAC should not be relied upon to completely
secure a system. The MAC framework only
augments an existing security policy. Without sound security
practices and regular security checks, the system will never
be completely secure.The examples contained within this chapter are for
demonstration purposes and the example settings should
not be implemented on a production
system. Implementing any security policy takes a good deal of
understanding, proper design, and thorough testing.While this chapter covers a broad range of security issues
relating to the MAC framework, the
development of new MAC security policy
modules will not be covered. A number of security policy
modules included with the MAC framework have
specific characteristics which are provided for both testing and
new module development. Refer to &man.mac.test.4;,
&man.mac.stub.4; and &man.mac.none.4; for more information on
these security policy modules and the various mechanisms they
provide.Key TermsThe following key terms are used when referring to the
MAC framework:compartment: a set of programs and
data to be partitioned or separated, where users are given
explicit access to specific component of a system. A
compartment represents a grouping, such as a work group,
department, project, or topic. Compartments make it
possible to implement a need-to-know-basis security
policy.integrity: the level of trust which
can be placed on data. As the integrity of the data is
elevated, so does the ability to trust that data.level: the increased or decreased
setting of a security attribute. As the level increases,
its security is considered to elevate as well.label: a security attribute which
can be applied to files, directories, or other items in the
system. It could be considered a confidentiality stamp.
When a label is placed on a file, it describes the security
properties of that file and will only permit access by
files, users, and resources with a similar security setting.
The meaning and interpretation of label values depends on
the policy configuration. Some policies treat a label as
representing the integrity or secrecy of an object while
other policies might use labels to hold rules for
access.multilabel: this property is a file
system option which can be set in single-user mode using
&man.tunefs.8;, during boot using &man.fstab.5;, or during
the creation of a new file system. This option permits
an administrator to apply different MAC
labels on different objects. This option only applies to
security policy modules which support labeling.single label: a policy where the
entire file system uses one label to enforce access control
over the flow of data. Whenever
is not set, all files will conform to the same label
setting.object: an entity through which
information flows under the direction of a
subject. This includes directories,
files, fields, screens, keyboards, memory, magnetic storage,
printers or any other data storage or moving device. An
object is a data container or a system resource. Access to
an object effectively means access to its data.subject: any active entity that
causes information to flow between
objects such as a user, user process,
or system process. On &os;, this is almost always a
thread acting in a process on behalf of a user.policy: a collection of rules
which defines how objectives are to be achieved. A policy
usually documents how certain items are to be handled. This
chapter considers a policy to be a collection of rules which
controls the flow of data and information and defines who
has access to that data and information.high-watermark: this type of
policy permits the raising of security levels for the
purpose of accessing higher level information. In most
cases, the original level is restored after the process is
complete. Currently, the &os; MAC
framework does not include this type of policy.low-watermark: this type of policy
permits lowering security levels for the purpose of
accessing information which is less secure. In most cases,
the original security level of the user is restored after
the process is complete. The only security policy module in
&os; to use this is &man.mac.lomac.4;.sensitivity: usually used when
discussing Multilevel Security (MLS). A
sensitivity level describes how important or secret the data
should be. As the sensitivity level increases, so does the
importance of the secrecy, or confidentiality, of the
data.Understanding MAC LabelsA MAC label is a security attribute
which may be applied to subjects and objects throughout the
system. When setting a label, the administrator must
understand its implications in order to prevent unexpected or
undesired behavior of the system. The attributes available on
an object depend on the loaded policy module, as policy modules
interpret their attributes in different ways.The security label on an object is used as a part of a
security access control decision by a policy. With some
policies, the label contains all of the information necessary
to make a decision. In other policies, the labels may be
processed as part of a larger rule set.There are two types of label policies: single label and
multi label. By default, the system will use single label. The
administrator should be aware of the pros and cons of each in
order to implement policies which meet the requirements of the
system's security model.A single label security policy only permits one label to be
used for every subject or object. Since a single label policy
enforces one set of access permissions across the entire system,
it provides lower administration overhead, but decreases the
flexibility of policies which support labeling. However, in
many environments, a single label policy may be all that is
required.A single label policy is somewhat similar to
DAC as root configures the policies so
that users are placed in the appropriate categories and access
levels. A notable difference is that many policy modules can
also restrict root.
Basic control over objects will then be released to the group,
but root may revoke or
modify the settings at any time.When appropriate, a multi label policy can be set on a
UFS file system by passing
to &man.tunefs.8;. A multi label
policy permits each subject or object to have its own
independent MAC label. The decision to use a
multi label or single label policy is only required for policies
which implement the labeling feature, such as
biba, lomac, and
mls. Some policies, such as
seeotheruids, portacl and
partition, do not use labels at all.Using a multi label policy on a partition and establishing a
multi label security model can increase administrative overhead
as everything in that file system has a label. This includes
directories, files, and even device nodes.The following command will set
on the specified UFS file system. This may
only be done in single-user mode and is not a requirement for
the swap file system:&prompt.root; tunefs -l enable /Some users have experienced problems with setting the
flag on the root partition. If
this is the case, please review .Since the multi label policy is set on a per-file system
basis, a multi label policy may not be needed if the file system
layout is well designed. Consider an example security
MAC model for a &os; web server. This
machine uses the single label, biba/high, for
everything in the default file systems. If the web server needs
to run at biba/low to prevent write up
capabilities, it could be installed to a separate
UFS /usr/local file
system set at biba/low.Label ConfigurationVirtually all aspects of label policy module configuration
will be performed using the base system utilities. These
commands provide a simple interface for object or subject
configuration or the manipulation and verification of
the configuration.All configuration may be done using
setfmac, which is used to set
MAC labels on system objects, and
setpmac, which is used to set the labels on
system subjects. For example, to set the
biba MAC label to
high on test:&prompt.root; setfmac biba/high testIf the configuration is successful, the prompt will be
returned without error. A common error is
Permission denied which usually occurs
when the label is being set or modified on a restricted
object. Other conditions may produce different failures. For
instance, the file may not be owned by the user attempting to
relabel the object, the object may not exist, or the object
may be read-only. A mandatory policy will not allow the
process to relabel the file, maybe because of a property of
the file, a property of the process, or a property of the
proposed new label value. For example, if a user running at
low integrity tries to change the label of a high integrity
file, or a user running at low integrity tries to change the
label of a low integrity file to a high integrity label, these
operations will fail.The system administrator may use
setpmac to override the policy module's
settings by assigning a different label to the invoked
process:&prompt.root; setfmac biba/high testPermission denied
&prompt.root; setpmac biba/low setfmac biba/high test
&prompt.root; getfmac test
test: biba/highFor currently running processes, such as
sendmail,
getpmac is usually used instead. This
command takes a process ID (PID) in place
of a command name. If users attempt to manipulate a file not
in their access, subject to the rules of the loaded policy
modules, the Operation not permitted
error will be displayed.Predefined LabelsA few &os; policy modules which support the labeling
feature offer three predefined labels: low,
equal, and high,
where:low is considered the lowest label
setting an object or subject may have. Setting this on
objects or subjects blocks their access to objects or
subjects marked high.equal sets the subject or object to
be disabled or unaffected and should only be placed on
objects considered to be exempt from the policy.high grants an object or subject
the highest setting available in the Biba and
MLS policy modules.Such policy modules include &man.mac.biba.4;,
&man.mac.mls.4; and &man.mac.lomac.4;. Each of the predefined
labels establishes a different information flow directive.
Refer to the manual page of the module to determine the traits
of the generic label configurations.Numeric LabelsThe Biba and MLS policy modules support
a numeric label which may be set to indicate the precise level
of hierarchical control. This numeric level is used to
partition or sort information into different groups of
classification, only permitting access to that group or a
higher group level. For example:biba/10:2+3+6(5:2+3-20:2+3+4+5+6)may be interpreted as Biba Policy Label/Grade
10:Compartments 2, 3 and 6: (grade 5 ...)In this example, the first grade would be considered the
effective grade with effective compartments, the second grade
is the low grade, and the last one is the high grade. In most
configurations, such fine-grained settings are not needed as
they are considered to be advanced configurations.System objects only have a current grade and compartment.
System subjects reflect the range of available rights in the
system, and network interfaces, where they are used for access
control.The grade and compartments in a subject and object pair
are used to construct a relationship known as
dominance, in which a subject dominates
an object, the object dominates the subject, neither dominates
the other, or both dominate each other. The both
dominate case occurs when the two labels are equal.
Due to the information flow nature of Biba, a user has rights
to a set of compartments that might correspond to projects,
but objects also have a set of compartments. Users may have
to subset their rights using su or
setpmac in order to access objects in a
compartment from which they are not restricted.User LabelsUsers are required to have labels so that their files and
processes properly interact with the security policy defined
on the system. This is configured in
/etc/login.conf using login classes.
Every policy module that uses labels will implement the user
class setting.To set the user class default label which will be enforced
by MAC, add a entry.
An example entry containing every
policy module is displayed below. Note that in a real
configuration, the administrator would never enable every
policy module. It is recommended that the rest of this
chapter be reviewed before any configuration is
implemented.default:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:\
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=partition/13,mls/5,biba/10(5-15),lomac/10[2]:While users can not modify the default value, they may
change their label after they login, subject to the
constraints of the policy. The example above tells the Biba
policy that a process's minimum integrity is
5, its maximum is 15,
and the default effective label is 10. The
process will run at 10 until it chooses to
change label, perhaps due to the user using
setpmac, which will be constrained by Biba
to the configured range.After any change to login.conf, the
login class capability database must be rebuilt using
cap_mkdb.Many sites have a large number of users requiring
several different user classes. In depth planning is
required as this can become difficult to manage.Network Interface LabelsLabels may be set on network interfaces to help control
the flow of data across the network. Policies using network
interface labels function in the same way that policies
function with respect to objects. Users at high settings in
Biba, for example, will not be permitted to access network
interfaces with a label of low.When setting the MAC label on network
interfaces, may be passed to
ifconfig:&prompt.root; ifconfig bge0 maclabel biba/equalThis example will set the MAC label of
biba/equal on the bge0
interface. When using a setting similar to
biba/high(low-high), the entire label
should be quoted to prevent an error from being
returned.Each policy module which supports labeling has a tunable
which may be used to disable the MAC label
on network interfaces. Setting the label to
will have a similar effect. Review
the output of sysctl, the policy manual
pages, and the information in the rest of this chapter for
more information on those tunables.Planning the Security ConfigurationBefore implementing any MAC policies, a
planning phase is recommended. During the planning stages, an
administrator should consider the implementation requirements
and goals, such as:How to classify information and resources available on
the target systems.Which information or resources to restrict access to
along with the type of restrictions that should be
applied.Which MAC modules will be required to
achieve this goal.A trial run of the trusted system and its configuration
should occur before a
MAC implementation is used on production
systems. Since different environments have different needs and
requirements, establishing a complete security profile will
decrease the need of changes once the system goes live.Consider how the MAC framework augments
the security of the system as a whole. The various security
policy modules provided by the MAC framework
could be used to protect the network and file systems or to
block users from accessing certain ports and sockets. Perhaps
the best use of the policy modules is to load several security
policy modules at a time in order to provide a
MLS environment. This approach differs from
a hardening policy, which typically hardens elements of a system
which are used only for specific purposes. The downside to
MLS is increased administrative
overhead.The overhead is minimal when compared to the lasting effect
of a framework which provides the ability to pick and choose
which policies are required for a specific configuration and
which keeps performance overhead down. The reduction of support
for unneeded policies can increase the overall performance of
the system as well as offer flexibility of choice. A good
implementation would consider the overall security requirements
and effectively implement the various security policy modules
offered by the framework.A system utilizing MAC guarantees that a
user will not be permitted to change security attributes at
will. All user utilities, programs, and scripts must work
within the constraints of the access rules provided by the
selected security policy modules and control of the
MAC access rules is in the hands of the
system administrator.It is the duty of the system administrator to carefully
select the correct security policy modules. For an environment
that needs to limit access control over the network, the
&man.mac.portacl.4;, &man.mac.ifoff.4;, and &man.mac.biba.4;
policy modules make good starting points. For an environment
where strict confidentiality of file system objects is required,
consider the &man.mac.bsdextended.4; and &man.mac.mls.4; policy
modules.Policy decisions could be made based on network
configuration. If only certain users should be permitted
access to &man.ssh.1;, the &man.mac.portacl.4; policy module is
a good choice. In the case of file systems, access to objects
might be considered confidential to some users, but not to
others. As an example, a large development team might be
broken off into smaller projects where developers in project A
might not be permitted to access objects written by developers
in project B. Yet both projects might need to access objects
created by developers in project C. Using the different
security policy modules provided by the MAC
framework, users could be divided into these groups and then
given access to the appropriate objects.Each security policy module has a unique way of dealing with
the overall security of a system. Module selection should be
based on a well thought out security policy which may require
revision and reimplementation. Understanding the different
security policy modules offered by the MAC
framework will help administrators choose the best policies
for their situations. The rest of this chapter covers the available modules,
describes their use and configuration, and in some cases,
provides insight on applicable situations.Implementing MAC is much like
implementing a firewall since care must be taken to prevent
being completely locked out of the system. The ability to
revert back to a previous configuration should be considered
and the implementation of MAC over a remote
connection should be done with extreme caution.Available MAC PoliciesBeginning with &os; 8.0, the default &os; kernel
includes options MAC. This means that every
module included with the MAC framework can be
loaded with kldload as a run-time kernel
module. After testing the module, add the module name to
/boot/loader.conf so that it will load
during boot. Each module also provides a kernel option for
those administrators who choose to compile their own custom
kernel.&os; includes a group of policies that will cover most
security requirements. Each policy is summarized below. The
last three policies support integer settings in place of the
three default labels.The MAC See Other UIDs PolicyMAC See Other UIDs PolicyModule name:
mac_seeotheruids.koKernel configuration line:
options MAC_SEEOTHERUIDSBoot option:
mac_seeotheruids_load="YES"The &man.mac.seeotheruids.4; module extends the
security.bsd.see_other_uids and
security.bsd.see_other_gidssysctl tunables. This option does not
require any labels to be set before configuration and can
operate transparently with other modules.After loading the module, the following
sysctl tunables may be used to control its
features:security.mac.seeotheruids.enabled
enables the module and implements the default settings
which deny users the ability to view processes and sockets
owned by other users.security.mac.seeotheruids.specificgid_enabled
allows specified groups to be exempt from this policy. To
exempt specific groups, use the
security.mac.seeotheruids.specificgid=XXXsysctl tunable, replacing
XXX with the numeric group ID
to be exempted.security.mac.seeotheruids.primarygroup_enabled
is used to exempt specific primary groups from this
policy. When using this tunable,
security.mac.seeotheruids.specificgid_enabled
may not be set.The MAC BSD Extended PolicyMACFile System Firewall PolicyModule name:
mac_bsdextended.koKernel configuration line:
options MAC_BSDEXTENDEDBoot option:
mac_bsdextended_load="YES"The &man.mac.bsdextended.4; module enforces a file system
firewall. It provides an extension to the standard file
system permissions model, permitting an administrator to
create a firewall-like ruleset to protect files, utilities,
and directories in the file system hierarchy. When access to
a file system object is attempted, the list of rules is
iterated until either a matching rule is located or the end is
reached. This behavior may be changed using
security.mac.bsdextended.firstmatch_enabled.
Similar to other firewall modules in &os;, a file containing
the access control rules can be created and read by the system
at boot time using an &man.rc.conf.5; variable.The rule list may be entered using &man.ugidfw.8; which
has a syntax similar to &man.ipfw.8;. More tools can be
written by using the functions in the &man.libugidfw.3;
library.After the &man.mac.bsdextended.4; module has been loaded,
the following command may be used to list the current rule
configuration:&prompt.root; ugidfw list
0 slots, 0 rulesBy default, no rules are defined and everything is
completely accessible. To create a rule which blocks all
access by users but leaves root unaffected:&prompt.root; ugidfw add subject not uid root new object not uid root mode nWhile this rule is simple to implement, it is a very bad
idea as it blocks all users from issuing any commands. A
more realistic example blocks user1 all access, including
directory listings, to user2's
home directory:&prompt.root; ugidfw set 2 subject uid user1 object uid user2 mode n
&prompt.root; ugidfw set 3 subject uid user1 object gid user2 mode nInstead of user1, could be used
in order to enforce the same access restrictions for all
users. However, the root user is unaffected by
these rules.Extreme caution should be taken when working with this
module as incorrect use could block access to certain
parts of the file system.The MAC Interface Silencing PolicyMAC Interface Silencing PolicyModule name: mac_ifoff.koKernel configuration line: options
MAC_IFOFFBoot option:
mac_ifoff_load="YES"The &man.mac.ifoff.4; module is used to disable network
interfaces on the fly and to keep network interfaces from
being brought up during system boot. It does not use labels
and does not depend on any other
MAC modules.Most of this module's control is performed through these
sysctl tunables:security.mac.ifoff.lo_enabled
enables or disables all traffic on the loopback,
&man.lo.4;, interface.security.mac.ifoff.bpfrecv_enabled
enables or disables all traffic on the Berkeley Packet
Filter interface, &man.bpf.4;.security.mac.ifoff.other_enabled
enables or disables traffic on all other
interfaces.One of the most common uses of &man.mac.ifoff.4; is
network monitoring in an environment where network traffic
should not be permitted during the boot sequence. Another
use would be to write a script which uses an application such
as security/aide to automatically block
network traffic if it finds new or altered files in protected
directories.The MAC Port Access Control List PolicyMAC Port Access Control List PolicyModule name: mac_portacl.koKernel configuration line:
MAC_PORTACLBoot option:
mac_portacl_load="YES"The &man.mac.portacl.4; module is used to limit binding to
local TCP and UDP ports,
making it possible to allow non-root users to bind to
specified privileged ports below 1024.Once loaded, this module enables the
MAC policy on all sockets. The following
tunables are available:security.mac.portacl.enabled
enables or disables the policy completely.security.mac.portacl.port_high
sets the highest port number that &man.mac.portacl.4;
protects.security.mac.portacl.suser_exempt,
when set to a non-zero value, exempts the root user from this
policy.security.mac.portacl.rules
specifies the policy as a text string of the form
rule[,rule,...], with as many rules as
needed, and where each rule is of the form
idtype:id:protocol:port. The
idtype is either
uid or gid. The
protocol parameter can be
tcp or udp. The
port parameter is the port number
to allow the specified user or group to bind to. Only
numeric values can be used for the user ID, group ID,
and port parameters.By default, ports below 1024 can only be used by
privileged processes which run as root. For &man.mac.portacl.4;
to allow non-privileged processes to bind to ports below 1024,
set the following tunables as
follows:&prompt.root; sysctl security.mac.portacl.port_high=1023
&prompt.root; sysctl net.inet.ip.portrange.reservedlow=0
&prompt.root; sysctl net.inet.ip.portrange.reservedhigh=0To prevent the root user from being affected
by this policy, set
security.mac.portacl.suser_exempt to a
non-zero value.&prompt.root; sysctl security.mac.portacl.suser_exempt=1To allow the www
user with UID 80 to bind to port 80
without ever needing root privilege:&prompt.root; sysctl security.mac.portacl.rules=uid:80:tcp:80This next example permits the user with the
UID of 1001 to bind to
TCP ports 110 (POP3) and 995
(POP3s):&prompt.root; sysctl security.mac.portacl.rules=uid:1001:tcp:110,uid:1001:tcp:995The MAC Partition PolicyMAC Process Partition PolicyModule name: mac_partition.koKernel configuration line:
options MAC_PARTITIONBoot option:
mac_partition_load="YES"The &man.mac.partition.4; policy drops processes into
specific partitions based on their
MAC label. Most configuration for this
policy is done using &man.setpmac.8;. One
sysctl tunable is available for this
policy:security.mac.partition.enabled
enables the enforcement of MAC process
partitions.When this policy is enabled, users will only be permitted
to see their processes, and any others within their partition,
but will not be permitted to work with utilities outside the
scope of this partition. For instance, a user in the
insecure class will not be permitted to
access top as well as many other commands
that must spawn a process.This example adds top to the label set
on users in the insecure class. All
processes spawned by users in the insecure
class will stay in the partition/13
label.&prompt.root; setpmac partition/13 topThis command displays the partition label and the process
list:&prompt.root; ps ZaxThis command displays another user's process partition
label and that user's currently running processes:&prompt.root; ps -ZU trhodesUsers can see processes in root's label unless the
&man.mac.seeotheruids.4; policy is loaded.The MAC Multi-Level Security ModuleMAC Multi-Level Security PolicyModule name: mac_mls.koKernel configuration line:
options MAC_MLSBoot option: mac_mls_load="YES"The &man.mac.mls.4; policy controls access between
subjects and objects in the system by enforcing a strict
information flow policy.In MLS environments, a
clearance level is set in the label of each
subject or object, along with compartments. Since these
clearance levels can reach numbers greater than several
thousand, it would be a daunting task to thoroughly configure
every subject or object. To ease this administrative
overhead, three labels are included in this policy:
mls/low, mls/equal, and
mls/high, where:Anything labeled with mls/low will
have a low clearance level and not be permitted to access
information of a higher level. This label also prevents
objects of a higher clearance level from writing or
passing information to a lower level.mls/equal should be placed on
objects which should be exempt from the policy.mls/high is the highest level of
clearance possible. Objects assigned this label will hold
dominance over all other objects in the system; however,
they will not permit the leaking of information to objects
of a lower class.MLS provides:A hierarchical security level with a set of
non-hierarchical categories.Fixed rules of no read up, no write
down. This means that a subject can have read
access to objects on its own level or below, but not
above. Similarly, a subject can have write access to
objects on its own level or above, but not beneath.Secrecy, or the prevention of inappropriate disclosure
of data.A basis for the design of systems that concurrently
handle data at multiple sensitivity levels without leaking
information between secret and confidential.The following sysctl tunables are
available:security.mac.mls.enabled is used to
enable or disable the MLS
policy.security.mac.mls.ptys_equal
labels all &man.pty.4; devices as
mls/equal during creation.security.mac.mls.revocation_enabled
revokes access to objects after their label changes to a
label of a lower grade.security.mac.mls.max_compartments
sets the maximum number of compartment levels allowed on a
system.To manipulate MLS labels, use
&man.setfmac.8;. To assign a label to an object:&prompt.root; setfmac mls/5 testTo get the MLS label for the file
test:&prompt.root; getfmac testAnother approach is to create a master policy file in
/etc/ which specifies the
MLS policy information and to feed that
file to setfmac.When using the MLS policy module, an
administrator plans to control the flow of sensitive
information. The default block read up block write
down sets everything to a low state. Everything
is accessible and an administrator slowly augments the
confidentiality of the information.Beyond the three basic label options, an administrator
may group users and groups as required to block the
information flow between them. It might be easier to look at
the information in clearance levels using descriptive words,
such as classifications of Confidential,
Secret, and Top Secret.
Some administrators instead create different groups based on
project levels. Regardless of the classification method, a
well thought out plan must exist before implementing a
restrictive policy.Some example situations for the MLS
policy module include an e-commerce web server, a file server
holding critical company information, and financial
institution environments.The MAC Biba ModuleMAC Biba Integrity PolicyModule name: mac_biba.koKernel configuration line: options
MAC_BIBABoot option: mac_biba_load="YES"The &man.mac.biba.4; module loads the
MAC Biba policy. This policy is similar to
the MLS policy with the exception that the
rules for information flow are slightly reversed. This is to
prevent the downward flow of sensitive information whereas the
MLS policy prevents the upward flow of
sensitive information.In Biba environments, an integrity label is
set on each subject or object. These labels are made up of
hierarchical grades and non-hierarchical components. As a
grade ascends, so does its integrity.Supported labels are biba/low,
biba/equal, and
biba/high, where:biba/low is considered the lowest
integrity an object or subject may have. Setting this on
objects or subjects blocks their write access to objects
or subjects marked as biba/high, but
will not prevent read access.biba/equal should only be placed on
objects considered to be exempt from the policy.biba/high permits writing to
objects set at a lower label, but does not permit reading
that object. It is recommended that this label be
placed on objects that affect the integrity of the entire
system.Biba provides:Hierarchical integrity levels with a set of
non-hierarchical integrity categories.Fixed rules are no write up, no read
down, the opposite of
MLS. A subject can have write access
to objects on its own level or below, but not above.
Similarly, a subject can have read access to objects on
its own level or above, but not below.Integrity by preventing inappropriate modification of
data.Integrity levels instead of MLS
sensitivity levels.The following tunables can be used to manipulate the Biba
policy:security.mac.biba.enabled is used
to enable or disable enforcement of the Biba policy on the
target machine.security.mac.biba.ptys_equal is
used to disable the Biba policy on &man.pty.4;
devices.security.mac.biba.revocation_enabled
forces the revocation of access to objects if the label is
changed to dominate the subject.To access the Biba policy setting on system objects, use
setfmac and
getfmac:&prompt.root; setfmac biba/low test
&prompt.root; getfmac test
test: biba/lowIntegrity, which is different from sensitivity, is used to
guarantee that information is not manipulated by untrusted
parties. This includes information passed between subjects
and objects. It ensures that users will only be able to
modify or access information they have been given explicit
access to. The &man.mac.biba.4; security policy module
permits an administrator to configure which files and programs
a user may see and invoke while assuring that the programs and
files are trusted by the system for that user.During the initial planning phase, an administrator must
be prepared to partition users into grades, levels, and areas.
The system will default to a high label once this policy
module is enabled, and it is up to the administrator to
configure the different grades and levels for users. Instead
of using clearance levels, a good planning method could
include topics. For instance, only allow developers
modification access to the source code repository, source
code compiler, and other development utilities. Other users
would be grouped into other categories such as testers,
designers, or end users and would only be permitted read
access.A lower integrity subject is unable to write to a higher
integrity subject and a higher integrity subject cannot list
or read a lower integrity object. Setting a label at the
lowest possible grade could make it inaccessible to subjects.
Some prospective environments for this security policy module
would include a constrained web server, a development and test
machine, and a source code repository. A less useful
implementation would be a personal workstation, a machine used
as a router, or a network firewall.The MAC Low-watermark ModuleMAC LOMACModule name: mac_lomac.koKernel configuration line: options
MAC_LOMACBoot option:
mac_lomac_load="YES"Unlike the MAC Biba policy, the
&man.mac.lomac.4; policy permits access to lower integrity
objects only after decreasing the integrity level to not
disrupt any integrity rules.The Low-watermark integrity policy works almost
identically to Biba, with the exception of using floating
labels to support subject demotion via an auxiliary grade
compartment. This secondary compartment takes the form
[auxgrade]. When assigning a policy with
an auxiliary grade, use the syntax
lomac/10[2], where
2 is the auxiliary grade.This policy relies on the ubiquitous labeling of all
system objects with integrity labels, permitting subjects to
read from low integrity objects and then downgrading the label
on the subject to prevent future writes to high integrity
objects using [auxgrade]. The policy may
provide greater compatibility and require less initial
configuration than Biba.Like the Biba and MLS policies,
setfmac and setpmac
are used to place labels on system objects:&prompt.root; setfmac /usr/home/trhodes lomac/high[low]
&prompt.root; getfmac /usr/home/trhodes lomac/high[low]The auxiliary grade low is a feature
provided only by the MAC
LOMAC policy.User Lock DownThis example considers a relatively small storage system
with fewer than fifty users. Users will have login
capabilities and are permitted to store data and access
resources.For this scenario, the &man.mac.bsdextended.4; and
&man.mac.seeotheruids.4; policy modules could co-exist and block
access to system objects while hiding user processes.Begin by adding the following line to
/boot/loader.conf:mac_seeotheruids_load="YES"The &man.mac.bsdextended.4; security policy module may be
activated by adding this line to
/etc/rc.conf:ugidfw_enable="YES"Default rules stored in
/etc/rc.bsdextended will be loaded at
system initialization. However, the default entries may need
modification. Since this machine is expected only to service
users, everything may be left commented out except the last
two lines in order to force the loading of user owned system
objects by default.Add the required users to this machine and reboot. For
testing purposes, try logging in as a different user across
two consoles. Run ps aux to see if processes
of other users are visible. Verify that running &man.ls.1; on
another user's home directory fails.Do not try to test with the root user unless the specific
sysctls have been modified to block super
user access.When a new user is added, their &man.mac.bsdextended.4;
rule will not be in the ruleset list. To update the ruleset
quickly, unload the security policy module and reload it again
using &man.kldunload.8; and &man.kldload.8;.Nagios in a MAC JailNagios in a MAC JailThis section demonstrates the steps that are needed to
implement the Nagios network
monitoring system in a MAC environment. This
is meant as an example which still requires the administrator to
test that the implemented policy meets the security requirements
of the network before using in a production environment.This example requires to be set
on each file system. It also assumes that
net-mgmt/nagios-plugins,
net-mgmt/nagios, and
www/apache22 are all installed, configured,
and working correctly before attempting the integration into the
MAC framework.Create an Insecure User ClassBegin the procedure by adding the following user class
to /etc/login.conf:insecure:\
:copyright=/etc/COPYRIGHT:\
:welcome=/etc/motd:\
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K:\
:path=~/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
:manpath=/usr/share/man /usr/local/man:\
:nologin=/usr/sbin/nologin:\
:cputime=1h30m:\
:datasize=8M:\
:vmemoryuse=100M:\
:stacksize=2M:\
:memorylocked=4M:\
:memoryuse=8M:\
:filesize=8M:\
:coredumpsize=8M:\
:openfiles=24:\
:maxproc=32:\
:priority=0:\
:requirehome:\
:passwordtime=91d:\
:umask=022:\
:ignoretime@:\
:label=biba/10(10-10):Then, add the following line to the default user class
section::label=biba/high:Save the edits and issue the following command to rebuild
the database:&prompt.root; cap_mkdb /etc/login.confConfigure UsersSet the root
user to the default class using:&prompt.root; pw usermod root -L defaultAll user accounts that are not root will now require a login
class. The login class is required, otherwise users will be
refused access to common commands. The following
sh script should do the trick:&prompt.root; for x in `awk -F: '($3 >= 1001) && ($3 != 65534) { print $1 }' \/etc/passwd`; do pw usermod $x -L default; done;Next, drop the nagios and www accounts into the insecure
class:&prompt.root; pw usermod nagios -L insecure
&prompt.root; pw usermod www -L insecureCreate the Contexts FileA contexts file should now be created as
/etc/policy.contexts:# This is the default BIBA policy for this system.
# System:
/var/run(/.*)? biba/equal
/dev/(/.*)? biba/equal
/var biba/equal
/var/spool(/.*)? biba/equal
/var/log(/.*)? biba/equal
/tmp(/.*)? biba/equal
/var/tmp(/.*)? biba/equal
/var/spool/mqueue biba/equal
/var/spool/clientmqueue biba/equal
# For Nagios:
/usr/local/etc/nagios(/.*)? biba/10
/var/spool/nagios(/.*)? biba/10
# For apache
/usr/local/etc/apache(/.*)? biba/10This policy enforces security by setting restrictions on
the flow of information. In this specific configuration,
users, including root, should never be
allowed to access Nagios.
Configuration files and processes that are a part of
Nagios will be completely self
contained or jailed.This file will be read after running
setfsmac on every file system. This
example sets the policy on the root file system:&prompt.root; setfsmac -ef /etc/policy.contexts /Next, add these edits to the main section of
/etc/mac.conf:default_labels file ?biba
default_labels ifnet ?biba
default_labels process ?biba
default_labels socket ?bibaLoader ConfigurationTo finish the configuration, add the following lines to
/boot/loader.conf:mac_biba_load="YES"
mac_seeotheruids_load="YES"
security.mac.biba.trust_all_interfaces=1And the following line to the network card configuration
stored in /etc/rc.conf. If the primary
network configuration is done via DHCP,
this may need to be configured manually after every system
boot:maclabel biba/equalTesting the ConfigurationMAC Configuration TestingFirst, ensure that the web server and
Nagios will not be started on
system initialization and reboot. Ensure that root cannot access any of the
files in the Nagios configuration
directory. If root
can list the contents of
/var/spool/nagios, something is wrong.
Instead, a permission denied error should be
returned.If all seems well, Nagios,
Apache, and
Sendmail can now be started:&prompt.root; cd /etc/mail && make stop && \
setpmac biba/equal make start && setpmac biba/10\(10-10\) apachectl start && \
setpmac biba/10\(10-10\) /usr/local/etc/rc.d/nagios.sh forcestartDouble check to ensure that everything is working
properly. If not, check the log files for error messages. If
needed, use &man.sysctl.8; to disable the &man.mac.biba.4;
security policy module and try starting everything again as
usual.The root user
can still change the security enforcement and edit its
configuration files. The following command will permit the
degradation of the security policy to a lower grade for a
newly spawned shell:&prompt.root; setpmac biba/10 cshTo block this from happening, force the user into a
range using &man.login.conf.5;. If &man.setpmac.8; attempts
to run a command outside of the compartment's range, an
error will be returned and the command will not be executed.
In this case, set root to
biba/high(high-high).Troubleshooting the MAC FrameworkMAC TroubleshootingThis section discusses common configuration errors and how
to resolve them.The flag does not stay
enabled on the root (/)
partition:The following steps may resolve this transient
error:Edit /etc/fstab and set the
root partition to for
read-only.Reboot into single user mode.Run tunefs on /.Reboot the system.Run mount/ and change the
back to in
/etc/fstab and reboot the system
again.Double-check the output from
mount to ensure that
has been properly set on
the root file system.After establishing a secure environment with
MAC, Xorg no
longer starts:This could be caused by the MAC
partition policy or by a mislabeling
in one of the MAC labeling policies.
To debug, try the following:Check the error message. If the user is in the
insecure class, the
partition policy may be the
culprit. Try setting the user's class back to the
default class and rebuild the
database with cap_mkdb. If this
does not alleviate the problem, go to step two.Double-check that the label policies are set
correctly for the user,
Xorg, and the
/dev entries.If neither of these resolve the problem, send the
error message and a description of the environment to
the &a.questions;.The _secure_path: unable to stat
.login_conf error appears:This error can appear when a user attempts to switch
from the root
user to another user in the system. This message
usually occurs when the user has a higher label setting
than that of the user they are attempting to become.
For instance, if joe has a default label
of and root has a label of
, root cannot view
joe's home
directory. This will happen whether or not root has used
su to become joe as the Biba
integrity model will not permit root to view objects set
at a lower integrity level.The system no longer recognizes root:When this occurs, whoami returns
0 and su returns
who are you?.This can happen if a labeling policy has been
disabled by &man.sysctl.8; or the policy module was
unloaded. If the policy is disabled, the login
capabilities database needs to be reconfigured. Double
check /etc/login.conf to ensure
that all options have been
removed and rebuild the database with
cap_mkdb.This may also happen if a policy restricts access to
master.passwd. This is usually
caused by an administrator altering the file under a
label which conflicts with the general policy being used
by the system. In these cases, the user information
would be read by the system and access would be blocked
as the file has inherited the new label. Disable the
policy using &man.sysctl.8; and everything should return
to normal.
Index: head/en_US.ISO8859-1/books/handbook/mail/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/mail/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/mail/chapter.xml (revision 46052)
@@ -1,1914 +1,1915 @@
- Electronic Mail
+ xml:id="mail">
+
+ Electronic MailBillLloydOriginal
work by JimMockRewritten
by SynopsisemailElectronic Mail, better known as email, is
one of the most widely used forms of communication today. This
chapter provides a basic introduction to running a mail server
on &os;, as well as an introduction to sending and receiving
email using &os;. For more complete coverage of this subject,
refer to the books listed in .After reading this chapter, you will know:Which software components are involved in sending and
receiving electronic mail.Where basic sendmail
configuration files are located in &os;.The difference between remote and local
mailboxes.How to block spammers from illegally using a mail server
as a relay.How to install and configure an alternate Mail Transfer
Agent, replacing
sendmail.How to troubleshoot common mail server problems.How to set up the system to send mail only.How to use mail with a dialup connection.How to configure SMTP authentication for added
security.How to install and use a Mail User Agent, such as
mutt, to send and receive
email.How to download mail from a remote
POP or IMAP
server.How to automatically apply filters and rules to incoming
email.Before reading this chapter, you should:Properly set up a network connection ().Properly set up the DNS information
for a mail host ().Know how to install additional third-party software
().Mail ComponentsPOPIMAPDNSmail server daemonsSendmailmail server daemonsPostfixmail server daemonsqmailmail server daemonsEximemailreceivingMX recordmail hostThere are five major parts involved in an email exchange:
the Mail User Agent (MUA), the Mail Transfer
Agent (MTA), a mail host, a remote or local
mailbox, and DNS. This section provides an
overview of these components.Mail User Agent (MUA)The Mail User Agent (MUA) is an
application which is used to compose, send, and receive
emails. This application can be a command line program,
such as the built-in mail utility or a
third-party application from the Ports Collection, such as
mutt,
alpine, or
elm. Dozens of graphical
programs are also available in the Ports Collection,
including Claws Mail,
Evolution, and
Thunderbird. Some
organizations provide a web mail program which can be
accessed through a web browser. More information about
installing and using a MUA on &os; can
be found in .Mail Transfer Agent (MTA)The Mail Transfer Agent (MTA) is
responsible for receiving incoming mail and delivering
outgoing mail. &os; ships with
Sendmail as the default
MTA, but it also supports numerous
other mail server daemons, including
Exim,
Postfix, and
qmail.
Sendmail configuration is
described in . If another
MTA is installed using the Ports
Collection, refer to its post-installation message for
&os;-specific configuration details and the application's
website for more general configuration
instructions.Mail Host and MailboxesThe mail host is a server that is responsible for
delivering and receiving mail for a host or a network.
The mail host collects all mail sent to the domain and
stores it either in the default mbox
or the alternative Maildir format, depending on the
configuration. Once mail has been stored, it may either
be read locally using a MUA or remotely
accessed and collected using protocols such as
POP or IMAP. If
mail is read locally, a POP or
IMAP server does not need to be
installed.To access mailboxes remotely, a POP
or IMAP server is required as these
protocols allow users to connect to their mailboxes from
remote locations. IMAP offers several
advantages over POP. These include the
ability to store a copy of messages on a remote server
after they are downloaded and concurrent updates.
IMAP can be useful over low-speed links
as it allows users to fetch the structure of messages
without downloading them. It can also perform tasks such
as searching on the server in order to minimize data
transfer between clients and servers.Several POP and
IMAP servers are available in the Ports
Collection. These include
mail/qpopper,
mail/imap-uw,
mail/courier-imap, and
mail/dovecot2.It should be noted that both POP
and IMAP transmit information,
including username and password credentials, in
clear-text. To secure the transmission of information
across these protocols, consider tunneling sessions over
&man.ssh.1; ()
or using SSL ().Domain Name System (DNS)The Domain Name System (DNS) and
its daemon named play a large role in
the delivery of email. In order to deliver mail from one
site to another, the MTA will look up
the remote site in DNS to determine
which host will receive mail for the destination. This
process also occurs when mail is sent from a remote host
to the MTA.In addition to mapping hostnames to
IP addresses, DNS is
responsible for storing information specific to mail
delivery, known as Mail eXchanger
MX records. The MX
record specifies which hosts will receive mail for a
particular domain.To view the MX records for a
domain, specify the type of record. Refer to
&man.host.1;, for more details about this command:&prompt.user; host -t mx FreeBSD.org
FreeBSD.org mail is handled by 10 mx1.FreeBSD.orgRefer to for more
information about DNS and its
configuration.Sendmail Configuration
FilesChristopherShumwayContributed
by SendmailSendmail is the default
MTA installed with &os;. It accepts mail
from MUAs and delivers it to the appropriate
mail host, as defined by its configuration.
Sendmail can also accept network
connections and deliver mail to local mailboxes or to another
program.The configuration files for
Sendmail are located in
/etc/mail. This section describes these
files in more detail./etc/mail/access/etc/mail/aliases/etc/mail/local-host-names/etc/mail/mailer.conf/etc/mail/mailertable/etc/mail/sendmail.cf/etc/mail/virtusertable/etc/mail/accessThis access database file defines which hosts or
IP addresses have access to the local
mail server and what kind of access they have. Hosts
listed as , which is the default
option, are allowed to send mail to this host as long as
the mail's final destination is the local machine. Hosts
listed as are rejected for all
mail connections. Hosts listed as
are allowed to send mail for any destination using this
mail server. Hosts listed as will
have their mail returned with the specified mail error.
If a host is listed as ,
Sendmail will abort the current
search for this entry without accepting or rejecting the
mail. Hosts listed as will
have their messages held and will receive the specified
text as the reason for the hold.Examples of using these options for both
IPv4 and IPv6
addresses can be found in the &os; sample configuration,
/etc/mail/access.sample:# $FreeBSD$
#
# Mail relay access control list. Default is to reject mail unless the
# destination is local, or listed in /etc/mail/local-host-names
#
## Examples (commented out for safety)
#From:cyberspammer.com ERROR:"550 We don't accept mail from spammers"
#From:okay.cyberspammer.com OK
#Connect:sendmail.org RELAY
#To:sendmail.org RELAY
#Connect:128.32 RELAY
#Connect:128.32.2 SKIP
#Connect:IPv6:1:2:3:4:5:6:7 RELAY
#Connect:suspicious.example.com QUARANTINE:Mail from suspicious host
#Connect:[127.0.0.3] OK
#Connect:[IPv6:1:2:3:4:5:6:7:8] OKTo configure the access database, use the format shown
in the sample to make entries in
/etc/mail/access, but do not put a
comment symbol (#) in front of the
entries. Create an entry for each host or network whose
access should be configured. Mail senders that match the
left side of the table are affected by the action on the
right side of the table.Whenever this file is updated, update its database and
restart Sendmail:&prompt.root; makemap hash /etc/mail/access < /etc/mail/access
&prompt.root; service sendmail restart/etc/mail/aliasesThis database file contains a list of virtual
mailboxes that are expanded to users, files, programs, or
other aliases. Here are a few entries to illustrate the
file format:root: localuser
ftp-bugs: joe,eric,paul
bit.bucket: /dev/null
procmail: "|/usr/local/bin/procmail"The mailbox name on the left side of the colon is
expanded to the target(s) on the right. The first entry
expands the root
mailbox to the localuser mailbox, which
is then looked up in the
/etc/mail/aliases database. If no
match is found, the message is delivered to localuser. The second
entry shows a mail list. Mail to ftp-bugs is expanded to
the three local mailboxes joe, eric, and paul. A remote mailbox
could be specified as
user@example.com. The third
entry shows how to write mail to a file, in this case
/dev/null. The last entry
demonstrates how to send mail to a program,
/usr/local/bin/procmail, through a
&unix; pipe. Refer to &man.aliases.5; for more
information about the format of this file.Whenever this file is updated, run
newaliases to update and initialize the
aliases database./etc/mail/sendmail.cfThis is the master configuration file for
Sendmail. It controls the
overall behavior of Sendmail,
including everything from rewriting email addresses to
printing rejection messages to remote mail servers.
Accordingly, this configuration file is quite complex.
Fortunately, this file rarely needs to be changed for
standard mail servers.The master Sendmail
configuration file can be built from &man.m4.1; macros
that define the features and behavior of
Sendmail. Refer to
/usr/src/contrib/sendmail/cf/README
for some of the details.Whenever changes to this file are made,
Sendmail needs to be restarted
for the changes to take effect./etc/mail/virtusertableThis database file maps mail addresses for virtual
domains and users to real mailboxes. These mailboxes can
be local, remote, aliases defined in
/etc/mail/aliases, or files. This
allows multiple virtual domains to be hosted on one
machine.&os; provides a sample configuration file in
/etc/mail/virtusertable.sample to
further demonstrate its format. The following example
demonstrates how to create custom entries using that
format:root@example.com root
postmaster@example.com postmaster@noc.example.net
@example.com joeThis file is processed in a first match order. When
an email address matches the address on the left, it is
mapped to the local mailbox listed on the right. The
format of the first entry in this example maps a specific
email address to a local mailbox, whereas the format of
the second entry maps a specific email address to a remote
mailbox. Finally, any email address from
example.com which has not matched any
of the previous entries will match the last mapping and be
sent to the local mailbox joe. When
creating custom entries, use this format and add them to
/etc/mail/virtusertable. Whenever
this file is edited, update its database and restart
Sendmail:&prompt.root; makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
&prompt.root; service sendmail restart/etc/mail/relay-domainsIn a default &os; installation,
Sendmail is configured to only
send mail from the host it is running on. For example, if
a POP server is available, users will
be able to check mail from remote locations but they will
not be able to send outgoing emails from outside
locations. Typically, a few moments after the attempt, an
email will be sent from MAILER-DAEMON
with a 5.7 Relaying Denied
message.The most straightforward solution is to add the
ISP's FQDN to
/etc/mail/relay-domains. If multiple
addresses are needed, add them one per
line:your.isp.example.com
other.isp.example.net
users-isp.example.org
www.example.orgAfter creating or editing this file, restart
Sendmail with
service sendmail restart.Now any mail sent through the system by any host in
this list, provided the user has an account on the system,
will succeed. This allows users to send mail from the
system remotely without opening the system up to relaying
SPAM from the Internet.Changing the Mail Transfer AgentAndrewBoothmanWritten
by GregoryNeil
ShapiroInformation taken
from emails written by emailchange mta&os; comes with Sendmail already
installed as the MTA which is in charge of
outgoing and incoming mail. However, the system administrator
can change the system's MTA. A wide choice
of alternative MTAs is available from the
mail category of the &os; Ports
Collection.Once a new MTA is installed, configure
and test the new software before replacing
Sendmail. Refer to the documentation
of the new MTA for information on how to
configure the software.Once the new MTA is working, use the
instructions in this section to disable
Sendmail and configure &os; to use
the replacement MTA.Disable SendmailIf Sendmail's outgoing mail
service is disabled, it is important that it is replaced
with an alternative mail delivery system. Otherwise, system
functions such as &man.periodic.8; will be unable to deliver
their results by email. Many parts of the system expect a
functional MTA. If applications continue
to use Sendmail's binaries to try
to send email after they are disabled, mail could go into an
inactive Sendmail queue and
never be delivered.In order to completely disable
Sendmail, add or edit the following
lines in /etc/rc.conf:sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"To only disable Sendmail's
incoming mail service, use only this entry in
/etc/rc.conf:sendmail_enable="NO"More information on Sendmail's
startup options is available in &man.rc.sendmail.8;.Replace the Default MTAWhen a new MTA is installed using the
Ports Collection, its startup script is also installed and
startup instructions are mentioned in its package message.
Before starting the new MTA, stop the
running Sendmail processes. This
example stops all of these services, then starts the
Postfix service:&prompt.root; service sendmail stop
&prompt.root; service postfix startTo start the replacement MTA at system
boot, add its configuration line to
/etc/rc.conf. This entry enables the
Postfix MTA:postfix_enable="YES"Some extra configuration is needed as
Sendmail is so ubiquitous that some
software assumes it is already installed and configured.
Check /etc/periodic.conf and make sure
that these values are set to NO. If this
file does not exist, create it with these entries:daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"Some alternative MTAs provide their own
compatible implementations of the
Sendmail command-line interface in
order to facilitate using them as drop-in replacements for
Sendmail. However, some
MUAs may try to execute standard
Sendmail binaries instead of the
new MTA's binaries. &os; uses
/etc/mail/mailer.conf to map the expected
Sendmail binaries to the location
of the new binaries. More information about this mapping can
be found in &man.mailwrapper.8;.The default /etc/mail/mailer.conf
looks like this:# $FreeBSD$
#
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
#
sendmail /usr/libexec/sendmail/sendmail
send-mail /usr/libexec/sendmail/sendmail
mailq /usr/libexec/sendmail/sendmail
newaliases /usr/libexec/sendmail/sendmail
hoststat /usr/libexec/sendmail/sendmail
purgestat /usr/libexec/sendmail/sendmailWhen any of the commands listed on the left are run, the
system actually executes the associated command shown on the
right. This system makes it easy to change what binaries are
executed when these default binaries are invoked.Some MTAs, when installed using the
Ports Collection, will prompt to update this file for the new
binaries. For example, Postfix
will update the file like this:#
# Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
#
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmailIf the installation of the MTA does
not automatically update
/etc/mail/mailer.conf, edit this file in
a text editor so that it points to the new binaries. This
example points to the binaries installed by
mail/ssmtp:sendmail /usr/local/sbin/ssmtp
send-mail /usr/local/sbin/ssmtp
mailq /usr/libexec/sendmail/sendmail
newaliases /usr/libexec/sendmail/sendmail
hoststat /usr/libexec/sendmail/sendmail
purgestat /usr/libexec/sendmail/sendmailOnce everything is configured, it is recommended to reboot
the system. Rebooting provides the opportunity to ensure that
the system is correctly configured to start the new
MTA automatically on boot.TroubleshootingemailtroubleshootingWhy do I have to use the FQDN for hosts on my
site?The host may actually be in a different domain. For
example, in order for a host in foo.bar.edu to reach a
host called mumble in the
bar.edu
domain, refer to it by the Fully-Qualified Domain Name
FQDN, mumble.bar.edu,
instead of just mumble.This is because the version of
BINDBIND which ships with &os;
no longer provides default abbreviations for non-FQDNs
other than the local domain. An unqualified host such as
mumble must either be found as
mumble.foo.bar.edu, or
it will be searched for in the root domain.In older versions of BIND,
the search continued across mumble.bar.edu, and
mumble.edu.
RFC 1535 details why this is considered bad practice or
even a security hole.As a good workaround, place the line:search foo.bar.edu bar.eduinstead of the previous:domain foo.bar.eduinto /etc/resolv.conf. However,
make sure that the search order does not go beyond the
boundary between local and public
administration, as RFC 1535 calls it.How can I run a mail server on a dial-up PPP
host?Connect to a &os; mail gateway on the LAN. The PPP
connection is non-dedicated.One way to do this is to get a full-time Internet server
to provide secondary MXMX record services for the
domain. In this example, the domain is example.com and the ISP
has configured example.net to provide
secondary MX services to the
domain:example.com. MX 10 example.com.
MX 20 example.net.Only one host should be specified as the final
recipient. For Sendmail, add
Cw example.com in
/etc/mail/sendmail.cf on example.com.When the sending MTA attempts
to deliver mail, it will try to connect to the system,
example.com,
over the PPP link. This will time out if the destination is
offline. The MTA will automatically
deliver it to the secondary MX site at
the Internet Service Provider (ISP),
example.net.
The secondary MX site will periodically
try to connect to the primary MX host,
example.com.Use something like this as a login script:#!/bin/sh
# Put me in /usr/local/bin/pppmyisp
( sleep 60 ; /usr/sbin/sendmail -q ) &
/usr/sbin/ppp -direct pppmyispWhen creating a separate login script for users, instead
use sendmail -qRexample.com in the script
above. This will force all mail in the queue for
example.com to
be processed immediately.A further refinement of the situation can be seen from
this example from the &a.isp;:> we provide the secondary MX for a customer. The customer connects to
> our services several times a day automatically to get the mails to
> his primary MX (We do not call his site when a mail for his domains
> arrived). Our sendmail sends the mailqueue every 30 minutes. At the
> moment he has to stay 30 minutes online to be sure that all mail is
> gone to the primary MX.
>
> Is there a command that would initiate sendmail to send all the mails
> now? The user has not root-privileges on our machine of course.
In the privacy flags section of sendmail.cf, there is a
definition Opgoaway,restrictqrun
Remove restrictqrun to allow non-root users to start the queue processing.
You might also like to rearrange the MXs. We are the 1st MX for our
customers like this, and we have defined:
# If we are the best MX for a host, try directly instead of generating
# local config error.
OwTrue
That way a remote site will deliver straight to you, without trying
the customer connection. You then send to your customer. Only works for
hosts, so you need to get your customer to name their mail
machine customer.com as well as
hostname.customer.com in the DNS. Just put an A record in
the DNS for customer.com.Advanced TopicsThis section covers more involved topics such as mail
configuration and setting up mail for an entire domain.Basic ConfigurationemailconfigurationOut of the box, one can send email to external hosts as
long as /etc/resolv.conf is configured or
the network has access to a configured DNS
server. To have email delivered to the MTA
on the &os; host, do one of the following:Run a DNS server for the
domain.Get mail delivered directly to to the
FQDN for the machine.SMTPIn order to have mail delivered directly to a host, it
must have a permanent static IP address, not a dynamic IP
address. If the system is behind a firewall, it must be
configured to allow SMTP traffic. To receive mail directly at
a host, one of these two must be configured:Make sure that the lowest-numbered
MXMX
record record in
DNS points to the host's static IP
address.Make sure there is no MX entry in
the DNS for the host.Either of the above will allow mail to be received
directly at the host.Try this:&prompt.root; hostname
example.FreeBSD.org
&prompt.root; host example.FreeBSD.org
example.FreeBSD.org has address 204.216.27.XXIn this example, mail sent directly to yourlogin@example.FreeBSD.org should
work without problems, assuming
Sendmail is running correctly on
example.FreeBSD.org.For this example:&prompt.root; host example.FreeBSD.org
example.FreeBSD.org has address 204.216.27.XX
example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.orgAll mail sent to example.FreeBSD.org will
be collected on hub under the same
username instead of being sent directly to your host.The above information is handled by the
DNS server. The DNS
record that carries mail routing information is the
MX entry. If no MX
record exists, mail will be delivered directly to the host by
way of its IP address.The MX entry for freefall.FreeBSD.org at
one time looked like this:freefall MX 30 mail.crl.net
freefall MX 40 agora.rdrop.com
freefall MX 10 freefall.FreeBSD.org
freefall MX 20 who.cdrom.comfreefall had many
MX entries. The lowest
MX number is the host that receives mail
directly, if available. If it is not accessible for some
reason, the next lower-numbered host will accept messages
temporarily, and pass it along when a lower-numbered host
becomes available.Alternate MX sites should have separate
Internet connections in order to be most useful. Your
ISP can provide this service.Mail for a DomainWhen configuring a MTA for a network,
any mail sent to hosts in its domain should be diverted to the
MTA so that users can receive their mail on
the master mail server.DNSTo make life easiest, a user account with the same
username should exist on both the
MTA and the system with the
MUA. Use &man.adduser.8; to create the
user accounts.The MTA must be the designated mail
exchanger for each workstation on the network. This is done
in theDNS configuration with an
MX record:example.FreeBSD.org A 204.216.27.XX ; Workstation
MX 10 hub.FreeBSD.org ; MailhostThis will redirect mail for the workstation to the
MTA no matter where the A record points.
The mail is sent to the MX host.This must be configured on a DNS
server. If the network does not run its own
DNS server, talk to the
ISP or DNS
provider.The following is an example of virtual email hosting.
Consider a customer with the domain customer1.org, where all
the mail for customer1.org should be
sent to mail.myhost.com. The
DNS entry should look like this:customer1.org MX 10 mail.myhost.comAn A> record is
not needed for customer1.org in order to
only handle email for that domain. However, running
ping against customer1.org will not
work unless an A record exists for
it.Tell the MTA which domains and/or
hostnames it should accept mail for. Either of the following
will work for Sendmail:Add the hosts to
/etc/mail/local-host-names when
using the FEATURE(use_cw_file). For
versions of Sendmail earlier
than 8.10, edit /etc/sendmail.cw
instead.Add a Cwyour.host.com line to
/etc/sendmail.cf. For
Sendmail 8.10 or higher, add
that line to
/etc/mail/sendmail.cf.Setting Up to Send OnlyBillMoranContributed
by There are many instances where one may only want to send
mail through a relay. Some examples are:The computer is a desktop machine that needs to use
programs such as &man.send-pr.1;, using the
ISP's mail relay.The computer is a server that does not handle mail
locally, but needs to pass off all mail to a relay for
processing.While any MTA is capable of filling
this particular niche, it can be difficult to properly configure
a full-featured MTA just to handle offloading
mail. Programs such as Sendmail and
Postfix are overkill for this
use.Additionally, a typical Internet access service agreement
may forbid one from running a mail server.The easiest way to fulfill those needs is to install the
mail/ssmtp port:&prompt.root; cd /usr/ports/mail/ssmtp
&prompt.root; make install replace cleanOnce installed, mail/ssmtp can be
configured with
/usr/local/etc/ssmtp/ssmtp.conf:root=yourrealemail@example.com
mailhub=mail.example.com
rewriteDomain=example.com
hostname=_HOSTNAME_Use the real email address for root. Enter the
ISP's outgoing mail relay in place of
mail.example.com.
Some ISPs call this the outgoing mail
server or SMTP server).Make sure to disable Sendmail,
including the outgoing mail service. See for details.mail/ssmtp has some other options
available. Refer to the examples in
/usr/local/etc/ssmtp or the manual page
of ssmtp for more information.Setting up ssmtp in this manner
allows any software on the computer that needs to send mail to
function properly, while not violating the
ISP's usage policy or allowing the computer
to be hijacked for spamming.Using Mail with a Dialup ConnectionWhen using a static IP address, one should not need to
adjust the default configuration. Set the hostname to the
assigned Internet name and Sendmail
will do the rest.When using a dynamically assigned IP address and a dialup
PPP connection to the Internet, one usually has a mailbox on the
ISP's mail server. In this example, the
ISP's domain is example.net, the user name
is user, the hostname
is bsd.home, and
the ISP has allowed relay.example.net as a mail
relay.In order to retrieve mail from the ISP's
mailbox, install a retrieval agent from the Ports Collection.
mail/fetchmail is a good choice as it
supports many different protocols. Usually, the
ISP will provide POP.
When using user PPP, email can be
automatically fetched when an Internet connection is established
with the following entry in
/etc/ppp/ppp.linkup:MYADDR:
!bg su user -c fetchmailWhen using Sendmail to deliver
mail to non-local accounts, configure
Sendmail to process the mail queue as
soon as the Internet connection is established. To do this, add
this line after the above fetchmail entry in
/etc/ppp/ppp.linkup: !bg su user -c "sendmail -q"In this example, there is an account for
user on bsd.home. In the home
directory of user on
bsd.home, create a
.fetchmailrc which contains this
line:poll example.net protocol pop3 fetchall pass MySecretThis file should not be readable by anyone except
user as it contains
the password MySecret.In order to send mail with the correct
from: header, configure
Sendmail to use
user@example.net rather than user@bsd.home and to send all mail via
relay.example.net,
allowing quicker mail transmission.The following .mc file should
suffice:VERSIONID(`bsd.home.mc version 1.0')
OSTYPE(bsd4.4)dnl
FEATURE(nouucp)dnl
MAILER(local)dnl
MAILER(smtp)dnl
Cwlocalhost
Cwbsd.home
MASQUERADE_AS(`example.net')dnl
FEATURE(allmasquerade)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(nocanonify)dnl
FEATURE(nodns)dnl
define(`SMART_HOST', `relay.example.net')
Dmbsd.home
define(`confDOMAIN_NAME',`bsd.home')dnl
define(`confDELIVERY_MODE',`deferred')dnlRefer to the previous section for details of how to convert
this file into the sendmail.cf format. Do
not forget to restart Sendmail after
updating sendmail.cf.SMTP AuthenticationJamesGorhamWritten
by Configuring SMTP authentication on the
MTA provides a number of benefits.
SMTP authentication adds a layer
of security to Sendmail, and provides
mobile users who switch hosts the ability to use the same
MTA without the need to reconfigure their
mail client's settings each time.Install security/cyrus-sasl2
from the Ports Collection. This port supports a number of
compile-time options. For the SMTP authentication method
demonstrated in this example, make sure that
is not disabled.After installing
security/cyrus-sasl2, edit
/usr/local/lib/sasl2/Sendmail.conf,
or create it if it does not exist, and add the following
line:pwcheck_method: saslauthdNext, install
security/cyrus-sasl2-saslauthd and add
the following line to
/etc/rc.conf:saslauthd_enable="YES"Finally, start the saslauthd daemon:&prompt.root; service saslauthd startThis daemon serves as a broker for
sendmail to authenticate against
the &os; &man.passwd.5; database. This saves the trouble of
creating a new set of usernames and passwords for each user
that needs to use SMTP authentication,
and keeps the login and mail password the same.Next, edit /etc/make.conf and add
the following lines:SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2These lines provide Sendmail
the proper configuration options for linking to
cyrus-sasl2 at compile time. Make sure
that cyrus-sasl2 has been installed
before recompiling
Sendmail.Recompile Sendmail by
executing the following commands:&prompt.root; cd /usr/src/lib/libsmutil
&prompt.root; make cleandir && make obj && make
&prompt.root; cd /usr/src/lib/libsm
&prompt.root; make cleandir && make obj && make
&prompt.root; cd /usr/src/usr.sbin/sendmail
&prompt.root; make cleandir && make obj && make && make installThis compile should not have any problems if
/usr/src has not changed extensively
and the shared libraries it needs are available.After Sendmail has been
compiled and reinstalled, edit
/etc/mail/freebsd.mc or the local
.mc file. Many administrators choose
to use the output from &man.hostname.1; as the name of the
.mc file for uniqueness. Add these
lines:dnl set SASL options
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnlThese options configure the different methods available
to Sendmail for authenticating
users. To use a method other than
pwcheck, refer to the
Sendmail documentation.Finally, run &man.make.1; while in
/etc/mail. That will run the new
.mc and create a
.cf named either
freebsd.cf or the name used for the
local .mc. Then, run make
install restart, which will copy the file to
sendmail.cf, and properly restart
Sendmail. For more information
about this process, refer to
/etc/mail/Makefile.To test the configuration, use a MUA to
send a test message. For further investigation, set the
of Sendmail
to 13 and watch
/var/log/maillog for any errors.For more information, refer to
SMTP authentication.Mail User AgentsMarcSilverContributed
by Mail User AgentsA MUA is an application that is used to
send and receive email. As email evolves and
becomes more complex, MUAs are becoming
increasingly powerful and provide users increased functionality
and flexibility. The mail category of the
&os; Ports Collection contains numerous MUAs.
These include graphical email clients such as
Evolution or
Balsa and console based clients such
as mutt or
alpine.mail&man.mail.1; is the default
MUA installed with &os;. It is a console
based MUA that offers the basic
functionality required to send and receive text-based email.
It provides limited attachment support and can only access
local mailboxes.Although mail does not natively support
interaction with POP or
IMAP servers, these mailboxes may be
downloaded to a local mbox using an
application such as
fetchmail.In order to send and receive email, run
mail:&prompt.user; mailThe contents of the user's mailbox in
/var/mail are automatically read by
mail. Should the mailbox be empty, the
utility exits with a message indicating that no mail could
be found. If mail exists, the application interface starts,
and a list of messages will be displayed. Messages are
automatically numbered, as can be seen in the following
example:Mail version 8.1 6/6/93. Type ? for help.
"/var/mail/marcs": 3 messages 3 new
>N 1 root@localhost Mon Mar 8 14:05 14/510 "test"
N 2 root@localhost Mon Mar 8 14:05 14/509 "user account"
N 3 root@localhost Mon Mar 8 14:05 14/509 "sample"Messages can now be read by typing t
followed by the message number. This example reads the first
email:& t 1
Message 1:
From root@localhost Mon Mar 8 14:05:52 2004
X-Original-To: marcs@localhost
Delivered-To: marcs@localhost
To: marcs@localhost
Subject: test
Date: Mon, 8 Mar 2004 14:05:52 +0200 (SAST)
From: root@localhost (Charlie Root)
This is a test message, please reply if you receive it.As seen in this example, the message will be displayed
with full headers. To display the list of messages again,
press h.If the email requires a reply, press either
R or rmail keys. R instructs
mail to reply only to the sender of the
email, while r replies to all other
recipients of the message. These commands can be suffixed
with the mail number of the message to reply to. After typing
the response, the end of the message should be marked by a
single . on its own line. An example can be
seen below:& R 1
To: root@localhost
Subject: Re: test
Thank you, I did get your email.
.
EOTIn order to send a new email, press m,
followed by the recipient email address. Multiple recipients
may be specified by separating each address with the
, delimiter. The subject of the message may
then be entered, followed by the message contents. The end of
the message should be specified by putting a single
. on its own line.& mail root@localhost
Subject: I mastered mail
Now I can send and receive email using mail ... :)
.
EOTWhile using mail, press
? to display help at any time. Refer to
&man.mail.1; for more help on how to use
mail.&man.mail.1; was not designed to handle attachments and
thus deals with them poorly. Newer MUAs
handle attachments in a more intelligent way. Users who
prefer to use mail may find the
converters/mpack port to be of
considerable use.muttmutt is a powerful
MUA, with many features, including:The ability to thread messages.PGP support for digital signing and encryption of
email.MIME support.Maildir support.Highly customizable.Refer to http://www.mutt.org
for more information on
mutt.mutt may be installed using the
mail/mutt port. After the port has been
installed, mutt can be started by
issuing the following command:&prompt.user; muttmutt will automatically read
and display the contents of the user mailbox in
/var/mail. If no mails are found,
mutt will wait for commands from
the user. The example below shows
mutt displaying a list of
messages:To read an email, select it using the cursor keys and
press Enter. An example of
mutt displaying email can be seen
below:Similar to &man.mail.1;, mutt
can be used to reply only to the sender of the message as well
as to all recipients. To reply only to the sender of the
email, press r. To send a group reply
to the original sender as well as all the message recipients,
press g.By default, mutt uses the
&man.vi.1; editor for creating and replying to emails. Each
user can customize this by creating or editing the
.muttrc in their home directory and
setting the editor variable or by setting
the EDITOR environment variable. Refer to
http://www.mutt.org/
for more information about configuring
mutt.To compose a new mail message, press
m. After a valid subject has been given,
mutt will start &man.vi.1; so the
email can be written. Once the contents of the email are
complete, save and quit from vi.
mutt will resume, displaying a
summary screen of the mail that is to be delivered. In
order to send the mail, press y. An example
of the summary screen can be seen below:mutt contains extensive help
which can be accessed from most of the menus by pressing
?. The top line also displays the keyboard
shortcuts where appropriate.alpinealpine is aimed at a beginner
user, but also includes some advanced features.alpine has had several remote
vulnerabilities discovered in the past, which allowed remote
attackers to execute arbitrary code as users on the local
system, by the action of sending a specially-prepared email.
While known problems have been fixed,
alpine code is written in an
insecure style and the &os; Security Officer believes there
are likely to be other undiscovered vulnerabilities. Users
install alpine at their own
risk.The current version of alpine
may be installed using the mail/alpine
port. Once the port has installed,
alpine can be started by issuing
the following command:&prompt.user; alpineThe first time alpine
runs, it displays a greeting page with a brief introduction,
as well as a request from the
alpine development team to send
an anonymous email message allowing them to judge how many
users are using their client. To send this anonymous message,
press Enter. Alternatively, press
E to exit the greeting without sending an
anonymous message. An example of the greeting page is
shown below:The main menu is then presented, which can be navigated
using the cursor keys. This main menu provides shortcuts for
the composing new mails, browsing mail directories, and
administering address book entries. Below the main menu,
relevant keyboard shortcuts to perform functions specific to
the task at hand are shown.The default directory opened by
alpine is
inbox. To view the message index, press
I, or select the
MESSAGE INDEX option shown
below:The message index shows messages in the current directory
and can be navigated by using the cursor keys. Highlighted
messages can be read by pressing
Enter.In the screenshot below, a sample message is displayed by
alpine. Contextual keyboard
shortcuts are displayed at the bottom of the screen. An
example of one of a shortcut is r, which
tells the MUA to reply to the current
message being displayed.Replying to an email in alpine
is done using the pico editor,
which is installed by default with
alpine.
pico makes it easy to navigate the
message and is easier for novice users to use than &man.vi.1;
or &man.mail.1;. Once the reply is complete, the message can
be sent by pressing CtrlX. alpine will ask for
confirmation before sending the message.alpine can be customized using
the SETUP option from the main
menu. Consult http://www.washington.edu/alpine/
for more information.Using fetchmailMarcSilverContributed
by fetchmailfetchmail is a full-featured
IMAP and POP client. It
allows users to automatically download mail from remote
IMAP and POP servers and
save it into local mailboxes where it can be accessed more
easily. fetchmail can be installed
using the mail/fetchmail port, and offers
various features, including:Support for the POP3,
APOP, KPOP,
IMAP, ETRN and
ODMR protocols.Ability to forward mail using SMTP,
which allows filtering, forwarding, and aliasing to function
normally.May be run in daemon mode to check periodically for new
messages.Can retrieve multiple mailboxes and forward them, based
on configuration, to different local users.This section explains some of the basic features of
fetchmail. This utility requires a
.fetchmailrc configuration in the user's
home directory in order to run correctly. This file includes
server information as well as login credentials. Due to the
sensitive nature of the contents of this file, it is advisable
to make it readable only by the user, with the following
command:&prompt.user; chmod 600 .fetchmailrcThe following .fetchmailrc serves as an
example for downloading a single user mailbox using
POP. It tells
fetchmail to connect to example.com using a
username of joesoap
and a password of XXX. This example assumes
that the user joesoap
exists on the local system.poll example.com protocol pop3 username "joesoap" password "XXX"The next example connects to multiple POP
and IMAP servers and redirects to different
local usernames where applicable:poll example.com proto pop3:
user "joesoap", with password "XXX", is "jsoap" here;
user "andrea", with password "XXXX";
poll example2.net proto imap:
user "john", with password "XXXXX", is "myth" here;fetchmail can be run in daemon
mode by running it with , followed by the
interval (in seconds) that fetchmail
should poll servers listed in .fetchmailrc.
The following example configures
fetchmail to poll every 600
seconds:&prompt.user; fetchmail -d 600More information on fetchmail can
be found at http://www.fetchmail.info/.Using procmailMarcSilverContributed
by procmailprocmail is a powerful
application used to filter incoming mail. It allows users to
define rules which can be matched to incoming
mails to perform specific functions or to reroute mail to
alternative mailboxes or email addresses.
procmail can be installed using the
mail/procmail port. Once installed, it can
be directly integrated into most MTAs.
Consult the MTA documentation for more
information. Alternatively, procmail
can be integrated by adding the following line to a
.forward in the home directory of the
user:"|exec /usr/local/bin/procmail || exit 75"The following section displays some basic
procmail rules, as well as brief
descriptions of what they do. Rules must be inserted into a
.procmailrc, which must reside in the
user's home directory.The majority of these rules can be found in
&man.procmailex.5;.To forward all mail from user@example.com to
an external address of goodmail@example2.com::0
* ^From.*user@example.com
! goodmail@example2.comTo forward all mails shorter than 1000 bytes to an external
address of goodmail@example2.com::0
* < 1000
! goodmail@example2.comTo send all mail sent to
alternate@example.com to a mailbox called
alternate::0
* ^TOalternate@example.com
alternateTo send all mail with a subject of Spam to
/dev/null::0
^Subject:.*Spam
/dev/nullA useful recipe that parses incoming &os;.org mailing lists and
places each list in its own mailbox::0
* ^Sender:.owner-freebsd-\/[^@]+@FreeBSD.ORG
{
LISTNAME=${MATCH}
:0
* LISTNAME??^\/[^@]+
FreeBSD-${MATCH}
}
Index: head/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml (revision 46052)
@@ -1,933 +1,934 @@
Obtaining &os;
+ xml:id="mirrors">
+ Obtaining &os;CD and
DVD Sets&os; CD and DVD sets
are available from several online retailers:
&os; Mall, Inc.
2420 Sand Creek Rd C-1 #347Brentwood, CA94513USA
Phone: +1 925 240-6652
Fax: +1 925 674-0821
Email: info@freebsdmall.com
WWW: http://www.freebsdmall.com/
Getlinux
78 Rue de la Croix RochoptÉpinay-sous-Sénart91860France
Email: contact@getlinux.fr
WWW: http://www.getlinux.fr/
Dr. Hinner EDV
Kochelseestr. 11D-81371MünchenGermany
Phone: (0177) 428 419 0
Email: infow@hinner.de
WWW: http://www.hinner.de/linux/freebsd.html
Linux Center
Galernaya Street, 55Saint-Petersburg190000Russia
Phone: +7-812-309-06-86
Email: info@linuxcenter.ru
WWW: http://linuxcenter.ru/shop/freebsdFTP SitesThe official sources for &os; are available via anonymous
FTP from a worldwide set of mirror sites.
The site ftp://ftp.FreeBSD.org/pub/FreeBSD/
is well connected and allows a large number of connections to
it, but you are probably better off finding a
closer mirror site (especially if you decide to
set up some sort of mirror site).Additionally, &os; is available via anonymous
FTP from the following mirror sites. If you
choose to obtain &os; via anonymous FTP,
please try to use a site near you. The mirror sites listed as
Primary Mirror Sites typically have the entire
&os; archive (all the currently available versions for each of
the architectures) but you will probably have faster download
times from a site that is in your country or region. The
regional sites carry the most recent versions for the most
popular architecture(s) but might not carry the entire &os;
archive. All sites provide access via anonymous
FTP but some sites also provide access via
other methods. The access methods available for each site are
provided in parentheses after the hostname.
&chap.mirrors.ftp.index.inc;
&chap.mirrors.lastmod.inc;
&chap.mirrors.ftp.inc;
Using CTMCTMCTM is a method for keeping a
remote directory tree in sync with a central one. It is built
into &os; and can be used to synchronize a system with &os;'s
source repositories. It supports synchronization of an entire
repository or just a specified set of branches.CTM is specifically designed for
use on lousy or non-existent TCP/IP connections and provides
the ability for changes to be automatically sent by email. It
requires the user to obtain up to three deltas per day for the
most active branches. Update sizes are always kept as small as
possible and are typically less than 5K. About one in very ten
updates is 10-50K in size, and there will occasionally be an
update larger than 100K+.When using CTM to track &os;
development, refer to the caveats related to working directly
from the development sources rather than a pre-packaged release.
These are discussed in Tracking
a Development Branch.Little documentation exists on the process of creating
deltas or using CTM for other
purposes. Contact the &a.ctm-users.name; mailing list for
answers to questions on using
CTM.Getting DeltasThe deltas used by
CTM can be obtained either through
anonymous FTP or email.FTP deltas can be obtained from the
following mirror sites. When using anonymous
FTP to obtain
CTM deltas, select a mirror that is
geographically nearby. In case of problems, contact the
&a.ctm-users.name; mailing list.California, Bay Area, official sourceftp://ftp.FreeBSD.org/pub/FreeBSD/development/CTM/ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM/South Africa, backup server for old deltasftp://ftp.za.FreeBSD.org/pub/FreeBSD/CTM/Taiwan/R.O.C.ftp://ctm.tw.FreeBSD.org/pub/FreeBSD/development/CTM/ftp://ctm2.tw.FreeBSD.org/pub/FreeBSD/development/CTM/ftp://ctm3.tw.FreeBSD.org/pub/FreeBSD/development/CTM/To instead receive deltas through email, subscribe to one
of the ctm-src distribution lists available
from http://lists.freebsd.org/mailman/listinfo.
For example, &a.ctm-src-cur.name; supports the head
development branch and &a.ctm-src-9.name; supports the 9.X
release branch.As CTM updates arrive through
email, use ctm_rmail to unpack and apply
them. This command can be run directly from an entry in
/etc/aliases in order to automate this
process. Refer to &man.ctm.rmail.1; for more details.Regardless of the method which is used to get deltas,
CTM users should subscribe
to the &a.ctm-announce.name; mailing list as this is the
only mechanism by which CTM
announcements are posted.CTM UsageBefore CTM deltas can be used
for the first time, a starting point must be produced.One method is to apply a starter delta to
an empty directory. A starter delta can be recognized by the
XEmpty in its name, such as
src-cur.3210XEmpty.gz. The designation
following the X corresponds to the origin
of the initial seed, where
Empty is an empty directory. As a rule,
a base transition from Empty is produced
every 100 deltas. Be aware that starter deltas are large and
70 to 80 Megabytes of gzip'd data is common
for the XEmpty deltas.Another method is to copy or extract an initial source
from a RELEASE media as this can save a significant transfer
of data from the Internet.Once a base delta has been created, apply all deltas with
higher numbers. To apply the deltas:&prompt.root; cd /directory/to/store/the/stuff
&prompt.root; ctm -v -v /directory/which/stores/the/deltas/src-xxx.*Multiple deltas can be applied with a single command as
they will be processed one at a time and any deltas that are
already applied will be ignored.
CTM understands
gzip compressed deltas, which saves disk
space.To verify a delta without applying it, include
in the command line.
CTM will not actually modify the
local tree but will instead verify the integrity of the delta
to see if it would apply cleanly. Refer to &man.ctm.1; for
more information about available options and an overview of
the process CTM uses when applying
deltas.To keep the local source tree up-to-date, every time a
new delta becomes available, apply it through
CTM.Once applied, it is recommended to not delete the deltas
if it is a burden to download them again. This way, a local
copy is available in case it is needed for future disaster
recovery.Keeping Local ChangesDevelopers often experiment with and
change files in their local source tree.
CTM supports local modifications in
a limited way: before checking for the presence of a file,
it first looks for a file with the same name and a
.ctm extension. If this file exists,
CTM will operate on it instead of
the original filename.This behavior provides a simple way to maintain local
changes. Before modifying a file, make a copy with a
.ctm suffix. Make any changes to the
original filename, knowing that
CTM will only apply updates to the
file with the .ctm suffix.Other CTM OptionsFinding Out Exactly What Would Be Touched by an
UpdateTo determine the list of changes that
CTM will make to the local
source repository, use . This option
is useful for creating logs of the changes or when
performing pre- or post-processing on any of the
modified files.Making Backups Before UpdatingTo backup all of the files that would be changed by
a CTM update, specify
. This
option tells CTM to backup
all files touched by the applied
CTM delta to
backup-file.Restricting the Files Touched by an UpdateTo restrict the scope of a given
CTM update, or to extract
just a few files from a sequence of deltas, filtering
regular expressions can be specified using
, which specifies which files to
process, or , which specifies which
files to ignore.For example, to extract an up-to-date copy of
lib/libc/Makefile from a collection
of saved CTM deltas:&prompt.root; cd /directory/to/extract/to/
&prompt.root; ctm -e '^lib/libc/Makefile' /directory/which/stores/the/deltas/src-xxx.*For every file specified in a
CTM delta,
and are
applied in the order given on the command line. A file
is processed by CTM only if
it is marked as eligible after all
and options are applied.Using SubversionSubversionIntroductionAs of July 2012, &os; uses
Subversion as the primary version
control system for storing all of &os;'s source code,
documentation, and the Ports Collection.Subversion is generally a
developer tool. Most users should use
freebsd-update () to update
the &os; base system, and portsnap () to update the &os; Ports
Collection.This chapter demonstrates how to install
Subversion on a &os; system and
then use it to create a local copy of a &os; repository. It
includes a list of the available &os;
Subversion mirrors and resources to
additional information on how to use
Subversion.InstallationSubversion must be installed
before it can be used to check out the contents of any of the
repositories. If a copy of the ports tree is already present,
one can install Subversion like
this:&prompt.root; cd /usr/ports/devel/subversion
&prompt.root; make install cleanIf the ports tree is not available,
Subversion can be installed as a
package:&prompt.root; pkg install devel/subversionRunning SubversionThe svn command is used to fetch a
clean copy of the sources into a local directory. The files
in this directory are called a local working
copy.Move or delete the local directory before
using checkout.Checkout over an existing
non-svn directory can cause conflicts
between the existing files and those brought in from the
repository.Subversion uses
URLs to designate a repository, taking the
form of protocol://hostname/path.
Mirrors may support different protocols as specified below.
The first component of the path is the &os; repository to
access. There are three different repositories,
base for the &os; base system source code,
ports for the Ports Collection, and
doc for documentation. For example, the
URL
svn://svn0.us-east.FreeBSD.org/ports/head/
specifies the main branch of the ports repository on the
svn0.us-east.FreeBSD.org
mirror, using the svn protocol.A checkout from a given repository is performed with a
command like this:&prompt.root; svn checkout svn-mirror/repository/branchlwcdirwhere:svn-mirror is a URL for one
of the Subversion mirror
sites.repository is one of the
Project repositories, i.e., base,
ports, or
doc.branch depends on the
repository used. ports and
doc are mostly updated in the
head branch, while
base maintains the latest version of
-CURRENT under head and the respective
latest versions of the -STABLE branches under
stable/8 (for
8.x),
stable/9
(9.x) and
stable/10
(10.x).lwcdir is the target
directory where the contents of the specified branch
should be placed. This is usually
/usr/ports for
ports,
/usr/src for
base, and
/usr/doc for
doc.This example checks out the Ports Collection from the
western US repository using the HTTPS
protocol, placing the local working copy in
/usr/ports. If
/usr/ports is already
present but was not created by svn,
remember to rename or delete it before the checkout.&prompt.root; svn checkout https://svn0.us-west.FreeBSD.org/ports/head /usr/portsBecause the initial checkout has to download the full
branch of the remote repository, it can take a while. Please
be patient.After the initial checkout, the local working copy can be
updated by running:&prompt.root; svn update lwcdirTo update
/usr/ports created in
the example above, use:&prompt.root; svn update /usr/portsThe update is much quicker than a checkout, only
transferring files that have changed.An alternate way of updating the local working copy after
checkout is provided by the Makefile in
the /usr/ports,
/usr/src, and
/usr/doc directories.
Set SVN_UPDATE and use the
update target. For example, to
update /usr/src:&prompt.root; cd /usr/src
&prompt.root; make update SVN_UPDATE=yesSubversion Mirror
SitesSubversion RepositoryMirror SitesAll mirrors carry all repositories.The master &os; Subversion
server, svn.FreeBSD.org, is
publicly accessible, read-only. That may change in the
future, so users are encouraged to use one of the official
mirrors. To view the &os;
Subversion repositories through a
browser, use http://svnweb.FreeBSD.org/.The &os; Subversion mirror
network is still in its early days, and will likely change.
Do not count on this list of mirrors being static. In
particular, the SSL certificates of the
servers will likely change at some point.NameProtocolsLocationSSL Fingerprintsvn0.us-west.FreeBSD.orgsvn, http,
httpsUSA, CaliforniaSHA1
1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61svn0.us-east.FreeBSD.orgsvn, http,
https,
rsyncUSA, New JerseySHA1
1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61svn0.eu.FreeBSD.orgsvn, http,
https,
rsyncEurope, UKSHA1
39:B0:53:35:CE:60:C7:BB:00:54:96:96:71:10:94:BB:CE:1C:07:A7svn0.ru.FreeBSD.orgsvn, http,
https,
rsyncRussia, MoscowSHA1
F6:44:AA:B9:03:89:0E:3E:8C:4D:4D:14:F0:27:E6:C7:C1:8B:17:C5HTTPS is the preferred protocol,
providing protection against another computer pretending to be
the &os; mirror (commonly known as a man in the
middle attack) or otherwise trying to send bad
content to the end user.On the first connection
to an HTTPS mirror, the user will be asked
to verify the server fingerprint:Error validating server certificate for 'https://svn0.us-west.freebsd.org:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
- The certificate hostname does not match.
Certificate information:
- Hostname: svnmir.ysv.FreeBSD.org
- Valid: from Jul 29 22:01:21 2013 GMT until Dec 13 22:01:21 2040 GMT
- Issuer: clusteradm, FreeBSD.org, (null), CA, US (clusteradm@FreeBSD.org)
- Fingerprint: 1C:BD:85:95:11:9F:EB:75:A5:4B:C8:A3:FE:08:E4:02:73:06:1E:61
(R)eject, accept (t)emporarily or accept (p)ermanently?Compare the fingerprint shown to those listed in the table
above. If the fingerprint matches, the server security
certificate can be accepted temporarily or permanently. A
temporary certificate will expire after a single session with
the server, and the verification step will be repeated on the
next connection. Accepting the certificate permanently will
store the authentication credentials in
~/.subversion/auth/ and the user will not
be asked to verify the fingerprint again until the certificate
expires.If https cannot be used due to firewall
or other problems, svn is the next choice,
with slightly faster transfers. When neither can be used, use
http.For More InformationFor other information about using
Subversion, please see the
Subversion Book, titled
Version
Control with Subversion, or the Subversion
Documentation.Using rsyncThe following sites make &os; available through the rsync
protocol. The rsync utility works in
much the same way as the &man.rcp.1; command, but has more
options and uses the rsync remote-update protocol which
transfers only the differences between two sets of files, thus
greatly speeding up the synchronization over the network. This
is most useful if you are a mirror site for the &os;
FTP server, or the CVS repository. The
rsync suite is available for many
operating systems, on &os;, see the net/rsync
port or use the package.Czech Republicrsync://ftp.cz.FreeBSD.org/Available collections:ftp: A partial mirror of the &os;
FTP server.&os;: A full mirror of the &os;
FTP server.Netherlandsrsync://ftp.nl.FreeBSD.org/Available collections:&os;: A full mirror of the &os;
FTP server.Russiarsync://ftp.mtu.ru/Available collections:&os;: A full mirror of the &os;
FTP server.&os;-Archive: The mirror of &os; Archive
FTP server.Swedenrsync://ftp4.se.freebsd.org/Available collections:&os;: A full mirror of the &os;
FTP server.Taiwanrsync://ftp.tw.FreeBSD.org/rsync://ftp2.tw.FreeBSD.org/rsync://ftp6.tw.FreeBSD.org/Available collections:&os;: A full mirror of the &os;
FTP server.United Kingdomrsync://rsync.mirrorservice.org/Available collections:ftp.freebsd.org: A full mirror of the &os;
FTP server.United States of Americarsync://ftp-master.FreeBSD.org/This server may only be used by &os; primary mirror
sites.Available collections:&os;: The master archive of the &os;
FTP server.acl: The &os; master ACL list.rsync://ftp13.FreeBSD.org/Available collections:&os;: A full mirror of the &os;
FTP server.
Index: head/en_US.ISO8859-1/books/handbook/pgpkeys/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/pgpkeys/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/pgpkeys/chapter.xml (revision 46052)
@@ -1,38 +1,39 @@
OpenPGP Keys
+ xml:id="pgpkeys">
+ OpenPGP Keyspgp keysThe OpenPGP keys of the
FreeBSD.org officers
are shown here. These keys can be used to verify a signature or
send encrypted email to one of the officers. A full list of &os;
OpenPGP keys is available in the
PGP
Keys article. The complete keyring can be downloaded
at https://www.FreeBSD.org/doc/pgpkeyring.txt.Officers
§ion.pgpkeys-officers;
Index: head/en_US.ISO8859-1/books/handbook/preface/preface.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/preface/preface.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/preface/preface.xml (revision 46052)
@@ -1,686 +1,687 @@
Preface
+ xml:id="book-preface">
+ PrefaceIntended
AudienceThe &os; newcomer will find that the first section of this
book guides the user through the &os; 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 &os; 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
.Changes
from the Third EditionThe 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: has been added with information
about the powerful &dtrace; performance analysis tool. has been added with
information about non-native file systems in &os;, such as ZFS
from &sun;. has been added to cover the new
auditing capabilities in &os; and explain its use. has been added with
information about installing &os; on virtualization
software. has been added to cover
installation of &os; using the new installation utility,
bsdinstall.Changes
from the Second Edition (2004)The third edition was the culmination of over two years of
work by the dedicated members of the &os; 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: has been expanded with new
information about the ACPI power and resource management, the
cron system utility, and more kernel tuning
options. has been expanded with new
information about virtual private networks (VPNs), file system
access control lists (ACLs), and security advisories. is a new chapter with this edition.
It explains what MAC is and how this mechanism can be used to
secure a &os; system. 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 . has been expanded with new
information about using alternative transport agents, SMTP
authentication, UUCP, fetchmail,
procmail, and other advanced
topics. is all new with this
edition. This chapter includes information about setting up
the Apache HTTP Server,
ftpd, and setting up a server for
µsoft; &windows; clients with
Samba. Some sections from were moved here to improve
the presentation. has been expanded
with new information about using &bluetooth; devices with
&os;, 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.Changes from
the First Edition (2001)The second edition was the culmination of over two years of
work by the dedicated members of the &os; 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. was completely rewritten with
many screenshots to make it much easier for new users to
grasp the text. has been expanded to contain
additional information about processes, daemons, and
signals. has been expanded to contain
additional information about binary package
management. has been completely rewritten with
an emphasis on using modern desktop technologies such as
KDE and
GNOME on &xfree86; 4.X. has been expanded. 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. has been completely
reorganized and updated for &os; 4.X/5.X. has been substantially
updated.Many new sections have been added to . has been expanded to include more
information about configuring
sendmail. has been expanded to include
information about installing
&oracle; and
&sap.r3;.The following new topics are covered in this second
edition:..Organization of This BookThis book is split into five logically distinct sections.
The first section, Getting Started, covers
the installation and basic usage of &os;. 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 &os;. 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 &os; to a new user. It describes the
history of the &os; Project, its goals and development
model.Walks a user through the entire installation process of
&os; 9.x and later using
bsdinstall.Walks a user through the entire installation process of
&os; 8.x and earlier using
sysinstall. Some advanced
installation topics, such as installing through a serial
console, are also covered.Covers the basic commands and functionality of the
&os; 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 &os;'s innovative Ports Collection and
standard binary packages.Describes the X Window System in general and using X11
on &os; 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 &os;.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 &os;, including
information about banner pages, printer accounting, and
initial setup.Describes the &linux; compatibility features of &os;.
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 &os; system for optimum
performance. Also describes the various configuration files
used in &os; and where to find them.Describes the &os; boot process and explains how to
control this process with configuration options.Describes many different tools available to help keep
your &os; system secure, including Kerberos, IPsec and
OpenSSH.Describes the jails framework, and the improvements of
jails over the traditional chroot support of &os;.Explains what Mandatory Access Control (MAC) is and
how this mechanism can be used to secure a &os;
system.Describes what &os; 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 &os;. This includes physical disks, RAID arrays,
optical and tape media, memory-backed disks, and network
filesystems.Describes what the GEOM framework in &os; is and how
to configure various supported RAID levels.Examines support of non-native file systems in &os;,
like the Z File System from &sun;.Describes what virtualization systems offer, and how
they can be used with &os;.Describes how to use &os; in languages other than
English. Covers both system and application level
localization.Explains the differences between &os;-STABLE,
&os;-CURRENT, and &os; 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 &os;. Dynamic tracing can help locate
performance issues, by performing real time system
analysis.Explains how to connect terminals and modems to your
&os; system for both dial in and dial out
connections.Describes how to use PPP to connect to remote systems
with &os;.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 &os; 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 &os;.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 &os; media on
CDROM or DVD as well as different sites on the Internet
that allow you to download and install &os;.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 &os; users to
post questions and engage in technical conversations about
&os;.Lists the PGP fingerprints of several &os;
Developers.Conventions used
in this bookTo provide a consistent and easy to read text, several
conventions are followed throughout the book.Typographic ConventionsItalicAn 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.BoldA bold font is used for
applications, commands, and keys.User
InputKeys 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:CtrlAltDelMeaning 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:CtrlX,
CtrlSWould mean that the user is expected to type the
Ctrl and X keys simultaneously
and then to type the Ctrl and S
keys simultaneously.ExamplesExamples starting with C:\>
indicate a &ms-dos; command. Unless otherwise noted, these
commands may be executed from a Command Prompt
window in a modern µsoft.windows;
environment.E:\>tools\fdimage floppies\kern.flp A:Examples starting with &prompt.root; indicate a command that
must be invoked as the superuser in &os;. You can login as
root to type the command, or login as your
normal account and use &man.su.1; to gain
superuser privileges.&prompt.root; dd if=kern.flp of=/dev/fd0Examples starting with &prompt.user; 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.&prompt.user; topAcknowledgmentsThe 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 &os; 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, &os; Mall, Inc,
paid several contributors to improve the Handbook in preparation
for the third printed edition.
Index: head/en_US.ISO8859-1/books/handbook/serialcomms/chapter.xml
===================================================================
--- head/en_US.ISO8859-1/books/handbook/serialcomms/chapter.xml (revision 46051)
+++ head/en_US.ISO8859-1/books/handbook/serialcomms/chapter.xml (revision 46052)
@@ -1,2200 +1,2199 @@
-
Serial CommunicationsSynopsisserial communications&unix; has always had support for serial communications as
the very first &unix; machines relied on serial lines for user
input and output. Things have changed a lot from the days
when the average terminal consisted of a 10-character-per-second
serial printer and a keyboard. This chapter covers some of the
ways serial communications can be used on &os;.After reading this chapter, you will know:How to connect terminals to a &os; system.How to use a modem to dial out to remote hosts.How to allow remote users to login to a &os; system
with a modem.How to boot a &os; system from a serial console.Before reading this chapter, you should:Know how to configure and
install a custom kernel.Understand &os; permissions
and processes.Have access to the technical manual for the serial
hardware to be used with &os;.Serial Terminology and HardwareThe following terms are often used in serial
communications:bpsBits per
Secondbits-per-second
(bps) is the rate at which data is
transmitted.DTEData Terminal
EquipmentDTE
(DTE) is one of two endpoints in a
serial communication. An example would be a
computer.DCEData Communications
EquipmentDCE
(DTE) is the other endpoint in a
serial communication. Typically, it is a modem or serial
terminal.RS-232The original standard which defined hardware serial
communications. It has since been renamed to
TIA-232.When referring to communication data rates, this section
does not use the term baud. Baud refers
to the number of electrical state transitions made in a period
of time, while bps is the correct term to
use.To connect a serial terminal to a &os; system, a serial port
on the computer and the proper cable to connect to the serial
device are needed. Users who are already familiar with serial
hardware and cabling can safely skip this section.Serial Cables and PortsThere are several different kinds of serial cables. The
two most common types are null-modem cables and standard
RS-232 cables. The documentation for the
hardware should describe the type of cable required.These two types of cables differ in how the wires are
connected to the connector. Each wire represents a signal,
with the defined signals summarized in . A standard serial
cable passes all of the RS-232C signals
straight through. For example, the Transmitted
Data pin on one end of the cable goes to the
Transmitted Data pin on the other end. This is
the type of cable used to connect a modem to the &os; system,
and is also appropriate for some terminals.A null-modem cable switches the Transmitted
Data pin of the connector on one end with the
Received Data pin on the other end. The
connector can be either a DB-25 or a
DB-9.A null-modem cable can be constructed using the pin
connections summarized in ,
, and . While the standard calls for
a straight-through pin 1 to pin 1 Protective
Ground line, it is often omitted. Some terminals
work using only pins 2, 3, and 7, while others require
different configurations. When in doubt, refer to the
documentation for the hardware.null-modem cable
RS-232C Signal NamesAcronymsNamesRDReceived DataTDTransmitted DataDTRData Terminal ReadyDSRData Set ReadyDCDData Carrier DetectSGSignal GroundRTSRequest to SendCTSClear to Send
When one pin at one end connects to a pair of pins at
the other end, it is usually implemented with one short wire
between the pair of pins in their connector and a long wire
to the other single pin.Serial ports are the devices through which data is
transferred between the &os; host computer and the terminal.
Several kinds of serial ports exist. Before purchasing or
constructing a cable, make sure it will fit the ports on the
terminal and on the &os; system.Most terminals have DB-25 ports.
Personal computers may have DB-25 or
DB-9 ports. A multiport serial card may
have RJ-12 or RJ-45/
ports. See the documentation that accompanied the hardware
for specifications on the kind of port or visually verify the
type of port.In &os;, each serial port is accessed through an entry in
/dev. There are two different kinds of
entries:Call-in ports are named
/dev/ttyuN
where N is the port number,
starting from zero. If a terminal is connected to the
first serial port (COM1), use
/dev/ttyu0 to refer to the terminal.
If the terminal is on the second serial port
(COM2), use
/dev/ttyu1, and so forth. Generally,
the call-in port is used for terminals. Call-in ports
require that the serial line assert the Data
Carrier Detect signal to work correctly.Call-out ports are named
/dev/cuauN
on &os; versions 10.x and higher and
/dev/cuadN
on &os; versions 9.x and lower. Call-out ports are
usually not used for terminals, but are used for modems.
The call-out port can be used if the serial cable or the
terminal does not support the Data Carrier
Detect signal.&os; also provides initialization devices
(/dev/ttyuN.init
and
/dev/cuauN.init
or
/dev/cuadN.init)
and locking devices
(/dev/ttyuN.lock
and
/dev/cuauN.lock
or
/dev/cuadN.lock).
The initialization devices are used to initialize
communications port parameters each time a port is opened,
such as crtscts for modems which use
RTS/CTS signaling for flow control. The
locking devices are used to lock flags on ports to prevent
users or programs changing certain parameters. Refer to
&man.termios.4;, &man.sio.4;, and &man.stty.1; for information
on terminal settings, locking and initializing devices, and
setting terminal options, respectively.Serial Port ConfigurationBy default, &os; supports four serial ports which are
commonly known as COM1,
COM2, COM3, and
COM4. &os; also supports dumb multi-port
serial interface cards, such as the BocaBoard 1008 and 2016,
as well as more intelligent multi-port cards such as those
made by Digiboard. However, the default kernel only looks for
the standard COM ports.To see if the system recognizes the serial ports, look for
system boot messages that start with
uart:&prompt.root; grep uart /var/run/dmesg.bootIf the system does not recognize all of the needed serial
ports, additional entries can be added to
/boot/device.hints. This file already
contains hint.uart.0.* entries for
COM1 and hint.uart.1.*
entries for COM2. When adding a port
entry for COM3 use
0x3E8, and for COM4
use 0x2E8. Common IRQ
addresses are 5 for
COM3 and 9 for
COM4.ttyucuauTo determine the default set of terminal
I/O settings used by the port, specify its
device name. This example determines the settings for the
call-in port on COM2:&prompt.root; stty -a -f /dev/ttyu1System-wide initialization of serial devices is controlled
by /etc/rc.d/serial. This file affects
the default settings of serial devices. To change the
settings for a device, use stty. By
default, the changed settings are in effect until the device
is closed and when the device is reopened, it goes back to the
default set. To permanently change the default set, open and
adjust the settings of the initialization device. For
example, to turn on mode, 8 bit
communication, and flow control for
ttyu5, type:&prompt.root; stty -f /dev/ttyu5.init clocal cs8 ixon ixoffrc filesrc.serialTo prevent certain settings from being changed by an
application, make adjustments to the locking device. For
example, to lock the speed of ttyu5 to
57600 bps, type:&prompt.root; stty -f /dev/ttyu5.lock 57600Now, any application that opens ttyu5
and tries to change the speed of the port will be stuck with
57600 bps.TerminalsSeanKellyContributed by terminalsTerminals provide a convenient and low-cost way to access
a &os; system when not at the computer's console or on a
connected network. This section describes how to use terminals
with &os;.The original &unix; systems did not have consoles. Instead,
users logged in and ran programs through terminals that were
connected to the computer's serial ports.The ability to establish a login session on a serial port
still exists in nearly every &unix;-like operating system
today, including &os;. By using a terminal attached to an
unused serial port, a user can log in and run any text program
that can normally be run on the console or in an
xterm window.Many terminals can be attached to a &os; system. An older
spare computer can be used as a terminal wired into a more
powerful computer running &os;. This can turn what might
otherwise be a single-user computer into a powerful
multiple-user system.&os; supports three types of terminals:Dumb terminalsDumb terminals are specialized hardware that connect
to computers over serial lines. They are called
dumb because they have only enough
computational power to display, send, and receive text.
No programs can be run on these devices. Instead, dumb
terminals connect to a computer that runs the needed
programs.There are hundreds of kinds of dumb terminals made by
many manufacturers, and just about any kind will work with
&os;. Some high-end terminals can even display graphics,
but only certain software packages can take advantage of
these advanced features.Dumb terminals are popular in work environments where
workers do not need access to graphical
applications.Computers Acting as TerminalsSince a dumb terminal has just enough ability to
display, send, and receive text, any spare computer can
be a dumb terminal. All that is needed is the proper
cable and some terminal emulation
software to run on the computer.This configuration can be useful. For example, if one
user is busy working at the &os; system's console, another
user can do some text-only work at the same time from a
less powerful personal computer hooked up as a terminal to
the &os; system.There are at least two utilities in the base-system of
&os; that can be used to work through a serial connection:
&man.cu.1; and &man.tip.1;.For example, to connect from a client system that runs
&os; to the serial connection of another system:&prompt.root; cu -l serial-port-deviceReplace serial-port-device
with the device name of the connected serial port. These
device files are called
/dev/cuauN
on &os; versions 10.x and higher and
/dev/cuadN
on &os; versions 9.x and lower. In either case,
N is the serial port number,
starting from zero. This means that
COM1 is
/dev/cuau0 or
/dev/cuad0 in &os;.Additional programs are available through the Ports
Collection, such as
comms/minicom.X TerminalsX terminals are the most sophisticated kind of
terminal available. Instead of connecting to a serial
port, they usually connect to a network like Ethernet.
Instead of being relegated to text-only applications, they
can display any &xorg;
application.This chapter does not cover the setup, configuration,
or use of X terminals.Terminal ConfigurationThis section describes how to configure a &os; system to
enable a login session on a serial terminal. It assumes that
the system recognizes the serial port to which the terminal is
connected and that the terminal is connected with the correct
cable.In &os;, init reads
/etc/ttys and starts a
getty process on the available terminals.
The getty process is responsible for
reading a login name and starting the login
program. The ports on the &os; system which allow logins are
listed in /etc/ttys. For example, the
first virtual console, ttyv0, has an
entry in this file, allowing logins on the console. This file
also contains entries for the other virtual consoles, serial
ports, and pseudo-ttys. For a hardwired terminal, the serial
port's /dev entry is listed without the
/dev part. For example,
/dev/ttyv0 is listed as
ttyv0.The default /etc/ttys configures
support for the first four serial ports,
ttyu0 through
ttyu3:ttyu0 "/usr/libexec/getty std.9600" dialup off secure
ttyu1 "/usr/libexec/getty std.9600" dialup off secure
ttyu2 "/usr/libexec/getty std.9600" dialup off secure
ttyu3 "/usr/libexec/getty std.9600" dialup off secureWhen attaching a terminal to one of those ports, modify
the default entry to set the required speed and terminal type,
to turn the device on and, if needed, to
change the port's secure setting. If the
terminal is connected to another port, add an entry for the
port. configures two terminals in
/etc/ttys. The first entry configures a
Wyse-50 connected to COM2. The second
entry configures an old computer running
Procomm terminal software emulating
a VT-100 terminal. The computer is connected to the sixth
serial port on a multi-port serial card.Configuring Terminal Entriesttyu1 "/usr/libexec/getty std.38400" wy50 on insecure
ttyu5 "/usr/libexec/getty std.19200" vt100 on insecureThe first field specifies the device name of the
serial terminal.The second field tells getty to
initialize and open the line, set the line speed, prompt
for a user name, and then execute the
login program. The optional
getty type configures
characteristics on the terminal line, like
bps rate and parity. The available
getty types are listed in
/etc/gettytab. In almost all
cases, the getty types that start with
std will work for hardwired terminals
as these entries ignore parity. There is a
std entry for each
bps rate from 110 to 115200. Refer
to &man.gettytab.5; for more information.When setting the getty type, make sure to match the
communications settings used by the terminal. For this
example, the Wyse-50 uses no parity and connects at
38400 bps. The computer uses no parity and
connects at 19200 bps.The third field is the type of terminal. For
dial-up ports, unknown or
dialup is typically used since users
may dial up with practically any type of terminal or
software. Since the terminal type does not change for
hardwired terminals, a real terminal type from
/etc/termcap can be specified. For
this example, the Wyse-50 uses the real terminal type
while the computer running
Procomm is set to emulate a
VT-100.The fourth field specifies if the port should be
enabled. To enable logins on this port, this field must
be set to on.The final field is used to specify whether the port
is secure. Marking a port as secure
means that it is trusted enough to allow root to login from that
port. Insecure ports do not allow root logins. On an
insecure port, users must login from unprivileged
accounts and then use su or a similar
mechanism to gain superuser privileges, as described in
. For security
reasons, it is recommended to change this setting to
insecure.After making any changes to
/etc/ttys, send a SIGHUP (hangup) signal
to the init process to force it to re-read
its configuration file:&prompt.root; kill -HUP 1Since init is always the first process
run on a system, it always has a process ID
of 1.If everything is set up correctly, all cables are in
place, and the terminals are powered up, a
getty process should now be running on each
terminal and login prompts should be available on each
terminal.Troubleshooting the ConnectionEven with the most meticulous attention to detail,
something could still go wrong while setting up a terminal.
Here is a list of common symptoms and some suggested
fixes.If no login prompt appears, make sure the terminal is
plugged in and powered up. If it is a personal computer
acting as a terminal, make sure it is running terminal
emulation software on the correct serial port.Make sure the cable is connected firmly to both the
terminal and the &os; computer. Make sure it is the right
kind of cable.Make sure the terminal and &os; agree on the
bps rate and parity settings. For a video
display terminal, make sure the contrast and brightness
controls are turned up. If it is a printing terminal, make
sure paper and ink are in good supply.Use ps to make sure that a
getty process is running and serving the
terminal. For example, the following listing shows that a
getty is running on the second serial port,
ttyu1, and is using the
std.38400 entry in
/etc/gettytab:&prompt.root; ps -axww|grep ttyu
22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyu1If no getty process is running, make
sure the port is enabled in /etc/ttys.
Remember to run kill -HUP 1 after modifying
/etc/ttys.If the getty process is running but the
terminal still does not display a login prompt, or if it
displays a prompt but will not accept typed input, the
terminal or cable may not support hardware handshaking. Try
changing the entry in /etc/ttys from
std.38400 to
3wire.38400, then run kill -HUP
1 after modifying /etc/ttys.
The 3wire entry is similar to
std, but ignores hardware handshaking. The
baud rate may need to be reduced or software flow control
enabled when using 3wire to prevent buffer
overflows.If garbage appears instead of a login prompt, make sure
the terminal and &os; agree on the bps rate
and parity settings. Check the getty
processes to make sure the correct
getty type is in use. If not, edit
/etc/ttys and run kill
-HUP 1.If characters appear doubled and the password appears when
typed, switch the terminal, or the terminal emulation
software, from half duplex or local
echo to full duplex.Dial-in ServiceGuyHelmerContributed by SeanKellyAdditions by dial-in serviceConfiguring a &os; system for dial-in service is similar to
configuring terminals, except that modems are used instead of
terminal devices. &os; supports both external and internal
modems.External modems are more convenient because they often can
be configured via parameters stored in non-volatile
RAM and they usually provide lighted
indicators that display the state of important
RS-232 signals, indicating whether the modem
is operating properly.Internal modems usually lack non-volatile
RAM, so their configuration may be limited to
setting DIP switches. If the internal modem
has any signal indicator lights, they are difficult to view when
the system's cover is in place.modemWhen using an external modem, a proper cable is needed. A
standard RS-232C serial cable should
suffice.&os; needs the RTS and
CTS signals for flow control at speeds above
2400 bps, the CD signal to detect when a
call has been answered or the line has been hung up, and the
DTR signal to reset the modem after a session
is complete. Some cables are wired without all of the needed
signals, so if a login session does not go away when the line
hangs up, there may be a problem with the cable. Refer to for more information about these
signals.Like other &unix;-like operating systems, &os; uses the
hardware signals to find out when a call has been answered or a
line has been hung up and to hangup and reset the modem after a
call. &os; avoids sending commands to the modem or watching for
status reports from the modem.&os; supports the NS8250,
NS16450, NS16550, and
NS16550A-based RS-232C
(CCITT V.24) communications interfaces. The
8250 and 16450 devices have single-character buffers. The 16550
device provides a 16-character buffer, which allows for better
system performance. Bugs in plain 16550 devices prevent the use
of the 16-character buffer, so use 16550A devices if possible.
Because single-character-buffer devices require more work by the
operating system than the 16-character-buffer devices,
16550A-based serial interface cards are preferred. If the
system has many active serial ports or will have a heavy load,
16550A-based cards are better for low-error-rate
communications.The rest of this section demonstrates how to configure a
modem to receive incoming connections, how to communicate with
the modem, and offers some troubleshooting tips.Modem ConfigurationgettyAs with terminals, init spawns a
getty process for each configured serial
port used for dial-in connections. When a user dials the
modem's line and the modems connect, the Carrier
Detect signal is reported by the modem. The kernel
notices that the carrier has been detected and instructs
getty to open the port and display a
login: prompt at the specified initial line
speed. In a typical configuration, if garbage characters are
received, usually due to the modem's connection speed being
different than the configured speed, getty
tries adjusting the line speeds until it receives reasonable
characters. After the user enters their login name,
getty executes login,
which completes the login process by asking for the user's
password and then starting the user's shell./usr/bin/loginThere are two schools of thought regarding dial-up modems.
One confiuration method is to set the modems and systems so
that no matter at what speed a remote user dials in, the
dial-in RS-232 interface runs at a locked
speed. The benefit of this configuration is that the remote
user always sees a system login prompt immediately. The
downside is that the system does not know what a user's true
data rate is, so full-screen programs like
Emacs will not adjust their
screen-painting methods to make their response better for
slower connections.The second method is to configure the
RS-232 interface to vary its speed based on
the remote user's connection speed. Because
getty does not understand any particular
modem's connection speed reporting, it gives a
login: message at an initial speed and
watches the characters that come back in response. If the
user sees junk, they should press Enter until
they see a recognizable prompt. If the data rates do not
match, getty sees anything the user types
as junk, tries the next speed, and gives the
login: prompt again. This procedure normally
only takes a keystroke or two before the user sees a good
prompt. This login sequence does not look as clean as the
locked-speed method, but a user on a low-speed connection
should receive better interactive response from full-screen
programs.When locking a modem's data communications rate at a
particular speed, no changes to
/etc/gettytab should be needed. However,
for a matching-speed configuration, additional entries may be
required in order to define the speeds to use for the modem.
This example configures a 14.4 Kbps modem with a top
interface speed of 19.2 Kbps using 8-bit, no parity
connections. It configures getty to start
the communications rate for a V.32bis connection at
19.2 Kbps, then cycles through 9600 bps,
2400 bps, 1200 bps, 300 bps, and back to
19.2 Kbps. Communications rate cycling is implemented
with the nx= (next table) capability. Each
line uses a tc= (table continuation) entry
to pick up the rest of the settings for a particular data
rate.#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
:nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
:nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
:nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
:nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
:nx=V9600:tc=std.19200:For a 28.8 Kbps modem, or to take advantage of
compression on a 14.4 Kbps modem, use a higher
communications rate, as seen in this example:#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
:nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
:nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
:nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
:nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
:nx=VH9600:tc=std.57600:For a slow CPU or a heavily loaded
system without 16550A-based serial ports, this configuration
may produce siosilo errors at 57.6 Kbps./etc/ttysThe configuration of /etc/ttys is
similar to , but a different
argument is passed to getty and
dialup is used for the terminal type.
Replace xxx with the process
init will run on the device:ttyu0 "/usr/libexec/getty xxx" dialup onThe dialup terminal type can be
changed. For example, setting vt102 as the
default terminal type allows users to use
VT102 emulation on their remote
systems.For a locked-speed configuration, specify the speed with
a valid type listed in /etc/gettytab.
This example is for a modem whose port speed is locked at
19.2 Kbps:ttyu0 "/usr/libexec/getty std.19200" dialup onIn a matching-speed configuration, the entry needs to
reference the appropriate beginning auto-baud
entry in /etc/gettytab. To continue the
example for a matching-speed modem that starts at
19.2 Kbps, use this entry:ttyu0 "/usr/libexec/getty V19200" dialup onAfter editing /etc/ttys, wait until
the modem is properly configured and connected before
signaling init:&prompt.root; kill -HUP 1rc filesrc.serialHigh-speed modems, like V.32,
V.32bis, and V.34
modems, use hardware (RTS/CTS) flow
control. Use stty to set the hardware flow
control flag for the modem port. This example sets the
crtscts flag on COM2's
dial-in and dial-out initialization devices:&prompt.root; stty -f /dev/ttyu1.init crtscts
&prompt.root; stty -f /dev/cuau1.init crtsctsTroubleshootingThis section provides a few tips for troubleshooting a
dial-up modem that will not connect to a &os; system.Hook up the modem to the &os; system and boot the system.
If the modem has status indication lights, watch to see
whether the modem's DTR indicator lights
when the login: prompt appears on the
system's console. If it lights up, that should mean that &os;
has started a getty process on the
appropriate communications port and is waiting for the modem
to accept a call.If the DTR indicator does not light,
login to the &os; system through the console and type
ps ax to see if &os; is running a
getty process on the correct port: 114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyu0If the second column contains a d0
instead of a ?? and the modem has not
accepted a call yet, this means that getty
has completed its open on the communications port. This could
indicate a problem with the cabling or a misconfigured modem
because getty should not be able to open
the communications port until the carrier detect signal has
been asserted by the modem.If no getty processes are waiting to
open the port, double-check that the entry for the port is
correct in /etc/ttys. Also, check
/var/log/messages to see if there are
any log messages from init or
getty.Next, try dialing into the system. Be sure to use 8 bits,
no parity, and 1 stop bit on the remote system. If a prompt
does not appear right away, or the prompt shows garbage, try
pressing Enter about once per second. If
there is still no login: prompt,
try sending a BREAK. When using a
high-speed modem, try dialing again after locking the
dialing modem's interface speed.If there is still no login: prompt, check
/etc/gettytab again and double-check
that:The initial capability name specified in the entry in
/etc/ttys matches the name of a
capability in /etc/gettytab.Each nx= entry matches another
gettytab capability name.Each tc= entry matches another
gettytab capability name.If the modem on the &os; system will not answer, make
sure that the modem is configured to answer the phone when
DTR is asserted. If the modem seems to be
configured correctly, verify that the
DTR line is asserted by checking the
modem's indicator lights.If it still does not work, try sending an email
to the &a.questions; describing the modem and the
problem.Dial-out Servicedial-out serviceThe following are tips for getting the host to connect over
the modem to another computer. This is appropriate for
establishing a terminal session with a remote host.This kind of connection can be helpful to get a file on the
Internet if there are problems using PPP. If PPP is not
working, use the terminal session to FTP the needed file. Then
use zmodem to transfer it to the machine.Using a Stock Hayes ModemA generic Hayes dialer is built into
tip. Use at=hayes in
/etc/remote.The Hayes driver is not smart enough to recognize some of
the advanced features of newer modems messages like
BUSY, NO DIALTONE, or
CONNECT 115200. Turn those messages off
when using tip with
ATX0&W.The dial timeout for tip is 60
seconds. The modem should use something less, or else
tip will think there is a communication
problem. Try ATS7=45&W.Using AT Commands/etc/remoteCreate a direct entry in
/etc/remote. For example, if the modem
is hooked up to the first serial port,
/dev/cuau0, use the following
line:cuau0:dv=/dev/cuau0:br#19200:pa=noneUse the highest bps rate the modem
supports in the br capability. Then, type
tip cuau0 to connect to the modem.Or, use cu as root with the following
command:&prompt.root; cu -lline -sspeedline is the serial port, such
as /dev/cuau0, and
speed is the speed, such as
57600. When finished entering the AT
commands, type ~. to exit.The @ Sign Does Not WorkThe @ sign in the phone number
capability tells tip to look in
/etc/phones for a phone number. But, the
@ sign is also a special character in
capability files like /etc/remote, so it
needs to be escaped with a backslash:pn=\@Dialing from the Command LinePut a generic entry in
/etc/remote. For example:tip115200|Dial any phone number at 115200 bps:\
:dv=/dev/cuau0:br#115200:at=hayes:pa=none:du:
tip57600|Dial any phone number at 57600 bps:\
:dv=/dev/cuau0:br#57600:at=hayes:pa=none:du:This should now work:&prompt.root; tip -115200 5551234Users who prefer cu over
tip, can use a generic
cu entry:cu115200|Use cu to dial any number at 115200bps:\
:dv=/dev/cuau1:br#57600:at=hayes:pa=none:du:and type:&prompt.root; cu 5551234 -s 115200Setting the bps RatePut in an entry for tip1200 or
cu1200, but go ahead and use whatever
bps rate is appropriate with the
br capability.
tip thinks a good default is 1200 bps
which is why it looks for a tip1200 entry.
1200 bps does not have to be used, though.Accessing a Number of Hosts Through a Terminal
ServerRather than waiting until connected and typing
CONNECT host
each time, use tip's cm
capability. For example, these entries in
/etc/remote will let you type
tip pain or tip muffin
to connect to the hosts pain or
muffin, and tip
deep13 to connect to the terminal server.pain|pain.deep13.com|Forrester's machine:\
:cm=CONNECT pain\n:tc=deep13:
muffin|muffin.deep13.com|Frank's machine:\
:cm=CONNECT muffin\n:tc=deep13:
deep13:Gizmonics Institute terminal server:\
:dv=/dev/cuau2:br#38400:at=hayes:du:pa=none:pn=5551234:Using More Than One Line with
tipThis is often a problem where a university has several
modem lines and several thousand students trying to use
them.Make an entry in /etc/remote and use
@ for the pn
capability:big-university:\
:pn=\@:tc=dialout
dialout:\
:dv=/dev/cuau3:br#9600:at=courier:du:pa=none:Then, list the phone numbers in
/etc/phones:big-university 5551111
big-university 5551112
big-university 5551113
big-university 5551114tip will try each number in the listed
order, then give up. To keep retrying, run
tip in a while
loop.Using the Force CharacterCtrlP is the default force character,
used to tell tip that the next character is
literal data. The force character can be set to any other
character with the ~s escape, which means
set a variable.Type
~sforce=single-char
followed by a newline. single-char
is any single character. If
single-char is left out, then the
force character is the null character, which is accessed by
typing
Ctrl2
or CtrlSpace. A pretty good value for
single-char is
ShiftCtrl6, which is only used on some terminal
servers.To change the force character, specify the following in
~/.tiprc:force=single-charUpper Case CharactersThis happens when
CtrlA is pressed, which is tip's
raise character, specially designed for people
with broken caps-lock keys. Use ~s to set
raisechar to something reasonable. It can
be set to be the same as the force character, if neither
feature is used.Here is a sample ~/.tiprc for
Emacs users who need to type
Ctrl2 and CtrlA:force=^^
raisechar=^^The ^^ is
ShiftCtrl6.File Transfers with tipWhen talking to another &unix;-like operating system,
files can be sent and received using ~p
(put) and ~t (take). These commands run
cat and echo on the
remote system to accept and send files. The syntax is:~plocal-fileremote-file~tremote-filelocal-fileThere is no error checking, so another protocol, like
zmodem, should probably be used.Using zmodem with
tip?To receive files, start the sending program on the remote
end. Then, type ~C rz to begin receiving
them locally.To send files, start the receiving program on the remote
end. Then, type ~C sz
files to send them to the
remote system.Setting Up the Serial ConsoleKazutakaYOKOTAContributed by BillPaulBased on a document by serial console&os; has the ability to boot a system with a dumb
terminal on a serial port as a console. This configuration is
useful for system administrators who wish to install &os; on
machines that have no keyboard or monitor attached, and
developers who want to debug the kernel or device
drivers.As described in , &os; employs a three
stage bootstrap. The first two stages are in the boot block
code which is stored at the beginning of the &os; slice on the
boot disk. The boot block then loads and runs the boot loader
as the third stage code.In order to set up booting from a serial console, the boot
block code, the boot loader code, and the kernel need to be
configured.Quick Serial Console ConfigurationThis section provides a fast overview of setting up the
serial console. This procedure can be used when the dumb
terminal is connected to COM1.Configuring a Serial Console on
COM1Connect the serial cable to
COM1 and the controlling
terminal.To configure boot messages to display on the serial
console, issue the following command as the
superuser:&prompt.root; echo 'console="comconsole"' >> /boot/loader.confEdit /etc/ttys and change
off to on and
dialup to vt100 for
the ttyu0 entry. Otherwise, a
password will not be required to connect via the serial
console, resulting in a potential security hole.Reboot the system to see if the changes took
effect.If a different configuration is required, see the next
section for a more in-depth configuration explanation.In-Depth Serial Console ConfigurationThis section provides a more detailed explanation of the
steps needed to setup a serial console in &os;.Configuring a Serial ConsolePrepare a serial cable.null-modem cableUse either a null-modem cable or a standard serial
cable and a null-modem adapter. See for a discussion on serial
cables.Unplug the keyboard.Many systems probe for the keyboard during the
Power-On Self-Test (POST) and will
generate an error if the keyboard is not detected. Some
machines will refuse to boot until the keyboard is plugged
in.If the computer complains about the error, but boots
anyway, no further configuration is needed.If the computer refuses to boot without a keyboard
attached, configure the BIOS so that it
ignores this error. Consult the motherboard's manual for
details on how to do this.Try setting the keyboard to Not
installed in the BIOS.
This setting tells the BIOS not to
probe for a keyboard at power-on so it should not
complain if the keyboard is absent. If that option is
not present in the BIOS, look for an
Halt on Error option instead. Setting
this to All but Keyboard or to No
Errors will have the same effect.If the system has a &ps2; mouse, unplug it as well.
&ps2; mice share some hardware with the keyboard and
leaving the mouse plugged in can fool the keyboard probe
into thinking the keyboard is still there.While most systems will boot without a keyboard,
quite a few will not boot without a graphics adapter.
Some systems can be configured to boot with no graphics
adapter by changing the graphics adapter
setting in the BIOS configuration to
Not installed. Other systems do not
support this option and will refuse to boot if there is
no display hardware in the system. With these machines,
leave some kind of graphics card plugged in, even if it
is just a junky mono board. A monitor does not need to
be attached.Plug a dumb terminal, an old computer with a modem
program, or the serial port on another &unix; box into the
serial port.Add the appropriate hint.sio.*
entries to /boot/device.hints for the
serial port. Some multi-port cards also require kernel
configuration options. Refer to &man.sio.4; for the
required options and device hints for each supported
serial port.Create boot.config in the root
directory of the a partition on the
boot drive.This file instructs the boot block code how to boot
the system. In order to activate the serial console, one
or more of the following options are needed. When using
multiple options, include them all on the same
line:Toggles between the internal and serial
consoles. Use this to switch console devices. For
instance, to boot from the internal (video) console,
use to direct the boot loader
and the kernel to use the serial port as its console
device. Alternatively, to boot from the serial
port, use to tell the boot
loader and the kernel to use the video display as
the console instead.Toggles between the single and dual console
configurations. In the single configuration, the
console will be either the internal console (video
display) or the serial port, depending on the state
of . In the dual console
configuration, both the video display and the
serial port will become the console at the same
time, regardless of the state of
. However, the dual console
configuration takes effect only while the boot
block is running. Once the boot loader gets
control, the console specified by
becomes the only
console.Makes the boot block probe the keyboard. If no
keyboard is found, the and
options are automatically
set.Due to space constraints in the current
version of the boot blocks, is
capable of detecting extended keyboards only.
Keyboards with less than 101 keys and without F11
and F12 keys may not be detected. Keyboards on
some laptops may not be properly found because of
this limitation. If this is the case, do not use
.Use either to select the console
automatically or to activate the
serial console. Refer to &man.boot.8; and
&man.boot.config.5; for more details.The options, except for , are
passed to the boot loader. The boot loader will
determine whether the internal video or the serial port
should become the console by examining the state of
. This means that if
is specified but
is not specified in /boot.config, the
serial port can be used as the console only during the
boot block as the boot loader will use the internal video
display as the console.Boot the machine.When &os; starts, the boot blocks echo the contents of
/boot.config to the console. For
example:/boot.config: -P
Keyboard: noThe second line appears only if is
in /boot.config and indicates the
presence or absence of the keyboard. These messages go
to either the serial or internal console, or both,
depending on the option in
/boot.config:OptionsMessage goes tononeinternal consoleserial consoleserial and internal consolesserial and internal consoles, keyboard presentinternal console, keyboard absentserial consoleAfter the message, there will be a small pause before
the boot blocks continue loading the boot loader and
before any further messages are printed to the console.
Under normal circumstances, there is no need to interrupt
the boot blocks, but one can do so in order to make sure
things are set up correctly.Press any key, other than Enter, at
the console to interrupt the boot process. The boot
blocks will then prompt for further action:>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:Verify that the above message appears on either the
serial or internal console, or both, according to the
options in /boot.config. If the
message appears in the correct console, press
Enter to continue the boot
process.If there is no prompt on the serial terminal,
something is wrong with the settings. Enter
then Enter or
Return to tell the boot block (and then
the boot loader and the kernel) to choose the serial port
for the console. Once the system is up, go back and check
what went wrong.During the third stage of the boot process, one can still
switch between the internal console and the serial console by
setting appropriate environment variables in the boot loader.
See &man.loader.8; for more
information.This line in /boot/loader.conf or
/boot/loader.conf.local configures the
boot loader and the kernel to send their boot messages to
the serial console, regardless of the options in
/boot.config:console="comconsole"That line should be the first line of
/boot/loader.conf so that boot messages
are displayed on the serial console as early as
possible.If that line does not exist, or if it is set to
console="vidconsole", the boot loader and
the kernel will use whichever console is indicated by
in the boot block. See
&man.loader.conf.5; for more information.At the moment, the boot loader has no option
equivalent to in the boot block, and
there is no provision to automatically select the internal
console and the serial console based on the presence of the
keyboard.While it is not required, it is possible to provide a
login prompt over the serial line. To
configure this, edit the entry for the serial port in
/etc/ttys using the instructions in
. If the speed of the serial
port has been changed, change std.9600 to
match the new setting.Setting a Faster Serial Port SpeedBy default, the serial port settings are 9600 baud, 8
bits, no parity, and 1 stop bit. To change the default
console speed, use one of the following options:Edit /etc/make.conf and set
BOOT_COMCONSOLE_SPEED to the new
console speed. Then, recompile and install the boot
blocks and the boot loader:&prompt.root; cd /sys/boot
&prompt.root; make clean
&prompt.root; make
&prompt.root; make installIf the serial console is configured in some other way
than by booting with , or if the serial
console used by the kernel is different from the one used
by the boot blocks, add the following option, with the
desired speed, to a custom kernel configuration file and
compile a new kernel:options CONSPEED=19200Add the boot option to
/boot.config, replacing
19200 with the speed to
use.Add the following options to
/boot/loader.conf. Replace
115200 with the speed to
use.boot_multicons="YES"
boot_serial="YES"
comconsole_speed="115200"
console="comconsole,vidconsole"Entering the DDB Debugger from the Serial LineTo configure the ability to drop into the kernel debugger
from the serial console, add the following options to a custom
kernel configuration file and compile the kernel using the
instructions in . Note that
while this is useful for remote diagnostics, it is also
dangerous if a spurious BREAK is generated on the serial port.
Refer to &man.ddb.4; and &man.ddb.8; for more information
about the kernel debugger.options BREAK_TO_DEBUGGER
options DDB