Jac*_*ond 6 software-installation symlink directory-structure removable-storage
我计划在可移动媒体上安装一些软件(这可能会一直存在于计算机中,但有时可能会不存在)。在做了一些研究之后,我看到了三种似乎更可取且也在我能力范围内的方法:
将已安装的文件放在可移动媒体上并将它们的文件夹绑定到正确的位置
在可移动媒体上安装文件并创建可移动媒体的符号链接;如果删除媒体,这可能会创建断开的链接。但是,媒体通常会存在,也许更重要的是,除了程序之外,不应该有任何东西试图访问文件夹(如果媒体不存在,则不会运行)。例如,如果 LaTeX 的 /var/lib/texmf 文件夹的链接断开,则无需担心。
如果从源代码构建是一个选项,使用
./configure --prefix=/path/to/media/
(或可能类似地,dpkg -i --force-not-root --root=/path/to/media package.deb
)是否会出现程序找不到位于系统上的依赖项的问题?
这些方法中的任何一种是否明显优越或劣势?有什么我想念的吗?还有其他意见吗?
编辑:我计划安装的大部分软件都是用于数学的。两个主要程序是 LaTeX 和 Sage。由于我最初决定尝试这个,我意识到这两个程序已经可以在本地运行(Sage,LaTeX),这使得这一点没有实际意义,但我仍然对这个问题很好奇(特别是如果“系统集成” ,如果您可以调用安装/符号链接集成,效果会更好),所以我想我会发布它。我还想尝试一下 Mathematica,但由于许可等原因,我不确定它是否会起作用。将来可能会安装 MPI;我想安装或编译可能最好避免链接断开。
小智 0
Martin Monperrus编写了一篇关于使用该软件包在 Linux 上自动安装的精彩快速指南udev
。这是 ussefull 的副本,但也请务必检查那里的评论
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"
Run Code Online (Sandbox Code Playgroud)
请注意,关于KERNEL=="sdb*",
和 的位KERNEL=="sdc*",
是相关的,您可能希望使用UUID
' 来确保 udev 自动将正确的驱动器安装到正确的目录路径,无论它重新插入哪个 USB 端口。快速搜索后,找到了一篇关于使用 uuid 而不是 sdb* 或 sdc* 容易出错的安装方式的Arch Linux论坛帖子。一旦驱动器正确自动安装,那么它应该只需要添加适当的export PATH=/mnt/media/some_usb/program/:$PATH
行到 shell 的环境变量中,以便可以通过该用户的名称调用该程序。