#!/usr/bin/perl

## nappit basic installer - setup as root via: wget www.napp-it.org/nappit | perl
## 2011-2022 (c) Günther Alka
## 26 sep, 1.50 on OmniOS install storage-server
## 15.Jan, new gcc om omni 151016
## 4.5.2016, kein autostart bei Linux
## 3.8.17 --deny-new-be
## 31.jab S11.4
## 2.mar 2018, add and enable guest
## 26.7. 2018 add mc
## 11.9. 2018 add omnios 151027+
## 06.mar 2019 smartmontools 7
## 17.12.19 # needed for expect.pm on an initial setup of OI 19.10 or Expect will not work
## ln -s /usr/gcc/6/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1 2> /dev/null
# mar 2022, use Apache

## 151040
#ln -s /lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
#ln -s /lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null

use strict;

# public vars
     use vars qw($smartold $smart $special $be $dl $t $user $os $osver $ver $rel $osrel $ant $cgi $www $zip @w @l $l $sh $min $hour $mday $sec $mon $year $wday $ydat $isdst $log $info $conf $uconf $ustr $ustr2);


#napp-it zip-file ex: www.napp-it.org/doc/downloads/napp-it-0.nnn.zip";
#######################################################################
    $dl="www.napp-it.org/doc/downloads/napp-it-22.03.zip";

    $ver=$dl; $ver=~s/.*\///; $ver=~s/\.zip//;
    $rel=$ver; $rel=~s/napp-it-//;                                           # release

# log output
############
$log="| tee -a \$HOME/setup-napp-it.log\necho \" \"\n\necho \" \"\n";                                 # two lines space after log


#print/ log info beginning with echo "cc" $info
################
$info="| tee -a \$HOME/setup-napp-it.log\necho \"---------------------------------\"\n";              # no lines space after log


## smartmontools release  ex 6.3
$smart="7.1";                   # current
$smartold="7.0";                # last

####################################################################################
## setup-script to install napp-it zfs server first time or to update
## napp-it to newest version

# script has two parts:
# part 1 perl with basics
# part 2 shellscript (autogenerated by this script to install services and tools)
#####################################################################################


###############
### root only !
###############
     $ant=`whoami`; chomp $ant;
     if ($ant ne "root") {
        $t=`echo "user $ant not allowed\nlogin as root or su and run setup again! " | tee -a \$HOME/setup-napp-it.log`;
        exit;
     }

#run from $HOME
###############
               `cd \$HOME`;
               $t=`pwd`;
               $ant=`echo \$HOME`;
               if ($t ne $ant)  {
                      print "\n\n#####################\nYou must call wget from your HOME-directory.\n Please do a cd /\$HOME and try again.\n\n";
                      exit;
               }



##date
#######
 ($sec,$min,$hour,$mday,$mon,$year,$wday,$ydat,$isdst) = localtime(time);
 $mon++;
 if ($min < 10)  { $min = "0$min";   }
 if ($hour < 10) { $hour = "0$hour"; }
 if ($mday < 10) { $mday = "0$mday"; }
 if ($mon < 10)  { $mon = "0$mon";   }
 $year=1900+$year;




# Update Script Actions:
########################
# 1. Basic

        # 1a. - check if user=root and if OS is supported
        # 1b. - download newest napp-it WEB-UI (napp-it.zip)
        # 1c. - install unzip if not already installed
        # 1d. - install apache webserver if not already installed
        # 1e. - install or update napp-it folder (copy to Apache-cgi-bin
        # 2.  - install services and tools via shellscript


# Startmessage
##############
      print "\n"x20;
      print "***************************************************************************\n\n";
      print "**  Base-Setup napp-it ZFS Server appliance  Ver. 0.93 - 17. Aug 2022    **\n";
      print "**  OpenIndiana Hipster, OmniOS, Solaris 11.4 and Linux (ZFS only)       **\n\n";
      print "***************************************************************************\n\n";
      print "** Actions:                                                              **\n";
      print "**  1. Basic Actions                                                     **\n";
      print "**    -  clone Systempartition                                           **\n";
      print "**    -  download newest napp-it WEB-UI (napp-it-xxx.zip)                **\n";
      print "**    -  use Apache Webserver on port 81/ http or 82/ https for napp-it  **\n";
      print "**    -  install or update napp-it folder                                **\n";
      print "**    -  install base NAS/SAN tools like bonnie, nc or smartmontools 7.x **\n\n";

      print "***************************************************************************\n\n\n";
      print "*  \n";
      print "** !! If you like napp-it, please support us and use napp-it Pro         **\n\n";
      sleep(3);

######################################
# 1a. verify if os is supported or exit
######################################

      print "\n"x40;
      print "step 1a: check os, setup napp-it or updating to the most current version now\nplease wait ";
      &check_os;                        # + begin of shell script

      #BE?
      if ($be ne "") {
           print "Prior setup a BE $be is created\n\n";
      }

      print " 3 \n"; sleep(2);
      print " 2 \n"; sleep(2);
      print " 1 \n"; sleep(2);

      # check if OmniOS is newest
      if ($os eq "OmniOS") {
          print "\n\n** check if OmniOS $osver is newest, optionally update\n";
          print "** please wait up to 5 minutes...\n\n";
          $ant=`/usr/bin/pkg update 2>&1`;
          if ($ant=~/Reboot required/is) {
              print "**OmniOS $osver was updated and a reboot is required\n";
              print "**Restart napp-it wget installer after reboot\n";
              sleep(5);
              `reboot`;
          }    else {
              print "**OmniOS $osver is newest, reboot not required\n\n";
              sleep(5);
          }
      }


######################################
# 1b. get napp-it
######################################
        # download newest napp-it.zip via wget
        # unzip it
       ##############################

       if ($os eq "Linux") {
          #$dl="www.napp-it.org/doc/downloads/napp-it-0.9f4.zip";          # different release needed?
          #$rel="0.9f4";
       }

        print "step 1b:  download the most current version of napp-it now via wget\nplease wait.... ";
        &get_napp_it;                                                # load newest napp-it.zip and get $ver for systemsnap


## prepare logfile
`touch \$HOME/setup-napp-it.log`;               # to avoid errors when missing
$t=`rm \$HOME/setup-napp-it.log`;               # opt second run


########################
# Linux /Ubuntu
########################
if ($os eq "Linux") {
   &linux;
   exit;
}

########################
# create pre-update snapshot
########################

     # do not activate
     $t=`beadm list`;
     if (!($t=~/pre_$ver/s)) {                      # do not try on restarts
            print "\n step 1c create a systemsnap \n";
            print `beadm create pre_$ver`;
     }  else {
           print "\n step 1c systemsnap pre_$ver already created\n";
     }

     print `beadm list`;
     sleep(2);



##############################
# opt delete files from last setup
##############################


#del opt old napp-it folder
        if (-d "./web-gui") {
                $t=`rm -r ./web-gui`;
        }

#del opt old smart folder

        if (-d "./smartmontools-$smartold") {
                $t=`rm -r ./smartmontools-$smartold`;                 # last smartmontools etc setup
        }
        if (-f "./smartmontools-smartold.tar.gz") {
                $t=`rm ./smartmontools-$smartold.tar.gz`;             # last smartmontools etc setup
        }
        if (-d "./smartmontools-$smart") {
                $t=`rm -r ./smartmontools-$smart`;                    # Current smartmontools etc setup
        }
        if (-f "./smartmontools-smart.tar.gz") {
                $t=`rm ./smartmontools-$smart.tar.gz`;                # Current smartmontools etc setup
        }


## 1d. settings ##
print "\n step 1d setup user napp-it\n";

        ################################################################
        ## give webgui-user napp-it admin permissions  and setup smb pam
        ################################################################


        #opt. add napp-it user
        ######################
        $ant=`logins`;
        @l=split(/\n/,$ant);
        $t="1";
        foreach $l (@l) {
           if ($l=~/^napp-it\s/) { $t="0"; last; }
        }

        if ($t) {               #add user


             # bug http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=4888439
             # error with useradd napp-it if user napp-it is already in /etc/user_attrib
             # del napp-it (opt. already there from former installs)

            $ant=`cat /etc/user_attr`;
            @l=(); @w=();
            @l=split(/\n|\r/,$ant);
            foreach $l (@l) {
                if ($l=~/^napp-it\:/) { next; }
                push (@w,"$l\n");
            }
            push (@w,"\n");

            open (M, '>/etc/user_attr');
                print M @w;
            close (M);

            #add user
            #########
            print "\n\nadd user napp-it\n useradd -c 'napp-it Web-UI' -s /bin/false napp-it\n";
            $ant=`useradd -c 'napp-it Web-UI' -s /bin/false napp-it 2>&1`;               #
            if ($ant=~/error/is) {
              print ">> $ant\n\n########################################\ncould not add user napp-it, please add manually and try again\n########################################\n\n";
              exit;
            }

            # add entry in /etc/user_attr: not needed (no shell for napp-it, but its better to have it to avoid interactive login)
            #$ant=`echo "napp-it::::type=role" >> /etc/user_attr`;
        }


        #set permissions for napp-it
             $t=`echo \"give napp-it admin-permissions and setup smb pam \"`;


        # add webserver-user with all permissions
        #########################################


             $t=`/usr/gnu/bin/sed -i 's/webservd/napp-it/' /etc/sudoers`;
             $t=`/usr/gnu/bin/sed -i 's/www-data/napp-it/' /etc/sudoers`;


             $ant=`cat /etc/sudoers`;
             if (!($ant=~/napp-it /s)) {
                   $ant=`echo "napp-it ALL=(root) NOPASSWD: ALL" >> /etc/sudoers`;
             }


        # create napp-it folder /var/web-gui
             if (!(-d "/var/web-gui")) {
                 $t=`mkdir /var/web-gui`;
             }



        #######################
        # smb.pam ok for smb? #
        #######################
        print "\n step 1e setup pam\n";

       if ($os =~/Solaris/i) {               # 11.2 and up
                  # verify if
                  # password required   pam_smb_passwd.so.1 nowarn                is in /etc/pam.d/other to allow smb
                  $ant=`cat /etc/pam.d/other`;
                       $t="1";
                       @l=();
                       @l=split(/\n/,$ant);
                       foreach $l (@l) {
                                if ($l=~/^password required\s+pam_smb_passwd.so.1\s+nowarn/) { $t="0"; }
                       }
                       if ($t) {
                           $ant=`echo '# smb settings set by napp-it installer' >> /etc/pam.d/other`;
                           $ant=`echo 'password required   pam_smb_passwd.so.1 nowarn' >> /etc/pam.d/other`;
                       }

        } else {

                   # verify if
                   # other   password required   pam_smb_passwd.so.1 nowarn                is in /etc/pam.conf to allow smb

                   $ant=`cat /etc/pam.conf`;
                   $t="1";
                   @l=();
                   @l=split(/\n/,$ant);
                   foreach $l (@l) {
                        if ($l=~/^\s*other\s+password required\s+pam_smb_passwd.so.1\s+nowarn/) { $t="0"; }
                   }
                   if ($t) {
                        $ant=`echo '# smb settings set by napp-it installer' >> /etc/pam.conf`;
                        $ant=`echo 'other   password required   pam_smb_passwd.so.1 nowarn' >> /etc/pam.conf`;
                   }
        }

        # add user guest and enable guest?
        if (-f "/var/smb/smbpasswd") {
            print "\n step 1f, add guest\n";
            $ant=`cat /etc/passwd`;
            if (!($ant=~/\bguest:/s)) {
                $ant=`useradd -c 'smb guest account' -s /bin/false guest 2>&1`;
            }
            $t="65929";
            $ant=`cat /etc/passwd | grep guest:`;
            chomp($ant);
            @w=split(/::/,$ant);
            if ($w[2]=~/\d/) { $t=$w[2]; }      # uid

            `smbadm enable-user guest`;         # add guest to smbpasswd

            $ant=`cat /var/smb/smbpasswd`;
            `chmod 600 /var/smb/smbpasswd`;

            @w=();
            @w=split(/\n/,$ant);
            $t="1";
            foreach my $w (@w) {
                   if ($w=~/^guest:\d+::$/)   {
                       #  $w.="2AB6A832F1FEE5F3B0A378E0465E7FA8";  # opt preset pw?
                   }
                   if ($t) {
                     `echo $w > /var/smb/smbpasswd`; # add user
                     $t="0";
                   } else {
                     `echo $w >> /var/smb/smbpasswd`; # add user
                   }
                   # print "echo $w\n";
            }
            `chmod 400 /var/smb/smbpasswd`;
        }

##############################################################
# 2. install services and other apps of napp-it ZFS Server -> write script
###############################################################
print "\n step 2 setup services and tools\n";

if ($ver eq "") { $ver="year.$mon.$mday:$hour.$min";  }   # for BE


##########################
# opt kill napp-it scripts
##########################
    print "and stop running napp-it agents\n";
    $t=`sudo ps axw | grep zfsos/_lib | grep -v grep`;
    @w=split(/\n/,$t);
    foreach my $t (@w) {
      if (!($t=~/\.pl/)) { next; }                # kill socketserver, taskserver and agents and stat
      $t=~s/^ +//;
      $t=~s/ .*//;
      `kill -9 $t`;
    }



######################### check setup and install iscsi##
$sh=<<EoF2;
#!/bin/sh

cd \$HOME

echo "### all unzip napp-it" $info
unzip -a \$HOME/$zip


if [ ! -d \$HOME/web-gui ]
then
echo ""
echo "####################################################################"
echo "something went wrong, needed Folder \$HOME/web-gui is missing" $info
echo ""
echo ""
exit;
fi

echo ""
echo "### all 1.2 install iscsi/target" $info                # common
pkg install --deny-new-be network/iscsi/target $log

EoF2
##########################



#############################
#1.5 add special for different OS
#############################


###################
if ($os=~/omni/i)            {
  if ($osrel <= 151014 ) {
      $sh.=&omnios_to14;
  }
  if (($osrel > 151014) && ($osrel < 151023))  {
     $sh.=&omnios_16up;
  }
  if (($osrel >= 151023) && ($osrel <= 151026))  {
     $sh.=&omnios_24up;
  }
  if (($osrel > 151026)  && ($osrel < 151030))  {
     $sh.=&omnios_27up;
  }

  if (($osrel >= 151030) && ($osrel < 151040)) {
     $sh.=&omnios_30up;
  }

  if ($osrel >= 151040)  {
     $sh.=&omnios_40up;
  }

}
##################


