分类目录归档:技术

Proxmox VE (PVE) 销毁集群

当 pve 集群某节点出现问题时,可能导致所有主机均无法连接到 WEB 管理后台,此时可以尝试以下方法将正常节点的集群状态销毁,在需要时重建集群,从而保证仍在线节点可用:

systemctl stop pve-cluster corosync
pmxcfs -l
rm /etc/corosync/*
rm /etc/pve/corosync.conf
killall pmxcfs
systemctl start pve-cluster

参考文献

*.iso 和 *.img 的区别

最近经常接触各种系统镜像,大部分是 *.iso 格式(如 debian ),少部分是 *.img 格式(如 cirros),这两者究竟有何区别,最终在维基百科找到比较可靠的一段描述:

.IMG 这个文件格式可视为 .ISO 格式的一种 超集合

具体一点说就是:

由于 .ISO 只能封存使用ISO9660UDF这两种文件系统的存储介质,意.ISO 只能拿来封存CDDVD因此才发展出了 .IMG ,它是以 .ISO 格式为基础另外新增可封存使用其它文件系统的存储介质的能力, .IMG向后兼容.ISO 。如果是拿来封存CD或DVD,则使用 .IMG.ISO 这两种格式所产生出来的内容是一样的。

总结以下几点:

  • *.iso 是一种光盘存档文件,被设计用于光盘存档,符合ISO 9660等光盘规范;
  • *.img 是一种文件归档格式,被设计用于数字存储、传输、以及整片 磁盘/光盘 内容的复制
  • *.img 兼容 *.iso*.iso*.img 的特例);

参考文献

INOTIFY – 监听事件

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

各种语言基本都提供了对该接口的调用方法: C 不必多说, Perl 使用 [Linux::Inotify2](https://metacpan.org/pod/Linux::Inotify2)Golang 使用 golang.org/x/sys/unixPython 则使用 [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

参考文献