reposync:把 YUM 镜像源同步到本地
内网机器没法直连公网 YUM 源时,常见做法是找一台能上网的机器把整个仓库同步下来,再搭成本地源。reposync 干的就是这件事:把远端仓库的 rpm 包按 repoid 拉到本地目录。本文以 CentOS 6 时代的 yum-utils 写法为起点(原文环境),并在 Rocky Linux 9.3 容器(dnf 4.14)里逐条实测 dnf 时代的真实差异——结论有点反直觉:兼容脚本还在、老参数大多能用,真正会翻车的是网上流传的 --metadata 选项名。 整体流程同步一个仓库到本地,四步:装工具 → 建目录 → 查 repoid → 执行同步。同步完还要 createrepo 生成元数据,客户端才能把它当仓库用。 下载工具包reposync 命令所在的工具包,两代系统名字不同: 12345# CentOS 6/7(yum 时代)yum install -y yum-utils# RHEL 8/9(dnf 时代)dnf install -y dnf-utils 验证:CentOS 6/7 上 reposync --help 有输出;Rocky 9 容器实测,装...
源码安装 OpenResty 1.19.3.1(链接自编 OpenSSL):RHEL 8/9 适用,Rocky 9 实测
OpenResty 把 Nginx 和一组 Lua 模块打成了一个包,需要定制编译选项时,源码安装是常规路子。这篇记录在 RHEL 系(CentOS 8 / Rocky 9 命令一致)上源码安装 OpenResty 1.19.3.1 的完整步骤,重点是 --with-openssl 的正确指向——它要的是 OpenSSL 的源码目录,不是安装目录,这点搞错编译直接失败。全文在 Rocky Linux 9.3 容器里实跑复现:configure、make、安装、启动到 curl 200。 前置条件 RHEL 8/9 系服务器,root 或 sudo 权限(本文实测环境为 rockylinux:9.3 容器)。 编译工具链:gcc、make、perl(OpenResty 的 configure 脚本靠 perl 驱动)。 库:pcre-devel(URL 重写模块依赖)、zlib-devel(gzip 压缩)。 一份 OpenSSL 源码包(本文以 openssl-3.1.4 为例),解压后放在任意路径,比如 /usr/local/s...
IPMI 带外管理:用 ipmitool 远程开关机与查硬件状态
服务器系统崩了、连 SSH 都进不去,传统远程管理就束手无策了。IPMI 就是为这种场景准备的:它工作在操作系统之下,只要机房还在供电,就能远程看硬件状态、开关机、装系统。这篇记录 IPMI 的基本概念和 ipmitool 的常用操作,安装与无 BMC 环境的报错行为在 Rocky 9 容器实测过,远程电源操作需要真实 BMC,未实跑。 IPMI 是什么IPMI(Intelligent Platform Management Interface,智能平台管理接口)是一个通用的硬件管理接口标准,用来监视服务器的物理特征:温度、电压、风扇、电源、机箱入侵等。它最大的价值在于独立于 CPU、BIOS 和操作系统——无论开机还是关机,只要接通电源就能管理服务器。 这套体系的核心是 BMC(Baseboard Management Controller,底板管理控制器),一块焊在主板上的嵌入式管理芯片,相当于平台管理的”大脑”。它通过主板传感器采集数据并记录事件日志,能力覆盖:串口访问、故障日志与 SNMP 警报、系统事件日志(SEL)与传感器读取、电源控制,以及文本控制台重定向(用于 B...
Cobbler 自动装机:从部署到 PXE 批量装系统(Rocky Linux 9,附 CentOS 7 差异)
机房里十几台新机器等着装系统,一台台插 U 盘不现实。Cobbler 把 PXE 引导、DHCP、应答文件串成一整套,机器开机选网络启动就能自动装完。这篇按部署顺序完整走一遍,从装服务到按 MAC 定制装机。主环境为 Rocky Linux 9 + Cobbler 3.3.7(EPEL),服务端部署、DHCP 接管、distro/profile/system 建档与 PXE 制品生成均在 Rocky 9 容器实测(容器内核与网络条件所限,真实客户机 PXE 引导那一跳未实测);Cobbler 3.x 相对 CentOS 7 时代的 2.x 变化很大,文末附老版本差异对照。 官方文档:cobbler 先看这个:Cobbler 2.x → 3.x 高频变化CentOS 7 老教程(包括本文历史版本)在 3.x 上直接照搬会四处碰壁,先把最常撞上的差异列全: 2.x(CentOS 7)写法 3.x(Rocky 9)写法 实测结果 配置文件 /etc/cobbler/settings /etc/cobbler/settings.yaml 格式改 YAML ...
Elasticsearch 7.6.1 安装:tar 包手动部署并指定 JDK
在 Linux 上快速跑起一个 Elasticsearch,用官方 tar 包手动部署是最直接的方式。这篇记录 Elasticsearch 7.6.1(no-jdk 版本,安装包内不含 JDK)的完整安装过程:先装好 JDK,创建专用用户,再解压、指定 JDK 路径、启动并验证。每一步带验证点,关键报错都来自实跑。 装好的是一个监听 9200 端口的单节点 ES,curl 127.0.0.1:9200 返回版本 JSON,集群健康 green。 前置条件 操作系统:Linux x86_64(本文实跑环境为 rockylinux:9 容器,linux/amd64,ES 7.6.1 no-jdk tar 包;其他发行版流程一致,个别平台相关报错见”常见报错”) JDK:11(ES 7.6.1 官方支持 JDK 11;no-jdk 版不含 JDK,必须先装) 权限:root(安装阶段)+ 一个普通用户(运行阶段,ES 拒绝 root 启动) 系统参数:vm.max_map_count ≥ 262144、文件描述符 ≥ 65536(ES 启动时的 bootstrap check...
Tomcat 以 daemon 模式启动(jsvc):Rocky Linux 9 实测
用 startup.sh 起的 Tomcat 挂在当前 shell 下,退出终端、会话断开都可能把进程带死,权限管理也只能整把交给启动用户。daemon 模式通过 jsvc 把 Tomcat 托管成独立服务进程:root 侧的控制器负责拉起和信号处理,JVM 则跑在一个专用的不可登录用户下,启停用配套的 daemon.sh start/stop。这篇在 Rocky Linux 9 上用 Tomcat 9.0.121 + OpenJDK 11 把全过程实跑了一遍——包括编译 jsvc、配置 daemon.sh、启动验证和停止闭环。 照着做完全程,你会得到:一个编译好的 jsvc、一套以 tomcat 用户运行的 daemon 模式 Tomcat,以及一套可复用的 start/stop 操作命令。 前置条件 操作系统:Rocky Linux 9(本文实测环境为 rockylinux:9 容器,aarch64) 软件版本:Tomcat 9.0.121(官方 tarball),commons-daemon 1.6.1,java-11-openjdk 11.0.25 权限:roo...
Python 实时读取子进程输出:-u 参数与 flush=True
用 subprocess 调用外部 Python 脚本时,常会遇到一个怪现象:子进程明明在逐行打印,父进程却要等它跑完才一次性拿到所有输出。原因是子进程的标准输出接了管道之后不再是终端,Python 会从行缓冲退化为块缓冲——输出攒够一批(通常 4KB/8KB)或进程退出才真正写出去。 解法有两个:调用时给解释器加 -u 参数,或者在子进程的 print 里用 flush=True。这篇用几个小脚本在 debian:12 容器(apt 安装的 Python 3.11.2)里把两种方法都实测验证,并给出带时间戳的对照数据——缓冲与否,一眼就能看出来。 核心机制一句话Python 的 stdout 缓冲策略取决于它接到哪里:接终端是行缓冲(每行立即可见),接管道/文件是块缓冲(攒批写出)。subprocess 的 PIPE 恰恰是管道,所以子进程的 print 全被攒住了。-u 和 flush=True 都是绕过这个策略:前者让整个解释器无缓冲,后者让单条打印立即刷新。 先造一个慢慢输出的子进程system_time.py 获取系统时间,每秒打印一次,共打印 3 ...