Accueil - Informatique - Systèmes d’exploitation - Cygwin

Cygwin

Publié le dimanche 7 janvier 2007.


Mis à jour le 02 décembre 2010

Présentation de Cygwin


Cygwin est un environnement de développement réalisé sous l’égide de l’équipe de Cygnus qui a été racheté par RedHat.

Une communauté active de programmeurs participe également à son développement.

Le but de Cygwin était au départ de porter tous les outils GNU sous Windows.

Pour cela, Cygwin intègre une dll (cygwin1.dll) qui agit comme un émulateur Unix fournissant ainsi toutes les fonctions API Unix.

Cygwin contient également une multitude d’outils provenant du monde Unix procurant les mêmes sensations mais sous Windows.

Ainsi il est possible d’utiliser des outils comme gcc, make, ld, sed, awk, Flex, Bison, Python, Perl, vim, TCL, CVS, des shells comme bash, sh, tcsh, zsh... sous Windows exactement comme si l’OS était de type UNIX.

Cygwin possède également un serveur X11, les librairies X11, et des gestionnaires de fenêtres (windowmaker, fvwm, kde).

Cygwin est avant tout un environnement ligne de commandes mais il est possible grâce à aux modules TCL/TK de créer ses propres interfaces graphiques Unix portables. Le "debugger" Insight est un bon exemple de réalisation d’interface graphique.

Cygwin est également un environnement de développement. Les distributions de logiciels fonctionnant sous UNIX considèrent Cygwin comme un OS à part entière et intègrent la possibilité de générer un Makefile permettant la compilation de projets Unix sous Cygwin avec la procédure classique :

./configure ; make ; make install

sans autre modification préalable.

Outre le développement, on peut utiliser sous Cygwin des langages de scripts comme Perl, Python, Ruby ou Groovy.
Avec Perl par exemple il est possible d’utiliser ses programmes de traitement de données sous Windows exactement comme sous Solaris ou Linux même si l’exécution des scripts n’est pas aussi rapide que sous Linux.

Il est également possible d’utiliser Cygwin pour se connecter à un ordinateur distant. L’utilisation du programme RXVT permet de travailler dans un terminal de qualité bien supérieur à la console Windows. RXVT utilisé conjointement avec les outils openssh (secure shell) permettra de réaliser des connections sécurisées vers n’importe quel serveur Unix.

Cygwin respecte toutes les normes d’UNIX. Le répertoire Cygwin respecte le même type de hiérarchie que celui des environnements UNIX. On retrouve ainsi à la racine de Cygwin les composants suivants :

