mirror of
https://github.com/webmin/webmin.git
synced 2025-07-21 23:40:34 +00:00
822 lines
22 KiB
Bash
Executable File
822 lines
22 KiB
Bash
Executable File
#!/bin/sh
|
|
# setup.sh
|
|
# This script should be run after the webmin archive is unpacked, in order
|
|
# to setup the various config files
|
|
|
|
# Find install directory
|
|
LANG=
|
|
export LANG
|
|
cd `dirname $0`
|
|
if [ -x /bin/pwd ]; then
|
|
wadir=`/bin/pwd`
|
|
else
|
|
wadir=`pwd`;
|
|
fi
|
|
srcdir=$wadir
|
|
ver=`cat "$wadir/version"`
|
|
|
|
# Find temp directory
|
|
if [ "$tempdir" = "" ]; then
|
|
tempdir=/tmp/.webmin
|
|
fi
|
|
|
|
if [ $? != "0" ]; then
|
|
echo "ERROR: Cannot find the Webmin install directory";
|
|
echo "";
|
|
exit 1;
|
|
fi
|
|
|
|
echo "***********************************************************************"
|
|
echo "* Welcome to the Webmin setup script, version $ver *"
|
|
echo "***********************************************************************"
|
|
echo "Webmin is a web-based interface that allows Unix-like operating"
|
|
echo "systems and common Unix services to be easily administered."
|
|
echo ""
|
|
|
|
# Only root can run this
|
|
id | grep "uid=0(" >/dev/null
|
|
if [ $? != "0" ]; then
|
|
uname -a | grep -i CYGWIN >/dev/null
|
|
if [ $? != "0" ]; then
|
|
echo "ERROR: The Webmin install script must be run as root";
|
|
echo "";
|
|
exit 1;
|
|
fi
|
|
fi
|
|
|
|
# Use the supplied destination directory, if any
|
|
if [ "$1" != "" ]; then
|
|
wadir=$1
|
|
echo "Installing Webmin from $srcdir to $wadir ..."
|
|
if [ ! -d "$wadir" ]; then
|
|
mkdir "$wadir"
|
|
if [ "$?" != "0" ]; then
|
|
echo "ERROR: Failed to create $wadir"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
else
|
|
# Make sure dest dir is not in use
|
|
ls "$wadir" | grep -v rpmsave >/dev/null 2>&1
|
|
if [ "$?" = "0" -a ! -r "$wadir/setup.sh" ]; then
|
|
echo "ERROR: Installation directory $wadir contains other files"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
echo "Installing Webmin in $wadir ..."
|
|
fi
|
|
cd "$wadir"
|
|
|
|
# Work out perl library path
|
|
PERLLIB=$wadir
|
|
if [ "$perllib" != "" ]; then
|
|
PERLLIB="$PERLLIB:$perllib"
|
|
fi
|
|
|
|
# Validate source directory
|
|
allmods=`cd "$srcdir"; echo */module.info | sed -e 's/\/module.info//g'`
|
|
if [ "$allmods" = "" ]; then
|
|
echo "ERROR: Failed to get module list"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Load package-defined variable overrides
|
|
if [ -r "$srcdir/setup-pre.sh" ]; then
|
|
. "$srcdir/setup-pre.sh"
|
|
fi
|
|
|
|
# Ask for webmin config directory
|
|
echo "***********************************************************************"
|
|
echo "Webmin uses separate directories for configuration files and log files."
|
|
echo "Unless you want to run multiple versions of Webmin at the same time"
|
|
echo "you can just accept the defaults."
|
|
echo ""
|
|
printf "Config file directory [/etc/webmin]: "
|
|
if [ "$config_dir" = "" ]; then
|
|
read config_dir
|
|
fi
|
|
if [ "$config_dir" = "" ]; then
|
|
config_dir=/etc/webmin
|
|
fi
|
|
abspath=`echo $config_dir | grep "^/"`
|
|
if [ "$abspath" = "" ]; then
|
|
echo "Config directory must be an absolute path"
|
|
echo ""
|
|
exit 2
|
|
fi
|
|
if [ ! -d $config_dir ]; then
|
|
mkdir $config_dir;
|
|
if [ $? != 0 ]; then
|
|
echo "ERROR: Failed to create directory $config_dir"
|
|
echo ""
|
|
exit 2
|
|
fi
|
|
fi
|
|
if [ -r "$config_dir/config" ]; then
|
|
echo "Found existing Webmin configuration in $config_dir"
|
|
echo ""
|
|
upgrading=1
|
|
fi
|
|
|
|
# Check if upgrading from an old version
|
|
if [ "$upgrading" = 1 ]; then
|
|
echo ""
|
|
|
|
# Get current var path
|
|
var_dir=`cat $config_dir/var-path`
|
|
|
|
# Force creation if non-existant
|
|
mkdir -p $var_dir >/dev/null 2>&1
|
|
|
|
# Get current perl path
|
|
perl=`cat $config_dir/perl-path`
|
|
|
|
# Create temp files directory
|
|
$perl "$srcdir/maketemp.pl"
|
|
if [ "$?" != "0" ]; then
|
|
echo "ERROR: Failed to create or check temp files directory $tempdir"
|
|
echo ""
|
|
exit 2
|
|
fi
|
|
|
|
# Get old os name and version
|
|
os_type=`grep "^os_type=" $config_dir/config | sed -e 's/os_type=//g'`
|
|
os_version=`grep "^os_version=" $config_dir/config | sed -e 's/os_version=//g'`
|
|
real_os_type=`grep "^real_os_type=" $config_dir/config | sed -e 's/real_os_type=//g'`
|
|
real_os_version=`grep "^real_os_version=" $config_dir/config | sed -e 's/real_os_version=//g'`
|
|
|
|
# Get old root, host, port, ssl and boot flag
|
|
oldwadir=`grep "^root=" $config_dir/miniserv.conf | sed -e 's/root=//g'`
|
|
port=`grep "^port=" $config_dir/miniserv.conf | sed -e 's/port=//g'`
|
|
ssl=`grep "^ssl=" $config_dir/miniserv.conf | sed -e 's/ssl=//g'`
|
|
atboot=`grep "^atboot=" $config_dir/miniserv.conf | sed -e 's/atboot=//g'`
|
|
inetd=`grep "^inetd=" $config_dir/miniserv.conf | sed -e 's/inetd=//g'`
|
|
|
|
if [ "$inetd" != "1" ]; then
|
|
# Stop old version
|
|
$config_dir/stop >/dev/null 2>&1
|
|
fi
|
|
|
|
# Copy files to target directory
|
|
if [ "$wadir" != "$srcdir" ]; then
|
|
echo "Copying files to $wadir .."
|
|
(cd "$srcdir" ; tar cf - . | (cd "$wadir" ; tar xf -))
|
|
echo "..done"
|
|
echo ""
|
|
fi
|
|
|
|
# Update ACLs
|
|
$perl "$wadir/newmods.pl" $config_dir $allmods
|
|
|
|
# Update miniserv.conf with new root directory and mime types file
|
|
grep -v "^root=" $config_dir/miniserv.conf | grep -v "^mimetypes=" >$tempdir/$$.miniserv.conf
|
|
if [ $? != "0" ]; then exit 1; fi
|
|
mv $tempdir/$$.miniserv.conf $config_dir/miniserv.conf
|
|
echo "root=$wadir" >> $config_dir/miniserv.conf
|
|
echo "mimetypes=$wadir/mime.types" >> $config_dir/miniserv.conf
|
|
grep logout= $config_dir/miniserv.conf >/dev/null
|
|
if [ $? != "0" ]; then
|
|
echo "logout=$config_dir/logout-flag" >> $config_dir/miniserv.conf
|
|
fi
|
|
|
|
# Check for third-party modules in old version
|
|
if [ "$wadir" != "$oldwadir" ]; then
|
|
echo "Checking for third-party modules .."
|
|
if [ "$webmin_upgrade" != "" ]; then
|
|
autothird=1
|
|
fi
|
|
$perl "$wadir/thirdparty.pl" "$wadir" "$oldwadir" $autothird
|
|
echo "..done"
|
|
echo ""
|
|
fi
|
|
|
|
# Remove old cache of module infos
|
|
rm -f $config_dir/module.infos.cache
|
|
else
|
|
# Config directory exists .. make sure it is not in use
|
|
ls $config_dir | grep -v rpmsave >/dev/null 2>&1
|
|
if [ "$?" = "0" -a "$config_dir" != "/etc/webmin" ]; then
|
|
echo "ERROR: Config directory $config_dir is not empty"
|
|
echo ""
|
|
exit 2
|
|
fi
|
|
|
|
# Ask for log directory
|
|
printf "Log file directory [/var/webmin]: "
|
|
if [ "$var_dir" = "" ]; then
|
|
read var_dir
|
|
fi
|
|
if [ "$var_dir" = "" ]; then
|
|
var_dir=/var/webmin
|
|
fi
|
|
abspath=`echo $var_dir | grep "^/"`
|
|
if [ "$abspath" = "" ]; then
|
|
echo "Log file directory must be an absolute path"
|
|
echo ""
|
|
exit 3
|
|
fi
|
|
if [ "$var_dir" = "/" ]; then
|
|
echo "Log directory cannot be /"
|
|
exit ""
|
|
exit 3
|
|
fi
|
|
if [ ! -d $var_dir ]; then
|
|
mkdir $var_dir
|
|
if [ $? != 0 ]; then
|
|
echo "ERROR: Failed to create directory $var_dir"
|
|
echo ""
|
|
exit 3
|
|
fi
|
|
fi
|
|
echo ""
|
|
|
|
# Ask where perl is installed
|
|
echo "***********************************************************************"
|
|
echo "Webmin is written entirely in Perl. Please enter the full path to the"
|
|
echo "Perl 5 interpreter on your system."
|
|
echo ""
|
|
if [ -x /usr/bin/perl ]; then
|
|
perldef=/usr/bin/perl
|
|
elif [ -x /usr/local/bin/perl ]; then
|
|
perldef=/usr/local/bin/perl
|
|
else
|
|
perldef=""
|
|
fi
|
|
if [ "$perl" = "" ]; then
|
|
if [ "$perldef" = "" ]; then
|
|
printf "Full path to perl: "
|
|
read perl
|
|
if [ "$perl" = "" ]; then
|
|
echo "ERROR: No path entered!"
|
|
echo ""
|
|
exit 4
|
|
fi
|
|
else
|
|
printf "Full path to perl (default $perldef): "
|
|
read perl
|
|
if [ "$perl" = "" ]; then
|
|
perl=$perldef
|
|
fi
|
|
fi
|
|
fi
|
|
echo ""
|
|
|
|
# Test perl
|
|
echo "Testing Perl ..."
|
|
if [ ! -x $perl ]; then
|
|
echo "ERROR: Failed to find perl at $perl"
|
|
echo ""
|
|
exit 5
|
|
fi
|
|
$perl -e 'print "foobar\n"' 2>/dev/null | grep foobar >/dev/null
|
|
if [ $? != "0" ]; then
|
|
echo "ERROR: Failed to run test perl script. Maybe $perl is"
|
|
echo "not the perl interpreter, or is not installed properly"
|
|
echo ""
|
|
exit 6
|
|
fi
|
|
$perl -e 'exit ($] < 5.002 ? 1 : 0)'
|
|
if [ $? = "1" ]; then
|
|
echo "ERROR: Detected old perl version. Webmin requires"
|
|
echo "perl 5.002 or better to run"
|
|
echo ""
|
|
exit 7
|
|
fi
|
|
$perl -e 'use Socket; print "foobar\n"' 2>/dev/null | grep foobar >/dev/null
|
|
if [ $? != "0" ]; then
|
|
echo "ERROR: Perl Socket module not installed. Maybe Perl has"
|
|
echo "not been properly installed on your system"
|
|
echo ""
|
|
exit 8
|
|
fi
|
|
$perl -e '$c = crypt("xx", "yy"); exit($c ? 0 : 1)'
|
|
if [ $? != "0" ]; then
|
|
$perl -e 'use Crypt::UnixCrypt' >/dev/null 2>&1
|
|
fi
|
|
if [ $? != "0" ]; then
|
|
echo "ERROR: Perl crypt function does not work. Maybe Perl has"
|
|
echo "not been properly installed on your system"
|
|
echo ""
|
|
exit 8
|
|
fi
|
|
echo "Perl seems to be installed ok"
|
|
echo ""
|
|
|
|
# Create temp files directory
|
|
$perl "$srcdir/maketemp.pl"
|
|
if [ "$?" != "0" ]; then
|
|
echo "ERROR: Failed to create or check temp files directory $tempdir"
|
|
echo ""
|
|
exit 2
|
|
fi
|
|
|
|
# Ask for operating system type
|
|
echo "***********************************************************************"
|
|
if [ "$os_type" = "" ]; then
|
|
if [ "$autoos" = "" ]; then
|
|
autoos=2
|
|
fi
|
|
$perl "$srcdir/oschooser.pl" "$srcdir/os_list.txt" $tempdir/$$.os $autoos
|
|
if [ $? != 0 ]; then
|
|
exit $?
|
|
fi
|
|
. $tempdir/$$.os
|
|
rm -f $tempdir/$$.os
|
|
fi
|
|
echo "Operating system name: $real_os_type"
|
|
echo "Operating system version: $real_os_version"
|
|
echo ""
|
|
|
|
# Ask for web server port, name and password
|
|
echo "***********************************************************************"
|
|
echo "Webmin uses its own password protected web server to provide access"
|
|
echo "to the administration programs. The setup script needs to know :"
|
|
echo " - What port to run the web server on. There must not be another"
|
|
echo " web server already using this port."
|
|
echo " - The login name required to access the web server."
|
|
echo " - The password required to access the web server."
|
|
echo " - If the webserver should use SSL (if your system supports it)."
|
|
echo " - Whether to start webmin at boot time."
|
|
echo ""
|
|
printf "Web server port (default 10000): "
|
|
if [ "$port" = "" ]; then
|
|
read port
|
|
if [ "$port" = "" ]; then
|
|
port=10000
|
|
fi
|
|
fi
|
|
if [ $port -lt 1 ]; then
|
|
echo "ERROR: $port is not a valid port number"
|
|
echo ""
|
|
exit 11
|
|
fi
|
|
if [ $port -gt 65535 ]; then
|
|
echo "ERROR: $port is not a valid port number. Port numbers cannot be"
|
|
echo " greater than 65535"
|
|
echo ""
|
|
exit 12
|
|
fi
|
|
$perl -e 'use Socket; socket(FOO, PF_INET, SOCK_STREAM, getprotobyname("tcp")); setsockopt(FOO, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)); bind(FOO, pack_sockaddr_in($ARGV[0], INADDR_ANY)) || exit(1); exit(0);' $port
|
|
if [ $? != "0" ]; then
|
|
echo "ERROR: TCP port $port is already in use by another program"
|
|
echo ""
|
|
exit 13
|
|
fi
|
|
printf "Login name (default admin): "
|
|
if [ "$login" = "" ]; then
|
|
read login
|
|
if [ "$login" = "" ]; then
|
|
login="admin"
|
|
fi
|
|
fi
|
|
echo "$login" | grep : >/dev/null
|
|
if [ "$?" = "0" ]; then
|
|
echo "ERROR: Username contains a : character"
|
|
echo ""
|
|
exit 14
|
|
fi
|
|
echo $login | grep " " >/dev/null
|
|
if [ "$?" = "0" ]; then
|
|
echo "ERROR: Username contains a space"
|
|
echo ""
|
|
exit 14
|
|
fi
|
|
if [ "$login" = "webmin" ]; then
|
|
echo "ERROR: Username 'webmin' is reserved for internal use"
|
|
echo ""
|
|
exit 14
|
|
fi
|
|
printf "Login password: "
|
|
if [ "$password" = "" -a "$crypt" = "" ]; then
|
|
stty -echo
|
|
read password
|
|
stty echo
|
|
printf "\n"
|
|
printf "Password again: "
|
|
stty -echo
|
|
read password2
|
|
stty echo
|
|
printf "\n"
|
|
if [ "$password" != "$password2" ]; then
|
|
echo "ERROR: Passwords don't match"
|
|
echo ""
|
|
exit 14
|
|
fi
|
|
echo $password | grep : >/dev/null
|
|
if [ "$?" = "0" ]; then
|
|
echo "ERROR: Password contains a : character"
|
|
echo ""
|
|
exit 14
|
|
fi
|
|
fi
|
|
|
|
# Ask the user if SSL should be used
|
|
if [ "$ssl" = "" ]; then
|
|
ssl=0
|
|
$perl -e 'use Net::SSLeay' >/dev/null 2>/dev/null
|
|
if [ $? = "0" ]; then
|
|
printf "Use SSL (y/n): "
|
|
read sslyn
|
|
if [ "$sslyn" = "y" -o "$sslyn" = "Y" ]; then
|
|
ssl=1
|
|
fi
|
|
else
|
|
echo "The Perl SSLeay library is not installed. SSL not available."
|
|
rm -f core
|
|
fi
|
|
fi
|
|
|
|
# Don't use SSL if missing Net::SSLeay
|
|
if [ "$ssl" = "1" ]; then
|
|
$perl -e 'use Net::SSLeay' >/dev/null 2>/dev/null
|
|
if [ $? != "0" ]; then
|
|
ssl=0
|
|
fi
|
|
fi
|
|
|
|
# Ask whether to run at boot time
|
|
if [ "$atboot" = "" ]; then
|
|
initsupp=`grep "^os_support=" "$srcdir/init/module.info" | sed -e 's/os_support=//g' | grep $os_type`
|
|
atboot=0
|
|
if [ "$initsupp" != "" ]; then
|
|
printf "Start Webmin at boot time (y/n): "
|
|
read atbootyn
|
|
if [ "$atbootyn" = "y" -o "$atbootyn" = "Y" ]; then
|
|
atboot=1
|
|
fi
|
|
else
|
|
echo "Webmin does not support being started at boot time on your system."
|
|
fi
|
|
fi
|
|
makeboot=$atboot
|
|
|
|
# Copy files to target directory
|
|
echo "***********************************************************************"
|
|
if [ "$wadir" != "$srcdir" ]; then
|
|
echo "Copying files to $wadir .."
|
|
(cd "$srcdir" ; tar cf - . | (cd "$wadir" ; tar xf -))
|
|
echo "..done"
|
|
echo ""
|
|
fi
|
|
|
|
# Create webserver config file
|
|
echo $perl > $config_dir/perl-path
|
|
echo $var_dir > $config_dir/var-path
|
|
echo "Creating web server config files.."
|
|
cfile=$config_dir/miniserv.conf
|
|
echo "port=$port" >> $cfile
|
|
echo "root=$wadir" >> $cfile
|
|
echo "mimetypes=$wadir/mime.types" >> $cfile
|
|
echo "addtype_cgi=internal/cgi" >> $cfile
|
|
echo "realm=Webmin Server" >> $cfile
|
|
echo "logfile=$var_dir/miniserv.log" >> $cfile
|
|
echo "errorlog=$var_dir/miniserv.error" >> $cfile
|
|
echo "pidfile=$var_dir/miniserv.pid" >> $cfile
|
|
echo "logtime=168" >> $cfile
|
|
echo "ppath=$ppath" >> $cfile
|
|
echo "ssl=$ssl" >> $cfile
|
|
echo "env_WEBMIN_CONFIG=$config_dir" >> $cfile
|
|
echo "env_WEBMIN_VAR=$var_dir" >> $cfile
|
|
echo "atboot=$atboot" >> $cfile
|
|
echo "logout=$config_dir/logout-flag" >> $cfile
|
|
if [ "$listen" != "" ]; then
|
|
echo "listen=$listen" >> $cfile
|
|
else
|
|
echo "listen=10000" >> $cfile
|
|
fi
|
|
echo "denyfile=\\.pl\$" >> $cfile
|
|
echo "log=1" >> $cfile
|
|
echo "blockhost_failures=5" >> $cfile
|
|
echo "blockhost_time=60" >> $cfile
|
|
echo "syslog=1" >> $cfile
|
|
if [ "$allow" != "" ]; then
|
|
echo "allow=$allow" >> $cfile
|
|
fi
|
|
if [ "$session" != "" ]; then
|
|
echo "session=$session" >> $cfile
|
|
else
|
|
echo "session=1" >> $cfile
|
|
fi
|
|
if [ "$pam" != "" ]; then
|
|
echo "pam=$pam" >> $cfile
|
|
fi
|
|
|
|
md5pass=`$perl -e 'print crypt("test", "\\$1\\$A9wB3O18\\$zaZgqrEmb9VNltWTL454R/") eq "\\$1\\$A9wB3O18\\$zaZgqrEmb9VNltWTL454R/" ? "1\n" : "0\n"'`
|
|
|
|
ufile=$config_dir/miniserv.users
|
|
if [ "$crypt" != "" ]; then
|
|
echo "$login:$crypt:0" > $ufile
|
|
else
|
|
if [ "$md5pass" = "1" ]; then
|
|
$perl -e 'print "$ARGV[0]:",crypt($ARGV[1], "\$1\$XXXXXXXX"),":0\n"' "$login" "$password" > $ufile
|
|
else
|
|
$perl -e 'print "$ARGV[0]:",crypt($ARGV[1], "XX"),":0\n"' "$login" "$password" > $ufile
|
|
fi
|
|
fi
|
|
chmod 600 $ufile
|
|
echo "userfile=$ufile" >> $cfile
|
|
|
|
kfile=$config_dir/miniserv.pem
|
|
openssl version >/dev/null 2>&1
|
|
if [ "$?" = "0" ]; then
|
|
# We can generate a new SSL key for this host
|
|
host=`hostname`
|
|
openssl req -newkey rsa:512 -x509 -nodes -out $tempdir/cert -keyout $tempdir/key -days 1825 >/dev/null 2>&1 <<EOF
|
|
.
|
|
.
|
|
.
|
|
Webmin Webserver on $host
|
|
.
|
|
*
|
|
root@$host
|
|
EOF
|
|
if [ "$?" = "0" ]; then
|
|
cat $tempdir/cert $tempdir/key >$kfile
|
|
fi
|
|
rm -f $tempdir/cert $tempdir/key
|
|
fi
|
|
if [ ! -r $kfile ]; then
|
|
# Fall back to the built-in key
|
|
cp "$wadir/miniserv.pem" $kfile
|
|
fi
|
|
chmod 600 $kfile
|
|
echo "keyfile=$config_dir/miniserv.pem" >> $cfile
|
|
|
|
chmod 600 $cfile
|
|
echo "..done"
|
|
echo ""
|
|
|
|
echo "Creating access control file.."
|
|
afile=$config_dir/webmin.acl
|
|
rm -f $afile
|
|
if [ "$defaultmods" = "" ]; then
|
|
echo "$login: $allmods" >> $afile
|
|
else
|
|
echo "$login: $defaultmods" >> $afile
|
|
fi
|
|
chmod 600 $afile
|
|
echo "..done"
|
|
echo ""
|
|
|
|
if [ "$login" != "root" -a "$login" != "admin" ]; then
|
|
# Allow use of RPC by this user
|
|
echo rpc=1 >>$config_dir/$login.acl
|
|
fi
|
|
fi
|
|
|
|
if [ "$noperlpath" = "" ]; then
|
|
echo "Inserting path to perl into scripts.."
|
|
(find "$wadir" -name '*.cgi' -print ; find "$wadir" -name '*.pl' -print) | $perl "$wadir/perlpath.pl" $perl -
|
|
echo "..done"
|
|
echo ""
|
|
fi
|
|
|
|
echo "Creating start and stop scripts.."
|
|
rm -f $config_dir/stop $config_dir/start $config_dir/restart $config_dir/reload
|
|
echo "#!/bin/sh" >>$config_dir/start
|
|
echo "echo Starting Webmin server in $wadir" >>$config_dir/start
|
|
echo "trap '' 1" >>$config_dir/start
|
|
echo "LANG=" >>$config_dir/start
|
|
echo "export LANG" >>$config_dir/start
|
|
echo "#PERLIO=:raw" >>$config_dir/start
|
|
echo "unset PERLIO" >>$config_dir/start
|
|
echo "export PERLIO" >>$config_dir/start
|
|
echo "PERLLIB=$PERLLIB" >>$config_dir/start
|
|
echo "export PERLLIB" >>$config_dir/start
|
|
uname -a | grep -i 'HP/*UX' >/dev/null
|
|
if [ $? = "0" ]; then
|
|
echo "exec '$wadir/miniserv.pl' $config_dir/miniserv.conf &" >>$config_dir/start
|
|
else
|
|
echo "exec '$wadir/miniserv.pl' $config_dir/miniserv.conf" >>$config_dir/start
|
|
fi
|
|
|
|
echo "#!/bin/sh" >>$config_dir/stop
|
|
echo "echo Stopping Webmin server in $wadir" >>$config_dir/stop
|
|
echo "pidfile=\`grep \"^pidfile=\" $config_dir/miniserv.conf | sed -e 's/pidfile=//g'\`" >>$config_dir/stop
|
|
echo "kill \`cat \$pidfile\`" >>$config_dir/stop
|
|
|
|
echo "#!/bin/sh" >>$config_dir/restart
|
|
echo "$config_dir/stop && $config_dir/start" >>$config_dir/restart
|
|
|
|
echo "#!/bin/sh" >>$config_dir/reload
|
|
echo "echo Reloading Webmin server in $wadir" >>$config_dir/reload
|
|
echo "pidfile=\`grep \"^pidfile=\" $config_dir/miniserv.conf | sed -e 's/pidfile=//g'\`" >>$config_dir/reload
|
|
echo "kill -USR1 \`cat \$pidfile\`" >>$config_dir/reload
|
|
|
|
chmod 755 $config_dir/start $config_dir/stop $config_dir/restart $config_dir/reload
|
|
echo "..done"
|
|
echo ""
|
|
|
|
if [ "$upgrading" = 1 ]; then
|
|
echo "Updating config files.."
|
|
else
|
|
echo "Copying config files.."
|
|
fi
|
|
newmods=`$perl "$wadir/copyconfig.pl" "$os_type/$real_os_type" "$os_version/$real_os_version" "$wadir" $config_dir "" $allmods`
|
|
echo $newmods
|
|
if [ "$upgrading" != 1 ]; then
|
|
# Store the OS and version
|
|
echo "os_type=$os_type" >> $config_dir/config
|
|
echo "os_version=$os_version" >> $config_dir/config
|
|
echo "real_os_type=$real_os_type" >> $config_dir/config
|
|
echo "real_os_version=$real_os_version" >> $config_dir/config
|
|
if [ -r /etc/system.cnf ]; then
|
|
# Found a caldera system config file .. get the language
|
|
source /etc/system.cnf
|
|
if [ "$CONF_LST_LANG" = "us" ]; then
|
|
CONF_LST_LANG=en
|
|
elif [ "$CONF_LST_LANG" = "uk" ]; then
|
|
CONF_LST_LANG=en
|
|
fi
|
|
grep "lang=$CONF_LST_LANG," "$wadir/lang_list.txt" >/dev/null 2>&1
|
|
if [ "$?" = 0 ]; then
|
|
echo "lang=$CONF_LST_LANG" >> $config_dir/config
|
|
fi
|
|
fi
|
|
|
|
# Turn on logging by default
|
|
echo "log=1" >> $config_dir/config
|
|
|
|
# Use licence module specified by environment variable
|
|
if [ "$licence_module" != "" ]; then
|
|
echo licence_module=$licence_module >>$cfile
|
|
fi
|
|
else
|
|
# one-off hack to set log variable in config from miniserv.conf
|
|
grep log= $config_dir/config >/dev/null
|
|
if [ "$?" = "1" ]; then
|
|
grep log= $config_dir/miniserv.conf >> $config_dir/config
|
|
grep logtime= $config_dir/miniserv.conf >> $config_dir/config
|
|
grep logclear= $config_dir/miniserv.conf >> $config_dir/config
|
|
fi
|
|
fi
|
|
echo $ver > $config_dir/version
|
|
echo "..done"
|
|
echo ""
|
|
|
|
# Set passwd_ fields in miniserv.conf from global config
|
|
for field in passwd_file passwd_uindex passwd_pindex passwd_cindex passwd_mindex; do
|
|
grep $field= $config_dir/miniserv.conf >/dev/null
|
|
if [ "$?" != "0" ]; then
|
|
grep $field= $config_dir/config >> $config_dir/miniserv.conf
|
|
fi
|
|
done
|
|
grep passwd_mode= $config_dir/miniserv.conf >/dev/null
|
|
if [ "$?" != "0" ]; then
|
|
echo passwd_mode=0 >> $config_dir/miniserv.conf
|
|
fi
|
|
|
|
# If Perl crypt supports MD5, then make it the default
|
|
if [ "$md5pass" = "1" ]; then
|
|
echo md5pass=1 >> $config_dir/config
|
|
fi
|
|
|
|
# Set a special theme if none was set before
|
|
if [ "$theme" = "" ]; then
|
|
theme=`cat "$wadir/defaulttheme" 2>/dev/null`
|
|
fi
|
|
oldthemeline=`grep "^theme=" $config_dir/config`
|
|
oldtheme=`echo $oldthemeline | sed -e 's/theme=//g'`
|
|
if [ "$theme" != "" ] && [ "$oldthemeline" = "" ] && [ -d "$wadir/$theme" ]; then
|
|
echo "theme=$theme" >> $config_dir/config
|
|
echo "preroot=$theme" >> $config_dir/miniserv.conf
|
|
fi
|
|
|
|
# Set the product field in the global config
|
|
grep product= $config_dir/config >/dev/null
|
|
if [ "$?" != "0" ]; then
|
|
echo product=webmin >> $config_dir/config
|
|
fi
|
|
|
|
if [ "$makeboot" = "1" ]; then
|
|
echo "Configuring Webmin to start at boot time.."
|
|
(cd "$wadir/init" ; WEBMIN_CONFIG=$config_dir WEBMIN_VAR=$var_dir "$wadir/init/atboot.pl" $bootscript)
|
|
echo "..done"
|
|
echo ""
|
|
fi
|
|
|
|
# If password delays are not specifically disabled, enable them
|
|
grep passdelay= $config_dir/miniserv.conf >/dev/null
|
|
if [ "$?" != "0" ]; then
|
|
echo passdelay=1 >> $config_dir/miniserv.conf
|
|
fi
|
|
|
|
if [ "$nouninstall" = "" ]; then
|
|
echo "Creating uninstall script $config_dir/uninstall.sh .."
|
|
cat >$config_dir/uninstall.sh <<EOF
|
|
#!/bin/sh
|
|
printf "Are you sure you want to uninstall Webmin? (y/n) : "
|
|
read answer
|
|
printf "\n"
|
|
if [ "\$answer" = "y" ]; then
|
|
$config_dir/stop
|
|
echo "Running uninstall scripts .."
|
|
(cd "$wadir" ; WEBMIN_CONFIG=$config_dir WEBMIN_VAR=$var_dir LANG= "$wadir/run-uninstalls.pl")
|
|
echo "Deleting $wadir .."
|
|
rm -rf "$wadir"
|
|
echo "Deleting $config_dir .."
|
|
rm -rf "$config_dir"
|
|
echo "Done!"
|
|
fi
|
|
EOF
|
|
chmod +x $config_dir/uninstall.sh
|
|
echo "..done"
|
|
echo ""
|
|
fi
|
|
|
|
echo "Changing ownership and permissions .."
|
|
for m in $newmods; do
|
|
chown -R root $config_dir/$m
|
|
chgrp -R bin $config_dir/$m
|
|
chmod -R og-rw $config_dir/$m
|
|
done
|
|
for f in miniserv.conf miniserv.pem miniserv.users; do
|
|
chown -R root $config_dir/$f
|
|
chgrp -R bin $config_dir/$f
|
|
chmod -R og-rw $config_dir/$f
|
|
done
|
|
chmod +r $config_dir/version
|
|
if [ "$nochown" = "" ]; then
|
|
chown -R root "$wadir"
|
|
chgrp -R bin "$wadir"
|
|
chmod -R og-w "$wadir"
|
|
chmod -R a+rx "$wadir"
|
|
fi
|
|
if [ $var_dir != "/var" ]; then
|
|
chown -R root $var_dir
|
|
chgrp -R bin $var_dir
|
|
chmod -R og-rwx $var_dir
|
|
fi
|
|
echo "..done"
|
|
echo ""
|
|
|
|
# Save target directory if one was specified
|
|
if [ "$wadir" != "$srcdir" ]; then
|
|
echo $wadir >$config_dir/install-dir
|
|
else
|
|
rm -f $config_dir/install-dir
|
|
fi
|
|
|
|
if [ "$nopostinstall" = "" ]; then
|
|
echo "Running postinstall scripts .."
|
|
(cd "$wadir" ; WEBMIN_CONFIG=$config_dir WEBMIN_VAR=$var_dir "$wadir/run-postinstalls.pl")
|
|
echo "..done"
|
|
echo ""
|
|
fi
|
|
|
|
# Run package-defined post-install script
|
|
if [ -r "$srcdir/setup-post.sh" ]; then
|
|
. "$srcdir/setup-post.sh"
|
|
fi
|
|
|
|
if [ "$nostart" = "" ]; then
|
|
if [ "$inetd" != "1" ]; then
|
|
echo "Attempting to start Webmin mini web server.."
|
|
$config_dir/start
|
|
if [ $? != "0" ]; then
|
|
echo "ERROR: Failed to start web server!"
|
|
echo ""
|
|
exit 14
|
|
fi
|
|
echo "..done"
|
|
echo ""
|
|
fi
|
|
|
|
echo "***********************************************************************"
|
|
echo "Webmin has been installed and started successfully. Use your web"
|
|
echo "browser to go to"
|
|
echo ""
|
|
host=`hostname`
|
|
if [ "$ssl" = "1" ]; then
|
|
echo " https://$host:$port/"
|
|
else
|
|
echo " http://$host:$port/"
|
|
fi
|
|
echo ""
|
|
echo "and login with the name and password you entered previously."
|
|
echo ""
|
|
if [ "$ssl" = "1" ]; then
|
|
echo "Because Webmin uses SSL for encryption only, the certificate"
|
|
echo "it uses is not signed by one of the recognized CAs such as"
|
|
echo "Verisign. When you first connect to the Webmin server, your"
|
|
echo "browser will ask you if you want to accept the certificate"
|
|
echo "presented, as it does not recognize the CA. Say yes."
|
|
echo ""
|
|
fi
|
|
fi
|
|
|
|
if [ "$oldwadir" != "$wadir" -a "$upgrading" = 1 -a "$deletedold" != 1 ]; then
|
|
echo "The directory from the previous version of Webmin"
|
|
echo " $oldwadir"
|
|
echo "Can now be safely deleted to free up disk space, assuming"
|
|
echo "that all third-party modules have been copied to the new"
|
|
echo "version."
|
|
echo ""
|
|
fi
|
|
|
|
|