We already have a check to avoid upgrading between minor versions,
such as 4.3 <-> 4.4 (and 4.4 <-> 4.5):
```
Cannot upgrade/downgrade to 4.4.11-rc.3 from 4.3.17
We only support relup between patch versions
escript: exception error: {relup_not_allowed,unsupported_target_version}
in function install_upgrade_escript__escript__1670__7364__537878__24:validate_target_version/2 (/usr/lib/emqx/bin/install_upgrade.escript, line 444)
in call from install_upgrade_escript__escript__1670__7364__537878__24:install/2 (/usr/lib/emqx/bin/install_upgrade.escript, line 58)
in call from escript:run/2 (escript.erl, line 758)
in call from escript:start/1 (escript.erl, line 277)
in call from init:start_em/1
in call from init:do_boot/3
```
But such check is missing for `unpack`, which may result in an
unusable node after just unpacking:
```
emqx@d70cfe0e8e62:~$ emqx ctl status
ERROR: node_is_not_running!
```
The issue apparently arises from `nodetool` trying to use the
`compiler` lib from the newer version rather than the old one:
```
+ ERL_FLAGS=' -start_epmd false -epmd_module ekka_epmd -proto_dist ekka'
+ /usr/lib/emqx/erts-11.2.2.8/bin/escript /usr/lib/emqx/bin/nodetool -name emqx@127.0.0.1 -setcookie emqxsecretcookie ping
+ die 'node_is_not_running!' 1
+ set +x
ERROR: node_is_not_running!
emqx@d70cfe0e8e62:~$ /usr/lib/emqx/erts-11.2.2.8/bin/escript /usr/lib/emqx/bin/nodetool -name emqx@127.0.0.1 -setcookie emqxsecretcookie ping
escript: Internal error: undef
=ERROR REPORT==== 2-Dec-2022::19:02:39.150274 ===
Loading of /usr/lib/emqx/lib/compiler-8.1.1/ebin/compile.beam failed: badfile
=ERROR REPORT==== 2-Dec-2022::19:02:39.150271 ===
beam/beam_load.c(1879): Error loading module compile:
This BEAM file was compiled for a later version of the run-time system than 23.
To fix this, please recompile this module with an 23 compiler.
(Use of opcode 176; this emulator supports only up to 170.)
```
Prior to this fix, space was already allowed in root path
for 'start' 'console' etc. (the boot commands).
However the non-boot commands such as 'ping' still had trouble.
When installed from RPM or DEB, In case EMQX in started by root,
the boot script changes user to emqx and then re-enter with the
same args.
Prior to this change, the Erlang start check is done before
su, causing it to be checked twice.
This commit moves the Erlang start check to after th su
When installed from RPM or DEB, In case EMQX in started by root,
the boot script changes user to emqx and then re-enter with the
same args.
Prior to this change, the Erlang start check is done before
su, causing it to be checked twice.
This commit moves the Erlang start check to after th su
During upgrade procedure, emqx zip file is repacked to .tar.gz but does not
preserve permission of files.
This commit ensure files under BINDIR is executable