[{"data":1,"prerenderedAt":870},["ShallowReactive",2],{"navigation":3,"\u002Fpoc\u002Fmanage-image":73,"\u002Fpoc\u002Fmanage-image-surround":854,"-poc-manage-image-description":859},[4,9,14,63,68],{"title":5,"path":6,"stem":7,"icon":8},"Goals","\u002Fgoals","0.goals","i-lucide-goal",{"title":10,"path":11,"stem":12,"icon":13},"Specification","\u002Fspec","1.spec","i-lucide-square-pen",{"title":15,"path":16,"stem":17,"children":18,"icon":62},"Proof of Concept","\u002Fpoc","3.poc\u002F0.index",[19,22,27,32,37,42,47,52,57],{"title":20,"path":16,"stem":17,"icon":21},"Overview","i-lucide-play",{"title":23,"path":24,"stem":25,"icon":26},"Container Image","\u002Fpoc\u002Fmanage-image","3.poc\u002F1.manage-image","i-lucide-layers",{"title":28,"path":29,"stem":30,"icon":31},"Server Setup","\u002Fpoc\u002Fsetup-server","3.poc\u002F2.setup-server","i-lucide-server",{"title":33,"path":34,"stem":35,"icon":36},"User Management","\u002Fpoc\u002Fmanage-users","3.poc\u002F3.manage-users","i-lucide-square-user",{"title":38,"path":39,"stem":40,"icon":41},"Fleet Management","\u002Fpoc\u002Fmanage-fleet","3.poc\u002F4.manage-fleet","i-lucide-circle-pile",{"title":43,"path":44,"stem":45,"icon":46},"Provisioning","\u002Fpoc\u002Fprovisioning","3.poc\u002F5.provisioning","i-lucide-image-down",{"title":48,"path":49,"stem":50,"icon":51},"User Data","\u002Fpoc\u002Fmanage-data","3.poc\u002F6.manage-data","i-lucide-folder-sync",{"title":53,"path":54,"stem":55,"icon":56},"Branding","\u002Fpoc\u002Fbranding","3.poc\u002F7.branding","i-lucide-paintbrush",{"title":58,"path":59,"stem":60,"icon":61},"Legacy Apps","\u002Fpoc\u002Flegacy-apps","3.poc\u002F7.legacy-apps","i-lucide-hourglass","i-lucide-code-xml",{"title":64,"path":65,"stem":66,"icon":67},"Use Cases","\u002Fuse-cases","4.use-cases","i-lucide-list",{"title":69,"path":70,"stem":71,"icon":72},"FAQ","\u002Ffaq","5.faq","i-lucide-message-circle-question-mark",{"id":74,"title":75,"body":76,"description":848,"extension":849,"meta":850,"navigation":851,"path":24,"seo":852,"stem":25,"__hash__":853},"docs\u002F3.poc\u002F1.manage-image.md","Container Image (Software) Management",{"type":77,"value":78,"toc":842},"minimark",[79,89,104,110,229,244,248,586,589,612,617,626,629,672,674,763,767,770,799,805,809,823,827,838],[80,81,82,83,88],"p",{},"Many ",[84,85,87],"a",{"href":86},"\u002Fuse-cases#notable-migrations","use cases"," of Linux on the desktop in the public sector rely on an existing Linux distribution (such as Ubuntu or Debian) and develop customisations on top. System administrators build then an image that contains original (upstream) packages as well as custom packages and custom configuration.",[80,90,91,92,98,99,103],{},"Instead of relying on custom orchestration for such customisations on top of existing Linux distributions, EU OS proposes to use Containerfiles (vendor-independent Dockerfiles) that are ",[84,93,97],{"href":94,"rel":95},"https:\u002F\u002Fspecs.opencontainers.org\u002Fimage-spec\u002F",[96],"nofollow","standardised"," by the ",[100,101,102],"em",{},"Open Containers Initiative"," (OCI).",[80,105,106],{},[107,108,109],"strong",{},"Example:",[111,112,117],"pre",{"className":113,"code":114,"language":115,"meta":116,"style":116},"language-docker shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# point to base image with FROM directive\nFROM registry.gitlab.io\u002Feu-os\u002Fworkspace-images\u002Feu-os-base:latest@sha256:4ba9085726ebfff22f9e589395929bbf8d46260f07470052011d6b86f4599abd\n\n# install some extra packages\nRUN --mount=type=cache,dst=\u002Fvar\u002Fcache \\\n    --mount=type=cache,dst=\u002Fvar\u002Flog \\\n    --mount=type=tmpfs,dst=\u002Ftmp \\\n    dnf5 -y group install domain-client && \\\n    dnf5 -y install subscription-manager puppet && \\\n    sudo systemctl enable puppet\n\n# add some extra files\nRUN cat \u003C\u003CEOF > \u002Fetc\u002Fpuppet\u002Fpuppet.conf\n[main]\nserver = fleet.testing.eu-os.eu\nEOF\n","docker","",[118,119,120,129,140,147,153,162,168,174,180,186,192,197,203,211,217,223],"code",{"__ignoreMap":116},[121,122,125],"span",{"class":123,"line":124},"line",1,[121,126,128],{"class":127},"sHwdD","# point to base image with FROM directive\n",[121,130,132,136],{"class":123,"line":131},2,[121,133,135],{"class":134},"sbssI","FROM",[121,137,139],{"class":138},"sTEyZ"," registry.gitlab.io\u002Feu-os\u002Fworkspace-images\u002Feu-os-base:latest@sha256:4ba9085726ebfff22f9e589395929bbf8d46260f07470052011d6b86f4599abd\n",[121,141,143],{"class":123,"line":142},3,[121,144,146],{"emptyLinePlaceholder":145},true,"\n",[121,148,150],{"class":123,"line":149},4,[121,151,152],{"class":127},"# install some extra packages\n",[121,154,156,159],{"class":123,"line":155},5,[121,157,158],{"class":134},"RUN",[121,160,161],{"class":138}," --mount=type=cache,dst=\u002Fvar\u002Fcache \\\n",[121,163,165],{"class":123,"line":164},6,[121,166,167],{"class":138},"    --mount=type=cache,dst=\u002Fvar\u002Flog \\\n",[121,169,171],{"class":123,"line":170},7,[121,172,173],{"class":138},"    --mount=type=tmpfs,dst=\u002Ftmp \\\n",[121,175,177],{"class":123,"line":176},8,[121,178,179],{"class":138},"    dnf5 -y group install domain-client && \\\n",[121,181,183],{"class":123,"line":182},9,[121,184,185],{"class":138},"    dnf5 -y install subscription-manager puppet && \\\n",[121,187,189],{"class":123,"line":188},10,[121,190,191],{"class":138},"    sudo systemctl enable puppet\n",[121,193,195],{"class":123,"line":194},11,[121,196,146],{"emptyLinePlaceholder":145},[121,198,200],{"class":123,"line":199},12,[121,201,202],{"class":127},"# add some extra files\n",[121,204,206,208],{"class":123,"line":205},13,[121,207,158],{"class":134},[121,209,210],{"class":138}," cat \u003C\u003CEOF > \u002Fetc\u002Fpuppet\u002Fpuppet.conf\n",[121,212,214],{"class":123,"line":213},14,[121,215,216],{"class":138},"[main]\n",[121,218,220],{"class":123,"line":219},15,[121,221,222],{"class":138},"server = fleet.testing.eu-os.eu\n",[121,224,226],{"class":123,"line":225},16,[121,227,228],{"class":138},"EOF\n",[80,230,231,232,237,238,243],{},"The project ",[84,233,236],{"href":234,"rel":235},"https:\u002F\u002Fblue-build.org\u002F",[96],"Blue Build"," adds another layer of abstraction, so that such Containerfiles can be conventienly generated with ",[84,239,242],{"href":240,"rel":241},"https:\u002F\u002Fblue-build.org\u002Freference\u002Frecipe\u002F",[96],"recipe.yml"," files.",[80,245,246],{},[107,247,109],{},[111,249,253],{"className":250,"code":251,"language":252,"meta":116,"style":116},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","name: eu-os-my-org\n# description will be included in the image's metadata\ndescription: EU OS for My Org\n\n# the base image to build on top of (FROM) and the version tag to use\nbase-image: registry.gitlab.io\u002Feu-os\u002Fworkspace-images\u002Feu-os-base\nimage-version: latest\n\n# module configuration, executed in order\n# you can include multiple instances of the same module\nmodules:\n  - type: files\n    files:\n      - source: system\n        destination: \u002F # copies files\u002Fsystem\u002F* (* means everything inside it) into your image's root folder \u002F\n\n  - type: rpm-ostree\n    repos:\n      - https:\u002F\u002Fcopr.fedorainfracloud.org\u002Fcoprs\u002Feu-os\u002Fbranding\u002Frepo\u002Ffedora-%OS_VERSION%\u002Feu-os-branding-%OS_VERSION%.repo\n      - https:\u002F\u002Fcopr.fedorainfracloud.org\u002Fcopr\u002Fmy-org\u002Fbranding\u002Frepo\u002Ffedora-%OS_VERSION\u002Fmy-org-branding-%OS_VERSION%.repo\n    install:\n      - btop\n      - yakuake\n      - podman-compose\n      - my-org-branding\n    remove:\n      # example: removing firefox (in favor of the flatpak)\n      - firefox\n      - firefox-langpacks\n\n  - type: default-flatpaks\n    notify: true # Send notification after install\u002Funinstall is finished (true\u002Ffalse)\n    system:\n      # If no repo information is specified, Flathub will be used by default\n      install:\n        - org.mozilla.firefox\n        - org.kde.okular\n        - org.kde.kate\n      remove:\n        - org.kde.kmahjongg\n","yaml",[118,254,255,269,274,284,288,293,303,313,317,322,327,335,348,355,368,381,385,397,405,413,421,429,437,445,453,461,469,475,483,491,496,508,523,531,537,545,554,562,570,578],{"__ignoreMap":116},[121,256,257,261,265],{"class":123,"line":124},[121,258,260],{"class":259},"swJcz","name",[121,262,264],{"class":263},"sMK4o",":",[121,266,268],{"class":267},"sfazB"," eu-os-my-org\n",[121,270,271],{"class":123,"line":131},[121,272,273],{"class":127},"# description will be included in the image's metadata\n",[121,275,276,279,281],{"class":123,"line":142},[121,277,278],{"class":259},"description",[121,280,264],{"class":263},[121,282,283],{"class":267}," EU OS for My Org\n",[121,285,286],{"class":123,"line":149},[121,287,146],{"emptyLinePlaceholder":145},[121,289,290],{"class":123,"line":155},[121,291,292],{"class":127},"# the base image to build on top of (FROM) and the version tag to use\n",[121,294,295,298,300],{"class":123,"line":164},[121,296,297],{"class":259},"base-image",[121,299,264],{"class":263},[121,301,302],{"class":267}," registry.gitlab.io\u002Feu-os\u002Fworkspace-images\u002Feu-os-base\n",[121,304,305,308,310],{"class":123,"line":170},[121,306,307],{"class":259},"image-version",[121,309,264],{"class":263},[121,311,312],{"class":267}," latest\n",[121,314,315],{"class":123,"line":176},[121,316,146],{"emptyLinePlaceholder":145},[121,318,319],{"class":123,"line":182},[121,320,321],{"class":127},"# module configuration, executed in order\n",[121,323,324],{"class":123,"line":188},[121,325,326],{"class":127},"# you can include multiple instances of the same module\n",[121,328,329,332],{"class":123,"line":194},[121,330,331],{"class":259},"modules",[121,333,334],{"class":263},":\n",[121,336,337,340,343,345],{"class":123,"line":199},[121,338,339],{"class":263},"  -",[121,341,342],{"class":259}," type",[121,344,264],{"class":263},[121,346,347],{"class":267}," files\n",[121,349,350,353],{"class":123,"line":205},[121,351,352],{"class":259},"    files",[121,354,334],{"class":263},[121,356,357,360,363,365],{"class":123,"line":213},[121,358,359],{"class":263},"      -",[121,361,362],{"class":259}," source",[121,364,264],{"class":263},[121,366,367],{"class":267}," system\n",[121,369,370,373,375,378],{"class":123,"line":219},[121,371,372],{"class":259},"        destination",[121,374,264],{"class":263},[121,376,377],{"class":267}," \u002F",[121,379,380],{"class":127}," # copies files\u002Fsystem\u002F* (* means everything inside it) into your image's root folder \u002F\n",[121,382,383],{"class":123,"line":225},[121,384,146],{"emptyLinePlaceholder":145},[121,386,388,390,392,394],{"class":123,"line":387},17,[121,389,339],{"class":263},[121,391,342],{"class":259},[121,393,264],{"class":263},[121,395,396],{"class":267}," rpm-ostree\n",[121,398,400,403],{"class":123,"line":399},18,[121,401,402],{"class":259},"    repos",[121,404,334],{"class":263},[121,406,408,410],{"class":123,"line":407},19,[121,409,359],{"class":263},[121,411,412],{"class":267}," https:\u002F\u002Fcopr.fedorainfracloud.org\u002Fcoprs\u002Feu-os\u002Fbranding\u002Frepo\u002Ffedora-%OS_VERSION%\u002Feu-os-branding-%OS_VERSION%.repo\n",[121,414,416,418],{"class":123,"line":415},20,[121,417,359],{"class":263},[121,419,420],{"class":267}," https:\u002F\u002Fcopr.fedorainfracloud.org\u002Fcopr\u002Fmy-org\u002Fbranding\u002Frepo\u002Ffedora-%OS_VERSION\u002Fmy-org-branding-%OS_VERSION%.repo\n",[121,422,424,427],{"class":123,"line":423},21,[121,425,426],{"class":259},"    install",[121,428,334],{"class":263},[121,430,432,434],{"class":123,"line":431},22,[121,433,359],{"class":263},[121,435,436],{"class":267}," btop\n",[121,438,440,442],{"class":123,"line":439},23,[121,441,359],{"class":263},[121,443,444],{"class":267}," yakuake\n",[121,446,448,450],{"class":123,"line":447},24,[121,449,359],{"class":263},[121,451,452],{"class":267}," podman-compose\n",[121,454,456,458],{"class":123,"line":455},25,[121,457,359],{"class":263},[121,459,460],{"class":267}," my-org-branding\n",[121,462,464,467],{"class":123,"line":463},26,[121,465,466],{"class":259},"    remove",[121,468,334],{"class":263},[121,470,472],{"class":123,"line":471},27,[121,473,474],{"class":127},"      # example: removing firefox (in favor of the flatpak)\n",[121,476,478,480],{"class":123,"line":477},28,[121,479,359],{"class":263},[121,481,482],{"class":267}," firefox\n",[121,484,486,488],{"class":123,"line":485},29,[121,487,359],{"class":263},[121,489,490],{"class":267}," firefox-langpacks\n",[121,492,494],{"class":123,"line":493},30,[121,495,146],{"emptyLinePlaceholder":145},[121,497,499,501,503,505],{"class":123,"line":498},31,[121,500,339],{"class":263},[121,502,342],{"class":259},[121,504,264],{"class":263},[121,506,507],{"class":267}," default-flatpaks\n",[121,509,511,514,516,520],{"class":123,"line":510},32,[121,512,513],{"class":259},"    notify",[121,515,264],{"class":263},[121,517,519],{"class":518},"sfNiH"," true",[121,521,522],{"class":127}," # Send notification after install\u002Funinstall is finished (true\u002Ffalse)\n",[121,524,526,529],{"class":123,"line":525},33,[121,527,528],{"class":259},"    system",[121,530,334],{"class":263},[121,532,534],{"class":123,"line":533},34,[121,535,536],{"class":127},"      # If no repo information is specified, Flathub will be used by default\n",[121,538,540,543],{"class":123,"line":539},35,[121,541,542],{"class":259},"      install",[121,544,334],{"class":263},[121,546,548,551],{"class":123,"line":547},36,[121,549,550],{"class":263},"        -",[121,552,553],{"class":267}," org.mozilla.firefox\n",[121,555,557,559],{"class":123,"line":556},37,[121,558,550],{"class":263},[121,560,561],{"class":267}," org.kde.okular\n",[121,563,565,567],{"class":123,"line":564},38,[121,566,550],{"class":263},[121,568,569],{"class":267}," org.kde.kate\n",[121,571,573,576],{"class":123,"line":572},39,[121,574,575],{"class":259},"      remove",[121,577,334],{"class":263},[121,579,581,583],{"class":123,"line":580},40,[121,582,550],{"class":263},[121,584,585],{"class":267}," org.kde.kmahjongg\n",[80,587,588],{},"References:",[590,591,592,599],"ul",{},[593,594,595],"li",{},[84,596,598],{"href":240,"rel":597},[96],"BlueBuild Reference for recipe.yml",[593,600,601,602,607,608],{},"A very comprehensive example on building several images on top of Fedora Atomic with BlueBuild gives the ",[84,603,606],{"href":604,"rel":605},"https:\u002F\u002Fsecureblue.dev\u002F",[96],"secureblue"," project. They rely heavily on reusable recipes per topic: ",[84,609,610],{"href":610,"rel":611},"https:\u002F\u002Fgithub.com\u002Fsecureblue\u002Fsecureblue",[96],[613,614,616],"h2",{"id":615},"introduction-to-bootable-containers-bootc","Introduction to Bootable Containers (bootc)",[80,618,619],{},[620,621],"img",{"alt":622,"src":623,"style":624,"width":625},"Logo of bootc","\u002Fassets\u002Fbootc-logo-full-vert.png","float: right;","200px",[80,627,628],{},"Normal OCI containers cannot be booted. They rely on a host OS that acts as a hypervisor. Bootable containers contain all necessary files, so that when they are loaded on a baremetal device (laptop\u002Fdesktop), they can run without such hypervisor or host OS.",[590,630,631,637,651,662],{},[593,632,633,634],{},"put the OS content ",[107,635,636],{},"in an OCI container",[593,638,639,642,643,646,647,650],{},[107,640,641],{},"extract"," on the device and managed by ",[107,644,645],{},"bootc"," (i.e. ",[107,648,649],{},"not"," running as a container)",[593,652,653,654,657,658,661],{},"reuse OCI container infrastructure to ",[107,655,656],{},"build"," and ",[107,659,660],{},"host"," container images",[593,663,664,665,668,669,671],{},"offers a lightweight custom OS image ",[107,666,667],{},"without recreating the OS"," (it is thus ",[107,670,649],{}," a new distribution)",[80,673,588],{},[590,675,676,682,693,700,707,714,720,727,734,741,748,756],{},[593,677,678],{},[84,679,680],{"href":680,"rel":681},"https:\u002F\u002Fbootc-dev.github.io\u002Fbootc\u002F",[96],[593,683,684,688,689],{},[84,685,686],{"href":686,"rel":687},"https:\u002F\u002Fcontainers.github.io\u002Fbootable\u002F",[96],", ",[84,690,691],{"href":691,"rel":692},"https:\u002F\u002Fcontainers.github.io\u002Fbootable\u002Fhow-does-it-work.html",[96],[593,694,695,696],{},"Bootc: Getting Started with Bootable Containers ",[84,697,698],{"href":698,"rel":699},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=bf1xqjLeA9M",[96],[593,701,702,703],{},"Fedora bootc: GitOps for Noobs ",[84,704,705],{"href":705,"rel":706},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=5ZN_7NDvavY",[96],[593,708,709,710],{},"fosdem 2025 conference talk on bootc ",[84,711,712],{"href":712,"rel":713},"https:\u002F\u002Ffosdem.org\u002F2025\u002Fschedule\u002Fevent\u002Ffosdem-2025-4513-bootable-containers-and-image-mode-transforming-linux-os-management-with-bootc\u002F",[96],[593,715,716],{},[84,717,718],{"href":718,"rel":719},"https:\u002F\u002Fdevelopers.redhat.com\u002Farticles\u002F2024\u002F09\u002F24\u002Fbootc-getting-started-bootable-containers",[96],[593,721,722],{},[84,723,726],{"href":724,"rel":725},"https:\u002F\u002Ffosdem.org\u002F2025\u002Fschedule\u002Ftrack\u002Fimage-based-linux\u002F",[96],"fosdem 2025 track on image-based Linux",[593,728,729],{},[84,730,733],{"href":731,"rel":732},"https:\u002F\u002Fwww.centos.org\u002Fevents\u002Fconnect-2025\u002F",[96],"CentOS Connect 2025",[593,735,736],{},[84,737,740],{"href":738,"rel":739},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?app=desktop&v=Go-fNdbXCKU",[96],"Image Mode for RHEL - Ben Breard - MN RHUG Q1 2025",[593,742,743],{},[84,744,747],{"href":745,"rel":746},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=D7HqckeHlx8",[96],"UKIs and composefs support for Bootable Containers - DevConf.CZ 2025",[593,749,750,755],{},[84,751,754],{"href":752,"rel":753},"https:\u002F\u002Fmedia.ccc.de\u002Fv\u002Fclt25-206-24-monate-immutable-desktop-ein-erfahrungsbericht",[96],"2 years immutable desktop: experience report"," (German language)",[593,757,758,759],{},"more conference talks: ",[84,760,761],{"href":761,"rel":762},"https:\u002F\u002Fgithub.com\u002Ftravier\u002Ftravier\u002Fblob\u002Fmain\u002Ftalks.md",[96],[613,764,766],{"id":765},"choice-of-a-eu-os-base-image","Choice of a EU OS Base Image",[80,768,769],{},"For the EU OS Proof of Concept, all distributions that release images with bootc support and offer KDE desktop packages come into question. The more stable the packages are and the more they get tested (including by the community), the better it is. To allow third parties to fork EU OS and experiment easily, only images without enterprise license are considered for this Proof of Concept:",[590,771,772,779,785,792],{},[593,773,774,775,778],{},"Fedora Kinoite images (",[118,776,777],{},"quay.io\u002Ffedora\u002Ffedora-kinoite",")",[593,780,781,782,778],{},"Fedora Universal Blue (",[118,783,784],{},"ghcr.io\u002Fublue-os\u002Fkinoite-main",[593,786,787,788],{},"Fedora Secureblue, see ",[84,789,790],{"href":790,"rel":791},"https:\u002F\u002Fsecureblue.dev\u002Fimages",[96],[593,793,794,795],{},"Fedora AlmaLinux, see ",[84,796,797],{"href":797,"rel":798},"https:\u002F\u002Fgithub.com\u002FAlmaLinux\u002Fatomic-desktop\u002Freleases\u002F",[96],[80,800,801,802],{},"Then, Redhat offers a Redhat Linux Enterprise (RHEL) container with support against a fee: ",[84,803,718],{"href":718,"rel":804},[96],[613,806,808],{"id":807},"customisations-and-updates-with-layers","Customisations and Updates with Layers",[810,811,812],"blockquote",{},[80,813,814,817,818],{},[121,815,816],{},"!WARNING","\nThis section is work in progress. Related issue: ",[84,819,822],{"href":820,"rel":821},"https:\u002F\u002Fgitlab.com\u002Feu-os\u002Feu-os.gitlab.io\u002F-\u002Fissues\u002F37",[96],"#37",[613,824,826],{"id":825},"continuos-integration-ci-and-devops","Continuos Integration (CI) and DevOps",[810,828,829],{},[80,830,831,817,833],{},[121,832,816],{},[84,834,837],{"href":835,"rel":836},"https:\u002F\u002Fgitlab.com\u002Feu-os\u002Feu-os.gitlab.io\u002F-\u002Fissues\u002F38",[96],"#38",[839,840,841],"style",{},"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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":116,"searchDepth":131,"depth":131,"links":843},[844,845,846,847],{"id":615,"depth":131,"text":616},{"id":765,"depth":131,"text":766},{"id":807,"depth":131,"text":808},{"id":825,"depth":131,"text":826},"Many use cases of Linux on the desktop in the public sector rely on an existing Linux distribution (such as Ubuntu or Debian) and develop customisations on top. System administrators build then an image that contains original (upstream) packages as well as custom packages and custom configuration.","md",{},{"icon":26,"title":23},{"title":75,"description":848},"uQ1sc3z3utjJd_qLselbfTLO80q35vwWx13Ad88TE9s",[855,857],{"title":20,"path":16,"stem":17,"description":856,"icon":21,"children":-1},"The EU OS projects develops a proof of concept (PoC) to explain IT decision makers and the open source community better the vision of the project. The proof of concept also helps determining rough edges and missing pieces and brings them to the attention of the upstream projects, so that they can be addressed early on.",{"title":28,"path":29,"stem":30,"description":858,"icon":31,"children":-1},"Setup Server",{"data":860,"body":861},{},{"type":862,"children":863},"root",[864],{"type":865,"tag":80,"props":866,"children":867},"element",{},[868],{"type":869,"value":848},"text",1788729537742]