Come installo i componenti cygwin dalla riga di comando?


178

Esiste uno strumento nel pacchetto Cygwin simile a quello apt-getsu Debian o yumsu redhat che mi consente di installare componenti dalla riga di comando?


2
Stack Overflow è un sito per domande di programmazione e sviluppo. Questa domanda sembra essere fuori tema perché non si tratta di programmazione o sviluppo. Consulta quali argomenti posso chiedere qui nel Centro assistenza. Forse Super User sarebbe un posto migliore per chiedere. Vedi anche Dove posso pubblicare domande su Dev Ops?
1616

7
@jww, questo non è devops.
Pacerier

Risposte:


102

Non esiste uno strumento specifico nel programma di installazione 'setup.exe' che offre le funzionalità di apt-get. Esiste, tuttavia, un programma di installazione del pacchetto da riga di comando per Cygwin che può essere scaricato separatamente, ma non è del tutto stabile e si basa su soluzioni alternative.

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

Controlla la scheda problemi per il progetto per vedere i problemi noti.


Grazie! Proprio quello che volevo sapere. Mi chiedo perché non siano maturi?
vy32,

4
@ vy32: perché non hai aiutato a farli maturare? :) Non possono scrivere da soli. Qualcuno deve lavorarci sopra. E poiché la loro usabilità è piuttosto limitata (per sovrascrivere i file attualmente in uso su Windows devi prima chiudere Cygwin, quindi non è possibile eseguire alcun gestore di pacchetti in Cygwin chiuso :), non ci sono molte persone interessate.
David Ferenczy Rogožan,

10
Da un'altra risposta: setup-x86.exe -q -P packagename1,packagename2. Non è lussuoso come apt-geto addirittura, apt-cygma fa il trucco nella maggior parte dei casi. E puoi anche eseguirlo da cmd.exe(dopo aver chiuso Cygwin).
kqw,

2
@Steve, la risposta di Dawid dice che è passato al "saggio". stackoverflow.com/a/23143997/80772
anguilla ghEEz

3
Poiché il progetto originale è morto, suggerisco di guardare questo fork attivo (al momento di questo commento): github.com/kou1okada/apt-cyg
Vladimir Panteleev,

136

L'installazione di Cygwin accetta argomenti della riga di comando per installare pacchetti dalla riga di comando.

ad es. setup-x86.exe -q -P packagename1,packagename2per installare i pacchetti senza alcuna interazione con la GUI ("modalità di installazione automatica").

(Nota che devi usare setup-x86.exeo setup-x86_64.execome appropriato.)

Vedi http://cygwin.com/packages/ per l'elenco dei pacchetti.


5
Bello! setup.exe è ora chiamato setup-x86.exe - o una variante a seconda dei bit della cpu. Vedi anche qui per l'elenco dei pacchetti cygwin.com/packages
ErichBSchulz,

2
Inoltre, per specificare più pacchetti, separarli con virgole. ad es. in DOS, digitaresetup-x86_64 --packages="openssh,python"
Michael Scheper

Non sembra esserci un modo per impostare versioni specifiche.
CMCDragonkai,

@jturney, è stabile?
Pacerier

1
@Pacerier, Non è chiaro cosa stai chiedendo. Questa dovrebbe essere una caratteristica dell'installazione su cui è sicuro fare affidamento.
jturney,

134

Per un programma di installazione più conveniente, potresti voler utilizzare apt-cygcome gestore dei pacchetti. La sua sintassi simile a apt-get, che è un vantaggio. Per questo, seguire i passaggi precedenti e quindi utilizzare Cygwin Bash per i seguenti passaggi

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

Ora che apt-cygè installato. Ecco alcuni esempi di installazione di alcuni pacchetti

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates

17
Ovviamente usa setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim per windows a 64 bit.
Arun,

3
Necessario aggiungere --no-check-certificate al comando wget. Altrimenti, superbo.
akauppi

E ora è un 404 (dopo alcuni reindirizzamenti)
Shadow

Ho appena provato wgete si scarica apt-cygsenza problemi. A che punto appare il 404?
sagunms,

1
wget non è installato di default con cygwin, il che significa che deve essere avviato con un'installazione manuale e non programmatica.

51

Esistono alcuni script, che possono essere utilizzati come semplici gestori di pacchetti per Cygwin. Ma è importante sapere che saranno sempre piuttosto limitati , a causa di ... ehm ... Windows.

L'installazione o la rimozione di pacchetti va bene, ogni gestore di pacchetti per Cygwin può farlo. Ma l'aggiornamento è un problema poiché Windows non ti consente di sovrascrivere un eseguibile, che è attualmente in esecuzione. Quindi non è possibile aggiornare, ad esempio, Cygwin DLL o qualsiasi pacchetto che contiene l'eseguibile attualmente in esecuzione dallo stesso Cygwin. C'è anche questa nota nella pagina di installazione di Cygwin :

"La ragione di base per non avere un gestore di pacchetti più completo è che un tale programma avrebbe bisogno di pieno accesso a tutte le funzionalità POSIX di Cygwin. Ciò è, tuttavia, difficile da fornire in un ambiente privo di Cygwin, come esiste all'inizio installazione. Inoltre, Windows non consente facilmente la sovrascrittura di eseguibili in uso, pertanto l'installazione di una nuova versione della DLL Cygwin mentre un gestore di pacchetti utilizza la DLL è problematica. "

