Replace Erlang shell with system command - erlang

Is it possible to replace the erl shell with a system command? Similar to how you would with a POSIX exec call?
I'm trying to set up an SSH server in Erlang that gives a separate CLI instead of the built in one. I'm aware of OpenSSH's sshd's options to do this; does Erlang have something similar?
For example, how would I get the following command to work as it does with sshd(8) in an Erlang environment?
# connect to Erlang SSH server and drop into IPython shell
ssh user#host ipython
I have the server working fine—I'm able to connect without problems—and I know that you can develop your own CLI with the ssh_cli option for ssh:daemon. It might have something to do with ports and drivers or the user_drv:start command, but I'm having difficulty figuring out how this all works.

Related

pstack equivalent in erlang

When a Erlang system hangs I want to know what the system is doing during that time. For a c/c++ program, I can easily run the pstack, but I didn't find out a handy tool for this purpose in Erlang.
What is the pstack equivalent in Erlang?
Actually I want to check the running stack trace of the following process.
"/opt/couchbase/lib/erlang/erts-5.10.4.0.0.1/bin/beam.smp -P 327680 -K true -- -root /opt/couchbase/lib/erlang -progname erl --... "
and I started a new Erlang shell and start the webtool and check the appmon however I can't find the above application. What may cause this?
Thanks
Concerning pstack equivalent, have you read Erlang Profiling from official guide? It gives you lot of example on how to profile your application and find where your code stuck.
Another useful tools is observer it will show all working process, CPU usage, process stack and lot of more information.
If you don't see anything with these tools, you can try with Erlang debugger.
Now concerning couchbase, if your application is currently running, you can connect to it with Erlang shell and launch previous quoted commands and applications.
I don't know if you are using couchbase alone or with couchdb, but, if you want to use observer or other tools from command line, you can start couchdb with -i flag:
# -i use the interactive Erlang shell
couchdb -i
In case of your application run remotely without GUI, you can use etop, its a CLI alternative to observer. You can also dump etop output to file if you don't want to run it directly from your Erlang shell. IHMO, if you want more information concerning I/O or debug, use eprof, fprof and other profiling tools with dump file (see also eep profiling tool, easy to use).
Another alternative, if you are using SSH and want to see observer window, you can use X11Forwarding with ssh: ssh -X $yourserver or ssh -Y $yourserver and simply run observer:start(). in your Erlang shell.

send files or execute commands over ssh

Jenkins is running on windows machine and I am trying to copy files from windows to unix as a build step.
SSH sever details has been configured in the global configuration and connected successfully.
kindly share the Exec command to copy files from windows to unix
You need some kind of ssh client on your windows. I suggest Winscp, which is simple, easy and fast.
Winscp is a GUI application but as you want to run something from Jenkins you need to have a command line tool. Good news is that you can run Winscp in command line. Then the following steps should answer your question:
Install Winscp on the Windows machine.
Add your Winscp installation path (sth like C:\Program Files (x86)\WinSCP) to your system environment path variable
Now you should be able to run winscp command in windows command prompt
The command below will copy the file, you should read winscp manual for more details:
winscp root:password#UNIX_MACHINE_IP /command "put c:/PATH_TO_FILE_ON_WINDOWS /home/PATH_TO_TARGET_ON_UNIX"
There is a Jenkins plugin that might fit your needs:
https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin
It uses Java SSH library so no need to install another SSH client.
To copy files using PuTTY or any unix shell powered with SSH from windows, run this command.
scp /path/to/file.ext user#m192.168.0.100:/Destiny/path
To run commands in your remote computer just connect to it with:
ssh user#192.168.0.100
Customize the user, the IP and authenticate with the properly password.

Start Erlang on startup.

I'm working on using erlang development server. Is there a way fro me to start the erlang vm and continue from the commandline or add a script to the startup files? To be clear I want to start erlang and keep it running outside of the command prompt.
You can use the -detached flag. See http://www.erlang.org/doc/man/erl.html for more information.
I usually use scripts, which rebar create-node do provide. There is such commands as: start, stop, ping and attach. Although you must use erlang releases in order to use this scripts (at list take a look at template, maybe it would be helpful)

Console Utility that can remote connect to other systems and issue commands

Frequenlty my work involves to VNC to a remote system and work on it. SInce i run command line apps on this remote system most of the time, i was wondering if there's an alternative software to command prompt which i could install on my local machine. Using this i should be able to create a session with the remote system and from then on all commands issued in command prompt should run in remote system.
localHost>dir --> should list the directory contents in remotehost active directory
localhost>app.exe should run app.exe in remote host and display its contents in localhost command prompt
I browsed a little and read about cmdlets in powershell. But it looks like i need to write a cmdlet for each app in the path (dir, mkdir, app.exe in the path). Correct me if am wrong. Once session is established, i simply need the commands invoked in local host to be run in the remote host and return the console output to local host. Please let me know if powershell + cmdlets are the only way
THanks
Just use PowerShell Remoting if it can be set up (requires a little preparation).
I'm not quite sure why you think of writing own cmdlets for stuff that's already there. dir is an alias to Get-ChildItem which does return the items in the current path (and—depending on options—some other stuff as well). And since PowerShell is a shell it has no problems running external programs too.
SSH is what you're looking for. Cygwin has a SSH server and client.
Unix people do this all the time with SSH. You can install the sshd server on your remote machine through Cygwin, then use PuTTY to connect to it.
As a bonus, PuTTY does not use the clunky Windows cmd.exe program; it's got a much nicer terminal of its own.
You could maybe even run PowerShell on the remote end, so you don't have to learn bash.
Depending upon on how you actuall access the machines PSExec may be an alternative that wont require you to install anything on the remote system.

Riak on Windows

I want to play with Riak http://riak.basho.com/ or a least get it running on a Windows system. I have downloaded the source code and compiled it but that's where I get stuck, how do I start it?
It does run, altough I havent managed to run it as a service yet.
Install CYGwin, install latest erlang, get source code, compile in cygwin
then the fun part, adjust according to your paths and place into a batch
c:\riak\rel\riak\erts-5.7.4\bin\erl -boot c:\riak\rel\riak\releases\0.8\riak -embedded -config c:\riak\rel\riak\etc\app.config -args_file c:\riak\rel\riak\etc\vm.args -- console
Regards
Looks like the riak source has several bash start scripts. You would have to convert those to a windows batch script equivalent. That could be a fairly interesting chore given how limited batch scripts are. Those start-*.sh files show how to start it up though so I'd start there.
The http://hg.basho.com/riak/src/tip/README Readme file has futher info on what each script does.
Riak can not be run on Windows, only on Linux and Mac.
An alternative is to run VMWare or VirtualBox and run Riak inside a Linux VM. Works great for me.
Running it inside docker instance works very well - this is in 2017 the only way to successfully run Riak on Windows. You could probably get something running using Cygwin but this will be very complex and unreliable. Running under Docker is currently the most idiomatic solution.

Resources