diff --git a/iop/scripts/setup_host.sh b/iop/scripts/setup_host.sh index d3ef2475d..8e23a0080 100755 --- a/iop/scripts/setup_host.sh +++ b/iop/scripts/setup_host.sh @@ -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"