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