我喜欢使用Cygwin ,但我讨厌所有额外的磁盘空间,似乎使用caching的东西,我不需要。 我可以删除什么以保持我的安装足迹尽可能小?
在一个相关的说明,什么是一个好的准系统套件,将给我的要领,没有绒毛,我可能永远不会运行?
有些人似乎认为在这个人使用的任何平台上很容易换掉硬件。 如果可能使用CF卡和4GB卡在上网本或类似设备上运行Windows,很可能500MB实际上是大量的空间。 或者他们可能会将其安装到虚拟映像中,而这些额外的信息意味着它适合解压缩的DVD或不得不跨越多个DVDS并处理与之相关的问题,尤其是在将其发送给客户端不是特别技术性的例子; 您公司开发的应用程序的内部培训材料。 让所有受训者都有一个一致的图像可以创造奇迹,使环境变得同质化,让教练员的生活更轻松。 在大多数情况下,虚拟图像是一种简单的方法。
解决用户询问的问题或询问他们的问题以获得更多信息。
潜在的解决scheme:
在安装Cygwin的时候,在屏幕上询问你在哪里存储你的软件包,把它指向一个特定的位置,比如c:\ Cygwin \ Packages。 正常安装,运行它来检查它是否正常运行。 删除包存储的文件夹,如果需要更新Cygwin将再次下载它,而不是最有效的带宽使用,但取决于您的要求,它可能比保持本地caching更好。
另一个select是安装这些软件包,但是第一次做这个软件包时,把软件包保存到另一个位置,比如USB驱动器,那么如果你必须做的话
我注意到,我目前的安装量低于250MB,在我开始在笔记本电脑上关注它之前,这个尺寸必须是这个尺寸的四倍。
但是,如果你有需要把它缩小…
下载安装程序 。 将其保存到c:\ cygwin \ setup.exe。 运行安装程序。 尽可能取消select尽可能多的软件包。 注意,如果你select一个有需求的包,它将自动select所需的包。 删除安装程序caching(这应该默认为c:\ cygwin(http | ftp)),从c:\ setup.exe重新运行安装程序,尝试卸载更多的程序包,直到安装程序尽可能小。
请注意,即使是最小的安装,也会需要一些基本的库包。 我在过去(大约一年前),已经把它降到了100兆以下,而仍然有我用bash脚本方式投掷的所有东西。
我不能在没有安装Cygwin的情况下使用Windows,但是使用磁盘空间我从来没有太多的问题。 我认为你可以删除Cygwin存放软件包的文件夹,但每次更新Cygwin时都会下载它所需的软件包。
至于准系统设置,这真的取决于你需要什么。 我从Cygwin的基本安装开始,添加OpenSSH,Cron,RXVT,Screen,Vim,Git,Curl,Zip / Unzip和Wget。 这些都是我需要的所有工具,但是如果需要的话,我只需要安装其他的东西。
而不是Cygwin,你也可以用更多的软件包来解决Cygwin希望能够解决的所有问题。 有一些unix工具包,只是有限的select最常用的程序。
用于Windows的Unix Utilities是我在当天使用的那个,但它似乎是一个死的项目。
GnuWin32似乎还活着。
我将从基本的cygwin软件包开始,并在任何你需要的额外命令中使用“page-fault”。 我保存了一个我使用的常用工具列表,但可能与您使用的工具完全不同。 安装Cygwin时不要select所有的软件包。 我做了一次,大约6GB。 我的想法是,我永远不必担心没有一个程序。 这是一个坏主意。
我的Windows XP机器有1.1 GB的服务包卸载数据。 在尝试修剪Cygwin之前,我会先删除这些文件。 尝试使用WinDirStat程序,看看你的硬盘空间在哪里 – 可能不是Cygwin。 另外,你可能会不时地删除C:\ cygwin \ tmp,因为在重新启动的时候这不会被清除。
你可以从CygWin切换到Gow ,一个轻量级的替代CygWin(约10倍)
如果你已经不止一次地拉动安装文件,你会发现没有使用的文件被遗忘了。
清理一个Cygwin安装集(不是已安装的代码库,但用于执行安装的软件包…
我想我看到一个Perl脚本来做这个地方,但尝试这个Java代码来清理Cygwin的安装程序:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.text.DecimalFormat; import java.util.HashSet; public class CygwinCleaner { boolean doClean = false; long diskFileCount = -1; long setupFileCount = 0; long missingFileCount = 0; long srcFileCount = 0; long deleteCount = 0; public HashSet<String> pkgs = new HashSet<String>(9999); public String formatCount(long count) { DecimalFormat df = new DecimalFormat("##,###"); String retval = " " + df.format(count); return retval.substring(retval.length() - 6); } public void checkForMissingFiles() { for (String filename : this.pkgs) { if (!filename.contains("-src.")) { if (!((new File(filename)).exists())) { System.err.println(" Missing " + filename); missingFileCount++; } } } } public void checkOrCleanFiles(File testfile) { String tfap = null; if (testfile.isDirectory()) { for (File file : testfile.listFiles()) { checkOrCleanFiles(file); } } else { this.diskFileCount++; tfap = testfile.getAbsolutePath(); if (!this.pkgs.contains(tfap)) { if (this.doClean) { System.err.println("Deleting \"" + tfap + "\""); if (testfile.delete()) { this.deleteCount++; } else { System.err.println("COULD NOT DELETE \"" + tfap + "\""); } } else { System.err.println("WOULD delete \"" + tfap + "\""); } } } } public boolean loadFileList(File file) { boolean retval = false; if (file.exists()) { try { String basedir = (new File(file.getParent())).getParent() + "/"; basedir = basedir.replace('\\', '/'); BufferedReader br = null; br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String line = br.readLine(); String installFile = null; boolean processlines = false; while ((line = br.readLine()) != null) { if (processlines) { if (line.startsWith("install:") || line.startsWith("source:")) { installFile = line.substring(1 + line.indexOf(" ")); installFile = installFile.substring(0, installFile.indexOf(" ")); installFile = basedir + installFile; String hashString = (new File(installFile)).getAbsolutePath(); if (!this.pkgs.contains(hashString)) { this.pkgs.add(hashString); this.setupFileCount++; if (line.startsWith("source:")) { srcFileCount++; } } } } if (line.startsWith("@ ")) { processlines = true; } if (line.startsWith("[test]") || line.startsWith("[prev]")) { processlines = false; } } br.close(); retval = true; } catch (Throwable t) { t.printStackTrace(); } } return retval; } public static void main(String[] args) { if (args.length == 0) { System.err.println("Usage::::: CygwinCleaner {full_path_to_setup.ini} [CLEAN]\nIf only the ini file is specified then a report will be generated\nTo perform the cleanup add the second optional parameter of CLEAN"); } else { System.out.print("CygwinCleaner: "); CygwinCleaner cc = new CygwinCleaner(); String setupFileName = args[0]; if (args.length > 1) { if (args[1].equalsIgnoreCase("CLEAN")) cc.doClean = true; } if (cc.doClean) { System.out.println("Performing cleanup\n"); } else { System.out.println("Reporting only\n"); } File file = new File(setupFileName); cc.pkgs.add(file.getAbsolutePath()); if (cc.loadFileList(file)) { cc.checkOrCleanFiles(file.getParentFile()); cc.checkForMissingFiles(); System.out.println(" Total of:" + cc.formatCount(cc.setupFileCount) + " files in setup.ini"); System.out.println(" Source:" + cc.formatCount(cc.srcFileCount) + " files in setup.ini"); System.out.println(" Leaving:" + cc.formatCount((cc.setupFileCount - cc.srcFileCount)) + " files in setup.ini\n"); System.out.println(" Total of:" + cc.formatCount(cc.diskFileCount) + " files in setup directory before cleanup"); System.out.println(" Deleted:" + cc.formatCount(cc.deleteCount) + " files in setup directory (unused)"); System.out.println(" Leaving:" + cc.formatCount((cc.diskFileCount-cc.deleteCount)) + " files in setup directory after cleanup\n"); System.out.println(" Missing:" + cc.formatCount(cc.missingFileCount) + " files in setup directory that are contained in setup.ini"); } else { System.err.println("setup.ini file (" + setupFileName + ") does nofiles in setup"); } } } }
我一直在尝试Cygwin试图获得“最基本的”安装。 我发现安装像grep,gawk,sed和类似工具的工具对cygwin,base-Cygwin和有时候不需要的工具,如bash,coreutils等有依赖关系,我没有试图完全理解为什么这个依赖存在,但那不是我的目标。 我只想得到安装的工具和所需的dll,并开始检查Cygwin软件包。 我发现不使用Cygwin提供的setup.exe是完成最小Cygwin安装的替代方法。 这就是我完成的方式。
要安装像sed或gawk这样的特定工具,所有需要完成的工作是提取工具可执行文件及其依赖项(.dll)
在尝试以下操作之前,请确保您有一个像7z.exe,xz.exe,bzip2或其他能够解压缩.xz或bzip压缩文件的工具
下面安装gawk示例:
检查在x86或x86_64文件夹中find的Cygwin setup.ini文件。 查找string“@ gawk”,并在该行后面的行中find列出依赖关系的“requires:”行。
我的读法是这样的 – “需要:bash cygwin libgmp10 libintl8 libmpfr4 libreadline7”
为了运行gawk,bash不是必须的,因为我们有windows命令shell。 (包括bash是为了得到gawk所需的其他一些dll,但是这会导致更多不必要的文件被安装)。 其他依赖包含gawk需要运行的文件。 使用像7z或xz这样的工具将上述每个软件包解压到单独的文件中。
在所有依赖关系被提取之后,将你需要的工具(grep / sed / gawk)复制到一个文件夹和所有相关的.dll你现在应该能够运行你的工具, – cygwin安装。
警告:仅为每个工具提取setup.ini中列出的依赖关系可能是不够的。 有时,您可能需要执行/运行该工具,以发现需要更多的dll。
还有其他的方法来找出exe所需的dll – 你可以使用MS或者依赖walker的dumpbin,ndepends或者类似工具来查找依赖dll的列表
请教 – https://stackoverflow.com/questions/362560/how-do-i-detect-the-dlls-required-by-an-application https://stackoverflow.com/questions/475148/how-doi-i -find-出其中的dll-一个可执行意志负荷
我也暴力通过运行该工具,并通过从所需的软件包中提取安装丢失的DLL逐一列出依赖的DLL信息。
当你运行一个exe文件时,如果出现一个缺less.dll消息的错误,请在这里search包含dll的软件包 – https://cygwin.com/cgi-bin2/package-grep.cgi 。 input缺less的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的安装程序也会重新build立基础,我不会冒险到这里
作为一个cygwin用户我同意以前的职位。
需要:grep,sed,awk,cut,diff,comm,vim,OpenSSH,tar,gzip,bash,wget
至于太空,我同意伊恩。 小的价格来支付空间。 现在,您可以获得100美元以下的1TB 10,000 RPM驱动器。 我记得我们每个人都需要支付超过$ 150.00的20.00 GB的驱动器。
如果您真的关心本地硬盘空间,请尝试将自己的NAS存储盒放置在您的networking上,并将“下载的软件包”存储到其中。 这将进一步减less您自己的机器上的足迹。
对于Cygwin来说,这是一个很小的代价。