安装
Munki的大部分命令被安装在 /usr/local/munki,
同时还有 :
/Library/Preferences/ManagedInstall.plist文件,控制客户端本地
/Library/ManagedInstalls/ 目录是客户端的工作目录
/Applications/Utilities/Managed Software Update.app 这是一个和苹果更新程序界面类似的程序更新安装界面,普通用户可以运行它来手动检查更新,并不需要本地的管理员权限的介入,就可以安装软件和更新。
/Libraray/LaunchAgents/
/Libraray/LaunchDaemons/
分别有三个 Launchd的 plist文件,分别用于自动检查 (默认每 10分钟 )和安装,以及手动检查
Server的配置 :
在 Web Server 根 目录下 创 建目 录结构
munki/catalogs
munki/manifests
munki/pkgs
munki/pkgsinfo
其实在Server上无须安装munki,它只是一个存储和分类功能,并通过使用web服务器提供的网络接口,提供服务。下面的配置活动可以在远程完成后上传。
1.所有的pkg文件都储存在munki/pkgs里面,如果是meta package格式,需要把这个安装文件包在dmg文件中。确保everyone有read的权限 chmod 644 munki/pkgs/*
2.使用munki提供的工具,为每个package生成pkginfo文件 。 命令:/usr/local/munki/makepkginfo munki/pkgs/[NAME_OF_DISK_IMAGE] > munki/pkgsinfo//[NAME_OF_DISK_IMAGE].pkginfo
pkginfo文件
说明该安装文件的具体信息,位置,版本,类型(applications, files, plist,bundle等),标识/校验值,目标系统最低系统要求,
空间大小,依赖条
件(<key>requires</key>依赖其他软件的安装等,注意如果定义了彼此依赖,那么被依赖被删除,依赖者也被删除,
还有一种更新的依赖关系
<key>update_for</key>)等等,这样有利于安装程序做出如何安装的决定。
3. 生成catalog( 文档说明 ) 生成 catalogs目录里面的控制文件 (XML格式的 plist),目前来说, catalog只支持类似软件发布方式的分类,而且排列顺序很重要,在前面的比后面的优先。比如定义 Development, testing, production等,它不支持对客户端的任意分组。
/usr/local/munki/makecatalogs munki
4. 在 munki/manifests 定义。
( manifest + 1 的说明 ), 定义这一类 (catalog)的客户端来说,什么是必须安装的 (managed_installs),必须卸载的 (managed_uninstalls),可以安装的-最终用户可以自己选择是否安装 (optional_installs),和需要更新的 (managed_updates)
更新程序,反复 1.2.3.最后更新 manifests
或者使用 munkiimport 完成步骤 1,2
客户端配置 :
客户端的配置主要是制定服务器的地址和它的分组情况,也就是使用哪个 manifests指定的分组来管理本机的更新。
分组的用途,有的时候,不同的机器安装了不同软件,而你不希望不同机器混合使用不同的软件,这样把他们分成不同的组,进行软件安装管理很方便;有的时候他们的配置不同,用途不同,软件环境不同,都需要对他们区分安装。
配置很简单,主要在 /Library/Preferences/ ManagedInstall.plist 文件中设置两个值 :
ClientIdentifier是本机所属分组的名称,比如 testing.
SoftwareRepoURL就是服务器的地址,比如 http://www.server.my/munki
设置这两个参数,使得客户端 munki查找 http://www.server.my/munki/testing ,找到属于自己的 manifest文件。
Munki还支持对 manifest, catalog和 package的分别设置 ( ManifestURL, CatalogURL, PackageURL), 为了简单只设置 SoftwareRetoURL就默认所有的目录都在它的根目录下面。
如何手动让客户端检查更新呢?
运行 /Applications/Utilities/ Managed Software Update.app
或者是命令行 /usr/local/munki/managedsoftwareupdate命令
一个演示在客户端是如何动作的文档: Workflow Example
局限和缺陷 :
虽然支持https的加密通讯,但是没有其他的类似puppet的方式
它不支持对客户端的任意分组,这是它的一个局限。
而且它的设计有点奇怪,每个 pkginfo可以定义自己的多个 catalog分类, catalog又有优先, manifest又和客户端联系来确定客户端的 catalog。