diff --git a/web/app/docs/post-install/basic-settings/page.tsx b/web/app/docs/post-install/basic-settings/page.tsx index 77c7750..6fd148b 100644 --- a/web/app/docs/post-install/basic-settings/page.tsx +++ b/web/app/docs/post-install/basic-settings/page.tsx @@ -1,5 +1,6 @@ import type { Metadata } from "next" import { Settings } from "lucide-react" +import { CopyableCode } from "@/components/CopyableCode" export const metadata: Metadata = { title: "ProxMenux Post-Install: Basic Settings", @@ -31,32 +32,61 @@ export const metadata: Metadata = { export default function BasicSettingsPage() { const installUtilitiesCode = ` +# Update package lists sudo apt-get update -sudo apt-get install -y axel curl dialog dnsutils dos2unix gnupg-agent grc htop btop iftop iotop \\ - iperf3 ipset iptraf-ng mlocate msr-tools nano net-tools omping \\ - software-properties-common sshpass tmux unzip vim vim-nox wget whois zip \\ - libguestfs-tools + +# Install common system utilities +sudo apt-get install -y axel curl dialog dnsutils dos2unix gnupg-agent grc htop btop iftop iotop +sudo apt-get install -y iperf3 ipset iptraf-ng mlocate msr-tools nano net-tools omping +sudo apt-get install -y software-properties-common sshpass tmux unzip vim vim-nox wget whois zip +sudo apt-get install -y libguestfs-tools ` const skipLanguagesCode = ` +# Configure APT to skip downloading additional languages echo 'Acquire::Languages "none";' | sudo tee /etc/apt/apt.conf.d/99-disable-translations ` const timeSyncCode = ` -# To set timezone automatically based on IP, you would need to run: -IP=$(dig +short myip.opendns.com @resolver1.opendns.com) -TIMEZONE=$(curl -s "https://ipapi.co/$IP/timezone") -sudo timedatectl set-timezone "$TIMEZONE" +# Set timezone (replace 'America/New_York' with your timezone) +sudo timedatectl set-timezone America/New_York + +# Enable automatic time synchronization +sudo timedatectl set-ntp true + +# Note: To set timezone automatically based on IP, you can use: +# IP=$(dig +short myip.opendns.com @resolver1.opendns.com) +# TIMEZONE=$(curl -s "https://ipapi.co/$IP/timezone") +# sudo timedatectl set-timezone "$TIMEZONE" ` const updateUpgradeCode = ` -# Disable enterprise repos -sudo sed -i 's/^deb/#deb/g' /etc/apt/sources.list.d/pve-enterprise.list -sudo sed -i 's/^deb/#deb/g' /etc/apt/sources.list.d/ceph.list +# Disable enterprise Proxmox repository +if [ -f /etc/apt/sources.list.d/pve-enterprise.list ]; then + sudo sed -i 's/^deb/#deb/g' /etc/apt/sources.list.d/pve-enterprise.list +fi -# Enable free public repo +# Disable enterprise Proxmox Ceph repository +if [ -f /etc/apt/sources.list.d/ceph.list ]; then + sudo sed -i 's/^deb/#deb/g' /etc/apt/sources.list.d/ceph.list +fi + +# Enable free public Proxmox repository echo "deb http://download.proxmox.com/debian/pve $(lsb_release -cs) pve-no-subscription" | sudo tee /etc/apt/sources.list.d/pve-public-repo.list +# Enable Proxmox testing repository +echo "deb http://download.proxmox.com/debian/pve $(lsb_release -cs) pvetest" | sudo tee /etc/apt/sources.list.d/pve-testing-repo.list + +# Configure main Debian repositories +cat < -

To apply this optimization manually, you would run:

-
-          {installUtilitiesCode}
-        
+

To apply this optimization manually, run these commands:

+
@@ -109,10 +137,8 @@ sudo apt-get install -y zfsutils-linux proxmox-backup-restore-image chrony improve the speed of package management operations. This is particularly useful in server environments where multiple language support is often not required.

-

To apply this optimization manually, you would run:

-
-          {skipLanguagesCode}
-        
+

To apply this optimization manually, run this command:

+
@@ -125,27 +151,31 @@ sudo apt-get install -y zfsutils-linux proxmox-backup-restore-image chrony consistency, and proper functioning of time-sensitive applications. Automatic synchronization ensures your Proxmox VE system maintains the correct time without manual intervention.

-

To apply this optimization manually, you would run:

-
-          {timeSyncCode}
-        
+

To apply this optimization manually, run these commands:

+

4. Update and Upgrade System

This optimization updates the system's package lists, upgrades installed packages, and configures Proxmox - repositories. + repositories. It also includes additional steps to properly set up Debian repositories and disable certain + warnings.

Why it's beneficial: Keeping your system up-to-date is essential for security, stability, and performance. This optimization ensures you have the latest patches and features, while also configuring the - correct repositories for Proxmox VE, enabling access to necessary updates and tools. + correct repositories for Proxmox VE, enabling access to necessary updates and tools. The additional steps help + in:

-

To apply this optimization manually, you would run:

-
-          {updateUpgradeCode}
-        
+
    +
  • Disabling enterprise repositories to avoid conflicts
  • +
  • Enabling free and testing repositories for broader package access
  • +
  • Properly configuring Debian repositories for a stable system
  • +
  • Suppressing non-free firmware warnings for a cleaner update experience
  • +
+

To apply this optimization manually, run these commands:

+
@@ -153,7 +183,8 @@ sudo apt-get install -y zfsutils-linux proxmox-backup-restore-image chrony

All of these optimizations are automatically applied when selected in the Basic Settings section of the customizable_post_install.sh script. This automation ensures that these beneficial settings are applied - consistently and correctly. + consistently and correctly, saving time and reducing the potential for human error during manual + configuration.

diff --git a/web/app/docs/post-install/network/page.tsx b/web/app/docs/post-install/network/page.tsx index dc18756..6b8ab7e 100644 --- a/web/app/docs/post-install/network/page.tsx +++ b/web/app/docs/post-install/network/page.tsx @@ -1,5 +1,6 @@ import type { Metadata } from "next" import { Network } from "lucide-react" +import { CopyableCode } from "@/components/CopyableCode" export const metadata: Metadata = { title: "ProxMenux Post-Install: Network Settings", @@ -38,12 +39,45 @@ net.core.optmem_max=8192 net.core.rmem_max=16777216 net.core.somaxconn=8151 net.core.wmem_max=16777216 -net.ipv4.tcp_rmem=8192 87380 16777216 -net.ipv4.tcp_wmem=8192 65536 16777216 +net.ipv4.conf.all.accept_redirects = 0 +net.ipv4.conf.all.accept_source_route = 0 +net.ipv4.conf.all.log_martians = 0 +net.ipv4.conf.all.rp_filter = 1 +net.ipv4.conf.all.secure_redirects = 0 +net.ipv4.conf.all.send_redirects = 0 +net.ipv4.conf.default.accept_redirects = 0 +net.ipv4.conf.default.accept_source_route = 0 +net.ipv4.conf.default.log_martians = 0 +net.ipv4.conf.default.rp_filter = 1 +net.ipv4.conf.default.secure_redirects = 0 +net.ipv4.conf.default.send_redirects = 0 +net.ipv4.icmp_echo_ignore_broadcasts = 1 +net.ipv4.icmp_ignore_bogus_error_responses = 1 +net.ipv4.ip_local_port_range=1024 65535 +net.ipv4.tcp_base_mss = 1024 +net.ipv4.tcp_challenge_ack_limit = 999999999 +net.ipv4.tcp_fin_timeout=10 +net.ipv4.tcp_keepalive_intvl=30 +net.ipv4.tcp_keepalive_probes=3 +net.ipv4.tcp_keepalive_time=240 +net.ipv4.tcp_limit_output_bytes=65536 net.ipv4.tcp_max_syn_backlog=8192 +net.ipv4.tcp_max_tw_buckets = 1440000 +net.ipv4.tcp_mtu_probing = 1 +net.ipv4.tcp_rfc1337=1 +net.ipv4.tcp_rmem=8192 87380 16777216 +net.ipv4.tcp_sack=1 net.ipv4.tcp_slow_start_after_idle=0 -net.ipv4.tcp_tw_reuse=0 -# ... (other network optimizations) +net.ipv4.tcp_syn_retries=3 +net.ipv4.tcp_synack_retries = 2 +net.ipv4.tcp_tw_recycle = 0 +net.ipv4.tcp_tw_reuse = 0 +net.ipv4.tcp_wmem=8192 65536 16777216 +net.netfilter.nf_conntrack_generic_timeout = 60 +net.netfilter.nf_conntrack_helper=0 +net.netfilter.nf_conntrack_max = 524288 +net.netfilter.nf_conntrack_tcp_timeout_established = 28800 +net.unix.max_dgram_qlen = 4096 EOF # Apply sysctl changes @@ -77,8 +111,10 @@ echo "Acquire::ForceIPv4 \"true\";" > /etc/apt/apt.conf.d/99-force-ipv4 ` const installOpenVSwitchCode = ` -# Install OpenVSwitch +# Update package lists apt-get update + +# Install OpenVSwitch apt-get install -y openvswitch-switch openvswitch-common # Verify installation @@ -105,12 +141,18 @@ ovs-vsctl --version

Why it's beneficial: These optimizations can significantly improve network throughput, reduce - latency, and enhance security by adjusting various kernel parameters related to networking. + latency, and enhance security by adjusting various kernel parameters related to networking. Some key benefits + include:

+

To apply this optimization manually, you would run:

-
-          {applyNetworkOptimizationsCode}
-        
+
@@ -119,14 +161,20 @@ ovs-vsctl --version This optimization enables Google's TCP BBR congestion control algorithm and TCP Fast Open.

- Why it's beneficial: TCP BBR can significantly improve network throughput and reduce latency, - especially on long-distance or congested networks. TCP Fast Open reduces connection establishment time, - improving the speed of short-lived connections. + Why it's beneficial:

+
    +
  • + TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) can significantly improve network throughput + and reduce latency, especially on long-distance or congested networks. +
  • +
  • + TCP Fast Open reduces connection establishment time, improving the speed of short-lived connections by + allowing data transfer during the initial TCP handshake. +
  • +

To apply this optimization manually, you would run:

-
-          {enableTcpFastOpenCode}
-        
+
@@ -134,12 +182,15 @@ ovs-vsctl --version

This optimization configures APT (Advanced Package Tool) to use IPv4 exclusively.

Why it's beneficial: Forcing APT to use IPv4 can resolve issues in environments where IPv6 is - not properly configured or is causing slowdowns. This ensures more reliable package management operations. + not properly configured or is causing slowdowns. This ensures more reliable package management operations by:

+
    +
  • Avoiding potential IPv6-related connection issues
  • +
  • Ensuring consistent behavior across different network configurations
  • +
  • Potentially speeding up package downloads in networks with suboptimal IPv6 support
  • +

To apply this optimization manually, you would run:

-
-          {forceAptIpv4Code}
-        
+
@@ -149,13 +200,17 @@ ovs-vsctl --version

Why it's beneficial: Open vSwitch provides advanced networking capabilities for virtualized - environments. It allows for more flexible and powerful network configurations, supporting features like VLAN - tagging, traffic shaping, and software-defined networking. + environments. It allows for more flexible and powerful network configurations, including:

+
    +
  • Support for VLAN tagging and trunking
  • +
  • Advanced traffic shaping and Quality of Service (QoS) capabilities
  • +
  • Integration with software-defined networking (SDN) controllers
  • +
  • Improved network performance and scalability for large virtualized environments
  • +
  • Support for network function virtualization (NFV)
  • +

To apply this optimization manually, you would run:

-
-          {installOpenVSwitchCode}
-        
+
@@ -163,7 +218,8 @@ ovs-vsctl --version

All of these optimizations are automatically applied when selected in the Network section of the customizable_post_install.sh script. This automation ensures that these beneficial settings are applied - consistently and correctly. + consistently and correctly, saving time and reducing the potential for human error during manual + configuration.

diff --git a/web/app/docs/post-install/system/page.tsx b/web/app/docs/post-install/system/page.tsx index fa123a1..cc745ba 100644 --- a/web/app/docs/post-install/system/page.tsx +++ b/web/app/docs/post-install/system/page.tsx @@ -204,6 +204,19 @@ EOF sudo sysctl -p /etc/sysctl.d/99-memory.conf ` + const timeSyncCode = ` +# Set timezone (replace 'America/New_York' with your timezone) +sudo timedatectl set-timezone America/New_York + +# Enable automatic time synchronization +sudo timedatectl set-ntp true + +# Note: Automatic timezone setting based on IP is commented out to avoid errors +# To set timezone automatically based on IP, you would need to run: +# IP=$(dig +short myip.opendns.com @resolver1.opendns.com) +# TIMEZONE=$(curl -s "https://ipapi.co/$IP/timezone") +# sudo timedatectl set-timezone "$TIMEZONE" +` return (
@@ -230,10 +243,8 @@ sudo sysctl -p /etc/sysctl.d/99-memory.conf needs to be minimized. By using kexec, the system can skip the time-consuming hardware initialization process during a reboot, resulting in much faster restart times.

-

To apply this optimization manually, you would run:

-
-          {fastRebootCode}
-        
+

To apply this optimization manually, run these commands:

+
@@ -247,10 +258,8 @@ sudo sysctl -p /etc/sysctl.d/99-memory.conf Instead of remaining in a crashed state, the system will attempt to recover by rebooting, potentially resolving the issue without manual intervention.

-

To apply this optimization manually, you would run:

-
-          {kernelPanicCode}
-        
+

To apply this optimization manually, run these commands:

+
@@ -264,10 +273,8 @@ sudo sysctl -p /etc/sysctl.d/99-memory.conf virtual environments, generating true randomness can be challenging, leading to potential bottlenecks. Haveged helps maintain a healthy entropy pool, ensuring smooth operation of cryptographic tasks.

-

To apply this optimization manually, you would run:

-
-          {entropyCode}
-        
+

To apply this optimization manually, run these commands:

+
@@ -280,10 +287,8 @@ sudo sysctl -p /etc/sysctl.d/99-memory.conf virtualization environments. Increasing these limits allows for better utilization of system resources, accommodating more concurrent operations and larger workloads without hitting artificial bottlenecks.

-

To apply this optimization manually, you would run:

-
-          {systemLimitsCode}
-        
+

To apply this optimization manually, run these commands:

+
@@ -294,10 +299,8 @@ sudo sysctl -p /etc/sysctl.d/99-memory.conf required by certain software or drivers. Having them installed ensures that you can compile and use custom kernel modules if needed, enhancing system flexibility and compatibility.

-

To apply this optimization manually, you would run:

-
-          {kernelHeadersCode}
-        
+

To apply this optimization manually, run these commands:

+
@@ -308,10 +311,8 @@ sudo sysctl -p /etc/sysctl.d/99-memory.conf limiting log sizes and adjusting logging levels, you can prevent logs from consuming excessive disk space while still maintaining useful system information for troubleshooting.

-

To apply this optimization manually, you would run:

-
-          {journaldCode}
-        
+

To apply this optimization manually, run these commands:

+
@@ -322,10 +323,8 @@ sudo sysctl -p /etc/sysctl.d/99-memory.conf system performance. By compressing old logs and limiting their size, you prevent log files from growing indefinitely and potentially filling up your disk.

-

To apply this optimization manually, you would run:

-
-          {logrotateCode}
-        
+

To apply this optimization manually, run these commands:

+
@@ -338,10 +337,8 @@ sudo sysctl -p /etc/sysctl.d/99-memory.conf especially in virtualized environments. They help ensure that memory is used efficiently, reduce the likelihood of out-of-memory errors, and improve the performance of memory-intensive applications.

-

To apply this optimization manually, you would run:

-
-          {memorySettingsCode}
-        
+

To apply this optimization manually, run these commands:

+
diff --git a/web/app/docs/post-install/virtualization/page.tsx b/web/app/docs/post-install/virtualization/page.tsx index d72ba6c..1f2a736 100644 --- a/web/app/docs/post-install/virtualization/page.tsx +++ b/web/app/docs/post-install/virtualization/page.tsx @@ -1,5 +1,6 @@ import type { Metadata } from "next" import { Box } from "lucide-react" +import { CopyableCode } from "@/components/CopyableCode" export const metadata: Metadata = { title: "ProxMenux Post-Install: Virtualization Settings", @@ -31,11 +32,17 @@ export const metadata: Metadata = { export default function VirtualizationSettingsPage() { const enableVfioIommuCode = ` +#!/bin/bash + # Enable IOMMU for Intel or AMD CPU -# For Intel: -sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ intel_iommu=on iommu=pt"/' /etc/default/grub -# For AMD: -# sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ amd_iommu=on iommu=pt"/' /etc/default/grub +if grep -q GenuineIntel /proc/cpuinfo; then + sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ intel_iommu=on iommu=pt"/' /etc/default/grub +elif grep -q AuthenticAMD /proc/cpuinfo; then + sed -i '/GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ amd_iommu=on iommu=pt"/' /etc/default/grub +else + echo "Unknown CPU type. IOMMU might not be properly enabled." + exit 1 +fi # Configure VFIO modules echo "vfio" >> /etc/modules @@ -44,37 +51,62 @@ echo "vfio_pci" >> /etc/modules echo "vfio_virqfd" >> /etc/modules # Blacklist conflicting drivers -echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf -echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf +cat <> /etc/modprobe.d/blacklist.conf +blacklist nouveau +blacklist nvidia +blacklist radeon +blacklist amdgpu +EOF # Update GRUB and initramfs update-grub update-initramfs -u -k all + +echo "VFIO IOMMU support has been enabled. Please reboot your system for changes to take effect." ` const installGuestAgentCode = ` +#!/bin/bash + # Detect virtualization environment VIRT_ENV=$(systemd-detect-virt) # Install appropriate guest agent case $VIRT_ENV in kvm) + apt-get update apt-get install -y qemu-guest-agent + systemctl enable qemu-guest-agent + systemctl start qemu-guest-agent + echo "QEMU Guest Agent installed and started." ;; vmware) + apt-get update apt-get install -y open-vm-tools + systemctl enable open-vm-tools + systemctl start open-vm-tools + echo "Open VM Tools installed and started." ;; oracle) + apt-get update apt-get install -y virtualbox-guest-utils + systemctl enable vboxadd + systemctl start vboxadd + echo "VirtualBox Guest Additions installed and started." ;; *) echo "No specific guest agent needed or virtualization not detected." ;; esac + +echo "Guest agent installation process completed." ` const configureKsmtunedCode = ` +#!/bin/bash + # Install KSM control daemon +apt-get update apt-get install -y ksm-control-daemon # Configure KSM based on system RAM @@ -82,22 +114,30 @@ RAM_GB=$(free -g | awk '/^Mem:/{print $2}') if [ $RAM_GB -le 16 ]; then sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=50/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=80/' /etc/ksmtuned.conf + echo "RAM <= 16GB: Setting KSM to start at 50% full" elif [ $RAM_GB -le 32 ]; then sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=40/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=60/' /etc/ksmtuned.conf + echo "RAM <= 32GB: Setting KSM to start at 60% full" elif [ $RAM_GB -le 64 ]; then sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=30/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=40/' /etc/ksmtuned.conf + echo "RAM <= 64GB: Setting KSM to start at 70% full" elif [ $RAM_GB -le 128 ]; then sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=20/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=20/' /etc/ksmtuned.conf + echo "RAM <= 128GB: Setting KSM to start at 80% full" else sed -i 's/KSM_THRES_COEF=.*/KSM_THRES_COEF=10/' /etc/ksmtuned.conf sed -i 's/KSM_SLEEP_MSEC=.*/KSM_SLEEP_MSEC=10/' /etc/ksmtuned.conf + echo "RAM > 128GB: Setting KSM to start at 90% full" fi # Enable ksmtuned service systemctl enable ksmtuned +systemctl start ksmtuned + +echo "KSM configuration completed and service started." ` return ( @@ -122,12 +162,17 @@ systemctl enable ksmtuned

Why it's beneficial: IOMMU and VFIO support enables near-native performance for PCI devices (like GPUs or network cards) in virtual machines, which is crucial for high-performance virtualization - scenarios. + scenarios. This allows for:

-

To apply this optimization manually, you would run:

-
-          {enableVfioIommuCode}
-        
+
    +
  • Direct access to hardware from within VMs, improving performance
  • +
  • Better isolation between host and guest systems
  • +
  • Support for advanced features like GPU passthrough for gaming or compute workloads
  • +
+

+ To apply this optimization manually, save the following script and run it with root privileges: +

+
@@ -138,13 +183,19 @@ systemctl enable ksmtuned

Why it's beneficial: Guest agents improve communication between the host and guest systems, - enabling features like graceful shutdown, file sharing, and better performance monitoring. This ensures - smoother operation and management of virtual machines. + enabling features like:

-

To apply this optimization manually, you would run:

-
-          {installGuestAgentCode}
-        
+
    +
  • Graceful shutdown of virtual machines
  • +
  • File sharing between host and guest
  • +
  • Better performance monitoring and resource allocation
  • +
  • Improved time synchronization
  • +
  • Enhanced mouse pointer integration
  • +
+

+ To apply this optimization manually, save the following script and run it with root privileges: +

+
@@ -155,13 +206,18 @@ systemctl enable ksmtuned

Why it's beneficial: KSM allows the kernel to share identical memory pages between multiple - virtual machines, reducing overall memory usage. This can lead to better resource utilization, especially in - environments with many similar virtual machines. + virtual machines, providing several advantages:

-

To apply this optimization manually, you would run:

-
-          {configureKsmtunedCode}
-        
+
    +
  • Reduced overall memory usage, allowing for higher VM density
  • +
  • Improved performance in environments with many similar VMs
  • +
  • Dynamic adjustment of KSM aggressiveness based on system memory pressure
  • +
  • Potential for running more VMs on the same hardware
  • +
+

+ To apply this optimization manually, save the following script and run it with root privileges: +

+
@@ -169,7 +225,8 @@ systemctl enable ksmtuned

All of these optimizations are automatically applied when selected in the Virtualization section of the customizable_post_install.sh script. This automation ensures that these beneficial settings are applied - consistently and correctly. + consistently and correctly, saving time and reducing the potential for human error during manual + configuration.