• # C'est cadeau

    Posté par . En réponse au message Distribuer un binaire. Évalué à 7.

    Salut, j'ai pris un peu de temps et j'ai regardé comment créer un binaire static en Ocaml.

    La seule chose que j'ai modifié est ton fichier src/dune où j'ai rajouté la ligne
    (flags (-ccopt -static))

    (libraries
    configuration
    common
    handlers
    lwt
    )
    (flags (-ccopt -static))
    (preprocess (pps lwt_ppx ppx_deriving_argparse))

    Les commandes sont les suivantes:

    docker run --name i3_workspaces -ti ocaml/opam2:alpine sh
    sudo apk add m4 pcre-dev
    git clone https://github.com/Chimrod/i3_workspaces.git
    cd i3_workspaces
    opam install . --deps-only --yes
    dune build

    Ensuite, dans ~/i3_workspaces/_build/default/src, se trouvent les deux exe i3_workspaces.exe et i3dot.exe, pour les avoir en local sur le pc, il suffit de faire :
    docker cp i3_workspaces:/home/opam/i3_workspaces/_build/default/src/i3_workspaces.exe .
    docker cp i3_workspaces:/home/opam/i3_workspaces/_build/default/src/i3dot.exe .

    Puis les deux fichiers peuvent être packagés avec FPM : https://fpm.readthedocs.io/en/latest/index.html

    mkdir -p i3_workspaces/opt/i3_workspaces
    mv i3_workspaces.exe i3_workspaces/opt/i3_workspaces
    mv i3dot.exe i3_workspaces/opt/i3_workspaces
    fpm -s dir -t deb -n i3-workspaces -v 0.2 -C ./i3_workspaces

    Du coup, tu obtiens un fichier i3-workspaces_0.2_amd64.deb que tu peux installer n'importe où sur une base DebiaN. À noter qu'il est aussi possible de distribuer une archive, un RPM, etc.

    Enfin pour les fichiers générés, je te conseillerais de créer une release sur Github, cela te permet que les gens accèdent aux bons fichiers en bonne version et tu n'as pas à gérer l'hosting.

    Exemple: https://github.com/ocaml/ocaml/releases/tag/4.11.1
    Doc: https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/managing-releases-in-a-repository

    Enfin, si tu veux, on peut automatiser les étapes ci-dessus avec Github actions, CircleCI, TravisCI, etc.