Compilation d'un petit projet Ocsigen

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

J’essaye en ce moment de me mettre à Ocisgen. Ayant toujours utilisé OCaml d’une façon très basique, je rencontre plusieurs difficultés. Les gens du canal #informatique sur irc.smoothirc.net m’ont déjà d’ailleurs bien aidé.

Bref, j’ai donc installé Eliom 6.2 avec Opam. J’ai crée un projet avec la commande eliom-destillery -name site -template basic -destination site.

J’ai ensuite remplacé le code du fichier site.eliom avec l’exemple d’une des premières pages de la documentation :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
open Eliom_content.Html.F

module Site =
  Eliom_registration.App (
    struct
      let application_name = "site"
      let global_data_path = None
    end)

let main_service =
  Site.create
    ~path:(Eliom_service.Path [""])
    ~meth:(Eliom_service.Get Eliom_parameter.unit)
    (fun () () -> Lwt.return (html
                               (head (title (pcdata "Hi!")) [])
                               (body [p [pcdata "Hey."]])))

Et lorsque je compile tout ceci avec make test.byte, voilà l’erreur :

ocsigenserver: ocsigen:main: Fatal - Findlib package ocsigenserver.ext.ocsipersist-dbm not found: maybe you forgot <findlib path="…"/>? make: *** [test.byte] Erreur 53

Je ne comprends pas ce qui cloche ici. Il me semble pourtant avoir installé correctement opam, eliom et ocsigenserver (j’ai suivi les instructions de la documentation, en prenant soin de faire un opam switch pour utiliser un compilateur OCaml récent). Je pense avoir néanmoins fait une bêtise : j’ai utilisé sudopour installer Ocsigen avec opam, même si je ne comprends pas en quoi cela poserait un problème. Ici, on dirait que le compilateur cherche une dépendance qu’il ne peut pas trouver.

Quelqu’un peut-il m’éclairer ? Dois-je éditer le Makefile ? Je vous remercie par avance !

j’ai utilisé sudopour installer Ocsigen avec opam, même si je ne comprends pas en quoi cela poserait un problème.

Ça ressemble à opam qui aurait installé ocsigen sur le switch system (celui qui utilise le compilateur de ton système plutôt qu’en installer un lui-même - et qui marche assez mal). Est-ce que tu peux donner le résultat des commandes suivantes :

1
2
$ opam switch -i
$ opam list

?

Salut Eusèbe,

opam switch -i renvoie :

Fatal error:
# opam-version 1.2.2
# os linux
opam: "open" failed on /home/etienne/.opam/log/command-31591-5a61c5.out: Permission denied

opam list renvoie à peu de choses près le même résultat :

Fatal error:
# opam-version 1.2.2 # os linux
opam: "open" failed on /home/etienne/.opam/log/command-31594-5a61c5.out: Permission denied

Par contre, si je mets le sudo (même si un warning m’indique clairement que ce n’est pas recommandé), les deux commandes renvoient respectivement :

[WARNING] Running as root is not recommended
4.02.1 I 4.02.1 Official 4.02.1 release
4.04.0 C 4.04.0 Official 4.04.0 release
[WARNING] The environment is not in sync with the current switch.
You should run: eval opam config env

Et :

[WARNING] Running as root is not recommended
# Installed packages for 4.04.0:
base-bigarray base Bigarray library distributed with the OCaml compiler
base-bytes base Bytes library distributed with the OCaml compiler
base-num base Num library distributed with the OCaml compiler
base-threads base Threads library distributed with the OCaml compiler
base-unix base Unix library distributed with the OCaml compiler
base64 2.2.0 Base64 encoding for OCaml
biniou 1.2.0 Binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve
calendar 2.03.2 Library for handling dates and times in your program
camlp4 4.04+1 Camlp4 is a system for writing extensible parsers for programming languages cmdliner 1.0.0 Declarative definition of command line interfaces for OCaml
conf-libpcre 1 Virtual package relying on a libpcre system installation.
conf-m4 1 Virtual package relying on m4
conf-openssl 1 Virtual package relying on an OpenSSL system installation.
conf-pkg-config 1.0 Virtual package relying on pkg-config installation.
conf-which 1 Virtual package relying on which
conf-zlib 1 Virtual package relying on zlib
cppo 1.5.0 Equivalent of the C preprocessor for OCaml programs
cryptokit 1.10 Cryptographic primitives library.
csv 1.7 A pure OCaml library to read and write CSV files.
deriving 0.7.1 Extension to OCaml for deriving functions from type declarations
easy-format 1.2.0 High-level and functional interface to the Format module of the OCaml standard library
eliom 6.2.0 Client/server Web framework
ipaddr 2.7.2 IP (and MAC) address manipulation
jbuilder 1.0+beta11 Fast, portable and opinionated build system
js_of_ocaml 2.8.3 Compiler from OCaml bytecode to Javascript
lwt 2.7.1 Monadic promises and concurrent I/O
macaque 0.7.4 Macaque (Macros for Caml Queries) is a DSL for OCaml, which produces
menhir 20170712 LR(1) parser generator
merlin 3.0.1 Editor helper, provides completion, typing and source browsing in Vim and Emacs
num 0 The Num library for arbitrary-precision integer and rational arithmetic
oasis 0.4.10 Tooling for building OCaml libraries and applications
ocamlbuild 0.11.0 OCamlbuild is a build system with builtin rules to easily build most OCaml projects.
ocamlfind 1.7.3 A library manager for OCaml
ocamlify 0.0.1 Include files in OCaml code
ocamlmod 0.0.8 Generate OCaml modules from source files
ocamlnet 4.1.2 Internet protocols (HTTP, CGI, e-mail etc.) and helper data structures
ocsigen-i18n 3.1.0 I18n made easy for web sites written with eliom.
ocsigen-start 1.0.0 Skeleton for building client-server Eliom applications
ocsigen-toolkit 1.0.0 Reusable UI components for Eliom applications (client only, or client-server)
ocsigenserver 2.8 A full-featured and extensible Web server
optcomp 1.6 Optional compilation with cpp-like directives
pcre 7.2.3 pcre-ocaml - bindings to the Perl Compatibility Regular Expressions library
pgocaml 2.3 Interface to PostgreSQL databases
ppx_core 113.33.01+4.03 Standard library for ppx rewriters
ppx_deriving 4.1 Type-driven code generation for OCaml >=4.02
ppx_driver 113.33.02+4.03 Feature-full driver for OCaml AST transformers
ppx_optcomp 113.33.01+4.03 Optional compilation for OCaml
ppx_sexp_conv 113.33.01+4.03 Generation of S-expression conversion functions from type definitions
ppx_tools 5.0 Tools for authors of ppx rewriters and other syntactic tools
ppx_type_conv 113.33.02+4.03 Support Library for type-driven code generators
re 1.7.1 RE is a regular expression library for OCaml
react 1.2.1 Declarative events and signals for OCaml
reactiveData 0.2.1 Functional reactive programming with incremental changes in data structures
result 1.2 Compatibility Result module
safepass 2.0 A library enabling the safe storage of user passwords
sexplib 113.33.00+4.03 Library for serializing OCaml values to and from S-expressions
sqlite3 4.1.3 sqlite3-ocaml - SQLite3 bindings
ssl 0.5.3 Bindings for OpenSSL
topkg 0.9.0 The transitory OCaml software packager
tyxml 4.1.0 TyXML is a library for building statically correct HTML5 and SVG documents
uchar 0.0.2 Compatibility library for OCaml’s Uchar module
uutf 1.0.1 Non-blocking streaming Unicode codec for OCaml
yojson 1.4.0 Yojson is an optimized parsing and printing library for the JSON format

Peut-être que ces fichiers auxquels tu n’as pas le droit d’accéder ont été créés quand tu utilisais opam en root. Essaye de faire un sudo chown -R etienne /home/etienne/.opam pour réparer ça. Ensuite réessaye les commandes proposées par Eusèbe sans sudo ?

Pour l’erreur initiale : si vraiment Ocsipersist est mal installé, peut-être qu’on peut simplement virer les parties du Makefile qui en parlent (vu que tu ne l’utilises pas ici). Regarde d’abord si les paquets ocsigen et eliom sont bien installés pour l’utilisateur etienne (donc sans sudo).

Edit : je viens de remarquer le

1
2
[WARNING] The environment is not in sync with the current switch.
You should run: eval `opam config env`

C’est probablement de là que vient le problème, en tout cas c’est un problème à régler. Est-ce que tu as bien ajouté la ligne demandée lors de l’installation de opam à ton .bashrc ? C’est une ligne genre

1
. /home/etienne/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true

Si oui et que le problème persiste, assure-toi d’utiliser un terminal qui a bien été ouvert depuis que cette ligne a été rajoutée.

Accessoirement, fais "eval `opam config env`" puis make test.byte dans le même terminal et regarde si le problème est toujours là ?

+0 -0

Effectivement, il y a l’air d’y avoir deux problèmes : d’une part des droits bizarres dans ton dossier opam (le chown devrait régler ça), d’autre part un environnement qui n’est pas synchronisé avec le switch que tu devrais utiliser. La commande suivante devrait régler ça :

1
$ eval `opam config env`

Tu devrais la mettre dans ton .bashrc ou équivalent pour qu’elle s’exécute automatiquement.

Merci à vous deux pour vos réponses rapides.

Le sudo chown résout effectivement les problèmes d’accéssibilité :) Les commandes sans sudo renvoient les mêmes résultats qu’avec le sudo (je vous ai mis tout ça dans mon message précédent).

En revanche, même si je me place dans le dossier de mon projet, que je fais :

1
eval `opam config env`

Puis make test.byte, le problème persiste, on a toujours :

ocsigenserver -c local/etc/site/site-test.conf
ocsigenserver: ocsigen:main: Fatal - Findlib package ocsigenserver.ext.ocsipersist-dbm not found: maybe you forgot <findlib path="…"/>?
make: *** [test.byte] Erreur 53

J’ai vérifié mon .bashrc, la ligne à rajouter lors de l’installation d’Opam est bien présente.

EDIT : finalement, le problème vient d’être résolu sur le canal #informatique de smoothirc.net. Tout ceci venait d’une bêtise que j’ai faite au début : j’ai utilisé apt-get avant d’utiliser opam. La bonne commande n’est donc pas eliom-destillery mais eliom-distillery, qui elle génère un code parfaitement compilable sur Eliom 6.2.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte