Installation d'une solution de collaboration Ethercalc: Feuille de calcul collaborative

ethercalc
Je cherchais depuis un moment, un outil collaboratif.
Je cherche toujours des alternatives aux Géants du Web tels que Google ou Microsoft.
Mais force est de constater qu'il n'existe aujourd'hui pas de réèls concurents à ses solutions...

Le traitement de texte collaboratif que j'utilise est Etherpad, mais en ce qui concerne les feuille de calcul collaborative, c'est une autre paire de manche...

Ethercalc est un système de feuille collaborative open source, ce type d'outil  est tellement rare, qu'il mérite un petit billet.

Ethercalc Logo

EtherCalc est un tableur collaboratif en temps réel. Il permet par défaut à un maximum de seize personnes de partager un texte en cours d'élaboration. Les contributions de chacun apparaissent immédiatement sur l'écran de tous les participants et sont signalées par des couleurs différentes. Une fenêtre de messagerie instantanée est également disponible.

Le système ne requiert aucune installation, ni aucune inscription, il suffit d'avoir une connexion internet et un navigateur web. EtherCalc est écrit en JavaScript.

L'application a été lancée le 19 novembre 2008 par David Greenspan, Aaron Iba et J.D. Zamfirescu (ces deux derniers travaillaient auparavant pour Google).

Le 4 décembre 2009, Google rachète AppJet, la société qui possède le logiciel et il est annoncé que cette application collaborative sera proposée sous licence Open Source1.

Le 17 décembre 2009, Google libère les sources d'EtherCalc sous licence Apache v2.

source: Wikipedia.

EtherCalc



Plateforme Materielle :



Comme d'habitude, j'ai monté mon prototype sur ma plateforme de virtualisation:

Dedibox Pro HP
Plateforme logicielle hyperviseur:
  • Dom0 Ubuntu 12.04 X86_64 Xen 4.1
Plateforme Virtuelle:

  • DomU Xen Ubuntu 12.04 X86_64 Paravirtualisé
  • 2 vcpus 
  • 512 Mo de Ram
  • HDD 16GB


Installation:

Pour commencer j'ai mis à jour totalement mon DomU ubuntu 12.04; mon template avait quelques maj de retard :)

  • Mise à niveau du DomU
root@ubuntults:/# apt-get update; apt-get upgrade
root@ubuntults:/# apt-get install linux-headers-server linux-image-server linux-server
root@ubuntults:/# reboot

  • Installation des prérequis
root@antony-linux:/home/antony# apt-get install gzip git-core curl python perl build-essential

  • Installation de node.js
    On télécharge la dernière version de node.js et on la compile
    Attention, ethercalc n'est pour l'instant pas compatible avec node.js v9
    On utilise la version packagée dans ubuntu 12.04 : nodejs_0.6.12
      root@antony-linux:/home/antony# apt-get install nodejs npm

    • Installation de Ethercalc 
    On utilse git pour récupérer la dernière version.
    root@ubuntu:~# cd /opt/
    root@ubuntu:/opt# git clone https://github.com/audreyt/ethercalc.git
    Cloning into 'ethercalc'...
    remote: Counting objects: 2049, done.
    remote: Compressing objects: 100% (1263/1263), done.
    remote: Total 2049 (delta 755), reused 1905 (delta 626)
    Receiving objects: 100% (2049/2049), 3.03 MiB | 1.73 MiB/s, done.
    Resolving deltas: 100% (755/755), done.

    On installe ethercalc:

    root@ubuntults:/opt/ethercalc# root@ubuntu:/opt/ethercalc# npm i -g ethercalc
    npm http GET https://registry.npmjs.org/ethercalc
    npm http 200 https://registry.npmjs.org/ethercalc
    npm http GET https://registry.npmjs.org/ethercalc/-/ethercalc-0.20121026.162049.tgz
    npm http 200 https://registry.npmjs.org/ethercalc/-/ethercalc-0.20121026.162049.tgz
    npm http GET https://registry.npmjs.org/redis
    npm http GET https://registry.npmjs.org/uuid-pure
    npm http GET https://registry.npmjs.org/optimist
    npm http GET https://registry.npmjs.org/zappajs
    npm http GET https://registry.npmjs.org/hiredis
    npm http 200 https://registry.npmjs.org/uuid-pure
    npm http GET https://registry.npmjs.org/uuid-pure/-/uuid-pure-1.0.10.tgz
    npm http 200 https://registry.npmjs.org/optimist
    npm http GET https://registry.npmjs.org/optimist/-/optimist-0.3.5.tgz
    npm http 200 https://registry.npmjs.org/uuid-pure/-/uuid-pure-1.0.10.tgz
    npm http 200 https://registry.npmjs.org/zappajs
    npm http GET https://registry.npmjs.org/zappajs/-/zappajs-0.4.12.tgz
    npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.3.5.tgz
    npm http 200 https://registry.npmjs.org/hiredis
    npm http GET https://registry.npmjs.org/hiredis/-/hiredis-0.1.14.tgz
    npm http 200 https://registry.npmjs.org/zappajs/-/zappajs-0.4.12.tgz
    npm http 200 https://registry.npmjs.org/hiredis/-/hiredis-0.1.14.tgz
    npm http 200 https://registry.npmjs.org/redis
    npm http GET https://registry.npmjs.org/redis/-/redis-0.8.1.tgz
    npm http 200 https://registry.npmjs.org/redis/-/redis-0.8.1.tgz
    npm http GET https://registry.npmjs.org/wordwrap
    npm http GET https://registry.npmjs.org/coffeecup/0.3.17
    npm http GET https://registry.npmjs.org/coffee-css/0.0.5
    npm http GET https://registry.npmjs.org/node-uuid/1.4.0
    npm http GET https://registry.npmjs.org/uglify-js/1.3.4
    npm http GET https://registry.npmjs.org/express/3.0.0
    npm http GET https://registry.npmjs.org/socket.io/0.9.10

    > hiredis@0.1.14 preinstall /usr/local/lib/node_modules/ethercalc/node_modules/hiredis
    > make || gmake

    cd deps/hiredis && make static
    make[1]: Entering directory `/usr/local/lib/node_modules/ethercalc/node_modules/hiredis/deps/hiredis'
    cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb net.c
    npm http 200 https://registry.npmjs.org/wordwrap
    npm http GET https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz
    npm http 200 https://registry.npmjs.org/coffeecup/0.3.17
    npm http GET https://registry.npmjs.org/coffeecup/-/coffeecup-0.3.17.tgz
    cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb hiredis.c
    npm http 200 https://registry.npmjs.org/coffee-css/0.0.5
    npm http GET https://registry.npmjs.org/coffee-css/-/coffee-css-0.0.5.tgz
    npm http 200 https://registry.npmjs.org/uglify-js/1.3.4
    npm http GET https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.4.tgz
    npm http 200 https://registry.npmjs.org/socket.io/0.9.10
    npm http 200 https://registry.npmjs.org/express/3.0.0
    npm http GET https://registry.npmjs.org/socket.io/-/socket.io-0.9.10.tgz
    npm http GET https://registry.npmjs.org/express/-/express-3.0.0.tgz
    npm http 200 https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz
    npm http 200 https://registry.npmjs.org/node-uuid/1.4.0
    npm http GET https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz
    npm http 200 https://registry.npmjs.org/coffeecup/-/coffeecup-0.3.17.tgz
    cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb sds.c
    npm http 200 https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.4.tgz
    npm http 200 https://registry.npmjs.org/socket.io/-/socket.io-0.9.10.tgz
    npm http 200 https://registry.npmjs.org/express/-/express-3.0.0.tgz
    cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb async.c
    npm http 200 https://registry.npmjs.org/coffee-css/-/coffee-css-0.0.5.tgz
    ar rcs libhiredis.a net.o hiredis.o sds.o async.o
    npm http 200 https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz
    make[1]: Leaving directory `/usr/local/lib/node_modules/ethercalc/node_modules/hiredis/deps/hiredis'
    node-waf configure build
    Setting srcdir to : /usr/local/lib/node_modules/ethercalc/node_modules/hiredis
    Setting blddir to : /usr/local/lib/node_modules/ethercalc/node_modules/hiredis/build
    Checking for program g++ or c++ : /usr/bin/g++
    Checking for program cpp : /usr/bin/cpp
    Checking for program ar : /usr/bin/ar
    Checking for program ranlib : /usr/bin/ranlib
    Checking for g++ : ok
    Checking for node path : not found
    Checking for node prefix : ok /usr
    'configure' finished successfully (0.075s)
    Waf: Entering directory `/usr/local/lib/node_modules/ethercalc/node_modules/hiredis/build'
    [1/3] cxx: hiredis.cc -> build/Release/hiredis_1.o
    [2/3] cxx: reader.cc -> build/Release/reader_1.o
    [3/3] cxx_link: build/Release/hiredis_1.o build/Release/reader_1.o -> build/Release/hiredis.node
    Waf: Leaving directory `/usr/local/lib/node_modules/ethercalc/node_modules/hiredis/build'
    'build' finished successfully (1.526s)
    npm http GET https://registry.npmjs.org/underscore
    npm http GET https://registry.npmjs.org/coffee-script
    npm http GET https://registry.npmjs.org/commander/0.6.1
    npm http GET https://registry.npmjs.org/range-parser/0.0.4
    npm http GET https://registry.npmjs.org/mkdirp/0.3.3
    npm http GET https://registry.npmjs.org/cookie/0.0.4
    npm http GET https://registry.npmjs.org/crc/0.2.0
    npm http GET https://registry.npmjs.org/fresh/0.1.0
    npm http GET https://registry.npmjs.org/methods/0.0.1
    npm http GET https://registry.npmjs.org/send/0.1.0
    npm http GET https://registry.npmjs.org/debug
    npm http GET https://registry.npmjs.org/connect/2.6.0
    npm http GET https://registry.npmjs.org/policyfile/0.0.4
    npm http GET https://registry.npmjs.org/redis/0.7.2
    npm http GET https://registry.npmjs.org/socket.io-client/0.9.10
    npm http GET https://registry.npmjs.org/coffee-script
    npm http GET https://registry.npmjs.org/optparse/1.0.3
    npm http GET https://registry.npmjs.org/uglify-js/1.2.6
    npm http GET https://registry.npmjs.org/stylus/0.27.2
    npm http 200 https://registry.npmjs.org/mkdirp/0.3.3
    npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
    npm http 200 https://registry.npmjs.org/range-parser/0.0.4
    npm http GET https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
    npm http 200 https://registry.npmjs.org/coffee-script
    npm http GET https://registry.npmjs.org/coffee-script/-/coffee-script-1.4.0.tgz
    npm http 200 https://registry.npmjs.org/commander/0.6.1
    npm http GET https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
    npm http 200 https://registry.npmjs.org/cookie/0.0.4
    npm http GET https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
    npm http 200 https://registry.npmjs.org/crc/0.2.0
    npm http GET https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
    npm http 200 https://registry.npmjs.org/fresh/0.1.0
    npm http GET https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
    npm http 200 https://registry.npmjs.org/methods/0.0.1
    npm http GET https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
    npm http 200 https://registry.npmjs.org/send/0.1.0
    npm http GET https://registry.npmjs.org/send/-/send-0.1.0.tgz
    npm http 200 https://registry.npmjs.org/policyfile/0.0.4
    npm http GET https://registry.npmjs.org/policyfile/-/policyfile-0.0.4.tgz
    npm http 200 https://registry.npmjs.org/connect/2.6.0
    npm http GET https://registry.npmjs.org/connect/-/connect-2.6.0.tgz
    npm http 200 https://registry.npmjs.org/debug
    npm http GET https://registry.npmjs.org/debug/-/debug-0.7.0.tgz
    npm http 200 https://registry.npmjs.org/underscore
    npm http GET https://registry.npmjs.org/underscore/-/underscore-1.4.2.tgz
    npm http 200 https://registry.npmjs.org/optparse/1.0.3
    npm http GET https://registry.npmjs.org/optparse/-/optparse-1.0.3.tgz
    npm http 200 https://registry.npmjs.org/redis/0.7.2
    npm http GET https://registry.npmjs.org/redis/-/redis-0.7.2.tgz
    npm http 200 https://registry.npmjs.org/socket.io-client/0.9.10
    npm http GET https://registry.npmjs.org/socket.io-client/-/socket.io-client-0.9.10.tgz
    npm http 200 https://registry.npmjs.org/uglify-js/1.2.6
    npm http GET https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.6.tgz
    npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
    npm http 200 https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
    npm http 200 https://registry.npmjs.org/coffee-script/-/coffee-script-1.4.0.tgz
    npm http 200 https://registry.npmjs.org/stylus/0.27.2
    npm http GET https://registry.npmjs.org/stylus/-/stylus-0.27.2.tgz
    npm http 200 https://registry.npmjs.org/coffee-script
    npm http GET https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz
    npm http 200 https://registry.npmjs.org/commander/-/commander-0.6.1.tgz
    npm http 200 https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
    npm http 200 https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
    npm http 200 https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
    npm http 200 https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
    npm http 200 https://registry.npmjs.org/policyfile/-/policyfile-0.0.4.tgz
    npm http 200 https://registry.npmjs.org/send/-/send-0.1.0.tgz
    npm http 200 https://registry.npmjs.org/connect/-/connect-2.6.0.tgz
    npm http 200 https://registry.npmjs.org/debug/-/debug-0.7.0.tgz
    npm http 200 https://registry.npmjs.org/underscore/-/underscore-1.4.2.tgz
    npm http 200 https://registry.npmjs.org/optparse/-/optparse-1.0.3.tgz
    npm http 200 https://registry.npmjs.org/redis/-/redis-0.7.2.tgz
    npm http 200 https://registry.npmjs.org/socket.io-client/-/socket.io-client-0.9.10.tgz
    npm http 200 https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.6.tgz
    npm http 200 https://registry.npmjs.org/stylus/-/stylus-0.27.2.tgz
    npm http 200 https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz
    npm http GET https://registry.npmjs.org/mime/1.2.6
    npm http GET https://registry.npmjs.org/qs/0.5.1
    npm http GET https://registry.npmjs.org/formidable/1.0.11
    npm http GET https://registry.npmjs.org/bytes/0.1.0
    npm http GET https://registry.npmjs.org/send/0.0.4
    npm http GET https://registry.npmjs.org/pause/0.0.1
    npm http 200 https://registry.npmjs.org/qs/0.5.1
    npm http GET https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
    npm http 200 https://registry.npmjs.org/formidable/1.0.11
    npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
    npm http 200 https://registry.npmjs.org/mime/1.2.6
    npm http GET https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
    npm http 200 https://registry.npmjs.org/pause/0.0.1
    npm http GET https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
    npm http 200 https://registry.npmjs.org/bytes/0.1.0
    npm http GET https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
    npm http 200 https://registry.npmjs.org/send/0.0.4
    npm http GET https://registry.npmjs.org/send/-/send-0.0.4.tgz
    npm http 200 https://registry.npmjs.org/qs/-/qs-0.5.1.tgz
    npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
    npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
    npm http 200 https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
    npm http 200 https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
    npm http 200 https://registry.npmjs.org/send/-/send-0.0.4.tgz
    npm http GET https://registry.npmjs.org/mime/1.2.6
    npm http 304 https://registry.npmjs.org/mime/1.2.6
    npm http GET https://registry.npmjs.org/debug
    npm http GET https://registry.npmjs.org/cssom
    npm http GET https://registry.npmjs.org/mkdirp
    npm http 200 https://registry.npmjs.org/mkdirp
    npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.4.tgz
    npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.4.tgz
    npm http 304 https://registry.npmjs.org/debug
    npm http 200 https://registry.npmjs.org/cssom
    npm http GET https://registry.npmjs.org/cssom/-/cssom-0.2.5.tgz
    npm http 200 https://registry.npmjs.org/cssom/-/cssom-0.2.5.tgz
    npm http GET https://registry.npmjs.org/uglify-js/1.2.5
    npm http GET https://registry.npmjs.org/ws
    npm http GET https://registry.npmjs.org/xmlhttprequest/1.4.2
    npm http GET https://registry.npmjs.org/active-x-obfuscator/0.0.1
    npm http 200 https://registry.npmjs.org/uglify-js/1.2.5
    npm http GET https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz
    npm http 200 https://registry.npmjs.org/xmlhttprequest/1.4.2
    npm http GET https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz
    npm http 200 https://registry.npmjs.org/active-x-obfuscator/0.0.1
    npm http GET https://registry.npmjs.org/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz
    npm http 200 https://registry.npmjs.org/ws
    npm http GET https://registry.npmjs.org/ws/-/ws-0.4.22.tgz
    npm http 200 https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz
    npm http 200 https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz
    npm http 200 https://registry.npmjs.org/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz
    npm http 200 https://registry.npmjs.org/ws/-/ws-0.4.22.tgz
    npm http GET https://registry.npmjs.org/zeparser/0.0.5
    npm http GET https://registry.npmjs.org/commander
    npm http GET https://registry.npmjs.org/tinycolor
    npm http GET https://registry.npmjs.org/options
    npm http 200 https://registry.npmjs.org/zeparser/0.0.5
    npm http GET https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz
    npm http 200 https://registry.npmjs.org/tinycolor
    npm http GET https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz
    npm http 200 https://registry.npmjs.org/options
    npm http GET https://registry.npmjs.org/options/-/options-0.0.3.tgz
    npm http 200 https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz
    npm http 200 https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz
    npm http 200 https://registry.npmjs.org/options/-/options-0.0.3.tgz
    npm http 200 https://registry.npmjs.org/commander

    > ws@0.4.22 install /usr/local/lib/node_modules/ethercalc/node_modules/zappajs/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws
    > node install.js

    [ws v0.4.22] Attempting to compile blazing fast native extensions.
    [ws v0.4.22] Native code compile failed (but the module will still work):
    [ws v0.4.22] The native extensions are faster, but not required.
    [ws v0.4.22] On Windows, native extensions require Visual Studio and Python.
    [ws v0.4.22] On Unix, native extensions require Python, make and a C++ compiler.
    [ws v0.4.22] Start npm with --ws:verbose to show compilation output (if any).
    /usr/local/bin/ethercalc -> /usr/local/lib/node_modules/ethercalc/bin/ethercalc
    ethercalc@0.20121026.162049 /usr/local/lib/node_modules/ethercalc
    ├── uuid-pure@1.0.10
    ├── redis@0.8.1
    ├── optimist@0.3.5 (wordwrap@0.0.2)
    ├── hiredis@0.1.14
    └── zappajs@0.4.12



    C'est bien joli, mais déjà on le lance en root ce qui n'est pas jojo et on est obligé de lancer le script à la main...
    C'est pas très optimisé...

    On crée un user Ethercalc et on donne les droits adéquats.
    root@ubuntults:~# useradd ethercalc

    root@ubuntults:~# chown -R ethercalc /opt/ethercalc


    On crée maintenant un script d'init afin de pouvoir lancer Ethercalc en tant que daemon
    Ce script nous permet de lancer ethercalc en tant que ethercalc et aussi de pouvoir la lancer au demmarage.

    #!/bin/sh

    ### BEGIN INIT INFO
    # Provides: ethercalc
    # Required-Start: $local_fs $remote_fs $network $syslog
    # Required-Stop: $local_fs $remote_fs $network $syslog
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: starts ethercalc
    # Description: starts ethercalc lite using start-stop-daemon
    ### END INIT INFO

    PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/node/bin"
    LOGFILE="/var/log/ethercalc.log"
    EPLITE_DIR="/usr/local/bin/"
    EPLITE_BIN="ethercalc"
    USER="ethercalc"
    GROUP="ethercalc"
    DESC="Ethercalc"
    NAME="ethercalc"

    set -e

    . /lib/lsb/init-functions

    start() {
    echo "Starting $DESC... "

    start-stop-daemon --start --chuid "$USER:$GROUP" --background --make-pidfile --pidfile /var/run/$NAME.pid --exec $EPLITE_DIR/$EPLITE_BIN -- $LOGFILE || true
    echo "done"
    }

    #We need this function to ensure the whole process tree will be killed
    killtree() {
    local _pid=$1
    local _sig=${2-TERM}
    for _child in $(ps -o pid --no-headers --ppid $pid); do
    killtree $child $sig
    done
    kill -$sig $pid
    }

    stop() {
    echo "Stopping $DESC... "
    while test -d /proc/$(cat /var/run/$NAME.pid); do
    killtree $(cat /var/run/$NAME.pid) 15
    sleep 0.5
    done
    rm /var/run/$NAME.pid
    echo "done"
    }

    status() {
    status_of_proc -p /var/run/$NAME.pid "" "ethercalc" && exit 0 || exit $?
    }

    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    stop
    start
    ;;
    status)
    status
    ;;
    *)
    echo "Usage: $NAME {start|stop|restart|status}" >&2
    exit 1
    ;;
    esac

    exit 0


    On le rend executable.
    root@ubuntults:/var/log# chmod +x /etc/init.d/ethercalc

    On active le script au démmarage:

     root@ubuntu:/opt/ethercalc# update-rc.d ethercalc defaults
    Adding system startup for /etc/init.d/ethercalc ...
    /etc/rc0.d/K20ethercalc -> ../init.d/ethercalc
    /etc/rc1.d/K20ethercalc -> ../init.d/ethercalc
    /etc/rc6.d/K20ethercalc -> ../init.d/ethercalc
    /etc/rc2.d/S20ethercalc -> ../init.d/ethercalc
    /etc/rc3.d/S20ethercalc -> ../init.d/ethercalc
    /etc/rc4.d/S20ethercalc -> ../init.d/ethercalc
    /etc/rc5.d/S20ethercalc -> ../init.d/ethercalc


    root@ubuntults:/var/log# /etc/init.d/ethercalc start

    Notre ethercalc est bien lancé

    root@ubuntu:/opt/ethercalc# ps aux | grep ethercalc
    1001 12154 1.7 7.1 724976 35712 ? Sl 22:09 0:00 node /usr/local/bin//ethercalc /var/log/ethercalc.log
    root 12190 0.0 0.1 8104 924 pts/0 S+ 22:10 0:00 grep --color=auto ethercalc


    L'interface:

    ethercalc interface web



    ethercalc interface web
    • La fonction Graphs

    Ethercalc interface web



    Ethercalc est un outil simple installer, léger,  et agréable à utiliser.
    Bien sur il est bien loin des fonctionnalités de Google Docs ou autres, mais il a le mérite d'exister.
    Pour un usage ponctuel il est très souvent suffisant.
    Surtout le plus important c'est qu'il est installé sur vos serveurs.

    Ethercalc est un moteur, après il faut faire toute l'intégration CMS autour.

    Quelques projets existent déjà:



    Vus : 2049
    Publié par Bartounet : 24