学习

apt与存储库.mdapt是Debian及其派生系统的包管理系统,软件包存储库(简称repo)是存储软件包并可从中检索的位置。apt利用存储库中的软件包信息来管理系统软件的安装和升级。

存储库可以是二进制的或源代码的,可以是自动的或普通的。它也可以在线或离线(例如在 CD-ROM 上),但前者更常见。此外,存储库可以是官方的(由 DebianUbuntu/Canonical 维护)或非官方的(第三方)。

1.存储库配置文件

  • 存储库在 /etc/apt/sources.list 配置文件或存储在 /etc/apt/sources.list.d 目录下的文件中定义。每个 repo 文件必须以 .list 扩展名结尾。
  • 存储库大致语法如下:
deb [options] uri suite [component1] [component2] [...]
OR
deb-src [options] uri suite [component1] [component2] [...]
  • deb: 表明这是一个二进制存储库,deb-src 表明源代码存储库。
  • [options]: 可选项,可以包括存储库的特殊属性,如arch=amd64指定架构,或者trusted=yes指明信任此存储库。
  • uri: 存储库的URI,可以是HTTP、HTTPS、FTP或者文件路径(对于本地仓库)。
  • suite: 存储库的分支或版本,比如focal对应Ubuntu 20.04。
  • [component]: 通常是mainrestricteduniversemultiverse中的一个或多个,指定软件的自由程度或非自由程度。

如下是一个Ubuntu官方存储库的例子:

deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted

2.手动添加apt存储库

推荐使用/etc/apt/sources.list.d/目录来添加新的存储库。这种方法的模块化程度更高,使得维护和管理更加灵活和有序。

  • 编辑/etc/sources.list.d/yourrepo.list文件,或者使用tee命令,以R 软件环境包存储库为例:

    echo "deb https://cloud.r-project.org/bin/linux/ubuntu  focal-cran40/" | sudo tee /etc/apt/sources.list.d/r-packages.list
  • 添加存储库密钥

    • 追加密钥到/etc/apt/trusted.gpg.d/目录下

      wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
    • 使用 gpg 与单独的密钥环文件(推荐方法),更易管理,避免全局信任,更安全

      curl -fsSL https://repository.example.com/public.key | sudo gpg --dearmor -o /usr/share/keyrings/my-repo-archive-keyring.gpg

      sources.listsources.list.d/中的存储库条目中指定密钥环

      deb [signed-by=/usr/share/keyrings/my-repo-archive-keyring.gpg] http://repository.example.com/ suite main
  • 更新

    sudo apt update

3.apt-add-repository

add-apt-repository 命令行实用程序用于将存储库添加到 /etc/apt/sources.list 文件或 /etc/apt/ sources.list.d 目录。如果存储库已经存在,它可以使用 -r 标志将其删除。

# 如果不存在这个命令,可以使用下面的命令进行安装
sudo apt install software-properties-common
  • PPA

    PPA(Personal Package Archive),是由Launchpad提供的一项服务,允许个人用户和团队上传Ubuntu源代码包来构建并发布为APT存储库。

    apt-add-repository就通常用来添加PPA存储库

  • apt-add-repository和修改sources.list文件区别

    它们在最终结果上是相同的,即都会指导APT从指定的URL获取软件包,但在使用上有一些区别:

    1. apt-add-repository

      • apt-add-repository 是一个高级命令,它不仅会将存储库添加到 sources.list.d 下的一个新文件中,而且还会自动导入存储库的公钥(仅限标准PPA,如果可用)。
      • 这个命令通常更方便,因为它简化了添加存储库的过程。
      • 它还支持通过PPA(Personal Package Archives)添加存储库,使用类似 ppa:user/repository 的语法。
      • 运行 apt-add-repository 后,它通常会自动运行 apt update 来刷新软件包列表。
    2. 修改 sources.list 或添加 .list 文件

      • 这是一种更手动的方法,你需要直接编辑配置文件或创建新文件。
      • 在某些情况下,这可以给你更细致的控制,例如,当你需要添加一个特定的存储库分支或区段时。
      • 你需要手动导入存储库的公钥,除非它已经被包含在系统的密钥环中。
      • 修改文件后,你需要手动运行 apt update
  • 例子

    sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
    
    wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
    
    # 或者使用gpg与密钥环
    sudo add-apt-repository "deb [signed-by=/usr/share/keyrings/cran-archive-keyring.gpg] https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
    
    wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | gpg --dearmor | sudo tee /usr/share/keyrings/cran-archive-keyring.gpg >/dev/null
    
    
    ## $(lsb_release -cs) 会被替换为当前运行的Ubuntu版本的代号,例如 focal
    # 添加 Shutter 截图工具的官方 PPA
    sudo add-apt-repository ppa:shutter/ppa
    sudo apt-get update
    sudo apt install shutter
    
    # 删除仓库
    sudo add-apt-repository -r ppa:shutter/ppa

4.仓库推荐

以下仓库仅作示例,需根据自己系统的版本号和架构做出对应修改

  1. Ubuntu官方存储库

    deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
    deb-src http://us.archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
  2. Ubuntu 安全更新存储库

    deb http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverse
    deb-src http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverse
  3. Debian 官方存储库

    deb http://deb.debian.org/debian/ bullseye main contrib non-free
    deb-src http://deb.debian.org/debian/ bullseye main contrib non-free
  4. Debian 安全更新存储库

    deb http://security.debian.org/debian-security bullseye-security main contrib non-free
    deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free
  5. Node.js 存储库

    deb https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main
  6. Ondřej Surý 的 PHP 存储库

    deb https://packages.sury.org/php/ $(lsb_release -sc) main
  7. Docker 官方存储库

    deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable

5.国内镜像源

对于国内镜像站,每个网站都有自己详细的配置方法,此处仅列出官网地址

Markdown文件附件:点击下载

微信支付

微信支付

支付宝支付

支付宝支付

评论

This is just a placeholder img.