fix: dynamically detect user and home directory in setup script
This commit is contained in:
@ -12,13 +12,20 @@ if [ -z "$REPO_URL" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 0. ROOT CHECK (Robust)
|
||||
# 0. ROOT & USER DETECTION
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo "ERROR: This script must be run as root."
|
||||
echo "Please use: sudo bash $0 $@"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Detect the real user who called sudo
|
||||
REAL_USER=${SUDO_USER:-$(logname)}
|
||||
REAL_HOME=$(eval echo "~$REAL_USER")
|
||||
|
||||
echo "Target User: $REAL_USER"
|
||||
echo "Target Home: $REAL_HOME"
|
||||
|
||||
# 1. INTERROGATION PHASE
|
||||
echo "Interrogating user for configuration..."
|
||||
|
||||
@ -34,7 +41,6 @@ WIFI_SSID=${WIFI_SSID:-MPVJ-AP}
|
||||
while true; do
|
||||
WIFI_COUNTRY=$(whiptail --inputbox "Enter 2-letter Country Code (e.g. US, GB, DE)" 8 45 "US" --title "WiFi Country Configuration" 3>&1 1>&2 2>&3 < /dev/tty) || exit 1
|
||||
WIFI_COUNTRY=$(echo "$WIFI_COUNTRY" | tr '[:lower:]' '[:upper:]')
|
||||
# Portable regex check using grep
|
||||
if ! echo "$WIFI_COUNTRY" | grep -qE "^[A-Z]{2}$"; then
|
||||
whiptail --msgbox "Error: Country Code must be exactly 2 letters (e.g., US)." 8 45 < /dev/tty
|
||||
else
|
||||
@ -143,6 +149,8 @@ EOF
|
||||
# 3.3 dhcpcd
|
||||
if ! grep -q "interface wlan0" /etc/dhcpcd.conf; then
|
||||
cat <<EOF >> /etc/dhcpcd.conf
|
||||
|
||||
# MPVJ wlan0 Static IP
|
||||
interface wlan0
|
||||
static ip_address=192.168.4.1/24
|
||||
nohook wpa_supplicant
|
||||
@ -167,19 +175,19 @@ sed -i 's/#use-ipv4-ll=yes/use-ipv4-ll=yes/g' /etc/avahi/avahi-daemon.conf
|
||||
echo "Deploying Application..."
|
||||
|
||||
# 4.1 Clone
|
||||
[ -d /home/pi/mpvj ] && mv /home/pi/mpvj /home/pi/mpvj.old.$(date +%s)
|
||||
git clone "$REPO_URL" /home/pi/mpvj
|
||||
mkdir -p /home/pi/media
|
||||
chown -R pi:pi /home/pi/mpvj /home/pi/media
|
||||
[ -d "$REAL_HOME/mpvj" ] && mv "$REAL_HOME/mpvj" "$REAL_HOME/mpvj.old.$(date +%s)"
|
||||
sudo -u "$REAL_USER" git clone "$REPO_URL" "$REAL_HOME/mpvj"
|
||||
mkdir -p "$REAL_HOME/media"
|
||||
chown -R "$REAL_USER:$REAL_USER" "$REAL_HOME/mpvj" "$REAL_HOME/media"
|
||||
|
||||
# 4.2 Build
|
||||
export NODE_OPTIONS="--max-old-space-size=512"
|
||||
cd /home/pi/mpvj/backend
|
||||
sudo -u pi npm install --jobs 1
|
||||
cd /home/pi/mpvj/frontend
|
||||
cd "$REAL_HOME/mpvj/backend"
|
||||
sudo -u "$REAL_USER" npm install --jobs 1
|
||||
cd "$REAL_HOME/mpvj/frontend"
|
||||
if [ ! -d "dist" ]; then
|
||||
sudo -u pi npm install --jobs 1
|
||||
sudo -u pi npm run build
|
||||
sudo -u "$REAL_USER" npm install --jobs 1
|
||||
sudo -u "$REAL_USER" npm run build
|
||||
fi
|
||||
|
||||
# 4.3 Systemd
|
||||
@ -190,8 +198,8 @@ After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=pi
|
||||
WorkingDirectory=/home/pi/mpvj/backend
|
||||
User=$REAL_USER
|
||||
WorkingDirectory=$REAL_HOME/mpvj/backend
|
||||
ExecStart=/usr/bin/node index.js
|
||||
Restart=on-failure
|
||||
Environment=NODE_OPTIONS=--max-old-space-size=512
|
||||
@ -203,39 +211,39 @@ systemctl daemon-reload
|
||||
systemctl enable mpvj-backend.service
|
||||
|
||||
# 4.4 .env
|
||||
cat <<EOF > /home/pi/mpvj/backend/.env
|
||||
cat <<EOF > "$REAL_HOME/mpvj/backend/.env"
|
||||
PORT=80
|
||||
MPVJ_HOSTNAME=$HOSTNAME
|
||||
MPVJ_SSID=$WIFI_SSID
|
||||
MPVJ_WIFI_PASS=$WIFI_PASS
|
||||
MPVJ_REPO_URL=$REPO_URL
|
||||
MPVJ_MEDIA_DIR=/home/pi/media
|
||||
MPVJ_MEDIA_DIR=$REAL_HOME/media
|
||||
EOF
|
||||
chown pi:pi /home/pi/mpvj/backend/.env
|
||||
chmod 600 /home/pi/mpvj/backend/.env
|
||||
chown "$REAL_USER:$REAL_USER" "$REAL_HOME/mpvj/backend/.env"
|
||||
chmod 600 "$REAL_HOME/mpvj/backend/.env"
|
||||
|
||||
# 4.5 Install ofxPiMapper Engine
|
||||
echo "Installing OpenFrameworks and ofxPiMapper (This will take ~1 hour)..."
|
||||
cd /home/pi
|
||||
cd "$REAL_HOME"
|
||||
if [ ! -d "openFrameworks" ]; then
|
||||
sudo -u pi git clone --depth 1 --branch master https://github.com/openframeworks/openFrameworks.git
|
||||
sudo -u "$REAL_USER" git clone --depth 1 --branch master https://github.com/openframeworks/openFrameworks.git
|
||||
cd openFrameworks/scripts/linux/debian
|
||||
./install_dependencies.sh -y > /dev/null 2>&1
|
||||
cd ../../../
|
||||
cd scripts/linux/debian
|
||||
./install_codecs.sh > /dev/null 2>&1
|
||||
cd ../../../
|
||||
make -j1 -C libs/openFrameworksCompiled/project/linux64 > /dev/null 2>&1
|
||||
sudo -u "$REAL_USER" make -j1 -C libs/openFrameworksCompiled/project/linux64 > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
cd /home/pi/openFrameworks/addons
|
||||
cd "$REAL_HOME/openFrameworks/addons"
|
||||
if [ ! -d "ofxPiMapper" ]; then
|
||||
sudo -u pi git clone https://github.com/kr15h/ofxPiMapper.git
|
||||
sudo -u pi git clone https://github.com/vanderlin/ofxOfelia.git
|
||||
sudo -u "$REAL_USER" git clone https://github.com/kr15h/ofxPiMapper.git
|
||||
sudo -u "$REAL_USER" git clone https://github.com/vanderlin/ofxOfelia.git
|
||||
fi
|
||||
|
||||
# Build Example with Highlight Patch
|
||||
cd /home/pi/openFrameworks/addons/ofxPiMapper
|
||||
cd "$REAL_HOME/openFrameworks/addons/ofxPiMapper"
|
||||
if [ -f src/Osc/OscControl.cpp ]; then
|
||||
echo "Applying highlight surface OSC listener modification..."
|
||||
sed -i '/if (m.getAddress() == "\/ofxPiMapper\/surface\/select"){/i \
|
||||
@ -246,8 +254,8 @@ if [ -f src/Osc/OscControl.cpp ]; then
|
||||
}' src/Osc/OscControl.cpp
|
||||
fi
|
||||
|
||||
cd /home/pi/openFrameworks/addons/ofxPiMapper/example-basic
|
||||
sudo -u pi make -j1 > /dev/null 2>&1
|
||||
cd "$REAL_HOME/openFrameworks/addons/ofxPiMapper/example-basic"
|
||||
sudo -u "$REAL_USER" make -j1 > /dev/null 2>&1
|
||||
cp bin/example-basic /usr/local/bin/ofxPiMapper
|
||||
chmod +x /usr/local/bin/ofxPiMapper
|
||||
|
||||
|
||||
Reference in New Issue
Block a user