在本地安装开发文件以在没有root用户访问权限的系统上进行构建?


11

我正在使用一台服务器,运行的是旧版Linux。我没有对该系统的root访问权限,因此我想构建一个我经常使用的工具(Vim 7.3)的更新版本。我以为我会构建它并将其安装在〜/ bin中。但是,它需要未在系统范围内安装的ncurses开发文件。我找到了ncurses-devel rpm,并提取了“ lib”和“ include”文件夹,我将它们放在哪里,以及如何告诉./configure脚本找到它们,以便可以在本地正确配置和构建软件包?

编辑:最后,我通过在Virtualbox中安装相同的OS,然后在其中构建软件包并复制二进制文件来解决此问题。


serverfault.com/questions/23734可能足够相似以提供帮助。大多数答案涉及在您的homedir中安装有效的整个系统,但是可以在Gentoo Prefix和Rootless Gobo中解决。
短暂

Answers:


14

我在上一份工作中经常这样做-似乎最有效的解决方案是创建一个〜/ usr目录,并使用--prefix参数将./configure脚本指向正确的方向。步骤如下:

  • 创建〜/ usr目录,并在其下面包含lib和bin目录。
  • 在您的.profile,.bashrc或其他外壳初始化脚本中,添加以下内容(或外壳方言中的等效内容):
    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

在大多数需要在用户空间中构建事物的情况下,这种安排对我有用。最困难的部分通常是查找并构建您需要的所有依赖关系,但这仅需要对软件包管理器的“获取源代码”功能进行一些搜索或明智地使用。


不太适合我。configure脚本似乎在〜/ usr中找不到任何内容
postfuturist 2010年

我有同样的问题@postfuturist。我最终使用${HOME}而不是~在所有导出调用中对其进行了修复,然后pkg-config很高兴并能够找到用户安装的库和软件包。
phyatt 2015年

3

通常,您应该能够重新配置和更改代码,以在主目录中定义所有库和程序的新位置或其他路径...

但是,恕我直言,最简单的方法(如果有足够的空间)是在安装了所有Linux发行版的子目录中使用chroot。作为普通用户,您不能使用chroot,但是您可以使用以下出色的工具:fakechrootfakeroot

要创建chroot文件系统,我想使用debootstrap实用程序在Debian(或任何ubuntu之类的Debian衍生版本)中部署目录。

因此,该过程很容易(我不会输入技术细节,请阅读命令手册):

  • 获取并安装:fakeroot,fakechroot和debootstrap工具
  • 使用debootstrap创建一个子目录(我只能以root身份执行。您可以在另一台计算机上执行该操作,并根据需要复制二进制文件)
  • 执行:fakechroot fakeroot chroot mydebian-dir

如果您需要更多细节,我想我可以在某个地方编写脚本来完成所有这些工作。


2

解决此问题的另一种方法是使用Gentoo前缀,就像MacOSX用户和其他平台(solaris,AIX)所做的那样:

http://www.gentoo.org/proj/en/gentoo-alt/prefix/

它将在$ PREFIX位置编译Gentoo堆栈(带有可移植性)。它使用Gentoo软件包,大多数软件包都支持使用这些设置。

Portage将跟踪所有依赖项,您将拥有该软件的最新版本,该版本已通过社区测试。


1

如果prefix=/home/foo/usr不起作用,请尝试:

CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.