Dark Moon : une distribution GNU/Cygwin portable pour Windows

Posté par  . Édité par Yves Bourguignon, BAud, Nils Ratusznik, Davy Defaud, palm123, Nÿco, Benoît Sibaud, Bruno Michel, ZeroHeure et pulkomandy. Modéré par Pierre Jarillon. Licence CC By‑SA.
Étiquettes :
14
16
août
2018
Ligne de commande

Dark Moon est un émulateur de terminal open source développé par Mehdi Boutayeb Ferkatou, étudiant à l'université Paul Sabatier, et édité par MBK logiciel dans sa version UWP sur le Microsoft Store.

Dark-Moon

Dark Moon est à ce jour la seule distribution GNU/Cygwin disponible sur le Microsoft Store et sur le site de l’éditeur.

Sommaire

Présentation

Dark Moon est un ensemble de logiciels libres basé sur Cygwin rendu portable permettant l’exécution de commandes POSIX dans le but d’émuler un environnement UNIX sur plate‐forme Windows x64. Dark Moon permet de créer des scripts et des programmes utilisant les commandes grâce à une grande collection d’outils GNU et open source intégrée dans le terminal.

Embarquer une collection d’API POSIX sous la forme d’un exécutable nous permet d’envisager une informatique hyper‐transportable pour les émulateurs et distributions GNU/Cygwin, il suffit alors de trouver du courant et un processeur hôte pour exécuter l’application, ce qui aurait été auparavant impossible avant la naissance de Dark Moon. L’objectif technique recherché est de fournir un environnement de développement ainsi qu’un émulateur UNIX cloisonnés dans un exécutable apportant une mobilité au logiciel, permettant d’exécuter l’application sur n’importe quel système Windows.

Idée générale

Dark Moon est autonome, ce qui le distingue d’autres distributions équivalentes. Il est possible d’exécuter des commandes Shell et Bash ainsi que de créer et exécuter des scripts sur la console. L’application est également un outil de développement, notamment en offrant aux utilisateurs un environnement de développement libre tel que GCC.

Cette distribution est également un outil UNIX complet, personnalisable et offrant une mobilité ne demandant pas d’installation préalable. Elle est née en vue de fournir aux utilisateurs des possibilités étendues en complément de l’interpréteur de commande Windows. Il est possible de manipuler des fichiers ainsi que la ruche de registre sans déposer aucune empreinte sur l’ordinateur hôte, afin d’éviter d’apporter des modifications durables à un poste utilisé temporairement.

L’émulateur a fait l’objet d’une ouverture au public du code source, le logiciel libre est sous licence GNU GPL, il n’y a donc pas de restriction d’utilisation et de modification du logiciel tant que les conditions de la licence sont respectées.

En comparaison d’autres distributions Cygwin et GNU/Linux, l’application ne requiert aucun composant externe, les fichiers étant cloisonnés dans l’exécutable même, permettant un emploi à partir d’un stockage amovible comme une clé USB.

Différentes bibliothèques ont été incluses, notamment MinGW qui travaille avec des composants Windows comme la bibliothèque MSVCRT liée à Microsoft Visual C++. Busybox est intégré pour l’implémentation d’un grand nombre des commandes. Par ailleurs, il est également possible d’utiliser un agent d’authentification OpenSSH.

Le code source ainsi que les fichiers compilés ont été emballés dans l’exécutable pour respecter le concept de portabilité (il suffit de l’extraire avec 7zip pour avoir accès aux fichiers sources).

Liste des commandes actuellement disponibles

