简体   繁体   English

AWS ubuntu服务器node.js安装的设置bash脚本失败

[英]Setup bash script for aws ubuntu server node.js installation fails

I'm trying to write a node.js/MEAN.JS setup bash script based on a script to create a custom node.js development environment on a AWS Ubuntu server. 我试图基于脚本编写一个node.js / MEAN.JS安装bash脚本,以在AWS Ubuntu服务器上创建自定义node.js开发环境。

Well so far so good, but when I tried to start and generalize the script (adding MEAN installation to it) the tests start to fail. 到目前为止,一切都很好,但是当我尝试启动并推广脚本(向其中添加MEAN安装)时,测试开始失败。 It looks like it doesn't install any of the node programs: 看起来它没有安装任何节点程序:

    Testing Basic dependencies:
    git                           OK
    gcc                           OK
    g++                           OK
    autoconf                      OK
    automake                      OK
    libtool                       OK
    python                        OK
    make                          OK

    Testing Basic command line editor installations:
    rlwrap                        OK
    emacs                         OK
    nano                          OK

    Testing Node.JS installations:
    node                          missing
    nvm                           missing
    npm                           missing
    heroku                        OK
    foreman                       OK

    Testing MEAN JS Stack installations:
    mongo                         OK
    mongod                        OK
    mean                          missing
    bower                         missing
    grunt                         missing

Also when I try to execute for example node , I get the following error: 另外,当我尝试执行例如node ,也会出现以下错误:

    $ node
    The program 'node' can be found in the following packages:
     * node
     * nodejs
    Try: sudo apt-get install <selected package>

The weird thing is when the bash script is executed it seems to be installing everything fine. 奇怪的是,当执行bash脚本时,似乎一切正常。 I've been looking around and can't find why this is happening and what the solution should be? 我一直在环顾四周,找不到为什么会发生这种情况以及应该怎么解决? Can it have anything to do with the $PATH ? 它与$PATH有什么关系吗?

