?
blog注: 本文是一個簡要版本
?
**詳細****解****讀Munki****及其****應****用******
面對日益復雜的企業網絡管理環境,一個小的工具,可能極大的方便系統管理員的企業日常維護需要,它可能不需要面面俱到,不一定需要付費,當然不需要美麗的外表包裝,不過我們知道,需要熱情和參與,包括你和我。
### 綜述:
在系統管理員的工作中,更新和維護客戶系統是一項重要的任務,這是現代企業的基本要求。不久以前每個員工都可以在電腦上自己安裝軟件,這樣帶來了企業內部管理的混亂,隨著內部管理的規范,普通員工被取消了任意安裝軟件的權限,這個任務由管理員承擔,這樣避免了很多外來病毒造成生產率降低的問題,這是系統管理員為什么要負責系統更新的原始沖動。
尤其是對于大型的企業環境,這種任務可以說是一種挑戰,之所以這樣說,不僅因為客戶系統的維護基于客戶原因等有著諸多的限制,而且巨大的工作站數量和各個部門需求的多樣性,也是不可忽視的因素。隨著企業對內部人員的權限管理的細致化的要求越來越高,系統管理員會承擔更多的以前本可以客戶自己完成的任務。比如一個重要的軟件系統更新,需要及時部署到每個相關的客戶系統上,由于各種原因,可能是客戶在出差不在可以管理范圍之內,或者是網絡原因等,管理員不得不維護一個客戶系統更新的列表,記錄用戶系統的現狀,以及相繼的問題解決方案等,當然現在有各種審計軟件可供使用,但是依然需要管理員們主動的投入相當的熱情,否則,客服可能就要接到一些莫名其妙的求救電話,使得各個部門之間的協調出現不必要的麻煩。當然了,如果可以投入精力把各個方面的人員都通知到,那么可能減少抱怨,但是工作量也會隨之增加,而且人的記憶也是最不可靠的。不要忘了另外一點,各種各樣的軟件或者系統更新需求會一個接著一個的出現,不會停滯,否則系統管理員是否可以放長假了呢?維護這樣一個復雜的環境,不僅需要審查系統,我們管理員更需要一種在符合現存企業規則的同時,盡量自動化的,避免跟蹤個別客戶狀態的,或者可以描述為讓客戶承擔起本屬于自己的原始任務的策略。
在其它的系統環境中,有各自不同的解決方案,比如Windows用戶就可以使用SMS和SCCM等,不過費用也是不少,第三方的免費方案也是有的。在 Mac系統環境中,以前的各種方案,側重各有不同,現有的解決方案中比如CasperSuite, MacOS X Server, LANDesk Management Suite,Apple RemoteDesktop等等都是,他們功能各異,許可證費用來說相比較MS的更能讓人接受。不過Mac系統也有好多免費軟件。我們在這里介紹的是一種基于客戶/服務器模型的一套工具, 這就是Munki。
總體來說,它的特點是:免費開源,簡單有效,靈活強勁,最主要的是它可以讓沒有安裝軟件權限的客戶,根據管理員靈活設定的框架,自動或者手動地安裝所需的軟件。之所以叫它是一套工具,而不是解決方案,主要是因為它的部署和實施的確需要管理員根據自己的網絡 環境做相當的客戶配置,需要變成,需要自己定制策略,然后確定實施范圍和速度等等。但是它提供了一種基于軟件的可能性。而且它還是處于一種發展階段,需要完善和補充,結構和方向有了,基本的實現也有了,這其實給了我們極大的靈活性。它的突出特色是省卻了管理員的更新維護工作中和客戶直接打交道的費時工作,而是把這個任務部分地交給每個客戶端和客戶,客戶端可以按計劃自動檢查更新并安裝,并且不需管理員干預;用戶也可以手動操作,并且給客戶選擇安裝的自由。
有人問:這個和Mac系統提供的系統更新有什么區別?當然有區別,目前最顯著的區別是,它不用管理員在客戶機上的確認,就可以安裝各種軟件、補丁和升級等等,其實,它的功能不只這一點。
### 誰是Munki?
它是一個開源的基于Python開發的適用于MacOS X系統(當前)的軟件安裝/更新管理的一套工具。目前是在Google上的一個開源項目,它的最初開發者是GregNeagle,創始者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中的”受管軟件更新”(ManagedSoftware 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軟件包,到[官方網站下載](http://code.google.com/p/munki/downloads/list).
在管理機上,比如admin1,安裝munki軟件。你可以根據上面部署一節的內容挑選相應的部分安裝。
### 服務器
#### 服務器配置
在服務器電腦的共享偏好中,打開web sharing。
測試是否成功,可以在任何一臺機器上,在Safari上輸入該服務器的地址,比如: http://* s456.mydomain.com/repo,*如果可以正確顯示,配置就成功了。
在Finder窗口中,轉換到/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 "-//AppleComputer//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/目錄中。
#### 管理工具使用([PkginfoFiles](http://code.google.com/p/munki/wiki/PkginfoFiles))
在管理機上,執行下面命令來生成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/ManagedInstallsClientIdentifier –string “testing”*
*defaults write /Library/Preferences/ManagedInstallsSoftwareRepoURL –string “http:// s456.mydomain.com/repo”*
*defaults write /Library/Preferences/ManagedInstallsAppleSoftwareUpdatesOnly –bool false*
*defaults write /Library/Preferences/ManagedInstallsInstallAppleSoftwareUpdates –bool false*
### 測試
如果你希望等待,那么可以等待客戶機自動檢查更新,自動下載,自動安裝。不過為了測試我們來手動安裝。
在客戶機上的/Applications/Utilities目錄中,安裝了一個ManagedSoftware Update.app程序,它是一個類似蘋果Software Update程序的軟件,可供客戶手動安裝受管軟件的安裝。
執行它,如果配置正確,那么你可以看見FireFox和**ServerAdministrationSoftware兩個軟件在列表中,只要是按照提示安裝就可以了。
完成了!
### 顆粒化管理
### 基本意圖
### 如何實現
### 安全
**目前來****說****,****它可以提供了基本的安全保****護****,****比如使用****http簡單認證****,****或者是****https認證****,******
********
### 真實示例簡述
### 今后發展
**集成更多功能****:****審計****功能******
**支持更多的****設備****:****iPhone, iPod touch, iPad,****其它****設備****,****Andorid****等****.******
**支持更多的系****統****:****Windows, Linux****等******
- 前言
- Mac OS X:如何將個人文件夾從默認卷移到其他卷(適合OSX10.5 Leopard)
- Mac OS X:Finder菜單中的Connect to Server選項禁止和打開
- Mac OS X: 蘋果機支持的分區表類型及問題解決
- Mac OS X: 偏好Preferences基礎(1)
- Mac OS X: 如何變更Office for Mac的注冊碼
- Mac OS X: 禁止/防止網絡用戶復制app程序到桌面
- Mac OS X: 用戶帳戶的選擇
- Mac OS X: 實用腳本程序(bash scripts)系列
- Mac OS X: 共享iPhoto圖片
- Mac OS X: 實用腳本程序(bash scripts)系列-2
- Mac OS X: 實用腳本程序(bash scripts)系列-3
- Mac OS X: 實用腳本程序(bash scripts)系列-4
- Mac OS X: 實用腳本程序(bash scripts)系列-5
- Mac OS X: 實用腳本程序(bash scripts)系列-6
- Mac OS X:升級rsync和同步應用實例
- Mac OS X: XAMP在Mac上的實現
- Mac OS X瘦身多法
- Mac OS X 10.5快速系統部署實踐-計劃(2) v1
- Mac OS X 10.5快速系統部署實踐-制作核心系統鏡像(1) v1
- Mac OS X數據備份方案一例
- Mac OS X數據備份方案一例(2)
- Mac OS X 10.5快速系統部署實踐-制作核心系統鏡像(2) v1
- Mac OS X: 打印系統治療
- Mac OS X:禁止崩潰報告
- Mac OS X:Snow Leopard的幾個改動(管理員相關)
- Mac OS X排錯:雪豹的最新更新Airport可能不支持無線802.11n網絡
- Mac OS X:雪豹內置支持讀寫NTFS卷
- Mac OS X:定制生成新用戶的程序包
- Mac OS X:在Windows里面使用命令行設置啟動系統
- Mac OS X: 實用腳本程序(bash scripts)系列-7
- Mac OS X:一種從APP中獲得PKG的方法
- Mac OS X: bash腳本實現添加無線SSID(Update2009-10-09)
- Mac OS X: 實用腳本程序(bash scripts)系列-8
- Mac OS X 10.5快速系統部署實踐-制作核心系統鏡像(4) v1
- Mac OS X: 徹底刪除GeekTool(bash腳本)
- Mac OS X: 實用腳本程序(bash scripts)系列-9
- 把你的Leopard變成Mac OS X的系統發布服務器(1)
- 把你的Leopard變成Mac OS X的系統發布服務器(2)
- 把你的Leopard變成Mac OS X的系統發布服務器(3)
- Mac OS X: 訪問控制遠程CUPS服務
- Mac &amp; Win混合平臺訪問和工具
- Mac OS X: DeployStudio更新v1.0rc16
- Mac: 想當Apple菜鳥不容易(1)
- Mac: 想當 Apple菜鳥不容易(2)
- Mac: 想當 Apple菜鳥不容易(3)
- Mac: 想當 Apple菜鳥不容易(4完)
- Mac電腦上處理攝像機上的存儲內容
- Mac OS X: Google自動更新程序的卸載
- 雪豹系統和SMB不兼容的問題的解決匯總
- Mac OS X: 實用腳本程序(bash scripts)系列-10
- Mac OS X:MagicPrefs介紹
- Mac OS X: 系統部署后程序安裝的用戶提示
- Mac OS X:開啟單程序模式
- Mac OS X: 在腳本里關閉Airport
- Mac筆記本電池:十點建議和其它
- Mac OS X: Launchd執行程序的一個例子
- Mac OS X:修改SMART Utility期限限制
- Mac OS X:網絡用戶環境個性配置實例
- Mac OS X:強制退出CD/DVD盤
- Mac OS X: launchd plist在線編輯器
- Mac OS X: 實用腳本程序(bash scripts)系列-11
- Mac OS X: 實用腳本程序(bash scripts)系列-12
- Mac: 卸載Safari 5.0.2
- Mac OS X: 實用腳本程序(bash scripts)系列-13
- Mac OS X: 文件圖標制作和變更(Resource Fork)
- Mac OS X 10.6.6更新之后NTFS只讀的解決
- Mac: 網絡用戶遇到Adobe Reader 9.x/10.x異常退出的解決
- Mac OS X: airport命令的參數
- Mac OS X的Spotlight綜述
- Mac OS X:AFP和SMB共享配置詳細配置
- Mac OS X:詳細解讀Munki和應用
- Mac OS X:顯示/設置分辨率的命令(源程序)
- Mac OS X: 是否升級到Lion?
- OSX: 禁止Flash Player 10.3自動更新
- OSX腳本:禁止系統自動添加AppStore圖標到用戶Dock上
- 獅子GM版本的安裝
- OS X Lion獅子安裝盤的初步研究
- OS X Lion獅子的恢復盤的刪除二法
- OSX: Finder的側邊欄(Sidebar)不顯示已裝載的網絡共享
- OSX:隱藏文件或文件夾
- OS X: 實用腳本程序(bash scripts)系列-13
- OS X: 實用腳本程序(bash scripts)系列-14
- OSX:Lion支持登錄窗口的Policy Banner
- OSX: 讓獅子說中文