Voi job_spec [&]                            history [-c] [-d offset] [n] or hist>
 (( expression ))                        if COMMANDS; then COMMANDS; [ elif C>
 . filename [arguments]                  jobs [-lnprs] [jobspec ...] or jobs >
 :                                       kill [-s sigspec | -n signum | -sigs>
 [ arg... ]                              let arg [arg ...]
 [[ expression ]]                        local [option] name[=value] ...
 alias [-p] [name[=value] ... ]          logout [n]
 bg [job_spec ...]                       mapfile [-d delim] [-n count] [-O or>
 bind [-lpsvPSVX] [-m keymap] [-f file>  popd [-n] [+N | -N]
 break [n]                               printf [-v var] format [arguments]
 builtin [shell-builtin [arg ...]]       pushd [-n] [+N | -N | dir]
 caller [expr]                           pwd [-LP]
 case WORD in [PATTERN [| PATTERN]...)>  read [-ers] [-a array] [-d delim] [->
 cd [-L|[-P [-e]] [-@]] [dir]            readarray [-n count] [-O origin] [-s>
 command [-pVv] command [arg ...]        readonly [-aAf] [name[=value] ...] o>
 compgen [-abcdefgjksuv] [-o option] [>  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE] >  select NAME [in WORDS ... ;] do COMM>
 compopt [-o|+o option] [-DE] [name ..>  set [-abefhkmnptuvxBCHP] [-o option->
 continue [n]                            shift [n]
 coproc [NAME] command [redirections]    shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFgilnrtux] [-p] [name[=v>  source filename [arguments]
 dirs [-clpv] [+N] [-N]                  suspend [-f]
 disown [-h] [-ar] [jobspec ... | pid >  test [expr]
 echo [-neE] [arg ...]                   time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [na>  times
 eval [arg ...]                          trap [-lp] [[arg] signal_spec ...]
 exec [-cl] [-a name] [command [argume>  true
 exit [n]                                type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or ex>  typeset [-aAfFgilnrtux] [-p] name[=v>
 false                                   ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
 fc [-e ename] [-lnr] [first] [last] o>  umask [-p] [-S] [mode]
 fg [job_spec]                           unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMAND>  unset [-f] [-v] [-n] [name ...]
 for (( exp1; exp2; exp3 )); do COMMAN>  until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or name >  variables - Names and meanings of so>
 getopts optstring name [arg]            wait [-n] [id ...]
 hash [-lr] [-p pathname] [-dt] [name >  while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]               { COMMANDS ; }
Voi job_spec [&]                            history [-c] [-d offset] [n] or hist>
 (( expression ))                        if COMMANDS; then COMMANDS; [ elif C>
 . filename [arguments]                  jobs [-lnprs] [jobspec ...] or jobs >
 :                                       kill [-s sigspec | -n signum | -sigs>
 [ arg... ]                              let arg [arg ...]
 [[ expression ]]                        local [option] name[=value] ...
 alias [-p] [name[=value] ... ]          logout [n]
 bg [job_spec ...]                       mapfile [-d delim] [-n count] [-O or>
 bind [-lpsvPSVX] [-m keymap] [-f file>  popd [-n] [+N | -N]
 break [n]                               printf [-v var] format [arguments]
 builtin [shell-builtin [arg ...]]       pushd [-n] [+N | -N | dir]
 caller [expr]                           pwd [-LP]
 case WORD in [PATTERN [| PATTERN]...)>  read [-ers] [-a array] [-d delim] [->
 cd [-L|[-P [-e]] [-@]] [dir]            readarray [-n count] [-O origin] [-s>
 command [-pVv] command [arg ...]        readonly [-aAf] [name[=value] ...] o>
 compgen [-abcdefgjksuv] [-o option] [>  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE] >  select NAME [in WORDS ... ;] do COMM>
 compopt [-o|+o option] [-DE] [name ..>  set [-abefhkmnptuvxBCHP] [-o option->
 continue [n]                            shift [n]
 coproc [NAME] command [redirections]    shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFgilnrtux] [-p] [name[=v>  source filename [arguments]
 dirs [-clpv] [+N] [-N]                  suspend [-f]
 disown [-h] [-ar] [jobspec ... | pid >  test [expr]
 echo [-neE] [arg ...]                   time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [na>  times
 eval [arg ...]                          trap [-lp] [[arg] signal_spec ...]
 exec [-cl] [-a name] [command [argume>  true
 exit [n]                                type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or ex>  typeset [-aAfFgilnrtux] [-p] name[=v>
 false                                   ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
 fc [-e ename] [-lnr] [first] [last] o>  umask [-p] [-S] [mode]
 fg [job_spec]                           unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMAND>  unset [-f] [-v] [-n] [name ...]
 for (( exp1; exp2; exp3 )); do COMMAN>  until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or name >  variables - Names and meanings of so>
 getopts optstring name [arg]            wait [-n] [id ...]
 hash [-lr] [-p pathname] [-dt] [name >  while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]               { COMMANDS ; }
Voi job_spec [&]                            history [-c] [-d offset] [n] or hist>
 (( expression ))                        if COMMANDS; then COMMANDS; [ elif C>
 . filename [arguments]                  jobs [-lnprs] [jobspec ...] or jobs >
 :                                       kill [-s sigspec | -n signum | -sigs>
 [ arg... ]                              let arg [arg ...]
 [[ expression ]]                        local [option] name[=value] ...
 alias [-p] [name[=value] ... ]          logout [n]
 bg [job_spec ...]                       mapfile [-d delim] [-n count] [-O or>
 bind [-lpsvPSVX] [-m keymap] [-f file>  popd [-n] [+N | -N]
 break [n]                               printf [-v var] format [arguments]
 builtin [shell-builtin [arg ...]]       pushd [-n] [+N | -N | dir]
 caller [expr]                           pwd [-LP]
 case WORD in [PATTERN [| PATTERN]...)>  read [-ers] [-a array] [-d delim] [->
 cd [-L|[-P [-e]] [-@]] [dir]            readarray [-n count] [-O origin] [-s>
 command [-pVv] command [arg ...]        readonly [-aAf] [name[=value] ...] o>
 compgen [-abcdefgjksuv] [-o option] [>  return [n]
 complete [-abcdefgjksuv] [-pr] [-DE] >  select NAME [in WORDS ... ;] do COMM>
 compopt [-o|+o option] [-DE] [name ..>  set [-abefhkmnptuvxBCHP] [-o option->
 continue [n]                            shift [n]
 coproc [NAME] command [redirections]    shopt [-pqsu] [-o] [optname ...]
 declare [-aAfFgilnrtux] [-p] [name[=v>  source filename [arguments]
 dirs [-clpv] [+N] [-N]                  suspend [-f]
 disown [-h] [-ar] [jobspec ... | pid >  test [expr]
 echo [-neE] [arg ...]                   time [-p] pipeline
 enable [-a] [-dnps] [-f filename] [na>  times
 eval [arg ...]                          trap [-lp] [[arg] signal_spec ...]
 exec [-cl] [-a name] [command [argume>  true
 exit [n]                                type [-afptP] name [name ...]
 export [-fn] [name[=value] ...] or ex>  typeset [-aAfFgilnrtux] [-p] name[=v>
 false                                   ulimit [-SHabcdefiklmnpqrstuvxPT] [l>
 fc [-e ename] [-lnr] [first] [last] o>  umask [-p] [-S] [mode]
 fg [job_spec]                           unalias [-a] name [name ...]
 for NAME [in WORDS ... ] ; do COMMAND>  unset [-f] [-v] [-n] [name ...]
 for (( exp1; exp2; exp3 )); do COMMAN>  until COMMANDS; do COMMANDS; done
 function name { COMMANDS ; } or name >  variables - Names and meanings of so>
 getopts optstring name [arg]            wait [-n] [id ...]
 hash [-lr] [-p pathname] [-dt] [name >  while COMMANDS; do COMMANDS; done
 help [-dms] [pattern ...]               { COMMANDS ; }

Syntaxe

Avec les appliquettes de commande mises à disposition, il est possible de créer des scripts aisément, comme présenté ci‐dessous :

#Mon premier script
function() 
{
  local variableLocal="function 1"
  echo "$variableLocal"
  echo "Nombres de paramètres : $#"
  echo $1
  echo $2
}

function "Hello" "World"

Pour lancer le script, placez‐vous dans le dossier contenant le script (obligatoire) :

cd C:\Users\[Userprofile]\Documents\script-Shell

Faites un chmod :

chmod 700 MonPremierScript

Et exécutez‐le :

Nombres de paramètres : 2
Hello 
World

Aller plus loin

  • # Eeeuuuhhhh

    Posté par  . Évalué à 8.

    Maintenant qu'on peut faire tourner une distrib Linux entière dans Windows, je pense que ces plateformes perdent leur sens.

    • [^] # Re: Eeeuuuhhhh

      Posté par  . Évalué à 5.

      En fait son avantage c'est qu'il ne requiert aucune installation sur le poste. Ça peut être pratique en cas de dépannage.

    • [^] # Re: Eeeuuuhhhh

      Posté par  . Évalué à 4.

      Ça dépend ce que tu cherches à faire. Personnellement j'ai testé bash for Windows pour remplacer Git Bash (que j'utilise comme un terminal linux dans Windows), et même si Git Bash est plutôt lent, Bash for Windows l'était beaucoup plus.

      Dark Moon se base sur les mêmes outils que Git Bash donc je suppose que niveau performance c'est similaire à ce dernier.

      Dans le même temps, le sous système linux a des gros inconvénients :
      - il faut l'installer avec les droits administrateurs
      - il prend beaucoup de place
      - c'est un second OS dans Windows (donc il faut le mettre à jour etc.)
      - on est root d'office dans le sous système linux, donc on peut faire un peu n'importe quoi par erreur
      - le terminal est un cmd, donc pas très configurable
      - il faut penser à lancer la commande bash à chaque fois qu'on veut un terminal (c'est là aussi qu'on perd du temps entre le démarrage du cmd et de bash ensuite)

      • [^] # Re: Eeeuuuhhhh

        Posté par  (site web personnel) . Évalué à 1.

        Dans le même temps, le sous système linux a des gros inconvénients :
        […]
        - on est root d'office dans le sous système linux, […]

        Négatif ! Il faut faire un sudo pour pouvoir faire un aptitude update, par exemple.

        • le terminal est un cmd, donc pas très configurable

        Pas sûr que ça s'oppose à ton affirmation, mais on peut le lancer dans conEmu, par exemple,

        • il faut penser à lancer la commande bash à chaque fois qu'on veut un terminal (c'est là aussi qu'on perd du temps entre le démarrage du cmd et de bash ensuite)

        Là aussi, pas sûr que ça s'oppose à ton affirmation, mais on peut le lancer à partir d'une icône.

        Pour nous émanciper des géants du numérique : Zelbinium !

    • [^] # Re: Eeeuuuhhhh

      Posté par  . Évalué à 6. Dernière modification le 17 août 2018 à 09:32.

      J'utilise GOW avec ConEmu.

      Le sous-système Linux pour Windows, merci mais non merci :

      • Uniquement disponible sous Windows 10. Alors que je peux utiliser GOW + ConEmu même sous XP.
      • OS entier, lourd
      • Difficultés de communication entre le sous-système et Windows
      • j'ai pas envie d'être root
      • Ça fait un système en plus à maintenir
      • Ce n'est pas taillé à mes besoins. Gow me suffit.
      • Cmd c'est nul

      "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

      • [^] # Re: Eeeuuuhhhh

        Posté par  . Évalué à 2.

        Utilisateur de la version Debian du WSL, je ne suis pas root (mais fait partie du groupe sudo) et je n'ai aucun problème à utiliser cmd (si par là tu entends l'émulateur de terminal), une fois celui-ci configuré à mon goût.

        J'y retrouves tous les aspects auquels je suis habitué des émulateurs Linux, sauf les onglets et splits mais, pour ma part, je suis plutôt amateur de screen et tmux … En tout cas je serais curieux de savoir quels défauts te font rejeter cmd.

        • [^] # Re: Eeeuuuhhhh

          Posté par  . Évalué à 1.

          je lance WSL ubuntu dans Git Bash, tout simplement pour avoir le select text = copy text

          alias ubuntu='winpty /c/WINDOWS/system32/bash'
          Mais utilisant aussi macOS et Linux coté serveur c'est vraiment de la bidouille tout ça sous Windows…

      • [^] # Re: Eeeuuuhhhh

        Posté par  . Évalué à 1.

        Compatible également avec Windows 7, 8, 10… Sur le site de l'éditeur.

  • # ruche de registre ?

    Posté par  . Évalué à 3.

    C'est peut-être une traduction correcte, mais il m'a fallu un moment pour comprendre qu'il s'agit certainement de la "registry" … Correct ?

  • # Alerte de l’antivirus

    Posté par  . Évalué à 2.

    L’antivirus de Comodo (Comodo Security Suite) me lance une alerte quand j’exécute ce logiciel.

    Fichier incriminé : C:\Users[user_name]\AppData\Local\Temp\IXP000.TMP\cmdow.exe 

    Identifiant du malware : ApplicUnwnt@#9l1z84ybav03

    • [^] # Re: Alerte de l’antivirus

      Posté par  . Évalué à 2.

      Étant donné qu'il s'agit d'une application utilisant toutes les ressources systèmes, il est possible qu'il y ait de faux positifs,

      L'application dispose d'autorisation RunFullTrust (confiance totale) attribué par l'équipe de certification du Microsoft Store (indispensable)

      Cela arrive également avec d'autres distributions Linux sur le Windows Store,

    • [^] # Re: Alerte de l’antivirus

      Posté par  . Évalué à 2.

      Mauvais antivirus, changer d'antivirus.

  • # Executer des scripts c'est bien ...

    Posté par  (site web personnel) . Évalué à 1. Dernière modification le 17 août 2018 à 10:23.

    Mais peut tu lancer ce scripts via l'excellllllleeeeeennnnnt planificateur de taches de windows ?

  • # Opensource ??

    Posté par  . Évalué à 1. Dernière modification le 17 août 2018 à 16:07.

    J'ai mal cherché ou il n'y a pas de code source ?

    Lorsque je clique sur "code source de dark moon", j'obtiens un zip avec le binaire d'installation.

    De plus, la description parle d'une application portable alors que le binaire est un fichier d'installation.

    Enfin, comme dans les commentaires ci-dessous, il y a le binaire cmdow.exe qui ne plait pas à l'antivirus, donc impossible à lancer.

    • [^] # Re: Opensource ??

      Posté par  (site web personnel) . Évalué à 4. Dernière modification le 17 août 2018 à 16:15.

      Dans la dépêche :

      Le code source ainsi que les fichiers compilés ont été emballés dans l’exécutable pour respecter le concept de portabilité (il suffit de l’extraire avec 7zip pour avoir accès aux fichiers sources).

      • [^] # Re: Opensource ??

        Posté par  . Évalué à 2.

        L'application portable est inclus dans l'installateur, il est possible de récupérer l'exécutable et ainsi l'utiliser sur une clé USB par exemple…

      • [^] # Re: Opensource ??

        Posté par  . Évalué à 2. Dernière modification le 17 août 2018 à 17:47.

        C'est bien l'application portable qu'il faut extraire et non pas le Setup dans lequel se trouve l'application en question.

  • # Une mise à jour arrive

    Posté par  . Évalué à 0. Dernière modification le 19 août 2018 à 22:01.

    Pour le moment, voici la liste des fonctionnalités qui y seront intégrés :

    Gnat, Gcc, G++, Nano, Vim…

    source (site web)

    • [^] # Re: Une mise à jour arrive (v1.0.02)

      Posté par  . Évalué à -1. Dernière modification le 19 août 2018 à 22:10.

      Gcc était déjà présent, mais jusque là, c'était surtout orienté scripts shell

  • # stakanovist alternative

    Posté par  . Évalué à 4.

    Je ne sais pas pour les toutes dernières versions de Windows mais si la caractéristique principale des applis portables reste l'opportunité de les utiliser sur des Windows où l'on ne peut rien installer (sic), pour simuler une "cygwin portable" je m'étais contenté de l'installer dans un Windows plus accueillant (où je possédai les droits admin) pour en de recopier toute l"arborescence sur une clé USB … En les lançant de puis la clé ou après avoir copié cette arborescence sur le PC Windows sécurisé (où je ne pouvais rien installer) j'ai eu la surprise de pouvoir exécuter toutes les applis (dont un server SSH : re-sic) …

  • # V1.0.0.2

    Posté par  . Évalué à 2.

    Elle est arrivée:

    -L'exécution se déroule dans la même fenêtre,
    -Plus de commandes "de bases" ont été intégrés,
    -On peut naviguer dans tout le disque C:

    -Des compilateurs sont présents (Gnat,G++,Python…)

    Lien:
    Dak-Moon 1.0.0.2

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.