Pop!_OS 工作环境搭建
Pop!_OS,又称 pop_os,昵称 poop os。
Pop!_OS,又称 pop_os,昵称 poop os。
一个 Ubuntu 的衍生版,干掉了 snapd,有更好用的桌面体验。
背景
这次的折腾起因在于公司开发需求。一来需要做SGX
开发,二来我自己想玩玩libraryOS/unikernel
,所以开始搭建环境。
先说一下开始之前的环境状态,有一个 1t 的 nvme 固态和一个1t的硬盘,都是GPT
分区。Windows 10 系统安装在固态里面,有四个分区:efi、msr、os、oem,工作文件装在硬盘里面,有三个分区。
最终要把 pop_os 安装到固态里面,win10 转移到硬盘里面,使用虚拟机启动 win10 硬盘。win10 里面一堆的工作程序,重新装太麻烦了。
win10 里面启用了BitLocker
(公司规定),启用了hyper-v
用来搭建win server pxe
环境,安装了vmware
用来模拟中标麒麟
和银河麒麟
的客户环境。
pop_os 安装
这个看似最简单的步骤也花了两个多小时。这次的主角是 pop_os 21.10 beta2。
首先需要将固态中的系统迁移到硬盘中去,腾出空间。操作很简单,用DiskGenuis
从硬盘前部分切出一块儿空间就行,系统相关的分区总共占用了 160G 左右,所以 800G 的 D 盘,切 256G 出来;同盘内拷贝,又有很多空间占用,花了半个小时完成。
然后是系统迁移,因为要操作系统盘,为了出事之后能找回数据,先把BitLocker
临时关掉,同时做安装盘,拿balenaEtcher
写入到 u 盘里面。为了减少后面迁移的数据量,卸载点软件,把vmware
卸载了,同时PrimoCache
也卸了(买的正版,根据主板id认证,因为要进虚拟机,所以要重新认证,加速意义也不大了)。
这里出了第一个情况,balena
的验证十分慢,再加上BitLocker
解密也会消耗大量磁盘 io,导致了我以为卡 io 了,想着应该没多大几率 pop_os 安装盘出事,就点了balena
的skip。又等了半个小时终于BitLocker
解密完成。
重启进入DiskGenius
的pe
,迁移系统;跨盘迁移,io 比较快,不过也因为数据量大,也花了半个小时。为DiskGenius
点赞,这软件维护磁盘是真好用,有空了去买个正版u盾。
系统迁移完,进入 bios,关闭 secure boot ,关闭硬盘,插入u盘,重启进入u盘启动,一气呵成。
然后就出事了,pop_os 引导阶段,好几个服务启动不起来,怀疑是自己启动盘没做好,重启进入缓慢的硬盘的 win10,重新制作安装盘,耐着性子等它验证完成。制作完毕,重新引导,一样的结果,看来是 pop_os 的引导盘内核和机器的兼容问题。
换个思路,进 win10,用vmware
挂载物理磁盘来安装就行了。
进 win10,把刚刚卸载掉的vmware
给装上,耐着性子等vmware
装完,重启电脑,在vmware
里面安装 pop_os 到固态硬盘,装着倒挺快,安装中途发现 mbr 分区bios
模式,于是停止安装,vmware
里面设置为uefi
模式,重新安装。
进入安装环境之后,去把镜像改成国内的,加快安装过程的下载速度。
折腾了两个多小时,终于安装成功。
重启进入bios,关闭硬盘的uefi
引导项,保存,从pop_os启动,修改源为国内镜像。
虚拟机安装
先安装宿主机环境,apt
一把梭。
sudo apt install virt-manager qemu -y
挂载物理磁盘
然后virt-manager
里面创建虚拟机,添加物理磁盘,使用/dev/sda
失败,最后搜到需要使用/dev/disk/by-id/blablab
的路径方式添加。
uefi启动
启动失败,想起来原本是uefi
,默认创建的虚拟机是bios
,去搜索qemu uefi
,搜到可以在创建完虚拟机之后再启用编辑,就可以把bios
设置切换为uefi
,随便添加哪个ovmf
的 fd,这里有个坑,ovmf.ms.fd
并不代表microsoft
,目前仅仅是到到常规ovmf.fd
符号链接,ovmf.secboot.fd
是用来做secure boot
开发测试用的,需要自己制作公私钥,并不能是微软的secure boot
。所以常规的ovmf.fd
就够了。
无限自动修复
切换uefi
之后,启动。没蓝屏,但是无限进入preparing automatic repairing
画面,然后进入启动失败选择其他方式启动
界面。
初步判断是驱动问题,搜了一圈,找到fodera
的virt-io
驱动包 iso,挂载之后,在启动失败界面选择命令行模式
,切换到光驱目录后,drvload
装载virstor
相关的驱动,退出,启动。还是无限进入这个界面。
再盲猜是嵌套虚拟化
问题,启动失败界面选择安全模式进入 win10,关闭hyper-v
,同时bcdedit
关闭hypervisor
。
bcdedit /set hypervisorlaunchtype off
重启,成功进入 win10。qemu默认网络为nat
,办公的时候有远程桌面接入需求,必须直接暴露在办公网。
桥接
virt-manager
死活都没法添加bridge
类型,明明别人的教程里面都是两步创面网络,我这儿直接一步到位。
改换思路,直接nm-connection-editor
添加,nmtui
界面添加,虚拟机里面连上之后都没网络。
无奈之下,改成桥接到mac tap
,暴露在办公网,但是host
和guest
之间没法互通。但是周末远程接入,是够用了。
周六用家里的 pop_os 做实验,发现用nmcli
创建,然后将网桥启用,也就是up
一下就行……感谢u2b上大佬的视频。
sudo nmcli conn show --active
sudo nmcli conn add type bridge con-name br0 ifname br0
sudo nmcli conn add type ethernet slave-type bridge con-name bridge-br0 ifname ens0 master br0
sudo nmcli conn up br0
然后把虚拟机的网卡桥接br0
就行。
virt-io
想象中virt-io
设备由qemu
加速,应该会快些,就把所有可以的虚拟设备,都改成virt-io
。
然后进系统一看,设备管理器里面几个问号,网卡也没了。幸好刚刚的virt-io
驱动 iso 没删,装载,点击里面的msi
进行安装。成功~~
tpm
公司的安全要求中,工作盘必须加密,不想装第三方加密软件,就使用了win
自带的bitlocker
,然而这货要求tpm
模块启用,虚拟机里面透传tpm passthrough
失败,只能上软的模拟了。
根据要求按照依赖包。其中gnutls-bin
决定了swtpm_cert
可否编译,所以一定要全给装了,不然启动不了就很尴尬。
然后有一点很重要,--prefix=/usr
,默认的安装路径是/usr/local
,这会导致virt-manager
内调用swtpm_setup
失败。
模拟tpm
安装成功后,虚拟机设置tis
类型的2.0
版本tpm
,启动win10
即可,另外启用bitlocker
后一定要备份好密钥,使用微软在线账号的情况下,允许将密钥备份到账号上,通过账号找回。每个tpm
模拟会将对应tpm的数据保存起来,系统崩溃会,大概率这个文件是会丢失的,所以备份的bitlocker
密钥就在这时候起作用了。
远程桌面客户端
这个听取 linux 群某菜大佬的推荐,用remmina
准没错。RDP & VNC
都支持。
远程桌面服务端
gnome-remote-desktop
,也就是 pop_os 和 ubuntu 自带的软件,是兼具VNC
和RDP
功能的,洁癖患者不想再装。根据 g.r.d官方的教程 把RDP
也启用。
家里的 mac 远程到家里的 pop 。mac 自带 VNC
能控制鼠标,但是画面只有一块儿方形的灰色,Paralles Client
走RDP
直接连上之后就进程闪退。
几番倒腾:xRDP
、FreeRDP-shadow-x11
,前者会让你反复输密码,后者直接连接中断。
在公司用同事电脑走RDP
,能通能显示,VNC
也能通,在官网发现,g.r.d
必须登陆后才能远程通,且对n卡支持不好。
作罢,这远程桌面就等g.r.d
官方更新修复吧。
openvpn
通过界面导入openvpn
的配置文件,添加otp
用户名,密码设置为每次都询问。连接,失败;查看日志,报 CA 的验证算法 too weak,需要设置tls-cipher "DEFAULT:@SECLEVEL=0"
,然而界面里面没这选项,没法设置。
直接去/etc/Network-Manager
下改配置文件,然而那个文件是中间产物,每次都会重新生成,改了也没有卵用。
参考 stack exchange 上的方法,通过nmcli
命令进行导出,修改再导入,能进入密码错误重新输入的界面,查看日志,是没有用户名。没法通过界面添加用户名,因为只要通过一次界面保存,上面的SECLEVEL修改就会失效。
放弃界面,老老实实用命令连接吧
sudo openvpn xxx.ovpn
tap vs tun
macOS High Sierra
之后就自带tun
驱动了,而且TunnelBlick
的tap
驱动还会反复被警告,于是想着将配置文件里面的tap
改成tun
。
未完待续~~