##########################
if ($os=~/openindiana/i)     {         # Hipster only
  # print "\n\nosrel=$osrel\n"; exit;  # ex 201710
  if ($osrel >=201710) {
        $sh.=&oi_201710up();
  } else {
        $sh.=&oi_hipster();
  }                                    # old, older hipster

}
##########################


##########################
if ($os=~/Solaris/i)         { $sh.=&solaris();  }
##########################


#########################################################
###############  common end #############################
#########################################################

$sh.=&common_end;


################################
## write and run shell script
#############################

        open (M, '>./nappit2.sh');
            print M "$sh\n";
        close (M);

        $ant=`chmod 700 ./nappit2.sh`;
        $ant=exec("./nappit2.sh") or die "could not exec nappit.sh:\n  $!\n";

## end  of main ##
exit;


############################################## sub #####################################################################

############## 1.a
sub check_os {
############## set cgi-Folder !!
my $ok="0";
my ($ant);


  # exit if not *Solaris/Illumos-based or Nexenta
  $ant=`uname -a`;
  print "uname -a: $ant\n";
  my @par=split(/ /,$ant);

  $osrel=`cat /etc/release`;
  $osrel=~s/^\n* *//s;

  $osrel=~s/\n/ /gs;
  my @osrel=split(/ +/,$osrel);
  $osrel=$osrel[2];
  $osrel=~s/\D//g;
  if (!($osrel > 0)) { $osrel="-"; }

  ## nexenta ##
  if ($par[3]=~/nexenta/i) {
        $ok="0";
        $os="NexentaCore";
        print "\nNexentaCore is supported up to napp-it 0.8 - use napp-it 0.8!!\n\n";
        exit;
  } else {

      if ($par[0] ne "Linux") {
          #bename like netatalk3, second run: add time
          $ant=`beadm list | grep $ver`;
          if ($ant ne "") {
             $t=time;

             $be.="$ver"."_update_$year.$mon.$mday\_$t";
          }  else {
             $be=$ver;
          }
      }
  }


  ## Illumian ##
  if ($par[3]=~/illumian/i) {
        $ok="1";
        $os="Illumian";
        print "Illumian is no longer supported";
        exit;
  }

  ## OpenIndiana ##
  if ($par[3]=~/oi/i) {              # openindiana 151a
        print "OpenIndiana 151a is no longer supported, update to Openindiana Hipster";
        exit;
  }

  if ($par[3]=~/illumos/i) {         # illumos=OI hipster
        $ok="1";
        $os="OpenIndiana";
        $osver=$par[3];
  }



  ## ES 11 ex ##
  if ($par[3]=~/snv/i) {
        $ok="0";
        $os="Solaris Express";
        print "\nSolaris Express 11 is supported up to napp-it 0.8 - use napp-it 0.8!!\nor update to Solaris 11.4\n";
        exit;
  }

  ## ES 11 ##
  if ($par[3]=~/^11\./i) {
        $ok="1";
        $os="Solaris $par[3]";            # 11.0 oder 11.1 or 11.4.0.20

        if ($par[3] eq 11.0 ) {
            print "\nSolaris Express 11.0 is supported up to napp-it 0.8 - use napp-it 0.8!!\nor update to Solaris 11.4\n";
        }
  }


  ## Omni ##
  if ($par[3]=~/omni/i) {
        $ok="1";
        $os="OmniOS";
        $osver=$par[3];
  }

  ## Linux (Ubuntu)##
  if ($par[0] =~/Linux/i) {
        $ok="1";
        $os="Linux";
        $osver="$par[3] $par[5]";         # Ubuntu
        print "\nLinux is basically supported\n";
        $be="";
  }



  #############################
  if($ok eq "1") {
        print "your OS is $os $osver release $osrel\n\n This Setup supports mainly OmniOS and Openindiana Hipster, \nSolaris 11 and Linux (Debian/ Ubuntu) *** Use at your own risk ***\n\n";
        sleep(2);
  } else {
        print "ok, your OS $os $osver release \n is not supported\n";
        exit;
  }

# end
}


#################
sub get_napp_it {
#################
#load download $zip
my ($ant,$t,$h);

#test
#print $ant."\n"; exit;                                                                # dl=http://..napp-i-xx.zip


       print "new napp-it is $ver\n\nstart download now... ";
       $zip=$dl; $zip=~s/.*\///;

        if (-f "./$zip") {
                print "\ndeleting old zip-file\n";
                $t=`rm ./$zip`;                                                       # delete opt old version
        }


        # load newest napp-it.zip
        $ant=`wget $dl 2>&1`;
        if (!(-f "./$zip"))  {
                print "Download new napp-it Version via wget ($zip): \nfailed, please try later.\n ";
                exit;
        }

        print "\nok, downloaded $zip, unzip it now..\n";
            sleep(1);

        #ok napp-it-xx.zip is downloaded, unzip it now
        print "$ant";

        # add midnight commander
        if ($os=~/Solaris|OmniOS/i) {
            &mc;
        }

}


# default version for napp-it 0.8, update only via wget
# $dl="www.napp-it.org/doc/downloads/use_wget_to_update_to_0.9.zip";
#



