如何在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.mzph.cn/news/863650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在QGIS中调用天地图

2019年 1月 1日起,天地图 API及服务接口调用需要获得开发授权,之前使用 QGIS等 GIS软件无法继续调用天地图,这就需要申请一个许可。 一、注册并申请 Key 具体申请可以登录如下地址:https://www.tianditu.gov.cn打开上述网址后点…

工厂方法模式:概念与应用

目录 工厂方法模式工厂方法模式结构工厂方法适合的应用场景工厂方法模式的优缺点练手题目题目描述输入描述输出描述**提示信息**解题: 工厂方法模式 工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例…

SQLite3的使用

14_SQLite3 SQLite3是一个嵌入式数据库系统,它的数据库就是一个文件。SQLite3不需要一个单独的服务器进程或操作系统,不需要配置,这意味着不需要安装或管理,所有的维护都来自于SQLite3软件本身。 安装步骤 在Linux上安装SQLite…

《概率论与数理统计》期末复习笔记_下

目录 第4章 随机变量的数字特征 4.1 数学期望 4.2 方差 4.3 常见分布的期望与方差 4.4 协方差与相关系教 第5章 大数定律和中心极限定理 5.1 大数定律 5.2 中心极限定理 第6章 样本与抽样分布 6.1 数理统汁的基本概念 6.2 抽样分布 6.2.1 卡方分布 6.2.2 t分布 6.…

Winform使用HttpClient调用WebApi的基本用法

Winform程序调用WebApi的方式有很多,本文学习并记录采用HttpClient调用基于GET、POST请求的WebApi的基本方式。WebApi使用之前编写的检索环境检测数据的接口,如下图所示。 调用基于GET请求的无参数WebApi 创建HttpClient实例后调用GetStringAsync函数获…

技术打包 催化剂浸渍制作方法设备

网盘 https://pan.baidu.com/s/1Bybbyy5qEA2uTUlaELmWwg?pwdepdk 改性加氢处理催化剂载体、催化剂及其制备方法和应用.pdf 水滑石基催化剂在高浓度糖转化到1,2-丙二醇中的应用.pdf 海泡石负载铁锰双金属催化剂及其制备方法和应用.pdf 甘油氢解催化剂及其制备方法和应用.pdf 用…

【原理】机器学习中的最小二乘法公式推导过程

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是最小二乘法1.1. 什么是最小二乘法1.2. 最小二乘法的求解公式 二、最小二乘法求解公式的推导 最小二乘法是基本的线性求解问题之一,本文介绍最小二乘法的原理,和最小二法求解公式…

【Vue】Vue3基础

VUE3基础 1、简介2、创建工程2.1 基于vue-cli创建(脚手架webpack)2.2 基于vite创建(推荐)2.3 目录结构2.4 vscode插件推荐 3、核心语法3.1 选项式(options API)和组合式(composition API&#x…

Arduino - LED 矩阵

Arduino - LED 矩阵 Arduino - LED Matrix LED matrix display, also known as LED display, or dot matrix display, are wide-used. In this tutorial, we are going to learn: LED矩阵显示器,也称为LED显示器,或点阵显示器,应用广泛。在…

scatterlist的相关概念与实例分析

概念 scatterlist scatterlist用来描述一块内存,sg_table一般用于将物理不同大小的物理内存链接起来,一次性送给DMA控制器搬运 struct scatterlist {unsigned long page_link; //指示该内存块所在的页面unsigned int offset; //指示该内存块在页面中的…

纯硬件FOC驱动BLDC

1. 硬件FOC 图 1 为采用 FOC 的方式控制 BLDC 电机的过程,经由 FOC 变换( Clark 与 Park 变换) ,将三相电流转换为空间平 行电流 ID 与空间垂直电流 IQ。经过 FOC 逆变化逆( Clark 变换与逆 Park 变换) ,将两相电流转换为三相电流用于控 制电…

喜茶新品被迫更名,内容营销专家刘鑫炜谈品牌定位敏锐度和适应性

喜茶,作为茶饮界的知名品牌,一直以其独特的创意和优质的产品受到消费者的喜爱。然而,近期喜茶推出的一款新品“小奶栀”却因其名称发音问题引发了不小的争议。 事件回顾 “小奶栀”这款新品在上市之初,以其独特的口感和创新的命名…

气膜结构的年度维护费用解析—轻空间

气膜结构作为一种新型建筑形式,广泛应用于体育场馆、仓储、展览馆等场所。由于其独特的结构特点,气膜建筑的维护工作显得尤为重要。轻空间将详细探讨气膜结构的年度维护费用构成及影响因素,帮助大家全面了解气膜建筑的运营成本。 气膜结构年度…

android studio 添加aar包

按着以前旧的导包方式栽了大跟头,后面在留老板的的博客下找到了解决办法,记录一下。 Andriod Studio 导入aar最新的方式_gradle 8 引入arr-CSDN博客 最新导包方式 1.在新建libs目录,在app/libs目录下导入aar包(其实就是拷贝过去…

揭秘品牌推广的制胜之道:步骤、流程、方法与技巧全攻略!

品牌推广是现代营销战略中的核心环节,对于提升品牌知名度、塑造品牌形象以及扩大市场份额具有举足轻重的作用。 作为一名手工酸奶品牌的创始人,目前全国复制了100多家门店,我来为大家分享品牌推广的制胜之道,包括具体步骤、流程、…

STM32的EXTI简介

一,EXTI(External Interrupt)外部中断事件控制器 什么是EXTI? 1.监测指定的GPIO口的电平信号变化,并检测到指定条件时,向内核的中断控制器NVIC发出中断申请。NVIC在裁决后,如果满足条件&#xf…

pytest-自动执行固件

目前为止,所有固件的使用都是手动指定,或者作为参数,或者使用 usefixtures。 如果我们想让固件自动执行,可以在定义时指定 autouse 参数。 下面是两个自动计时固件,一个用于统计每个函数运行时间(functio…

【自然语言处理】司法阅读理解

司法阅读理解 1 任务目标 1.1 任务说明 裁判文书中包含了丰富的案件信息,比如时间、地点、人物关系等等,通过机器智能化地阅读理解裁判文书,可以更快速、便捷地辅助法官、律师以及普通大众获取所需信息。 本次任务覆盖多种法律文书类型&am…

半个月从几十升粉到500(发红包喽)

目录 1. 背景2. 涨粉秘籍2.1 持续创作高质量内容2.1.1 保持频率2.1.2 技术文章为主2.1.3 图文并茂 2.2 积极参与社区活动2.2.1 社区分享2.2.2 发文活动 2.3 互动与建立信任2.3.1 与读者互动2.3.2 红包互动2.3.3 动态分享 2.4 标题与内容的优化2.4.1 标题吸引2.4.2 内容实用 2.5…

Anaconda 和 Python 的区别及其重要性

引言 Python 是一种广泛使用的编程语言,特别是在数据科学、机器学习和科学计算领域。随着 Python 的普及,许多开发工具和环境也应运而生,其中 Anaconda 是一个非常流行的 Python 发行版。本文将探讨 Anaconda 和 Python 的区别,A…