Comment installer les composants cygwin à partir de la ligne de commande?

178

Y a-t-il un outil dans le paquet Cygwin similaire à apt-getsur Debian ou yumsur redhat qui me permet d'installer des composants à partir de la ligne de commande?

vy32
la source
2
Stack Overflow est un site pour les questions de programmation et de développement. Cette question semble hors sujet car elle ne concerne ni la programmation ni le développement. Consultez la rubrique Quels sujets puis-je poser ici dans le centre d'aide. Peut-être que Super User serait un meilleur endroit pour demander. Voir également Où puis-je publier des questions sur Dev Ops?
jww
7
@jww, ce n'est pas devops.
Pacerier

Réponses:

102

Il n'y a pas d'outil spécifique dans le programme d'installation de 'setup.exe' qui offre les fonctionnalités d'apt-get. Il existe cependant un programme d'installation de package en ligne de commande pour Cygwin qui peut être téléchargé séparément, mais il n'est pas entièrement stable et repose sur des solutions de contournement.

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

Consultez l'onglet Problèmes du projet pour voir les problèmes connus.

Zorobabel
la source
Merci! Juste ce que je voulais savoir. Je me demande pourquoi ils ne sont pas matures?
vy32
4
@ vy32: parce que vous n'avez pas aidé à les faire mûrir? :) Ils ne peuvent pas écrire eux-mêmes. Quelqu'un doit y travailler. Et comme leur utilisabilité est assez limitée (pour écraser les fichiers actuellement utilisés sur Windows, vous devez d'abord fermer Cygwin, il n'est donc pas possible d'exécuter un gestionnaire de paquets dans Cygwin fermé :), il n'y a pas beaucoup de gens intéressés.
David Ferenczy Rogožan
10
D' une autre réponse: setup-x86.exe -q -P packagename1,packagename2. Pas aussi sophistiqué apt-getni même, apt-cygmais cela fait l'affaire dans la plupart des cas. Et vous pouvez également l'exécuter à partir de cmd.exe(après la fermeture de Cygwin).
kqw
2
@Steve, la réponse de Dawid dit qu'elle est passée à "sage". stackoverflow.com/a/23143997/80772
eel ghEEz
3
Puisque le projet original est mort, je suggère de regarder cette fourche active (à partir de l'heure de ce commentaire): github.com/kou1okada/apt-cyg
Vladimir Panteleev
136

La configuration de Cygwin accepte les arguments de ligne de commande pour installer les packages à partir de la ligne de commande.

par exemple setup-x86.exe -q -P packagename1,packagename2pour installer des packages sans aucune interaction avec l'interface graphique ('mode d'installation sans assistance').

(Notez que vous devez utiliser setup-x86.exeou setup-x86_64.exeselon le cas.)

Voir http://cygwin.com/packages/ pour la liste des packages.

jturney
la source
5
Agréable! setup.exe est maintenant appelé setup-x86.exe - ou une variante en fonction des bits du processeur. Voir aussi ici pour la liste des paquets cygwin.com/packages
ErichBSchulz
2
De plus, pour spécifier plusieurs packages, séparez-les par des virgules. par exemple sous DOS, tapezsetup-x86_64 --packages="openssh,python"
Michael Scheper
Il ne semble pas y avoir de moyen de configurer des versions spécifiques.
CMCDragonkai
@jturney, est-ce stable?
Pacerier
1
@Pacerier, ce que vous demandez n'est pas clair. Cela devrait être une fonctionnalité de configuration sur laquelle il est sûr de se fier.
jturney
134

Pour un programme d'installation plus pratique, vous pouvez utiliser apt-cygcomme gestionnaire de paquets. Sa syntaxe similaire à apt-get, ce qui est un plus. Pour cela, suivez les étapes ci-dessus, puis utilisez Cygwin Bash pour les étapes suivantes

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

Maintenant, c'est apt-cyginstallé. Voici quelques exemples d'installation de certains packages

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
sagunms
la source
17
Utilisez évidemment setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim pour les fenêtres 64 bits.
Arun
3
Nécessaire pour ajouter --no-check-certificate à la commande wget. Sinon, superbe.
akauppi
Et maintenant c'est un 404 (après quelques redirections)
Shadow
Juste essayé wgetet il se télécharge apt-cygsans problèmes. À quel moment apparaît la 404?
sagunms
1
wget n'est pas installé par défaut avec cygwin, ce qui signifie que cela doit être amorcé avec une installation manuelle et non programmatique.
51

Il existe quelques scripts qui peuvent être utilisés comme de simples gestionnaires de paquets pour Cygwin. Mais il est important de savoir, qu'ils seront toujours assez limités , à cause de ... ehm ... Windows.

L'installation ou la suppression de packages est très bien, chaque gestionnaire de packages pour Cygwin peut le faire. Mais la mise à jour est une douleur car Windows ne vous permet pas d'écraser un exécutable, qui est actuellement en cours d'exécution. Vous ne pouvez donc pas mettre à jour par exemple la DLL Cygwin ou tout autre package contenant l'exécutable en cours d'exécution à partir du Cygwin lui-même. Il y a aussi cette note sur la page d' installation de Cygwin :

«La raison fondamentale pour laquelle il n’ya pas de gestionnaire de paquets plus complet est qu’un tel programme aurait besoin d’un accès complet à toutes les fonctionnalités POSIX de Cygwin. Cela est cependant difficile à fournir dans un environnement sans Cygwin, tel qu’il existe au début De plus, Windows n'autorise pas facilement l'écrasement des exécutables en cours d'utilisation, il est donc problématique d'installer une nouvelle version de la DLL Cygwin alors qu'un gestionnaire de packages utilise la DLL. "

La configuration de Cygwin utilise le registre Windows pour écraser les exécutables en cours d'utilisation et cette méthode nécessite un redémarrage de Windows . Par conséquent, il est préférable de fermer tous les processus Cygwin avant de mettre à jour les packages , afin de ne pas avoir à redémarrer votre ordinateur pour appliquer les modifications. L'installation d'un nouveau package devrait se faire sans aucun problème. Je ne pense pas qu'aucun des gestionnaires de paquets, à l'exception de Cygwin, n'implémente de setup.exeméthode pour écraser les fichiers en cours d'utilisation, donc cela échouerait simplement s'il ne pouvait pas les écraser.


Quelques gestionnaires de paquets pour Cygwin:

apt-cyg

Mise à jour : le référentiel a été désactivé récemment en raison de problèmes de droits d'auteur ( retrait DMCA ). Il semble que le propriétaire du référentiel ait émis le retrait DMCA sur son propre référentiel et créé un nouveau projet appelé Sage (voir ci-dessous).

Le meilleur pour moi. Tout simplement parce que c'est l'un des plus récents. Il n'utilise pas celui de Cygwin setup.exe, il réimplémente plutôt ce qui setup.exefait. Il fonctionne correctement pour les deux plates-formes - x86 ainsi que x86_64 . Il existe de nombreuses fourches avec des fonctionnalités plus ou moins supplémentaires. Par exemple, la fourche kou1okada est l'une des versions améliorées , ce qui est vraiment génial.

apt-cyg est juste un script shell, il n'y a pas d'installation. Téléchargez-le simplement (ou clonez le référentiel), rendez-le exécutable et copiez-le quelque part dans le 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

Il existe également un tas de fourches avec différentes fonctionnalités.


sauge

Un autre gestionnaire de paquets implémenté sous forme de script shell. Je ne l'ai pas essayé mais ça a l'air bien.

Il peut rechercher des packages dans un référentiel, répertorier les packages dans une catégorie, vérifier les dépendances, répertorier les fichiers de packages, etc. Il a des fonctionnalités que les autres gestionnaires de paquets n'ont pas.


cyg-apt

Fourche de l'original abandonné cyg-aptavec des améliorations et des corrections de bugs. Il a beaucoup de fonctionnalités et il est implémenté en Python. L'installation se fait en utilisant make.


Le cyg-get de Chocolatey

Si vous avez utilisé Chocolatey pour installer Cygwin, vous pouvez installer le package cyg-get , qui est en fait un simple wrapper autour de Cygwin setup.exeécrit dans PowerShell.


Setup.exe de Cygwin

Il dispose également d'un mode ligne de commande . De plus, il vous permet de mettre à jour tous les paquets installés à la fois (comme le apt-get upgradefait sur Linux basé sur Debian).

Exemple d'utilisation:

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

Vous pouvez créer un alias pour une utilisation plus facile, par exemple:

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

Ensuite, vous pouvez, par exemple, installer le package Vim avec:

cyg-get vim

David Ferenczy Rogožan
la source
3
sageest une fourchette de apt-cygpar ses contributeurs les plus actifs depuis un an ou deux (Steven Penny). Il semble que plus tôt cette année, il avait eu un certain désaccord avec l' apt-cygauteur original (Stephen Jungels) et a émis le retrait du DMCA lorsqu'il a lancé le projet. Puisque Jungels (alias Transcode) est véritablement l'auteur original du projet, GitHub a restauré le projet original peu de temps après. Actuellement, les deux projets sont disponibles - bien que le projet d'origine n'ait pas eu de nouvelles mises à jour de code depuis la scission. C'est vraiment une situation compliquée.
Anthony Geoghegan
setup-x86_64.exe -q --packages = bash, vim. Cette approche m'a aidé dans le passé. Exécutez-le simplement à partir de la ligne de commande et cela fonctionne sans problème.
TheWalkingData
9

Tout d'abord, téléchargez le programme d'installation sur: https://cygwin.com/setup-x86_64.exe (Windows 64bit), puis:

# 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

par exemple

# install vim
cygwin vim

# see other options
cygwin --help
Jason
la source
J'utilise une méthode très similaire à celle-ci et cela fonctionne très bien pour moi, à condition que vous connaissiez les noms des paquets que vous souhaitez installer à l'avance, c'est-à-dire ;-)
Gary Doublé
solution très simple. vient d'ajouter l'alias à .bashrc
Ach J
4

Je voulais une solution similaire à apt-get --print-uris, mais malheureusement, apt-cyg ne le fait pas. Voici une solution qui m'a permis de télécharger uniquement les packages dont j'avais besoin, avec leurs dépendances, et de les copier sur la cible pour l'installation. Voici un script bash qui analyse la sortie de apt-cygdans une liste d'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

Ce qui précède affichera les chemins des paquets qui doivent être téléchargés, par rapport à la racine du miroir cygwin, en omettant tous les paquets déjà installés. Pour les télécharger, j'ai écrit la sortie dans un fichier cygwin-packages-list, puis j'ai utilisé wget:

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

Le programme d'installation peut ensuite être utilisé pour installer à partir d'un répertoire de cache local. Notez que pour que cela fonctionne, j'avais besoin de copier à setup.inipartir d'un cache de package cygwin précédent dans le répertoire avec les fichiers téléchargés (sinon le programme d'installation ne sait pas quoi).

wakjah
la source
4

Ancienne question, mais toujours d'actualité. Voici ce qui a fonctionné pour moi aujourd'hui (26/06/16).

Depuis le shell bash:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
Steve Isenberg
la source
1
wgetou curlest probablement un meilleur outil pour cela. (Et personnellement, je l'installerais dans un autre répertoire dans mon $PATHplutôt que dans /bin.)
Keith Thompson
3

La réponse de Dawid Ferenczy est assez complète, mais après avoir essayé presque toutes ses options, j'ai trouvé que le cyg-get de Chocolatey était le meilleur (du moins le seul que je pouvais mettre au travail).

Je voulais installer wget, les étapes étaient les suivantes:

choco install cyg-get

Ensuite:

cyg-get wget
fabriciorissetto
la source
1

Habituellement, avant d'installer un package, il faut connaître son nom exact:

# 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
la source