added updated adoc and xml files

This commit is contained in:
Jason S. Evans 2016-03-21 10:37:53 +00:00
parent b256f58a2c
commit 223722eac7
4 changed files with 703 additions and 4039 deletions

View File

@ -1,532 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- XML file was created by LyX 2.1.4
See http://www.lyx.org/ for more information -->
<article lang="en_US">
<articleinfo>
<title>Package Management Basics: apt, yum, dnf, pkg</title>
</articleinfo><sect1>
<title>Introduction</title>
<sect2>
<title>Why was this document written?</title>
<para>Most modern Unix-like operating systems offer a centralized mechanism for finding and installing software. Software is usually distributed in the form of&nbsp;packages, kept in&nbsp;repositories. Working with packages is known as&nbsp;package management. Packages provide the basic components of an operating system, along with shared libraries, applications, services, and documentation.</para>
<para>A package management system does much more than one-time installation of software. It also provides tools for upgrading already-installed packages. Package repositories help to ensure that code has been vetted for use on your system, and that the installed versions of software have been approved by developers and package maintainers.</para>
<para>When configuring servers or development environments, it's often necessary look beyond official repositories. Packages in the stable release of a distribution may be out of date, especially where new or rapidly-changing software is concerned. Nevertheless, package management is a vital skill for system administrators and developers, and the wealth of packaged software for major distributions is a tremendous resource.</para>
<para>This guide is intended as a quick reference for the fundamentals of finding, installing, and upgrading packages on a variety of distributions, and should help you translate that knowledge between systems.</para></sect2><sect2>
<title>Audience</title>
<para>For those new to Linux who need a basic understanding of package management.</para></sect2><sect2>
<title>Original version of this doc</title>
<para>The original version of this guide can be found at <ulink url="https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg">Digital Ocean</ulink>.</para></sect2><sect2>
<title>Revision History</title>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="center"/>
<colspec colname="col2" align="center"/>
<tbody>
<row>
<entry align="center" valign="top">15.1.2016</entry>
<entry align="center" valign="top">v1.0 converted and edited for TLDP</entry>
<entry align="center" valign="top">Jason Evans</entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
<title>Contributions</title>
<itemizedlist>
<listitem><para><ulink url="https://www.digitalocean.com/community/users/bpb">Brennen Bearnes</ulink>(original author).</para></listitem><listitem><para><ulink url="http://wiki.tldp.org/Jason%20Evans">Jason Evans</ulink>(editor and maintainer for TLDP)</para></listitem></itemizedlist></sect2><sect2>
<title>Feedback</title>
<para>Missing information, missing links, missing characters? Mail it to the maintainer of this document: <ulink url="jsevans at youvegotthe.info">jsevans at youvegotthe.info</ulink></para></sect2><sect2>
<title>Copyright information</title>
<para>This work is licensed under a <ulink url="https://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</ulink>.</para></sect2><sect2>
<title>What do you need?</title>
<para>This guide covers Debian, Ubuntu, CentOS, Fedora, and FreeBSD and will require one of those distributions to be installed</para></sect2></sect1><sect1>
<title>Package Management Systems: A Brief Overview</title>
<para>Most package systems are built around collections of package files. A package file is usually an archive which contains compiled binaries and other resources making up the software, along with installation scripts. Packages also contain valuable metadata, including their&nbsp;dependencies, a list of other packages required to install and run them.</para>
<para>While their functionality and benefits are broadly similar, packaging formats and tools vary by platform:</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">Operating System </entry>
<entry align="left" valign="top">Format </entry>
<entry align="center" valign="top">Tool(s)</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian </entry>
<entry align="left" valign="top">.deb </entry>
<entry align="center" valign="top">apt, apt-cache, apt-get, dpkg</entry>
</row>
<row>
<entry align="center" valign="top">Ubuntu </entry>
<entry align="left" valign="top">.deb </entry>
<entry align="center" valign="top">apt, apt-cache, apt-get, dpkg</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">.rpm </entry>
<entry align="center" valign="top">yum</entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">.rpm </entry>
<entry align="center" valign="top">dnf</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD </entry>
<entry align="left" valign="top">Ports,&nbsp;.txz </entry>
<entry align="center" valign="top">make, pkg</entry>
</row>
</tbody>
</tgroup></informaltable>
<para>In Debian and systems based on it, like Ubuntu, Linux Mint, and Raspbian, the package format is the&nbsp;.debfile. APT, the Advanced Packaging Tool, provides commands used for most common operations: Searching repositories, installing collections of packages and their dependencies, and managing upgrades. APT commands operate as a front-end to the lower-level&nbsp;dpkg&nbsp;utility, which handles the installation of individual&nbsp;.deb&nbsp;files on the local system, and is sometimes invoked directly.</para>
<para>CentOS, Fedora, and other members of the Red Hat family use RPM files. In CentOS,&nbsp;yum&nbsp;is used to interact with both individual package files and repositories.</para>
<para>In recent versions of Fedora,&nbsp;yum&nbsp;has been supplanted by&nbsp;dnf, a modernized fork which retains most ofyum's interface.</para>
<para>FreeBSD's binary package system is administered with the&nbsp;pkg&nbsp;command. FreeBSD also offers the Ports Collection, a local directory structure and tools which allow the user to fetch, compile, and install packages directly from source using Makefiles. It's usually much more convenient to use&nbsp;pkg, but occasionally a pre-compiled package is unavailable, or you may need to change compile-time options.</para><sect2>
<title>Update Package Lists</title>
<para>Most systems keep a local database of the packages available from remote repositories. It's best to update this database before installing or upgrading packages. As a partial exception to this pattern,&nbsp;yumand&nbsp;dnf&nbsp;will check for updates before performing some operations, but you can ask them at any time whether updates are available.</para>
<informaltable><tgroup cols="2" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="center" valign="top">Command</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="center" valign="top">sudo apt-get update</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="center" valign="top">yum check-update</entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="center" valign="top">dnf check-update</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="center" valign="top">sudo pkg update</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="center" valign="top">sudo portsnap fetch update</entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
<title>Upgrade Installed Packages</title>
<para>Making sure that all of the installed software on a machine stays up to date would be an enormous undertaking without a package system. You would have to track upstream changes and security alerts for hundreds of different packages. While a package manager doesn't solve every problem you'll encounter when upgrading software, it does enable you to maintain most system components with a few commands.</para>
<para>On FreeBSD, upgrading installed ports can introduce breaking changes or require manual configuration steps. It's best to read&nbsp;/usr/ports/UPDATING&nbsp;before upgrading with&nbsp;portmaster.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">sudo apt-get upgrade </entry>
<entry align="center" valign="top">Only upgrades installed packages, where possible.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get dist-upgrade </entry>
<entry align="center" valign="top">May add or remove packages to satisfy new dependencies.</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">sudo yum update </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">sudo dnf upgrade </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">sudo pkg upgrade </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">less /usr/ports/UPDATING </entry>
<entry align="center" valign="top">Uses&nbsp;less&nbsp;to view update notes for ports (use arrow keys to scroll, pressq&nbsp;to quit).</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">cd /usr/ports/ports-mgmt/portmaster &amp;&amp; sudo make install &amp;&amp; sudo portmaster -a </entry>
<entry align="center" valign="top">Installs&nbsp;portmaster&nbsp;and uses it to update installed ports.</entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
<title>Find a Package</title>
<para>Most distributions offer a graphical or menu-driven front end to package collections. These can be a good way to browse by category and discover new software. Often, however, the quickest and most effective way to locate a package is to search with command-line tools.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">apt-cache search&nbsp;search_string </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">yum search&nbsp;search_string </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">yum search all&nbsp;search_string </entry>
<entry align="center" valign="top">Searches all fields, including description.</entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">dnf search&nbsp;search_string </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">dnf search all&nbsp;search_string </entry>
<entry align="center" valign="top">Searches all fields, including description.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">pkg search&nbsp;search_string </entry>
<entry align="center" valign="top">Searches by name.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">pkg search -f&nbsp;search_string </entry>
<entry align="center" valign="top">Searches by name, returning full descriptions.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">pkg search -D&nbsp;search_string </entry>
<entry align="center" valign="top">Searches description.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">cd /usr/ports &amp;&amp; make search name=package </entry>
<entry align="center" valign="top">Searches by name.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">cd /usr/ports &amp;&amp; make search key=search_string </entry>
<entry align="center" valign="top">Searches comments, descriptions, and dependencies.</entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
<title>View Info About a Specific Package</title>
<para>When deciding what to install, it's often helpful to read detailed descriptions of packages. Along with human-readable text, these often include metadata like version numbers and a list of the package's dependencies.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">apt-cache show&nbsp;package </entry>
<entry align="center" valign="top">Shows locally-cached info about a package.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">dpkg -s&nbsp;package </entry>
<entry align="center" valign="top">Shows the current installed status of a package.</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">yum info&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">yum deplist&nbsp;package </entry>
<entry align="center" valign="top">Lists dependencies for a package.</entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">dnf info&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">dnf repoquery -\/-requires&nbsp;package </entry>
<entry align="center" valign="top">Lists dependencies for a package.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">pkg info&nbsp;package </entry>
<entry align="center" valign="top">Shows info for an installed package.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">cd /usr/ports/category/port&nbsp;&amp;&amp; cat pkg-descr </entry>
<entry align="center" valign="top"></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
<title>Install a Package from Repositories</title>
<para>Once you know the name of a package, you can usually install it and its dependencies with a single command. In general, you can supply multiple packages to install simply by listing them all.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">sudo apt-get install&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get install&nbsp;package1 package2 ... </entry>
<entry align="center" valign="top">Installs all listed packages.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get install -y&nbsp;package </entry>
<entry align="center" valign="top">Assumes "yes" where&nbsp;apt&nbsp;would usually prompt to continue.</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">sudo yum install&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo yum install&nbsp;package1 package2 ... </entry>
<entry align="center" valign="top">Installs all listed packages.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo yum install -y&nbsp;package </entry>
<entry align="center" valign="top">Assumes "yes" where&nbsp;yum&nbsp;would usually prompt to continue.</entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">sudo dnf install&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo dnf install&nbsp;package1 package2 ... </entry>
<entry align="center" valign="top">Installs all listed packages.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo dnf install -y&nbsp;package </entry>
<entry align="center" valign="top">Assumes "yes" where&nbsp;dnf&nbsp;would usually prompt to continue.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">sudo pkg install&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo pkg install&nbsp;package1 package2 ... </entry>
<entry align="center" valign="top">Installs all listed packages.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">cd /usr/ports/category/port&nbsp;&amp;&amp; sudo make install </entry>
<entry align="center" valign="top">Builds and installs a port from source.</entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
<title>Install a Package from the Local Filesystem</title>
<para>Sometimes, even though software isn't officially packaged for a given operating system, a developer or vendor will offer package files for download. You can usually retrieve these with your web browser, or viacurl&nbsp;on the command line. Once a package is on the target system, it can often be installed with a single command.</para>
<para>On Debian-derived systems,&nbsp;dpkg&nbsp;handles individual package files. If a package has unmet dependencies,&nbsp;gdebi&nbsp;can often be used to retrieve them from official repositories.</para>
<para>On CentOS and Fedora systems,&nbsp;yum&nbsp;and&nbsp;dnf&nbsp;are used to install individual files, and will also handle needed dependencies.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">sudo dpkg -i&nbsp;package.deb </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get install -ygdebi &amp;&amp; sudo gdebipackage.deb </entry>
<entry align="center" valign="top">Installs and uses gdebi to install package.deb and retrieve any missing dependencies.</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">sudo yum install&nbsp;package.rpm </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">sudo dnf install&nbsp;package.rpm </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">sudo pkg add&nbsp;package.txz </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo pkg add -f&nbsp;package.txz </entry>
<entry align="center" valign="top">Installs package even if already installed.</entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
<title>Remove One or More Installed Packages</title>
<para>Since a package manager knows what files are provided by a given package, it can usually remove them cleanly from a system if the software is no longer needed.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">sudo apt-get remove&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get autoremove </entry>
<entry align="center" valign="top">Removes unneeded packages.</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">sudo yum remove&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">sudo dnf erase&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">sudo pkg delete&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo pkg autoremove </entry>
<entry align="center" valign="top">Removes unneeded packages.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">sudo pkg delete&nbsp;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">cd /usr/ports/path_to_port&nbsp;&amp;&amp; make deinstall </entry>
<entry align="center" valign="top">De-installs an installed port.</entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
<title>Get Help</title>
<para>In addition to web-based documentation, keep in mind that Unix manual pages (usually referred to as&nbsp;man pages) are available for most commands from the shell. To read a page, use man:</para><screen>
<![CDATA[$ man page
]]></screen><para>In man, you can navigate with the arrow keys. Press / to search for text within the page, and q to quit.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">man apt-get </entry>
<entry align="center" valign="top">Updating the local package database and working with packages.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">man apt-cache </entry>
<entry align="center" valign="top">Querying the local package database.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">man dpkg </entry>
<entry align="center" valign="top">Working with individual package files and querying installed packages.</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">man yum </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">man dnf </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">man pkg </entry>
<entry align="center" valign="top">Working with pre-compiled binary packages.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">man ports </entry>
<entry align="center" valign="top">Working with the Ports Collection.</entry>
</row>
</tbody>
</tgroup></informaltable></sect2></sect1><sect1>
<title>Conclusion and Further Reading</title>
<para>This guide provides an overview of basic operations that can be cross-referenced between systems, but only scratches the surface of a complex topic. For greater detail on a given system, you can consult the following resources:</para><orderedlist>
<listitem><para><ulink url="https://www.digitalocean.com/community/tutorials/ubuntu-and-debian-package-management-essentials">This guide</ulink> covers Ubuntu and Debian package management in detail. </para></listitem><listitem><para>There's an <ulink url="https://www.centos.org/docs/5/html/yum/">official CentOS guide to managing software with~</ulink><ulink url="https://www.centos.org/docs/5/html/yum/">yum</ulink>. </para></listitem><listitem><para>There's a <ulink url="https://fedoraproject.org/wiki/Dnf">Fedora wiki page about~</ulink><ulink url="https://fedoraproject.org/wiki/Dnf">dnf</ulink>, and an <ulink url="https://dnf.readthedocs.org/en/latest/index.html">official manual for~</ulink><ulink url="https://dnf.readthedocs.org/en/latest/index.html">dnf</ulink><ulink url="https://dnf.readthedocs.org/en/latest/index.html">~itself</ulink>. </para></listitem><listitem><para><ulink url="https://www.digitalocean.com/community/tutorials/how-to-manage-packages-on-freebsd-10-1-with-pkg">This guide</ulink> covers FreeBSD package management using pkg. </para></listitem><listitem><para>The <ulink url="https://www.freebsd.org/doc/handbook/">FreeBSD Handbook</ulink>&nbsp;contains a&nbsp;<ulink url="https://www.freebsd.org/doc/handbook/ports-using.html">section on using the Ports Collection</ulink>. </para></listitem></orderedlist></sect1></article>

