服务器技巧

本文包含了在服务器上使用ssh无密码登录,设置服务器别名,离线配置Julia等一系列操作。

ssh

ssh 无密码登录

  1. 生成本地的公钥和私钥

    ssh-keygen

    若之前生成过公钥和私钥,会覆盖原有密钥。

  2. 拷贝公钥到服务器

    ssh-copy-ip username@serverip -p port

    这里会提示输入密码

  3. ssh无密码登录
    此时可以直接用下述命令直接登陆,不需要再输入密码

    ssh username@serverip -p port

ssh 登陆别名

可以为 username@serverip -p port 取和一个好记的名字。

.ssh 文件夹中新建文件 config

linux系统中.ssh~/下,可以通过 ls -a命令查看,你会发现这个文件夹存放了之前生成的公钥和私钥:id_rsa, id-rsa.pub
windows系统中,.sshC:\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

  1. 首先获取服务器环境

    julia -e 'println(Base.BinaryPlatforms.triplet(Base.BinaryPlatforms.HostPlatform()))'
  2. 运行下述命令

    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
  1. 服务器上运行

    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")补全包后再次重复上述步骤。

标签: Julia

添加新评论