diff --git a/setup_user.sh b/setup_user.sh new file mode 100755 index 0000000..26b53c6 --- /dev/null +++ b/setup_user.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash + +Help() { + echo "------------------------------------------------------------" + echo "setup_user.sh [options] USERNAME" + echo "Configure a new user on the system to use code-server WPILIB" + echo "This script needs to be run as root!" + echo "Options:" + echo "\t-h: Show this help" + echo "\t-v: Make the script tell you more about what it is doing" + echo "------------------------------------------------------------" + echo "" +} + +VERBOSE=false +SCRIPTDIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +while getopts "hv" flag; do + case "$flag" in + h) + Help + exit 0;; + v) VERBOSE=true;; + \?) + echo "Unknown option $flag, run setup_user.sh -h" + exit 3;; + esac +done + +USERNAME=${@:$OPTIND:1} +PORT=${@:$OPTIND+1:1} + +if [ $USERNAME == '' ]; then + echo "You need to specify a user to setup" + exit 1 +fi + +if [ $(whoami) != 'root' ]; then + echo "This script must be run as root" + exit 2 +fi + +if [ "$(grep -o "$USERNAME" /etc/passwd | uniq)" == "$USERNAME" ]; then + if $VERBOSE; then + echo "User $USERNAME already exists, skipping user creation" + fi +else + useradd "$USERNAME" +fi + +HOMEDIR="$(grep "$USERNAME" /etc/passwd | cut -d ':' -f 6)" + +ARTIFACTSNAME="$(ls /opt/wpilib | grep artifacts)" +ARTIFACTSYEAR="$(echo $ARTIFACTSNAME | cut -d '-' -f 2 | cut -d '.' -f 1)" + +if [ ! -d "$HOMEDIR/wpilib/$ARTIFACTSYEAR" ]; then + su -c "mkdir -p ~/wpilib/$ARTIFACTSYEAR" "$USERNAME" +fi + +su -c "tar -xzf /opt/wpilib/$ARTIFACTSNAME -C ~/wpilib/$ARTIFACTSYEAR" "$USERNAME" + +GRADLEZIP="$(ls $HOMEDIR/wpilib/$ARTIFACTSYEAR/installUtils | grep 'gradle-.*-bin.zip')" +GRADLEFOLDER="$HOMEDIR/gradle-$(echo "$GRADLEZIP" | cut -d '-' -f 2)" + +su -c "unzip $HOMEDIR/wpilib/$ARTIFACTSYEAR/installUtils/$GRADLEZIP -d ~/" "$USERNAME" + +if [ -f "$HOMEDIR/.bashrc.d/wpilib.sh" ]; then + rm -f "$HOMEDIR/.bashrc.d/wpilib.sh" +fi + +if [ ! -d "$HOMEDIR/.bashrc.d" ]; then + su -c "mkdir $HOMEDIR/.bashrc.d" "$USERNAME" +fi + +su -c "touch $HOMEDIR/.bashrc.d/wpilib.sh" "$USERNAME" + +echo "export JAVA_HOME=$HOMEDIR/wpilib/$ARTIFACTSYEAR/jdk" >> "$HOMEDIR/.bashrc.d/wpilib.sh" +echo "export PATH=\$PATH:$HOMEDIR/wpilib/$ARTIFACTSYEAR/jdk/bin" >> "$HOMEDIR/.bashrc.d/wpilib.sh" +echo "export PATH=\$PATH:$GRADLEFOLDER/bin" >> "$HOMEDIR/.bashrc.d/wpilib.sh" + +su -c "$HOMEDIR/wpilib/$ARTIFACTSYEAR/jdk/bin/java -jar $HOMEDIR/wpilib/$ARTIFACTSYEAR/tools/ToolsUpdater.jar" "$USERNAME" +su -c "$HOMEDIR/wpilib/$ARTIFACTSYEAR/jdk/bin/java -jar $HOMEDIR/wpilib/$ARTIFACTSYEAR/maven/MavenMetaDataFixer.jar" "$USERNAME" + +if [ ! -d "$HOMEDIR/.local/share" ]; then + su -c "mkdir -p ~/.local/share" "$USERNAME" +fi + +su -c "tar -xzf $SCRIPTDIR/code-server.tar.gz -C ~/.local/share" "$USERNAME" +su -c "cp -f $SCRIPTDIR/settings.json ~/.local/share/code-server/User" "$USERNAME" +su -c "cp -f $SCRIPTDIR/config.yaml ~/.config/code-server" "$USERNAME" + +IP="$(hostname -I | head -n 1)" +NEW_PASS="$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 20; echo)" + +su -c "sed 's/IPADDRESS/$IP/g;s/PORT/$PORT/g;s/PASSWORD/$NEW_PASS/g;' ~/.config/code-server/config.yaml > ~/.config/code-server/config.yaml" "$USERNAME" + +exit 0