#!/bin/sh # shellcheck shell=sh # cloudmin-kvm-redhat-install.sh # Copyright 2005-2011 Virtualmin, Inc. # # Installs Cloudmin GPL for KVM and all dependencies on a CentOS, RHEL or # Fedora system. VER=1.1 # Define functions yesno() { true; } # Show help page if [ "$1" = "--help" ]; then exit 0 fi # Ask the user first cat </dev/null if [ $? != 0 ]; then echo .. not found. Make sure your CPU has Intel VT-x or AMD-V support echo "" exit 1 fi echo .. found OK echo "" fi # Check for the expected bridge interface if [ "$nobridge" = "" ]; then echo Checking for network interface $interface .. ( ifconfig -a ip addr true ) 2>/dev/null | grep $interface >/dev/null if [ "$?" != 0 ]; then echo ".. not found. Use the --bridge-interface flag to set the correct interface" exit 1 fi echo .. found OK echo "" fi # Check for yum echo Checking for yum .. if [ ! -x /usr/bin/yum ]; then echo .. not installed. The Cloudmin installer requires YUM to download packages echo "" exit 1 fi echo .. found OK echo "" # Make sure we have wget echo "Installing wget .." yum install -y wget echo ".. done" echo "" # Check for wget or curl echo "Checking for curl or wget..." if [ -x "/usr/bin/curl" ]; then download="/usr/bin/curl -s " elif [ -x "/usr/bin/wget" ]; then download="/usr/bin/wget -nv -O -" else echo "No web download program available: Please install curl or wget" echo "and try again." exit 1 fi echo "found $download" echo "" # Create Cloudmin licence file echo Creating Cloudmin licence file cat >/etc/server-manager-license </etc/pki/rpm-gpg/RPM-GPG-KEY-virtualmin if [ "$?" != 0 ]; then echo .. download failed exit 1 fi $download "http://software.virtualmin.com/lib/RPM-GPG-KEY-webmin" >/etc/pki/rpm-gpg/RPM-GPG-KEY-webmin if [ "$?" != 0 ]; then echo .. download failed exit 1 fi echo .. done echo "" # Import keys echo Importing GPG keys .. rpm -q gpg-pubkey-a0bdbcf9-42d1d837 || rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-virtualmin rpm -q gpg-pubkey-11f63c51-3c7dc11d || rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-webmin echo .. done echo "" # Setup the YUM repo file echo Creating YUM repository for Cloudmin packages .. cat >/etc/yum.repos.d/cloudmin.repo </dev/null if [ "$?" != 0 ]; then echo .. kernel module did not load successfully exit 1 fi sleep 5 if [ ! -e /dev/kvm ]; then echo .. KVM device file /dev/kvm is missing exit 1 fi echo .. done echo "" fi # Create loop devices if missing echo Creating /dev/loop devices .. for loop in 0 1 2 3 4 5 6 7; do if [ ! -r "/dev/loop$loop" ]; then mknod "/dev/loop$loop" b 7 $loop fi done echo .. done echo "" # YUM install webmin, theme and Cloudmin echo Installing Cloudmin packages using YUM .. yum install -y webmin wbm-server-manager wbt-virtual-server-theme if [ "$?" != 0 ]; then echo .. install failed exit 1 fi mkdir -p /kvm echo .. done echo "" # Configure Webmin to use theme echo Configuring Webmin .. grep -v "^preroot=" /etc/webmin/miniserv.conf >/tmp/miniserv.conf.$$ echo preroot=authentic-theme >>/tmp/miniserv.conf.$$ cat /tmp/miniserv.conf.$$ >/etc/webmin/miniserv.conf rm -f /tmp/miniserv.conf.$$ grep -v "^theme=" /etc/webmin/config >/tmp/config.$$ echo theme=authentic-theme >>/tmp/config.$$ cat /tmp/config.$$ >/etc/webmin/config rm -f /tmp/config.$$ /etc/webmin/restart echo .. done echo "" # Setup BIND zone for virtual systems basezone=$(hostname -d) if [ "$basezone" = "" ]; then basezone=example.com fi zone="cloudmin.$basezone" echo Creating DNS zone $zone .. /usr/libexec/webmin/server-manager/setup-bind-zone.pl --zone $zone --auto-view if [ "$?" != 0 ]; then echo .. failed else echo kvm_zone=$zone >>/etc/webmin/server-manager/config echo kvm_zone=$zone >>/etc/webmin/server-manager/this echo .. done fi echo "" # Set Qemu mode flag if [ "$qemu" = 1 ]; then echo kvm_qemu=1 >>/etc/webmin/server-manager/config fi # Enable bridge if [ "$nobridge" = "" ]; then echo Creating network bridge .. /usr/libexec/webmin/server-manager/setup-kvm-bridge.pl $interface brex=$? if [ "$brex" = 0 ]; then echo .. already active else if [ "$brex" = 1 ]; then echo .. done else echo .. bridge creation failed fi fi echo "" fi # Open Webmin firewall port echo Opening port 10000 on IPtables firewall .. ports="10000 10001 10002 10003 10004 10005 843" /usr/libexec/webmin/firewall/open-ports.pl $ports if [ "$?" != 0 ]; then echo .. failed else echo .. done fi echo "" # Open firewalld ports if [ -x /usr/bin/firewall-cmd ]; then echo Opening port 10000 on Firewalld firewall .. for port in $ports; do /usr/bin/firewall-cmd --add-port=$port/tcp >/dev/null /usr/bin/firewall-cmd --permanent --add-port=$port/tcp >/dev/null done echo .. done echo "" fi # Tell user about need to reboot hostname=$(hostname) if [ "$brex" = 1 ]; then echo Cloudmin GPL has been successfully installed. However, you will echo need to reboot to activate the network bridge before any KVM echo instances can be created. echo echo One this is done, you can login to Cloudmin at : echo https://$hostname:10000/ else echo Cloudmin GPL has been successfully installed. echo echo You can login to Cloudmin at : echo https://$hostname:10000/ fi # All done!