学习使用apt(四)
第六章 使用源码包
6.1 下载源码包
在自由软件包的世界中学习源码或是修正错误源码是一件很平常的事情.要这样做,我们就要下载程序的源码.APT系统提供了一个很简单的方法可以获得发行版本中的程序源码,包括要创建程序.deb包的所有文件.
Debian源码另一个常见的用法就是从不稳定发行版中修正一个新版本的程序以适应稳定版.编译一个相对稳定版本的软件包将会创建一些与当前版本中可获得的软件包相匹配依赖关系的deb包.
要完成这样的工作,在我们的/etc/apt/sources.list文件中的deb-src实体要指向不稳定版本.他也应被允许(但是并不推荐这样).
要下载一个源码包,我们可以用下面的命令:
$ apt-get source packagename
这会下载三个文件:a.orig.tar.gz,a.dsc,a.diff.gz.如果是下载专门的Debian软件包,在上面的三个文件中最后一个通常并不会下载,而第一个文件中也通常并没有orig的名字.
.dsc文件中由dpkg-source用来将源码包解压到packagename-version目录下的.在每一个下载的软件包中有一个debian目录,其中含用创建.deb包所需的文件.
如果我们希望在软件包下载后自动创建这个软件包,我们可以在命令行中加入-b选项,如下面的命令:
$ apt-get -b source packagename
如果我们并没有在下载后立即创建.deb包,我们可以在以后运行下面的命令来创建:
$ dpkg-buildpackage -rfakeroot -uc -b
这个命令要在为下载源码所创建的目录中运行.
要安装上面的命令所创建的安装包,我们要直接使用包管理器.如下面的命令:
# dpkg -i file.deb
在apt-get的source方法与他的其他的方法之间也存在一些区别.source方法可以为普通的用户所使用而并不需要专门的root密码.下载的文件所存放的目录就是我们调用apt-get source package命令所在的目录.
6.2 编译源码包所需要的包
在通常的情况下,为了编译一个源码包需要专门的头文件和共享库.所有的源码包在他们的控制文件中都存在一个名"Build-Depends"的区域来表明为了从源码编译这个包所需要的额外的包.
APT有一个很简单的方法来下载这些包.我们只需要运行apt-get build-dep package,在这里package是我们要创建的包名.例如:
# apt-get build-dep gmc
这样将会安装的软件包就是我们要正确的编译gmc包所需要的软件包.在这里有一点要注意的就是这个命令并不会查找我们要编译程序的源码,所以我们需要运行单独的apt-get source来得到我们所需的源码.
如果我们所希望的只是检查要创建指定的包所需要的包,有许多的apt-cache show可以满足我们这样的要求.在这个命令的显示信息中,Build-Depends部分就会列出所需要的软件包.如:
# apt-cache showsrc package
第七章 如何处理错误
7.1 常规错误
错误总是会发生的,其中的许多是由于用户没有注意而造成的.下面我们会列出一些最常出现的一些错误以及一些解决办法.
如果我们试着运行apt-get install package时会出现类似于下面的错误信息:
Reading Package Lists...Done
Building Dependency Tree...Done
W: Couldn't stat source package list 'http://people.debian.org unstable/ Package'
W: you may want to run apt-get update to correct these missing files
E: Couldn't find package penguineyes
这是因为在你上次更改/etc/apt/source.list文件后我们忘记了运行apt-get update命令.
如果错误如下:
E: Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/),are you root?
如果我们在试着运行任何的apt-get方法而不是source方法,我们不具有root权限,也就是说,我们正在以普通用户在运行这些命令.
如果我们在同一时间运行了两次apt-get命令或是我们在试着运行apt-get的同时dpkg进程处于激活,也会出现类似的信息.可以与其他同时运行的唯一的方法就是source方法.
如果一个安装进程在中间被打断而我们发现再也不可能安装或是移除这个安装包,我们可以试着运行下面的两个命令:
# apt-get -f install
# dpkg --configure -a
然后再试一下.上面的两个命令比较起来似乎第二个更必须一些.这对于使用'unstable'的用户来说是很重要的一课.
如果我们在运行apt-get update时出现"E:Dynamic MMap ran out of room",我们可以在我们的/etc/apt/apt.conf中加入下面的一句:
APT::Cache-Limit 10000000;
(End)
6.1 下载源码包
在自由软件包的世界中学习源码或是修正错误源码是一件很平常的事情.要这样做,我们就要下载程序的源码.APT系统提供了一个很简单的方法可以获得发行版本中的程序源码,包括要创建程序.deb包的所有文件.
Debian源码另一个常见的用法就是从不稳定发行版中修正一个新版本的程序以适应稳定版.编译一个相对稳定版本的软件包将会创建一些与当前版本中可获得的软件包相匹配依赖关系的deb包.
要完成这样的工作,在我们的/etc/apt/sources.list文件中的deb-src实体要指向不稳定版本.他也应被允许(但是并不推荐这样).
要下载一个源码包,我们可以用下面的命令:
$ apt-get source packagename
这会下载三个文件:a.orig.tar.gz,a.dsc,a.diff.gz.如果是下载专门的Debian软件包,在上面的三个文件中最后一个通常并不会下载,而第一个文件中也通常并没有orig的名字.
.dsc文件中由dpkg-source用来将源码包解压到packagename-version目录下的.在每一个下载的软件包中有一个debian目录,其中含用创建.deb包所需的文件.
如果我们希望在软件包下载后自动创建这个软件包,我们可以在命令行中加入-b选项,如下面的命令:
$ apt-get -b source packagename
如果我们并没有在下载后立即创建.deb包,我们可以在以后运行下面的命令来创建:
$ dpkg-buildpackage -rfakeroot -uc -b
这个命令要在为下载源码所创建的目录中运行.
要安装上面的命令所创建的安装包,我们要直接使用包管理器.如下面的命令:
# dpkg -i file.deb
在apt-get的source方法与他的其他的方法之间也存在一些区别.source方法可以为普通的用户所使用而并不需要专门的root密码.下载的文件所存放的目录就是我们调用apt-get source package命令所在的目录.
6.2 编译源码包所需要的包
在通常的情况下,为了编译一个源码包需要专门的头文件和共享库.所有的源码包在他们的控制文件中都存在一个名"Build-Depends"的区域来表明为了从源码编译这个包所需要的额外的包.
APT有一个很简单的方法来下载这些包.我们只需要运行apt-get build-dep package,在这里package是我们要创建的包名.例如:
# apt-get build-dep gmc
这样将会安装的软件包就是我们要正确的编译gmc包所需要的软件包.在这里有一点要注意的就是这个命令并不会查找我们要编译程序的源码,所以我们需要运行单独的apt-get source来得到我们所需的源码.
如果我们所希望的只是检查要创建指定的包所需要的包,有许多的apt-cache show可以满足我们这样的要求.在这个命令的显示信息中,Build-Depends部分就会列出所需要的软件包.如:
# apt-cache showsrc package
第七章 如何处理错误
7.1 常规错误
错误总是会发生的,其中的许多是由于用户没有注意而造成的.下面我们会列出一些最常出现的一些错误以及一些解决办法.
如果我们试着运行apt-get install package时会出现类似于下面的错误信息:
Reading Package Lists...Done
Building Dependency Tree...Done
W: Couldn't stat source package list 'http://people.debian.org unstable/ Package'
W: you may want to run apt-get update to correct these missing files
E: Couldn't find package penguineyes
这是因为在你上次更改/etc/apt/source.list文件后我们忘记了运行apt-get update命令.
如果错误如下:
E: Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/),are you root?
如果我们在试着运行任何的apt-get方法而不是source方法,我们不具有root权限,也就是说,我们正在以普通用户在运行这些命令.
如果我们在同一时间运行了两次apt-get命令或是我们在试着运行apt-get的同时dpkg进程处于激活,也会出现类似的信息.可以与其他同时运行的唯一的方法就是source方法.
如果一个安装进程在中间被打断而我们发现再也不可能安装或是移除这个安装包,我们可以试着运行下面的两个命令:
# apt-get -f install
# dpkg --configure -a
然后再试一下.上面的两个命令比较起来似乎第二个更必须一些.这对于使用'unstable'的用户来说是很重要的一课.
如果我们在运行apt-get update时出现"E:Dynamic MMap ran out of room",我们可以在我们的/etc/apt/apt.conf中加入下面的一句:
APT::Cache-Limit 10000000;
(End)