Virtualbox Mac OS X下静默安装CentOS 7后,虚拟机箱缺少来宾添加

Virtualbox Mac OS X下静默安装CentOS 7后,虚拟机箱缺少来宾添加,virtualbox,Virtualbox,我正在使用Virtual Box在我的Mac OS X上安装Centos7虚拟机。这在过去似乎不起作用,但我突然遇到了问题。不知道为什么 我确实创建了一个脚本来自动化整个过程。该脚本主要基于最小的ISO安装程序执行Centos的VBoxManage无人值守安装 VBoxManage无人值守安装centos7--user=datasqill--password=pwd--country=DE--locale=DE_DE--time zone=UTC--hostname=centos7.treime

我正在使用Virtual Box在我的Mac OS X上安装Centos7虚拟机。这在过去似乎不起作用,但我突然遇到了问题。不知道为什么

我确实创建了一个脚本来自动化整个过程。该脚本主要基于最小的ISO安装程序执行Centos的VBoxManage无人值守安装

VBoxManage无人值守安装centos7--user=datasqill--password=pwd--country=DE--locale=DE_DE--time zone=UTC--hostname=centos7.treimers--iso=/Users/treimers/Projekte/Linux/CentOS-7-x86_64-Minimal-1908.iso--安装后模板redhat_postinstall.sh--脚本模板redhat67_ks.cfg--安装添加--start vm gui

我过去常打电话

VBoxManage guestproperty wait centos7/VirtualBox/GuestInfo/OS/NoLoggedInUsers

以等待安装过程完成。等待没有结束,似乎永远在等待。我认为这是因为没有安装来宾添加

在我的脚本下面找到,我正在使用Virtual Box应用程序文件夹中的资源文件redhat67_ks.cfg和redhat_postinstall.sh

我的环境是

操作系统:Mac OS X 10.11.6(El Capitan) 虚拟盒:6.1.6 r137129 CentOS图像:CentOS-7-x86_64-Minimal-1908.iso

也许有人知道我的设置有什么问题

提前谢谢 托尔斯滕

#/bin/bash
函数printhelp(){
echo“创建CentOS虚拟机”
echo“用法:$(基本名称$0)[选项]…”
echo“使用CentOS 7创建新的VirtualBox虚拟机”
回声
回显“选项:”
echo“-?:帮助-打印用法并退出”
echo“-c:国家/地区-新虚拟机的国家/地区设置,如DE、EN等”
echo“-h:主机名-新VM的主机名”
echo“-i:isoimage-到CentOS ISO Image的路径”
echo“-k:keyfile-私钥文件(在用户主目录中使用./Vagrant.d/unsecure_private_key)”
echo“-l:locale-新VM的locale设置,如de_de,en_US,…”
echo“-m:keymap-新虚拟机(如de、en等)的键盘映射”
echo“-n:name-新VM的VirtualBox名称”
echo“-p:password-新VM中标准用户和根用户的密码”
echo“-s:size-磁盘大小(MB)”
echo“-t:时区-新虚拟机的时区,如UTC,…”
echo“-u:user-在新VM中创建具有给定名称的标准用户”
echo“-v:verbose-在执行时将所有命令打印到控制台[可选]”
回声
echo“示例:”
echo“$(basename$0)-c DE-h centos7.dataskill-i~/Projekte/Linux/CentOS-7-x86_64-Minimal-1908.iso-k~/.vagrant.d/unsecure_private_key-l DE-m DE-n centos7-p softquadra-s 8192-t UTC-u dataskill”
回声
回声“”
出口1
}
函数removeOld(){
#删除以前任何失败的尝试
# https://www.virtualbox.org/ticket/17335
VBoxManage controlvm${VBoxName}关机2>/dev/null | | true
睡眠10
VBoxManage unregistervm${VBoxName}--删除2>/dev/null | | true
睡眠10
rm-fr“${VBoxDir}”/${VBoxName}2>/dev/null
}
函数createVM(){
#创建虚拟机
#注意:可用的OSTYPE可以通过VBoxManage列表OSTYPE | less显示
VBoxManage createvm--名称${VBoxName}--ostype RedHat_64--寄存器
#创建并连接磁盘
VBoxManage CreateMedil--文件名“${VBoxDir}/${VBoxName}/${VBoxName}.vdi”--大小${diskSize}
VBoxManage storagectl${VBoxName}--名称SATA--添加SATA--控制器IntelAhci
VBoxManage storageattach${VBoxName}--storagectl SATA--端口0--设备0--类型hdd--媒体“${VBoxDir}/${VBoxName}/${VBoxName}.vdi”
VBoxManage-storagectl${VBoxName}--名称IDE--添加IDE
VBoxManage-storageattach${VBoxName}--storagectl IDE--端口0--设备0--类型DVDRIVE--媒体${IsoImage}
#设置内存
VBoxManage modifyvm${VBoxName}--内存1024--vram 16
#启用io apic
VBoxManage modifyvm${VBoxName}--ioapic打开
#设置启动顺序
VBoxManage modifyvm${VBoxName}--boot1 dvd--boot2磁盘--boot3无--boot4无
#设置虚拟CPU
VBoxManage modifyvm${VBoxName}--CPU 1
#禁用音频
VBoxManage modifyvm${VBoxName}--音频无
#禁用usb控制器
VBoxManage modifyvm${VBoxName}--usb关闭
VBoxManage modifyvm${VBoxName}--usbehci关闭
VBoxManage modifyvm${VBoxName}--usbxhci关闭
#定义网络设置
VBoxManage modifyvm${VBoxName}--nic1 nat
#创建端口转发规则
#VBoxManage modifyvm${VBoxName}--natpf1 ssh2,tcp,127.0.0.122022,22
}
函数unattendedInstall(){
#启动无人值守安装
VBoxManage无人参与安装${VBoxName}--user=${user}--password=${password}--country=${country}--locale=${locale}--timezone=${timezone}--hostname=${hostname}--iso iso IsoImage}--post-install模板redhat\u postinstall.sh--脚本模板redhat67\u ks.cfg--install additions--start vm gui
}
函数waitVM(){
VBoxManage guestproperty wait${VBoxName}“/VirtualBox/GuestInfo/OS/NoLoggedInUsers”
}
函数postInstall(){
#设置键映射
# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-changing_the_keyboard_layout
# https://linuxconfig.org/how-to-change-system-keyboard-keymap-layout-on-centos-7-linux
VBoxManage guestcontrol${VBoxName}--username=root--password=${password}run/bin/localectl set keymap${keymap}
#允许sudo
cat>${user}&1 | tee${logfile}

我终于解决了我的问题。RTFL=读取f..log

系统无法使用找到并安装内核开发包

log\u命令\u在目标yum-y安装“kernel-devel-$(uname-r)”

这是安装Virtual Box guest additions所必需的

我的来宾系统是CentOS 7,但我使用了最小ISO进行安装(CentOS-7-x86_64-minimal-1908.ISO),其中不包含内核开发包。
#!/bin/bash

function printhelp() {
    echo "Create CentOS VM"
    echo "Usage: $(basename $0) [OPTIONS]..."
    echo "Creates a new VirtualBox VM with CentOS 7"
    echo
    echo "Options:"
    echo "  -?: help - print usage and exit"
    echo "  -c <country>: country - country setting for new VM like DE, EN, ..."
    echo "  -h <hostname>: host name - host name of new VM"
    echo "  -i <isoimage>: isoimage- path to CentOS ISO Image"
    echo "  -k <keyfile>: keyfile - private Vagrant key file (use ./vagrant.d/insecure_private_key in user home directory)"
    echo "  -l <locale>: locale - locale setting of new VM like de_DE, en_US, ..."
    echo "  -m <keymap>: keymap - keyboard map for new VM like de, en, ..."
    echo "  -n <name>: name - VirtualBox name of new VM"
    echo "  -p <password>: password - password for standard user and root user in new VM"
    echo "  -s <size>: size - disk size in MB"
    echo "  -t <timezone>: timezone - time zone of new VM like UTC, ..."
    echo "  -u <user>: user - create standard user with given name in new VM"
    echo "  -v: verbose - prints all commands to console on execution [OPTIONAL]"
    echo
    echo "Example:"
    echo "$(basename $0) -c DE -h centos7.datasqill -i ~/Projekte/Linux/CentOS-7-x86_64-Minimal-1908.iso -k ~/.vagrant.d/insecure_private_key -l de_DE -m de -n centos7 -p softquadrat -s 8192 -t UTC -u datasqill"
    echo
    echo ""
    exit 1
}

function removeOld() {
    # remove any failed previous attempt
    # https://www.virtualbox.org/ticket/17335
    VBoxManage controlvm ${VBoxName} poweroff 2> /dev/null || true
    sleep 10
    VBoxManage unregistervm ${VBoxName} --delete 2> /dev/null || true
    sleep 10
    rm -fr "${VBoxDir}"/${VBoxName} 2> /dev/null
}

function createVM() {
    # create vm
    # Note: available ostypes can be displayed by VBoxManage list ostypes | less
    VBoxManage createvm --name ${VBoxName} --ostype RedHat_64 --register
    # create and attach disks
    VBoxManage createmedium --filename "${VBoxDir}/${VBoxName}/${VBoxName}.vdi" --size ${diskSize}
    VBoxManage storagectl ${VBoxName} --name SATA --add SATA --controller IntelAhci
    VBoxManage storageattach ${VBoxName} --storagectl SATA --port 0 --device 0 --type hdd --medium "${VBoxDir}/${VBoxName}/${VBoxName}.vdi"
    VBoxManage storagectl ${VBoxName} --name IDE --add ide
    VBoxManage storageattach ${VBoxName} --storagectl IDE --port 0 --device 0 --type dvddrive --medium ${IsoImage}
    # set memory
    VBoxManage modifyvm ${VBoxName} --memory 1024 --vram 16
    # enable io apic
    VBoxManage modifyvm ${VBoxName} --ioapic on
    # set boot order
    VBoxManage modifyvm ${VBoxName} --boot1 dvd --boot2 disk --boot3 none --boot4 none
    # set virtual cpus
    VBoxManage modifyvm ${VBoxName} --cpus 1
    # disable audio
    VBoxManage modifyvm ${VBoxName} --audio none
    # disable usb controller
    VBoxManage modifyvm ${VBoxName} --usb off
    VBoxManage modifyvm ${VBoxName} --usbehci off
    VBoxManage modifyvm ${VBoxName} --usbxhci off
    # define network settings
    VBoxManage modifyvm ${VBoxName} --nic1 nat
    # create port forwarding rule
    # VBoxManage modifyvm ${VBoxName} --natpf1 ssh2,tcp,127.0.0.1,22022,,22
}

function unattendedInstall() {
    # start unattended installation
    VBoxManage unattended install ${VBoxName} --user=${user} --password=${password} --country=${country} --locale=${locale} --time-zone=${timezone} --hostname=${hostname} --iso=${IsoImage} --post-install-template redhat_postinstall.sh --script-template redhat67_ks.cfg --install-additions --start-vm=gui
}

function waitVM() {
    VBoxManage guestproperty wait ${VBoxName} "/VirtualBox/GuestInfo/OS/NoLoggedInUsers"
}

function postInstall() {
    # set keymap
    # https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-changing_the_keyboard_layout
    # https://linuxconfig.org/how-to-change-system-keyboard-keymap-layout-on-centos-7-linux
    VBoxManage guestcontrol ${VBoxName} --username=root --password=${password} run /bin/localectl set-keymap ${keymap}
    # allow sudo
    cat > ${user} <<-EOF
        ${user} ALL=(ALL) NOPASSWD:ALL
        Defaults:${user} !requiretty
EOF
    VBoxManage guestcontrol ${VBoxName} --username=root --password=${password} copyto --target-directory /etc/sudoers.d ${user}
    rm ${user}
    # create authorized keys
    ssh-keygen -y -f ${privateKeyFile} > authorized_keys
    VBoxManage guestcontrol ${VBoxName} --username=${user} --password=${password} mkdir --parents /home/${user}/.ssh
    VBoxManage guestcontrol ${VBoxName} --username=${user} --password=${password} copyto --target-directory /home/${user}/.ssh authorized_keys
    VBoxManage guestcontrol ${VBoxName} --username=${user} --password=${password} run /bin/chmod 700 /home/${user}/.ssh
    VBoxManage guestcontrol ${VBoxName} --username=${user} --password=${password} run /bin/chmod 600 /home/${user}/.ssh/authorized_keys
    rm authorized_keys
}

function doall() {
    echo "--- Removing old installation"
    date +"%y-%m-%d-%H-%M-%S"
    removeOld
    echo "--- Creating virtual machine"
    date +"%y-%m-%d-%H-%M-%S"
    createVM
    echo "--- Starting Unattended Installation"
    date +"%y-%m-%d-%H-%M-%S"
    unattendedInstall
    echo "--- Wait VM"
    date +"%y-%m-%d-%H-%M-%S"
    waitVM
    echo "--- Post Install Steps"
    date +"%y-%m-%d-%H-%M-%S"
    postInstall
    echo "--- Done"
    date +"%y-%m-%d-%H-%M-%S"
}

# main starts here
set -o nounset
set -o errexit

# get opts
while getopts "?c:h:i:k:l:m:n:p:s:t:u:v" opt; do
    case ${opt} in
    \?)
        printhelp
        ;;
    c)
        country=${OPTARG}
        ;;
    h)
        hostname=${OPTARG}
        ;;
    i)
        IsoImage=${OPTARG}
        ;;
    k)
        privateKeyFile=${OPTARG}
        ;;
    l)
        locale=${OPTARG}
        ;;
    m)
        keymap=${OPTARG}
        ;;
    n)
        VBoxName=${OPTARG}
        ;;
    p)
        password=${OPTARG}
        ;;
    s)
        diskSize=${OPTARG}
        ;;
    t)
        timezone=${OPTARG}
        ;;
    u)
        user=${OPTARG}
        ;;
    v)
        set -x
        ;;
    *)
        echo "Error: Unknown option ${opt}"
        echo
        printhelp
        ;;
    esac
done

shift $((OPTIND-1))

if [[ $# -ne 0 || -z "${country:-}" || -z "${hostname:-}" || -z "${IsoImage:-}" || -z "${privateKeyFile:-}" || -z "${locale:-}"|| -z "${keymap:-}" || -z "${VBoxName:-}" || -z "${password:-}" || -z ${diskSize:-} || -z "${timezone:-}" || -z "${user:-}" ]]
then
    printhelp
fi

# directory with virtual boxes
VBoxDir=`VBoxManage list systemproperties | awk '/Default machine folder/ { print $4 }'`

# get date and time stamp
dat=`date +"%y-%m-%d-%H-%M-%S"`

# log file
logfile=log/createCentOSVM_${dat}.log
mkdir -p log

{
    doall
} 2>&1 | tee ${logfile}