TrueNAS系统在ARM平台上的移植

      随着家庭及中小型企业对存储和共享需求的日益增长,高效、可靠的文件存储系统成为支撑各类应用的关键。

      在众多存储系统中,TrueNAS以其卓越的数据完整性与可靠性、简洁高效的应用程序部署和管理、灵活的虚拟化应用添加能力,以及出色的可用性,赢得了广大用户的青睐。

      然而,目前TrueNAS主要支持x86平台,限制了其在成本更低、功耗更小的ARM平台上的应用。

      为了提升NAS系统的整体性能,更适应存储应用的软硬件系统,土星云团队经过深入研究与开发,成功将TrueNAS移植至ARM系统,推出了具有创新性的NAS存储服务器。

  • 一、环境准备

  •     TrueNAS版本:23.10.1.2
  •     系统要求:Debian 10及以上(支持VM或ARM裸板)
  •     内存需求:16G
  •     磁盘空间:≥15G

二、部署流程

2.1 安装开发环境

使用以下命令安装必要的软件环境:

~$ sudo apt install build-essential debootstrap git python3-pip python3-venv squashfs-tools unzip libjson-perl rsync

2.2 构建与适配TrueNAS系统

2.2.1 构建流程

       基于TrueNAS的scale-build构建框架,我们在TS-23.10.1.2版本基础上进行适配。首先克隆构建框架的Git仓库:

~$ git clone -b TS-23.10.1.2 https://github.com/truenas/scale-build.git

      在环境准备完成后,通过运行make命令(需以root或sudo权限执行)开始完整的构建流程。该构建包括以下步骤:

  • 1)make checkout   从网上获取最新的软件源,置于source目录下;
  • 2)make packages   从拉取下来的源构建所有*.deb包;
  • 3)make update    生成独立的更新文件;
  • 4)make ISO      生成ISO映像,位于tmp/release目录下;

2.2.2 适配ARM平台

      由于TrueNAS原生支持x86架构,为了在RK3588平台上运行,我们需要对构建框架进行一系列适配工作:

1)修改软件源

      TrueNAS的软件源定义在conf/build.manifest文件中。其中所有的软件包来源于apt-repos中url定义的源路径。默认情况下,这个源路径指向TrueNAS自行维护的源,其中仅包含AMD64架构的软件包。因此,需要将其修改为开源的Debian apt源,以支持ARM64架构,并将相关AMD64架构的软件包改为ARM64架构的软件包。如下图:

2)修改git源

      在conf/build.manifest文件中。repo参数定义的是远程git仓库的路径。可根据自己的需求修改或移除源路径。

      其中需要注意的是,为了让系统运行在rk3588,需要将kernel的repo路径替换为rk3588的内核源码路径,并确保内核版本为6.x.x。

3)deb打包调整

      debian软件包构建系统是通过一系列标准化文件和工具,定义了软件包的构建和安装过程。每个git软件源里面都包含了debian目录,它们描述了软件包的元数据、构建步骤、依赖关系和安装路径等信息。其中:

  • debian/control:包含软件包的元数据,如名称、维护者、依赖关系等;
  • debian/changelog:描述软件包的更改历史。使用 dch 工具来生成这个文件;
  • debian/rules:这是一个Makefile,定义了如何构建软件包;
  • debian/source:用于指定源包的格式和相关选项;
  • debian/copyright:描述软件包的版权和许可信息;

      需要特别关注的是debian/control和debian/rules这两个文件。在debian/control文件中,会定义deb软件包的构建依赖,这些依赖位于Build-Depends属性下。我们首先需要将其中指定的AMD64架构的软件包替换为相应的ARM架构的软件包。此外,对于那些只在AMD64架构上特有的软件包,需要适当地进行移除。与此同时,还需要检查debian/rules文件,确保其中的构建规则和指令也适用于ARM架构,必要时进行相应的修改和调整。这些步骤将确保软件包能够在ARM架构下正确构建和运行。

4)ISO制作调试

      在修改完相关的软件源、git源和debian规则之后,可以通过单步执行上述的make命令进行调试。编译过程产生的日志将生成在scale-build下的log文件夹。通过逐步运行构建过程中的各个命令,并分析相关日志,可以详细观察每一步的输出和行为,从而更精准地发现和修复错误。最终生成可以适配rk3588平台的ISO映像文件。

      通过一系列的适配工作,我们成功将TrueNAS系统移植至ARM平台,并在土星云网络存储服务器DN110M-CS产品中得到了验证,为用户带来了全新的存储体验。该产品不仅继承了TrueNAS系统的优势特性,还融入了ARM系统低功耗、资源占用小、自主研发及成本较低等优势,为用户提供了全方位的NAS存储一体化解决方案。

      我们致力于为用户提供卓越的存储体验,让数据存储变得更加简单、高效。

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

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

相关文章

@ModelAttribute

基础知识 1.ModelAttribute注解源码,从中可以知道,该注解可以标注在参数上和方法上 2.应用场景:先大致有个概念,可以用来存储项目根路径 3.介绍:ModelAttribute 是 Spring 框架中的一个注解,用于在 Spring …

G7 - Semi-Supervised GAN 理论与实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 理论知识模型实现引用、配置参数初始化权重定义算法模型模型配置模型训练训练模型 模型效果总结与心得体会 理论知识 在条件GAN中,判别器只用…

Reddit、Discord等社媒网站抓取总结:如何更高效实现网页抓取?

有效的网络抓取需要采取战略方法来克服挑战并确保最佳数据提取。让我们深入研究一些关键实践,这些实践将使您能够掌握复杂的网络抓取。 一、了解 Web 抓取检测 在深入探讨最佳实践之前,让我们先了解一下网站如何识别和抵御网络爬虫。了解您在这一过程中…

