我想要做的就是手动安装单声道(到 /opt/mono-2.10)来运行 CLI 可执行文件,而无需明确指定解释器。未安装葡萄酒。
Ubuntu 10.10。目前没有安装单声道包(dpkg -l | grep mono
什么都不提供),但在我意识到我需要一个更新的包之前它们是过去的,所以这可能是这个混乱的根源。
运行 CLI 可执行文件给了我这个:
Can't exec "/usr/lib/cli/binfmt-detector-cli": No such file or directory at /usr/share/binfmt-support/run-detectors line 92.
那是正确的,/usr/lib/cli/binfmt-detector-cli
不存在,我不知道它应该来自哪里。
所以我搜索了一下,发现了一些关于 binfmt_misc 模块的信息。确实,它已加载,我有一个/proc/sys/fs/binfmt_misc/cli
包含以下内容:
enabled
interpreter /usr/share/binfmt-support/run-detectors
flags:
offset 0
magic 4d5a
这个run-detectors
脚本是 Perl,但显然不起作用(这可能是Debian #575776):
user@host:/$ /usr/share/binfmt-support/run-detectors
Use of uninitialized value in open at /usr/share/binfmt-support/run-detectors line 56.
Use of uninitialized value $ARGV[0] in concatenation (.) or string at /usr/share/binfmt-support/run-detectors line 56.
run-detectors: unable to open : No such file or directory
但无论如何,我没有 Wine,所以我一开始就不需要那些 binfmt-detector-cli 的东西。我只希望这些二进制文件与 Mono 解释器硬链接。我在 SU和这个博客条目上找到了这个答案,其中讨论了如何更改这些规则。不幸的是,尝试这样做,我总是得到“权限被拒绝”:
user@host:/$ sudo echo .:CLR:M::MZ::/opt/mono-2.10/bin/mono:. > /proc/sys/fs/binfmt_misc/register
bash: /proc/sys/fs/binfmt_misc/register: Permission denied
user@host:/$ sudo echo -1 > /proc/sys/fs/binfmt_misc/cli
bash: /proc/sys/fs/binfmt_misc/cli: Permission denied
我找到/usr/share/binfmts/cli
并将其更改为
package mono-runtime
interpreter /opt/mono-2.10/bin/mono
magic MZ
但这似乎没有效果。然后是/var/lib/binfmts/cli
,我改成
mono-runtime
magic
0
MZ
/opt/mono-2.10/bin/mono
但这也没有效果。我也找到了脚本update-binfmts
,但我无法让它工作。我什至无法删除现有配置。例如,以下尝试给我留下了一个相当神秘的错误消息:
user@host:/$ sudo update-binfmts --remove cli /opt/mono-2.10/bin/mono
update-binfmts: warning: current package is <local>, but binary format already
installed by mono-runtime ; not removing.
我不知道我的论点是否有效(帮助页面提到<path>
但没有说明它想要的路径......或为什么),第二行是否应该是错误消息以及它是否改变了第一名。
如何制作以魔术字符串“MZ”开头的任何可执行文件以运行/opt/mono-2.10/bin/mono
?
更新 1:Colin 建议的命令的输出:
user@host:/$ sudo update-binfmts --package mono-runtime --remove cli /opt/mono-2.10/bin/mono
update-binfmts: warning: current package is mono-runtime, but binary format
already installed by mono-runtime ; not removing.
user@host:/$ dpkg -S /usr/share/binfmts/cli
dpkg: /usr/share/binfmts/cli not found.
user@host:/$ sudo rm /usr/share/binfmts/cli*
user@host:/$ sudo update-binfmts --install cli /opt/mono-2.10/bin/mono --magic MZ
update-binfmts: warning: current package is <local>, but binary format already
installed by mono-runtime
update-binfmts: exiting due to previous errors
您永远不应该
/var/lib/binfmts/cli
手动编辑。这是一个状态文件update-binfmts
。你可能会因为这样做而混淆了它,尽管我怀疑单声道包首先是有问题的,所以会在这种情况下留下东西。另外,还有一个尾随空格令人困惑。我建议先清除状态:
update-binfmts --package 'mono-runtime ' --remove cli /opt/mono-2.10/bin/mono
然后检查 /usr/share/binfmts/cli 是否属于任何包(
dpkg -S /usr/share/binfmts/cli
- 我认为不应该,因为您没有安装单运行时),如果没有,则删除该文件。然后正确安装二进制格式,作为本地安装的格式,而不是包拥有的格式:
update-binfmts --install cli /opt/mono-2.10/bin/mono --magic MZ