如何在Ubuntu20上离线安装joern(包括sbt和scala)

在Ubuntu 20上离线安装Joern,由于Joern通常需要通过互联网从其官方源或GitHub等地方下载,但在离线环境中,我们需要通过一些额外的步骤来准备和安装。(本人水平有限,希望得到大家的指正)

我们首先要做的就是需要安装sbt和scala(前提是得有java的环境,java配置的步骤几乎和这两个相同)

离线安装我们需要将提前下好的安装包下载,然后传入你的Ubuntu虚拟机中,由于我用的是VMware,所以我采用的方法是共享文件夹的方式至于如何共享文件夹可以参考这篇文章:https://blog.csdn.net/google20/article/details/134816043?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171973251616800185840141%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171973251616800185840141&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-134816043-null-null.nonecase&utm_term=vmtools&spm=1018.2226.3001.4450

当然,前提是得安装好vmtools,但是在离线的环境下无法安装vmtools,有两种方法:一是在联网的机器上进行安装之后放入离线机器,而是选择一个vmtools的镜像,然后运行其脚本,这里我选择的是第二种方式,可以参考这篇文章(获取镜像的方式):链接: https://blog.csdn.net/DT_FlagshipStore/article/details/123394535,但是在插入镜像后的方式就不同了,文中双击的方式一般是无效的,你需要进入虚拟机中点击插入后的镜像,然后将其脚本和压缩包复制进入你的home目录下,然后运行脚本既可,这样就可以使用共享文件夹(由于机器的问题没有离线机器上的图片)

如果你导入镜像后你的离线环境下的other locations的位置会有一个新的磁盘,你需要把其中的文件和压缩包复制到home目录下(可能还得解压压缩包之后才能有脚本),运行脚本,就可安装完毕
在这里插入图片描述
安装完毕后再终端运行指令,查看vmtools是否安装成功为你服务:

systemctl status vmware-tools-services

假设vmware-tools-services正在运行,输出可能类似于:

● vmware-tools-services.service - VMware Tools Services  
   Loaded: loaded (/lib/systemd/system/vmware-tools-services.service; enabled; vendor preset: enabled)  
   Active: active (running) since [启动时间]; [经过的时间] ago  
   Docs: man:vmware-tools-services(8)  
 Main PID: [主进程ID] (vmware-tools-services)  
    Tasks: [任务数] (limit: [任务限制])  
   Memory: [内存使用量]  
   CGroup: /system.slice/vmware-tools-services.service  
           └─[主进程ID] /usr/sbin/vmware-tools-services

下载好之后就可以正式配置环境了

Scala和Sbt的离线安装

进入scala的官网下载压缩包
https://www.scala-lang.org/download/
sbt官网:
https://www.scala-sbt.org/download

注意是下载后缀为.tgz的压缩包
尽量选择新的版本进行下载
在这里插入图片描述

下载完成后我们进入Ubuntu虚拟机中:

输入指令,进入共享文件夹:

cd /mnt/hgfs/"ubuntu share"

首先创建存放解压后的文件夹

sudo mkdir /opt/sbt
sudo mkdir /opt/scala

然后在执行解压指令:
sbt_file和scala_file需要替换为你的压缩包名字

sudo tar -xzf sbt_file.tgz -C /opt/sbt
sudo tar -xzf scala_file.tgz -C /opt/scala

进入解压后的文件夹:
直到找到你的bin文件夹,然后记住该路径,scala和sbt一样的

cd /opt/sbt

下面开始配置环境变量:
使用指令

nano ~/.bashrc

在该文件的最后一行加入

export PATH=/your/path/to/sbt/bin:$PATH
export PATH=/your/path/to/scala/bin:$PATH

加入完成后按ctrl+x键,再按shift+y,按回车即可
使用指令让环境变量生效

source ~/.bashrc

这样我们的sbt和scala的离线安装就完成了,当然,我们在这之前还需要安装java jdk,最好是安装最新的版本,我们可以使用指令查看我们的版本

java --version
sbt --version
scala --version

安装完这些之后就可以安装joern了

joern的离线安装

起始这些joern的离线安装和上两个一样
进入joern的官网下载压缩包后放入共享文件夹
下载链接: https://github.com/joernio/joern/releases
下载新版本的tar.gz后缀的压缩包
在这里插入图片描述
然后进入share目录

cd /mnt/hgfs/"ubuntu share"

解压指定文件夹
记得换成你自己的文件路径

sudo mkdir /opt/joern
sudo tar -xzf joern_file.tgz -C /opt/joern

我们先将他解压后,我们需要在在线的机器上配置好joern的依赖之后在将依赖复制放入自己的离线环境下:
我们进入联网的机器中,进入joern的安装目录:
在这里插入图片描述
这是编译下载之后的joern的目录,如果没有编译和打包是会有很多链接是断开的
我们进入终端,执行编译指令:

