#!/bin/bash
set -eu
scratch=$1
archive=$2
mkdir -p "$scratch"
sudo ip netns add proof7733
sudo ip link add proof7733h type veth peer name proof7733n
sudo ip link set proof7733n netns proof7733
sudo ip addr add 10.77.0.1/24 dev proof7733h
sudo ip link set proof7733h up
sudo ip netns exec proof7733 ip addr add 10.77.0.2/24 dev proof7733n
sudo ip netns exec proof7733 ip link set proof7733n up
sudo ip netns exec proof7733 ip link set lo up
sudo tc qdisc add dev proof7733h root netem delay 500ms
sudo ip netns exec proof7733 tc qdisc add dev proof7733n root netem delay 500ms
sudo useradd -M -d "$scratch/remote-home" -s /bin/bash t3latency7733
sudo mkdir -p "$scratch/remote-home/.ssh" /run/sshd
ssh-keygen -t ed25519 -N '' -f "$scratch/key" -q
sudo cp "$scratch/key.pub" "$scratch/remote-home/.ssh/authorized_keys"
sudo chown -R t3latency7733:t3latency7733 "$scratch/remote-home"
sudo chmod 700 "$scratch/remote-home/.ssh"
sudo chmod 600 "$scratch/remote-home/.ssh/authorized_keys"
sudo usermod -p '*' t3latency7733
ssh-keygen -t ed25519 -N '' -f "$scratch/host-key" -q
cat > "$scratch/sshd-config" <<CONFIG
Port 2222
ListenAddress 10.77.0.2
HostKey $scratch/host-key
PidFile $scratch/sshd.pid
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
UsePAM no
AllowUsers t3latency7733
StrictModes yes
CONFIG
sudo unshare --uts /bin/sh -c 'hostname slow-link; exec ip netns exec proof7733 /usr/sbin/sshd -f "$1/sshd-config" -E "$1/sshd.log"' sh "$scratch"
sudo mkdir -p "$scratch/remote-home/.t3/runtime/versions/0.1.9"
sudo tar -xzf "$archive" --strip-components=1 -C "$scratch/remote-home/.t3/runtime/versions/0.1.9"
printf '0.1.9\n' | sudo tee "$scratch/remote-home/.t3/runtime/versions/0.1.9/.install-complete" >/dev/null
sudo chown -R t3latency7733:t3latency7733 "$scratch/remote-home"

cat > "$scratch/ssh-config" <<CONFIG
Host slow-link
 HostName 10.77.0.2
 User t3latency7733
 Port 2222
 IdentityFile $scratch/key
 StrictHostKeyChecking no
 UserKnownHostsFile $scratch/known-hosts
 LogLevel ERROR
CONFIG
mkdir -p "$scratch/bin"
cat > "$scratch/bin/ssh" <<WRAPPER
#!/bin/sh
exec /usr/bin/ssh -F '$scratch/ssh-config' "\$@"
WRAPPER
chmod +x "$scratch/bin/ssh"