L'installazione di Cygwin utilizza il registro di Windows per sovrascrivere gli eseguibili in uso e questo metodo richiede un riavvio di Windows . Pertanto, è meglio chiudere tutti i processi Cygwin prima di aggiornare i pacchetti , quindi non è necessario riavviare il computer per applicare effettivamente le modifiche. L'installazione di un nuovo pacchetto dovrebbe essere completamente senza problemi. Non credo che nessuno dei gestori di pacchetti, tranne Cygwin, abbia setup.exeimplementato alcun metodo per sovrascrivere i file in uso, quindi fallirebbe semplicemente se non potesse sovrascriverli.


Alcuni gestori di pacchetti per Cygwin:

apt-CYG

Aggiornamento : il repository è stato disattivato di recente a causa di problemi di copyright ( rimozione DMCA ). Esso si presenta come il proprietario del repository ha emesso il DMCA takedown sul proprio repository e ha creato un nuovo progetto chiamato Sage (vedi sotto).

Il migliore per me. Semplicemente perché è uno dei più recenti. Non usa Cygwin setup.exe, piuttosto reimplementa, cosa setup.exefa. Funziona correttamente per entrambe le piattaforme - x86 e x86_64 . Ci sono molte forcelle con più o meno funzionalità aggiuntive. Ad esempio, la forcella kou1okada è una delle versioni migliorate , il che è davvero eccezionale.

apt-cyg è solo uno script di shell, non c'è installazione. Basta scaricarlo (o clonare il repository), renderlo eseguibile e copiarlo da qualche parte nel PERCORSO:

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

C'è anche un sacco di forchette con caratteristiche diverse.


saggio

Un altro gestore di pacchetti implementato come script di shell. Non l'ho provato ma in realtà sembra buono.

Può cercare i pacchetti in un repository, elencare i pacchetti in una categoria, controllare le dipendenze, elencare i file dei pacchetti e altro. Ha funzionalità che altri gestori di pacchetti non hanno.


CYG-apt

Forcella di originale abbandonato CYG-aptcon miglioramenti e correzioni di bug. Ha molte funzionalità ed è implementato in Python. L'installazione viene eseguita utilizzando make.


Cioccolatoso di Chocolatey

Se hai usato Chocolatey per installare Cygwin, puoi installare il pacchetto cyg-get , che in realtà è un semplice wrapper per Cygwin setup.exescritto in PowerShell.


Setup.exe di Cygwin

Ha anche una modalità da riga di comando . Inoltre, consente di aggiornare contemporaneamente tutti i pacchetti installati (come apt-get upgradesu Linux basato su Debian).

Esempio di utilizzo:

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

È possibile creare un alias per un utilizzo più semplice, ad esempio:

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

Quindi, ad esempio, puoi installare il pacchetto Vim con:

cyg-get vim


3
sageè un fork dei apt-cygsuoi collaboratori più attivi negli ultimi due anni (Steven Penny). Sembra che all'inizio di quest'anno abbia avuto un po 'di disaccordo con l' apt-cygautore originale (Stephen Jungels) e abbia rilasciato la rimozione DMCA quando ha biforcato il progetto. Poiché Jungels (aka Transcode) è effettivamente l'autore originale del progetto, GitHub ha ripristinato il progetto originale poco dopo. Attualmente, entrambi i progetti sono disponibili, sebbene il progetto originale non abbia avuto nuovi aggiornamenti di codice dalla divisione. È una situazione disordinata, davvero.
Anthony Geoghegan,

setup-x86_64.exe -q --packages = bash, vim. Questo approccio mi ha aiutato in passato. Basta eseguirlo dalla riga di comando e funziona senza problemi.
TheWalkingData

9

Innanzitutto, scarica il programma di installazione all'indirizzo: https://cygwin.com/setup-x86_64.exe (Windows 64 bit), quindi:

# 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

per esempio

# install vim
cygwin vim

# see other options
cygwin --help

Sto usando un metodo molto simile a questo e sta funzionando molto bene per me, a condizione che tu conosca in anticipo i nomi dei pacchetti che vuoi installare, cioè :-)
Gary Doublé,

soluzione molto semplice. ho appena aggiunto l'alias a .bashrc
Ach J,

4

Volevo una soluzione simile apt-get --print-uris, ma purtroppo apt-cyg non lo fa. La seguente è una soluzione che mi ha permesso di scaricare solo i pacchetti di cui avevo bisogno, con le loro dipendenze, e di copiarli sulla destinazione per l'installazione. Ecco uno script bash che analizza l'output di apt-cygin un elenco di URI:

#!/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

Quanto sopra stamperà i percorsi dei pacchetti che devono essere scaricati, relativamente alla radice del mirror cygwin, omettendo tutti i pacchetti che sono già installati. Per scaricarli, ho scritto l'output in un file cygwin-packages-liste quindi ho usato wget:

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

Il programma di installazione può quindi essere utilizzato per l'installazione da una directory della cache locale. Notare che per far funzionare tutto ciò ho dovuto copiare setup.inida una precedente cache del pacchetto cygwin alla directory con i file scaricati (altrimenti il ​​programma di installazione non sa cosa sia).


4

Vecchia domanda, ma ancora rilevante. Ecco cosa ha funzionato per me oggi (26/06/16).

Dalla shell bash:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin

1
wgeto curlè probabilmente uno strumento migliore per questo. (E personalmente, lo installerei in qualche altra directory nella mia $PATHpiuttosto che in /bin.)
Keith Thompson

3

La risposta di Dawid Ferenczy è piuttosto completa ma dopo aver provato quasi tutte le sue opzioni ho scoperto che il cyg-get di Chocolatey era il migliore (almeno l'unico che riuscivo a far funzionare).

Volevo installare wget, i passaggi erano questi:

choco install cyg-get

Poi:

cyg-get wget

1

Di solito prima di installare un pacchetto è necessario conoscerne il nome esatto:

# 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>>"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.