Add ripcord/README.md

This commit is contained in:
first 2025-07-06 07:17:35 +00:00
parent 4f314e0180
commit e870be0d75

115
ripcord/README.md Normal file
View file

@ -0,0 +1,115 @@
# Ripcord
A dead-simple parachute for your server's disk.
### The Problem
A full disk can crash a server and corrupt data. When this happens, you are locked out and cannot fix the problem.
### The Solution
Ripcord runs once on a new system's first boot. It creates a single, large "ballast" file of **uncompressible random data**.
In an emergency, you delete this one file. This instantly frees up critical disk space, giving you time to log in and properly resolve the issue.
---
## In an Emergency: Pull The Ripcord
To prevent a disk-full event and recover your system, **delete this file**:
```bash
# This is it. This is the command that saves the server.
rm /RIPCORD_EMERGENCY_DELETE_FOR_DISK_SPACE.dat
```
This single action gives you the breathing room you need.
---
### Installation
Installation is a two-step process: place the script, then enable the service for your OS.
#### 1. Place the Script (All Systems)
Copy `ripcord.sh` to `/usr/local/sbin/` and make it executable.
```bash
sudo cp ripcord.sh /usr/local/sbin/ripcord.sh
sudo chmod +x /usr/local/sbin/ripcord.sh
```
#### 2. Enable the First-Boot Service
Choose the instructions for your operating system.
##### A) For Debian / Ubuntu / RHEL (systemd)
```bash
# Create and enable the systemd service. It will run once on the next boot.
cat << EOF | sudo tee /etc/systemd/system/ripcord.service
[Unit]
Description=Ripcord Emergency Disk Space Reserve
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/ripcord.sh
ExecStartPost=/bin/sh -c "systemctl disable ripcord.service"
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable ripcord.service
```
##### B) For FreeBSD (rc.d)
```bash
# Create the rc.d script.
cat << EOF | sudo tee /usr/local/etc/rc.d/ripcord
#!/bin/sh
# PROVIDE: ripcord
# REQUIRE: LOGIN
. /etc/rc.subr
name="ripcord"
start_cmd="${name}_start"
stop_cmd=":"
ripcord_start() {
if [ ! -f "/var/log/ripcord-deployed.flag" ]; then
/usr/local/sbin/ripcord.sh
fi
}
load_rc_config \$name
run_rc_command "\$1"
EOF
# Make it executable and enable it in rc.conf.
sudo chmod +x /usr/local/etc/rc.d/ripcord
sudo sysrc ripcord_enable="YES"
```
##### C) For OpenBSD (rc.local)
```bash
# Add the execution command to /etc/rc.local.
# This block will be checked on every boot, but only run once.
cat << EOF | sudo tee -a /etc/rc.local
# Deploy Ripcord on first boot if not already done
if [ ! -f "/var/log/ripcord-deployed.flag" ] && [ -x "/usr/local/sbin/ripcord.sh" ]; then
/usr/local/sbin/ripcord.sh
fi
EOF
```
### Configuration
To change the size percentage or filename, edit the variables at the top of the `ripcord.sh` script.
```sh
# Percentage of the total root filesystem size to use.
PERCENTAGE=5
# The emergency file. The name itself is the instruction.
TARGET_FILE="/RIPCORD_EMERGENCY_DELETE_FOR_DISK_SPACE.dat"
```