Munki und AutoPKG

Um meine Software zu verteilen nutze ich Munki. Damit die enthaltenen Pakete auch immer aktuell sind und ich nicht jede einzelne Herstellerseite absurfen muss, kommt AutoPKG zum Einsatz. Diese Software lädt die Pakete von diversen Websites runter, fügt noch ggf. Installscripte hinzu und kopiert sie in das Munki-Repo. Nun muss ich also nur regelmäßig ein Script starten und das tut den Rest. Eine Installationsanleitung ist bei Github zu finden.

Für jede Software gibt es Recipes, also Rezepte (u.a. für den Download). Um diese den eigenen Bedürfnissen anzupassen, kann man Overrides erstellen.

$ autopkg search QuickLookCSV

Name                             Repo             Path                                    
----                             ----             ----                                    
QuickLookCSV.pkg.recipe          jps3-recipes     QuickLookCSV/QuickLookCSV.pkg.recipe    
QuickLookCSV.download.recipe     jps3-recipes     QuickLookCSV/QuickLookCSV.download.recipe
QuickLookCSV.munki.recipe        jps3-recipes     QuickLookCSV/QuickLookCSV.munki.recipe  

To add a new recipe repo, use 'autopkg repo-add <repo name>'

$ autopkg repo-add jps3-recipes
Attempting git clone...

Adding /Users/admin/Library/AutoPkg/RecipeRepos/com.github.autopkg.jps3-recipes to RECIPE_SEARCH_DIRS...
Updated search path:
  '.'
  '~/Library/AutoPkg/Recipes'
  '/Library/AutoPkg/Recipes'
[...]

$ autopkg make-override QuickLookCSV.munki.recipe
Override file saved to /Users/admin/Library/AutoPkg/RecipeOverrides/QuickLookCSV.munki.recipe

Um nun alle Recipes auszuführen, führe ich folgenden Befehl aus:

$ autopkg run /Users/admin/Library/AutoPkg/RecipeOverrides/*.recipe MakeCatalogs.munki

Wenn ich nun die AutoPKG-Installation zu einem neuen Rechner migieren möchte, kopieren ich nur die RecipeOverrides auf den neuen Rechner und führe danach folgendes Script aus:

#!/bin/sh
autopkg repo-add "recipes"
for recipe in ~/Library/AutoPkg/RecipeOverrides/*
do
    repo=$(cat "${recipe}" | grep ParentRecipe -A 1 | tail -n 1 | tr -d "[:blank:]" | sed "s/<string>(.*)</string>/1/" | sed "s/.*.github.(.*)..*..*/1/")
    repoarray+=("${repo}")
done

IFS=$'n' repoarray=($(sort <<<"${repoarray[*]}"))
IFS=$'n' repoarray=($(uniq <<<"${repoarray[*]}"))

for repo in "${repoarray[@]}"
do
    echo "${repo}"
    autopkg repo-add "${repo}-recipes"
done

Das Script liest aus jeder Override-Datei das Parent-Recipe und dessen Repository aus und fügt es per autopkg repo-add xxx hinzu. So wird auch automatisch ein Update des bisherigen Repos durchgeführt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.