View File

@ -0,0 +1,279 @@
= Package Management Basics: apt, yum, dnf, zypper, and pkg
==== Abstract
This guide is intended as a quick reference for the fundamentals of finding, installing, and upgrading packages on a variety of distributions, and should help you translate that knowledge between systems.
==== Audience
For those new to Linux who need a basic understanding of package management.
==== Original version of this doc
The original version of this guide can be found at https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg[Digital Ocean].
==== Revision History
[cols="^,^,^",]
|=============================================================================
|15.1.2016 |v1.0 Converted and edited for TLDP |Jason Evans
|15.2.2016 |v1.1 Changed format to asciidoc and made corrections |Jason Evans
|=============================================================================
==== Contributions
* https://www.digitalocean.com/community/users/bpb[Brennen Bearnes]
(original author).
* http://wiki.tldp.org/Jason%20Evans[Jason Evans] (editor and maintainer for TLDP)
==== Feedback
Missing information, missing links, missing characters? Mail it to the maintainer of this document: jsevans _at_ youvegotthe.info
==== Copyright information
This work is licensed under a https://creativecommons.org/licenses/by-nc-sa/4.0/[Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License].
== Introduction
=== Why was this document written?
Most modern Unix-like operating systems offer a centralized mechanism for finding and installing software. Software is usually distributed in the form of packages, kept in repositories. Working with packages is known as package management. Packages provide the basic components of an operating system, along with shared libraries, applications, services, and documentation.
A package management system does much more than one-time installation of software. It also provides tools for upgrading already-installed packages. Package repositories help to ensure that code has been vetted for use on your system, and that the installed versions of software have been approved by developers and package maintainers.
When configuring servers or development environments, it's often necessary look beyond official repositories. Packages in the stable release of a distribution may be out of date, especially where new or rapidly-changing software is concerned. Nevertheless, package management is a vital skill for system administrators and developers, and the wealth of packaged software for major distributions is a tremendous
resource.
=== What do you need?
This guide covers Debian, Ubuntu, CentOS, Fedora, SuSE, and FreeBSD and will require one of those distributions to be installed.
NOTE: All of the commands in this guide assume that the user is running the commands as root or with `sudo`.
=== Package Management Systems: A Brief Overview
In a Windows environment, programs are packaged in .exe or .msi installers which will then install most of the files needed to run the program. If your computer doesn't have some dependant applications, then the program that you are trying to run will either not install or not run properly. You will then have to scour the internet in order to find the missing required applications or libraries. For example in CentOS 7, in order to install the VIM text editor, I need to add the following packages:
....
gpm-libs x86_64 1.20.7-5.el7 base 32 k
groff-base x86_64 1.22.2-8.el7 base 942 k
perl x86_64 4:5.16.3-286.el7 base 8.0 M
perl-Carp noarch 1.26-244.el7 base 19 k
perl-Encode x86_64 2.51-7.el7 base 1.5 M
perl-Exporter noarch 5.68-3.el7 base 28 k
perl-File-Path noarch 2.09-2.el7 base 26 k
perl-File-Temp noarch 0.23.01-3.el7 base 56 k
perl-Filter x86_64 1.49-3.el7 base 76 k
perl-Getopt-Long noarch 2.40-2.el7 base 56 k
perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k
perl-PathTools x86_64 3.40-5.el7 base 82 k
perl-Pod-Escapes noarch 1:1.04-286.el7 base 50 k
perl-Pod-Perldoc noarch 3.20-4.el7 base 87 k
perl-Pod-Simple noarch 1:3.28-4.el7 base 216 k
perl-Pod-Usage noarch 1.63-3.el7 base 27 k
perl-Scalar-List-Utils x86_64 1.27-248.el7 base 36 k
perl-Socket x86_64 2.010-3.el7 base 49 k
perl-Storable x86_64 2.45-3.el7 base 77 k
perl-Text-ParseWords noarch 3.29-4.el7 base 14 k
perl-Time-HiRes x86_64 4:1.9725-3.el7 base 45 k
perl-Time-Local noarch 1.2300-2.el7 base 24 k
perl-constant noarch 1.27-2.el7 base 19 k
perl-libs x86_64 4:5.16.3-286.el7 base 687 k
perl-macros x86_64 4:5.16.3-286.el7 base 43 k
perl-parent noarch 1:0.225-244.el7 base 12 k
perl-podlators noarch 2.5.1-3.el7 base 112 k
perl-threads x86_64 1.87-4.el7 base 49 k
perl-threads-shared x86_64 1.43-6.el7 base 39 k
vim-common x86_64 2:7.4.160-1.el7 base 5.9 M
vim-filesystem x86_64 2:7.4.160-1.el7 base 9.6 k
which x86_64 2.20-7.el7 base 41 k
....
Imagine trying to manually install all of these programs one at a time just to be able to install a text editor! In the early days of Linux, we faced these kinds of problems, however this problem is fixed with package management systems such as apt, yum, and others. Package managers simplify everything. They look at the package that you want to install such as VIM, LibreOffice, etc., then look at what other package it depends upon, the dependencies of those packages, and so on; then it downloads them all and installs them. For example, in order to install VIM in CentOS 7 today, I simply have to run `yum install vim`.
==== Some different package management systems:
While their functionality and benefits are broadly similar, packaging formats and tools vary by platform:
[cols="^,<,^",options="header",]
|===========================================
|Operating System |Format |Tool(s)
|Debian |.deb |apt, apt-cache, apt-get, dpkg
|Ubuntu |.deb |apt, apt-cache, apt-get, dpkg
|CentOS |.rpm |yum
|Fedora |.rpm |dnf
|SuSE |.rpm |zypper
|FreeBSD |Ports, .txz |make, pkg
|===========================================
In Debian and systems based on it, like Ubuntu, Linux Mint, and Raspbian, the package format is the .debfile. APT, the Advanced Packaging Tool, provides commands used for most common operations: Searching repositories, installing collections of packages and their dependencies, and managing upgrades. APT commands operate as a front-end to the lower-level dpkg utility, which handles the installation of individual .deb files on the local system, and is sometimes invoked directly.
Fedora and enterprise level distributions like Red Hat Enterprise Linux (RHEL), CentOS, and Oracle Linux use RPM files. In CentOS, Oracle, and RHEL, yum is used to interact with both individual package files and repositories. In recent versions of Fedora, yum has been supplanted by dnf, a modernized fork which retains most of yum's interface.
SuSE also uses RPM files. However, the package management software is known as zypper. Zypper's command line interface is very similar to yum and YasT can be access from a graphical mode or from the command line.
FreeBSD's binary package system is administered with the pkg command. FreeBSD also offers the Ports Collection, a local directory structure and tools which allow the user to fetch, compile, and install packages directly from source using Makefiles. It's usually much more convenient to use pkg, but occasionally a pre-compiled package is unavailable, or syou may need to change compile-time options.
==== Update Package Lists
Most systems keep a local database of the packages available from remote repositories. It's best to update this database before installing or upgrading packages. As a partial exception to this pattern, yum and dnf will check for updates before performing some operations, but you can ask them at any time whether updates are available.
[cols="^,^",options="header",]
|=========================================
|System |Command
|Debian / Ubuntu |`apt-get update`
|CentOS |`yum check-update`
|Fedora |`dnf check-update`
|SuSE |`zypper refresh`
|FreeBSD Packages |`pkg update`
|FreeBSD Ports |`portsnap fetch update`
|=========================================
==== Upgrade Installed Packages
Making sure that all of the installed software on a machine stays up to date would be an enormous undertaking without a package system. You would have to track upstream changes and security alerts for hundreds of different packages. While a package manager doesn't solve every problem you'll encounter when upgrading software, it does enable you to maintain most system components with a few commands.
On FreeBSD, upgrading installed ports can introduce breaking changes or require manual configuration steps. It's best to read /usr/ports/UPDATING before upgrading with portmaster.
[cols="^,<,^",options="header",]
|=======================================================================
|System |Command |Notes
|Debian / Ubuntu |`apt-get upgrade` |Only upgrades installed packages, where possible.
| |`apt-get dist-upgrade` |May add or remove packages to satisfy new dependencies.
|CentOS |`yum update` |
|Fedora |`dnf upgrade` |
|SuSE |`zypper update` |
|FreeBSD Packages |`pkg upgrade` |
|FreeBSD Ports |`less /usr/ports/UPDATING` |Uses less to view update notes for ports (use arrow keys to scroll, pressq to quit).
| |`cd /usr/ports/ports-mgmt/portmaster && make install && portmaster -a` |Installs portmaster and uses it to update installed ports.
|=======================================================================
Find a Package
~~~~~~~~~~~~~~
Most distributions offer a graphical or menu-driven front end to package
collections. These can be a good way to browse by category and discover
new software. Often, however, the quickest and most effective way to
locate a package is to search with command-line tools.
[cols="^,<,^",options="header",]
|=======================================================================
|System |Command |Notes
|Debian / Ubuntu |`apt-cache search` |
|CentOS |`yum search` |
| |`yum search all` |Searches all fields, including description.
|Fedora |`dnf search` |
| |`dnf search all` |Searches all fields, including description.
|SuSE |`zypper se` |
|FreeBSD Packages |`pkg search` |Searches by name.
| |`pkg search -f` |Searches by name, returning full descriptions.
| |`pkg search -D` |Searches description.
|FreeBSD Ports |`cd /usr/ports && make search name=package` |Searches by name.
| |`cd /usr/ports && make search key=` |Searches comments, descriptions, and dependencies.
|=======================================================================
View Info About a Specific Package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When deciding what to install, it's often helpful to read detailed descriptions of packages. Along with human-readable text, these often include metadata like version numbers and a list of the package's dependencies.
[cols="^,<,^",options="header",]
|=======================================================================
|System |Command |Notes
|Debian / Ubuntu |`apt-cache show package` |Shows locally-cached info about a package.
| |`dpkg -s package` |Shows the current installed status of a package.
|CentOS |`yum info package` |
| |`yum deplist package` |Lists dependencies for a package.
|Fedora |`dnf info package` |
| |`dnf repoquery -\/-requires package` |Lists dependencies for a package.
|SuSE |`zypper info search string` |Lists dependencies for a package.
|FreeBSD Packages |`pkg info package` |Shows info for an installed package.
|FreeBSD Ports |`cd /usr/ports/category/port && cat pkg-descr` |
|=======================================================================
Install a Package from Repositories
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Once you know the name of a package, you can usually install it and its dependencies with a single command. In general, you can supply multiple packages to install simply by listing them all.
[cols="^,<,^",options="header",]
|=======================================================================
|System |Command |Notes
|Debian / Ubuntu |`apt-get install package` |
| |`apt-get install package1 package2` |Installs all listed packages.
| |`apt-get install -y package` |Assumes "yes" where apt would usually prompt to continue.
|CentOS |`yum install package` |
| |`yum install package1 package2` |Installs all listed packages.
| |`yum install -y package` |Assumes "yes" where yum would usually prompt to continue.
|Fedora |`dnf install package` |
| |`dnf install package1 package2` |Installs all listed packages.
| |`dnf install -y package` |Assumes "yes" where dnf would usually prompt to continue.
|SuSE |`zypper install` |
|FreeBSD Packages |`pkg install package` |
| |`pkg install package1 package2` |Installs all listed packages.
|FreeBSD Ports |`cd /usr/ports/category/port && make install` |Builds and installs a port from source.
|=======================================================================
Install a Package from the Local Filesystem
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sometimes, even though software isn't officially packaged for a given operating system, a developer or vendor will offer package files for download. You can usually retrieve these with your web browser, or viacurl on the command line. Once a package is on the target system, it can often be installed with a single command.
On Debian-derived systems, dpkg handles individual package files. If a package has unmet dependencies, gdebi can often be used to retrieve them from official repositories.
On CentOS and Fedora systems, yum and dnf are used to install individual files, and will also handle needed dependencies.
[cols="^,<,^",options="header",]
|=======================================================================
|System |Command |Notes
|Debian / Ubuntu |`dpkg -i package.deb` |
| |`apt-get install -yg debi && gdebi package.deb` |Installs and uses gdebi to install package.deb and retrieve any missing dependencies.
|CentOS |`yum install package.rpm` |
|Fedora |`dnf install package.rpm` |
|SuSE|`zypper install package.rpm`|
|FreeBSD Packages |`pkg add package.txz` |
| |`pkg add -f package.txz` |Installs package even if already installed.
|=======================================================================
Remove One or More Installed Packages
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Since a package manager knows what files are provided by a given package, it can usually remove them cleanly from a system if the software is no longer needed.
[cols="^,<,^",options="header",]
|=======================================================================
|System |Command |Notes
|Debian / Ubuntu |`apt-get remove package` |yum remove package
| |`apt-get autoremove` |Removes unneeded packages.
|CentOS |`yum remove package` |
|Fedora |`dnf erase package` |
|FreeBSD Packages |`pkg delete package` |
| |`pkg autoremove` |Removes unneeded packages.
|SuSE |`zypper rm package` |Removes unneeded packages.
|FreeBSD Ports |`pkg delete package` |
| |`cd /usr/ports/path_to_port && make deinstall` |De-installs an installed port.
|=======================================================================
Get Help
~~~~~~~~
In addition to web-based documentation, keep in mind that Unix manual pages (usually referred to as man pages) are available for most commands from the shell. To read a page, use the `man` command. For example, `man yum` will give you a brief manual on how to use yum.
Conclusion and Further Reading
------------------------------
This guide provides an overview of basic operations that can be
cross-referenced between systems, but only scratches the surface of a
complex topic. For greater detail on a given system, you can consult the
following resources:
1. https://www.digitalocean.com/community/tutorials/ubuntu-and-debian-package-management-essentials[This
guide] covers Ubuntu and Debian package management in detail.
2. There's an https://www.centos.org/docs/5/html/yum/[official CentOS guide to managing software with yum].
3. There's a https://fedoraproject.org/wiki/Dnf[Fedora wiki page about dnf], and an https://dnf.readthedocs.org/en/latest/index.html[official manual for dnf itself]
4. https://www.digitalocean.com/community/tutorials/how-to-manage-packages-on-freebsd-10-1-with-pkg[This guide] covers FreeBSD package management using pkg.
5. The https://www.freebsd.org/doc/handbook/[FreeBSD Handbook] contains
a https://www.freebsd.org/doc/handbook/ports-using.html[section on using
the Ports Collection].
6. http://doc.opensuse.org/documentation/html/openSUSE_114/opensuse-reference/cha.sw_cl.html[OpenSuSE documentation for Zypper] and http://doc.opensuse.org/documentation/html/openSUSE_114/opensuse-reference/cha.onlineupdate.you.html[YaST].

