Ubuntu 24.04 安装 Virtualmin 8.3.0 指南

Ubuntu 24.04.5 LTS 裸机安装 Virtualmin 8.3.0 GPL 全流程实测:官方 install.sh 四阶段安装、systemd/端口/包版本/check-config 体检、无官方容器化交付论证、建域 shop.example.com 端到端验证(34 秒)与 4 条安装排障实录(2026-11-03)

VirtualminVirtualminWebminUbuntuLinux建站服务器管理虚拟主机2026/11/03

Ubuntu 24.04 安装 Virtualmin 8.3.0 指南

目标:在一台干净的 Ubuntu 24.04.5 LTS 服务器(srv01.example.com)上,用官方 install.sh 脚本从零安装 Virtualmin 8.3.0(GPL),完成 Webmin/Usermin 服务托管、组件版本核验,并以创建 shop.example.com 虚拟主机端到端验证安装成果。本文全部命令与回显均在真实 Ubuntu 24.04 环境逐行实测(2026-11-03),含 4 条安装期排障实录。

一、环境信息

项目值
操作系统Ubuntu 24.04.5 LTS(Noble,x86_64)
主机名srv01.example.com
内存15 GiB(满足完整 LAMP+邮件栈要求)
安装目标Virtualmin GPL 8.3.0(webmin-virtual-server 8.3.0-1-gpl)
底层框架Webmin 2.670(authentic-theme 26.70)
管理端口10000/TCP(Webmin HTTPS)、20000/TCP(Usermin HTTPS)
业务端口80/TCP、443/TCP(Apache)
软件栈Apache 2.4.58、MariaDB 10.11.14、BIND 9.18.39、PHP 8.3.6(FPM)、Postfix、Dovecot、ProFTPD、SpamAssassin 4.0.0、ClamAV 1.5.4、Perl 5.38.2

系统事实回显(实测):

head -3 /etc/os-release
hostname -f
free -h
PRETTY_NAME="Ubuntu 24.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
srv01.example.com
               total        used        free      shared  buff/cache   available
Mem:            15Gi       6.1Gi       962Mi       182Mi       9.1Gi       9.5Gi
Swap:          4.0Gi         9Mi       4.0Gi

💡 说明:free -h 中 used 6.1Gi 为安装完成后的常驻占用(Apache/BIND/MariaDB/邮件栈等已全部拉起),空载安装阶段更低。Virtualmin 官方建议完整功能至少 2 GiB 内存,check-config 的机器可读结论见 4.4 节。

二、前置条件

安装前逐项确认以下条件,缺一项都可能在安装中途失败(对应排障见第九章):

  1. 干净的操作系统:Virtualmin 官方明确要求在未自行搭建过 Apache/MySQL/Postfix 的新系统上安装,脚本会接管并重写这些服务的配置。
  2. root 权限:安装脚本与后续 CLI 均以 root 运行。
  3. 主机名与解析:hostname -f 返回 FQDN(本文环境为 srv01.example.com),且 /etc/hosts 能自解析。
  4. 基础网络工具齐备:iproute2(ip 命令)、rsync、curl/wget。实测环境初始缺 iproute2,安装脚本在探测网卡阶段直接报错退出(见 9.2)。
  5. /tmp 可执行:安装过程会在 /tmp 解包并执行辅助程序,若 /tmp 挂载为 noexec 需先重挂(见 9.1)。
  6. apt 源可用:系统源可正常 apt update:
apt update 2>&1 | tail -3
Reading package lists...
Building dependency tree...
Reading state information...
All packages are up to date.
  1. 端口空闲:10000、20000、80、443 未被占用(安装前 ss -tlnp | grep -E ':(10000|20000)' 应无输出)。

三、版本选型说明

3.1 版本与发布节奏

Virtualmin 8.x 为当前大版本代际(安装脚本内以 vm_version=8 标识),官方 Release 时间线(实查 2026-11-03):

