我正在尝试构buildpdftk,这显然需要gcj。 由于它不在我的path中,我可以将保存gcj的目录添加到我的path中,或者在预先创build的Makefile中定义path。
问题是我不知道:
a)gcj是什么,b)它是否存在于服务器上(至less可以通过这种方式添加到path中)。
在我以前的尝试从源代码构build二进制文件的过程中,这个问题已经出现了不止一次,所以我希望我可以一次提出两个问题来解决我目前的问题,并在将来避免这个问题。
有没有办法将我读/执行权限添加到我的path? 子问题,这是一个坏主意吗?
whereis只search我的path吗? 有没有find我需要的文件/目录的一些等价物,而不必search整个主机,并获得访问拒绝其他目录?
有没有一种方法,我可以肯定地知道,如果一个库/二进制文件肯定不可用,而不是在我的path?
有没有办法告诉,特别是gcc如果gcj可用?
我可以编译gcj到我的用户目录而不必编译所有的gcc吗?
有一个(通用)的方式,当build立一个二进制文件,标记编译或制造文件来处理任何依赖关系,因为它发现它们,而不是简单的失败?
共享主机情况下的典型用户是否可以使用操作系统软件包来在用户级别获取软件包?
(1.)有没有办法将所有我读/执行许可添加到我的path? 子问题,这是一个坏主意吗?
…出于安全原因,这是一个坏主意。
(2.)在哪里只search我的path? 有没有find我需要的文件/目录的一些等价物,而不必search整个主机,并获得访问拒绝其他目录?
您可以使用-r选项来定位(或者从OpenCSW的findutils中可用的glocate ),该选项允许使用正则expression式: glocate -r /gcj$
(3.)有没有一种方法,我可以肯定地知道,如果一个库/二进制文件肯定不可用,而不是在我的path?
glocate可以告诉你,假设gupdatedb最近运行。
(4.)有没有办法告诉,特别是gcc如果gcj可用?
最好的方法是扫描已安装的软件包。 已安装文件的列表位于/var/sadm/install/contents 。
(5.)我可以编译gcj到我的用户目录而不必编译所有的gcc吗?
还没有尝试,但你仍然需要经历很多麻烦。 最好抓住一个已经可用的gcj二进制文件 。 如果您必须自己编译它,那么最好使用现有的构build描述,比如这个 。
(6.)在构build二进制文件时,是否有一种(通用)方式来标记编译或生成文件,以便在发现它们时处理任何依赖关系,而不仅仅是失败?
我假设你正在考虑Gentoo的emerge,它会在编译你想要的包之前下载和安装相关的包。 这并不容易, 特别是如果你把所有东西都编译成普通用户,那么你需要使用chroot环境。 这是一个好主意,但不是微不足道的事情。
(7.)共享主机情况下的典型用户是否有能力使用操作系统软件包来在用户级别获取软件包?
你打包什么意思? 如果您想要提取.pkg文件的内容,可以使用pkgtrans命令,如下所示: pkgtrans foo.pkg ./ all
但是,也可以使用像pbuilder这样的方式来创build一个chroot环境,在这个环境中,你可以在home目录中编译和安装软件包。
回到gcj问题,我认为你需要指定makefile的构build时间依赖关系,并依赖于包含gcj的包在已知path中,然后可以在构build描述中使用该path。
一般来说,如果你在一个共享主机中,编译软件包将是一件痛苦的事情,当你可以安装和删除软件包并写入/ usr时,find一个系统会更好。
使用某种构build框架(如GAR)也是个不错的主意, GAR可以完成所有正确的事情并消除许多烦恼:它检查构build时间依赖关系,下载tarball,validation校验和,提取,应用修补程序(如果有)configuration,构build,安装和打包,并且可以在单个Makefile中指定所有内容。 学习使用这样一个框架需要一点时间,但如果你倾向于自己构build软件包,花在学习上的时间将会很快得到回报。
是的,出于安全原因,这是一个坏主意。 恶意的脚本或程序,或简单的错误可能是一个真正的问题。
whereissearch/bin , /usr/bin等其他显而易见的地方。 请参阅手册页文件部分
您可以使用locate如果可用或find其他方式:
locate gcj
要么
find / -name gcj
1:没有人这样做 – >坏主意。
2 + 3:肯定的方法是:
pkginfo | grep -i gcj # (Solaris specific) find / -name gcj 2>/dev/null
4:不知道。
5:很可能,这显然是很多的手工工作。
6:不。在Makefile中,你可以在PATH中追加任何通常包含gcj的目录(你的猜测)。 这不会伤害任何人。
7:不,这是由pipe理员来安装一个软件包。 但是你不需要成为一个pipe理员来将包中包含的文件解压到你的主目录:
pkgtrans my-gcj.pkg . # (Solaris specific) converts package to a "filesystem format package" (ie directory tree)
在这种减法之后,软件很less可用(所有权不良,path不正确,库path不正确,configuration文件path不正确,没有执行安装脚本,没有检查前提条件…)。 这种操作不仅在Solaris上,而且在大多数其他的Unix / Linux上也是可能的 – 使用他们的打包工具。