分享

解锁N1新玩法,生产力工具,BIOS级别远程管理Open IP

 新用户60261Q8L 2023-05-10 发布于广西
 本帖最后由 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./_/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的安卓系统),我家里的电视遥控器,什么都不设备,都可以直接控制此机顶盒,而且原电视其它主页功能保留,完美融合,只有返回不能,有点遗憾,可能后期还是要再买个网络蓝牙遥控器

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多