Установка gmake на Ubuntu; Сервер Ковбой не запускается

Для запуска моего ковбойского сервера erlang требуется gmake. Я могу использовать gmake run на своем компьютере с OSX и запустить сервер. Запуск make run тоже работает нормально, но предупреждает меня, что я должен установить gmake.

Когда я установил репозиторий https://github.com/QuantumProductions/tunnel.git на свой ubuntu, я попытался make run и получил сообщение об ошибке. Нет доступных пакетов для gmake. Как установить gmake?

root@marble-pyramid-1:~/tunnel# apt-get install gmake
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package gmake
root@marble-pyramid-1:~/tunnel# ls
erlang.mk  Makefile  oldh  rel  relx.config  src  static  tunnel.d
root@marble-pyramid-1:~/tunnel# make run
erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
 DEP    cowboy
 DEP    jiffy
mv: cannot stat ‘/root/tunnel/deps/jiffy/ebin/jiffy.app’: No such file or directory
make[1]: Entering directory `/root/tunnel/.erlang.mk/rebar'
./bootstrap
No beam files found.
escript: exception error: undefined function make:files/2
  in function  erl_eval:do_apply/6 (erl_eval.erl, line 569)
  in call from erl_eval:expr/5 (erl_eval.erl, line 243)
  in call from escript:eval_exprs/5 (escript.erl, line 856)
  in call from erl_eval:local_func/5 (erl_eval.erl, line 467)
  in call from escript:interpret/4 (escript.erl, line 774)
  in call from escript:start/1 (escript.erl, line 277)
  in call from init:start_it/1
make[1]: *** [all] Error 127
make[1]: Leaving directory `/root/tunnel/.erlang.mk/rebar'
/root/tunnel
{"init terminating in do_boot",{undef,[{rmemo,start,[],[]},{erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,569}]},{erl_eval,exprs,5,[{file,"erl_eval.erl"},{line,118}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
make[1]: Entering directory `/root/tunnel/deps/cowboy'
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
 DEP    cowlib
 DEP    ranch
make[2]: Entering directory `/root/tunnel/deps/cowlib'
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
 DEPEND cowlib.d
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
 ERLC   cow_base64url.erl cow_cookie.erl cow_date.erl cow_hpack.erl cow_http.erl cow_http2.erl cow_http_hd.erl cow_http_te.erl cow_mimetypes.erl cow_multipart.erl cow_qs.erl cow_spdy.erl cow_sse.erl cow_uri.erl cow_ws.erl
src/cow_base64url.erl:31: syntax error before: '{'
src/cow_base64url.erl:40: syntax error before: '{'
src/cow_base64url.erl:52: syntax error before: '{'
src/cow_base64url.erl:59: syntax error before: '{'
src/cow_base64url.erl:21: function decode/1 undefined
src/cow_base64url.erl:22: function decode/2 undefined
src/cow_base64url.erl:23: function encode/1 undefined
src/cow_base64url.erl:55: function encode/3 undefined
make[3]: *** [ebin/cowlib.app] Error 1
make[2]: *** [app] Error 2
make[2]: Leaving directory `/root/tunnel/deps/cowlib'
make[1]: *** [deps] Error 2
make[1]: Leaving directory `/root/tunnel/deps/cowboy'
make: *** [deps] Error 2

РЕДАКТИРОВАТЬ: установка erlang-base-hipe:

root@marble-pyramid-1:~/tunnel# apt-get install erlang-base-hipe
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  gyp javascript-common libc-ares-dev libc-ares2 libjs-node-uuid libssl-dev
  libssl-doc libv8-3.14-dev linux-headers-3.13.0-68
  linux-headers-3.13.0-68-generic linux-image-3.13.0-68-generic
  linux-image-extra-3.13.0-68-generic node-abbrev node-ansi node-archy
  node-async node-block-stream node-combined-stream node-cookie-jar
  node-delayed-stream node-forever-agent node-form-data node-fstream
  node-fstream-ignore node-github-url-from-git node-glob node-graceful-fs
  node-gyp node-inherits node-ini node-json-stringify-safe node-lockfile
  node-lru-cache node-mime node-minimatch node-mkdirp node-mute-stream
  node-node-uuid node-nopt node-normalize-package-data node-npmlog node-once
  node-osenv node-qs node-read node-read-package-json node-request node-retry
  node-rimraf node-semver node-sha node-sigmund node-slide node-tar
  node-tunnel-agent node-which zlib1g-dev
Use 'apt-get autoremove' to remove them.
Suggested packages:
  erlang-edoc erlang-gs erlang erlang-manpages erlang-doc
The following packages will be REMOVED:
  erlang-base
The following NEW packages will be installed:
  erlang-base-hipe
0 upgraded, 1 newly installed, 1 to remove and 196 not upgraded.
Need to get 8,030 kB of archives.
After this operation, 2,610 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://mirrors.digitalocean.com/ubuntu/ trusty-updates/universe erlang-base-hipe amd64 1:16.b.3-dfsg-1ubuntu2.1 [8,030 kB]
Fetched 8,030 kB in 0s (16.9 MB/s)
dpkg: erlang-base: dependency problems, but removing anyway as you requested:
 erlang-crypto depends on erlang-base (= 1:16.b.3-dfsg-1ubuntu2.1) | erlang-base-hipe (= 1:16.b.3-dfsg-1ubuntu2.1); however:
  Package erlang-base is to be removed.
  Package erlang-base-hipe is not installed.
 erlang-asn1 depends on erlang-base (= 1:16.b.3-dfsg-1ubuntu2.1) | erlang-base-hipe (= 1:16.b.3-dfsg-1ubuntu2.1); however:
  Package erlang-base is to be removed.
  Package erlang-base-hipe is not installed.
 erlang-syntax-tools depends on erlang-base (= 1:16.b.3-dfsg-1ubuntu2.1) | erlang-base-hipe (= 1:16.b.3-dfsg-1ubuntu2.1); however:
  Package erlang-base is to be removed.
  Package erlang-base-hipe is not installed.
 erlang-runtime-tools depends on erlang-base (= 1:16.b.3-dfsg-1ubuntu2.1) | erlang-base-hipe (= 1:16.b.3-dfsg-1ubuntu2.1); however:
  Package erlang-base is to be removed.
  Package erlang-base-hipe is not installed.
 erlang-webtool depends on erlang-base (= 1:16.b.3-dfsg-1ubuntu2.1) | erlang-base-hipe (= 1:16.b.3-d
(Reading database ... 110838 files and directories currently installed.)
Removing erlang-base (1:16.b.3-dfsg-1ubuntu2.1) ...
Searching for services which depend on erlang and should be stopped...none found.
Killing epmd...it is not running.
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Selecting previously unselected package erlang-base-hipe.
(Reading database ... 110469 files and directories currently installed.)
Preparing to unpack .../erlang-base-hipe_1%3a16.b.3-dfsg-1ubuntu2.1_amd64.deb ...
Unpacking erlang-base-hipe (1:16.b.3-dfsg-1ubuntu2.1) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up erlang-base-hipe (1:16.b.3-dfsg-1ubuntu2.1) ...
Searching for services which depend on erlang and should be started...none found.
root@marble-pyramid-1:~/tunnel# make run
erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
make[1]: Entering directory `/root/tunnel/deps/cowboy'
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
make[2]: Entering directory `/root/tunnel/deps/cowlib'
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
 ERLC   cow_base64url.erl cow_cookie.erl cow_date.erl cow_hpack.erl cow_http.erl cow_http2.erl cow_http_hd.erl cow_http_te.erl cow_mimetypes.erl cow_multipart.erl cow_qs.erl cow_spdy.erl cow_sse.erl cow_uri.erl cow_ws.erl
src/cow_base64url.erl:31: syntax error before: '{'
src/cow_base64url.erl:40: syntax error before: '{'
src/cow_base64url.erl:52: syntax error before: '{'
src/cow_base64url.erl:59: syntax error before: '{'
src/cow_base64url.erl:21: function decode/1 undefined
src/cow_base64url.erl:22: function decode/2 undefined
src/cow_base64url.erl:23: function encode/1 undefined
src/cow_base64url.erl:55: function encode/3 undefined
make[3]: *** [ebin/cowlib.app] Error 1
make[2]: *** [app] Error 2
make[2]: Leaving directory `/root/tunnel/deps/cowlib'
make[1]: *** [deps] Error 2
make[1]: Leaving directory `/root/tunnel/deps/cowboy'
make: *** [deps] Error 2
root@marble-pyramid-1:~/tunnel#

person quantumpotato    schedule 15.09.2017    source источник
comment
Ошибка make:files, по-видимому, связана с отсутствием некоторых файлов в установке Erlang: github.com/rebar/rebar /вопросы/600.   -  person Dogbert    schedule 16.09.2017
comment
Eshell V5.10.4 (abort with ^G) 1> code:which(make). "/usr/lib/erlang/lib/tools-2.6.13/ebin/make.beam" Я установил rebar и попробовал еще раз. Сделал apt-get install erlang-base, попробую другой вариант, apt-get install erlang-base-hipe   -  person quantumpotato    schedule 16.09.2017


Ответы (2)


Если вы посмотрите на свой вывод, первая реальная ошибка, которую вы обнаружите, это:

src/cow_base64url.erl:31: syntax error before: '{'

И если вы посмотрите на строку 31 в src/cow_base64url.erldeps/cowlib/src), все, что вы найдете, это

decode(Enc, #{}).

#{} создает новую пустую карту, которая является «новой» функцией Erlang (впервые представленной в R17, теперь мы на R20). Поэтому я думаю, что вы пытаетесь скомпилировать свой код с более старой версией Erlang.

Пожалуйста, проверьте свою версию Erlang, вы можете сделать это, просто запустив erl в своей оболочке:

-> % erl -v
Erlang/OTP 20 [erts-9.0.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [hipe] [kernel-poll:false]

И, если на самом деле все это было вызвано старым дистрибутивом Erlang, то вы можете либо попробовать скачать готовые бинарники с официальный сайт или используйте kerl, чтобы легко создать свой собственный.

person mpm    schedule 19.09.2017
comment
Ага, спасибо! Я запустил apt-get install erlang, наивно полагая, что он установит последнюю версию. попробую обновить - person quantumpotato; 20.09.2017
comment
Я пытаюсь установить последнюю версию erlang, но столкнулся с проблемой, когда ./configure: stackoverflow.com/questions/46326695/ - person quantumpotato; 20.09.2017
comment
Сначала убедитесь, что это действительно проблема. Запустите erl и проверьте текущую версию Erlang. - person mpm; 20.09.2017
comment
Это erl версии 5 из встроенного erl, который я установил. Я удалил, затем начал ./configure - person quantumpotato; 20.09.2017

make это gmake в Ubuntu. На самом деле вам не нужно, чтобы он назывался gmake.

Ваша версия gmake почти наверняка 3.81, если ваш хост — Ubuntu 14.04 LTS, что кажется вероятным. Чтобы получить gmake 4, вам придется собрать его самостоятельно или сменить версию дистрибутива хоста.

Простое решение

Разместите свой сервис на Ubuntu 16.04 вместо 14.04

Немного более сложное (но все же простое) решение

Здесь мы собираемся собрать gmake 4.2.1 и установить его в другое место на вашем хосте.

Попробуйте следующие две команды и сравните вывод на своем хосте:

ceverett@changa:~$ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
これはフリーソフトウェアです. 利用許諾についてはソースを
ご覧ください.
商業性や特定の目的への適合性の如何に関わらず, 無保証です.

This program built for x86_64-pc-linux-gnu
ceverett@changa:~$ uname -srv
Linux 3.13.0-129-generic #178-Ubuntu SMP Fri Aug 11 12:48:20 UTC 2017

Это из одной из моих систем Ubuntu 14.04, которая актуальна прямо сейчас. У меня gmake 3.81 и ядро ​​3.13. (Очевидно, что японские биты связаны с регионом.)

Извлечение исходников для gmake 4.21 только что, его сборка и установка в /opt/gmake, похоже, сработали нормально:

sudo mkdir /opt/gmake
sudo chown "$USER:$USER" /opt/gmake
mkdir foo
cd foo
wget http://ftp.gnu.org/gnu/make/make-4.2.1.tar.bz2
tar -jxf make-4.2.1.tar.bz2
cd make-4.2.1
./configure --prefix=/opt/gmake
make
make install

Предполагая, что у вас установлен gcc, это должно работать без проблем, и у вас будет gmake 4.21 в /opt/gmake/bin/make.

Перехват erlang.mk и вашего специального установленного местоположения для gmake потребует небольшой коррекции пути, но если у вас уже есть $HOME/bin/ в вашем пути, то следующее должно работать:

ceverett@changa:~/foo$ sudo ln -s /opt/gmake/bin/make $HOME/bin/make
ceverett@changa:~/foo$ bash
ceverett@changa:~/foo$ make --version
GNU Make 4.2.1
このプログラムは x86_64-pc-linux-gnu 用にビルドされました
Copyright (C) 1988-2016 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 以降 <http://gnu.org/licenses/gpl.html>
これはフリーソフトウェアです: 自由に変更および配布できます.
法律の許す限り、 無保証 です.

У меня нет проектов, использующих erlang.mk, а также требующих сборки кода на других языках, но после запуска make devel в тестовом проекте это, кажется, сработало просто отлично.

person zxq9    schedule 18.09.2017
comment
Я попробую это. Моя версия мейка 3.81. - person quantumpotato; 18.09.2017
comment
@quantumpotato Итак, как все обернулось? - person zxq9; 22.09.2017