Slackware 15 上安装 VMware Workstation:解决 init 系统不兼容的完整指南

Slackware 15 上安装 VMware Workstation:解决 init 系统不兼容的完整指南

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度

如果你在 Slackware 15 上尝试直接运行 VMware Workstation 的安装脚本,大概率会卡在第一个问题:“你的系统似乎没有使用 System V 风格的 init 脚本目录,这可能导致安装失败。” 然后脚本会建议你退出。这不是一个错误,而是一个设计上的“不兼容”——Slackware 坚持使用 BSD 风格的 init 系统,而 VMware 的安装脚本是为更主流的 System V 风格(或其现代变体如 systemd)准备的。

这种“不兼容”恰恰是 Slackware 的魅力所在,也是其用户群体坚守的原因:它不迎合潮流,坚持自己的哲学。但这也意味着,当你想在这个纯粹、稳定的系统上运行一个强大的商业级虚拟化工具时,你需要扮演一个“翻译官”的角色,在两种不同的系统哲学之间搭建一座桥梁。这个过程,远比在 Ubuntu 或 Fedora 上点几下鼠标要深刻得多。它迫使你去理解 init 系统如何工作、内核模块如何编译、权限如何管理,而不仅仅是“安装一个软件”。

所以,在 Slackware 15 上运行 VMware,真正的价值不在于“能用”,而在于“知其所以然”。这是一次深入理解 Linux 系统底层运作的绝佳实践。下面,我将带你走过这条从“不兼容”到“完美运行”的路径,并解释每一个关键步骤背后的原因。

1. 理解冲突核心:System V init 与 BSD init 的哲学差异

在开始动手之前,我们必须先搞清楚为什么 VMware 的安装脚本会“抱怨”。这不是 bug,而是两种不同系统管理理念的碰撞。

1.1 System V init:基于运行级别的服务管理

主流的 Linux 发行版(如 RHEL、Debian、Ubuntu 等)历史上长期使用 System V init 系统。它的核心特征包括:

  • 运行级别(Runlevel):定义了系统处于不同状态时应该运行哪些服务,例如级别 3 为多用户文本模式,级别 5 为图形界面。
  • 目录结构:在/etc目录下,存在rc0.drc6.d等目录,分别对应各个运行级别。此外,还有一个/etc/init.d目录,存放所有服务的启动/停止脚本。
  • 符号链接管理rcN.d目录中的文件实际上是链接到/etc/init.d中具体脚本的符号链接。以S开头的链接表示启动(Start),以K开头的表示停止(Kill),后面的数字决定启动/停止顺序。

VMware 安装脚本vmware-install.pl就是为这种环境编写的。它期望找到/etc/init.d/etc/rc[0-6].d目录,以便将vmware服务脚本安装到正确的位置,并创建相应的SK链接,确保系统启动、关闭或切换运行级别时,VMware 的相关服务(如虚拟网络vmnet、内核模块vmmon)能被正确管理。

1.2 Slackware 的 BSD 风格 init:简洁与直接

Slackware 则继承了 BSD 系统的简洁哲学。它的 init 系统要直接得多:

  • 无运行级别概念:Slackware 的 init 主要读取/etc/inittab文件,决定默认的运行模式(通常是 3 或 4)。
  • 简单的脚本目录:所有系统服务的启动脚本都直接放在/etc/rc.d/目录下,并以rc.为前缀,例如rc.inet1(网络)、rc.sshd(SSH 服务)。
  • 执行顺序:启动时,/etc/rc.d/rc.S脚本会按特定顺序执行/etc/rc.d/目录下所有可执行的rc.*脚本。关闭时,由rc.6(重启)或rc.0(关机)脚本负责清理。

Slackware 没有rc0.drc6.d这些目录,/etc/init.d通常也不存在。因此,当 VMware 安装脚本检测不到这些目录时,它会认为当前系统不兼容,从而建议退出。

我们的核心策略:不是改变 Slackware,而是“欺骗” VMware 安装脚本,让它以为身处一个 System V 环境,完成安装和模块编译。安装完成后,我们再将其服务脚本“翻译”并集成到 Slackware 原生的启动机制中。

2. 搭建“临时舞台”:满足安装脚本的预期

既然脚本需要那些目录,我们就临时创建它们。这是一个权宜之计,只为让安装流程走下去。

# 切换到 root 用户或使用 sudo su - # 进入 /etc 目录 cd /etc # 创建 System V init 脚本所需的目录结构 mkdir init.d for i in {0..6}; do mkdir rc$i.d; done

