源码包是什么
我们知道ubuntu有别于gentoo之一的特点就是,gentoo是基于源码包安装的系统,而ubuntu是基于二进制的。我们执行一个apt-get install foo安装包命令时,apt从对应的apt source源地址下载一个二进制包-以.deb为后缀名的文件到/var/cache/apt/archives下,再用dpkg工具安装它们。这些.deb文件都是包的维护者在某台build machine上build之后放上去的,而与foo.deb对应的源码包,一般都是指三个文件的一个集合:foo.orig.gz, foo.dsc, foo.diff.gz. foo.orig.gz是该软件的原始源码,通常取自于git,svn或sourceforge,可以把它看作是中立的,和Linux发行版无关的源码。foo.diff.gz包含了将一份原始源码加工、改造为debian系安装包的非功能性的补丁文件,或许同时也包括一些功能性的修补源码bug的补丁。foo.dsc是一个包描述文件,它是一些ubuntu上的源码包处理工具如dpkg-source的输入。foo.diff.gz和foo.dsc扮演meta package的角色。一般来说,一个或者多个二进制包都对应一份源码包(因为多个二进制包可能由同一个源码产生),source.list的deb-src标鉴说明了可以通过apt-get从哪些网络地址获取源码包.
为什么从源码包生成软件
既然已经有了二进制包,为什么有时候还要从源码包来生成软件?因为二进制包毕竟是在别人的build machine上生成的,自然产生的二进制依赖也是基于维护人的环境。假如你想使用一个软件的更高版本,可能是因为高版本修订了当前使用版本的某个bug,或者想看看新的更省电的feature,当你把该软件高版本的apt