2016-10-04 6 views
1

Позвольте мне начать с того, что я хочу сделать. Я хотел бы полностью автоматизировать автоматическое создание изображений QEMU/KVM VM с использованием virt-install. Я знаю, что некоторые люди используют инструмент GUI для этого или редактируют XML-описание уже существующего изображения, но я хочу начать с нуля.Как полностью автоматизировать автономную виртуальную установку?

Я разобрался, и примеров этого трудно найти. Я обнаружил, что virt-install - это команда, которую можно использовать в интерактивном режиме с подключенной консолью TTY (вы вручную отвечаете на вопросы конфигурации во время установки). Для полностью автоматизированного решения вы можете указать файл kickstart (обычно preseed.cfg), чтобы предоставить ответы на вопросы, которые вы обычно вводите вручную. Файл kickstart также может указать дополнительное программное обеспечение для установки, настройки диска и сети и т. Д.).

Я думаю, что у меня это в основном работает, за исключением того, что установка висит вскоре после начала установки. I думаю, что имеет какое-то отношение к необходимости (или нет) для подключения консоли к установке. Вот virt-install команды Я использую:

virt-install --connect qemu:///system \ 
    --name vm --ram 128 \ 
    --disk path=./vm.qcow2,size=8,format=qcow2 \ 
    --location 'http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/' \ 
    --network user,model=virtio \ 
    --initrd-inject preseed.cfg \ 
    --extra-args="console=tty0 console=ttyS0,115200" 

Это файл preseed.cfg (который я списан из многих примеров в Интернете и в документации Ubuntu):

### Localization 
# Locale sets language and country. 
d-i debian-installer/locale string en_US 
# Keyboard selection. 
d-i keyboard-configuration/layoutcode string us 
d-i keyboard-configuration/modelcode string pc105 
d-i keyboard-configuration/variantcode string 

### Network configuration 
# netcfg will choose an interface that has link if possible. This makes it 
# skip displaying a list if there is more than one interface. 
d-i netcfg/choose_interface select auto 
# Any hostname and domain names assigned from dhcp take precedence over 
# values set here. However, setting the values still prevents the questions 
# from being shown, even if values come from dhcp. 
d-i netcfg/get_hostname string vm 
d-i netcfg/get_domain string foobar.net 
# Disable that annoying WEP key dialog. 
d-i netcfg/wireless_wep string 

### Mirror settings 
d-i mirror/country string manual 
d-i mirror/http/hostname string us.archive.ubuntu.com 
d-i mirror/http/directory string /ubuntu 
d-i mirror/http/proxy string 

### Partitioning 
# Encrypt your home directory? 
d-i user-setup/encrypt-home boolean false 
# Alternatively, you can specify a disk to partition. The device name 
# can be given in either devfs or traditional non-devfs format. 
d-i partman-auto/disk string /dev/vda 
# In addition, you'll need to specify the method to use. 
# The presently available methods are: "regular", "lvm" and "crypto" 
d-i partman-auto/method string regular 
# You can choose from any of the predefined partitioning recipes. 
d-i partman-auto/choose_recipe select atomic 
# This makes partman automatically partition without confirmation, provided 
# that you told it what to do using one of the methods above. 
d-i partman-partitioning/confirm_write_new_label boolean true 
d-i partman/choose_partition select finish 
d-i partman/confirm boolean true 
d-i partman/confirm_nooverwrite boolean true 

### Clock and time zone setup 
# Controls whether or not the hardware clock is set to UTC. 
d-i clock-setup/utc boolean true 
# You may set this to any valid setting for $TZ; see the contents of 
# /usr/share/zoneinfo/ for valid values. 
d-i time/zone string UTC 

### Account setup 
# Skip creation of a root account (normal user account will be able to 
# use sudo). 
d-i passwd/root-login boolean false 

# To create a normal user account. 
d-i passwd/user-fullname string VMuser 
d-i passwd/username string vmuser 
# Normal user's password, either in clear text 
# or encrypted using an MD5 hash. 
d-i passwd/user-password-crypted password CRACKMECRACKM 

# This is fairly safe to set, it makes grub install automatically to the MBR 
# if no other operating system is detected on the machine. 
d-i grub-installer/only_debian boolean true 

### Package selection 
d-i tasksel/first multiselect standard 
# Individual additional packages to install 
d-i pkgsel/include string openssh-server 

### Finishing up the first stage install 
# Avoid that last message about the install being complete. 
d-i finish-install/reboot_in_progress note 
# How do you want to manage upgrades on this system? 
d-i pkgsel/update-policy select none 

В конце концов, что, когда выполнения virt-install команду я вижу:

WARNING Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package. 
WARNING No console to launch for the guest, defaulting to --wait -1 

Starting install... 
Retrieving file linux...                     
Retrieving file initrd.gz...                    
Allocating 'virtinst-linux.rCdX0h'                  
Transferring virtinst-linux.rCdX0h                  
Allocating 'virtinst-initrd.gz.BbRBMv'                 
Transferring virtinst-initrd.gz.BbRBMv                 
Creating domain...                      
Domain installation still in progress. Waiting for installation to complete. 

и он просто висит. Если I ^Z в фоновом режиме и начать virsh Я вижу vm в рабочем состоянии.

Я думаю, что я близко, но нужно это исправить, так что:

  1. Установка показывает полную и virt-install возвращается к раковине.
  2. Новая виртуальная машина завершена, и я остался с файлом изображения, готовым к работе.

Я думаю, # 2 может быть выполнена в preseed.cfg файла с какой-то инструкции по очистке (по-прежнему исследующих это), но любая помощь фиксации # 1 было бы весьма признателен.

+0

Привет, вы, наконец, решить проблему? Я думаю, что испытываю такую ​​же проблему ... –

+1

@HadrienTOMA Я никогда не понял, и решил использовать [Packer] (https://www.packer.io) для выполнения моих автоматизированных сборщиков VM. Он работает хорошо (полностью без присмотра), кажется, хорошо поддерживается и будет создавать изображения VM для нескольких платформ в дополнение к QEMU (например, AWS-AMI, VirtualBox и т. Д.). –

+0

Хорошо, спасибо за упоминание Пакера, я попробую! –

ответ

0

Чтобы virt-installuse a Kickstart file to initialize an operating system, вы должны передать ks= аргумент к ядру, определяя его через --extra-args параметра:

--initrd-inject preseed.cfg \ 
--extra-args="ks=file:/preseed.cfg console=tty0 console=ttyS0,115200" 

В приведенном выше примере впрыскивает локальный файл Kickstart на гостевую операционную систему, чтобы быть используется для автоматической установки.

Вы также можете указать ks через HTTP:

--extra-args="ks=http://192.168.1.1/preseed.cfg" 

или FTP:

--extra-args="ks=ftp://192.168.1.1/preseed.cfg" 

или NFS:

--extra-args="ks=nfs:192.168.1.1:/preseed.cfg" 
Смежные вопросы