【GaussDB】如何从GaussDB发布包中提取出内核二进制文件

背景

GaussDB 从505和506版本起(前面的版本不清楚),华为官方不再提供用脚本安装GaussDB的方式(应该是基于运维交付标准化的角度考虑),仅支持使用TPOPS进行安装。而想正常搭建一整套TPOPS+GaussDB,所需要的硬件配置非常高,普通开发者或者DBA个人很难整出这么一套硬件。就算培训视频和文档再好再多,没有环境进行测试,也全是纸上谈兵罢了。
熟悉openGauss安装原理的都知道,单机启动其实很简单,gs_initdb初始化一个数据目录,然后改改参数和环境变量,直接gs_ctl start就能启动。也就是说,如果能从GaussDB官方发布包中,把内核这些二进制提取出来,理论上也可以像openGauss一样单机启动。我实测这个方案在技术上的确是可以的,但是GaussDB官方发布包,层层压缩(《GaussDB文档中心-GaussDB内核包提取方法》),要解压8~9次才能解压出内核二进制,手动解压动不动就是空间不足或者路径超长了,操作非常麻烦,因此我就想到要写一个脚本来自动提取出内核二进制文件。

分析

首先,我手动解压了一下,这里以kylin系统x86_64平台为例

[root@ky10-sp3 uncompress_gauss]# ll
total 4940332
-rw-r----- 1 root root 5058894815 Jul 16 13:16 DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz
[root@ky10-sp3 uncompress_gauss]# tar -xf DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz
[root@ky10-sp3 uncompress_gauss]# ll
total 4940332
drwxr-xr-x 3 root root         42 Apr 28 09:49 DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872
-rw-r----- 1 root root 5058894815 Jul 16 13:16 DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz
[root@ky10-sp3 uncompress_gauss]# cd DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872/
[root@ky10-sp3 DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872]# ll
total 4
-rw-r--r-- 1 root root 173 Apr 28 09:49 manifest.yml
drwxr-xr-x 2 root root  88 Apr 28 09:47 packages
[root@ky10-sp3 DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872]# cd packages/
[root@ky10-sp3 packages]# ll
total 4939548
-rw-r--r-- 1 root root 5058085281 Apr 27 18:21 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all.tar.gz
[root@ky10-sp3 packages]# tar -xf DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all.tar.gz
[root@ky10-sp3 packages]# ll
total 4939560
drwx------ 2 root root         91 Apr 27 18:08 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all
-rw-r--r-- 1 root root 5058085281 Apr 27 18:21 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all.tar.gz
[root@ky10-sp3 packages]# cd DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all/
[root@ky10-sp3 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all]# ll
total 4938752
-rw------- 1 root root 5057276857 Apr 27 18:08 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch.tar.gz
[root@ky10-sp3 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all]# tar -xf DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch.tar.gz
[root@ky10-sp3 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all]# ll
total 4938756
drwx------ 6 root root         78 Apr 27 18:04 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch
-rw------- 1 root root 5057276857 Apr 27 18:08 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch.tar.gz
[root@ky10-sp3 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all]# cd DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch/
[root@ky10-sp3 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch]# ll
total 4
drwx------ 7 root root  164 Apr 27 18:05 action
drwx------ 2 root root   97 Apr 27 17:59 config
-rw------- 1 root root 1645 Apr 27 18:04 manifest.yml
drwx------ 2 root root   94 Apr 27 18:04 repo
drwx------ 3 root root   64 Apr 27 17:58 vars
[root@ky10-sp3 DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch]# cd repo/
[root@ky10-sp3 repo]# ll
total 4930740
-rw------- 1 root root 5049071195 Apr 27 18:04 DBS-GaussDB-kernel-src-9.0.0.SPC0100.20250427175024.kylin.107678083-1.noarch.rpm
[root@ky10-sp3 repo]# rpm2cpio DBS-GaussDB-kernel-src-9.0.0.SPC0100.20250427175024.kylin.107678083-1.noarch.rpm | cpio -idmv  ## 这个命令很关键,该命令用于提取rpm中的文件
./opt/cloud/GaussDB-kernel/extra
./opt/cloud/GaussDB-kernel/extra/nouse.txt
./opt/cloud/GaussDB-kernel/extra/package_os_info.json
./opt/cloud/GaussDB-kernel/kernel_after_sql
./opt/cloud/GaussDB-kernel/kernel_after_sql/v1.4.0.sql
./opt/cloud/GaussDB-kernel/kernel_after_sql/v9.0.0.SPC0100.sql
./opt/cloud/GaussDB-kernel/v9.0.0.SPC0100-GaussDBV5-install-kylin-aarch64_d918a268334971aff2d6bd567282d526df9005d9eccb7f949ee48d14a76e04fe.tar.gz
cpio: write error: No space left on device  ## 这里空间不足了,只能先删掉一些文件
[root@ky10-sp3 repo]# rm ../../DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch.tar.gz
rm: remove regular file '../../DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch.tar.gz'? y
[root@ky10-sp3 repo]# rm ../../../DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all.tar.gz
rm: remove regular file '../../../DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all.tar.gz'? y
[root@ky10-sp3 repo]# ll
total 4930752
-rw------- 1 root root 5049071195 Apr 27 18:04 DBS-GaussDB-kernel-src-9.0.0.SPC0100.20250427175024.kylin.107678083-1.noarch.rpm
drwxr-xr-x 3 root root         19 Jul 16 13:21 opt
[root@ky10-sp3 repo]# rm -rf opt ## 先把前面解压不完整的删了,重新解压
[root@ky10-sp3 repo]# rpm2cpio DBS-GaussDB-kernel-src-9.0.0.SPC0100.20250427175024.kylin.107678083-1.noarch.rpm | cpio -idmv ## 这里4个tar包,带ha的是集中式,不带ha的是分布式,aarch64和x86_64是cpu平台
./opt/cloud/GaussDB-kernel/extra
./opt/cloud/GaussDB-kernel/extra/nouse.txt
./opt/cloud/GaussDB-kernel/extra/package_os_info.json
./opt/cloud/GaussDB-kernel/kernel_after_sql
./opt/cloud/GaussDB-kernel/kernel_after_sql/v1.4.0.sql
./opt/cloud/GaussDB-kernel/kernel_after_sql/v9.0.0.SPC0100.sql
./opt/cloud/GaussDB-kernel/v9.0.0.SPC0100-GaussDBV5-install-kylin-aarch64_d918a268334971aff2d6bd567282d526df9005d9eccb7f949ee48d14a76e04fe.tar.gz
./opt/cloud/GaussDB-kernel/v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-aarch64_a7643865bd3ea44f78a8d8c4832d3103c285f7953a57def4119abc4939c13b5e.tar.gz
./opt/cloud/GaussDB-kernel/v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64_1cc3a7613759e3b6adf885c90adfd2b6ce835b95cb2b898538c14a86a0a914a0.tar.gz
./opt/cloud/GaussDB-kernel/v9.0.0.SPC0100-GaussDBV5-install-kylin-x86_64_b03ea7dd52bbb453a534fc18185f412d6b2a531824c2634858dc6c0eee97baec.tar.gz
9858503 blocks
[root@ky10-sp3 repo]# cd opt/cloud/GaussDB-kernel/
[root@ky10-sp3 GaussDB-kernel]# tar -xf v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64_1cc3a7613759e3b6adf885c90adfd2b6ce835b95cb2b898538c14a86a0a914a0.tar.gz
[root@ky10-sp3 GaussDB-kernel]# ll 
total 4929376
drwxr-xr-x 2 root root         51 Jul 16 13:23 extra
drwxr-xr-x 2 root root         50 Jul 16 13:23 kernel_after_sql
-rw-r--r-- 1 root root 1267010444 Apr 27 17:56 v9.0.0.SPC0100-GaussDBV5-install-kylin-aarch64_d918a268334971aff2d6bd567282d526df9005d9eccb7f949ee48d14a76e04fe.tar.gz
-rw-r--r-- 1 root root 1260320135 Apr 27 17:53 v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-aarch64_a7643865bd3ea44f78a8d8c4832d3103c285f7953a57def4119abc4939c13b5e.tar.gz
drwx------ 2 root root        227 Apr 27 17:53 v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64
-rw-r--r-- 1 root root 1251971180 Apr 27 17:54 v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64_1cc3a7613759e3b6adf885c90adfd2b6ce835b95cb2b898538c14a86a0a914a0.tar.gz
-rw-r--r-- 1 root root 1268225145 Apr 27 17:58 v9.0.0.SPC0100-GaussDBV5-install-kylin-x86_64_b03ea7dd52bbb453a534fc18185f412d6b2a531824c2634858dc6c0eee97baec.tar.gz
[root@ky10-sp3 GaussDB-kernel]# cd v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64/
[root@ky10-sp3 v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64]# ll
total 1222444
-rw------- 1 root root   31990299 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Om_X86_Py3.7_Centralized.tar.gz
-rw------- 1 root root  147639913 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
-rw------- 1 root root 1072143704 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Symbol_X86_Centralized.tar.gz
[root@ky10-sp3 v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64]# tar -xf GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
[root@ky10-sp3 v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64]# ll
total 1366812
-rw------- 1 root  root    31990299 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Om_X86_Py3.7_Centralized.tar.gz
-rw------- 1 root  root   147639913 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
-rw------- 1 root  root  1072143704 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Symbol_X86_Centralized.tar.gz
-rw-r--r-- 1 20001 20001  147830880 Apr 27 14:27 GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit_Server.tar.gz
[root@ky10-sp3 v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64]# tar -xf GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit_Server.tar.gz
[root@ky10-sp3 v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64]# ll
total 1479208
drwxr-xr-x 3 root  root          16 Apr 27 14:27 components
drwxr-xr-x 4 root  root          28 Apr 27 14:27 dependency
-rw------- 1 root  root    31990299 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Om_X86_Py3.7_Centralized.tar.gz
-rw------- 1 root  root   147639913 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
-rw------- 1 root  root  1072143704 Apr 27 17:53 GaussDB-Kernel_506.0.0.SPC0100.B010_Symbol_X86_Centralized.tar.gz
-rwx------ 1 root  root   111140514 Apr 27 14:27 GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin ## 这个文件就是内核二进制的自解压文件
-rw-r--r-- 1 20001 20001  147830880 Apr 27 14:27 GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit_Server.tar.gz
-rw-r--r-- 1 root  root          65 Apr 27 14:27 GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.sha256
drwxr-xr-x 7 root  root          67 Apr 27 14:27 unixodbc
-rw------- 1 root  root          65 Apr 27 14:27 upgrade_sql_a.sha256
-rw------- 1 root  root       55554 Apr 27 14:27 upgrade_sql_a.tar.gz
-rw------- 1 root  root          65 Apr 27 14:27 upgrade_sql_m.sha256
-rw------- 1 root  root      631061 Apr 27 14:27 upgrade_sql_m.tar.gz
-rw------- 1 root  root          65 Apr 27 14:27 upgrade_sql_others.sha256
-rw------- 1 root  root       41744 Apr 27 14:27 upgrade_sql_others.tar.gz
-rw------- 1 root  root          65 Apr 27 14:27 upgrade_sql.sha256
-rw------- 1 root  root     3188417 Apr 27 14:27 upgrade_sql.tar.gz
-rw-r--r-- 1 root  root          47 Apr 27 14:27 version.cfg

最后得到的 GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin 就是内核包,这是一个7z的自解压文件,直接运行即可解压内核到当前目录

[root@ky10-sp3 uncompress_gauss]# mkdir 
[root@ky10-sp3 uncompress_gauss]# mv GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin app
[root@ky10-sp3 uncompress_gauss]# cd app
[root@ky10-sp3 app]# ll
total 108536
-rwx------ 1 root root 111140514 Jul 16 15:07 GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin
[root@ky10-sp3 app]# ./GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin7-Zip SFX 17.05 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28
p7zip Version 17.05 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs x64)Extracting archive: ./GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin
--
Path = ./GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin
Type = 7zEverything is Ok
[root@ky10-sp3 app]# ll
total 108552
drwx------ 2 root root      4096 Jul 16 23:47 bin
drwxr-xr-x 3 root root        22 Apr 27 14:27 etc
-rwx------ 1 root root 111140514 Jul 16 15:07 GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin
drwxr-xr-x 5 root root        46 Apr 27 14:27 include
drwx------ 5 root root      8192 Jul 16 23:47 lib
drwxr-xr-x 5 root root        50 Apr 27 14:27 share

看到最后这个目录结构应该很熟悉了,后面就接上了openGauss手动安装的步骤。

注意,这种手动解压的方式安装的GaussDB,不是GaussDB官方提供的方式,因此如果用出了任何问题,GaussDB官方都不会提供支持服务。

