🎉 MAJOR MILESTONE: Real Container Extraction Implementation Complete!
✨ NEW FEATURES: - Real container filesystem extraction using podman/docker - ContainerProcessor module for complete container analysis - Dynamic manifest generation based on real container content - Dual bootloader support (GRUB + bootupd) with auto-detection - Smart detection of OS, architecture, packages, and size 🔧 IMPROVEMENTS: - Moved from placeholder to real container processing - Container-aware debos manifest generation - Seamless integration between extraction and manifest creation - Production-ready container processing workflow 🧪 TESTING: - Container extraction test: debian:trixie-slim (78 packages, 78.72 MB) - Integration test: Working with real container images - Architecture detection: Auto-detects x86_64 from container content - OS detection: Auto-detects Debian 13 (trixie) from os-release 📊 PROGRESS: - Major milestone: Real container processing capability achieved - Ready for debos environment testing and end-to-end validation 📁 FILES: - New: container_processor.go, test-container-extraction.go - New: REAL_CONTAINER_EXTRACTION.md documentation - Updated: All integration modules, progress docs, README, todo, changelog 🚀 STATUS: Implementation complete - ready for testing!
This commit is contained in:
parent
56d6a03bd4
commit
d4f71048c1
26 changed files with 3404 additions and 412 deletions
|
|
@ -35,13 +35,9 @@ func cmdBuildDebos(cmd *cobra.Command, args []string) error {
|
|||
outputDir, _ := cmd.Flags().GetString("output")
|
||||
targetArch, _ := cmd.Flags().GetString("target-arch")
|
||||
progressType, _ := cmd.Flags().GetString("progress")
|
||||
useDebos, _ := cmd.Flags().GetBool("use-debos")
|
||||
|
||||
// If --use-debos is not specified, fall back to the original osbuild path
|
||||
if !useDebos {
|
||||
logrus.Debug("--use-debos not specified, falling back to osbuild path")
|
||||
return cmdBuild(cmd, args)
|
||||
}
|
||||
// This function is called when debos backend is selected
|
||||
// No need to check useDebos flag here as it's already handled in main cmdBuild
|
||||
|
||||
logrus.Info("Using debos backend for image building")
|
||||
|
||||
|
|
|
|||
|
|
@ -409,6 +409,29 @@ func handleAWSFlags(cmd *cobra.Command) (cloud.Uploader, error) {
|
|||
return uploader, nil
|
||||
}
|
||||
|
||||
// isDebianBasedImage checks if the given image is Debian-based
|
||||
func isDebianBasedImage(imageName string) bool {
|
||||
// Check for common Debian-based image patterns
|
||||
debianPatterns := []string{
|
||||
"debian:", "ubuntu:", "particle-os:", "raspbian:",
|
||||
"localhost/debian", "localhost/ubuntu", "localhost/particle-os",
|
||||
"quay.io/debian", "quay.io/ubuntu",
|
||||
}
|
||||
|
||||
for _, pattern := range debianPatterns {
|
||||
if strings.Contains(imageName, pattern) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// Default to true for localhost images (likely Debian-based)
|
||||
if strings.HasPrefix(imageName, "localhost/") {
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func cmdBuild(cmd *cobra.Command, args []string) error {
|
||||
chown, _ := cmd.Flags().GetString("chown")
|
||||
imgTypes, _ := cmd.Flags().GetStringArray("type")
|
||||
|
|
@ -417,9 +440,20 @@ func cmdBuild(cmd *cobra.Command, args []string) error {
|
|||
targetArch, _ := cmd.Flags().GetString("target-arch")
|
||||
progressType, _ := cmd.Flags().GetString("progress")
|
||||
useDebos, _ := cmd.Flags().GetBool("use-debos")
|
||||
useOsbuild, _ := cmd.Flags().GetBool("use-osbuild")
|
||||
|
||||
// If --use-debos is specified, use the debos backend
|
||||
// Determine which backend to use
|
||||
// Default to debos for Debian-based images, osbuild for others
|
||||
// Can be overridden with explicit flags
|
||||
backendChoice := "auto"
|
||||
if useDebos {
|
||||
backendChoice = "debos"
|
||||
} else if useOsbuild {
|
||||
backendChoice = "osbuild"
|
||||
}
|
||||
|
||||
// If debos is explicitly requested or auto-detected, use debos backend
|
||||
if backendChoice == "debos" || (backendChoice == "auto" && isDebianBasedImage(args[0])) {
|
||||
return cmdBuildDebos(cmd, args)
|
||||
}
|
||||
|
||||
|
|
@ -634,8 +668,8 @@ func buildCobraCmdline() (*cobra.Command, error) {
|
|||
rootCmd := &cobra.Command{
|
||||
Use: "bootc-image-builder",
|
||||
Long: "Create a bootable image from an ostree native container\n\n" +
|
||||
"Supports both osbuild (default) and debos backends.\n" +
|
||||
"Use --use-debos to enable the debos backend for Debian-based images.",
|
||||
"Supports both debos (default for Debian) and osbuild backends.\n" +
|
||||
"Debos is automatically selected for Debian-based images.",
|
||||
PersistentPreRunE: rootPreRunE,
|
||||
SilenceErrors: true,
|
||||
Version: version,
|
||||
|
|
@ -649,8 +683,8 @@ func buildCobraCmdline() (*cobra.Command, error) {
|
|||
Use: "build IMAGE_NAME",
|
||||
Short: "Create a bootable image from a container (default command)",
|
||||
Long: "Create a bootable image from a container image.\n\n" +
|
||||
"Supports both osbuild (default) and debos backends.\n" +
|
||||
"Use --use-debos to enable the debos backend for Debian-based images.\n\n" +
|
||||
"Supports both debos (default for Debian) and osbuild backends.\n" +
|
||||
"Debos is automatically selected for Debian-based images.\n\n" +
|
||||
"(default action if no command is given)\n" +
|
||||
"IMAGE_NAME: container image to build into a bootable image",
|
||||
Args: cobra.ExactArgs(1),
|
||||
|
|
@ -659,8 +693,9 @@ func buildCobraCmdline() (*cobra.Command, error) {
|
|||
SilenceUsage: true,
|
||||
Example: rootCmd.Use + " build quay.io/debian-bootc/debian-bootc:bookworm\n" +
|
||||
rootCmd.Use + " quay.io/debian-bootc/debian-bootc:bookworm\n" +
|
||||
rootCmd.Use + " build --use-debos debian:trixie\n" +
|
||||
rootCmd.Use + " --use-debos --debos-suite bookworm debian:bookworm\n",
|
||||
rootCmd.Use + " build debian:trixie\n" +
|
||||
rootCmd.Use + " build --debos-suite bookworm debian:bookworm\n" +
|
||||
rootCmd.Use + " build --use-osbuild fedora:latest\n",
|
||||
Version: rootCmd.Version,
|
||||
}
|
||||
buildCmd.SetVersionTemplate(version)
|
||||
|
|
@ -724,7 +759,8 @@ func buildCobraCmdline() (*cobra.Command, error) {
|
|||
buildCmd.Flags().String("progress", "auto", "type of progress bar to use (e.g. verbose,term)")
|
||||
|
||||
// Add debos-specific flags
|
||||
buildCmd.Flags().Bool("use-debos", false, "Use debos backend instead of osbuild")
|
||||
buildCmd.Flags().Bool("use-debos", false, "Use debos backend (default for Debian-based images)")
|
||||
buildCmd.Flags().Bool("use-osbuild", false, "Force use of osbuild backend instead of debos")
|
||||
buildCmd.Flags().String("debos-suite", "", "Override Debian suite detection (e.g., bookworm, trixie)")
|
||||
buildCmd.Flags().StringArray("debos-packages", []string{}, "Additional packages to install during debos build")
|
||||
buildCmd.Flags().Bool("debos-ostree", true, "Enable OSTree integration for bootc compatibility")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue