为什么这样做最“优雅”?
- ncurses-term:解决了按键识别问题(Unknown sequence)。
- locales:解决了字符编码问题(中文显示)。
- etc/environment:通过修改系统环境配置文件,确保不管是
pct enter还是 SSH 登录,中文都能正常显示,且不会因为反复修改.bashrc导致文件杂乱。
一个小提醒: 如果你在使用 Ghostty 这种现代终端,由于它支持非常先进的转义协议,如果 ncurses-term 安装后依然有小概率报错,请在 Ghostty 配置中将 term 设置为 xterm-256color 再进入容器。
你可以直接在容器内新建一个文件(例如 prep_template.sh),将以下代码粘贴进去并运行。它一次性解决了按键报错、中文显示、系统痕迹清理这三大问题,运行完即可直接去 PVE 宿主机转换模版。
第一步:容器内执行“全能初始化”脚本
Bash
#!/bin/bash
# LXC 模版全能初始化脚本 (支持 Debian/Ubuntu)
set -e
echo "1. [环境修复] 解决 nano 'Unknown sequence' 并安装常用工具..."
apt update
apt install -y ncurses-term curl wget nano sudo
echo "2. [语言配置] 开启中文支持 (zh_CN.UTF-8)..."
apt install -y locales
sed -i '/zh_CN.UTF-8 UTF-8/s/^# //g' /etc/locale.gen
locale-gen
# 写入全局环境变量,确保所有登录方式都生效
cat <<EOF > /etc/default/locale
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
LC_ALL="zh_CN.UTF-8"
EOF
echo "3. [深度清理] 抹除操作痕迹..."
# 清理包管理器缓存
apt-get autoremove -y
apt-get clean
rm -rf /var/lib/apt/lists/*
# 清理日志文件(保留结构,清空内容)
find /var/log -type f -exec truncate -s 0 {} \;
# 清理 Machine ID (防止克隆后 IP 冲突/ID 重复)
truncate -s 0 /etc/machine-id
[ -f /var/lib/dbus/machine-id ] && rm -f /var/lib/dbus/machine-id && ln -s /etc/machine-id /var/lib/dbus/machine-id
# 清理临时文件和历史记录
rm -rf /tmp/* /var/tmp/*
history -c
rm -f ~/.bash_history
echo "------------------------------------------------"
echo "✅ 容器预处理完成!"
echo "请在 PVE 宿主机执行: pct stop $HOSTNAME && pct template $HOSTNAME"
echo "------------------------------------------------"第二步:PVE 宿主机完成转换
在 PVE 的 Web 终端(或通过 SSH 登录 PVE)执行:
Bash
# 假设你的容器 ID 是 100
pct stop 100
pct template 100💡 为什么这个版本更“优雅”?
- 全局生效:通过修改
/etc/default/locale而不是用户级的.bashrc,保证了无论是通过pct enter还是 SSH 登录,甚至是以后的新用户,默认都是中文环境。 - 兼容性:加入了
ncurses-term后,即使你以后从 Ghostty 或其他现代终端连接,nano和htop的功能键也能完美映射。 - 唯一性:重置
machine-id是制作模版的“灵魂”步骤,它确保了每个从模版克隆出来的容器都能获得独立的 DHCP 租约。