隐藏element的DateTimePicker组件自带的清空按钮

管理台页面使用到el-date-picker,type datetimerange 但是组件自带了清空按钮,实际上这个控件业务上代表开始时间和结束时间是一个必填选项,所有想要把清空按钮隐藏掉。 查看了文档https://element.eleme.io/#/zh-CN/component/datetime-p…

如何使用k8s安装nexus3呢

百度云盘地址 链接:https://pan.baidu.com/s/1YN1qc2RvzTU3Ba6L_zCTdg?pwd5z1i 提取码:5z1i 下载后上传到本地服务器 docker load -i nexus3 创建 nexus-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: nexus3-deployment spec…

visualbox搭建linux环境双网卡配置

文章目录 1. 双网卡模式简介2. 网络模式配置2.1 virtualBox说明2.2 host-only网络模式配置2.3 NAT网络模式配置 3. 虚拟主机网络设置3.1 网卡一设置3.2 网卡二设置 4. 网卡配置5. ssh访问 本篇的目的是为了搭建本地的linux测试环境用。 1. 双网卡模式简介 双网卡网络模式简介 …

数据仓库 基础教程

数据仓库 基础教程 1. 数据仓库概述 数据仓库(Data Warehouse,简称DW或者DWH)是通过集成来自多个异构数据源的数据来构建的。它支持分析报告、结构化和/或特别查询和决策制定。本教程采用循序渐进的方法来解释数据仓库的所有必要概念。 “数据仓库”一词最早是由Bill Inmon在1…

JDBC之API(DriverManager)详解

之前在 JDBC 的快速入门写代码的时候,遇到了很多的API。这篇博客主要学习一些API。 目录 一、API(介绍) 二、JDBC之API——DriverManager (1)DriverManager (获取 Connection 的连接对象) 1、…

路由器的Wi-Fi性能是否限制了你的网速?这里有你想要的答案

​你的无线网络速度阻碍了你吗?信不信由你,升级到超快的互联网计划可能不值得。以下是如何判断路由器的Wi-Fi速度是否阻碍了你,以及你能做些什么。 如何测试你的Wi-Fi速度 比较你的有线速度和无线速度可以表明你的路由器是否阻碍了你。虽然很多人认为“Wi-Fi”和“互联网”…

rknn转换后精度差异很大,失真算子自纠

下面是添加了详细注释的优化代码: import cv2 import numpy as np import onnx import onnxruntime as rt from onnx import helper, shape_inferencedef get_all_node_names(model):"""获取模型中所有节点的名称。参数:model (onnx.ModelProto): O…

现代易货交易:重塑物品交换的新纪元

在数字时代的浪潮中,交易模式正在经历一场革命。其中,现代易货交易模式以其独特的魅力,逐渐在市场中崭露头角。这种交易模式不仅是对古老“以物换物”的复兴,更是对物品价值和交换方式的全新定义。 现代易货:物品交换的…

openppp2 命令行接口详解

openppp2 是一个工作在 OSI/3 Layer 网络通信层的虚拟以太网工具链的开源软件,在查阅本文之前,人们可以查阅以下资料。 开源仓库: liulilittle/openppp2: PPP PRIVATE NETWORK™ 2 VPN Next Generation Reliable and Secure Virtual Etherne…

LeetCode 19.删除链表的倒数第N个结点

链接 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/ 题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5…

电动汽车厂商Rivian将全新设计元素融入由虚幻引擎驱动的车机界面

Rivian Automotive(简称:“Rivian”),是美国一家电动汽车厂商,该品牌创办于2009年,总部位于加州埃尔文,专注于生产电动皮卡车Rivian R1T和电动SUV Rivian R1S。 Rivian的车主们正追寻这样一条道…

Qt坐标系统

目录 概述 渲染 逻辑表示 锯齿绘制 坐标转换 模拟时钟示例 Window-Viewport转换 概述 坐标系统由QPainter类控制。与QPaintDevice和QPaintEngine类一起,QPainter构成了Qt绘画系统的基础。QPainter用于执行绘制操作,QPaintDevice是一个二维空间的抽…

番外篇 | YOLOv8算法解析和实战应用:车辆检测 + 车辆追踪 + 行驶速度计算

前言:Hello大家好,我是小哥谈。YOLOv8是ultralytics公司在2023年1月10号开源的,是YOLOv5的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,在还没有开源时就收到了用户的广泛关注。它是一个SOTA模型,建立在以前YOLO版本的成功基础上,并引入了新的功能和改…

开发中遇到的错误 - @SpringBootTest 注解爆红

我在使用 SpringBootTest 注解的时候爆红了&#xff0c;ait 回车也导不了包&#xff0c;后面发现是因为没有加依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>…

【shell脚本速成】函数

文章目录 一、函数1.1、函数介绍1.2、函数定义1.3、函数调用 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xf…

网络虚拟化考题

vrrp讲过吗&#xff1f;&#xff1f;&#xff1f; d 每一层都是什么设备啊 abcd 为啥流量不可控不可视 c是啥意思 讲过吗 abc aNET网络虚拟化是啥啊 为啥&#xff1f;&#xff1f; 啥是CDN&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;

Java数据类型与运算符

1. 变量和类型 变量指的是程序运行时可变的量&#xff0c;相当于开辟一块空间来保存一些数据。 类型则是对变量的种类进行了划分&#xff0c;不同类型的变量具有不同的特性。 1.1 整型变量&#xff08;重点&#xff09; 基本语法格式&#xff1a; int 变量名 初始值;代码示…