Gibt es im Cygwin-Paket ein Tool, das apt-get
Debian oder yum
Redhat ähnelt und es mir ermöglicht, Komponenten über die Befehlszeile zu installieren?
Gibt es im Cygwin-Paket ein Tool, das apt-get
Debian oder yum
Redhat ähnelt und es mir ermöglicht, Komponenten über die Befehlszeile zu installieren?
Antworten:
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.
setup-x86.exe -q -P packagename1,packagename2
. Nicht so schick wie apt-get
oder sogar, apt-cyg
aber 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).
Das Setup von Cygwin akzeptiert Befehlszeilenargumente , um Pakete über die Befehlszeile zu installieren.
zB setup-x86.exe -q -P packagename1,packagename2
um Pakete ohne GUI-Interaktion zu installieren ('unbeaufsichtigter Setup-Modus').
(Beachten Sie, dass Sie setup-x86.exe
oder setup-x86_64.exe
entsprechend verwenden müssen.)
Die Paketliste finden Sie unter http://cygwin.com/packages/ .
setup-x86_64 --packages="openssh,python"
Für ein bequemeres Installationsprogramm möchten Sie möglicherweise
apt-cyg
als 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-cyg
ist 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
wget
und es wird apt-cyg
ohne Probleme heruntergeladen . Ab wann erscheint der 404?
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.exe
implementiert eine Methode zum Überschreiben der verwendeten Dateien. Es würde also einfach fehlschlagen, wenn sie nicht überschrieben werden können.
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.exe
tut. 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.
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.
Gabel des verlassenen Originals cyg-aptmit Verbesserungen und Bugfixes. Es hat viele Funktionen und ist in Python implementiert. Die Installation erfolgt mit make
.
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.
Es hat auch einen Befehlszeilenmodus . Darüber hinaus können Sie alle installierten Pakete gleichzeitig aktualisieren (wie apt-get upgrade
unter 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
sage
ist eine Abzweigung der apt-cyg
aktivsten Mitwirkenden der letzten ein oder zwei Jahre (Steven Penny). Es scheint, dass er Anfang dieses Jahres einige Meinungsverschiedenheiten mit dem ursprünglichen apt-cyg
Autor (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.
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
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-cyg
in 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-list
und 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.ini
aus dem vorherigen Cygwin-Paket-Cache in das Verzeichnis mit den heruntergeladenen Dateien kopieren musste (andernfalls weiß das Installationsprogramm nicht, was was ist).
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
wget
oder curl
ist wahrscheinlich ein besseres Werkzeug dafür. (Und persönlich würde ich es in einem anderen Verzeichnis in meinem $PATH
anstatt in installieren /bin
.)
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
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>>"