我正在使用 2015 年制造的本地光盘将 cygwin 安装到新机器上。我使用的是一组旧的软件包,因为批准新文件的过程非常繁琐。软件包文件夹位于
C:\cygwinV2015install\http%3a%2f%2fcygwin.parentingamerica.com%2f\x86_64\release
我使用以下命令启动安装:
setup-x86_64.exe --no-admin
安装可执行文件和软件包文件夹是我从 2015 年保留的唯一文件。
是。我选择安装而不是。指定为Root Install Directory
。C:\cygwin64
Just Me
All Users
Local Package Directory
C:\cygwinV2015install\http%3a%2f%2fcygwin.parentingamerica.com%2f
在Select Packages
屏幕中,我选择Curr
,代表Globally select the version that is currently considered the most stable. (RECOMMENDED)
。 的复选框Hide obsolete packages
已启用。
问题是我无法使用Category
View
如果
View
是,则Category
唯一显示的是No packages found
,无论过滤器如何(Default
,,,)Install
Reinstall
Uninstall
如果
View
是Full
,我会看到一个很长的软件包列表,其中第一列(标题为New
)中的每个条目都显示。我可以一次Skip
点击一行,并在软件包版本和 之间进行选择。Skip
Skip
如果
View
是,我看到已从中Pending
切换的包Skip
Full
View
如果
View
是Up To Date
,唯一显示的是Nothing to Install/Update
如果
View
是Not Installed
,我看到的内容与View
是时相同Full
(这是有道理的,因为没有安装任何东西)。
我真的不想在 之外操作,Category
View
因为我肯定会错过一些东西。在让设置正常工作方面我缺少什么?我希望能够使用Category
View
和查看更多内容No Packages found
。
后记:通过在另一台计算机上进行实验,似乎无论我为 指定什么路径Local Package Directory
,包都会显示在Select Packages
下的列表中Category
View
。这意味着安装程序将包的路径存储在其他地方。有人知道在哪里吗?如果我可以访问该参数,我可能能够让安装程序在新计算机上正常运行。
首次尝试的解决方案: 感谢 Matzeri,我关注了这页面创建一个指定所有包的 *.bat 文件:
setup-x86_64.exe --no-admin --local-package-dir C:\cygwinV2015install -P _autorebase,_autorebase,_update-info-dir,a2ps,...,zip,zlib0
pause
*.bat 文件是在安装了 的计算机上创建的cygwin
,并在我想要安装 cygwin 的计算机上执行。我自己添加了,--no-admin
因为我没有管理员权限。我将其放在 中C:\cygwinV2015install
,其中还包含镜像文件夹http%3a%2f%2fcygwin.parentingamerica.com%2f
。但是,当我运行 *.bat 文件时,它会启动与我直接运行 相同的安装 GUI setup-x86_64.exe
。Select Packages
面板似乎无法识别任何包。以下是显示的内容,具体取决于View
:
Full
View
:Nothing to Install/Update
Pending
View
:Nothing to Install/Update
Up To Dat
View
:Nothing to Install/Update
Not Installed
:Nothing to Install/Update
Category
View
:No packages Found
对于,无论我按、、或Category
View
进行过滤都没有关系。Default
Install
Reinstall
Uninstall
在 *.bat 文件中,我也指定了--local-package-dir C:\cygwinV2015install\http%%3a%%2f%%2fcygwin.parentingamerica.com%%2f
,结果相同。(双“%”符号在 *.bat 文件中充当单个“%”)。
请注意,我删除了以 为根的子树中的所有 *.ini 文件C:\cygwinV2015install
。其中的文本表明它们是自动生成的。
还有什么其他原因导致包裹无法被识别吗?
新信息:如果我创建一个新文件夹c:\cygwinV2015install5
并将安装可执行文件、镜像文件夹和 *.bat 文件放入其中,我就可以运行setup-x86_64.exe --no-admin
并查看(跳过的)包Full
View
——只要--local-package-dir
指定为镜像文件夹。不是 c:\cygwinV2015install5
。但是,有太多的包需要手动切换Skip
。由于我只能在创建原始文件夹时才能看到包c:\cygwinV2015install5
,这意味着它将setup
包的知识存储在其他地方,并且setup
只有在新的本地包目录时才会再次查找包。我试图通过在新文件夹中使用 *.bat 文件来利用这一点c:\cygwinV2015install6
,但遗憾的是,没有运气。仍然得到与上面相同的结果FIRST ATTEMPTED SOLUTION
。请注意,我--local-install
在 *.bat 文件中添加了选项,并且我也尝试了--no-verify
;没有区别。
更多新信息:我开始怀疑以下故障模式:
setup
仅当通过 GUI 浏览本地包目录时才识别包setup
,不是如果通过命令行选项指定--local-package-dir
证据是,
Select Packages
无论我将本地包目录指定为c:\cygwinV2015install*
还是c:\cygwinV2015install*\http%%3a%%2f%%2fcygwin.parentingamerica.com%%2f
(星号是任何整数,以确保我正在使用原始目录),列表都是空的当我使用 GUI 浏览到本地包目录时,我可以看到 中的包
Full
View
,但看不到Category
View
但是,我怀疑当我这样做时,我会丢失使用 *.bat 文件中的 -P 选项指定的所有包规范
证据是所有包都显示为
Skip
(严格来说,我不确定如果setup
不通过 GUI 浏览就能正确看到它们,它们是否会显示出来)有太多软件包需要手动
Skip
切换通过层次化组织
Category
View
,可能有机会选择高级别的软件包,并让依赖性保证功能选择低级别的软件包和库
如果我是对的,那么可以通过让安装可执行文件根据参数识别包来解决问题--local-package-dir
,没有必须浏览 GUI 中的文件夹。如果做不到这一点,我需要一种方法来切换Skip
对软件包的选择。
让我困惑的主要问题是为什么这些包无法识别,即使可以识别,为什么它们没有以典型的分层方式显示Category
View
。是否需要在某个文件夹中添加某种配置文件才能使此功能正常工作?
答案1
我找到了问题和解决方案。安装可执行文件依赖于.../http%3a%2f%2fcygwin.parentingamerica.com%2f/x86_64/setup.ini
下载软件包文件时创建的文件。幸运的是,我用于创建安装 CD 的机器上仍有该文件。将该文件放入目标机器上的上述路径可使安装可执行文件正常工作并复制源机器的 cygwin 安装。我不需要创建或运行任何自定义 *.bat 文件。
请注意,如果您将所有软件包合并到一个(或两个)zip文件中,Windows 7内置的大型zip文件处理功能就会出现错误,并且会损坏文件(我不确定是在压缩还是解压过程中)。请明确使用WinZip来提取不同的软件包文件夹。这至少可以为您节省几天的故障排除时间。尽管我几年前就知道这个Windows错误,但我没想到它一直存在到今天,因此没有留意它。这个错误特别隐蔽,因为没有迹象表明文件已损坏。它们的长度可能为零或小于应有的长度。
遇到此问题的人不会立即知道文件大小不正确。我看到了有关缺少 DLL 的 cygwin 安装消息。但是,不正确的文件大小在 c:/cygwin64/var/log/setup.log.full 中记录得非常清楚。记录了具体路径,以及根据 *.ini 文件的大小应该是多少,以及相反,磁盘上的大小是多少。不幸的是,setup.log.full 仅在 cygwin 安装过程结束时创建。