public void createRedisCluster() throws IOException {
   expect.sendLine(
       "/root/redis-3.0.6/src/redis-trib.rb create --replicas 1 11.11.11.101:6379 11.11.11.101:6380 11.11.11.102:6379 11.11.11.102:6380 11.11.11.103:6379 11.11.11.103:6380");
   expect.expect(contains("above configuration"));
   expect.send("yes\n");
   ready(ROOT_USER);
 }
 public void startMysql() throws IOException {
   //        mysql -u root -pvagrant -e "show status like 'wsrep%'"
   expect.sendLine("systemctl start mysql");
   ready(ROOT_USER);
   expect.sendLine("mysql");
   expect.expect(contains("using password"));
 }
 public void installMongo() throws IOException {
   expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/mongo/mongodb-org-3.2.repo /etc/yum.repos.d/mongodb-org-3.2.repo");
   ready(ROOT_USER);
   expect.sendLine("yum install -y mongodb-org");
   ready(ROOT_USER);
 }
 public void startShardServer() throws IOException {
   // 启动Shard Server
   expect.sendLine("mongod --config /data/mongodb/conf/sh0/mongodb.conf");
   ready(ROOT_USER);
   expect.sendLine("mongod --config /data/mongodb/conf/sh1/mongodb.conf");
   ready(ROOT_USER);
 }
 public void configMysqlRootLogin() throws IOException {
   expect.sendLine(
       "mysql -uroot -pvagrant -e \"use mysql;update user set host = '%' where user = '******';\"");
   ready(ROOT_USER);
   expect.sendLine("mysql -uroot -pvagrant -e 'FLUSH PRIVILEGES;'");
   ready(ROOT_USER);
 }
 public void configHostName() throws IOException {
   expect.sendLine("echo '' > /etc/hosts");
   ready(ROOT_USER);
   for (HostInfo info : BuildEnv.ALL_HOST) {
     expect.sendLine("echo '" + info.getIp() + " " + info.getHostName() + "' >> /etc/hosts");
     ready(ROOT_USER);
   }
 }
 public void configRedisCluster() throws IOException {
   expect.sendLine("\\cp -f /vagrant/src/main/resources/redis/6379.conf /etc/redis/6379.conf");
   ready(ROOT_USER);
   expect.sendLine("\\cp -f /vagrant/src/main/resources/redis/6380.conf /etc/redis/6380.conf");
   ready(ROOT_USER);
   expect.sendLine("service redis_6379 restart && service redis_6380 restart");
   ready(ROOT_USER);
 }
 public void configSpark() throws IOException {
   expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/spark/spark-env.sh ~/spark/conf/spark-env.sh");
   ready(HADOOP_USER);
   expect.sendLine("chmod 755 ~/spark/conf/spark-env.sh");
   ready(HADOOP_USER);
   expect.sendLine("\\cp -f /vagrant/src/main/resources/spark/slaves ~/spark/conf/slaves");
   ready(HADOOP_USER);
 }
 public void installRequired() throws IOException {
   expect.sendLine("yum -y update");
   ready(ROOT_USER);
   expect.sendLine(
       "yum -y install git nano vim lsof gcc prelink expect openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel gcc-c++ automake autoconf");
   ready(ROOT_USER);
   expect.sendLine(
       "yum -y install perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-DBI perl-IO-Compress perl-Net-Daemon perl-PlRPC nmap nmap-ncat");
   ready(ROOT_USER);
   expect.sendLine("yum -y install epel-release net-tools");
   ready(ROOT_USER);
   expect.sendLine("yum --enablerepo=epel -y install sshpass");
   ready(ROOT_USER);
   expect.sendLine("systemctl stop firewalld.service");
   ready(ROOT_USER);
   expect.sendLine("systemctl disable firewalld.service");
   ready(ROOT_USER);
   expect.sendLine("setenforce 0");
   ready(ROOT_USER);
   expect.sendLine("sed -i -e 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux");
   ready(ROOT_USER);
   this.expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/ssh/ssh-copy-id.modified /usr/bin/ssh-copy-id");
   ready(ROOT_USER);
 }
 private void localInstallMariaDB() throws IOException, TemplateException {
   expect.sendLine("yum localinstall /vagrant/download/");
   ready(ROOT_USER);
   expect.sendLine(
       "yum -y --enablerepo=mariadb install MariaDB-client MariaDB-Galera-server galera");
   MultiResult multiResult = this.expect.expect(anyOf(contains("Complete"), contains("Nothing")));
   if (multiResult.getResults().get(0).isSuccessful()) {
     expect.sendLine(
         "yum -y --enablerepo=mariadb install MariaDB-client MariaDB-Galera-server galera");
     expect.expect(anyOf(contains("Complete"), contains("Nothing")));
   }
   genServerConfFile();
 }
 private void installMariaDB() throws IOException, TemplateException {
   expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/MariaDB.repo /etc/yum.repos.d/MariaDB.repo");
   ready(ROOT_USER);
   expect.sendLine(
       "yum -y --enablerepo=mariadb install MariaDB-client MariaDB-Galera-server galera");
   MultiResult multiResult = this.expect.expect(anyOf(contains("Complete"), contains("Nothing")));
   if (multiResult.getResults().get(0).isSuccessful()) {
     expect.sendLine(
         "yum -y --enablerepo=mariadb install MariaDB-client MariaDB-Galera-server galera");
     expect.expect(anyOf(contains("Complete"), contains("Nothing")));
   }
   genServerConfFile();
 }
 private void init() {
   otherHostInfo = getOtherHostInfo();
   JSch jSch = new JSch();
   java.util.Properties config = new java.util.Properties();
   config.put("StrictHostKeyChecking", "no");
   try {
     session = jSch.getSession(hostInfo.getUser(), hostInfo.getIp(), hostInfo.getPort());
     session.setConfig(config);
     session.setPassword(hostInfo.getPassword());
     session.connect(5000);
     System.out.println(hostInfo.getIp() + "已连接...");
     channel = session.openChannel("shell");
     channel.connect();
     expect =
         new ExpectBuilder()
             .withOutput(channel.getOutputStream())
             .withInputs(channel.getInputStream(), channel.getExtInputStream())
             .withEchoInput(System.out)
             .withEchoOutput(System.err)
             .withInputFilters(removeColors(), removeNonPrintable())
             .withExceptionOnFailure()
             .withTimeout(80000, TimeUnit.SECONDS)
             .withAutoFlushEcho(true)
             .withCombineInputs(true)
             .build();
     System.out.println(expect.getClass().getName());
   } catch (JSchException | IOException e) {
     e.printStackTrace();
     destroy();
     throw new RuntimeException("无法连接" + hostInfo.getIp() + ":" + hostInfo.getPort());
   }
 }
 public void copyConfig(boolean isFirst) throws IOException, TemplateException {
   genServerConfFile();
   expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/template/server.cnf."
           + hostInfo.getHostName()
           + " /etc/my.cnf.d/server.cnf");
   ready(ROOT_USER);
   if (isFirst) {
     configMariaDBFirst();
   }
 }
 public void createHadoopUser() throws IOException {
   expect.sendLine("useradd -d /usr/hdp " + HADOOP_USER + " && chmod -R 755 /usr/hdp");
   ready(ROOT_USER);
   expect.sendLine("passwd " + HADOOP_USER);
   expect.expect(contains("New password"));
   expect.sendLine("vagrant");
   expect.expect(contains("Retype"));
   expect.sendLine("vagrant");
   ready(ROOT_USER);
   expect.sendLine("chmod 755 /usr/hdp/.bash_profile");
   ready(ROOT_USER);
   expect.sendLine("\\cp -f /vagrant/src/main/resources/hadoop/sysctl.conf /etc/sysctl.conf");
   ready(ROOT_USER);
 }
 public void destroy() {
   if (channel != null) {
     channel.disconnect();
   }
   if (expect != null) {
     try {
       expect.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
   }
   if (session != null) {
     session.disconnect();
   }
 }
  public void startHadoop() throws IOException {
    expect.sendLine("~/hadoop/bin/hdfs namenode -format");
    ready(HADOOP_USER);
    expect.sendLine("~/hadoop/sbin/start-dfs.sh");
    ready(HADOOP_USER);
    expect.sendLine("~/hadoop/sbin/start-yarn.sh");
    ready(HADOOP_USER);
    expect.sendLine("jps");
    ready(HADOOP_USER);

    expect.sendLine("~/hadoop/bin/hdfs dfs -mkdir /test");
    ready(HADOOP_USER);
    expect.sendLine("~/hadoop/bin/hdfs dfs -copyFromLocal ~/hadoop/NOTICE.txt /test");
    ready(HADOOP_USER);
    expect.sendLine("~/hadoop/bin/hdfs dfs -cat /test/NOTICE.txt");
    ready(HADOOP_USER);
    expect.sendLine(
        "~/hadoop/bin/hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.3.jar wordcount /test/NOTICE.txt /output01");
    ready(HADOOP_USER);
    expect.sendLine("~/hadoop/bin/hdfs dfs -ls /output01");
    ready(HADOOP_USER);
    expect.sendLine("~/hadoop/bin/hdfs dfs -cat /output01/part-r-00000");
    ready(HADOOP_USER);
  }
 public void configHaproxy() throws IOException {
   expect.sendLine("yum -y install haproxy");
   expect.expect(contains("Complete!"));
   expect.sendLine("chkconfig haproxy on");
   ready(ROOT_USER);
   expect.sendLine("\\cp -f /vagrant/src/main/resources/haproxy.cfg /etc/haproxy/haproxy.cfg");
   ready(ROOT_USER);
   expect.sendLine(
       "mysql -uroot -h11.11.11.101 -pvagrant -e \"CREATE USER 'haproxy'@'11.11.11.101';\"");
   ready(ROOT_USER);
   expect.sendLine(
       "mysql -uroot -h11.11.11.101 -pvagrant -e \"CREATE USER 'haproxy'@'11.11.11.102';\"");
   ready(ROOT_USER);
   expect.sendLine(
       "mysql -uroot -h11.11.11.101 -pvagrant -e \"CREATE USER 'haproxy'@'11.11.11.103';\"");
   ready(ROOT_USER);
   expect.sendLine(
       "mysql -uroot -h11.11.11.101 -pvagrant -e \"CREATE USER 'haproxy'@'11.11.11.104';\"");
   ready(ROOT_USER);
   expect.sendLine("mysql -uroot -h11.11.11.101 -pvagrant -e 'FLUSH PRIVILEGES;'");
   ready(ROOT_USER);
   expect.sendLine("service haproxy restart");
   ready(ROOT_USER);
 }
 public void copyMongodbConfig() throws IOException {
   // 配置Shard Server
   expect.sendLine(
       "mkdir -p /data/mongodb/{data/{sh0,sh1},backup/{sh0,sh1},log/{sh0,sh1},conf/{sh0,sh1}}");
   ready(ROOT_USER);
   expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/mongo/mongodb0.conf /data/mongodb/conf/sh0/mongodb.conf");
   ready(ROOT_USER);
   expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/mongo/mongodb1.conf /data/mongodb/conf/sh1/mongodb.conf");
   ready(ROOT_USER);
   // 配置Config Server
   expect.sendLine("mkdir -p /data/mongodb/{data/cf0,backup/cf0,log/cf0,conf/cf0}");
   ready(ROOT_USER);
   expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/mongo/config.conf /data/mongodb/conf/cf0/config.conf");
   ready(ROOT_USER);
   expect.sendLine("mkdir -p /data/mongodb/{data/ms0,backup/ms0,log/ms0,conf/ms0}");
   ready(ROOT_USER);
   expect.sendLine(
       "\\cp -f /vagrant/src/main/resources/mongo/mongos.conf /data/mongodb/conf/ms0/mongos.conf");
   ready(ROOT_USER);
 }
  public void configJava() throws IOException {
    System.out.println("~~~~~~~~~~~~~安装jdk/scala/maven  start~~~~~~~~~~~~~~");
    //        expect.sendLine("java -version");
    //            expect.sendLine("wget --no-check-certificate --no-cookies --header \"Cookie:
    // oraclelicense=accept-securebackup-cookie\"
    // http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm");
    //            ready(ROOT_USER);
    //            expect.sendLine("rpm -ivh jdk-7u79-linux-x64.rpm");
    //            ready(ROOT_USER);
    expect.sendLine("tar xvzf /vagrant/download/scala-2.11.7.tgz");
    ready(ROOT_USER);
    expect.sendLine("mv scala-2.11.7 /usr/local/scala");
    ready(ROOT_USER);

    expect.sendLine("tar xvzf /vagrant/download/apache-maven-3.3.9-bin.tar.gz");
    ready(ROOT_USER);
    expect.sendLine("mv apache-maven-3.3.9 /usr/local/maven");
    ready(ROOT_USER);

    expect.sendLine("echo -e 'SCALA_HOME=/usr/local/scala' >> /etc/profile");
    ready(ROOT_USER);
    expect.sendLine("echo -e 'MAVEN_HOME=/usr/local/maven' >> /etc/profile");
    ready(ROOT_USER);
    expect.sendLine("echo -e 'JAVA_HOME=/usr/java/jdk1.7.0_79' >> /etc/profile");
    ready(ROOT_USER);
    expect.sendLine("echo -e 'JRE_HOME=$JAVA_HOME/jre' >> /etc/profile");
    ready(ROOT_USER);
    expect.sendLine(
        "echo -e 'PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$SCALA_HOME/bin:$MAVEN_HOME/bin' >> /etc/profile");
    ready(ROOT_USER);
    expect.sendLine(
        "echo -e 'CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib' >> /etc/profile");
    ready(ROOT_USER);
    expect.sendLine(
        "echo -e 'export SCALA_HOME JAVA_HOME JRE_HOME PATH CLASSPATH' >> /etc/profile");
    ready(ROOT_USER);
    expect.sendLine("source /etc/profile");
    ready(ROOT_USER);
    System.out.println("~~~~~~~~~~~~~安装jdk  end~~~~~~~~~~~~~~");
  }
  public void copyHadoopConfig() throws IOException {
    expect.sendLine("su " + HADOOP_USER);
    ready(HADOOP_USER);
    configSSH(HADOOP_USER);
    expect.sendLine("cd ~");
    ready(HADOOP_USER);
    expect.sendLine("mkdir hadoop spark");
    ready(HADOOP_USER);
    expect.sendLine(
        "tar zxf /vagrant/download/hadoop-2.6.3.tar.gz -C ~/hadoop --strip-components 1 ");
    ready(HADOOP_USER);
    expect.sendLine("echo -e ' ' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine("echo -e 'export HADOOP_HOME=/usr/hdp/hadoop' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine("echo -e 'export HADOOP_COMMON_HOME=$HADOOP_HOME' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine("echo -e 'export HADOOP_HDFS_HOME=$HADOOP_HOME' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine("echo -e 'export HADOOP_MAPRED_HOME=$HADOOP_HOME' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine("echo -e 'export HADOOP_YARN_HOME=$HADOOP_HOME' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine(
        "echo -e 'export HADOOP_OPTS=\"-Djava.library.path=$HADOOP_HOME/lib/native\"' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine(
        "echo -e 'export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine(
        "tar -zxf /vagrant/download/spark-1.5.2-bin-hadoop2.6.tgz -C ~/spark --strip-components 1");
    ready(HADOOP_USER);
    expect.sendLine("echo 'export SPARK_HOME=/usr/hdp/spark' >> ~/.bash_profile");
    ready(HADOOP_USER);

    expect.sendLine(
        "echo -e 'export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$SPARK_HOME/bin' >> ~/.bash_profile");
    ready(HADOOP_USER);
    expect.sendLine("source ~/.bash_profile");
    ready(HADOOP_USER);
  }
  public void configHadoop() throws IOException {
    expect.sendLine("mkdir ~/datanode");
    ready(HADOOP_USER);
    expect.sendLine("ssh node2 \"mkdir ~/datanode\" && ssh node3 \"mkdir ~/datanode\"");
    ready(HADOOP_USER);
    expect.sendLine(
        "\\cp -f /vagrant/src/main/resources/hadoop/hdfs-site.xml ~/hadoop/etc/hadoop/hdfs-site.xml");
    ready(HADOOP_USER);
    expect.sendLine("scp ~/hadoop/etc/hadoop/hdfs-site.xml node2:~/hadoop/etc/hadoop/");
    ready(HADOOP_USER);
    expect.sendLine("scp ~/hadoop/etc/hadoop/hdfs-site.xml node3:~/hadoop/etc/hadoop/");
    ready(HADOOP_USER);

    expect.sendLine(
        "\\cp -f /vagrant/src/main/resources/hadoop/core-site.xml ~/hadoop/etc/hadoop/core-site.xml");
    ready(HADOOP_USER);
    expect.sendLine("scp ~/hadoop/etc/hadoop/core-site.xml node2:~/hadoop/etc/hadoop/");
    ready(HADOOP_USER);
    expect.sendLine("scp ~/hadoop/etc/hadoop/core-site.xml node3:~/hadoop/etc/hadoop/");
    ready(HADOOP_USER);

    expect.sendLine(
        "sed -i -e 's/\\${JAVA_HOME}/\\/usr\\/java\\/default/' ~/hadoop/etc/hadoop/hadoop-env.sh");
    ready(HADOOP_USER);
    expect.sendLine("scp ~/hadoop/etc/hadoop/hadoop-env.sh node2:~/hadoop/etc/hadoop/");
    ready(HADOOP_USER);
    expect.sendLine("scp ~/hadoop/etc/hadoop/hadoop-env.sh node3:~/hadoop/etc/hadoop/");
    ready(HADOOP_USER);

    expect.sendLine("mkdir ~/namenode");
    ready(HADOOP_USER);
    expect.sendLine(
        "\\cp -f /vagrant/src/main/resources/hadoop/hdfs-site-master.xml ~/hadoop/etc/hadoop/hdfs-site.xml");
    ready(HADOOP_USER);
    expect.sendLine(
        "\\cp -f /vagrant/src/main/resources/hadoop/mapred-site.xml ~/hadoop/etc/hadoop/mapred-site.xml");
    ready(HADOOP_USER);
    expect.sendLine(
        "\\cp -f /vagrant/src/main/resources/hadoop/yarn-site.xml ~/hadoop/etc/hadoop/yarn-site.xml");
    ready(HADOOP_USER);
    expect.sendLine("\\cp -f /vagrant/src/main/resources/hadoop/slaves ~/hadoop/etc/hadoop/slaves");
    ready(HADOOP_USER);
  }
 public void configMongoAutorun() throws IOException {
   expect.sendLine("\\cp -f /vagrant/src/main/resources/mongo/rc.local /etc/rc.local");
   ready(ROOT_USER);
   expect.sendLine("chmod +x /etc/rc.d/rc.local");
   ready(ROOT_USER);
 }
 public void stopMysql() throws IOException {
   expect.send("systemctl stop mysql");
   ready(ROOT_USER);
 }
  public void configMongoShard() throws IOException {
    // 初始化副本集1
    expect.sendLine("mongo --port 27010");
    expect.expect(contains(">"));
    expect.sendLine("use admin");
    expect.expect(contains(">"));
    InputStream resource0 = getClass().getClassLoader().getResourceAsStream("mongo/sh0.bson");
    String content0 = IOUtils.toString(resource0, StandardCharsets.UTF_8);
    String sh0 = "cfg=" + content0;
    System.out.println(sh0);
    expect.sendLine(sh0);
    expect.expect(contains(">"));
    expect.sendLine("rs.initiate(cfg);");
    expect.expect(anyOf(contains("PRIMARY>"), contains("OTHER>"), contains("SECONDARY>")));
    expect.sendLine("exit");
    ready(ROOT_USER);

    // 初始化副本集2
    expect.sendLine("mongo --port 27011");
    expect.expect(contains(">"));
    expect.sendLine("use admin");
    expect.expect(contains(">"));
    InputStream resource1 = getClass().getClassLoader().getResourceAsStream("mongo/sh1.bson");
    String content1 = IOUtils.toString(resource1, StandardCharsets.UTF_8);
    String sh1 = "cfg=" + content1;
    System.out.println(sh1);
    expect.sendLine(sh1);
    expect.expect(contains(">"));
    expect.sendLine("rs.initiate(cfg);");
    expect.expect(anyOf(contains("PRIMARY>"), contains("OTHER>"), contains("SECONDARY>")));
    expect.sendLine("exit");
    ready(ROOT_USER);

    // 配置分片
    expect.sendLine("mongo --port 30000");
    expect.expect(contains("mongos>"));
    expect.sendLine("use admin");
    expect.expect(contains("mongos>"));
    expect.sendLine(
        "sh.addShard(\"sh0/11.11.11.101:27010,11.11.11.102:27010,11.11.11.103:27010\");");
    expect.expect(contains("mongos>"));
    expect.sendLine(
        "sh.addShard(\"sh1/11.11.11.101:27011,11.11.11.102:27011,11.11.11.103:27011\");");
    expect.expect(contains("mongos>"));

    expect.sendLine("use mydb;");
    expect.expect(contains("mongos>"));

    expect.sendLine("db.createCollection(\"test\");");
    expect.expect(contains("mongos>"));

    expect.sendLine("sh.enableSharding(\"mydb\");");
    expect.expect(contains("mongos>"));

    expect.sendLine("sh.shardCollection(\"mydb.test\", {\"_id\":1});");
    expect.expect(contains("mongos>"));

    expect.sendLine("exit");
    ready(ROOT_USER);
  }
 public void startQueryRouters() throws IOException {
   // 启动Query Routers
   expect.sendLine("mongos --config /data/mongodb/conf/ms0/mongos.conf");
   ready(ROOT_USER);
 }
 public void startConfigServer() throws IOException {
   // 启动Config Server
   expect.sendLine("mongod --config /data/mongodb/conf/cf0/config.conf");
   ready(ROOT_USER);
 }
 private void mysql_secure_installation() throws IOException {
   expect.sendLine("sudo /usr/bin/mysql_secure_installation");
   expect.expect(contains("Enter current password"));
   expect.send("\n");
   MultiResult result = expect.expect(anyOf(contains("password"), contains("Access denied")));
   if (result.getResults().get(1).isSuccessful()) {
     expect.send("vagrant\n");
   }
   expect.send("Y\n");
   expect.expect(contains("New password"));
   expect.send("vagrant\n");
   expect.expect(contains("Re-enter"));
   expect.send("vagrant\n");
   expect.expect(contains("Remove anonymous users"));
   expect.send("Y\n");
   expect.expect(contains("Disallow root login remotely"));
   expect.send("n\n");
   expect.expect(contains("Remove test database and access to it"));
   expect.send("n\n");
   expect.expect(contains("Reload"));
   expect.send("Y\n");
   ready(ROOT_USER);
 }
  public void installRedis() throws IOException {
    System.out.println("~~~~~~~~~~~~~安装redis  start~~~~~~~~~~~~~~");
    expect.sendLine("rm -rf redis-3.0.6");
    ready(ROOT_USER);
    expect.sendLine("tar -zxvf /vagrant/download/redis-3.0.6.tar.gz -C .");
    ready(ROOT_USER);
    expect.sendLine("cd redis-3.0.6");
    ready(ROOT_USER);
    expect.sendLine("make && make install");
    ready(ROOT_USER);
    expect.sendLine("yum -y install ruby rubygems");
    ready(ROOT_USER);
    expect.sendLine("gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/");
    ready(ROOT_USER);
    expect.sendLine("gem install redis");
    ready(ROOT_USER);
    // 6379
    expect.sendLine("utils/install_server.sh");
    expect.expect(contains("the redis port for this instance"));
    expect.send("\n");
    expect.expect(contains("the redis config file name"));
    expect.send("\n");
    expect.expect(contains("the redis log file name"));
    expect.send("\n");
    expect.expect(contains("the data directory for this instance"));
    expect.send("\n");
    expect.expect(contains("executable path"));
    expect.send("\n");
    expect.expect(contains("ENTER"));
    expect.send("\n");
    ready(ROOT_USER);

    // 6380
    expect.sendLine("utils/install_server.sh");
    expect.expect(contains("the redis port for this instance"));
    expect.send("6380\n");
    expect.expect(contains("the redis config file name"));
    expect.send("\n");
    expect.expect(contains("the redis log file name"));
    expect.send("\n");
    expect.expect(contains("the data directory for this instance"));
    expect.send("\n");
    expect.expect(contains("executable path"));
    expect.send("\n");
    expect.expect(contains("ENTER"));
    expect.send("\n");
    ready(ROOT_USER);
    System.out.println("~~~~~~~~~~~~~安装redis  end~~~~~~~~~~~~~~");
  }
 private void ready(String user) throws IOException {
   expect.expect(contains(user + "@" + hostInfo.getHostName()));
   System.out.flush();
 }
 public void configMariaDBFirst() throws IOException {
   expect.sendLine("/etc/rc.d/init.d/mysql bootstrap");
   ready(ROOT_USER);
   mysql_secure_installation();
 }