Cygwin的当前完整安装大小是多less?

我在网上find的每一个源都说Cygwin的完整安装需要超过1 GB,但我的只有100 MB。 我很确定我从镜像服务器下载了所有东西,但安装不到5分钟就完成了,而不是几个小时,正如我所期望的那样,如果它安装了千兆字节的软件。

Cygwin在2012〜2013年期间是否进行了大规模的清理工作,或者在安装过程中做了什么错误?

完整的Cygwin安装范围从21到105 GiB,取决于你如何定义“完整”。

您的100 MB数字告诉我,您只是点击了Cygwin的setup-*.exe程序提供的默认值,没有选择任何可选软件包,因为它仅安装基本软件包集合,目前达到100 MiB。 Cygwin遵循现代网络连接的软件分发模式:它假设你可以再次运行setup-*.exe ,并根据需要选择新的软件包。 从0.1 GiB基础安装开始,然后根据需要添加软件包是正常的。

Cygwin的维护人员尽量保持Base类别的软件包集合尽可能小.¹一个Cygwin Base安装程序给你提供了一个很像旧式的Unix安装的东西,只不过是POSIX指定的 。

那么如何获得完整的安装?

Cygwin安装程序没有一个明显的方法来完成“完整”安装,因为没有人需要Cygwin存储库中的每个包。²

然而,有一个偷偷摸摸的方式来安装一切。 在包选择屏幕…

安装 - 一切hack截图

…单击“全部”组标题右侧的“默认”文本。 它将更改为“安装”,其下面的所有组中的对应文本也将更改为“安装”。 这标志着安装的一切。

我只包括这个提示的完整性。 你不想这样做! 它会安装你永远不会使用的东西的演出和演出。 目前,在Cygwin中有9951个软件包 ,并且每安装一个软件包 ,安装树需要83.4吉比特(GiB)的磁盘空间,加上下载树需要21.3吉比特(GiB)。

所有这些未使用的软件都会带来一些成本 即使磁盘空间,下载时间,安装时间, 重新绑定时间以及本地带宽使用对您来说都没有任何影响,请考虑大量的免费镜像浪费的带宽。

我已经做了实验,所以现在你不需要。

一个智能的“完整”安装

我想出了一套简单的软件包排除规则,导致安装更小巧:

  1. 跳过所有的-debuginfo软件包。 很少有人需要这些,他们占用大量的空间。 节省:53.4 GiB在安装树中; 更多在下载树中。

    应用这个规则很容易。 在选择了所有的软件包安装上面的鬼祟技巧,但在你移动到下一个屏幕之前,单击“调试”类别标题旁边的“安装”文本,直到它切换回“默认”。

    (或者,如果您已经安装了它们,请点击它直到它显示“Uninstall”。)

  2. 不要显式安装任何lib*包。 让Cygwin的setup-*.exe自动安装库,以满足包依赖。 节省:约5.1 GiB⑤

    要应用此规则,请将“Libs”类别切换到“Default”或“Uninstall”,如同使用“Debug”类别一样。 安装程序会在后面的步骤中找出你实际需要的库。

  3. 跳过交叉编译器和相关的包。 再次,很少有人需要这些。⁶ 储蓄:3.7 GiB

    Cygwin中基本上有两套交叉开发工具:用于创建另一个字大小的 Cygwin可执行文件集(即用于32位Cygwin的64位工具和库,反之亦然)以及用于构建MinGW可执行文件的集与Cygwin安装相同的字大小。

    要在64位Cygwin安装中应用此规则,同时仍在“选择软件包”屏幕上, cygwin32-在该屏幕顶部的软件包名称搜索框中键入cygwin32- ,然后单击每个顶级类别旁边的Default文本直到它返回到Default ,从而将所有基础匹配包的Install模式改回Default ,如果这是第一次通过setup-*.exe ,则不安装它们。 或者,如果您已经安装了这些软件包,请将这些模式更改为“ Uninstall

    mingw64-重复。

    这个想法对于32位Cygwin来说是一样的,只不过是用cygwin64-mingw32-来搜索和排除软件包。

按照这个规则,我几乎可以安装所有东西,只需要大约21吉比特。

削减下来

我们可以通过排除其他几个臭名昭着的硬盘来使安装变得更小:

  • X11 ,桌面环境和GUI应用程序一起需要大约10.8GiB.⁷

  • Cygwin Base + Devel安装到9.6 GiB。

  • Cygwin Base + TeX类别的安装大约需要4.8 GiB。 如果只安装本地语言的支持包,那么它将达到大约3.7吉比特。

  • 所有的-doc软件包合起来约4.5吉比特的磁盘空间

不是软件开发人员,不使用Cygwin进行GUI工作的人,使用Web进行文档编辑,以及不使用TeX进行文档创建的人,因此可以在大约1 GiB的范围内进行“完整的”Cygwin安装.⁸