setup.sh source code: setup.sh源代码:

    #!/bin/bash

    #Added this usefull function from a Stack Overflow post:
    #Link: http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
    function coloredEcho(){
        local exp=$1;
        local color=$2;
        if ! [[ $color =~ '^[0-9]$' ]] ; then
           case $(echo $color | tr '[:upper:]' '[:lower:]') in
            black) color=0 ;;
            red) color=1 ;;
            green) color=2 ;;
            yellow) color=3 ;;
            blue) color=4 ;;
            magenta) color=5 ;;
            cyan) color=6 ;;
            white|*) color=7 ;; # white or invalid color
           esac
        fi
        tput setaf $color;
        echo $exp;
        tput sgr0;
    }

    #Base installation function:
    #Is from:
    #Link: https://github.com/startup-class/setup/blob/master/setup.sh

    function baseInstall() {
        # Simple setup.sh for ISMAT School Project
        cd
        apt-get install -y curl

        coloredEcho "Installing project structure:" blue

        # Installing dependencies:
        sudo apt-get update
        sudo apt-get install -y git
        sudo apt-get install -y gcc g++ autoconf automake libtool
        sudo apt-get install -y python-software-properties python make
        sudo apt-get install -y build-essential libssl-dev

        # Install jshint to allow checking of JS code within emacs
        # http://jshint.com/
        npm install -g jshint

        # Install rlwrap to provide libreadline features with node
        # See: http://nodejs.org/api/repl.html#repl_repl
        sudo apt-get install -y rlwrap

        # Install emacs24
        # https://launchpad.net/~cassou/+archive/emacs
        sudo add-apt-repository -y ppa:cassou/emacs
        sudo apt-get -qq update
        sudo apt-get install -y emacs24-nox emacs24-el emacs24-common-non-dfsg

        # Install nvm: node-version manager
        # https://github.com/creationix/nvm
        curl https://raw.github.com/creationix/nvm/master/install.sh | sh

        # Load nvm and install latest production node
        source $HOME/.nvm/nvm.sh
        source ~/.profile
        nvm ls-remote
        nvm install v0.10.26
        nvm use v0.10.26

        # git pull and install dotfiles as well
        cd $HOME
        if [ -d ./dotfiles/ ]; then
            mv dotfiles dotfiles.old
        fi
        if [ -d .emacs.d/ ]; then
                mv .emacs.d .emacs.d~
        fi
        git clone https://github.com/cmpsoares91/dotfiles.git
        ln -sb dotfiles/.screenrc .
        ln -sb dotfiles/.bash_profile .
        ln -sb dotfiles/.bashrc .
        ln -sb dotfiles/.bashrc_custom .
        ln -sf dotfiles/.emacs.d .

        sudo apt-get update
    }

    install=1

    if [ $1 == server ] ; then
        coloredEcho "Starting Server Instalation..." red

        # Instaling Base:
        baseInstall

        # Install Heroku toolbelt
        # https://toolbelt.heroku.com/debian
        wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

        # All extra stuff for server add here

        coloredEcho "Server Setup Ready" red

    elif [ $1 == dev ] ; then
        coloedEcho "Starting Developer Instalation..." green

        # Instaling Base:
        baseInstall

        coloredEcho "Developer Setup Ready" green

    else
        coloredEcho "No selection made." blue
        install=0
    fi

    if [ $install == 1 ] ; then 
        coloredEcho "Install MEAN JavaScript Stack as well? (y/n)" magenta
        a=1
        while [ $a == 1 ]
        do
            a=0
            read meanOption
            if [ $meanOption == y ] ; then
                coloredEcho "Starting MEAN JavaScript Stack Instalation..." red

                #Add MEAN.io installation commands...

                #Installing MongoDB:
                sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
                echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
                sudo apt-get update
                sudo apt-get install -y mongodb-org

                #Installing Bower:
                npm install bower

                #Installing MEAN.io:
                sudo npm install -g meanio@latest

                #Start App Right away?
                coloredEcho "--> Want to initiate mean App now? (y/n)" red
                c=1
                while [ $c == 1 ]
                do
                    c=0
                read appOption
                    if [ $appOption == y ] ; then
                        coloredEcho "----> Enter App name:" red
                        read myApp
                            mean init $myApp
                            cd $myApp && npm install
                            grunt
                    elif [ $appOption == n ] ; then
                        #Nothing Happens...
                        coloredEcho "--> Not initiation App..." red
                    else
                        coloredEcho "--> Please enter y or n:" red
                        c=1
                    fi
                done
            elif [ $meanOption == n ] ; then
                #Nothing Happens...
                coloredEcho "Not installing MEAN..." red
            else
                coloredEcho "Please enter y or n:" magenta
                a=1
            fi
        done

        g=1
        while [ $g == 1 ]
        do
            g=0
            coloredEcho "Do you want to install Grunt.JS? (y/n)" green
            read gruntOption
            if [ $gruntOption == y ] ; then
            # Install Grunt for automated node builds
            # http://gruntjs.com/getting-started for details
            npm install -g grunt-cli
        elif [ $gruntOption == n ] ; then
                #Nothing Happens...
                    coloredEcho "--> Not Installing Grunt.js..." green
            else
                    coloredEcho "--> Please enter y or n:" green
                    g=1
            fi
        done
    fi

test.sh source code: test.sh源代码:

    #!/bin/bash

    #Bash Script for installation testing
    #Link: http://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-script

    echo "Testing Basic dependencies:"
    for cmd in "git" "gcc" "g++" "autoconf" "automake" "libtool" "python" "make" ; do
      printf "%-30s" "$cmd"
      if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
    done

    echo -e "\nTesting Basic command line editor installations:"
    for cmd in "rlwrap" "emacs" "nano"; do
      printf "%-30s" "$cmd"
      if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
    done

    echo -e "\nTesting Node.JS installations:"
    for cmd in "node" "nvm" "npm" "heroku" "foreman"; do
      printf "%-30s" "$cmd"
      if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
    done

    echo -e "\nTesting MEAN JS Stack installations:"
    for cmd in "mongo" "mongod" "mean" "bower" "grunt"; do
      printf "%-30s" "$cmd"
      if hash "$cmd" 2>/dev/null; then printf "OK\n"; else printf "missing\n"; fi
    done

Complete source code is all available here: https://github.com/cmpsoares91/Node.js-Project-Setup 完整的源代码都可以在这里找到: https : //github.com/cmpsoares91/Node.js-Project-Setup

I posted the links because the code is quite big. 我发布了链接,因为代码很大。 Also, I made it all opensource so if you want to contribute to it, it's fine by me. 另外,我将其全部开源,因此,如果您想为它贡献力量,那对我来说很好。

PS Admins and moderators: Don't kill me if I do something wrong in the Question post, it's my first, please notify me and I'll edit immediately. PS管理员和主持人:如果我在“问题”帖子中做错了任何事情,请不要杀了我,这是我的第一次,请通知我,我会立即进行编辑。


Edit 1: 编辑1:

The nvm show that's it's installed: nvm显示已安装:

    [ubuntu@domU-12-31-39-0A-28-86:~]$nvm

    Node Version Manager

    Usage:

    (...)

But when executing test it still shows as missing. 但是执行测试时,仍然显示为丢失。 node npm mean bower and grunt continue to stay missing and unexecutable. node npm mean bower and grunt继续丢失并且无法执行。

Edit 2: Added Source code after Louis's comment, Thanks for the insight! 编辑2:在Louis的评论后添加了源代码,感谢您的见解!

I found what was causing the problem, in one or two cases it had to do with the fact I forgot add sudo , but not most of it. 我发现了导致问题的原因,在一两个案例中,这与我忘记添加sudo的事实有关,但并不是其中的大多数。

The problem was that nvm doesn't actually fully install node.js, npm etc. So I had to do those installations via the apt-get install node like this: 问题是nvm实际上并未完全安装node.js,npm等。因此,我必须通过apt-get install node以下apt-get install node

# Installing last node and npm version
sudo apt-add-repository -y ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install -y nodejs

And the other installations should be done after this with the `sudo npm install [package] command. 之后,其他安装应使用sudo npm install [package]命令完成。

The code ends up looking like this: 代码最终看起来像这样:

    #!/bin/bash

    #Added this usefull function from a Stack Overflow post:
    #Link: http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
    function coloredEcho(){
       (...)
    }

    #Base installation function:
    #Is from:
    #Link: https://github.com/startup-class/setup/blob/master/setup.sh

    function baseInstall() {
        # Simple setup.sh for ISMAT School Project
        cd
        sudo apt-get install -y curl

        coloredEcho "Installing project structure:" blue

        # Installing dependencies:
        sudo apt-get update
        sudo apt-get install -y git
        sudo apt-get install -y gcc g++ autoconf automake libtool
        sudo apt-get install -y python-software-properties python make
        sudo apt-get install -y build-essential libssl-dev
        sudo apt-get install -y software-properties-common

        # Install emacs24
        # https://launchpad.net/~cassou/+archive/emacs
        sudo add-apt-repository -y ppa:cassou/emacs
        sudo apt-get -qq update
        sudo apt-get install -y emacs24-nox emacs24-el emacs24-common-non-dfsg

        # Install rlwrap to provide libreadline features with node
        # See: http://nodejs.org/api/repl.html#repl_repl
        sudo apt-get install -y rlwrap

        # Installing last node and npm version
        sudo apt-add-repository -y ppa:chris-lea/node.js
        sudo apt-get update
        sudo apt-get install -y nodejs
        # Still Testing if this is necessary:
        # ln -s /usr/bin/nodejs /usr/bin/node

        # Install nvm: node-version manager
        # Link: https://www.npmjs.org/package/nvm
        sudo npm install -g nvm
        sudo export PATH=./node_modules/.bin:$PATH

        # Install jshint to allow checking of JS code within emacs
        # http://jshint.com/
        sudo npm install -g jshint

        # git pull and install dotfiles as well
        cd $HOME
        if [ -d ./dotfiles/ ]; then
            mv dotfiles dotfiles.old
        fi
        if [ -d .emacs.d/ ]; then
                mv .emacs.d .emacs.d~
        fi
        git clone https://github.com/cmpsoares91/dotfiles.git
        ln -sb dotfiles/.screenrc .
        ln -sb dotfiles/.bash_profile .
        ln -sb dotfiles/.bashrc .
        ln -sb dotfiles/.bashrc_custom .
        ln -sf dotfiles/.emacs.d .

        sudo apt-get update
    }

    install=1

    if [ $1 == server ] ; then
        coloredEcho "Starting Server Instalation..." red

        # Instaling Base:
        baseInstall

        # Install Heroku toolbelt
        # https://toolbelt.heroku.com/debian
        wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

        # All extra stuff for server add here

        coloredEcho "Server Setup Ready" red

    elif [ $1 == dev ] ; then
        coloedEcho "Starting Developer Instalation..." green

        # Instaling Base:
        baseInstall

        coloredEcho "Developer Setup Ready" green

    else
        coloredEcho "No selection made." blue
        install=0
    fi

    if [ $install == 1 ] ; then 
        coloredEcho "Install MEAN JavaScript Stack as well? (y/n)" magenta
        a=1
        while [ $a == 1 ]
        do
            a=0
            read meanOption
            if [ $meanOption == y ] ; then
                coloredEcho "Starting MEAN JavaScript Stack Instalation..." red

                #Installing MongoDB:
                sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
                echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
                sudo apt-get update
                sudo apt-get install -y mongodb-org

                #Installing Bower:
                sudo npm install -g bower

                #Installing MEAN.io:
                sudo npm install -g meanio@latest

                #Start App Right away?
                coloredEcho "--> Want to initiate mean App now? (y/n)" red
                c=1
                while [ $c == 1 ]
                do
                    c=0
                read appOption
                    if [ $appOption == y ] ; then
                        coloredEcho "----> Enter App name:" red
                        read myApp
                        mean init $myApp
                        cd $myApp && npm install
                    elif [ $appOption == n ] ; then
                        #Nothing Happens...
                        coloredEcho "--> Not initiation App..." red
                    else
                        coloredEcho "--> Please enter y or n:" red
                        c=1
                    fi
                done
            elif [ $meanOption == n ] ; then
                #Nothing Happens...
                coloredEcho "Not installing MEAN..." red
            else
                coloredEcho "Please enter y or n:" magenta
                a=1
            fi
        done

        g=1
        while [ $g == 1 ]
        do
            g=0
            coloredEcho "Do you want to install Grunt.JS? (y/n)" green
            read gruntOption
            if [ $gruntOption == y ] ; then
            # Install Grunt for automated node builds
            # http://gruntjs.com/getting-started for details
            sudo npm install -g grunt-cli
        elif [ $gruntOption == n ] ; then
                #Nothing Happens...
                    coloredEcho "--> Not Installing Grunt.js..." green
            else
                    coloredEcho "--> Please enter y or n:" green
                    g=1
            fi
        done
    fi

And now the test is complete and all the programs run as expected. 现在测试已完成,所有程序均按预期运行。 Test Output: 测试输出:

    $ bash ./test.sh
    Testing Basic dependencies:
    git                           OK
    gcc                           OK
    g++                           OK
    autoconf                      OK
    automake                      OK
    libtool                       OK
    python                        OK
    make                          OK

    Testing Basic command line editor installations:
    rlwrap                        OK
    emacs                         OK
    nano                          OK

    Testing Node.JS installations:
    node                          OK
    nvm                           OK
    npm                           OK
    heroku                        OK
    foreman                       OK

    Testing MEAN JS Stack installations:
    mongo                         OK
    mongod                        OK
    mean                          OK
    bower                         OK
    grunt                         OK

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM