软件包管理工具简述

有计算机系统就有软件,那么我们平时是如何安装软件的呢?当然可以直接下载软件使用,比如诸君(包括我)电脑上的众多盗版软件,大概是直接从网页上下载的,除此之外,在手机上我们也常用App store或者google play来下载软件,这类工具其实就是软件包管理系统。软件包管理系统是在电脑中自动安装、配制、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。 因此软件包也被称为软件安装管理器。

通常,一个软件包只是一个特定的程序。例如,即时通讯客户端gaim就包含在Debian的同名软件包中。另一方面,程序由几个相互关联的软件包组成是很常见的。例如,gimp图像编辑器不仅由gimp包组成,还包括gimp-data包;此外,还有几个可选的附加包(包含深奥的数据、文档等)。几个相关的小程序也有可能包含在一个软件包中:例如,fileutils软件包包含几个常见的Unix命令,如ls、cp等。

有些软件包需要其他软件包才能发挥作用。在 Debian 中,软件包可以依赖、推荐、建议、破坏或与其他软件包冲突。

  • 如果一个软件包 A 依赖于另一个软件包 B,那么 B 就是 A 正常运行的必要条件。例如,gimp软件包依赖于gimp-data软件包,以确保GIMP图形编辑器能够访问其关键的数据文件。

  • 如果一个包A推荐另一个包B,那么B为A提供了重要的额外功能,而这些功能在大多数情况下是需要的。例如,mozilla-browser软件包推荐了mozilla-psm软件包,它为Mozilla网络浏览器增加了对安全数据传输的支持。虽然Mozilla-psm不是Mozilla功能的严格要求,但大多数用户希望Mozilla支持机密数据(如信用卡号码)的安全传输。

  • 如果一个包A建议另一个包B,那么包B提供的功能可能会增强A,但在大多数情况下是不需要的。例如,kmail软件包建议使用gnupg软件包,该软件包包含可供KMail使用的加密软件。

  • 如果一个软件包A与另一个软件包B冲突,那么这两个软件包就不能同时安装。例如,fb-music-hi与fb-music-low冲突,因为它们为游戏《冰冻泡泡》提供了备用的音乐集。

软件包管理器的工作是提供一个交互界面,帮助用户管理安装在系统上的软件包集合。这对大型项目特别有用,因为这些项目的操作系统通常由数百甚至数万个不同的软件包组成。

Ian Murdock曾评论说,软件包管理是 “Linux给业界带来的最大的进步”,它模糊了操作系统和应用程序之间的界限,并使它 “更容易将新的创新…推向市场,…使操作系统不断发展”。

软件包管理系统分类

通用软件包管理器

也被称为二进制存储库管理器,它是一种软件工具,旨在优化软件开发过程中使用和产生的二进制文件、artifacts和包的下载和存储。这些包管理器使项目对待所有包类型的方式标准化。它们让用户有能力在所有工件类型中应用安全和合规性指标。通用软件包管理器被称为是DevOps工具链的中心。

格式化软件包管理器

这类软件包管理器对应的软件包都有特定的格式,以及适当的元数据,例如软件包之间依赖关系等。

例如在移动操作系统中,Google Play是Android应用程序包(APK)格式,而Windows Store使用APPX和XAP格式。(Google Play和Windows Store都有同名的软件包管理器)。

另外,有时候软件包管理器之间也是相互依赖的,如Yum依赖于rpm作为后台。Yum通过增加诸如维护系统网络的简单配置等功能来扩展rpm的功能。再比如,Synaptic软件包管理器通过使用高级打包工具(apt)库提供了一个图形用户界面,而这个库的核心功能又依赖于dpkg

其实啊现在的开源软件包管理系统都是依赖于rmp或者dpkg的

Alien是一个在不同的Linux软件包格式之间进行转换的程序,支持在符合Linux标准基础(LSB)的.rpm软件包、.deb、Stampede(.slp)、Solaris(.pkg)和Slackware(.tgz、.txz、.tbz、.tlz)软件包之间进行转换。

开源软件包管理系统

根据开源软件包管理系统的性质,在类似和兼容的许可证下的软件包可以在一些操作系统上使用。这些软件包可以使用可配置的、内部复杂的打包系统进行组合和分发,以处理许多软件的排列组合,并管理特定版本的依赖关系和冲突。一些开源软件包管理系统本身也作为开源软件发布。专利操作系统(如Mac OS X和Windows)中的软件包管理与开源软件包管理系统(如Linux)中的软件包管理之间的一个典型区别是,开源软件包管理系统允许第三方软件包也通过同一机制进行安装和升级,而Mac OS X和Windows的软件包管理器只会分别升级由苹果和微软提供的软件,如Windows中的一些第三方驱动程序除外,持续升级第三方软件的能力通常是通过在软件包管理的配置文件中添加相应存储库的URL来实现的。

应用级软件包管理器

除了系统级的应用管理器,还有一些附加的软件包管理器,用于功能有限的操作系统和开发人员需要最新库的编程语言。

与系统级软件包管理器相比,应用级软件包管理器专注于软件系统的一小部分。它们通常驻扎在一个不由系统级软件包管理器维护的目录树中,如 c:\cygwin/usr/local/fink。然而,对于处理编程库的软件包管理器来说,情况可能并非如此,这导致了可能的冲突,因为两个软件包管理器都可能声称 "拥有 "一个文件,并可能破坏升级。

软件包管理系统列表

通用软件包管理器

下列软件包管理系统以二进制包的形式发布应用程序,即所有的应用程序都被编译并准备好安装和使用。

类Unix

Linus
  • APT: (英语:Advanced Packaging Tools,缩写为APT)是Debian及其派生的Linux软件包管理器。APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端,用来处理deb格式的软件包。现在经过APT-RPM组织修改,APT已经可以安装在支持RPM的系统管理RPM包。
  • Yum(Yellow dog Updater, Modified)是由Duke University团队修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于RPM包管理的字符前端软件包管理器。能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。被Yellow Dog Linux本身,以及Fedora、Red Hat Enterprise Linux采用。
  • apk-tools(apk):Alpine Package Keeper,Alpine Linux的软件包管理器。
  • dpkg:最初由Debian使用,现在由Ubuntu使用。使用.deb格式,是第一个拥有广为人知的依赖性解决工具APT。
  • Entropy。由Sabayon Linux使用并为其创建。它可以处理二进制包,这些二进制包是bzip2压缩的tar文件(文件扩展名:.tbz2),这些文件是用Entropy本身创建的,来自Portage产生的tbz2二进制文件。来自ebuilds,一种专门的shell脚本。
  • Flatpak。一种容器化/沙盒化的打包格式,以前被称为xdg-app。
  • GNU Guix。由GNU系统使用。它基于Nix软件包管理器与Guile Scheme APIs,专门提供专门的自由软件。
  • Homebrew:同名的MacOS软件包管理器的移植(见下文),以前被称为 “Linuxbrew”。
  • ipkg:一个受dpkg启发的、非常轻量级的系统,针对存储受限的Linux系统,如嵌入式设备和掌上电脑。在HP的webOS上使用。
  • netpkg。
  • Nix软件包管理:Nix是一个强大的软件包管理器,适用于Linux和其他Unix系统,使软件包管理可靠且可重复。它提供了原子升级和回滚,并排安装一个包的多个版本,多用户包管理和容易设置构建环境。
  • OpenPKG:基于RPM包管理器的跨平台包管理系统。
  • opkg:ipkg轻量级软件包管理的Fork,旨在用于嵌入式Linux设备上。
    pacman:在Arch Linux、Frugalware和DeLi Linux中使用。它的二进制包格式是一个zstd压缩的tar档案(文件扩展名:.pkg.tar.zst),使用makepkg工具(与pacman捆绑在一起)和一种叫做PKGBUILD的特殊类型的shell脚本建立。
  • PETget:由Puppy Linux使用。
  • PISI:Pisi是 "Packages Installed Successfully as Intended "的缩写。Pisi软件包管理器被Pisi Linux使用。 Pardus曾经使用Pisi,但在2013年迁移到APT
  • pkgsrc:一个跨平台的软件包管理器,由Joyent和其他供应商为企业Linux、macOS和SmartOS提供二进制包。
  • RPM软件包管理器:由red hat公司创建。RPM是Linux标准基础打包格式,也是许多其他工具的基础,包括apt4rpm、Red Hat的up2date、Mageia的urpmi、openSUSE的ZYpp(zypper)、PLD Linux的poldek、Fedora的DNF,以及Red Hat Enterprise Linux和Yellow Dog Linux使用的YUM。
  • slackpkg
  • slapt-get: Slackware使用的是二进制包格式,该格式基本上是一个xz压缩的tar档案,文件扩展名为.txz。
  • Smart Package Manager: 由CCux Linux使用。
  • Snappy: 跨分布式软件包管理器,在服务器端非免费,最初为Ubuntu开发。
  • Steam:一个跨平台的视频游戏发行、授权和社交游戏平台,由Valve开发和维护。用于购买、下载、安装、更新、卸载和备份视频游戏。在Windows NT、OS X和Linux上运行。
  • swaret;
  • Zero install(0install)。跨平台的打包和分发软件。它可用于Arch Linux, Debian, Knoppix, Mint, Ubuntu, Fedora, Gentoo, OpenSUSE, Red Hat和Slackware。
