From 27b884f8e67079bbb4c730e70468bba39494ed65 Mon Sep 17 00:00:00 2001 From: "Jason S. Evans" Date: Mon, 15 Feb 2016 14:21:33 +0000 Subject: [PATCH] Added new version of file --- .../Package-Management-Basics.adoc | 387 ++++++++++++++++++ 1 file changed, 387 insertions(+) create mode 100644 LDP/users/Jason-Evans/Package-Management-Basics.adoc diff --git a/LDP/users/Jason-Evans/Package-Management-Basics.adoc b/LDP/users/Jason-Evans/Package-Management-Basics.adoc new file mode 100644 index 00000000..b3569d8c --- /dev/null +++ b/LDP/users/Jason-Evans/Package-Management-Basics.adoc @@ -0,0 +1,387 @@ += Package Management Basics: apt, yum, dnf, 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. + +== 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. + +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]. + +What do you need? +~~~~~~~~~~~~~~~~~ + +This guide covers Debian, Ubuntu, CentOS, Fedora, and FreeBSD and will require one of those distributions to be installed + +Package Management Systems: A Brief Overview +-------------------------------------------- + +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. + +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 +|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. + +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. + +In recent versions of Fedora, yum has been supplanted by dnf, a +modernized fork which retains most ofyum's interface. + +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. + +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, yumand 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 |`sudo apt-get update` +|CentOS |`yum check-update` +|Fedora |`dnf check-update` +|FreeBSD Packages |`sudo pkg update` +|FreeBSD Ports |`sudo 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 |`sudo apt-get upgrade` |Only upgrades installed +packages, where possible. + +| |`sudo apt-get dist-upgrade` |May add or remove packages to satisfy new +dependencies. + +|CentOS |`sudo yum update` | + +|Fedora |`sudo dnf upgrade` | + +|FreeBSD Packages |`sudo 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 && sudo make install && sudo +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 search_string` | + +|CentOS |`yum search search_string` | + +| |`yum search all search_string` |Searches all fields, including +description. + +|Fedora |`dnf search search_string` | + +| |`dnf search all search_string` |Searches all fields, including +description. + +|FreeBSD Packages |`pkg search search_string` |Searches by name. + +| |`pkg search -f search_string` |Searches by name, returning full +descriptions. + +| |`pkg search -D search_string` |Searches description. + +|FreeBSD Ports |`cd /usr/ports && make search name=package` |Searches by +name. + +| |`cd /usr/ports && make search key=search_string` |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. + +|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 |`sudo apt-get install package` | + +| |`sudo apt-get install package1 package2 ...` |Installs all listed +packages. + +| |`sudo apt-get install -y package` |Assumes "yes" where apt would +usually prompt to continue. + +|CentOS |`sudo yum install package` | + +| |`sudo yum install package1 package2 ...` |Installs all listed packages. + +| |`sudo yum install -y package` |Assumes "yes" where yum would usually +prompt to continue. + +|Fedora |`sudo dnf install package` | + +| |`sudo dnf install package1 package2 ...` |Installs all listed packages. + +| |sudo dnf install -y package |Assumes "yes" where dnf would usually +prompt to continue. + +|FreeBSD Packages |`sudo pkg install package` | + +| |`sudo pkg install package1 package2 ...` |Installs all listed packages. + +|FreeBSD Ports |`cd /usr/ports/category/port && sudo 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 |`sudo dpkg -i package.deb` | + +| |`sudo apt-get install -yg debi && sudo gdebi package.deb` |Installs and +uses gdebi to install package.deb and retrieve any missing dependencies. + +|CentOS |`sudo yum install package.rpm` | + +|Fedora |`sudo dnf install package.rpm` | + +|FreeBSD Packages |`sudo pkg add package.txz` | + +| |`sudo 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 |`sudo apt-get remove package` | + +| |`sudo apt-get autoremove` |Removes unneeded packages.| + +|CentOS |`sudo yum remove package` | + +|Fedora |`sudo dnf erase package` | + +|FreeBSD Packages |`sudo pkg delete package` | + +| |`sudo pkg autoremove` |Removes unneeded packages. + +|FreeBSD Ports |`sudo 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 man: + +---------- +$ man page +---------- + +In man, you can navigate with the arrow keys. Press / to search for text +within the page, and q to quit. + +[cols="^,<,^",options="header",] +|======================================================================= +|System |Command |Notes +|Debian / Ubuntu |`man apt-get` |Updating the local package database and +working with packages. + +| |`man apt-cache` |Querying the local package database. + +| |`man dpkg` |Working with individual package files and querying +installed packages. + +|CentOS |`man yum` | + +|Fedora |`man dnf` | + +|FreeBSD Packages |`man pkg` |Working with pre-compiled binary packages. + +|FreeBSD Ports |`man ports` |Working with the Ports Collection. +|======================================================================= + +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~]https://www.centos.org/docs/5/html/yum/[yum]. +3. There's a https://fedoraproject.org/wiki/Dnf[Fedora wiki page +about~]https://fedoraproject.org/wiki/Dnf[dnf], and an +https://dnf.readthedocs.org/en/latest/index.html[official manual +for~]https://dnf.readthedocs.org/en/latest/index.html[dnf]https://dnf.readthedocs.org/en/latest/index.html[~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]. +