openGauss基于银河麒麟操作系统(debian系列)源码编译

openGauss基于银河麒麟操作系统(debian系列)(国防版)V10 源码编译步骤

# uname -a
Linux zxb-OpenStack-Nova 5.4.18-52-generic #41 SMP Wed Mar 2 15:24:07 CST 2022 aarch64 aarch64 aarch64 GNU/Linux

# openGauss master分支
https://gitee.com/opengauss/openGauss-server.git

# third-party 使用社区编译好的openEuler_arm对应的三方库二进制
https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/binarylibs/gcc10.3/openGauss-third_party_binarylibs_openEuler_arm.tar.gz

安装依赖

apt install flex bison libc-dev libreadline-dev libaio-dev

建头文件、库文件链接

头文件和库文件在对应的/usr/include/aarch64-linux-gnu/目录下,编译时候找不到默认位置,可以将这些目录下的文件夹建软链接指到/usr/include目录下。

## 备份下
cp -r /usr/include/ /usr/include_bak
mv /usr/lib64/ /usr/lib64_bak

## 库文件建软链接
ln -s /usr/lib/aarch64-linux-gnu/ /usr/lib64

## 头文件建软链接
ln -s /usr/include/aarch64-linux-gnu/sys /usr/include/sys
ln -s /usr/include/aarch64-linux-gnu/bits /usr/include/bits
ln -s /usr/include/aarch64-linux-gnu/gnu /usr/include/gnu
ln -s /usr/include/aarch64-linux-gnu/asm /usr/include/asm

系统关闭授权

kylin-sec系统默认开启了操作授权,很多命令需要手动输入Y来确认执行。尤其是在make -sj阶段,多进程并发执行,没法做手动确定。需要暂时关闭。

sudo   setstatus softmode -p

导入环境变量

export CODE_BASE=/data/compile/openGauss-server
export BINARYLIBS=/data/compile/openGauss-third_party_binarylibs_openEuler_arm
export GAUSSHOME=$CODE_BASE/dest/
export GCC_PATH=$BINARYLIBS/buildtools/gcc10.3/
export CC=$GCC_PATH/gcc/bin/gcc
export CXX=$GCC_PATH/gcc/bin/g++
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$GCC_PATH/gcc/lib64:$GCC_PATH/isl/lib:$GCC_PATH/mpc/lib/:$GCC_PATH/mpfr/lib/:$GCC_PATH/gmp/lib/:$LD_LIBRARY_PATH
export PATH=$GAUSSHOME/bin:$GCC_PATH/gcc/bin:$PATH

修改源码

注释掉如下一行。高版本linux也定义了gettimeofday,和数据库的定义重复了。去掉数据库里面的函数定义。

注释掉下面文件 168 行 (extern int gettimeofday(struct timeval* tp, struct timezone* tzp);)
src/include/communication/commproxy_interface.h:168

编译源码


./configure --gcc-version=10.3.1 CC=g++ CFLAGS="-O2 -g3" --prefix=$GAUSSHOME --3rd=$BINARYLIBS --enable-thread-safety --with-readline --without-zlib
make -sj8
make install -sj

在这里插入图片描述

初始化和启动数据库 (子用户执行)

## 初始化
gs_initdb -D ~/datanode/dn1 --nodename=node -w test@123

## 启动数据库
gs_ctl start -D ~/datanode/dn1

## 登录数据库
gsql -d postgres -p 5432 -r

在这里插入图片描述

问题记录

问题1:找不到 crt1.o 文件

在这里插入图片描述

解决方式:该库在/usr/lib/aarch64-linux-gnu/目录下,不在系统默认目录,可以建个软连接指向到 /usr/lib64 下

mv /usr/lib64/ /usr/lib64_bak
ln -s /usr/lib/aarch64-linux-gnu/ /usr/lib64
问题2:could not determine argument types

在这里插入图片描述

打开config.log,可以看到这里在找 sys/socket.h 头文件。
在这里插入图片描述

ls: 无法访问’/usr/include/sys/socket.h’: 没有那个文件或目录

但是系统上,这些目录在 /usr/include/aarch64-linux-gnu/sys 下。因此对头文件也建立软连接,指向到 /usr/include 下。除了sys外,还有bits gnu asm等目录。

ln -s /usr/include/aarch64-linux-gnu/sys /usr/include/sys
ln -s /usr/include/aarch64-linux-gnu/bits /usr/include/bits
ln -s /usr/include/aarch64-linux-gnu/gnu /usr/include/gnu
ln -s /usr/include/aarch64-linux-gnu/asm /usr/include/asm
问题3: gettimeofday重载错误

在这里插入图片描述

高版本linux也定义了gettimeofday,和数据库的定义重复了。去掉数据库里面的函数定义

注释掉:src/include/communication/commproxy_interface.h:168

在这里插入图片描述

其他问题

例如编译时候报错,/usr/bin/flex找不到,<libaio.h>头文件找不到等,都是缺少依赖库。

