<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>debian minimum ram — LowEndSpirit</title>
        <link>https://lowendspirit.com/index.php?p=/</link>
        <pubDate>Fri, 05 Jun 2026 09:49:32 +0000</pubDate>
        <language>en</language>
            <description>debian minimum ram — LowEndSpirit</description>
    <atom:link href="https://lowendspirit.com/index.php?p=/discussions/tagged/debian-minimum-ram/feed.rss" rel="self" type="application/rss+xml"/>
    <item>
        <title>Debian 13, minimum ram and disk, 38mb - Guide - Part 1 (running nothing)</title>
        <link>https://lowendspirit.com/index.php?p=/discussion/10684/debian-13-minimum-ram-and-disk-38mb-guide-part-1-running-nothing</link>
        <pubDate>Tue, 24 Mar 2026 13:05:16 +0000</pubDate>
        <category>Technical</category>
        <dc:creator>AnthonySmith</dc:creator>
        <guid isPermaLink="false">10684@/index.php?p=/discussions</guid>
        <description><![CDATA[<p>Took longer than expected, but here we are, the minimal Debian 13 guide, without recompiling the kernel and on a 256mb TierHive VPS the kernel eats 44mb as standard in the daily Debian 13 cloud image and will also require an additional 88mb of userspace memory, so thats 132MB this is what we are targeting and this is why you don't get away with 128mb as standard.</p>

<p>AI USE Declaration: md formatting, spelling, grammar done with Claude, the work and methods is my own.</p>

<h1>Minimising Debian 13 on a KVM VPS</h1>

<p>This guide documents how to strip a freshly deployed Debian 13 (trixie) VPS down to the minimum RAM and disk footprint without breaking it.</p>

<p>This targets KVM-based VPS instances with a virtio-blk disk (<code>/dev/vda</code>), a single network interface with a static IP assigned at deployment, and BIOS boot. The instance is a NAT VPS: SSH is exposed on a forwarded external port, not directly on port 22. Adjust the port forwarding in your provider portal where noted if you use NAT or just use your external IP and port 22 if a fixed IP is assigned.</p>

<hr />

<h2>Before</h2>

<p>Fresh deploy, cloud-init has run, nothing changed yet.</p>

<pre><code>               total        used        free      shared  buff/cache   available
Mem:             213          88          27           0         108         124
Swap:              0           0           0
</code></pre>

<pre><code>Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       2.8G  832M  1.8G  32% /
</code></pre>

<hr />

<h2>Note your network details before starting</h2>

<p>Stage 5 replaces systemd-networkd with a static <code>/etc/network/interfaces</code> file. old school debain style, before making any changes, record your interface name, IP address, and gateway. You will need them later.</p>

<pre><code>ip a
ip route show
</code></pre>

<p>On TierHive the interface is <code>ens3</code>, this may vary (but probably not) The IP and gateway are shown in the VPS control panel and in the output above. Note them down before proceeding.</p>

<hr />

<h2>Stage 1: GRUB Cmdline</h2>

<p>Reduce the boot timeout (Because why not) and add kernel parameters to cut memory overhead.</p>

<pre><code>sed -i 's/^GRUB_TIMEOUT=5/GRUB_TIMEOUT=1/' /etc/default/grub
sed -i 's|^GRUB_DISTRIBUTOR=.*|GRUB_DISTRIBUTOR=Debian|' /etc/default/grub
sed -i 's|^GRUB_CMDLINE_LINUX=.*|GRUB_CMDLINE_LINUX="mitigations=off console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 ipv6.disable=1 audit=0 nowatchdog"|' /etc/default/grub
update-grub
</code></pre>

<p>The <code>GRUB_DISTRIBUTOR</code> line is changed from a shell call to <code>lsb_release</code> to a static string. The <code>lsb-release</code> package is removed later; leaving the shell call in place would cause <code>update-grub</code> to fail after that point.</p>

<p>Remove the GRUB locale files. They exist to translate GRUB menu entries. On a headless server booting via serial console, you can live without them:</p>

<pre><code>rm -rf /boot/grub/locale
</code></pre>

<p>The details on the parameters added to <code>GRUB_CMDLINE_LINUX</code>:</p>

<ul>
<li><code>mitigations=off</code> disables all Spectre and Meltdown mitigations. On a single-user VPS where you control all running code, these protect against nobody as VM-to-VM isolation is handled by the hypervisor. This eliminates the overhead of PTI (page table isolation on every syscall), IBRS, IBPB, and several other mitigations <strong>Skip this if you run untrusted code.</strong></li>
<li><code>ipv6.disable=1</code> disables IPv6 at kernel level. This is a NAT VPS with an IPv4 address only. Skip this if you use IPv6 or are <a href="https://lowendspirit.com/index.php?p=/profile/yoursunny" rel="nofollow">@yoursunny</a></li>
<li><code>audit=0</code> disables the Linux audit subsystem. you can live without it.</li>
<li><code>nowatchdog</code> disables the softlockup and hardlockup detectors.</li>
</ul>

<hr />

<h2>Stage 2: Replace OpenSSH with Dropbear</h2>

<p>Dropbear is a minimal SSH server designed for low-resource systems. It is significantly smaller than OpenSSH and links against far fewer libraries. On a NAT VPS with a single exposed port, the switch must be done atomically: stop sshd and start dropbear in one command or you will lose access, you might anyway, but should be able to get back in fine after.</p>

<pre><code>DEBIAN_FRONTEND=noninteractive apt-get install -y dropbear
</code></pre>

<p>Dropbear is now installed but cannot start because OpenSSH holds port 22. Set the empty extra-args variable to suppress a harmless boot warning:</p>

<pre><code>sed -i 's/#DROPBEAR_EXTRA_ARGS=""/DROPBEAR_EXTRA_ARGS=""/' /etc/default/dropbear
</code></pre>

<p>Now do the atomic swap. Debian 13 uses socket activation for SSH stopping <code>ssh.service</code> alone does not release port 22 because <code>ssh.socket</code> continues to hold it. Both must be stopped together:</p>

<pre><code>systemctl stop ssh.socket ssh &amp;&amp; systemctl start dropbear &amp;&amp; systemctl disable ssh ssh.socket
</code></pre>

<p>Your session will drop. Reconnect on the same external port as before. Dropbear converts and reuses the existing OpenSSH host keys, so the host fingerprint is unchanged.</p>

<p>Once reconnected, remove OpenSSH:</p>

<pre><code>DEBIAN_FRONTEND=noninteractive apt-get purge -y \
    openssh-server openssh-sftp-server openssh-client ssh-import-id
apt-get autoremove -y --purge
</code></pre>

<hr />

<h2>Stage 3: Remove Cloud-Init and Python</h2>

<p>Cloud-init runs once at first boot to configure the instance. It has already run. It pulls in Python 3 and approximately 40 Python packages. All of it can be removed.</p>

<p>First disable the unattended-upgrades service and its associated timers, which also depend on Python:</p>

<pre><code>systemctl stop unattended-upgrades
systemctl disable unattended-upgrades apt-daily.timer apt-daily-upgrade.timer apt-listchanges.timer man-db.timer dpkg-db-backup.timer
</code></pre>

<p>Remove cloud-init, its utilities, unattended-upgrades, and netplan. Netplan was used by cloud-init to generate the systemd-networkd configuration. The generated network config file persists after netplan is removed and will be used again in Stage 5:</p>

<pre><code>DEBIAN_FRONTEND=noninteractive apt-get purge -y cloud-init cloud-guest-utils cloud-image-utils cloud-utils cloud-initramfs-growroot unattended-upgrades apt-listchanges  netplan.io python3-netplan reportbug

DEBIAN_FRONTEND=noninteractive apt-get purge -y $(dpkg -l | grep '^ii' | awk '{print $2}' | grep -E '^(python3|python-apt-common|libpython3)')

apt-get autoremove -y --purge
</code></pre>

<blockquote><div>
  <p>Removing <code>cloud-initramfs-growroot</code> triggers an automatic <code>update-initramfs</code> run via the package post-remove hook. This is expected. The initramfs will be rebuilt again with optimised settings in Stage 7.</p>
</div></blockquote>

<p>Remove the cloud-init data directory, which persists after the package is removed:</p>

<pre><code>rm -rf /var/lib/cloud
</code></pre>

<hr />

<h2>Stage 4: Package Cleanup</h2>

<p>Remove packages that serve no purpose on a running headless VPS:</p>

<pre><code>DEBIAN_FRONTEND=noninteractive apt-get purge -y vim vim-runtime vim-tiny man-db groff-base manpages locales libc-l10n sudo qemu-guest-agent qemu-utils polkitd pciutils bind9-host traceroute socat wget ethtool screen apparmor lsb-release

apt-get autoremove -y --purge
apt-get clean
</code></pre>

<p>The autoremove step may remove <code>procps</code> as an orphaned dependency. Reinstall it explicitly. <code>ps</code>, <code>free</code>, and <code>kill</code> are probably wanted even when cut to the bone.</p>

<pre><code>apt-get install -y procps
</code></pre>

<p><strong>Configure dpkg to suppress docs and man pages on future installs.</strong> Without this, any subsequent <code>apt-get install</code> will reinstall them:</p>

<pre><code>cat &gt; /etc/dpkg/dpkg.cfg.d/nodoc &lt;&lt; 'EOF'
path-exclude=/usr/share/doc/*
path-include=/usr/share/doc/*/copyright
path-exclude=/usr/share/man/*
path-exclude=/usr/share/groff/*
path-exclude=/usr/share/info/*
path-exclude=/usr/share/lintian/*
EOF
</code></pre>

<p>Remove the doc and man page files already installed by previous packages:</p>

<pre><code>find /usr/share/doc -depth -type f ! -name 'copyright' -delete
find /usr/share/doc -depth -empty -type d -delete
rm -rf /usr/share/man /usr/share/groff /usr/share/info /usr/share/lintian
</code></pre>

<p>Remove non-English locale files. The <code>locales</code> package was removed above, but locale data installed by glibc and other packages remains. Only the <code>en_US</code> directory is kept:</p>

<pre><code>find /usr/share/locale -mindepth 1 -maxdepth 1 -type d ! -name 'en_US' -exec rm -rf {} +
find /usr/share/locale -mindepth 1 -maxdepth 1 ! -type d -delete
</code></pre>

<p>Remove all timezone data except UTC. The system clock is set to UTC at deployment and the hypervisor maintains it:</p>

<pre><code>find /usr/share/zoneinfo -mindepth 1 -maxdepth 1 ! -name 'Etc' -exec rm -rf {} +
find /usr/share/zoneinfo/Etc -mindepth 1 ! -name 'UTC' -delete
</code></pre>

<p>Remove the <code>deb-src</code> lines from the apt sources file. Source package lists are never needed on a production server and regenerate as 55MB on every <code>apt-get update</code> if left in place:</p>

<pre><code>sed -i 's/^Types: deb deb-src/Types: deb/' /etc/apt/sources.list.d/debian.sources
</code></pre>

<hr />

<h2>Stage 5: Replace systemd-networkd with ifupdown</h2>

<p>systemd-networkd runs as a persistent daemon consuming approximately 11MB of RAM. For a server with a static IP that never changes, a traditional <code>/etc/network/interfaces</code> file managed by the lightweight <code>ifupdown</code> package is sufficient and leaves no daemon running after the interface is up.</p>

<p><strong>Fix DNS before removing systemd-resolved.</strong> The current <code>/etc/resolv.conf</code> is a symlink to the resolved stub. Replace it with a static file first:</p>

<pre><code>rm /etc/resolv.conf
printf 'nameserver 1.1.1.1\nnameserver 1.0.0.1\n' &gt; /etc/resolv.conf
</code></pre>

<p>Remove the <code>resolve</code> NSS module reference from <code>/etc/nsswitch.conf</code>, then remove the package:</p>

<pre><code>sed -i 's/resolve \[!UNAVAIL=return\] //g' /etc/nsswitch.conf
sed -i 's/ resolve//g' /etc/nsswitch.conf
systemctl stop systemd-resolved
DEBIAN_FRONTEND=noninteractive apt-get purge -y systemd-resolved libnss-resolve
</code></pre>

<p>Install ifupdown. It pulls in <code>dhcpcd-base</code> as a dependency; remove it immediately since the IP is static:</p>

<pre><code>DEBIAN_FRONTEND=noninteractive apt-get install -y ifupdown
DEBIAN_FRONTEND=noninteractive apt-get purge -y dhcpcd-base
</code></pre>

<p>Write the network configuration. Replace the address and gateway with the values you recorded before starting:</p>

<pre><code>cat &gt; /etc/network/interfaces &lt;&lt; 'EOF'
auto lo
iface lo inet loopback

auto ens3
iface ens3 inet static
    address YOUR_IP/24
    gateway YOUR_GATEWAY
EOF
</code></pre>

<blockquote><div>
  <p>The interface name on TierHive KVM instances is <code>ens3</code>. If yours differs, use the name shown by <code>ip a</code>. The subnet prefix <code>/24</code> is standard for TierHive instances; adjust if your allocation differs on your host.</p>
</div></blockquote>

<p>Disable and mask systemd-networkd, then remove the network configuration directory it managed:</p>

<pre><code>systemctl disable systemd-networkd systemd-networkd.socket systemd-network-generator.service systemctl mask systemd-networkd systemd-networkd.socket systemctl mask systemd-networkd-wait-online.service
rm -rf /etc/systemd/network/
</code></pre>

<p>ifupdown's <code>networking.service</code> was enabled automatically when the package was installed. It is a oneshot service that brings up interfaces at boot and exits, leaving no daemon.</p>

<hr />

<h2>Stage 6: Service Cleanup</h2>

<p><strong>Disable systemd-timesyncd.</strong> On KVM the guest clock is disciplined by the hypervisor via <code>kvm-clock</code>. The hypervisor keeps the clock accurate and timesyncd adds no value:</p>

<pre><code>systemctl disable --now systemd-timesyncd
</code></pre>

<p>Mask kernel debug and config filesystems, EFI pstore, binfmt_misc, and timers that have no purpose on a headless VPS:</p>

<pre><code>systemctl mask sys-kernel-config.mount
systemctl mask sys-kernel-debug.mount
systemctl mask sys-kernel-tracing.mount
systemctl mask systemd-pstore.service
systemctl mask proc-sys-fs-binfmt_misc.automount
systemctl mask proc-sys-fs-binfmt_misc.mount
systemctl disable fstrim.timer
systemctl mask uuidd.socket
systemctl disable e2scrub_reap.service e2scrub_all.timer
</code></pre>

<ul>
<li><code>sys-kernel-config.mount</code> — configfs for USB gadgets and iSCSI</li>
<li><code>sys-kernel-debug.mount</code> / <code>sys-kernel-tracing.mount</code> — kernel debug filesystems</li>
<li><code>systemd-pstore.service</code> — EFI pstore crash dump collection; the <code>efi_pstore</code> module is blacklisted in Stage 7</li>
<li><code>proc-sys-fs-binfmt_misc</code> — binary format handlers for Wine, Java, etc.</li>
<li><code>fstrim.timer</code> — TRIM does not pass through virtual storage</li>
<li><code>uuidd.socket</code> — UUID daemon, not needed</li>
<li><code>e2scrub</code> — online ext4 filesystem checks, not needed on a VPS</li>
</ul>

<p><strong>Remove PAM session tracking.</strong> The <code>pam_systemd.so</code> module registers each login session with systemd-logind via dbus. On a root-only dropbear server there is no use for session tracking. Without this change, every SSH login activates dbus, which then auto-activates logind:</p>

<pre><code>sed -i '/pam_systemd\.so/s/^/# /' /etc/pam.d/common-session
</code></pre>

<p><strong>Mask systemd-logind.</strong> Logind is wired into <code>multi-user.target</code> by the systemd package and starts at every boot. It manages user seats and sessions, neither of which exist on a headless server:</p>

<pre><code>systemctl mask systemd-logind.service
</code></pre>

<p><strong>Provide clean reboot and poweroff commands.</strong> Masking logind causes the standard <code>reboot</code> binary to print errors when it attempts to notify logind via dbus before falling back to systemd's private socket. The reboot succeeds either way, but the errors are avoidable. Replace the commands with wrappers that go directly to systemd:</p>

<pre><code>cat &gt; /usr/local/sbin/reboot &lt;&lt; 'EOF'
#!/bin/sh
exec systemctl reboot --no-wall 2&gt;/dev/null
EOF
chmod +x /usr/local/sbin/reboot

cat &gt; /usr/local/sbin/poweroff &lt;&lt; 'EOF'
#!/bin/sh
exec systemctl poweroff --no-wall 2&gt;/dev/null
EOF
chmod +x /usr/local/sbin/poweroff
</code></pre>

<hr />

<h2>Stage 7: Kernel Module Blacklist and Initramfs</h2>

<p>Set the explicit module list and switch the initramfs from <code>most</code> (load everything) to <code>dep</code> (load only what this hardware needs). The three lines below are a safety net: with <code>MODULES=dep</code>, <code>update-initramfs</code> scans running modules and their dependencies, so virtio_blk and ext4 would be detected automatically. The explicit list ensures they are included even if detection misses them:</p>

<pre><code>cat &gt; /etc/initramfs-tools/modules &lt;&lt; 'EOF'
virtio_blk
virtio_net
ext4
EOF

sed -i 's/^MODULES=most/MODULES=dep/' /etc/initramfs-tools/initramfs.conf
</code></pre>

<p>Create the module blacklist:</p>

<pre><code>cat &gt; /etc/modprobe.d/blacklist-vps.conf &lt;&lt; 'EOF'
# CD/ISO (no optical drive on VPS)
blacklist isofs
blacklist sr_mod
blacklist cdrom

# KVM (not nesting VMs)
blacklist kvm_intel
blacklist kvm
install kvm /bin/true
install kvm_intel /bin/true

# Memory ballooning
blacklist virtio_balloon

# ATA/IDE (using virtio-blk, not ATA)
blacklist ata_piix
blacklist ata_generic
blacklist libata

# Input devices (headless)
blacklist evdev
blacklist button
blacklist serio_raw

# VMware VSOCK stack (not VMware)
blacklist vmw_vmci
blacklist vmw_vsock_vmci_transport
blacklist vmw_vsock_virtio_transport_common
blacklist vsock_loopback
blacklist vsock
install vsock /bin/true

# QEMU firmware config (already booted)
blacklist qemu_fw_cfg

# SCSI generic (no SCSI devices)
blacklist sg

# i6300ESB watchdog
blacklist i6300esb

# Intel RAPL power management (not needed on VPS)
blacklist intel_rapl_msr
blacklist intel_rapl_common
blacklist iosf_mbi
blacklist rapl

# EFI pstore (crash dump storage in EFI vars, not needed)
blacklist efi_pstore

# Binary format handlers (Wine, Java, etc)
blacklist binfmt_misc

# Automount
blacklist autofs4

# Watchdog hardware driver
blacklist watchdog

# configfs (USB gadgets, iSCSI config filesystem)
blacklist configfs
install configfs /bin/true

# T10 DIF SCSI data integrity (no SCSI on this VPS)
blacklist crct10dif_pclmul
EOF
</code></pre>

<p>Rebuild the initramfs once with all of the above in place:</p>

<pre><code>update-initramfs -u -k all
</code></pre>

<hr />

<h2>Stage 8: System Tuning</h2>

<p><strong>Sysctl tuning.</strong> The file is named <code>90-</code> to ensure it loads after systemd's <code>/usr/lib/sysctl.d/50-pid-max.conf</code>, which sets <code>kernel.pid_max = 4194304</code>. A file with a lower prefix would be overridden by it:</p>

<pre><code>mkdir -p /etc/sysctl.d
cat &gt; /etc/sysctl.d/90-minvps.conf &lt;&lt; 'EOF'
# Reduce network socket buffers
net.core.rmem_default = 32768
net.core.wmem_default = 32768
net.core.rmem_max = 131072
net.core.wmem_max = 131072
net.core.netdev_max_backlog = 64
net.core.somaxconn = 128

# Reclaim inode and dentry caches more aggressively under memory pressure
vm.vfs_cache_pressure = 500

# Reduce PID table overhead
kernel.pid_max = 4096

# Dirty page writeback thresholds
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

# Disable watchdog
kernel.watchdog = 0
EOF
</code></pre>

<p><strong>Reduce block device read-ahead.</strong> The kernel defaults to 8MB of read-ahead on the block device. On virtual storage this is wasted memory. 128KB is sufficient as it only needs to exist, it does nothing this is a legacy thing from days gone by that still exists for physical spinners I guess but it holds some Ram.</p>

<pre><code>echo 128 &gt; /sys/block/vda/queue/read_ahead_kb

cat &gt; /etc/systemd/system/readahead.service &lt;&lt; 'EOF'
[Unit]
Description=Set block device read-ahead
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo 128 &gt; /sys/block/vda/queue/read_ahead_kb'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

systemctl enable readahead.service
</code></pre>

<p><strong>Replace systemd-journald with busybox syslogd.</strong> journald runs as a persistent 8MB process. Busybox syslogd with a 64KB in-memory circular buffer does the same job for a minimal server at a fraction of the cost. Logs are accessed with <code>busybox logread</code>:</p>

<pre><code>DEBIAN_FRONTEND=noninteractive apt-get install -y busybox

cat &gt; /etc/systemd/system/syslogd.service &lt;&lt; 'EOF'
[Unit]
Description=Busybox syslogd
DefaultDependencies=false
After=systemd-tmpfiles-setup.service
Before=sysinit.target

[Service]
Type=simple
ExecStart=/bin/busybox syslogd -n -C64
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl enable syslogd.service

systemctl mask systemd-journald.service
systemctl mask systemd-journald.socket
systemctl mask systemd-journald-dev-log.socket
systemctl mask systemd-journald-audit.socket 2&gt;/dev/null
</code></pre>

<blockquote><div>
  <p><code>journalctl</code> no longer works after this step. Use <code>busybox logread</code> to view logs and <code>busybox logread -f</code> to follow them. <code>systemctl status</code> continues to work for checking individual service states as it uses systemd's own data, not the journal.</p>
</div></blockquote>

<hr />

<h2>Final Cleanup</h2>

<p>All package operations are now complete. Clear the apt package lists and cache binaries. They consume around 150MB and are not needed until the next time packages are installed, at which point <code>apt-get update</code> will regenerate them:</p>

<pre><code>rm -rf /var/lib/apt/lists/* /var/cache/apt/*.bin
apt-get clean
</code></pre>

<hr />

<h2>Reboot</h2>

<pre><code>reboot
</code></pre>

<hr />

<h2>After</h2>

<pre><code>               total        used        free      shared  buff/cache   available
Mem:             213          38         141           0          41         174
Swap:              0           0           0
</code></pre>

<pre><code>Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       2.8G  275M  2.4G  11% /
</code></pre>

<p>RAM down from 88MB to 38MB. Disk down from 832MB to 275MB, meaning total ram use for kernel and userspace is 82mb so this now fits into 128mb ram, if your provider supports that, you can now downgrade and save some money <img src="https://lowendspirit.com/plugins/emojiextender/emoji/twitter/smile.png" title=":)" alt=":)" height="18" /> but realistically, if you want to run web based services, you will probably want to stay on 256mb</p>

<hr />

<h2>What Is Still Running</h2>

<p>The running userspace processes after boot are systemd (PID 1, 13MB), systemd-udevd (9.5MB), dbus-daemon (2MB), busybox syslogd in circular buffer mode (2MB), dropbear (3MB), and two getty processes: one on ttyS0 for serial console access and one on tty1 for the browser-based console panel.</p>

<p><code>dbus-daemon</code> starts at boot via socket activation and runs persistently. The PAM change in Stage 6 prevents SSH logins from activating systemd-logind through it, but dbus itself is socket-activated early in the boot sequence and stays running.</p>

<p>The loaded kernel modules after reboot are: the virtio stack (<code>virtio_blk</code>, <code>virtio_net</code>, <code>virtio_rng</code>), the EFI partition (<code>vfat</code>, <code>fat</code>, <code>nls_ascii</code>, <code>nls_cp437</code>), hardware AES acceleration (<code>aesni_intel</code>, <code>gf128mul</code>, <code>crypto_simd</code>, <code>cryptd</code>, <code>ghash_clmulni_intel</code>), SHA acceleration (<code>sha256_ssse3</code>, <code>sha512_ssse3</code>, <code>sha1_ssse3</code>), CRC (<code>crc32c_intel</code>, <code>crc32_pclmul</code>), netfilter (<code>ip_tables</code>, <code>x_tables</code>, <code>nfnetlink</code>), and network failover (<code>net_failover</code>, <code>failover</code>).</p>

<p>Also posted on the tierhive blog: <a href="https://tierhive.com/blog/tierhive-howto/debian-13-minimal-guide-reduce-ram-to-38mb-and-disk-to-275mb" rel="nofollow">https://tierhive.com/blog/tierhive-howto/debian-13-minimal-guide-reduce-ram-to-38mb-and-disk-to-275mb</a></p>

<p>I will add making WordPress fit in this VPS guide next.</p>
]]>
        </description>
    </item>
   </channel>
</rss>
