Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Binaires plus petits et "Cannot exec ocamlrun" #452

Closed
fablhx opened this issue Oct 12, 2016 · 23 comments
Closed

Binaires plus petits et "Cannot exec ocamlrun" #452

fablhx opened this issue Oct 12, 2016 · 23 comments
Labels

Comments

@fablhx
Copy link
Contributor

fablhx commented Oct 12, 2016

Issue by GuillaumeBrochu
Monday Aug 29, 2016 at 02:57 GMT
Originally opened as https://github.com/geneweb/geneweb_tmp/issues/58


En essayant de compiler la branche master en date du jour, j'ai observé ceci:

Avec linux:
la compilation fonctionne, les binaires fonctionnent comme prévu (j'ai seulement testé gwsetup, gwc, et gwu), mais la taille des fichiers binaires est environ 2-3x plus petite que lors de mon dernier test de compilation dont j'ai conservé le résultat (en date du 14 mai 2016).

Avec windows (en utilisant les scripts cygwin du wiki, http://geneweb.tuxfamily.org/wiki/OCaml):
la compilation fonctionne, mais j'obtiens l'erreur "Cannot exec ocamlrun" lorsque j'essaie d'exécuter les fichiers exécutables (ex : gwc, gwu, gwd...) dans le sous-dossier "distribution".

De plus, toujours avec windows, si je modifie le script avec un "git clone -b distrib-6-08-ocaml-4-xx" afin de compiler la version 6 au lieu de la branche master, les exécutables sont alors fonctionnels sans l'erreur ci-haut mentionnée et la taille des fichiers binaires est 2-3x plus grande que pour la branche master.

C'est comme si quelque chose avait récemment changé dans les makefiles et que certaines librairies ne sont plus liées aux exécutables comme avant. Voir : http://stackoverflow.com/questions/27547289/how-do-i-compile-my-ocaml-code-into-a-standalone-bytecode-executable

Est-ce voulu?

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by mbouaziz
Monday Aug 29, 2016 at 08:37 GMT


Bonjour Guillaume,

Nous sommes conscient qu'il y a des choses qui ne vont pas dans le build actuel.
Nous voulons le changer mais pour cela nous aimerions repasser à la syntaxe standard OCaml, mais pour faire ce changement, nous attendons de pouvoir fusionner avec le dépôt geneanet.
Un peu de patience, donc :)

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Monday Aug 29, 2016 at 12:12 GMT


OK merci pour l'info sur les problématiques en cours. Content aussi d'apprendre qu'il semble y avoir quelque chose en cours pour fusionner avec le dépôt de Geneanet.

En attendant que vous trouviez les solutions aux problèmes de plomberie, si jamais je voulais compiler des binaires temporaires non-officiels pour Windows, quel serait le meilleur commit à utiliser (i.e. le commit le plus récent à être dans un état fonctionnel pour la compilation sous Windows). Merci.

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by a2line
Monday Aug 29, 2016 at 18:17 GMT


Le script de mars 2016 (repris de celui d'Appveyor) pour Windows a été éprouvé fin juin par Crockignol qui a compilé pour Windows avec succès : il lui a suffit de lancer le script avec les droits d'administrateur pour éviter tous les problèmes.

Après l'installation des outils, pour compiler GeneWeb avec des exécutables fonctionnels en natif hors Cygwin (les gros .exe !), il faut retourner au commit du 8 mai, au dernier commit ça ne fonctionne que depuis Cygwin.

git checkout -b win8mai 6a87ebef17af1d28ae6c1a3c6e4e1116dc737f28

Je mets à jour le wiki en ce sens, j'aurais du le faire dès juin.

Par contre à nouveau, je ne suis pas sûr qu'il soit bon de diffuser une version intermédiaire du logiciel pour éviter les problèmes de communication incidents et faciliter le dépannage : version alpha, version gwmr, version de Dominique (+ celle de Charly le Prof), version Windows du 8 mai… ?!

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Monday Aug 29, 2016 at 19:04 GMT


Merci A2 pour ces précisions.

La raison pourquoi, je pense, il faudrait une version 7 "quelconque" est qu'il n'y a plus AUCUNE version 7 pré-compilée de disponible nulle part (les exécutables de la V7.00-alpha ne sont même plus disponibles).

Comme les utilisateurs qui fréquentent le forum de Geneanet recherchent presque tous une version qui soit compatible avec les événements, et que ceux-ci, pour la plupart, n'ont pas les aptitudes requises pour compiler geneweb eux-même, ils n'ont présentement aucune option.

Comme la nature a horreur du vide, j'ai commencé à regarder ce qu'il faudrait faire pour avoir un package binaire pour la version 7 que je pourrais distribuer à titre personnel comme Mickaël il y a quelques années...

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Saturday Sep 10, 2016 at 18:18 GMT


J'ai essayé de compiler le commit du 8 mai sous windows avec le script de A2, en y ajoutant toutefois ces lignes après la ligne du git clone:

%CYG_BASH% "cd ~/geneweb && git checkout -b win8mai 6a87ebef17af1d28ae6c1a3c6e4e1116dc737f28"
%CYG_BASH% "cd ~/geneweb && git status"

La ligne "git status" permet de m'assurer que le git checkout a bien fonctionné.

Or, la compilation ne se rend pas à la fin (aucun sous-dossier "distribution" n'est créé) et j'obtiens cette erreur:

camlp5r pa_macro.cmo -D WIN95 -o gwuLib.ppo gwuLib.ml
ocamlfind ocamlopt -safe-string -linkpkg -warn-error A  -I ../wserver -I ../dag2html -I C:/cygwin64/home/guillaume/.opam/4.02.3+mingw64c/lib/camlp5 -c -impl gwuLib.ppo
rm -f gwuLib.ppo
ln -fs gwu.ml gwu.ppo
ocamlfind ocamlopt -safe-string -linkpkg -warn-error A  -I ../wserver -I ../dag2html -I C:/cygwin64/home/guillaume/.opam/4.02.3+mingw64c/lib/camlp5 -c -impl gwu.ppo
File "gwu.ppo", line 1, characters 10-13:
Warning 3: deprecated: ISO-Latin1 characters in identifiers
File "gwu.ppo", line 1, characters 13-14:
Error: Illegal character (\000)
make[1]: *** [../tools/Makefile.config:160: gwu.cmx] Error 2
make[1] : on quitte le répertoire « /home/guillaume/geneweb/src »
make: *** [Makefile:26: src?opt] Error 2
If you see copyright footer from gwd in last line, GeneWeb should be working!
GeneWeb is in /home/guillaume/geneweb/distribution/

A2, est-ce que cela fonctionne de ton côté, ou as-tu la même erreur que moi?

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by a2line
Saturday Sep 10, 2016 at 20:01 GMT


T'aurais pas oublié le export CYGWIN=winsymlinks:native avant de compiler (cf. le script) ?

Chaque ligne %CYG_BASH% re-ouvre une console, et ce export doit être sur la même ligne avant le make. (Note qu'on aura pu besoin de cette commande en rab à terme, déjà au dernier commit on en a pu besoin.)

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Saturday Sep 10, 2016 at 20:27 GMT


Voici le script simplifié que j'ai utilisé (essentiellement, je n'ai conservé que la section 64 bits, j'ai retiré les lignes pour l'installation de cygwin que j'ai fait préalablement, et j'ai ajouté les lignes pour le git checkout).

Le "export CYGWIN=winsymlinks:native" y figure encore.

@echo off
set CYG_ROOT=c:\cygwin64
set CYG_BASH=%CYG_ROOT%\bin\bash -lc
mkdir %CYG_ROOT%
echo Installing Cygwin/Opam/ocamlfind/Camlp5 for a 64bit operating system into %CYG_ROOT%
setup-x86_64.exe -qnNdO -R %CYG_ROOT% -s http://cygwin.mirror.constant.com -l %CYG_ROOT%/var/cache/setup -P rsync -P patch -P diffutils -P curl -P make -P unzip -P git -P m4 -P perl -P mingw64-x86_64-gcc-core
%CYG_BASH% "curl -fsSL -o opam64.tar.xz https://dl.dropboxusercontent.com/s/b2q2vjau7if1c1b/opam64.tar.xz"
%CYG_BASH% "tar -xf opam64.tar.xz"
%CYG_BASH% "opam64/install.sh"
%CYG_BASH% "opam init -a mingw https://github.com/fdopen/opam-repository-mingw.git --comp 4.02.3+mingw64c --switch 4.02.3+mingw64c"
%CYG_BASH% "opam install -y ocamlfind camlp5"
%CYG_BASH% "eval `opam config env`"
set GITCLONE=y
set /p GITCLONE="Compile GeneWeb master in Cygwin home directory [y/n]? "
IF NOT "%GITCLONE%"=="y" GOTO :EOF
%CYG_BASH% "git clone https://github.com/geneweb/geneweb"
%CYG_BASH% "cd ~/geneweb && git checkout -b win8mai 6a87ebef17af1d28ae6c1a3c6e4e1116dc737f28"
%CYG_BASH% "cd ~/geneweb && git status"
%CYG_BASH% "export CYGWIN=winsymlinks:native && cd ~/geneweb && ./configure && make && make distrib && ./distribution/gw/gwd -cgi"
echo If you see copyright footer from gwd in last line, GeneWeb should be working!
%CYG_BASH% "echo GeneWeb is in ~/geneweb/distribution/"
:EOF

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Saturday Sep 10, 2016 at 20:47 GMT


Je ne sais pas si c'est grave et si cela explique le résultat obtenu, mais j'ai un message d'erreur à propos de curl au début du script:

D:\Données  Temporaire>opamwinGB2.bat
Un sous-répertoire ou un fichier c:\cygwin64 existe déjà.
Installing Cygwin/Opam/ocamlfind/Camlp5 for a 64bit operating system into c:\cygwin64
note: Hand installation over to elevated child process.
the following programs are not installed properly:
 curl curl
I can't proceed :(
OPAM has already been initialized.User configuration:
  ~/.ocamlinit is already up-to-date.
  C:/cygwin64/home/guillaume/.bash_profile is already configured for another OPAM root.
Global configuration:
  C:/cygwin64/home/guillaume/.opam/opam-init/init.sh is already up-to-date.
  C:/cygwin64/home/guillaume/.opam/opam-init/init.zsh is already up-to-date.
  C:/cygwin64/home/guillaume/.opam/opam-init/init.csh is already up-to-date.
  C:/cygwin64/home/guillaume/.opam/opam-init/init.fish is already up-to-date.
# To setup the new switch in the current shell, you need to run:
eval `opam config env`
�[1;34m[NOTE]�[m Package ocamlfind is already installed (current version is 1.6.2).
�[1;34m[NOTE]�[m Package camlp5 is already installed (current version is 6.16).
Compile GeneWeb master in Cygwin home directory [y/n]?

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by a2line
Saturday Sep 10, 2016 at 21:14 GMT


Rohh.. j'ai la même erreur que toi et je l'ai vue mille fois cette erreur en plus, Mehdi avait résolu ça avec le export ...!! De mémoire le seul truc que j'ai changé depuis c'est une update/upgrade Opam. C'est lourd ces trucs qui fonctionnent un jour et plus trois mois plus tard d’autant que je suis à peu près sûr de l'avoir compilé avec succès : j'avais déjà cette branche « win8mai » en local, et j'ai relu le log irc avec Crockignol qui avait réussi aussi. Du coup ça me laisse un peu perplexe cette histoire… !!

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by a2line
Saturday Sep 10, 2016 at 21:27 GMT


Du coup j'ai refait opam update/upgrade et ça compile !

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Saturday Sep 10, 2016 at 23:19 GMT


J'ai fait le test suivant:

  1. Effacé tout le contenu de mon C:\cygwin64\home\guillaume pour repartir en neuf
  2. Téléchargé la toute dernière version du script (https://gist.github.com/a2line/f134c88c80eafcf0411b38e32a0a7128) incluant maintenant le checkout sur la branche "win8mai"
  3. Exécuté le script tel quel sans rien changer.

Voici le résultat:

Enter directory for installation (if left empty default directory will be C:\cygwin): C:\cygwin64
Un sous-répertoire ou un fichier C:\cygwin64 existe déjà.
Installing Cygwin/Opam/ocamlfind/Camlp5 for a 64bit operating system into C:\cygwin64
note: Hand installation over to elevated child process.
tar: opam64.tar.xz : open impossible: No such file or directory
tar: Error is not recoverable: exiting now
/usr/bin/bash: opam64/install.sh: No such file or directory
Checking for available remotes: rsync and local, git.
  - you won't be able to use mercurial repositories unless you install the �[01mhg�[m command on your system.
  - you won't be able to use darcs repositories unless you install the �[01mdarcs�[m command on your system.

�[33m[WARNING]�[m No external solver found, one of �[01maspucd�[m, �[01mpackup�[m and �[01mmccs�[m is recommended (see http://opam.ocaml.org/doc/Install.html#ExternalSolvers for details)
�[33m[WARNING]�[m Recommended dependencies -- most packages rely on these:
            - �[01mcc�[m


=-=- Fetching repository information =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
�[K[�[1;34mmingw�[m] git+https://github.com/fdopen/opam-repository-mingw.git updated

�[36m=-=-�[m �[01mInstalling compiler 4.02.3+mingw64c�[m �[36m=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=�[m
�[K�[31m[ERROR]�[m https://dl.dropboxusercontent.com/s/21080rx7g1h5lcg/ocaml-4.02.3mingw64.tar.xz is not available.
[ERROR] Initialisation failed
OpamStd.OpamSys.Exit(66)
�[31m[ERROR]�[m No OPAM root found at C:/cygwin64/home/guillaume/.opam.
        Please run 'opam init' to initialize the state of OPAM, or specify '--root'.
        See 'opam init --help' for details.
[ERROR] The current switch (system) is an unknown compiler switch.
Compile GeneWeb master in Cygwin home directory [y/n]?

On dirait qu'il y a actuellement des problèmes avec les liens dropbox ...???

EDIT: Je crois que le problème est au niveau de la commande curl... c'est peut-être mon installation de cygwin qui ne fonctionne pas bien...

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Sunday Sep 11, 2016 at 13:22 GMT


Mise à jour:

J'ai tout effacé mon dossier cygwin et ré-installé à partir de zéro via un nouveau fichier setup-x86_64.exe fraîchement téléchargé. Ceci a réglé le problème de la commande curl.

On note toutefois que j'ai dû exécuter le script DEUX FOIS, car lors de la première fois, le script a continué avant que l'installation des packages cygwin ne soit terminée (i.e. le script semble passer à la ligne 12 sans que la ligne 11 ne soit terminée, voir https://gist.github.com/a2line/f134c88c80eafcf0411b38e32a0a7128#file-opamwin-bat-L11), ce qui cause une erreur à la ligne 12. Si on ré-exécute le script une seconde fois, la ligne 12 est OK car curl est déjà installé.

En outre, avant de tout effacer, j'ai remarqué que j'avais deux packages curl de téléchargé dans var/cache/packages, curl-7.50.1-1 et curl-7.50.2-1 (voir aussi : https://cygwin.com/cgi-bin2/package-grep.cgi?grep=curl&arch=x86_64), le second étant daté du 8 septembre. C'est peut-être une mise-à-jour du package curl qui a causé mon problème avec curl... (voir ici : #58 (comment))

Mais ceci est de l'histoire ancienne, le problème avec curl est maintenant réglé.

Par contre, je tombe encore sur l'erreur:

camlp5r pa_macro.cmo -D WIN95 -o gwuLib.ppo gwuLib.ml
ocamlfind ocamlopt -safe-string -linkpkg -warn-error A  -I ../wserver -I ../dag2html -I C:/cygwin64/home/guillaume/.opam/4.02.3+mingw64c/lib/camlp5 -c -impl gwuLib.ppo
rm -f gwuLib.ppo
ln -fs gwu.ml gwu.ppo
ocamlfind ocamlopt -safe-string -linkpkg -warn-error A  -I ../wserver -I ../dag2html -I C:/cygwin64/home/guillaume/.opam/4.02.3+mingw64c/lib/camlp5 -c -impl gwu.ppo
File "gwu.ppo", line 1, characters 10-13:
Warning 3: deprecated: ISO-Latin1 characters in identifiers
File "gwu.ppo", line 1, characters 13-14:
Error: Illegal character (\000)
make[1]: *** [../tools/Makefile.config:160: gwu.cmx] Error 2
make[1] : on quitte le répertoire « /home/guillaume/geneweb/src »
make: *** [Makefile:26: src?opt] Error 2

Il manque donc probablement un petit quelquechose pour que le script soit fonctionnel à 100% (opam update/upgraade, voir #58 (comment)).

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by a2line
Sunday Sep 11, 2016 at 18:37 GMT


Non, je ne pense pas qu'il y en ai besoin, quand on installe les paquets avec Opam il met ceux à jour. J'ai vérifié que les deux .tar d'Opam sont toujours aux mêmes URLs, ça n'a pas bougé. J'ai donc relancé le script tel quel sur un vieux p4 x86 qui trainait et j'ai compilé GeneWeb d'une traite ! Est-ce que tu lances bien ton prompt/cmd avec les droits d’administrateur ? Il y en a obligatoirement besoin pour les symlinks (explications au pied de cette page) et c'est d'ailleurs le seul problème qu'avait eu Crockignol ; on a tourné en rond pendant 2 h pour rien avant d'identifier ce problème « symlinks sous Win que pour les admins » (en gros RTFM !! je l'ai mis en gras pour le prochain !).

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Monday Sep 12, 2016 at 02:20 GMT


En effet, les droits administrateurs règlent les deux problèmes qu'il me restait : la ligne 12 n'est plus exécutée avant que la ligne 11 ne soit terminée, et la compilation se rend jusqu'à la fin sans l'erreur "Illegal character (\000)". Merci.

Afin de rendre le script encore plus "idiot proof", il serait peut-être bon de mettre un gros message au début du script, rappelant à l'utilisateur qu'il faut lancer le script avec les privilèges administrateurs, ou bien tester si le script a été exécuté avec les privilèges administrateurs (voir http://stackoverflow.com/questions/4051883/batch-script-how-to-check-for-admin-rights).

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by a2line
Monday Sep 12, 2016 at 04:43 GMT


Bonne idée. Cette vérification évitera des malheurs. J'ai ajouté un pti bout de code en m'inspirant du thread stackoverflow sans avoir vraiment testé car je n'arrive pas à trouver un prompt sans droits admin (le comble ?!:). Ça devrait relancer le script automatiquement avec les bons droits. Je testerais demain car là pas envie de redémarrer l'ordi pour activer l'UAC.

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Monday Sep 12, 2016 at 11:08 GMT


Merci, je vais valider que cela fonctionne ce soir sur mon Windows 10 64 bits.

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by a2line
Monday Sep 12, 2016 at 20:12 GMT


Ok pour moi. Ça a l'air de faire ce que ça disait sur le thread : j'ai lancé un prompt sans être admin, puis le batch, la popup pour l'UAC s'ouvre que l'on valide et un second prompt en admin execute le script (win7 x64 pro). Parfait.

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by GuillaumeBrochu
Tuesday Sep 13, 2016 at 03:12 GMT


Ça fonctionne bien aussi de mon côté. C'est une bonne idée de relancer automatiquement le script avec les droits administrateurs, car ça évite de devoir expliquer le concept d' "invite de commandes avec droits d'administrateurs" à ceux qui ne savent pas de quoi il s'agit!

Petit bémol, j'avais initialement un "é" dans le nom de dossier (ex : Généalogie...) contenant le script et ça empêche le script de s'auto-ré-exécuter. En changeant le nom du dossier pour y retirer le "é", ça fonctionne.

Autre suggestion d'amélioration vraiment mineure : ajuster automatiquement le nom du répertoire de cygwin selon si windows 32 ou 64 bits. En mode 64 bits, le nom de dossier par défaut lors de l'installation de Cygwin est C:\cygwin64 et non C:\cygwin.

@fablhx
Copy link
Contributor Author

fablhx commented Oct 12, 2016

Comment by a2line
Tuesday Sep 13, 2016 at 18:15 GMT


L'intérêt est aussi qu'on peut double-cliquer sur le .bat sans avoir à ouvrir une console. J'ai corrigé quand au répertoire par défaut pour l'installation 64 bit, merci pour cette remarque.

@a2line a2line added the Bug label Oct 13, 2016
@a2line
Copy link
Collaborator

a2line commented Oct 28, 2016

Pour ceux qui voudraient tester GeneWeb à jour (avec ocamlrun), il faut modifier légèrement les .bat pour lancer les exe avec bash. Adaptez le chemin en fonction de votre installation de Cygwin (ici c:\cygwin).

c:\cygwin\bin\bash -lc "cd /cygdrive/c/gw7/ && gw/gwd.exe -hd gw -bd bases"

gwsetup.bat (to launch it, but quite useless because most functions don't work because of syntax)

c:\cygwin\bin\bash -lc "cd /cygdrive/c/gw7/bases && ../gw/gwsetup.exe -lang en -gd ../gw"

Edit: attention, le server gwd lancé de cette manière n'est pas visible par les autres machines du réseau local…

@a2line
Copy link
Collaborator

a2line commented Nov 23, 2016

En fait c'est d'un très simple, pour retrouver ses exes « plus gros et sans besoin d'ocamlrun», on compile avec make opt qui sera mis par défaut. Vérifié sur Tuxfamily en CGI et Windows : ça fonctionne comme en 40 98. J'adapte le batch d'installation d'environnement Win en conséquence, et delete ma branche 8 mai inutile. J'invite Guillaume à essayer aussi, ça lui évitera de faire du cherry picking pour sa release « gb7 ».

@a2line a2line closed this as completed Nov 23, 2016
@GuillaumeBrochu
Copy link
Contributor

Je confirme que le nouveau script (pris intégralement sans aucune modification, https://gist.github.com/a2line/f134c88c80eafcf0411b38e32a0a7128) a compilé sans erreur du 1er coup, et ce, en repartant de mon installation de cygwin d'il y a deux mois dans laquelle je n'ai effacé que le dossier C:\cygwin64\home\user\geneweb 👍

@a2line
Copy link
Collaborator

a2line commented Nov 24, 2016

Encore un petit message sur cette issue pour archiver ici que j'ai également supprimé du script le export CYGWIN=winsymlinks:native qui n’était nécessaire que parce que l’on faisait un checkout sur un commit antérieur. Ce n’est plus nécessaire depuis un bon moment maintenant !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants