我计划在可移动介质上安装一些软件(这些软件可能始终存在于计算机中,尽管有时可能不存在)。经过一些研究后,我发现了三种似乎更可取且也在我能力范围内的方法:
将已安装的文件放在可移动媒体上并将其文件夹绑定到正确的位置
将已安装的文件保存在可移动介质上并创建指向可移动介质的符号链接;如果删除介质,这可能会造成链接损坏。然而,媒体通常会存在,也许更重要的是,除了程序之外,不应该有任何东西试图访问文件夹(如果媒体不存在,则不会运行)。例如,没有什么应该关心 LaTeX 的 /var/lib/texmf 文件夹的链接是否损坏。
如果从源代码构建是一种选择,使用
./configure --prefix=/path/to/media/
(或可能类似地,dpkg -i --force-not-root --root=/path/to/media package.deb
)程序找不到位于系统上的依赖项是否会出现问题?
这些方法中是否有明显优越或劣势?我有什么遗漏的吗?还有其他评论吗?
编辑:我计划安装的大部分软件都是针对数学的。两个主要程序是 LaTeX 和 Sage。由于我最初决定尝试这个,我意识到这两个程序已经可以在本地运行(智者,乳胶)这使得这一点毫无意义,但我仍然对这个问题感到好奇(特别是如果“系统集成”,如果你可以调用集成的安装/符号链接,效果会更好),所以我想我会发布它。我还想尝试一下 Mathematica,但由于许可等原因不确定它是否有效。将来可能会安装 MPI;我想安装或编译可能是避免链接损坏的最佳方法。
答案1
马丁·蒙佩鲁斯编写了一个关于使用该包在 Linux 上自动安装的精彩快速指南udev
。这是完整内容的副本,但也请务必检查那里的评论
sudo nano /etc/udev/rules.d
# automounting usb flash drives
# umask is used to allow every user to write on the stick
# we use --sync in order to enable physical removing of mounted memory sticks -- this is OK for fat-based sticks
# I don't automount sda since in my system this is the internal hard drive # depending on your hardware config, usb sticks might be other devices than sdb*
ACTION=="add",KERNEL=="sdb*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
ACTION=="remove", KERNEL=="sdb*", RUN+="/usr/bin/pumount %k"
ACTION=="add",KERNEL=="sdc*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
ACTION=="remove", KERNEL=="sdc*", RUN+="/usr/bin/pumount %k"
KERNEL=="sdb*",
请注意,关于和的位KERNEL=="sdc*",
是相关的,您可能希望使用UUID
' 来确保 udev 自动将正确的驱动器安装到正确的目录路径,无论它重新插入哪个 USB 端口。快速搜索被拉起Arch Linux关于使用 uuid 而不是 sdb* 或 sdc* 的挂载方式容易出错的论坛帖子。一旦驱动器正确自动安装,那么它应该只需要添加适当的export PATH=/mnt/media/some_usb/program/:$PATH
行到 shell 的环境变量中,以便可以通过该用户的名称调用该程序。
答案2
对于*.so
搜索:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your_lib_dir
对于可执行搜索:
export PATH=$PATH:your_executable_dir
我觉得这两个环境变量就够了。