###########
sub linux {
###########
# setup linux

print "\n\n## Please setup ZFS (ZOL), Samba and NFS manually\n#####################\n";
#print "add-apt-repository ppa:zfs-native/stable \n";
print "apt-get update\n";
#print "apt-get install ubuntu-zfs\n\n";

#print "## and install nfs and smb server like\n";
#print "apt-get install nfs-kernel-server samba \n#####################\n\n";
sleep(5);


print "\n\nnnnnnnnnnnnnnnnnnn\nnapp-it setup \n";
##############################################
my $HOME=`echo \$HOME`;  chomp($HOME);
print "home=$HOME";
#exit;

if (-d "$HOME/web-gui") { `rm -r $HOME/web-gui`; }
sleep(1);

`apt-get -y install unzip`;
my $r="\n## unzip -a $HOME/$zip\n";          print $r; &log($r);
$r=`unzip -a $HOME/$zip`;                    print $r; &log($r);
`rm $HOME/$zip`;

$r= "\n## apt-get update, please wait...\n";  print $r; &log($r);
$r=`apt-get update`;                          print $r; &log($r);

$r= "\n## apt-get install mc\n";              print $r; &log($r);
$r=`apt-get -y install mc`;                   print $r; &log($r);

$r= "\n## apt-get install mini-httpd\n";      print $r; &log($r);
$r=`apt-get -y install mini-httpd`;           print $r; &log($r);

$r= "\n## apt-get install netcat\n";          print $r; &log($r);
$r=`apt-get -y install netcat`;               print $r; &log($r);

$r= "\n## apt-get install bonnie\n";          print $r; &log($r);
$r=`apt-get -y install bonnie`;               print $r; &log($r);

#$r= "\n## apt-get install smartmontools\n";   print $r; &log($r);     # install manually, requests interaction
#$r=`apt-get -y install smartmontools`;        print $r; &log($r);

$r= "\n##  apt-get install dos2unix\n";       print $r; &log($r);
$r=`apt-get -y install dos2unix`;             print $r; &log($r);


######  Update folders
if (!(-d "/var/web-gui"))          { `mkdir /var/web-gui`; }
if (!(-d "/var/web-gui/data"))     { `mkdir /var/web-gui/data`; }
if (-d "/var/web-gui/data_last")   { `rm -r /var/web-gui/data_last/`; }

if (-d "/var/web-gui/data")        {
  `cp -R /var/web-gui/data/. /var/web-gui/data_last/`;
  `rm -r /var/web-gui/data/`;
}

###### #copy new version data_nn.nn
print "\n## keep data_$rel\n";
`cp -R $HOME/web-gui/. /var/web-gui/`;

#copy new version to /var/web-gui/data
if (-d "/var/web-gui/data_$rel")   { `rm -r /var/web-gui/data_$rel`; }
`cp -R $HOME/web-gui/data_$rel/. /var/web-gui/data/`;


##### setup configuration
$r=`cat /etc/passwd`;
if (!($r=~/napp\-it/)) {
   &log("adduser napp-it --shell /bin/false --no-create-home --disabled-password --gecos ''");
   print "\n## adduser napp-it --shell /bin/false --no-create-home --disabled-password --gecos ''\n";
   print `adduser napp-it --shell /bin/false --no-create-home --disabled-password --gecos ''`;
}

$r=`cat /etc/sudoers`;
if (!($r=~/napp\-it/)) {
    print "\n## allow sudo for napp-it\n";
   `echo "" >> /etc/sudoers`;
   `echo "#no passwd for napp-it sudo (place at end of file)" >> /etc/sudoers`;
   `echo "napp-it  ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers`;
   `echo "" >> /etc/sudoers`;
}


print "\n## Setup Folders\n";

# setup Expect.pm for Linux
#`cp -R /var/web-gui/data/tools/ubuntu/CGI/. /var/web-gui/data/napp-it/CGI/`;


`chown -R napp-it /var/web-gui 2> /dev/null`;
`chmod -R 755 /var/web-gui/data 2> /dev/null`;
`chmod 755 /var/web-gui/data/wwwroot/cgi-bin/admin.pl`;

# mkdir _log/
if (!(-d '/var/web-gui/_log')) { `mkdir /var/web-gui/_log`; }

# echo keep old logs/jobs
if (-d '/var/web-gui/data_last/napp-it/_log')        { `cp -R /var/web-gui/data_last/napp-it/_log/* /var/web-gui/_log`; }

# echo keep old settings
if (-f '/var/web-gui/data_last/napp-it/napp-it.cfg') { `cp /var/web-gui/data_last/napp-it/napp-it.cfg /var/web-gui/_log/napp-it.cfg`; }

# mkdir _log/tmp
if (!(-d '/var/web-gui/_log/tmp'))                   { `mkdir /var/web-gui/_log/tmp`; }

# mkdir _log/group
if (!(-d '/var/web-gui/_log/group'))                 { `mkdir /var/web-gui/_log/group`; }

# mkdir _log/jobs
if (!(-d '/var/web-gui/_log/jobs'))                  { `mkdir /var/web-gui/_log/jobs`; }

# mkdir _my
if (!(-d '/var/web-gui/_my'))                        { `mkdir /var/web-gui/_my`; }

# mkdir _my/wwwroot
if (!(-d '/var/web-gui/_my/wwwroot'))                { `mkdir /var/web-gui/_my/wwwroot`; }

# mkdir _my/zfsos
if (!(-d '/var/web-gui/_my/zfsos'))                  { `mkdir /var/web-gui/_my/zfsos`; }

# mkdir _my/zfsos/_lib
if (!(-d '/var/web-gui/_my/zfsos/_lib'))             { `mkdir /var/web-gui/_my/zfsos/_lib`; }

# mkdir _my/zfsos/_lib/lang
if (!(-d '/var/web-gui/_my/zfsos/_lib/lang'))       { `mkdir /var/web-gui/_my/zfsos/_lib/lang`; }


## create links to avoid browser cache problems
if (!(-f '/var/web-gui/data/wwwroot/cgi-bin/napp-it')) { `ln -s /var/web-gui/data/wwwroot/cgi-bin /var/web-gui/data/wwwroot/cgi-bin/napp-it`; }

if (!(-f '/var/web-gui/data/scripts'))                 { `ln -s /var/web-gui/data/napp-it/zfsos/_lib/scripts /var/web-gui/data/scripts`; }


# setup napp-it webserver
##########################
#print "\n## setup and (re)start napp-it webserver at port 81\n";
#&log("\n## setup init /etc/init.d/napp-it");

 #(opt)kill nappit/mini-httpd
`pkill -f mini-httpd`;

# opt delete old init
# if  (-f '/etc/init.d/mini-httpd')                      { `rm /etc/init.d/mini-httpd`; }

# `cp /var/web-gui/data/tools/ubuntu/etc_init.d/napp-it /etc/init.d/napp-it`;
# `dos2unix -o /etc/init.d/napp-it`;                     # need unixformat

# `cp /var/web-gui/data/tools/ubuntu/etc/mini-httpd.conf /etc/mini-httpd.conf`;
# `cp /var/web-gui/data/tools/ubuntu/etc_default/mini-httpd /etc/default`;
# `chmod 755 /etc/init.d/napp-it`;

# `ln -s /etc/init.d/napp-it /etc/rc3.d/S99napp-it 2> /dev/null`;
#`chmod 755 /etc/init.d/napp-it`;

#`rm /etc/rc0.d/*mini-httpd 2> /dev/null`;
#`rm /etc/rc1.d/*mini-httpd 2> /dev/null`;
#`rm /etc/rc2.d/*mini-httpd 2> /dev/null`;
#`rm /etc/rc3.d/*mini-httpd 2> /dev/null`;
#`rm /etc/rc4.d/*mini-httpd 2> /dev/null`;
#`rm /etc/rc5.d/*mini-httpd 2> /dev/null`;
#`rm /etc/rc6.d/*mini-httpd 2> /dev/null`;

#`ln -s /etc/init.d/napp-it /etc/rc2.d/S20napp-it 2> /dev/null`;
#`ln -s /etc/init.d/napp-it /etc/rc3.d/S20napp-it 2> /dev/null`;
#`ln -s /etc/init.d/napp-it /etc/rc4.d/S20napp-it 2> /dev/null`;
#`ln -s /etc/init.d/napp-it /etc/rc5.d/S20napp-it 2> /dev/null`;

#`/etc/init.d/napp-it stop`;


#`nice bash /var/web-gui/data/napp-it/zfsos/_lib/scripts/taskserver.sh &`;
#`nice /usr/bin/perl /var/web-gui/data/napp-it/zfsos/_lib/scripts/socketserver.pl daemon &`;
#`/usr/sbin/mini-httpd -c \*\*.pl -u napp-it -d /var/web-gui/data/wwwroot -p 81 &`;


print "\n"x20;
print "############################################################################\n";
print "run the following command\n";
print "         sh /var/web-gui/data/tools/linux/napp-it\n";
print "        -connect your browser to http://serverip:81\n";
print "\n";
print "your network-ip's:\n";
print `ifconfig -a | grep 'inet '`;
print "############################################################################\n";

print "    After first run, you can start via napp-it and stop via napp-it-stop\n\n";
print "\n";

exec("/etc/init.d/napp-it start");
exit;

}


#################
sub omnios_30up {
#################
my $r;
my $sh=<<EoFom;

echo ""
echo "set atime off and compress=lz4 on rpool"
zfs set atime=off rpool
zfs set compress=lz4 rpool

echo ""
echo "151030 and up"
echo "### omni 1.50 - $osrel install storage server" $info
pkg install --deny-new-be storage/storage-server $log

echo ""
echo "### omni 1.51 - $osrel install netcat, initiator and ipmitool" $info
pkg install --deny-new-be netcat $log
pkg install ipmitool $log
pkg install initiator $log

#echo ""
echo "### omni 1.52 - $osrel install iperf and mpathadm" $info
pkg install --deny-new-be iperf $log
pkg install --deny-new-be mpathadm $log

#echo ""
#echo "bonnie++: missing"
#echo "### omni 1.53 install bonnie" $info
#pkg install --deny-new-be bonnieplus $log

echo ""
echo "### omni 1.54 - $osrel install rsync, mdb" $info
# pkg install --deny-new-be parted # n.a.
pkg install --deny-new-be mdb
pkg install --deny-new-be rsync

echo ""
echo "### omni 1.6 - $osrel install gcc7" $info
pkg install --deny-new-be developer/gcc7
pkg install --deny-new-be gnu-tar linker header-math object-file gnu-coreutils lint system/header

echo ""
echo "### omni 1.7 - $osrel install minio, smartmontools and mc" $info
# MinIO, Smartmontools, mc  from extra repo pkg.omniosce.org/r$osrel/extra
# opt unset publisher extra
pkg unset-publisher extra.omnios 2>/dev/null
pkg set-publisher -g https://pkg.omniosce.org/r$osrel/extra extra.omnios

pkg install --deny-new-be minio
pkg install --deny-new-be minio-mc
pkg install --deny-new-be rclone

pkg install --deny-new-be smartmontools
pkg install --deny-new-be application/mc

pkg install --deny-new-be brand/lx
pkg install --deny-new-be brand/bhyve
pkg install --deny-new-be zadm

echo ""
echo "### provide Apache 2.4" $info
pkg install library/security/openssl
pkg install server/apache-24

EoFom
return($sh);
}

#################
sub omnios_40up {
#################
my $r;
my $sh=<<EoFom;

echo ""
echo "set atime off and compress=lz4 on rpool"
zfs set atime=off rpool
zfs set compress=lz4 rpool

echo ""
echo "151040 and up"
echo "### omni 1.50 - $osrel install storage server" $info
pkg install --deny-new-be storage/storage-server $log

echo ""
echo "### omni 1.51 - $osrel install netcat, initiator, powertop and ipmitool" $info
pkg install --deny-new-be netcat $log
pkg install ipmitool $log
pkg install initiator $log
pkg install powertop $log

#echo ""
echo "### omni 1.52 - $osrel install iperf and mpathadm" $info
pkg install --deny-new-be iperf $log
pkg install --deny-new-be mpathadm $log

#echo ""
#echo "bonnie++: missing"
#echo "### omni 1.53 install bonnie" $info
#pkg install --deny-new-be bonnieplus $log

echo ""
echo "### omni 1.54 - $osrel install rsync, mdb" $info
# pkg install --deny-new-be parted # n.a.
pkg install --deny-new-be mdb
pkg install --deny-new-be rsync


echo ""
echo "### omni 1.6 - $osrel install gcc10" $info
pkg install --deny-new-be developer/gcc10
pkg install --deny-new-be gnu-tar linker header-math object-file gnu-coreutils lint system/header

echo ""
echo "### omni 1.7 - $osrel install minio, smartmontools and mc" $info
# MinIO, Smartmontools, mc  from extra repo pkg.omniosce.org/r$osrel/extra
# opt unset publisher extra
pkg unset-publisher extra.omnios 2>/dev/null
pkg set-publisher -g https://pkg.omniosce.org/r$osrel/extra extra.omnios

pkg install --deny-new-be minio
pkg install --deny-new-be minio-mc
pkg install --deny-new-be rclone

pkg install --deny-new-be smartmontools
pkg install --deny-new-be application/mc

pkg install --deny-new-be brand/lx
pkg install --deny-new-be brand/bhyve
pkg install --deny-new-be zadm

echo ""
#echo "### set links for minihttpd" $info
ln -s /lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
ln -s /lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null

echo "### provide disabled ntpsec" $info
pkg install --deny-new-be ntpsec

echo ""
echo "### provide Apache 2.4" $info
pkg install library/security/openssl
pkg install server/apache-24

EoFom
return($sh);
}




#################
sub omnios_27up {
#################
my $sh=<<EoFom;

echo ""
echo "set atime off and compress=lz4 on rpool"
zfs set atime=off rpool
zfs set compress=lz4 rpool

echo ""
echo "151027 and up"
echo "### omni 1.50 - $osrel install storage server" $info
pkg install --deny-new-be storage/storage-server $log

echo ""
echo "### omni 1.51 - $osrel install netcat, initiator and ipmitool" $info
pkg install --deny-new-be netcat $log
pkg install ipmitool $log
pkg install initiator $log

#echo ""
echo "### omni 1.52 - $osrel install iperf and mpathadm" $info
pkg install --deny-new-be iperf $log
pkg install --deny-new-be mpathadm $log

#echo ""
#echo "bonnie++: missing"
#echo "### omni 1.53 install bonnie" $info
#pkg install --deny-new-be bonnieplus $log

echo ""
echo "### omni 1.54 - $osrel install rsync, mdb and parted" $info
pkg install --deny-new-be parted
pkg install --deny-new-be mdb
pkg install --deny-new-be rsync

echo ""
echo "### omni 1.55 - $osrel create symbolic links for older minihttpd" $info
#ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8 2> /dev/null
#ln -s /usr/lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
#ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 2> /dev/null
#ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null


echo ""
echo "### omni 1.6 - $osrel install gcc7" $info
pkg install --deny-new-be developer/gcc7
pkg install --deny-new-be gnu-tar linker header-math object-file gnu-coreutils lint system/header



if [ ! -f /root/smartmontools$smart.ok ]                       # always newest version
then

echo ""
echo "### omni 1.7 install smartmontools $smart" $info

echo ""
echo "### create source folder" $info
sleep 3
wget http://downloads.sourceforge.net/project/smartmontools/smartmontools/$smart/smartmontools-$smart.tar.gz
gzcat \$HOME/smartmontools-$smart.tar.gz | tar xf -
cd smartmontools-$smart/
./configure --prefix=/usr --sysconfdir=/etc
make && make install && make clean && touch /root/smartmontools$smart.ok
cd \$HOME
sleep 3

fi


EoFom
return($sh);
}


#################
sub omnios_24up {
#################
my $sh=<<EoFom;

echo ""
echo "set atime off and compress=lz4 on rpool"
zfs set atime=off rpool
zfs set compress=lz4 rpool

echo ""
echo "151024 and up"
echo "### omni 1.50 - $osrel install storage server" $info
pkg install --deny-new-be storage/storage-server $log

echo ""
echo "### omni 1.51 - $osrel install netcat" $info
pkg install --deny-new-be netcat $log

#echo ""
echo "### omni 1.52 - $osrel install iperf and mpathadm" $info
pkg install --deny-new-be iperf $log
pkg install --deny-new-be mpathadm $log

#echo ""
#echo "bonnie++: missing"
#echo "### omni 1.53 install bonnie" $info
#pkg install --deny-new-be bonnieplus $log

echo ""
echo "### omni 1.54 - $osrel install rsync, mdb and parted" $info
pkg install --deny-new-be parted
pkg install --deny-new-be mdb
pkg install --deny-new-be rsync

echo ""
echo "### omni 1.55 - $osrel create symbolic links for older minihttpd" $info
#ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8 2> /dev/null
#ln -s /usr/lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
#ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 2> /dev/null
#ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null


echo ""
echo "### omni 1.6 - $osrel install gcc6" $info
pkg install --deny-new-be developer/gcc6
pkg install --deny-new-be gnu-tar linker header-math object-file gnu-coreutils lint system/header


#needed links for smartmontool
#rm /usr/bin/gfortran
#ln -s /opt/gcc-6/bin/gfortran /usr/bin/gfortran  2> /dev/null

#rm /usr/bin/c++
#ln -s /opt/gcc-6/bin/c++ /usr/bin/c++ 2> /dev/null

#rm /usr/bin/g++
#ln -s /opt/gcc-6/bin/g++ /usr/bin/g++ 2> /dev/null

#rm /usr/bin/gcc
#ln -s /opt/gcc-6/bin/gcc /usr/bin/gcc 2> /dev/null


if [ ! -f /root/smartmontools$smart.ok ]                       # always newest version
then

echo ""
echo "### omni 1.7 install smartmontools $smart" $info

echo ""
echo "### create source folder" $info
sleep 3
wget http://downloads.sourceforge.net/project/smartmontools/smartmontools/$smart/smartmontools-$smart.tar.gz
gzcat \$HOME/smartmontools-$smart.tar.gz | tar xf -
cd smartmontools-$smart/
./configure --prefix=/usr --sysconfdir=/etc
make && make install && make clean && touch /root/smartmontools$smart.ok
cd \$HOME
sleep 3

fi

#echo ""
#echo "### omni 1.8 - must install mc from different repo cs.umd.edu, currently not working" $info
#mc from different repo  (midnight commander editor and filebrowser)
#pkg set-publisher -g http://pkg.cs.umd.edu cs.umd.edu
#pkg install --deny-new-be csd/file/mc
#pkg unset-publisher cs.umd.edu
#ln -s /opt/csd/bin/mc /bin/mc  2> /dev/null
#sleep 3


EoFom
return($sh);
}

###########
sub omnios_to14 {
###########
my $sh=<<EoFom;

echo ""
echo "### omni 1.50 - $osrel install storage server" $info
pkg install --deny-new-be storage/storage-server $log

echo ""
echo "### omni 1.51 - $osrel install netcat" $info
pkg install --deny-new-be netcat $log

#echo ""
#echo "iperf: missing"
#echo "### omni - $osrel  1.52 install iperf" $info                             #na
#pkg install --deny-new-be iperf $log

#echo ""
#echo "bonnie++: missing"
#echo "### omni 1.53 install bonnie" $info
#pkg install --deny-new-be bonnieplus $log

echo ""
echo "### omni 1.54 - $osrel install mdb and parted" $info
pkg install --deny-new-be parted
pkg install --deny-new-be mdb

echo ""
echo "### omni 1.55 - $osrel create symbolic links" $info
ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8 2> /dev/null
ln -s /usr/lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 2> /dev/null
ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null


echo ""
echo "### omni 1.6 - $osrel install gcc48" $info
pkg install --deny-new-be gcc48
pkg install --deny-new-be gnu-tar linker header-math object-file gnu-coreutils lint system/header


#needed for smartmontools, opt delete old versions from gcc4.6
rm /usr/bin/gfortran
ln -s /opt/gcc-4.8.1/bin/gfortran /usr/bin/gfortran 2> /dev/null

rm /usr/bin/c++
ln -s /opt/gcc-4.8.1/bin/c++ /usr/bin/c++  2> /dev/null

rm /usr/bin/g++
ln -s /opt/gcc-4.8.1/bin/g++ /usr/bin/g++ 2> /dev/null

rm /usr/bin/gcc
ln -s /opt/gcc-4.8.1/bin/gcc /usr/bin/gcc 2> /dev/null


if [ ! -f /root/smartmontools$smart.ok ]                       # always newest version
then

echo ""
echo "### omni 1.7 install smartmontools $smart" $info

echo ""
echo "### create source folder" $info
sleep 3
wget http://downloads.sourceforge.net/project/smartmontools/smartmontools/$smart/smartmontools-$smart.tar.gz
gzcat \$HOME/smartmontools-$smart.tar.gz | tar xf -
cd smartmontools-$smart/
./configure --prefix=/usr --sysconfdir=/etc
make && make install && make clean && touch /root/smartmontools$smart.ok
cd \$HOME
sleep 3

fi

#echo ""
#echo "### omni 1.8 - must install mc from different repo cs.umd.edu" $info
#mc from different repo  (midnight commander editor and filebrowser)
#pkg set-publisher -g http://pkg.cs.umd.edu cs.umd.edu
#pkg install --deny-new-be csd/file/mc
#pkg unset-publisher cs.umd.edu
#ln -s /opt/csd/bin/mc /bin/mc 2> /dev/null
#sleep 3


EoFom
return($sh);

}


###########
sub omnios_16up {           #151016+
###########
my $sh=<<EoFom;

echo ""
echo "### omni 1.50 - $osrel install storage server" $info
pkg install --deny-new-be storage/storage-server $log

echo ""
echo "### omni 1.51 - $osrel install netcat" $info
pkg install --deny-new-be netcat $log

#echo ""
echo "### omni 1.52 - $osrel install iperf and mpathadm" $info
pkg install --deny-new-be iperf $log
pkg install --deny-new-be mpathadm $log

#echo ""
#echo "bonnie++: missing"
#echo "### omni 1.53 install bonnie" $info
#pkg install --deny-new-be bonnieplus $log

echo ""
echo "### omni 1.54 - $osrel install mdb and parted" $info
pkg install --deny-new-be parted
pkg install --deny-new-be mdb

echo ""
echo "### omni 1.55 - $osrel create symbolic links" $info
ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8 2> /dev/null
ln -s /usr/lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 2> /dev/null
ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null


echo ""
echo "### omni 1.6 - $osrel install gcc51" $info
pkg install --deny-new-be gcc51
pkg install --deny-new-be gnu-tar linker header-math object-file gnu-coreutils lint system/header


#needed links for smartmontool
rm /usr/bin/gfortran
ln -s /opt/gcc-5.1.0/bin/gfortran /usr/bin/gfortran  2> /dev/null

rm /usr/bin/c++
ln -s /opt/gcc-5.1.0/bin/c++ /usr/bin/c++ 2> /dev/null

rm /usr/bin/g++
ln -s /opt/gcc-5.1.0/bin/g++ /usr/bin/g++ 2> /dev/null

rm /usr/bin/gcc
ln -s /opt/gcc-5.1.0/bin/gcc /usr/bin/gcc 2> /dev/null


if [ ! -f /root/smartmontools$smart.ok ]                       # always newest version
then

echo ""
echo "### omni 1.7 install smartmontools $smart" $info

echo ""
echo "### create source folder" $info
sleep 3
wget http://downloads.sourceforge.net/project/smartmontools/smartmontools/$smart/smartmontools-$smart.tar.gz
gzcat \$HOME/smartmontools-$smart.tar.gz | tar xf -
cd smartmontools-$smart/
./configure --prefix=/usr --sysconfdir=/etc
make && make install && make clean && touch /root/smartmontools$smart.ok
cd \$HOME
sleep 3

fi

echo ""
echo "### omni 1.8 - must install mc from different repo cs.umd.edu, currently not working" $info
#mc from different repo  (midnight commander editor and filebrowser)
#pkg set-publisher -g http://pkg.cs.umd.edu cs.umd.edu
#pkg install --deny-new-be csd/file/mc
#pkg unset-publisher cs.umd.edu
#ln -s /opt/csd/bin/mc /bin/mc  2> /dev/null
#sleep 3


EoFom
return($sh);

}

