1"use strict";(self.webpackChunkkairos_docs=self.webpackChunkkairos_docs||[]).push([["12228"],{5142(e,t,a){a.r(t),a.d(t,{metadata:()=>s,default:()=>h,frontMatter:()=>r,contentTitle:()=>o,toc:()=>l,assets:()=>d});var s=JSON.parse('{"id":"upgrade/manual","title":"Manual Upgrades","description":"Learn how to manually upgrade Kairos Active and Recovery images","source":"@site/versioned_docs/version-v4.2.0/upgrade/manual.md","sourceDirName":"upgrade","slug":"/upgrade/manual","permalink":"/docs/v4.2.0/upgrade/manual","draft":false,"unlisted":false,"editUrl":"https://github.com/kairos-io/kairos-docs/tree/main/versioned_docs/version-v4.2.0/upgrade/manual.md","tags":[],"version":"v4.2.0","lastUpdatedBy":"github-actions[bot]","lastUpdatedAt":1787082255000,"sidebarPosition":1,"frontMatter":{"title":"Manual Upgrades","sidebar_label":"Manual","sidebar_position":1,"date":"2022-11-13T00:00:00.000Z","description":"Learn how to manually upgrade Kairos Active and Recovery images"},"sidebar":"tutorialSidebar","previous":{"title":"Upgrade","permalink":"/docs/v4.2.0/upgrade"},"next":{"title":"From Kubernetes","permalink":"/docs/v4.2.0/upgrade/kubernetes"}}'),i=a(74848),n=a(28453);let r={title:"Manual Upgrades",sidebar_label:"Manual",sidebar_position:1,date:new Date("2022-11-13T00:00:00.000Z"),description:"Learn how to manually upgrade Kairos Active and Recovery images"},o,d={},l=[{value:"Listing available versions",id:"listing-available-versions",level:2},{value:"Upgrading the active system",id:"upgrading-the-active-system",level:2},{value:"Upgrading the recovery system",id:"upgrading-the-recovery-system",level:2},{value:"What about the passive system?",id:"what-about-the-passive-system",level:2},{value:"Upgrading single entries (trusted boot installations)",id:"upgrading-single-entries-trusted-boot-installations",level:2}];function c(e){let t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",...(0,n.R)(),...e.components},{ShortcodeCodeBlock:a}=t;return a||function(e,t){throw Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("ShortcodeCodeBlock",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:"Upgrades can be run manually from the terminal."}),"\n",(0,i.jsxs)(t.p,{children:["Kairos images are released on ",(0,i.jsx)(t.a,{href:"https://quay.io/organization/kairos",children:"quay.io"}),"."]}),"\n",(0,i.jsx)(t.admonition,{title:"Note",type:"tip",children:(0,i.jsxs)(t.p,{children:["Looking to upgrade from a private registry OCI image? Check the ",(0,i.jsx)(t.a,{href:"/docs/advanced/private_registry_auth",children:"Private registry auth"})," page."]})}),"\n",(0,i.jsx)(t.h2,{id:"listing-available-versions",children:"Listing available versions"}),"\n",(0,i.jsx)(t.p,{children:"Using the agent, you can list all the available versions to upgrade to."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"$ sudo kairos-agent upgrade list-releases\nv0.57.0\nv0.57.0-rc2\nv0.57.0-rc1\nv0.57.0-alpha2\nv0.57.0-alpha1\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Use the ",(0,i.jsx)(t.code,{children:"--registry"})," flag to specify a custom registry to retrieve the versions from, otherwise it will default to quay.io/kairos."]}),"\n",(0,i.jsx)(t.h2,{id:"upgrading-the-active-system",children:"Upgrading the active system"}),"\n",(0,i.jsxs)(t.p,{children:["To specify an image, use the ",(0,i.jsx)(t.code,{children:"--source"})," flag:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"sudo kairos-agent upgrade --source <type>:<address>\n"})}),"\n",(0,i.jsxs)(t.p,{children:["Where type can be ",(0,i.jsx)(t.code,{children:"dir"})," or ",(0,i.jsx)(t.code,{children:"oci"})," and address is the path to the directory in the ",(0,i.jsx)(t.code,{children:"dir"})," case or the ",(0,i.jsx)(t.code,{children:"<repo/image:tag>"})," combination in the ",(0,i.jsx)(t.code,{children:"oci"})," case."]}),"\n",(0,i.jsx)(t.p,{children:"For example, if you wanted to upgrade to the latest available stable release you could run the following command:"}),"\n",(0,i.jsx)(a,{language:"bash",template:'sudo kairos-agent upgrade --source oci:{{< OCI variant="standard" >}}'}),"\n",(0,i.jsx)(t.p,{children:"Once you have tested the new system and are happy with it, you can upgrade the recovery system."}),"\n",(0,i.jsx)(t.h2,{id:"upgrading-the-recovery-system",children:"Upgrading the recovery system"}),"\n",(0,i.jsx)(t.p,{children:"The recovery system is there for a reason, to help you recover the active system in case of failure. This is why we don't allow upgrading the active system and recovery one at the same time and it needs to be done in a separate step. It's advised to also upgrade the recovery system often, to keep it close to the active one. This will make sure you have a familiar system to work with, when you boot to the recovery system instead of an old image you haven't used for quite a long time."}),"\n",(0,i.jsx)(t.admonition,{title:"Warning",type:"warning",children:(0,i.jsx)(t.p,{children:"Only upgrade the recovery system, when you are sure that the active system is running correctly."})}),"\n",(0,i.jsx)(t.p,{children:"To make this process less error prone, the upgrade command provides an extra flag that will upgrade the recovery only. It uses the same system and flags as the normal upgrade."}),"\n",(0,i.jsx)(a,{language:"bash",template:'sudo kairos-agent upgrade --recovery --source oci:{{< OCI variant="standard" >}}'}),"\n",(0,i.jsx)(t.h2,{id:"what-about-the-passive-system",children:"What about the passive system?"}),"\n",(0,i.jsx)(t.p,{children:"The passive system is the one that is not running. It is not possible to upgrade it directly. The passive system will be upgraded when the active system is rebooted."}),"\n",(0,i.jsx)(t.h2,{id:"upgrading-single-entries-trusted-boot-installations",children:"Upgrading single entr
1ies (trusted boot installations)"}),"\n",(0,i.jsxs)(t.p,{children:["On systems installed in ",(0,i.jsx)(t.a,{href:"/docs/architecture/trustedboot/",children:'"trusted boot" mode'}),", it's not possible to edit the cmdline\nwithout generating a new bootable image because the cmdline is part of the signed artifact.\nFor this reason, custom cmdlines are generated as separate artifacts at build time.\nBeing different artifacts though, means that they will need to be upgraded too."]}),"\n",(0,i.jsxs)(t.p,{children:["This can be achieved by passing the name of the ",(0,i.jsx)(t.code,{children:"efi"})," file (without the extension) to the upgrade command like this:"]}),"\n",(0,i.jsx)(a,{language:"bash",template:'kairos-agent upgrade --source oci:{{< OCI variant="standard" >}} --boot-entry <efi_file_name_here>'}),"\n",(0,i.jsx)(t.p,{children:"You can find the efi file name by listing all the efi files in the installed system:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"ls /efi/EFI/kairos/*.efi\n"})})]})}function h(e={}){let{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453(e,t,a){a.d(t,{R:()=>r,x:()=>o});var s=a(96540);let i={},n=s.createContext(i);function r(e){let t=s.useContext(n);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(n.Provider,{value:t},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.