转自:大数据云技术基础之Linux源:/etc/apt/sources.list文件
导读
1./etc/apt/sources.list的作用是什么?
2.为什么会产生 /etc/apt/sources.list.d?
3.deb http://cn.archive.ubuntu.com/ubuntu/ precise main restricted中precise main restricted该如何解析?
正文
一般源信息都存在这个文件中。但众多软件源都放在一个文件里实在有点乱,于是新版ubuntu也有了分类的方法:
目录 /etc/apt/sources.list.d/
在这个目录下,随便起名字, 只要以 list 为扩展名即可。比如google chrome 的源就放在了/etc/apt/sources.list.d/google-chrome.list 文件中。
>> cat google-chrome.list
deb http://dl.google.com/linux/chrome/deb/ stable main
sources.list 文件的解析:
deb http://cn.archive.ubuntu.com/ubuntu/ precise main restricted这句话到底怎么解释,对应着服务器上的什么目录呢?对应的是:
http://cn.archive.ubuntu.com/ubuntu/dists/precise/main
http://cn.archive.ubuntu.com/ubuntu/dists/precise/restricted
也就是说,解析规则是这样的 :
uri + "dists" + 版本信息 + 若干个分类
http://cn.archive.ubuntu.com/ubuntu/dists 这个目录下有若干目录,各个目录代表Ubuntu的版本
http://cn.archive.ubuntu.com/ubuntu/dists/precise/ 在precise这个版本目录下还有有若干目录,里面有
deb-src 会对应 source,deb 会对应 binary-xxx ,xxx就是arch,比如i386(32位)或是amd64(64位)。
比如想自己指定 arch,那就这么写:
deb [arch=amd64] http://cn.archive.ubuntu.com/ubuntu/ precise main restricted
则对应:
http://cn.archive.ubuntu.com/ubuntu/dists/precise/main/binary-amd64/
解析时会自动加上 "binary-"。另外这里坑爹的是,必须要加 [] ,不然就报错。
最后再罗嗦几句:
还是看 deb http://cn.archive.ubuntu.com/ubuntu/ precise main restricted
在 http://cn.archive.ubuntu.com/ubuntu/dists/precise 下应该存在 Release 文件,在这个文件中会有目录的详细信息
也就是说,你自己拼地址的时候,uri + version 要拼到一个有 Release 的目录,不然就会报错。
还有,Release文件如果和实际的目录结构不符(怪事年年有),那就要用前面说的 option 了,good lucky!
这个例子使用的是稳定的软件库。在实际中间,稳定的发行版本没有别的发行版本那么频繁地变化。所有最新的软件包都包含在Debian最新但尚不完善的不稳定(unstable)发行版本中。“不稳定”未必意味着软件包自身不稳定,而是整个发行版本的组成不稳定。每周更新的软件量一般超过100MB。
sources.list文件里的配置行按顺序逐行分析,所以从理论上说,您可以把unstable和testing行放在文件末尾,让stable(稳定)版本优先。这个方法的问题是,因为APT的依赖性延伸,一个不稳定的软件包会把它所依赖的所有软件包的不稳定更新版本都带进来。这些软件包接下来又可能会把自己所关联软件的不稳定版本再带进来,以此类推。一个老鼠坏了一锅汤,不要在您的生产系统上安装不稳定的软件包。
如果您必须把一个从unstable(不稳定)发行版本来的软件包加到您的生产环境中,正确的做法是使用一个“向后移植(backport)”的软件,即在稳定发布上重新编译它,让它同稳定的库链接。为了找到这些backport和其他细节,可检查位于www.apt-get.org的APT搜索引擎。在Norbert Tretkowski的站点www.backports.org上,能够找到许多向后移植的软件包(不只是给出链接)。在这个软件库中的向后移植软件包质量都很高,对外部的依赖性也最低。