ps2_samba_arch/ps2_samba.sh

80 lines
1.9 KiB
Bash

#!/bin/bash
set -e
# Get the current user (not root)
REALUSER=$(logname)
HOME_DIR=$(eval echo "~$REALUSER")
SHARE_DIR="$HOME_DIR/PS2SMB"
# Ensure script is run as root
if [ "$(id -u)" -ne 0 ]; then
echo "Please run this script as root (e.g. with sudo)."
exit 1
fi
echo "[*] Checking if Samba is installed..."
if ! pacman -Q samba &>/dev/null; then
echo "[+] Samba not found. Installing..."
pacman -Sy --noconfirm samba
else
echo "[✓] Samba is already installed."
fi
# Create PS2 user if it doesn't exist
if ! id "PS2" &>/dev/null; then
echo "[*] Creating user 'PS2'..."
useradd -M -s /usr/bin/nologin PS2
else
echo "[✓] User 'PS2' already exists."
fi
# Create the shared directory if it doesn't exist
echo "[*] Creating share directory at $SHARE_DIR..."
mkdir -p "$SHARE_DIR"
chown "$REALUSER:$REALUSER" "$SHARE_DIR"
# Set ACLs so PS2 has full access
echo "[*] Setting ACLs for user 'PS2' on $SHARE_DIR..."
setfacl -R -m u:PS2:rwx "$SHARE_DIR"
setfacl -R -d -m u:PS2:rwx "$SHARE_DIR"
# Backup original smb.conf
if [ -f /etc/samba/smb.conf ]; then
echo "[*] Backing up existing /etc/samba/smb.conf to /etc/samba/smb.conf.bak"
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
fi
# Write the Samba config
echo "[*] Writing new Samba configuration..."
cat > /etc/samba/smb.conf <<EOF
[global]
workgroup = WORKGROUP
server string = Arch SMB Server
security = user
map to guest = Bad User
name resolve order = bcast host
server min protocol = LANMAN1
client min protocol = NT1
client max protocol = NT1
ntlm auth = yes
lanman auth = yes
client lanman auth = yes
client plaintext auth = yes
log level = 3
[PS2SMB]
path = $SHARE_DIR
browseable = yes
read only = no
guest ok = yes
force user = PS2
EOF
# Enable and start Samba
echo "[*] Enabling and starting Samba service..."
systemctl enable smb --now
echo "[✓] Done. Samba is running and PS2 has access to $SHARE_DIR"