zoukankan      html  css  js  c++  java
  • APT仓库目录和repository目录结构

     
    一、APT仓库目录结构
    1.1 版本代号
    sid,still in development,该版本和unstable版本是一样的。
    版本可以从多个侧面来进行命名。
    第一,从release的角度进行命名。比如,buster、jessie、stretch
    第二,使用数字编码,比如7、8、9,然后还有小版本,7.11、8.9
    第三,对于当前最新的开发版本,又可以命名为stable、unstable和testing分支,当前的unstable又可以叫做sid。
    第四,同样的对于上一个开发版本,可以命名为oldstable、上上个版本,oldoldstable。
    1.2 dists目录
    这个里面即是各个版本的包仓库,如果当前的开发版本是stretch,那么stable目录是到stretch的软连接,其它的依次类推。
    1.3 dists子目录
    dists的子目录分为release和suite两大类,release即buster、jessie和stretch这些,而suite即unstable、testing和stable等。
    再进一步的子目录又分为contrib、main和non-free。
    再进一步的子目录里面是binary-xxx、source,binary-xxx 里面是对应二进制包的元数据,Packages.gz,source里面是对应的源码包的元数据,即Sources.gz。
    通过它们可以找到真正的二进制包和源码包。
    1.4 pool目录
    真正的debian的二进制包和源码包是在根目录下面的这个pool目录下。
    1.5 main、contrib和non-free
    全部是free的包在main中,
    全部是non-free的包在non-free中
    依赖于non-free的包仔contrib中。
    这些即是components
    1.6 xxx-updates
    proposed-updates里面的一些包也会放在这里。
    1.7 xxx-proposed-updates
    在稳定版的基础上的更新也会进行release,比如7.1、7.2、7.3等等,这些release被称为point release,而这个proposed-updates就是为下一次的point release做准备工作的,也就是说,对稳定版本的更新先放在proposed-updates里面,然后积累到了一定的量之后发布point release。
    1.8 xxx-backports
    就是同一个发行版的unstalble、testing中的包,在stable下重新编译,使之可以在stable版本下使用。
    1.9 xxx-backports-sloppy
    就是下一个发行版的unstalbe、testing中的包,在old stable下重新编译,使之可以在old stable版本下使用,比如stretch的tesing中的包,使之可以在jessie的stable中使用,就上传到这个文件夹里面。
    1.10 xxx-kfreebsd
    kfreebsd指的是使用freebsd kernel的debian发行版。
    1.11 xxx-kfreebsd-proposed-updates
    同xxx-proposed-updates
    1.12 update的最小粒度是包吗?
    这些不重要,重要的是,更新之后,所用的包就是新版本的包了。
    二、debian开发的流水线
    2.1 debian分支开发的顺序
    unstable->testing->stable
    debian的开发分支叫做unstabel/sid,当需求开发完,并且bug差不多了之后,会froze掉,进入testing分支,这个阶段只是修改bug,当bug解完了,进入下一个stable分支。
     
    三、源
    3.1 sources.list文件的结构
    每个源占一行
    deb是二进制包,deb-src是源码包
    deb uri distribution [component1] [component2] [...]
    distribution就是suite和release。
    四 、debian repository 目录结构
    下面是简化的Ubuntu源的目录结构。
    NOTE:
    所有的兄弟文件夹(父目录相同的文件夹)都只展开第一个
    Pool文件夹的四个子文件夹里,存放的是按照字母顺序分类的各个软件包
    每个repo的文件夹会有出入,实际以你使用的为准
    4.1 重要的文件(夹)和解释
    根目录下至少有两个文件夹:dists和pool。dists文件夹里存储的是关于软件包的信息数据,包括:文件名称、大小、位置、校验码等。而pool文件下是具体的软件包存放位置,单独把文件放在pool文件夹里是为了防止文件的重复。
    Release/InReleas
    文件位于$ARVHIVE_ROOT/dists/$DISCTRIBUTION 文件夹内,InRelease文件是内部自认证的,而Release文件需要伴随Release.gpg文件出现。这个文件包含该发布版(所在的文件夹)的索引文件和对应的hash。内部所列文件的位置是相对该文件的。比如上面的的source.list内容,为了获取main组件,apt会扫描
    http://mirrors.163.com/ubuntu/dists/precise/Release文件得到main/binary-amd64/Packages.gz组合成最终的地址http://mirrors.163.com/ubuntu/dists/precise/main/binary-amd64/Packages.gz。这里面就是precise发布版里main组件的所有软件索引。
    以binary-$arch命名的文件夹里是二进制文件的目录,源文件的目录在source文件夹。
    Package列出的文件是相对于$ARCHIVE_ROOT的。
    Packages 和 Sources目录是是控制文件,包括索引、翻译和差异等。
    .deb文件是debian的包文件
    .dsc是debian的源码描述文件
    .tar是打包的文件
    .gz和.bz2是压缩的文件
    Release 文件的内容
    上面已经说到,release文件就是索引文件。除了具体文件的hash和位置之外,一般还有其他的信息。
    下面是release为文件的截图,注意:这只截取了开头的部分,完整的内容请参看实际的文件。
    可选项,这些提供了一些repo的基本信息
    Description: 描述
    Origin:repo的来源
    Label:标签说明
    Suite: 套件,就是前面说的distribution
    Codename: 发布的代号
    决定repo布局的选项
    Components: 对应前面的组件
    Architectures:系统的架构
    功能性的选项
    Date:release文件的创建日期
    Valid-Util:保质期
    MD5Sum, SHA1, SHA256: 指使文件的位置和认证索引文件的真伪,包括:
    checksum
    文件大小
    文件名
    其中四个选项是server端必须的:
    SHA256
    Suite and/or Codename
    Architectures
    Components
    Package文件的内容
    文件dists/$DIST/$COMP/binary-$ARCH/Packages是二进制包的索引。这个文件分成很多段,每一段是一个具体文件包的说明,上图是一个包的完整实例。其中包括的选项有:
    Filename:文件名,相对于$ARCHIVE_ROOT的路径(必须)
    Size: 文件大小,byte为单位(必须)
    MD5Sum, SHA1,SHA256:加密hash,验证wfjm(推荐)
    Description-md5(可选)
    4.2 Sources文件的内容
    文件$DIST/$COMP/source/Sources被称为源码文件索引。它们和Packages文件相似,分为很多段,每一段描述一个源码文件包。
    几个重要的选项有:
    Directory: 文件包所在的目录
    Package: 文件名
    version: 版本号
    Priority: 优先级,包括source、optional等选项
    Files: 包括的文件
    Checksums-Sha1(256): 校验和
    4.3 apt-get 的流程
    apt的工作流程:
    apt程序解析source.list,根据后面的uri和发行版得到release的文件的位置
    dns解析url的ip,请求release文件,解析组件的release文件和package文件,根据package文件里的内容找到所要装的文件包,并验证所有文件的合法性。
    如果文件包有依赖(depends),继续使用上述的方法定位到依赖的安装包。安装所有依赖后,再安装该软件包。
    如果文件包没有依赖,直接安装。
     
    三、定制自己的source.list文件
    1.找到repo的根目录($ARCHIVE_ROOT),就是包含dists和pool目录的那个目录,记为
    2.打开dists目录,记下其中的子目录名称,找到自己要使用的版本名
    3.打开pool目录,找到里面的组件名称
    4.编写自己的source.list,格式为deb url codename component。
    5.更新一下:sudo apt-get update。
     

  • 相关阅读:
    java中set集合的常用方法
    Java的Collection集合的常用方法
    Java集合Collection&Map
    Linux设置中文语言的一种方式
    struts2自定义Interceptor拦截器
    Linux系统官网下载
    idea绿色版+谷歌浏览器绿色版——设置打开jsp文件
    torch.nn.Embedding
    负对数似然(negative log-likelihood)
    Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
  • 原文地址:https://www.cnblogs.com/gpysir/p/15160807.html
Copyright © 2011-2022 走看看