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

news2024/10/7 8:21:45

在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.coloradmin.cn/o/1879473.html

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

相关文章

Excel 快速查询工具 2023.7.1 更新

Excel 快速查询工具作者表示这个软件是因为有时候需要在 Excel 和网站之间进行切换非常的麻烦,这款软件可以以半透明的方框位于桌面上。 特点 软件窗口半透明并至于顶部,无需来回切换界面。 实时查询,不用点击查询或者按回车之类的&#x…

什么是Cookie?有什么用?如何清除浏览器中的Cookie?

互联网上的每一次点击和每一个选择都可能被一种名为Cookie的技术记录下来。但Cookie是什么?我们在网站上登录时,为什么经常会被问及是否接受Cookie?接受Cookie登录会不会影响我们的在线隐私? Cookie是什么? Cookie是一…

vue3 全局引入 onMounted, reactive, ref 的插件全局引入

webpack 的引入 npm install -D unplugin-auto-import const AutoImport require(unplugin-auto-import/webpack).default;configureWebpack: {devtool: source-map,module: {rules: [{test: /\.mjs$/,include: /node_modules/,type: javascript/auto}],}, plugins: [Aut…

LLM——10个大型语言模型(LLM)常见面试题以及答案解析

今天我们来总结以下大型语言模型面试中常问的问题 1、哪种技术有助于减轻基于提示的学习中的偏见? A.微调 Fine-tuning B.数据增强 Data augmentation C.提示校准 Prompt calibration D.梯度裁剪 Gradient clipping 答案:C 提示校准包括调整提示,尽量减少产生…

基于大津阈值法和二值化与联通区域标记进行图像目标计数

1 建模 A.读取图像: 1.使用imread函数读取图像文件。 2.如果图像是彩色的,通常需要先转换为灰度图像,因为大津阈值法通常应用于灰度图像。 B.灰度化: 1.如果图像是彩色的,使用rgb2gray函数将其转换为灰度…

Data-Driven Reinforcement Learning for Robotic Manipulation

意思是 不同的任务以及机器人都有单独的数据和模型 未来需要整合 一个大的数据集包含所有的 然后训练一个大模型 以后具体的任务只需要针对这个模型进行微调 challenge bootstrapping with large data 2 3 4 高清图补充

uniapp, ‍[⁠TypeError⁠]‍ “Failed to fetch dynamically imported module“ 报错解决思路

文章目录 1. 背景2. 报错3. 解决思路4. 思考参考1. 背景 最近基于uniapp开发一款设备参数调试的APP软件,在使用第三方插件的过程中,出现下面的报错。 2. 报错 [plugin:vite:import-analysis] Cannot find module ‘D:/leaning/uniapp/demo/jk-uts-udp示例/uni_modules/uts-…

安装maven与nexus

安装maven与nexus Maven官网下载地址:http://maven.apache.org cd /data/software/wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.8-bin.tar.gz# 解压 tar xf apache-maven-3.8.1-bin.tar.gz -C /opt/[rooth…

在Clion使用CubeMX Stm32的步骤

Step1 准备软件,安装环境: 1. cubemx v6.5.0(可以兼容以前版本的project) https://www.st.com.cn/zh/development-tools/stm32cubemx.html STM32CubeMX 默认安装目录, 6.5版本可以兼容老版本 C:\Program Files\STMicroelectroni…

关于响应式编程的理解与SpringCloudGateway的理解

关于响应式编程的理解与SpringCloudGateway的理解 一. 响应式编程与函数式编程的区别二. 响应式编程中常用的组件2.1 RxJava定义2.2 Rxjava基本概念2.3 RxJava 用法 三 SpringcloudGateway四 常见的四种限流规则 一. 响应式编程与函数式编程的区别 总的来说,响应式编…

WEB攻防【4】——JavaWeb项目/JWT身份攻击/组件安全/访问控制

一、知识点 1、Javaweb常见安全及代码逻辑 Javaweb的架构: 如何通过包查找到文件,通过URL对应源码的文件,或者通过源码文件对应URL地址。 2、目录遍历&身份验证&逻辑&JWT Javaweb里面有身份认证的JWT的技术,pyth…

ctfshow-web入门-命令执行(web66-web70)

目录 1、web66 2、web67 3、web68 4、web69 5、web70 1、web66 show_source 被禁用 highlight_file 发现 flag 不在 flag.php 里面 先使用 scandir() 进行目录扫描: cprint_r(scandir("./")); 当前目录下只有 index.php 和 flag.php 扫一下根目…

DAMA学习笔记(三)-数据架构

1.引言 架构是构建一个系统(如可居住型建筑)的艺术和科学,以及在此过程中形成的成果——系统本身。用通俗的话说,架构是对组件要素有组织的设计,旨在优化整个结构或系统的功能、性能、可行性、成本和用户体验。 对于架…

树莓派安装windows系统

第1步: https://uupdump.net/下载对应的系统文件,所有选择项都默认选择。 第2步: 解压下载后的文件,双击运行下面文件。等待下载完成,等待过程很漫长,很考验耐心。 第3步: 提示已经finish了&…

GBJ406-ASEMI无人机专用整流桥GBJ406

编辑:ll GBJ406-ASEMI无人机专用整流桥GBJ406 型号:GBJ406 品牌:ASEMI 封装:GBJ-4 最大重复峰值反向电压:600V 最大正向平均整流电流(Vdss):4A 功率(Pd):中小功率 芯片个数:…

Java代码基础算法练习-判断密码是否符合要求-2024.06.30

任务描述: 用户密码常常要求密码的长度大于等于6个字符,且必须包含大小写字母和数字。请写 一个函数validatePassword 来验证密码是否有效 解决思路: 输入密码为字符串,函数 validatePassword 对字符串进行 for 循环其中的每个的…

硬核!大佬通过Intel CPU的JTAG接口,DUMP微软原始Xbox的加密BootROM。

这是一篇记录如何通过Intel CPU的JTAG接口,DUMP微软原始Xbox的加密BootROM的文章,内容也记录了老哥如何设计实现JTAG调试器的过程,非常硬核! 原文:JTAG ‘Hacking’ the Original Xbox in 2023 Using Intel CPU JTAG to dump the secret bootrom in Microsoft’s original…

vb6多线程异步,VB.NET 全用API实现:CreateThread创建多线程,等待线程完成任务

在VB.NET中,你可以使用API函数来创建多线程并等待线程完成任务。以下是一个示例代码,展示如何使用API函数来实现这个功能: Imports System.Runtime.InteropServices Imports System.ThreadingPublic Class Form1Private Delegate Sub ThreadC…

mybatis#号和$区别

在MyBatis中,#{}和${}都是用于实现动态SQL的占位符,但它们在使用场景和安全性上有明显的区别: 用途区别: #{}主要用于传递接口传输过来的具体数据,如参数值,它可以防止SQL注入,因为MyBatis会…

gin数据解析,绑定和渲染

一. 数据解析和绑定 1.1 Json数据解析和绑定 html文件&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…