blog注: 本文是一个简要版本
详细
解
读Munki
及其
应
用
面对日益复杂的企业网络管理环境,一个小的工具,可能极大的方便系统管理员的企业日常维护需要,它可能不需要面面俱到,不一定需要付费,当然不需要美丽的外表包装,不过我们知道,需要热情和参与,包括你和我。
综述:
在系
统
管理
员
的工作中
,
更新和
维护
客
户
系
统
是一
项
重要的任
务
,
这
是
现
代企
业
的基本要求。不久以前每个
员
工都可以在
电脑
上自己安装
软
件
,
这样带
来了企
业
内部管理的
混
乱
,随着内部管理的规范,
普通
员
工被取消了任意安装
软
件的权限
,这个任务
由管理
员
承担
,
这样
避免了很多外来病毒造成生
产
率降低的
问题
,
这
是系
统
管理
员为
什么要
负责
系
统
更新的原始冲
动
。
尤其是
对
于大型的企
业环
境
,
这
种
任
务
可以
说
是一
种
挑
战
,
之所以
这样说
,
不
仅
因
为
客
户
系
统
的
维护
基于客
户
原因等有着
诸
多的限制
,
而且巨大的工作站数量和各个部
门
需求的多
样
性
,
也是不可忽
视
的因素。随着企
业对
内部人
员
的权限管理的
细
致化的要求越来越高
,
系
统
管理
员
会承担更多的以前本可以客
户
自己完成的任
务
。比如一个重要的
软
件系
统
更新
,
需要及
时
部署到每个相关的客
户
系
统
上
,
由于各
种
原因
,
可能是客
户
在出差不在可以管理范
围
之内
,
或者是网
络
原因等
,
管理
员
不得不
维护
一个客
户
系
统
更新的列表
,
记录
用
户
系
统
的
现
状
,
以及相继的
问题
解决方案等
,
当然
现
在有各
种
审计软
件可供使用
,
但是依然需要管理
员们
主
动
的投入相当的
热
情
,
否
则
,
客服可能就要接到一些莫名其妙的求救
电话
,
使得各个部
门
之
间
的
协调
出
现
不必要的麻
烦
。
当然了
,
如果可以投入精力把各个方面的人员都通知到
,
那么可能
减
少抱怨
,
但是工作量也会随之增加,而且人的记忆也是最不可靠的。不要忘了另外一点
,
各
种
各
样
的
软
件或者系
统
更新需求会一个接着一个的出
现
,
不会停滞
,
否
则
系
统
管理
员
是否可以放
长
假了
呢
?
维护这样
一个
复
杂
的
环
境
,
不
仅
需要
审查
系
统
,
我
们
管理
员
更需要一
种
在符合
现
存企
业规则
的同
时
,
尽量自
动
化的
,
避免跟踪个
别
客
户
状
态
的
,
或者可以描述
为让
客
户
承担起本属于自己的原始任
务
的策略。
在其它的系
统环
境中
,
有各自不同的解决方案
,
比如
Windows
用
户
就可以使用
SMS
和
SCCM
等
,
不
过费
用也是不少
,
第三方的免
费
方案也是有的。在
Mac
系
统环
境中
,
以前的各
种
方案
,
侧
重各有不同
,
现
有的解决方案中比如
CasperSuite, Mac
OS X Server, LANDesk Management Suite
,
Apple Remote
Desktop
等等都是
,他们功能各异,许可证
费
用来
说
相比
较MS
的更能
让
人接受。不
过Mac
系
统
也有好多免
费软
件。我
们
在
这
里介
绍
的是一
种
基于客
户
/
服
务
器模型的一套工具
,
这
就是
Munki
。
总
体来
说
,
它的特点是
:
免
费
开
源
,
简单
有效
,
灵
活强
劲,最主要的是它可以让没有安装软件权限的客户,根据管理员灵活设定的框架,自动或者手动地安装所需的软件
。之所以叫它是一套工具
,
而不是解决方案
,
主要是因
为
它的部署和
实
施的
确
需要管理
员
根据自己的网
络 环
境做相当的客
户
配置
,
需要
变
成
,
需要自己定制策略
,
然后
确
定
实
施范
围
和速度等等。但是它提供了一
种
基于
软
件的可能性。而且它
还
是
处
于一
种
发
展
阶
段
,
需要
完善和
补
充
,
结
构
和方向有了
,
基本的
实现
也有了
,
这
其
实给
了我
们
极
大的
灵
活性。它的突出特色是省却了管理
员
的更新
维护
工作中和客
户
直接打交道的
费时
工作
,
而是把
这
个任
务
部分地交
给
每个客
户
端和客
户
,
客
户
端可以按
计
划
自
动检查
更新并安装
,
并且不需管理
员
干
预
;
用
户
也可以手
动
操作
,
并且
给
客
户选择
安装的自由。
有人
问
:
这
个和
Mac
系
统
提供的系
统
更新有什么区
别
?
当然有区别
,
目前最
显
著的区
别
是
,
它不用管理
员
在客
户
机上的
确
认
,
就可以安装各
种
软
件、
补
丁和升
级
等等,其
实,
它的功能不只
这
一点。
谁是Munki?
它是一个开源的基于
Python开发的适用于
Mac
OS X系统(当前)的软件安装/更新管理的一套工具。目前是在
Google上的一个开源项目,它的最初开发者是
Greg
Neagle,创始者
Greg原来是在另外一个苹果
Google用户组的积极参与者,后来他把自己的开发项目公开了,最初的构思,受到
radmind的极大影响(
radmind是一个很早的
Mac系统部署工具,也是免费开源的),现在发展成有
20来个核心人员,人员不多,不过他们相当的活跃,使得这个项目进展得相当的稳健和迅速。这个项目也得到了
Google开发团队的认可
,
Google自己的一个
开
源项目叫
Simian就是基于这个项目之上的。
它的发音就是和猴子的英文
monkey一样
,
所以中文就叫它猴子吧。这个名字没有特殊意义
,
有一
种
通过训练可以为人类提供特殊服务的猴子
,
开
发者就想到了猴子这个名字。
基本概念
在进一步了解它之前,先让我们来了解一下使用过程中我们会使用的概念。
当然,这里没有说
Mac系统部署过程中的普遍使用的概念,因为这里假定,你已经熟悉了这些基本概念。如果没有,或者参考其它资料,或者网上搜索,或者我们以后提及。
货单(manifest):
其
实
在苹果系
统
管理里面
,
manifest
的概念
经
常被用到。很
简单
,
货单
就是一
种
描述什么
软
件需要安装或者卸
载等软件行为规则
的文件
,munki通过内部机制可以动态地指定某个或者某类电脑遵从某个货单定义的规则。默认的,
它存放在服
务
器的
manifest
目
录
中。
目录(catalog):
是描述在服
务
器上提供给用
户
可以使用的
软
件目录
,是通过munki的内部命令来自动生成的,默认的,
它存放在服
务
器的
catalogs
目
录
中。
安装项目(pkgs):
是所有的
软
件安装包的
总
称
,这是指具体的每个软件安装包,默认的,
它
们
存放在服
务
器的
pkgs
目
录
中。
包信息(pkgsinfo):
它是描述一个安装包
详细
信息的文件
,它也是使用munki内部命令自动生成,当然管理员可以编辑它的内容,以符合自己的管理环境需要。默认的,
存放在
pkgsinfo
目
录
中。
客户/
服务模型:
猴子是基于客
户
/
服
务
器模型的
,
它
对
服务器端的要求相当的
简单
,
就是一个
Http
服
务
器,我们叫它munki服务器
;
在客
户
端需要安装和正
确
配置munki
,
以便客
户
端能
够
正
确
地找到指定的服
务
器
,
并
进
行正
确
的操作。
预执行代码
(preflight):
后执行代码
(postflight):
这两个概念同Mac安装包中的preflight和postflight脚本的概念是类似的,都是在执行正式步骤之前和之后需要做的事情。在munki里面他们特指在munki中的”受管软件更新”(Managed
Software Update)应用程序的。
基本操作
定制pkgs:
安装格式:
猴子支持的安装程序包格式包括
:
·
dmg
格式:他可以支持直接复制应用程序到
Applications
目录操作,这种操作是好多简单程序采用的安装方式,简便直观。
·
苹果支持的软件安装包:也就是单一文件的
pkg
包和
mpkg
包,以及包文件的
pkg
和
mpkg
安装包
·
它还特定支持
Adobe
公司的使用
Adobe's Enterprise Deployment tools
软件制作的
CS3/CS4/CS5
发布程序,以及它的更新包,还有从官方下载的
Adobe Acrobat Pro 9.x
更新程序包等。
重新包装程序:
既然它支持这么多的程序安装包格式,每种格式适应语不同的软件需求,所以面对不同的程序,很多情况下需要管理员自己重新打包,重新打包的理由很多,可能是为了满足内部安全需求,或者是程序预先注册,或者是去掉一些功能,或者是提供方便的机制,或者添加各种判断脚本等等。
至于重新打包技术,在Mac系统上是管理员的基本技能之一,相关的软件也很多,无论是命令行的还是GUI的都有,而且免费的就很好用。比如:。
重新打包是软件安装升级成败的关键第一步,可能是管理员换费时间最多的一个步骤,不仅要反复测试,软件和硬件环境,而且要考虑周到,考虑到今后的升级卸载和软件许可的管理等等因素,所以管理员可能需要具备一定的编程能力,尤其是脚本书写能力。如果这部分都需要外包,那么就需要自我提高了。
在服务器上登录造册
当我们有了需要部署到客户端的软件安装包之后,让我们来把它发布到
munki服务器上,首先把它复制到
munki服务器的
pkgs目录里面,其实在
pkgs目录里面,为了管理方便,管理员完全可以建立多层子目录,来形成一种目录式的分层结构。比如右图所示。
然后我们来把每个安装包的安装信息发布到
pkgsinfo里面,只要使用
makepkgsinfo命令,就可以轻松得到,当然有时你可能需要手动编辑一个
pkgsinfo信息,以符合你的特殊要求。
注意,一旦我们决定使用子目录来分层管理各个安装包,并相应地生成了他们的
pkgsinfo信息,请不要随便移动安装包的目录,否则,你需要重新生成各个安装包的
pkgsinfo信息。
之后,让我们来把这些信息,组合到
munki目录里面,只要使用
makecatalog命令,就可以完成这个任务。
自此,登录造册的过程已经完毕。
分组测试
这一步本来不是
munki所要求的,只不过对于一个严谨的系统管理员来说,在正式发布之前,不仅要在制作安装包的时候考虑周全,同样地,一定要在发布之前,做好实际工作环境的测试工作,不仅是测试安装包的工作,同样是测试登陆造册的过程是否完全符合当初的需求。
最终发布
完成测试,我们把安装包最终放置在
manifest里面,这样它就成为了客户端可以使用安装的了。
这个过程只是需要编辑
manifest目录里面的相应的文件,把各个软件名按照需求,比如是安装还是卸载,添加到指定的位置。
部署
munki软件:
在早期的munki软件中,它的所有部分都是包含在一个单一的安装包中的,这个不利于我们管理员的最终发布,一方面需要做一些postflight的工作,另外,可能需要对不同的发布版本,对postflight进行必要的维护。
现在,munki软件是按照功能分开的,然后统一到一个包mpkg中,这样我们可以根据需要挑选不同的安装包。
目前它包括4个部分:core,admin,app和launchd。其中只有launchd部分需要客户端重新启动来完成安装步骤。
对于服务器部分,我们始终不需要安装任何munki软件。
对于客户端,我们需要安装core,app和launchd三个部分。
对于管理员电脑,我们需要安装core和admin,对于app,你可能需要。
客户端
对于客户端,我们不仅要安装默认的munki包,还需要做客户定制。目前来说,定制包括下面的几个方面:
确定客户端所属的
manifest。
确定安装的日程,也就是编辑各个launchd文件,他们存放在目录/Library/LaunchAgents/和/Library/LaunchDeamons/里面。
生成
ManagedInstalls.plist文件,它存放在/Library/Preferences/目录里面。其中主要需要定义的是:
定义munki服务器的地址,需要把比如
SoftwareRepoURL
定义为
http://your.business.name/update;把
AppleSoftwareUpdatesOnly
定义为
False.
InstallAppleSoftwareUpdates定义为
False等等。
服务器
确定服务器的位置和可用性,这需要根据你的内部的需要,比如你需要它被出差在外的人员访问吗?如果是,那么可能需要这个
http向
Internet公开,否则,就要担负
VPN的开支
。
这种更新是否很频繁,需要很多的系统资源?你可能需要多个munki服务器,一个负责承载pkgs,另外的承担pkgsinfo,
manefest和catalog的服务。
安全性是否很重要?如果是,你可能需要开启和设置https服务,或者是简单的http认证服务等。
负载的考虑
服务器的负载平衡等可能是你,把munki的每个功能分布到不同的服务器,是munki内部支持的一个简单方式,其它的硬件软件负载平衡,要根据你的网络情况和需要而定。
同样的,网络负载也是一个重要的考虑因素。曾经有一个技术员,把所有的客户端设置成,在一个特定时间访问某一个特定的服务器,
而且这个功能是集成在基本系统镜像文件中的,这样造成该部门一到该时间,网络就会奇慢, 还好得益于Unix的核心,它可以被轻易的禁止。
munki提供了内置的随机延时功能,也就是,它访问munki服务器的时间一到,它会随机的延时一段时间后,再启动访问操作,这样可以比较有效的分散网络操作。不过,这也和具体的更新文件大小相关,比如一个4GB的更新包的下载可能需要10分钟,在此期间其他的访问会减慢这个更新的下载进程,如此的积累,定会影响网络其它业务的进行。
客户的更新
munki软件本身是发展很快的,所以,在客户端也需要对munki本身进行升级。升级的考虑和安装的考虑是相同的,不过是可以通过munki的机制本省进行升级的。
客户化
定制的考虑:
定制自动检查日程
定制客户的货单属性
客户操作的培训
苹果升级安装
一个简单示例
这里我们演示一个实际的简单例子。
我们在两台
Mac机器上实现,其中一台打开
http服务作为服务器,同时它也是一个受管的
munki客户端,可以访问自己系统的
http服务下载安装更新。另外一台机器是管理电脑。你也可以配置一台
Windows或者
Linux及其作为
munki服务器。
准备工作:
首先下载最新的
munki软件包,到
官方网站下载
.
在管理机上,比如
admin1,安装
munki软件。你可以根据上面部署一节的内容挑选相应的部分安装。
服务器
服务器配置
在服务器电脑的
共享偏好中,打开
web
sharing。
测试是否成功,可以在任何一台机器上,在
Safari上输入该服务器的地址,比如
:
http:// s456.mydomain.com/repo,
如果可以正确显示,配置就成功了。
在
F
inder窗口中,转换到
/Library/WebServer/Documents目录,创建一个子目录
repo,在它里面建立另外
4个目录,
pkgs,pkgsinfo,catalog,和
manifest。
确定
repo及其所有的子目录和文件的属性,你和管理员组都有
read & write权限,而其他人至少都有
read权限。
上面的步骤集成在一个命令行为
:
ROOT_DOCU="/Library/WebServer/Documents"
mkdir -p $ROOT_DOCU/repo/pkgs
mkdir -p $ROOT_DOCU/repo/pkgsinfo
mkdir -p $ROOT_DOCU/repo/catalogs
mkdir -p $ROOT_DOCU/repo/manifests
mkdir -p $ROOT_DOCU/repo/Configurations
chmod –R 774
$ROOT_DOCU/repo
我们为了维护方便,同时打开文件共享服务,并共享
/Library/WebServer/Documents/repo/目录,共享名
repo。这样我们可以方便的在管理机上进行远程管理
munki的服务器配置。
把下面的内容复制到一个文本编辑器中,比如
textedit.app,然后保存位
production的文本文件
,
注意不是
rtf格式的文件,要是纯文本文件。
<?xml version="1.0"
encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple
Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>catalogs</key>
<array>
<string>testing</string>
</array>
<key>managed_installs</key>
<array>
<string>Firefox</string>
<string>
ServerAdministrationSoftware</string>
</array>
</dict>
</plist>
如果你熟悉
plist文件,那么可以看出,这个就是一个标准的文本格式的
plist文件,你当然可以用
Property List Editor编辑。
软件下载和打包
现在让我们下载两个软件,一个是
FireFox一个是
ServerAdminTools,它们分别是两种安装形式,
FireFox是直接的拖拽到
Applications目录,一种是
flat的
pkg格式。对于这两个包,我们不用重新打包就可以使用。
在管理机上,确定服务器电脑的
DNS名称是正确的,比如它是
s456.mydomain.com。这个信息很重要,以后要用。
把共享的文件夹映射到管理机上
:
mount afp://s456.mydomain.com/repo
这样我们就可以通过访问
/Volumes/repo访问服务器上的
repo了。
然后把它们复制到
/Volumes/repo/pkgs/目录中。
在管理机上,执行下面命令来生成
pkgsinfo文件
:
/usr/local/munki/makepkginfo
/Volumes/repo/pkgs/firefox5.dmg > /Volumes/repo/pkgsinfo/firefox5.pkginfo
/usr/local/munki/makepkginfo /Volumes/repo/pkgs/ServerAdministrationSoftware.pkg
> /Volumes/repo/pkgsinfo/ ServerAdministrationSoftware.pkginfo
如果没有错误,继续执行下面命令
:
/usr/local/munki/makecatalog /Volumes/repo/
客户端配置
软件安装
安装
munki软件在客户端上,也就是
s456机器上。需要重新启动。
配置
执行下面的命令来进行基本的配置:
defaults write /Library/Preferences/ManagedInstalls
ClientIdentifier –string “testing”
defaults write /Library/Preferences/ManagedInstalls
SoftwareRepoURL –string “http:// s456.mydomain.com/repo”
defaults write /Library/Preferences/ManagedInstalls
AppleSoftwareUpdatesOnly –bool false
defaults write /Library/Preferences/ManagedInstalls
InstallAppleSoftwareUpdates –bool false
测试
如果你希望等待,那么可以等待客户机自动检查更新,自动下载,自动安装。不过为了测试我们来手动安装。
在客户机上的
/Applications/Utilities目录中,安装了一个
Managed
Software Update.app程序,它是一个类似苹果
Software Update程序的软件,可供客户手动安装受管软件的安装。
执行它,如果配置正确,那么你可以看见
FireFox和
ServerAdministrationSoftware两个软件在列表中,只要是按照提示安装就可以了。
完成了!
颗粒化管理
基本意图
如何实现
安全
目前来
说
,
它可以提供了基本的安全保
护
,
比如使用
http简单认证
,
或者是
https认证
,
真实示例简述
今后发展
集成更多功能
:
审计
功能
支持更多的
设备
:
iPhone, iPod touch, iPad,
其它
设备
,
Andorid
等
.
支持更多的系
统
:
Windows, Linux
等
分享到:
相关推荐
munki:管理安装在OS X中的软件 Munki macOS 的托管软件安装 简介 Munki 是 Walt Disney Animation Studios 的一个开源项目。 Munki 是一组工具,与基于网络服务器的包和包元数据存储库一起使用,macOS 管理员可以...
那么什么是munki,那么那些munki仓库是什么? 嗯,munki是一组工具,管理员可以使用该工具定义客户端计算机的托管安装。 仓库是从标准Web服务器提供的。 有关更多信息,请访问 重要: 代码被认为是稳定的,不应有...
munkiadmin, 用于管理Munki存储库的OS X GUI 什么是 MunkiAdmin?MunkiAdmin是一个用于管理munki存储库的GUI 。 它使用 objective-c 编写,并在内存核心数据存储中用作后端。那么什么是 munki,哪些是munki存储库? ...
此MUNKI SERVER命令行工具(Munki Updater)将检查官方服务器(例如Mozilla)上是否有可用的MUNKI产品更新,并将允许在MUNKI存储库上下载和更新较旧的产品版本,并将其分发给具有较旧版本的客户端。 munki updater...
docker-smb-munki /munki_repo 的 SMB 共享 专为设计的简单 SMB 共享。 ... 从 OS X 客户端: Finder -> Go -> 连接到服务器 -> smb://docker-host-ip/ 以访客身份连接。 您应该对该共享具有读写
Python-munki是一种开源工具,专门用于管理OS X(现称为macOS)系统中的软件部署。这个工具由Apple的工程师创建,旨在简化企业环境中大量Mac设备的软件分发和更新。Munki的名称来源于“Monkey”,暗示了它在自动化和...
我计划通过 Munki v3 支持重新添加它。 特征 自动 HTTPS - squirrel 提供了一个内置的 Let's Encrypt 客户端。 基本身份验证-munki repo的基本身份验证 将云存储用作回购后端。 带有 JSON 或输出的结构化请求...
Munki-Tap Munkitap是使用Timothy Sutton的工具从公式自动构建更新的独立pkg安装程序的工具。 它还可以自动将这些软件包添加到已安装的munki存储库中。安装安装munkitap的最简单方法是使用下的.pkg安装程序。 您也...
新的特定清单包含通用清单作为include_manifests键,使我们能够轻松地针对整个实验室和每台单独的计算机。 等等,Munki已经不这样做了吗? Munki可以基于主机名或序列号来定位系统。 但是,每个清单必须手动创建。...
Autopkg是一个开源工具,用于自动化Mac OS X应用程序的下载、验证和打包过程。它使用“食谱”来定义如何处理特定的应用程序,这些食谱由社区成员编写,以满足各种自动化需求。通过使用Autopkg,系统管理员可以高效地...
它允许系统管理员自动安装、更新和卸载Mac OS X及后来的macOS上的应用程序。条件是Munki的一个核心特性,它允许管理员根据特定的客户端机器状态来决定哪些软件包应该被安装或更新。在深入探讨`munki-conditions`之前...
Munki是一个开源的、自动化的企业级Mac OS X软件部署解决方案,它允许管理员集中管理软件更新和安装。在Munki环境中,条件是控制何时、何地以及如何安装软件包的关键元素。 条件在Munki中被定义为一系列基于客户端...
munki_rebrand munki_rebrand是用于重命名Greg Neagle的的Managed Software Center应用程序的。 它允许您在Finder中为应用程序赋予其他名称(如果需要,可以使用所有本地化的语言),修改其图标并将可选的安装后脚本...
signware-在Munki中验证CMS签名的清单和目录要求Munki需要打补丁,以支持“ postware”(相对于“ middlware”),该支持允许自定义代码在managedsoftwareupdate下载URL之后发生。 在此PR中可用: 为什么说这种方法...
蒙基登优胜美地及以上版本的Munki的“请勿打扰”菜单栏应用程序。用法默认情况下,这将在24小时内禁止来自MSC的用户通知。 要调整此时间段,请使用以下命令: $ defaults write /Library/Preferences/...
Munki,全名Managed Software Center,是一款开源工具,主要用于在Mac OS X(现为macOS)环境中进行批量软件部署和管理。Munki由一系列组件组成,其中包括pkginfo文件,它是Munki系统中核心的元数据描述文件。`...
我们是一群 Munki 用户,致力于为 Munki 项目带来更详细的文档。 这是一个旨在帮助为 Wiki 制作更好的工作文档的空间,包括教程、视频和其他有用的培训作品。 这被设计成比“完整功能指南”更像“Driver's Ed”,...
仅在 Mavericks (OS X 10.9) 上测试###先决条件流浪者 VirtualBox Git Munkitools ###安装运行./bootstrap.sh ###清理运行./cleanup.sh以销毁虚拟机并删除此项目创建的所有文件。 注意:这也会删除您的 munki...
Munki 存储库是 Munki 系统的核心组成部分,它包含可供安装的应用程序、软件更新和其他相关资源。管理员通常会定期更新这个存储库以添加新的软件或更新现有的软件包。`tweetCatalogUpdates` 脚本可以帮助管理员在不...
它显示:标题,版本,目录和选项。 图标 要求 带有模块plistlib的Python3(Munki捆绑的python包含所有要求) 用法 该工具具有--help选项 队伍通知预览 未来 我可能会研究Slack的兼容性并作为JSON选项输出。 配套 ...