服务器使用技巧
服务器技巧
本文包含了在服务器上使用ssh无密码登录,设置服务器别名,离线配置Julia等一系列操作。
ssh
ssh 无密码登录
生成本地的公钥和私钥
ssh-keygen
若之前生成过公钥和私钥,会覆盖原有密钥。
拷贝公钥到服务器
ssh-copy-ip username@serverip -p port
这里会提示输入密码
ssh无密码登录
此时可以直接用下述命令直接登陆,不需要再输入密码ssh username@serverip -p port
ssh 登陆别名
可以为 username@serverip -p port
取和一个好记的名字。
在 .ssh
文件夹中新建文件 config
在linux
系统中.ssh
在~/
下,可以通过ls -a
命令查看,你会发现这个文件夹存放了之前生成的公钥和私钥:id_rsa
,id-rsa.pub
。
在windows
系统中,.ssh
在C:\Users\your_username\
中。
在文件中添加如下内容
Host myserver
HostName xxx.xxx.xxx.xxx
User user
Port 22
配置之后就可以myserver
为名登陆。
ssh myserver
Julia 配置
主要介绍如何离线配置julia
本地上传julia包
scp ./path-to-the-package/julia-1.6.7-linux-x86_64.tar.gz myserver:~/
在服务器上解压
tar -xzf ./julia-1.6.7-linux-x86_64.tar.gz
可以mv
解压后的文件到一个文件夹内。
添加路径:在.bashrc
中添加
export PATH="$PATH:path-to-julia/julia-1.6.7/bin"
注意需采用/home/usr/
而不是~
,原因是nohup
调用会出问题。
source ~/.bashrc
生效后,可以直接用julia
命令打开julia交互对话框。
julia离线安装包
若你有一个可以联网的相同环境(如你本地的电脑是linux系统,可以直接复制~/.julia
,至服务器对应位置,即安装成功)。
下面介绍如何在不同环境下为服务器安装包。
参考: https://discourse.julialang.org/t/offline-installation-of-julia-packages/20083/19
首先获取服务器环境
julia -e 'println(Base.BinaryPlatforms.triplet(Base.BinaryPlatforms.HostPlatform()))'
运行下述命令
using Pkg # copy platform string of the target machine from command above platform_str = #服务器julia配置 platform = Base.BinaryPlatforms.parse( Base.BinaryPlatforms.Platform, platform_str ) path_to_project = #需要复制的环境路径 path_to_external = "./test" #复制环境的路径 ispath(path_to_external) || mkpath(path_to_external) empty!(DEPOT_PATH) push!(DEPOT_PATH,path_to_external) function main(path_to_project,path_to_external,platform) Pkg.activate(path_to_project) ctx=Pkg.Types.Context() println("Project Path : " * path_to_project) println("Using : " * ctx.env.manifest_file * "\n" *" " * ctx.env.project_file) println("Installing to " * path_to_external) println("Platform $platform") Pkg.instantiate(ctx;platform=platform,verbose=true) end function add_package(name) Pkg.activate(tempname()) ctx=Pkg.Types.Context() parsed_name = Pkg.REPLMode.parse_package_identifier(name; add_or_develop = true) Pkg.add(ctx, [parsed_name,]; platform=platform) end main(path_to_project,path_to_external,platform)
然后就在
./test
下获得了所有包的安装文件
将其拷贝至服务器
For Plots.jl with GR (unfortunately not using Pkg.Artifacts for the moment) you have to directly download the library at https://github.com/sciapp/gr/releases, install it in GR/###/deps/downloads and remove this line in GR/###/deps/build.jl
服务器上运行
export JULIA_DEPOT_PATH=/path/to/exported/depot julia
using Pkg
Pkg.activate("./path to your project")
Pkg.offline(true) #In offline mode Pkg tries to do as much as possible without connecting to internet.
Pkg.build()
一般情况下,都会成功。若在build时出现有些包没有安装,可以通过上文命令中的add_package("packagename")
补全包后再次重复上述步骤。