501 lines
19 KiB
XML
501 lines
19 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
|
|
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
|
|
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
|
|
<info>
|
|
<title>FreeBSD Quickstart Guide for &linux; Users</title>
|
|
|
|
<authorgroup>
|
|
<author><personname><firstname>John</firstname><surname>Ferrell</surname></personname></author>
|
|
</authorgroup>
|
|
|
|
<copyright>
|
|
<year>2008</year>
|
|
<holder>The FreeBSD Documentation Project</holder>
|
|
</copyright>
|
|
|
|
<pubdate>$FreeBSD$</pubdate>
|
|
|
|
<releaseinfo>$FreeBSD$</releaseinfo>
|
|
|
|
<legalnotice xml:id="trademarks" role="trademarks">
|
|
&tm-attrib.freebsd;
|
|
&tm-attrib.linux;
|
|
&tm-attrib.intel;
|
|
&tm-attrib.redhat;
|
|
&tm-attrib.unix;
|
|
&tm-attrib.general;
|
|
</legalnotice>
|
|
|
|
<abstract>
|
|
<para>This document is intended to quickly familiarize
|
|
intermediate to advanced &linux; users with the basics of
|
|
&os;.</para>
|
|
</abstract>
|
|
</info>
|
|
|
|
<sect1 xml:id="intro">
|
|
<title>Introduction</title>
|
|
|
|
<para>This document highlights some of the technical differences
|
|
between &os; and &linux; so that intermediate to advanced
|
|
&linux; users can quickly familiarize themselves with the basics
|
|
of &os;.</para>
|
|
|
|
<para>This document assumes that &os; is already installed. Refer
|
|
to the <link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/bsdinstall.html">
|
|
Installing &os;</link> chapter of the &os; Handbook for
|
|
help with the installation process.</para>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="shells">
|
|
<title>Default Shell</title>
|
|
|
|
<para>&linux; users are often surprised to find that
|
|
<application>Bash</application> is not the default shell in
|
|
&os;. In fact, <application>Bash</application> is not even in
|
|
the default installation. Instead, &os; uses &man.tcsh.1; as
|
|
the default shell. However, <application>Bash</application> and
|
|
other shells are available for installation using the &os; <link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/ports.html">Packages
|
|
and Ports Collection</link>.</para>
|
|
|
|
<para>After installing another shell, use &man.chsh.1; to change
|
|
a user's default shell. It is recommended that the
|
|
<systemitem class="username">root</systemitem> user's default
|
|
shell remain unchanged since shells which are not included in
|
|
the base distribution are installed to
|
|
<filename>/usr/local/bin</filename>. In the event of a problem,
|
|
the file system where <filename>/usr/local/bin</filename> is
|
|
located may not be mounted. In this case, <systemitem
|
|
class="username">root</systemitem> would not have access to
|
|
its default shell, preventing <systemitem
|
|
class="username">root</systemitem> from logging in and fixing
|
|
the problem.</para>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="software">
|
|
<title>Packages and Ports: Adding Software in &os;</title>
|
|
|
|
<para>&os; provides two methods for installing applications:
|
|
binary packages and compiled ports. Each method has its own
|
|
benefits:</para>
|
|
|
|
<itemizedlist>
|
|
<title>Binary Packages</title>
|
|
|
|
<listitem>
|
|
<simpara>Faster installation as compared to
|
|
compiling large applications.</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara>Does not require an understanding of how to
|
|
compile software.</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara>No need to install a compiler.</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<itemizedlist>
|
|
<title>Ports</title>
|
|
|
|
<listitem>
|
|
<simpara>Ability to customize installation options.</simpara>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<simpara>Custom patches can be applied.</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>If an application installation does not require any
|
|
customization, installing the package is sufficient. Compile
|
|
the port instead whenever an application requires customization
|
|
of the default options. If needed, a custom package can be
|
|
compiled from ports using <command>make</command>
|
|
<buildtarget>package</buildtarget>.</para>
|
|
|
|
<para>A complete list of all available ports and packages can
|
|
be found <link
|
|
xlink:href="http://www.freebsd.org/ports/master-index.html">here</link>.</para>
|
|
|
|
<sect2 xml:id="packages">
|
|
<title>Packages</title>
|
|
|
|
<para>Packages are pre-compiled applications, the &os;
|
|
equivalents of <filename>.deb</filename> files on
|
|
Debian/Ubuntu based systems and <filename>.rpm</filename>
|
|
files on Red Hat/Fedora based systems. Packages are
|
|
installed using <application>pkg</application>. For example,
|
|
the following command installs
|
|
<application>Apache 2.4</application>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>pkg install <replaceable>apache24</replaceable></userinput></screen>
|
|
|
|
<para>For more information on packages refer to section 5.4 of
|
|
the &os; Handbook: <link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/pkgng-intro.html">Using
|
|
pkgng for Binary Package Management</link>.</para>
|
|
</sect2>
|
|
|
|
<sect2 xml:id="ports">
|
|
<title>Ports</title>
|
|
|
|
<para>The &os; Ports Collection is a framework of
|
|
<filename>Makefiles</filename> and patches specifically
|
|
customized for installing applications from source on &os;.
|
|
When installing a port, the system will fetch the source code,
|
|
apply any required patches, compile the code, and install the
|
|
application and any required dependencies.</para>
|
|
|
|
<para>The Ports Collection, sometimes referred to as the ports
|
|
tree, can be installed to <filename>/usr/ports</filename>
|
|
using &man.portsnap.8;. Detailed instructions for installing
|
|
the Ports Collection can be found in <link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/ports-using.html">section
|
|
5.5</link> of the &os; Handbook.</para>
|
|
|
|
<para>To compile a port, change to the port's directory and
|
|
start the build process. The following example installs
|
|
<application>Apache 2.4</application> from the Ports
|
|
Collection:</para>
|
|
|
|
<screen>&prompt.root; <userinput>cd /usr/ports/www/apache24</userinput>
|
|
&prompt.root; <userinput>make install clean</userinput></screen>
|
|
|
|
<para>A benefit of using ports to install software is the
|
|
ability to customize the installation options. This example
|
|
specifies that the <application>mod_ldap</application> module
|
|
should also be installed:</para>
|
|
|
|
<screen>&prompt.root; <userinput>cd /usr/ports/www/apache24</userinput>
|
|
&prompt.root; <userinput>make WITH_LDAP="YES" install clean</userinput></screen>
|
|
|
|
<para>Refer to <link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/ports-using.html">Using
|
|
the Ports Collection</link> for more information.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="startup">
|
|
<title>System Startup</title>
|
|
|
|
<para>Many &linux; distributions use the SysV init system, whereas
|
|
&os; uses the traditional BSD-style &man.init.8;. Under the
|
|
BSD-style &man.init.8;, there are no run-levels and
|
|
<filename>/etc/inittab</filename> does not exist. Instead,
|
|
startup is controlled by &man.rc.8; scripts. At system boot,
|
|
<filename>/etc/rc</filename> reads
|
|
<filename>/etc/rc.conf</filename> and
|
|
<filename>/etc/defaults/rc.conf</filename>
|
|
to determine which services are to be started. The specified
|
|
services are then started by running the corresponding service
|
|
initialization scripts located in
|
|
<filename>/etc/rc.d/</filename> and
|
|
<filename>/usr/local/etc/rc.d/</filename>. These scripts are
|
|
similar to the scripts located in
|
|
<filename>/etc/init.d/</filename> on &linux; systems.</para>
|
|
|
|
<para>The scripts found in <filename>/etc/rc.d/</filename> are for
|
|
applications that are part of the <quote>base</quote> system,
|
|
such as &man.cron.8;, &man.sshd.8;, and &man.syslog.3;. The
|
|
scripts in <filename>/usr/local/etc/rc.d/</filename> are for
|
|
user-installed applications such as
|
|
<application>Apache</application> and
|
|
<application>Squid</application>.</para>
|
|
|
|
<para>Since &os; is developed as a complete operating system,
|
|
user-installed applications are not considered to be part of
|
|
the <quote>base</quote> system. User-installed applications
|
|
are generally installed using <link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/ports-using.html">Packages
|
|
or Ports</link>. In order to keep them separate from the base
|
|
system, user-installed applications are installed under
|
|
<filename>/usr/local/</filename>. Therefore, user-installed
|
|
binaries reside in <filename>/usr/local/bin/</filename>,
|
|
configuration files are in <filename>/usr/local/etc/</filename>,
|
|
and so on.</para>
|
|
|
|
<para>Services are enabled by adding an entry for the service in
|
|
<filename>/etc/rc.conf</filename> . The system defaults are
|
|
found in <filename>/etc/defaults/rc.conf</filename> and these
|
|
default settings are overridden by settings in
|
|
<filename>/etc/rc.conf</filename>. Refer to &man.rc.conf.5; for
|
|
more information about the available entries. When installing
|
|
additional applications, review the application's install
|
|
message to determine how to enable any associated
|
|
services.</para>
|
|
|
|
<para>The following entries in <filename>/etc/rc.conf</filename>
|
|
enable &man.sshd.8;, enable <application>Apache
|
|
2.4</application>, and specify that
|
|
<application>Apache</application> should be started with
|
|
<acronym>SSL</acronym>.</para>
|
|
|
|
<programlisting># enable SSHD
|
|
sshd_enable="YES"
|
|
# enable Apache with SSL
|
|
apache24_enable="YES"
|
|
apache24_flags="-DSSL"</programlisting>
|
|
|
|
<para>Once a service has been enabled in
|
|
<filename>/etc/rc.conf</filename>, it can be started without
|
|
rebooting the system:</para>
|
|
|
|
<screen>&prompt.root; <userinput>service <replaceable>sshd</replaceable> start</userinput>
|
|
&prompt.root; <userinput>service apache24 start</userinput></screen>
|
|
|
|
<para>If a service has not been enabled, it can be started from
|
|
the command line using <option>onestart</option>:</para>
|
|
|
|
<screen>&prompt.root; <userinput>service <replaceable>sshd</replaceable> onestart</userinput></screen>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="network">
|
|
<title>Network Configuration</title>
|
|
|
|
<para>Instead of a generic <emphasis>ethX</emphasis> identifier
|
|
that &linux; uses to identify a network interface, &os; uses the
|
|
driver name followed by a number. The following output from
|
|
&man.ifconfig.8; shows two &intel; Pro 1000 network
|
|
interfaces (<filename>em0</filename> and
|
|
<filename>em1</filename>):</para>
|
|
|
|
<screen>&prompt.user; <userinput>ifconfig</userinput>
|
|
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
|
|
options=b<RXCSUM,TXCSUM,VLAN_MTU>
|
|
inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255
|
|
ether 00:50:56:a7:70:b2
|
|
media: Ethernet autoselect (1000baseTX <full-duplex>)
|
|
status: active
|
|
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
|
|
options=b<RXCSUM,TXCSUM,VLAN_MTU>
|
|
inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255
|
|
ether 00:50:56:a7:03:2b
|
|
media: Ethernet autoselect (1000baseTX <full-duplex>)
|
|
status: active</screen>
|
|
|
|
<para>An <acronym>IP</acronym> address can be assigned to an
|
|
interface using &man.ifconfig.8;. To remain persistent across
|
|
reboots, the <acronym>IP</acronym> configuration must be
|
|
included in <filename>/etc/rc.conf</filename>. The following
|
|
<filename>/etc/rc.conf</filename> entries specify the hostname,
|
|
<acronym>IP</acronym> address, and default gateway:</para>
|
|
|
|
<programlisting>hostname="server1.example.com"
|
|
ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
|
|
defaultrouter="10.10.10.1"</programlisting>
|
|
|
|
<para>Use the following entries to instead configure an interface
|
|
for <acronym>DHCP</acronym>:</para>
|
|
|
|
<programlisting>hostname="server1.example.com"
|
|
ifconfig_em0="DHCP"</programlisting>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="firewall">
|
|
<title>Firewall</title>
|
|
|
|
<para>&os; does not use &linux;
|
|
<application>IPTABLES</application> for its firewall. Instead,
|
|
&os; offers a choice of three kernel level firewalls:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara><link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/firewalls-pf.html">PF</link></simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara><link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/firewalls-ipf.html">IPFILTER</link></simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara><link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/firewalls-ipfw.html">IPFW</link></simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para><application>PF</application> is developed by the OpenBSD
|
|
project and ported to &os;. <application>PF</application> was
|
|
created as a replacement for <application>IPFILTER</application>
|
|
and its syntax is similar to that of
|
|
<application>IPFILTER</application>.
|
|
<application>PF</application> can be paired with &man.altq.4; to
|
|
provide <acronym>QoS</acronym> features.</para>
|
|
|
|
<para>This sample <application>PF</application> entry allows
|
|
inbound <application>SSH</application>:</para>
|
|
|
|
<programlisting>pass in on $ext_if inet proto tcp from any to ($ext_if) port 22</programlisting>
|
|
|
|
<para><application>IPFILTER</application> is the firewall
|
|
application developed by Darren Reed. It is not specific to
|
|
&os; and has been ported to several operating systems including
|
|
NetBSD, OpenBSD, SunOS, HP/UX, and Solaris.</para>
|
|
|
|
<para>The <application>IPFILTER</application> syntax to allow
|
|
inbound <application>SSH</application> is:</para>
|
|
|
|
<programlisting>pass in on $ext_if proto tcp from any to any port = 22</programlisting>
|
|
|
|
<para><application>IPFW</application> is the firewall developed
|
|
and maintained by &os;. It can be paired with &man.dummynet.4;
|
|
to provide traffic shaping capabilities and simulate different
|
|
types of network connections.</para>
|
|
|
|
<para>The <application>IPFW</application> syntax to allow inbound
|
|
<application>SSH</application> would be:</para>
|
|
|
|
<programlisting>ipfw add allow tcp from any to me 22 in via $ext_if</programlisting>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="updates">
|
|
<title>Updating &os;</title>
|
|
|
|
<para>There are two methods for updating a &os; system: from
|
|
source or binary updates.</para>
|
|
|
|
<para>Updating from source is the most involved update method, but
|
|
offers the greatest amount of flexibility. The process involves
|
|
synchronizing a local copy of the &os; source code with the &os;
|
|
<application>Subversion</application> servers. Once the local
|
|
source code is up-to-date, a new version of the kernel and
|
|
userland can be compiled.</para>
|
|
|
|
<para>Binary updates are similar to using <command>yum</command>
|
|
or <command>apt-get</command> to update a &linux; system. In
|
|
&os;, &man.freebsd-update.8; can be used fetch new binary
|
|
updates and install them. These updates can be scheduled using
|
|
&man.cron.8;.</para>
|
|
|
|
<note>
|
|
<para>When using &man.cron.8; to schedule updates, use
|
|
<command>freebsd-update cron</command> in the &man.crontab.1;
|
|
to reduce the possibility of a large number of machines all
|
|
pulling updates at the same time:</para>
|
|
|
|
<programlisting>0 3 * * * root /usr/sbin/freebsd-update cron</programlisting>
|
|
</note>
|
|
|
|
<para>For more information on source and binary updates, refer to
|
|
<link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/updating-upgrading.html">the
|
|
chapter on updating</link> in the &os; Handbook.</para>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="procfs">
|
|
<title>procfs: Gone But Not Forgotten</title>
|
|
|
|
<para>In some &linux; distributions, one could look at
|
|
<filename>/proc/sys/net/ipv4/ip_forward</filename> to determine
|
|
if <acronym>IP</acronym> forwarding is enabled. In &os;,
|
|
&man.sysctl.8; is instead used to view this and other system
|
|
settings.</para>
|
|
|
|
<para>For example, use the following to determine if
|
|
<acronym>IP</acronym> forwarding is enabled on a &os;
|
|
system:</para>
|
|
|
|
<screen>&prompt.user; <userinput>sysctl net.inet.ip.forwarding</userinput>
|
|
net.inet.ip.forwarding: 0</screen>
|
|
|
|
<para>Use <option>-a</option> to list all the system
|
|
settings:</para>
|
|
|
|
<screen>&prompt.user; <userinput>sysctl -a | more</userinput></screen>
|
|
|
|
<para>If an application requires procfs, add the following entry
|
|
to <filename>/etc/fstab</filename>:</para>
|
|
|
|
<screen>proc /proc procfs rw,noauto 0 0</screen>
|
|
|
|
<para>Including <option>noauto</option> will prevent
|
|
<filename>/proc</filename> from being automatically mounted at
|
|
boot.</para>
|
|
|
|
<para>To mount the file system without rebooting:</para>
|
|
|
|
<screen>&prompt.root; <userinput>mount /proc</userinput></screen>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="commands">
|
|
<title>Common Commands</title>
|
|
|
|
<para>Some common command equivalents are as follows:</para>
|
|
|
|
<para>
|
|
<informaltable frame="none" pgwide="1">
|
|
<tgroup cols="3">
|
|
<thead>
|
|
<row>
|
|
<entry>&linux; command (Red Hat/Debian)</entry>
|
|
<entry>&os; equivalent</entry>
|
|
<entry>Purpose</entry>
|
|
</row>
|
|
</thead>
|
|
|
|
<tbody>
|
|
<row>
|
|
<entry><command>yum install <replaceable>package</replaceable></command> /
|
|
<command>apt-get install <replaceable>package</replaceable></command></entry>
|
|
<entry><command>pkg install <replaceable>package</replaceable></command></entry>
|
|
<entry>Install package from remote repository</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><command>rpm -ivh <replaceable>package</replaceable></command>
|
|
/ <command>dpkg -i <replaceable>package</replaceable></command></entry>
|
|
<entry><command>pkg add <replaceable>package</replaceable></command></entry>
|
|
<entry>Install local package</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><command>rpm -qa</command>
|
|
/ <command>dpkg -l</command></entry>
|
|
<entry><command>pkg info</command></entry>
|
|
<entry>List installed packages</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><command>lspci</command></entry>
|
|
<entry><command>pciconf</command></entry>
|
|
<entry>List <acronym>PCI</acronym> devices</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><command>lsmod</command></entry>
|
|
<entry><command>kldstat</command></entry>
|
|
<entry>List loaded kernel modules</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><command>modprobe</command></entry>
|
|
<entry><command>kldload</command>
|
|
/ <command>kldunload</command></entry>
|
|
<entry>Load/Unload kernel modules</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><command>strace</command></entry>
|
|
<entry><command>truss</command></entry>
|
|
<entry>Trace system calls</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable></para>
|
|
</sect1>
|
|
|
|
<sect1 xml:id="conclusion">
|
|
<title>Conclusion</title>
|
|
|
|
<para>This document has provided an overview of &os;. Refer to
|
|
the <link
|
|
xlink:href="&url.base;/doc/en_US.ISO8859-1/books/handbook/index.html">&os; Handbook</link>
|
|
for more in-depth coverage of these topics as well as the many
|
|
topics not covered by this document.</para>
|
|
</sect1>
|
|
</article>
|