web-dev-qa-db-fra.com

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

Existe-t-il un outil dans le package Cygwin similaire à apt-get sur Debian ou yum sur redhat qui me permet d’installer des composants à partir de la ligne de commande?

162
vy32

Il n'y a pas d'outil spécifique dans le programme d'installation 'setup.exe' offrant 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 des problèmes du projet pour voir les problèmes connus.

96
Zorobabel

Pour un programme d'installation plus pratique, vous pouvez utiliser apt-cyg en tant que gestionnaire de paquets. Sa syntaxe s'apparente à 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 que apt-cyg est installé. Voici quelques exemples d'installation de paquets

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

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

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

(Notez que vous devez utiliser setup-x86.exe ou setup-x86_64.exe selon le cas.)

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

127
jturney

Il existe certains scripts, qui peuvent être utilisés comme simples gestionnaires de paquets pour Cygwin. Mais il est important de savoir qu’ils seront toujours très limités , à cause de ... euh ... Windows.

L'installation ou la suppression de paquetages convient, chaque gestionnaire de paquetages de Cygwin peut le faire. Toutefois, la mise à jour est une tâche ardue, car Windows ne vous permet pas de remplacer un fichier exécutable en cours d’exécution. Vous ne pouvez donc pas mettre à jour, par exemple, Cygwin DLL ou tout package contenant l'exécutable en cours d'exécution à partir de Cygwin lui-même. Il y a aussi cette note sur la page Installation de Cygwin :

"La raison fondamentale pour ne pas avoir un gestionnaire de paquets plus complet est qu'un tel programme nécessiterait un accès complet à toutes les fonctionnalités POSIX de Cygwin. Il est toutefois difficile à fournir dans un environnement sans Cygwin, tel qu'il en existe à l'origine. De plus, Windows n'autorisant pas facilement le remplacement des exécutables en cours d'utilisation, l'installation d'une nouvelle version de Cygwin DLL alors qu'un gestionnaire de paquets utilise le DLL pose problème. "

La configuration de Cygwin utilise le registre Windows pour écraser les exécutables en cours d’utilisation. 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 , de sorte que vous n’ayez pas à redémarrer votre ordinateur pour appliquer les modifications. L'installation d'un nouveau paquet devrait être complètement sans tracas. Je ne pense pas que l’un des gestionnaires de paquets, à l’exception de setup.exe de Cygwin, implémente une mé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

Update : le référentiel a été désactivé récemment en raison de problèmes de copyright ( DMCA takedown ). Il ressemble à le propriétaire du référentiel a publié le retrait DMCA sur son propre référentiel et a 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 setup.exe de Cygwin, il ré-implémente ce que setup.exe fait. Cela fonctionne correctement pour les deux plates-formes - x86 ainsi que x86_64 . Il y a beaucoup de fourches avec plus ou moins de fonctionnalités supplémentaires. Par exemple, le kou1okada fork 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. Il suffit de le télécharger (ou de cloner le référentiel), de le rendre exécutable et de le copier quelque part dans 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 y a aussi groupe de fourchettes avec différentes fonctionnalités.


sage

Un autre gestionnaire de paquets implémenté en tant que 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 package, etc. Il a des fonctionnalités que d'autres gestionnaires de paquets n'ont pas.


cyg-apt

Fourchette d'original abandonné cyg-apt avec des améliorations et corrections de bugs. Il a beaucoup de fonctionnalités et est implémenté en Python. L'installation est réalisée avec make.


Chocolatey’s cyg-get

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


Setup.exe de Cygwin

Il a également un mode ligne de commande . De plus, cela vous permet de mettre à jour tous les paquets installés à la fois (comme le fait apt-get upgrade 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 paquet Vim avec:

cyg-get vim

48

Commencez par télécharger le programme d'installation à l'adresse suivante: https://cygwin.com/setup-x86_64.exe (Windows 64 bits), 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
4
Jason

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

De la bash Shell:

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

Je voulais une solution semblable à apt-get --print-uris, mais malheureusement, apt-cyg ne le fait pas. Voici une solution qui m'a permis de ne télécharger que 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-cyg dans 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 packages à télécharger, par rapport à la racine miroir de cygwin, en omettant les packages déjà installés. Pour les télécharger, j'ai écrit le résultat dans un fichier cygwin-packages-list puis 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, je devais copier setup.ini à partir d'un cache de paquet cygwin précédent dans le répertoire contenant les fichiers téléchargés (sinon, le programme d'installation ne sait pas ce que c'est.).

4
wakjah

La réponse de Dawid Ferenczy est assez complète, mais après avoir essayé presque toutes ses options, j’ai trouvé que le Chocolatey’s cyg-get était le meilleur (au moins le seul qui m’ait permis de travailler).

Je voulais installer wget, la procédure était la suivante:

choco install cyg-get

Ensuite:

cyg-get wget
3
fabriciorissetto

Habituellement, avant d'installer un paquet, 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>>"
1
Yordan Georgiev