2022-01-30 20:34:01 +00:00
<!doctype html>
< html lang = "en" class = "no-js" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1, shrink-to-fit=no" >
< meta name = "generator" content = "Hugo 0.91.2" / >
< meta name = "robots" content = "index, follow" >
2022-01-30 20:58:50 +00:00
< link rel = "shortcut icon" href = "/favicons/favicon.ico" >
< link rel = "apple-touch-icon" href = "/favicons/apple-touch-icon-180x180.png" sizes = "180x180" >
< link rel = "icon" type = "image/png" href = "/favicons/favicon-16x16.png" sizes = "16x16" >
< link rel = "icon" type = "image/png" href = "/favicons/favicon-32x32.png" sizes = "32x32" >
< link rel = "icon" type = "image/png" href = "/favicons/android-36x36.png" sizes = "36x36" >
< link rel = "icon" type = "image/png" href = "/favicons/android-48x48.png" sizes = "48x48" >
< link rel = "icon" type = "image/png" href = "/favicons/android-72x72.png" sizes = "72x72" >
< link rel = "icon" type = "image/png" href = "/favicons/android-96x96.png" sizes = "96x96" >
< link rel = "icon" type = "image/png" href = "/favicons/android-144x144.png" sizes = "144x144" >
< link rel = "icon" type = "image/png" href = "/favicons/android-192x192.png" sizes = "192x192" >
2022-01-30 20:34:01 +00:00
< title > Creating Luet repositories | Luet< / title >
< meta name = "description" content = "How to create Luet repositories
">
< meta property = "og:title" content = "Creating Luet repositories" / >
< meta property = "og:description" content = "How to create Luet repositories
" />
< meta property = "og:type" content = "article" / >
2022-01-30 20:58:50 +00:00
< meta property = "og:url" content = "https://luet.io/docs/concepts/overview/repositories/" / > < meta property = "article:section" content = "docs" / >
2022-01-30 20:34:01 +00:00
< meta property = "article:published_time" content = "2017-01-05T00:00:00+00:00" / >
2022-02-15 20:18:17 +00:00
< meta property = "article:modified_time" content = "2022-02-15T21:17:32+01:00" / > < meta property = "og:site_name" content = "Luet" / >
2022-01-30 20:34:01 +00:00
< meta itemprop = "name" content = "Creating Luet repositories" >
< meta itemprop = "description" content = "How to create Luet repositories
">< meta itemprop = "datePublished" content = "2017-01-05T00:00:00+00:00" / >
2022-02-15 20:18:17 +00:00
< meta itemprop = "dateModified" content = "2022-02-15T21:17:32+01:00" / >
2022-02-04 18:55:43 +00:00
< meta itemprop = "wordCount" content = "883" >
2022-01-30 20:34:01 +00:00
< meta itemprop = "keywords" content = "" / > < meta name = "twitter:card" content = "summary" / >
< meta name = "twitter:title" content = "Creating Luet repositories" / >
< meta name = "twitter:description" content = "How to create Luet repositories
"/>
2022-01-30 20:58:50 +00:00
< link rel = "preload" href = "/scss/main.min.eb38b57306ca3844ed6f8a1be2101248121fe9c4dfd2981c1df0ba83c4ad6f7c.css" as = "style" >
< link href = "/scss/main.min.eb38b57306ca3844ed6f8a1be2101248121fe9c4dfd2981c1df0ba83c4ad6f7c.css" rel = "stylesheet" integrity = "" >
2022-01-30 20:34:01 +00:00
< script
src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha384-vtXRMe3mGCbOeY7l30aIg8H9p3GdeSe4IFlP6G8JMa7o7lXvnz3GFKzPxzJdPfGK"
crossorigin="anonymous">< / script >
< script
src="https://unpkg.com/lunr@2.3.9/lunr.min.js"
integrity="sha384-203J0SNzyqHby3iU6hzvzltrWi/M41wOP5Gu+BiJMz5nwKykbkUx8Kp7iti0Lpli"
crossorigin="anonymous">< / script >
< script type = "application/javascript" >
var doNotTrack = false;
if (!doNotTrack) {
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-00000000-0', 'auto');
ga('send', 'pageview');
}
< / script >
< script async src = 'https://www.google-analytics.com/analytics.js' > < / script >
< / head >
< body class = "td-page" >
< header >
< nav class = "js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar" >
2022-01-30 20:58:50 +00:00
< a class = "navbar-brand" href = "/" >
2022-01-30 20:34:01 +00:00
< span class = "navbar-logo" > < svg id = "Layer_1" xmlns = "http://www.w3.org/2000/svg" xmlns:xlink = "http://www.w3.org/1999/xlink" viewBox = "0 0 500 500" style = "enable-background:new 0 0 500 500" > < g > < path style = "fill:#fff" d = "M116.8525 421.9722c-5.7041.0-10.3442-4.3127-10.3442-9.6129V88.183c0-5.3002 4.6401-9.6117 10.3442-9.6117H320.858c3.0347.0 9.3959.5498 11.7506 2.6302l.3545.3442 58.905 63.2912c2.3101 2.491 2.9202 8.4928 2.9202 11.3184v256.2039c0 5.3002-4.6407 9.6129-10.3436 9.6129H116.8525z" / > < g > < g > < g > < path style = "fill:#767676" d = "M384.4445 423.2066H116.852c-6.3839.0-11.5786-4.8658-11.5786-10.8474V88.1831c0-5.9804 5.1947-10.8461 11.5786-10.8461h204.0062c.377.0 9.2786.0329 12.568 2.9389l.3947.3833 58.9508 63.337c3.2135 3.4652 3.2514 11.7924 3.2514 12.1593v256.2036C396.0231 418.3408 390.8284 423.2066 384.4445 423.2066zM116.5079 411.9189c.0848.0278.1999.0531.3441.0531h267.5925c.1442.0.2581-.0253.3441-.0531V156.1556c-.0076-.9033-.3593-3.7347-.7034-5.0037l-57.6527-61.9416c-1.4651-.3176-4.4533-.6389-5.5742-.6389H116.852c-.143.0-.2594.024-.3441.0531V411.9189zm267.4533-261.149zM327.0321 89.371v.0013V89.371z" / > < / g > < / g > < / g > < g > < g > < path style = "fill:#5b7fc0" d = "M189.0874 210.1754l.0012-.0012c7.7751.0012 15.0295 4.1862 18.932 10.9234 1.9177 3.3159 2.9305 7.1011 2.9293 10.9378.0 5.8394-2.2733 11.3304-6.4032 15.4604-4.1288 4.1288-9.6186 6.4032-15.458 6.4032s-11.328-2.2733-15.458-6.4032-6.4032-9.6186-6.4056-15.4628c.0012-6.025 2.454-11.4897 6.4116-15.4473C177.5953 212.627 183.0601 210.1742 189.0874 210.1754zm7.993 21.8576c.0012-1.4042-.3687-2.7868-1.063-3.9887-1.4293-2.4684-4.0833-3.9995-6.9299-4.0019-4.4077.0024-7.993 3.5877-7.993 7.993.0 2.1356.832 4.1431 2.3427 5.6539 1.5083 1.5083 3.5159 2.3403 5.6503 2.3415 2.1356.0 4.1443-.8308 5.6539-2.3403S197.0816 234.1722 197.0804 232.033z" / > < path style = "opacity:.3;fill:#fff" d = "M189.0898 210.176c7.7763.0 15.0283 4.1826 18.926 10.9151 1.9201 3.3136 2.9377 7.0988 2.9353 10.9462.0024 12.0643-9.8065 21.8636-21.8613 21.8613-12.0547.0024-21.8636-9.8066-21.8612-21.8613.0-6.0285 2.4516-11.4921 6.4116-15.452C177.5977 212.6276 183.0612 210.176 189.0898 210.176zm7.9941 21.8612c0-1.4078-.3711-2.7892-1.0702-3.9959-1.4269-2.466-4.0797-3.9983-6.924-3.9983-4.4005-.0048-7.9918 3.5817-7.9942 7.9942.0024 4.4077 3.5865 7.9918 7.9942 7.9942 2.2027.0 4.2018-.8978 5.6479-2.3439C196.1861 236.239 197.0839 234.2399 197.0839 232.0372z" / > < g > < defs > < path id = "SVGID_1_" d = "M194.7376 237.6875c-1.4461 1.4461-3.4452 2.3439-5.6479 2.3439-4.4077-.0024-7.9918-3.5865-7.9942-7.9942.0024-4.4125 3.5937-7.999 7.9942-7.9942 2.8443.0 5.497 1.5323 6.924 3.9983.6991 1.2067 1.0702 2.5881 1.0702 3.9959C197.0839 234.2399 196.1861 236.239 194.7376 237.6875z" / > < / defs > < clipPath id = "SVGID_2_" > < use xlink:href = "#SVGID_1_" style = "overflow:visible" / > < / clipPath > < path style = "clip-path:url(#SVGID_2_);fill:#fff" d = "M190.0704 225.0237c-4.4005-.0048-7.9918 3.5817-7.9942 7.9942.0011 1.9546.7088 3.7452 1.8782 5.1354-1.7447-1.4674-2.8575-3.663-2.8588-6.116.0024-4.4125 3.5936-7.999 7.9942-7.9942 2.3802-1e-4 4.616 1.0833 6.1218 2.8788C193.7885 225.7247 191.9774 225.0237 190.0704 225.0237z" / > < path style = "opacity:.13;clip-path:url(#SVGID_2_);fill:#020202" d = "M190.0704 225.0237c-4.4005-.0048-7.9918 3.5817-7.9942 7.9942.0011 1.9546.7088 3.7452 1.8782 5.1354-1.7447-1.4674-2.8575-3.663-2.8588-6.116.0024-4.4125 3.5936-7.999 7.9942-7.9942 2.3802-1e-4 4.616 1.0833 6.1218 2.8788C193.7885 225.7247 191.9774 225.0237 190.0704 225.0237z" / > < / g > < g > < defs > < path id = "SVGID_3_" d = "M189.0898 210.176c7.7763.0 15.0283 4.1826 18.926 10.9151 1.9201 3.3136 2.9377 7.0988 2.9353 10.9462.0024 12.0643-9.8065 21.8636-21.8613 21.8613-12.0547.0024-21.8636-9.8066-21.8612-21.8613.0-6.0285 2.4516-11.4921 6.4116-15.452C177.5977 212.6276 183.0612 210.176 189.0898 210.176zm7.9941 21.8612c0-1.4078-.3711-2.7892-1.0702-3.9959-1.4269-2.466-4.0797-3.9983-6.924-3.9983-4.4005-.0048-7.9918 3.5817-7.9942 7.9942.0024 4.4077 3.5865 7.9918 7.9942 7.9942 2.2027.0 4.2018-.8978 5.6479-2.3439C196.1861 236.239 197.0839 234.2399 197.0839 232.0372z" / > < / defs > < clipPath id = "SVGID_4_" > < use xlink:href = "#SVGID_3_" style = "overflo
< / a >
< div class = "td-navbar-nav-scroll ml-md-auto" id = "main_navbar" >
< ul class = "navbar-nav mt-2 mt-lg-0" >
< li class = "nav-item mr-4 mb-2 mb-lg-0" >
2022-01-30 20:58:50 +00:00
< a class = "nav-link" href = "/about/" > < span > About< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< li class = "nav-item mr-4 mb-2 mb-lg-0" >
2022-01-30 20:58:50 +00:00
< a class = "nav-link active" href = "/docs/" > < span class = "active" > Documentation< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< li class = "nav-item mr-4 mb-2 mb-lg-0" >
2022-01-30 20:58:50 +00:00
< a class = "nav-link" href = "/blog/" > < span > Blog< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< li class = "nav-item mr-4 mb-2 mb-lg-0" >
2022-01-30 20:58:50 +00:00
< a class = "nav-link" href = "/community/" > < span > Community< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< li class = "nav-item mr-4 mb-2 mb-lg-0" >
< a class = "nav-link" href = "https://github.com/mudler/luet/contribute" target = "_blank" > < i class = 'fab fa-github' > < / i > < span > Contribution guidelines< / span > < / a >
< / li >
< / ul >
< / div >
< div class = "navbar-nav d-none d-lg-block" > < input
type="search"
class="form-control td-search-input"
placeholder=" Search this site…"
aria-label="Search this site…"
autocomplete="off"
2022-02-15 20:18:17 +00:00
data-offline-search-index-json-src="/offline-search-index.72b6075a770705d05a5c74adb1af94ee.json"
2022-01-30 20:34:01 +00:00
data-offline-search-base-href="/"
data-offline-search-max-results="10"
>
< / div >
< / nav >
< / header >
< div class = "container-fluid td-outer" >
< div class = "td-main" >
< div class = "row flex-xl-nowrap" >
< aside class = "col-12 col-md-3 col-xl-2 td-sidebar d-print-none" >
< div id = "td-sidebar-menu" class = "td-sidebar__inner" >
< form class = "td-sidebar__search d-flex align-items-center" >
< input
type="search"
class="form-control td-search-input"
placeholder=" Search this site…"
aria-label="Search this site…"
autocomplete="off"
2022-02-15 20:18:17 +00:00
data-offline-search-index-json-src="/offline-search-index.72b6075a770705d05a5c74adb1af94ee.json"
2022-01-30 20:34:01 +00:00
data-offline-search-base-href="/"
data-offline-search-max-results="10"
>
< button class = "btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type = "button" data-toggle = "collapse" data-target = "#td-section-nav" aria-controls = "td-docs-nav" aria-expanded = "false" aria-label = "Toggle section navigation" >
< / button >
< / form >
< nav class = "collapse td-sidebar-nav" id = "td-section-nav" >
< ul class = "td-sidebar-nav__section pr-md-3 ul-0" >
2022-01-30 20:58:50 +00:00
< li class = "td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id = "m-docs-li" >
< a href = "/docs/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__section tree-root" id = "m-docs" > < span class = "" > Documentation< / span > < / a >
2022-01-30 20:34:01 +00:00
< ul class = "ul-1" >
2022-01-30 20:58:50 +00:00
< li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsgetting-started-li" >
< a href = "/docs/getting-started/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__section" id = "m-docsgetting-started" > < span class = "" > Getting Started< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id = "m-docsconcepts-li" >
< a href = "/docs/concepts/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__section" id = "m-docsconcepts" > < span class = "" > Concepts< / span > < / a >
2022-01-30 20:34:01 +00:00
< ul class = "ul-2 foldable" >
2022-01-30 20:58:50 +00:00
< li class = "td-sidebar-nav__section-title td-sidebar-nav__section with-child active-path" id = "m-docsconceptsoverview-li" >
< a href = "/docs/concepts/overview/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__section" id = "m-docsconceptsoverview" > < span class = "" > Overview< / span > < / a >
2022-01-30 20:34:01 +00:00
< ul class = "ul-3 foldable" >
2022-01-30 20:58:50 +00:00
< li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsconceptsoverviewbuild_packages-li" >
< a href = "/docs/concepts/overview/build_packages/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsconceptsoverviewbuild_packages" > < span class = "" > Building packages< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child active-path" id = "m-docsconceptsoverviewrepositories-li" >
< a href = "/docs/concepts/overview/repositories/" class = "align-left pl-0 active td-sidebar-link td-sidebar-link__page" id = "m-docsconceptsoverviewrepositories" > < span class = "td-sidebar-nav-active-item" > Creating Luet repositories< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsconceptsoverviewusage-li" >
< a href = "/docs/concepts/overview/usage/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsconceptsoverviewusage" > < span class = "" > CLI usage< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsconceptsoverviewconstraints-li" >
< a href = "/docs/concepts/overview/constraints/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsconceptsoverviewconstraints" > < span class = "" > CSP, SAT & & RL< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< / ul >
2022-01-30 20:58:50 +00:00
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section with-child" id = "m-docsconceptspackages-li" >
< a href = "/docs/concepts/packages/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__section" id = "m-docsconceptspackages" > < span class = "" > Packages< / span > < / a >
2022-01-30 20:34:01 +00:00
< ul class = "ul-3 foldable" >
2022-01-30 20:58:50 +00:00
< li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsconceptspackagesspecfile-li" >
< a href = "/docs/concepts/packages/specfile/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsconceptspackagesspecfile" > < span class = "" > Specfile< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsconceptspackagestemplates-li" >
< a href = "/docs/concepts/packages/templates/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsconceptspackagestemplates" > < span class = "" > Templated packages< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsconceptspackagescollections-li" >
< a href = "/docs/concepts/packages/collections/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsconceptspackagescollections" > < span class = "" > Collections< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< / ul >
2022-01-30 20:58:50 +00:00
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsconceptsplugins-and-extensions-li" >
< a href = "/docs/concepts/plugins-and-extensions/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__section" id = "m-docsconceptsplugins-and-extensions" > < span class = "" > Plugins and Extensions< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< / ul >
2022-01-30 20:58:50 +00:00
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section with-child" id = "m-docstutorials-li" >
< a href = "/docs/tutorials/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__section" id = "m-docstutorials" > < span class = "" > Tutorials< / span > < / a >
2022-01-30 20:34:01 +00:00
< ul class = "ul-2 foldable" >
2022-01-30 20:58:50 +00:00
< li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docstutorialshello_world-li" >
< a href = "/docs/tutorials/hello_world/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docstutorialshello_world" > < span class = "" > Hello world!< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docstutorialsbuild_package-li" >
< a href = "/docs/tutorials/build_package/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docstutorialsbuild_package" > < span class = "" > Build a package< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< / ul >
2022-01-30 20:58:50 +00:00
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section with-child" id = "m-docsresources-li" >
< a href = "/docs/resources/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__section" id = "m-docsresources" > < span class = "" > Resources< / span > < / a >
2022-01-30 20:34:01 +00:00
< ul class = "ul-2 foldable" >
2022-01-30 20:58:50 +00:00
< li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsresourcesarm-li" >
< a href = "/docs/resources/arm/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsresourcesarm" > < span class = "" > ARM images< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsresourcesbuilding-li" >
< a href = "/docs/resources/building/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsresourcesbuilding" > < span class = "" > Building< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsresourcesfaq-li" >
< a href = "/docs/resources/faq/" title = "Frequently Asked Questions" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsresourcesfaq" > < span class = "" > FAQ< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsresourcesscratch-li" >
< a href = "/docs/resources/scratch/" title = "Images from scratch" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsresourcesscratch" > < span class = "" > ScratchImages< / span > < / a >
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsresourcesreferences-li" >
< a href = "/docs/resources/references/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsresourcesreferences" > < span class = "" > References< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< / ul >
2022-01-30 20:58:50 +00:00
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docscontribution-guidelines-li" >
< a href = "/docs/contribution-guidelines/" title = "Contributing" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docscontribution-guidelines" > < span class = "" > Contribution guidelines< / span > < / a >
2022-01-30 20:34:01 +00:00
< / li >
< / ul >
< / li >
< / ul >
< / nav >
< / div >
< / aside >
< aside class = "d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none" >
< div class = "td-page-meta ml-2 pb-1 pt-2 mb-0" >
< a href = "https://github.com/mudler/luet/tree/master/docs/content/en/docs/Concepts/Overview/repositories.md" class = "td-page-meta--view" target = "_blank" rel = "noopener" > < i class = "fa fa-file-alt fa-fw" > < / i > View page source< / a >
< a href = "https://github.com/mudler/luet/edit/master/docs/content/en/docs/Concepts/Overview/repositories.md" class = "td-page-meta--edit" target = "_blank" rel = "noopener" > < i class = "fa fa-edit fa-fw" > < / i > Edit this page< / a >
< a href = "https://github.com/mudler/luet/new/master/docs/content/en/docs/Concepts/Overview/repositories.md?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" class = "td-page-meta--child" target = "_blank" rel = "noopener" > < i class = "fa fa-edit fa-fw" > < / i > Create child page< / a >
< a href = "https://github.com/mudler/luet/issues/new?title=Creating%20Luet%20repositories" class = "td-page-meta--issue" target = "_blank" rel = "noopener" > < i class = "fab fa-github fa-fw" > < / i > Create documentation issue< / a >
< a href = "https://github.com/mudler/luet/issues/new" class = "td-page-meta--project-issue" target = "_blank" rel = "noopener" > < i class = "fas fa-tasks fa-fw" > < / i > Create project issue< / a >
< / div >
< div class = "td-toc" > < nav id = "TableOfContents" >
< ul >
2022-02-04 18:55:43 +00:00
< li > < a href = "#repository-fields" > Repository fields< / a > < / li >
2022-01-30 20:34:01 +00:00
< li > < a href = "#create-a-repository" > Create a repository< / a >
< ul >
< li > < a href = "#flags" > Flags< / a > < / li >
< / ul >
< / li >
< li > < a href = "#example" > Example< / a >
< ul >
< li > < a href = "#repositories-type" > Repositories type< / a > < / li >
< / ul >
< / li >
2022-02-04 18:55:43 +00:00
< li > < a href = "#repositories-snapshots" > Repositories snapshots< / a >
< ul >
< li > < a href = "#consuming-repository-snapshots" > Consuming repository snapshots< / a > < / li >
< / ul >
< / li >
2022-01-30 20:34:01 +00:00
< li > < a href = "#notes" > Notes< / a > < / li >
< / ul >
< / nav > < / div >
< / aside >
< main class = "col-12 col-md-9 col-xl-8 pl-md-5" role = "main" >
< div class = "td-content" >
< h1 > Creating Luet repositories< / h1 >
< div class = "lead" > How to create Luet repositories< / div >
< header class = "article-meta" >
< / header >
< p > After a set of packages has been built, a repository must be created in order to make them accessible by Luet clients. A Repository can be served either local files or via http(s) (at the moment of writing). Luet, by default, supports multiple-repositories with priorities.< / p >
2022-02-04 18:55:43 +00:00
< h2 id = "repository-fields" > Repository fields< / h2 >
< div class = "highlight" > < pre tabindex = "0" style = "background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4" > < code class = "language-yaml" data-lang = "yaml" > < span style = "color:#204a87;font-weight:bold" > name< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#4e9a06" > " ..." < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > description< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#4e9a06" > " ..." < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > type< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#4e9a06" > " docker" < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > cached< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > true< / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > enabled< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > true< / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > arch< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#4e9a06" > " amd64" < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > priority< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#0000cf;font-weight:bold" > 3< / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > urls< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > - < span style = "color:#4e9a06" > " ..." < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < / code > < / pre > < / div > < p > Repositories have the following fields, notably:< / p >
< ul >
< li > < code > name< / code > : Repository name< / li >
< li > < code > description< / code > : Repository description< / li >
< li > < code > cached< / code > : Enable/disable repository cache< / li >
< li > < code > enable< / code > : Enable/disables the repository< / li >
< li > < code > urls< / code > : A List of urls where the repository is hosted from< / li >
< li > < code > type< / code > : Repository type ( < code > docker< / code > , < code > disk< / code > , < code > http< / code > are currently supported )< / li >
< li > < code > arch< / code > : (optional) Denotes the arch repository. If present, it will enable the repository automatically if the corresponding arch is matching with the host running < code > luet< / code > . < code > enable: true< / code > would override this behavior< / li >
< li > < code > reference< / code > : (optional) A reference to a repository index file to use to retrieve the repository metadata instead of latest. This can be used to point to a different or an older repository index to act as a “ wayback machine” . The client will consume the repository state from that snapshot instead of latest.< / li >
< / ul >
< div class = "alert alert-primary" role = "alert" >
< h4 class = "alert-heading" > Note< / h4 >
The < code > reference< / code > field has to be a valid tag. For example, if a repository is a docker type, browse the image tags. The repository index snapshots are prefixed with a timestamp, and ending in < code > repository.yaml< / code > . For example < code > 20211027153653-repository.yaml< / code >
< / div >
2022-01-30 20:34:01 +00:00
< h2 id = "create-a-repository" > Create a repository< / h2 >
< p > After issuing a < code > luet build< / code > , the built packages are present in the output build directory. The < code > create-repo< / code > step is needed to generate a portable tree, which is read by the clients, and a < code > repository.yaml< / code > which contains the repository metadata.< / p >
< p > Note that the output of < code > create-repo< / code > is < em > additive< / em > so it integrates with the current build content. The repository is composed by the packages generated by the < code > build< / code > command (or < code > pack< / code > ) and the < code > create-repo< / code > generated metadata.< / p >
< h3 id = "flags" > Flags< / h3 >
< p > Some of the relevant flags for < code > create-repo< / code > are:< / p >
< ul >
< li > < strong > – descr< / strong > : Repository description< / li >
< li > < strong > – name< / strong > : Repository name< / li >
< li > < strong > – output< / strong > : Metadata output folder (while a different path can be specified, it’ s prefered to output the metadata files directly to the package directory).This most of the time matches the packages path for convenience.< / li >
< li > < strong > – packages< / strong > : Directory where built packages are stored. This most of the time is also the output path.< / li >
< li > < strong > – reset-revision< / strong > : Reset the repository revision number< / li >
< li > < strong > – tree-path< / strong > : Specify a custom name for the tree path. (Defaults to tree.tar)< / li >
< li > < strong > – tree-compression< / strong > : Specify a compression algorithm for the tree. (Available: gzip, Defaults: none)< / li >
< li > < strong > – tree< / strong > : Path of the tree which was used to generate the packages and holds package metadatas< / li >
< li > < strong > – type< / strong > : Repository type (http/local). It is just descriptive, the clients will be able to consume the repo in whatsoever way it is served.< / li >
< li > < strong > – urls< / strong > : List of URIS where the repository is available< / li >
< / ul >
< p > See < code > luet create-repo --help< / code > for a full description.< / p >
< h2 id = "example" > Example< / h2 >
< p > Build a package and generate the repository metadata:< / p >
< pre tabindex = "0" > < code > $> mkdir package
$> cat < < EOF > package/build.yaml
image: busybox
steps:
- echo " foo" > /foo
EOF
$> cat < < EOF > package/definition.yaml
name: " foo"
version: " 0.1"
category: " bar" # optional!
EOF
$> luet build --all --destination $PWD/out/ --tree $PWD/package
📦 Selecting foo 0.1
📦 Compiling foo version 0.1 .... ☕
🐋 Downloading image luet/cache-foo-bar-0.1-builder
🐋 Downloading image luet/cache-foo-bar-0.1
📦 foo Generating 🐋 definition for builder image from busybox
🐋 Building image luet/cache-foo-bar-0.1-builder
🐋 Building image luet/cache-foo-bar-0.1-builder done
Sending build context to Docker daemon 4.096kB
...
$> luet create-repo --name " test" --output $PWD/out --packages $PWD/out --tree $PWD/package
For repository test creating revision 1 and last update 1580641614...
$> ls out
foo-bar-0.1-builder.image.tar foo-bar-0.1.image.tar foo-bar-0.1.metadata.yaml foo-bar-0.1.package.tar repository.yaml tree.tar
< / code > < / pre > < h3 id = "repositories-type" > Repositories type< / h3 >
< p > There are 3 types of repositories supported by luet: < code > disk< / code > , < code > http< / code > , < code > docker< / code > .< / p >
< h4 id = "disk" > < code > disk< / code > < / h4 >
< p > It is a repository which is merely a local folder in your system. When creating a repository and specifying < code > --output< / code > , < code > luet< / code > expects a local path to the system where to store the generated metadata.< / p >
< h4 id = "http" > < code > http< / code > < / h4 >
< p > It is a repository type which is hosted behind a webserver. When creating a repository and specifying < code > --output< / code > , < code > luet< / code > expects a local path to the system where to store the generated metadata, similarly to the < code > disk< / code > repository type. Luet is not handling any file upload. The < code > http< / code > repository type gains meaning when being used from the client, where the repository source must be specified< / p >
< h4 id = "docker" > < code > docker< / code > < / h4 >
< p > When specifying the < code > docker< / code > repository type, < code > luet< / code > will generate final images from the build results and upload them to the docker reference specified with < code > --output< / code > . The images contains the artifact output from the build result, and they are tagged accordingly to their package name. A single image reference needs to be passed, all the packages will be pushed in a single image but with different tags.< / p >
< p > The login to the container registry is not handled, the daemon needs to have already proper permissions to push the image to the destination.< / p >
2022-02-04 18:55:43 +00:00
< h2 id = "repositories-snapshots" > Repositories snapshots< / h2 >
< p > Luet automatically will create repository index snapshots. This allows clients to point to specific references of repositories besides the latest package set published.< / p >
< p > < code > luet create-repo< / code > optionally takes a < code > --snapshot-id< / code > argument to define the snapshot name, otherwise it defaults to the unix date timestamp.< / p >
< p > Combined with < code > --push-images< / code > with a container repository type, it automatically tags and pushes snapshots images too.< / p >
< h3 id = "consuming-repository-snapshots" > Consuming repository snapshots< / h3 >
< p > A client can define a repository, with an optional < code > reference< / code > keyword:< / p >
< div class = "highlight" > < pre tabindex = "0" style = "background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4" > < code class = "language-yaml" data-lang = "yaml" > < span style = "color:#204a87;font-weight:bold" > name< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#4e9a06" > " ..." < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > description< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#4e9a06" > " ..." < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > type< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#4e9a06" > " docker" < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > priority< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#0000cf;font-weight:bold" > 3< / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > reference< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#0000cf;font-weight:bold" > 20220204175357< / span > -< span style = "color:#000" > repository.yaml< / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > < span style = "color:#204a87;font-weight:bold" > urls< / span > < span style = "color:#000;font-weight:bold" > :< / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < span style = "color:#f8f8f8;text-decoration:underline" > < / span > - < span style = "color:#4e9a06" > " ..." < / span > < span style = "color:#f8f8f8;text-decoration:underline" >
< / span > < / code > < / pre > < / div > < h2 id = "notes" > Notes< / h2 >
2022-01-30 20:34:01 +00:00
< ul >
< li > The tree of definition being used to build the repository, and the package directories must < strong > not< / strong > be symlinks.< / li >
< li > To build a repository is not required to hold the packages artifacts, only the respective < code > metadata.yaml< / code > file is required.< / li >
< / ul >
< style >
.feedback--answer {
display: inline-block;
}
.feedback--answer-no {
margin-left: 1em;
}
.feedback--response {
display: none;
margin-top: 1em;
}
.feedback--response__visible {
display: block;
}
< / style >
< div class = "d-print-none" >
< h2 class = "feedback--title" > Feedback< / h2 >
< p class = "feedback--question" > Was this page helpful?< / p >
< button class = "btn btn-primary mb-4 feedback--answer feedback--answer-yes" > Yes< / button >
< button class = "btn btn-primary mb-4 feedback--answer feedback--answer-no" > No< / button >
< p class = "feedback--response feedback--response-yes" >
Glad to hear it! Please < a href = "https://github.com/Luet-lab/docs/issues/new" > tell us how we can improve< / a > .
< / p >
< p class = "feedback--response feedback--response-no" >
Sorry to hear that. Please < a href = "https://github.com/Luet-lab/docs/issues/new" > tell us how we can improve< / a > .
< / p >
< / div >
< script >
const yesButton = document.querySelector('.feedback--answer-yes');
const noButton = document.querySelector('.feedback--answer-no');
const yesResponse = document.querySelector('.feedback--response-yes');
const noResponse = document.querySelector('.feedback--response-no');
const disableButtons = () => {
yesButton.disabled = true;
noButton.disabled = true;
};
const sendFeedback = (value) => {
if (typeof ga !== 'function') return;
const args = {
command: 'send',
hitType: 'event',
category: 'Helpful',
action: 'click',
label: window.location.pathname,
value: value
};
ga(args.command, args.hitType, args.category, args.action, args.label, args.value);
};
yesButton.addEventListener('click', () => {
yesResponse.classList.add('feedback--response__visible');
disableButtons();
sendFeedback(1);
});
noButton.addEventListener('click', () => {
noResponse.classList.add('feedback--response__visible');
disableButtons();
sendFeedback(0);
});
< / script >
< br / >
< div class = "text-muted mt-5 pt-3 border-top" >
2022-02-15 20:18:17 +00:00
Last modified February 15, 2022: < a href = "https://github.com/mudler/luet/commit/660c5a2dab085f6ae2e292e1bd275cc7c0b9182e" > :notebook: Update docs to mention agregOS (660c5a2)< / a >
2022-01-30 20:34:01 +00:00
< / div >
< / div >
< / main >
< / div >
< / div >
< footer class = "bg-dark py-5 row d-print-none" >
< div class = "container-fluid mx-sm-5" >
< div class = "row" >
< div class = "col-6 col-sm-4 text-xs-center order-sm-2" >
< / div >
< div class = "col-6 col-sm-4 text-right text-xs-center order-sm-3" >
< ul class = "list-inline mb-0" >
< li class = "list-inline-item mx-2 h3" data-toggle = "tooltip" data-placement = "top" title = "GitHub" aria-label = "GitHub" >
< a class = "text-white" target = "_blank" rel = "noopener" href = "https://github.com/mudler/luet" aria-label = "GitHub" >
< i class = "fab fa-github" > < / i >
< / a >
< / li >
< li class = "list-inline-item mx-2 h3" data-toggle = "tooltip" data-placement = "top" title = "Slack" aria-label = "Slack" >
< a class = "text-white" target = "_blank" rel = "noopener" href = "https://join.slack.com/t/luet/shared_invite/enQtOTQxMjcyNDQ0MDUxLWQ5ODVlNTI1MTYzNDRkYzkyYmM1YWE5YjM0NTliNDEzNmQwMTkxNDRhNDIzM2Y5NDBlOTZjZTYxYWQyNDE4YzY" aria-label = "Slack" >
< i class = "fab fa-slack" > < / i >
< / a >
< / li >
< / ul >
< / div >
< div class = "col-12 col-sm-4 text-center py-2 order-sm-2" >
< small class = "text-white" > © 2022 Ettore Di Giacinto All Rights Reserved< / small >
< small class = "ml-1" > < a href = "https://policies.google.com/privacy" target = "_blank" rel = "noopener" > Privacy Policy< / a > < / small >
2022-01-30 20:58:50 +00:00
< p class = "mt-2" > < a href = "/about/" > About Luet< / a > < / p >
2022-01-30 20:34:01 +00:00
< / div >
< / div >
< / div >
< / footer >
< / div >
< script src = "https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"
integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"
crossorigin="anonymous">< / script >
< script src = "https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js"
integrity="sha512-UR25UO94eTnCVwjbXozyeVd6ZqpaAE9naiEUBK/A+QDbfSTQFhPGj5lOR6d8tsgbBk84Ggb5A3EkjsOgPRPcKA=="
crossorigin="anonymous">< / script >
2022-01-30 20:58:50 +00:00
< script src = '/js/tabpane-persist.js' > < / script >
2022-01-30 20:34:01 +00:00
2022-01-30 20:58:50 +00:00
< script src = "/js/main.min.8ab8f81ff7e1454d30024cd6f956d4d341c3a97e2a673f988065f2ee4e147922.js" integrity = "sha256-irj4H/fhRU0wAkzW+VbU00HDqX4qZz+YgGXy7k4UeSI=" crossorigin = "anonymous" > < / script >
2022-01-30 20:34:01 +00:00
< / body >
< / html >