Package manager: Difference between revisions
mNo edit summary |
grammer correction |
||
(465 intermediate revisions by more than 100 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Software tools for handling software packages}} |
|||
[[Image:Pms.svg|thumb|300px|Illustration of a package management system being used to [[download]] new software. A typical manual action requested is [[Soft reboot|restarting]] the computer.]] |
|||
{{More citations needed|date=December 2022}} |
|||
[[Image:Synaptic Package Manager.png|thumb|350px|[[Synaptic Package Manager|Synaptic]], one of the most widely used graphical frontends for package management in [[Linux]]]] |
|||
{{Use dmy dates|date=June 2022}} |
|||
[[Image:Aptitude-resolves-dependencies.png|thumb|[[aptitude (program)|Aptitude]], a package management system, resolving the [[Coupling (computer science)|dependencies]] of ''ldm'', a software package selected for installation.]] |
|||
[[File:Synaptic screenshot.png|thumb|[[Synaptic (software)|Synaptic]], an example of a package manager]] |
|||
A '''package management system''' is a collection of tools |
A '''package manager''' or '''package-management system''' is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a [[computer]] in a consistent manner.<ref>{{cite web|title=What is a package manager?|url=https://www.debian.org/doc/manuals/aptitude/pr01s02.en.html|url-status=dead|archive-url=https://web.archive.org/web/20171017151526/http://aptitude.alioth.debian.org/doc/en/pr01s02.html|archive-date=17 October 2017|access-date=19 December 2018}}</ref> |
||
A package manager deals with [[package format|''packages'']], distributions of software and data in [[archive file]]s. Packages contain [[metadata]], such as the software's name, description of its purpose, version number, vendor, [[checksum]] (preferably a [[cryptographic hash function]]), and a list of [[coupling (computer programming)|dependencies]] necessary for the software to run properly. Upon installation, metadata is stored in a local package database. Package managers typically maintain a database of software dependencies and version information to prevent software mismatches and missing prerequisites. They work closely with [[software repository|software repositories]], [[binary repository manager]]s, and [[app store]]s. |
|||
Package managers are designed to eliminate the need for manual installs and updates. This can be particularly useful for large enterprises whose operating systems typically consist of hundreds or even tens of thousands of distinct software packages.<ref>{{cite web |url=http://software.dell.com/products/kace-k1000-systems-management-appliance/software-distribution.aspx |title=Software Distribution |access-date=2012-07-11 |publisher=Dell KACE |url-status=dead |archive-url=https://web.archive.org/web/20151003031633/http://software.dell.com/products/kace-k1000-systems-management-appliance/software-distribution.aspx |archive-date=3 October 2015}}</ref> |
|||
A package management system provides a consistent method of installing software. A package management system is sometimes incorrectly referred to as an installer. |
|||
== |
== History == |
||
An early package manager was SMIT (and its backend installp) from [[IBM AIX]]. [[System Management Interface Tool|SMIT]] was introduced with AIX 3.0 in 1989.{{Citation needed|date=July 2007}} |
|||
[[Ian Murdock]] has commented that package management is "the single biggest advancement [[Linux]] has brought to the industry", that it blurs the boundaries between operating system and applications, and that it makes it "easier to push new innovations [...] into the marketplace and [...] evolve the OS".<ref>{{citeweb|title=How package management changed everything|url=http://ianmurdock.com/2007/07/21/how-package-management-changed-everything/|publisher=ianmurdock.com|accessdate=2008-03-01}}</ref> |
|||
Early package managers, from around 1994, had no automatic dependency resolution<ref>{{cite web |url=https://eerielinux.wordpress.com/2017/08/15/the-history-of-nix-package-management/ |title=The history of *nix package management |date=14 August 2017 |access-date=12 October 2021 |archive-date=24 October 2021 |archive-url=https://web.archive.org/web/20211024173626/https://eerielinux.wordpress.com/2017/08/15/the-history-of-nix-package-management/ |url-status=live }}</ref> but could already drastically simplify the process of adding and removing software from a running system.<ref>{{cite web |url=https://www.linuxjournal.com/article/60 |title=A review of InfoMagic's December 1994 Release |access-date=12 October 2021 |archive-date=29 October 2021 |archive-url=https://web.archive.org/web/20211029171535/https://www.linuxjournal.com/article/60 |url-status=live }}</ref> |
|||
== Terminology == |
|||
A package management system is often called an "install manager". This can |
|||
lead to confusion between a package management system and an [[installer]]. The differences include: |
|||
{{PMS vs Installer}} |
|||
By around 1995, beginning with [[Comprehensive Perl Archive Network|CPAN]], package managers began doing the work of downloading packages from a repository, automatically resolving its dependencies and installing them as needed, making it much easier to install, uninstall and update software from a system.<ref>{{cite web |url=http://history.perl.org/PerlTimeline.html |title=The Timeline of Perl and its Culture |access-date=29 October 2021 |archive-date=11 January 2013 |archive-url=https://web.archive.org/web/20130111100906/http://history.perl.org/PerlTimeline.html |url-status=live }}</ref> |
|||
A package, for package managers, denotes a specific set of files bundled with the appropriate metadata |
|||
for use by a package manager. This can be confusing, as some [[programming language]]s often use the word "[[Java package|package]]" as a specific form of [[software library]]. Furthermore, that software library can be distributed in a package of files bundled for a package manager. |
|||
== |
==Functions== |
||
[[File:Pms.svg|thumb|Illustration of a package manager being used to [[download]] new software. Manual actions can include accepting a license agreement or selecting some package-specific configuration options.]] |
|||
A software package is an [[archive file]] containing a computer program as well as necessary metadata for its deployment. The computer program can be in [[source code]] that has to be compiled and built first.<ref>Ludovic Courtès, [https://arxiv.org/abs/1305.4584 Functional Package Management with Guix] {{Webarchive|url=https://web.archive.org/web/20200515101137/https://arxiv.org/abs/1305.4584 |date=15 May 2020 }}, June 2013, Madrid, European Lisp Symposium 2013</ref> Package metadata include package description, package version, and dependencies (other packages that need to be installed beforehand). |
|||
Package management systems are charged with the task of organizing all of the packages installed on a system and maintaining their usability. Typical functions of a package management system include: |
|||
Package managers are charged with the task of finding, installing, maintaining or uninstalling software packages upon the user's command. Typical functions of a package management system include: |
|||
*Verifying file checksums to ensure correct and complete packages. |
|||
*Working with [[file archiver]]s to extract package archives |
|||
*Verifying digital signatures to authenticate the origin of packages. |
|||
*Ensuring the integrity and authenticity of the package by verifying their [[checksum]]s and [[digital certificate]]s, respectively |
|||
*Applying file archivers to manage encapsulated files. |
|||
* |
*Looking up, downloading, installing, or updating existing software from a [[software repository]] or [[app store]] |
||
*Grouping |
*Grouping packages by function to reduce user confusion |
||
*Managing dependencies to ensure a package is installed with all packages it requires |
*Managing dependencies to ensure a package is installed with all packages it requires, thus avoiding "[[dependency hell]]" |
||
===Challenges with shared libraries=== |
|||
Some additional challenges are met by only a few package management systems. |
|||
Computer systems that rely on [[dynamic library]] linking, instead of [[static library]] linking, share executable libraries of machine instructions across packages and applications. In these systems, conflicting relationships between different packages requiring different versions of libraries results in a challenge colloquially known as "[[dependency hell]]". On [[Microsoft Windows]] systems, this is also called "[[DLL hell]]" when working with dynamically linked libraries.<ref name="sharedlibrary">{{cite book |first= Chris |last= Tucker |title= 29th International Conference on Software Engineering (ICSE'07) |chapter= OPIUM: Optimal Package Install/Uninstall Manager |publisher= UC San Diego |date= 2007-03-15 |page=1 |doi=10.1109/ICSE.2007.59 |isbn= 978-0-7695-2828-1 |s2cid= 1279451 |url= https://escholarship.org/uc/item/1k07h5vk |chapter-url= http://cseweb.ucsd.edu/~lerner/papers/opium.pdf |archive-url=https://web.archive.org/web/20110614051810/http://cseweb.ucsd.edu/~lerner/papers/opium.pdf |archive-date=2011-06-14 |url-status=live |access-date= 2011-09-14}}</ref> |
|||
Modern package managers have mostly solved these problems, by allowing parallel installation of multiple versions of a library (e.g. [[OPENSTEP]]'s ''Framework'' system), a dependency of any kind (e.g. ''slots'' in Gentoo [[Portage (software)|Portage]]), and even of packages compiled with different compiler versions (e.g. dynamic libraries built by the [[Glasgow Haskell Compiler]], where a stable [[Application binary interface|ABI]] does not exist), in order to enable other packages to specify which version they were linked or even installed against. |
|||
=== Challenges with shared libraries === |
|||
===Front-ends for locally compiled packages=== |
|||
Computer systems which rely on [[dynamic library]] linking, instead of [[static library]] linking, share executable libraries of machine instructions across packages |
|||
[[System administrator]]s may install and maintain software using tools other than package management software. For example, a local administrator may [[download]] unpackaged source code, compile it, and install it. This may cause the state of the local system to fall out of [[synchronization (computer science)|synchronization]] with the state of the package manager's [[database]]. The local administrator will be required to take additional measures, such as manually managing some dependencies or integrating the changes into the package manager. |
|||
and applications. In these systems, complex relationships between different packages requiring different versions of libraries results in a challenge colloquially known as "[[dependency hell]]." On [[Microsoft Windows]] systems, this is also called "[[DLL hell]]" when working with dynamically linked libraries. Good package management systems become vital on these systems. |
|||
There are tools available to ensure that locally compiled packages are integrated with the package management. For distributions based on .deb and [[RPM Package Manager|.rpm]] files as well as Slackware Linux, there is [[CheckInstall]], and for recipe-based systems such as [[Gentoo Linux]] and hybrid systems such as [[Arch Linux]], it is possible to write a recipe first, which then ensures that the package fits into the local package database.{{Citation needed|date=July 2007}} |
|||
=== Front-ends for locally compiled packages === |
|||
===Maintenance of configuration=== |
|||
[[System administrator]]s may install and maintain software using tools other than package management software. For example, a local administrator may [[download]] unpackaged source code, compile it, and install it. This may cause the state of the local system to fall out of [[Synchronization (computer science)|synchronization]] with the state of the package manager's [[database]]. The local administrator will be required to take additional measures, such as manually managing some dependencies or integrating the changes into the package manager. |
|||
Particularly troublesome with software [[upgrade]]s are upgrades of configuration files. Since package managers, at least on Unix systems, originated as extensions of [[file archiver|file archiving utilities]], they can usually only either overwrite or retain configuration files, rather than applying rules to them. There are exceptions to this that usually apply to kernel configuration (which, if broken, will render the computer unusable after a restart). Problems can be caused if the format of configuration files changes; for instance, if the old configuration file does not explicitly disable new options that should be disabled. Some package managers, such as [[Debian]]'s [[dpkg]], allow configuration during installation. In other situations, it is desirable to install packages with the default configuration and then overwrite this configuration, for instance, in [[Headless system|headless]] installations to a large number of computers. This kind of pre-configured installation is also supported by dpkg. |
|||
===Repositories=== |
|||
There are tools available to ensure that locally compiled packages are integrated with the package management. For distributions based on .deb and .rpm files as well as Slackware Linux, there is [[CheckInstall]], and for recipe-based systems such as [[Gentoo Linux]] and hybrid systems such as [[Arch Linux]], it is possible to write a recipe first, which then ensures that the package fits into the local package database.{{Fact|date=July 2007}} |
|||
To give users more control over the kinds of software that they are allowing to be installed on their system (and sometimes due to legal or convenience reasons on the distributors' side), software is often downloaded from a number of [[software repository|software repositories]].<ref>{{cite web |title=Linux repository classification schemes |date=13 January 2006 |url=http://braintickle.blogspot.com/2006/01/linux-repository-classification.html |publisher=braintickle.blogspot.com |access-date=2008-03-01 |archive-date=11 October 2007 |archive-url=https://web.archive.org/web/20071011053815/http://braintickle.blogspot.com/2006/01/linux-repository-classification.html |url-status=live }}</ref> |
|||
===Upgrade suppression=== |
|||
=== Maintenance of configuration === |
|||
When a user interacts with the package management software to bring about an upgrade, it is customary to present the user with the list of actions to be executed (usually the list of packages to be upgraded, and possibly giving the old and new version numbers), and allow the user to either accept the upgrade in bulk, or select individual packages for upgrades. Many package managers can be configured to never upgrade certain packages, or to upgrade them only when critical vulnerabilities or instabilities are found in the previous version, as defined by the packager of the software. This process is sometimes called ''version pinning''. |
|||
Particularly troublesome with software [[upgrade]]s are upgrades of configuration files. Since package management systems, at least on Unix systems, originated as extensions of [[file archiver|file archiving utilities]], they can usually only either overwrite or retain configuration files, rather than applying rules to them. There are exceptions to this that usually apply to kernel configuration (which, if broken, will render the computer unusable after a restart). Problems can be caused if the format of configuration files changes. For instance, if the old configuration file does not explicitly disable new options that should be disabled. Some package management systems, such as [[Debian]]'s [[dpkg]], allow configuration during installation. In other situations, it is desirable to install packages with the default configuration and then overwrite this configuration, for instance, in [[Headless system|headless]] installations to a large number of computers. (This kind of pre-configured installation is also supported by [[dpkg]].) |
|||
=== Repositories === |
|||
In order to give users more control over the kinds of software that they are allowing to be installed on their system (and sometimes due to legal or convenience reasons on the distributors' side), software is often downloaded from a number of [[software repository|software repositories]].<ref>{{cite web | title=Linux repository classification schemes | url=http://braintickle.blogspot.com/2006/01/linux-repository-classification.html|publisher=braintickle.blogspot.com | accessdate=2008-03-01}}</ref> |
|||
=== Upgrade suppression === |
|||
When a user interacts with the package management software to bring about an upgrade, it is customary to present the user with the list of things to be done (usually the list of packages to be upgraded, and possibly giving the old and new version numbers), and allow the user to either accept the upgrade in bulk, or select individual packages for upgrades. Many package management systems can be configured to never upgrade certain packages, or to upgrade them only when critical vulnerabilities or instabilities are found in the previous version, as defined by the packager of the software. This process is sometimes called ''version pinning''. |
|||
For instance: |
For instance: |
||
* |
*[[Yellowdog Updater, Modified|yum]] supports this with the syntax ''exclude=openoffice*''<ref>{{cite web |title=CentOS yum pinning rpms|url=http://lists.centos.org/pipermail/centos/2005-May/046320.html|publisher=centos.org|access-date=2008-03-01 |url-status=unfit |archive-url= https://web.archive.org/web/20071102203232/http://lists.centos.org/pipermail/centos/2005-May/046320.html |archive-date= 2007-11-02}}</ref> |
||
*[[Pacman (package manager)|pacman]] with ''IgnorePkg= openoffice''<ref name=pacman/> (to suppress upgrading openoffice in both cases) |
|||
* dpkg and [[dselect]] support this partially through the ''hold'' flag in package selections |
|||
*[[dpkg]] and [[dselect]] support this partially through the ''hold'' flag in package selections |
|||
* APT extends the ''hold'' flag through the complex "pinning" mechanism<ref>{{citeweb|title=How to keep specific versions of packages installed (complex)|url=http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html#s-pin|publisher=debian.org|accessdate=2008-03-01}}</ref> |
|||
*[[Advanced Packaging Tool|APT]] extends the ''hold'' flag through the complex "pinning" mechanism<ref>{{cite web|title=How to keep specific versions of packages installed (complex)|url=https://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html#s-pin|publisher=debian.org|access-date=2008-03-01|archive-date=14 November 2019|archive-url=https://web.archive.org/web/20191114111450/https://www.debian.org/doc/manuals/apt-howto/ch-apt-get.en.html#s-pin|url-status=live}}</ref> (Users can also blacklist a package<ref>{{cite web|title=Apt pinning to blacklist a package|url=http://linux.derkeiler.com/Mailing-Lists/Debian/2009-07/msg00476.html|access-date=2010-08-19|archive-url=https://web.archive.org/web/20110722062625/http://linux.derkeiler.com/Mailing-Lists/Debian/2009-07/msg00476.html|archive-date=22 July 2011|url-status=dead}}</ref>) |
|||
** You even can blacklist a package<ref>{{citeweb|title=apt pinning to blacklist a package|url=http://www.linux-archive.org/debian-user/331357-apt-pinning-blacklist-package.html}}</ref> |
|||
* |
*[[Aptitude (program)|aptitude]] has "hold" and "forbid" flags |
||
* |
*[[Portage (software)|portage]] supports this through the package.mask configuration file |
||
<!--(DotPet from .PET packages in [[Puppy Linux]], but is efficient in console and lightweight ?? --> |
|||
=== |
===Cascading package removal=== |
||
Some of the more advanced package management features offer "cascading package removal",<ref name=pacman>{{cite web|title=pacman(8) Manual Page|url=https://www.archlinux.org/pacman/pacman.8.html|website=archlinux.org|access-date=2008-03-01|archive-date=31 August 2019|archive-url=https://web.archive.org/web/20190831034550/https://www.archlinux.org/pacman/pacman.8.html|url-status=live}}</ref> in which all packages that depend on the target package and all packages that only the target package depends on, are also removed. |
|||
===Comparison of commands=== |
|||
Some of the more advanced package management features offer "cascading package removal" <ref name=pacman>{{citeweb|title=pacman(8) Manual Page|url=http://www.archlinux.org/pacman/pacman.8.html|publisher=archlinux.org|accessdate=2008-03-01}}</ref>, in which all packages that depend on the target package and all packages that only the target package depends on, are also removed. |
|||
Although the commands are specific for every particular package manager, they are to a large extent translatable, as most package managers offer similar functions. |
|||
<div style="width: 100%; overflow: auto;"> |
|||
{| class="wikitable plainrowheaders" style="font-size:75%" |
|||
|+ style="caption-side: bottom; text-align:left;" | {{code|lang=sh|${PKG} }} or {{code|lang=dosbatch|%PKG% }} is the package name. |
|||
! Action |
|||
! [[Homebrew (package manager)|Homebrew]] |
|||
! [[APT (Debian)|apt]] |
|||
! [[pacman (Arch Linux)|pacman]] |
|||
! [[DNF (software)|dnf]] ([[YUM (software)|yum]]) |
|||
! [[portage (software)|portage]]||[[zypper]]<ref>{{cite web|url=https://en.opensuse.org/SDB:Zypper_manual_%28plain%29|title=documentation/sles11|website=en.opensuse.org|access-date=16 August 2017|archive-date=1 December 2022|archive-url=https://web.archive.org/web/20221201032709/https://en.opensuse.org/SDB:Zypper_manual_(plain)|url-status=live}}</ref> |
|||
! [[Nix package manager|Nix]] |
|||
![[XBPS|xbps]]<ref>{{Cite web |title=XBPS Package Manager - Void Linux Handbook |url=https://docs.voidlinux.org/xbps/index.html |access-date=2022-12-19 |website=docs.voidlinux.org |archive-date=23 January 2023 |archive-url=https://web.archive.org/web/20230123092810/https://docs.voidlinux.org/xbps/index.html |url-status=live }}</ref> |
|||
! [[Clear Linux OS|swupd]]<ref>{{cite web|url=https://github.com/clearlinux/swupd-client/blob/master/docs/swupd.1.rst|title=swupd-client/swupd.1.rst at master · clearlinux/swupd-client · GitHub|website=github.com|language=en|access-date=2022-06-22|archive-date=7 December 2022|archive-url=https://web.archive.org/web/20221207105625/https://github.com/clearlinux/swupd-client/blob/master/docs/swupd.1.rst|url-status=live}}</ref> |
|||
! [[Windows Package Manager|WinGet]] |
|||
|- |
|||
! scope=row | Install package |
|||
| {{code|lang=sh|style=white-space:nowrap;|brew install ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|apt install ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|pacman -S ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|dnf install ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|emerge ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|zypper in ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|nix-env -i ${PKG} }} |
|||
|{{code|lang=sh|style=white-space:nowrap;|xbps-install ${PKG<nowiki>}</nowiki>}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|swupd bundle-add ${PKG} }} |
|||
| {{code|lang=dosbatch|style=white-space:nowrap;|winget install %PKG% }} |
|||
|- |
|||
! scope=row | Remove package |
|||
| {{code|lang=sh|brew uninstall ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|apt remove ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|pacman -R ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|dnf remove --nodeps ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|emerge -C ${PKG} }} or <br />{{code|lang=sh|style=white-space:nowrap;|emerge --unmerge ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|zypper rm -RU ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|nix-env -e ${PKG} }} |
|||
|{{code|lang=sh|style=white-space:nowrap;|xbps-remove ${PKG<nowiki>}</nowiki>}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|swupd bundle-remove ${PKG} }} |
|||
| {{code|lang=dosbatch|style=white-space:nowrap;|winget uninstall %PKG% }} |
|||
|- |
|||
! scope="row" | Update all |
|||
| {{code|lang=sh|style=white-space:nowrap;|brew upgrade}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|apt upgrade}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|pacman -Syu}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|dnf update}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|emerge -u -D --with-bdeps{{#tag:nowiki|=}}y @world}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|zypper up}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|nix-env -u && nix-collect-garbage}} |
|||
|{{code|lang=sh|style=white-space:nowrap;|xbps-install -Su}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|swupd update}} |
|||
| {{code|lang=dosbatch|style=white-space:nowrap;|winget upgrade --all}} |
|||
|- |
|||
! scope="row" | Update software database |
|||
| {{code|lang=sh|style=white-space:nowrap;|brew update}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|apt update}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|pacman -Sy}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|dnf check-update}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|emerge --sync}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|zypper ref}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|nix-channel --upgrade}} |
|||
|{{code|lang=sh|style=white-space:nowrap;|xbps-install -S}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|swupd update --download}} or <br />{{code|lang=sh|style=white-space:nowrap;|swupd update --update-search-file-index}} |
|||
| {{code|lang=dosbatch|style=white-space:nowrap;|winget list > NUL }} |
|||
|- |
|||
! scope="row" | Show updatable packages |
|||
| {{code|lang=sh|style=white-space:nowrap;|brew outdated}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|apt list --upgradable}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|pacman -Qu}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|dnf check-update}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|emerge -avtuDN --with-bdeps{{#tag:nowiki|=}}y @world}} or <br />{{code|lang=sh|style=white-space:nowrap;|emerge -u --pretend @world}}<br />({{code|-D}} is shorthand for {{code|--deep}} and<br />{{code|-u}} is shorthand for {{code|--update}}.) |
|||
| {{code|lang=sh|style=white-space:nowrap;|zypper lu}} |
|||
| {{sxhl|lang=sh|nix-channel --upgrade && \ |
|||
nix-env -u && \ |
|||
nix-collect-garbage}} |
|||
|{{code|lang=sh|style=white-space:nowrap;|./xbps-src update-check ${PKG<nowiki>}</nowiki>}}(requires void-packages repository) |
|||
| {{code|lang=sh|style=white-space:nowrap;|swupd update -s}} or <br />{{code|lang=sh|style=white-space:nowrap;|swupd check-update}} |
|||
| {{code|lang=dosbatch|style=white-space:nowrap;|winget upgrade}} |
|||
|- |
|||
! scope="row" | Delete orphans and config |
|||
| {{code|lang=sh|style=white-space:nowrap;|brew autoremove && brew cleanup}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|apt autoremove}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|pacman -Rsn $(pacman -Qdtq)}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|dnf erase ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|emerge --depclean}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|zypper rm -u}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|nix-collect-garbage -d}} |
|||
|{{code|lang=sh|style=white-space:nowrap;|xbps-remove -of}} |
|||
| style="white-space:nowrap;" | {{sxhl|lang=sh|swupd bundle-remove --orphans && \ |
|||
swupd clean --all}} |
|||
| {{N/A}} |
|||
|- |
|||
! scope="row" | Show orphans |
|||
| {{code|lang=sh|style=white-space:nowrap;|brew autoremove --dry-run}} |
|||
| {{N/A}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|pacman -Qdt}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|package-cleanup -q --leaves --exclude-bin}}<br />({{code|-q}} is shorthand for {{code|--quiet}}.) |
|||
| {{code|lang=sh|style=white-space:nowrap;|emerge -caD}} or <br />{{code|lang=sh|style=white-space:nowrap;|emerge --depclean --pretend}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|zypper pa --orphaned --unneeded}} |
|||
| {{N/A}} |
|||
|{{code|lang=sh|style=white-space:nowrap;|xbps-remove -o}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|swupd bundle-list --orphans}} |
|||
| {{N/A}} |
|||
|- |
|||
! scope=row | Remove package (and orphans) |
|||
| style="white-space:nowrap;" | {{sxhl|lang=sh|brew uninstall ${PKG} && brew autoremove}} |
|||
| {{code|lang=sh|style=white-space:nowrap;|apt autoremove ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|pacman -Rs ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|dnf remove ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|emerge -c ${PKG} }} or <br />{{code|lang=sh|style=white-space:nowrap;|emerge --depclean ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|zypper rm -u --force-resolution ${PKG} }} |
|||
| {{code|lang=sh|style=white-space:nowrap;|nix-env -e ${PKG} && nix-env -u}} |
|||
|{{code|lang=sh|style=white-space:nowrap;|xbps-remove -R ${PKG<nowiki>}</nowiki>}} |
|||
| style="white-space:nowrap;" | {{sxhl|lang=sh|swupd bundle-remove ${PKG} && \ |
|||
swupd bundle-remove --orphans}} |
|||
| {{code|lang=dosbatch|style=white-space:nowrap;|winget uninstall %PKG% }} |
|||
|} |
|||
</div> |
|||
The [[Arch Linux]] Pacman/Rosetta wiki offers an extensive overview.<ref>{{cite web|url=https://wiki.archlinux.org/index.php/Pacman/Rosetta|title=Pacman/Rosetta – ArchWiki|website=wiki.archlinux.org|language=en|access-date=2017-09-17|archive-date=20 November 2016|archive-url=https://web.archive.org/web/20161120213631/https://wiki.archlinux.org/index.php/Pacman/Rosetta|url-status=live}}</ref> |
|||
==Prevalence== |
|||
== Common package management systems and formats == |
|||
Package managers like [[dpkg]] have existed as early as 1994.<ref>{{cite web |title=dpkg version 0.93.15 source code|url=https://anonscm.debian.org/cgit/dpkg/dpkg.git/plain/scripts/perl-dpkg.pl?id=1b80fb16c22db72457d7a456ffbf1f70a8dfc0a5|access-date=19 December 2018|archive-url=https://web.archive.org/web/20150402141229/https://anonscm.debian.org/cgit/dpkg/dpkg.git/plain/scripts/perl-dpkg.pl?id=1b80fb16c22db72457d7a456ffbf1f70a8dfc0a5|archive-date=2 April 2015|url-status=dead}}</ref> |
|||
=== Package formats === |
|||
{{ main|Linux package formats| file archive}} |
|||
Each package manager relies on the format and metadata of the packages it can manage. That is, package managers need groups of files to be bundled for the specific package manager along with appropriate metadata, such as dependencies. Often, a core set of utilities manages the basic installation from these packages and multiple package managers use these utilities to provide additional functionality. |
|||
[[Linux distribution]]s oriented to binary packages rely heavily on package management systems as their primary means of managing and maintaining software. Mobile operating systems such as [[Android (operating system)|Android]] (Linux-based), [[iOS]] ([[Unix|Unix-based]]), and [[Windows Phone]] rely almost exclusively on their respective vendors' [[app store]]s and thus use their own dedicated package management systems. |
|||
For example, [[Yellow dog Updater, Modified|yum]] relies on [[RPM Package Manager|rpm]] as a backend. Yum extends the functionality of the backend by adding features such as simple configuration for maintaining a network of systems. As another example, the [[Synaptic Package Manager]] provides a graphical user interface by using the [[Advanced Packaging Tool|Advanced Packaging Tool (apt)]] library, which, in turn, relies on [[dpkg]] for core functionality. |
|||
<gallery mode="packed"> |
|||
[[Alien (software)|Alien]] is a program that converts between different [[Linux package formats]]. It supports conversion between [[Linux Standard Base]] conform [[RPM Package Manager|RPM]], [[deb (file format)|deb]], Stampede (.slp) and [[Slackware]] ([[tgz]]) packages. |
|||
File:Apt-get install mediawiki.png|<code>apt-get</code>, a [[Command-line interface|CLI]] utility installing [[MediaWiki]] |
|||
File:Aptitude 0.4.11.3 de.png|[[Aptitude (software)|Aptitude]] also features a [[text-based user interface|TUI]]. |
|||
File:Synaptic_screenshot.png|[[Synaptic (software)|Synaptic]], a GUI for many Linux package managers |
|||
File:Example of pacman in Arch Linux screenshot.png|<code>pacman</code>, a CLI utility for Arch-based distributions |
|||
File:Octopi 0.12.0 screenshot.png|Octopi, a [[Qt (software)|Qt]] GUI for Pacman package manager |
|||
File:Pamac 10.3.0 screenshot.png|Pamac, a [[GTK+]] GUI for Pacman package manager |
|||
File:Kpackagekit.png|[[Apper]], a [[Qt (software)|Qt]] GUI for [[PackageKit]] |
|||
File:Gnome-software-v44.png|[[GNOME Software]], a [[GTK]] GUI for PackageKit and [[Flatpak]] |
|||
File:Windows Package Manager v0.1.41331 Preview 1115x624.png|<code>winget</code>, the [[Windows Package Manager]] [[Command-line interface|CLI]] utility for [[Windows 10]] |
|||
</gallery> |
|||
==Comparison with installers== |
|||
=== Free and open source software systems === |
|||
A package manager is often called an "install manager", which can lead to a confusion between package managers and [[installer]]s. The differences include: |
|||
{{PMS vs Installer}} |
|||
By the nature of [[free and open source software]], packages under similar and compatible licenses are available for use on a number of operating systems. These packages can be combined and distributed using configurable and internally complex packaging systems to handle many permutations of software and manage version-specific dependencies and conflicts. Some packaging systems of free and open source software are also themselves released as free and open source software. One typical difference between package management in proprietary operating systems, such as Mac OS X and Windows, and those in free and open source software, such as Linux, is that free and open source software systems permit third-party packages to also be installed and upgraded through the same mechanism, whereas the PMS of Mac OS X and Windows will only upgrade software provided by Apple and Microsoft, respectively (with the exception of some third party drivers in Windows). The ability to continuously upgrade third party software is typically added by adding the [[Uniform Resource Locator|URL]] of the corresponding repository to the package management's configuration file. |
|||
==Comparison with build automation utility== |
|||
==== Binary installation / Precompiled packages==== |
|||
Most [[software configuration management]] systems treat building software and deploying software as separate, independent steps. |
|||
===== Linux distributions ===== |
|||
A [[build automation]] utility typically takes human-readable [[source code]] files already on a computer, and automates the process of converting them into a binary executable package on the same or remote computer. |
|||
Later a package manager typically running on some other computer downloads those pre-built binary executable packages over the internet and installs them. |
|||
However, both kinds of tools have many commonalities: |
|||
* [[dpkg]], used originally by [[Debian]] and now by other systems, uses the [[deb (file format)|.deb format]] and was the first to have a widely known dependency resolution tool ([[Advanced Packaging Tool|APT]]). |
|||
*The [[dependency graph]] [[topological sorting]] used in a package manager to handle dependencies between binary components is also used in a build manager to handle the dependency between source components. |
|||
* The [[RPM Package Manager]] was created by [[Red Hat]], and is now used by a number of other [[Linux distribution]]s. RPM is the [[Linux Standard Base]] packaging format and is the base of a large number of additional tools, including [[apt4rpm]]; Red Hat's [[up2date]]; [[Mandriva]]'s [[urpmi]]; [[openSUSE]]'s [[ZYpp]]; [[PLD Linux Distribution|PLD Linux]]'s [[poldek (software)|poldek]]; and [[Yellow dog Updater Modified|YUM]], which is used by [[Fedora (operating system)|Fedora]], [[Rhel|Red Hat Enterprise Linux 5]], and [[Yellow Dog Linux]]. |
|||
*Many [[makefile]]s support not only building executables, but also installing them with <code>make install</code>. |
|||
* A simple [[tgz]] package system combines the standard [[Tar file format|tar]] and [[gzip]]. Used by [[Slackware]] Linux and its closer derivates, there are a few higher-level tools that use the same tgz packaging format, including: [[slapt-get]], [[slackpkg]], [[zendo]], [[netpkg]], and [[swaret]]. |
|||
*Every package manager for a [[:Category:Source-based Linux distributions|source-based distribution]] {{ndash}} [[Portage (software)|Portage]], [[Sorcery (package manager)|Sorcery]], [[Homebrew (package management software)|Homebrew]], etc. {{ndash}} supports converting human-readable source code to binary executables and installing it. |
|||
* [[Pacman (Arch Linux)|Pacman]] for [[Arch Linux]], [[Frugalware]] and [[Lunar Linux]] uses pre-compiled binaries distributed in a compressed [[Tar file format | Tar]] archive. |
|||
* [[Smart Package Manager]], used by [[CCux Linux]] |
|||
* [[ipkg]], a [[dpkg]]-inspired, very lightweight system targeted at storage-constrained Linux systems such as embedded devices and handheld computers |
|||
* [[opkg]], fork of [[ipkg]] |
|||
* [[pkgutils]], used by [[CRUX]] Linux |
|||
* [[PETget]], used by [[Puppy Linux]] |
|||
* [[Upkg]], used by [[Paldo Linux]] |
|||
* [[PISI]], used by [[Pardus_(operating_system)|Pardus]] |
|||
* [[Nix package manager]], "a purely functional package manager" which allows multiple versions or variants of a package to be installed; it is similar to Zero Install. |
|||
* [[appbrowser]], a special purpose tool in [[Tiny Core Linux]] for browsing and selecting applications from online repositories. |
|||
* [[Conary (package manager)|Conary]], used by [[Foresight Linux]] |
|||
* Equo, used by [[Sabayon Linux]] |
|||
A few tools, such as [[Maak]] and [[A-A-P]], are designed to handle both building and deployment, and can be used as either a build automation utility or as a package manager or both.<ref>Eelco Dolstra, [https://nixos.org/~eelco/pubs/iscsd-scm11-submitted.pdf "Integrating Software Construction and Software Deployment"] {{Webarchive|url=https://web.archive.org/web/20190921030912/https://nixos.org/~eelco/pubs/iscsd-scm11-submitted.pdf |date=21 September 2019 }}.</ref> |
|||
===== Mac OS X ===== |
|||
== Comparison with app stores == |
|||
* [[fink]], for [[Mac OS X]], derives partially from dpkg/apt and partially from ports. |
|||
* [[MacPorts]], formerly called DarwinPorts, originated from the [[OpenDarwin]] project. |
|||
* [[Homebrew]], with a fresh approach and close git integration. |
|||
''[[App stores]]'' can also be considered application-level package managers (without the ability to install all levels of programs<ref>{{cite news |title=Brew is the macOS app store replacement you didn't know you needed |url=https://www.msn.com/en-us/news/technology/brew-is-the-macos-app-store-replacement-you-didn-t-know-you-needed/ar-BB1mK6Ys |access-date=25 May 2024 |work=www.msn.com}}</ref><ref name=comp>{{cite web |last1=King |first1=Bertel |title=Linux App Stores Compared: Which One Is Right for You? |url=https://www.makeuseof.com/tag/linux-app-stores-compared/ |website=MUO |access-date=25 May 2024 |language=en |date=17 March 2017}}</ref>). Unlike traditional package managers, app stores are designed to enable payment for the software itself (instead of for software development), and may only offer monolithic packages with no dependencies or dependency resolution.<ref>{{cite web |title=What is a package manager? |url=https://www.debian.org/doc/manuals/aptitude/pr01s02.en.html |website=www.debian.org}}</ref><ref name=comp/> They are usually extremely limited in their management functionality, due to a strong focus on simplification over power or [[emergent structures|emergence]], and common in commercial operating systems and locked-down “smart” devices. |
|||
===== iPhone OS ===== |
|||
Package managers also often have only human-reviewed code. Many app stores, such and Google Play and Apple's App Store, screen apps mostly using automated tools only; malware with [[defeat device]]s can pass these tests, by detecting when the software is being automatically tested and delaying malicious activity.<ref>{{cite news |last1=Barrett |first1=Brian |title=How 18 Malware Apps Snuck Into Apple's App Store |url=https://www.wired.com/story/apple-app-store-malware-click-fraud/ |work=Wired}}</ref><ref>{{cite web |last1=Whittaker |first1=Zack |title=Millions downloaded dozens of Android apps from Google Play that were infected with adware |url=https://techcrunch.com/2019/10/24/millions-dozens-android-apps-adware/ |website=TechCrunch |date=24 October 2019}}</ref><ref>{{cite news |last1=Newman |first1=Lily Hay |title=Never Ever (Ever) Download Android Apps Outside of Google Play |url=https://www.wired.com/2016/12/never-ever-ever-download-android-apps-outside-google-play/ |work=Wired}}</ref> There are, however, exceptions; the [[npm]] package database, for instance, relies entirely on [[post-publication review]] of its code,<ref name="OjamaaDuuna12">{{cite book|last1=Ojamaa|first1=Andres|last2=Duuna|first2=Karl|chapter=Assessing the Security of Node.js Platform|title=2012 International Conference for Internet Technology and Secured Transactions | publisher = IEEE |date=2012|chapter-url=https://ieeexplore.ieee.org/document/6470829|access-date=22 July 2016|isbn= 978-1-4673-5325-0 }}</ref><ref>{{cite web |title=npm Code of Conduct: acceptable package content |url=https://docs.npmjs.com/policies/conduct#acceptable-package-content |access-date=9 May 2017}}</ref> while the [[Debian]] package database has an extensive human review process before any package goes into the main stable database. The [[XZ Utils backdoor]] used years of trust-building to insert a backdoor, which was nonetheless caught while in the testing database. |
|||
* [[Cydia]], for [[iPhone OS]], derived from dpkg/apt. |
|||
===== Microsoft Windows ===== |
|||
==Common package managers and formats== |
|||
* [[Cygwin]] — a free and open source software repository for the [[Microsoft Windows|Windows]] operating system which provides many GNU/Linux tools and an installation tool née package manager. |
|||
* Appsnap — a package manager for Windows written in Python released under the [[GPL]]. |
|||
* Appupdater — a package manager for Windows written in Python released under the GPL. |
|||
* Windows-get — a package manager for Windows written in Delphi and PHP released into the public domain. |
|||
* GetIt — uses Appsnap, Appupdater, and Windows-get as sources and combines their repositories into one big catalog. Released under the GPL. |
|||
=== |
===Universal package manager=== |
||
Also known as [[binary repository manager]], it is a software tool designed to optimize the download and storage of binary files, artifacts and packages used and produced in the [[software development process]].<ref>{{cite web |url= https://adtmag.com/articles/2015/09/08/jfrog-repository.aspx |title= JFrog Releases 'Universal' Artifact Repository |last= Waters |first= John K. |date= 8 September 2015 |website= ADT Mag |publisher= Application Development Trends Magazine |access-date= 19 February 2016 |archive-date= 2 March 2016 |archive-url= https://web.archive.org/web/20160302162053/https://adtmag.com/articles/2015/09/08/jfrog-repository.aspx |url-status= live }}</ref> These package managers aim to standardize the way enterprises treat all package types. They give users the ability to apply security and compliance metrics across all artifact types. Universal package managers have been referred to as being at the center of a [[DevOps toolchain]].<ref>{{cite web |url=https://www.codeproject.com/Reference/628210/An-Overview-of-the-NuGet-Ecosystem |title=An Overview of the NuGet Ecosystem |last=Decoster |first=Xavier |date=18 August 2013 |website=CodeProject.com |access-date=6 February 2020 |archive-date=5 July 2020 |archive-url=https://web.archive.org/web/20200705022618/https://www.codeproject.com/Reference/628210/An-Overview-of-the-NuGet-Ecosystem |url-status=live }}</ref> |
|||
===Package formats=== |
|||
*[[PC-BSD]] uses files with the [[.pbi]] filename extension which, when double-clicked, brings up an installation wizard program. An autobuild system tracks the [[FreeBSD ports]] collection and generates new PBI's daily |
|||
{{Main article|Package format|File archive}} |
|||
Each package manager relies on the format and metadata of the packages it can manage. That is, package managers need groups of files to be bundled for the specific package manager along with appropriate metadata, such as dependencies. Often, a core set of utilities manages the basic installation from these packages and multiple package managers use these utilities to provide additional functionality. |
|||
For example, [[Yellowdog Updater, Modified|yum]] relies on [[RPM Package Manager|rpm]] as a [[Backend (computing)|backend]]. Yum extends the functionality of the backend by adding features such as simple configuration for maintaining a network of systems. As another example, the [[Synaptic Package Manager]] provides a graphical user interface by using the [[Advanced Packaging Tool|Advanced Packaging Tool (apt)]] library, which, in turn, relies on [[dpkg]] for core functionality. |
|||
===== Solaris ===== |
|||
[[Alien (file converter)|Alien]] is a program that converts between different [[Linux package formats]], supporting conversion between [[Linux Standard Base]] (LSB) compliant [[RPM Package Manager|.rpm]] packages, [[deb (file format)|.deb]], Stampede (.slp), [[Solaris (operating system)|Solaris]] (.pkg) and [[Slackware]] ([[.tgz]], [[.txz]], .tbz, .tlz) packages. |
|||
* [[SysV (package format)|SysV]] format (sometimes called [[pkgadd]] format), used by [[Solaris (operating system)|Solaris]]. |
|||
* [[Image Packaging System]], also known as IPS or pkg(5), used by [[OpenSolaris]] |
|||
* [[OpenCSW]] — a community supported collection of [[SysV (package format)|SysV]] format packages for SunOS 5.8-5.10 (Solaris 8-10). |
|||
In mobile operating systems, [[Google Play]] consumes [[Android application package]] (APK) package format while [[Microsoft Store]] uses [[APPX]] and [[XAP (file format)|XAP]] formats. (Both Google Play and Microsoft Store have eponymous package managers.) |
|||
===== Cross platform ===== |
|||
===Free and open source software systems=== |
|||
* [[Image Packaging System]], also known as IPS or pkg(5), is a cross platform network repository based system. In addition to being used as the OS level package management system in the Sun-managed form of [[OpenSolaris]], the pkg(5) system is available for use by layered applications on [[Microsoft Windows]], [[Linux]], [[Mac OS X]], [[OpenSolaris]], [[Solaris (operating system)|Solaris]] and [[IBM AIX]]. |
|||
By the nature of [[free and open source software]], packages under similar and compatible licenses are available for use on a number of operating systems. These packages can be combined and distributed using configurable and internally complex packaging systems to handle many permutations of software and manage version-specific dependencies and conflicts. Some packaging systems of free and open source software are also themselves released as free and open source software. One typical difference between package management in proprietary operating systems, such as Mac OS X and Windows, and those in free and open source software, such as Linux, is that free and open source software systems permit third-party packages to also be installed and upgraded through the same mechanism, whereas the package managers of Mac OS X and Windows will only upgrade software provided by Apple and Microsoft, respectively (with the exception of some third party drivers in Windows). The ability to continuously upgrade third-party software is typically added by adding the [[Uniform Resource Locator|URL]] of the corresponding repository to the package management's configuration file. |
|||
* [[OpenPKG]] is a cross platform package management system based on the [[RPM Package Manager]]. It works on several Unix-based systems, including [[Linux]], [[BSD]] and [[Solaris (operating system)|Solaris]]. |
|||
* [[NetBSD]]'s [[pkgsrc]] works on several [[Unix-like]] [[operating system]]s. |
|||
* [[0install]] available for [[Unix-like]] and [[Microsoft Windows]] operating systems. |
|||
===Application-level package managers=== |
|||
==== Sourcecode-based installation / Installing using compile scripts ==== |
|||
{{See also|List of software package management systems#Application-level package managers}} |
|||
Beside the system-level application managers, there are some add-on package managers for operating systems with limited capabilities and for [[programming language]]s in which developers need the latest [[Library (computing)|libraries]]. |
|||
* [[Portage (software)|Portage]] and [[Portage (software)#emerge|emerge]] are used by [[Gentoo Linux]]. They were inspired by the BSD ports system and use scripts called [[ebuild]]s to install software. |
|||
* A [[recipe]] file contains information on how to download, unpack, compile and install a package in [[GoboLinux]] distribution using its [[GoboLinux#.22Compile.22_program|Compile]] tool. |
|||
* [[apt-build]] is used by distributions which use [[deb (file format)|deb packages]], allowing automatic compiling and installation of software in a deb source repository. |
|||
* [[Sourcemage#Sorcery|Sorcery]] is [[Sourcemage|Sourcemage GNU/Linux]]'s [[Bash (Unix shell)|bash]] based package managment program that automatically downloads software from their original site and compiles and installs it on the local machine. |
|||
* [[Arch Build System|ABS]] is used by [[Arch Linux]] to automate binary packages building from source or even other binary archives, with automatic download and dependency checking. |
|||
Unlike system-level package managers, application-level package managers focus on a small part of the software system. They typically reside within a directory tree that is not maintained by the system-level package manager, such as {{Mono|c:\cygwin}} or {{Mono|/opt/sw}}.<ref>{{Cite web|title=Fink – Home|url=https://www.finkproject.org/index.php|access-date=2021-09-02|website=finkproject.org|archive-date=18 August 2021|archive-url=https://web.archive.org/web/20210818055630/https://finkproject.org/index.php|url-status=live}}</ref> However, this might not be the case for the package managers that deal with programming libraries, leading to a possible conflict as both package managers may claim to "own" a file and might break upgrades. |
|||
==== Hybrid systems ==== |
|||
===Data Dependency Management=== |
|||
* The [[FreeBSD Ports]] Collection, sometimes known simply as ''ports'', uses a system of [[Makefile]]s to install software from sources or binaries. [[MacPorts]] (for Mac OS X), [[NetBSD]]'s ''[[pkgsrc]]'' and [[OpenBSD]]'s [[ports collection]] are similar. |
|||
In 2016, Edgard Marx, a computer scientist from Leipzig University, coined the term Data Dependency Management<ref>{{Cite web|title=Data Dependency Management|url=https://github.com/AKSW/KBox|access-date=2023-07-13|website=github.com}}</ref> to refer to the systems that deal with the management of data. |
|||
Data Dependency Management systems are designed to facilitate the deployment and management of data on the cloud, personal computers, or smart devices (edge). Data Dependency Management frameworks can be used to describe how the data was conceived, licensing as well as its dependencies. The concept of data dependency management comes from software package dependency management tools such as npm for JavaScript, [[RubyGems|gem]] for Ruby, and [[NuGet]] for .NET. Their rationale is to allow users to manage the software dependency on data, such as machine learning models for data-driven applications. They are useful to publish, locate, and install data packages. A typical example of a data dependency management frameworks are Hugging Face, KBox,<ref>{{Cite journal|title=KBox|url=https://ieeexplore.ieee.org/document/7889519|access-date=2023-07-13|website=[[IEEE]]|date=January 2017 |pages=125–132 |doi=10.1109/ICSC.2017.77 |s2cid=14980310 }}</ref> among others. |
|||
==Impact== |
|||
==== Meta package managers ==== |
|||
[[Ian Murdock]] had commented that package management is "the single biggest advancement [[Linux]] has brought to the industry", that it blurs the boundaries between operating system and applications, and that it makes it "easier to push new innovations [...] into the marketplace and [...] evolve the OS".<ref>{{cite web |title=How package management changed everything|url=http://ianmurdock.com/2007/07/21/how-package-management-changed-everything/|publisher=ianmurdock.com|access-date=2008-03-01|url-status=dead|archive-url=https://web.archive.org/web/20090223072201/http://ianmurdock.com/2007/07/21/how-package-management-changed-everything/|archive-date=23 February 2009}}</ref> |
|||
There is also a conference for package manager developers known as PackagingCon. It was established in 2021 with the aim to understand different approaches to package management.<ref>{{Cite web|title=PackagingCon 2021 – a conference for package manager developers and packagers|url=https://packaging-con.org/|access-date=2021-09-02|website=packaging-con.org|archive-date=2 September 2021|archive-url=https://web.archive.org/web/20210902144959/https://packaging-con.org/|url-status=live}}</ref> |
|||
The following unify package management for several or all Linux and sometimes Unix variants. These, too, are based on the concept of a recipe file. |
|||
* [[Autopackage]] uses .package files. |
|||
* epm, developed by Easy Software Products (creators of [[CUPS]]), is a "meta packager", that allows creation of native packages for all Linux and Unix operating systems (.deb, .rpm, .tgz for Linux, pkg for Solaris and *BSD, .dmg for OS X,...) controlled from a single *.list file. |
|||
* [[klik (packaging method)|klik]] aims to provide an easy way of getting software packages for most major distributions without the dependency problems so common in many other package formats. |
|||
* [http://www.project-builder.org Project-Builder.org] is a GPL v2 tool designed to help projects developers to easily produce packages for multiple [[Operating_system|OS]]'s and architectures, on a regular basis and from a single source repository. |
|||
* [[RUNZ]], used in portable applications and [[SuperDeb]]s for [[Super OS|Super OS (formerly: Super Ubuntu)]]<ref>[http://hacktolive.org/runz RUNZ homepage]</ref>. |
|||
* [[Zero Install]] installs each package into its own directory and uses [[environment variable]]s to let each program find its libraries. Package and dependency information is downloaded directly from the software authors' pages in an XML format, similar to an [[RSS Feed]]. |
|||
* [[Nix package manager]] manages packages in a [[purely functional]] way. |
|||
* [[PackageKit]] is a set of utilities and libraries for creating applications that can manage packages across multiple package managers using back-ends to call the correct program. |
|||
=== Proprietary software systems === |
|||
A wide variety of package management systems are in common use today by [[proprietary software]] operating systems, handling the installation of both proprietary and free packages. |
|||
* [[installp]] is the [[AIX operating system|AIX]] command to install packages supplied in bff (backup file format) files. It records installed package information in [[Object Data Manager]] (ODM) databases. |
|||
* [[Software Distributor]] is the [[HP-UX]] package manager. |
|||
* In the [[Microsoft .NET]] framework an [[.NET assembly|assembly]] is a partially [[compiler|compiled]] code library for use in deployment, versioning and security. |
|||
=== Application-level package managers === |
|||
Besides the systems-level application managers, there are some add-on package managers for operating systems with limited capabilities and for programming languages where developers need the latest libraries. Those include the package managers listed for Windows and OS X above, as well as: |
|||
* [[CPAN]] - a programming library and package manager for the [[Perl programming language]] |
|||
* [[PHP Extension and Application Repository|PEAR]] - a programming library for the [[PHP programming language]] |
|||
* [[RubyGems]] - a programming library for the [[Ruby programming language]] |
|||
* [[Apache Maven|Maven]] - a package manager and build tool for [[Java (programming language)|Java]] programming language |
|||
* [[Apache Ivy|Ivy]] - a package manager for [[Java (programming language)|Java]] programming language, integrated into [[Apache Ant|Ant]] build tool |
|||
* [[EasyInstall]] - a programming library and package manager for the [[Python programming language]] using so called [[Python eggs]] |
|||
* [[Cabal (software)|Cabal]] - a programming library and package manager for the [[Haskell programming language]] |
|||
* [[LuaRocks]] - a programming library and package manager for the [[Lua programming language]] |
|||
* [[VI Package Manager]] - a package manager for the [[LabVIEW]] platform and development environment that provides access to the [[OpenG]] programming library. |
|||
* [[Perl Archive Toolkit|PAR::Repository]] and [[Perl package manager]] - binary package managers for the [[Perl programming language]] |
|||
In contrast to systems-level application managers, application-level package managers focus on a small part of the software system. They typically reside within a directory tree that is not maintained by the systems-level package manager (like c:\cygwin or /usr/local/fink). However, this is not the case for the package managers that deal with programming libraries. This leads to a conflict as both package managers claim to "own" a file and might break upgrades. |
|||
== See also == |
|||
{{portal|Free software|Free Software Portal Logo.svg}} |
|||
==See also== |
|||
* [[Application strings manager]] |
|||
* [[Dependency hell]] |
* [[Dependency hell]] |
||
* [[Installation (computer programs)]] |
|||
* [[Software repository]] |
|||
* [[List of software package management systems]] |
|||
* [[GNU Stow]] |
|||
* [[ |
* [[Manifest file]] |
||
* [[Package format]] |
|||
== |
==References== |
||
{{Reflist}} |
|||
==External links== |
|||
{{reflist}} |
|||
*[http://distrowatch.com/dwres.php?resource=package-management Package Management Cheatsheet] from Distrowatch |
|||
*[https://wiki.archlinux.org/index.php/Pacman/Rosetta ArchLinux Rosetta Stone – Command Line Comparison for Package Managers] |
|||
*[https://github.com/Inducido/upkg-package-manager-rosetta-stone upkg universal package manager] a wrapper that provides same syntax for all flavors of Linux |
|||
{{Package management systems}} |
|||
== External links == |
|||
{{Software digital distribution platforms}} |
|||
* [http://distrowatch.com/dwres.php?resource=package-management Distrowatch Comparison of Package Management Systems] |
|||
[[Category:Package management systems| ]] |
[[Category:Package management systems| ]] |
||
[[Category:Software distribution]] |
|||
[[Category:Types of tools used in software development]] |
|||
[[ar:نظام إدارة الحزم]] |
|||
[[cs:Balíčkovací systém]] |
|||
[[de:Paketverwaltung]] |
|||
[[es:Sistema de gestión de paquetes]] |
|||
[[fr:Gestionnaire de paquets]] |
|||
[[id:Package manager]] |
|||
[[it:Sistema di gestione dei pacchetti]] |
|||
[[ja:パッケージ管理システム]] |
|||
[[no:Pakkesystem]] |
|||
[[pl:System zarządzania pakietami]] |
|||
[[ru:Система управления пакетами]] |
|||
[[sv:Pakethanterare]] |
|||
[[zh:软件包管理系统]] |
Latest revision as of 16:25, 15 November 2024
This article needs additional citations for verification. (December 2022) |
A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner.[1]
A package manager deals with packages, distributions of software and data in archive files. Packages contain metadata, such as the software's name, description of its purpose, version number, vendor, checksum (preferably a cryptographic hash function), and a list of dependencies necessary for the software to run properly. Upon installation, metadata is stored in a local package database. Package managers typically maintain a database of software dependencies and version information to prevent software mismatches and missing prerequisites. They work closely with software repositories, binary repository managers, and app stores.
Package managers are designed to eliminate the need for manual installs and updates. This can be particularly useful for large enterprises whose operating systems typically consist of hundreds or even tens of thousands of distinct software packages.[2]
History
[edit]An early package manager was SMIT (and its backend installp) from IBM AIX. SMIT was introduced with AIX 3.0 in 1989.[citation needed]
Early package managers, from around 1994, had no automatic dependency resolution[3] but could already drastically simplify the process of adding and removing software from a running system.[4]
By around 1995, beginning with CPAN, package managers began doing the work of downloading packages from a repository, automatically resolving its dependencies and installing them as needed, making it much easier to install, uninstall and update software from a system.[5]
Functions
[edit]A software package is an archive file containing a computer program as well as necessary metadata for its deployment. The computer program can be in source code that has to be compiled and built first.[6] Package metadata include package description, package version, and dependencies (other packages that need to be installed beforehand).
Package managers are charged with the task of finding, installing, maintaining or uninstalling software packages upon the user's command. Typical functions of a package management system include:
- Working with file archivers to extract package archives
- Ensuring the integrity and authenticity of the package by verifying their checksums and digital certificates, respectively
- Looking up, downloading, installing, or updating existing software from a software repository or app store
- Grouping packages by function to reduce user confusion
- Managing dependencies to ensure a package is installed with all packages it requires, thus avoiding "dependency hell"
Challenges with shared libraries
[edit]Computer systems that rely on dynamic library linking, instead of static library linking, share executable libraries of machine instructions across packages and applications. In these systems, conflicting relationships between different packages requiring different versions of libraries results in a challenge colloquially known as "dependency hell". On Microsoft Windows systems, this is also called "DLL hell" when working with dynamically linked libraries.[7]
Modern package managers have mostly solved these problems, by allowing parallel installation of multiple versions of a library (e.g. OPENSTEP's Framework system), a dependency of any kind (e.g. slots in Gentoo Portage), and even of packages compiled with different compiler versions (e.g. dynamic libraries built by the Glasgow Haskell Compiler, where a stable ABI does not exist), in order to enable other packages to specify which version they were linked or even installed against.
Front-ends for locally compiled packages
[edit]System administrators may install and maintain software using tools other than package management software. For example, a local administrator may download unpackaged source code, compile it, and install it. This may cause the state of the local system to fall out of synchronization with the state of the package manager's database. The local administrator will be required to take additional measures, such as manually managing some dependencies or integrating the changes into the package manager.
There are tools available to ensure that locally compiled packages are integrated with the package management. For distributions based on .deb and .rpm files as well as Slackware Linux, there is CheckInstall, and for recipe-based systems such as Gentoo Linux and hybrid systems such as Arch Linux, it is possible to write a recipe first, which then ensures that the package fits into the local package database.[citation needed]
Maintenance of configuration
[edit]Particularly troublesome with software upgrades are upgrades of configuration files. Since package managers, at least on Unix systems, originated as extensions of file archiving utilities, they can usually only either overwrite or retain configuration files, rather than applying rules to them. There are exceptions to this that usually apply to kernel configuration (which, if broken, will render the computer unusable after a restart). Problems can be caused if the format of configuration files changes; for instance, if the old configuration file does not explicitly disable new options that should be disabled. Some package managers, such as Debian's dpkg, allow configuration during installation. In other situations, it is desirable to install packages with the default configuration and then overwrite this configuration, for instance, in headless installations to a large number of computers. This kind of pre-configured installation is also supported by dpkg.
Repositories
[edit]To give users more control over the kinds of software that they are allowing to be installed on their system (and sometimes due to legal or convenience reasons on the distributors' side), software is often downloaded from a number of software repositories.[8]
Upgrade suppression
[edit]When a user interacts with the package management software to bring about an upgrade, it is customary to present the user with the list of actions to be executed (usually the list of packages to be upgraded, and possibly giving the old and new version numbers), and allow the user to either accept the upgrade in bulk, or select individual packages for upgrades. Many package managers can be configured to never upgrade certain packages, or to upgrade them only when critical vulnerabilities or instabilities are found in the previous version, as defined by the packager of the software. This process is sometimes called version pinning.
For instance:
- yum supports this with the syntax exclude=openoffice*[9]
- pacman with IgnorePkg= openoffice[10] (to suppress upgrading openoffice in both cases)
- dpkg and dselect support this partially through the hold flag in package selections
- APT extends the hold flag through the complex "pinning" mechanism[11] (Users can also blacklist a package[12])
- aptitude has "hold" and "forbid" flags
- portage supports this through the package.mask configuration file
Cascading package removal
[edit]Some of the more advanced package management features offer "cascading package removal",[10] in which all packages that depend on the target package and all packages that only the target package depends on, are also removed.
Comparison of commands
[edit]Although the commands are specific for every particular package manager, they are to a large extent translatable, as most package managers offer similar functions.
Action | Homebrew | apt | pacman | dnf (yum) | portage | zypper[13] | Nix | xbps[14] | swupd[15] | WinGet |
---|---|---|---|---|---|---|---|---|---|---|
Install package | brew install ${PKG}
|
apt install ${PKG}
|
pacman -S ${PKG}
|
dnf install ${PKG}
|
emerge ${PKG}
|
zypper in ${PKG}
|
nix-env -i ${PKG}
|
xbps-install ${PKG}
|
swupd bundle-add ${PKG}
|
winget install %PKG%
|
Remove package | brew uninstall ${PKG}
|
apt remove ${PKG}
|
pacman -R ${PKG}
|
dnf remove --nodeps ${PKG}
|
emerge -C ${PKG} or emerge --unmerge ${PKG}
|
zypper rm -RU ${PKG}
|
nix-env -e ${PKG}
|
xbps-remove ${PKG}
|
swupd bundle-remove ${PKG}
|
winget uninstall %PKG%
|
Update all | brew upgrade
|
apt upgrade
|
pacman -Syu
|
dnf update
|
emerge -u -D --with-bdeps=y @world
|
zypper up
|
nix-env -u && nix-collect-garbage
|
xbps-install -Su
|
swupd update
|
winget upgrade --all
|
Update software database | brew update
|
apt update
|
pacman -Sy
|
dnf check-update
|
emerge --sync
|
zypper ref
|
nix-channel --upgrade
|
xbps-install -S
|
swupd update --download or swupd update --update-search-file-index
|
winget list > NUL
|
Show updatable packages | brew outdated
|
apt list --upgradable
|
pacman -Qu
|
dnf check-update
|
emerge -avtuDN --with-bdeps=y @world or emerge -u --pretend @world ( -D is shorthand for --deep and-u is shorthand for --update .)
|
zypper lu
|
nix-channel --upgrade && \
nix-env -u && \
nix-collect-garbage
|
./xbps-src update-check ${PKG} (requires void-packages repository)
|
swupd update -s or swupd check-update
|
winget upgrade
|
Delete orphans and config | brew autoremove && brew cleanup
|
apt autoremove
|
pacman -Rsn $(pacman -Qdtq)
|
dnf erase ${PKG}
|
emerge --depclean
|
zypper rm -u
|
nix-collect-garbage -d
|
xbps-remove -of
|
swupd bundle-remove --orphans && \
swupd clean --all
|
— |
Show orphans | brew autoremove --dry-run
|
— | pacman -Qdt
|
package-cleanup -q --leaves --exclude-bin ( -q is shorthand for --quiet .)
|
emerge -caD or emerge --depclean --pretend
|
zypper pa --orphaned --unneeded
|
— | xbps-remove -o
|
swupd bundle-list --orphans
|
— |
Remove package (and orphans) | brew uninstall ${PKG} && brew autoremove
|
apt autoremove ${PKG}
|
pacman -Rs ${PKG}
|
dnf remove ${PKG}
|
emerge -c ${PKG} or emerge --depclean ${PKG}
|
zypper rm -u --force-resolution ${PKG}
|
nix-env -e ${PKG} && nix-env -u
|
xbps-remove -R ${PKG}
|
swupd bundle-remove ${PKG} && \
swupd bundle-remove --orphans
|
winget uninstall %PKG%
|
The Arch Linux Pacman/Rosetta wiki offers an extensive overview.[16]
Prevalence
[edit]Package managers like dpkg have existed as early as 1994.[17]
Linux distributions oriented to binary packages rely heavily on package management systems as their primary means of managing and maintaining software. Mobile operating systems such as Android (Linux-based), iOS (Unix-based), and Windows Phone rely almost exclusively on their respective vendors' app stores and thus use their own dedicated package management systems.
-
Synaptic, a GUI for many Linux package managers
-
pacman
, a CLI utility for Arch-based distributions -
Octopi, a Qt GUI for Pacman package manager
-
Pamac, a GTK+ GUI for Pacman package manager
Comparison with installers
[edit]A package manager is often called an "install manager", which can lead to a confusion between package managers and installers. The differences include:
Criterion | Package manager | Installer |
---|---|---|
Shipped with | Usually, the operating system | Each computer program |
Location of installation information | One central installation database | It is entirely at the discretion of the installer. It could be a file within the app's folder, or among the operating system's files and folders. At best, they may register themselves with an uninstallers list without exposing installation information. |
Scope of maintenance | Potentially all packages on the system | Only the product with which it was bundled |
Developed by | One package manager vendor | Multiple installer vendors |
Package format | A handful of well-known formats | There could be as many formats as the number of apps |
Package format compatibility | Can be consumed as long as the package manager supports it. Either newer versions of the package manager keep supporting it or the user does not upgrade the package manager. | The installer is always compatible with its archive format, if it uses any. However, installers, like all computer programs, may be affected by software rot. |
Comparison with build automation utility
[edit]Most software configuration management systems treat building software and deploying software as separate, independent steps. A build automation utility typically takes human-readable source code files already on a computer, and automates the process of converting them into a binary executable package on the same or remote computer. Later a package manager typically running on some other computer downloads those pre-built binary executable packages over the internet and installs them.
However, both kinds of tools have many commonalities:
- The dependency graph topological sorting used in a package manager to handle dependencies between binary components is also used in a build manager to handle the dependency between source components.
- Many makefiles support not only building executables, but also installing them with
make install
. - Every package manager for a source-based distribution – Portage, Sorcery, Homebrew, etc. – supports converting human-readable source code to binary executables and installing it.
A few tools, such as Maak and A-A-P, are designed to handle both building and deployment, and can be used as either a build automation utility or as a package manager or both.[18]
Comparison with app stores
[edit]App stores can also be considered application-level package managers (without the ability to install all levels of programs[19][20]). Unlike traditional package managers, app stores are designed to enable payment for the software itself (instead of for software development), and may only offer monolithic packages with no dependencies or dependency resolution.[21][20] They are usually extremely limited in their management functionality, due to a strong focus on simplification over power or emergence, and common in commercial operating systems and locked-down “smart” devices.
Package managers also often have only human-reviewed code. Many app stores, such and Google Play and Apple's App Store, screen apps mostly using automated tools only; malware with defeat devices can pass these tests, by detecting when the software is being automatically tested and delaying malicious activity.[22][23][24] There are, however, exceptions; the npm package database, for instance, relies entirely on post-publication review of its code,[25][26] while the Debian package database has an extensive human review process before any package goes into the main stable database. The XZ Utils backdoor used years of trust-building to insert a backdoor, which was nonetheless caught while in the testing database.
Common package managers and formats
[edit]Universal package manager
[edit]Also known as binary repository manager, it is a software tool designed to optimize the download and storage of binary files, artifacts and packages used and produced in the software development process.[27] These package managers aim to standardize the way enterprises treat all package types. They give users the ability to apply security and compliance metrics across all artifact types. Universal package managers have been referred to as being at the center of a DevOps toolchain.[28]
Package formats
[edit]Each package manager relies on the format and metadata of the packages it can manage. That is, package managers need groups of files to be bundled for the specific package manager along with appropriate metadata, such as dependencies. Often, a core set of utilities manages the basic installation from these packages and multiple package managers use these utilities to provide additional functionality.
For example, yum relies on rpm as a backend. Yum extends the functionality of the backend by adding features such as simple configuration for maintaining a network of systems. As another example, the Synaptic Package Manager provides a graphical user interface by using the Advanced Packaging Tool (apt) library, which, in turn, relies on dpkg for core functionality.
Alien is a program that converts between different Linux package formats, supporting conversion between Linux Standard Base (LSB) compliant .rpm packages, .deb, Stampede (.slp), Solaris (.pkg) and Slackware (.tgz, .txz, .tbz, .tlz) packages.
In mobile operating systems, Google Play consumes Android application package (APK) package format while Microsoft Store uses APPX and XAP formats. (Both Google Play and Microsoft Store have eponymous package managers.)
Free and open source software systems
[edit]By the nature of free and open source software, packages under similar and compatible licenses are available for use on a number of operating systems. These packages can be combined and distributed using configurable and internally complex packaging systems to handle many permutations of software and manage version-specific dependencies and conflicts. Some packaging systems of free and open source software are also themselves released as free and open source software. One typical difference between package management in proprietary operating systems, such as Mac OS X and Windows, and those in free and open source software, such as Linux, is that free and open source software systems permit third-party packages to also be installed and upgraded through the same mechanism, whereas the package managers of Mac OS X and Windows will only upgrade software provided by Apple and Microsoft, respectively (with the exception of some third party drivers in Windows). The ability to continuously upgrade third-party software is typically added by adding the URL of the corresponding repository to the package management's configuration file.
Application-level package managers
[edit]Beside the system-level application managers, there are some add-on package managers for operating systems with limited capabilities and for programming languages in which developers need the latest libraries.
Unlike system-level package managers, application-level package managers focus on a small part of the software system. They typically reside within a directory tree that is not maintained by the system-level package manager, such as c:\cygwin or /opt/sw.[29] However, this might not be the case for the package managers that deal with programming libraries, leading to a possible conflict as both package managers may claim to "own" a file and might break upgrades.
Data Dependency Management
[edit]In 2016, Edgard Marx, a computer scientist from Leipzig University, coined the term Data Dependency Management[30] to refer to the systems that deal with the management of data. Data Dependency Management systems are designed to facilitate the deployment and management of data on the cloud, personal computers, or smart devices (edge). Data Dependency Management frameworks can be used to describe how the data was conceived, licensing as well as its dependencies. The concept of data dependency management comes from software package dependency management tools such as npm for JavaScript, gem for Ruby, and NuGet for .NET. Their rationale is to allow users to manage the software dependency on data, such as machine learning models for data-driven applications. They are useful to publish, locate, and install data packages. A typical example of a data dependency management frameworks are Hugging Face, KBox,[31] among others.
Impact
[edit]Ian Murdock had commented that package management is "the single biggest advancement Linux has brought to the industry", that it blurs the boundaries between operating system and applications, and that it makes it "easier to push new innovations [...] into the marketplace and [...] evolve the OS".[32]
There is also a conference for package manager developers known as PackagingCon. It was established in 2021 with the aim to understand different approaches to package management.[33]
See also
[edit]- Application strings manager
- Dependency hell
- Installation (computer programs)
- List of software package management systems
- Manifest file
- Package format
References
[edit]- ^ "What is a package manager?". Archived from the original on 17 October 2017. Retrieved 19 December 2018.
- ^ "Software Distribution". Dell KACE. Archived from the original on 3 October 2015. Retrieved 11 July 2012.
- ^ "The history of *nix package management". 14 August 2017. Archived from the original on 24 October 2021. Retrieved 12 October 2021.
- ^ "A review of InfoMagic's December 1994 Release". Archived from the original on 29 October 2021. Retrieved 12 October 2021.
- ^ "The Timeline of Perl and its Culture". Archived from the original on 11 January 2013. Retrieved 29 October 2021.
- ^ Ludovic Courtès, Functional Package Management with Guix Archived 15 May 2020 at the Wayback Machine, June 2013, Madrid, European Lisp Symposium 2013
- ^ "Linux repository classification schemes". braintickle.blogspot.com. 13 January 2006. Archived from the original on 11 October 2007. Retrieved 1 March 2008.
- ^ "CentOS yum pinning rpms". centos.org. Archived from the original on 2 November 2007. Retrieved 1 March 2008.
{{cite web}}
: CS1 maint: unfit URL (link) - ^ a b "pacman(8) Manual Page". archlinux.org. Archived from the original on 31 August 2019. Retrieved 1 March 2008.
- ^ "How to keep specific versions of packages installed (complex)". debian.org. Archived from the original on 14 November 2019. Retrieved 1 March 2008.
- ^ "Apt pinning to blacklist a package". Archived from the original on 22 July 2011. Retrieved 19 August 2010.
- ^ "documentation/sles11". en.opensuse.org. Archived from the original on 1 December 2022. Retrieved 16 August 2017.
- ^ "XBPS Package Manager - Void Linux Handbook". docs.voidlinux.org. Archived from the original on 23 January 2023. Retrieved 19 December 2022.
- ^ "swupd-client/swupd.1.rst at master · clearlinux/swupd-client · GitHub". github.com. Archived from the original on 7 December 2022. Retrieved 22 June 2022.
- ^ "Pacman/Rosetta – ArchWiki". wiki.archlinux.org. Archived from the original on 20 November 2016. Retrieved 17 September 2017.
- ^ "dpkg version 0.93.15 source code". Archived from the original on 2 April 2015. Retrieved 19 December 2018.
- ^ Eelco Dolstra, "Integrating Software Construction and Software Deployment" Archived 21 September 2019 at the Wayback Machine.
- ^ "Brew is the macOS app store replacement you didn't know you needed". www.msn.com. Retrieved 25 May 2024.
- ^ a b King, Bertel (17 March 2017). "Linux App Stores Compared: Which One Is Right for You?". MUO. Retrieved 25 May 2024.
- ^ "What is a package manager?". www.debian.org.
- ^ Barrett, Brian. "How 18 Malware Apps Snuck Into Apple's App Store". Wired.
- ^ Whittaker, Zack (24 October 2019). "Millions downloaded dozens of Android apps from Google Play that were infected with adware". TechCrunch.
- ^ Newman, Lily Hay. "Never Ever (Ever) Download Android Apps Outside of Google Play". Wired.
- ^ Ojamaa, Andres; Duuna, Karl (2012). "Assessing the Security of Node.js Platform". 2012 International Conference for Internet Technology and Secured Transactions. IEEE. ISBN 978-1-4673-5325-0. Retrieved 22 July 2016.
- ^ "npm Code of Conduct: acceptable package content". Retrieved 9 May 2017.
- ^ Waters, John K. (8 September 2015). "JFrog Releases 'Universal' Artifact Repository". ADT Mag. Application Development Trends Magazine. Archived from the original on 2 March 2016. Retrieved 19 February 2016.
- ^ Decoster, Xavier (18 August 2013). "An Overview of the NuGet Ecosystem". CodeProject.com. Archived from the original on 5 July 2020. Retrieved 6 February 2020.
- ^ "Fink – Home". finkproject.org. Archived from the original on 18 August 2021. Retrieved 2 September 2021.
- ^ "Data Dependency Management". github.com. Retrieved 13 July 2023.
- ^ "KBox". IEEE: 125–132. January 2017. doi:10.1109/ICSC.2017.77. S2CID 14980310. Retrieved 13 July 2023.
- ^ "How package management changed everything". ianmurdock.com. Archived from the original on 23 February 2009. Retrieved 1 March 2008.
- ^ "PackagingCon 2021 – a conference for package manager developers and packagers". packaging-con.org. Archived from the original on 2 September 2021. Retrieved 2 September 2021.
External links
[edit]- Package Management Cheatsheet from Distrowatch
- ArchLinux Rosetta Stone – Command Line Comparison for Package Managers
- upkg universal package manager a wrapper that provides same syntax for all flavors of Linux