如何安装系统范围的软件包而不需要 ls-R 数据库(使用 texlive)?

如何安装系统范围的软件包而不需要 ls-R 数据库(使用 texlive)?

问题

如何安装供全系统使用的软件包,但又不需要ls-R更新数据库?

背景

texlive 文档表示特定用户的包应该放在 中,TEXMFHOME而多个用户的包应该放在 中TEXMFLOCAL(两者都由TeX 目录结构(TDS))。

在您的系统上,可以使用以下方式找到这些位置kpsewhich(它们是在安装过程中配置的,不是就像环境变量一样):

kpsewhich -expand-var '$TEXMFHOME'    
kpsewhich -expand-var '$TEXMFLOCAL'

正如指出的那样这个答案,该TEXMFHOME解决方案不需要ls-R更新数据库:只需在此处添加包即可找到它们。

然而TEXMFLOCAL要求 mktexlsrtexhash)运行以更新数据库(这必须在权限正确设置的情况下ls-R完成)。root

TEXMFHOME有没有类似的地点才不是需要一个ls-R供全系统使用的数据库吗?

用例是共享系统上的用户维护我们托管的包TEXMFLOCAL。每当他们更改文件名称时,ls-R管理员都需要更新本地数据库。我们如何允许用户修改包(包括根据需要更改文件名),而无需管理员更新ls-R

我意识到如果不使用数据库,性能会受到影响,因此可能应该使用单独的树。另外,我确信的设置TEXMFLOCAL可能可以调整(通过将其从TEXMFDBS?)以消除对的需要ls-R,但我正在寻找与记录的texlive系统行为相适应的“标准”解决方案。

答案1

路径扩展和数据库搜索记录在kpathseaweb2c文档中(均可用texdoc)。

引用 kpathsea 手册(第 3.4.1 节):

但是,如果特定路径元素以“!!”开头,则只会在数据库中搜索该元素,而不会在磁盘中搜索。

研究texmf/web2c/texmf.cnf发现

% TEXMFLOCAL follows TEXMFMAIN (and precedes TEXMFDIST) because the
% files in TEXMFMAIN are tightly coupled with the particular version of
% the distribution, such as configuration files.  Overriding them would
% be more likely to cause trouble than help.  On the other hand, the
% bulk of packages and fonts are in TEXMFDIST, and locally-installed
% versions should take precedence over those -- although it is generally
% a source of confusion to have different versions of a package
% installed, whatever the trees, so try to avoid it.
TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}

% Where to look for ls-R files.  There need not be an ls-R in the
% directories in this path, but if there is one, Kpathsea will use it.
% By default, this is only the !! elements of TEXMF, so that mktexlsr
% does not create ls-R files in the non-!! elements -- because if an
% ls-R is present, it will be used, and the disk will not be searched.
% This is arguably a bug in kpathsea.
TEXMFDBS = {!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}

这应该足够了(我还没有测试过),把这些线

TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,$TEXMFLOCAL,!!$TEXMFDIST}
TEXMFDBS = {!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,$TEXMFLOCAL,!!$TEXMFDIST}

进入texmf.cnf返回的kpsewhich texmf.cnf,从而禁用中的数据库搜索$TEXMFLOCAL

答案2

马丁的回答看起来像是你的问题的正确答案,但我想回答你没有问的问题,但应该问恕我直言:-) 那个问题是:我如何允许某人维护TEXMFLOCAL

您似乎假设只有管理员才能更新ls-R中的文件TEXMFLOCAL。事实并非如此。任何可以写入 的人TEXMFLOCAL都可以更新文件。如果您的用户有足够的权限来更新(重命名) 中的文件TEXMFLOCAL,他们应该已经能够ls-R毫无问题地更新那里的文件。如果他们想避免mktexlsr /path/to/texmflocal与他们无法写入的树相关的错误,只需告诉他们运行 而不是mktexlsr,否则他们可以忽略错误,TEXMFLOCAL/ls-R无论如何都会更新。

这就是如何共享 TeX Live 管理权限的简单答案:只需使用文件系统权限。

(PS:如果您当前的ls-R文件归 root 所有,则需要第一次对其进行chownchgrp和。)chmod

相关内容