RépertoireDescription
"/"bin Ensemble des dll et programmes
/tmp Contient les données temporaires des différents programmes(parfois, /tmp est un lien symbolique vers /var/tmp)
"/"etc Contient les fichiers de configuration généraux de tous les programmes du système
"/"etc/bashrc contient les alias et fonctions globales au système
"/"etc/profile positionne globalement les variables d’environnement et lance les programmes de démarrage communs
/home Est réservé à l’hébergement des comptes des utilisateurs (un sous-dossier par personne)
/lib Ensemble des librairies
/sbin Contient des commandes nécessaires lors du démarrage de Cygwin, mais en général inutiles pour les utilisateurs
/usr Contient tous les programmes et fichiers de données qui ont pour caractéristiques de ne pas être nécessaires au démarrage de la machine
/usr/local Contient les programmes compilés par l’utilisateur
/var Contient des données mises à jour par différents programmes durant le fonctionnement du système
/opt Ce répertoire n’est pas créé par défaut. Il pourra contenir des programmes tierces (binaires) déjà compilés (exemple : La chaîne de traitement des VMADCP CODAS

Installation de Cygwin


Récupérer et installer le programme setup.exe et se reporter à la documentation officielle pour l’installation et la configuration.

Configuration de Cygwin


Vous trouverez ci dessous quelques remarques qui peuvent être utiles dans la configuration de Cygwin.

Cygwin évoluant rapidement, certains points de configuration peuvent être intégrés dans les scripts de configuration automatique, mais il peut toujours être utile de savoir les réaliser manuellement.

Environnement :

J’utilise un environnement quelque peu modifié avec un fichier bashrc à copier sous "/"etc. Je ne touche pas au fichier "/"etc/profile mais je rajoute les fichiers .bashrc et .bash_profile dans mon répertoire personnel (home dir).

Je modifie également le fichier de démarrage cygwin.bat se trouvant sous c :\cygwin afin d’utiliser RXVT à la place de la console Windows.

Important :

Si au lancement de Cygwin, vous obtenez brièvement une fenêtre DOS noire, puis plus rien, vous avez généralement un problème de configuration. Soit rxvt n’est pas accessible, soit vous avez un problème avec la configuration de Cygwin (variable $HOME non définie, /tmp n’existe pas, etc...).

Commenter la ligne contenant rxvt et utiliser la première pour lancer bash dans une console Windows.
Il sera ensuite plus facile de diagnostiquer la provenance de l’erreur.

Si vous ne parvenez toujours pas à utiliser correctement Cygwin, reportez vous au chapitre, "Installation manuelle par copie de Cygwin", à la fin de ce document, les techniques mises en oeuvre vous permettront certainement de résoudre votre problème.

bash --login -i
rem rxvt -fn "-*-Courier-medium-r-*-13-*" -geometry 90x32+100+80 -sr -bg "white" -fg "black" -sl 8000 -termName xterm -e /usr"/"bin/bash --login -i

Variable path :

Si vous désirez utiliser des utilitaires Windows en ligne de commande, rajouter au début du fichier cygwin.bat le chemin d’accès dans la variable PATH.
Exemple, le compilateur java de Sun et le validateur XML XmlSpy :

@echo off
set path=C:\Program Files\Altova\AltovaXML2006;C:\j2sdk1.4.2\bin;%PATH%

Sous UNIX, le répertoire courant ne fait pas partie du chemin de recherche pour un script ou un exécutable. Toute commande qui ne se trouve pas dans le chemin de la variable PATH devra être préfixée de ./

Si ce comportement ne vous convient pas, il est toujours possible de rajouter le répertoire courant dans la variable PATH. Rajouter pour cela la ligne suivante dans votre fichier ~/.bash_profile

export PATH=$PATH:.

Les fichiers passwd et group

Les fichiers "/"etc"/"passwd et "/"etc/group sont créés lors du lancement de Cygwin par l’exécution du script "/"etc/profile.

Il n’est plus nécessaire de créer ces fichiers manuellement comme c’était le cas avec les versions ultérieures :

$ mkpasswd -l > "/"etc"/"passwd
$ mkgroup -l > "/"etc/group

Le script "/"etc/profile vérifie la configuration de l’utilisateur, et si c’est une première utilisation, il va créer automatiquement les entrées correspondantes dans les fichiers "/"etc"/"passwd et "/"etc/group

Lorsque l’on travaille sous Windows 2000/XP dans un domaine NT, il peut être utile de modifier manuellement l’emplacement de sa home dir dans le fichier "/"etc"/"passwd :

$ cat "/"etc"/"passwd | grep moi
moi:unused_by_nt/2000/xp:111111:10545:Prenom Nom,Location,Domaine\moi,S-1-5-21-11111111-11111111111-111111111-1111://machine/moi:"/"bin/bash

J’ai noté une erreur qui persiste depuis plusieurs version. Par défaut, l’entrée pour votre compte est créée pour le groupe mkgroup-l-d avec un gid = 10545. Il faut alors créer une nouvelle entrée correspondant à votre group réel dans le fichier "/"etc/group puis modifier la ligne de votre compte dans le fichier "/"etc"/"passwd.

Pour modifier ce gid, utiliser la commande mkgroup pour obtenir votre gid réel (ici remplacé par xxxxx :

$ mkgroup -d <domaine> -g <group> >> "/"etc/group

Faire un cat du fichier "/"etc/group pour récupérer votre gid :

$ cat "/"etc/group
mongroup:S-1-5-21-111111111-1111111111-1111111111-1544:xxxxx:

Puis remplacer votre gid dans la ligne du fichier "/"etc"/"passwd correspondant à votre compte utilisateur :

moi:unused_by_nt/2000/xp:15927:xxxxx:user,Domaine\user,S-1-5-21-11111111-1111111111-11111111-1111:/q/cygwin:"/"bin/bash

On voit qu’il est également possible de modifier le répertoire de sa homedir (ici /q/cygwin).

rxvt :

J’utilise par défaut rxvt comme console à la place de la classique et triste invite de commande Windows.

Cette console émule une fenêtre xterm et se configure de la même façon, via des arguments sur la ligne de commande, ou avec un fichier .Xdefault.

[jgrelet]:~> alias rxvt
alias rxvt='rxvt -fn "-*-Courier-medium-r-*-13-*" -geometry 110x43+0+0  -sr -bg "white" -fg "black" -sl 2000 -termName vt100  -e /usr"/"bin/bash &'

On peut également se connecter sur une station Solaris ou Linux en utilisant rlogin (à oublier) ou mieux slogin (paquet openssh).

Afin d’éviter les problèmes d’affichage avec VI liés aux dimensions de l’écran, il est conseillé de positionner la variable TERM à VT100 et de lancer la commande resize si la fenêtre à une taille autre que 80 colonnes par 25 lignes.

[jgrelet]:~> slogin machine
Password:
Last login: Tue Apr  2 12:14:26 from :0
Sun Microsystems Inc.   SunOS 5.7       Generic October 1998
vendredi,  5 avril 2002, 11:22:17 MET DST
/home/machine/moi
type de terminal (vt100) :
perceval> resize
perceval> alias resize
eval `/usr/openwin"/"bin/resize`
perceval>

Unicode

La console rxvt en mode texte ne gère pas l’unicode. Dés que l’on se connecte via ssh sur un serveur Linux, si ce dernier est configuré en UTF8 et Français pour la langue, l’affichage de la commande man ls par exemple ne se fera pas correctement.
Pour le vérifier, on utilisera la commande locale qui donnera par défaut sous cygwin :

LANG=FR
LC_CTYPE="C"
LC_NUMERIC="C"
...
LC_ALL=

et sur le serveur Linux/Unix distant :

LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
...
LC_ALL=

La solution consiste à utiliser le même encodage sur les 2 machines, ce qui se fait en rajoutant les lignes suivantes dans le fichier cygwin.bat

set LANG=fr_FR
set LC_ALL=fr_FR

Sur le serveur distant, il suffit de modifier ces variables d’environnement comme suit :
sous bash

export LANG=fr_FR
export LC_ALL=fr_FR

sous csh ou tcsh

setenv LANG fr_FR
setenv LC_ALL fr_FR

C’est tout, et bien plus agréable à lire....

Divers :


rebaseall

Lors de l’exécution de programmes ou utilisation de librairies externes, il se peut que vous obteniez le message contenant les informations suivantes :

unableto remap .so
to same address as parent : 0x100000 != 0x2B0000

Dans ce cas il faut lancer la commande rebaseall comme suit :

Vérifier que le paquetage rebase soit installé via le setup.

Quitter toutes les instances de cygwin, et en cas d’echec de la commande rebaseall, n’hésitez pas à redémarrer Windows.

Menu Démarrer/Exécuter, entrer la commande suivante :
cmd, pour lancer un interpréteur windows, puis

cd c:\cygwin\bin
ash
/usr/bin/rebaseall -v

Configuration

Pour obtenir des informations sur la configuration de votre système, utiliser la commande cygcheck comme ci-dessous et visualiser le résultat dans le fichier cygcheck.out :

cygcheck -s -v -r > cygcheck.out

Utiliser le client X de Cygwin

Pour ouvrir une session X distante, depuis une console rxvt, taper la commande :

$ X -query <hostname> &

C’est rapide, simple et gratuit.

Mieux, placer un raccourci directement sur le bureau contenant la ligne suivante dans le champ "cible" :

C:\cygwin\bin\rxvt.exe -e /usr/local"/"bin/X.sh

puis créer un fichier X.sh sous /usr/local"/"bin qui contiendra les lignes suivantes :

#! "/"bin/sh
PATH=/usr"/"bin:/usr/X11R6"/"bin:/usr/sbin:/usr/local"/"bin:$PATH
export PATH
/usr/X11R6"/"bin/X -clipboard -query <hostname>

en remplacant par votre serveur.

Sous Solaris, il faudra rajouter l’option -fp afin d’utiliser le serveur de font de la machine Solaris distante :

$ Xwin -clipboard  -query <hostname> -fp tcp/<hostname>:7100

Voir http://x.cygwin.com/docs/faq/cygwin...

Utilisation du serveur X et WMaker :

Depuis quelque temps, il devient impossible de lancer le serveur X en local avec wmaker.

Si vous obtenez le message suivant au démarrage du serveur X :

winClipboardProc - XOpenDisplay () returned and successfully opened the display.
winProcSetSelectionOwner - Clipboard not yet started, aborting.
winProcSetSelectionOwner - Clipboard not yet started, aborting.
wmaker fatal error: it seems that there is already a window manager running

waiting for X server to shut down winClipboardProc - Call to select () failed: -1.  Bailing.
winClipboardProc - XDestroyWindow succeeded.

Il faut alors désactiver le mode "multiwindows" dans le script de démarrage /usr/X11R6"/"bin/startx
Editez le scripts de démarrage startx et modifier la ligne suivante :

defaultserverargs="-multiwindow -clipboard"

par

defaultserverargs="-emulate3buttons -clipboard"

Pour lancer automatiquement wmaker, commenter la dernière ligne du fichier de configuration personnelle sous /.xinitrc
comme suit :

# start some nice programs

#exec xterm -e /usr"/"bin/bash -l
exec wmaker

Perl sous Cygwin

Pour l’installation des modules Perl sous Cygwin, se référer à l’article précédent.

Ayant eu parfois des difficultés à compiler certains modules via CPAN (PDL et DBD::Pg), je conseille de récupérer les paquets Perl depuis le site Cygwin Ports project.

Récupérer et copier localement les paquets avec votre client ftp. Lancer le setup Cygwin en spécifiant cette fois le répertoire local ou se trouvent les paquets. Suivre ensuite la procédure classique d’installation.

Installation manuelle par copie de Cygwin

L’installation par une copie de Cygwin sur un PC n’ayant jamais eu de version de Cygwin préalablement installée nécessite quelques manipulations préalables :

Copie du répertoire Cygwin dans C :

Faire un raccourci du fichier cygwin.bat sur le bureau, modifier
éventuellement son icone.

Décommenter la ligne :

rem bash --login -i
en
bash --login -i

Lancer cygwin.bat

$ echo $HOME
$ unset HOME

mettre c :\cygwin\bin dans le PATH windows, appeler le gestionnaire des propriétés Windows (touche Windows + Pause), onglet "avancé", bouton "variables d’environnement"

Sous le bash Cygwin, créer les points de montages :

$ mount c:/cygwin /
$ mount c:/cygwin"/"bin /usr"/"bin
$ mount c:/cygwin/lib /usr/lib

"sourcer" le fichier d’init

$ . /c/cygwin"/"etc/defaut"/"etc/profile

si ca ne marche pas correctement, faire eventuellement :

$ id -n

(et noter le nom du user utilisé dans la ligne suivante)

$ mkdir -p /home/<user>
par ex:
$ mkdir -p /home/moi
puis
$ mkpassword -u <user> -l >> "/"etc"/"passwd

Copier les fichiers .bashrc et .bash_profile joints dans la home directory nouvellement creee
sous /home/

Normalement, ca devrait marcher...

Lancer ensuite un terminal rxvt

rxvt -fn "-*-Courier-medium-r-*-13-*" -geometry 90x32+100+80 -sr -bg "white" -fg "black" -sl 8000 -termName xterm -e /usr"/"bin/bash --login -i

Liens utiles




Pages: 0 | 10