Created
December 20, 2019 06:48
-
-
Save bilalatli/bcdef6ce0263538d2e113f214822b12f to your computer and use it in GitHub Desktop.
Cloudmin KVM - Debian install script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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. | |
| # | |
| # Debug & Optimize : @risyasin | |
| 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 | |
| if [ "$?" != 0 ]; then | |
| echo .. install failed | |
| exit 1 | |
| fi | |
| 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 webmin-virtual-server-mobile webmin-security-updates | |
| 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! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment