找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 11340|回复: 96

[N1盒子] 解锁N1新玩法,生产力工具,BIOS级别远程管理Open IP-KVM

 火.. [复制链接]
本帖最后由 yuly 于 2023-5-8 07:55 编辑

文章编号:yuly23042411id
转发请注明来源网址https://www.right.com.cn/forum/thread-8288311-1-1.html,方便网友查看最新版内容,文章内容随时更新,谢谢。
前言
日常工作环境中,少不了各类远程操作需求,在Windows中,很好解决,但离开操作系统,BIOS级别层面,典型应用为机房服务器控制(部分没有IPMI),NVR监控等,有几类工具可以解决,
1.点对点收发延长器:特点是复用网线,点对点(非IP传输)视频信号与控制信号,最大问题是不能跨物理,要走线,不是很灵活
2.设备自带BIOS级别管理:俗称IPMI,新服务器基本都有基础功能,高级功能要授权,各个品牌称呼不一样,DELL的iDRAC,其它品牌有类似名称,缺点是,长期后,不一定记的到登陆信号,第二好多是在网页上基于java的控件,安装起来也费劲,第三局限于服务器
3.外置IP-KVM:这类是最方便,适用面很面,不局限服务器,只有VGA,HDMI,AV这类输出结果,通过USB通操控的,都可以接入已有网路,远程控制,如上面提到的NVR监控,而且这类IP-KVM还可扩展功能,如接入一个摄像头同传,非常方便,重点我们可以关注这类产品,已有很多成熟产品:大家可以自行找,能做到互联网接入后,任何地方都可以控制,问题是价格比较高,国外大牌子上千,还是就是没有扩展性,完成依靠产品提供的功能。

我们关注为第三类外置IP-KVM网上有这类方案,我发现基于开源的”PiKVM”项目可以完美实现,我都买了,才发现只是外壳+采集卡,最核心的树莓派4B没有,已花500元左右,还要差不多1000元的树莓派4B,我真下不了手,就此搁置。

无意看到网上看到作者「王磊」开源的「Open IP-KVM」项目,十分中意,其实前期我有一个KVM,也很小巧,主要问题是太卡,PE引导菜单又是看不到就跳过走,还有就是按一个键,容易触发连键,导致输入密码验证失败,造成BUG,这是致命伤,自已也喜欢折腾,就试试,不行也可以当一个好用的机顶盒,反正不亏。
前期对硬件方面一窍不通,我以这种视角,带领大家一同来完成这个功能,有些地方就啰里啰唆哈,没法,想到啥就写下来,事后好回顾,文章里面提到的操作知识点,实践操作中问题很多,走过很多弯路,大量参考恩山各位大佬的文章,梳理出来与各位共享,寻找软件指定版本非常消耗时间,所有软件与镜像全部打包提供,需要的可以下载。

我实现这个项目方式为,所要用到的软件与代码部署在系统的docker中使用,作为盒子一个功能使用,后期可以其它功能相融,也方便管理,源代码中的有固定设备名称(可配置),改配置文件不是最优解,通过docker,可映射为代码中需要的设备名称,在建立docker过程可以控制映射设备名称,方便,同时docker建立好后,非常方便部署到其它类似操作系统中,我希望不局限于N1
说明
没有特殊说明,都为通过SSH连接到盒子中执行命令
严格按提供包中的文件和版本,版本有差异,可能无法下一步, 自行下载,就用我提供的包中文件
「Open IP-KVM」搭建成功后,如Open IP-KVM重启了或网络中断过,浏览器中画面还是不会消失,假象,请刷新页面后使用,对了,退出控制界面为按ESC键
数据汇总
系统访问地址
  
序号
  
名称
用户
密码
描述
备注
  
  
Armbian系统
root
1234
ssh登陆

  
  
portainer
admin
adminadmin123
dockert在线web管理,并且映射对外端口8000,9000,9443
注意为https协议https://ip:9443
  
  
openkvm主程序


端口8001,后台直出视频8010
  
  
openkvm引导页


端口88

软硬件准备
所有要用到的软件与各种文件,我已上传(过期了,请评论留言),需要的自行下载:

涉及硬件:一台斐讯N1及电源适配器,,一个不小于8G大小U盘,一个HDMI显示器及HDMI线
「Open IP-KVM」独立材料:一个USB采集卡及HDMI线,一个USB-TTL,三芯以上杜邦线,一个可选配USB HUB集线器+一个独立供电电源。
常用材料:一条网线,一套键盘与鼠标
[可选]救砖用:一条双公头USB线,一个螺丝刀(拆N1用),一个镊子(短接) PS:后边2个工具是超级小白用来最后自救用的

涉及软件:斐讯T1、N1官方系统降级工具、platform-tools_r28.0.1-windows(adb工具)、Armbian_23.05.0_amlogic_s905d_jammy_6.1.25_server_2023.04.24__23042417.img.gz、
Win32DiskImager、MobaXterm(没有提供)可以用XShell或putty替代(文件上传用winscp)
源代码+mjpg-streamer源码与编译:已离线文件”open-ip-kvm-main__23042414.zip”
可选软件:USB_Burning_Tool

说明:
前期部署时,推荐U盘系统占用一个位置在机顶盒HDMI旁边,其它设备在USB-HUB集线下,包括采集卡、USB-TTL,键盘鼠标,方便调试,如果比较了较的,用第一种构建方式,也不需要USB-HUB哈,等价于后期部署模式
后期部署,如部署到eMMC内部存储上,可省略USB-HUB,采集卡、USB-TTL直接插入到二个USB口
U盘要求见后章节:关于U盘选型与供电:

「Arduino Leonardo」的大体样式

采集卡相关:
USB采集卡HDMI信号国产芯片MS2109 国产芯片解决方案MS2109HDMI/DV
芯片MS2108:参数规格:MS2108输出支持YUV和MJPEG两种模式,最大输入分辨率1080P@60Hz
我们用的就是MJPEG模式

网上图片


N1引导盘相关#23050111id:
概念:所谓开机U盘引导,通过各种方式设置为U盘引导,等价于计算机中BIOS设默一个设备引导,但没有这么可视化
根源:选排除各种U盘不兼容性来说,为N1供电USB不足,第二,开机时间短,没有在开机瞬间激活U盘供电,没有检测到设备,错过U盘启动,从eMMC引导,导致启动时不识别U盘这种假象,根源是盒子这类SOC设备,插电就开机,时间很短,不像计算机,平常都有待机电源,而且要按开关键,BIOS引导到U盘,有很长时间,设备有充分时间都准备好,所以要解决盒子各种问题,我们要做的就是满足供电,提供开机时刻有供电并保障U盘工作已就绪。

写入U盘软件:Win32DiskImager
U盘选型:U盘大于等8GB, 首先排除U盘不能为多功能,如虚拟光盘,虚拟A盘软驱导致错误其它非引导盘导致不能引导(没有计算机那么那么精细可以指定虚拟设备),速度不能过低,无坏道,有指示灯(方便观察是否引导时供电与是否在读写卡死等作用)
实践本人测试结果分几类:
第一类:最好的U盘,大约是插上去就可以引导,就没有其它事了
第二类:错过引导时间,没有及时供电
解决:
(1)开机进入正常eMMC系统中,键盘,按热键Ctrl+Alt+Del重启,不是就一直有供电,再引导就可以了
(2)在正常安桌系统中,有专门切换到线刷,如YYF系统中,有应用「切换工具」,可直接切

第三类:可以引导,但不能进入到系统
如Armbian报错,看样子是I/O问题或有坏道,
I/O error
USB 1-2: reset high-speed USB device number2

其实,我解决也很简单,解决供电不足
解决:
(1)U盘接到USB HUB(这个HUB要独立供电,即要接电源),接上U盘,等待U盘读写10秒左右,看灯没有闪为止,USBHUB接入盒子USB,盒子再通电,这样不用盒的电源,还解决扩展USB口的目的
(2)[没有验证]USB口焊接电容,参考https://www.right.com.cn/forum/thread-901586-1-1.html

一些我测试案例
第一类:闪迪Extreme 64GB  型号:SDCZ80-064G
第二类:台电64G
第三类:maxell 16GB 3.0

经过本次测试,上面三种处理方式,还没有遇到不成功的,非常棒,我看到好多网友为这个事到处询问哈,其实很简单

参考:
[N1盒子] 两颗电容治好N1挑U盘的毛病
https://www.right.com.cn/forum/thread-901586-1-1.html
硬件连接
USB-TTL设备与「Arduino Leonardo」用杜邦线连接,TX接RX,RX接TX,GND接GND

「Arduino Leonardo」的USB口接需要控制的目标机
采集卡HDMI输入接需要控制目标机的HDMI输出接口

检测系统中新增设备
root@armbian:~# lsusb
没有插入设备前
插入调备,多个2-4设备,4为HUB集线器

系统中查看/dev目录
用ls去查看对应实际挂载设备,实际中输入”ls /dev/video”,此时按Tab键即可探测有那些后缀的设备

ttyUSB0为USB串口,即USB-TTL设备
ls /dev/tty*
ls /dev/video*

视频采集卡视频采集卡
ls /dev/video*

提示:可通过插入/断开反复,确认新采集卡设备,USB-TTL设备

这里新增video1,video2,之前都有video0,实测video1能调用,官方的源码调用为video0
扩展知识:
后查资料,这新增的二个video设备,很可能这个采集卡两种输出模式对应的设备:MJPEG, YUV422,我们要用的是其中的MJPEG编码,USB视频符合UVC1.0协议,即常规上的免驱动(linux+windows等主流系统)
UVC全称为USB VideoClass,即:USB视频类,是一种为USB视频捕获设备定义的协议标准。是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,已成为USB org标准之一。
如今的主流操作系统(如WindowsXP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 and later)都已提供UVC设备驱动,因此符合UVC规格的硬件设备在不需要安装任何的驱动程序下即可在主机中正常使用。使用UVC技术的包括摄像头、数码相机、类比影像转换器、电视棒及静态影像相机等设备
UVC设备都是多Interface设备,这点同普通的u盘不同。UVC设备最起码有两个Interface,VideoControl(VC)Interface和VideoStream(VS) Interface; 这也是最常见的UVC设备。 Spec明确要求一个具有可用的,具有实际UVC功能的设备要有一个VC Interface,一个或多个VS Interface。
上传单片机键鼠模拟HID固件
模拟 HID 采用 Arduino Leonardo,有成熟的库和实例代码,硬件如图样式
说明:我买的这个出厂已带BL,用于与ArduinoIDE交互上传的基础,一般都有,没有的话,无法上传固件
安装Arduino IDE,离线包中文件为“arduino-ide_nightly-20230424_Windows_64bit.zip”
启动Arduino IDE,打开源代码中文件”virt-hid-arduino\virt-hid-arduino.ino”
安装库文件:「Tools」 Manage Libraries
搜索”mouse”,安装出现的两个库文件“Mouse”、”Keyboard”
连接「Arduino Leonardo」的USB到计算机,设备管理中新增一个串口设备,
在Arduino IDE中,工具栏中下拉,选择对应新增的COM,这里是COM9
正确后,右下角提示已连接完成

执行「Sketch」 Upload
上传成功后,调试窗体返回设备代码0x44

盒子刷新为Armbian操作系统
描述:
利用Andorid的adb功能升级,等于计算机上BISO设置U引导
系统每次用U盘引导使用

Armbian是一种专用于arm处理器架构的Debian操作系统
这里简单讲解刷新过程,其它情况比较多,参考此节下面的参考网址,很详细

N1为原厂系统未做过其它操作:
N1系统情况一:版本高于XXX,要降级,才用开启adb功能

运行文件:斐讯T1、N1官方系统降级工具中的onekey文件夹,打开run.bat

对应文件放包里了
其它略,B站视频很有用(见后)

视频中流程原理:
主板上短接线刷触点,开启强制线刷
从官改版刷新,不行,再刷新官方固件,这样顺序可避免反复开启线刷功能

参考:
[N1盒子] N1救砖三大方法(新增N1T1技术交流群)

解密:斐讯N1为何火了?分享全套N1救砖指南!值得收藏

N1盒子刷Armbian,看这一篇就够了——Armbian全方位安装指导书
【斐讯 N1】手把手教你刷Armbian安装博纳云,从降级开始V1.1【开机自启博....-博纳云(BonusCloud)-恩山无线论坛 -Powered by Discuz!.html
https://www.right.com.cn/forum/thread-343482-1-1.html
篇2
【斐讯N1】开始将第二台N1刷Armbian,安装博纳云。
https://www.right.com.cn/forum/thread-343625-1-1.html

下面这部分降级有水印区引用恩山内容,偷个懒,在此一并感谢
【操作步骤】
1.N1 系统版本号大于 V2.22 的都需要降级,否则不能刷机。
首先接通电源、显示屏、鼠标网线和双公数据线,进行降级操作


开机后快速连续点击固件版本一栏四下打开 adb。


进入斐讯T1、N1官方系统降级工具中的onekey文件夹,打开run.bat。

果断选择2,输入自己盒子的IP地址,如果没有开启adb,现象如左边所示,正常开启是右边的现象

按任意键可以关闭了

降级完成后开机显示的固件版本依然显示的是和之前的一样的,不过不用担心,这里的降级是降级引导等关键分区,所以系统版本那里是不会变的。

确保恢复到官方固件后
开机后快速连续点击固件版本一栏四下打开 adb

接下来还是要知道斐讯N1的IP地址,可以通过显示屏,也可以通过路由器查看,或都PC机打描
通过SSH协议,可用软件有putty,MobaXterm都可以连接到盒子,这里IP按实际改,adb程序在「斐讯T1、N1官方系统降级、刷机工具\onekey\data」中
adb.exe connect 192.168.2.34
adb.exe shellreboot update
执行完成后,盒子重启启动,用U盘引导, adb.exe shell reboot update等价电脑设置U盘引导功能


参考:
[N1盒子] 小白教程,N1安装OMV+HA控制斐讯系+aria2远程下载,附送刷回盒子教程

【斐讯 N1】手把手教你刷Armbian安装博纳云,从降级开始V1.1【开机自启博....-博纳云(BonusCloud)
制作U盘引导盘
制作U盘启动盘刷入Armbian
这里下载比较的固件Armbian_23.05.0_amlogic_s905d_jammy_6.1.25_server_2023.04.24__23042417.img.gz
解压,确保扩展名为img
启用Win32DiskImager软件,选择镜像文件写入U盘,注意盘符,如有U盘有多区,选删除,重分区为一个,格式化,这里才能选盘符

写完后,必须从任务栏下方安全弹出U盘,不然有可能文件没有安全写入到U盘中,无法引导

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| | 显示全部楼层
本帖最后由 yuly 于 2023-5-8 07:51 编辑

Armbian基本操作
到这里就说明已从U盘引导,所有操作用SSH登陆盒子操作,我用的MobaXterm,盒子HDMI接的显示器提示符不理会,直接远程初始配置
如果没有接显示器,查看IP方式,最简单是登陆路由器查看DHCP分配情况,也可以用” SoftPerfect Network Scanner”扫描网段里的设备,主机名为armbian
Armbian系统引导后,输入用户名:root 密码:1234
SHELL选择1 BASH
按Ctrl+C中止输入接下来的用户信息


首先说明,都是基于项目的源代码优化被封装被放入docker运行(除第三种方法自编外)
我已经修改的部分文件说明:
一、 主功能中,部分JS脚本文件为调用互联网中的路径,已下载离线,不联网也可以使用
二、 修改默认8000端口为8001,让出8000端口为Portainer使用
三、 增加「Open IP-KVM」引导页,用docker独立容器,方便后期看基本信息,记住端口88
四、 “yuly”目录为组件的预处理,主要是mjpg-streamer已经编译好了,可以直接使用,这个目录也可以不上传,自行手动编译(第三种构建方式)

下面介绍三种构建与运行「Open IP-KVM」
从简单到复杂来划分哈
第一种构建方法:写入定制完成的「Open IP-KVM」到eMMC运行,后续无需U盘
第二种构建方法:导入制作好的docker镜像导入运行即可
第三种构建方法:手工完成「Open IP-KVM」所有docker构建与mjpg-streamere编译
下面按需自行跳转到对应章节中,OK
第一种构建方法:写入定制完成的「Open IP-KVM」到eMMC运行,后续无需U盘
描述:写入eMMC内部存储后,相当稳定,就不能再有安卓电视系统,运行也很快,两个USB正好接采集卡与USB-TTL,可省略USB HUB集线器,后期也可以违禁词语,请勿再发U盘引导运行其它系统,不影响当前系统,比较灵活
上手难度:非常简单,U盘引盘,只需要一条恢复镜像命令即完成所有流程,就可以使用「Open IP-KVM」,你说方不方便。
那么我们来看一下,是不是这样的
1.上传需还原到eMMC内部存储的镜像文件至U盘
把包中文件“从eMMC导出的含openipkvm2023-05-01_BACKUP-arm-64-emmc.img.gz”直接拖放至U盘/ddbr目录(文件名中日期可能不一样看你下载的),通过网络完成复制,名称更名为” BACKUP-arm-64-emmc.img.gz”

2.还原镜像到eMMC内部存储
在U盘上的Armbian系统中,运行ddbr,选择r,即可恢复,典型文件名” BACKUP-arm-64-emmc.img.gz”,大小1GB左右,解压为7.2G左右,即eMMC大小全备份


最后,同步缓存,关机完成(推荐这样),其实直接断电也行
root@armbian:/ddbr#sync
root@armbian:/ddbr# poweroff
3.测试使用
拔下U盘,在二个USB口接入”采集卡”与”USB-TTL”,通电自动从eMMC内部存储引导就可以使用,收工
注意:
如果端口88能启用,而8001不能说,表明,openipkvm这个容器没有成功引导,原因在于对应硬件没有接好,或设备名称检测到的与默认有区别,改为正确的即可,参考:章节「硬件连接」
解决方法:参考第二种构建方法中的删除容器再新建即可,即命令docker stop, docker rm, docker run

第二种构建方法:导入制作好的docker镜像导入运行即可
描述:U盘上的Armbian系统安装docker后,导入制作做好的镜像到docker中,建立对应容器运行即可,过程简单,就是要花费时间多一点,此方案为U盘占一个USB口,另一个接USB HUB集线器,再下挂采集卡与USB-TTL,如果遇到供电U盘(U盘原因)不足,U盘下挂在HUB下并独立供电(先插入U盘在HUB上,供电10秒钟以上等U盘初始化完成,再开机盒子)此方案能保留原安卓系统,要使用做「Open IP-KVM」功能时,插上此U盘+违禁词语,请勿再发设备即可使用,灵活。

上手难度:简单,U盘引盘,在建立docker容器不成功时,可能要反复删除,创建,掌握方法哈

(1)安装软件docker、docker的容器管理Portainer
armbian-software
先安装101,对应docker
输入101,再输入安装源在那个站,这里输入2采用 阿里云 下载

ID    NAME                      STATE           MANAGE
--------------------------------------------------------------
101   Docker                    not-installed   install
102   Portainer                 not-installed   install



安装成功

再次运行
armbian-software
输入102,对应安装” Portainer”


查看docker中已新增一个镜像,名称为”/portainer/portainer-ce“
docker images

并且已实例化一个容器,名称”portainer”,并且映射对外端口8000,9000,9443,
docker ps

访问portainer,格式为: https://ip:9443,我这里面为https://192.168.5.185:9443  按自已获取或设置IP访问
转到浏览器中,点击下方的“继续”,因为没有证书,忽略


登陆到系统,提示第一次,要重新一下docker容器Portainer实例才能继续,主要安全原因


返回到SSH
dockerrestart portainer

在浏览器中再次访问上面的址址
输入用户信息
用户名:admin  密码:adminadmin123


(2)上传与创建docker容器
2.1上传源代码与库到宿主
两种生成源代码与mjpg-streamer方法
2.1.1方式一:上传已修改好的源码与已编译mjpg-streamer文件

上传OpenIP-KVM源代码到盒子目录“/app/open-ip-kvm/”下
包中文件为” open-ip-kvm-main前缀文件夹或压缩包,解压后上传


2.1.2方式二:自行下载Open IP-KVM上的源码与手动编译mjpg-streamer
去「OpenIP-KVM」官网地址https://github.com/Nihiue/open-ip-kvm下载即
其中mjpg-streamer在第三种构建方法中有说明

2.1.3上传文件
建立应用目录” open-ip-kvm”
mkdir-p /app/open-ip-kvm

这里演示用MobaXterm软件上传,直接拖放就可以了,软件网上找
最终结构如下:

ls /app/open-ip-kvm/

2.2加上” mjpg-streamer”执行权限
chmod -R +x/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental/

2.3构件容器
创建一个docker容器,并把盒子中的部分设备映射到docker中,达到匹配源码中的默认设备参数配置,少做修改,默认源代码采集卡为/dev/video0,TTL为/dev/ttyUSB0
参数说明:
--device参数,前面为物理设备,冒号后面为映射到容器中名称,只需要修改前部分为实际
检测设备名称方法:参考:章节「硬件连接」

检测到的设备名称可能不一样,按需修改,我这里为:
/dev/video1映射至docker中的video0上,  原都有/dev/video0,插入采集卡多了1,2
/dev/ttyUSB0映射至docker中的ttyUSB0上

-v参数表示宿主机目录映射到容器中,以冒号(:)为两部分,前面为宿主机目录,冒号后为挂载到容器中指定目录

下面介绍二种构件容器的方法:
一是导入我已制作的docker镜像导入到系统中,直接运行
二是从手动docker hub中拉取node镜像,含后面mjpg-streamere服务都全部处理

2.3.1方法一:导入制作好的docker镜像导入运行即可
上传包中的openipkvm-dockerXXX.tar(此文件后缀时间在尾)到/root目录


导入镜像到docker中
注意修改实际openipkvm-dockerXXX.tar文件在命令行中tar名称
cd /root
ls
cat openipkvm-docker.tar | docker import -yuly/openipkvm:latest
docker images



导入后,删除上面的openipkvm-dockerXXX.tar文件,空间很有限

2.3.1.1创建引导页容器
创建「Open IP-KVM」引导页docker容器, 容器名称为” openipkvmguide”
dockerrun -d --restart=always -it  -v  /app/open-ip-kvm:/app/open-ip-kvm -w"/app/open-ip-kvm/yuly/guide/" --name openipkvmguide -p 88:88yuly/openipkvm /bin/bash -c "npm start"




2.3.1.2创建openipkvm容器
创建「Open IP-KVM」主程序docker容器,容器名称为”openipkvm”
dockerrun -d --restart=always -it -ePATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"-eLD_LIBRARY_PATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental"-v  /app/open-ip-kvm:/app/open-ip-kvm -w"/app/open-ip-kvm/" --device=/dev/ttyUSB0:/dev/ttyUSB0--device=/dev/video1:/dev/video0 --name openipkvm -p 8001:8001 -p 8010:8010yuly/openipkvm /bin/bash -c "npm start"
查看docker容器建立情况
docker ps

推荐最开始就用这个方法,不永久建立容器,Ctrl+C中止即删除容器,方便反复调试
原理是:替换上面docker run,加了--rm,表运行退出即删除容器,删除--restart=always关键字
dockerrun --rm -it -ePATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"-e LD_LIBRARY_PATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental"-v  /app/open-ip-kvm:/app/open-ip-kvm -w"/app/open-ip-kvm/" --device=/dev/ttyUSB0:/dev/ttyUSB0--device=/dev/video1:/dev/video0 --name openipkvm -p 8001:8001 -p 8010:8010yuly/openipkvm /bin/bash -c "npm start"

进入调试容器或正常运行都可以按这个套路
docker exec -it openipkvm/bin/bash

实践操作中,很多时候,很多都不是一次就创建并进入容器,如没有找到目录,对应设备没有找到,而此时,再创建,就会报错,此时是创建了对应的容器,需要先停止(如果已期运行了),再删除,再创建,原因为有同名,可能过程有点反复
处理方法
root@armbian:~# docker stopopenipkvm
root@armbian:~# docker rmopenipkvm

提示:
用下面的方法,
注意,这个命令,不会保存容器设置数据,正确进入容器,还是用上面一条命令在容器内操作
docker run --rm -it -v  /app/open-ip-kvm:/app/open-ip-kvm--device=/dev/ttyUSB0:/dev/ttyUSB0 --device=/dev/video1:/dev/video0 --nameopenipkvm -p 8000:8000 -p 8010:8010 node /bin/bash


典型报错:
已有同名的容器
处理方式:停止(运行中),再删除
docker: Error response fromdaemon: Conflict. The container name "/openipkvm" is already in use bycontainer"40ee573d8755040ba4b2375e71a114abc1edcc3b46a076cfb1aa1f234281aefc".You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.


端口并占用,用docker ps可以查看那个容器占用
docker: Error response fromdaemon: driver failed programming external connectivity on endpointopenipkvm-test(0ef305fd8840d181a12e85f391765870f9cfc3d7a2bb6e981237c2e18702b764): Bind for0.0.0.0:8000 failed: port is already allocated.
ERRO[0000] error waitingfor container:


错误实例,这个是当时,我还没有接串口,提示找不到串口设备,无法继续,当容器实例已创建
docker: Error response fromdaemon: error gathering device information while adding custom device"/dev/ttyUSB0": no such file or directory.
ERRO[0000] error waitingfor container:


一些规律:
创建容器提示没有正常,如端口冲突这类,其实容器还是建立了,再建就出错,处理方法是删除容器,再创建


到此,可以访问了
OK后
同步一下缓存,重启看一下效果
sync
reboot


第三种构建方法:手工完成「OpenIP-KVM」所有docker构建与mjpg-streamere编译
先执行「第二种构建方法:导入制作好的docker镜像导入运行即可」中的第一小节 「(1)安装软件docker、docker的容器管理Portainer」

再继续下面的操作
建立应用目录” open-ip-kvm”
mkdir-p /app/open-ip-kvm

(1)手动docker hub中拉取node镜像
3.1.1下拉node容器
拉取docker中的nodejs容器
docker pull node

查看下载是否成功,名称为”node”
dockerimages


3.1.2测试是否正常能运行容器:
创建容器通过node镜像
dockerrun -itd --name node-test node

进入才创建的容器查看nodejs的版本并退出,注意进入容器后,命令提示符主机名改变了为一串字符,非armbian,这里是”5efb61dc2ef1”,表当前进入了容器,所有命令,则生效为当前容器,退出当前容器,exit命令,命令提示符变为armbian,表当前操作为宿主机,我们进去看一下容器情况
docker exec -it node-test /bin/bash
root@6c5d265c68a6:/#node -v
exit


停止并删除测试容器
dockerstop node-test
dockerrm node-test


3.1.3创建” Open IP-KVM”容器
名称为:openipkvm
基于node镜像构建
先做测试版容器,后期调整为正式版,方便反复调试
docker run -it -ePATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"-e LD_LIBRARY_PATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental"-v  /app/open-ip-kvm:/app/open-ip-kvm -w"/app/open-ip-kvm/" --device=/dev/ttyUSB0:/dev/ttyUSB0--device=/dev/video1:/dev/video0 --name openipkvm -p 8001:8001 -p 8010:8010 node/bin/bash

创建成功后,直接进入容器中的命令行,注意,提示主机名已不是armbian,要退出,可输入命令exit当前容器
或者,后期用这个命令来调试,把”/bin/bash”改为” /bin/bash -c "npmstart" “,删除参数”--rm”当所有容器内所有配置与编译完成,默认就不进入容器,执行容器中命令”npm start”,按Ctrl+C即中止,并且删除容器,很方便,不需要反复停止,删除,创建容器
dockerrun --rm -it -e PATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"-eLD_LIBRARY_PATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental"-v  /app/open-ip-kvm:/app/open-ip-kvm -w"/app/open-ip-kvm/" --device=/dev/ttyUSB0:/dev/ttyUSB0--device=/dev/video1:/dev/video0 --name openipkvm -p 8001:8001 -p 8010:8010node /bin/bash -c "npm start"

如果系统重启了,或退出了容器,进入容器继续操作:
docker exec -it openipkvm /bin/bash


下面这部分,没有说明,即在容器中操作
安装源代码nodejs中相关需求js模块文件
cd/app/open-ip-kvm/
npminstall
ls
自动新增目录为”node_modules”


一些实践中错误情况:参见 「2.3.1方法一:导入制作好的docker镜像导入运行即可」

参考:
node- Official Image _ Docker Hub https://hub.docker.com/_/node

(2)搭建mjpg-streamer服务
3.2容器配置
搭建mjpg-streamer服务有两种方式:
方式一:直接利用我已编译好的
方式二:源码编译

下面的操作全部在新建的docker容器中操作

我修改的源代码中,已经有我已经编译好的,在源代码目录下” yuly\mjpg-streamer\mjpg-streamer-experimental\”,自行编译,也放在此目录中


第一步 更新系统
先更新系统,不然无法安装后面的库
apt-get update


第二步 加入环境变量
(这步是可选的,实际dokcer运行时,通过参数设备的环境变量,这里加,主要是建立命令中没有-e参数,等价,要注意每次进入容器都要执行一次)
其它程序能调用要如下处理,加环境目录
exportPATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental/:$PATH"
exportLD_LIBRARY_PATH="/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental/:$PATH"

3.2.1构建mjpg-streamer方式一:利用已编译好的模块
3.2.1.1安装库组件
最少要安装库
apt-get install libv4l-dev


检查:/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental目录已编译好的so等相关文件

测试mjpg-streamer服务器
注意退出容器后,要再次测试,如果建立docker参数中没有-e参数,每次进入都要执行 「第二步 加入环境变量」,默认不需要了,建立容器,已写好了-e对应参数

mjpg_streamer -i "input_uvc.so"-o "output_http.so -p 8010 -w/app/open-ip-kvm/yuly/tmp/mjpg_streamer"
访问地址,IP地址后加?action=stream
默认没有指定分辨率,自动为640*480



按Ctrl+C结束测试


3.2.2构建mjpg-streamer方式二:手动编译
第一步 安装依赖库

apt-get update
apt-getinstall subversion

apt-getinstall libjpeg62-turbo-dev
目前这个库没有,不安装apt-get install libjpeg8-dev,安装的libjpeg62-turbo-dev

apt-getinstall imagemagick
apt-get install libv4l-dev
apt-getinstall cmake
apt-getinstall git

libv4l-dev和libjpeg8-dev是依赖的库。Subversion和ImageMagick是编译mjpg-steamer源代码需要用到的。

第二步 下载编译安装mjpg-streamer视频服务器软件
方式一:直接利用包中的源码编译
mkdir-p /app/open-ip-kvm/yuly/tmp/mjpg_streamer
cd/app/open-ip-kvm/yuly/mjpg-streamer/mjpg-streamer-experimental
makeall
makeinstall

方式二:官网下载源码编译
mkdir -p /app/open-ip-kvm/yuly/tmp/mjpg_streamer
cd /app/open-ip-kvm/yuly/
cdmjpg-streamer/mjpg-streamer-experimental
make all
make install

执行上面方式一中的:
第三步 [可选] 3.2容器配置 中的 “加入环境变量”
第四步 测试mjpg-streamer服务


参考:
在armbian下搭建mjpg-streamer服务

转载:mjpg-streamer HTTP 代码集锦

(3)整体测试
最后,手动测试一下,在容器内是否能正常启动程序
开启服务
开启nodejs服务
cd/app/open-ip-kvm/
npmstart


访问
访问地址,IP地址后加端口号8001
可以看到,在1080P30帧情况下,图像纯色情况,大约30Mbps左右,图片复杂情况下100Mbps,的确很吓人
单击一下,进行控制,按ESC,脱离控制
批量发送文字到远端,单击浮动工具栏中第三个图标
支持触控板双指滑动等操作,非常好用

反应速度还是非常快

(4)转为正式环境容器
到这里,前面的坑都补完了,删除测试容器,转为正式永久
前面的建立容器的代码,无论那种方式,都删除容器”openipkvm”,按「2.3.1.2创建openipkvm容器」创建永久开机自起动容器”openipkvm”
设备固定IP与起始页
无论什么时候,都优先访问 http://ip地址:88 引导页,里面信息方便访问其它服务,特另是后如果系统更新,在此页面也会有体现,网上教程不一定更新
如果想在没有DHCP(自动分配IP)的环境地方使用,可以设备静态IP
运行命令
armbian-config

选择“Network”即配置动态/静态IP地址,同样可以以无线方式连接,建立访问点,自已充当一个AP,手机直接连接盒子都可操控远端,蓝牙也可以这里配置

其它
扩展:
如果想接VGA信号远程控制,在HDMI输入前,加一个VGA转HDMI转换器即可,也可以直接购买VGA采集器(内部也是VGA转HDMI,再HDMI采集,性价比不是很高)

已在远程传输视频情况下资源利用


没有传输情况下,少了5MB,没有什么区别

好了,我是yuly,祝各位一次测试成功!!有任何相关问题,评论区见。

后记:整个项目完成后,发现此盒真的强(已写入YYF的安卓系统),我家里的电视遥控器,什么都不设备,都可以直接控制此机顶盒,而且原电视其它主页功能保留,完美融合,只有返回不能,有点遗憾,可能后期还是要再买个网络蓝牙遥控器

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

 楼主| | 显示全部楼层
占楼,
修正与通知
回复

使用道具 举报

 楼主| | 显示全部楼层
占楼,
反馈FAQ
回复

使用道具 举报

Mark.?备用
回复

使用道具 举报

解锁N1新玩法,生产力工具,BIOS级别远程管理Open IP-KVM [修改]
回复

使用道具 举报

支持大佬,等了好久了,大佬幸苦
回复

使用道具 举报

新奇特玩法,可以试试
回复

使用道具 举报

虽然我不懂 但是我大受震惊
回复

使用道具 举报

dingtie ,看看
回复

使用道具 举报

好用吗??
回复

使用道具 举报

顶楼主啦..希望楼主多发精品好帖啦.....
回复

使用道具 举报

顶楼主啦..希望楼主多发精品好帖啦.....
回复

使用道具 举报

虽然看不懂,但是我觉得很牛
回复

使用道具 举报

另外建议大佬带个使用视频,好多网友不知道是干嘛用的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-21 12:00

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表