[{"data":1,"prerenderedAt":367},["ShallowReactive",2],{"docs-otobo-znuny-paket-bauen":3},{"id":4,"title":5,"body":6,"category":358,"description":359,"draft":360,"extension":361,"meta":362,"navigation":226,"order":134,"path":363,"seo":364,"stem":365,"__hash__":366},"docs\u002Fdocs\u002Fotobo-znuny-paket-bauen.md","OTOBO- & Znuny-Paket bauen (.opm)",{"type":7,"value":8,"toc":351},"minimark",[9,13,38,43,46,56,60,69,174,186,190,193,244,258,287,295,299,305,320,324,347],[10,11,5],"h1",{"id":12},"otobo-znuny-paket-bauen-opm",[14,15,16,17,21,22,29,30,33,34,37],"p",{},"Ein ",[18,19,20],"code",{},".opm","-Paket ist ein XML-Container, der Perl-Code, Konfiguration, Datenbank-Änderungen und Frontend-Dateien bündelt. Gebaut wird es aus einem ",[23,24,25,28],"strong",{},[18,26,27],{},".sopm","-Quellmanifest"," plus den zugehörigen Dateien. OTOBO, Znuny und die OTRS Community Edition nutzen dasselbe Format — der wesentliche Unterschied ist das Wurzelelement (",[18,31,32],{},"otobo_package"," vs. ",[18,35,36],{},"otrs_package",").",[39,40,42],"h2",{"id":41},"_1-verzeichnisstruktur-anlegen","1. Verzeichnisstruktur anlegen",[14,44,45],{},"Legen Sie Ihre Dateien an den Pfaden an, an denen sie später im Ziel-System liegen sollen:",[47,48,54],"pre",{"className":49,"code":51,"language":52,"meta":53},[50],"language-text","MyPackage\u002F\n├── MyPackage.sopm\n├── Kernel\u002F\n│   └── Config\u002F\n│       └── Files\u002F\n│           └── XML\u002F\n│               └── MyPackage.xml\n└── var\u002F\n    └── httpd\u002F\n        └── htdocs\u002F\n            └── js\u002F\n                └── MyPackage.js\n","text","",[18,55,51],{"__ignoreMap":53},[39,57,59],{"id":58},"_2-das-sopm-manifest-erstellen","2. Das .sopm-Manifest erstellen",[14,61,62,63,68],{},"Das Manifest deklariert Metadaten, kompatible Frameworks und die vollständige Dateiliste. Nutzen Sie den ",[64,65,67],"a",{"href":66},"\u002Ftools\u002Fsopm-generator",".sopm-Generator",", um ein gültiges Manifest per Formular zu erzeugen:",[47,70,74],{"className":71,"code":72,"language":73,"meta":53,"style":53},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?xml version=\"1.0\" encoding=\"utf-8\" ?>\n\u003Cotobo_package version=\"1.1\">\n    \u003CName>MyPackage\u003C\u002FName>\n    \u003CVersion>1.0.0\u003C\u002FVersion>\n    \u003CFramework>11.0.x\u003C\u002FFramework>\n    \u003CFramework>7.0.x\u003C\u002FFramework>\n    \u003CVendor>Example GmbH\u003C\u002FVendor>\n    \u003CURL>https:\u002F\u002Fexample.com\u002F\u003C\u002FURL>\n    \u003CLicense>GPL-3.0\u003C\u002FLicense>\n    \u003CDescription Lang=\"en\">A short description.\u003C\u002FDescription>\n    \u003CDescription Lang=\"de\">Eine kurze Beschreibung.\u003C\u002FDescription>\n    \u003CFilelist>\n        \u003CFile Permission=\"660\" Location=\"Kernel\u002FConfig\u002FFiles\u002FXML\u002FMyPackage.xml\" \u002F>\n        \u003CFile Permission=\"644\" Location=\"var\u002Fhttpd\u002Fhtdocs\u002Fjs\u002FMyPackage.js\" \u002F>\n    \u003C\u002FFilelist>\n\u003C\u002Fotobo_package>\n","xml",[18,75,76,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168],{"__ignoreMap":53},[77,78,81],"span",{"class":79,"line":80},"line",1,[77,82,83],{},"\u003C?xml version=\"1.0\" encoding=\"utf-8\" ?>\n",[77,85,87],{"class":79,"line":86},2,[77,88,89],{},"\u003Cotobo_package version=\"1.1\">\n",[77,91,93],{"class":79,"line":92},3,[77,94,95],{},"    \u003CName>MyPackage\u003C\u002FName>\n",[77,97,99],{"class":79,"line":98},4,[77,100,101],{},"    \u003CVersion>1.0.0\u003C\u002FVersion>\n",[77,103,105],{"class":79,"line":104},5,[77,106,107],{},"    \u003CFramework>11.0.x\u003C\u002FFramework>\n",[77,109,111],{"class":79,"line":110},6,[77,112,113],{},"    \u003CFramework>7.0.x\u003C\u002FFramework>\n",[77,115,117],{"class":79,"line":116},7,[77,118,119],{},"    \u003CVendor>Example GmbH\u003C\u002FVendor>\n",[77,121,123],{"class":79,"line":122},8,[77,124,125],{},"    \u003CURL>https:\u002F\u002Fexample.com\u002F\u003C\u002FURL>\n",[77,127,129],{"class":79,"line":128},9,[77,130,131],{},"    \u003CLicense>GPL-3.0\u003C\u002FLicense>\n",[77,133,135],{"class":79,"line":134},10,[77,136,137],{},"    \u003CDescription Lang=\"en\">A short description.\u003C\u002FDescription>\n",[77,139,141],{"class":79,"line":140},11,[77,142,143],{},"    \u003CDescription Lang=\"de\">Eine kurze Beschreibung.\u003C\u002FDescription>\n",[77,145,147],{"class":79,"line":146},12,[77,148,149],{},"    \u003CFilelist>\n",[77,151,153],{"class":79,"line":152},13,[77,154,155],{},"        \u003CFile Permission=\"660\" Location=\"Kernel\u002FConfig\u002FFiles\u002FXML\u002FMyPackage.xml\" \u002F>\n",[77,157,159],{"class":79,"line":158},14,[77,160,161],{},"        \u003CFile Permission=\"644\" Location=\"var\u002Fhttpd\u002Fhtdocs\u002Fjs\u002FMyPackage.js\" \u002F>\n",[77,163,165],{"class":79,"line":164},15,[77,166,167],{},"    \u003C\u002FFilelist>\n",[77,169,171],{"class":79,"line":170},16,[77,172,173],{},"\u003C\u002Fotobo_package>\n",[14,175,176,177,180,181,185],{},"Jede Datei auf der Festplatte muss in der ",[18,178,179],{},"\u003CFilelist>"," stehen — und umgekehrt. Der ",[64,182,184],{"href":183},"\u002Ftools\u002Fsopm-validator",".sopm-Validator"," prüft die wichtigsten Regeln direkt im Browser.",[39,187,189],{"id":188},"_3-das-paket-bauen","3. Das Paket bauen",[14,191,192],{},"Mit einer laufenden OTOBO-\u002FZnuny-Installation:",[47,194,198],{"className":195,"code":196,"language":197,"meta":53,"style":53},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# OTOBO\nbin\u002Fotobo.Console.pl Dev::Package::Build \u002Fpfad\u002Fzu\u002FMyPackage.sopm \u002Fziel\u002Fverzeichnis\u002F\n\n# Znuny \u002F OTRS\nbin\u002Fotrs.Console.pl Dev::Package::Build \u002Fpfad\u002Fzu\u002FMyPackage.sopm \u002Fziel\u002Fverzeichnis\u002F\n","bash",[18,199,200,206,222,228,233],{"__ignoreMap":53},[77,201,202],{"class":79,"line":80},[77,203,205],{"class":204},"sHwdD","# OTOBO\n",[77,207,208,212,216,219],{"class":79,"line":86},[77,209,211],{"class":210},"sBMFI","bin\u002Fotobo.Console.pl",[77,213,215],{"class":214},"sfazB"," Dev::Package::Build",[77,217,218],{"class":214}," \u002Fpfad\u002Fzu\u002FMyPackage.sopm",[77,220,221],{"class":214}," \u002Fziel\u002Fverzeichnis\u002F\n",[77,223,224],{"class":79,"line":92},[77,225,227],{"emptyLinePlaceholder":226},true,"\n",[77,229,230],{"class":79,"line":98},[77,231,232],{"class":204},"# Znuny \u002F OTRS\n",[77,234,235,238,240,242],{"class":79,"line":104},[77,236,237],{"class":210},"bin\u002Fotrs.Console.pl",[77,239,215],{"class":214},[77,241,218],{"class":214},[77,243,221],{"class":214},[14,245,246,249,250,253,254,257],{},[23,247,248],{},"Ohne"," installiertes Ticket-System (z. B. in CI\u002FCD) nutzen Sie ",[18,251,252],{},"opmbuild"," aus dem CPAN-Modul ",[18,255,256],{},"OPM::Maker",":",[47,259,261],{"className":195,"code":260,"language":197,"meta":53,"style":53},"cpanm OPM::Maker\nopmbuild build --output \u002Fziel\u002Fverzeichnis\u002F \u002Fpfad\u002Fzu\u002FMyPackage.sopm\n",[18,262,263,271],{"__ignoreMap":53},[77,264,265,268],{"class":79,"line":80},[77,266,267],{"class":210},"cpanm",[77,269,270],{"class":214}," OPM::Maker\n",[77,272,273,275,278,281,284],{"class":79,"line":86},[77,274,252],{"class":210},[77,276,277],{"class":214}," build",[77,279,280],{"class":214}," --output",[77,282,283],{"class":214}," \u002Fziel\u002Fverzeichnis\u002F",[77,285,286],{"class":214}," \u002Fpfad\u002Fzu\u002FMyPackage.sopm\n",[14,288,289,290,294],{},"Details dazu in der ",[64,291,293],{"href":292},"\u002Fdocs\u002Fci-cd-opmbuild","CI\u002FCD-Anleitung",".",[39,296,298],{"id":297},"_4-installieren-testen","4. Installieren & testen",[14,300,301,302,304],{},"Installieren Sie das erzeugte ",[18,303,20],{}," über den Paketmanager (Admin → Paketverwaltung → Paket installieren) oder per Konsole:",[47,306,308],{"className":195,"code":307,"language":197,"meta":53,"style":53},"bin\u002Fotobo.Console.pl Admin::Package::Install \u002Fziel\u002Fverzeichnis\u002FMyPackage-1.0.0.opm\n",[18,309,310],{"__ignoreMap":53},[77,311,312,314,317],{"class":79,"line":80},[77,313,211],{"class":210},[77,315,316],{"class":214}," Admin::Package::Install",[77,318,319],{"class":214}," \u002Fziel\u002Fverzeichnis\u002FMyPackage-1.0.0.opm\n",[39,321,323],{"id":322},"nächste-schritte","Nächste Schritte",[325,326,327,335,341],"ul",{},[328,329,330,334],"li",{},[64,331,333],{"href":332},"\u002Fdocs\u002Fsopm-referenz",".sopm-Referenz"," — alle Elemente im Detail",[328,336,337],{},[64,338,340],{"href":339},"\u002Fdocs\u002Fotobo-znuny-kompatibilitaet","Läuft mein Paket auf OTOBO und Znuny?",[328,342,343],{},[64,344,346],{"href":345},"\u002Fdocs\u002Fpaket-veroeffentlichen","Paket auf Open ITSM Hub veröffentlichen",[348,349,350],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":53,"searchDepth":86,"depth":86,"links":352},[353,354,355,356,357],{"id":41,"depth":86,"text":42},{"id":58,"depth":86,"text":59},{"id":188,"depth":86,"text":189},{"id":297,"depth":86,"text":298},{"id":322,"depth":86,"text":323},"Pakete","Schritt-für-Schritt: von der Verzeichnisstruktur über das .sopm-Manifest bis zur fertigen .opm-Datei für OTOBO, Znuny und OTRS CE.",false,"md",{},"\u002Fdocs\u002Fotobo-znuny-paket-bauen",{"title":5,"description":359},"docs\u002Fotobo-znuny-paket-bauen","xt4ZNkrrmpCM2JSSmLCNAls84siuxrYy3TKjqQ_N1YM",1785427360760]