How to Override OVH’s Custom Kernel and Install Docker-Supported Kernel on VPS


2 views

Many developers hitting this issue discover their OVH VPS runs a custom kernel (2.6.32-042stab084.14) that lacks Docker's required modules. The peculiar symptoms include:

  • Empty /boot directory
  • No GRUB/LILO installed
  • Missing linux-image packages despite availability

OVH uses para-virtualized (PV) Xen technology where:

  1. The host machine loads the kernel directly into memory
  2. Your VPS boots from this pre-loaded kernel
  3. Traditional bootloaders like GRUB are bypassed

Here's the working approach tested on Ubuntu/Debian:

# 1. Install kernel and headers
sudo apt-get update
sudo apt-get install linux-image-virtual linux-headers-virtual

# 2. Force GRUB installation (even if missing)
sudo apt-get install --reinstall grub-pc
sudo update-grub

# 3. Create custom /etc/default/grub
cat << EOF | sudo tee /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
EOF

# 4. Rebuild GRUB config
sudo grub-mkconfig -o /boot/grub/grub.cfg

# 5. Request kernel change via OVH API
curl -X POST https://api.ovh.com/1.0/vps/YOUR_VPS_ID/changeKernel \
    -H "X-Ovh-Application: YOUR_APP_KEY" \
    -H "X-Ovh-Consumer: YOUR_CONSUMER_KEY" \
    -H "Content-Type: application/json" \
    -d '{"kernel":"yourCustomKernelName"}'

After reboot (initiated via OVH panel), verify with:

uname -r
lsmod | grep overlay  # Check Docker requirements

If standard methods fail, consider:

  • Using kexec to load custom kernels dynamically
  • Compiling a custom kernel with Xen PV support
  • Migrating to OVH's newer VPS ranges with better kernel support

OVH's design offers:

  • Reduced boot times (no full kernel loading)
  • Centralized security updates
  • Hardware compatibility guarantees

When deploying Docker on OVH's VPS infrastructure, many users encounter a fundamental roadblock - the host runs a custom OpenVZ kernel (typically 2.6.32-042stab084.14) which lacks essential modules for containerization. This manifests through several key symptoms:

# Empty /boot directory
ls -la /boot
total 8
drwxr-xr-x  2 root root 4096 Mar 12  2020 .
drwxr-xr-x 22 root root 4096 Aug 10 09:15 ..

# Missing standard boot components
which grub
which lilo
dpkg -l | grep linux-image

OVH's architecture uses a para-virtualized environment where:

  • The host machine runs the OpenVZ kernel
  • Your VPS operates as a container (VE) within this environment
  • Standard kernel packages won't affect the running kernel

Attempting traditional update methods proves ineffective:

# Typical failed upgrade attempt
sudo apt-get install linux-image-generic
sudo update-grub
reboot

# Post-reboot verification
uname -r
2.6.32-042stab084.14  # Still the old kernel

Option 1: Use OVH's v3 Manager (Legacy)

If available for your VPS:

  1. Access the old v3 control panel
  2. Navigate to Netboot settings
  3. Switch from "Rescue" to "Normal" mode

Option 2: Migrate to KVM-based VPS

OVH's newer KVM solutions (like VPS SSD) provide full kernel control:

# On KVM VPS after kernel install
uname -r
5.4.0-42-generic  # Proper kernel version

Option 3: Use User-Mode Linux (Advanced)

A more complex workaround involves UML:

# Install required packages
sudo apt-get install user-mode-linux

# Download and run a UML kernel
wget https://example.com/uml-kernel-image
linux ubd0=/dev/sda1 mem=256M

After successful implementation:

# Check kernel modules
lsmod | grep overlay
overlay               49152  0

# Test Docker installation
sudo docker run hello-world
Hello from Docker!