# - bof - #

#!/bin/bash



<<'comment'
cd ~/; rm -rf ~/aServerConf.sh; vim ~/aServerConf.sh;
# - Paste this content - #
chmod +x ~/aServerConf.sh; ~/./aServerConf.sh;

ssh-keygen -R 192.168.122.200
cd ~/; curl -O http://192.168.122.100/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/ArchServer.Ins/aServerConf.sh;
chmod +x ~/aServerConf.sh; ~/./aServerConf.sh;
~/./aServerConf.sh;

cd ~/.ssh;
ssh-keygen -t rsa;

# -  - #
# - When this error happen on ssh command - #

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

# -  - #
# - Fixing this error - #
ssh-keygen -R "you server hostname or ip"
ssh-keygen -R 10.0.0.1
ssh-keygen -R 192.168.1.100
ssh-keygen -R 192.168.1.200
ssh-keygen -R 192.168.122.100
ssh-keygen -R 192.168.122.200
comment



clear;



# -  - #
# - Commands - #
<<'comment'
ln=$(sed -n '/extra/{=}' ./tmp.txt);
ln=$(echo "$(($ln + 1))");
sed -i $ln'd' ./tmp.txt;
sed -i $ln' i SigLevel = PackageRequired' ./tmp.txt;
ln=$(echo "$(($ln + 1))");
sed -i $ln' i Server=https://archive.archlinux.org/repos/2022/02/10/$repo/os/$arch' ./tmp.txt;
sed -i '2 d' $file;

if [ $nV -ge 2 ]; then
if [ $nV -ge 2 ]; then echo '>=2'; else echo '<2';fi;
if [ $nV -ge 1 ]; then echo '>=1'; else echo '<2';fi;
if [ $nV -eq 1 ]; then echo 'One...'; return; else echo 'Different...'; fi;
if [ $nV -eq 1 ]; then echo 'Processing...'; else echo 'Returning...'; return; fi;
if [ $nV -eq 1 ]; then echo $msg_0; else echo $msg_1; return; fi;
comment



# -  - #
# - Global variables - #
nV=0;
orderF=~/order.txt;
netPlan_=0;

Dir_=($PWD);
cHost_="$HOSTNAME";

# - Just change IP address for uServer - #
netStart_='192';


uServerIP_isdevelopmentUS_='www.isdevelopment.us';
gateway4_isdevelopmentUS_=$netStart_'.168.1.1';

uServerIP_uSVManager=$netStart_'.168.1.101';
gateway4_uSVManager=$netStart_'.168.1.1';

uServerIP_uSProxmox=$netStart_'.168.1.200';
gateway4_uSProxmox=$netStart_'.168.1.1';


ViManager_='Yes';
VEProxmox_='No';
RealMetal_='No';
WebServer_='No';


if [ "$ViManager_" == "Yes" ]; then
   uServerIP_=$uServerIP_uSVManager;
   gateway4_=$gateway4_uSVManager;
elif [ "$VEProxmox_" == "Yes" ]; then
   uServerIP_=$uServerIP_uSProxmox;
   gateway4_=$gateway4_uSProxmox;
elif [ "$WebServer_" == "Yes" ]; then
   uServerIP_=$uServerIP_isdevelopmentUS_;
   gateway4_=$gateway4_isdevelopmentUS_;
elif [ "$RealMetal_" == "Yes" ]; then
   uServerIP_=$uServerIP_isdevelopmentUS_;
   gateway4_=$gateway4_isdevelopmentUS_;
fi;

# - Just change IP address for aServerIP - #
uWebServer_='192.168.1.101';  # uSHome
aServerIP_=192.168.1.25;      # New aServer IPa
gateway4_='192.168.1.1';
Addresses_='8.8.8.8, 8.8.4.4';

rootPasswd_='Administrator2';
userPasswd_=$rootPasswd_;
masterUser_='is_derayo';
masterPasswd_=$rootPasswd_;
adminUser_='admin';
adminPasswd_='Admin22';
marioUser_='mario';
marioPasswd_='canario';
psqlPasswd_=$rootPasswd_;

hostName_='aServer';
timeZone_='America/Ney_York';

publicKey_='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDvYwMbfEpfIgxa/ZJlkEWmk/YvXWmX5RlPxXs15/XLzfb4E5sYiKdJanVp6NTEYf1f6PmCndzQ7qrgD9FcrjRFhej6wBf5rM7DIHLvt7KvVVPzk2YTBmuaFbKaF9MaRqLpRlkFxuRQuy0k1AEOW1T/yPOZ/6ip7ts91LlFJU7DC+NVwG+5tbJs9q1NZcpF93Onc/aZDctm0swkx17tzzY3Y4jXara+DzrYTwqTy1FF5V+sYDLNkL7PcY+MwW+jJEPszRSiYVOptvNXCyz+5nGI1zNjIQqayEcvtanBk9NeDQ2Q+fy+1EfAz0wYgHFaBR8WG5i/iE6ViM+ik9F4+jWe/Hr07bVLvLSDwjRtlxhhN044BNcSBdjXG1EmtY7f0w3sREi6HxrUcsjO4CdVe4NcyaM7620aDO1admwR/23/wlwJG/lFBlY87EZqMDWKJDxv3OBt5mZSg/MZEPRreYC1jkC3WiYSz3I1vf4zQMeV9rJTf/96245jNxfI+ozEIcE= is_derayo@HPLaptopArch';

publicKey_='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6FvLj9fKZLzmuKg6S+cyMjYF2knvXWt0XR9rzv9BLh6w3lWZwErGEC/ZN+lWFz1k+lHXQqDdirdMTcN4dG1PSGDSY9nWDNgQ69eBzy56jwpqqwUeYKxo2+easPkfkpqaskBqsBZkTJy5siI1+dqbVURY1ANgC/DCsRX+C911lq56xKfmtd+ulm3HaDo53E0RowIqLOpNaQK2RfX9pfU0EIOyX4doWTD1CDq/YSUoheXiEGfg5tZmFSSq7w6/623bSJOuBeGa9n5+HNWoWeHm+jlzPOq/W8/n5MflzfEMQxdi9Ot2Fz1Llz2H+zTIqQTNlHyXPABsg8EA7lA1DSUjBK4JojdUm/pfYD8BGdJXL7Lh09emgFKTGDDfI+tB2RwFXlfR+z8Byn7X3T9NytlCINYW25Hs0H3UnypdSvt0LrCdzWsOucamtj0QU8bcFNivIJjX8xe00p/NQ2bRQA/tSqAnomGZuR8VK9UXa4GtyvMml2VGV/a0nbGfOjGpg/qk= is_derayo@HPDesktopArch';

zPool_='Yes';
zPool_='No';

zMirror_='Yes';
zMirror_='No';

_bashrc_='Yes';
#_bashrc_='No';

_netplan='Yes';
#_netplan='No';

aServerConf_=/etc/aServer.Conf;



# -  - #
# - sample - #
function sample_(){
  local sample_='sample' \
        sample_f=/etc/samba/smb.conf;
  local msg_0='Configuring '$sample_' ...' \
        msg_1=$sample_' already configured...';

  echo '';
  if [ $nV -eq 13 ]; then echo $msg_0; else echo $msg_1; return; fi;

  echo $sample_' done...';
}



<<'comment'
  sudo cp /etc/pacman.conf ./tmp.txt;
  echo "" >> ./tmp.txt;
  echo "[archzfs]" >> ./tmp.txt;
  echo "SigLevel = Optional TrustAll" >> ./tmp.txt;
  sed -i '$ a Server = https://archzfs.com/$repo/$arch' ./tmp.txt;

  ln=$(sed -n '/core/{=}' ./tmp.txt);
  ln=$(echo "$(($ln + 1))");
  sed -i $ln'd' ./tmp.txt;
  sed -i $ln' i SigLevel = PackageRequired' ./tmp.txt;
  ln=$(echo "$(($ln + 1))");
  sed -i $ln' i Server=https://archive.archlinux.org/repos/2022/02/10/$repo/os/$arch' ./tmp.txt;

  ln=$(sed -n '/extra/{=}' ./tmp.txt);
  ln=$(echo "$(($ln + 1))");
  sed -i $ln'd' ./tmp.txt;
  sed -i $ln' i SigLevel = PackageRequired' ./tmp.txt;
  ln=$(echo "$(($ln + 1))");
  sed -i $ln' i Server=https://archive.archlinux.org/repos/2022/02/10/$repo/os/$arch' ./tmp.txt;

  ln=$(sed -n '/community-testing/{=}' ./tmp.txt);
  sed -i $ln'd' ./tmp.txt;
  sed -i $ln'd' ./tmp.txt;
  sed -i $ln'd' ./tmp.txt;

  ln=$(sed -n '/community/{=}' ./tmp.txt);
  ln=$(echo "$(($ln + 1))");
  sed -i $ln'd' ./tmp.txt;
  sed -i $ln' i SigLevel = PackageRequired' ./tmp.txt;
  ln=$(echo "$(($ln + 1))");
  sed -i $ln' i Server=https://archive.archlinux.org/repos/2022/02/10/$repo/os/$arch' ./tmp.txt;

  sudo cp ./tmp.txt /etc/pacman.conf;

 echo "RAMSITALSKHMAN|1223333" | grep -aob '|' | grep -oE '[0-9]+'
14

var=abcdef
echo ${var:0:1}
a
echo ${var:3:1}
d
echo "192.168.122.1" | awk -F"." '{print length($0)-length($NF)}'
12

  uS_ip_='192.168.122.50';
  nP_=$(echo $uS_ip_ | awk -F"." '{print length($0)-length($NF)}');
  #nP_=$(echo "$(($nP_ - 1))");
  cC_=$(echo ${uS_ip_:0:$nP_})
  echo $cC_;
 
  echo 'postgres:'$adminPasswd_ | sudo chpasswd;

  # - Creating samba user password... - #
  (echo $smbGuest_; sleep 1; echo $smbGuest_ ) | sudo smbpasswd -s -a $smbGuest_;
  (echo $rootPasswd_; sleep 1; echo $rootPasswd_ ) | sudo smbpasswd -s -a $masterUser_;

  #sudo sed -i 's/set timeout=30/set timeout=10/' $grub_;

comment