开发shell脚本

接下来就是写shell脚本,不过这年头有ai了,这种粗活不是分分钟搞定?
于是我把我上面手动解压的步骤给到Cursor,并且下达指令

分析这些命令,并生成以下功能脚本
# GaussDB 通用解压脚本
# 用法: uncompress_gaussdb.sh <tar包路径> <CPU架构>
# 架构支持: x86_64/x86/arm/arm64/aarch/aarch64 (忽略大小写,映射到x86_64和aarch64)
# 功能: 提取集中式的*_Om_*.tar.gz *_Server_*.tar.gz *_Symbol*.tar.gz *Kernel*.bin 这4类文件到原始tar包的相同目录

然后Cursor就一股脑给我生成完了,虽然有些小BUG,但我人工修掉了(最新版本Cursor不能连kylin v10 sp3系统远程开发了,要不然就让Cursor自己测试和修复了)。

脚本的执行效果

[root@ky10-sp3 uncompress_gauss]# ./uncompress_gaussdb.sh DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz x86_64
[信息] 原始tar包: /root/uncompress_gauss/DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz
[信息] 工作目录: /root/uncompress_gauss
[信息] 目标架构: x86_64
[信息] 第1步: 解压主tar包...
[信息] 进入目录: ./DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872
[信息] 第2步: 解压_all.tar.gz文件...
[信息] 解压文件: ./DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all.tar.gz
[信息] 第3步: 解压_noarch.tar.gz文件...
[信息] 解压文件: ./DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch.tar.gz
[信息] 第4步: 解压RPM文件...
[信息] 解压RPM文件: ./DBS-GaussDB-kernel-src-9.0.0.SPC0100.20250427175024.kylin.107678083-1.noarch.rpm
[信息] 第5步: 解压架构相关的安装包...
[信息] 解压架构文件: ./v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64_1cc3a7613759e3b6adf885c90adfd2b6ce835b95cb2b898538c14a86a0a914a0.tar.gz
[信息] 第6步: 解压Server相关文件...
[信息] 第7步: 查找并复制目标文件...
[信息] 找到_Om_文件: GaussDB-Kernel_506.0.0.SPC0100.B010_Om_X86_Py3.7_Centralized.tar.gz
[信息] 找到_Server_文件: GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
[信息] 找到_Symbol_文件: GaussDB-Kernel_506.0.0.SPC0100.B010_Symbol_X86_Centralized.tar.gz
[信息] 找到Kernel文件: GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin
[信息] 第8步: 清理临时目录...
[信息] ============== 解压完成 ==============
[信息] 原始tar包: DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz
[信息] 目标架构: x86_64
[信息] 提取文件数: 4
[信息] 输出目录: /root/uncompress_gauss
[信息] 所有文件已提取到: /root/uncompress_gauss
[信息] 请检查以下文件:
-rw------- 1 root root   31990299 Jul 16 15:07 /root/uncompress_gauss/GaussDB-Kernel_506.0.0.SPC0100.B010_Om_X86_Py3.7_Centralized.tar.gz
-rw------- 1 root root  147639913 Jul 16 15:07 /root/uncompress_gauss/GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
-rw------- 1 root root 1072143704 Jul 16 15:07 /root/uncompress_gauss/GaussDB-Kernel_506.0.0.SPC0100.B010_Symbol_X86_Centralized.tar.gz
-rwx------ 1 root root  111140514 Jul 16 15:07 /root/uncompress_gauss/GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin

非常的赏心悦目哈!

虽然只要一个bin文件就能启动GaussDB内核了,但这里我提取出4个文件,主要目的是这些文件以后可能也能用到,比如Symbol符号表,这个东西在遇上内核疑难杂症时可是必须的。

开发powershell脚本

这是linux版本上的,假设要在windows上解压呢?
直接和Cursor说让她根据这个sh脚本再生成一个windows上的,分分钟就生成了一个ps1文件,只是这下需要额外安装7z,还要装gitbash,而且BUG又稍微多了点,有长路径问题,还有环境变量上下文切换异常的问题。不过好在Cursor能自己测试自己修BUG,她全自动改了5个版本后,终于能正常运行了。

PS G:\gaussdb506\gaussdb506_LTS\uncompress> Set-ExecutionPolicy RemoteSigned -Scope Process -Force
PS G:\gaussdb506\gaussdb506_LTS\uncompress> .\uncompress_gaussdb.ps1 .\DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz x86_64                                                                                                                        [INFO] Original tar package: G:\gaussdb506\gaussdb506_LTS\uncompress\DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz
[INFO] Working directory: G:\gaussdb506\gaussdb506_LTS\uncompress
[INFO] Target architecture: x86_64=== Checking Required Tools ===
[INFO] Found tool: tar (path: tar)
[INFO] Found tool: 7z (path: C:\Program Files\7-Zip\7z.exe)=== Step 1: Extracting main tar ===
False
[INFO] Entering directory: DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872
False=== Step 2: Extracting _all.tar.gz file ===
[INFO] Extracting file: DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_all.tar.gz
[WARN] Long path detected in Step 2. Path length: 203
[WARN] Switching to short path for remaining operations.
[INFO] Working in short path: G:\gaussdb506\gaussdb506_LTS\uncompress\gaussdb_extract_638883094630095806\temp_extract_801137921
True=== Step 3: Extracting _noarch.tar.gz file ===
[INFO] Extracting file: DBS-GaussDB-kernel_9.0.0.SPC0100.20250427175024.kylin.107678083_noarch.tar.gz
[WARN] Long path detected in Step 3. Path length: 173
[WARN] Switching to short path for remaining operations.
[INFO] Switched to shorter path: G:\gaussdb506\gaussdb506_LTS\uncompress\gaussdb_extract_638883094630095806\temp_872330166
True=== Step 4: Extracting RPM file ===
[INFO] Extracting RPM file: DBS-GaussDB-kernel-src-9.0.0.SPC0100.20250427175024.kylin.107678083-1.noarch.rpm
[INFO] Using 7z to extract RPM: C:\Program Files\7-Zip\7z.exe
[INFO] Extracting CPIO file: DBS-GaussDB-kernel-src-9.0.0.SPC0100.20250427175024.kylin.107678083-1.noarch.cpio
False=== Step 5: Extracting architecture-related installation packages ===
[INFO] Extracting architecture file: v9.0.0.SPC0100-GaussDBV5-install-kylin-ha-x86_64_1cc3a7613759e3b6adf885c90adfd2b6ce835b95cb2b898538c14a86a0a914a0.tar.gz
False
[WARN] Long path detected in Step 5 (install). Path length: 163
[WARN] Switching to short path for remaining operations.
[INFO] Switched to shorter path: G:\gaussdb506\gaussdb506_LTS\uncompress\gaussdb_extract_638883094630095806\temp_242132117
True=== Step 6: Extracting Server-related files ===
[INFO] Extracting Server file: GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
False
[INFO] Extracting 64bit file: GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit_Server.tar.gz
./components/cm/lib/libcjson.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libcjson.so'
./components/cm/lib/libcjson.so.1: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libcjson.so.1'
./components/cm/lib/libclient.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libclient.so'
./components/cm/lib/libcom_err.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libcom_err.so'
./components/cm/lib/libcom_err.so.3: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libcom_err.so.3'
./components/cm/lib/libgssapi_krb5.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libgssapi_krb5.so'
./components/cm/lib/libgssapi_krb5.so.2: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libgssapi_krb5.so.2'
./components/cm/lib/libgssrpc.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libgssrpc.so'
./components/cm/lib/libgssrpc.so.4: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libgssrpc.so.4'
./components/cm/lib/libk5crypto.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libk5crypto.so'
./components/cm/lib/libk5crypto.so.3: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libk5crypto.so.3'
./components/cm/lib/libkrb5.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libkrb5.so'
./components/cm/lib/libkrb5.so.3: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libkrb5.so.3'
./components/cm/lib/libkrb5support.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libkrb5support.so'
./components/cm/lib/libkrb5support.so.0: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libkrb5support.so.0'
./components/cm/lib/liblz4.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\liblz4.so'
./components/cm/lib/liblz4.so.1: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\liblz4.so.1'
./components/cm/lib/libz.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libz.so'
./components/cm/lib/libz.so.1: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libz.so.1'
./components/cm/lib/libzstd.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libzstd.so'
./components/cm/lib/libzstd.so.1: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\components\\cm\\lib\\libzstd.so.1'
./dependency/lib/libcgroup.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\dependency\\lib\\libcgroup.so'
./dependency/lib/libcgroup.so.2: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\dependency\\lib\\libcgroup.so.2'
./dependency/lib/libstdc++.so.6: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\dependency\\lib\\libstdc++.so.6'
./unixodbc/lib/libodbc.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\unixodbc\\lib\\libodbc.so'
./unixodbc/lib/libodbc.so.2: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\unixodbc\\lib\\libodbc.so.2'
./unixodbc/lib/libodbccr.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\unixodbc\\lib\\libodbccr.so'
./unixodbc/lib/libodbccr.so.2: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\unixodbc\\lib\\libodbccr.so.2'
./unixodbc/lib/libodbcinst.so: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\unixodbc\\lib\\libodbcinst.so'
./unixodbc/lib/libodbcinst.so.2: Can't create '\\\\?\\G:\\gaussdb506\\gaussdb506_LTS\\uncompress\\gaussdb_extract_638883094630095806\\temp_242132117\\unixodbc\\lib\\libodbcinst.so.2'
tar.exe: Error exit delayed from previous errors.
False=== Step 7: Finding and copying target files ===
[INFO] Found _Om_ file: GaussDB-Kernel_506.0.0.SPC0100.B010_Om_X86_Py3.7_Centralized.tar.gz
[INFO] Found _Server_ file: GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
[INFO] Found _Symbol file: GaussDB-Kernel_506.0.0.SPC0100.B010_Symbol_X86_Centralized.tar.gz
[INFO] Found Kernel file: GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin
[INFO] Found Kernel file: GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin=== Extraction Complete ===
[INFO] Original tar package: .\DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz
[INFO] Target architecture: x86_64
[INFO] Extracted files: 5
[INFO] Output directory: G:\gaussdb506\gaussdb506_LTS\uncompress
[INFO] All files have been extracted to: G:\gaussdb506\gaussdb506_LTS\uncompress
[INFO] Please check the following files:GaussDB-Kernel_506.0.0.SPC0100.B010_Om_X86_Py3.7_Centralized.tar.gz (30.51 MB)GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz (140.8 MB)GaussDB-Kernel_506.0.0.SPC0100.B010_Symbol_X86_Centralized.tar.gz (1022.48 MB)GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin (105.99 MB)=== Cleaning up temporary directory ===
[INFO] Cleaned up temporary directory: gaussdb_extract_638883094630095806
[INFO]
馃帀 Task completed! 馃帀PS G:\gaussdb506\gaussdb506_LTS\uncompress> ls目录: G:\gaussdb506\gaussdb506_LTS\uncompressMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          2025/5/6     12:03     5058894815 DBS-GaussDB-Kylin-Kernel_25.1.30.10.968045292423872.tar.gz
-a----         2025/4/27     17:53       31990299 GaussDB-Kernel_506.0.0.SPC0100.B010_Om_X86_Py3.7_Centralized.tar.gz
-a----         2025/4/27     17:53      147639913 GaussDB-Kernel_506.0.0.SPC0100.B010_Server_X86_Centralized.tar.gz
-a----         2025/4/27     17:53     1072143704 GaussDB-Kernel_506.0.0.SPC0100.B010_Symbol_X86_Centralized.tar.gz
-a----         2025/4/27     14:27      111140514 GaussDB-Kernel_506.0.0.SPC0100_Kylin_64bit.bin
-a----         2025/7/17      0:37          18364 uncompress_gaussdb.ps1

由于ai编程对中文字符集处理很容易出现乱码,我就让Cursor把中文全改成英文了,后面的那个“馃帀”其实是emoji 🎉。
第6步里的那些报错不用管,那些是因为解压的包里有软链接,windows上不认linux的软链接。

总结

  1. 时代变了,AI自动写代码的完成度已经非常高了(写完这篇,刚好Cursor高级模型开始封国内ip了…)
  2. 建议GaussDB官方应该考虑下如何在安装测试数据库这个方面对开发者和DBA友好化(别说用openGauss,因为两者差别已经很大了)
  3. 本文中使用到的shell脚本和powershell脚本已开源,实测在505.2版本和506.0版本都可以正确提取内核二进制
    https://gitee.com/darkathena/uncompress-gaussdb
  • 本文作者: DarkAthena
  • 本文链接: https://www.darkathena.top/archives/GaussDB-How-to-Extract-Kernel-Binaries-from-the-Release-Package
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处

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

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

相关文章

ETH 交易流程深度技术详解

概述在前面对 PolkaVM 和 Revive 的文章中&#xff0c;我们介绍了很多技术细节&#xff0c;开发工具。还对比 EVM&#xff0c;知道了 PolkaVM 的优势。很多同学还是对 Polkadot SDK 为什么可以运行 EVM 兼容的智能合约&#xff0c;以及交易处理的整个流程不太清楚。这篇文章将会…

