我正在尝试连接到我的笔记本电脑上的虚拟机上运行的远程lisp。在slime manual中,我找到了这一行
有一种方法可以在没有ssh隧道的情况下进行连接,但是它具有让整个世界都能访问你的lisp图像的副作用,所以我们不打算谈论它
这似乎有点过时了。我认为在虚拟机上运行lisp将不允许任何其他人访问lisp。
我的问题是,如何在没有SSH的情况下连接到远程lisp?
[编辑]
我看到了问题here,但是当我转发端口时,slime无法连接到swank并给我以下错误
Lisp connection closed unexpectedly: connection broken by remote peer
答案 0 :(得分:2)
您可以在虚拟机中使用quicklisp和swank,然后转发您在this tutorial之后打开lisp的端口或用于虚拟化的环境。
在虚拟机上的lisp中:
Welcome to Clozure Common Lisp Version 1.11-r16635 (DarwinX8664)!
CCL is developed and maintained by Clozure Associates. For more information
about CCL visit http://ccl.clozure.com. To enquire about Clozure's Common Lisp
consulting services e-mail info@clozure.com or visit http://www.clozure.com.
? (ql:quickload :swank)
To load "swank":
Load 1 ASDF system:
swank
; Loading "swank"
.....
(:SWANK)
? (swank:create-server)
;; Swank started at port: 4005.
4005
?
然后使用slime-connect连接到您的虚拟机ip和您为swank-server选择的端口。
在其他情况下,对于ssh也很容易。如果你想使用ssh连接到一个远程机器中的一个端口,那么简单的方法就是使用像这样的-L选项
ssh user@ip -p22 -L local_port:localhost:remote_port
然后你使用slime-connect并连接到localhost和local_port
这是一个使用vagrant的设置,只连接到ssh到机器启动swank,但你可以自动化它。
1)Vagrantfile:使用转发端口和ip,以及roswell设置,你可以直接安装sbcl,这并不重要但是使用roswell很容易在一分钟内启动运行,这里重要的是快跑了。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 4005, host: 4005
config.vm.network "private_network", ip: "192.168.33.24"
config.vm.provider "virtualbox" do |vb|
vb.name = "lisp_host"
vb.gui = false
vb.memory = "1024"
end
config.vm.provision "shell",
inline: "apt-get update
if which apt-get > /dev/null; then sudo apt-get -y install git build-essential automake libcurl4-openssl-dev;fi
git clone -b release https://github.com/roswell/roswell.git
cd roswell
sh bootstrap
./configure
make
sudo make install
sudo ros setup"
# SHELL
end
2)流浪汉和流浪汉ssh进入机器内
3)ros run -Q#在安装sbcl之后你可以在REPL中使用quicklisp
4)准备swank
2016-06-06 12:32:55 ☆ |ruby-2.2.3@laguna| Antonios-MBP in ~/learn/lisp/stackoverflow/vagrant-env
○ → vagrant ssh
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-79-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Mon Jun 6 10:26:56 UTC 2016
System load: 0.41 Processes: 84
Usage of /: 4.7% of 39.34GB Users logged in: 0
Memory usage: 12% IP address for eth0: 10.0.2.15
Swap usage: 0% IP address for eth1: 192.168.33.24
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
Last login: Mon Jun 6 10:26:56 2016 from 10.0.2.2
vagrant@vagrant-ubuntu-trusty-64:~$ ros run -Q
WARNING: Setting locale failed.
Check the following variables for correct values:
LC_CTYPE=UTF-8
LANG=en_US.UTF-8
* (ql:quickload :swank)
To load "swank":
Load 1 ASDF system:
swank
; Loading "swank"
.
(:SWANK)
* (setf swank::*loopback-interface* "192.168.33.24") ;Important to listen throught the internet IP
"192.168.33.24"
* (swank:create-server)
;; Swank started at port: 4005.
4005
5)然后转到你的emacs环境:
煤泥连接
主持人192.168.33.24 港口4005
6)也许版本不同,接受它并继续
最后你可以使用它
我相信这个技巧对你有用,最重要的是swank :: loopback-interface