为什么是这几个目录?init.d是服务脚本的家,rc0.d-rc6.d是各个运行级别的链接目录。创建它们只是满足了脚本对路径存在性的检查,并不会对 Slackware 原有的启动流程产生任何影响,因为我们后续会清理掉。

3. 执行安装与核心模块编译

在开始安装前,请确保你已经从 VMware 官网下载了适用于 Linux 的 VMware Workstation Pro 的.bundle安装包(例如VMware-Workstation-Full-17.5.0-XXXXXXX.x86_64.bundle),并赋予其执行权限。

# 假设安装包在用户主目录 chmod +x ~/VMware-Workstation-Full-*.bundle # 执行安装 sudo ./VMware-Workstation-Full-*.bundle

安装程序会启动一个图形化或文本界面向导。按照提示接受许可协议、选择安装目录(通常为/usr/lib/vmware)等。

关键步骤出现在安装后的配置阶段。安装程序会调用vmware-config.pl(或类似脚本)来编译和安装内核模块。这里有一个至关重要的细节:

必须使用--compile参数来强制重新编译内核模块。

为什么?因为 VMware 安装包内可能包含了针对某些通用内核的预编译模块。Slackware 使用的内核版本和配置很可能与这些预编译模块不兼容。直接使用预编译模块可能导致虚拟机启动时出现段错误(segmentation fault)或内核恐慌(kernel panic)。--compile参数会确保针对你当前运行的内核头文件重新编译模块,这是保证稳定性的关键。

如果安装程序没有自动弹出配置,或者你更喜欢手动控制,可以在安装完成后手动运行:

cd /usr/lib/vmware/bin sudo ./vmware-config.pl --compile

在配置过程中,脚本会询问一系列问题,例如:

  • 网络配置:是否配置桥接网络、NAT、仅主机网络?对于大多数桌面使用场景,选择“桥接网络”(bridged networking)即可,这样虚拟机可以获得和宿主机同网段的 IP。
  • Samba 和 DHCP:是否要安装 VMware 自带的简化版 Samba 和 DHCP 服务器?如果你宿主机已经有完善的网络服务(如dhcpcd,dhclient,NetworkManager),通常不需要。但如果你希望虚拟机使用 VMware 内置的 NAT 网络并自动获取 IP,则需要配置其 DHCP。
  • 配置文件路径:接受默认路径即可。

请仔细阅读每个问题,并根据你的网络环境做出选择。如果不确定,可以先接受默认值,后续可以在 VMware 的虚拟网络编辑器(vmware-netcfg)中调整。

4. 回归 Slackware:将服务集成到原生体系

安装脚本成功运行后,VMware 的服务管理脚本(通常叫vmware)已经被安装到了/etc/init.d/目录下。现在,我们需要把它“迁移”到 Slackware 的地盘。

4.1 移动并重命名服务脚本

# 将脚本移动到 Slackware 的服务目录并重命名 cp /etc/init.d/vmware /etc/rc.d/rc.vmware chmod +x /etc/rc.d/rc.vmware

这个rc.vmware脚本现在可以像 Slackware 的其他服务脚本一样,接受startstoprestart参数。

4.2 设置开机自启

为了让 VMware 服务在系统启动时自动运行,我们需要编辑 Slackware 的主启动脚本/etc/rc.d/rc.local。这个脚本在所有其他系统服务启动后执行,非常适合用来启动像 VMware 这样的“附加”服务。

使用文本编辑器(如vinano)打开/etc/rc.d/rc.local

sudo vi /etc/rc.d/rc.local

在文件末尾添加以下内容:

# Start VMware services if [ -x /etc/rc.d/rc.vmware ]; then echo "Starting VMware services..." /etc/rc.d/rc.vmware start fi

保存并退出。这样,每次系统启动时,都会检查rc.vmware脚本是否存在且可执行,然后启动 VMware 的核心服务(如vmnet,vmmon)。

4.3 清理临时目录

既然 VMware 已经安装配置好,并且服务脚本也已就位,那些临时创建的 System V 目录就可以清除了。

rm -rf /etc/init.d for i in {0..6}; do rm -rf /etc/rc$i.d; done

至此,VMware 已经成功地“落户” Slackware,并遵循了后者的启动规则。

5. 权限与用户组管理(可选但推荐)

VMware 的主程序vmware通常需要以 root 权限运行来操作内核模块和网络设备。为了安全起见,我们可以创建一个专门的用户组(如vmware),只允许该组的成员运行 VMware。

