安装
系统要求
已知Watchman可以在以下系统上编译并通过其测试套件:
- 带有`inotify`的Linux系统
- macOS(在10.7+上使用`FSEvents`,在早期版本上使用`kqueue(2)`)
- Windows 10(64位)及更高版本。 Windows 7支持由社区补丁提供
Watchman曾经支持以下系统,但没有人积极维护它们。 代码的核心应该没问题,但它们可能无法构建。 如果有人愿意站出来维护它们,我们将非常高兴
- 具有
kqueue(2)
工具的BSD类系统(FreeBSD 9.1,OpenBSD 5.2) - 具有
port_create(3C)
的Illumos和Solaris风格的系统
Watchman依赖于操作系统工具进行文件通知,这意味着在任何类型的远程或分布式文件系统上使用它都可能导致非常糟糕的结果。
Watchman目前不支持上面列表中未涵盖的任何其他操作系统。
Windows
预构建二进制文件
- 从最新版本下载并解压Windows版本
- 它的名称类似于
watchman-vYYYY.MM.DD.00-windows.zip
- 它包含一个
bin
文件夹。 将其移动到适当的位置并更新您的PATH
环境变量以引用该位置。
如果您在使用Windows版本的watchman时遇到问题,请通过GitHub报告! 您可以在此处找到已知Windows问题列表。
通过Chocolatey安装
Watchman可以通过Chocolatey Windows软件包管理器获得。 安装非常简单:
PS C:\> choco install watchman
该软件包由社区维护,而不是由Meta维护,因此,如果您在安装或卸载时遇到问题,应联系软件包维护者以获得帮助。
macOS
Homebrew
Homebrew的Watchman软件包由社区维护,但它对很多人都适用。
$ brew update
$ brew install watchman
如果由于某种原因您无法等待Homebrew软件包更新,则可以从GitHub安装最新版本
$ brew install --HEAD watchman
MacPorts
要安装由MacPorts维护的软件包
$ sudo port install watchman
预构建二进制文件
- 从最新版本下载并解压macOS版本
- 它的名称类似于
watchman-vYYYY.MM.DD.00-macos.zip
$ unzip watchman-*-macos.zip
$ cd watchman-vYYYY.MM.DD.00-macos
$ sudo mkdir -p /usr/local/{bin,lib} /usr/local/var/run/watchman
$ sudo cp bin/* /usr/local/bin
$ sudo cp lib/* /usr/local/lib
$ sudo chmod 755 /usr/local/bin/watchman
$ sudo chmod 2777 /usr/local/var/run/watchman
Watchman二进制文件未签名,因此可能需要在“系统偏好设置”中的“安全性与隐私”中手动批准。
Linux
Homebrew
如果您在Linux上使用Homebrew,这是一个获取最新Watchman版本的绝佳方法。
请按照上面的macOS说明进行操作。
Fedora(预构建的RPM)
警告:请勿安装Fedora提供的Watchman软件包。 它很旧,缺少安全性、错误和性能修复。
- 从最新版本下载与您的Fedora版本对应的.rpm
sudo dnf localinstall watchman-$VERSION.fc$FEDORA_VERSION.x86_64.rpm
- 通过运行
watchman version
确认安装成功
Ubuntu(预构建的Deb)
警告:请勿安装Ubuntu提供的Watchman软件包。 它很旧,缺少安全性、错误和性能修复。
- 从最新版本下载与您的Ubuntu版本对应的.deb
sudo dpkg -i watchman_$UBUNTU_RELEASE_$VERSION.deb
- 您可能会看到有关未解决的依赖项的错误。 下一步将解决它们。
sudo apt-get -f install
- 通过运行
watchman version
确认安装成功
从源代码构建
从最新版本下载源代码快照 或 从GitHub克隆。
$ cd watchman
# Ensure Cargo is installed. Either through your OS's package manager or https://rustup.rs/
$ cargo version
# Optionally, to save time, you can ask Watchman's build process to install system dependencies
$ sudo ./install-system-packages.sh
$ ./autogen.sh
预构建二进制文件
注意:我们的二进制文件仅从main分支构建。 我们不提供v4.9.0的二进制文件。
注意:Linux二进制文件是在GitHub Action VM(撰写本文时为ubuntu-20.04)上编译的,并且Linux二进制文件通常在各个发行版之间不兼容,因此请首先尝试预构建的Fedora,Ubuntu或Homebrew软件包。
Watchman会在通过Meta内部测试验证后持续部署,并且不使用手动分配或“批准”的版本号。
在Meta外部,我们拥有自动化流程,该流程会在每周一裁剪一个标签并在其上构建二进制文件,并根据日期分配标签。 该过程处于Beta状态; 对于任何给定的标签,某些或全部二进制文件可能不存在。
- 从最新版本下载并解压缩适用于您系统的版本
- 它的名称类似于
watchman-vYYYY.MM.DD.00-linux.zip
$ unzip watchman-*-linux.zip
$ cd watchman-vYYYY.MM.DD.00-linux
$ sudo mkdir -p /usr/local/{bin,lib} /usr/local/var/run/watchman
$ sudo cp bin/* /usr/local/bin
$ sudo cp lib/* /usr/local/lib
$ sudo chmod 755 /usr/local/bin/watchman
$ sudo chmod 2777 /usr/local/var/run/watchman
系统特定准备
Linux inotify限制
inotify(7)
子系统具有三个重要的调整,会影响watchman。
/proc/sys/fs/inotify/max_user_instances
影响您可以监视多少个不同的根目录。/proc/sys/fs/inotify/max_user_watches
影响您可以在所有监视的根目录中监视多少个目录。/proc/sys/fs/inotify/max_queued_events
影响您的系统发生通知溢出的可能性。
显然,您需要确保设置了max_user_instances
和max_user_watches
,以便系统能够跟踪您的文件。
正确调整max_queued_events
的大小很重要; 如果太小,内核将丢弃事件,并且watchman将无法报告它们。 增大此值可降低发生这种情况的风险。
Watchman有两种简单的策略来缓解max_queued_events
的溢出
- 它使用专用线程来尽快消耗内核事件
- 当内核报告溢出时,watchman将假定所有文件都已被修改,并将重新爬网目录树,就好像它刚开始监视该目录一样。
这意味着,如果确实发生溢出,您将不会错过合法的更改通知,而是会收到实际上未更改的文件的虚假通知。
macOS文件描述符限制
仅适用于macOS 10.6及更早版本
macOS上默认的每个进程描述符限制非常低(256!)。
Watchman将尝试在启动时将其描述符限制提高到与kern.maxfilesperproc
匹配,因此您无需修改ulimit
; 仅提高sysctl应该可以解决问题。
以下操作将提高限制,以允许总共1000万个文件,每个进程100万个文件,直到您下次重新启动。
$ sudo sysctl -w kern.maxfiles=10485760
$ sudo sysctl -w kern.maxfilesperproc=1048576
将以下内容放入macOS上的名为/etc/sysctl.conf
的文件中将导致这些值在重新启动后仍然存在
kern.maxfiles=10485760
kern.maxfilesperproc=1048576