根据名称找到对应依赖下载安装即可。

apt install flex bison libc-dev libreadline-dev libaio-dev
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Arm架构的银河麒麟系统可以通过多种方式来安装虚拟机,以下是其中一种方式: 首先,我们需要下载并安装KVM(Kernel-based Virtual Machine)工具,它是Linux系统上的一种虚拟化技术,可以允许用户在一台物理硬件上同时运行多个虚拟机。 接下来,我们需要在银河麒麟系统中创建一个虚拟机管理器,可以选择安装Virt-manager或其他虚拟机管理工具。在虚拟机管理器中,我们可以创建不同的虚拟机并为其配置资,例如CPU、内存、存储等。 接着,我们可以下载和安装所需的操作系统镜像文件,例如Ubuntu、Debian等。在虚拟机管理器中,我们可以选择创建一个新的虚拟机并选择刚刚下载的操作系统镜像文件,然后配置其他虚拟机资。 最后,我们可以启动虚拟机并进行操作系统的安装和配置。在虚拟机中,我们可以通过终端或SSH等方式进行远程访问和控制。通过安装虚拟机,我们可以在一台物理服务器上创建多个虚拟环境,提高服务器的资利用率和应用程序的可靠性。 总之,对于Arm架构的银河麒麟系统而言,安装虚拟机是一个相对简单的过程,只需要下载和安装必要的工具和软件,并按照指导进行配置和安装即可。 ### 回答2: 首先,为了安装虚拟机,我们需要确保我们的 ARM 银河麒麟系统支持虚拟化技术。我们可以通过检查 CPU 是否支持虚拟化来确定这一点。ARM 架构的处理器通常需要使用 KVM 模块才能支持虚拟化,因此我们需要确认 KVM 模块已经加载并运行。 在确认系统支持虚拟化技术后,我们可以选择使用不同的虚拟机软件来安装虚拟机。在 ARM 银河麒麟系统上,我们可以选择使用 QEMU 或者 KVM 来安装虚拟机。 对于 QEMU,我们可以使用以下命令来创建并启动虚拟机: ``` qemu-system-arm -M virt -kernel <path-to-kernelImage> -hda <path-to-rootfs> -m 512 -append "root=/dev/vda console=ttyAMA0" ``` 其中 `path-to-kernelImage` 是内核镜像的路径,`path-to-rootfs` 是根文件系统的路径,`-m` 表示虚拟机内存大小,`-append` 表示内核参数。执行以上命令后,我们可以通过 `virt-manager` 进行管理和控制虚拟机。 对于 KVM,我们需要先确保 KVM 模块已经加载并运行。然后,我们可以使用 virt-install 命令来创建并安装虚拟机: ``` virt-install --name=myvm --virt-type=kvm --memory=1024 --vcpus=1 --os-type=linux --os-variant=rhel6 --cdrom=<path-to-iso> --disk path=<path-to-img>,size=8 --network network=default,model=virtio --graphics vnc --boot cdrom,hd ``` 其中 `path-to-iso` 是 ISO 镜像的路径,`path-to-img` 是虚拟硬盘的路径和大小。执行以上命令后,我们可以通过 VNC 客户端来访问和控制虚拟机。 总体而言,ARM 银河麒麟系统安装虚拟机和 x86 架构基本相同,只需要注意处理器和系统的差异,选择适当的虚拟机软件并按照其命令行或界面进行操作即可。 ### 回答3: ARM银河麒麟系统是基于ARM架构开发的操作系统,其安装虚拟机的方法与在其他操作系统上安装虚拟机的方法略有不同。以下是安装虚拟机的步骤: 首先,需要确保系统已经启用了虚拟化技术。可以通过在终端输入命令“cat /proc/cpuinfo | grep 'vmx\|svm'”查看系统是否支持虚拟化技术。如果系统支持,将会输出一行包含“vmx”或者“svm”的信息。 接下来,需要下载并安装适合ARM架构的虚拟机软件。可以在官网或第三方网站上下载QEMU、KVM等虚拟机软件。 安装完成后,需要在终端输入命令来创建虚拟机镜像文件,并为其分配磁盘空间和内存等资。如“qemu-img create -f qcow2 myvm.qcow2 20G”表示创建大小为20GB的虚拟机镜像文件。 随后,需要进入虚拟机软件的命令行界面,使用镜像文件启动虚拟机。可以通过输入命令“qemu-system-arm -M virt -cpu cortex-a53 -smp 4 -m 2048 -hda myvm.qcow2 -net nic -net user,hostfwd=tcp::2222-:22”来启动虚拟机。 最后,在虚拟机中安装所需的操作系统和应用程序即可。需要注意的是,在ARM架构上,当前尚没有流行的x86应用程序,因此需要选择适合ARM架构的软件进行安装。 总之,ARM银河麒麟系统安装虚拟机的过程较为复杂,请用户按照上述步骤操作,并根据实际情况适当调整参数,以获得最佳体验效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值