View File

@ -1,532 +1,659 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- XML file was created by LyX 2.1.4
See http://www.lyx.org/ for more information -->
<article lang="en_US">
<articleinfo>
<title>Package Management Basics: apt, yum, dnf, pkg</title>
</articleinfo><sect1>
<title>Introduction</title>
<sect2>
<title>Why was this document written?</title>
<para>Most modern Unix-like operating systems offer a centralized mechanism for finding and installing software. Software is usually distributed in the form of;packages, kept in;repositories. Working with packages is known as;package management. Packages provide the basic components of an operating system, along with shared libraries, applications, services, and documentation.</para>
<para>A package management system does much more than one-time installation of software. It also provides tools for upgrading already-installed packages. Package repositories help to ensure that code has been vetted for use on your system, and that the installed versions of software have been approved by developers and package maintainers.</para>
<para>When configuring servers or development environments, it's often necessary look beyond official repositories. Packages in the stable release of a distribution may be out of date, especially where new or rapidly-changing software is concerned. Nevertheless, package management is a vital skill for system administrators and developers, and the wealth of packaged software for major distributions is a tremendous resource.</para>
<para>This guide is intended as a quick reference for the fundamentals of finding, installing, and upgrading packages on a variety of distributions, and should help you translate that knowledge between systems.</para></sect2><sect2>
<?asciidoc-toc?>
<?asciidoc-numbered?>
<article xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" version="5.0" xml:lang="en">
<info>
<title>Package Management Basics</title>
<subtitle>apt, yum, dnf, zypper, and pkg</subtitle>
<date>2016-03-21</date>
</info>
<section xml:id="_abstract">
<title>Abstract</title>
<simpara>This guide is intended as a quick reference for the fundamentals of finding, installing, and upgrading packages on a variety of distributions, and should help you translate that knowledge between systems.</simpara>
</section>
<section xml:id="_audience">
<title>Audience</title>
<para>For those new to Linux who need a basic understanding of package management.</para></sect2><sect2>
<simpara>For those new to Linux who need a basic understanding of package management.</simpara>
</section>
<section xml:id="_original_version_of_this_doc">
<title>Original version of this doc</title>
<para>The original version of this guide can be found at <ulink url="https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg">Digital Ocean</ulink>.</para></sect2><sect2>
<simpara>The original version of this guide can be found at <link xl:href="https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg">Digital Ocean</link>.</simpara>
</section>
<section xml:id="_revision_history">
<title>Revision History</title>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="center"/>
<colspec colname="col2" align="center"/>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="3">
<colspec colname="col_1" colwidth="33.3333*"/>
<colspec colname="col_2" colwidth="33.3333*"/>
<colspec colname="col_3" colwidth="33.3334*"/>
<tbody>
<row>
<entry align="center" valign="top">15.1.2016</entry>
<entry align="center" valign="top">v1.0 converted and edited for TLDP</entry>
<entry align="center" valign="top">Jason Evans</entry>
<entry align="center" valign="top"><simpara>15.1.2016</simpara></entry>
<entry align="center" valign="top"><simpara>v1.0 Converted and edited for TLDP</simpara></entry>
<entry align="center" valign="top"><simpara>Jason Evans</simpara></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>15.2.2016</simpara></entry>
<entry align="center" valign="top"><simpara>v1.1 Changed format to asciidoc and made corrections</simpara></entry>
<entry align="center" valign="top"><simpara>Jason Evans</simpara></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
</tgroup>
</informaltable>
</section>
<section xml:id="_contributions">
<title>Contributions</title>
<itemizedlist>
<listitem><para><ulink url="https://www.digitalocean.com/community/users/bpb">Brennen Bearnes</ulink> (original author).</para></listitem><listitem><para><ulink url="http://wiki.tldp.org/Jason%20Evans">Jason Evans</ulink> (editor and maintainer for TLDP)</para></listitem></itemizedlist></sect2><sect2>
<listitem>
<simpara><link xl:href="https://www.digitalocean.com/community/users/bpb">Brennen Bearnes</link>
(original author).</simpara>
</listitem>
<listitem>
<simpara><link xl:href="http://wiki.tldp.org/Jason%20Evans">Jason Evans</link> (editor and maintainer for TLDP)</simpara>
</listitem>
</itemizedlist>
</section>
<section xml:id="_feedback">
<title>Feedback</title>
<para>Missing information, missing links, missing characters? Mail it to the maintainer of this document: <ulink url="mailto://jsevans at youvegotthe.info">jsevans at youvegotthe.info</ulink></para></sect2><sect2>
<simpara>Missing information, missing links, missing characters? Mail it to the maintainer of this document: jsevans <emphasis>at</emphasis> youvegotthe.info</simpara>
</section>
<section xml:id="_copyright_information">
<title>Copyright information</title>
<para>This work is licensed under a <ulink url="https://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</ulink>.</para></sect2><sect2>
<simpara>This work is licensed under a <link xl:href="https://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</link>.</simpara>
</section>
<section xml:id="_introduction">
<title>Introduction</title>
<section xml:id="_why_was_this_document_written">
<title>Why was this document written?</title>
<simpara>Most modern Unix-like operating systems offer a centralized mechanism for finding and installing software. Software is usually distributed in the form of packages, kept in repositories. Working with packages is known as package management. Packages provide the basic components of an operating system, along with shared libraries, applications, services, and documentation.</simpara>
<simpara>A package management system does much more than one-time installation of software. It also provides tools for upgrading already-installed packages. Package repositories help to ensure that code has been vetted for use on your system, and that the installed versions of software have been approved by developers and package maintainers.</simpara>
<simpara>When configuring servers or development environments, it&#8217;s often necessary look beyond official repositories. Packages in the stable release of a distribution may be out of date, especially where new or rapidly-changing software is concerned. Nevertheless, package management is a vital skill for system administrators and developers, and the wealth of packaged software for major distributions is a tremendous
resource.</simpara>
</section>
<section xml:id="_what_do_you_need">
<title>What do you need?</title>
<para>This guide covers Debian, Ubuntu, CentOS, Fedora, and FreeBSD and will require one of those distributions to be installed</para></sect2></sect1><sect1>
<simpara>This guide covers Debian, Ubuntu, CentOS, Fedora, SuSE, and FreeBSD and will require one of those distributions to be installed.</simpara>
<note>
<simpara>All of the commands in this guide assume that the user is running the commands as root or with <literal>sudo</literal>.</simpara>
</note>
</section>
<section xml:id="_package_management_systems_a_brief_overview">
<title>Package Management Systems: A Brief Overview</title>
<para>Most package systems are built around collections of package files. A package file is usually an archive which contains compiled binaries and other resources making up the software, along with installation scripts. Packages also contain valuable metadata, including their;dependencies, a list of other packages required to install and run them.</para>
<para>While their functionality and benefits are broadly similar, packaging formats and tools vary by platform:</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<simpara>In a Windows environment, programs are packaged in .exe or .msi installers which will then install most of the files needed to run the program. If your computer doesn&#8217;t have some dependant applications, then the program that you are trying to run will either not install or not run properly. You will then have to scour the internet in order to find the missing required applications or libraries. For example in CentOS 7, in order to install the VIM text editor, I need to add the following packages:</simpara>
<literallayout class="monospaced"> gpm-libs x86_64 1.20.7-5.el7 base 32 k
groff-base x86_64 1.22.2-8.el7 base 942 k
perl x86_64 4:5.16.3-286.el7 base 8.0 M
perl-Carp noarch 1.26-244.el7 base 19 k
perl-Encode x86_64 2.51-7.el7 base 1.5 M
perl-Exporter noarch 5.68-3.el7 base 28 k
perl-File-Path noarch 2.09-2.el7 base 26 k
perl-File-Temp noarch 0.23.01-3.el7 base 56 k
perl-Filter x86_64 1.49-3.el7 base 76 k
perl-Getopt-Long noarch 2.40-2.el7 base 56 k
perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k
perl-PathTools x86_64 3.40-5.el7 base 82 k
perl-Pod-Escapes noarch 1:1.04-286.el7 base 50 k
perl-Pod-Perldoc noarch 3.20-4.el7 base 87 k
perl-Pod-Simple noarch 1:3.28-4.el7 base 216 k
perl-Pod-Usage noarch 1.63-3.el7 base 27 k
perl-Scalar-List-Utils x86_64 1.27-248.el7 base 36 k
perl-Socket x86_64 2.010-3.el7 base 49 k
perl-Storable x86_64 2.45-3.el7 base 77 k
perl-Text-ParseWords noarch 3.29-4.el7 base 14 k
perl-Time-HiRes x86_64 4:1.9725-3.el7 base 45 k
perl-Time-Local noarch 1.2300-2.el7 base 24 k
perl-constant noarch 1.27-2.el7 base 19 k
perl-libs x86_64 4:5.16.3-286.el7 base 687 k
perl-macros x86_64 4:5.16.3-286.el7 base 43 k
perl-parent noarch 1:0.225-244.el7 base 12 k
perl-podlators noarch 2.5.1-3.el7 base 112 k
perl-threads x86_64 1.87-4.el7 base 49 k
perl-threads-shared x86_64 1.43-6.el7 base 39 k
vim-common x86_64 2:7.4.160-1.el7 base 5.9 M
vim-filesystem x86_64 2:7.4.160-1.el7 base 9.6 k
which x86_64 2.20-7.el7 base 41 k</literallayout>
<simpara>Imagine trying to manually install all of these programs one at a time just to be able to install a text editor! In the early days of Linux, we faced these kinds of problems, however this problem is fixed with package management systems such as apt, yum, and others. Package managers simplify everything. They look at the package that you want to install such as VIM, LibreOffice, etc., then look at what other package it depends upon, the dependencies of those packages, and so on; then it downloads them all and installs them. For example, in order to install VIM in CentOS 7 today, I simply have to run <literal>yum install vim</literal>.</simpara>
<section xml:id="_some_different_package_management_systems">
<title>Some different package management systems:</title>
<simpara>While their functionality and benefits are broadly similar, packaging formats and tools vary by platform:</simpara>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="3">
<colspec colname="col_1" colwidth="33.3333*"/>
<colspec colname="col_2" colwidth="33.3333*"/>
<colspec colname="col_3" colwidth="33.3334*"/>
<thead>
<row>
<entry align="center" valign="top">Operating System </entry>
<entry align="left" valign="top">Format </entry>
<entry align="center" valign="top">Operating System</entry>
<entry align="left" valign="top">Format</entry>
<entry align="center" valign="top">Tool(s)</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian </entry>
<entry align="left" valign="top">.deb </entry>
<entry align="center" valign="top">apt, apt-cache, apt-get, dpkg</entry>
<entry align="center" valign="top"><simpara>Debian</simpara></entry>
<entry align="left" valign="top"><simpara>.deb</simpara></entry>
<entry align="center" valign="top"><simpara>apt, apt-cache, apt-get, dpkg</simpara></entry>
</row>
<row>
<entry align="center" valign="top">Ubuntu </entry>
<entry align="left" valign="top">.deb </entry>
<entry align="center" valign="top">apt, apt-cache, apt-get, dpkg</entry>
<entry align="center" valign="top"><simpara>Ubuntu</simpara></entry>
<entry align="left" valign="top"><simpara>.deb</simpara></entry>
<entry align="center" valign="top"><simpara>apt, apt-cache, apt-get, dpkg</simpara></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">.rpm </entry>
<entry align="center" valign="top">yum</entry>
<entry align="center" valign="top"><simpara>CentOS</simpara></entry>
<entry align="left" valign="top"><simpara>.rpm</simpara></entry>
<entry align="center" valign="top"><simpara>yum</simpara></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">.rpm </entry>
<entry align="center" valign="top">dnf</entry>
<entry align="center" valign="top"><simpara>Fedora</simpara></entry>
<entry align="left" valign="top"><simpara>.rpm</simpara></entry>
<entry align="center" valign="top"><simpara>dnf</simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD </entry>
<entry align="left" valign="top">Ports,;.txz </entry>
<entry align="center" valign="top">make, pkg</entry>
<entry align="center" valign="top"><simpara>SuSE</simpara></entry>
<entry align="left" valign="top"><simpara>.rpm</simpara></entry>
<entry align="center" valign="top"><simpara>zypper</simpara></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>FreeBSD</simpara></entry>
<entry align="left" valign="top"><simpara>Ports, .txz</simpara></entry>
<entry align="center" valign="top"><simpara>make, pkg</simpara></entry>
</row>
</tbody>
</tgroup></informaltable>
<para>In Debian and systems based on it, like Ubuntu, Linux Mint, and Raspbian, the package format is the;.debfile. APT, the Advanced Packaging Tool, provides commands used for most common operations: Searching repositories, installing collections of packages and their dependencies, and managing upgrades. APT commands operate as a front-end to the lower-level;dpkg;utility, which handles the installation of individual;.deb;files on the local system, and is sometimes invoked directly.</para>
<para>CentOS, Fedora, and other members of the Red Hat family use RPM files. In CentOS,;yum;is used to interact with both individual package files and repositories.</para>
<para>In recent versions of Fedora,;yum;has been supplanted by;dnf, a modernized fork which retains most ofyum's interface.</para>
<para>FreeBSD's binary package system is administered with the;pkg;command. FreeBSD also offers the Ports Collection, a local directory structure and tools which allow the user to fetch, compile, and install packages directly from source using Makefiles. It's usually much more convenient to use;pkg, but occasionally a pre-compiled package is unavailable, or you may need to change compile-time options.</para><sect2>
</tgroup>
</informaltable>
<simpara>In Debian and systems based on it, like Ubuntu, Linux Mint, and Raspbian, the package format is the .debfile. APT, the Advanced Packaging Tool, provides commands used for most common operations: Searching repositories, installing collections of packages and their dependencies, and managing upgrades. APT commands operate as a front-end to the lower-level dpkg utility, which handles the installation of individual .deb files on the local system, and is sometimes invoked directly.</simpara>
<simpara>Fedora and enterprise level distributions like Red Hat Enterprise Linux (RHEL), CentOS, and Oracle Linux use RPM files. In CentOS, Oracle, and RHEL, yum is used to interact with both individual package files and repositories. In recent versions of Fedora, yum has been supplanted by dnf, a modernized fork which retains most of yum&#8217;s interface.</simpara>
<simpara>SuSE also uses RPM files. However, the package management software is known as zypper. Zypper&#8217;s command line interface is very similar to yum and YasT can be access from a graphical mode or from the command line.</simpara>
<simpara>FreeBSD&#8217;s binary package system is administered with the pkg command. FreeBSD also offers the Ports Collection, a local directory structure and tools which allow the user to fetch, compile, and install packages directly from source using Makefiles. It&#8217;s usually much more convenient to use pkg, but occasionally a pre-compiled package is unavailable, or syou may need to change compile-time options.</simpara>
</section>
<section xml:id="_update_package_lists">
<title>Update Package Lists</title>
<para>Most systems keep a local database of the packages available from remote repositories. It's best to update this database before installing or upgrading packages. As a partial exception to this pattern,;yumand;dnf;will check for updates before performing some operations, but you can ask them at any time whether updates are available.</para>
<informaltable><tgroup cols="2" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="center"/>
<simpara>Most systems keep a local database of the packages available from remote repositories. It&#8217;s best to update this database before installing or upgrading packages. As a partial exception to this pattern, yum and dnf will check for updates before performing some operations, but you can ask them at any time whether updates are available.</simpara>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="2">
<colspec colname="col_1" colwidth="50*"/>
<colspec colname="col_2" colwidth="50*"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="center" valign="top">System</entry>
<entry align="center" valign="top">Command</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="center" valign="top">sudo apt-get update</entry>
<entry align="center" valign="top"><simpara>Debian / Ubuntu</simpara></entry>
<entry align="center" valign="top"><simpara><literal>apt-get update</literal></simpara></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="center" valign="top">yum check-update</entry>
<entry align="center" valign="top"><simpara>CentOS</simpara></entry>
<entry align="center" valign="top"><simpara><literal>yum check-update</literal></simpara></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="center" valign="top">dnf check-update</entry>
<entry align="center" valign="top"><simpara>Fedora</simpara></entry>
<entry align="center" valign="top"><simpara><literal>dnf check-update</literal></simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="center" valign="top">sudo pkg update</entry>
<entry align="center" valign="top"><simpara>SuSE</simpara></entry>
<entry align="center" valign="top"><simpara><literal>zypper refresh</literal></simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="center" valign="top">sudo portsnap fetch update</entry>
<entry align="center" valign="top"><simpara>FreeBSD Packages</simpara></entry>
<entry align="center" valign="top"><simpara><literal>pkg update</literal></simpara></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>FreeBSD Ports</simpara></entry>
<entry align="center" valign="top"><simpara><literal>portsnap fetch update</literal></simpara></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
</tgroup>
</informaltable>
</section>
<section xml:id="_upgrade_installed_packages">
<title>Upgrade Installed Packages</title>
<para>Making sure that all of the installed software on a machine stays up to date would be an enormous undertaking without a package system. You would have to track upstream changes and security alerts for hundreds of different packages. While a package manager doesn't solve every problem you'll encounter when upgrading software, it does enable you to maintain most system components with a few commands.</para>
<para>On FreeBSD, upgrading installed ports can introduce breaking changes or require manual configuration steps. It's best to read;/usr/ports/UPDATING;before upgrading with;portmaster.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<simpara>Making sure that all of the installed software on a machine stays up to date would be an enormous undertaking without a package system. You would have to track upstream changes and security alerts for hundreds of different packages. While a package manager doesn&#8217;t solve every problem you&#8217;ll encounter when upgrading software, it does enable you to maintain most system components with a few commands.</simpara>
<simpara>On FreeBSD, upgrading installed ports can introduce breaking changes or require manual configuration steps. It&#8217;s best to read /usr/ports/UPDATING before upgrading with portmaster.</simpara>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="3">
<colspec colname="col_1" colwidth="33.3333*"/>
<colspec colname="col_2" colwidth="33.3333*"/>
<colspec colname="col_3" colwidth="33.3334*"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">System</entry>
<entry align="left" valign="top">Command</entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">sudo apt-get upgrade </entry>
<entry align="center" valign="top">Only upgrades installed packages, where possible.</entry>
<entry align="center" valign="top"><simpara>Debian / Ubuntu</simpara></entry>
<entry align="left" valign="top"><simpara><literal>apt-get upgrade</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Only upgrades installed packages, where possible.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get dist-upgrade </entry>
<entry align="center" valign="top">May add or remove packages to satisfy new dependencies.</entry>
<entry align="left" valign="top"><simpara><literal>apt-get dist-upgrade</literal></simpara></entry>
<entry align="center" valign="top"><simpara>May add or remove packages to satisfy new dependencies.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">sudo yum update </entry>
<entry align="center" valign="top"><simpara>CentOS</simpara></entry>
<entry align="left" valign="top"><simpara><literal>yum update</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">sudo dnf upgrade </entry>
<entry align="center" valign="top"><simpara>Fedora</simpara></entry>
<entry align="left" valign="top"><simpara><literal>dnf upgrade</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">sudo pkg upgrade </entry>
<entry align="center" valign="top"><simpara>SuSE</simpara></entry>
<entry align="left" valign="top"><simpara><literal>zypper update</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">less /usr/ports/UPDATING </entry>
<entry align="center" valign="top">Uses;less;to view update notes for ports (use arrow keys to scroll, pressq;to quit).</entry>
<entry align="center" valign="top"><simpara>FreeBSD Packages</simpara></entry>
<entry align="left" valign="top"><simpara><literal>pkg upgrade</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>FreeBSD Ports</simpara></entry>
<entry align="left" valign="top"><simpara><literal>less /usr/ports/UPDATING</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Uses less to view update notes for ports (use arrow keys to scroll, pressq to quit).</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">cd /usr/ports/ports-mgmt/portmaster &amp;&amp; sudo make install &amp;&amp; sudo portmaster -a </entry>
<entry align="center" valign="top">Installs;portmaster;and uses it to update installed ports.</entry>
<entry align="left" valign="top"><simpara><literal>cd /usr/ports/ports-mgmt/portmaster &amp;&amp; make install &amp;&amp; portmaster -a</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Installs portmaster and uses it to update installed ports.</simpara></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
</tgroup>
</informaltable>
</section>
</section>
<section xml:id="_find_a_package">
<title>Find a Package</title>
<para>Most distributions offer a graphical or menu-driven front end to package collections. These can be a good way to browse by category and discover new software. Often, however, the quickest and most effective way to locate a package is to search with command-line tools.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<simpara>Most distributions offer a graphical or menu-driven front end to package
collections. These can be a good way to browse by category and discover
new software. Often, however, the quickest and most effective way to
locate a package is to search with command-line tools.</simpara>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="3">
<colspec colname="col_1" colwidth="33.3333*"/>
<colspec colname="col_2" colwidth="33.3333*"/>
<colspec colname="col_3" colwidth="33.3334*"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">System</entry>
<entry align="left" valign="top">Command</entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">apt-cache search;search_string </entry>
<entry align="center" valign="top"><simpara>Debian / Ubuntu</simpara></entry>
<entry align="left" valign="top"><simpara><literal>apt-cache search</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">yum search;search_string </entry>
<entry align="center" valign="top"><simpara>CentOS</simpara></entry>
<entry align="left" valign="top"><simpara><literal>yum search</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">yum search all;search_string </entry>
<entry align="center" valign="top">Searches all fields, including description.</entry>
<entry align="left" valign="top"><simpara><literal>yum search all</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Searches all fields, including description.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">dnf search;search_string </entry>
<entry align="center" valign="top"><simpara>Fedora</simpara></entry>
<entry align="left" valign="top"><simpara><literal>dnf search</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">dnf search all;search_string </entry>
<entry align="center" valign="top">Searches all fields, including description.</entry>
<entry align="left" valign="top"><simpara><literal>dnf search all</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Searches all fields, including description.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">pkg search;search_string </entry>
<entry align="center" valign="top">Searches by name.</entry>
<entry align="center" valign="top"><simpara>SuSE</simpara></entry>
<entry align="left" valign="top"><simpara><literal>zypper se</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>FreeBSD Packages</simpara></entry>
<entry align="left" valign="top"><simpara><literal>pkg search</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Searches by name.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">pkg search -f;search_string </entry>
<entry align="center" valign="top">Searches by name, returning full descriptions.</entry>
<entry align="left" valign="top"><simpara><literal>pkg search -f</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Searches by name, returning full descriptions.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">pkg search -D;search_string </entry>
<entry align="center" valign="top">Searches description.</entry>
<entry align="left" valign="top"><simpara><literal>pkg search -D</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Searches description.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">cd /usr/ports &amp;&amp; make search name=package </entry>
<entry align="center" valign="top">Searches by name.</entry>
<entry align="center" valign="top"><simpara>FreeBSD Ports</simpara></entry>
<entry align="left" valign="top"><simpara><literal>cd /usr/ports &amp;&amp; make search name=package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Searches by name.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">cd /usr/ports &amp;&amp; make search key=search_string </entry>
<entry align="center" valign="top">Searches comments, descriptions, and dependencies.</entry>
<entry align="left" valign="top"><simpara><literal>cd /usr/ports &amp;&amp; make search key=</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Searches comments, descriptions, and dependencies.</simpara></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
</tgroup>
</informaltable>
</section>
<section xml:id="_view_info_about_a_specific_package">
<title>View Info About a Specific Package</title>
<para>When deciding what to install, it's often helpful to read detailed descriptions of packages. Along with human-readable text, these often include metadata like version numbers and a list of the package's dependencies.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<simpara>When deciding what to install, it&#8217;s often helpful to read detailed descriptions of packages. Along with human-readable text, these often include metadata like version numbers and a list of the package&#8217;s dependencies.</simpara>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="3">
<colspec colname="col_1" colwidth="33.3333*"/>
<colspec colname="col_2" colwidth="33.3333*"/>
<colspec colname="col_3" colwidth="33.3334*"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">System</entry>
<entry align="left" valign="top">Command</entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">apt-cache show;package </entry>
<entry align="center" valign="top">Shows locally-cached info about a package.</entry>
<entry align="center" valign="top"><simpara>Debian / Ubuntu</simpara></entry>
<entry align="left" valign="top"><simpara><literal>apt-cache show package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Shows locally-cached info about a package.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">dpkg -s;package </entry>
<entry align="center" valign="top">Shows the current installed status of a package.</entry>
<entry align="left" valign="top"><simpara><literal>dpkg -s package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Shows the current installed status of a package.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">yum info;package </entry>
<entry align="center" valign="top"><simpara>CentOS</simpara></entry>
<entry align="left" valign="top"><simpara><literal>yum info package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">yum deplist;package </entry>
<entry align="center" valign="top">Lists dependencies for a package.</entry>
<entry align="left" valign="top"><simpara><literal>yum deplist package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Lists dependencies for a package.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">dnf info;package </entry>
<entry align="center" valign="top"><simpara>Fedora</simpara></entry>
<entry align="left" valign="top"><simpara><literal>dnf info package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">dnf repoquery -\/-requires;package </entry>
<entry align="center" valign="top">Lists dependencies for a package.</entry>
<entry align="left" valign="top"><simpara><literal>dnf repoquery -\/-requires package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Lists dependencies for a package.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">pkg info;package </entry>
<entry align="center" valign="top">Shows info for an installed package.</entry>
<entry align="center" valign="top"><simpara>SuSE</simpara></entry>
<entry align="left" valign="top"><simpara><literal>zypper info search string</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Lists dependencies for a package.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">cd /usr/ports/category/port;&amp;&amp; cat pkg-descr </entry>
<entry align="center" valign="top"><simpara>FreeBSD Packages</simpara></entry>
<entry align="left" valign="top"><simpara><literal>pkg info package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Shows info for an installed package.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>FreeBSD Ports</simpara></entry>
<entry align="left" valign="top"><simpara><literal>cd /usr/ports/category/port &amp;&amp; cat pkg-descr</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
</tgroup>
</informaltable>
</section>
<section xml:id="_install_a_package_from_repositories">
<title>Install a Package from Repositories</title>
<para>Once you know the name of a package, you can usually install it and its dependencies with a single command. In general, you can supply multiple packages to install simply by listing them all.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<simpara>Once you know the name of a package, you can usually install it and its dependencies with a single command. In general, you can supply multiple packages to install simply by listing them all.</simpara>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="3">
<colspec colname="col_1" colwidth="33.3333*"/>
<colspec colname="col_2" colwidth="33.3333*"/>
<colspec colname="col_3" colwidth="33.3334*"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">System</entry>
<entry align="left" valign="top">Command</entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">sudo apt-get install;package </entry>
<entry align="center" valign="top"><simpara>Debian / Ubuntu</simpara></entry>
<entry align="left" valign="top"><simpara><literal>apt-get install package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get install;package1 package2 ... </entry>
<entry align="center" valign="top">Installs all listed packages.</entry>
<entry align="left" valign="top"><simpara><literal>apt-get install package1 package2</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Installs all listed packages.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get install -y;package </entry>
<entry align="center" valign="top">Assumes "yes" where;apt;would usually prompt to continue.</entry>
<entry align="left" valign="top"><simpara><literal>apt-get install -y package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Assumes "yes" where apt would usually prompt to continue.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">sudo yum install;package </entry>
<entry align="center" valign="top"><simpara>CentOS</simpara></entry>
<entry align="left" valign="top"><simpara><literal>yum install package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo yum install;package1 package2 ... </entry>
<entry align="center" valign="top">Installs all listed packages.</entry>
<entry align="left" valign="top"><simpara><literal>yum install package1 package2</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Installs all listed packages.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo yum install -y;package </entry>
<entry align="center" valign="top">Assumes "yes" where;yum;would usually prompt to continue.</entry>
<entry align="left" valign="top"><simpara><literal>yum install -y package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Assumes "yes" where yum would usually prompt to continue.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">sudo dnf install;package </entry>
<entry align="center" valign="top"><simpara>Fedora</simpara></entry>
<entry align="left" valign="top"><simpara><literal>dnf install package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo dnf install;package1 package2 ... </entry>
<entry align="center" valign="top">Installs all listed packages.</entry>
<entry align="left" valign="top"><simpara><literal>dnf install package1 package2</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Installs all listed packages.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo dnf install -y;package </entry>
<entry align="center" valign="top">Assumes "yes" where;dnf;would usually prompt to continue.</entry>
<entry align="left" valign="top"><simpara><literal>dnf install -y package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Assumes "yes" where dnf would usually prompt to continue.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">sudo pkg install;package </entry>
<entry align="center" valign="top"><simpara>SuSE</simpara></entry>
<entry align="left" valign="top"><simpara><literal>zypper install</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>FreeBSD Packages</simpara></entry>
<entry align="left" valign="top"><simpara><literal>pkg install package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo pkg install;package1 package2 ... </entry>
<entry align="center" valign="top">Installs all listed packages.</entry>
<entry align="left" valign="top"><simpara><literal>pkg install package1 package2</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Installs all listed packages.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">cd /usr/ports/category/port;&amp;&amp; sudo make install </entry>
<entry align="center" valign="top">Builds and installs a port from source.</entry>
<entry align="center" valign="top"><simpara>FreeBSD Ports</simpara></entry>
<entry align="left" valign="top"><simpara><literal>cd /usr/ports/category/port &amp;&amp; make install</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Builds and installs a port from source.</simpara></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
</tgroup>
</informaltable>
</section>
<section xml:id="_install_a_package_from_the_local_filesystem">
<title>Install a Package from the Local Filesystem</title>
<para>Sometimes, even though software isn't officially packaged for a given operating system, a developer or vendor will offer package files for download. You can usually retrieve these with your web browser, or viacurl;on the command line. Once a package is on the target system, it can often be installed with a single command.</para>
<para>On Debian-derived systems,;dpkg;handles individual package files. If a package has unmet dependencies,;gdebi;can often be used to retrieve them from official repositories.</para>
<para>On CentOS and Fedora systems,;yum;and;dnf;are used to install individual files, and will also handle needed dependencies.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<simpara>Sometimes, even though software isn&#8217;t officially packaged for a given operating system, a developer or vendor will offer package files for download. You can usually retrieve these with your web browser, or viacurl on the command line. Once a package is on the target system, it can often be installed with a single command.</simpara>
<simpara>On Debian-derived systems, dpkg handles individual package files. If a package has unmet dependencies, gdebi can often be used to retrieve them from official repositories.</simpara>
<simpara>On CentOS and Fedora systems, yum and dnf are used to install individual files, and will also handle needed dependencies.</simpara>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="3">
<colspec colname="col_1" colwidth="33.3333*"/>
<colspec colname="col_2" colwidth="33.3333*"/>
<colspec colname="col_3" colwidth="33.3334*"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">System</entry>
<entry align="left" valign="top">Command</entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">sudo dpkg -i;package.deb </entry>
<entry align="center" valign="top"><simpara>Debian / Ubuntu</simpara></entry>
<entry align="left" valign="top"><simpara><literal>dpkg -i package.deb</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get install -ygdebi &amp;&amp; sudo gdebipackage.deb </entry>
<entry align="center" valign="top">Installs and uses gdebi to install package.deb and retrieve any missing dependencies.</entry>
<entry align="left" valign="top"><simpara><literal>apt-get install -yg debi &amp;&amp; gdebi package.deb</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Installs and uses gdebi to install package.deb and retrieve any missing dependencies.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">sudo yum install;package.rpm </entry>
<entry align="center" valign="top"><simpara>CentOS</simpara></entry>
<entry align="left" valign="top"><simpara><literal>yum install package.rpm</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">sudo dnf install;package.rpm </entry>
<entry align="center" valign="top"><simpara>Fedora</simpara></entry>
<entry align="left" valign="top"><simpara><literal>dnf install package.rpm</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">sudo pkg add;package.txz </entry>
<entry align="center" valign="top"><simpara>SuSE</simpara></entry>
<entry align="left" valign="top"><simpara><literal>zypper install package.rpm</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>FreeBSD Packages</simpara></entry>
<entry align="left" valign="top"><simpara><literal>pkg add package.txz</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo pkg add -f;package.txz </entry>
<entry align="center" valign="top">Installs package even if already installed.</entry>
<entry align="left" valign="top"><simpara><literal>pkg add -f package.txz</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Installs package even if already installed.</simpara></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
</tgroup>
</informaltable>
</section>
<section xml:id="_remove_one_or_more_installed_packages">
<title>Remove One or More Installed Packages</title>
<para>Since a package manager knows what files are provided by a given package, it can usually remove them cleanly from a system if the software is no longer needed.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<simpara>Since a package manager knows what files are provided by a given package, it can usually remove them cleanly from a system if the software is no longer needed.</simpara>
<informaltable frame="all" rowsep="1" colsep="1">
<tgroup cols="3">
<colspec colname="col_1" colwidth="33.3333*"/>
<colspec colname="col_2" colwidth="33.3333*"/>
<colspec colname="col_3" colwidth="33.3334*"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">System</entry>
<entry align="left" valign="top">Command</entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">sudo apt-get remove;package </entry>
<entry align="center" valign="top"><simpara>Debian / Ubuntu</simpara></entry>
<entry align="left" valign="top"><simpara><literal>apt-get remove package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>yum remove package</simpara></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top"><simpara><literal>apt-get autoremove</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Removes unneeded packages.</simpara></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>CentOS</simpara></entry>
<entry align="left" valign="top"><simpara><literal>yum remove package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>Fedora</simpara></entry>
<entry align="left" valign="top"><simpara><literal>dnf erase package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"><simpara>FreeBSD Packages</simpara></entry>
<entry align="left" valign="top"><simpara><literal>pkg delete package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo apt-get autoremove </entry>
<entry align="center" valign="top">Removes unneeded packages.</entry>
<entry align="left" valign="top"><simpara><literal>pkg autoremove</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Removes unneeded packages.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">sudo yum remove;package </entry>
<entry align="center" valign="top"></entry>
<entry align="center" valign="top"><simpara>SuSE</simpara></entry>
<entry align="left" valign="top"><simpara><literal>zypper rm package</literal></simpara></entry>
<entry align="center" valign="top"><simpara>Removes unneeded packages.</simpara></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">sudo dnf erase;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">sudo pkg delete;package </entry>
<entry align="center" valign="top"><simpara>FreeBSD Ports</simpara></entry>
<entry align="left" valign="top"><simpara><literal>pkg delete package</literal></simpara></entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">sudo pkg autoremove </entry>
<entry align="center" valign="top">Removes unneeded packages.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">sudo pkg delete;package </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">cd /usr/ports/path_to_port;&amp;&amp; make deinstall </entry>
<entry align="center" valign="top">De-installs an installed port.</entry>
<entry align="left" valign="top"><simpara><literal>cd /usr/ports/path_to_port &amp;&amp; make deinstall</literal></simpara></entry>
<entry align="center" valign="top"><simpara>De-installs an installed port.</simpara></entry>
</row>
</tbody>
</tgroup></informaltable></sect2><sect2>
</tgroup>
</informaltable>
</section>
<section xml:id="_get_help">
<title>Get Help</title>
<para>In addition to web-based documentation, keep in mind that Unix manual pages (usually referred to as;man pages) are available for most commands from the shell. To read a page, use man:</para><screen>
<![CDATA[$ man page
]]></screen><para>In man, you can navigate with the arrow keys. Press / to search for text within the page, and q to quit.</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="center"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="center"/>
<thead>
<row>
<entry align="center" valign="top">System </entry>
<entry align="left" valign="top">Command </entry>
<entry align="center" valign="top">Notes</entry>
</row>
</thead>
<tbody>
<row>
<entry align="center" valign="top">Debian / Ubuntu </entry>
<entry align="left" valign="top">man apt-get </entry>
<entry align="center" valign="top">Updating the local package database and working with packages.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">man apt-cache </entry>
<entry align="center" valign="top">Querying the local package database.</entry>
</row>
<row>
<entry align="center" valign="top"></entry>
<entry align="left" valign="top">man dpkg </entry>
<entry align="center" valign="top">Working with individual package files and querying installed packages.</entry>
</row>
<row>
<entry align="center" valign="top">CentOS </entry>
<entry align="left" valign="top">man yum </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">Fedora </entry>
<entry align="left" valign="top">man dnf </entry>
<entry align="center" valign="top"></entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Packages </entry>
<entry align="left" valign="top">man pkg </entry>
<entry align="center" valign="top">Working with pre-compiled binary packages.</entry>
</row>
<row>
<entry align="center" valign="top">FreeBSD Ports </entry>
<entry align="left" valign="top">man ports </entry>
<entry align="center" valign="top">Working with the Ports Collection.</entry>
</row>
</tbody>
</tgroup></informaltable></sect2></sect1><sect1>
<simpara>In addition to web-based documentation, keep in mind that Unix manual pages (usually referred to as man pages) are available for most commands from the shell. To read a page, use the <literal>man</literal> command. For example, <literal>man yum</literal> will give you a brief manual on how to use yum.</simpara>
</section>
</section>
<section xml:id="_conclusion_and_further_reading">
<title>Conclusion and Further Reading</title>
<para>This guide provides an overview of basic operations that can be cross-referenced between systems, but only scratches the surface of a complex topic. For greater detail on a given system, you can consult the following resources:</para><orderedlist>
<listitem><para><ulink url="https://www.digitalocean.com/community/tutorials/ubuntu-and-debian-package-management-essentials">This guide</ulink> covers Ubuntu and Debian package management in detail. </para></listitem><listitem><para>There's an <ulink url="https://www.centos.org/docs/5/html/yum/">official CentOS guide to managing software with~</ulink><ulink url="https://www.centos.org/docs/5/html/yum/">yum</ulink>. </para></listitem><listitem><para>There's a <ulink url="https://fedoraproject.org/wiki/Dnf">Fedora wiki page about~</ulink><ulink url="https://fedoraproject.org/wiki/Dnf">dnf</ulink>, and an <ulink url="https://dnf.readthedocs.org/en/latest/index.html">official manual for~</ulink><ulink url="https://dnf.readthedocs.org/en/latest/index.html">dnf</ulink><ulink url="https://dnf.readthedocs.org/en/latest/index.html">~itself</ulink>. </para></listitem><listitem><para><ulink url="https://www.digitalocean.com/community/tutorials/how-to-manage-packages-on-freebsd-10-1-with-pkg">This guide</ulink> covers FreeBSD package management using pkg. </para></listitem><listitem><para>The <ulink url="https://www.freebsd.org/doc/handbook/">FreeBSD Handbook</ulink>;contains a;<ulink url="https://www.freebsd.org/doc/handbook/ports-using.html">section on using the Ports Collection</ulink>. </para></listitem></orderedlist></sect1></article>
<simpara>This guide provides an overview of basic operations that can be
cross-referenced between systems, but only scratches the surface of a
complex topic. For greater detail on a given system, you can consult the
following resources:</simpara>
<orderedlist numeration="arabic">
<listitem>
<simpara><link xl:href="https://www.digitalocean.com/community/tutorials/ubuntu-and-debian-package-management-essentials">This
guide</link> covers Ubuntu and Debian package management in detail.</simpara>
</listitem>
<listitem>
<simpara>There&#8217;s an <link xl:href="https://www.centos.org/docs/5/html/yum/">official CentOS guide to managing software with yum</link>.</simpara>
</listitem>
<listitem>
<simpara>There&#8217;s a <link xl:href="https://fedoraproject.org/wiki/Dnf">Fedora wiki page about dnf</link>, and an <link xl:href="https://dnf.readthedocs.org/en/latest/index.html">official manual for dnf itself</link></simpara>
</listitem>
<listitem>
<simpara><link xl:href="https://www.digitalocean.com/community/tutorials/how-to-manage-packages-on-freebsd-10-1-with-pkg">This guide</link> covers FreeBSD package management using pkg.</simpara>
</listitem>
<listitem>
<simpara>The <link xl:href="https://www.freebsd.org/doc/handbook/">FreeBSD Handbook</link> contains
a <link xl:href="https://www.freebsd.org/doc/handbook/ports-using.html">section on using
the Ports Collection</link>.</simpara>
</listitem>
<listitem>
<simpara><link xl:href="http://doc.opensuse.org/documentation/html/openSUSE_114/opensuse-reference/cha.sw_cl.html">OpenSuSE documentation for Zypper</link> and <link xl:href="http://doc.opensuse.org/documentation/html/openSUSE_114/opensuse-reference/cha.onlineupdate.you.html">YaST</link>.</simpara>
</listitem>
</orderedlist>
</section>
</article>