Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IPSit

Avatar for fraosug fraosug
March 17, 2013

 IPSit

Avatar for fraosug

fraosug

March 17, 2013
Tweet

More Decks by fraosug

Other Decks in Technology

Transcript

  1. IPSit IPS packaging as easy as 1 2 3 http://ipsit.de

    Michael Keller, minesworld-technologies http://minesworld-technologies.com FRAOSUG-Treffen am 18.10.2011
  2. Eigene Pakete erstellen weil • Pakete und Repositories sind “packaged

    Use Cases” pre-build Pakete haben evtl. anderen Use- Case, z.B. kein LDAP support • Unabhängigkeit von Maintainer (Bug & Security-Fixes) • Kontrolle 㱻 Qualität
  3. Bestandteile eines IPS Pakets set name=pkg.fmri value=pkg://openindiana.org/SUNWless@436,5.11-0.133:20100914T030448Z set name=pkg.renamed value=true

    set name=org.opensolaris.consolidation value=sfw set name=variant.arch value=i386 set name=variant.opensolaris.zone value=global value=nonglobal set name=pkg.fmri value=pkg://opensolaris.org/SUNWless@436,5.11-0.133:20100216T083353Z set name=org.opensolaris.consolidation value=sfw set name=variant.opensolaris.zone value=global value=nonglobal set name=pkg.renamed value=true set name=variant.arch value=sparc value=i386 depend fmri=text/[email protected] type=require depend fmri=consolidation/sfw/sfw-incorporation type=require depend fmri=text/[email protected] type=require depend fmri=system/[email protected] type=require Manifest File content
  4. Bestandteile eines IPS Pakets set name=pkg.fmri value=pkg://openindiana.org/SUNWless@436,5.11-0.133:20100914T030448Z set name=pkg.renamed value=true

    set name=org.opensolaris.consolidation value=sfw set name=variant.arch value=i386 set name=variant.opensolaris.zone value=global value=nonglobal set name=pkg.fmri value=pkg://opensolaris.org/SUNWless@436,5.11-0.133:20100216T083353Z set name=org.opensolaris.consolidation value=sfw set name=variant.opensolaris.zone value=global value=nonglobal set name=pkg.renamed value=true set name=variant.arch value=sparc value=i386 depend fmri=text/[email protected] type=require depend fmri=consolidation/sfw/sfw-incorporation type=require depend fmri=text/[email protected] type=require depend fmri=system/[email protected] type=require .... dir group=sys mode=0755 owner=root path=usr dir group=sys mode=0755 owner=root path=usr dir group=bin mode=0755 owner=root path=usr/bin dir group=bin mode=0755 owner=root path=usr/bin dir group=sys mode=0755 owner=root path=usr/share dir group=sys mode=0755 owner=root path=usr/share dir group=bin mode=0755 owner=root path=usr/share/man dir group=bin mode=0755 owner=root path=usr/share/man dir group=bin mode=0755 owner=root path=usr/share/man/man1 dir group=bin mode=0755 owner=root path=usr/share/man/man1 file 9eea10d4dd0a150a5036749e397a0701aa14446c chash=acf14bd54db80ff124ff9d0a785c7271fddcce88 elfarch=i386 elfbits=32 elfhash=cab688670a904578ed17ff33ba08d3061d697c6f group=bin mode=0555 owner=root path=usr/bin/less pkg.csize=70503 pkg.size=152644 file 7612fa8ddcb00cc83985db2e5af377f6897cbbcd chash=a8cd3d19959ea92d50a9248641eb9c45a36f66d5 elfarch=i386 elfbits=32 elfhash=4cd08722aa8f5fa82cdfd4f35e04a1f0b7eaf753 group=bin mode=0555 owner=root path=usr/bin/lessecho pkg.csize=3373 pkg.size=7292 file 8a10ad3e89d98127b7ec71e5ce0311acbf4b76f4 chash=164015c066a17838ab1e942cbfa7b3cc66d425c4 group=bin mode=0444 owner=root path=usr/share/man/man1/lessecho.1 pkg.csize=817 pkg.size=1680 file 92d9b6e6de6dd4de4535e144379d063f2b8e50a9 chash=f35ab39ff242a0691f0c787783921c80db70aab3 elfarch=sparc elfbits=32 elfhash=4ef5be4cf18f129569c4efb1af35934838147c15 group=bin mode=0555 owner=root path=usr/bin/less pkg.csize=75958 Manifest
  5. Bestandteile eines IPS Pakets set name=pkg.fmri value=pkg://openindiana.org/SUNWless@436,5.11-0.133:20100914T030448Z set name=pkg.renamed value=true

    set name=org.opensolaris.consolidation value=sfw set name=variant.arch value=i386 set name=variant.opensolaris.zone value=global value=nonglobal set name=pkg.fmri value=pkg://opensolaris.org/SUNWless@436,5.11-0.133:20100216T083353Z set name=org.opensolaris.consolidation value=sfw set name=variant.opensolaris.zone value=global value=nonglobal set name=pkg.renamed value=true set name=variant.arch value=sparc value=i386 depend fmri=text/[email protected] type=require depend fmri=consolidation/sfw/sfw-incorporation type=require depend fmri=text/[email protected] type=require depend fmri=system/[email protected] type=require .... dir group=sys mode=0755 owner=root path=usr dir group=sys mode=0755 owner=root path=usr dir group=bin mode=0755 owner=root path=usr/bin dir group=bin mode=0755 owner=root path=usr/bin dir group=sys mode=0755 owner=root path=usr/share dir group=sys mode=0755 owner=root path=usr/share dir group=bin mode=0755 owner=root path=usr/share/man dir group=bin mode=0755 owner=root path=usr/share/man dir group=bin mode=0755 owner=root path=usr/share/man/man1 dir group=bin mode=0755 owner=root path=usr/share/man/man1 file 9eea10d4dd0a150a5036749e397a0701aa14446c chash=acf14bd54db80ff124ff9d0a785c7271fddcce88 elfarch=i386 elfbits=32 elfhash=cab688670a904578ed17ff33ba08d3061d697c6f group=bin mode=0555 owner=root path=usr/bin/less pkg.csize=70503 pkg.size=152644 file 7612fa8ddcb00cc83985db2e5af377f6897cbbcd chash=a8cd3d19959ea92d50a9248641eb9c45a36f66d5 elfarch=i386 elfbits=32 elfhash=4cd08722aa8f5fa82cdfd4f35e04a1f0b7eaf753 group=bin mode=0555 owner=root path=usr/bin/lessecho pkg.csize=3373 pkg.size=7292 file 8a10ad3e89d98127b7ec71e5ce0311acbf4b76f4 chash=164015c066a17838ab1e942cbfa7b3cc66d425c4 group=bin mode=0444 owner=root path=usr/share/man/man1/lessecho.1 pkg.csize=817 pkg.size=1680 file 92d9b6e6de6dd4de4535e144379d063f2b8e50a9 chash=f35ab39ff242a0691f0c787783921c80db70aab3 elfarch=sparc elfbits=32 elfhash=4ef5be4cf18f129569c4efb1af35934838147c15 group=bin mode=0555 owner=root path=usr/bin/less pkg.csize=75958 Header: Metadaten wie Version, Beschreibung Files: welche Dateien wo wie angelegt werden.
  6. Erstellung eines IPS Paketes pkgsend manifest pkg.depotd build host Repository/Depot

    package manifest files Manifest-Header wird gesendet…
  7. Erstellung eines IPS Paketes pkgsend manifest pkg.depotd build host Repository/Depot

    package manifest files content Inhalt der Dateien wird gesendet…
  8. Erstellung eines IPS Paketes pkgsend manifest pkg.depotd build host Repository/Depot

    package manifest files content files content Wenn komplett angekommen
  9. Erstellung eines IPS Paketes pkgsend manifest pkg.depotd build host Repository/Depot

    package manifest files content package files … pkg.depotd signalisiert “OK” …
  10. Erstellung eines IPS Paketes pkgsend manifest pkg.depotd build host Repository/Depot

    package manifest files content package files Neues Paket im Repository.
  11. pkgsend ⊕ ist im OS enthalten ⊕ relativ einfache Bedienung

    ( Manifest 1:1 übernommen) ⊙ packaging
  12. Pkgtools ⊕ relativ einfache Beschreibungssprache (Manifest wird daraus erstellt) ⊕

    kurze Einarbeitungszeit ⊙ packaging ⊝ Extra Download
  13. pkgbuild ⊕ build & packaging ⊕ Bestandteil des DesktopCBE ⊕

    spec Files werden auch von anderen Unixes verwendet ⊕ spec Files 㱺 “mächtig” ⊝ spec Files 㱺 nicht einfach ⊝ Schwer auffindbare Dokumentation ⊝ Extra Download, kein IPS-Paket
  14. Kriterien: ⊕ Einfache Bedienung Manifest Header ⊕ Kontrolle über Inhalt

    Integration in Build Ablauf ⊕ Bestehende Scripts Optimum ?
  15. ⊕ Einfache Bedienung ⊕ Kontrolle über Inhalt ⊕ Bestehende Scripts

    ⊝ pkgsend ⊝ Pkgtools ⊝ pgkbuild Optimum ?
  16. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" set name=pkg.name value=\"my first package\" set name=pkg.description

    value=\"example package build with IPSit\" " ./configure make pfexec make install
  17. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" [...] " ./configure make pfexec $IPSIT snapshot

    install pfexec make install echo "$MANIFEST" | \ pfexec $IPSIT package install $PKG@$VERSION -
  18. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" [...] " ./configure make pfexec $IPSIT snapshot

    install pfexec make install echo "$MANIFEST" | \ pfexec $IPSIT package install $PKG@$VERSION - alle neuen Files seit snapshot “install” benutzen
  19. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" [...] " ./configure make pfexec $IPSIT snapshot

    install pfexec make install echo "$MANIFEST" | \ pfexec $IPSIT package install $PKG@$VERSION - welches Paket erstellt werden soll
  20. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" [...] " ./configure make pfexec $IPSIT snapshot

    install pfexec make install echo "$MANIFEST" | \ pfexec $IPSIT package install $PKG@$VERSION - - 㱺 Manifest header von Standard In einlesen
  21. Environment variables • starten immer mit IPSIT_ • nicht besonders

    viele • die meisten sollten ausserhalb der Scripts gesetzt werden
  22. IPSit “externe” Kommandos: depot/create depot/start PUBLISHER=admin-hero DEPOT_ROOT=/repositories/$PUBLISHER export IPSIT_REPOSITORY=http://localhost:10000 DEPOT_URI=\

    `pfexec $IPSIT depot/create -s $PUBLISHER $DEPOT_ROOT` pfexec $IPSIT depot/start $DEPOT_URI erzeugt zusätzlich eine Service instance !
  23. Package dependencies • Pakete benötigen andere Pakete. Definition im Manifest

    z.B.: depend pkg:/runtime/gcc4 type=require • müssen meistens bereits vor configure oder make installiert sein
  24. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" set name=pkg.name value=\"my first package\" set name=pkg.description

    value=\"example package build with IPSit\" depend pkg:/runtime/gcc4 type=require " echo "$MANIFEST" | \ pfexec $IPSIT install-dependencies - ./configure
  25. ZFS rollback • immer gleicher Zustand vor dem build •

    Problem: Pakete müssen auch deinstalliert werden da evtl. Services enthalten sein können
  26. pfexec $IPSIT snapshot install pfexec make install echo "$MANIFEST" |

    \ pfexec $IPSIT package install $PKG@$VERSION - pfexec $IPSIT rollback --destroy install
  27. So weit, so gut • erstellen des Scripts via Copy

    & Paste kostet keine Zeit • Zeit kostet z.B. die Einstellungen für configure herauszubekommen oder File Layout zu scripten • nervig: Script führt alles immer aus
  28. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" [...] " echo "$MANIFEST" | pfexec $IPSIT

    install-dependencies - ./configure make pfexec $IPSIT snapshot install pfexec make install echo "$MANIFEST" | pfexec $IPSIT package install $PKG@$VERSION - pfexec $IPSIT rollback --destroy install
  29. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" [...] " echo "$MANIFEST" | pfexec $IPSIT

    install-dependencies - ./configure make pfexec $IPSIT snapshot install pfexec make install echo "$MANIFEST" | pfexec $IPSIT package install $PKG@$VERSION - pfexec $IPSIT rollback --destroy install
  30. PKG="mynamespace/example" VERSION=1.0 MANIFEST=" [...] " echo "$MANIFEST" | pfexec $IPSIT

    install-dependencies - ./configure make pfexec $IPSIT snapshot install pfexec make install echo "$MANIFEST" | pfexec $IPSIT package install $PKG@$VERSION - pfexec $IPSIT rollback --destroy install prepare build install package cleanup
  31. ACTIONS="prepare,build,install,package,cleanup" RANGE=$1 if $IPSIT should prepare $ACTIONS $RANGE; then echo

    "$MANIFEST" | pfexec $IPSIT install-dependencies - fi if $IPSIT should build $ACTIONS $RANGE; then ./configure make fi
  32. Aufruf des Scripts ohne Parameter 㱺 alles ausführen ./build.sh ./build.sh

    -package 㱺 prepare, build, install ./build.sh build-package 㱺 build, install ./build.sh package- 㱺 package, cleanup oder starten_ab-stoppen_vor
  33. Neue IPSit version und nichts funktioniert mehr?? Desktop CBE (

    /opt/dtbld/bin/env.sh ) löscht alle “unnötigen” Environment variables… Automatischer Scriptabruch wenn $IPSIT nicht definiert ist
  34. Neue IPSit version und nichts funktioniert mehr?? Desktop CBE (

    /opt/dtbld/bin/env.sh ) löscht alle “unnötigen” Environment variables… Automatischer Scriptabruch if [ -z "$IPSIT" ]; then exit 1; fi
  35. Neue IPSit version Desktop CBE ( /opt/dtbld/bin/env.sh ) löscht alle

    “unnötigen” Environment variables… export IPSIT_PROTOCOL=1.0 im Script angeben welche IPSit Protocol Version verwendet wird (1.0 ist default): Automatischer Scriptabruch if [ -z "$IPSIT" ]; then exit 1; fi
  36. Neue IPSit version Desktop CBE ( /opt/dtbld/bin/env.sh ) löscht alle

    “unnötigen” Environment variables… export IPSIT_PROTOCOL=1.0 im Script angeben welche IPSit Protocol Version verwendet wird (1.0 ist default): Automatischer Scriptabruch if [ -z "$IPSIT" ]; then exit 1; fi
  37. Automatischer Scriptabbruch IPSIT_PROTOCOL im Script setzen Desktop CBE ( /opt/dtbld/bin/env.sh

    ) . `$IPSIT /usr/bin/false \ create-env 1.0 /opt/dtbld/bin/env.sh` && \ $IPSIT unlink-env if [ $? -ne 0 ]; then exit 1; fi
  38. Automatischer Scriptabbruch IPSIT_PROTOCOL im Script setzen Desktop CBE ( /opt/dtbld/bin/env.sh

    ) . `$IPSIT /usr/bin/false \ create-env 1.0 /opt/dtbld/bin/env.sh` && \ $IPSIT unlink-env if [ $? -ne 0 ]; then exit 1; fi oder #!/bin/bash -e /usr/bin/false als erster Parameter wird immer ignoriert
  39. Automatischer Scriptabbruch IPSIT_PROTOCOL im Script setzen Desktop CBE ( /opt/dtbld/bin/env.sh

    ) . `$IPSIT /usr/bin/false \ create-env 1.0 /opt/dtbld/bin/env.sh` && \ $IPSIT unlink-env if [ $? -ne 0 ]; then exit 1; fi create-env gibt path zu temporärem File zurück
  40. Automatischer Scriptabbruch IPSIT_PROTOCOL im Script setzen Desktop CBE ( /opt/dtbld/bin/env.sh

    ) . `$IPSIT /usr/bin/false \ create-env 1.0 /opt/dtbld/bin/env.sh` && \ $IPSIT unlink-env if [ $? -ne 0 ]; then exit 1; fi das neue Environment wird in temporärem File übernommen aber IPSIT_* Variablen auch!
  41. Automatischer Scriptabbruch IPSIT_PROTOCOL im Script setzen Desktop CBE ( /opt/dtbld/bin/env.sh

    ) . `$IPSIT /usr/bin/false \ create-env --env DOWNLOADS 1.0 \ /opt/dtbld/bin/env.sh` && \ $IPSIT unlink-env if [ $? -ne 0 ]; then exit 1; fi mit --env können eigene Variablen übernommen werden, PREFIX* geht auch
  42. Automatischer Scriptabbruch IPSIT_PROTOCOL im Script setzen Desktop CBE ( /opt/dtbld/bin/env.sh

    ) Aufräumen . `$IPSIT /usr/bin/false \ create-env --env DOWNLOADS 1.0 \ /opt/dtbld/bin/env.sh` && \ $IPSIT unlink-env if [ $? -ne 0 ]; then exit 1; fi PID der Shell 㱺 Dateiname der temporären Datei…
  43. IPSit Commands Build in: help snapshot package rollback create-env unlink-env

    install-dependencies refresh should absdir “External”: tools/testenv package/changesetdiff package/getchangeset manifest/changesetentry manifest/direntry manifest/fmrientry depot/create depot/start depot/stop depot/available …
  44. $IPSIT tools/testenv \ "SOURCE = downloads directory" \ "PREF_I =

    install prefix e.g /opt/mynamespace" \ "PREF_S = storage prefix e.g /mycompany" if [ $? -ne 0 ]; then exit 1; fi tools/testenv • Variablen testen • Variablen dokumentieren • macht Scripts “shareable”
  45. IPSit Commands Build in: help snapshot package rollback create-env unlink-env

    install-dependencies refresh should absdir “External”: tools/testenv package/changesetdiff package/getchangeset manifest/changesetentry manifest/direntry manifest/fmrientry depot/create depot/start depot/stop depot/available …
  46. dev-build repository source cont-build repository source dist-build source repository VCS

    test-zone(s) source source source source source source Real-World Usage
  47. dev-build repository source cont-build repository source dist-build source repository VCS

    test-zone(s) source source source source source Eine Source Änderung… source ❸
  48. dev-build repository source cont-build repository source dist-build source repository VCS

    test-zone(s) source source source source source Einchecken in VCS source ❸
  49. dev-build repository source cont-build repository source dist-build source repository VCS

    test-zone(s) source source source source source Update aus VCS source ❸ ❸ ❸ ❸
  50. dev-build repository source cont-build repository source dist-build source repository VCS

    test-zone(s) source source source source source In der Realität: alle Pakete Neu! source
  51. Master-Buildscript müsste: • das jeweilige VCS “sprechen” um Updates zu

    erkennen • Inhalt des Repositories abfragen können
  52. pkg.opensolaris_changeset CHANGESET=9 PKG="mynamespace/example" VERSION=1.0 if ( ! $IPSIT package/changesetdiff $PKG

    \ "$CHANGESET" ); then exit 0; fi MANIFEST=" `$IPSIT manifest/changesetentry $CHANGESET` [ ... ] "
  53. pkg.opensolaris_changeset CHANGESET=10 PKG="mynamespace/example" VERSION=1.0 if ( ! $IPSIT package/changesetdiff $PKG

    \ "$CHANGESET" ); then exit 0; fi MANIFEST=" `$IPSIT manifest/changesetentry $CHANGESET` [ ... ] " bei jeder Änderung die neues Paket erfordert ändern
  54. pkg.opensolaris_changeset CHANGESET=10 PKG="mynamespace/example" VERSION=1.0 if ( ! $IPSIT package/changesetdiff $PKG

    \ "$CHANGESET" ); then exit 0; fi MANIFEST=" `$IPSIT manifest/changesetentry $CHANGESET` [ ... ] " wenn Paket mit gleichem CHANGESET vorhanden Script beenden
  55. pkg.opensolaris_changeset CHANGESET=10 PKG="mynamespace/example" VERSION=1.0 if ( ! $IPSIT package/changesetdiff $PKG

    \ "$CHANGESET" ); then exit 0; fi MANIFEST=" `$IPSIT manifest/changesetentry $CHANGESET` [ ... ] " Wert via “shortcut” in Manifest aufnehmen
  56. pkg.opensolaris_changeset • keine “mehrfach-builds” im Repository • evtl. massive Zeitersparniss

    bei run des Master-Buildscripts • völlig VCS unabhängig Resultat:
  57. IPSit Commands Build in: help snapshot package rollback create-env unlink-env

    install-dependencies refresh should absdir “External”: tools/testenv package/changesetdiff package/getchangeset manifest/changesetentry manifest/direntry manifest/fmrientry depot/create depot/start depot/stop depot/available …
  58. Lizenzen & Preise • OpenSource (keine Spendenannahme etc): Kostenlos •

    OpenSource (Spendenannahme etc.) , nicht kommerzielle private Nutzung: Gegenwert von 5 BigMacs™ • kommerzielle Nutzung: pro Benutzer der ein Buildscript startet 50 € (max. Staffelpreis inkl. MwSt.)
  59. Lizenzen & Preise • immer das Recht den Source-Code zu

    ändern sowie IPSit als Package zu hosten • kein Recht den Source-Code oder geänderten Source-Code als Files oder Package an Third- Parties weiterzugeben
  60. IPSit ⊕ super einfache Paketerstellung ⊕ umfassende Dokumentation ⊕ schnelle

    Einarbeitung dank Shell-Scripts ⊕ Baukasten-Prinzip: benutzen was man braucht ⊕ bei “Problemen” gibt es meistens etwas in IPSit ⊕ Support von komplexen Build-Szenarios ⊕ Scripts “shareable” ⊕ faire Lizenzen und Preise ⊕ als IPS Paket installierbar