sbt stage

但是由于joern的一些依赖项需要外网,所以前提是你的网络状态是可以访问外网
在这里插入图片描述
这个下载周期比较长,可能会需要多次尝试,另外就是内存的问题,最好是分配最大的内存,不然会被杀死很多进程导致下载依赖项失败
在这里插入图片描述
sbt编译打包成功之后,我们就需要进行依赖项的复制粘贴了,将它的依赖项移动到离线环境中,根据外网资料,sbt和joern的官方文档和gpt的辅助我大概推断出来了依赖项存储到了这些位置:

~/.ivy2
~/.sbt
/you/path/to/joern/target
/you/path/to/joern/project
/you/path/to/joern/lib
/you/path/to/joern/macros
还包括了/you/path/to/joern目录下的各个文件夹中的target目录

大家会发现各个文件夹都有大量的jar包,并且如果你将整个joern的文件打包是不可能的,中间会出现文件损坏的问题,所以一部分情况下你必须得自己单独将所有的jar包打包然后(我用的是tar.gz的压缩包格式)传入离线环境,然后解压到joern的目录下
在这里插入图片描述
当然,~/.ivy2和 ~/.sbt这两个依赖项可不是放入joern目录下,你得放入家目录,就是 ~目录下,同时你可能会遇到文件权限的问题,你可以根据提示修改权限:

你需要将~/.sbt/boot目录下的sbt.boot.lock文件可读可写的权限

sudo chmod -R ugo+wx sbt.boot.lock

在这里插入图片描述
然后我们最后进入joern的目录下,同样执行sbt stage的指令,等待一段时间,虽然他会报出error的错误,但是你不用管,进入你的joern目录下你就会发现,目录下的之前“上锁”和“打叉”的文件都已经可以使用,最后一步配置环境变量:

nano ~/.bashrc

在最后一行加入

export PATH=/you/path/to/joern:$PATH

退出后使用指令使其生效:

source ~/.bashrc

随后使用joern命令判断是否安装成功,可能得等待一段时间,不用急:
在这里插入图片描述
这样就安装成功了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760586.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】Python sorted 函数

目录: 什么是sorted()函数列表降序排序应用到字符串自定义排序规则实际应用 Python中的内置函数——sorted()。 1. 什么是sorted()函数 在Python中,sorted()是一个内置函数,用于对任何可迭代对象(如列表、元组、字符串等&…

jenkins 发布服务到linux服务器

1.环境准备 1.1 需要一台已经部署了jenkins的服务器,上面已经集成好了,jdk、maven、nodejs、git等基础的服务。 1.2 需要安装插件 pusblish over ssh 1.3 准备一台额外的linux服务器,安装好jdk 2.流程描述 2.1 配置jenkins,包括p…

每日一题——Python实现PAT乙级1090 危险品装箱(举一反三+思想解读+逐步优化)4千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 题目链接:https://pintia.cn/problem-sets/994805260223102976/exam/problems/typ…

LoadBalance 负载均衡

什么是负载均衡 负载均衡(Load Balance,简称 LB),是⾼并发,⾼可⽤系统必不可少的关键组件. 当服务流量增⼤时,通常会采⽤增加机器的⽅式进⾏扩容,负载均衡就是⽤来在多个机器或者其他资源中,按照⼀定的规则合理分配负载. 负载均衡的⼀些实现 服务多机部署时,开发⼈…

微积分-导数3(微分法则)

常见函数的导数 常量函数的导数 d d x ( c ) 0 \frac{d}{dx}(c) 0 dxd​(c)0 常量函数的图像是一条水平线 y c y c yc,它的斜率为0,所以我们必须有 f ′ ( x ) 0 f(x) 0 f′(x)0。从导数的定义来看,证明也很简单: f ′ …

44 - 50题高级字符串函数 / 正则表达式 / 子句 - 高频 SQL 50 题基础版

目录 1. 相关知识点2.例子2.44 - 修复表中的名字2.45 - 患某种疾病的患者2.46 - 删除重复的电子邮箱2.47 - 第二高的薪水2.48 - 按日期分组销售产品2.49 - 列出指定时间段内所有的下单产品2.50 - 查找拥有有效邮箱的用户 1. 相关知识点 相关函数 函数含义concat()字符串拼接upp…

MT6989(天玑9300)芯片性能参数_MTK联发科5G处理器

MT6989是联发科Dimensity旗舰系列的成员,旨在为旗舰5G智能手机供应商提供最先进的技术和性能。MT6989也是联发科目前最具创新和强大的5G智能手机芯片,具有领先的功耗效率,无与伦比的计算架构,有史以来最快和最稳定的5G调制解调器&…

MySQL之主从同步、分库分表

1、主从同步的原理 MySQL主从复制的核心是二进制日志 二进制日志(binlog)记录了所有DDL语句和DML语句,但不包括数据查询(select、show)语句。 1.1、复制分三步 master主库在事务提交时,会把数据变更记录…

九浅一深Jemalloc5.3.0 -- ②浅*size class

目前市面上有不少分析Jemalloc老版本的博文,但5.3.0却少之又少。而且5.3.0的架构与之前的版本也有较大不同,本着“与时俱进”、“由浅入深”的宗旨,我将逐步分析Jemalloc5.3.0的实现。 另外,单讲实现代码是极其枯燥的,…

mmap()函数和munmap()函数的例子

代码&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #include <string.h> #include <stdio.h> #include <unistd.h>#define FILELENGTH 80 int main(void) {int fd-1;char …

Objective-C使用块枚举的细节

对元素类型的要求 在 Objective-C 中&#xff0c;NSArray 只能存储对象类型&#xff0c;而不能直接存储基本类型&#xff08;例如 int&#xff09;。但是&#xff0c;可以将基本类型封装在 NSNumber 等对象中&#xff0c;然后将这些对象存储在 NSArray 中。这样&#xff0c;en…

爬虫中如何创建Beautiful Soup 类的对象

在使用 lxml 库解析网页数据时&#xff0c;每次都需要编写和测试 XPath 的路径表达式&#xff0c;显得非常 烦琐。为了解决这个问题&#xff0c; Python 还提供了 Beautiful Soup 库提取 HTML 文档或 XML 文档的 节点。 Beautiful Soup 使用起来很便捷&#xff0c;…

Web后端开发概述环境搭建项目创建servlet生命周期

Web开发概述 web开发指的就是网页向后再让发送请求,与后端程序进行交互 web后端(javaEE)程序需要运行在服务器中 这样前端才可以对其进行进行访问 什么是服务器? 解释1: 服务器就是一款软件,可以向其发送请求,服务器会做出一个响应.可以在服务器中部署文件&#xff0c;让…

使用世界变换的逆转置矩阵对法线进行变换

法向量变换细节记录 最近在做法向量变换的时候&#xff0c;踩了两个坑&#xff0c;记录一下相关的知识点 法向量做变换&#xff0c;最后一位是补0 我们知道&#xff0c;顶点在做变换的时候最后一位是 1.0&#xff0c;法线最后一位是补0.0 vec3 normCurrent (getMatrixWorld() …

【NodeJs】入门

目录 一、前导 二、 url模块 三、path模块 四、buffer模块 五、fs模块 六、stream流模块 七、os模块 八、crypto模块 九、util模块 十、http模块 nodejs官网 Node.js — 在任何地方运行 JavaScript nmp是Node.js包管理器&#xff0c;用来安装各种库、框架和工具&…

基于STM32的八位数码管显示和闹钟计时【Proteus仿真】

某鱼&#xff1a;两栖电子 一、系统功能 采用矩阵键盘&#xff0c;按下对应的数字再按下确认按键&#xff0c;数码管会显示自己输入的数字&#xff0c;如果按错可以使用删除按钮进行删除。点击计时按钮可以显示当前的时间。 二、使用器件 DS1302实时时钟芯片&#xff0c;8位数…

Mac虚拟机软件有什么用?

随着苹果M系列芯片电脑的推出&#xff0c;虚拟机的使用变得越来越流行。不同于苹果以往的Intel处理器电脑&#xff0c;其M系列芯片电脑无法安装双系统。如果要使用非macOS系统&#xff0c;可以通过创建虚拟机系统的方式实现。那么&#xff0c;虚拟机软件有什么作用和用途&#…

DP(动态规划)【3】 最长公共子序列 最长回文子串

目录 1.最长公共子序列 状态转移方程需要二维数组&#xff0c;1-dim已经不太够了 又是这个问题&#xff1a;如何读入字符串 2.最长回文子串 1.最长公共子序列 状态转移方程需要二维数组&#xff0c;1-dim已经不太够了 这里dp[i][j]是说S的前i位与T的前j位公共序列&#xff…

韩顺平0基础学java——第34天

p675-689 UDP网络编程 1.类 DatagramSocket和 DatagramPacket[数据包/数据报]实现了基于UDP协议网络程序。 2.UDP数据报通过数据报套接字DatagramSocket发送和接收&#xff0c;系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。 3.DatagramPacket对象…

FastAPI教程III

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 这部分暂无需求的没有记录&#xff0c;仅放置标题。 依赖项 安全性 中间件 你可以向FastAPI应用添加中间件。 ”中间件“是一个函数&#xff0c;它在每个请求被特定的路径操作处理之前&#xff0c;以及在每个…