如果您按照打算使用Cygwin的方式使用Cygwin,那么现在安装基础版和只需要额外的软件包,甚至可能甚至不会将安装大小设置为这些级别。 我以这种方式使用Cygwin,而且我的安装通常远低于1 GiB,但它们是“完整的”,因为它们满足了我目前的需求。

对于额外的磁盘填充乐趣…

所有这些测试都是用Cygwin的64位版本完成的。 通过安装一个并行的32位Cygwin安装,可以大致加倍上述空间要求

这不是没有意义的。 首先,使用交叉编译器是一个可行的选择。 另一方面,两个Cygwins的根本不兼容意味着你可能需要这两个。


脚注

  1. 在Cygwin邮件列表中偶尔会有线程,有人认为一些非常常见的包应该包含在Base类中,比如Perl,结果通常是维护者决定不把它添加到Base中。

    偶尔你也会看到相反的情况:一些软件包意外滑入基地,通常是通过不正确的依赖。 在问题引起Cygwin维护者注意后不久,恢复原状。 ( 例子 )

  2. 也许我错了。

    可能会有一位视力受损的 捷克移民音乐家 ,他在完成美国政府软件开发合同的同时,并没有通过将电子工程 报告翻译成他所采用的普通话而忙于刷新他的技术印地语词汇。

    我想见他。 他听起来像一个有趣的家伙。

    另外,我想我可以帮他为Orpie创建一个Tcl / Tk GUI前端。 当然,我会试着说服他把它从Ocaml移植到C ++ / Qt 。

    我的意思是,Tcl / Tk,认真吗? 2017年 让我们不要荒谬。

  3. curl -s https://cygwin.com/packages/package_list.html | grep -c x86_64/

  4. Cygwin的setup-*.exe在安装后不会删除下载的软件包文件。 这对于有多个Cygwin安装的站点很有用,因为您可以将下载目录放在共享网络驱动器上。 那么每个软件包只需要在该站点下载一次。

    我的105 GiB上限假定您将下载并安装到同一个驱动器,并且您将保留下载树,以备日后需要重新安装时使用。

    (这个答案中的所有大小都是空间在线数字,顺便说一句,不是磁盘空间数字: 文件系统开销会增加下载和安装树的大小,后者的程度要大得多,因为安装树中小文件的比例要大得多,下载树中预计有+ 1%,安装树中+ 5%。

    setup-*.exe不会删除已下载的软件包文件,它不会自动清除旧版本,因此您的下载树会在使用Cygwin的多年中不断增长和增长。 (为了解决这个问题,网上有一些脚本,比如这个 。)

  5. 您可能想知道,为什么Cygwin软件包存储库中有这样的库,即使您已经安装了“所有”软件包,也不需要这些库。 有几个原因:

    • 一些图书馆已经过时,但仍然存在于镜子上

    • 一些图书馆有多种选择,所以知道他们需要的东西以外的其他人可以选择它

    • 一些图书馆只为人们编写自己的程序,而不是支持任何现有的Cygwin软件包

  6. 几乎所有需要Cygwin交叉编译器的人都是维护Cygwin包的人,因为维护者需要为32位和64位Cygwin构建,除非有充分的理由不这样做。

    MinGW交叉开发工具可能有更多的人有很好的理由,但也可以使用MinGW和MSYS代替Cygwin。 另外,我猜测,Cygwin + MinGW双栈的开发人数比单独使用或者几乎使用其他开发人员的人数要少。

  7. 这种排除并不容易,因为GUI软件包分散在整个Cygwin包装系统中,而他们的顶级类别通常包含非GUI软件,所以不能简单地排除整个类别。 (如数学)

    第一遍是使用与上面相同的Categories视图技术来排除X11,GNOME,KDE,LXDE,MATE,Xfce和Games类别。

    然后,像上面的交叉编译器排除那样使用搜索框,删除与gtkgnomeqtkde匹配的包,如果需要的话,可以选择不包含Devel,Debug或Libs包中的包。

    最后,您必须切换到Pending视图,并手动排除一堆没有被这两个广泛排除项所捕获的软件包: Abiword , Calligra , Celestia , Dia , Evince , Geany , gEdit , Geomview , Gimp , gLabels , GnuCash , Gnumeric , Kalzium , KMyMoney , KolourPaint , Konqueror , Krita , KStars , LyX , 大理石 , Pidgin , QupZilla , Scribus , Skrooge , 眼镜 , Stellarium , Tellico和Vinagre 。 如果你不排除这些,他们会拖回你以上排除的依赖关系!

  8. 您可能会注意到,所有排除的软件包集合的大小比“智能完整”安装的21吉比还要多。 这是因为共享的依赖关系。 也就是说,这些尺寸在一定程度上重叠。

  9. 如果将两个setup-*.exe程序放在同一个目录中,它们将共享下载树,以便所有的noarch软件包都只下载一次Cygwins。 在这之间和32位和64位英特尔编译器生成大小不同的代码这一事实之间,安装两个Cygwins并不会使磁盘空间需求翻倍。

第一次安装软件包时,setup * .exe不会安装每个软件包。 只有Cygwin发行版中的最小基本软件包默认安装。 在setup * .exe软件包安装屏幕上单击类别和软件包将为您提供控制安装或更新内容的功能。 点击“All”类别旁边的“Default”字段将为您提供安装每个Cygwin软件包的机会。 安装和更新Cygwin软件包

我想添加到这个线程。 这种方法为您提供了一个更精简,更简单,最简单的Cygwin安装,只需要您需要的工具/项目。 没有依赖膨胀,没有不需要的包,文件等

我一直在尝试Cygwin试图获得“最基本的”安装。 我发现安装像grep,gawk,sed和类似工具的工具依赖于cygwin,base-Cygwin和有时候不需要的工具,比如bash,coreutils等等。

我只想得到安装的工具和所需的dll,并开始检查Cygwin软件包。 我发现不使用Cygwin提供的setup.exe是完成最小Cygwin安装的替代方法。

这就是我如何完成的:

  1. 使用ftp或http从Cygwin镜像站点下载所需的软件包。 或者,您可以使用Cygwin提供的setup.exe来下载所有软件包 – 只下载,不安装。
  2. 一旦下载成功完成,就可以在x86 / release或x86_64 / release目录下找到像zlib,gawk,grep,libiconv等单独的软件包。每个软件包都使用'xz'或bzip压缩和压缩,并存储在相应的目录中。
  3. 要安装像sed或gawk这样的特定工具,所有需要完成的工作是提取工具可执行文件及其依赖项(.dll)

在尝试以下操作之前,请确保您有一个像7z.exe,xz.exe,bzip2或其他能够解压缩.xz或bzip压缩文件的工具

下面安装gawk示例:

  1. 使用命令7z.exe从gawk-4.1.3-1.tar.xz归档中提取gawk.exe 7z.exe e -so gawk-4.1.3-1.tar.xz | tar xvf - 7z.exe e -so gawk-4.1.3-1.tar.xz | tar xvf -
  2. 一旦完成,你应该在一个子文件夹中找到gawk.exe,通常是usr / bin在release / gawk文件夹下
  3. 找到gawk的依赖关系,你可以通过几种方法来实现。

检查在x86或x86_64文件夹中找到的Cygwin setup.ini文件。 查找字符串“@ gawk”,在这一行之后的行中,应该找到一个“requires:”行来列出依赖关系。 我的读法是这样的 – “需要:bash cygwin libgmp10 libintl8 libmpfr4 libreadline7”

为了运行gawk,bash不是必须的,因为我们有windows命令shell。 (包括bash以获得gawk所需的一些其他dll,但这会导致更多不必要的文件被安装)。其他依赖包含gawk需要运行的文件。

使用像7z或xz这样的工具将上述每个软件包解压到单独的文件中。

在所有的依赖关系被提取后,将你需要的工具(grep / sed / gawk)复制到一个文件夹和所有依赖的.dll

您现在应该能够在裸机cygwin安装中所需的最少量的.dll文件下运行您的工具。

警告:仅为每个工具提取setup.ini中列出的依赖关系可能是不够的。 有时,您可能需要执行/运行该工具,以发现需要更多的dll。

还有其他方法可以找出.exe所需的dll – 您可以使用MS或者依赖walker,ndepends或类似工具的dumpbin来查找依赖dll的列表

请教 – 如何检测应用程序所需的DLL? 我如何找出哪个DLL可执行文件将加载?

我也粗暴强迫这个DLL信息,只需运行该工具,并从所需的软件包中提取安装丢失的DLL逐一列出。

当你运行一个工具,它的错误与一个.dll信息丢失,搜索包含在这里的DLL包 – https://cygwin.com/cgi-bin2/package-grep.cgi 输入缺少的DLL的完整/部分名称,以查找包含该DLL的包的名称。

最终,我只用了我所需要的工具和dll就完成了一个简单的cygwin安装。

例如:gawk – gawk.exe和以下dll – cygwin1.dll,cyggmp-10.dll,cygiconv-2.dll,cygintl-8.dll,cygmpfr-4.dll,cyggcc_s-seh-1.dll,cygncursesw- 10.dll,cygreadline7.dll sed – sed.exe和dll – cygwin1.dll,cygintl-8.dll

希望这被认为是有用的。 Cywin的安装程序也会重新建立基础,我不会冒险到这里。