2023-06-30 12:42:53 +02:00
|
|
|
#!/usr/bin/env bash
|
2023-07-02 22:55:18 +02:00
|
|
|
|
2023-07-03 14:12:55 +02:00
|
|
|
LOGFILE=/tmp/void-usb-install-log
|
|
|
|
|
|
|
|
function press_any_key {
|
|
|
|
echo "Press any key to continue or Ctrl+c to abort..."
|
|
|
|
read -n1 DISCARD_ME
|
|
|
|
echo ""
|
|
|
|
}
|
|
|
|
|
|
|
|
function yesno {
|
|
|
|
unset DISCARD_ME
|
|
|
|
while [ -z "$DISCARD_ME" ]; do
|
|
|
|
read -p "[y/n] " -n1 DISCARD_ME
|
|
|
|
case "$DISCARD_ME" in
|
|
|
|
y)
|
2023-07-14 20:58:05 +02:00
|
|
|
echo ""
|
2023-07-03 14:12:55 +02:00
|
|
|
return 0
|
|
|
|
;;
|
|
|
|
n)
|
2023-07-14 20:58:05 +02:00
|
|
|
echo ""
|
2023-07-03 14:12:55 +02:00
|
|
|
return 1
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo " Please enter y for yes or n for no."
|
|
|
|
unset DISCARD_ME
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[ -z "$TERM" ] && export TERM=linux
|
|
|
|
|
|
|
|
echo -n "Checking for internet connection..."
|
|
|
|
INTERNET="down"
|
|
|
|
WAITING=0
|
|
|
|
while [ "$INTERNET" = "down" -a "$WAITING" -lt 15 ]; do
|
|
|
|
sleep 1
|
|
|
|
if ping -c2 repo-default.voidlinux.org >> $LOGFILE 2>&1; then
|
|
|
|
INTERNET="up"
|
|
|
|
fi
|
|
|
|
WAITING=$((WAITING+1))
|
|
|
|
echo -n "."
|
|
|
|
done
|
|
|
|
echo " $INTERNET"
|
|
|
|
|
|
|
|
if [ "$INTERNET" = "down" ]; then
|
|
|
|
clear
|
|
|
|
echo "Connect to WiFi?
|
|
|
|
|
|
|
|
Any network settings from before the reboot have not been saved and need to be entered again.
|
|
|
|
Use 'Activate a connection' in the dialog to select your network.
|
|
|
|
|
|
|
|
Alternatively, you can continue without internet but the system will be left in a barebones state.
|
|
|
|
"
|
|
|
|
if yesno; then
|
|
|
|
nmtui
|
|
|
|
clear
|
|
|
|
|
|
|
|
echo -n "Checking for internet connection..."
|
|
|
|
WAITING=0
|
|
|
|
while [ "$INTERNET" = "down" -a "$WAITING" -lt 15 ]; do
|
|
|
|
sleep 1
|
|
|
|
if ping -c2 repo-default.voidlinux.org >> $LOGFILE 2>&1; then
|
|
|
|
INTERNET="up"
|
|
|
|
fi
|
|
|
|
WAITING=$((WAITING+1))
|
|
|
|
echo -n "."
|
|
|
|
done
|
|
|
|
echo " $INTERNET"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$INTERNET" = "up" ]; then
|
|
|
|
echo -n "Retrieving package lists... "
|
|
|
|
xbps-install --sync >>$LOGFILE 2>&1
|
|
|
|
echo "done"
|
|
|
|
fi
|
|
|
|
|
2025-01-29 02:25:56 +01:00
|
|
|
|
|
|
|
STAGE2_DIR="/opt/void-usb/installer/" # Change this to your desired directory
|
|
|
|
CONFIG_DIR="$STAGE2_DIR/custom-scripts"
|
2025-02-18 01:43:39 +01:00
|
|
|
SCRIPT_LIST="$CONFIG_DIR/scripts.lst"
|
2025-01-29 02:25:56 +01:00
|
|
|
SCRIPTS=()
|
|
|
|
NAMES=()
|
|
|
|
DESCRIPTIONS=()
|
|
|
|
|
|
|
|
# Find all scripts and extract their names & descriptions
|
|
|
|
echo "Scanning for configuration scripts in $CONFIG_DIR..."
|
|
|
|
for script in "$CONFIG_DIR"/*.sh; do
|
|
|
|
[ -f "$script" ] || continue # Skip if no .sh files found
|
|
|
|
SCRIPTS+=("$script")
|
|
|
|
|
|
|
|
# Extract name from "# NAME:" (first occurrence)
|
2025-02-18 01:43:39 +01:00
|
|
|
SCRIPT_NAME=$(grep -m1 '^# NAME:' "$script" | sed 's/^# NAME:[[:space:]]*//')
|
2025-01-29 02:25:56 +01:00
|
|
|
[ -z "$SCRIPT_NAME" ] && SCRIPT_NAME="$(basename "$script")"
|
|
|
|
|
|
|
|
# Extract description from "# DESC:" (first occurrence)
|
2025-02-18 01:43:39 +01:00
|
|
|
SCRIPT_DESC=$(grep -m1 '^# DESC:' "$script" | sed 's/^# DESC:[[:space:]]*//')
|
2025-01-29 02:25:56 +01:00
|
|
|
[ -z "$SCRIPT_DESC" ] && SCRIPT_DESC="No description available."
|
|
|
|
|
|
|
|
NAMES+=("$SCRIPT_NAME")
|
|
|
|
DESCRIPTIONS+=("$SCRIPT_DESC")
|
|
|
|
done
|
|
|
|
|
|
|
|
# Check if no scripts were found
|
|
|
|
if [ ${#SCRIPTS[@]} -eq 0 ]; then
|
|
|
|
echo "No configuration scripts found in $CONFIG_DIR."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Display menu dynamically
|
|
|
|
echo "Available configurations:"
|
|
|
|
for i in "${!SCRIPTS[@]}"; do
|
2025-02-18 01:43:39 +01:00
|
|
|
echo "$((i+1))) ${NAMES[i]} - ${DESCRIPTIONS[i]}"
|
2025-01-29 02:25:56 +01:00
|
|
|
done
|
2025-02-18 01:43:39 +01:00
|
|
|
echo "$(( ${#SCRIPTS[@]} + 1 ))) Exit"
|
2025-01-29 02:25:56 +01:00
|
|
|
|
|
|
|
# Get user input
|
|
|
|
read -p "Select an option (1-${#SCRIPTS[@]}): " choice
|
|
|
|
|
|
|
|
# Run selected script
|
|
|
|
if (( choice >= 1 && choice <= ${#SCRIPTS[@]} )); then
|
2025-02-18 01:43:39 +01:00
|
|
|
echo "Running: ${NAMES[choice-1]}"
|
|
|
|
bash "${SCRIPTS[choice-1]}"
|
2025-01-29 02:25:56 +01:00
|
|
|
elif (( choice == ${#SCRIPTS[@]} + 1 )); then
|
|
|
|
echo "Exiting..."
|
|
|
|
exit 0
|
|
|
|
else
|
|
|
|
echo "Invalid choice."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2025-02-18 01:43:39 +01:00
|
|
|
# Stage 2 Tasks
|
|
|
|
echo "Setting up user..."
|
|
|
|
read -p "Enter username: " NEW_USER
|
|
|
|
useradd -m -G wheel "$NEW_USER"
|
|
|
|
passwd "$NEW_USER"
|
|
|
|
|
|
|
|
echo "Cleaning up installation files..."
|
|
|
|
rm -rf "$STAGE2_DIR"
|
|
|
|
|
|
|
|
echo "Restoring TTY1 configuration..."
|
|
|
|
mv /mnt/target/etc/sv/agetty-tty1/conf.bak /mnt/target/etc/sv/agetty-tty1/conf >> $LOGFILE 2>&1
|
|
|
|
|
2023-07-03 14:12:55 +02:00
|
|
|
bash --norc --noprofile
|