# -  - #
# - sshPublicKey_ - #
function sshPublicKey_(){
  local pKey_1='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDvYwMbfEpfIgxa/ZJlkEWmk/YvXWmX5RlPxXs15/XLzfb4E5sYiKdJanVp6NTEYf1f6PmCndzQ7qrgD9FcrjRFhej6wBf5rM7DIHLvt7KvVVPzk2YTBmuaFbKaF9MaRqLpRlkFxuRQuy0k1AEOW1T/yPOZ/6ip7ts91LlFJU7DC+NVwG+5tbJs9q1NZcpF93Onc/aZDctm0swkx17tzzY3Y4jXara+DzrYTwqTy1FF5V+sYDLNkL7PcY+MwW+jJEPszRSiYVOptvNXCyz+5nGI1zNjIQqayEcvtanBk9NeDQ2Q+fy+1EfAz0wYgHFaBR8WG5i/iE6ViM+ik9F4+jWe/Hr07bVLvLSDwjRtlxhhN044BNcSBdjXG1EmtY7f0w3sREi6HxrUcsjO4CdVe4NcyaM7620aDO1admwR/23/wlwJG/lFBlY87EZqMDWKJDxv3OBt5mZSg/MZEPRreYC1jkC3WiYSz3I1vf4zQMeV9rJTf/96245jNxfI+ozEIcE= is_derayo@HPLaptopArch';
  local pKey_2='ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6FvLj9fKZLzmuKg6S+cyMjYF2knvXWt0XR9rzv9BLh6w3lWZwErGEC/ZN+lWFz1k+lHXQqDdirdMTcN4dG1PSGDSY9nWDNgQ69eBzy56jwpqqwUeYKxo2+easPkfkpqaskBqsBZkTJy5siI1+dqbVURY1ANgC/DCsRX+C911lq56xKfmtd+ulm3HaDo53E0RowIqLOpNaQK2RfX9pfU0EIOyX4doWTD1CDq/YSUoheXiEGfg5tZmFSSq7w6/623bSJOuBeGa9n5+HNWoWeHm+jlzPOq/W8/n5MflzfEMQxdi9Ot2Fz1Llz2H+zTIqQTNlHyXPABsg8EA7lA1DSUjBK4JojdUm/pfYD8BGdJXL7Lh09emgFKTGDDfI+tB2RwFXlfR+z8Byn7X3T9NytlCINYW25Hs0H3UnypdSvt0LrCdzWsOucamtj0QU8bcFNivIJjX8xe00p/NQ2bRQA/tSqAnomGZuR8VK9UXa4GtyvMml2VGV/a0nbGfOjGpg/qk= is_derayo@HPDesktopArch';
  local sName_='sshPublicKey' \
        ssh_=~/.ssh \
        rootSsh_=/root/.ssh \
        aKeys_=~/.ssh/authorized_keys;
  local msg_0='Configuring '$sName_' ...' \
        msg_1=$sName_' already configured...' \
        sS1_='' sS2_='';
  echo "";

  if [ -d "$ssh_" ] && [ -f "$aKeys_" ]; then
    sS1_=$(echo $(cat "$aKeys_" | grep "$pKey_1"));
    sS2_=$(echo $(cat "$aKeys_" | grep "$pKey_2"));
    if [ "$sS1_" == "$pKey_1" ] && [ "$sS2_" == "$pKey_2" ]; then echo $msg_1; sleep 5; return; fi;
  fi;
  echo $msg_0;

  mkdir -p $ssh_;
  chmod 700 $ssh_;
  rm -rf $aKeys_;
  touch $aKeys_;
  chmod 600 $aKeys_;

  if [ "$sS1_" == "" ]; then echo $pKey_1 >> $aKeys_; fi;
  if [ "$sS2_" == "" ]; then echo $pKey_2 >> $aKeys_; fi;

  sudo mkdir -p $rootSsh_;
  sudo chmod 700 $rootSsh_;
  sudo cp -p $aKeys_ $rootSsh_;
  sudo chown -R root:root $rootSsh_;

  echo $sName_' has been configured...';
  sleep 10;
}



# -  - #
# - Additional Software - #
function AdditionalSoftware_(){
  local pacmanF_=/etc/pacman.conf \
        webminF_=/etc/webmin/miniserv.conf \
        webminUser_=$adminUser_ \
        webminPasswd_=$adminPasswd_ \
        miniservUsersF_=/etc/webmin/miniserv.users \
        webminAclF_=/etc/webmin/webmin.acl \
        mysqlConf_=/etc/my.cnf.d/server.cnf \
        sSed_='ParallelDownloads = 5' \
        candy_='ILoveCandy';
  local msg_0='Configuring '$pacmanF_' ...' \
        msg_1='Additional software already installed...' \
        sS1_='' sS2_='' sS3_='' sS4_='' nTZ_='' \
        tmp_=~/tmp.txt sS1_='# - Additional software installed - #';
  local sWebminAuthorized_=': acl adsl-client ajaxterm apache at backup-config bacula-backup bandwidth bind8 change-user cluster-copy cluster-cron cluster-passwd cluster-shell cluster-software cluster-useradmin cluster-usermin cluster-webmin cpan cron custom dfsadmin dhcpd dovecot exim exports fail2ban fdisk fetchmail filemin filter firewall firewall6 firewalld fsdump grub heartbeat htaccess-htpasswd idmapd inetd init inittab ipfilter ipfw ipsec iscsi-client iscsi-server iscsi-target iscsi-tgtd jabber krb5 ldap-client ldap-server ldap-useradmin logrotate lpadmin lvm mailboxes mailcap man mon mount mysql net nis openslp package-updates pam pap passwd phpini postfix postgresql ppp-client pptp-client pptp-server proc procmail proftpd qmailadmin quota raid samba sarg sendmail servers shell shorewall shorewall6 smart-status smf software spam squid sshd status stunnel syslog-ng syslog system-status tcpwrappers telnet time tunnel updown useradmin usermin vgetty webalizer webmin webmincron webminlog wuftpd xinetd';
  echo '';

  if [ -f "$aServerConf_" ]; then
     sS2_=$(echo $(cat $aServerConf_ | grep "$sS1_" ));
     if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; sleep 5; return; fi;
  fi;

  #sS1_=$(echo $(cat $pacmanF_ | grep "$sSed_" ));
  #sS2_=$(echo $(cat $pacmanF_ | grep -oF "$candy_" ));
  #if [ "$sS1_" == "$sSed_" ] && [ "$sS2_" == "$candy_" ]; then echo $msg_1; return; else echo $msg_0; fi;

  # -  - #
  # - Update mirrorlist - #
  sudo reflector --verbose --threads 50 -l 101 -f 101 --number 50 --sort rate --save /etc/pacman.d/mirrorlist;
  echo '';
  echo "Mirrors updated...";

  # -  - #
  # - Configure pacman.conf - #
<<'comment'
  pacmanF_=/etc/pacman.conf;
comment
  sudo sed -i 's/#ParallelDownloads = 5/'"$sSed_"'/' $pacmanF_;
  ln=$(sed -n '/ParallelDownloads = 5/{=}' $pacmanF_);
  ln=$(echo "$(($ln + 1))");
  sudo sed -i $ln' i ILoveCandy' $pacmanF_;

  update_;
  sleep 10;

  echo '';
  echo "Installing additional software...";
  sudo pacman -S docker docker-compose dpkg samba gvfs-smb \
                 nautilus-share vsftpd phpmyadmin --noconfirm --needed;
  sleep 10;

  echo '';
  echo "Installing yay helper...";
  cd ~/Downloads;
  git clone https://aur.archlinux.org/yay-git.git;
  cd yay-git;
  #echo 'Y' | makepkg -si PKGBUILD;
  makepkg -si PKGBUILD;
  cd ~/;
  yay --save --answerclean All --answerdiff All --noansweredit;
 #yay --save --nocleanmenu --nodiffmenu;
  sleep 10;

  echo '';
  echo "Installing paru helper...";
  yay -S paru --noconfirm --needed;
  yay -S inxi --noconfirm --needed;
  yay -S phppgadmin --noconfirm --needed;
  sleep 10;

  echo '';
  echo "Installing webmin...";
  yay -S webmin --noconfirm --needed;


  # webminF_=/etc/webmin/miniserv.conf
  sudo sed -i 's/ssl=1/ssl=0/' $webminF_;
  sudo systemctl enable --now webmin;
  # systemctl status webmin;



<<'comment'
  # -  - #
  # - Cocumentation - #
  https://www.youtube.com/watch?v=s5qixCatEvk
  https://userrealityinterface.wordpress.com/2012/03/27/webmin-access-tips/

  webminUser_='is_derayo'                              # $masterUser_
  webminPasswd_='Administrator2'                        # $masterPasswd_
  miniservUsersF_=/etc/webmin/miniserv.users;
  webminAclF_=/etc/webmin/webmin.acl;
comment

  sudo sed -i '$ a '"$webminUser_"':'$webminPasswd_ $miniservUsersF_;
  sudo sed -i '$ a '"$webminUser_""$sWebminAuthorized_" $webminAclF_;
  sudo /opt/webmin/changepass.pl /etc/webmin $webminUser_ $webminPasswd_;
  sleep 10;


  echo '';
  echo "Installing yaourt helper...";
  cd ~/Downloads;
  git clone https://aur.archlinux.org/package-query.git;
  cd package-query;
  echo 'Y' | makepkg -si PKGBUILD;
  cd ~/;

  cd ~/Downloads;
  git clone https://aur.archlinux.org/yaourt.git;
  cd yaourt;
  echo 'Y' | makepkg -si PKGBUILD;
  cd ~/;
  sleep 10;



  if [ "$zPool_" == "Yes" ]; then
     echo ""
     echo "Installing Zfs software...";
     yay -S zfs-utils zfs-dkms --noconfirm;
  
     sudo systemctl enable zfs-import-cache \
                           zfs-mount \
                           zfs-import.target \
                           zfs.target;
     sudo systemctl start  zfs.target;

     # -  - #
     # - Enable ZFS support without rebooting - #
     sudo modprobe zfs;
  fi;



  # -  - #
  # - apache - #
  echo '';
  echo "Installing apache...";
  # https://ostechnix.com/install-apache-mariadb-php-lamp-stack-on-arch-linux-2016/
  sudo pacman -S apache --noconfirm --needed;
  sudo systemctl enable --now httpd;
  systemctl status httpd;
  sleep 10;



  # -  - #
  # - php - #
  echo '';
  echo "Installing php...";
  sudo pacman -S php php-apache php-cgi php-gd php-pgsql --noconfirm --needed;
  #yay -S php81 --noconfirm;
  php -v;
  pacman -Qi php;
  phpConfiguration_;
  sleep 10;



  # -  - #
  # - mysql - #
  echo '';
  echo "Installing mariaDB...";
  yay -S mariadb --noconfirm --needed;
  sudo systemctl enable mariadb;
  sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
  sudo systemctl start mariadb;
  #sudo mysql_secure_installation;

  sleep 10;

<<'comment'
  sudo mariadb-upgrade --user=mysql --basedir=/usr --datadir=/var/lib/mysql
  sudo systemctl enable --now mariadb.service;
  sudo systemctl enable --now mariadb;
  sudo systemctl start mariadb.service;
  systemctl status mariadb.service;
  systemctl status mariadb;
  (echo ' '; sleep 2; echo 'q') | systemctl status mariadb;
comment


  # -  - #
  # - PostgreSQL - #
  echo '';
  echo "Installing PostgreSQL...";
  sudo pacman -S postgresql postgresql-client --noconfirm --needed;
  # phppgadmin

cat <<EOT>> $tmp_;
# - bof - #

$sS1_



# - eof - #
EOT



  sudo mv $tmp_ $aServerConf_;
  sudo chown root:root $aServerConf_;

  sudo inxi -SCMm -t c -P -x;
  echo '';
  echo 'Additional software has been installed...';
  echo '';
  sleep 10;
}



# -  - #
# - PHP Configuration - #
function phpConfiguration_(){
  local phpF_=/etc/httpd/conf/httpd.conf \
        phpInitF_=/etc/php/php.ini;
  sudo sed -i 's/#LoadModule unique_id_module modules\/mod_unique_id.so/LoadModule unique_id_module modules\/mod_unique_id.so/' $phpF_;
  sudo sed -i 's/LoadModule mpm_event_module modules\/mod_mpm_event.so/#LoadModule mpm_event_module modules\/mod_mpm_event.so/' $phpF_;
  sudo sed -i 's/#LoadModule mpm_prefork_module modules\/mod_mpm_prefork.so/LoadModule mpm_prefork_module modules\/mod_mpm_prefork.so/' $phpF_;
  sudo sed -i '$ a LoadModule php_module modules\/libphp.so' $phpF_;  
  sudo sed -i '$ a AddHandler php-script php' $phpF_;  
  sudo sed -i '$ a Include conf\/extra\/php_module.conf' $phpF_;  
  sudo sed -i 's/;extension=mysqli/extension=mysqli/' $phpInitF_;
  sudo sed -i 's/;extension=gd/extension=gd/' $phpInitF_;
  sudo systemctl restart httpd;
}



# -  - #
# - apache index file - #
function apacheIndexF_(){
  local aFolder_=/$1/WebServer;
  local indexF_=$aFolder_/html/index.html;
  sudo chown -R is_derayo:is_derayo $aFolder_;
  sudo chmod -R 775 $aFolder_;

  mkdir -p $aFolder_/Test1;
  mkdir -p $aFolder_/Test2;
  mkdir -p $aFolder_/html;

  echo '<html>' > $indexF_;
  echo '   <title>Welcome</title>' >> $indexF_;
  echo '     <body>' >> $indexF_;  
  echo '       <h2>Welcome to Integrated Systems</h2>' >> $indexF_;  
  echo '     </body>' >> $indexF_;  
  echo '   </html>' >> $indexF_;  
}



# -  - #
# - php initial configuration - #
function phpInfoF_(){
  local aFolder_=/$1/WebServer;
  local phpF_=$aFolder_/info/info.php;
  
  mkdir -p $aFolder_/info;
  
  echo '<?php' > $phpF_;
  echo '  phpinfo();' >> $phpF_;
  echo '?>' >> $phpF_;
}



# -  - #
# - Netplan: Static IP address - #
function netplan_(){
  local netctlF_=/etc/systemd/network/ \
        b_='static IP address' \
        netF_=~/netplan.txt;
  local msg_0='Configuring '$hostName_' '$b_'...' \
        msg_1=$hostName_' '$b_' already configured... '$aServerIP_ \
        sS1_='' sS2_='';
  echo "";

<<'comment'
  # -  - #
  # - Documentation - #
  https://askubuntu.com/questions/405508/how-to-find-name-of-currently-active-network-interface
  Get the active interface (internet: network or wireless)
  sS1_=$(echo $(route -n | grep -E  '^0.0.0.0'|awk '{print $8}'));

  hostName='aServer';
  
  netStart_='10';
  netStart_='192';

  aServerIP_=10.0.0.150;
  aServerIP_='192.168.1.25';
  sudo vim /etc/systemd/network/enp1s0.network;
comment

  rm -rf $netF_;
  sS1_=$(echo $(echo $(ifconfig | grep "$netStart_")) | awk '{print $2;}');
  if [ "$sS1_" == "$aServerIP_" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;
  Network_=$(echo $(route -n | grep -E '^0.0.0.0'|awk '{print $8}') | awk '{print $1}');
  netctlF_=$netctlF_$Network_.network;

cat <<EOT>> $netF_;

# - Configured - #

[Match]
Name=$Network_

[Network]
Address=$aServerIP_/24
Gateway=$netStart_.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4

EOT

  netPlan_=1;

  sudo rm -rf $netctlF_;
  sudo mv $netF_ $netctlF_;
  sudo chown root:root $netctlF_;


<<'comment'
sudo vim /etc/systemd/network/20-wired.network;
  
[Match]
Name=enp1s0

[Network]
Address=10.0.0.150/24
Gateway=10.0.0.1
DNS=10.0.0.1

sudo systemctl enable systemd-networkd.service;
sudo systemctl restart systemd-networkd.service;
sudo systemctl enable systemd-resolved.service;
sudo systemctl start systemd-resolved.service;

  # -  - #
  # - Run this section at the end of the install - #
  
  # -  - #
  # - Disable original network service - #
  sudo systemctl disable netctl@$Network_.service;

  # -  - #
  # - Uninstall netctl - #
  sudo pacman -Rns netctl --noconfirm;

  # -  - #
  # - Enable & start systemd-networkd - #
  sudo systemctl enable systemd-networkd;
  sudo systemctl start systemd-networkd;

  # -  - #
  # - Stop/disable dhcpcd - #
  sudo systemctl stop dhcpcd;
  sudo systemctl disable dhcpcd;

  sS1_=$(echo $(echo $(ifconfig | grep "$netStart_")) | awk '{print $2;}');     #  '10.0.0.6'
  netctlF_=/etc/systemd/network/;
  Network_=$(echo $(route -n | grep -E  '^0.0.0.0'|awk '{print $8}'));          #  enp1s0
  netctlF_=$netctlF_$Network_.network;                                          #  /etc/systemd/network/enp1s0.network

  netctlF_=/etc/systemd/network/enp1s0.network

  Description='# - Configured - #'
  Interface=enp1s0
  Connection=ethernet
  IP=static

  Address=('10.0.0.150/24')
  Gateway='10.0.0.1'
  DNS=(10.0.0.1)



  sudo cp $tmp_ $netctlF_;
  rm -rf $tmp_;

  sudo netctl enable $sS1_;
  sudo netctl start $sS1_;
  sudo systemctl stop dhcpcd;
  sudo systemctl disable dhcpcd;



  # -  - #
  # - Documentation - #
  https://ostechnix.com/configure-static-dynamic-ip-address-arch-linux/

  sudo vim /etc/netctl/ens3

  Description='# - Configured - #'
  Interface=ens3
  Connection=ethernet
  IP=static

  Address=('192.168.122.100/24')
  Gateway='192.168.122.1'
  DNS=(192.168.122.1)

  sudo netctl enable ens3;
  sudo netctl start ens3;
  sudo systemctl stop dhcpcd;
  sudo systemctl disable dhcpcd;
  sudo reboot now;
comment

  echo $hostName_' '$b_" has been configured... " $aServerIP_
  sleep 10;

  # -  - #
  # - Do not run yet - #
  #sudo systemctl start systemd-networkd;
}



# -  - #
# - enableNetplan_ at the end - #
function enableNetplan_(){

  # -  - #
  # - Run this section at the end of the install - #

  # -  - #
  # - Disable original network service - #
  sudo systemctl disable netctl@$Network_.service;

  # -  - #
  # - Uninstall netctl - #
  # sudo pacman -Rns netctl --noconfirm;

  # -  - #
  # - Enable & start systemd-networkd - #
  sudo systemctl enable systemd-networkd;
  sudo systemctl start systemd-networkd;

  # -  - #
  # - Stop/disable dhcpcd - #
  sudo systemctl stop dhcpcd;
  sudo systemctl disable dhcpcd;

}



# -  - #
# - hostname - #
function hostName_(){
  local f1_=/etc/hosts \
        f2_=/etc/hostname \
        host_=$hostName_;
  local msg_0='Configuring ' \
        msg_1=$host_' hostname already configured...' \
        sS1_='' sS2_='';
  echo "";

  sS1_=$(echo $(echo $(cat "$f1_" | grep -oF "$host_")) | awk '{print $1;}');
  sS2_=$(echo $(cat "$f2_" | grep -oF "$host_" ));
  if [ "$sS1_" == "$host_" ] && [ "$sS2_" == "$host_" ]; then echo $msg_1; sleep 5; return; else echo $msg_0$host_; fi;

  if [ "$sS1_" != "$host_" ]; then
    echo $msg_0$f1_;
    sudo sed -i 's/ArchVManager/'"$host_"'/' $f1_;
    sudo sed -i 's/ArchVManager/'"$host_"'/' $f1_;
  fi;

  if [ "$sS2_" != "$host_" ]; then
    echo $msg_0$f2_;
    sudo sed -i 's/ArchVManager/'"$host_"'/' $f2_;
  fi
  echo $host_" hostname was configured...";
  sleep 10;
}



# -  - #
# - bashrc - #
function bashrc_(){
  local b_=~/.bashrc \
        bPath_=/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Configuration/Arch_bashrc_fstab_pacman-conf.Ins/ \
        aSBash_=aServer_bashrc.sh;
  local msg_0='Configuring '$b_'...' \
        msg_1=$b_' already configured...' \
        conf_='# - Configured - #' \
        sS1_='' sS2_='';
  echo '';

  if [ -f "$b_" ]; then
     sS1_=$(echo $(cat $b_ | grep -oF "$conf_" ));
     if [ "$sS1_" == "$conf_" ]; then echo $msg_1; sleep 5; return; fi;
  fi;

  cd ~/;
  echo $msg_0;
  curl http://$uServerIP_$bPath_$aSBash_ -o $b_;

  sS1_=$(echo $(cat $b_ | grep -oF "$conf_" ));
  if [ "$sS1_" == "" ]; then
     sed -i "5 i # -  - #" $b_; 
     sed -i "6 i $conf_" $b_;
     sed -i "7 i # -  - #" $b_; 
  fi;

  sudo cp $b_ /root;

  cd $Dir_;
  echo $b_" file has been configured...";
  sleep 10;
}



# -  - #
# - vsftpd.conf - #
function vsftpd_(){
  local ftp_=/etc/vsftpd.conf \
        ftpU_=/etc/ftpusers \
        hostsA_=/etc/hosts.allow;
  local msg_0='Configuring '$ftp_' ...' \
        msg_1=$ftp_' already configured...' \
        aUser_=$adminUser_ \
        s1_='' tF_=./tmp.txt \
        sS1_='# - vsftpd.conf configured - #' sS2_='' \
        tmp_=~/tmp.txt;
  echo '';

  sS2_=$(echo $(cat $aServerConf_ | grep "$sS1_" ));
  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; sleep 5; return; fi;

  s1_=$(cat $ftpU_ | grep "$aUser_");
  if [ "$s1_" == "" ]; then
    echo $msg_0;
  else
    DeleteDuplicatedLines_ "$ftpU_" "$aUser_"
    echo $msg_1;
    return;
  fi;

  sudo sed -i 's/#write_enable=YES/write_enable=YES/' $ftp_;
  sudo sed -i 's/#local_enable=YES/local_enable=YES/' $ftp_;
  #sudo sed -i 's/pam_service_name=vsftpd/pam_service_name=ftp/' $ftp_;
  sudo sed -i '$ a seccomp_sandbox=NO' $ftp_;
  
  echo 'root' | sudo tee $ftpU_ > /dev/null;

<<'comment'
  sudo sed -i '$ a '$aUser_ $ftpU_;
  sudo sed -i '$ a daemon' $ftpU_;
  sudo sed -i '$ a bin' $ftpU_;
  sudo sed -i '$ a sys' $ftpU_;
  sudo sed -i '$ a sync' $ftpU_;
  sudo sed -i '$ a games' $ftpU_;
  sudo sed -i '$ a man' $ftpU_;
  sudo sed -i '$ a lp' $ftpU_;
  sudo sed -i '$ a mail' $ftpU_;
  sudo sed -i '$ a news' $ftpU_;      
  sudo sed -i '$ a uucp' $ftpU_;
  sudo sed -i '$ a nobody' $ftpU_;
comment

  echo '# Allow all connections' | sudo tee $hostsA_ > /dev/null;
  sudo sed -i '$ a vsftpd: ALL' $hostsA_;
  sudo sed -i '$ a #' $hostsA_;
  sudo sed -i '$ a # OR you can restrict it to a certain ip' $hostsA_;
  sudo sed -i '$ a # vsftpd: 192.168.0.1' $hostsA_;
  sudo sed -i '$ a #' $hostsA_;
  sudo sed -i '$ a # OR restrict for an IP range' $hostsA_;
  sudo sed -i '$ a vsftpd: 10.0.0.0/255.255.255.0' $hostsA_;
  sudo sed -i '$ a #' $hostsA_;
  sudo sed -i '$ a # OR restrict for an IP match' $hostsA_;
  sudo sed -i '$ a #vsftpd: 192.168.1.' $hostsA_;

  sudo systemctl enable --now vsftpd;
  sudo systemctl restart sshd;


  sudo sed -i '4 i '"$sS1_" $aServerConf_;

  echo "$ftp_ has been configured...";
  sleep 10;
}



# -  - #
# - sshConfiguration - #
function sshConfiguration_(){
  local sshd_=/etc/ssh/sshd_config;
  local msg_0='Configuring '$sshd_' ...' \
        msg_1=$sshd_' already configured...' \
        s1_='' s2_='' \
        t1_='PermitRootLogin yes' \
        t2_='PasswordAuthentication yes' \
        t3_='#PasswordAuthentication yes' \
        r_=0;

  echo "";
  s1_=$(cat $sshd_ | grep "$t1_");
  s2_=$(cat $sshd_ | grep "$t3_");
  if [ "$s1_" == "" ] || [ "$s2_" != "" ]; then echo $msg_0; r_=1; fi;

  if [ "$s1_" == "" ]; then
    sudo sed -i 's/#PermitRootLogin prohibit-password/'"$t1_"'/' $sshd_; fi;
  if [ "$s2_" == "$t3_" ]; then
    sudo sed -i 's/#PasswordAuthentication yes/'"$t2_"'/' $sshd_; fi;

<<'comment'
  awk '{print}' employee.txt
  awk '/manager/ {print}' employee.txt
  awk '{print NR,$0}' employee.txt 

  awk '/'"$t2_"'/ {print NR}' $sshd_ > $tF_;
  awk '/'"$t2_"'/ {print NR,$0}' $sshd_;
  57 PasswordAuthentication yes

  cp $ftpU_ $tF_;
  awk '!seen[$0]++' $tF_ > $tF_.Backup;
  sudo mv $tF_.Backup $ftpU_;
  rm -rf $tF_;
  
  while [ "$Loop_" == 1 ]
  do
    awk '/'"$t2_"'/ {print NR}' $sshd_ > $tF_;
    if [ $(echo $(grep "" -c "$tF_")) -gt 1 ]; then
      nL_=$(echo $(sed '2q;d' $tF_));
      sudo sed -i $nL_'d' $sshd_;
    else
      rm -rf $tF_;
      Loop_=0;
    fi
  done
comment

  if [ "$r_" == "1" ]; then
    DeleteDuplicatedLines_ "$sshd_" "$t1_"  
    DeleteDuplicatedLines_ "$sshd_" "$t2_"
    sudo systemctl restart sshd;
    echo $sshd_" has been configured...";
    sleep 5;
  else
    echo $msg_1
  fi;
  sleep 10;
}



# -  - #
# - Data - #
function Data_(){
  local dD_='Data' \
        dDp_='DataPool' \
        dDoc_=Documents \
        sS1_='' sS2_='' sS3_='' sS4_='';
  local msg_0='Configuring '$dD_' partition...' \
        msg_1=$dD_' partition already configured...' \
        aUser_=$masterUser_ \
        fsF_=/etc/fstab \
        fsTxt_=~/$dDoc_/fstab.txt \
        sD_Configured_="# - "$dD_" configured - #";
  echo "";

  sS1_=$(cat $aServerConf_ | grep "$sD_Configured_")
  if [ "$sS1_" == "$sD_Configured_" ]; then echo $msg_1; sleep 5; return; fi;

  sS2_=$(echo $(cat $fsF_ | grep "$dD_" | grep -v "$dDp_") | grep -oF "$dD_")
  if [ "$sS2_" == "$dD_" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;
  # -  - #
  # - Create Data folder - #
  sudo mkdir -p /$dD_;
  mkdir -p ~/$dDoc_;

  sleep 2;
  echo "";
  echo 'Modifying fstab file...';

  # -  - #
  # - UUID Disk - #
  UUID_=$(echo $(lsblk -f | grep "$dD_" | grep -v "$dDp_") | awk '{print $5;}');

  if [ "$UUID_" == "" ]; then 
     UUID_=$(echo $(lsblk -f | grep "$dD_" | grep -v "$dDp_") | awk '{print $4;}'); fi;

  if [ "$UUID_" != "" ]; then
     rm -rf $fsTxt_;
     cat /etc/fstab > $fsTxt_;
     echo "UUID="$UUID_"   /"$dD_"  ext4    defaults      0       2" >> $fsTxt_;
     sudo mv $fsTxt_ $fsF_;
  fi;

  rm -rf ~/$dDoc_;

  sleep 2;
  echo "";
  echo "Mounting $dD_ partition...";

  # -  - #
  # - Load fstab - #
  sudo mount -av;
  sudo systemctl daemon-reload;

  sudo chown -R $aUser_:$aUser_ /$dD_;
  chmod 775 -R /$dD_;

  # -  - #
  echo 'Creating Documents directories...';
  mkdir -p /$dD_/$dDoc_;
  mkdir -p /$dD_/$dDoc_/Downloads;
  mkdir -p /$dD_/$dDoc_/Music;
  mkdir -p /$dD_/$dDoc_/Pictures;
  mkdir -p /$dD_/$dDoc_/Videos;

  mkdir -p /$dD_/Images;
  mkdir -p /$dD_/Images/Backup;
  mkdir -p /$dD_/Images/Programs;
  mkdir -p /$dD_/Images/VManager;

  sudo sed -i '5 i '"$sD_Configured_" $aServerConf_;
  echo "";
  echo $dD_" partition has been configured...";
  sleep 10;
}



# -  - #
# - Zfs Data - #
function zData_(){
  local zD_='Data' \
        zDp_='DataPool' \
        searchZfs='';
  local msg_0='Configuring Zfs '$zD_' partition...' \
        msg_1='Zfs '$zD_' partition already configured...' \
        aUser_=$masterUser_ dl='';
  echo "";

  sudo modprobe zfs;
  # - Check if zData exists - #
  searchZfs=$(echo $(zpool list | grep "$zD_" | grep -v "$zDp_") | grep -oF "$zD_");
  if [ "$searchZfs" == "Data" ]; then echo $msg_1; sleep 5; return; fi;

  echo 'Processing Zfs '$zD_' partition...';
  UUID=$(echo $(lsblk -f | grep "$zD_" | grep -v "$zDp_") | awk '{print $5;}');

  if [ "$UUID" == "" ]; then
     UUID=$(echo $(lsblk -f | grep "$zD_" | grep -v "$zDp_") | awk '{print $4;}'); fi;

  # - Check if dl is empty - #
  if [ "$UUID" == "" ]; then echo $zD_" partition doesn't exist..."; sleep 5; return; else \
     echo 'Creating Zfs '$zD_' partition...'; fi;

  # -  - #
  #echo 'Creating Zfs '$zD_'...';  
  sudo rm -rf /$zD_;
  sudo zpool create -f $zD_ /dev/disk/by-uuid/$UUID;

  echo 'Enabling compression...';  
  sudo zfs set compression=on $zD_;
  zpool status -v $zD_;

  # -  - #
  echo 'Creating Documents DataSets...';  
  sudo zfs create $zD_/Documents;
  sudo zfs create $zD_/Documents/Downloads;
  sudo zfs create $zD_/Documents/Music;
  sudo zfs create $zD_/Documents/Pictures;
  sudo zfs create $zD_/Documents/Videos;

  # -  - #
  # - Create Images DataSets - #
  zDataImagesDataSets_ $zD_;

  sudo chown -R $aUser_:$aUser_ /$zD_;
  chmod 775 -R /$zD_;

  echo "";
  echo $zD_" zpool status...";
  zpool status -v $zD_;
  read -t 3 -p '';
  echo "";

  echo ""
  echo "Zfs Documents DataSets...";
  zfs list;
  echo "";
  read -t 3 -p '';
  echo "";
  
  echo "";
  echo 'Zfs '$zD_" has been configured...";
  sleep 10;
}



# -  - #
# - Create Images DataSets - #
function zDataImagesDataSets_(){
  local zD_=$1 \
        vda_='vda' \
        sdb_='sdb' sdc_='sdc' \
        vdb_='vdb' vdc_='vdc' \
        aUser_=$masterUser_;
  echo "";

  vdaT='vda'; sdbT='sdb'; sdcT='sdc'
  vdbT='vdb'; vdcT='vdc'

  vdaT=$(lsblk | grep -oF $vda_' ');   # vda_
  sdbT=$(lsblk | grep -oF $sdb_' ');   # sdb_
  sdcT=$(lsblk | grep -oF $sdc_' ');   # sdc_
  vdbT=$(lsblk | grep -oF $vdb_' ');   # vdb_
  vdcT=$(lsblk | grep -oF $vdc_' ');   # vdc_

  if [[ "$sdbT" == "" && "$sdcT" == "" ]]; then
     sdb_=''; sdc_='';
     if [[ "$vdbT" == "" && "$vdcT" == "" ]]; then
       vdb_=''; vdc_='';
       echo '';
       echo 'Creating Images DataSets...';
       sudo zfs create $zD_/Images;
       sudo zfs create $zD_/Images/Backup;
       sudo zfs create $zD_/Images/Programs;
       sudo zfs create $zD_/Images/VManager;
       echo "";
       return;
     fi;
  fi;
}



# -  - #
# - Zfs DataPool - #
function zDataPool_(){
  local zD_='DataPool' \
        sda_='sda' sdb_='sdb' sdc_='sdc' \
        vda_='vda' vdb_='vdb' vdc_='vdc' \
        hdd_1='' hdd_2='' \
        searchZfs='';
  local msg_0='Configuring Zfs '$zD_' partition...' \
        msg_1='Zfs '$zD_' partition already configured...' \
        msg_3='There were no additional HDDs to create Zfs '$zD_' partition...' \
        aUser_=$masterUser_ usb_='' \
        nDisks_=0;
  echo "";

  sdaT=""; sdbT=""; sdcT="";
  vdaT=""; vdbT=""; vdcT="";

  # echo '';
  # echo $sda_ $sdb_ $sdc_ $vda_ $vdb_ $vdc_;

  sdaT=$(lsblk | grep -oF $sda_' ');   # sda_
  sdbT=$(lsblk | grep -oF $sdb_' ');   # sdb_
  sdcT=$(lsblk | grep -oF $sdc_' ');   # sdc_

  vdaT=$(lsblk | grep -oF $vda_' ');   # vda_
  vdbT=$(lsblk | grep -oF $vdb_' ');   # vdb_
  vdcT=$(lsblk | grep -oF $vdc_' ');   # vdc_

  if [[ "$sdbT" == "" && "$sdcT" == "" ]]; then
     sda_=''; sdb_=''; sdc_='';
     if [[ "$vdbT" == "" && "$vdcT" == "" ]]; then
       vda_=''; vdb_=''; vdc_='';
       echo $msg_3;
       sleep 5;
       return;
     fi;
  fi;



  # -  - #
  # - Capture sdv or vdb - #
  if [[ "$sdbT" != "" || "$sdcT" != "" ]]; then
     hdd_1=$(echo $(if [ "$sdbT" != "" ]; then echo "$sdb_"; else echo ""; fi;))
     hdd_2=$(echo $(if [ "$sdcT" != "" ]; then echo "$sdc_"; else echo ""; fi;))
  elif [[ "$vdbT" != "" || "$vdcT" != "" ]]; then
     hdd_1=$(echo $(if [ "$vdbT" != "" ]; then echo "$vdb_"; else echo ""; fi;))
     hdd_2=$(echo $(if [ "$vdcT" != "" ]; then echo "$vdc_"; else echo ""; fi;))
  fi;

  #echo $sda_ ' ' $sdb_ ' ' $sdc_  ' ' $vda_ ' ' $vdb_ ' ' $vdc_;
  #echo $hdd_1 ' ' $hdd_2;
  #exit

  # -  - #
  # - No sdv or vdb to create ZFS zDataPool - #
  if [[ "$hdd_1" == "" && "$hdd_2" == "" ]]; then echo $msg_3' empty'; sleep 5; return; fi;


  # -  - #
  # - Check for USB's disks - #
  usb_=$(devDiskById_ $hdd_1 $hdd_2);
  if [[ "$usb_" == "0"  ]]; then echo $msg_3" usb's"; sleep 5; return; fi;


  # -  - #
  # - Check if zDataPool exists - #
  sudo modprobe zfs;
  searchZfs=$(zpool list | grep "$zD_")
  if [ "$searchZfs" != "" ]; then echo $msg_1; sleep 5; return; fi;


  # -  - #
  # - Create ZFS zDataPool - #
  echo 'Creating Zfs '$zD_' partition...';
  sudo rm -rf /$zD_;



<<'comment'

# -  - #
# - Create ZFS DataPool - #

# -  - #
# - Create ZFS DataPool mirror - #
sudo zpool create -f DataPool mirror \
                              /dev/vdb /dev/vdc;
/dev/sdb        10Tb
/dev/sdc        10Tb
Available Hdd = 10Tb

# -  - #
# - Create ZFS DataPool strips pools - #
sudo zpool create -f uServerPool /dev/sdb /dev/sdc;
/dev/sdb        10Tb
/dev/sdc        10Tb
Available Hdd = 20Tb

comment



  if [[ "$hdd_1" != "" && "$hdd_2" == "" ]]; then
     sudo zpool create -f $zD_ /dev/$hdd_1;
  elif [[ "$hdd_1" == "" && "$hdd_2" != "" ]]; then
     sudo zpool create -f $zD_ /dev/$hdd_2;
  elif [[ "$hdd_1" != "" && "$hdd_2" != "" ]]; then
     if [ "$zMirror_" == "Yes" ]; then
        sudo zpool create -f $zD_ mirror \
                                  /dev/$hdd_1 /dev/$hdd_2;
     else
        sudo zpool create -f $zD_ /dev/$hdd_1 /dev/$hdd_2;
     fi;
  fi;



  echo 'Enabling compression...';  
  sudo zfs set compression=on $zD_;
  zpool status -v $zD_;

  echo '';
  echo 'Creating Images DataSets...';
  sudo zfs create $zD_/Images;
  sudo zfs create $zD_/Images/Backup;
  sudo zfs create $zD_/Images/Programs;
  sudo zfs create $zD_/Images/VManager;

  sudo chown -R $aUser_:$aUser_ /$zD_;
  sudo chmod -R 775 /$zD_;

  echo "";
  echo $zD_" zpool status...";
  zpool status -v $zD_;
  read -t 3 -p '';
  echo "";

  echo ""
  echo "Zfs Images DataSets...";
  zfs list;
  read -t 3 -p '';
  echo "";

  echo ""
  echo "Zpool list...";
  zpool list;
  read -t 3 -p '';

  echo "";
  echo 'Zfs '$zD_" partition has been configured...";
  echo "";
  sleep 10;
}



# -  - #
# - devDiskById_ $hdd_1 $hdd_2 - #
function devDiskById_(){
  local D1_=$1 D2_=$2 \
        devDiskById='' tmpF_=~/tmp.txt \
        USBL1_='' USBL2_='' uU_='USB' lU_='usb' \
        usbL_='' usb1_='' usb2_='' USB1_='' USB2_='';
  
  # D1_='sdb' D2_='sdc';
  ls -lah /dev/disk/by-id > $tmpF_;
  USBL1_=$(echo $(cat $tmpF_ | grep $D1_));
  USBL2_=$(echo $(cat $tmpF_ | grep $D2_));
  rm -r $tmpF_;

  USB1_=$(echo $USBL1_ | grep -oF $uU_);
  usb1_=$(echo $USBL1_ | grep -oF $lU_);
  USB2_=$(echo $USBL2_ | grep -oF $uU_);
  usb2_=$(echo $USBL2_ | grep -oF $lU_);
  
  if [[ "$USB1_" == "$uU_" || "$USB2_" == "$uU_" || \
        "$usb1_" == "$lU_" || "$usb2_" == "$lU_" ]]; then
       echo 0;
  else echo 1; fi
}



# -  - #
# - WebServer - #
function WebServer_(){
  local wS_='WebServer' \
        zData_='Data' \
        zDataPool_='DataPool' \
        searchZfs='' \
        apacheF_=/etc/httpd/conf/httpd.conf \
        sDWS_='' sNws_='' sSed_='' \
        sS1_='' sS2_='' sS3_='' sS4_='' \
        aOFolder_='"/srv/http"' \
        aNFolder_='';
  local msg_0='Configuring '$wS_' ...' \
        msg_1=$wS_' already configured...' \
        sWSConfigured_="# - "$wS_" configured - #";
  echo "";

  sS1_=$(cat $aServerConf_ | grep "$sWSConfigured_")
  if [ "$sS1_" == "$sWSConfigured_" ]; then echo $msg_1; sleep 5; return; fi;

  if [ "$zPool_" == "Yes" ]; then
     sudo modprobe zfs;
     searchZfs=$(zpool list | grep "$zDataPool_");
     if [ "$searchZfs" == "" ]; then
       searchZfs=$(zpool list | grep "$zData_");
       if [ "$searchZfs" == "" ]; then
         echo 'There is no Zfs Data partition to configure WebServer...';
         sleep 5;
         return;
       else
         sDWS_=$zData_;
       fi;
     else
       sDWS_=$zDataPool_;
     fi;
  else
     sDWS_=$zData_;
  fi;

  echo $msg_0;

  echo '';
  echo "Creating $wS_ folders...";
  sNws_='/'$sDWS_'/'$wS_;
  mkdir -p $sNws_ \
           $sNws_/Test1 \
           $sNws_/Test2;

<<'comment'
   Original: DocumentRoot "/svr/httpd"
        New: DocumentRoot "/Data/WebServer"
         Or: DocumentRoot "/DataPool/WebServer"
   Original: <Directory "/svr/httpd">
        New: <Directory "/Data/WebServer">
         Or: <Directory "/DataPool/WebServer">
comment

  echo 'Configuring apache...';

  sSed_='s/DocumentRoot "\/srv\/http"/DocumentRoot "\/'$sDWS_'\/'$wS_'"/g'
  sudo sed -i "$sSed_" $apacheF_;

  sSed_='s/<Directory "\/srv\/http">/<Directory "\/'$sDWS_'\/'$wS_'">/g'
  sudo sed -i "$sSed_" $apacheF_;

  sudo systemctl restart httpd;
  ln -s $sNws_ ~/WebServer;

  apacheIndexF_ $sDWS_;
  phpInfoF_ $sDWS_;

  sudo sed -i '6 i '"$sWSConfigured_" $aServerConf_;
  echo '';
  echo $wS_" has been configured...";
  sleep 10;
}



# -  - #
# - MySQL - #
function MySQL_(){
  local MySQL_='mysql' \
        mysqlConf_=/etc/my.cnf.d/server.cnf;
  local msg_0='Configuring '$MySQL_' ...' \
        msg_1=$MySQL_' already configured...' \
        mUser_=$masterUser_ \
        mPass_=$masterPasswd_ \
        aUser_=$adminUser_ \
        aPass_=$adminPasswd_ \
        sS1_='' sS2_='' sS3_='' sS4_='';
  echo "";

<< comment
  rootPasswd_='Administrator2';
  masterUser_='is_derayo';
  masterPasswd_=$rootPasswd_;
  adminUser_='admin';
  adminPasswd_='Admin22';
comment

  sS1_='bind-address='$aServerIP_                  # bind-address=192.168.1.25
  sS2_=$(echo $(cat $mysqlConf_ | grep "$sS1_"));  # find sS1_
  sS1_=$(echo "$sS1_" | sed 's/ //g' )             # remove spaces
  sS2_=$(echo "$sS2_" | sed 's/ //g' )

  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;

  echo "";
  echo "Creating $MySQL_ users...";
  echo "Press ENTER for MySQL password...";
  echo "Use root password for SUDO...";

<<'comment'
  printf "\n\n" | \
  (echo $smbGuest_; sleep 1; echo $smbGuest_ ) | \
  (echo -ne '\n \n'; sleep 1; echo -ne '\n \n' ) | \
  (echo ''; echo 'Y'; echo 'N'; echo 'Y'; echo 'N'; echo 'N'; echo 'Y' ) | sudo mysql_secure_installation;

  CREATE USER 'bob'@'localhost' 
     IDENTIFIED VIA mysql_native_password USING PASSWORD('pwd') 
     OR unix_socket;
comment

  (echo ''; echo 'Y'; echo 'N'; echo 'Y'; echo 'N'; echo 'Y'; echo 'Y' ) | sudo mariadb_secure_installation;

  sudo mysql -uroot -p mysql \
             -e "SELECT host,user,plugin FROM user ORDER BY user;";

<<'comment'
  sudo mysql -uroot -p mysql \
             -e "use mysql;\
                 ALTER USER 'is_derayo'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('$rootPasswd_'); \
                 ALTER USER 'is_derayo'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('$rootPasswd_');";
comment

  sudo mysql -uroot -p mysql \
             -e "use mysql;\
                 CREATE USER 'root'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('$rootPasswd_');\
                 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;\
                 ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('$rootPasswd_');";


  sudo mysql -uroot -p$rootPasswd_ mysql \
             -e "SELECT host,user,plugin FROM user ORDER BY user;";

  sudo mysql -uroot -p$rootPasswd_ mysql \
             -e "CREATE USER '$mUser_'@'localhost' IDENTIFIED BY '$mPass_';\
                 GRANT ALL PRIVILEGES ON *.* TO '$mUser_'@'localhost' WITH GRANT OPTION;\
                 CREATE USER '$mUser_'@'%' IDENTIFIED BY '$mPass_';\
                 GRANT ALL PRIVILEGES ON *.* TO '$mUser_'@'%' WITH GRANT OPTION;\
                 FLUSH PRIVILEGES;";

  sudo mysql -uroot -p$rootPasswd_ mysql \
             -e "CREATE USER '$aUser_'@'localhost' IDENTIFIED BY '$aPass_';\
                 GRANT ALL PRIVILEGES ON *.* TO '$aUser_'@'localhost' WITH GRANT OPTION;\
                 CREATE USER '$aUser_'@'%' IDENTIFIED BY '$aPass_';\
                 GRANT ALL PRIVILEGES ON *.* TO '$aUser_'@'%' WITH GRANT OPTION;\
                 FLUSH PRIVILEGES;";

  sudo mysql -uroot -p$rootPasswd_ mysql \
             -e "CREATE USER '$marioUser_'@'localhost' IDENTIFIED BY '$marioPasswd_';\
                 GRANT ALL PRIVILEGES ON *.* TO '$marioUser_'@'localhost' WITH GRANT OPTION;\
                 CREATE USER '$marioUser_'@'%' IDENTIFIED BY '$marioPasswd_';\
                 GRANT ALL PRIVILEGES ON *.* TO '$marioUser_'@'%' WITH GRANT OPTION;\
                 FLUSH PRIVILEGES;";

  sudo mysql -uroot -p$rootPasswd_ mysql \
             -e "SELECT host,user,plugin FROM user ORDER BY user;";

  # mysqlConf_=/etc/my.cnf.d/server.cnf;
  echo "Configuring $MySQL_ config files...";
 #sudo sed -i 's/bind-address		= 127.0.0.1/bind-address            = '"$aServerIP_"'/' $mysqlConf_;
  sudo sed -i 's/#bind-address=0.0.0.0/bind-address='"$aServerIP_"'/g' $mysqlConf_;
  sudo systemctl restart mysql;
  sudo systemctl status mysql;

  echo "";
  echo $MySQL_" has been configured...";
  sleep 10;
}



# -  - #
# - Move MySQL - #
function MoveMySQL_(){
  local mS_='mysql' \
        mysqlConf_=/etc/my.cnf \
        mysqlDir_=/var/lib/mysql;
  local msg_0='Moving '$mS_' database...' \
        msg_1=$mS_' database already moved...' \
        msg_3=$mS_' is not installed in this system...' \
        sS1_='' sS2_='', sData_='/Data';
  local phpIniF_=/etc/php/php.ini \
        phpmyadminConf_=/etc/httpd/conf/extra/phpmyadmin.conf \
        httpdConf_=/etc/httpd/conf/httpd.conf;
  echo '';

  sS1_=$(echo $(which mysql));     # mysql directory (if installed)
  if [ "$sS1_" == "" ]; then echo $msg_3; sleep 5; return; fi;
  if [ ! -d "$sData_" ]; then echo $sData_' directory does not exist...'; sleep 5; return; fi;

  sS1_='datadir='"$sData_"'/mysql'
  sS2_=$(echo $(cat $mysqlConf_ | grep "$sS1_"));  # find sS1_
  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;


<<'comment'
  rootPasswd_='Administrator2';
comment

  echo "";
  echo $mS_' data directory...';
  sudo mysql -uroot -p$rootPasswd_ mysql \
             -e "SELECT @@datadir;";

  echo "";
  echo 'Stopping '$mS_' database...';
  sudo systemctl stop mysql;
  #sudo systemctl status mysql;

  echo "";
  echo "Rsync $mS_ database to $sData_ directory...";
  sudo rsync -av /var/lib/mysql $sData_;

  echo "";
  echo "Backing up $mS_ original database...";
  sudo mv /var/lib/mysql /var/lib/mysql.bak;

  echo "Changing $mS_ database new direction...";
  sS1_='\[client-server]';
  nL_=$(cat -n $mysqlConf_ | grep "$sS1_" | awk '{print $1}');  # Returns line number

  #sudo sed -e $nL_'d' -i $mysqlConf_;                          # Delete line number
  sudo sed -e '/'"$sS1_"'/d' -i $mysqlConf_;                    # Searching & deleting

<<'comment'
  sed -i '1d' file
  sudo sed -i -e '/"$sS1_"/q' $mysqlConf_;
comment

  #nL_=$(echo $(($nL_-1)));
  # -  - #
  # - Configuring mysqlConf_ file - #
  sudo sed $nL_' a [mysqld]:' -i $mysqlConf_; nL_=$(echo $(($nL_+1)));
  sudo sed $nL_' a datadir=/Data/mysql' -i $mysqlConf_; nL_=$(echo $(($nL_+1)));
  sudo sed $nL_' a socket=/Data/mysql/mysql.sock' -i $mysqlConf_; nL_=$(echo $(($nL_+1)));
  sudo sed $nL_' a\ ' -i $mysqlConf_; nL_=$(echo $(($nL_+1)));
  sudo sed $nL_' a [client]:' -i $mysqlConf_; nL_=$(echo $(($nL_+1)));
  sudo sed $nL_' a port=3306' -i $mysqlConf_; nL_=$(echo $(($nL_+1)));
  sudo sed $nL_' a socket=/Data/mysql/mysql.sock' -i $mysqlConf_; nL_=$(echo $(($nL_+1)));
  sudo sed $nL_' a\ ' -i $mysqlConf_; nL_=$(echo $(($nL_+1)));

  echo "Restart $mS_ database...";
  sudo systemctl restart mysql;

  echo $mS_' new location...';
  sudo mysql -uroot -p$rootPasswd_ mysql \
             -e "SELECT @@datadir;";

  echo 'Cleaning up...';
  sudo rm -rf /var/lib/mysql.bak;
  sudo rm -rf $mysqlDir_;
  sudo ln -s $sData_'/mysql' $mysqlDir_;

<<'comment'
  # -  - #
  # - Documentation - #
 https://www.youtube.com/watch?v=rqNhQ-M5sT4
comment

  echo '';
  echo "Configuring mysql-phpmyadmin...";
  sudo sed -i 's/;extension=bz2/extension=bz2/' $phpIniF_;
  sudo sed -i 's/;extension=mysqli/extension=mysqli/' $phpIniF_;
  sudo sed -i 's/;extension=pdo_mysql/extension=pdo_mysql/' $phpIniF_;
  sS_='\/'
  rR_='\\'
  sSed_='s/'"$sS_"'/'"$rR_"'&/g'
  nTZ_=$(echo "$timeZone_" | sed "$sSed_");
  sudo sed -i 's/;date.timezone =/date.timezone = '"$nTZ_"'/' $phpIniF_;
  sudo sed -i 's/display_errors = Off/display_errors = On/' $phpIniF_;

  echo 'Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"' | sudo tee $phpmyadminConf_ > /dev/null;
  sudo sed -i '$ a <Directory "/usr/share/webapps/phpMyAdmin">' $phpmyadminConf_;
  sudo sed -i '$ a \  DirectoryIndex index.php' $phpmyadminConf_;
  sudo sed -i '$ a \  AllowOverride All' $phpmyadminConf_;
  sudo sed -i '$ a \  Options FollowSymlinks' $phpmyadminConf_;
  sudo sed -i '$ a \  Require all granted' $phpmyadminConf_;
  sudo sed -i '$ a </Directory>' $phpmyadminConf_;

  sudo sed -i '$ a Include conf/extra/phpmyadmin.conf' $httpdConf_;
  sudo systemctl restart mysql;
  sudo systemctl restart httpd;
  sudo systemctl status mysql;

  echo "";
  echo $mS_" database has been moved...";
  sleep 10;
}



# -  - #
# - Data directories - #
function DataDirectories_(){
  local DDir_='Data directories' \
        configF_=~/.config/user-dirs.dirs \
        conf_='# - Configured - #';
  local msg_0='Configuring '$DDir_' ...' \
        msg_1=$DDir_' already configured...';
  local h_='home' \
        d_='Data' \
        doc_='Documents' \
        dow_='Downloads' \
        mus_='Music' \
        pic_='Pictures' \
        vid_='Videos' \
        aUser_=$USER \
        sS1_='' sS2_='' searchZfs='';
  local zD_=$d_;
  echo '';

  sS1_=$(echo $(cat $configF_ | grep -oF "$conf_" ));
  if [ "$sS1_" == "$conf_" ]; then echo $msg_1; return; fi;

  sS1_='/'$d_;    # /Data
  if [ ! -d "$sS1_" ]; then \
     echo '/Data directoty does not exist in the system...'; return; fi;



  if [ "$zPool_" == "Yes" ]; then
    sudo modprobe zfs;
    searchZfs=$(zpool list | grep "$zD_");
    if [ "$searchZfs" == "" ]; then \
        echo 'Zfs '$zD_' pool is not mounted in the system...'; sleep 5; return; fi;
  fi;



  echo $msg_0;
  sudo chown $aUser_:$aUser_ /$d_;

  mkdir -p /$d_/$doc_;
  chmod -R 775 /$d_;

  mkdir -p /$d_/$doc_/$dow_;
  mkdir -p /$d_/$doc_/$mus_;
  mkdir -p /$d_/$doc_/$pic_;
  mkdir -p /$d_/$doc_/$vid_;
  mkdir -p ~/.config;

  sudo rm -rf /$h_/$aUser_/$doc_;
  sudo rm -rf /$h_/$aUser_/$dow_;
  sudo rm -rf /$h_/$aUser_/$mus_;
  sudo rm -rf /$h_/$aUser_/$pic_;
  sudo rm -rf /$h_/$aUser_/$vid_;

  ln -s /$d_/$doc_ /$h_/$aUser_/$doc_;
  ln -s /$d_/$doc_/$dow_ /$h_/$aUser_/$dow_;
  ln -s /$d_/$doc_/$mus_ /$h_/$aUser_/$mus_;
  ln -s /$d_/$doc_/$pic_ /$h_/$aUser_/$pic_;
  ln -s /$d_/$doc_/$vid_ /$h_/$aUser_/$vid_;

  mkdir -p /$d_/$doc_/ToShare-FullAccess;
  mkdir -p /$d_/$doc_/ToShare-JustRead;

  chmod 777 /$d_/$doc_/ToShare-FullAccess;
  chmod 777 /$d_/$doc_/ToShare-JustRead;

  echo "Deleting user-dirs.txt file";
  rm -rf $configF_;
  rm -rf ~/user-dirs.txt;

  echo "Creating user-dirs.txt file"
cat <<EOT>> ~/user-dirs.txt;

# -  - #
# - Configured - #
# - vim ~/.config/user-dirs.dirs - #
# -  - #

XDG_DOCUMENTS_DIR="/$d_/$doc_"
XDG_DOWNLOAD_DIR="/$d_/$doc_/$dow_"
XDG_MUSIC_DIR="/$d_/$doc_/$mus_"
XDG_PICTURES_DIR="/$d_/$doc_/$pic_"
XDG_VIDEOS_DIR="/$d_/$doc_/$vid_"

EOT

  sed -i '6 i XDG_DESKTOP_DIR="$HOME/Desktop"' ~/user-dirs.txt;
  sed -i '7 i XDG_TEMPLATES_DIR="$HOME/Templates"' ~/user-dirs.txt;
  sed -i '8 i XDG_PUBLICSHARE_DIR="$HOME/Public"' ~/user-dirs.txt;

  echo "Copying user-dirs.dirs file to ~/.config folder";
  cp ~/user-dirs.txt $configF_;
  rm -rf ~/user-dirs.txt;

  echo "";
  echo $DDir_" have been configured...";
  sleep 10;
}



# -  - #
# - samba - #
function samba_(){
  local sambaF_=/etc/samba/smb.conf \
        samba_='samba' \
        smbGuest_='smbguest' \
        groupF_=/etc/group \
        passwdF_=/etc/passwd;
  local msg_0='Configuring '$samba_' ...' \
        msg_1=$samba_' already configured...' \
        sS1_='' sS2_='' sS3_='' sS4_='';
  echo '';
  
  sS1_=$smbGuest_                                     # smbguest
  sS2_=$(echo $(cat $groupF_ | grep -oF "$sS1_" ));   # find smbguest
  sS3_=$(echo "$sS2_" | awk '{print $1;}');           # get first occurrency
 #sS4_=$( echo "$(echo $(cat $groupF_ | grep -oF "$sS1_" ))" | awk '{print $1;}' );  # same result from above 

  if [ "$sS1_" == "$sS3_" ]; then echo $msg_1; return; else echo $msg_0; fi

  echo "Create sambashare group...";
  sudo groupadd -r sambashare;

  echo "Create samba user...";
  sudo useradd -r -s /usr/bin/nologin $smbGuest_;

  echo "Samba user password...";
  (echo $smbGuest_; sleep 1; echo $smbGuest_ ) | sudo passwd $smbGuest_;

  echo "Add smbguest user to sambashare group...";
  sudo usermod -aG sambashare $smbGuest_;

  echo "Add administrator user to sambashare group...";
  sudo usermod -aG sambashare $adminUser_;

  echo "Enable smbguest user in samba...";
  sudo gpasswd sambashare -a $smbGuest_;

  echo "Enable administrator user in samba...";
  sudo gpasswd sambashare -a $adminUser_;

  echo "Create samba user password on samba...";
  #sudo pdbedit -a -u smbguest;
  (echo $smbGuest_; sleep 1; echo $smbGuest_ ) | sudo pdbedit -a -u $smbGuest_;

  echo "Create administrator user password on samba...";
  #sudo pdbedit -a -u is_derayo;
  (echo $adminPasswd_; sleep 1; echo $adminPasswd_ ) | sudo pdbedit -a -u $adminUser_;
  
  cat $groupF_ | grep $smbGuest_;
  cat $groupF_ | grep $adminUser_;

  cat $passwdF_ | grep $smbGuest_;
  cat $passwdF_ | grep $adminUser_;
  
  echo "Generating smb.conf..."
  rm -rf ~/smb.conf;

sudo cat <<EOT>> ~/smb.conf;


# -  - #
# - Samba configuration file location - #
# - sudo vim /etc/samba/smb.conf - #
# -  - #

[global]
   workgroup = L_IS
   wins support = yes
   security = user
   server string = Samba Server
   server role = standalone server
   log file = /var/log/samba/log.%m
   max log size = 50
   guest account = nobody
   map to guest = Bad Password

[ToShare-FullAccess]
    comment = ToShare-FullAccess to everybody in the net
    path = /Data/Documents/ToShare-FullAccess
    writeable = yes
    browseable = yes
    guest ok = no
    create mask = 0777
    valid users = $adminUser_, $smbGuest_

[ToShare-JustRead]
    comment = ToShare-JustRead to everybody in the net
    path = /Data/Documents/ToShare-JustRead
    writeable = no
    browseable = yes
    guest ok = no
    create mask = 0755
    valid users = $adminUser_, $smbGuest_

EOT

  sudo cp -p ~/smb.conf $sambaF_;
  rm -rf ~/smb.conf;

  echo "Restart samba service...";
  sudo systemctl enable --now smb nmb;
  sudo systemctl start smb.service nmb.service

  echo $samba_" has been configured...";
}



# -  - #
# - sample - #
function PostgreSQL_(){
  local pSQL_='PostgreSQL' \
        pg_hba_f=/Data/postgres/data/pg_hba.conf \
        postgresql_f=/Data/postgres/data/postgresql.conf \
        pg_hba_t=~/pg_hba.conf \
        postgresql_t=~/postgresql.conf;
  local msg_0='Configuring '$pSQL_' ...' \
        msg_1=$pSQL_' already configured...' \
        aSip_=$aServerIP_ \
        zData_='/Data' \
        sS1_='# - '"$pSQL_"' configured - #' sS2_='' sS3_='' sS4_='' \
        dPsql_='/Data/postgres/data' msg_3='Setting up PostgreSQL on ';
  local phpIniF_=/etc/php/php.ini \
        phppgadminConf_=/etc/httpd/conf/extra/phppgadmin.conf \
        httpdConf_=/etc/httpd/conf/httpd.conf \
        configIncPhp_=/etc/webapps/phppgadmin/config.inc.php \
        adodbIni_=/usr/share/webapps/phppgadmin/libraries/adodb/adodb.inc.php \
        msg4_='';
  echo '';
  # aServerConf_=/etc/aServer.Conf
  sS2_=$(echo $(cat $aServerConf_ | grep "$sS1_" ));
  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; sleep 5; return; fi;

  echo $msg_0;
  # sudo apt install postgresql-16 postgresql-client-16 phppgadmin -y;

  echo 'postgres:'$psqlPasswd_ | sudo chpasswd;
  mkdir -p $dPsql_;



  sudo chown -R postgres:postgres $zData_'/postgres/';
  sudo -u postgres initdb -D $dPsql_;
  sudo rm -rf /var/lib/postgres/data;
  sudo ln -s /Data/postgres/data /var/lib/postgres/;
  sudo systemctl enable postgresql;
  sudo systemctl start postgresql;



<<'comment'
  # - On client - #
  sudo apt install postgresql-client-16 -y;

  # - On Server - #
  sudo apt install postgresql-16 postgresql-client-16 phppgadmin -y;
  
  psql -U postgres -d postgres -h isdevelopment.us \
                   -c "CREATE ROLE is_derayo WITH LOGIN PASSWORD 'Administrator2'";

  psql -U postgres -d postgres -h isdevelopment.us -c "ALTER USER is_derayo WITH PASSWORD 'Administrator2';";
  psql -U postgres -d postgres -h isdevelopment.us -c "DROP ROLE is_derayo;";

  psql -U postgres -d postgres -h isdevelopment.us -c "ALTER USER is_derayo WITH SUPERUSER;";
  psql -U postgres -d postgres -h isdevelopment.us -c "ALTER USER is_derayo WITH NOSUPERUSER;";

  psql -U postgres -d postgres -h isdevelopment.us \
                   -c "ALTER USER is_derayo WITH SUPERUSER CREATEROLE CREATEDB REPLICATION BYPASSRLS;";

  psql -U postgres -d postgres -h isdevelopment.us \
                   -c "GRANT ALL PRIVILEGES ON DATABASE postgres TO is_derayo;";
  psql -U postgres -d postgres -h isdevelopment.us \
                   -c "GRANT ALL PRIVILEGES ON DATABASE IntegritySystems TO is_derayo;";

  sudo -u postgres psql postgres -h 192.168.122.101;
  sudo -u postgres bash -c "psql -c \"CREATE USER vagrant WITH PASSWORD 'vagrant';\""

  "ALTER USER postgres WITH PASSWORD 'Administrator2';"
  psql -U postgres -d postgres -c "CREATE USER juan WITH PASSWORD 'juanrayo';"

  psql -U postgres -d postgres -h $uS_ip_ -c \
          "ALTER USER postgres WITH PASSWORD '"$adminPasswd_"';";
  
  psql -U postgres –p 5432 -d dzone \
          -c "CREATE TABLE test(some_id serial PRIMARY KEY, some_text text);"

  sudo -u postgres psql -d postgres;
  sudo -u postgres psql -d postgres -h 10.0.0.150;
  sudo -u postgres psql -d postgres -h 192.168.122.101;
  psql -U postgres -d postgres -h www.isdevelopment.us;
  sudo -u is_derayo psql -d postgres -h 192.168.1.100;
  sudo -u is_derayo psql -d postgres -h 192.168.122.101;
  
  systemctl status postgresql@14-main.service;
  sudo -u postgres bash -c "psql -c \"ALTER USER postgres WITH PASSWORD 'Admin2';\""
  sudo -u postgres bash -c "psql -c \"ALTER USER postgres WITH PASSWORD '"$adminPasswd_"';\""

  sudo -u postgres bash -c "psql -c \"CREATE ROLE juan WITH LOGIN PASSWORD 'jrayo';\"";
  sudo -u postgres bash -c "psql -c \"DROP ROLE juan;\"";
  sudo -u postgres psql -c "ALTER USER juan WITH PASSWORD 'jrivas';"
  
  # - Asks passwd - #
  su -c "psql -c \"CREATE ROLE juan WITH LOGIN PASSWORD 'jrayo';\"" postgres;
  su -c "psql -c \"DROP ROLE juan;\"" postgres;

  adminPasswd_=$rootPasswd_
  adminUser_='is_derayo'
  sudo -u is_derayo psql -d postgres -h 192.168.122.101;
  su -c "psql -c \"CREATE ROLE my_user WITH LOGIN PASSWORD 'my_password' \"" postgres
comment



  # -  - #
  # - Change pg_hba.conf - #
  nP_=$(echo $aSip_ | awk -F"." '{print length($0)-length($NF)}');
  cC_=$(echo ${aSip_:0:$nP_})'0/24          md5'
  cSearch_='host    all             all             127.0.0.1\/32';
  cIns_='host    all             all             '$cC_;

  # pg_hba_f=/Data/postgres/data/pg_hba.conf;
  # masterUser_=is_derayo;

  sudo cp $pg_hba_f $pg_hba_t;
  sudo chown $masterUser_':'$masterUser_ $pg_hba_t;
  ln=$(sed -n '/'"$cSearch_"'/{=}' $pg_hba_t);
  ln=$(echo "$(($ln + 1))");
  sudo sed -i $ln' i '"$cIns_"'' $pg_hba_f;
  rm -rf $pg_hba_t;

  # -  - #
  # - Change postgresql.conf - #
  # postgresql_f=/Data/postgres/data/postgresql.conf;
  sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" $postgresql_f;

  echo "Restarting postgresql...";
  sudo systemctl restart postgresql;

<<'comment'
  echo "Check status...";
  systemctl status postgresql.service;
  read -t 3 -p '';
comment



  echo "Create postgres passwd...";

<< comment
  rootPasswd_='Administrator2';
  masterUser_='is_derayo';
  masterPasswd_=$rootPasswd_;
  adminUser_='admin';
  adminPasswd_='Admin22';
  psqlPasswd_=$rootPasswd_
comment


  sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '"$psqlPasswd_"';";

  echo "Creating admin user...";
  sudo -u postgres psql -c \
          "CREATE ROLE "$adminUser_" WITH LOGIN PASSWORD '"$adminPasswd_"' SUPERUSER CREATEROLE CREATEDB REPLICATION BYPASSRLS;";
  #sudo -u postgres psql -c "ALTER USER "$adminUser_" WITH PASSWORD '"$adminPasswd_"';";
  
  sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE postgres TO "$adminUser_";";
  sudo -u postgres psql -c "GRANT ALL ON ALL TABLES IN SCHEMA public TO "$adminUser_";";

  echo "Creating master user...";
  sudo -u postgres psql -c \
          "CREATE ROLE "$masterUser_" WITH LOGIN PASSWORD '"$masterPasswd_"' SUPERUSER CREATEROLE CREATEDB REPLICATION BYPASSRLS;";
  #sudo -u postgres psql -c "ALTER USER "$masterUser_" WITH PASSWORD '"$masterPasswd_"';";
  
  sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE postgres TO "$masterUser_";";
  sudo -u postgres psql -c "GRANT ALL ON ALL TABLES IN SCHEMA public TO "$masterUser_";";



  # -  - #
  # - phppgadmin - #
  #  phpIniF_=/etc/php/php.ini;
  echo "Configuring psql-phppgadmin...";
  sudo sed -i 's/;extension=pgsql/extension=pgsql/' $phpIniF_;
  sudo sed -i 's/;extension=pdo_pgsql/extension=pdo_pgsql/' $phpIniF_;

  echo 'Configuring files...';

  # https://wiki.archlinux.org/title/PhpPgAdmin
  # configIncPhp_=/etc/webapps/phppgadmin/config.inc.php;
  sudo sed -i "s/$conf\['servers'\]\[0\]\['host'\] = '';/$conf\['servers'\]\[0\]\['host'\] = 'localhost';/"  $configIncPhp_;
  sudo sed -i "s/$conf\['extra_login_security'\] = true;/$conf\['extra_login_security'\] = false;/"  $configIncPhp_;

  # phppgadminConf_=/etc/httpd/conf/extra/phppgadmin.conf
  echo 'Alias /phppgadmin "/usr/share/webapps/phppgadmin"' | sudo tee $phppgadminConf_ > /dev/null;
  sudo sed -i '$ a <Directory "/usr/share/webapps/phppgadmin">' $phppgadminConf_;
  sudo sed -i '$ a \  DirectoryIndex index.php' $phppgadminConf_;
  sudo sed -i '$ a \  AllowOverride All' $phppgadminConf_;
  sudo sed -i '$ a \  Options FollowSymlinks' $phppgadminConf_;
  sudo sed -i '$ a \  Require all granted' $phppgadminConf_;
  sudo sed -i '$ a \  # - pgsql - #' $phppgadminConf_ ;
  sudo sed -i '$ a \  php_flag display_startup_errors off' $phppgadminConf_;
  sudo sed -i '$ a \  php_flag display_errors off' $phppgadminConf_;
  sudo sed -i '$ a \  php_flag html_errors off' $phppgadminConf_;
  sudo sed -i '$ a </Directory>' $phppgadminConf_;

<<'comment'
  Alias /phppgadmin "/usr/share/webapps/phppgadmin"
  <Directory "/usr/share/webapps/phppgadmin">
      DirectoryIndex index.php
      AllowOverride All
      Options FollowSymlinks
      Require all granted

      # phppgadmin raises deprecated warnings that lead
      # to parsing errors in JS
      php_flag display_startup_errors off
      php_flag display_errors off
      php_flag html_errors off
  </Directory>
comment

<<'comment'
  https://stackoverflow.com/questions/65299248/phppgadmin-login-fail-virtual-class-cannot-instantiate
  adodbIni_=/usr/share/webapps/phppgadmin/libraries/adodb/adodb.inc.php
  die('Virtual Class -- cannot instantiate');
comment
  # adodbIni_=/usr/share/webapps/phppgadmin/libraries/adodb/adodb.inc.php;
  sudo sed -i "s/die('Virtual Class -- cannot instantiate');/#die('Virtual Class -- cannot instantiate');/" $adodbIni_;

  # httpdConf_=/etc/httpd/conf/httpd.conf;
  sudo sed -i '$ a Include conf/extra/phppgadmin.conf' $httpdConf_;
  sudo systemctl restart postgresql;
  sudo systemctl restart httpd;

  sudo sed -i '7 i '"$sS1_" $aServerConf_;
  echo "";
  echo $pSQL_" has been configured...";
  sleep 10;
}



# -  - #
# - Docker - #
function Docker_(){
  local Doc_='Docker'
  local msg_0='Configuring '$Doc_' ...' \
        msg_1=$Doc_' already configured...' \
        sS1_='# - Docker configured - #' sS2_='' sS3_='' sS4_='' \
        tmp_=~/tmp.txt aServerConf_=/etc/aServer.Conf;
  echo "";

  sS2_=$(echo $(cat $aServerConf_ | grep "$sS1_" ));
  if [ "$sS1_" == "$sS2_" ]; then echo $msg_1; return; else echo $msg_0; fi;

  echo $msg_0;
  echo "Adding admin user to $sDocker_ group...";
  sudo usermod -aG docker $masterUser_;

  echo 'Enabling '$Doc_' service...';
  sudo systemctl start docker;
  sudo systemctl enable docker;
  #(echo 'q'; sleep 1; echo 'q') | systemctl status docker.service;
  #systemctl status docker.service;
  systemctl list-unit-files | grep docker;
  sudo docker ps -a;
  sudo docker version;

  echo "";
  echo "Installing $sDocker_ portainer...";
  echo "";
  sudo docker pull portainer/portainer;
  sudo docker volume create portainer_data;

  sudo docker run -d -p 8000:8000 -p 9443:9443  --restart=always --name portainer -v \
       /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ee:latest;
  sudo docker ps -a;
  
<<'comment'
Docker license:
2-V01hYctvg/h91rY3aj3I9t410ZlLeuEcQRj9XrZuuyjSwx9LgHq4j6z1lwn14iIjEcZmuigycs0=
comment

  echo "";
  echo "Access docker containers:";
  echo "    https://$aServerIP_:9443";
  echo "";
  sudo sed -i '8 i '"$sS1_" $aServerConf_;

  echo "";
  echo $sDocker_" has been configured...";
  sleep 10;
}



<<'comment'
  # -  - #
  # - entern - #
  # Usage:  entern 5
comment
entern() {
  if [ "$1" ]; then
     for i in $(seq 1 $1); do echo "${PS1@P}"; done
  else
     for i in $(seq 1 10); do echo "${PS1@P}"; done
  fi
}



# -  - #
# - deleteDuplicated_ - #
function DeleteDuplicatedLines_(){
  local Loop_=1 \
        tF_=~/tmp.txt \
        sfile_=$1 \
        sSearch_=$2

 if [ "$1" == "" ] || [ "$2" == "" ]; then echo 'Variable missing, returning...'; return; fi

<<'comment'
DeleteDuplicatedLines_ "$sshd_" "$t1_"
function DeleteDuplicatedLines_() {
    # Commands
}
comment
  
  while [ "$Loop_" == 1 ]
  do
    awk '/'"$sSearch_"'/ {print NR}' $sfile_ > $tF_;
    if [ $(echo $(grep "" -c "$tF_")) -gt 1 ]; then
      nL_=$(echo $(sed '2q;d' $tF_));
      sudo sed -i $nL_'d' $sfile_;
    else
      rm -rf $tF_;
      Loop_=0;
    fi
  done
}



# -  - #
# - Update system - #
function update_(){
  echo '';
  echo 'Updating system...'
  sudo pacman -Syu --noconfirm && sudo pacman -Syyuu --noconfirm;
  echo 'Update done...';
  echo '';
}



# -  - #
# - Exit - #
function exit_(){
  echo "";
  printf "\e[1;32maServer configured successfully...\e[0m";
  echo "";
  echo "";
  read -t 10 -p 'The system will reboot so changes can take place...';


<<'comment'
  sudo systemctl stop sshd;
  sudo pkill sshd;
  sudo systemctl start sshd;
comment

  
  sudo reboot now;
  #sudo shutdown now;  
  exit;
}



# -  - #
# - cleaning_ - #
function cleaning_(){
  echo '';

  echo 'Cleaning system cache...';
  sudo pacman -Scc --noconfirm;

  echo 'Removing orphan packages...';
  sudo pacman -R $(pacman -Qtdq) --noconfirm;

  echo 'Cleaning user cache...';
  sudo du -sh ~/.cache/;
  rm -rf ~/.cache/*;
  sudo rm -rf ~/.cache/*;

  echo 'Cleaning done...';

}



# -  - #
# - checkComputer_ - #
function checkComputer_(){
  clear;
  echo "";
  echo 'Checking computer...';
  if [ "$cHost_" == "HPLaptopArch" ] || [ "$cHost_" == "HPDesktopArch" ]; then
     echo "";
     echo "This process cannot be executed on $cHost_...";
     spd-say -w "This process cannot be executed on $cHost_";
     rm -rf ~/Arch_PostInstallation.sh;
     echo "";
     exit;
  fi;
  echo "";
}



checkComputer_;
AdditionalSoftware_;
sshPublicKey_;
netplan_;

#exit;

hostName_;
if [ "$_bashrc_" == "Yes" ]; then bashrc_; fi;
vsftpd_;
sshConfiguration_;

if [ "$zPool_" == "Yes" ]; then
   zData_;
   zDataPool_;
else
   Data_;
fi;

WebServer_;
MySQL_;
MoveMySQL_;
DataDirectories_;
samba_;
PostgreSQL_;
Docker_;



cd $Dir_
rm -rf ~/aServerConf.sh;
cleaning_;

# -  - #
# - Enable new network configuration - #
if [ "$netPlan_" == "1" ]; then enableNetplan_; fi;

exit_;
echo "Never pass here...";



<<'comment'
cd ~/; rm -rf ~/aServerConf.sh; vim ~/aServerConf.sh;
# - Paste this content - #
chmod +x ~/aServerConf.sh; ~/./aServerConf.sh;

ssh-keygen -R 10.0.0.1
ssh-keygen -R 192.168.122.1
cd ~/; curl -O http://192.168.1.101/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/ArchServer.Ins/aServerConf.sh;
~/./aServerConf.sh;
comment



# - bof - #
