【GaussDB】如何從GaussDB發布包中提取出內核二進制文件

【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…