您可能知道如何使用apt命令在Ubuntu中安装包。这些软件包都来自Ubuntu的官方存储库。第三方或外部存储库呢?不,我不是在这里谈论PPA。迟早你会遇到至少四行安装说明:需要安装一个名为apt-transport-https的包,操作GPG和sourcelistsourcelist如果没有印象,那我就分享一个吧在Ubuntu上安装最新版本Yarn的示例:sudoaptinstallapt-transport-httpscurlcurl-sShttps://dl.yarnpkg.com/debian/pubkey.gpg|sudoapt-keyadd-sudosh-c'echo"debhttps://dl.yarnpkg.com/debian/stablemain">>/etc/apt/sources.list.d/yarn.list'sudoaptupdate&&sudoaptinstallyarn当你需要直接从development那里运行安装编程工具的时候,大概率会遇到这种安装方式。许多人只是按照说明进行操作,而没有考虑它是如何工作的。这没有错,但了解该过程实际上可以提高您在这方面的知识,并有助于以后进行故障排除。让我解释一下这些代码背后的逻辑。了解从外部存储库安装的过程在继续阅读之前,我强烈建议您看一下以下两篇文章以了解后续概念:什么是Ubuntu中的存储库Ubuntu中的PPAs给你一点印象,这是Linux中的包存储库和包管理器的图片。存储库和包管理器的图示整个事情实际上是向系统添加一个新的外部存储库。这样,您就可以从这个新存储库下载并安装可用的包。如果此存储库提供包版本的更新,您可以在更新系统时更新这些包(aptupdate&&aptupgrade)。那么,这是如何工作的呢?让我们一一过一遍。第1部分:获取apt的HTTPS支持第一行是这样的:sudoaptinstallapt-transport-httpscurlCurl是一个Linux终端下载文件的工具。这里的主要部分是安装apt-transport-https,但在事实上它不再需要了。你明白吗?apt-transport-https包使您的系统能够通过HTTPS协议安全地访问存储库。按照设计,Ubuntu的存储库使用http而不是https协议。查看下面的屏幕截图。https图是我添加到系统中的外部存储库。Ubuntu的存储库和PPA使用http协议。在旧版本的apt包管理器中,不支持https协议。apt-transport-https包为apt添加了https支持。要使用https添加存储库,必须先安装此包。我不是说不需要安装这个包吗?是的,您不需要安装apt-transport-https,因为较新版本的apt(1.5以上)已经支持https。但是你仍然看到我在说明中提到了这个包。这更多是出于遗留原因,也可能有非常旧的发行版使用旧版本的apt包。现在,您可能想知道为什么Ubuntu使用http而不是https作为其存储库,因为https是一种安全协议。这不是安全隐患吗?然后往下看,你就知道答案了。第2部分:为远程存储库添加GPG密钥Linux存储库具有基于GPG密钥的内置安全性。每个存储库都将其GPG公钥添加到您的系统信任密钥中。来自存储库的包由这个GPG密钥“签名”,并且使用这个存储的公钥,系统可以验证包来自这个存储库。如果密钥之间存在不匹配,您的系统将警告您,而不是继续从该存储库安装或更新包。到目前为止,一切都很好。下一步是将外部存储库的GPG公钥添加到您的Linux系统,以便它可以从该存储库接收包。卷曲-sShttps://dl.yarnpkg.com/debian/pubkey.gpg|sudoapt-keyadd-在上面的命令中,您使用curl从指定的URL下载GPG密钥。选项-sS让您看不到冗余输出(静默模式),但会显示错误(如果有)。最后一个-告诉apt-key使用stdin而不是文件(在本例中是curl命令的输出)。apt-keyadd命令已将下载的密钥添加到系统中。您可以使用apt-keylist命令查看系统上各种存储库添加的GPG密钥。列出GPG密钥这是将GPG密钥添加到系统的一种方法。您会看到其他一些看起来略有不同但效果相同的命令,将存储库的公钥添加到您的系统中。sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keysE298A3A825C0D65DFD57CBB651716619E084DAB9并且您会注意到apt-key已被弃用的警告。在Ubuntu22.04之前,您还可以使用apt-key命令,但它最终会被删除。现在不用担心了。第3部分:将外部存储库添加到源列表下一个命令将一个新条目添加到系统的源列表。这样,您的系统就会知道它必须检查该存储库中的包和更新。sudosh-c'echo"debhttps://dl.yarnpkg.com/debian/stablemain">>/etc/apt/sources.list.d/yarn.list'有一个文件/etc/apt/sources。列表包含Ubuntu存储库的详细信息。这个文件最好不要随便碰。所有新添加的存储库都应该放在/etc/apt/sources.list.d目录下的相应文件中(约定以.list结尾)。外部存储库应该在/etc/apt/sources.list.d目录中有自己的源列表文件,这使得包管理更容易。如果要从系统中删除存储库,只需删除相应的源文件即可。无需修改主sources.list文件。让我们仔细看看这行命令。sudosh-c'echo"debhttps://dl.yarnpkg.com/debian/stablemain">>/etc/apt/sources.list.d/yarn.list'usingsh可以在新的运行中使用shell进程中的命令,而不是子shell。-c选项告诉sh命令从参数而不是标准输入中读取命令。然后它运行echo命令,该命令将debhttps://dl.yarnpkg.com/debian/stablemain行添加到/etc/apt/sources.list.d/yarn.list文件(将创建).现在,您可以在指定目录中创建一个.list文件,并通过各种方法在其中添加一个包含存储库详细信息的数据行。您也可以这样使用它:echo"debhttps://dl.yarnpkg.com/debian/stablemain"|sudotee/etc/apt/sources.list.d/yarn.list明白了吗?第4部分:从新添加的存储库安装应用程序到目前为止,您已经将存储库的GPG密钥和存储库的URL添加到系统中。但是系统仍然不知道这个新存储库中有哪些包可用。这就是为什么你需要首先使用以下命令更新包元数据的本地缓存:sudoaptupdate此时你的系统已经知道新添加的存储库中可用的包的信息,现在你可以尝试安装包:sudoaptinstallyarn为了节省时间,你可以在同一行上并排运行这两个命令。sudoaptupdate&&sudoaptinstallyarn&&可以确保第二个命令只有在前一个命令不报错的情况下才会运行。这就是整个过程。是恍然大悟,还是一脸茫然?我已经解释了在Ubuntu中使用外部存储库背后的逻辑。希望你现在能更好地理解它,当然可能有很多细节让你感到困惑。如果还有不明白或者有其他问题可以联系我。
