侧边栏壁纸
博主头像
sirgo的博客 博主等级

每天进步一点点,一年之后你会看到巨大的变化

  • 累计撰写 58 篇文章
  • 累计创建 46 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Orange Pi Zero安装PiKVM

sirgo
2025-01-28 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

Nas服务器没有IPMI也没有intel的vPro-AMT功能,有时候NAS出问题或者需要重新安装系统什么的非常麻烦。幸运的时有开源的PiKVm项目,大概原理时使用HDMI capture和外置一个KVM来接收HDMI capture的流媒体再加上一个USB 来实现远程机器画面、声音、鼠标键盘的捕捉(个人理解,可能有误)

OrangePiZero是一个廉价的类树莓派设备,咸鱼50RMB左右。

https://www.bilibili.com/opus/750451200508297219 进行配置可以在orangepi zero上使用pikvm,但是我在使用时有些缺点:

  1. 每次启动系统后,第一次使用必须在pikvm的webui上 reset stream重置流,才能看到画面。

  2. 有时候不知什么缘故启动失败,这在偶尔使用一次时非常恼火

基于以上原因决定自行构建PiKVM

准备工作

依据之前的https://www.bilibili.com/opus/750451200508297219,需要准备:

  • 一个 Orangepi Zero。

  • 一个 HDMI to USB 的采集卡。

  • 一个16GB 的 TF 卡 及 读卡器。

  • 【可选】一根网线。(仅需要百兆,四芯线即可) (可以使用WIFI,orangepi-zero自带wifi)

  • 两根 USB-A to micro-USB 数据线。  (或一根 USB-A to micro-USB 或一根 其他 to USB-A)*若主板支持USB关机供电可以直接使用一根USB-A to micro-USB 数据线

  • 一根电烙铁,部分松香及焊锡(如果有的话)

  • 如果被控机没有HDMI接口请自备一个转HDMI的转换器

  • 【可选】USB TTL 用于方便的设置系统,也可通过网络

选择

  1. PiKVM镜像 选择使用 https://github.com/srepac/kvmd-armbian

  2. 系统内核 选择使用Armbian自行构建内核。也可以使用orangepi-zero官方的内核(版本有些老旧,安装PiKVM时需要升级Python)

步骤

编译内核
#使用debian12\Ubuntu22.04+系统进行编译,

#1. 安装编译工具和依赖
sudo apt update
sudo apt install -y git build-essential gcc make bc bison flex libssl-dev \
device-tree-compiler libncurses-dev libc6-i386 lib32stdc++6 \
python3-dev python3-distutils u-boot-tools debootstrap debian-archive-keyring \
qemu-user-static rsync 

#2. 设置代理
export http_proxy=http://192.168.28.97:10809
export https_proxy=http://192.168.28.97:10809

git config --global http.proxy http://192.168.28.97:10809
git config --global https.proxy http://192.168.28.97:10809

#3.下载源码
git clone https://github.com/armbian/build
cd build
git checkout v24.5.1  # 替换为最新稳定版本号

#4.设置编译分区,添加lib.config文件这样会生成uboot分区、armbian分区和一个空闲分区
root@debian-pass-vm:/home/armbian-build/build# vim userpatches/lib.config
IMAGE_MAX_SIZE=8192  # 8 GB
# U-Boot 分区
BOOTFS_TYPE="fat"
BOOTFS_START=1
BOOTFS_END=262144  # 128 MB

# Armbian 系统分区
ROOTFS_TYPE="ext4"
ROOTFS_START=262145
ROOTFS_END=8650752  # 4 GB

# 存储分区
STORAGE_TYPE="ext4"
STORAGE_START=8650753
STORAGE_END=-1  # 占用剩余所有空间

#5. 进行编译
su admin   #不能使用root用户进行编译
PREFER_DOCKER=no ./compile.sh build BOARD=orangepizero BRANCH=current BUILD_DESKTOP=no BUILD_MINIMAL=yes KERNEL_CONFIGURE=yes RELEASE=bookworm
或者:
./compile.sh   #会弹出选择以上的板子和内核版本等,上面的命令会跳过这些选择步骤,加快流程

#6.设置内核配置:开启OTG(必须)
在弹出的menuconfig或提前修改.config,检查一下项目是否启用  【*为编译到内核中 M为模块。 空格进行切换】
Device Drivers
  → USB support
    → DesignWare USB2 DRD Core Support
      → [*] Enable DWC2 OTG mode (DRD)  # 必须启用
      → (otg) DR mode (Dual Role mode)  # 选择 "otg"
      → [*] Support for external VBUS detection  # 如果使用外部供电检测
      → [*] Support for HNP and SRP protocols    # 根据需求启用(OTG协议协商)
      → [*] Enable debugging output              # 调试用(可选)

Device Drivers
  → USB support
    → USB Gadget Support
      → <*/M> USB Gadget Driver                  # 启用基础框架
        → [*] USB functions configurable through configfs  # 必须启用(动态配置Gadget)
        → <*/M> Mass Storage Gadget              # U盘模式
        → <*/M> Ethernet Gadget (CDC ECM/EEM)    # USB网卡模式
        → <*/M> Serial Gadget (CDC ACM)          # 串口模式
        → <*/M> HID Gadget                       # 键盘/鼠标模式
        → <*/M> FunctionFS Gadget                # 用户自定义模式(高级)
Device Drivers
  → USB support
    → [*] USB Physical Layer drivers
      → <*/M> NOP USB Transceiver Driver         # 通用PHY驱动(全志芯片可能需要)

Device Drivers
  → USB support
    → <*> Support for Host-side USB              # 必须启用(即使作为设备也需要)
    → <*> USB Modem (CDC ACM) support            # 串口调试可能需要
    → <*> USB Serial Converter support           # 其他USB串口设备支持
General setup
  → [*] Configure standard kernel features (expert users)
    → [*] Enable loadable module support         # 确保模块加载支持已启用

Kernel Features
  → [*] Use the ARM EABI to compile the kernel   # ARM架构必须启用

Device Drivers
  → USB support
    → USB Gadget Support
      → <*> Dummy HCD (HCD for testing Gadget)   # 测试用(可选)

#5.写入sd卡
cd output/images/Armbian_*.img
sudo dd if=Armbian_*.img of=/dev/sdX bs=4M status=progress

注意: 经过测试这样生成的镜像始终无法开启OTG,经过折腾发现时DTB的问题,从官方的镜像中提取:sun8i-h2-plus-orangepi-zero.dtb替换/boot/dtb中的。

设置系统
  1. 替换源 【可选】

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    sudo nano /etc/apt/sources.list
    # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
    # deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
    
    deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
    # deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
    
    deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
    # deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
    
    deb https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware
    # deb-src https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware
    
    sudo apt update && sudo apt upgrade -y

    /etc/apt/sources.list.d/目录下还有armbian的源,应该时从github.com访问如不能访问github建议挂梯子

  2. 设置WIFI 【可选】
    如果不使用网线,或者不方便可以使用WIFI来连接OrangePi , armbian自带wap_supplicant没有nmcli

    #
    sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
    ctrl_interface=/var/run/wpa_supplicant
    update_config=1
    
    # 连接开放网络(无密码)
    network={
        ssid="你的WiFi名称"
        key_mgmt=NONE
    }
    
    # 连接 WPA/WPA2-PSK 加密网络
    network={
        ssid="你的WiFi名称"
        psk="你的WiFi密码"
        key_mgmt=WPA-PSK
    }
    
    # 连接隐藏网络
    network={
        ssid="你的WiFi名称"
        psk="你的WiFi密码"
        scan_ssid=1  # 启用扫描隐藏网络
    }
    
    sudo nano /etc/network/interfaces
    # 或手动指定静态 IP
    auto wlan0
    iface wlan0 inet static
        address 192.168.1.100
        netmask 255.255.255.0
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    
    sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
    
    systemctl restart NetworkManager
  3. 设置有线固定IP
    说明:方便安装好后pikvm使用有线

    #确认有线网络接口名称
    ip link show | grep "eth"  # 通常为 eth0、enp1s0 等
    
    #备份原网络配置文件
    sudo cp /etc/network/interfaces /etc/network/interfaces.bak
    
    #编辑网络接口配置
    sudo nano /etc/network/interfaces
    # 默认环回接口
    auto lo
    iface lo inet loopback
    
    # 配置 eth0 为静态 IP
    auto eth0
    iface eth0 inet static
        address 192.168.28.180      # 你的固定 IP
        netmask 255.255.255.0      # 子网掩码
        gateway 192.168.28.1       # 网关(路由器 IP)
        dns-nameservers 192.168.28.1 223.5.5.5  # DNS 服务器(可指定多个)
    
    
    #修改dns
    sudo nano /etc/resolv.conf
    nameserver 192.168.28.1
    nameserver 223.5.5.5
安装PiKVM

按照https://github.com/srepac/kvmd-armbian 步骤安装,注意:

  1. github无法访问时设置代理:

    git config --global http.proxy http://192.168.28.97:10809
    git config --global https.proxy http://192.168.28.97:10809
设置PiKVM
  1. 设置web登录密码

    #默认账号密码:admin  admin
    kvmd-htpasswd set admin
  2. msd虚拟光驱
    说明:PiKVM默认没有开启这个功能。需要手动开启:

    #设置pikvm配置文件,注释这两行
    nano /etc/kvmd/override.yaml
    #    msd:
    #        type: disabled
    
    #设置挂载分区,光驱镜像放在这个分区
     nano /etc/fstab
     /dev/mmcblk0p3 /var/lib/kvmd/msd exfat  auto,nofail,rw,X-kvmd.otgmsd-root=/var/lib/kvmd/msd,umask=0000  0 0 
    
     #ex格式使用这个
     #/dev/sda1  /var/lib/kvmd/msd   ext4  nodev,nosuid,noexec,ro,errors=remount-ro,data=journal,X-kvmd.otgmsd-root=/var/lib/kvmd/msd,X-kvmd.otgmsd-user=kvmd  0  0
    
    #重启服务
    systemctl restart kvmd kvmd-otg
    
    #查看日志是否报错
    journactl -u kvmd-otg -f 

备注:https://docs.pikvm.org/msd/ 官方说明。 如果是exfat,fat32等必须用这个。 必须添加,X-kvmd.otgmsd-root=/var/lib/kvmd/msd 不然会报错,目前官方文档没有描述当当前版本必须添加这个

  1. 注意这里exfat需要根据挂载的/dev/sda3分区类型修改,建议exfat。【因为ext在win下无法读写,fat32不支持4GB以上文件】

  2. 如果又报错,需要解决。如果正常打开pikvm web页面会出现一个drive

制作image镜像

参考:制作image镜像

其他

也可以使用:https://github.com/jacobbar/fruity-pikvm

0

评论区