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 > CSP, SAT & & RL | Luet< / title >
< meta name = "description" content = "How Luet turns Image resolution into CSP
">
< meta property = "og:title" content = "CSP, SAT && RL" / >
< meta property = "og:description" content = "How Luet turns Image resolution into CSP
" />
< 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/constraints/" / > < meta property = "article:section" content = "docs" / >
2022-01-30 20:34:01 +00:00
2023-08-21 09:10:44 +00:00
< meta property = "article:modified_time" content = "2023-08-21T11:09:46+02:00" / > < meta property = "og:site_name" content = "Luet" / >
2022-01-30 20:34:01 +00:00
< meta itemprop = "name" content = "CSP, SAT && RL" >
< meta itemprop = "description" content = "How Luet turns Image resolution into CSP
">
2023-08-21 09:10:44 +00:00
< meta itemprop = "dateModified" content = "2023-08-21T11:09:46+02:00" / >
2022-01-30 20:34:01 +00:00
< meta itemprop = "wordCount" content = "241" >
< meta itemprop = "keywords" content = "" / > < meta name = "twitter:card" content = "summary" / >
< meta name = "twitter:title" content = "CSP, SAT && RL" / >
< meta name = "twitter:description" content = "How Luet turns Image resolution into CSP
"/>
2023-08-02 16:15:03 +00:00
< link rel = "preload" href = "/scss/main.min.0cb933646f7a5fcbdc4408957af61d9cdcccb2a9bfff09fa97d7e2120e6dc058.css" as = "style" >
< link href = "/scss/main.min.0cb933646f7a5fcbdc4408957af61d9cdcccb2a9bfff09fa97d7e2120e6dc058.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"
2023-08-02 16:15:03 +00:00
data-offline-search-index-json-src="/offline-search-index.4fe7714e302eef4501ae919bdbad5ce4.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"
2023-08-02 16:15:03 +00:00
data-offline-search-index-json-src="/offline-search-index.4fe7714e302eef4501ae919bdbad5ce4.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" id = "m-docsconceptsoverviewrepositories-li" >
< a href = "/docs/concepts/overview/repositories/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsconceptsoverviewrepositories" > < span class = "" > 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 active-path" id = "m-docsconceptsoverviewconstraints-li" >
< a href = "/docs/concepts/overview/constraints/" class = "align-left pl-0 active td-sidebar-link td-sidebar-link__page" id = "m-docsconceptsoverviewconstraints" > < span class = "td-sidebar-nav-active-item" > CSP, SAT & & RL< / span > < / a >
2023-08-02 16:15:03 +00:00
< / li > < li class = "td-sidebar-nav__section-title td-sidebar-nav__section without-child" id = "m-docsconceptsoverviewconfiguration-li" >
< a href = "/docs/concepts/overview/configuration/" class = "align-left pl-0 td-sidebar-link td-sidebar-link__page" id = "m-docsconceptsoverviewconfiguration" > < span class = "" > < / 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/constraints.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/constraints.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/constraints.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=CSP,%20SAT%20&&%20RL" 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 >
< li > < a href = "#requires-and-conflicts" > Requires and Conflicts< / a > < / li >
< li > < a href = "#provides" > Provides< / a > < / li >
< li > < a href = "#references" > References< / 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 > CSP, SAT & & RL< / h1 >
< div class = "lead" > How Luet turns Image resolution into CSP< / div >
< header class = "article-meta" >
< / header >
< p > Under the hood, Luet uses boolean satisfiability problem (< a href = "https://en.wikipedia.org/wiki/Boolean_satisfiability_problem" > SAT< / a > ) < a href = "https://en.wikipedia.org/wiki/Reinforcement_learning" > reinforcement learning< / a > techniques to solve package constraints.< / p >
2023-02-02 11:00:44 +00:00
< p > Luet allows you to specify 3 types of set of contraints on a < a href = "/docs/concepts/packages/" > package< / a > definition:< / p >
2022-01-30 20:34:01 +00:00
< ul >
< li > Requires< / li >
< li > Conflicts< / li >
< li > Provides< / li >
< / ul >
< p > The package definition in your tree definition, along with its Requires and Conflicts, are turned into Boolean formulas that are consumed by the solver to compute a solution. The solution represent the state of your system after a particular query is asked to the solver (Install, Uninstall, Upgrade).< / p >
< h2 id = "requires-and-conflicts" > Requires and Conflicts< / h2 >
2023-02-02 11:00:44 +00:00
< p > A list of requires and conflicts, composed of one or more < a href = "/docs/concepts/packages/" > packages< / a > , becomes a SAT formula. The formula is then given to the SAT solver to compute a finite state set of packages which must be installed in the system in order to met the requirements.< / p >
2022-01-30 20:34:01 +00:00
< p > As Luet allows to express constraints with selectors ( e.g. < code > A depends on > =B-1.0< / code > ) it generates additional constraints to guarantee that at least one package and at most one is picked as dependency (< em > ALO< / em > and < em > AMO< / em > ).< / p >
< h2 id = "provides" > Provides< / h2 >
< p > Provides constraints are not encoded in a SAT formula. Instead, they are < code > expanded< / code > into an in-place substitution of the packages that they have to be replaced with.
They share the same SAT logic of expansion, allowing to swap entire version ranges (e.g. < code > > =1.0< / code > ), allowing to handle package rename, removals, and virtuals.< / p >
< h2 id = "references" > References< / h2 >
< ul >
< li > OPIUM (Luet is inspired by it): < a href = "https://ranjitjhala.github.io/static/opium.pdf" > https://ranjitjhala.github.io/static/opium.pdf< / a > < / li >
< li > FROM TRACTABLE CSP TO TRACTABLE SAT: < a href = "https://www.cs.ox.ac.uk/files/4014/maxclosed_orderencoding_v16_TR.pdf" > https://www.cs.ox.ac.uk/files/4014/maxclosed_orderencoding_v16_TR.pdf< / a > < / li >
< li > Solver concepts applied to packages (< code > zypper< / code > ): < a href = "https://en.opensuse.org/openSUSE:Libzypp_satsolver_basics" > https://en.opensuse.org/openSUSE:Libzypp_satsolver_basics< / a > < / 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" >
2023-08-21 09:10:44 +00:00
Last modified August 21, 2023: < a href = "https://github.com/mudler/luet/commit/c47bf4833aef41e6ac3e8c831c1cfa8afc091592" > Try to fix tests due to upx (#343) (c47bf48)< / 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" >
2023-02-02 11:00:44 +00:00
< small class = "text-white" > © 2023 Ettore Di Giacinto All Rights Reserved< / small >
2022-01-30 20:34:01 +00:00
< 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 >