-
Notifications
You must be signed in to change notification settings - Fork 231
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
339 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
:: A script to build relx on Windows | ||
:: Requires rebar | ||
|
||
:: Get dependencies, compile and escriptize relx | ||
@cmd /c @rebar -r get-deps compile escriptize | ||
|
||
:: Create a shortcut file for running the relx command | ||
@set relx_cmd=relx.cmd | ||
@echo @echo off > %relx_cmd% | ||
@echo setlocal >> %relx_cmd% | ||
@echo set relx=%%~f0 >> %relx_cmd% | ||
@echo escript ^"%%relx:.cmd=%%^" %%* >> %relx_cmd% |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
:: This is a simple start batch file that runs the release in an Erlang shell | ||
|
||
:: Set variables that describe the release | ||
@set rel_name={{ rel_name }} | ||
@set rel_vsn={{ rel_vsn }} | ||
@set erts_vsn={{ erts_vsn }} | ||
@set erl_opts={{ erl_opts }} | ||
|
||
:: Set the root release directory based on the location of this batch file | ||
@set script_dir=%~dp0 | ||
@for %%A in ("%script_dir%\..") do ( | ||
@set "release_root_dir=%%~fA" | ||
) | ||
@set rel_dir=%release_root_dir%\releases\%rel_vsn% | ||
|
||
@call :find_erts_dir | ||
@call :find_sys_config | ||
|
||
@set rootdir=%release_root_dir% | ||
@set bindir=%erts_dir%\bin | ||
@set progname=erl | ||
@set erl=%bindir%\erl | ||
|
||
cd %rootdir% | ||
|
||
:: Write the erl.ini file | ||
@set erl_ini=%erts_dir%\bin\erl.ini | ||
@set converted_bindir=%bindir:\=\\% | ||
@set converted_rootdir=%rootdir:\=\\% | ||
@echo [erlang] > "%erl_ini%" | ||
@echo Bindir=%converted_bindir% >> "%erl_ini%" | ||
@echo Progname=%progname% >> "%erl_ini%" | ||
@echo Rootdir=%converted_rootdir% >> "%erl_ini%" | ||
|
||
:: Start the release in an `erl` shell | ||
@%erl% %erl_opts% %sys_config% -boot "%rel_dir%\%rel_name%" %* | ||
|
||
@goto :eof | ||
|
||
:: Find the ERTS dir | ||
:find_erts_dir | ||
@set erts_dir=%release_root_dir%\erts-%erts_vsn% | ||
@if exist %erts_dir% ( | ||
@goto :set_erts_dir_from_default | ||
) else ( | ||
@goto :set_erts_dir_from_erl | ||
) | ||
@goto :eof | ||
|
||
:: Set the ERTS dir from the passed in erts_vsn | ||
:set_erts_dir_from_default | ||
@set erts_dir=%erts_dir% | ||
@set root_dir=%release_root_dir% | ||
@goto :eof | ||
|
||
:: Set the ERTS dir from erl | ||
:set_erts_dir_from_erl | ||
@for /f "delims=" %%i in ('where erl') do ( | ||
@set erl=%%i | ||
) | ||
@set dir_cmd="%erl%" -noshell -eval "io:format(\"~s\", [filename:nativename(code:root_dir())])." -s init stop | ||
@for /f %%i in ('%%dir_cmd%%') do ( | ||
@set erl_root=%%i | ||
) | ||
@set erts_dir=%erl_root%\erts-%erts_vsn% | ||
@set rootdir=%erl_root% | ||
@goto :eof | ||
|
||
:: Find the sys.config file | ||
:find_sys_config | ||
@set possible_sys=%rel_dir%\sys.config | ||
@if exist "%possible_sys%" ( | ||
@set sys_config=-config "%possible_sys%" | ||
) | ||
@goto :eof |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
[erlang] | ||
Bindir={{ bin_dir }} | ||
Progname=erl | ||
Rootdir={{ output_dir }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,176 @@ | ||
:: This batch file handles managing an Erlang node as a Windows service. | ||
:: | ||
:: Commands provided: | ||
:: | ||
:: * install - install the release as a Windows service | ||
:: * start - start the service and Erlang node | ||
:: * stop - stop the service and Erlang node | ||
:: * restart - run the stop command and start command | ||
:: * uninstall - uninstall the service and kill a running node | ||
:: * ping - check if the node is running | ||
:: * console - start the Erlang release in a `werl` Windows shell | ||
:: * attach - connect to a running node and open an interactive console | ||
:: * list - display a listing of installed Erlang services | ||
:: * usage - display available commands | ||
|
||
:: Set variables that describe the release | ||
@set rel_name={{ rel_name }} | ||
@set rel_vsn={{ rel_vsn }} | ||
@set erts_vsn={{ erts_vsn }} | ||
@set erl_opts={{ erl_opts }} | ||
|
||
:: Discover the release root directory from the directory | ||
:: of this script | ||
@set script_dir=%~dp0 | ||
@for %%A in ("%script_dir%\..") do @( | ||
@set release_root_dir=%%~fA | ||
) | ||
@set rel_dir=%release_root_dir%\releases\%rel_vsn% | ||
|
||
@call :find_erts_dir | ||
@call :find_sys_config | ||
|
||
@set bindir=%erts_dir%\bin | ||
@set vm_args=%rel_dir%\vm.args | ||
@set progname=erl.exe | ||
@set boot_script=%rel_dir%\%rel_name% | ||
@set clean_boot_script=%release_root_dir%\bin\start_clean | ||
@set erlsrv="%bindir%\erlsrv.exe" | ||
@set epmd="%bindir%\epmd.exe" | ||
@set escript="%bindir%\escript.exe" | ||
@set werl="%bindir%\werl.exe" | ||
@set nodetool="%release_root_dir%\bin\nodetool" | ||
|
||
:: Extract node type and name from vm.args | ||
@for /f "usebackq tokens=1-2" %%I in (`findstr /b "\-name \-sname" "%vm_args%"`) do @( | ||
@set node_type=%%I | ||
@set node_name=%%J | ||
) | ||
|
||
:: Extract cookie from vm.args | ||
@for /f "usebackq tokens=1-2" %%I in (`findstr /b \-setcookie "%vm_args%"`) do @( | ||
@set cookie=%%J | ||
) | ||
|
||
:: Write the erl.ini file to set up paths relative to this script | ||
@call :write_ini | ||
|
||
:: If a start.boot file is not present, copy one from the named .boot file | ||
@if not exist "%rel_dir%\start.boot" ( | ||
@copy "%rel_dir%\%rel_name%.boot" "%rel_dir%\start.boot" >nul | ||
) | ||
|
||
@if "%1"=="install" @goto install | ||
@if "%1"=="uninstall" @goto uninstall | ||
@if "%1"=="start" @goto start | ||
@if "%1"=="stop" @goto stop | ||
@if "%1"=="restart" @call :stop && @goto start | ||
@if "%1"=="console" @goto console | ||
@if "%1"=="ping" @goto ping | ||
@if "%1"=="list" @goto list | ||
@if "%1"=="attach" @goto attach | ||
@if "%1"=="" @goto usage | ||
@echo Unknown command: "%1" | ||
|
||
@goto :eof | ||
|
||
:: Find the ERTS dir | ||
:find_erts_dir | ||
@set possible_erts_dir=%release_root_dir%\erts-%erts_vsn% | ||
@if exist "%possible_erts_dir%" ( | ||
@call :set_erts_dir_from_default | ||
) else ( | ||
@call :set_erts_dir_from_erl | ||
) | ||
@goto :eof | ||
|
||
:: Set the ERTS dir from the passed in erts_vsn | ||
:set_erts_dir_from_default | ||
@set erts_dir=%possible_erts_dir% | ||
@set rootdir=%release_root_dir% | ||
@goto :eof | ||
|
||
:: Set the ERTS dir from erl | ||
:set_erts_dir_from_erl | ||
@for /f "delims=" %%i in ('where erl') do @( | ||
@set erl=%%i | ||
) | ||
@set dir_cmd="%erl%" -noshell -eval "io:format(\"~s\", [filename:nativename(code:root_dir())])." -s init stop | ||
@for /f %%i in ('%%dir_cmd%%') do @( | ||
@set erl_root=%%i | ||
) | ||
@set erts_dir=%erl_root%\erts-%erts_vsn% | ||
@set rootdir=%erl_root% | ||
@goto :eof | ||
|
||
:: Find the sys.config file | ||
:find_sys_config | ||
@set possible_sys=%rel_dir%\sys.config | ||
@if exist %possible_sys% ( | ||
@set sys_config=-config %possible_sys% | ||
) | ||
@goto :eof | ||
|
||
:: Write the erl.ini file | ||
:write_ini | ||
@set erl_ini=%erts_dir%\bin\erl.ini | ||
@set converted_bindir=%bindir:\=\\% | ||
@set converted_rootdir=%rootdir:\=\\% | ||
@echo [erlang] > "%erl_ini%" | ||
@echo Bindir=%converted_bindir% >> "%erl_ini%" | ||
@echo Progname=%progname% >> "%erl_ini%" | ||
@echo Rootdir=%converted_rootdir% >> "%erl_ini%" | ||
@goto :eof | ||
|
||
:: Display usage information | ||
:usage | ||
@echo usage: %~n0 ^(install^|uninstall^|start^|stop^|restart^|console^|ping^|list^|attach^) | ||
@goto :eof | ||
|
||
:: Install the release as a Windows service | ||
:install | ||
@set args=%erl_opts% -setcookie %cookie% ++ -rootdir \"%rootdir%\" | ||
@set start_erl=%erts_dir%\bin\start_erl.exe | ||
@set description=Erlang node %node_name% in %rootdir% | ||
@%erlsrv% add %rel_name% %node_type% "%node_name%" -c "%description%" ^ | ||
-w "%rootdir%" -m "%start_erl%" -args "%args%" ^ | ||
-stopaction "init:stop()." | ||
@goto :eof | ||
|
||
:: Uninstall the Windows service | ||
:uninstall | ||
@%erlsrv% remove %rel_name% | ||
@%epmd% -kill | ||
@goto :eof | ||
|
||
:: Start the Windows service | ||
:start | ||
@%erlsrv% start %rel_name% | ||
@goto :eof | ||
|
||
:: Stop the Windows service | ||
:stop | ||
@%erlsrv% stop %rel_name% | ||
@goto :eof | ||
|
||
:: Start a console | ||
:console | ||
@start "%rel_name% console" %werl% -boot "%boot_script%" "%sys_config%" ^ | ||
-args_file "%vm_args%" %node_type% %node_name% | ||
@goto :eof | ||
|
||
:: Ping the running node | ||
:ping | ||
@%escript% %nodetool% ping %node_type% "%node_name%" -setcookie "%cookie%" | ||
@goto :eof | ||
|
||
:: List installed Erlang services | ||
:list | ||
@%erlsrv% list %rel_name% | ||
@goto :eof | ||
|
||
:: Attach to a running node | ||
:attach | ||
@start "%node_name% attach" %werl% -boot "%clean_boot_script%" ^ | ||
-remsh %node_name% %node_type% console -setcookie %cookie% | ||
@goto :eof |
Oops, something went wrong.