我正在尝试安装 cygwin,但是出现以下安装后脚本错误:
Package: _/base-files
base-files-mketc.sh exit code 254
base-files-profile.sh exit code 254
我在 Google 上找不到任何有用的信息。我发现了其他几个安装后错误讨论,建议删除 Cygwin 并清除注册表、重新启动并重新安装,但我试过了,没有成功。
有人遇到过这种情况吗?如果遇到过,如何解决?
编辑:这是安装日志
答案1
两个步骤:
- 禁用防病毒软件
- 禁用防火墙
如果这有帮助,请打开防火墙并将所有 cygwin 文件夹添加到防火墙白名单。
如果没有,请阅读这
如何修复 fork() 失败?
不幸的是,Windows 不使用类 UNIX 操作系统中的 fork/exec 进程创建模型,因此 Cygwin 很难实现可靠且正确的 fork(),这可能导致错误消息,例如:
- 无法将 somedll 重新映射到与父级相同的地址
- 无法分配堆
- 等待 dll 加载时死亡
- child -1 - 在初始化之前等待 longjmp 而死亡
- 状态访问违规
- 资源暂时不可用
上述错误的潜在解决方案:
- 重新启动尝试(但失败了)使用 fork() 的任何进程。有时 Windows 会设置比平常更不利于 fork() 的进程环境。
- 确保已删除(而不仅仅是禁用)计算机上的所有软件布洛达。
如果您的操作系统和 CPU 支持,请从 32 位 Cygwin 切换到 64 位 Cygwin。有了更大的地址空间,fork() 失败的可能性就更小。
尝试将环境变量 CYGWIN 设置为“detect_bloda”,这将启用一些额外的调试,这可能会指示出哪些其他软件导致了问题。
看这封邮件了解更多信息。
强制进行完整变基:运行 rebase-trigger fullrebase,退出所有 Cygwin 程序并运行 Cygwin 设置。
默认情况下,Cygwin 的安装程序会自动对新安装的文件执行增量变基。强制执行完全变基会导致在执行变基之前清除变基映射。
有关更多详细信息,请参阅 /usr/share/doc/rebase/README 和 /usr/share/doc/Cygwin/_autorebase.README。
请注意,安装新的软件包或更新现有的软件包会取消 rebase 的效果,并且经常导致 fork() 失败再次出现。
查看流程创建用户指南的部分由于技术原因,使 fork() 可靠地工作非常困难。
答案2
答案3
前几天当我尝试在 Windows 10 上安装 Cygwin 时偶然发现了同样的问题。
在研究该问题时,我在安装日志中发现了一些关于地址不匹配的信息(抱歉,我没有确切的措辞 - 我不会重现该错误......)。这让我想到它可能与 ASLR(一种增强系统抵御恶意软件的技术)有关。
所以我关闭了 ASLR。这样做之后,我可以毫无问题地安装 Cygwin。
如上所述,这是在 Windows 10 上进行的。但据我所知,Windows 7 也具有 ASLR,因此这很可能是问题的根源。如果您下载了 EMET,您可以通过 UI 在 Windows 中将其关闭,或者通过注册表 (看这里)。因此,您可以尝试一下,看看 Cygwin 是否安装正确。
请注意,我不建议关闭 ASLR;我认为它是一种重要的恶意软件防护。不过,在 Windows 10 中,你可以启用 ASLR每个可执行文件,这意味着您可以在系统范围内启用它,并为 Cygwin 可执行文件设置例外。我几乎确信您可以在 Windows 7 中实现相同的功能。
简而言之,你可以
关闭系统范围内的 ASLR 并安装 Cygwin
再次在系统范围内启用 ASLR
如果 Cygwin 安装没有失败,除了 ASLR 的 Cygwin 可执行文件
虽然最后一步可能意味着会产生几十个例外,但对我来说,这是值得的。