zoukankan      html  css  js  c++  java
  • ubuntu包管理机制

    1 ubuntu包管理机制

    跟大家分享一下ubuntu的软件管理机制。如果你们有过:
    apt-get install 或者 apt-get update 失败的经历。
    在众多的apt命令中迷失。
    疑惑apt-get update 和 apt-get upgrade 的区别。
    想要手动添加源仓库并下载软件
    那么本文将带你一步步解决这些问题。

    1.1 软件包仓库(Repositories)

    1.1.1 sourcelist 文件

    在使用apt-get install 和 apt-get update时, 系统会先扫描/etc/apt/目录下的所有的源仓库文件。该目录下包含两种类型的文件,
    源仓库文件source.list和gpg秘钥。其中source.list是ubunut官方的源仓库文件。

    souce.list文件的结构如下所示,该文件的每一项都可以分成四个部分

    deb/deb-src ## URL ## ubuntu版本代号 ## 限定词

    1. 其中 deb-src 表示该项指向一个软件源代码的仓库,deb表示指向一个软件仓库
    2. 第二部分是仓库的URL
    3. 第三部分是版本代码,可以看到在我的ubuntu18.04上(代号bionic), 有bionic 和 bionic-updates 两种选项,其中updates表示,
      更新时使用的仓库。我猜测在apt-get update时应该读取的是该项。
    4. 最后一个部分,有几个选项:main,restricted,universe,multiverse。 它们分别表示了仓库的不同类型。ubuntu的软件的来源进行了严格的区分。
      • main : 表示由Canonical提供支持的免费开源的软件
      • universe : 表示由Ubuntu社区提供支持的免费开源的软件
      • restricted : 具有知识产权的设备专有驱动,比如英伟达自己开发的闭源驱动
      • multiverse : 受版权和法律保护的软件

    1.1.2 软件仓库的结构

    以vscode的ubuntu仓库为例,我们来看看一个完整的仓库是什么模样。

    可以看到目录分成了两级,dists中存放的是该软件的配置信息。这些信息以文本形式保存。包含了软件的大小,
    维护者信息,版本,软件运行于那些平台,还有软件的校验和保证软件的完整性。当然最重要的还有软件的deb文件的存放路径。

    库中另一类文件是库中的公钥文件(gpg文件)。 通过这种非对称的加密手段,可以保证传输过程的安全。

    最后就是实际的软件的安装包,这些软件被打包为deb格式存放在pool目录下。

    1.1.3 手动添加PPA仓库

    在ubuntu中有两种仓库,一种是官方仓库,源文件放在source.list。
    为了弥补官方仓库软件数量不足的问题,ubuntu有提出了PPA(Personal Package Archive)仓库,允许第三方发行自己的库供用户下载。
    源文件放在 /etc/apt/source.list/目录中,比如说如果是vscode,就是vscode.list。

    下面我们说说手动添加PPA仓库的步骤:

    1 安装秘钥

    安装秘钥有两种方式,手动方式或者使用命令apt-key 命令

    apt-key list 
    apt-key add keyname
    apt-key del keyname 
    apt-key update 
    

    手动方式我们需要讲gpg格式的秘钥放置到目录 ** /etc/apt/trusted.gpg/ ** 中去。

    通过list命令我们可以看到秘钥已经安装成功。

    2 添加源
    同样添加源也是两种手段,手动和命令。
    在手动方式中,我们先创建一个/etc/apt/source.list.d/<库名>.list文件。然后根据上面说过的格式添加项。
    或者使用 add-apt-repository 命令。

    手动方式,就如下图中的sh命令所示,按照标准格式生成仓库的源,原则就是apt-get命令必须能够从添加的项中解析出仓库的位置。
    所以我建议大家在手动添加源时,先从浏览器中进入url指向的网站,观察软件库的结构,然后再去构造项。

    值得注意的是,能够使用add-apt-repository命令安装的必须是在launchpad这个网站上注册过的用户才可以。
    至于为什么要这么做,接下来我们来看看PPA

    上文提到过通过PPA,开发者可以更便捷的发布自己的软件。其实PPA也可以分成两类,一类在launchpad中注册(算是ubuntu认证的PPA), 另一类是未登记的PPA。
    如果按照安全等级排列的话,官方仓库 > 已注册PPA > 未注册PPA。

    如果在launchpad中注册过,那么该仓库在launchpad中就有一个用户名,这个用户名就是稍后在add-apt-repository中要用到的。
    如下图所示,docker的PPA已经在launchpad中

    命令格式

    add-apt-repository ppa: [PPA name]

    如果我们想添加docker stable ppa的话,就可以使用以下命令

    sudo add-apt-repository ppa:docker/stable 
    

    以上我们探讨ubuntu的仓库管理机制,主要是如何添加一个PPA仓库。

    1.2 upgrade和update的区别

    有两个命令,也许我们都用过,但是可能并不了解它们的区别。这两个命令就是:
    apt-get update 和 apt-get upgrade

    文档中解释的还是比较清楚的,update的作用是读取/etc/apt/source.list,并根据仓库的描述文件去更新索引。
    而upgrade是根据source.list文件去安装所有软件的更新,所以在upgrade之前会先执行update命令。

    一般我们在手动添加PPA成功后,会按如下步骤去安装相应的软件:

    apt-get update 
    apt-get install <app-name>
    

    所以说只有在你想要更新系统中所有软件时,使用upgrade命令。

    参考

    https://www.cnblogs.com/beanmoon/p/3387652.html

    https://help.ubuntu.com/community/Repositories/Ubuntu

    https://code.visualstudio.com/docs/setup/linux

    https://woshijpf.github.io/利器/2016/10/23/Ubuntu软件源详解.html

    http://man.linuxde.net/apt-key

    https://help.ubuntu.com/community/Repositories/Ubuntu#Adding_PPAs

  • 相关阅读:
    bzoj1653 [Usaco2006 Feb]Backward Digit Sums
    python爬虫之真实世界中的网页解析
    python爬虫之网页解析
    python列表操作方法
    python多行代码简化
    python操作文件
    python数据类型之pandas—DataFrame
    python数据类型之字典(二)
    python数据类型之字典(一)
    Selenium模拟浏览器抓取淘宝美食信息
  • 原文地址:https://www.cnblogs.com/dennis-wong/p/9378145.html
Copyright © 2011-2022 走看看