下载所需文件
Ubuntu Desktop的ISO镜像(开始操作之前下载好)
创建虚拟机
注意:接下来的每一步都严格按照顺序进行,否则有可能安装失败,如果安装失败,删除虚拟机重新安装
上传镜像
登陆到PVE管理界面 ——> local ——> ISO镜像 ——> 上传——> Ubuntu Desktop的ISO镜像、Virtio驱动ISO镜像
创建虚拟机
添加SRIOV核显
硬件 ——> 添加 ——> PCI设备 ——> 原始设备 ——> 选择没有被占用的核显 ——> ✅主GPU ——> ✅PCI-Express
硬件——> 显示 ——> VirtIO-GPU
ubuntu server安装
Ubuntu虚拟机 ——> 控制台 ——> Start Now
一、 Try or Install Ubuntu Server 【回车】
二、 English 【回车】
三、 English(US)|English(US) 【回车】
四、 Ubuntu Server(minimized)空格选择(最小化安装) 【回车】
五、 IP地址 --> 选择第一个enp6s16|eth(回车) --> Edit IPv4 --> Manual
subnet(子网掩码):10.0.0.0/24
Address(IP地址):10.0.0.5
Gateway(网关):10.0.0.1
Name server(DNS):223.5.5.5
Search domains(备用DNS):198.18.0.2
六、 Proxy address(代理配置可以不填): 【回车】
七、 配置源:Mirror address:https://mirrors.tuna.tsinghua.edu.cn/ubuntu 【默认回车】
八、 Use an entire disk|Set up this disk as an LVM group 默认分区 【默认回车】
九、将所有容量全部分配给 /(更目录),这样就可以让所有空间让ubuntu自由使用了
将 /(更目录)|/boot 全部取消挂载(选择:Unmount)
将 ubuntu-lv 删除(选择:Delete)
新建 LVM 分区,选择freespace --> Create Logical Volume --> Name:默认 --> Size:这个用max的容量减去5个G剩下的填写就行 --> Format:ext4 --> Mount:/ --> Create
新建 /boot 分区,选择freespace --> Create Logical Volume --> Name:默认 --> Size:填写Max后面的数值 --> Format:ext4 --> Mount:/boot --> Create
选择Done --> Continue
十、 Your name:名称liwenle
Your Server‘s name:主机名:ubuntu-24-04
Pick a username:liwenle # 配置普通用户名
Choose a password:abc123 # 用户名密码
Confirm your password:abc123 # 确认密码
十一、 Skip for now 【默认不升级为pro】
十二、 选择 Install OpenSSH server 【安装SSH,回车】
十三、 后面全部默认回车,直到安装完成
十四、 安装进度条不动了,出现Reboot Now,说明安装完成,选择Reboot Now 进行重启
十五、 重启记得将镜像删除掉
十六、 重启完成就可以连接SSH工具玩耍了
Ubuntu使用
换源
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak # 备份源
sudo nano /etc/apt/sources.list.d/ubuntu.sources # 编辑源,在文本编辑器中粘贴下面的源,任选一个
阿里源
# 阿里云
Types: deb
URIs: http://mirrors.aliyun.com/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
清华源
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
Types: deb
URIs: http://mirrors.tuna.tsinghua.edu.cn/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
中科大源
Types: deb
URIs: http://mirrors.ustc.edu.cn/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
网易163源
Types: deb
URIs: http://mirrors.163.com/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
保存编辑内容,更新源列表及软件包:
sudo apt-get update # 更新源列表
sudo apt-get upgrade # 更新软件包
安装服务
安装openssh-server,这是SSH服务,安装并开启才能通过SSH工具连接这台Ubuntu
sudo apt update
sudo apt install nano # 安装nano编辑器
sudo apt install git # 安装 git 工具
sudo apt install rsync # 安装 rsync 工具
sudo apt-get install samba # 安装SMB
SSH服务开启、设置、检查
sudo systemctl start ssh # 启动 SSH 服务
sudo systemctl enable ssh # 设置 SSH 服务在开机时自动启动
sudo systemctl status ssh # 检查 SSH 服务状态
# 没有报错说明SSH服务开启成功,按Ctrl+Z退出
更改Ubuntu网络配置
sudo -i
cd /etc/netplan
ls
nano 50-cloud-init.yaml
更改完成后:
sudo reboot # 重启Ubuntu
直通SRIOV核显
查看当前ubuntu版本:
lsb_release -a
查看当前ubuntu内核版本:
uname -r
克隆 i915-sriov 仓库:
rm -rf i915-sriov-dkms # 删除自带的i915驱动
git clone https://github.com/strongtz/i915-sriov-dkms.git # 拉取第三方GitHub上的i915驱动
cd i915-sriov-dkms # 进入刚拉取的i915驱动
安装 DKMS 和构建工具:
sudo apt-get update # 更新软件包
sudo apt-get install build-essential dkms # 安装dkms构建工具
配置并安装 i915-sriov DKMS 驱动:
sudo -i # 切换为root
cd /home/liwenle/i915-sriov-dkms # 进入刚拉取的i915驱动
sudo dkms add .
sudo dkms install -m i915-sriov-dkms -v $(cat VERSION) --force
# 会弹出:Enter a password for Secure Boot. It will be asked again after a reboot. 直接设置MOK密码,这个密码是英文加数字就行
再次出现:Enter the same password again to verify you have typed it correctly. 再次输入一遍即可
修改内核参数:
sudo nano /etc/default/grub # 编辑内核grub配置文件
# 改成下面这样
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on i915.enable_guc=3"
更新 GRUB 配置:
sudo update-grub # 更新grub配置文件
更新 initramfs:
sudo update-initramfs -u # 更新initramfs
重启系统:
sudo reboot # 重启使配置生效
开机会弹出MOK登录选项
选择 Enroll MOK 回车
选择 Continue 回车
选择 YES 回车
Password: 输入前面设置的 MOK 密码
进入到 Ubuntu 桌面后直接关机
连接验证 VF 是否被内核识别:
sudo -i # 切换为root
dmesg | grep i915
ls /dev/dri
# 输出:
by-path card0 renderD128
说明搞定了
通过SMB挂载NAS目录
安装 cifs-utils:
sudo apt install cifs-utils -y # 安装 SMB 管理工具
创建挂载目录:
sudo mkdir /NAS # 这个文件夹下面存放挂载过来的共享目录
sudo chmod -R 777 /NAS # 给 /NAS 目录赋予写入权限
sudo mkdir -p /NAS/Media # 这个文件夹下面存放挂载过来的共享目录
创建密码文件:
sudo -i # 进入到root用户
nano ~/.smbcredentials # 用户主目录下创建或编辑一个名为 .smbcredentials 的文件
# 编辑账号密码
username=abc # abc 替换成 NAS 登录账号
password=abc123 # abc123 替换成 NAS 登录密码
# 保存并退出(按 Ctrl+X,然后按 Y,再按回车)
确保文件权限正确
sudo chmod 600 /root/.smbcredentials # 使其只能被文件的所有者(即 root 用户)读取和写入。这对于存储敏感信息(如用户名和密码)的文件来说是非常重要的,因为它确保其他用户无法读取或修改该文件
修改自动挂载文件 /etc/fstab:
sudo nano /etc/fstab # 挂载目录配置
# 编辑添加以下内容
#//$smb_server/share /mnt/nas_share cifs credentials=/root/.smbcredentials,iocharset=utf8,uid=1000,gid=1000,dir_mode=0777,file_mode=0777 0 0 # 这是一个设置权限事例,加权限可以在这添加
//10.0.0.8/Media /NAS/Media cifs credentials=/root/.smbcredentials,iocharset=utf8 0 0
# - $smb_server替换成远端smb服务器的ip地址(举个例子,如果是群晖就是输入登陆群晖的IP地址)
# - share替换成远端smb服务器共享出来的文件夹(举个例子,如果是群晖就是输入群晖的任意一个共享文件夹名称)
# - /mnt/nas_share 这个就是前面创建好的存放所有远程挂载过来的文件夹的路径
# - cifs用来注明共享方式是SMB,不需要更改
# - /root/.smbcredentials 这里是前面创建的明文密码存放路径,如果前面是默认的就不需要更改
# - ,uid=1000,gid=1000,dir_mode=0777,file_mode=0777 # 这个是给权限,可读可写可执行
# - ctrl+x y 回车保存退出
重启系统:
sudo reboot
验证是否挂载成功
df -h /NAS/Media
安装Docker
更新软件包:
sudo apt update
如果提示这个警告:
有 83 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。
N: Missing Signed-By in the sources.list(5) entry for 'http://cn.archive.ubuntu.com/ubuntu'
执行以下命令:
sudo nano /etc/apt/sources.list # 首先查看是否有一条用 # 注释的命令,如果有 Ctrl+X退出,再输入以下命令:
sudo truncate -s 0 /etc/apt/sources.list
再次更新软件包:
sudo apt update
如果没有警告,只有以下内容:
有 83 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。
输入以下命令:
apt list --upgradable
sudo apt upgrade
安装依赖包:
sudo apt-get install ca-certificates curl gnupg lsb-release
添加 Docker 的 GPG 密钥:
sudo -i # 进入到root用户
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
添加 Docker 的 APT 软件源(存储库):
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#如果提示:W: http://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/noble/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
输入:cd /etc/apt
输入:sudo cp trusted.gpg trusted.gpg.d
#再次执行添加 Docker 的 APT 软件源命令,就不会有这个警告了
更新软件包列表:
sudo apt update
安装 Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io
启动并启用 Docker 服务:
sudo systemctl start docker # 启动 docker 服务
sudo systemctl enable docker # 设置 docker 服务在开机时自动启动
查看Docker版本:
sudo docker --version
将当前用户添加到 Docker 组:
sudo usermod -aG docker $USER # 输入这个命令前确保是自己个人用户而不是root用户
重新登录以使组更改生效:
newgrp docker
测试 Docker 命令:
docker run hello-world
出现:Hello from Docker!即表示安装完成
安装Protainer可视化Docker容器管理面板
拉取 Portainer 镜像
docker pull portainer/portainer-ce:latest
运行 Portainer 容器
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
访问 Portainer
http://localhost:9000
管理 Portainer 容器
docker stop portainer # 停止容器
docker start portainer # 启动容器
docker rm portainer # 删除容器
为以后的Docker容器创建一个文件夹
sudo mkdir /docker # 创建一个 docker 文件夹
sudo -i # 进入root权限
chown liwenle:liwenle /docker # 更改文件夹所有权为 liwenle 用户
chmod 755 /docker # 设置 liwenle 可读可写可执行 的权限
ls -ld /docker # 确认权限修改成功
# 输出: drwxr-xr-x 2 liwenle liwenle 4096 Aug 1 00:59 /docker
说明修改成功了
安装Jellyfin
安装Jellyfin容器注释:
docker run -d \ # 以分离模式运行容器
--name jellyfin \ # 容器名称为 jellyfin
-p 8096:8096 \ # 将主机的 8096 端口映射到容器的 8096 端口
--restart unless-stopped \ # 设置容器的重启策略为“除非手动停止”
-v /docker/jellyfin/config:/config \ # 将 /docker/jellyfin/config 改成自己主机真实目录
-v /docker/jellyfin/cache:/cache \ # 将 /docker/jellyfin/cache 改成自己主机真实目录
-v /docker/jellyfin/NAS:/media \ # 将 /docker/jellyfin/NAS 改成自己主机真实目录
--device /dev/dri:/dev/dri \ # 将本地的解码器映射给jellyfin
nyanmisaka/jellyfin:latest # 使用此镜像创建容器
安装Jellyfin容器:
docker run -d \
--name jellyfin \
-p 8096:8096 \
--restart unless-stopped \
-v /docker/jellyfin/config:/config \
-v /docker/jellyfin/cache:/cache \
-v /NAS/Media:/media \
--device /dev/dri:/dev/dri \
nyanmisaka/jellyfin:latest