推荐一个神奇的开源工具:Bork
Bork - 跨平台配置管理的瑞士军刀
Bork 是一款基于 Bash 的声明式配置管理DSL,它将“sh”重新融入IT,让人不禁想起经典的《瑞典厨师》(Swedish Chef)形象。虽然该项目不再处于活跃开发状态,但它的精神依然存在于一些热情的分支中。
深入理解Bork
Bork的核心是一个用于系统状态声明的Bash函数——ok
。这个函数允许我们以非侵入性的方式描述系统应处的状态,而不是直接编写执行操作的命令。它针对Bash 3.2和诸如sed、awk和grep等常见的Unix工具设计,并能在任何UNIX基础的系统上运行,甚至能感知BSD和GPL版本的工具差异。
知名活性分支:
安装与使用
从源代码安装
-
将仓库克隆到
/usr/local/src/bork
:git clone https://github.com/mattly/bork /usr/local/src/bork
-
创建软链接到你的路径:
ln -sf /usr/local/src/bork/bin/bork /usr/local/bin/bork
使用Homebrew(Mac OS X)
- 通过Homebrew安装:
brew install bork
功能一览
Bork 提供了多种操作方式:
- 检查:针对单个命令进行状态查询。
- 编译:将配置文件编译为独立脚本输出到STDOUT。
- 执行:对单个命令进行满足操作。
- 满足:尽可能使配置文件中的条件得到满足。
- 状态:检测配置文件条件是否已满足。
- 类型:列出可用的类型及其使用信息。
让我们更详细地了解这些功能:
声明与配置文件
Bork使用ok
函数进行声明,它接受一个类型和一些参数。然后调用该类型的处理函数,根据动作如status
、install
或upgrade
来测试声明或者更新系统。内置了许多类型,并且扩展自定义类型也很简单。
示例配置:
ok brew # 检查Homebrew是否存在并更新
ok brew git # 检查Homebrew下的git包是否存在并更新
ok directory $HOME/code # 确保~/code目录存在
ok github $HOME/code/dotfiles mattly/dotfiles # 确保git仓库在 ~/code/dotfiles 并同步远程
cd $HOME
for file in $HOME/code/dotfiles/configs/.[!.]*
do
ok symlink "$(basename $file)" $file # 确保~下有一个点开头的符号链接指向文件
done
运行后,Bork会检查每个ok
声明,并根据需要进行安装、升级或者调整配置。
声明类型
要查看所有声明类型和其用法信息,只需运行 bork types
。
内置类型概览
包括但不限于:
-
通用声明:
check: 执行给定的命令,返回值为0则认为成功
-
文件系统:
directory: 检查目录是否存在 file: 验证文件的存在、校验和、所有权和权限 download: 根据http(s) URL比较文件的存在 symlink: 检查符号链接的存在和目标
-
源码控制:
git: 检查Git仓库的状态 github: 专为GitHub的git类型,使用GitHub URL
-
语言包管理器:
gem: 验证Ruby环境下的gem是否存在 npm: 检查全局Node.js模块 pip: 检查pip安装的Python包 pipsi: 验证pipsi或由pipsi安装的包 apm: 检查Atom包 go-get: 检查Go包
-
Mac OS X特定:
brew: 检查Homebrew软件包 brew-tap: 检查Homebrew配方库,不验证tap的更新 cask: 检查Mac OS X上的Caskroom应用 defaults: 验证OS X的'defaults'设置 mas: 通过mas工具验证App Store应用 scutil: 通过scutil验证Mac机器名
-
Linux特定:
apt: 检查Debian或Ubuntu的apt软件包 yum: 检查CentOS或RedHat的yum软件包 zypper: 检查SUSE的zypper软件包
-
用户管理:
group: 验证Unix组是否存在 user: 验证系统用户存在
-
Unix工具:
iptables: 验证iptables规则
运行时操作
主要的操作有:
- status:报告配置文件中声明的状态。
- satisfy:检查并尝试满足配置文件中的声明。
- compile:将配置文件编译成独立脚本。
- check:仅针对单个声明进行状态检查。
- do:针对单个声明进行满足操作。
实战体验
- bork status myconfig.sh:报告每个声明的状态,无需改变系统状态。
- bork check ok github mattly/dotfiles:仅针对单一声明进行状态检查。
- bork satisfy myconfig.sh:检查所有声明,不满意的地方尝试进行操作。
- bork do ok github mattly/dotfiles:对单一声明进行满足操作。
- bork compile myconfig.sh:输出一个独立的shell脚本,无需依赖Bork运行。
结论
Bork 不再更新,但它留下了一种创新的方法去管理和维护你的系统状态,尤其是在旧版Unix环境中。尽管可能需要寻找其他替代品,但Bork的理念和设计仍然值得借鉴和学习。如果你对Shell编程感兴趣,或是正在寻找一种轻量级的跨平台配置管理工具,那么Bork是一个值得一试的选择。