112 lines
3.6 KiB
Bash
112 lines
3.6 KiB
Bash
#!/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." |