【算法训练营Day17】二叉树part7

文章目录二叉树的最近公共祖先二叉搜索树的最近公共祖先二叉搜索树中的插入操作删除二叉搜索树中的节点二叉树的最近公共祖先 题目链接&#xff1a;236. 二叉树的最近公共祖先 解题逻辑&#xff1a; 最近公共祖先的定义为&#xff1a;对于有根树 T 的两个节点 p、q&#xff0c…

Vue插件与组件核心区别详解

在 Vue 中&#xff0c;插件&#xff08;Plugin&#xff09; 和 组件&#xff08;Component&#xff09; 是两种不同层次的概念&#xff0c;它们的主要区别如下&#xff1a;1. 组件 (Component) 定义&#xff1a; Vue 应用的基本构建单元&#xff0c;是可复用的 Vue 实例&#x…

基础NLP | 02 深度学习基本原理

文章目录 深度学习基本原理 数学基础 线代 numpy 常用操作 导数, 梯度 梯度下降法 梯度下降代码 GradientDescent.py 反向传播 完整的反向传播过程 权重更新方式 pytorch 网络结构 全连接层 (线性层) 例子 - 手动实现模拟一个线性层 DNNforward.py 激活函数 激活函数-Sigmoid…

MySQL面试题及详细答案 155道(001-020)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