版本发布日期备注
8.0.0 / 8.0.12026-01-21第 8 代首发
8.1.02026-02-05安装脚本第 8 代流程更新
8.2.02026-03-01特性迭代
8.3.02026-09-01当前稳定版,本文安装目标

官方支持的操作系统矩阵:RHEL/AlmaLinux/Rocky 8/9/10、Debian 12/13、Ubuntu 22.04/24.04 LTS。本文选择 Ubuntu 24.04 LTS + 8.3.0 GPL 组合,是当前文档站覆盖的最新受支持基线。

3.2 安装入口的确认:/latest/install.sh 已废弃

官方脚本唯一有效入口是 https://software.virtualmin.com/gpl/scripts/install.sh。历史文档中出现过的 /latest/install.sh 路径现已需要下载账号鉴权,实测返回 401:

curl -sI https://software.virtualmin.com/gpl/scripts/install.sh | head -6
curl -sI https://software.virtualmin.com/latest/install.sh | head -3
HTTP/2 200
last-modified: Thu, 05 Feb 2026 22:00:38 GMT
etag: "1136d-64a1acd864d80"
accept-ranges: bytes
content-length: 70509
content-type: application/x-sh
HTTP/2 401
www-authenticate: Basic realm="Virtualmin Downloads"
last-modified: Sun, 26 Jan 2025 22:39:04 GMT

⚠️ 注意:GPL 路径返回 200、content-length: 70509 即脚本字节数,下载后可用 ls -l 核对;401 不代表脚本损坏,而是该路径已要求 Pro 订阅凭据,普通安装一律走 GPL 路径。

3.3 为什么没有容器化安装方案

选型阶段实查结论(2026-11-03):Virtualmin 官方不提供任何容器化交付形态——官方下载页只有「干净操作系统 + install.sh」一条路径,GitHub 组织 virtualmin 下无任何 docker 相关仓库;公共镜像仓库中标题含 virtualmin 的镜像全部为社区维护且长期停更(最新者停留在 2024 年,主流一个基于 2020 年停更的 CentOS 7 基底),与 8.3.0 支持的 OS 矩阵均不匹配。Virtualmin 需要接管 systemd 服务、BIND、Postfix、配额与防火墙等主机级能力,容器形态与其设计目标相悖。因此本组件只开发裸机安装路线,不出 Docker Compose 篇;需要容器化建站面板时,可考虑同类且官方支持容器部署的 Froxlor(见 《Froxlor 2.3.16 Docker Compose 部署指南》)。

四、在线安装方案(A:官方 install.sh)

本节为主路线:官方脚本一步装齐 Webmin + Virtualmin 模块 + LAMP 全家桶。

4.1 下载官方安装脚本

cd /root
wget https://software.virtualmin.com/gpl/scripts/install.sh
ls -l install.sh
-rw-r--r-- 1 root root 70509 Feb  5  2026 install.sh

脚本头部可确认版本标识与版权信息(实测 head -12 节选):

#!/bin/sh
# virtualmin-install.sh
# Copyright 2005-2026 The Virtualmin Developers
# Simple script to install Virtualmin on a supported OS

# Different installation guides are available at:
# https://www.virtualmin.com/docs/installation/guides

# License and version
SERIAL="${SERIAL:-GPL}"
KEY="${KEY:-GPL}"
grep -nE "^vm_version=" install.sh
14:vm_version=8

⚠️ 网络说明:software.virtualmin.com 为境外源,直连慢或失败时可走 HTTP 代理再下载。本环境实测 192.168.1.72:7897 代理可用(curl -x http://192.168.1.72:7897 -sI <URL> 返回 200),另一常见配置 192.168.1.62:7897 已失效(连接返回 000)。若走代理,wget -e https_proxy=http://192.168.1.72:7897 <URL> 即可,脚本内部后续 apt 阶段同样需要代理透传(export http_proxy/https_proxy)。

4.2 执行安装

脚本默认交互模式会先打印警告并要求输入 Continue? (y/n) 确认;无人值守/CI 场景用 --force 跳过(这也是本次实测采用的方式):

/bin/sh install.sh --force
echo "EXIT:$?"

安装按 4 个阶段推进,终端实时进度回显(实测):

▣◻◻◻ Phase 1 of 4: Check
▣▣◻◻ Phase 2 of 4: Setup
▣▣▣◻ Phase 3 of 4: Installation
▣▣▣▣ Phase 4 of 4: Configuration
[SUCCESS] Installation Complete!
[SUCCESS] If there were no errors above, Virtualmin is ready to be configured
EXIT:0

全程约 5 分钟。关键日志在 /var/webmin/vm-install.log,可核对配置时间线(实测节选):

[2026-11-03 02:40:59 UTC] [DEBUG] Configuring package manager for Ubuntu 24.04 ..
[2026-11-03 02:43:36] [INFO] - Configuring AWStats
[2026-11-03 02:43:37] [INFO] - Configuring Apache
[2026-11-03 02:43:47] [INFO] - Configuring Bind
[2026-11-03 02:43:47] [INFO] - Configuring ClamAV
[2026-11-03 02:44:16] [INFO] - Configuring Dovecot
[2026-11-03 02:44:16] [INFO] - Configuring Etckeeper
[2026-11-03 02:44:16] [INFO] - Configuring Nftables
[2026-11-03 02:44:18] [INFO] - Configuring Fail2ban
[2026-11-03 02:44:18] [INFO] - Configuring MariaDB
[2026-11-03 02:44:18] [INFO] - Configuring Postfix
[2026-11-03 02:44:29] [INFO] - Configuring ProFTPd
[2026-11-03 02:44:30] [INFO] - Configuring Procmail
[2026-11-03 02:44:30] [INFO] - Configuring Quotas
[2026-11-03 02:44:30] [INFO] - Configuring SASL
[2026-11-03 02:44:33] [INFO] - Configuring Virtualmin
[2026-11-03 02:44:36] [INFO] - Configuring SSL for the hostname
[2026-11-03 02:45:03] [INFO] - Configuring Shells
[2026-11-03 02:45:04] [INFO] - Configuring SpamAssassin
[2026-11-03 02:45:05] [INFO] - Configuring Usermin
[2026-11-03 02:45:06] [INFO] - Configuring Webmin
[2026-11-03 02:45:15 UTC] [SUCCESS] Installation Complete!
[2026-11-03 02:45:15 UTC] [SUCCESS] If there were no errors above, Virtualmin is ready to be configured
[2026-11-03 02:45:15 UTC] [SUCCESS] at https://srv01.example.com:10000 (or https://<服务器IP>:10000).
[2026-11-03 02:45:15 UTC] [WARNING] You will see a security warning in the browser on your first visit.

💡 说明:时间线中 Configuring Nftables 与 Configuring Fail2ban 表示脚本自动接管了防火墙与暴力破解防护;WARNING 行提示首访会出现自签证书告警,属预期行为。

4.3 服务托管与端口验证

安装脚本把 Webmin/Usermin 注册为 systemd 服务(实测):

systemctl is-active webmin
systemctl is-enabled webmin
systemctl is-active usermin
systemctl is-enabled usermin
active
enabled
active
enabled
systemctl status webmin --no-pager | head -10

输出节选(实测,隐去 cgroup 细节行):

● webmin.service - Webmin server daemon
     Loaded: loaded (/usr/lib/systemd/system/webmin.service; enabled; preset: enabled)
     Active: active (running) since Tue 2026-11-03 02:36:00 UTC; 22min ago
   Main PID: 4183 (perl)
      Tasks: 2 (limit: 2506)
     Memory: 112.2M (peak: 241.3M)
        CPU: 7.646s

💡 说明:Main PID: 4183 (perl) 印证了 Webmin 是 Perl 单进程模型(miniserv.pl),常驻内存约百 MB 量级,与托管站点数量基本无关。

监听端口核验(实测):

ss -tlnp | grep -E ":(10000|20000|80|443)\b" | head -5
LISTEN 0      511          0.0.0.0:80         0.0.0.0:*    users:(("apache2",pid=63311,fd=3),("apache2",pid=63310,fd=3),("apache2",pid=63309,fd=3),("apache2",pid=42295,fd=3))
LISTEN 0      511          0.0.0.0:443        0.0.0.0:*    users:(("apache2",pid=63311,fd=4),("apache2",pid=63310,fd=4),("apache2",pid=63309,fd=4),("apache2",pid=42295,fd=4))
LISTEN 0      4096         0.0.0.0:10000      0.0.0.0:*    users:(("perl",pid=4183,fd=5))
LISTEN 0      4096         0.0.0.0:20000      0.0.0.0:*    users:(("perl",pid=50996,fd=5))
LISTEN 0      4096            [::]:10000         [::]:*    users:(("perl",pid=4183,fd=6))

本机 HTTPS 连通性核验(实测):

curl -sk https://localhost:10000 -o /dev/null -w "code:%{http_code}\n"
curl -sk https://localhost:10000 | grep -o "<title>[^<]*</title>"
curl -sk https://localhost:20000 -o /dev/null -w "code:%{http_code}\n"
code:200
<title>Login to Webmin</title>
code:200

4.4 包版本与配置体检

已安装的 Virtualmin 核心包版本(实测):

dpkg-query -W -f='${Package} ${Version}\n' \
  virtualmin-config virtualmin-core virtualmin-lamp-stack webmin webmin-virtual-server
virtualmin-config 8.3.0-1
virtualmin-core 8.2.0-1
virtualmin-lamp-stack 8.2.0-1
webmin 2.670
webmin-virtual-server 8.3.0-1-gpl
apt policy webmin-virtual-server | head -12
webmin-virtual-server:
  Installed: 8.3.0-1-gpl
  Candidate: 8.3.0-1-gpl
  Version table:
     8.3.0-1-pro 500
        500 https://download.virtualmin.com virtualmin/main amd64 Packages
        500 https://download.virtualmin.com virtualmin/main all Packages
 *** 8.3.0-1-gpl 1001
        500 https://download.virtualmin.com virtualmin/main amd64 Packages
        500 https://download.virtualmin.com virtualmin/main all Packages
        100 /var/lib/dpkg/status

💡 说明:8.3.0-1-pro(优先级 500)与 8.3.0-1-gpl(优先级 1001)并存是官方仓库的正常形态——GPL 与 Pro 共用同一 virtualmin/main 仓库,脚本通过优先级钉住 GPL 包;无 Pro 订阅时不要手动 apt install webmin-virtual-server=8.3.0-1-pro,否则会触发许可切换提示。

跑一遍 Virtualmin 自带的配置体检:

virtualmin check-config

输出节选(实测首尾):

Your system has 15.56 GiB of memory, which is at or above the Virtualmin recommended minimum of 256 MiB

BIND DNS server is installed

Mail server Postfix is installed and configured

Postfix is configured to support per-domain outgoing IP addresses

Apache is installed

Apache supports HTTP/2 on your system

The following CGI script execution modes are available : suexec fcgiwrap

The following PHP execution modes are available : fpm fcgid cgi

The following PHP versions are available : 8.3.6 (/bin/php-cgi8.3)

The following PHP-FPM versions are available : 8.3.6 (php8.3-fpm)

The following PHP-FPM workload profile is selected: balanced

Apache is configured to host SSL websites

MariaDB 10.11.14 is installed and running, using Unix socket authentication

Logrotate is installed

SpamAssassin and Procmail are installed and configured for use

体检结论逐项对应第二章前置条件与第三章软件栈,全部通过。fail2ban 防护核验(实测):

fail2ban-client status | head -3
Status
|- Number of jail:      7
`- Jail list:   dovecot, postfix, postfix-sasl, proftpd, sshd, usermin-auth, webmin-auth

💡 说明:安装脚本默认配好 7 个 jail,其中 webmin-auth/usermin-auth 专门保护 10000/20000 管理端口防爆破,与 miniserv.conf 中 blockhost_failures=5、blockhost_time=60 的内置封禁(见配置篇)形成双层防护。

五、备用方案(B:官方 apt 仓库直接安装/升级)

install.sh 的本质是「配置官方仓库 → apt 安装 → 逐组件配置」三段式。仓库就位后,日常升级、切换发布分支可以完全走 apt/CLI,不必重跑脚本。

5.1 仓库与分支管理

安装后系统内已存在 https://download.virtualmin.com virtualmin/main 源(4.4 节 apt policy 回显已证)。官方提供 CLI 管理仓库分支:

virtualmin configure-repos --help
See `virtualmin help configure-repos` for more details and examples

Configure Virtualmin repositories.

virtualmin configure-repos [--branch <stable|prerelease|unstable>]
                           [--serial number] [--key id] [--no-check]

💡 说明:--branch stable 为默认订阅分支;prerelease/unstable 可提前拿到候选版本;带 --serial/--key 则把源切到 Pro 私有仓库。GPL 用户保持默认即可。

5.2 升级操作

apt update
apt -y upgrade   # 或 apt -y install webmin-virtual-server 定向升级
systemctl restart webmin usermin

本次环境实测 apt update 返回 All packages are up to date.(第二章回显),即 8.3.0 已是仓库 stable 最新;升级后建议重跑 virtualmin check-config 与 virtualmin validate-domains --all-domains --all-features 复核。

5.3 方案 A/B 对比与选择建议

维度方案 A:install.sh方案 B:apt 仓库
适用场景全新服务器首次安装已装环境的升级/分支切换
是否需联网是(境外源,必要时走代理)是(同一仓库)
覆盖范围仓库配置+全栈安装+逐组件配置包体升级,配置阶段已在首装完成
systemd 服务脚本注册 webmin/usermin包内自带,不变
失败面阶段多、需看 vm-install.log常规 apt 事务,易回滚

建议:首装必用方案 A(方案 B 无法独立完成「逐组件配置」段);此后一切版本动作走方案 B。不存在官方容器化方案(见 3.3),请勿以社区停更镜像替代。

六、首次登录与初始化

浏览器访问 https://srv01.example.com:10000(自签证书告警点继续),用系统 root 账号登录(本演示环境口令 q1w2e3r4),登录后自动进入 Post-Installation Wizard,向导会检查骨架站点、MySQL 策略、DNS 转发等项并给出修复建议。

不方便开浏览器时,可用 CLI 生成一次性登录链接(实测):

virtualmin create-login-link --domain shop.example.com
https://shop.example.com:10000/session_login.cgi?session=cc42595ba1b3dc2738d0da727bb76ca9

⚠️ 注意:该链接免密直达控制台,session 有时效,仅当次运维使用,不要写入脚本日志或聊天工具。

七、建域端到端验证安装成果

安装是否真正可用,以「创建一台完整虚拟主机」为准。执行(实测):

time virtualmin create-domain --domain shop.example.com --pass q1w2e3r4 \
  --desc "Shop 演示站" --email webmaster@shop.example.com \
  --unix --dir --web --dns --mysql --webmin --limits-from-plan

输出节选(实测首尾,中间每个特性均为 .. done 逐行推进):

Beginning server creation ..

Saving server details ..
.. done

Creating administration group shop ..
.. done

Creating home directory ..
.. done

Adding new DNS zone ..
.. done

Adding new virtual website ..
.. done

Creating SSL certificate and private key ..
.. done

Creating MariaDB database shop ..
.. done

Restarting PHP-FPM 8.3 server ..
.. done

Restarting mail server ..
.. done

All done!

real    0m34.198s
user    0m2.681s
sys     0m1.336s

一条命令 34 秒内完成了 Unix 用户/组、家目录、邮箱、DNS 区域、Apache vhost(含 SSL 证书)、MariaDB 库、Webmin 授权账号、PHP-FPM 池、邮件域切换共十余项手工配置。逐项验证:

virtualmin list-domains
Domain                         Username        Description
------------------------------ --------------- ------------------------------
shop.example.com               shop            Shop 演示站
virtualmin get-dns --domain shop.example.com
Record                         Type  Value
------------------------------ ----- ----------------------------------------
shop.example.com.              SOA   srv01.example.com. root.srv01.example.co
shop.example.com.              NS    srv01.example.com.
shop.example.com.              A     182.54.113.29
www                            A     182.54.113.29
webmail                        A     182.54.113.29
admin                          A     182.54.113.29
shop.example.com.              SPF   v=spf1 a mx a:shop.example.com ip4:10.89…

💡 技术拓展:建域自动生成的这四类 DNS 记录各自职责——

记录作用缺失后果
SOA区域权威起点(主 DNS、序列号、刷新参数)区域不被授权
NS声明该域由哪台 DNS 托管无法委派查询
A域名→IPv4 地址网站/邮件不可达
SPF(TXT)声明合法发信主机外发邮件易判为垃圾

本方案四条全部由 --dns 特性自动生成,DKIM 则随邮件特性另行生成 TXT 记录。

站点目录骨架(实测 ls -la /home/shop 节选):

drwx------  8 shop shop 4096 Nov  3 02:47 Maildir
drwxr-x---  2 shop shop 4096 Nov  3 02:47 cgi-bin
drwxr-x---  2 shop shop 4096 Nov  3 02:48 public_html
drwx------  2 shop shop 4096 Nov  3 02:47 virtualmin-backup

Apache 为该域生成的 vhost 关键行(实测 virtualmin get-apache-config --domain shop.example.com 节选):

<VirtualHost *:80>
    SuexecUserGroup #1002 #1002
    ServerName shop.example.com
    DocumentRoot /home/shop/public_html
    ...
    RewriteCond %{HTTP_HOST} =webmail.shop.example.com
    RewriteRule ^/(?!\.well-known)(.*)$ https://shop.example.com:20000/ [R=301,L]
    RewriteCond %{HTTP_HOST} =admin.shop.example.com
    RewriteRule ^/(?!\.well-known)(.*)$ https://shop.example.com:10000/ [R=301,L]
    <FilesMatch \.php$>
        SetHandler proxy:unix:/run/php/179367404951356.sock|fcgi://127.0.0.1
    </FilesMatch>
</VirtualHost>

💡 说明:SuexecUserGroup #1002 让 PHP/CGI 以域属主身份运行(跨站隔离);webmail 子域 301 重写指向 Usermin 20000、admin 子域指向 Webmin 10000;.php 走本域专属 PHP-FPM Unix socket——三行配置分别对应「隔离、入口、运行时」,是 Virtualmin web 特性的标准形态。

HTTP/HTTPS 双栈连通验证(实测,带 Host 头直连本机):

curl -s -o /dev/null -w "%{http_code}\n" -H "Host: shop.example.com" http://localhost/
curl -sk -o /dev/null -w "%{http_code}\n" -H "Host: shop.example.com" https://localhost/
200
200

DNS 解析验证(实测):

dig +short shop.example.com @127.0.0.1
182.54.113.29

⚠️ 注意:A 记录指向 182.54.113.29 而非本机内网地址,是因为 post-install 阶段脚本探测并缓存了服务器公网出口 IP(/etc/webmin/virtual-server/config 中 external_ip_cache=182.54.113.29),建域时 DNS 特性默认取该公网地址。域名正式对外解析前,应确认此值与实际公网 IP 一致,或在模板中改为指定地址(配置篇有对应键位说明)。

八、配置说明

安装落地的核心配置文件与行数(实测 wc -l):

wc -l /etc/webmin/config /etc/webmin/miniserv.conf \
      /etc/webmin/virtual-server/config \
      /etc/webmin/virtual-server/domains/179367404951356
   35 /etc/webmin/config
   59 /etc/webmin/miniserv.conf
  484 /etc/webmin/virtual-server/config
  191 /etc/webmin/virtual-server/domains/179367404951356
文件职责关键项示例
/etc/webmin/configWebmin 框架全局real_os_version=24.04.5、theme=authentic-theme
/etc/webmin/miniserv.conf10000 端口 Web 服务port=10000、ssl=1、blockhost_failures=5
/etc/webmin/virtual-server/configVirtualmin 全局策略(484 键)mem_low=256、auto_letsencrypt=1、defuquota=2097152
/etc/webmin/virtual-server/domains/<ID>每域一文件(191 键)ip、dns_ip、uquota、web_sslport=443

以上文件的逐参数详解见 《Virtualmin 8.3.0 配置参数详解》。

九、常见问题(FAQ)

以下 4 条为本次安装过程真实踩坑并逐一解决的记录,遇到同样报错可直接照做。

Q1:安装中途报 /tmp 相关执行错误,辅助脚本无法运行

  • 现象:脚本在 Setup 阶段失败,提示类似 Permission denied 的执行错误,检查发现 /tmp 挂载带 noexec。
  • 定位:mount | grep ' /tmp ' 可见 noexec 选项(部分加固镜像默认如此)。
  • 解决:临时重挂为可执行后重跑安装:
mount -o remount,exec /tmp
/bin/sh install.sh --force

Q2:Check 阶段直接退出,提示无法确定网卡 IP

  • 现象:Unable to determine IP address of selected interface. Cannot continue.
  • 定位:脚本用 ip 命令探测默认网卡,最小化安装的 Ubuntu 云镜像可能缺 iproute2(which ip 为空)。
  • 解决:
apt -y install iproute2
/bin/sh install.sh --force

Q3:Installation 阶段 rsync 相关 deb 安装报 rename failed, No such file or directory

  • 现象:apt 下载包正常,但解包阶段报 rename failed, No such file or directory。
  • 定位:apt 缓存目录缺 partial 子目录,rsync 取包时目标路径不存在。
  • 解决:
mkdir -p /var/cache/apt/archives/partial
chmod 1777 /var/cache/apt/archives/partial
apt -y install rsync
/bin/sh install.sh --force

Q4:脚本卡在交互确认,无法无人值守执行

  • 现象:安装前要求输入 Continue? (y/n),CI/批量场景阻塞。
  • 解决:加 --force 跳过确认(本文主线即此方式);预发布环境还可加 --minimal 跳过 ClamAV 等重型组件缩短时间。

其余高频疑问:

Q5:apt policy 里为什么同时出现 -pro 版本? 见 4.4 节说明,属仓库正常形态,GPL 优先级 1001 已钉住,勿手动安装 pro 包。

Q6:virtualmin list-server-statuses 显示 ClamAV Down? 病毒扫描服务按需启动(邮件到达时才拉起),空闲期 Down 属预期;若需常驻可 systemctl enable clamav-daemon。

Q7:首访浏览器告警自签证书? 预期行为(安装日志 WARNING 行已提示);跑完 Post-Installation Wizard 并对域名启用 Let's Encrypt(auto_letsencrypt=1 默认开)后即消除。

十、卸载与清理

Virtualmin 无一键卸载命令,正确顺序是「先删业务、再停服务、后清包」:

  1. 删除全部虚拟主机(先备份,备份命令见 《Virtualmin 8.3.0 常用 CLI 命令与工具详解》)。实测删除闭环:
virtualmin delete-domain --domain shop.example.com
.. deleted
virtualmin list-domains
ls /home
Domain                         Username        Description
------------------------------ --------------- ------------------------------
ubuntu
  1. 停掉管理面服务:
systemctl stop webmin
systemctl stop usermin
  1. 移除软件包与仓库(标准 apt 操作,按需执行):
apt purge -y virtualmin-config virtualmin-core virtualmin-lamp-stack webmin webmin-virtual-server
rm -f /etc/apt/sources.list.d/virtualmin.list

⚠️ 注意:purge 不会自动恢复被接管的 Apache/BIND/Postfix 原生配置,生产机卸载后应逐服务复核 /etc/apache2、/etc/bind、/etc/postfix;最稳妥的「卸载」其实是重装干净系统。

十一、参考链接