近期将主力环境从macOS切换至Arch Linux,然后将博客从原环境迁移至现环境,本来以为过程会比较简单,结果却还是踩了几个坑,现在将配置过程中遇到的问题记录并且总结如下。
在Arch Linux中安装Git和Node.js
根据Hexo官方文档的说明,安装Hexo需要的依赖为Git和Node.js。
Git的安装比较简单,使用Arch Linux的默认包管理器pacman即可安装:1
$ pacman -S git
Node.js官方文档推荐使用nvm安装,并且官方文档给出了安装脚本。
但是我的电脑使用的是伪fish——参考Arch Wiki,我通过的是通过给terminal emulator添加参数的方式进入fish的。
因此,我的默认shell仍然是bash。而该安装脚本在检测到我的默认shell之后直接将相关的导出环境变量的命令添加至了.bashrc,导致了进入fish之后由于相关的环境变量丢失无法找到nvm命令的问题。
对于第二种解决方法,我们首先使用官方文档的安装脚本安装nvm:1
$ wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh
然后我们按照Github上的教程手动安装bass:1
2
3$ git clone https://github.com/edc/bass.git
$ cd bass
$ make install
最后我们建立如下的文件并重启终端,即可正常地在fish中使用nvm:1
2
3
4$ cat ~/.config/fish/functions/nvm.fish
function nvm
bass source ~/.nvm/nvm.sh --no-use ';' nvm $argv
end
使用nvm安装Node.js最新版本的命令如下:1
$ nvm install v8.1.3
最后我们安装hexo:1
$ npm install -g hexo-cli
hexo server报EMFILE错误
报错内容如下:1
Error: EMFILE, too many open files
Hexo官网的问题解答中给出了如下描述:
虽然 Node.js 有非阻塞 I/O,同步 I/O 的数量仍被系统所限制,在生成大量静态文件的时候,您可能会碰到 EMFILE 错误,您可以尝试提高同步 I/O 的限制数量来解决此问题。1
$ ulimit -n 10000
但是当我尝试使用ulimit的时候,却报了如下的错误:1
Permission denied when changing resource of type 'Maximum number of open file descriptors'
在这之后进行了如下的尝试:
- 使用sudo无法运行ulimit,后su至root运行,虽然没有报错,但是使用
ulimit -n
查看发现修改失败。 - 尝试添加参数-S和-H,没有效果。
- 最后根据Arch Forum上的回答,修改了
/etc/security/limits.conf
文件并重启电脑,问题解决。
hexo server报ENOSPC错误
Hexo官网的问题解答中给出了如下描述:
它可以用过运行 $ npm dedupe
来解决,如果不起作用的话,可以尝试在 Linux 终端中运行下列命令:1
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
这将会提高你能监视的文件数量。$ npm dedupe
没有解决问题,最后使用上述的命令解决了问题。(注意在fish中,'&&'
要用'COMMAND; and COMMAND'
来替代)