setup_host: only install things that is not already installed.

This commit is contained in:
Kenneth Johansson 2016-06-01 15:35:55 +02:00
parent 3c674b984c
commit 1967f8895e

View file

@ -1,138 +1,164 @@
#!/bin/bash
function setup_host {
function install_pkgs()
{
local packages_misc="
bison
build-essential
execstack
flex
g++
g++-multilib
gawk
gettext
git automake
gtk-doc-tools
liblzo2-dev
libncurses5-dev
ncurses-term
svn-buildpackage
uuid-dev
zlib1g-dev
"
local packages_perl="libconvert-binary-c-perl libdigest-crc-perl"
local packages_npm="npm nodejs yui-compressor"
if [ "$(whoami)" != "root" ]; then
echo "Please run this script as root!"
exit 1
# do we need 32 bit compatibility libs ?
if [ "$(uname -m | awk '{print$1}')" == "x86_64" ]; then
local packages_x64="libc6-dev-i386 lib32z1"
fi
# filter out already installed packages
local packages_all="$packages_misc $packages_perl $packages_x64 $packages_npm"
local needed=""
for pkg in $packages_all
do
if ! dpkg -s $pkg >/dev/null 2>/dev/null
then
needed="$needed $pkg"
fi
done
packages_all="bison flex g++ g++-multilib zlib1g-dev gettext gawk svn-buildpackage libncurses5-dev ncurses-term git automake gtk-doc-tools liblzo2-dev uuid-dev execstack"
packages_perl="libconvert-binary-c-perl libdigest-crc-perl"
packages_x64="libc6-dev-i386 lib32z1"
packages_npm="npm nodejs yui-compressor"
# install needed packages
if [ -n "$needed" ]
then
echo "Need to install dpkg packages [$needed]"
read -p "Do you approve installation of these packages (y/n): " ans
if [ "$ans" == "y" ]; then
sudo apt-get install $needed
else
echo "can't continue. aborting!"
exit 1
fi
fi
}
curdir=$(pwd)
#===============#
# Prerequisites #
#===============#
mysh=$(ls -hl /bin/sh | awk -F'[ ,/]' '{print$NF}')
check_bash()
{
local mysh=$(ls -hl /bin/sh | awk -F'[ ,/]' '{print$NF}')
if [ "$mysh" != "bash" ]; then
echo "On Debian based systems, e.g. Ubuntu, /bin/sh must point to bash instead of $mysh"
read -p "Do you approve this change (y/n): " ans
if [ "$ans" == "y" ]; then
rm -f /bin/sh
ln -s bash /bin/sh
sudo rm -f /bin/sh
sudo ln -s bash /bin/sh
else
echo "Warning! You haven't pointed /bin/sh to bash."
cd $curdir
exit 1
fi
fi
}
echo "The packages below must be installed"
echo $packages_all $packages_perl
read -p "Do you approve insallation of these packages (y/n): " ans
if [ "$ans" == "y" ]; then
apt-get install $packages_all
apt-get install $packages_perl
else
cd $curdir
exit 1
fi
install_npm(){
if [ "$(uname -m | awk '{print$1}')" == "x86_64" ]; then
echo "You are running a Linux Distribution based on 64-bit kernel"
echo "The packages below must be installed"
echo $packages_x64
read -p "Do you approve insallation of these packages (y/n): " ans
if [ "$ans" == "y" ]; then
apt-get install $packages_x64
else
cd $curdir
exit 1
local npm_package="
bower
grunt-cli
less
mocha
npm
uglify-js
"
local needed=""
# Filter out already installed packages
for pkg in $npm_package
do
if ! npm list -g $pkg >/dev/null 2>/dev/null
then
needed="$needed $pkg"
fi
done
# install needed packages
if [ -n "$needed" ]
then
echo "Need to install npm package $needed"
for pkg in $needed
do
sudo npm install -g $pkg
done
fi
}
echo "The packages below must be installed in order to be able to compile JUCI"
echo $packages_npm
read -p "Do you approve insallation of these packages (y/n): " ans
if [ "$ans" == "y" ]; then
apt-get install npm nodejs yui-compressor
npm install -g npm
npm install -g grunt-cli
npm install -g mocha
npm install -g bower
npm install -g uglify-js
npm install -g less
check_brcm_tools(){
if [ "$(which node)" == "" ]; then
NODEJS=$(which nodejs)
if [ "$NODEJS" != "" ]; then
read -p "Found nodejs executable at $(which nodejs), but no path to 'node'. Do you want to create a symlink? (y/n): " ans
if [ "$ans" == "y" ]; then
ln -s "$NODEJS" "/usr/bin/node"
fi
fi
fi
user=$(who | head -1 | awk '{print$1}')
[ -n $user ] && chown -R $user:$user /home/$user/.npm/
else
cd $curdir
exit 1
fi
# Get the Broadcom toolchain from here and unpack the mips/arm package to /opt:
echo -n "Checking for Broadcom MIPS toolchain: "
if [ -d /opt/toolchains/crosstools-mips-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21 ]; then
install_mips=0
echo "YES"
else
local install_mips=0
local install_arm=0
if [ ! -d /opt/toolchains/crosstools-mips-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21 ]; then
install_mips=1
echo "NO"
echo "Need to install broadcom MIPS toolchain"
fi
echo -n "Checking for Broadcom ARM toolchain: "
if [ -d /opt/toolchains/crosstools-arm-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21-NPTL ]; then
install_arm=0
echo "YES"
else
if [ ! -d /opt/toolchains/crosstools-arm-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21-NPTL ]; then
install_arm=1
echo "NO"
echo "Need to install broadcom ARM toolchain"
fi
if [ $install_mips -eq 1 -o $install_arm -eq 1 ]; then
read -p "Do you approve insallation of missing toolchains (y/n): " ans
read -p "Do you approve installation of missing toolchains (y/n): " ans
if [ "$ans" == "y" ]; then
echo "Downloading toolchain"
else
cd $curdir
echo "can't continue. aborting"
exit 1
fi
cd ~
wget http://iopsys.inteno.se/iopsys/toolchain/crosstools-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2-full.tar.bz2
tar jxf crosstools-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2-full.tar.bz2
cd /
# create install dir
sudo mkdir -p /opt/toolchains/
sudo chown $USER:$USER /opt/toolchains/
if [ $install_mips -eq 1 ]; then
echo "Installing MIPS toolchain"
tar jxf ~/crosstools-mips-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2.tar.bz2
fi
(
mkdir tmp
cd tmp
if [ $install_arm -eq 1 ]; then
echo "Installing ARM toolchain"
tar jxf ~/crosstools-arm-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21-NPTL.Rel1.2.tar.bz2
fi
wget http://iopsys.inteno.se/iopsys/toolchain/crosstools-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2-full.tar.bz2
tar jxf crosstools-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2-full.tar.bz2
rm -f ~/crosstools-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21-sources.tar.bz2
rm -f ~/crosstools-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2-full.tar.bz2
rm -f ~/crosstools-mip*-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2.tar.bz2
rm -f ~/crosstools-arm-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21-NPTL.Rel1.2.tar.bz2
if [ $install_mips -eq 1 ]; then
echo "Installing MIPS toolchain"
tar jxf crosstools-mips-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2.tar.bz2
fi
if [ $install_arm -eq 1 ]; then
echo "Installing ARM toolchain"
tar jxf crosstools-arm-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21-NPTL.Rel1.2.tar.bz2
fi
rm -f crosstools-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21-sources.tar.bz2
rm -f crosstools-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2-full.tar.bz2
rm -f crosstools-mip*-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21.Rel1.2.tar.bz2
rm -f crosstools-arm-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21-NPTL.Rel1.2.tar.bz2
)
fi
}
check_gcc_version(){
gcc_ver=$(ls -l /usr/bin/gcc-[0-9]* | head -1 | awk '{print$NF}' | cut -d'-' -f2)
if [ "$gcc_ver" != "4.8" ]; then
@ -163,6 +189,19 @@ function setup_host {
exit 1
fi
fi
}
function setup_host {
#===============#
# Prerequisites #
#===============#
install_pkgs
check_bash
install_npm
check_brcm_tools
check_gcc_version
echo ""
echo ""
@ -170,8 +209,6 @@ function setup_host {
echo ""
echo ""
cd $curdir
}
register_command "setup_host" "Install needed packets to host machine"