GaGa's Blog

One GaGa, One World !

问题

# java程序调用系统底层so库
You may need to install 'libgomp.so' (or glibc) via your package manager.

ERROR | | ml.dmlc.xgboost4j.java.NativeLibLoader | Failed to load xgboost4j due to missing native dependencies for platform linux/x86_64, this is likely due to a missing OpenMP dependency online_mode |
ERROR | | ml.dmlc.xgboost4j.java.NativeLibLoader | You may need to install 'libgomp.so' (or glibc) via your package manager

当前系统环境信息

正确命令:microdnf 或 yum

bash-4.4# cat /etc/os-release 
NAME="Oracle Linux Server"
VERSION="8.8"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:8:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://github.com/oracle/oracle-linux"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.8
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.8
bash-4.4# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.8 (Ootpa)
Read more »

1. Composer 是什么

1.1 定位与本质
Composer 是 PHP 生态里的依赖管理器,解决的核心问题只有一个:
“这个 PHP 项目依赖了哪些库,用什么版本,怎么稳定、可重复地安装?”

但 Composer 的哲学更偏向 “项目级、可复现构建”,这点非常工程化,也非常 DevOps。

Composer = 依赖描述(composer.json) + 版本锁定(composer.lock) + 自动加载(autoload)

Read more »

GCC 8.x 系列

  • 初始发布的 CentOS 8:GCC 8.2.1
  • 后续更新:GCC 8.3.1、GCC 8.4.1 等

1.查看当前 GCC 版本

1
2
3
4
5
# 检查是否安装 GCC
gcc --version

# 或者
gcc -v
Read more »

ThinkPHP 是一个以 MVC + 约定优于配置 为核心的 PHP Web 框架,强调开发效率与清晰结构。

  • 主流版本是 ThinkPHP 5.x / 6.x,6.x 更偏向现代化(PSR 规范、依赖注入、强类型)
  • 它并不追求“全栈宇宙”,而是给你一套可控、透明、可裁剪的工程骨架。

top-think php

Read more »

问题

1.报错含义拆解:

nginx: [emerg] host not found in upstream "php-upstream-ios"
这句话不是在说 upstream 名字不存在,而是在说:
upstream 里配置的 server 主机名无法被解析(DNS 失败)

真正出问题的不是 php-upstream-ios 这个 upstream,而是它里面这一行:

Read more »

GitLab 默认角色权限是分层、递增的,核心围绕三类能力展开:

  • 仓库代码(Repository)
  • 协作流程(Issue / MR / CI)
  • 项目与权限管理(Settings / Members)

2.GitLab 默认角色一览(官方内建)
2.1.角色层级(从低到高)

Read more »

1. In-Place Upgrade 的准确含义

1.1 字面拆解

  • In-Place:在原地、不挪窝
  • Upgrade:升级系统版本

合在一起只有一个意思:

Read more »

Rocky Linux 9 → 10 这种**跨主版本升级(major upgrade)**在企业运维中确实要非常谨慎。
目前(截至 2025 年底),Rocky 10 已经发布,但官方还没正式提供像 leapp 那样“一键无损升级”的稳定路径。


一、官方现状与支持情况

项目 状态(2025年) 说明
Rocky 9 → 9.x ✅ 支持 dnf upgrade 即可滚动升级
Rocky 9 → 10 ⚠️ 实验性 RHEL 官方还未发布基于 leapp 的稳定迁移工具(leapp-data-rocky10 仍在测试)
RHEL 9 → 10(预览) 🔬 开发中 红帽官方计划在 2026 Q1 正式提供
推荐做法 ✅ 全量迁移安装(fresh install) 使用 Ansible/Kickstart/镜像重装 + 数据迁移脚本
Read more »

要一个 RockyLinux9 最小可用的多阶段构建镜像,能编译并运行 go-sqlite3因为 go-sqlite3 需要 sqlite-devel (编译阶段) + sqlite-libs (运行阶段),所以我们只要保证 builder 和 runtime 两个阶段分别装对依赖就行。

最小化的Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# ---------- builder 阶段 ----------
FROM rockylinux:9 AS builder

# 安装构建依赖 (gcc + sqlite-devel)
RUN dnf -y groupinstall "Development Tools" && \
dnf -y install golang sqlite-devel && \
dnf clean all

WORKDIR /app

# 设置 CGO
ENV CGO_ENABLED=1 \
GOOS=linux \
GOARCH=amd64

# 先下载依赖,避免源码频繁变动导致重复编译
COPY go.mod go.sum ./
RUN go mod download

# 拷贝源码并编译
COPY . .
RUN go build -ldflags="-w -s" -o app .

# ---------- runtime 阶段 ----------
FROM rockylinux:9 AS runtime

# 仅安装运行时依赖 (sqlite-libs),保持镜像尽量小
RUN dnf -y install sqlite-libs && \
dnf clean all

WORKDIR /app

# 从 builder 复制二进制
COPY --from=builder /app/app .

CMD ["./app"]

解释

Read more »

Tomcat 与 Redis 结合做 Session 管理的本质,是让 Tomcat 把原本本地内存中的 StandardManager 替换为一个分布式的 RedisSessionManager,所有节点共享同一个 Redis,实现真正的横向扩展。

Tomcat 装 Session Manager 模块 → 修改 server.xml → 配置 Redis → 重启验证 → 多节点压测。

步骤一:准备 Redis 环境

  1. 单节点环境可先跑 Redis(不过生产必须 Redis Cluster / Sentinel)。

  2. 业务上需要注意:Redis 配持久化 RDB+AOF 或至少 AOF appendfsync everysec,避免宕机丢会话。

Read more »
0%