Ansible安装与入门

目录 Ansible ansible任务执行模式 ansible执行流程 ansible命令执行过程&#xff08;背会&#xff09; ansible的安装方式 ansible的程序结构&#xff08;yum安装为例&#xff09; ansible的配置文件查找顺序&#xff08;背会&#xff09; 核心配置文件 ansible的配置…

【Spring】Spring Boot启动过程源码解析

目录 一、启动入口 二、SpringApplication的构造过程 2.1 设置应用类型 2.2 设置初始化器&#xff08;Initializer&#xff09; 2.2.1 获取BootstrapRegistryInitializer对象 2.2.2 获取ApplicationContextInitializer对象 2.3 设置监听器&#xff08;Listener&#xff…

CDN架构全景图

CDN架构全景图 CDN&#xff08;内容分发网络&#xff09;是一种通过在全球范围内部署边缘节点服务器&#xff0c;将内容缓存至离用户最近的位置&#xff0c;从而加速内容分发、降低延迟并减轻源站压力的分布式网络架构。其核心设计目标是优化互联网内容传输效率&#xff0c;提升…

【pytest高阶】源码的走读方法及插件hook

一、pytest源码走读方法 依赖库认知篇 &#x1f4e6;这是理解 pytest 源码的 “前菜”&#xff0c;先认识 3 个超重要的小伙伴&#xff1a;iniconfig &#x1f4c4;&#xff1a;像个 “文件小管家”&#xff0c;专门负责读取 ini 配置文件&#xff08;比如 pytest 的配置&#…

算法训练营day32 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

今天开始动态规划的部分&#xff01; 其实说白了&#xff0c;动态规划我感觉就是找类似递归的规律&#xff0c; 动态规划理论基础 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规…

基于神经网络的手写数字识别系统

基于神经网络的手写数字识别系统 结合模板匹配和神经网络两种方法进行手写数字识别。这个系统包括图像预处理、特征提取、神经网络训练和可视化分析。 %% 基于神经网络的手写数字识别系统%% 清理工作区 clear; clc; close all;%% 加载手写数字数据集 % 使用MATLAB自带的手写数字…

机器学习?一文看懂这门热门技术

&#x1f31f; 什么是机器学习&#xff1f;一文看懂这门热门技术在人工智能&#xff08;AI&#xff09;的大潮中&#xff0c;机器学习&#xff08;Machine Learning, ML&#xff09; 无疑是最耀眼的明星之一。它让计算机具备了 “自我学习” 的能力&#xff0c;让自动驾驶、智能…

Spring的初始化钩子

1. PostConstruct JSR-250 标准注解&#xff08;不是 Spring 独有&#xff09;&#xff0c;用来标记 Bean 初始化完成后要执行的方法。会在 Bean 的构造方法执行完、依赖注入完成后执行。 使用实例&#xff1a; Component public class Demo {PostConstructpublic void init() …

【AI】Java生态对接大语言模型:主流框架深度解析

文章目录1. Deep Java Library (DJL)2. LangChain4j&#xff08;LLM&#xff09;3. HuggingFace Inference API4. OpenAI Java Client技术对比矩阵架构设计建议在人工智能浪潮下&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为技术核心。Java生态通过以下框架实现高效…

【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件

文章目录1 单个 .cs文件2 创建 多个 .cs文件2.1 添加Hero类2.1 添加ShowInfo类2.3 关于命名空间的引用2.4 所有.cs文件代码3 test3项目文件下载1 单个 .cs文件 上一讲中 描述游戏中英雄的角色 所有代码在一个.cs文件中&#xff0c; 如果代码很多&#xff0c;类很多&#xff0…

【MySQL基础篇】:MySQL常用数据类型的选择逻辑与正确使用

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;MySQL篇–CSDN博客 文章目录数据类型1.数据类型分类2.数值类型int整形类型bit位类型float小…

三、搭建springCloudAlibaba2021.1版本分布式微服务-springcloud loadbalancer负载均衡

什么是负责均衡 Spring Cloud LoadBalancer是一个客户端负载均衡器&#xff0c;类似于Ribbon&#xff0c;但是由于Ribbon已经进入维护模式&#xff0c;并且Ribbon 2并不与Ribbon 1相互兼容&#xff0c;所以Spring Cloud全家桶在Spring Cloud Commons项目中&#xff0c;添加了Sp…

Oracle不完全恢复实战指南:从原理到操作详解

核心提示&#xff1a;当误删表、日志损坏或控制文件丢失时&#xff0c;Oracle的不完全恢复是DBA最后的救命稻草。掌握关键恢复技术&#xff0c;可在数据灾难中力挽狂澜。一、不完全恢复核心概念 1. 核心特点 必须关闭数据库&#xff1a;在MOUNT状态下执行重做日志恢复权限要求&…

Linux之shell脚本篇(二)

一、shell编程之if语句引言Linux在shell编程中&#xff0c;通常都是以自上而下运行&#xff0c;但是为了提高其代码严谨性&#xff0c;我们即引入了多条件 控制语句例如&#xff1a;if、for、while、case等语句&#xff0c;有时候针对条件我们还会结合正则表达式去运用。将这些…

如何在android framewrok dump camera data

实现dump 函数 实现1 void dumpBufferToFile(buffer_handle_t* buffer, int width, int height, int frameNum) {void* data NULL;GraphicBufferMapper::getInstance().lock(*buffer, GRALLOC_USAGE_SW_READ_OFTEN, Rect(width, height), &data);char filename[128];sprin…