Android
  • 亚马逊应用商店。安卓设备的替代应用商店。

  • Aptoide

  • Cafe Bazaar

  • F-Droid: Replicant中使用的应用商店,旨在用自由软件的替代品取代安卓的专有组件。

  • GetJar:一个独立的手机应用商店,2004年在立陶宛成立。

  • Google Play:由谷歌为安卓设备开发的在线应用商店,授权使用谷歌专有的应用程序集。

  • SlideME: 安卓的替代性应用商店

  • Uplay:一个跨平台的视频游戏发行、授权和社交游戏平台,由育碧开发和维护。用来购买、下载、安装和更新视频游戏。在安卓以及PlayStation 3、PlayStation 4、Xbox 360、Xbox One、Wii U、iOS、Windows NT和Windows Phone上运行。

MacOS
  • Mac App Store:OS X应用程序的官方数字分销平台。
  • Homebrew:MacOS的软件包管理器,基于Git。
  • Fink: dpkg的移植,它是最早的macOS的软件包管理器之一。
    MacPorts。前身为DarwinPorts,基于FreeBSD Ports(正如macOS本身)。
  • Joyent: 为macOS提供了一个基于pkgsrc的10,000多个二进制包的存储库。
  • Zero Install(0install):跨平台的打包和分发软件。在macOS上使用GnuPG和GTK+。
  • Steam:一个跨平台的视频游戏发行、授权和社交游戏平台,由Valve开发和维护。用于购买、下载、安装、更新、卸载和备份视频游戏。在Windows NT、macOS和Linux上运行。
BSD
  • FreeBSD Ports。
  • OpenBSD ports: OpenBSD上二进制软件包背后的基础设施。
  • pkgsrc。一个跨平台的软件包管理器,由多个供应商 NetBSD、Linux和macOS提供常规二进制软件包。
  • dpkg。作为 Debian GNU/kFreeBSD 的一部分使用。
  • OpenPKG: 基于rpm的跨平台软件包管理系统。
  • PC-BSD。到8.2版本为止使用以.pbi(Push Button Installer)文件名为扩展名的文件,当双击这些文件时,会弹出一个安装向导程序。每个PBI都是独立的,并使用去掉重复的私有依赖关系来避免版本冲突。一个自动构建系统跟踪FreeBSD的端口集合,并每天生成新的PBI。PC-BSD也使用FreeBSD的pkg二进制包系统;新的包大约每两周从FreeBSD ports树的稳定分支和滚动发布分支构建一次。
Solaris, illumos
  • Image Packaging System (IPS,也被称为 “pkg”)。用于 Solaris、OpenSolaris 和 illumos 发行版, 如 OpenIndiana 和 OmniOS。

  • pkgsrc:SmartOS,来自Joyent的illumos操作系统发行版使用pkgsrc,它也可以被引导到OpenIndiana上使用

  • penCSW:社区支持的SysV格式的软件包集合,用于SunOS 5.8-5.11(Solaris 8-11)。

  • OpenPKG:基于RPM软件包管理器的跨平台软件包管理系统。

iOS
  • App Store。iOS应用程序的官方应用程序商店。
  • Cydia。移植APT的前端。由越狱社区维护。
Windows

- Windows Store。Windows NT和Windows Phone上Metro风格应用程序的官方应用程序商店。从Windows 10开始,它还分发视频游戏、电影和音乐。

  • Windows软件包管理器。为微软Windows 10设计的免费和开源的软件包管理器。
  • Cygwin。用于Windows NT的免费和开源软件库。提供许多Linux工具和一个带有软件包管理器的安装工具。
  • Homebrew:MacOS软件包管理器的一个移植,意在与Windows Subsystem for Linux一起使用,使用已经存在的Linux移植作为其基础。
  • just-install 简单的Windows开源(GPLv3)软件包安装程序。
  • Ninite。用于Windows NT的专有软件包管理器。
  • Npackd:用于Windows的开源(GPLv3)软件包管理器
  • NuGet。一个微软官方的免费和开源的Windows软件包管理器,可作为Visual Studio的插件,并可从命令行扩展。
  • Chocolatey: 以Yum和apt-get的精神为基础的Windows开源分散式软件包管理器。NuGet的易用性包装器。
  • pacman: MSYS2移植的Windows版本的Arch Linux软件包管理器。
    wpkg。开源软件包管理器,在Windows上处理Debian软件包。开始时是dpkg的克隆,也有许多类似apt-get的功能。
  • 0install:跨平台的打包和分发软件。在Windows NT上使用.NET框架。
  • Scoop.sh。一个用于Windows的命令行安装程序
  • Steam:一个跨平台的视频游戏发行、许可和社会游戏平台,由Valve开发和维护。用于购买、下载、安装、更新、卸载和备份视频游戏。在Windows NT、OS X和Linux上运行。
  • Uplay

应用程序级软件包管理器

  • Bitnami:一个用于网络应用的安装程序或软件包库。
  • BPKG:一个用于BASH的软件包管理器。
  • Cargo:Cargo是Rust的软件包管理器。
  • COBOLget:一个用于COBOL的软件包管理器。
  • CocoaPods:一个用于Swift和Objective-C Cocoa项目的依赖管理器。
  • Composer:PHP的依赖性管理器。
  • Conan:一个用于C++的软件包管理器和库。
  • Conda:一个用于Python和R的开放数据科学平台的软件包管理器。
  • CPAN:Perl的编程库和包管理器。
  • CRAN:R的编程库和包管理器。
  • CTAN:TeX的软件包管理器。
  • EasyInstall:Python和PyPI编程库的软件包管理器,是Setuptools打包系统的一部分。
  • Enthought Canopy:一个用于Python科学和分析计算发布和分析环境的软件包管理器。
  • Esy是用于Reason和OCaml的软件包管理。
  • Go:一个多用途的工具,除其他外,用于Go软件包管理。
  • Gradle:一个用于Groovy和其他JVM语言,以及C++的构建系统和包管理器。
  • Ivy:一个Java的包管理器,集成到Ant构建工具中,也被sbt使用。
  • Leiningen:一个用于Clojure的项目自动化工具。
  • LuaRocks:用于Lua的编程库和软件包管理器。
  • Maven:Java的软件包管理器和构建工具。
  • npm:用于Node.js和JavaScript的编程库和包管理器。
  • NuGet:微软开发平台的软件包管理器,包括.NET框架和Xamarin。
  • OPAM:一个用于OCaml的软件包管理器和仓库。
  • PAR::Repository和Perl包管理器:Perl的二进制包管理器。
  • PEAR:一个用于PHP的编程库。
  • pip:Python的软件包管理器和PyPI编程库。
  • Pkg.jl:一个用于 Julia 的软件包管理器。
  • Quicklisp:通用语言的软件包管理器和资源库。
  • RubyGems:Ruby的软件包管理器和资源库。
  • sbt:Scala的构建工具,使用Ivy进行依赖性管理。
  • Teaport:一个C++的软件包管理器。
  • Yarn:Node.js和JavaScript的软件包管理器。