Ala*_*orm 8 linux package apt-get
无论我是在某处设置新的 VPS 还是在我坐着的旧计算机上安装 Ubuntu ISO,当我想要设置我最喜欢的编程环境时,我需要做的就是输入
sudo apt-get install foo baz bar
Run Code Online (Sandbox Code Playgroud)
然后我的电脑——做一些事情——最后我通常拥有我想要的软件。
这是如何运作的?正在apt-get下载预编译的二进制文件吗?还是为我下载源代码和构建东西?或者某种其他打包的东西正在安装?还是三个都可以?无论如何,谁在构建这些二进制文件,管理这些构建配方,或者将这些包放在一起?无论 apt-get 在做什么——它从哪里发送给我的数据?
我模糊地知道我的作曲家/VPS 将有一个apt-get它检查包的存储库列表。这些只是托管在某个指向事物的 HTTP 服务器上的提要吗?或者是其他东西?谁托管这些提要?
当我使用像 composer(用于 PHP)这样的包管理器时,我知道在 packagist.org composer 存储库中有一个主包列表,用户可以指定其他包存储库,并且该存储库仅指向版本控制系统,其中存储包的源文件。我想对apt-get工作原理有类似的高层次理解。
我意识到这是一个不可能广泛的问题 - 指向我可以在 FM 中阅读有关所有内容如何联系在一起的指示对我来说是一个完全可以接受的答案。(尽管如果您对 linux 包管理充满热情,请不要让这阻止您回答)
我的经验是基于Debian和Ubuntu:
通过为您的系统选择像 Ubuntu 16.04 这样的发行版,您基本上是在安装一个配置了软件包存储库的引导映像。apt-get从这些存储库获取用于安装/更新的软件。系统的存储库必须在文件中配置/etc/apt/sources.list。例如,我在德国提供商的 VPS 上安装的 Ubuntu 16.04 包含以下几行,这些行指向其自己的镜像包存储库:
deb http://mirror.hetzner.de/ubuntu/packages xenial main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/packages xenial-backports main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/packages xenial-updates main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/security xenial-security main restricted universe multiverse
Run Code Online (Sandbox Code Playgroud)
(我遗漏了一些)有许多由大学、公司、托管提供商等运营的镜像存储库。
每个存储库都有一个或多个索引文件,其中包含其中所有包的列表。这样apt-get可以确定哪些包可用并解决依赖关系。apt-get通过 FTP 或 HTTP 下载软件包并使用程序安装它们,从这些存储库安装/更新软件dpkg。
所有基于 Debian 的发行版(如 Ubuntu)使用的包格式是 .deb。它包含二进制文件,因此发行版支持的每个体系结构都有不同的 .deb 文件,例如“amd64”或“arm64”,这显然必须与您的系统体系结构相匹配。您还可以获取包含程序源的 .deb 软件包以自行构建软件(以deb-srcin开头的行/etc/apt/sources.list)。
Each package is maintained by one or more package maintainers. Those take releases of the original software - which is called "upstream" in this context - and package them as .deb to be put onto a package repository. A whole toolchain for packaging exists which is basically automated testing/building/archiving based on a package recipe.
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |