Cheatsheets created: - deploy-debian12-vm.md - Basic Debian 12 deployment reference - deploy-debian-lvm-netinst.md - Network installer with native LVM - deploy-linux-vm.md - Multi-distribution quick reference - deploy-linux-vm-lvm.md - Multi-distro with post-config LVM - deploy-linux-vm-role.md - Role-based deployment guide - test-deploy-linux-vm-role.md - Testing and validation procedures Each cheatsheet includes: - Quick deployment commands - Variable reference tables - Tag-based execution examples - Post-deployment verification steps - LVM management commands (where applicable) - Troubleshooting procedures - Security validation steps - VM management commands
6.6 KiB
6.6 KiB
Debian 12 VM Deployment Cheatsheet
Quick Deployment
Basic Deployment
# Deploy VM with default settings
ansible-playbook plays/deploy-debian12-vm.yml
# Deploy with custom VM name
ansible-playbook plays/deploy-debian12-vm.yml -e "vm_name=myvm"
Custom Configuration
# Deploy with custom resources
ansible-playbook plays/deploy-debian12-vm.yml \
-e "vm_name=custom-vm" \
-e "vm_vcpus=4" \
-e "vm_memory_mb=4096" \
-e "vm_disk_size_gb=50"
# Deploy with custom network
ansible-playbook plays/deploy-debian12-vm.yml \
-e "vm_name=web-server" \
-e "vm_network=default" \
-e "vm_hostname=webserver" \
-e "vm_domain=example.com"
Tag-Based Execution
Selective Deployment Steps
# Pre-flight checks only
ansible-playbook plays/deploy-debian12-vm.yml -t preflight,validate
# Download image only
ansible-playbook plays/deploy-debian12-vm.yml -t download
# Verify image checksum
ansible-playbook plays/deploy-debian12-vm.yml -t verify
# Create storage only
ansible-playbook plays/deploy-debian12-vm.yml -t storage
# Generate cloud-init config only
ansible-playbook plays/deploy-debian12-vm.yml -t cloud-init
# Deploy VM (skip download if image exists)
ansible-playbook plays/deploy-debian12-vm.yml -t deploy
# Validation only
ansible-playbook plays/deploy-debian12-vm.yml -t validate
# Cleanup temporary files
ansible-playbook plays/deploy-debian12-vm.yml -t cleanup
Debug Mode
# Show console output (use with caution)
ansible-playbook plays/deploy-debian12-vm.yml -t debug
Common Variables
| Variable | Default | Description |
|---|---|---|
vm_name |
debian12-guest | VM name in libvirt |
vm_hostname |
debian12 | VM hostname |
vm_domain |
localdomain | Domain name |
vm_vcpus |
2 | Number of vCPUs |
vm_memory_mb |
2048 | RAM in MB |
vm_disk_size_gb |
20 | Disk size in GB |
vm_network |
default | Libvirt network |
vm_bridge |
virbr0 | Bridge interface |
ansible_user_ssh_key |
(predefined) | SSH public key for ansible user |
Post-Deployment
Access the VM
# Get VM IP address
virsh domifaddr debian12-guest
# SSH to VM via ProxyJump
ssh -J grokbox ansible@<VM_IP>
# Direct SSH (from grokbox)
ssh ansible@<VM_IP>
VM Management
# Start VM
virsh start debian12-guest
# Stop VM
virsh shutdown debian12-guest
# Force stop VM
virsh destroy debian12-guest
# Remove VM
virsh undefine debian12-guest --remove-all-storage
# VM status
virsh dominfo debian12-guest
# List all VMs
virsh list --all
# VM console access
virsh console debian12-guest
Add to Inventory
Add the deployed VM to your Ansible inventory:
# inventories/development/hosts.yml
kvm_guests:
children:
development:
hosts:
debian12-guest:
ansible_host: 192.168.122.XX
ansible_user: ansible
ansible_ssh_common_args: '-o ProxyJump=grokbox -o StrictHostKeyChecking=accept-new'
host_description: "Debian 12 Development VM"
host_role: development
vm_vcpus: 2
vm_memory_mb: 2048
Troubleshooting
Check Cloud-Init Status
# On the VM
cloud-init status
cloud-init status --wait
cloud-init status --long
# View cloud-init logs
cat /var/log/cloud-init.log
cat /var/log/cloud-init-output.log
Network Issues
# Check VM network interface
virsh domiflist debian12-guest
# Check VM IP
virsh domifaddr debian12-guest
# Check network connectivity from grokbox
ping <VM_IP>
VM Console Access
# Connect to serial console
virsh console debian12-guest
# Disconnect: Ctrl + ]
Storage Issues
# Check VM disk
virsh domblklist debian12-guest
# Check disk usage on hypervisor
qemu-img info /var/lib/libvirt/images/debian12-guest.qcow2
# Resize disk (if needed, after deployment)
qemu-img resize /var/lib/libvirt/images/debian12-guest.qcow2 +10G
VM Won't Start
# Check libvirt logs
journalctl -u libvirtd -f
# Check VM XML configuration
virsh dumpxml debian12-guest
# Validate VM configuration
virt-xml-validate /etc/libvirt/qemu/debian12-guest.xml
SSH Connection Issues
# Test SSH connectivity
ssh -vvv -J grokbox ansible@<VM_IP>
# Check SSH service on VM (via console)
virsh console debian12-guest
# Then: systemctl status ssh
Security Features
The deployed VM includes:
- ✅ Ansible user with passwordless sudo
- ✅ SSH key-based authentication only
- ✅ Root login disabled via SSH
- ✅ UFW firewall enabled (SSH allowed)
- ✅ Automatic security updates configured
- ✅ Audit daemon (auditd) enabled
- ✅ Time synchronization (chrony)
- ✅ Essential security packages installed
- ✅ AIDE for file integrity monitoring
- ✅ Secure SSH configuration
Package List
Essential Packages
- sudo, vim, htop, tmux
- curl, wget, rsync, git
- python3, python3-pip
- jq, bc
Security Packages
- aide (file integrity)
- auditd (system auditing)
- ufw (firewall)
- unattended-upgrades
System Packages
- chrony (time sync)
- lvm2 (storage management)
- cloud-guest-utils
- parted
Validation Checklist
After deployment, verify:
- VM is running:
virsh list - VM has IP address:
virsh domifaddr debian12-guest - SSH accessible:
ssh -J grokbox ansible@<VM_IP> - Cloud-init completed:
cloud-init status - Security updates enabled:
systemctl status unattended-upgrades - Firewall enabled:
sudo ufw status - Time sync working:
chronyc tracking - Audit daemon running:
systemctl status auditd
Next Steps
- Add VM to Ansible inventory
- Run configuration management roles
- Configure application-specific settings
- Set up monitoring and logging
- Configure backups
- Document VM purpose and services
Quick Reference
Deployment Flow
- Preflight → Check if VM exists, validate virtualization
- Install → Install required packages on hypervisor
- Download → Download Debian 12 cloud image
- Storage → Create VM disk from cloud image
- Cloud-Init → Generate cloud-init configuration
- Deploy → Create and start VM
- Validate → Verify SSH connectivity and system status
- Cleanup → Remove temporary files
Important Paths
- VM Disk:
/var/lib/libvirt/images/debian12-guest.qcow2 - Cloud-Init ISO:
/var/lib/libvirt/images/debian12-guest-cloud-init.iso - Base Image:
/var/lib/libvirt/images/debian-12-generic-amd64.qcow2 - VM Config:
/etc/libvirt/qemu/debian12-guest.xml
Support
For issues or questions:
- Check
/var/log/cloud-init.logon VM - Check
journalctl -u libvirtdon hypervisor - Review playbook documentation:
plays/deploy-debian12-vm.yml - Consult CLAUDE.md for infrastructure guidelines