Oracle 11g XE 在 Ubuntu 上可通过 alien 转 deb 安装,但必须手动修复三类问题:内核参数与 /dev/shm 挂载、硬编码的 Red Hat 工具链(如 chkconfig)、以及 postinst 和 init 脚本中的路径和逻辑适配。
直接说结论:oracle 11g xe 官方只提供 rpm 包,ubuntu 原生不支持,但用 alien 转成 deb 是可行的——前提是手动修复三类关键问题:内核参数、/dev/shm 挂载、以及 postinst 脚本里硬编码的 red hat 工具链。
为什么 alien --scripts -d 转换后仍会安装失败
转换本身能生成 .deb 文件,但 Oracle 的 rpm 包在 %post 阶段大量调用 /sbin/chkconfig、/bin/awk、/bin/basename 等路径,而 Ubuntu 默认不提供这些路径下的可执行文件(比如 chkconfig 根本不存在)。更隐蔽的是,其 oracle-xe.postinst 脚本中有一段判断逻辑:
if [ -f /etc/SuSE-release ]; then ... else /sbin/chkconfig --add oracle-xe fi
这段代码在 Ubuntu 上必然报错并中断安装。必须手动注释掉 /sbin/chkconfig 相关行,否则 dpkg -i 会卡死或回滚。
-
alien --scripts只做脚本迁移,不做语义适配 -
alien -d生成的包名含版本号和架构,如oracle-xe_11.2.0-2_amd64.deb,注意后续命令中别写错 - 转换前务必用
rpm -qpl oracle-xe-*.rpm检查包内文件结构,确认不含 SELinux 或 systemd-only 组件
安装前必须补全的系统级依赖和软链接
缺 libaio1 会导致数据库进程启动时直接 segfault;缺 bc 和 flex 会让配置脚本计算失败;而 /bin/awk、/bin/basename、/sbin/chkconfig 这三个路径是 Oracle 脚本硬写死的,Ubuntu 不自带,必须手动建立软链接或伪造脚本:
- 运行
sudo apt install alien libaio1 unixodbc bc flex libstdc++6 libc6-i386 sysstat elfutils - 创建软链接:
sudo ln -s /usr/bin/awk /bin/awk、sudo ln -s /usr/bin/basename /bin/basename - 伪造
chkconfig:sudo tee /sbin/chkconfig写入空的 bash 脚本并chmod +x,内容只需#!/bin/bash一行(它实际不被调用,只为过掉which chkconfig检查)
/dev/shm 挂载和内核参数是启动失败最常见原因
Oracle 11g XE 启动时强制检查 /dev/shm 是否为 tmpfs 类型、大小是否 ≥ 2GB。Ubuntu 22.04 默认用 /run/shm,且未挂载为 tmpfs。直接运行 sudo /etc/init.d/oracle-xe configure 会报 “ORA-27102: out of memory” 或 “Linux Error: 2: No such file or directory”。
- 临时修复:
sudo rm -rf /dev/shm && sudo mkdir /dev/shm && sudo mount -t tmpfs shmfs -o size=2048m /dev/shm - 永久生效:把
shmfs /dev/shm tmpfs size=2048m 0 0加进/etc/fstab,再加内核参数到/etc/sysctl.d/99-oracle.conf:
fs.file-max = 6815744 kernel.shmmax = 536870912 kernel.shmall = 2097152 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65000
然后执行 sudo sysctl --system 生效。
oracle-xe 服务脚本需手动修补才能在 Ubuntu 上跑通
安装生成的 /etc/init.d/oracle-xe 脚本仍残留 Red Hat 风格逻辑:比如用 /var/lock/subsys/oracle-xe 而非 Ubuntu 的 /var/lock/oracle-xe;监听器锁文件路径错误;AWK 变量默认指向 /bin/awk 但脚本里又没确保该路径存在。
- 全局替换:
sed -i 's|/var/lock/subsys|/var/lock|g' /etc/init.d/oracle-xe - 修正 AWK:
sed -i 's|AWK=/bin/awk|AWK=/usr/bin/awk|g' /etc/init.d/oracle-xe - 在脚本开头插入
/dev/shm检查逻辑(避免每次重启都手动挂载):
if [ ! -d /dev/shm ]; then mkdir /dev/shm mount -t tmpfs shmfs -o size=2048m /dev/shm fi
改完记得 sudo chmod +x /etc/init.d/oracle-xe,再运行 sudo /etc/init.d/oracle-xe configure ——此时才真正进入交互式配置环节。
真正麻烦的不是转换那条 alien 命令,而是所有“Oracle 认为 Linux 都该有”的假设,在 Ubuntu 上几乎都不成立。从 /sbin/chkconfig 到 /dev/shm,再到 init 脚本里每个路径硬编码,都得亲手掰正。漏掉任意一环,configure 就会静默失败或卡在端口绑定阶段。











