内容主要出处:
作者:狐狸Nomad https://www.bilibili.com/read/cv17670431 出处:bilibili
本转载已经过作者本人同意,原作者博文gitee同步地址:https://gitee.com/callmer/pve_toss_notes
以下是正文:
Proxmox,全称 Proxmox Virtual Environment,简称 PVE,是一个基于 Debian 的开源免费的 QEMU 虚拟机平台,对于机器配置较低,系统运行稳定。
之前配置ubuntu系统,然后安装虚拟机方案,后请教运维大佬。直接将proxmox当做系统盘安装即可。
官网下载https://www.proxmox.com/en/downloads/category/iso-images-pve
国内镜像http://mirrors.ustc.edu.cn/proxmox/iso/
然后通过UltralISO或者Rufus将ISO写入U盘,制作硬盘镜像。
开机选择从U盘启动进入系统安装
首先是一个使用许可说明。
同意后,选择系统安装磁盘位置后 Next 继续
选择所在地区 Next 继续
设置登陆密码和邮箱地址 Next 继续
设置主机名和IP地址后 Next 继续
再次确认配置,无误则点击 install 开始安装 Proxmox 系统
等待片刻后系统将完成安装,并且会自动重启
系统安装完重启后会显示PROXMOX系统的登陆地址,用户名root,用之前登陆的密码可以直接登陆系统。此时在同网段的PC上打开浏览器输入访问地址就可以进行配置虚拟机了。
注意必须使用https 访问,端口8006,用户名root 密码是之前设置的密码,语言可以选择 Chinese
比如我的地址是https://192.168.3.131:8006/
1.1.系统软件源替换
首先对现有的软件源配置进行备份:
进入系统软件源配置文件目录
cd /etc/apt
将默认软件源配置文件进行备份
cp sources.list sources.list.bak
这里我将使用中国科技大(USTC)的镜像仓库进行替换,使用如下命令:
注意:该命令为两行,在输入时请逐行输入并回车执行
替换系统软件仓库
- sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list
-
- sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
执行完成后,检查是否执行正确:
输出系统源配置文件,检查是否正确
cat /etc/apt/sources.list
如果输出结果中有 USTC 的镜像地址,则表示命令已经正确执行:
输出内容参考:
- deb https://mirrors.ustc.edu.cn/debian bullseye main contrib
-
- deb https://mirrors.ustc.edu.cn/debian bullseye-updates main contrib
-
- # security updates
- deb https://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib
此处放出 Debian Bullseye 的完整镜像源以供参考, 非常不建议 将 PVE 的系统源替换成完整的 Debian 源,以避免出现问题。
Debian Bullseye 完整源 (USTC)
- deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
- #deb-src https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free
-
- deb https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
- #deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-updates main contrib non-free
-
- deb https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
- #deb-src https://mirrors.ustc.edu.cn/debian/ bullseye-backports main contrib non-free
-
- deb https://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
- #deb-src https://mirrors.ustc.edu.cn/debian-security/ bullseye-security main contrib non-free
可以看到,PVE 的系统源和 Debian 完整源的差异在于 non-free 和 bullseye-backports 。
如果小伙伴在一些软件或者驱动(比如闭源 GPU 驱动)上遇到问题,可以尝试将 PVE 的系统源替换成 Debian 的完整源来尝试解决问题。
1.2.PVE 订阅源替换
默认情况下,PVE 启用了一个官方的源,而该源为订阅制收费,我们需要替换为免费的源。
进入订阅源的目录:
注意:rm 命令为高危险操作命令,请正确使用,请勿手抖,请勿手抖
进入订阅源目录
cd /etc/apt/sources.list.d
删除该目录下的所有配置
rm -rvf *.list
创建 PVE 免费源:
注意:该命令为两行,在输入时请逐行输入并回车执行
创建 PVE 免费源
source /etc/os-release
echo "deb https://mirrors.ustc.edu.cn/proxmox/debian/pve $VERSION_CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
创建完成后对其进行检查:
检查PVE免费源
cat /etc/apt/sources.list.d/pve-no-subscription.list
如果输出结果中有 USTC 的镜像地址,则表示命令已经正确执行:
输出内容参考:
deb https://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription
1.3.PVE CT Templates 替换
如果需要使用 Proxmox 网页端下载 CT Templates,可以替换 CT Templates 的源。
该功能我未使用,因此只做记录:
替换 CT Templates 源
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm.bak
sed -i 's|http://download.proxmox.com|https://mirrors.ustc.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
如果修改了 CT Templates 地址,需要重启 PVE 服务器才能生效。
1.4.替换后操作
更换完成系统源之后,需要更新系统源的同步:
清理
apt clean && apt autoclean
同步
apt update
2.安装必要软件
安装软件前,同样要让 PVE 能够访问外网。
同步镜像仓库
apt update
安装系统软件
apt install htop lm-sensors neofetch fail2ban vim tmux unattended-upgrades apt-listchanges powermgmt-base
安装网络工具
apt install iperf iperf3 iftop net-tools ethtool
安装CPU调度调整工具
apt install cpufrequtils
其中 fail2ban 和 unattended-upgrades 为两个服务,后续会对其进行配置。
cpufrequtils 为 CPU 调度器的配置工具,后续会对 CPU 调度算法进行调整。
3.配置 PVE 网桥和管理网口
设置电脑的 IP 地址为静态 IP ,IP 地址段与 PVE 的 IP 地址段保持一致。
因为连的路由器,会从最小的ip开始分配给连接到的设备,我的网段是192.168.3.1,所以会从192.168.3.2开始自动分配ip。
配置网络配置如下:
- PVE IP:192.168.3.131/24
-
- PVE 网关:192.168.3.1
-
- 子网掩码: 255.255.255.0
-
- PVE DNS:192.168.3.1
因为我的主板是双网口(2个物理网口),所以回旋线两个enpxxx,当前插的是enp5s0。
PVE系统调整
安装好 fail2ban 后,检查其服务状态:
检查 Fail2ban 系统服务状态
systemctl status fail2ban.service
在 Loaded 行,检查是否存在 enable :
参考输出
- root@bobokaka:~# systemctl status fail2ban.service
- ● fail2ban.service - Fail2Ban Service
- Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
- Active: active (running) since Sun 2022-11-20 23:45:51 CST; 20h ago
- Docs: man:fail2ban(1)
- Main PID: 47352 (fail2ban-server)
- Tasks: 5 (limit: 154498)
- Memory: 14.0M
- CPU: 15.049s
- CGroup: /system.slice/fail2ban.service
- └─47352 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
-
- Nov 20 23:45:51 bobokaka systemd[1]: Starting Fail2Ban Service...
- Nov 20 23:45:51 bobokaka systemd[1]: Started Fail2Ban Service.
- Nov 20 23:45:52 bobokaka fail2ban-server[47352]: Server ready
- root@bobokaka:~#
其中第1个 enable 表示当前服务开机自动启动,第2个 enable 表示该软件的默认启用状态。如果第1个不为 enable 状态,需要用以下命令进行调整:
## 开机自启 fail2ban 服务
systemctl enable fail2ban.service
## 参考输出
Synchronizing state of fail2ban.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable fail2ban
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /lib/systemd/system/fail2ban.service.
- 执行完成后,再次通过前面的命令检查服务自启状态。
-
- 后续如果想查看 Fail2ban 有关 sshd 的执行状态,可使用如下命令:
检查 sshd 的执行情况
fail2ban-client status sshd
参考输出
root@bobokaka:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| - File list: /var/log/auth.log
- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
root@bobokaka:~#
- 如果均为0,表示 PVE 系统没有 SSH 错误密码的尝试记录。
-
- #### 系统时区配置
- 如果在安装 PVE 系统时选错了时区,导致系统时间和北京时间不一致;
-
- 可以使用以下命令修正:
-
- ## 修改系统时区
timedatectl set-timezone Asia/Shanghai
- ## 检查系统时间
- date -R
-
- ## 参考输出
- Mon, 21 Nov 2022 20:32:28 +0800
- 输出结果如果和北京时间一致,则代表修改正确。
CPU调度器配置
安装好 cpufrequtils 后,先检查当前 CPU 的调度器:
检查 CPU 当前调度器
cpufreq-info
参考输出
- root@bobokaka:~# cpufreq-info
- cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
- Report errors and bugs to cpufreq@vger.kernel.org, please.
- analyzing CPU 0:
- driver: intel_cpufreq
- CPUs which run at the same hardware frequency: 0
- CPUs which need to have their frequency coordinated by software: 0
- maximum transition latency: 20.0 us.
- hardware limits: 1.20 GHz - 3.10 GHz
- available cpufreq governors: conservative, ondemand, userspace, powersave, performance, schedutil
- current policy: frequency should be within 1.20 GHz and 3.10 GHz.
- The governor "ondemand" may decide which speed to use
- within this range.
- current CPU frequency is 1.20 GHz.
- analyzing CPU 1:
- driver: intel_cpufreq
- CPUs which run at the same hardware frequency: 1
- CPUs which need to have their frequency coordinated by software: 1
- maximum transition latency: 20.0 us.
- hardware limits: 1.20 GHz - 3.10 GHz
- available cpufreq governors: conservative, ondemand, userspace, powersave, performance, schedutil
- current policy: frequency should be within 1.20 GHz and 3.10 GHz.
- The governor "ondemand" may decide which speed to use
- within this range.
- current CPU frequency is 1.20 GHz.
- analyzing CPU 2:
- driver: intel_cpufreq
- CPUs which run at the same hardware frequency: 2
- CPUs which need to have their frequency coordinated by software: 2
- maximum transition latency: 20.0 us.
- hardware limits: 1.20 GHz - 3.10 GHz
- available cpufreq governors: conservative, ondemand, userspace, powersave, performance, schedutil
- current policy: frequency should be within 1.20 GHz and 3.10 GHz.
- The governor "ondemand" may decide which speed to use
- within this range.
- current CPU frequency is 1.20 GHz.
- ......
- analyzing CPU 47:
- driver: intel_cpufreq
- CPUs which run at the same hardware frequency: 47
- CPUs which need to have their frequency coordinated by software: 47
- maximum transition latency: 20.0 us.
- hardware limits: 1.20 GHz - 3.10 GHz
- available cpufreq governors: conservative, ondemand, userspace, powersave, performance, schedutil
- current policy: frequency should be within 1.20 GHz and 3.10 GHz.
- The governor "ondemand" may decide which speed to use
- within this range.
- current CPU frequency is 1.20 GHz.
这里面主要关注两个点:
- driver: intel_cpufreq
-
- current policy: governor "ondemand"
- # 随需应变
当然,还有另外一个命令可以用来显示 CPU 调度器:
检查 CPU 当前调度器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
参考输出
ondemand
驱动一般不建议手动调整,而 governor "ondemand" 则显示了当前 CPU 的调度器是什么。
接下来,我们需要了解当前系统的 CPU 支持的调度器有哪些:
检查 CPU 调度器支持情况
- cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
-
- ## 参考输出
- conservative ondemand userspace powersave performance schedutil
这里有很多种调度器可供选择,具体什么优劣本人未知。
目前,CPU 普遍采用 schedutil 调度器(能量感知调度(EAS))。
能量感知调度(EAS)使调度程序能够预测其决策对 CPU 消耗的电量的影响。 EAS 依赖于 CPU 的能量模型 (EM) 来为每个任务选择省电的 CPU,同时要求对执行任务的吞吐量的影响最小。因此本教程以使用 schedutil 调度器为演示。
使用 vim 编辑器来编辑 cpufrequtils 的配置文件:
- ## 修改 cpufrequtils 配置文件
- vim /etc/init.d/cpufrequtils
-
- ## 找到 GOVERNOR="ondemand" 修改为以下内容
- GOVERNOR="schedutil"
- 按 i 键进入编辑模式,esc 键退出编辑模式,:wq 命令保存退出。
修改完成后,需要重新启动 PVE 服务器来使参数生效。
PVE 服务器重启完成后记得重新检查当前 CPU 的调度器,看配置文件是否生效。
这里提供两个命令,分别来实时查看当前 CPU 的频率和内部温度传感器的数值:
- ## 查看 CPU 当前频率
- watch cat /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_cur_freq
查看内部温度
watch sensors
PVE 定时重启配置
有时候我们需要让 PVE 服务器周期性的定时重启,则可使用以下命令:
- ## 编辑系统 crontab
- crontab -e
-
- ## 选择 nano 编辑器,粘贴以下内容并保存
- 30 4 1,16 * * /usr/sbin/reboot
- 这表示每月1、16号的4点30分执行系统重启命令。
-
-
- 可以使用以下命令来查看当前系统的计划任务:
-
- ## 显示系统 crontab
- crontab -l
nano编辑器使用:
- 保存对文件所做的更改,按Ctrl+o快捷键。
- 如果该文件尚不存在,则将在保存后立即创建该文件。
- 再按Ctrl+x退出。
-
- 如果你对未保存的文件按下Ctrl+x快捷键退出。
- nano将询问您是否要保存更改,Save modified buffer?。
-
- 按下Ctrl+y表示保存并退出nano编辑器,
- 按下Ctrl+n表示不保存并退出nano编辑器。
参考输出:
- root@bobokaka:~# crontab -l
- # Edit this file to introduce tasks to be run by cron.
- #
- # Each task to run has to be defined through a single line
- # indicating with different fields when the task will be run
- # and what command to run for the task
- #
- # To define the time you can provide concrete values for
- # minute (m), hour (h), day of month (dom), month (mon),
- # and day of week (dow) or use '*' in these fields (for 'any').
- #
- # Notice that tasks will be started based on the cron's system
- # daemon's notion of time and timezones.
- #
- # Output of the crontab jobs (including errors) is sent through
- # email to the user the crontab file belongs to (unless redirected).
- #
- # For example, you can run a backup of all your user accounts
- # at 5 a.m every week with:
- # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
- #
- # For more information see the manual pages of crontab(5) and cron(8)
- #
- # m h dom mon dow command
- 30 4 6,21 * * /usr/sbin/reboot
- root@bobokaka:~#
PVE系统自动更新
5.1.检查系统定时器
进行自动配置之前,先检查当前系统定时器状态:
- ## 检查系统定时器
- systemctl status apt-daily-upgrade.timer
-
- ## 示例输出
- root@bobokaka:~# systemctl status apt-daily-upgrade.timer
- ● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
- Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; vendor preset: enabled)
- Active: active (waiting) since Mon 2022-11-21 20:58:22 CST; 19min ago
- Trigger: Tue 2022-11-22 06:30:36 CST; 9h left
- Triggers: ● apt-daily-upgrade.service
-
- Nov 21 20:58:22 bobokaka systemd[1]: Started Daily apt upgrade and clean activities.
- root@bobokaka:~#
我们后续将手动调整该定时器的时间为,每10天的凌晨02:00进行触发。
5.2.配置自动更新策略
- ## 配置自动更新策略
- dpkg-reconfigure -plow unattended-upgrades
-
- ## 选择 “是” (“YES”)
- ## 示例输出
- Creating config file /etc/apt/apt.conf.d/20auto-upgrades with new version
执行
dpkg-reconfigure -plow unattended-upgrades
命令后,使用“左右”方向键进行选择,“回车”键进行确认。
- ──────────|配置无人值守升级├─────────────
- 经常进行更新是保证系统安全的重要组成部分。默认情况下,更新需要使用包管理手动应用具。或者,您可以选择让该系统自动下载和安装重要的更新。
- │自动下载和安装稳定的更新?
然后开始调整 apt 的 20auto-upgrades 配置文件:
- ## 进入 apt 的配置目录
- cd /etc/apt/apt.conf.d
编辑 20auto-upgrades 配置文件
vim 20auto-upgrades
原始内容如下:
删除里面全部内容并填写以下内容
- APT::Periodic::Update-Package-Lists "1";
- APT::Periodic::Unattended-Upgrade "10";
- APT::Periodic::AutocleanInterval "1";
- APT::Periodic::CleanInterval "1";
其中,用来控制 PVE 更新周期的为 APT::Periodic::Unattended-Upgrade 这行内容,其中的“10”表示更新周期为“10”天。
接下来调整 apt 的 50unattended-upgrades 配置文件,所有修改项目汇聚如下:
- ## 编辑 50unattended-upgrades 配置文件
- vim 50unattended-upgrades
-
- ## 取消了以下行前面的注释,代表启用
- "origin=Debian,codename=${distro_codename}-updates";
-
- ## 添加了 PVE 本身的更新项目
- "origin=Proxmox,codename=${distro_codename},label=Proxmox Debian Repository";
-
- ## 取消以下行的前面注释,代表启用,并调整参数
- Unattended-Upgrade::AutoFixInterruptedDpkg "true";
-
- Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
-
- Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
-
- Unattended-Upgrade::Remove-Unused-Dependencies "true";
-
- Unattended-Upgrade::Automatic-Reboot "true";
-
- Unattended-Upgrade::Automatic-Reboot-Time "04:30";
分别表示:
- 启用了 Debian bullseye-updates 相关更新。
-
- 增加并启用 PVE 自有仓库的更新,确保不会遗漏自有仓库的更新内容。
-
- 自动修复被打断的Dpkg安装。
-
- 自动移除无用的的内核包。
-
- 自动移除因更新而出现的无用依赖包。
-
- 自动移除以前的无用依赖包。
-
- 自动重启:开启。
-
- 自动重启时间:04:30。
esc 键退出编辑模式,:wq 命令保存退出
重设自动更新触发器
- ## 重设自动更新触发器时间为凌晨02:00
- root
-
-
- ## 根据文件中的提示,在中间空白处填入以下内容
- [Timer]
- OnCalendar=
- OnCalendar=02:00
- RandomizedDelaySec=0
ctrl+Y,保存,然后ctrl+X ,再按N退出。
设置完成后重启自动更新的触发器:
- ## 重启触发器
- systemctl restart apt-daily-upgrade.timer
-
- ## 再次检查触发器状态
- systemctl status apt-daily-upgrade.timer
-
- ## 参考输出
- root@bobokaka:/etc/systemd/system/apt-daily-upgrade.timer.d# systemctl status apt-daily-upgrade.timer
- ● apt-daily-upgrade.timer - Daily apt upgrade and clean activities
- Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.timer; enabled; vendor preset: enabled)
- Active: active (waiting) since Mon 2022-11-21 21:53:47 CST; 4s ago
- Trigger: Tue 2022-11-22 06:00:05 CST; 8h left
- Triggers: ● apt-daily-upgrade.service
-
- Nov 21 21:53:47 bobokaka systemd[1]: Stopped Daily apt upgrade and clean activities.
- Nov 21 21:53:47 bobokaka systemd[1]: Stopping Daily apt upgrade and clean activities.
- Nov 21 21:53:47 bobokaka systemd[1]: Started Daily apt upgrade and clean activities.
- root@bobokaka:/etc/systemd/system/apt-daily-upgrade.timer.d#
至此 PVE 的系统调整已经完成,重启设备后,可以愉快使用了。
开启ssh登录访问.
修改sshd_config配置
vim /etc/ssh/sshd_config
删掉Port前面的#,删掉PermitRootLogin前面的#,并将后面的值改为yes
- Port 22
- PermitRootLogin yes
- PasswordAuthentication yes
启动ssh服务
- /etc/init.d/ssh start
- #或
- service ssh start
重启ssh命令
systemctl restart ssh.service
参考输出
- root@bobokaka:~# /etc/init.d/ssh start
- Starting ssh (via systemctl): ssh.service.
- root@bobokaka:~#
验证ssh服务状态
/etc/init.d/sshd status
查看服务器端口
netstat -ntulp |grep 22
设置开机自启
update-rc.d ssh enable
内容主要出处:
作者:狐狸Nomad https://www.bilibili.com/read/cv17670431 出处:bilibili