Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
I
ISPConfig 3
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Manoa Ratefiarison
ISPConfig 3
Commits
1bb5122b
Commit
1bb5122b
authored
15 years ago
by
wyrie
Browse files
Options
Downloads
Patches
Plain Diff
Install: gentoo helper scripts
parent
580d8151
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
helper_scripts/gentoo_setup.sh
+603
-0
603 additions, 0 deletions
helper_scripts/gentoo_setup.sh
helper_scripts/utils.sh
+138
-0
138 additions, 0 deletions
helper_scripts/utils.sh
with
741 additions
and
0 deletions
helper_scripts/gentoo_setup.sh
0 → 100644
+
603
−
0
View file @
1bb5122b
#!/bin/bash
# Copyright (c) 2009, Scott Barr <gsbarr@gmail.com>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the <organization> nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS''
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Global vars
install_mail
=
"no"
install_web
=
"no"
install_ftp
=
"no"
install_dns
=
"no"
spinner_pid
=
0
version
=
"0.6"
source_path
=
`
dirname
$0
`
source
${
source_path
}
/utils.sh
function
package_has_use_flag
()
{
local
package
=
$1
local
useflag
=
$2
res
=
`
equery
-C
-N
uses
$package
|
grep
-o
-E
"^[ +-]+
$useflag
"
|
grep
"+"
`
[
-n
"
$res
"
]
}
function
is_package_installed
()
{
local
usechange
=
"no"
local
uselist
=
""
installed
=
`
equery
-C
-N
list
-e
-i
$1
|
grep
$1
|
grep
"^
\[
I"
`
if
[
-n
"
$2
"
]
# Use flags parsed
then
for
useflag
in
$2
do
uselist
=
"
$uselist
+
$2
"
# If the use flag isn't currently set or wasn't enabled when installed we'll need to re-install it.
package_has_use_flag
"
$1
"
"
$useflag
"
||
usechange
=
"yes"
done
flagedit
$1
$uselist
fi
[
-n
"
$installed
"
]
&&
[
"
$usechange
"
==
"no"
]
}
function
install_progress
()
{
SP_STRING
=
"/-
\\
|"
packages
=(
$2
)
IP_STRING
=
`
printf
"1 of %d"
"
${#
packages
[@]
}
"
`
loop_count
=
0
nowf
=
`
date
+
'%b %d, %Y %H:%M'
`
while
[
-d
/proc/
$1
]
&&
[
-d
/proc/
$$
]
do
printf
"
\e
[1;37m
\e
7[ %1.1s %s ]
\e
8
\e
[0m"
"
$SP_STRING
"
"
$IP_STRING
"
sleep
0.2
if
[
$loop_count
-lt
8
]
then
loop_count
=
$((
$loop_count
+
1
))
else
current
=
`
sed
-n
"/Started emerge on:
$nowf
/,/G/p"
/var/log/emerge.log |
grep
">>> emerge"
|
tail
-1
|
grep
-m
1
-o
-P
"
\d
+ of
\d
+"
`
if
[
-n
"
$current
"
]
then
IP_STRING
=
$current
fi
loop_count
=
0
fi
SP_STRING
=
${
SP_STRING
#
"
${
SP_STRING
%?
}
"
}${
SP_STRING
%?
}
;
done
printf
"%-15s"
" "
}
function
install_packages
()
{
local
package_list
=
$1
local
title
=
$2
if
[
-z
"
$title
"
]
then
title
=
"Installing packages"
fi
if
[
-n
"
$package_list
"
]
then
echo
-e
"The following packages are going to be emerged:"
echo
-e
"
$package_list
"
echo
-e
""
countdown
"00:00:10"
Continue
in
echo
-e
""
printf
"%-40s"
"
$title
"
(
emerge
$package_list
>
/dev/null 2>&1
)
&
pid
=
$!
install_progress
$pid
"
$package_list
"
wait
$pid
status
=
$?
if
[
$status
-eq
0
]
;
then
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;32mok
\e
[0m
\e
[1;37m ]
\e
[0m"
else
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;31mfailed
\e
[0m
\e
[1;37m ]
\e
[0m"
echo
-e
"Failed installing the following packages:"
echo
-e
"
$1
"
exit
1
fi
else
echo
-e
"No packages to install!"
fi
}
function
install_rcscripts
()
{
if
[
-n
"
$1
"
]
then
printf
"
\e
[1;37m%-40s
\e
[0m"
"Adding packages to default runlevel"
start_spinner
for
rc
in
$1
do
rc-update add
$rc
default &> /dev/null
done
stop_spinner
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;32mdone
\e
[0m
\e
[1;37m ]
\e
[0m"
fi
}
function
meta_mail
()
{
local
package_list
=
""
local
add_maildrop
=
""
local
remove_ssmtp
=
"no"
local
rc_scripts
=
""
echo
-e
""
printf
"
\e
[1;37m%-40s
\e
[0m"
"Building list of required mail packages"
start_spinner
is_package_installed
"net-libs/courier-authlib"
"mysql"
||
{
package_list
=
"
$package_list
net-libs/courier-authlib"
;
rc_scripts
=
"
$rc_scripts
courier-authlib"
;
}
is_package_installed
"net-mail/courier-imap"
"fam"
||
{
package_list
=
"
$package_list
net-mail/courier-imap"
;
rc_scripts
=
"
$rc_scripts
courier-imapd courier-imapd-ssl courier-pop3d courier-pop3d-ssl"
;
}
is_package_installed
"mail-filter/maildrop"
||
add_maildrop
=
"yes"
# Avoid file collision warnings from emerge
if
!
is_package_installed
"mail-mta/postfix"
"mysql sasl"
then
is_package_installed
"mail-mta/ssmtp"
&&
local
remove_ssmtp
=
"yes"
;
# Ssmtp blocks postfix and is installed by default.
package_list
=
"
$package_list
mail-mta/postfix"
rc_scripts
=
"
$rc_scripts
postfix"
fi
is_package_installed
"dev-libs/cyrus-sasl"
"mysql"
||
{
package_list
=
"
$package_list
dev-libs/cyrus-sasl"
;
rc_scripts
=
"
$rc_scripts
saslauthd"
;
}
is_package_installed
"net-mail/getmail"
||
package_list
=
"
$package_list
net-mail/getmail"
is_package_installed
"mail-filter/amavisd-new"
"mysql razor spamassassin"
||
{
package_list
=
"
$package_list
mail-filter/amavisd-new"
;
rc_scripts
=
"
$rc_scripts
amavisd"
;
}
is_package_installed
"app-antivirus/clamav"
||
{
package_list
=
"
$package_list
app-antivirus/clamav"
;
rc_scripts
=
"
$rc_scripts
clamd"
;
}
is_package_installed
"dev-perl/Authen-SASL"
||
package_list
=
"
$package_list
dev-perl/Authen-SASL"
is_package_installed
"dev-perl/perl-ldap"
||
package_list
=
"
$package_list
dev-perl/perl-ldap"
stop_spinner
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;32mdone
\e
[0m
\e
[1;37m ]
\e
[0m"
if
[
"
$remove_ssmtp
"
==
"yes"
]
then
exec_command
"emerge --unmerge mail-mta/ssmtp"
"Removing ssmtp to install postfix"
fi
install_packages
"
$package_list
"
"Installing mail packages"
if
[
-n
"
$add_maildrop
"
]
then
exec_command
"COLLISION_IGNORE=
\"
/usr
\"
emerge mail-filter/maildrop"
"Installing maildrop"
fi
install_rcscripts
"
$rc_scripts
"
}
function
meta_web
()
{
local
package_list
=
""
local
fix_jailkit
=
"no"
local
linguas_add
=
"no"
local
webmail_add
=
"no"
local
rc_scripts
=
""
echo
-e
""
printf
"
\e
[1;37m%-40s
\e
[0m"
"Building list of required web packages"
start_spinner
is_package_installed
"www-servers/apache"
"ssl suexec doc"
||
{
package_list
=
"
$package_list
www-servers/apache"
;
rc_scripts
=
"
$rc_scripts
apache2"
;
}
is_package_installed
"www-apache/mod_fcgid"
||
package_list
=
"
$package_list
www-apache/mod_fcgid"
if
!
is_package_installed
"app-admin/webalizer"
"vhosts apache2"
then
is_package_installed
"media-libs/gd"
"jpeg png"
||
package_list
=
"
$package_list
media-libs/gd"
if
package_has_use_flag
"app-admin/webalizer"
"nls"
then
source
/etc/make.conf
if
[
-z
"
${
LINGUAS
}
"
]
then
linguas_add
=
"yes"
fi
fi
package_list
=
"
$package_list
app-admin/webalizer"
fi
if
is_package_installed
"app-admin/vlogger"
then
# Check if package is masked
if
[
-n
"
$(
equery
-C
-N
list
-I
-o
-e
app-admin/vlogger |
grep
app-admin/vlogger |
awk
'{print $2}'
|
grep
'^\[M'
)
"
]
then
flagedit app-admin/vlogger
--
+~amd64 +~x86
>
/dev/null
fi
package_list
=
"
$package_list
app-admin/vlogger"
fi
is_package_installed
"app-crypt/mcrypt"
||
package_list
=
"
$package_list
app-crypt/mcrypt"
is_package_installed
"dev-lang/php"
"apache2 gd mysql mysqli imap cli cgi pcre xml zlib crypt ctype session unicode mhash ftp"
||
package_list
=
"
$package_list
dev-lang/php"
if
!
is_package_installed
"www-apache/mod_suphp"
then
# Check if package is masked
if
[
-n
"
$(
equery
-C
-N
list
-I
-p
-e
www-apache/mod_suphp |
grep
www-apache/mod_suphp |
awk
'{print $2}'
|
grep
'^\[M'
)
"
]
then
flagedit www-apache/mod_suphp
--
+~amd64 +~x86
>
/dev/null
fi
package_list
=
"
$package_list
www-apache/mod_suphp"
fi
is_package_installed
"dev-db/phpmyadmin"
||
package_list
=
"
$package_list
dev-db/phpmyadmin"
is_package_installed
"media-gfx/imagemagick"
"jpeg png tiff"
||
package_list
=
"
$package_list
media-gfx/imagemagick"
is_package_installed
"dev-php/PEAR-PEAR"
||
package_list
=
"
$package_list
dev-php/PEAR-PEAR"
is_package_installed
"dev-php/PEAR-Auth"
||
package_list
=
"
$package_list
dev-php/PEAR-Auth"
is_package_installed
"dev-php5/pecl-imagick"
||
package_list
=
"
$package_list
dev-php5/pecl-imagick"
is_package_installed
"sys-auth/pam_mysql"
||
package_list
=
"
$package_list
sys-auth/pam_mysql"
if
!
is_package_installed
"app-admin/jailkit"
then
# Check if package is masked
if
[
-n
"
$(
equery
-C
-N
list
-I
-o
-e
app-admin/jailkit |
grep
app-admin/jailkit |
awk
'{print $2}'
|
grep
'^\[M'
)
"
]
then
flagedit app-admin/jailkit
--
+~amd64 +~x86
>
/dev/null
fi
# The ebuild for jailkit 2.3 has a nasty bug that breaks the login shell. Check for version and
# apply the fix if necessary.
if
[
"
$(
emerge
-pv
app-admin/jailkit |
grep
-o
-P
'(?<=jailkit-)[\d-.rp_]+'
)
"
==
"2.3"
]
then
fix_jailkit
=
"yes"
cp
/etc/shells /etc/shells~
fi
package_list
=
"
$package_list
app-admin/jailkit"
fi
if
[
"
$install_mail
"
==
"yes"
]
&&
!
is_package_installed
"mail-client/squirrelmail"
"vhosts"
then
if
!
is_package_installed
"app-admin/webapp-config"
then
package_list
=
"
$package_list
app-admin/webapp-config"
fi
webmail_add
=
"yes"
package_list
=
"
$package_list
mail-client/squirrelmail"
fi
stop_spinner
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;32mdone
\e
[0m
\e
[1;37m ]
\e
[0m"
if
[
"
$linguas_add
"
==
"yes"
]
then
echo
-e
""
echo
-e
"The nls use flag is enabled for webalizer and no locale preference is set in make.conf. If "
echo
-e
"not set webalizer will fail to install."
echo
-e
""
accept_locales
=
`
find /usr/share/locale/
-maxdepth
1
-type
d
-exec
basename
'{}'
\;
|
grep
-v
"locale"
|
sort
|
tr
"
\n
"
"/"
|
sed
-e
's,\(.\)/$,\1,'
`
valid_input
"Set locale value for gettext-based programs to: "
"
$accept_locales
"
"en"
echo
"LINGUAS=
\"
$Return_Val
\"
"
>>
/etc/make.conf
echo
-e
""
fi
install_packages
"
$package_list
"
"Installing web packages"
if
[
$?
-eq
0
]
&&
[
"
$fix_jailkit
"
==
"yes"
]
&&
[
-z
"
$(
grep
'jk_chrootsh'
/etc/shells
)
"
]
then
cp
/etc/shells /etc/shells.jailkit-v2.3
cp
/etc/shells~ /etc/shells
echo
"/usr/sbin/jk_chrootsh"
>>
/etc/shells
fi
if
[
"
$webmail_add
"
==
"yes"
]
then
exec_command
"webapp-config -I -h localhost -u apache -d /webmail squirrelmail
$(
ls
-r
/usr/share/webapps/squirrelmail/ |
awk
'{print $1}'
)
"
"Adding squirrelmail to localhost"
fi
install_rcscripts
"
$rc_scripts
"
}
function
meta_ftp
()
{
local
package_list
=
""
local
rc_scripts
=
""
echo
-e
""
printf
"
\e
[1;37m%-40s
\e
[0m"
"Building list of required ftp packages"
start_spinner
is_package_installed
"net-ftp/pure-ftpd"
"mysql"
||
{
package_list
=
"
$package_list
net-ftp/pure-ftpd"
;
rc_scripts
=
"
$rc_scripts
pure-ftpd"
;
}
is_package_installed
"sys-fs/quota"
||
package_list
=
"
$package_list
sys-fs/quota"
;
if
!
is_package_installed
"sys-fs/quotatool"
then
# Check if package is masked
if
[
-n
"
$(
equery
-C
-N
list
-I
-p
-e
sys-fs/quotatool |
grep
sys-fs/quotatool |
awk
'{print $2}'
|
grep
'^\[M'
)
"
]
then
flagedit sys-fs/quotatool
--
+~amd64 +~x86
>
/dev/null
fi
package_list
=
"
$package_list
sys-fs/quotatool"
fi
stop_spinner
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;32mdone
\e
[0m
\e
[1;37m ]
\e
[0m"
if
[
$(
expr
match
"
$package_list
"
'sys-fs/quota'
)
-ne
0
]
then
echo
-e
""
echo
-e
"
\e
[1;33mNotice:
\e
[0m Don't forget to edit your fstab file and add the usrquota & grpquota options to your data partition."
echo
-e
""
sleep
2
fi
install_packages
"
$package_list
"
"Installing ftp packages"
install_rcscripts
"
$rc_scripts
"
}
function
meta_dns
()
{
local
package_list
=
""
echo
-e
""
echo
-e
"
\e
[1;37mBuilding list of required dns packages
\e
[0m
\n
"
start_spinner
is_package_installed
"net-dns/pdns"
"mysql"
||
package_list
=
"
$package_list
net-dns/pdns"
stop_spinner
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;32mdone
\e
[0m
\e
[1;37m ]
\e
[0m"
install_packages
"
$package_list
"
"Installing dns packages"
}
function
meta_all
()
{
meta_mail
meta_web
meta_ftp
meta_dns
}
case
$1
in
"--version"
|
"-h"
|
"--help"
)
echo
-e
"Gentoo Linux ISPConfig setup script"
echo
-e
"Version
$version
"
echo
-e
""
echo
-e
"No arguments needed, simply execute the script."
exit
0
;;
*
)
;;
esac
clear
echo
-e
"
\e
[1;33mGentoo Linux ISPConfig setup script v
$version
\e
[0m"
echo
-e
"
\e
[1;32m========================================
\e
[0m"
echo
-e
""
sleep
0.5
valid_input
"Would you like to sync portage now?"
if
[
"
$Return_Val
"
=
"yes"
]
then
exec_command
"emerge --sync --quiet"
"Updating portage tree"
fi
# Get all the programs we need to do portage queries etc.
echo
-en
"
\e
[1;37mChecking for required packages
\e
[0m
\n
"
# Verify if gentoolkit has been emerged and install if not
which equery &> /dev/null
if
[
$?
-ne
0
]
then
exec_command
"emerge app-portage/gentoolkit"
"Installing gentoolkit"
fi
which flagedit &> /dev/null
if
[
$?
-ne
0
]
then
exec_command
"emerge app-portage/flagedit"
"Installing flagedit"
fi
if
!
is_package_installed
"app-admin/rsyslog"
then
printf
"
\e
[1;37m%-40s
\e
[0m"
"Checking for installed system loggers"
start_spinner
loggers
=(
syslog-ng metalog sysklogd
)
clogger
=
""
rsyslog_install
=
"yes"
for
logger
in
$loggers
do
if
!
is_package_installed
"app-admin/
$logger
"
&&
[
-n
"
$(
rc-config list default |
grep
$logger
)
"
]
then
clogger
=
$logger
break
fi
done
stop_spinner
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;32mdone
\e
[0m
\e
[1;37m ]
\e
[0m"
if
[
"
$clogger
"
!=
""
]
then
echo
-e
""
echo
-e
"
$clogger
appears to be installed on your system."
echo
-e
"To use the log monitoring features in ISPConfig"
echo
-e
"the log facilities need to be configured to certain"
echo
-e
"paths. Currently the default rsyslog file is used."
echo
-e
""
valid_input
"Would you like to replace
$clogger
with rsyslog?"
if
[
"
$Return_Val
"
=
"yes"
]
then
echo
-e
""
exec_command
"/etc/init.d/syslog-ng stop"
"Stopping
$clogger
"
exec_command
"rc-update del
$clogger
default"
"Remove
$clogger
from default runlevel"
else
rsyslog_install
=
"no"
fi
fi
if
[
"
$rsyslog_install
"
==
"yes"
]
then
exec_command
"emerge app-admin/rsyslog"
"Installing rsyslog"
exec_command
"/etc/init.d/rsyslog start"
"Starting rsyslog"
exec_command
"rc-update add mysql default"
"Add rsyslog to default runlevel"
fi
echo
-e
""
fi
if
!
is_package_installed
"dev-db/mysql"
"extraengine big-tables"
then
exec_command
"emerge dev-db/mysql"
"Installing MySql"
exec_command
"mysql_install_db"
"Set-up mysql grant tables"
exec_command
"/etc/init.d/mysql start"
"Starting MySql"
exec_command
"rc-update add mysql default"
"Add MySql to default runlevel"
fi
which vim &> /dev/null
if
[
$?
-ne
0
]
then
exec_command
"emerge app-editors/vim"
"Installing vim"
fi
is_package_installed
"sys-devel/binutils"
||
exec_command
"emerge sys-devel/binutils"
"Installing binutils"
;
is_package_installed
"app-forensics/rkhunter"
||
exec_command
"emerge app-forensics/rkhunter"
"Installing rkhunter"
;
is_package_installed
"net-analyzer/fail2ban"
||
exec_command
"emerge net-analyzer/fail2ban"
"Installing fail2ban"
;
is_package_installed
"app-portage/layman"
"subversion"
||
exec_command
"emerge app-portage/layman"
"Installing layman"
;
# Check if sunrise overlay has been enabled
if
[
-z
"
$(
layman
-l
|
grep
sunrise
)
"
]
then
layman
-q
-S
>
/dev/null
exec_command
"layman -a sunrise"
"Adding/syncing package overlay"
fi
if
[
-z
"
$(
grep
'local/portage/layman'
/etc/make.conf
)
"
]
then
echo
"source /usr/local/portage/layman/make.conf"
>>
/etc/make.conf
fi
echo
-e
""
# Service based packages
echo
-en
"
\e
[1;37mService based packages
\e
[0m
\n
"
valid_input
"Install all packages or select targeted services?"
"all/targeted"
if
[
"
$Return_Val
"
=
"all"
]
then
install_mail
=
"yes"
install_web
=
"yes"
install_ftp
=
"yes"
install_dns
=
"yes"
meta_all
else
valid_input
"Install mail related packages?"
install_mail
=
$Return_Val
if
[
"
$install_mail
"
=
"yes"
]
then
meta_mail
fi
echo
-e
""
valid_input
"Install web related packages?"
install_web
=
$Return_Val
if
[
"
$install_web
"
=
"yes"
]
then
meta_web
fi
echo
-e
""
valid_input
"Install ftp related packages?"
install_ftp
=
$Return_Val
if
[
"
$install_ftp
"
=
"yes"
]
then
meta_ftp
fi
echo
-e
""
valid_input
"Install dns related packages?"
install_dns
=
$Return_Val
if
[
"
$install_dns
"
=
"yes"
]
then
meta_dns
fi
fi
echo
-e
""
echo
-e
"
\e
[1;33mSetup script completed
\e
[0m"
echo
-e
"
\e
[1;32m========================================
\e
[0m"
echo
-e
""
valid_input
"Do you want to start the ISPConfig installer?"
if
[
"
$Return_Val
"
=
"yes"
]
then
clear
php
-q
../install/install.php
fi
exit
$?
This diff is collapsed.
Click to expand it.
helper_scripts/utils.sh
0 → 100644
+
138
−
0
View file @
1bb5122b
#!/bin/bash
# Copyright (c) 2009, Scott Barr <gsbarr@gmail.com>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the <organization> nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS''
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
function
countdown
{
local
OLD_IFS
=
"
${
IFS
}
"
IFS
=
":"
local
ARR
=(
$1
)
;
shift
IFS
=
"
${
OLD_IFS
}
"
local
PREFIX
=
"
$*
"
;
[
-n
"
${
PREFIX
}
"
]
&&
PREFIX
=
"
${
PREFIX
}
"
local
SECONDS
=
$((
(
ARR[0]
*
60
*
60
)
+
(
ARR[1]
*
60
)
+
ARR[2]
))
local
START
=
$(
date
+%s
)
local
END
=
$((
START
+
SECONDS
))
local
CUR
=
$START
while
[[
$CUR
-lt
$END
]]
do
CUR
=
$(
date
+%s
)
LEFT
=
$((
END-CUR
))
printf
"
\r
${
PREFIX
}
%02d"
\
$((
LEFT%60
))
sleep
1
done
echo
" "
}
function
outputVar
()
{
y
=
\$
"
$1
"
x
=
`
eval
"expr
\"
$y
\"
"
`
eval
"
$1
=
\"
$2
\"
"
}
function
valid_input
()
{
local
correct
=
"no"
Return_Val
=
""
if
[
-z
"
$2
"
]
then
local
opts
=(
yes
no
)
local
opt_list
=
"yes/no"
else
local
opts
=(
`
echo
$2
|
tr
"/"
" "
`
)
local
opt_list
=
$2
fi
while
[
"
$correct
"
!=
"yes"
]
do
if
[
-n
"
$3
"
]
then
line_prompt
=
"
$1
[default:
$3
] "
else
line_prompt
=
"
$1
[
$opt_list
] "
fi
echo
-en
"
$line_prompt
"
read
answer
if
[
-n
"
$3
"
]
then
answer
=
$3
else
ret
=
`
echo
"
${
opts
[@]
}
"
|
grep
-w
"
$answer
"
`
fi
if
[
$?
-eq
0
]
then
correct
=
"yes"
Return_Val
=
$answer
fi
done
}
function
start_spinner
()
{
parent_pid
=
$$
(
SP_STRING
=
"/-
\\
|"
;
while
[
-d
/proc/
$1
]
&&
[
-d
/proc/
$parent_pid
]
;
do
printf
"
\e
[1;37m
\e
7[ %1.1s ]
\e
8
\e
[0m"
"
$SP_STRING
"
;
sleep
.2
;
SP_STRING
=
${
SP_STRING
#
"
${
SP_STRING
%?
}
"
}${
SP_STRING
%?
}
;
done
)
&
disown
spinner_pid
=
$!
}
function
stop_spinner
()
{
if
[
$spinner_pid
-gt
0
]
then
kill
-HUP
$spinner_pid
2>/dev/null
fi
}
function
exec_command
()
{
printf
"%-40s"
"
$2
"
(
eval
$1
>
/dev/null 2>&1
)
&
pid
=
$!
start_spinner
wait
$pid
status
=
$?
stop_spinner
if
[
$status
-eq
0
]
;
then
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;32mok
\e
[0m
\e
[1;37m ]
\e
[0m"
else
echo
-e
"
\e
[1;37m[
\e
[0m
\e
[1;31mfailed
\e
[0m
\e
[1;37m ]
\e
[0m"
echo
-e
"The following command did not complete successfully:"
echo
-e
"
$1
"
exit
1
fi
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment