mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Update build.func (#1602)
This commit is contained in:
		@@ -146,6 +146,52 @@ pve_check() {
 | 
			
		||||
fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# When a node is running tens of containers, it's possible to exceed the kernel's cryptographic key storage allocations. 
 | 
			
		||||
# These are tuneable, so verify if the currently deployment is approaching the limits, advise the user on how to tune the limits, and exit the script.
 | 
			
		||||
# https://cleveruptime.com/docs/files/proc-key-users | https://docs.kernel.org/security/keys/core.html
 | 
			
		||||
maxkeys_check() {
 | 
			
		||||
  # Read kernel parameters
 | 
			
		||||
  per_user_maxkeys=$(cat /proc/sys/kernel/keys/maxkeys 2>/dev/null || echo 0)
 | 
			
		||||
  per_user_maxbytes=$(cat /proc/sys/kernel/keys/maxbytes 2>/dev/null || echo 0)
 | 
			
		||||
 | 
			
		||||
  # Exit if kernel parameters are unavailable
 | 
			
		||||
  if [[ "$per_user_maxkeys" -eq 0 || "$per_user_maxbytes" -eq 0 ]]; then
 | 
			
		||||
    echo -e "${CROSS}${RD} Error: Unable to read kernel parameters. Ensure proper permissions.${CL}"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Fetch key usage for user ID 100000 (typical for containers)
 | 
			
		||||
  used_lxc_keys=$(awk '/100000:/ {print $2}' /proc/key-users 2>/dev/null || echo 0)
 | 
			
		||||
  used_lxc_bytes=$(awk '/100000:/ {split($5, a, "/"); print a[1]}' /proc/key-users 2>/dev/null || echo 0)
 | 
			
		||||
 | 
			
		||||
  # Calculate thresholds and suggested new limits
 | 
			
		||||
  threshold_keys=$((per_user_maxkeys - 100))
 | 
			
		||||
  threshold_bytes=$((per_user_maxbytes - 1000))
 | 
			
		||||
  new_limit_keys=$((per_user_maxkeys * 2))
 | 
			
		||||
  new_limit_bytes=$((per_user_maxbytes * 2))
 | 
			
		||||
 | 
			
		||||
  # Check if key or byte usage is near limits
 | 
			
		||||
  failure=0
 | 
			
		||||
  if [[ "$used_lxc_keys" -gt "$threshold_keys" ]]; then
 | 
			
		||||
    echo -e "${CROSS}${RD} Warning: Key usage is near the limit (${used_lxc_keys}/${per_user_maxkeys}).${CL}"
 | 
			
		||||
    echo -e "${INFO} Suggested action: Set ${GN}kernel.keys.maxkeys=${new_limit_keys}${CL} in ${BOLD}/etc/sysctl.d/98-community-scripts.conf${CL}."
 | 
			
		||||
    failure=1
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ "$used_lxc_bytes" -gt "$threshold_bytes" ]]; then
 | 
			
		||||
    echo -e "${CROSS}${RD} Warning: Key byte usage is near the limit (${used_lxc_bytes}/${per_user_maxbytes}).${CL}"
 | 
			
		||||
    echo -e "${INFO} Suggested action: Set ${GN}kernel.keys.maxbytes=${new_limit_bytes}${CL} in ${BOLD}/etc/sysctl.d/98-community-scripts.conf${CL}."
 | 
			
		||||
    failure=1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Provide next steps if issues are detected
 | 
			
		||||
  if [[ "$failure" -eq 1 ]]; then
 | 
			
		||||
    echo -e "${INFO} To apply changes, run: ${BOLD}service procps force-reload${CL}"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  echo -e "${CM}${GN} All kernel key limits are within safe thresholds.${CL}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This function checks the system architecture and exits if it's not "amd64".
 | 
			
		||||
arch_check() {
 | 
			
		||||
  if [ "$(dpkg --print-architecture)" != "amd64" ]; then
 | 
			
		||||
@@ -687,6 +733,7 @@ install_script() {
 | 
			
		||||
  root_check
 | 
			
		||||
  arch_check
 | 
			
		||||
  ssh_check
 | 
			
		||||
  maxkeys_check
 | 
			
		||||
 | 
			
		||||
  if systemctl is-active -q ping-instances.service; then
 | 
			
		||||
    systemctl -q stop ping-instances.service
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user