进阶篇,群晖DSM 非docker部署homebridge

看了homebridge的介绍,觉得很给力有木有,拉低接入homekit的成本有木有?
但是问题来了,我的群晖不支持docker怎么办?
市面上所有的文档都是群晖docker部署,或者是树莓派部署?
有群晖为什么还要单独买一个树莓派??多此一举嘛,所以,没有docker的同学们赶快上车了!!!
首先我说一句用的是ds261j, 看到这里同款的苦于没有docker的同学们,激不激动?
1.部署chroot
2.安装基础软件
3.安装homebridge及相关插件
4.常用插件
5.群晖后台启动

有问题微博联系 http://weibo.com/1147593092/profile

1.部署chroot
参考树莓派的部署方案,首先群晖要能装软件,但群晖套件里就只有那么几个软件,查阅各种资料之后发现了群晖可以按下面的方式安装第三方套件,而且套间里有牛逼的debian chroot,
群晖安装 apt-get

登录到DSM—“套件中心”—“设置”—“套件来源”—点击“新增”

在弹出的界面中填入以下地址,并确定。
这样第三方套件地址就添加好了

安装debian chroot

 

ssh到启动自己的nas上,执行:
sudo /var/packages/debian-chroot/scripts/start-stop-status chroot

懂的人后面应该就不用我说了,哈哈。

 

2.chroot装好后那我们就可以正式的安装homebridge基础 环境了

安装基础依赖的软件,另外由于我们是通过chroot环境安装基础软件,所以后续所有安装执行操作都要在chroot环境下完成,启动脚本除外,执行下面的命令就可以切换到root环境:

sudo /var/packages/debian-chroot/scripts/start-stop-status chroot

 切换到root后执行基础软件的安装

apt-get update
apt-get install libavahi-compat-libdnssd-dev
apt-get install avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev
apt-get install update-alternatives
apt-get install git make
apt-get install g++

安装nodejs,这里我是下载的最新的nodejs 8.0.0,由于我的系统是群晖armv7,所以安装下面的版本,其他版本请在node官网上找对应版本。

wget https://nodejs.org/dist/v8.0.0/node-v8.0.0-linux-armv7l.tar.gz
tar xJvf node-v6.11.0-linux-armv7l.tar.xz
sudo mkdir -p /volume1/@appstore/debian-chroot/var/chroottarget/opt/node/
sudo mv node-v6.11.0-linux-armv7l/* /volume1/@appstore/debian-chroot/var/chroottarget/opt/node/
sudo /var/packages/debian-chroot/scripts/start-stop-status chroot
update-alternatives --install "/usr/bin/node" "node" "/opt/node/bin/node" 1
update-alternatives --install "/usr/bin/npm" "npm" "/opt/node/bin/npm" 1

安装python


apt-get install python2.7
export PYTHON=/usr/bin/python2.7

 

3.安装homebridge


npm install -g --unsafe-perm hap-nodejs
npm install -g --unsafe-perm node-gyp
npm install -g --unsafe-perm homebridge

 

期间遇到的各种错误,及其解决方案:

未找到python执行文件,需要将你的python目录添加到path环境变量中,例如我这里装的是python,就要添加对应的执行文件到path里,可以通过直接在命令行中输入python检查是否配置成功

export PYTHON=/usr/bin/python2.7
这个错误是网络问题,遇到这种情况重试即可,如果反复都不可以就试着清空缓存再试。始终不行的话你就要先研究下科学上网的方法,这里不做赘述。
清理缓存方法:

npm cache clean -f

遇到最恶心的错误,相信50%的人在完成上面复杂的工序之后,开心的执行homebridge命令会遇到下面的问题,我吭哧吭哧研究了2个礼拜,几乎翻遍的github,之前一直没找到方法,甚至被逼到换windows平台去部署homebridge,但最后还是卡在了这个坑爹的错误上!!!what a fuck!!! 但好在功夫不负有心人,终于研究明白这个错误了,请往下看。

Scan this code with your HomeKit App on your iOS device to pair with Homebridge:

┌────────────┐
│ 031-45-154             │
└────────────┘ 
/usr/lib/node_modules/homebridge/node_modules/mdns/lib/advertisement.js:56 dns_sd.DNSServiceRegister(self.serviceRef, flags, ifaceIdx, name, ^ Error: dns service error: unknown at new Advertisement (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/advertisement.js:56:10) at Object.create [as createAdvertisement] (/usr/lib/node_modules/homebridge/node_modules/mdns/lib/advertisement.js:64:10) at Advertiser.startAdvertising (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Advertiser.js:43:30) at Bridge.Accessory._onListening (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:555:20)
首先遇到错检查一下这几个包是否都已经正确安装

apt-get install avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev
上面那个错误的主要就是因为dbus-daemon、dbus、avahi-daemon这三个个东西没启动对,解决思路是启动homebridge前吧这三个进程都重启,对原因就是这么简单!

dbus-daemon --system
/etc/init.d/dbus restart
service avahi-daemon start
启动homebridge前重启上面进程,homebridge是不是就可以欢快的跑起来了呢??
4.常用插件
我这里简单整理了一下:
博联科技 homebridge-broadlink-rm
小米网关 homebridge-aqara
论坛里的空气质量插件 homebridge-airnow
ip摄像头插件 homebridge-camera-ffmpeg
5.群晖后台启动
最后,由于我们的homebridge是跑在nas上的,怎么让他在后台启动呢?
chroot环境下的启动脚本

#!/bin/bash
# LANCEMENT DES SERVICES DBUS, AVAHI, HOMEBRIDGE
# RUNNING DBUS, AVAHI AND HOMEBRIDGE SERVICES
export N_PREFIX="$HOME/n"; [[ :$PATH: == *":$N_PREFIX/bin:"* ]] || PATH+=":$N_PREFIX/bin"
rm -r /var/run && rm -r /var/lock && ln -s /run /var/run && ln -s /run/lock /var/lock && rm /run/dbus/*
dbus-daemon --system
/etc/init.d/dbus restart
service avahi-daemon stop
service avahi-daemon start
#avahi-daemon -D
/root/n/lib/node_modules/homebridge/bin/homebridge
nas用户态的启动脚本

#!/bin/sh
#
# Put this file in your path homebridge.sh

case "$1" in

stop)
echo "Stop Homebridge …"
pkill -f homebridge
;;

start)
nohup chroot /usr/local/debian-chroot/var/chroottarget su - root -c "/root/.homebridge/run.sh" >>/volume1/1.log 2>>/volume1/2.log &
;;

restart)
$0 stop
sleep 1
$0 start
;;

status)
ps | grep homebridge
return $?
;;

*)
echo "usage: $0 { start | stop | restart | status}" >&2
exit 1
;;

esac

 

最后到群晖控制台中添加计划任务:

 

 

发表评论