估计是重装iobroker后,把之前备份的iobroker整个文件夹覆盖到新系统,导致无法升级js-controller和其他io插件。
常规方式执行以下命令升级无果
sudo apt update && sudo apt upgrade
sudo killall -u iobroker
iobroker stop
iobroker update
sudo iobroker upgrade self
提示类似以下错误:
Update js-controller from @3.1.4 to @3.1.5
npm ERR! code EEXIST
npm ERR! path /opt/iobroker/node_modules/iobroker.ham/node_modules/.bin/miio
npm ERR! Refusing to delete /opt/iobroker/node_modules/iobroker.ham/node_modules/.bin/miio: is outside /opt/iobroker/node_modules/iobroker.ham/node_modules/miio and not a link
npm ERR! File exists: /opt/iobroker/node_modules/iobroker.ham/node_modules/.bin/miio
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/iobroker/.npm/_logs/2020-06-08T07_14_22_300Z-debug.log
尝试手动删除文件夹下存在的.bin/miio等文件,依然无果。
手动重装iobroker.js-controller3.1.5版,依然提示以上错误,无果。
npm install iobroker.js-controller@3.1.5 --loglevel error --unsafe-perm --prefix --force
sudo npm install -g npm
按照官方教程进行整个iobroker修复:
curl -sL https://iobroker.net/fix.sh | bash -
成功后继续按照官方输入命令:
cd /opt/iobroker
iobroker stop js-controller
npm install iobroker.js-controller
提示新的错误:
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated mkdirp@0.3.5: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})
npm WARN tsutils@3.17.1 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta but none is installed. You must install peer dependencies yourself.
npm ERR! code EEXIST
npm ERR! path /opt/iobroker/node_modules/iobroker.ham/node_modules/.bin/mkdirp
npm ERR! Refusing to delete /opt/iobroker/node_modules/iobroker.ham/node_modules/.bin/mkdirp: is outside /opt/iobroker/node_modules/iobroker.ham/node_modules/mkdirp and not a link
npm ERR! File exists: /opt/iobroker/node_modules/iobroker.ham/node_modules/.bin/mkdirp
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/iobroker/.npm/_logs/2020-06-14T01_48_01_794Z-debug.log
然后尝试增加--force:
npm install iobroker.js-controller --force
提示升级成功!:
npm WARN using --force I sure hope you know what you are doing.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated mkdirp@0.3.5: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
> iobroker.js-controller@3.1.5 preinstall /opt/iobroker/node_modules/iobroker.js-controller
> node lib/preinstallCheck.js
NPM version: 6.14.5
> osx-temperature-sensor@1.0.7 install /opt/iobroker/node_modules/osx-temperature-sensor
> node-gyp rebuild
make: 进入目录“/opt/iobroker/node_modules/osx-temperature-sensor/build”
SOLINK_MODULE(target) Release/obj.target/none.node
COPY Release/none.node
make: 离开目录“/opt/iobroker/node_modules/osx-temperature-sensor/build”
> fsevents@1.2.12 install /opt/iobroker/node_modules/zigbee-herdsman/node_modules/fsevents
> node-gyp rebuild
make: 进入目录“/opt/iobroker/node_modules/zigbee-herdsman/node_modules/fsevents/build”
SOLINK_MODULE(target) Release/obj.target/.node
COPY Release/.node
make: 离开目录“/opt/iobroker/node_modules/zigbee-herdsman/node_modules/fsevents/build”
> iobroker.js-controller@3.1.5 install /opt/iobroker/node_modules/iobroker.js-controller
> node iobroker.js setup first
Existing earlier generated certificate is invalid (too old, validity longer then 345 days or keylength too short). Generating new Certificate!
object system.certificates updated
npm WARN tsutils@3.17.1 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta but none is installed. You must install peer dependencies yourself.
+ iobroker.js-controller@3.1.5
added 72 packages from 32 contributors, removed 102 packages, updated 14 packages and moved 10 packages in 63.392s
60 packages are looking for funding
run `npm fund` for details
然后运行iobroker
iobroker start
在web里看到主机升级3.1.5成功了:
手动再升级其他插件,也没问题了。