#!/bin/bash # Script to fix cgroup configuration for container runtime in Alpine Linux echo "🔧 Fixing cgroup configuration for container runtime..." # Check if running as root if [ "$(id -u)" -ne 0 ]; then echo "❌ This script must be run as root" exit 1 fi # Update package lists echo "📦 Updating package lists..." apk update # Install necessary packages for cgroup management echo "📦 Installing cgroup-related packages..." apk add cgroup-tools cgroupfs-mount # Create cgroup mount points echo "🔧 Creating cgroup mount points..." mkdir -p /sys/fs/cgroup/{cpu,cpuacct,memory,devices,freezer,net_cls,blkio,cpuset,perf_event,pids} # Mount cgroup filesystems echo "🔧 Mounting cgroup filesystems..." mount -t cgroup cgroup /sys/fs/cgroup mount -t cgroup cgroup /sys/fs/cgroup/cpu mount -t cgroup cgroup /sys/fs/cgroup/cpuacct mount -t cgroup cgroup /sys/fs/cgroup/memory mount -t cgroup cgroup /sys/fs/cgroup/devices mount -t cgroup cgroup /sys/fs/cgroup/freezer mount -t cgroup cgroup /sys/fs/cgroup/net_cls mount -t cgroup cgroup /sys/fs/cgroup/blkio mount -t cgroup cgroup /sys/fs/cgroup/cpuset mount -t cgroup cgroup /sys/fs/cgroup/perf_event mount -t cgroup cgroup /sys/fs/cgroup/pids # Add cgroup mounts to /etc/fstab for persistence echo "💾 Adding cgroup mounts to /etc/fstab..." cat >> /etc/fstab << EOF # Cgroup mounts for container runtime cgroup /sys/fs/cgroup cgroup defaults 0 0 cgroup /sys/fs/cgroup/cpu cgroup defaults 0 0 cgroup /sys/fs/cgroup/cpuacct cgroup defaults 0 0 cgroup /sys/fs/cgroup/memory cgroup defaults 0 0 cgroup /sys/fs/cgroup/devices cgroup defaults 0 0 cgroup /sys/fs/cgroup/freezer cgroup defaults 0 0 cgroup /sys/fs/cgroup/net_cls cgroup defaults 0 0 cgroup /sys/fs/cgroup/blkio cgroup defaults 0 0 cgroup /sys/fs/cgroup/cpuset cgroup defaults 0 0 cgroup /sys/fs/cgroup/perf_event cgroup defaults 0 0 cgroup /sys/fs/cgroup/pids cgroup defaults 0 0 EOF # Enable and start cgroup service if available if [ -f /etc/init.d/cgroups ]; then echo "🚀 Enabling and starting cgroups service..." rc-update add cgroups boot rc-service cgroups start fi # Create a script to set up cgroups on boot echo "🔧 Creating cgroup setup script..." cat > /usr/local/bin/setup-cgroups.sh << 'EOF' #!/bin/bash # Script to set up cgroups on boot # Mount cgroup filesystems if not already mounted if ! mountpoint -q /sys/fs/cgroup; then mount -t cgroup cgroup /sys/fs/cgroup fi # Ensure all cgroup subsystems are mounted for subsystem in cpu cpuacct memory devices freezer net_cls blkio cpuset perf_event pids; do if [ ! -d "/sys/fs/cgroup/$subsystem" ]; then mkdir -p "/sys/fs/cgroup/$subsystem" fi if ! mountpoint -q "/sys/fs/cgroup/$subsystem"; then mount -t cgroup cgroup "/sys/fs/cgroup/$subsystem" fi done EOF chmod +x /usr/local/bin/setup-cgroups.sh # Add the script to local.d to run on boot echo "🚀 Adding cgroup setup script to boot sequence..." mkdir -p /etc/local.d echo "/usr/local/bin/setup-cgroups.sh" > /etc/local.d/cgroups.start chmod +x /etc/local.d/cgroups.start # Enable local.d service rc-update add local default # Verify cgroup setup echo "✅ Verifying cgroup setup..." if mountpoint -q /sys/fs/cgroup; then echo "✅ Cgroup filesystem is mounted" else echo "❌ Cgroup filesystem is not mounted" fi # Check if pids subsystem is available if [ -d /sys/fs/cgroup/pids ]; then echo "✅ PIDS cgroup subsystem is available" else echo "❌ PIDS cgroup subsystem is not available" fi echo "🎉 Cgroup configuration complete!" echo "🔄 Please reboot the system to ensure all changes take effect" echo "After reboot, you should be able to run your container successfully."