作者: hetao

  • openwrt安装Docker

    安装这几个

    执行
    cp /etc/config/dockerd-opkg /etc/config/dockerd
    修改docker配置或仓库地址在这个文件中配置
    然后重启(重启前docker不能正常工作)

    Views: 148

  • OpenWrt磁盘扩容

    我的测试结果是要扩充磁盘只能选择ext4分区,squashfs无法支持磁盘扩容,也不能挂载其它分区到/或/overlay,挂载到其它位置又起不到扩容的目的。这是一个古老bug导致的,https://github.com/openwrt/openwrt/issues/9015 ,openwrt并没有从rootfs中读取fstab而是从rom中。
    我用的是openwrt-23.05.0-x86-64-generic-ext4-combined-efi.img这个镜像

    1. 安装工具

    安装block-mount并重启后页面上才有挂载点管理功能

    opkg install block-mount parted
    reboot
    
    1. 添加磁盘


    添加磁盘而不是添加分区的原因是为了支持固件升级,升级后第一块磁盘除了配置文件都会被覆盖掉
    parted /dev/sdb
    mktable gpt
    mkpart primary ext4 0% 100%
    quit
    mkfs.ext4 -L extroot /dev/sdb1

    1. 挂载磁盘

    按如下配置,添加一个挂载点

    然后执行

    mount /dev/sdb1 /mnt
    tar -C /overlay -cvf - . | tar -C /mnt -xf - # 或 tar -C /rom -cvf - . | tar -C /mnt -xf - 取决于安装类型
    umount /mnt
    reboot
    

    转移文件到新磁盘是因为,如果刷固件的话原root分区中的数据会丢失,如果做的有配置或安装的有软件的话会导致刷固件后系统出问题,如果没有安装任何东西也可以不转移数据。
    重启后可以看到已经挂载成功


    刷固件后第一次启动extroot分区不会自动挂载,再重启一下就好了。

    基于命令行的实现方法:
    https://openwrt.org/docs/guide-user/additional-software/extroot_configuration

    Views: 77

  • PVE安装OpenWrt

    1. 创建虚拟机




    这里创建的efi磁盘稍后要删除掉,不然无法启动

    磁盘要删掉





    2. 导入openwrt镜像

    进入pve控制台执行以下命令

    wget https://mirror.sjtu.edu.cn/openwrt/releases/23.05.0/targets/x86/64/openwrt-23.05.0-x86-64-generic-squashfs-combined-efi.img
    gzip -d openwrt-23.05.0-x86-64-generic-squashfs-combined-efi.img
    qm disk import 117 openwrt-23.05.0-x86-64-generic-squashfs-combined-efi.img data-lvm
    

    命令执行结果如下图

    上面未使用的磁盘就是刚才导入的磁盘



    3. 设置引导


    4. 启动并设置openwrt


    进入shell后执行如下命令

    passwd
    ip addr del 192.168.1.1/24 dev br-lan
    ip addr add 192.168.33.30/24 dev br-lan
    ip route add default via 192.168.33.1
    echo nameserver 192.168.33.1 > /etc/resolve.conf
    sed -i 's/downloads.openwrt.org/mirror.sjtu.edu.cn\/openwrt/g' /etc/opkg/distfeeds.conf
    

    然后浏览器打开openwrt做其它设置

    Views: 41

  • dnsmasq解析本地域名的若干方法

    写这个主要是因为如果在公网上配置了IPv6地址的话本地IPV4解析就失效了
    – 方法1,用–address
    2.86版本以后改变了–address=/example.com/1.2.3.4配置的行为,A记录以外的其它记录类型仍然 会向上游转发,这在以前版本是不会的,要保持与以前相同的行为要使用如下写法:
    --address=/example.com/1.2.3.4 --local=/example.com/
    – 方法2,用hosts
    --server=/example.com/
    然后在hosts文件中添加
    1.2.3.4 example.com
    在华硕路由器上的hosts文件是/jffs/configs/hosts.add
    – 方法3,用–dynamic-host添加动态IPV6地址
    –dynamic-host example.com,0::1.2.3.4,br0
    dnsmasq会从br0上获取接口地址添加到ip地址前缀中

    Views: 86

  • frp的xtcp打洞测试

    • 在windows上无论如何都会失败(windows成功率更低)
      后来发现只是我这台电脑有问题,不过仍然说明兼容性并不好
    • xtcp依懒于stun,然而并没有稳定的stun服务器,自建的stun服务器都用不了(可能需要开放全部端口才行)
      国内可用的stun服务器stun.miwifi.com:3478,stun.qq.com:3478
    • stun测试
      执行命令./frpc nathole discover --nat_hole_stun_server stun.miwifi.com:3478,如果 正确返回IP端口号则说明stun能正确工作,如果不能xtcp大概率也不会通
    • 从结果来看xtcp的打洞成功率远低于wireguard+wgsd

    Views: 166

  • WireGuard部署及NAT打洞

    主要参考文档:

    wireguard文档
    相关中文翻译
    – https://blog.51cto.com/u_15077562/4574884
    – https://icloudnative.io/posts/wireguard-docs-theory/
    nat穿透
    相关中文翻译
    – https://xie.infoq.cn/article/3f68cde0163b359b13fa1a8f0
    – https://icloudnative.io/posts/wireguard-endpoint-discovery-nat-traversal/

    总结

    • nat穿透的时候需要NAT后的节点共同连到一个有公网IP的节点上
    • 在nat背后的两个节点相连的时候需要至少一个是全椎形NAT,或者双方都为限制椎形
    • coredns部署在具有公网IP的节点上
    • wgsd_client需要在nat背后的节点上定时运行,可以5分钟或10分钟一次
    • wgsd的代码可以自己编译,尤其在windows上只能自己编译,在对应目录中运行go build就可以了
    • nat状态表的过期时间一般为2分钟,所以keepalive周期最好在1分钟以内
    • nat后节点不需要与公网节点能正常通信,只需要能向公网节点发起连接就行,所以coredns最好在公网开放端口,这样在不能与公网节点通信时也能用
    • 运营商级NAT都不是全椎形
    • nat类型探测工具
      https://github.com/HMBSbige/NatTypeTester
    • nat类型介绍
      https://support.huawei.com/hedex/hdx.do?docid=EDOC1100331440&id=ZH-CN_CONCEPT_0183792552
      https://zhuanlan.zhihu.com/p/657998085

    Views: 805

  • windows10/11禁用和开启Hyper-V

    1. 禁用
      bcdedit /set hypervisorlaunchtype off
    2. 开启
      bcdedit /set hypervisorlaunchtype auto

    Views: 61

  • 生成HPE ILO证书

    使用.NET远程控制台的时候发现会有证书错误,导致无法使用.NET远程控制台,所以用acme.sh生成正确的证书
    登录ILO后找到存取管理->安全性,然后点击自定义证书,填写正确的域名,生成CSR,等一会儿再点一次生成CSR,把CSR保存下来
    然后执行命令

    acme.sh  --signcsr --csr dl360.csr --dns dns_gd
    acme.sh --install-cert -d dl360.hetao.me --fullchain-file /opt/certs/dl360.hetao.me/fullchain.pem --cert-file /opt/certs/dl360.hetao.me/dl360.hetao.me.pem
    cd /opt/certs/dl360.hetao.me
    sed '4r dl360.hetao.me.pem' ilocert.cfg>dl360cert.cfg
    hponcfg -f dl360cert.cfg
    


    ilocert.cfg的内容如下

    <RIBCL VERSION="2.0">
    <LOGIN USER_LOGIN = "adminname" PASSWORD = "password">
    <RIB_INFO MODE = "write">
    <IMPORT_CERTIFICATE>
    <!-- Replace the following text and comments with the certificate -->
    <!-- INCLUDE the full header and full footer of the certificate -->
    </IMPORT_CERTIFICATE>
    <!-- The iLO will be reset after the certificate has been imported. -->
    <RESET_RIB/>
    </RIB_INFO>
    </LOGIN>
    </RIBCL>
    

    也可以用命令行操作

    然后会生成证书文件dl360.hetao.me.pem(不是fullchain.pem),把里面的证书再粘到ILO中,ILO会自动重置,ILO再次启动后就好了,.NET远程控制台也能用了。
    注意:
    ilo固件刷新后需要重新生成CSR,不然导入证书时会不识别

    Views: 59

  • pve(KVM)中抑制ignored rdmsr消息

    这个问题跟nvidia显卡虚拟化有关,执行以下命令可解决
    echo “options vfio_iommu_type1 allow_unsafe_interrupts=1” > /etc/modprobe.d/iommu_unsafe_interrupts.conf && update-initramfs -u -k all

    参考:
    https://pve.proxmox.com/wiki/PCI_Passthrough#NVIDIA_Tips

    Views: 31

  • PVE安装Tesla P4并实现GPU虚拟化

    硬件介绍

    P4的参数相当于GTX1080,是一个半高单槽的卡,另外P100(HBM2)和P40(GDDR5X)是双槽全高的卡,具体比较可以看这里:

    https://developer.aliyun.com/article/753454
    https://cloud-atlas.readthedocs.io/zh_CN/latest/machine_learning/hardware/nvidia_gpu/tesla_p10.html

    P4适用于1U的服务器,P40和P100适用于2U的机器,价格比P4要贵一倍多,在HP 360 Gen9服务器上P4可以直接安装。

    关于HP DL360 Gen9服务器的介绍,这个是别人写的,我贴过来:
    https://cloud-atlas.readthedocs.io/zh_CN/latest/linux/server/hardware/hpe/hpe_dl360_gen9.html
    360GGen9的扩展能力比较小,最多只能安装两张GPU卡,再加一个SSD就满了。
    支持vGPU的显卡列表:
    https://docs.nvidia.com/grid/gpus-supported-by-vgpu.html
    桌面显卡启用vGPU:
    https://gitlab.com/polloloco/vgpu-proxmox

    host驱动安装

    • 开启IOMMU
      编辑/etc/default/grub,在quiet后面添加intel_iommu=on iommu=pt
    • 安装驱动
      apt install pve-headers-$(uname -r)
      apt install build-essential dkms pve-headers mdevctl
      echo -e "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd" >> /etc/modules
      echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
      echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist.conf
      update-initramfs -u -k all
      chmod +x NVIDIA-Linux-x86_64-535.104.06-vgpu-kvm.run
      ./NVIDIA-Linux-x86_64-535.104.06-vgpu-kvm.run --dkms
      reboot
      

      用nvidia-smq命令可以查看显卡的工作状态
      用mdevctl types命令可以查看支持的vGPU实例类型和数量,所有vGPU实例需要用完全相同的规格,显存也是等分的,不能超额分配。如果要支持8K显示至少要2G显存,如果4K显示1G就够了。

    虚拟机配置

    vGPU实例类型参考这里:
    https://docs.nvidia.com/grid/13.0/grid-vgpu-user-guide/index.html#virtual-gpu-types-grid
    – 添加虚拟机
    先添加虚拟机实例,安装好virtio-gt和virtio-gm程序,虚拟机配置中开启qemu-guest-agnet,bios不要选uefi(装驱动时需要重新签名)

    • 安装远程桌面
      apt install xrdp

    • 禁用或删除nvidia开源驱动

      apt remove nvidia-*
      echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
      echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist.conf
      

      不然的话在添加vGPU后有可能黑屏

    • 添加PCI设备
      硬件->添加->PCI设备
      pci配置
      这里面列出的设备可能比较多,要仔细找

    guest驱动安装

    以Debian为例
    – 开启xorg(关闭wayland)
    编辑/etc/gdm3/daemon.conf,添加
    WaylandEnable=false

    • 更新系统
      sudo apt update
      sudo apt upgrade
      reboot
      
    • 安装依懒
      sudo apt install dkms build-essential dkms jq uuid-runtime -y
      sudo apt install -y linux-headers-$(uname -r)
      sudo apt install pkg-config libglvnd-dev -y
      
    • 安装驱动
      init 3
      echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
      echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist.conf
      update-initramfs -u -k all
      chmod +x NVIDIA-Linux-x86_64-535.104.05-grid.run
      ./NVIDIA-Linux-x86_64-535.104.05-grid.run --dkms
      reboot
      
    • 授权
      curl --insecure -L -X GET https://dls.hetao.me/-/client-token -o /etc/nvidia/ClientConfigToken/client_configuration_token_$(date '+%d-%m-%Y-%H-%M-%S').tok
      service nvidia-gridd restart
      nvidia-smi -q | grep "License" #要等大约1分种后才能看到结果,每次授权的有效期是3个月
      
    • 远程
      apt install xrdp
      在我使用的时候发现rdp不能在本地户用登录的状态下使用,反之使用rdp的时候本地也无法登录(黑屏)
      Debian本身带的也有桌面共享,是基于rdp协议的,但是我没有连成功,最后还是安装的xrdp。

    • 驱动下载
      现在可用的下载链接:
      https://alist.homelabproject.cc/foxipan/vGPU
      https://yun.yangwenqing.com/ESXI_PVE/vGPU/NVIDIA
      https://pan.hetao.me/s/RHMxwE95QwmGmAG
      已经不能下载:
      https://foxi.buduanwang.vip/pan/vGPU/
      https://foxi.buduanwang.vip/pan/foxi/Virtualization/vGPU/
      https://github.com/justin-himself/NVIDIA-VGPU-Driver-Archive
      https://archive.biggerthanshit.com/NVIDIA/

    参考:
    https://gitlab.com/polloloco/vgpu-proxmox/-/tree/master

    Views: 327