INOTIFY – 监听事件

Linux 2.6.13 内核中引入了新的文件系统变化通知机制 inotify ,使用该特性提供的用户态调用 api ,可以方便的完成文件变化监听。

各种语言基本都提供了对该接口的调用方法: C 不必多说, Perl 使用 [Linux::Inotify2](https://metacpan.org/pod/Linux::Inotify2) , Golang 使用 golang.org/x/sys/unix , Python 则使用 [pyinotify](https://github.com/seb-m/pyinotify) 即可完成调用。

这里汇总所有相关监听事件,理论上针对所有语言通用:

 *            IN_ACCESS         文件被访问
 *            IN_ATTRIB         文件属性发生变化(文件元数据改变, 如权限, 链接计数, 扩展属性, 用户ID或组ID等)
 *            IN_CLOSE_WRITE      关闭以write方式打开的文件
 *            IN_CLOSE_NOWRITE  关闭以非write方式打开的文件
 *            IN_CREATE         在受监控目录内创建了文件/目录
 *            IN_DELETE         在受监控目录内删除了文件/目录
 *            IN_DELETE_SELF    被监测的文件/目录被删除
 *            IN_MODIFY         文件被修改
 *            IN_MOVE_SELF      移动受监测的文件或目录
 *            IN_MOVED_FROM     文件移出被监测的目录
 *            IN_MOVED_TO         文件移入被监测的目录
 *            IN_OPEN             文件被打开
 * --------- 上述flag的集合
 *            IN_ALL_EVENTS     以上所有flag的集合
 *            IN_MOVE             IN_MOVED_TO + IN_MOVED_FROM
 *            IN_CLOSE          IN_CLOSE_WRITE + IN_CLOSE_NOWRITE
 * --------- 不常用的flag
 *            IN_DONT_FOLLOW      不对符号链接解引用, 监控符号链接自身
 *            IN_MASK_ADD         将事件追加到pathname的当前监控掩码
 *            IN_ONESHOT          只监测一个事件, 事件发生后, 被监控项会从监控列表中消失
 *            IN_ONLYDIR          只监测目录
 *            IN_IGNORED          监控项被内核或应用程序移除
 *            IN_ISDIR          发生事件的是一个目录
 *            IN_Q_OVERFLOW     Event队列溢出
 *            IN_UNMOUNT          文件系统unmount

参考文献

Wiki.js 离线部署方法 | 离线拉取语言包

最近想在内网搭建一套 Wiki,在调研了各种 wiki 的搭建方式、功能之后,选择了 wiki.js。但是在部署过程中,发现其默认是通过公网拉取语言包等资源,内网安装需要一些特别的方法。

这篇文章就来介绍内网部署 wiki.js 并拉取语言包的方法。

安装方法

按照 官网安装方法,可以较快的将整个服务启动起来:

Step1 – 快速启动

# 安装前请确保安装了 node npm
$ apt-get install node npm
# 若内网服务器没有安装,可参考官网二进制离线安装的方法

# 首先获取离线包,可在互联网上下载,拷入内网服务器
$ wget https://github.com/Requarks/wiki/releases/download/2.5.272/wiki-js.tar.gz

# 之后将所有内容解压到一个安装路径,我装在 /opt/wiki 下
$ mkdir wiki
$ tar xzf wiki-js.tar.gz -C ./wiki
$ cd ./wiki

# 下面需要进行配置
$ mv config.sample.yml config.yml
# 按照自己的需求修改配置文件
$ vim config.yml 

# 如果使用 sqlite,在这里完成数据库初始化
$ npm rebuild sqlite3

# 服务启动
$ node server

Step2 – 配置 systemd

官网提供了 systemd 配置文件,直接创建,配置好之后即可使用

nano /etc/systemd/system/wiki.service

[Unit]
Description=Wiki.js
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
# Consider creating a dedicated user for Wiki.js here:
User=nobody
Environment=NODE_ENV=production
WorkingDirectory=/var/wiki

[Install]
WantedBy=multi-user.target

最后:

$ systemctl daemon-reload
$ systemctl enable wiki
$ systemctl start wiki

# 检查一下是否启动
$ systemctl status wiki

# 查看日志
$ journalctl -xef -u wiki

Step3 – 离线安装语言包

内网环境无法直接下载语言包,此时需要按照如下步骤手动导入语言包:

  • 修改配置文件

首先需要告诉 wiki.js 当前运行在离线环境中,因此在配置文件中进行如下修改:

- offline: false
+ offline: true
  • 创建离线资源目录

之后在安装目录下创建一个文件夹 data/sideload 用来存放离线资源,比如我是安装在 /opt/wiki/ 下,配置文件中配置的数据文件夹为 /opt/wiki/data ,那么我就创建一个新的文件夹 /opt/wiki/data/sideload 即可。

  • 获取语言包

官方提供的语言包资源可以在这里下载:https://github.com/Requarks/wiki-localization

务必下载 locales.json ,之后下载您需要的语言包(如 zh.json )。

  • 安装

将下载好的 locales.json , zh.json , en.json 等资源拷入上面创建好的文件夹中。

最后重启服务即可:

systemctl restart wiki

参考文献

macOS 使用 remote-viewer 连接 spice 服务 | PC 连接 spice 云桌面方法

最近需要使用到云桌面办公,但目前仅支持 windows 客户端。后经过询问,发现是使用 spice 协议链接,提供地址后,即可使用第三方客户端链接。

MacOS 平台下没有很好的支持 spice 协议的图形化客户端,但是可以使用 remote-viewer 这个工具,也比较好用,下面介绍安装方法:

# jeffreywildman/homebrew-virt-manager 有些问题
# Krish-sysadmin 对它进行了修复,因此首先卸载参与包和地址
brew remove virt-manager
brew remove virt-viewer
brew untap jeffreywildman/homebrew-virt-manager

# 安装工具
brew tap Krish-sysadmin/homebrew-virt-manager
brew install virt-manager virt-viewer

# 如果缺少某些依赖库,安装后重试即可

# 使用
remote-viewer

https://imagehost-cdn.frytea.com/images/2022/01/25/2022-01-25-2.59.39816bc8ffe02fa999.png

输入 spice 地址链接即可。

https://imagehost-cdn.frytea.com/images/2022/01/25/2022-01-25-3.03.34fe54a45c4b94b76c.png

总结

这次探索走了不少弯路,从尝试各种第三方远程桌面客户端,到 remote-viewer 的安装,工具的安装也遇到不少问题,最后在我的 MacBook Air m1 上成功安装,在这里分享方法。

在 Linux 下可以使用 remmina 这款工具,支持 「X2Go  RDP  SPICE  VNC  SSH  HTTP/HTTPS」。

在 Windows 下则可以使用 virt-mananger 来链接,参考「windows和linux下的spice客户端使用方法」。

至此,Windows、Linux、MacOS 链接 spice 服务的方法介绍完毕。

参考文献