# 创建 vmware 用户组 sudo groupadd vmware # 将你的用户名添加到 vmware 组 sudo usermod -aG vmware your_username # 更改 VMware 二进制文件的权限和属组 # 假设 VMware 安装在 /usr/lib/vmware/bin/vmware sudo chgrp vmware /usr/lib/vmware/bin/vmware sudo chmod 750 /usr/lib/vmware/bin/vmware # 如果需要 setuid root(某些功能需要) sudo chmod u+s /usr/lib/vmware/bin/vmware # 创建一个共享的虚拟机存放目录 sudo mkdir /usr/local/vmware sudo chgrp vmware /usr/local/vmware sudo chmod 770 /usr/local/vmware

注意:修改用户组后,你需要注销并重新登录,新的组权限才会生效。

6. 后续维护与内核升级

Slackware 以稳定著称,但内核安全更新或你自己编译新内核时,就会遇到一个问题:VMware 的内核模块是针对特定内核版本编译的。内核升级后,这些模块将无法加载。

解决方案:每次内核升级后,都需要重新编译 VMware 内核模块。

  1. 临时重建 System V 目录(因为vmware-config.pl脚本仍然需要它们):
    cd /etc mkdir init.d rc3.d rc6.d cp /etc/rc.d/rc.vmware /etc/init.d/vmware ln -s /etc/init.d/vmware /etc/rc3.d/S90vmware ln -s /etc/init.d/vmware /etc/rc6.d/K65vmware
  2. 重新配置并编译模块
    cd /usr/lib/vmware/bin sudo ./vmware-config.pl --compile
    脚本会检测到模块不匹配,并引导你重新编译。过程中关于网络、Samba 的配置问题,通常直接按回车接受之前的设置即可。
  3. 清理临时目录并重启服务
    rm -rf /etc/init.d /etc/rc3.d /etc/rc6.d sudo /etc/rc.d/rc.vmware stop sudo /etc/rc.d/rc.vmware start
  4. 更新模块依赖(可选但推荐):
    sudo depmod -a

7. 可能遇到的问题与排查

即使按照上述步骤操作,你仍可能遇到一些问题。以下是常见的排查思路:

  • 问题:启动虚拟机时提示“未能启动虚拟机”或内核模块加载失败。

    • 排查:首先检查 VMware 服务是否正常运行:sudo /etc/rc.d/rc.vmware status(如果脚本支持)或ps aux | grep vmware查看相关进程。最可能的原因是内核模块未正确编译。重新执行第6步的模块编译流程。使用lsmod | grep vm检查vmmonvmnet模块是否加载。
  • 问题:虚拟机无法上网(桥接模式)。

    • 排查:1) 确认宿主机网络正常。2) 在 VMware 的“虚拟网络编辑器”(以 root 运行vmware-netcfg)中,检查桥接模式是否绑定到了正确的物理网卡(如eth0,wlan0)。3) 检查虚拟机内网卡是否设置为“桥接模式”并已连接。4) 检查宿主机防火墙是否阻止了桥接流量。
  • 问题:VMware 启动缓慢或提示与 XFS 文件系统相关的警告。

    • 解决:如果你使用 XFS 文件系统,需要在 VMware 的全局配置文件中添加一行。编辑/etc/vmware/config,在末尾添加:
      host.FSSupportLocking1 = 0x58465342
      这个值(0x58465342)是“XFSB”的十六进制表示,用于告知 VMware 支持 XFS 的文件锁。
  • 问题:普通用户无法启动 VMware 图形界面。

    • 排查:1) 确认该用户是否在vmware组中(如果设置了组)。2) 检查/usr/lib/vmware/bin/vmware文件的权限是否为-rwsr-x---(2750),属主 root,属组 vmware。3) 尝试用strace或查看~/.vmware/log下的日志文件获取更详细的错误信息。

在 Slackware 15 上成功运行 VMware,更像完成了一次优雅的系统集成手术。你没有被系统限制困住,而是通过理解其内在逻辑,将一个外部工具无缝地编织进了 Slackware 简洁而坚固的架构中。这个过程带给你的,远不止一个可用的虚拟机软件,而是一种在任何“非标准”环境下都能解决问题的系统级思维和能力。当你的虚拟机在 Slackware 上平稳运行时,你获得的是一种对 Linux 系统更深层次的掌控感。这,或许才是 Slackware 用户追求的真正乐趣。

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度