Wie kann ich Cygwin verwenden, ohne HD-Speicherplatz zu verschwenden? [geschlossen]

7

Ich liebe es, Cygwin zu verwenden , aber ich hasse all den zusätzlichen Speicherplatz, der anscheinend Caching-Material verwendet, das ich nicht benötige. Was kann ich löschen, um meinen Installationsbedarf so gering wie möglich zu halten?

Was ist ein guter Barebone-Satz von Paketen, der mir das Wesentliche bietet, ohne Flusen, die ich wahrscheinlich nie ausführen werde?

Chris Marasti-Georg
quelle

Antworten:

6

Einige Leute scheinen davon auszugehen, dass es einfach ist, die Hardware auf der von dieser Person verwendeten Plattform auszutauschen. Es kann sehr gut sein, dass 500 MB tatsächlich viel Platz zum Opfern bedeuten, wenn sie möglicherweise einen CF-Adapter und eine 4-GB-Karte verwenden, um Windows auf einem Netbook oder ähnlichem auszuführen. Oder sie installieren es auf einem virtuellen Image, und diese zusätzlichen Informationen bedeuten den Unterschied, ob es auf eine entpackte DVD passt oder mehrere DVDs umfassen muss, und ob die damit verbundenen Probleme behoben werden, insbesondere wenn es an einen Client gesendet wird, der dies tut ist zum Beispiel nicht besonders technisch; Internes Schulungsmaterial für die Anwendung, die Ihr Unternehmen entwickelt. Ein definiertes Bild zu haben, das für alle Auszubildenden gleich ist, wirkt Wunder, macht die Umgebung homogen und erleichtert dem Trainer das Leben.

Lösen Sie das Problem, nach dem der Benutzer gefragt hat, oder stellen Sie ihm eine Frage, um weitere Informationen zu erhalten.

MÖGLICHE LÖSUNG:

Zeigen Sie bei der Installation von Cygwin auf dem Bildschirm, auf dem Sie gefragt werden, wo Ihre Pakete gespeichert werden sollen, auf einen bestimmten Speicherort, z. B. c: \ Cygwin \ Packages. Installieren Sie es wie gewohnt und führen Sie es aus, um zu überprüfen, ob es ordnungsgemäß funktioniert. Löschen Sie den Ordner, in dem die Pakete gespeichert sind. Wenn dies für Updates erforderlich ist, lädt Cygwin ihn erneut herunter. Dies ist nicht die effektivste Nutzung der Bandbreite, aber je nach Ihren Anforderungen ist es möglicherweise besser, den Cache lokal zu behalten.

Eine andere Möglichkeit besteht darin, diese Pakete zu installieren. Wenn Sie dies jedoch zum ersten Mal tun, speichern Sie die Pakete an einem anderen Ort wie einem USB-Laufwerk

Dan
quelle
1
Ich frage mich, ob es eine Möglichkeit gibt, den tmp-Ordner regelmäßig zu löschen.
CMCDragonkai
1
@CMCDragonkai, Ein einfaches Selbstskript würde reichen?
Pacerier
6

Ich stelle fest, dass meine aktuelle Installation weniger als 250 MB groß ist. Sie müsste viermal so groß sein, bevor ich mich auf meinem Laptop darum kümmern kann.

Aber wenn Sie es kleiner machen müssen ...

Laden Sie das Installationsprogramm herunter . Speichern Sie es unter c: \ cygwin \ setup.exe. Führen Sie das Installationsprogramm aus. Deaktivieren Sie so viele Pakete wie möglich. Beachten Sie, dass bei Auswahl eines Pakets mit Anforderungen die erforderlichen Pakete automatisch ausgewählt werden. Entfernen Sie den Installationscache (der standardmäßig c: \ cygwin (http | ftp) oder etwas anderes sein sollte. Führen Sie das Installationsprogramm erneut aus c: \ setup.exe aus und versuchen Sie, weitere Pakete zu deinstallieren. Wiederholen Sie diesen Vorgang, bis das Installationsprogramm so klein ist, wie Sie möchten.

Beachten Sie, dass es eine Reihe grundlegender Bibliothekspakete geben wird, die selbst bei der minimalsten Installation erforderlich sind. Ich habe es in der Vergangenheit (vor ungefähr einem Jahr) auf unter 100 Megabyte reduziert, während ich immer noch alles habe, was ich jemals in Bezug auf Bash-Scripting darauf geworfen habe.

Brian De Smet
quelle
1
"Laptop"? Führen Sie einen richtigen Mehrbenutzerserver auf einem Laptop aus?
Pacerier
2

Ich kann Windows nicht verwenden, ohne Cygwin zu installieren, aber ich hatte nie wirklich ein großes Problem damit, Speicherplatz zu verwenden. Ich denke, Sie können den Ordner löschen, in dem Cygwin die Pakete speichert, aber jedes Mal, wenn Sie Cygwin aktualisieren, werden die benötigten Pakete heruntergeladen.

Was ein Barebone-Setup betrifft, hängt es wirklich davon ab, was Sie brauchen. Ich beginne mit der Basisinstallation von Cygwin und füge OpenSSH, Cron, RXVT, Screen, Vim, Git, Curl, Zip / Unzip und Wget hinzu. Das sind fast alle Werkzeuge, die ich brauche, aber ich installiere einfach etwas anderes, wenn es nötig ist.

Sam Merrell
quelle
1

Anstelle von Cygwin könnten Sie auch mehr Pakete verwenden, die nicht alle Probleme lösen sollen, die Cygwin lösen möchte. Es gibt Pakete mit Unix-Dienstprogrammen mit nur einer begrenzten Auswahl der am häufigsten verwendeten Programme.

Unix Utilties für Windows ist das, was ich damals verwendet habe, aber es scheint ein totes Projekt zu sein.

GnuWin32 scheint noch zu leben.

Brian De Smet
quelle
1

Ich würde mit dem grundlegenden Cygwin-Paket beginnen und 'Seitenfehler' in allen zusätzlichen Befehlen, die Sie benötigen. Ich führe eine Liste gängiger Dienstprogramme, die ich verwende, die sich jedoch möglicherweise erheblich von den von Ihnen verwendeten unterscheiden. Sie NICHT wählen alle Pakete , wenn Sie Cygwin installieren. Ich habe das einmal gemacht und es hat ungefähr 6 GB gedauert. Ich dachte damals, ich müsste mir nie Sorgen machen, kein Programm zu haben. Es war eine schlechte Idee.

Mein Windows XP-Computer verfügt über 1,1 GB Service Pack-Deinstallationsdaten. Ich würde diese Dateien gut löschen, bevor ich versuche, Cygwin zu reduzieren. Versuchen Sie es mit dem WinDirStat- Programm und sehen Sie, wohin Ihr gesamter Festplattenspeicher geht - es ist wahrscheinlich nicht Cygwin. Außerdem sollten Sie von Zeit zu Zeit wahrscheinlich C: \ cygwin \ tmp löschen, da dies beim Neustart nicht gelöscht wird.

Brianegge
quelle
Ich habe die verbleibenden SP-MSIs bereits gelöscht und verwende WinDirStat häufig zum Trimmen von Cruft. Danke für die Vorschläge :)
Chris Marasti-Georg
1

Sie könnten von CygWin zu Gow wechseln , einer leichten Alternative zu CygWin (ungefähr 10-mal leichter).

Arialdo Martini
quelle
1

Wenn Sie die Setup-Dateien mehrmals abgerufen haben, werden Sie feststellen, dass nicht verwendete Dateien zurückbleiben ...

So bereinigen Sie ein Cygwin-Installationsset (nicht die installierte Codebasis, sondern das Paket, mit dem die Installation durchgeführt wurde ...

Ich glaube, ich habe irgendwo ein Perl-Skript gesehen, um dies zu tun, aber versuchen Sie diesen Java-Code, um ein Cygwin-Setup zu bereinigen:

    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");
                            }
                    }
            }
    }
Lou Fiorino
quelle
1

Ich habe mit Cygwin experimentiert und versucht, eine "Bare-Bones", minimale Installation zu bekommen. Ich finde, dass die Installation von Dienstprogrammen wie grep, gawk, sed und ähnlichen Tools Abhängigkeiten von Cygwin, Base-Cygwin und manchmal unerwünschten Tools wie Bash, Coreutils usw. aufweist. Ich habe nicht versucht, vollständig zu verstehen, warum diese Abhängigkeit besteht, aber das ist nicht meine Tor. Ich wollte nur die Tools und die erforderlichen DLLs installieren und begann, das Cygwin-Paket zu untersuchen. Ich habe festgestellt, dass die Nichtverwendung der von Cygwin bereitgestellten setup.exe eine alternative Möglichkeit ist, minimale Cygwin-Installationen durchzuführen. Und so habe ich es geschafft.

  1. Verwenden Sie die von Cygwin bereitgestellte setup.exe, um alle Pakete herunterzuladen - nur herunterladen und nicht installieren.
  2. Sobald der Download erfolgreich abgeschlossen wurde, befinden sich einzelne Pakete wie zlib, gawk, grep, libiconv im Verzeichnis x86 / release oder x86_64 / release.
  3. Jedes Paket wird mit dem Tool 'xz' oder bzip 'tar'red und komprimiert und in den entsprechenden Verzeichnissen gespeichert.
  4. Um ein bestimmtes Tool wie sed oder gawk zu installieren, müssen Sie lediglich die ausführbare Datei des Tools und ihre Abhängigkeiten (.dll) extrahieren.

    Bevor Sie Folgendes versuchen, stellen Sie bitte sicher, dass Sie über ein Tool wie 7z.exe, xz.exe, bzip2 oder ein anderes verfügen, mit dem ein .xz- oder bzip-Archiv dekomprimiert werden kann

Beispiel für die Installation von gawk unten:

  1. Extrahieren Sie gawk.exe aus dem Archiv gawk-4.1.3-1.tar.xz mit dem Befehl - 7z.exe e -so gawk-4.1.3-1.tar.xz | tar xvf -
  2. Sobald dies erledigt ist, sollten Sie gawk.exe normalerweise in einem Unterordner finden, usr / bin unter dem Ordner release / gawk
  3. Finden Sie die Abhängigkeiten für gawk - Sie können dies auf verschiedene Arten tun.

    Untersuchen Sie die Datei Cygwin setup.ini im Ordner x86 oder x86_64. Suchen Sie nach der Zeichenfolge '@ gawk' und in den Zeilen nach dieser Zeile sollten Sie eine Zeile "require:" finden, in der die Abhängigkeiten aufgeführt sind.

    Meins lautet wie folgt: "erfordert: bash cygwin libgmp10 libintl8 libmpfr4 libreadline7"

Damit gawk ausgeführt werden kann, ist bash kein Muss, da wir die Windows-Befehlsshell haben. (Bash ist enthalten, um ein paar andere DLLs zu erhalten, die von Gawk benötigt werden. Dies führt jedoch dazu, dass viel mehr unnötige Dateien installiert werden.) Die anderen Abhängigkeiten enthalten Dateien, die gawk ausführen muss. Extrahieren Sie jedes der oben genannten Pakete mit Tools wie 7z oder xz in einzelne Dateien.

Nachdem alle Abhängigkeiten extrahiert wurden, kopieren Sie die benötigten Tools (grep / sed / gawk) in einen Ordner und alle abhängigen DLLs. Sie sollten nun in der Lage sein, Ihr Tool mit dem Mindestsatz an DLLs auszuführen, die in einem Bare erforderlich sind -Bones Cygwin Installation.

Achtung: Es reicht möglicherweise nicht aus, nur die in setup.ini aufgeführten Abhängigkeiten für jedes Tool zu extrahieren. Manchmal müssen Sie das Tool möglicherweise ausführen / ausführen, um festzustellen, dass weitere DLLs erforderlich sind.

Es gibt andere Möglichkeiten, die von einer exe benötigten DLLs herauszufinden - Sie können dumpbin von MS oder Dependency Walker, ndepends oder ähnlichen Tools verwenden, um die Liste der abhängigen DLLs zu finden

Konsultieren Sie - /programming/362560/how-do-i-detect-the-dlls-required-by-an-application /programming/475148/how-do-i -find-out-which-dlls-eine-ausführbare-Datei-wird geladen

Ich habe auch die abhängigen DLL-Informationen brutal erzwungen, indem ich einfach das Tool ausgeführt und die fehlenden DLLs nacheinander installiert habe, indem ich sie aus den erforderlichen Paketen extrahiert habe.

Wenn Sie eine Exe ausführen und ein Fehler mit einer fehlenden DLL-Nachricht auftritt, suchen Sie hier nach dem Paket, das die DLL enthält - https://cygwin.com/cgi-bin2/package-grep.cgi . Geben Sie den vollständigen / teilweisen Namen der fehlenden DLL ein, um den Namen des Pakets zu finden, das die DLL enthält.

Schließlich habe ich eine reine Cygwin-Installation mit nur den Tools und DLLs erhalten, die ich benötige. Beispiel: gawk - gawk.exe und die folgenden DLLs - 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 und dlls - cygwin1.dll, cygintl-8.dll

Hoffe das wird nützlich gefunden. Das Cywin-Installationsprogramm führt auch eine DLL-Neuausrichtung durch, auf die ich hier nicht eingehen werde

Agnatha
quelle
0

Als Cygwin-Benutzer stimme ich den beiden vorherigen Beiträgen zu.

BEDÜRFNISSE: grep, sed, awk, cut, diff, comm, vim, OpenSSH, teer, gzip, bash, wget

Was den Platz betrifft, stimme ich Ian zu. Kleiner Preis für Platz zu zahlen. Sie können jetzt ein Laufwerk mit 1 TB und 10.000 U / min für unter 100,00 USD erwerben. Ich kann mich erinnern, als wir alle über 150,00 USD für ein 20,00-GB-Laufwerk bezahlen mussten.

Wenn Sie sich wirklich Sorgen um den lokalen Speicherplatz machen, versuchen Sie, sich eine NAS-Speicherbox in Ihrem Netzwerk zu besorgen und die "heruntergeladenen Pakete" darin zu speichern. Dadurch wird der Platzbedarf auf Ihrer eigenen Maschine weiter reduziert.

Es ist wirklich ein kleiner Preis für Cygwin.

Netlinxman
quelle
Es gibt keine 1-TB-Laufwerke mit 10.000 U / min auf dem Markt. Die 1-TB-Laufwerke sind 5400pm oder 7200rpm.
Brian De Smet
Richtig, ich habe mir ein WDC-Laufwerk, Western Digital WDH1Q10000N, angesehen und eine falsche Annahme gemacht.
Netlinxman