127 lines
3.6 KiB
Bash
Executable File
127 lines
3.6 KiB
Bash
Executable File
#!/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}
|
|
HOMEDIR=${@:$OPTIND+2: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 -d "$HOMEDIR/$USERNAME" "$USERNAME"
|
|
fi
|
|
|
|
echo "Unpacking WPILIB"
|
|
|
|
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"
|
|
|
|
echo "Unpacking Gradle"
|
|
|
|
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"
|
|
|
|
echo "Setting up user environment variables"
|
|
|
|
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"
|
|
|
|
echo "Setting up tools"
|
|
|
|
su -c "$HOMEDIR/wpilib/$ARTIFACTSYEAR/jdk/bin/java -jar $HOMEDIR/wpilib/$ARTIFACTSYEAR/tools/ToolsUpdater.jar" "$USERNAME"
|
|
|
|
echo "Setting up maven"
|
|
|
|
su -c "$HOMEDIR/wpilib/$ARTIFACTSYEAR/jdk/bin/java -jar $HOMEDIR/wpilib/$ARTIFACTSYEAR/maven/MavenMetaDataFixer.jar" "$USERNAME"
|
|
|
|
echo "Setting up default code-server configs"
|
|
|
|
if [ ! -d "$HOMEDIR/.local/share" ]; then
|
|
su -c "mkdir -p ~/.local/share" "$USERNAME"
|
|
fi
|
|
|
|
if [ ! -d "$HOMEDIR/.config/code-server" ]; then
|
|
su -c "mkdir -p ~/.config/code-server" "$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"
|
|
|
|
echo "Setting specific user configs"
|
|
|
|
IP="$(hostname -I | head -n 1 | tr -d ' ')"
|
|
NEW_PASS="$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 20; echo)"
|
|
|
|
su -c "sed -i 's/IPADDRESS:PORT/$IP:$PORT/g;s/PASSWORD/$NEW_PASS/g;' ~/.config/code-server/config.yaml" "$USERNAME"
|
|
|
|
echo "Install user extensions"
|
|
|
|
for EXTENSION in $HOMEDIR/wpilib/$ARTIFACTSYEAR/vsCodeExtensions/*.vsix; do
|
|
echo "Installing extension $EXTENSION"
|
|
su -c "code-server --install-extension $EXTENSION" "$USERNAME"
|
|
done
|
|
|
|
echo "$USERNAME is configured, there password is $NEW_PASS"
|
|
|
|
exit 0
|