From 5690f50cfc7c7633d5bb5f62201cceb6c6d18571 Mon Sep 17 00:00:00 2001 From: Othman Hendy Suseno Date: Tue, 18 Nov 2025 15:34:13 +0700 Subject: [PATCH] Auto-install qemu-guest-agent package during image customization --- README.md | 9 ++++++++- configs/oracle/oracle-8.yaml | 2 +- customize.go | 25 +++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 05e7f12..1221f63 100644 --- a/README.md +++ b/README.md @@ -262,7 +262,10 @@ proxmox-cloud-image -batch batch.txt ## How It Works 1. Download cloud image dari URL yang diberikan -2. Customize image (resize, inject SSH key jika ada) +2. Customize image: + - Resize disk (jika di-specify) + - Inject SSH key (jika ada) + - **Install qemu-guest-agent package** (jika guest-agent enabled) 3. Upload image ke Proxmox host via SCP 4. Create VM menggunakan `qm` commands 5. Import disk dan configure VM @@ -280,11 +283,15 @@ QEMU Guest Agent adalah service yang berjalan di guest OS untuk: - File system freeze/thaw - Time synchronization +**Tool ini akan otomatis install qemu-guest-agent package** ke dalam image menggunakan `virt-customize` sebelum upload ke Proxmox. + Enable dengan flag `-guest-agent` atau di config file: ```yaml guest_agent: true ``` +**Note**: Guest agent di-enable by default. Package akan di-install otomatis saat customize image. + ## Proxmox Firewall Proxmox firewall bisa di-enable untuk template dengan flag `-firewall` atau di config file: diff --git a/configs/oracle/oracle-8.yaml b/configs/oracle/oracle-8.yaml index 0870747..8f6515b 100644 --- a/configs/oracle/oracle-8.yaml +++ b/configs/oracle/oracle-8.yaml @@ -16,4 +16,4 @@ firewall_rules: - type: out action: drop dest: "10.0.0.0/8" - comment: "Bottom most rules - Block service network to internal network" \ No newline at end of file + comment: "Bottom most rules - Block service network to internal network" diff --git a/customize.go b/customize.go index 9b5a652..0dc4f18 100644 --- a/customize.go +++ b/customize.go @@ -28,6 +28,12 @@ func customizeImage(config *Config) error { } } + if config.GuestAgent { + if err := installGuestAgent(imagePath); err != nil { + return err + } + } + fmt.Println("Verifying customized image...") if err := verifyImage(imagePath); err != nil { return fmt.Errorf("customized image verification failed: %w", err) @@ -93,3 +99,22 @@ func injectSSHKey(imagePath, sshKeyPath string) error { return nil } + +func installGuestAgent(imagePath string) error { + fmt.Println("Installing QEMU Guest Agent...") + + cmd := exec.Command("virt-customize", + "-a", imagePath, + "--install", "qemu-guest-agent", + "--run-command", "systemctl enable qemu-guest-agent", + ) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + if err := cmd.Run(); err != nil { + return fmt.Errorf("failed to install qemu-guest-agent: %w", err) + } + + fmt.Println("QEMU Guest Agent installed and enabled!") + return nil +}