############
sub solaris {
############

#return;

my $sh.=<<EoFs;

echo ""
echo "### s11 1.50 install storage server" $info
pkg install --accept --deny-new-be storage/storage-server

#ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8 2> /dev/null
#ln -s /usr/lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
#ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 2> /dev/null
#ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null
# obsolete needed for minihttpd 1.19 or 1.21

svcadm enable -r smb/server


#echo ""
#echo "### s11 1.51 install midnight commander" $info                # not available
#pkg install --deny-new-be mc $log

echo ""
echo "### s11 1.51 install parted" $info                #
pkg install --deny-new-be parted $log

echo ""
echo "### s11 1.52 install netcat" $info
pkg install --deny-new-be netcat $log

echo ""
echo "### s11 1.53 install iperfand mpathadm " $info
pkg install --deny-new-be iperf $log
pkg install --deny-new-be mpathadm $log

echo "bonnie: not working"
#echo "### s11 1.54 install bonnie" $info                            # na
#pkg install --deny-new-be bonnieplus $log


if [ ! -f /var/web-gui/_log/smartmontools$smart.ok ]
then

echo ""
echo "### s11 1.6 install smartmontools $smart and gcc" $info
pkg install --deny-new-be gcc $log
pkg install --deny-new-be apache-24 $log

#pkg install --accept --deny-new-be gcc-dev $log

echo ""
echo "### create source folder" $info
sleep 3
wget http://downloads.sourceforge.net/project/smartmontools/smartmontools/$smart/smartmontools-$smart.tar.gz
gzcat \$HOME/smartmontools-$smart.tar.gz | tar xf -
cd smartmontools-$smart/
./configure --prefix=/usr --sysconfdir=/etc
make && make install && make clean
cd \$HOME
sleep 3
touch /var/web-gui/_log/smartmontools$smart.ok

fi


EoFs
return($sh)

}

################
sub openindiana {
################
exit; # no longer supported
my $sh.=<<EoFop;

echo ""
echo "### oi 1.50 install midnight commander" $info                # available
pkg install --deny-new-be mc $log

echo ""
echo "### oi 1.51 install netcat" $info
pkg install --deny-new-be netcat $log

echo ""
echo "### oi 1.52 install iperf and mpathadm" $info
pkg install --deny-new-be iperf $log
pkg install --deny-new-be mpathadm $log

echo ""
echo "### oi 1.53 install bonnie" $info
pkg install --deny-new-be bonnieplus $log


echo ""
echo "### oi 1.55 create symbolic links" $info
# 0.98 is for minihttpd 1.19, 1.0.0 is for minihttpd 1.21
ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8 2> /dev/null
ln -s /usr/lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 2> /dev/null
ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null
# needed for minihttpd 1.19 or 1.21


# Hipster
echo ""
echo "### oi 1.56 install gcc" $info                #
# pkg install --deny-new-be gcc gnu-tar linker header-math object-file gnu-coreutils lint system/header $log

if [ ! -f /var/web-gui/_log/smartmontools$smart.ok ]                                       # always newest version
then

echo ""
echo "### oi 1.6 install smartmontools" $info
pkg install --deny-new-be smartmontools

EoFop
return($sh);
}


#########################
sub oi_201710up {
#########################
my $sh.=<<EoFop;

echo ""
echo "set atime off and compress=lz4 on rpool"
zfs set atime=off rpool
zfs set compress=lz4 rpool

echo ""
echo "### oi hipster 2017.10up  1.50 install midnight commander" $info                # available
pkg install --deny-new-be file/mc $log

echo ""
echo "### oi hipster 2017.10up  1.51 install netcat" $info
pkg install --deny-new-be netcat $log

echo ""
echo "### oi hipster 2017.10up  1.52 install iperf" $info
pkg install --deny-new-be iperf $log

echo ""
echo "### oi hipster 2017.10up  1.53 install bonnie" $info
pkg install --deny-new-be bonnieplus $log

echo ""
echo "### oi hipster 2017.10up  1.55 create symbolic links" $info
# 0.98 is for minihttpd 1.19, 1.0.0 is for minihttpd 1.21
#ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8 2> /dev/null
#ln -s /usr/lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
#ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 2> /dev/null
#ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null
# needed for minihttpd 1.19 or 1.21


# Hipster
echo ""
echo "### oi hipster 2017.10up  1.56 install gcc-6" $info                #
# pkg install --deny-new-be gcc-6 gnu-tar linker header-math object-file gnu-coreutils lint system/header $log
pkg install --deny-new-be gcc-6 gnu-tar linker header-math object-file gnu-coreutils lint system/header $log

# needed for expect.pm on an initial setup of OI 19.10 or Expect will not work
ln -s /usr/gcc/6/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1 2> /dev/null

echo ""
echo "### oi hipster 2017.10up   1.57 install rsync, smartmontools" $info
pkg install rsync $log
pkg install smartmontools $log

sleep 3

EoFop
return($sh);
}


################
sub oi_hipster {
###############
my $sh.=<<EoFop;

echo ""
echo "### oi 1.50 hipster install midnight commander" $info                # available
pkg install --deny-new-be file/mc $log

echo ""
echo "### oi hipster 1.51 install netcat and parted" $info
pkg install --deny-new-be netcat $log
pkg install --deny-new-be parted $log

echo ""
echo "### oi hipster 1.52 install iperf" $info
pkg install --deny-new-be iperf $log

echo ""
echo "### oi hipster 1.53 install bonnie" $info
pkg install --deny-new-be bonnieplus $log


echo ""
echo "### oi hipster 1.55 create symbolic links" $info
# 0.98 is for minihttpd 1.19, 1.0.0 is for minihttpd 1.21
ln -s /usr/lib/libssl.so /usr/lib/libssl.so.0.9.8 2> /dev/null
ln -s /usr/lib/libssl.so /usr/lib/libssl.so.1.0.0 2> /dev/null
ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.0.9.8 2> /dev/null
ln -s /usr/lib/libcrypto.so /usr/lib/libcrypto.so.1.0.0 2> /dev/null
# needed for minihttpd 1.19 or 1.21


# Hipster
echo ""
echo "### oi hipster 1.56 install gcc" $info                #
pkg install --deny-new-be developer/gcc-6
pkg install --deny-new-be gnu-tar linker header-math object-file gnu-coreutils lint system/header $log

echo ""
echo "### oi hipster  1.57 install smartmontools" $info
pkg install smartmontools $log


sleep 3

EoFop
return($sh);

}

################
sub common_end {
################
my $sh.=<<EoF3;

#disable atime on rpool for best performance
zfs set atime=off rpool

# enable hotplug
svcadm enable hotplug

echo ""
echo "3. setup/ update napp-it"


######
echo "3.1 update folders" $info
if [ -d /var/web-gui/data_last ]
then
rm -r /var/web-gui/data_last/
fi

if [ -d /var/web-gui/data ]
then
cp -R /var/web-gui/data/. /var/web-gui/data_last/
rm -r /var/web-gui/data/
fi

#keep new version data_nn.nn
echo "3.2 keep data_$rel"
cp -R \$HOME/web-gui/. /var/web-gui/

#copy new version to /var/web-gui/data
echo "3.3 copy data /web-gui/data_$rel/. /var/web-gui/data/"
cp -R \$HOME/web-gui/data_$rel/. /var/web-gui/data/


chown -R napp-it /var/web-gui
chmod -R 755 /var/web-gui/data

# setup configuration
chmod 755 /var/web-gui/data/wwwroot/cgi-bin/admin.pl


# copy mbuffer-files (optional)
#cp -R \$HOME/web-gui/data_$rel/tools/mbuffer/* /
#chmod 755 /usr/sbin/mbuffer


echo "3.4 setup mini-httpd"
cp /var/web-gui/data/tools/httpd/init.d/napp-it /etc/init.d/napp-it
chmod 755 /etc/init.d/napp-it
ln -s /etc/init.d/napp-it /etc/rc3.d/S99napp-it  2> /dev/null
chmod 755 /var/web-gui/data/tools/httpd/napp-it-mhttpd


# mkdir _log/
if [ ! -d /var/web-gui/_log/ ]
then
mkdir /var/web-gui/_log
fi

# echo keep old logs/jobs
if [ -d /var/web-gui/data_last/napp-it/_log/ ]
then
cp -R /var/web-gui/data_last/napp-it/_log/* /var/web-gui/_log
fi

# echo keep old settings
if [ -f /var/web-gui/data_last/napp-it/napp-it.cfg ]
then
cp /var/web-gui/data_last/napp-it/napp-it.cfg /var/web-gui/_log/napp-it.cfg
fi


# mkdir _log/tmp
if [ ! -d /var/web-gui/_log/tmp ]
then
mkdir /var/web-gui/_log/tmp
fi

# mkdir _log/group
if [ ! -d /var/web-gui/_log/group ]
then
mkdir /var/web-gui/_log/group
fi

# mkdir _log/jobs
if [ ! -d /var/web-gui/_log/jobs ]
then
mkdir /var/web-gui/_log/jobs
fi

# mkdir _my
if [ ! -d /var/web-gui/_my ]
then
mkdir /var/web-gui/_my
fi

# mkdir _my/wwwroot
if [ ! -d /var/web-gui/_my/wwwroot ]
then
mkdir /var/web-gui/_my/wwwroot
fi

# mkdir _my/zfsos
if [ ! -d /var/web-gui/_my/zfsos ]
then
mkdir /var/web-gui/_my/zfsos
fi

# mkdir _my/zfsos/_lib
if [ ! -d /var/web-gui/_my/zfsos/_lib ]
then
mkdir /var/web-gui/_my/zfsos/_lib
fi

# mkdir _my/zfsos/_lib/lang
if [ ! -d /var/web-gui/_my/zfsos/_lib/lang ]
then
mkdir /var/web-gui/_my/zfsos/_lib/lang
fi
################


# create links to avoid browser cache problems
if [ ! -f /var/web-gui/data/wwwroot/cgi-bin/napp-it ]
then
ln -s /var/web-gui/data/wwwroot/cgi-bin /var/web-gui/data/wwwroot/cgi-bin/napp-it 2> /dev/null
fi

if [ ! -f /var/web-gui/data/scripts ]
then
ln -s /var/web-gui/data/napp-it/zfsos/_lib/scripts /var/web-gui/data/scripts 2> /dev/null
fi

# delete setupfiles
if [ -f /root/smartmontools-$smart.tar.gz  ]
then
rm /root/smartmontools-$smart.tar.gz
fi

if [ -d /root/smartmontools-$smart  ]
then
rm -r /root/smartmontools-$smart
fi

# delete napp-it setup folder
rm -r /root/web-gui

# delete zip
rm /root/$zip

#################

echo ""
echo ""

#(re)start nappit/mini-httpd
pkill mhttpd
/bin/chmod 640 /etc/sudoers
/etc/init.d/napp-it restart
sleep 2

echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo ""
echo "############################################################################"
echo " "
echo "        -that's it, have fun"
echo "        -connect your browser to http://serverip:81"
echo " "
echo "your network-ip:"
ifconfig -a | grep 'inet '
echo " "
echo "############################################################################\n"

echo " -> install-log see \$HOME/setup-napp-it.log "
echo " -> first-time install: set password for root and napp-it (passwd username)"
echo ""
echo " ##############################################################################"
echo " -> reboot is suggested but not needed if you set current BE as default        "
echo " -> on updates, you can restart napp-it via /etc/init.d/napp-it restart !!      "
echo " ##############################################################################"
echo ""
echo "    If you like napp-it, please support us and use napp-it PRO                "
echo "    If you use OmniOS, support development as a Patron or a support contract \n"
echo " "



EoF3

return($sh);


}


######## add midnight commander (OmniOS: extra)
sub mc {
########
my ($dl,$ver,$t,$zip);

if (($os  eq "OmniOS") && ($osrel>=151030)) { return; } # from extra

#which version
        $ver="mc-4.8.19.zip";


# opt delete unzipped files
        if (-d "./midnight_commander") {
                $t=`rm -r ./midnight_commander`;
        }

        if (-f "./$ver") {
                print "\ndeleting old zip-file\n";
                $t=`rm ./$zip`;                                                       # delete opt old version
        }


# download
        print "\nmidnight commander is $ver\nstart download now, please wait...\n";
        # $t=`wget $dl 2>&1`;
        $t=`wget -tries=3 https://drive.google.com/uc?id=1MuXQF8N2DmsK5E-stUsGWFYpxSIjiKn2  -O mc-4.8.19.zip 2>&1`;  #downloadopt1


# unzip
        print "\nunzip -a \$HOME/$zip\n";
        `mkdir ./midnight_commander; cd ./midnight_commander; unzip -a \$HOME/$zip`;

# install midnight commander
        `cp -R \$HOME/midnight_commander/. /`;
        `chmod 755 /usr/bin/mc`;

# check
        if (-f "/usr/bin/mc") {
          print "\nmc is installed, start from console with command mc\n\n";
        } else {
          print "\nmc was not installed!\n";
        }
        sleep (2);

# delete setup files
        if (-d "./midnight_commander") {
                $t=`rm -r ./midnight_commander`;
        }
        if (-f "./$zip") {
                $t=`rm ./$zip`;                                                       # delete
        }
        `cd \$HOME`;
}



#########
sub log {
   open (M, '>>./setup-napp-it.log');
        print M "$_[0]\n";
   close (M);
}
##
