123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- #!/bin/sh
- # cloudmin-kvm-debian-install.sh
- # Copyright 2005-2011 Virtualmin, Inc.
- #
- # Installs Cloudmin GPL for KVM and all dependencies on a Debian or Ubuntu
- # system.
- VER=1.1
- # Define functions
- yesno () {
- while read line; do
- case $line in
- y|Y|Yes|YES|yes|yES|yEs|YeS|yeS) return 0
- ;;
- n|N|No|NO|no|nO) return 1
- ;;
- *)
- printf "\nPlease enter y or n: "
- ;;
- esac
- done
- }
- # Show help page
- if [ "$1" = "--help" ]; then
- echo $0 [--qemu] [--no-bridge | --bridge-interface ethN]
- exit 0
- fi
- # Ask the user first
- cat <<EOF
- *******************************************************************************
- * Welcome to the Cloudmin GPL for KVM installer, version $VER *
- *******************************************************************************
- Operating systems supported by this installer are:
- Debian 4.0 or later on i386 and x86_64
- Ubuntu 8.04 or later on i386 and x86_64
- If your OS is not listed above, this script will fail (and attempting
- to run it on an unsupported OS is not recommended, or...supported).
- EOF
- printf " Continue? (y/n) "
- if ! yesno
- then exit
- fi
- echo ""
- # Check for non-kernel mode flag
- if [ "$1" = "--qemu" ]; then
- qemu=1
- fi
- # Check for flag to disable bridge setup
- if [ "$1" = "--no-bridge" ]; then
- shift
- nobridge=1
- fi
- # Check for flag for network interface
- if [ "$1" = "--bridge-interface" ]; then
- shift
- interface=$1
- shift
- fi
- # Cleanup old repo files
- grep -v cloudmin.virtualmin.com /etc/apt/sources.list >/etc/apt/sources.list.clean
- mv /etc/apt/sources.list.clean /etc/apt/sources.list
- # Check for KVM-capable CPU
- if [ "$qemu" != 1 ]; then
- echo Checking for hardware support for KVM ..
- grep -e vmx -e svm /proc/cpuinfo >/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 apt-get
- echo Checking for apt-get ..
- if [ ! -x /usr/bin/apt-get ]; then
- echo .. not installed. The Cloudmin installer requires APT to download packages
- echo ""
- exit 1
- fi
- echo .. found OK
- echo ""
- # Make sure we have wget
- echo "Installing wget .."
- apt-get -y install 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 <<EOF
- SerialNumber=GPL
- LicenseKey=GPL
- EOF
- chmod 600 /etc/server-manager-license
- # Download GPG keys
- echo Downloading GPG keys for packages ..
- $download "http://software.virtualmin.com/lib/RPM-GPG-KEY-virtualmin" >/tmp/RPM-GPG-KEY-virtualmin
- if [ "$?" != 0 ]; then
- echo .. download failed
- exit 1
- fi
- $download "http://software.virtualmin.com/lib/RPM-GPG-KEY-webmin" >/tmp/RPM-GPG-KEY-webmin
- if [ "$?" != 0 ]; then
- echo .. download failed
- exit 1
- fi
- echo .. done
- echo ""
- # Import keys
- echo Importing GPG keys ..
- apt-key add /tmp/RPM-GPG-KEY-virtualmin && apt-key add /tmp/RPM-GPG-KEY-webmin
- echo .. done
- echo ""
- # Setup the APT sources file
- echo Creating APT repository for Cloudmin packages ..
- cat >>/etc/apt/sources.list <<EOF
- deb http://cloudmin.virtualmin.com/kvm/debian binary/
- EOF
- apt-get update
- echo .. done
- echo ""
- # Turn off apparmor
- if [ -r /etc/init.d/apparmor ]; then
- echo Turning off apparmor ..
- /etc/init.d/apparmor stop
- update-rc.d -f apparmor remove
- echo .. done
- echo ""
- fi
- # YUM install Perl, modules and other dependencies
- echo Installing required Perl modules using APT ..
- apt-get -y install perl openssl libio-pty-perl libio-stty-perl libnet-ssleay-perl libwww-perl libdigest-hmac-perl libxml-simple-perl libcrypt-ssleay-perl libauthen-pam-perl cron bind9 lsof parted openssh-client openssh-server bzip2
- if [ "$?" != 0 ]; then
- echo .. install failed
- exit 1
- fi
- apt-get -y install kvm qemu || apt-get -y install qemu-kvm qemu
- if [ "$?" != 0 ]; then
- echo .. install failed
- exit 1
- fi
- apt-get install -y libjson-perl
- apt-get install -y bind9utils
- apt-get install -y dhcp3-server
- apt-get install -y libdigest-sha1-perl
- apt-get install -y ebtables
- echo .. done
- echo ""
- # Activate cgroups
- echo Installing and activating cgroups ..
- apt-get install -y cgroup-bin
- if [ "$?" != 0 ]; then
- echo .. install failed - CPU limits will not be available
- else
- /etc/init.d/cgconfig start
- update-rc.d cgconfig defaults
- echo .. done
- fi
- echo ""
- # Activate KVM kernel module
- if [ "$qemu" != 1 ]; then
- echo Activating KVM kernel module ..
- modprobe kvm-intel || modprobe kvm-amd
- /sbin/lsmod | grep kvm >/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 ""
- # APT install webmin, theme and Cloudmin
- echo Installing Cloudmin packages using APT ..
- apt-get -y install webmin
- apt-get -y install webmin-server-manager webmin-virtual-server-theme
- if [ "$?" != 0 ]; then
- echo .. install failed
- exit 1
- fi
- mkdir -p /xen
- 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/share/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/share/webmin/server-manager/setup-kvm-bridge.pl $interface
- brex=$?
- if [ "$brex" = 0 ]; then
- echo .. already configured
- 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 host firewall ..
- /usr/share/webmin/firewall/open-ports.pl 10000 10001 10002 10003 10004 10005 843
- if [ "$?" != 0 ]; then
- echo .. failed
- else
- echo .. done
- fi
- echo ""
- # 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!
|