2023-01-12 18:10:10 +00:00
package main
import (
2023-02-20 10:14:26 +00:00
"context"
2023-01-12 18:10:10 +00:00
"fmt"
2023-03-02 15:46:25 +00:00
"os"
2023-02-20 10:14:26 +00:00
"github.com/kairos-io/immucore/internal/utils"
"github.com/kairos-io/immucore/internal/version"
2024-03-20 10:48:51 +00:00
"github.com/kairos-io/immucore/pkg/dag"
"github.com/kairos-io/immucore/pkg/state"
2023-02-20 10:14:26 +00:00
"github.com/spectrocloud-labs/herd"
2023-02-06 08:43:54 +00:00
"github.com/urfave/cli/v2"
2023-01-12 18:10:10 +00:00
)
// Apply Immutability profiles.
func main ( ) {
2023-02-20 10:14:26 +00:00
app := cli . NewApp ( )
app . Version = version . GetVersion ( )
app . Authors = [ ] * cli . Author { { Name : "Kairos authors" } }
app . Copyright = "kairos authors"
app . Action = func ( c * cli . Context ) ( err error ) {
2023-03-01 10:42:46 +00:00
var targetDevice , targetImage string
2024-03-20 10:48:51 +00:00
var st * state . State
2023-03-01 10:42:46 +00:00
2023-09-19 07:51:57 +00:00
utils . MountBasic ( )
2023-03-01 10:42:46 +00:00
utils . SetLogger ( )
2023-02-20 10:14:26 +00:00
v := version . Get ( )
2025-05-19 16:23:34 +00:00
utils . KLog . Logger . Info ( ) . Str ( "commit" , v . GitCommit ) . Str ( "compiled_with" , v . GoVersion ) . Str ( "version" , v . Version ) . Msg ( "Immucore" )
2023-02-20 10:14:26 +00:00
2023-03-02 15:46:25 +00:00
cmdline , _ := os . ReadFile ( utils . GetHostProcCmdline ( ) )
2025-05-19 16:23:34 +00:00
utils . KLog . Logger . Debug ( ) . Str ( "content" , string ( cmdline ) ) . Msg ( "cmdline" )
2023-02-20 10:14:26 +00:00
g := herd . DAG ( herd . EnableInit )
// Get targets and state
2023-03-02 15:46:25 +00:00
targetImage , targetDevice , err = utils . GetTarget ( c . Bool ( "dry-run" ) )
if err != nil {
return err
}
2023-02-20 10:14:26 +00:00
2024-03-20 10:48:51 +00:00
st = & state . State {
2023-02-20 10:14:26 +00:00
Rootdir : utils . GetRootDir ( ) ,
TargetDevice : targetDevice ,
TargetImage : targetImage ,
RootMountMode : utils . RootRW ( ) ,
2023-03-01 20:45:32 +00:00
OverlayBase : utils . GetOverlayBase ( ) ,
2023-02-20 10:14:26 +00:00
}
if utils . DisableImmucore ( ) {
2025-05-19 16:23:34 +00:00
utils . KLog . Logger . Info ( ) . Msg ( "Stanza rd.cos.disable/rd.immucore.disable on the cmdline or booting from CDROM/Netboot/Squash recovery. Disabling immucore." )
2024-03-20 10:48:51 +00:00
err = dag . RegisterLiveMedia ( st , g )
2023-03-01 10:42:46 +00:00
} else if utils . IsUKI ( ) {
2025-05-19 16:23:34 +00:00
utils . KLog . Logger . Info ( ) . Msg ( "UKI booting!" )
2024-03-20 10:48:51 +00:00
err = dag . RegisterUKI ( st , g )
2023-02-20 10:14:26 +00:00
} else {
2025-05-19 16:23:34 +00:00
utils . KLog . Logger . Info ( ) . Msg ( "Booting on active/passive/recovery." )
2024-03-20 10:48:51 +00:00
err = dag . RegisterNormalBoot ( st , g )
2023-02-20 10:14:26 +00:00
}
if err != nil {
return err
}
2025-05-19 16:23:34 +00:00
utils . KLog . Logger . Info ( ) . Msg ( st . WriteDAG ( g ) )
2023-02-20 10:14:26 +00:00
// Once we print the dag we can exit already
if c . Bool ( "dry-run" ) {
return nil
}
err = g . Run ( context . Background ( ) )
2025-05-19 16:23:34 +00:00
utils . KLog . Logger . Info ( ) . Msg ( st . WriteDAG ( g ) )
2023-02-20 10:14:26 +00:00
return err
}
app . Flags = [ ] cli . Flag {
& cli . BoolFlag {
Name : "dry-run" ,
} ,
}
app . Commands = [ ] * cli . Command {
{
Name : "version" ,
Usage : "version" ,
2024-03-18 13:38:57 +00:00
Action : func ( _ * cli . Context ) error {
2023-05-08 14:13:31 +00:00
utils . SetLogger ( )
2023-02-20 10:14:26 +00:00
v := version . Get ( )
2025-05-19 16:23:34 +00:00
utils . KLog . Logger . Info ( ) . Str ( "commit" , v . GitCommit ) . Str ( "compiled_with" , v . GoVersion ) . Str ( "version" , v . Version ) . Msg ( "Immucore" )
2023-02-20 10:14:26 +00:00
return nil
} ,
} ,
2023-01-12 18:10:10 +00:00
}
err := app . Run ( os . Args )
if err != nil {
fmt . Println ( err )
os . Exit ( 1 )
}
}