我正在使用一台服务器,运行旧版本的 Linux。我没有系统的根访问权限,所以我想构建一个我经常使用的工具的更新版本(Vim 7.3)。我想我只需构建它并将其安装在 ~/bin 中。但是,它需要未在系统范围内安装的 ncurses 开发文件。我找到了 ncurses-devel rpm,并提取了“lib”和“include”文件夹,我应该将它们放在哪里以及如何告诉 ./configure 脚本找到它们,以便我可以在本地正确配置和构建包?
编辑:我最终通过在 Virtualbox 中安装相同的操作系统,并在那里构建包并复制二进制文件来解决这个问题。
答案1
我在上一份工作中经常这样做 - 似乎最有效的解决方案是创建一个 ~/usr 目录,并使用 --prefix 参数将 ./configure 脚本指向正确的方向。步骤如下:
- 创建 ~/usr 目录,并在其下包含 include、lib 和 bin 目录。
- 在您的 .profile、.bashrc 或其他 shell 初始化脚本中,添加以下内容(或 shell 方言中的等效内容):
export PATH=$PATH:~/usr/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/usr/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:~/usr/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/usr/include
- 构建包时,使用
./configure --prefix=/home/<username>/usr
在大多数需要在用户空间中构建东西的情况下,这种安排对我来说很有效。最困难的部分通常是找到并构建您需要的所有依赖项,但这只需要进行一些谷歌搜索或明智地使用包管理器的“获取源”功能即可。
答案2
通常,您应该能够重新配置和更改代码以在主目录或所有库和程序的其他路径中定义新位置...
但是,恕我直言,最简单的方法(如果你有足够的空间)是在安装了所有 Linux 发行版的子目录中使用 chroot。当然作为普通用户你不能使用chroot,但您可以使用这些很棒的工具:假根和假根
为了创建 chroot 文件系统,我喜欢使用 Debian(或任何 Debian 衍生版本,如 ubuntu)部署一个目录反引导程序公用事业。
所以过程很简单(我不会详细介绍技术细节,请阅读命令手册):
- 获取并安装:fakeroot、fakechroot 和 debootstrap 工具
- 使用 debootstrap 创建一个子目录(我只能以 root 身份执行此操作。您可以在另一台计算机上执行此操作,并根据需要复制二进制文件)
- 执行: fakechroot fakeroot chroot mydebian-dir
如果您需要更多详细信息,我想我有一个脚本可以完成这一切。
答案3
此问题的另一个解决方案是使用 Gentoo 前缀,就像 MacOSX 用户和其他平台(solaris、AIX)所做的那样:
http://www.gentoo.org/proj/en/gentoo-alt/prefix/
它将在 $PREFIX 位置编译 Gentoo 堆栈(带有 portage)。它使用 Gentoo 软件包,大多数软件包都支持使用这些设置。
Portage 将跟踪所有依赖项,您将拥有该软件的最新版本,它已经过社区测试......
答案4
如果prefix=/home/foo/usr
不起作用,请尝试:
CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure