Wie installiere ich Cygwin-Komponenten über die Befehlszeile?

178

Gibt es im Cygwin-Paket ein Tool, das apt-getDebian oder yumRedhat ähnelt und es mir ermöglicht, Komponenten über die Befehlszeile zu installieren?

vy32
quelle
2
Stack Overflow ist eine Site für Programmier- und Entwicklungsfragen. Diese Frage scheint nicht zum Thema zu gehören, da es nicht um Programmierung oder Entwicklung geht. Weitere Informationen zu Themen finden Sie hier in der Hilfe. Vielleicht wäre Super User ein besserer Ort, um zu fragen. Siehe auch Wo poste ich Fragen zu Dev Ops?
JWW
7
@jww, das ist nicht devops.
Pacerier

Antworten:

102

Es gibt kein spezielles Tool im Installationsprogramm 'setup.exe', das die Funktionalität von apt-get bietet. Es gibt jedoch ein Befehlszeilenpaket-Installationsprogramm für Cygwin, das separat heruntergeladen werden kann. Es ist jedoch nicht vollständig stabil und basiert auf Problemumgehungen.

apt-cyg: http://github.com/transcode-open/apt-cyg

Überprüfen Sie die Registerkarte Probleme für das Projekt, um die bekannten Probleme anzuzeigen.

Zorobabel
quelle
Vielen Dank! Genau das, was ich wissen wollte. Ich frage mich, warum sie nicht reif sind?
vy32
4
@ vy32: weil du nicht geholfen hast, sie reifer zu machen? :) Sie können nicht selbst schreiben. Jemand muss daran arbeiten. Und da ihre Benutzerfreundlichkeit sehr eingeschränkt ist (um Dateien zu überschreiben, die derzeit unter Windows verwendet werden, müssen Sie zuerst Cygwin schließen, sodass es nicht möglich ist, einen Paketmanager in geschlossenem Cygwin auszuführen :), sind nicht viele Leute interessiert.
David Ferenczy Rogožan
10
Aus einer anderen Antwort : setup-x86.exe -q -P packagename1,packagename2. Nicht so schick wie apt-getoder sogar, apt-cygaber es macht den Trick in den meisten Fällen. Und Sie können dies auch ausführen cmd.exe(nach dem Schließen von Cygwin).
kqw
2
@Steve, die Antwort von Dawid sagt, dass es zu "Salbei" verschoben wurde. stackoverflow.com/a/23143997/80772
Aal GhEEz
3
Da das ursprüngliche Projekt tot ist, schlage ich vor, diese (zum Zeitpunkt dieses Kommentars) aktive Gabel zu betrachten: github.com/kou1okada/apt-cyg
Vladimir Panteleev
136

Das Setup von Cygwin akzeptiert Befehlszeilenargumente , um Pakete über die Befehlszeile zu installieren.

zB setup-x86.exe -q -P packagename1,packagename2um Pakete ohne GUI-Interaktion zu installieren ('unbeaufsichtigter Setup-Modus').

(Beachten Sie, dass Sie setup-x86.exeoder setup-x86_64.exeentsprechend verwenden müssen.)

Die Paketliste finden Sie unter http://cygwin.com/packages/ .

jturney
quelle
5
Nett! setup.exe heißt jetzt setup-x86.exe - oder eine Variante, die von den CPU-Bits abhängt. Siehe auch hier für die Paketliste cygwin.com/packages
ErichBSchulz
2
Um mehrere Pakete anzugeben, trennen Sie diese durch Kommas. Beispiel: setup-x86_64 --packages="openssh,python"
Geben Sie unter
Es scheint keine Möglichkeit zu geben, bestimmte Versionen einzurichten.
CMCDragonkai
@jturney, ist das stabil?
Pacerier
1
@ Pacerier, es ist unklar, was Sie fragen. Dies sollte eine Funktion des Setups sein, auf die Sie sich sicher verlassen können.
Jturney
133

Für ein bequemeres Installationsprogramm möchten Sie möglicherweise apt-cygals Paketmanager verwenden. Die Syntax ähnelt der apt-get, was ein Plus ist. Befolgen Sie dazu die obigen Schritte und verwenden Sie Cygwin Bash für die folgenden Schritte

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin

Nun apt-cygist das installiert. Hier sind einige Beispiele für die Installation einiger Pakete

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
Sagunmen
quelle
17
Verwenden Sie natürlich setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim für 64-Bit-Fenster.
Arun
3
Muss --no-check-certificate zum Befehl wget hinzufügen. Ansonsten super.
Akauppi
Und jetzt ist es eine 404 (nach ein paar Weiterleitungen)
Shadow
Einfach ausprobiert wgetund es wird apt-cygohne Probleme heruntergeladen . Ab wann erscheint der 404?
Sagunms
1
wget wird nicht standardmäßig mit cygwin installiert, was bedeutet, dass dies mit einer manuellen und nicht programmatischen Installation gebootet werden muss.
51

Es gibt einige Skripte, die als einfache Paketmanager für Cygwin verwendet werden können. Aber es ist wichtig zu wissen, dass sie wegen ... ähm ... Windows immer ziemlich begrenzt sein werden .

Das Installieren oder Entfernen von Paketen ist in Ordnung. Jeder Paketmanager für Cygwin kann dies tun. Das Aktualisieren ist jedoch problematisch, da Sie mit Windows eine derzeit ausgeführte ausführbare Datei nicht überschreiben können. Sie können also keine z. B. Cygwin-DLL oder ein Paket aktualisieren, das die aktuell ausgeführte ausführbare Datei von Cygwin selbst enthält. Es gibt auch diesen Hinweis auf der Cygwin-Installationsseite :

"Der Hauptgrund dafür, dass es keinen umfassenderen Paketmanager gibt, ist, dass ein solches Programm vollen Zugriff auf alle POSIX-Funktionen von Cygwin benötigt. Dies ist jedoch in einer Cygwin-freien Umgebung, wie sie zuerst vorhanden ist, schwierig bereitzustellen Außerdem lässt Windows das Überschreiben von ausführbaren Dateien nicht einfach zu. Daher ist die Installation einer neuen Version der Cygwin-DLL, während ein Paketmanager die DLL verwendet, problematisch. "

Das Setup von Cygwin verwendet die Windows-Registrierung, um verwendete ausführbare Dateien zu überschreiben. Diese Methode erfordert einen Neustart von Windows . Daher ist es besser, alle Cygwin-Prozesse vor dem Aktualisieren von Paketen zu schließen , damit Sie Ihren Computer nicht neu starten müssen, um die Änderungen tatsächlich zu übernehmen. Die Installation eines neuen Pakets sollte völlig problemlos sein. Ich glaube, keiner der Paketmanager außer Cygwins setup.exeimplementiert eine Methode zum Überschreiben der verwendeten Dateien. Es würde also einfach fehlschlagen, wenn sie nicht überschrieben werden können.


Einige Paketmanager für Cygwin:

apt-cyg

Update : Das Repository wurde kürzlich aufgrund von Urheberrechtsproblemen deaktiviert ( DMCA-Deaktivierung ). Es sieht so aus, als hätte der Eigentümer des Repositorys den DMCA-Takedown für sein eigenes Repository ausgestellt und ein neues Projekt namens Sage erstellt (siehe unten).

Das beste für mich. Einfach weil es eines der neuesten ist. Es verwendet nicht Cygwins setup.exe, sondern implementiert neu, was es setup.exetut. Es funktioniert korrekt für beide Plattformen - x86 sowie x86_64 . Es gibt viele Gabeln mit mehr oder weniger zusätzlichen Funktionen. Zum Beispiel ist die kou1okada-Gabel eine der verbesserten Versionen , was wirklich großartig ist.

apt-cyg ist nur ein Shell-Skript, es gibt keine Installation. Laden Sie es einfach herunter (oder klonen Sie das Repository), machen Sie es ausführbar und kopieren Sie es irgendwo in den PATH:

chmod +x apt-cyg # set executable bit
mv apt-cyg /usr/local/bin # move somewhere to PATH
# ...and use it:
apt-cyg install vim

Es gibt auch eine Reihe von Gabeln mit verschiedenen Funktionen.


Salbei

Ein weiterer Paketmanager, der als Shell-Skript implementiert ist. Ich habe es nicht ausprobiert, aber es sieht tatsächlich gut aus.

Es kann nach Paketen in einem Repository suchen, Pakete in einer Kategorie auflisten, Abhängigkeiten überprüfen, Paketdateien auflisten und vieles mehr. Es verfügt über Funktionen, die andere Paketmanager nicht haben.


cyg-apt

Gabel des verlassenen Originals cyg-aptmit Verbesserungen und Bugfixes. Es hat viele Funktionen und ist in Python implementiert. Die Installation erfolgt mit make.


Chocolateys Cyg-Get

Wenn Sie Chocolatey zur Installation von Cygwin verwendet haben, können Sie das Paket cyg-get installieren , das eigentlich ein einfacher Wrapper um Cygwinssetup.exe in PowerShell geschrieben ist.


Cygwins setup.exe

Es hat auch einen Befehlszeilenmodus . Darüber hinaus können Sie alle installierten Pakete gleichzeitig aktualisieren (wie apt-get upgradeunter Debian-basiertem Linux).

Anwendungsbeispiel:

setup-x86_64.exe -q --packages=bash,vim

Sie können einen Alias ​​zur einfacheren Verwendung erstellen, zum Beispiel:

alias cyg-get="/cygdrive/d/path/to/cygwin/setup-x86_64.exe -q -P"

Dann können Sie beispielsweise das Vim- Paket installieren mit:

cyg-get vim

David Ferenczy Rogožan
quelle
3
sageist eine Abzweigung der apt-cygaktivsten Mitwirkenden der letzten ein oder zwei Jahre (Steven Penny). Es scheint, dass er Anfang dieses Jahres einige Meinungsverschiedenheiten mit dem ursprünglichen apt-cygAutor (Stephen Jungels) hatte und die DMCA-Abschaltung herausgab, als er das Projekt gabelte. Da Jungels (auch bekannt als Transcode) nachweislich der ursprüngliche Autor des Projekts ist, hat GitHub das ursprüngliche Projekt bald darauf wiederhergestellt. Derzeit sind beide Projekte verfügbar - obwohl das ursprüngliche Projekt seit der Aufteilung keine neuen Code-Updates erhalten hat. Es ist wirklich eine unordentliche Situation.
Anthony Geoghegan
setup-x86_64.exe -q --packages = bash, vim. Dieser Ansatz hat mir in der Vergangenheit geholfen. Führen Sie es einfach über die Befehlszeile aus und es funktioniert reibungslos.
TheWalkingData
9

Laden Sie zuerst das Installationsprogramm herunter unter: https://cygwin.com/setup-x86_64.exe (Windows 64bit), dann:

# move installer to cygwin folder
mv C:/Users/<you>/Downloads/setup-x86_64.exe C:/cygwin64/

# add alias to bash_aliases
echo "alias cygwin='C:/cygwin64/setup-x86_64.exe -q -P'" >> ~/.bash_aliases
source ~/.bash_aliases

# add bash_aliases to bashrc if missing
echo "source ~/.bash_aliases" >> ~/.profile

z.B

# install vim
cygwin vim

# see other options
cygwin --help
Jason
quelle
Ich verwende eine Methode, die dieser sehr ähnlich ist, und sie funktioniert sehr gut für mich, vorausgesetzt, Sie kennen die Namen der Pakete, die Sie im Voraus installieren möchten, also ;-)
Gary Doublé
sehr einfache Lösung. habe gerade den Alias ​​zu .bashrc hinzugefügt
Ach J
4

Ich wollte eine ähnliche Lösung apt-get --print-uris, aber apt-cyg macht das leider nicht. Die folgende Lösung ermöglichte es mir, nur die benötigten Pakete mit ihren Abhängigkeiten herunterzuladen und zur Installation auf das Ziel zu kopieren. Hier ist ein Bash-Skript, das die Ausgabe von apt-cygin eine Liste von URIs analysiert :

#!/usr/bin/bash

package=$1
depends=$( \
    apt-cyg depends $package \
    | perl -ne 'while ($x = /> ([^>\s]+)/g) { print "$1\n"; }' \
    | sort \
    | uniq)
depends=$(echo -e "$depends\n$package")
for curpkg in $depends; do
    if ! grep -q "^$curpkg " /etc/setup/installed.db; then
    apt-cyg show $curpkg \
        | perl -ne '
            if ($x = /install: ([^\s]+)/) { 
                print "$1\n"; 
            }
            if (/\[prev\]/) { 
                exit; 
            }'
    fi
done

Im obigen Abschnitt werden die Pfade der Pakete, die heruntergeladen werden müssen, relativ zum Cygwin Mirror-Stammverzeichnis ausgedruckt, wobei bereits installierte Pakete weggelassen werden. Um sie herunterzuladen, habe ich die Ausgabe in eine Datei geschrieben cygwin-packages-listund dann wget verwendet:

mirror=http://cygwin.mirror.constant.com/
uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done)
wget -x $uris

Das Installationsprogramm kann dann zur Installation aus einem lokalen Cache-Verzeichnis verwendet werden. Beachten Sie, dass ich dafür setup.iniaus dem vorherigen Cygwin-Paket-Cache in das Verzeichnis mit den heruntergeladenen Dateien kopieren musste (andernfalls weiß das Installationsprogramm nicht, was was ist).

Wakjah
quelle
4

Alte Frage, aber immer noch relevant. Folgendes hat heute (26.06.16) für mich funktioniert.

Aus der Bash-Shell:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
Steve Isenberg
quelle
1
wgetoder curlist wahrscheinlich ein besseres Werkzeug dafür. (Und persönlich würde ich es in einem anderen Verzeichnis in meinem $PATHanstatt in installieren /bin.)
Keith Thompson
3

Dawid Ferenczys Antwort ist ziemlich vollständig, aber nachdem ich fast alle seine Optionen ausprobiert habe, habe ich festgestellt, dass der Chocolatey Cyg-Get ist der beste war (zumindest der einzige, den ich zur Arbeit bringen konnte).

Ich wollte installieren wget, die Schritte waren folgende:

choco install cyg-get

Dann:

cyg-get wget
Fabriciorissetto
quelle
1

Normalerweise muss man vor der Installation eines Pakets den genauen Namen kennen:

# define a string to search
export to_srch=perl

# get html output of search and pick only the cygwin package names
wget -qO- "https://cygwin.com/cgi-bin2/package-grep.cgi?grep=$to_srch&arch=x86_64" | \
perl -l -ne 'm!(.*?)<\/a>\s+\-(.*?)\:(.*?)<\/li>!;print $2'

# and install 
# install multiple packages at once, note the
setup-x86_64.exe -q -s http://cygwin.mirror.constant.com -P "<<chosen_package_name>>"
Yordan Georgiev
quelle