diff options
author | Sergio Carlavilla Delgado <carlavilla@FreeBSD.org> | 2021-01-25 23:31:29 +0000 |
---|---|---|
committer | Sergio Carlavilla Delgado <carlavilla@FreeBSD.org> | 2021-01-25 23:31:29 +0000 |
commit | 989d921f5d4ac8d8b7c831c13b8954ad1901be24 (patch) | |
tree | a5d768f9af4b55422fdf5b17064879ae1c7ce032 /documentation/content/en/articles/linux-users | |
parent | 0cff342f42461c5081b98bce7581f43df319e4f4 (diff) |
Diffstat (limited to 'documentation/content/en/articles/linux-users')
-rw-r--r-- | documentation/content/en/articles/linux-users/_index.adoc | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/documentation/content/en/articles/linux-users/_index.adoc b/documentation/content/en/articles/linux-users/_index.adoc new file mode 100644 index 0000000000..bcfacd562d --- /dev/null +++ b/documentation/content/en/articles/linux-users/_index.adoc @@ -0,0 +1,316 @@ +--- +title: FreeBSD Quickstart Guide for Linux® Users +authors: + - author: John Ferrell +copyright: 2008 The FreeBSD Documentation Project +releaseinfo: "$FreeBSD$" +trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"] +--- + += FreeBSD Quickstart Guide for Linux(R) Users +:doctype: article +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:source-highlighter: rouge +:experimental: + +include::shared/en/urls.adoc[] + +[.abstract-title] +Abstract + +This document is intended to quickly familiarize intermediate to advanced Linux(R) users with the basics of FreeBSD. + +''' + +toc::[] + +[[intro]] +== Introduction + +This document highlights some of the technical differences between FreeBSD and Linux(R) so that intermediate to advanced Linux(R) users can quickly familiarize themselves with the basics of FreeBSD. + +This document assumes that FreeBSD is already installed. Refer to the link:{handbook}#bsdinstall[Installing FreeBSD] chapter of the FreeBSD Handbook for help with the installation process. + +[[shells]] +== Default Shell + +Linux(R) users are often surprised to find that Bash is not the default shell in FreeBSD. In fact, Bash is not included in the default installation. Instead, FreeBSD uses man:tcsh[1] as the default root shell, and the Bourne shell-compatible man:sh[1] as the default user shell. man:sh[1] is very similar to Bash but with a much smaller feature-set. Generally shell scripts written for man:sh[1] will run in Bash, but the reverse is not always true. + +However, Bash and other shells are available for installation using the FreeBSD link:{handbook}#ports[Packages and Ports Collection]. + +After installing another shell, use man:chsh[1] to change a user's default shell. It is recommended that the `root` user's default shell remain unchanged since shells which are not included in the base distribution are installed to [.filename]#/usr/local/bin#. In the event of a problem, the file system where [.filename]#/usr/local/bin# is located may not be mounted. In this case, `root` would not have access to its default shell, preventing `root` from logging in and fixing the problem. + +[[software]] +== Packages and Ports: Adding Software in FreeBSD + +FreeBSD provides two methods for installing applications: binary packages and compiled ports. Each method has its own benefits: + +.Binary Packages +* Faster installation as compared to compiling large applications. +* Does not require an understanding of how to compile software. +* No need to install a compiler. + +.Ports +* Ability to customize installation options. +* Custom patches can be applied. + +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 `make package`. + +A complete list of all available ports and packages can be found https://www.freebsd.org/ports/[here]. + +[[packages]] +=== Packages + +Packages are pre-compiled applications, the FreeBSD equivalents of [.filename]#.deb# files on Debian/Ubuntu based systems and [.filename]#.rpm# files on Red Hat/Fedora based systems. Packages are installed using `pkg`. For example, the following command installs Apache 2.4: + +[source,bash] +.... +# pkg install apache24 +.... + +For more information on packages refer to section 5.4 of the FreeBSD Handbook: link:{handbook}#pkgng-intro[Using pkgng for Binary Package Management]. + +[[ports]] +=== Ports + +The FreeBSD Ports Collection is a framework of [.filename]#Makefiles# and patches specifically customized for installing applications from source on FreeBSD. 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. + +The Ports Collection, sometimes referred to as the ports tree, can be installed to [.filename]#/usr/ports# using man:portsnap[8]. Detailed instructions for installing the Ports Collection can be found in link:{handbook}#ports-using[section 5.5] of the FreeBSD Handbook. + +To compile a port, change to the port's directory and start the build process. The following example installs Apache 2.4 from the Ports Collection: + +[source,bash] +.... +# cd /usr/ports/www/apache24 +# make install clean +.... + +A benefit of using ports to install software is the ability to customize the installation options. This example specifies that the mod_ldap module should also be installed: + +[source,bash] +.... +# cd /usr/ports/www/apache24 +# make WITH_LDAP="YES" install clean +.... + +Refer to link:{handbook}#ports-using[Using the Ports Collection] for more information. + +[[startup]] +== System Startup + +Many Linux(R) distributions use the SysV init system, whereas FreeBSD uses the traditional BSD-style man:init[8]. Under the BSD-style man:init[8], there are no run-levels and [.filename]#/etc/inittab# does not exist. Instead, startup is controlled by man:rc[8] scripts. At system boot, [.filename]#/etc/rc# reads [.filename]#/etc/rc.conf# and [.filename]#/etc/defaults/rc.conf# 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/# and [.filename]#/usr/local/etc/rc.d/#. These scripts are similar to the scripts located in [.filename]#/etc/init.d/# on Linux(R) systems. + +The scripts found in [.filename]#/etc/rc.d/# are for applications that are part of the "base" system, such as man:cron[8], man:sshd[8], and man:syslog[3]. The scripts in [.filename]#/usr/local/etc/rc.d/# are for user-installed applications such as Apache and Squid. + +Since FreeBSD is developed as a complete operating system, user-installed applications are not considered to be part of the "base" system. User-installed applications are generally installed using link:{handbook}#ports-using[Packages or Ports]. In order to keep them separate from the base system, user-installed applications are installed under [.filename]#/usr/local/#. Therefore, user-installed binaries reside in [.filename]#/usr/local/bin/#, configuration files are in [.filename]#/usr/local/etc/#, and so on. + +Services are enabled by adding an entry for the service in [.filename]#/etc/rc.conf# . The system defaults are found in [.filename]#/etc/defaults/rc.conf# and these default settings are overridden by settings in [.filename]#/etc/rc.conf#. 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. + +The following entries in [.filename]#/etc/rc.conf# enable man:sshd[8], enable Apache 2.4, and specify that Apache should be started with SSL. + +[.programlisting] +.... +# enable SSHD +sshd_enable="YES" +# enable Apache with SSL +apache24_enable="YES" +apache24_flags="-DSSL" +.... + +Once a service has been enabled in [.filename]#/etc/rc.conf#, it can be started without rebooting the system: + +[source,bash] +.... +# service sshd start +# service apache24 start +.... + +If a service has not been enabled, it can be started from the command line using `onestart`: + +[source,bash] +.... +# service sshd onestart +.... + +[[network]] +== Network Configuration + +Instead of a generic _ethX_ identifier that Linux(R) uses to identify a network interface, FreeBSD uses the driver name followed by a number. The following output from man:ifconfig[8] shows two Intel(R) Pro 1000 network interfaces ([.filename]#em0# and [.filename]#em1#): + +[source,bash] +.... +% ifconfig +em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + options=b<RXCSUM,TXCSUM,VLAN_MTU> + inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255 + ether 00:50:56:a7:70:b2 + media: Ethernet autoselect (1000baseTX <full-duplex>) + status: active +em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 + options=b<RXCSUM,TXCSUM,VLAN_MTU> + inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255 + ether 00:50:56:a7:03:2b + media: Ethernet autoselect (1000baseTX <full-duplex>) + status: active +.... + +An IP address can be assigned to an interface using man:ifconfig[8]. To remain persistent across reboots, the IP configuration must be included in [.filename]#/etc/rc.conf#. The following [.filename]#/etc/rc.conf# entries specify the hostname, IP address, and default gateway: + +[.programlisting] +.... +hostname="server1.example.com" +ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0" +defaultrouter="10.10.10.1" +.... + +Use the following entries to instead configure an interface for DHCP: + +[.programlisting] +.... +hostname="server1.example.com" +ifconfig_em0="DHCP" +.... + +[[firewall]] +== Firewall + +FreeBSD does not use Linux(R) IPTABLES for its firewall. Instead, FreeBSD offers a choice of three kernel level firewalls: + +* link:{handbook}#firewalls-pf[PF] +* link:{handbook}#firewalls-ipf[IPFILTER] +* link:{handbook}#firewalls-ipfw[IPFW] + +PF is developed by the OpenBSD project and ported to FreeBSD. PF was created as a replacement for IPFILTER and its syntax is similar to that of IPFILTER. PF can be paired with man:altq[4] to provide QoS features. + +This sample PF entry allows inbound SSH: + +[.programlisting] +.... +pass in on $ext_if inet proto tcp from any to ($ext_if) port 22 +.... + +IPFILTER is the firewall application developed by Darren Reed. It is not specific to FreeBSD and has been ported to several operating systems including NetBSD, OpenBSD, SunOS, HP/UX, and Solaris. + +The IPFILTER syntax to allow inbound SSH is: + +[.programlisting] +.... +pass in on $ext_if proto tcp from any to any port = 22 +.... + +IPFW is the firewall developed and maintained by FreeBSD. It can be paired with man:dummynet[4] to provide traffic shaping capabilities and simulate different types of network connections. + +The IPFW syntax to allow inbound SSH would be: + +[.programlisting] +.... +ipfw add allow tcp from any to me 22 in via $ext_if +.... + +[[updates]] +== Updating FreeBSD + +There are two methods for updating a FreeBSD system: from source or binary updates. + +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 FreeBSD source code with the FreeBSD Subversion servers. Once the local source code is up-to-date, a new version of the kernel and userland can be compiled. + +Binary updates are similar to using `yum` or `apt-get` to update a Linux(R) system. In FreeBSD, man:freebsd-update[8] can be used fetch new binary updates and install them. These updates can be scheduled using man:cron[8]. + +[NOTE] +==== +When using man:cron[8] to schedule updates, use `freebsd-update cron` in the man:crontab[1] to reduce the possibility of a large number of machines all pulling updates at the same time: + +[.programlisting] +.... +0 3 * * * root /usr/sbin/freebsd-update cron +.... + +==== + +For more information on source and binary updates, refer to link:{handbook}#updating-upgrading[the chapter on updating] in the FreeBSD Handbook. + +[[procfs]] +== procfs: Gone But Not Forgotten + +In some Linux(R) distributions, one could look at [.filename]#/proc/sys/net/ipv4/ip_forward# to determine if IP forwarding is enabled. In FreeBSD, man:sysctl[8] is instead used to view this and other system settings. + +For example, use the following to determine if IP forwarding is enabled on a FreeBSD system: + +[source,bash] +.... +% sysctl net.inet.ip.forwarding +net.inet.ip.forwarding: 0 +.... + +Use `-a` to list all the system settings: + +[source,bash] +.... +% sysctl -a | more +.... + +If an application requires procfs, add the following entry to [.filename]#/etc/fstab#: + +[source,bash] +.... +proc /proc procfs rw,noauto 0 0 +.... + +Including `noauto` will prevent [.filename]#/proc# from being automatically mounted at boot. + +To mount the file system without rebooting: + +[source,bash] +.... +# mount /proc +.... + +[[commands]] +== Common Commands + +Some common command equivalents are as follows: + +[.informaltable] +[cols="1,1,1", frame="none", options="header"] +|=== +| Linux(R) command (Red Hat/Debian) +| FreeBSD equivalent +| Purpose + +|`yum install _package_` / `apt-get install _package_` +|`pkg install _package_` +|Install package from remote repository + +|`rpm -ivh _package_` / `dpkg -i _package_` +|`pkg add _package_` +|Install local package + +|`rpm -qa` / `dpkg -l` +|`pkg info` +|List installed packages + +|`lspci` +|`pciconf` +|List PCI devices + +|`lsmod` +|`kldstat` +|List loaded kernel modules + +|`modprobe` +|`kldload` / `kldunload` +|Load/Unload kernel modules + +|`strace` +|`truss` +|Trace system calls +|=== + +[[conclusion]] +== Conclusion + +This document has provided an overview of FreeBSD. Refer to the link:{handbook}[FreeBSD Handbook] for more in-depth coverage of these topics as well as the many topics not covered by this document. |