GH-1390 improve linux runner script
* include fedora dnf package manager * output of the missing dependency lookup is now passed through `sort -u`
This commit is contained in:
		@@ -26,7 +26,7 @@ export QT_PLUGIN_PATH="${MMC_DIR}/plugins"
 | 
			
		||||
export QT_FONTPATH="${MMC_DIR}/fonts"
 | 
			
		||||
 | 
			
		||||
# Detect missing dependencies...
 | 
			
		||||
DEPS_LIST=`ldd "${MMC_DIR}"/plugins/*/*.so 2>/dev/null | grep "not found" | awk -vORS=", " '{ print $1 }'`
 | 
			
		||||
DEPS_LIST=`ldd "${MMC_DIR}"/plugins/*/*.so 2>/dev/null | grep "not found" | sort -u | awk -vORS=", " '{ print $1 }'`
 | 
			
		||||
if [ "x$DEPS_LIST" = "x" ]; then
 | 
			
		||||
	# We have all our dependencies. Run MultiMC.
 | 
			
		||||
	echo "No missing dependencies found."
 | 
			
		||||
@@ -49,38 +49,44 @@ if [ "x$DEPS_LIST" = "x" ]; then
 | 
			
		||||
else
 | 
			
		||||
	# apt
 | 
			
		||||
	if which apt-file &>/dev/null; then
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*"`
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
 | 
			
		||||
		COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do apt-file -l search $LIBRARY; done`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		INSTALL_CMD="sudo apt-get install $COMMAND_LIBS"
 | 
			
		||||
	# pacman
 | 
			
		||||
	elif which pkgfile &>/dev/null; then
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*"`
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
 | 
			
		||||
		COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do pkgfile $LIBRARY; done`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		INSTALL_CMD="sudo pacman -S $COMMAND_LIBS"
 | 
			
		||||
	# dnf
 | 
			
		||||
	elif which dnf &>/dev/null; then
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
 | 
			
		||||
		COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do dnf whatprovides $LIBRARY; done`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | grep -v 'Repo' | sort -u | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		INSTALL_CMD="sudo dnf install $COMMAND_LIBS"
 | 
			
		||||
	# yum
 | 
			
		||||
	elif which yum &>/dev/null; then
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*"`
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
 | 
			
		||||
		COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do yum whatprovides $LIBRARY; done`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		INSTALL_CMD="sudo yum install $COMMAND_LIBS"
 | 
			
		||||
	# zypper
 | 
			
		||||
	elif which zypper &>/dev/null; then
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*"`
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
 | 
			
		||||
		COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do zypper wp $LIBRARY; done`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		INSTALL_CMD="sudo zypper install $COMMAND_LIBS"
 | 
			
		||||
	# emerge
 | 
			
		||||
	elif which pfl &>/dev/null; then
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*"`
 | 
			
		||||
		LIBRARIES=`echo "$DEPS_LIST" | grep -oP "[^, ]*" | sort -u`
 | 
			
		||||
		COMMAND_LIBS=`for LIBRARY in $LIBRARIES; do pfl $LIBRARY; done`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		COMMAND_LIBS=`echo "$COMMAND_LIBS" | sort -u | awk -vORS=" " '{ print $1 }'`
 | 
			
		||||
		INSTALL_CMD="sudo emerge $COMMAND_LIBS"
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	MESSAGE="Error: MultiMC is missing the following libraries that it needs to work correctly:\n\t${DEPS_LIST}\nPlease install them from your distribution's package manager."
 | 
			
		||||
	MESSAGE="$MESSAGE\n\nHint: $INSTALL_CMD\n"
 | 
			
		||||
	MESSAGE="$MESSAGE\n\nHint (please apply common sense): $INSTALL_CMD\n"
 | 
			
		||||
 | 
			
		||||
	printerror "$MESSAGE"
 | 
			
		||||
	exit 1
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user