Impossibile avviare il rilascio Erlang campione generato con tondo per cemento armato

StackOverflow https://stackoverflow.com/questions/7324556

  •  27-10-2019
  •  | 
  •  

Domanda

Sono un principiante con armature e Erlang in generale. Stavo cercando di creare un rilascio Erlang con armature in base a questo tutorial: http://www.metabrew.com/article/erlang-rebar-tutorial-generating-releases-upgrades e rimasto bloccato nel punto di esecuzione di rilascio generato.

Il mio sistema è Ubuntu 11.04 a 64 bit, Erlang R14B03, installata da fonti.

Quando sto invocando 'bin / console someNode', ottengo uno dei seguenti errori:

Exec: /home/ghik/Inz/somerel/rel/somenode/erts-5.8.4/bin/erlexec -boot /home/ghik/Inz/somerel/rel/somenode/releases/1/somenode -mode embedded -config /home/ghik/Inz/somerel/rel/somenode/etc/app.config -args_file /home/ghik/Inz/somerel/rel/somenode/etc/vm.args -- console
Root: /home/ghik/Inz/somerel/rel/somenode
{"init terminating in do_boot",{'cannot load',hipe_amd64_encode,get_files}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

È interessante notare, ogni volta faccio funzionare, diverso atomo è elencato invece di 'hipe_amd64_encode', ad esempio: 'hipe_amd64_defuse', 'hipe_amd64_assemble', etc. Sto indovinando Erlang non riesce a caricare hipe, ma non ho idea del perché si sta cercando di caricarlo in primo luogo. La release contiene una sola, molto semplice applicazione dipende solo kernel e stdlib.

Per qualche ragione, tondo per cemento armato genera un file .rel con un sacco di applicazioni non necessarie:

%% rel generated at {2011,9,6} {20,5,48}
{release,{"somenode","1"},
     {erts,"5.8.4"},
     [{kernel,"2.14.4"},
      {stdlib,"1.17.4"},
      {sasl,"2.1.9.4"},
      {someapp,"1"},
      {compiler,"4.7.4",load},
      {crypto,"2.0.3",load},
      {et,"1.4.3",load},
      {gs,"1.5.13",load},
      {hipe,"3.8",load},
      {inets,"5.6",load},
      {mnesia,"4.4.19",load},
      {observer,"0.9.9",load},
      {public_key,"0.12",load},
      {runtime_tools,"1.8.5",load},
      {ssl,"4.1.5",load},
      {syntax_tools,"1.6.7.1",load},
      {tools,"2.6.6.4",load},
      {webtool,"0.8.8",load},
      {wx,"0.98.10",load}]}.

Perché Lista tondo per cemento armato soo molte applicazioni nel file .rel? E evento se va bene, perché non l'inizio di rilascio?

È stato utile?

Soluzione

Prima di tutto, si può provare a vedere ciò che non riesce durante l'avvio della macchina virtuale con l'aggiunta di argomenti init_debug al VM:

$ erl -init_debug
{progress,preloaded}
{progress,kernel_load_completed}
{progress,modules_loaded}
{start,heart}
{start,error_logger}
{start,application_controller}
{progress,init_kernel_started}
...
{progress,applications_loaded}
{apply,{application,start_boot,[kernel,permanent]}}
{apply,{application,start_boot,[stdlib,permanent]}}
{apply,{c,erlangrc,[]}}
{progress,started}
Erlang R14B03 (erts-5.8.4) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8.4  (abort with ^G)
1>

Con questo, sarete in grado di vedere con maggiori dettagli il tipo di interazioni in corso. Potrebbe essere che le biblioteche vengono caricati nell'ordine sbagliato, non il supporto nativo, ecc.


Secondo problema, il file che contiene rel troppe applicazioni. Ciò è probabilmente dovuto al fatto che utilizza armatura Reltool OT generare release, e che differenti applicazioni può essere caricato a seconda di come granulare controllo è rilascia generatrici whne (vedi materiale incl_cond nella documentazione). Ci sono alcuni esempi di questo nel di uscita è la parola capitolo di Learn È alcuni Erlang:

{sys, [
 {lib_dirs, ["/home/ferd/code/learn-you-some-erlang/release/"]},
 {erts, [{mod_cond, derived}, % derived makes it pick less stuff
         {app_file, strip}]},
 {rel, "erlcount", "1.0.0", [kernel, stdlib, ppool, erlcount]},
 {boot_rel, "erlcount"},
 {relocatable, true},
 {profile, embedded}, % reduces the files included from each app
 {app_file, strip}, % reduces the size of app files if possible
 {incl_cond, exclude}, % by default, don't include apps. 'derived' is another option
 {app, stdlib, [{mod_cond, derived}, {incl_cond, include}]}, % include at the app
 {app, kernel, [{incl_cond, include}]},                      % level overrides the
 {app, ppool, [{vsn, "1.0.0"}, {incl_cond, include}]},       % exclude put earlier
 {app, erlcount, [{vsn, "1.0.0"}, {incl_cond, include}]}
]}.

E questo dovrebbe generare versioni più piccole.

Altri suggerimenti

Aggiungi al reltool.config, la seguente riga:

{app, hipe, [{incl_cond, exclude}]}

Non so la risposta buona, ma so che non ho potuto iniziare un rilascio in esecuzione su diverse versioni CentOS con un paio di diversi kernel, quindi questo non è esattamente insolito. L'aggiornamento a 5.6 ha reso finalmente funziona. È possibile vedere quali sistemi operativi in ??realtà fare il test ogni giorno qui:

http://www.erlang.org/doc/installation_guide/INSTALL. html # id62915

Inoltre, si potrebbe compilare senza HIPE, immagino.

Ultimamente ho trovato questo post: http://mokele.co.uk/2011/07 /01/rebar-release-upgrade-caveats.html

Si scopre un elenco di errori in tondo per cemento armato, uno dei quali è il motivo per cui il mio rilascio non potrebbe lanciare. Ci sono anche le correzioni pubblicate. Spero che verranno fusi in repository tondo per cemento armato principale ASAP.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top