vagrant-libvirt에서 실행되는 패커를 사용하여 상자 빌드

vagrant-libvirt에서 실행되는 패커를 사용하여 상자 빌드

libvirt 공급자를 통해 방랑자에서 실행할 데비안 확장을 만들고 싶습니다.

처음부터 빌드를 시도하고 패커를 사용하여 빌드도 시도했지만 가장 좋은 결과는 재부팅 시 "OS를 찾을 수 없음" 오류가 발생하거나 상자에서 방랑 상태가 정지되는 것입니다.

언제아니요패커를 사용하면 virt-manager 내에서 상자를 시작할 수 있고 작동하지만 동일한 상자에서 vagrant up을 수행하면 네트워크에 액세스할 수 없습니다. Packer는 이것을 단순화해야 하지만미디어를 찾을 수 없습니다.시작하는 동안 오류가 발생했습니다.

Vagrant로 실행하면 다음 위치에서 정지됩니다.

기본값: 도메인이 IP 주소를 얻을 때까지 기다립니다.

그런 다음 다음을 통해 컴퓨터 화면에 연결하면 virt-manager:

acpid: 이벤트 대기 중: 이벤트 로깅이 꺼졌습니다.

내가 어디서 잘못됐나요?

이 패커 스크립트가 출력된 후에 추가 수동 단계가 필요합니까?

제가 사용하는 패키징 템플릿은 다음과 같습니다.

{

"variables": {
    "user": "vagrant",
    "password": "vagrant",
    "disk_size": "100000",
    "domain": ""
},

"builders": [
    {
        "name": "debian93-vagrant",

        "type": "qemu",
        "format": "qcow2",
        "accelerator": "kvm",
        "disk_size": "{{ user `disk_size` }}",
    "iso_url": "https://cdimage.debian.org/debian-cd/9.3.0/amd64/iso-cd/debian-9.3.0-amd64-netinst.iso",
        "iso_checksum": "83480be837710a76fd4e75a6573ca110e06f5a7589d2d3852bdb0f45749800b3",
        "iso_checksum_type": "sha256",

        "http_directory": "http",

        "ssh_username": "{{ user `user` }}",
        "ssh_password": "{{ user `password` }}",
        "shutdown_command": "echo '{{ user `password` }}' | sudo -S shutdown -h now",

        "ssh_wait_timeout": "60m",

        "boot_wait": "2s",
        "boot_command": [
               "<esc><wait><wait>",
               "install ",

               "auto=true ",
               "priority=critical ",
               "interface=auto ",
               "url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg ",

               "passwd/user-fullname={{ user `user` }} ",
               "passwd/user-password={{ user `password` }} ",
               "passwd/user-password-again={{ user `password` }} ",
               "passwd/username={{ user `user` }} ",

               "<enter>"
        ]
    }
],

"provisioners": [
    {
        "type": "shell",
        "execute_command": "echo '{{ user `password` }}' | {{ .Vars }} sudo -E -S bash '{{ .Path }}'",
        "scripts": [
            "scripts/vagrant.sh",
            "scripts/update.sh",
            "scripts/packages.sh",
            "scripts/cleanup.sh"
        ]
    }
],

    "post-processors": [
    {
        "keep_input_artifact": false,
        "output": "box/debian93-vagrant.box",
        "type": "vagrant"
    }
]

}

그리고 이를 시작하는 데 사용된 Vagrant 파일은 다음과 같습니다.

ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
   # TODO build our own and deploy it to vagrantboxes
   # config.vm.box = "debian/jessie64"
   config.vm.box = "debian93Vagrant"
   # config.vm.box = ""
   #config.vm.box_version = "0.0.1"

   # Remove or adapt host_ip if remote access is required
   config.vm.network "forwarded_port", guest: 5601, host: 5601, host_ip:    "127.0.0.1"
   config.vm.network "forwarded_port", guest: 9200, host: 9200, host_ip: "127.0.0.1"
   config.vm.network "forwarded_port", guest: 5044, host: 5044, host_ip: "127.0.0.1"

   # Create a private network, which allows host-only access to the machine
   # using a specific IP.
   config.vm.network "private_network", ip: "192.168.121.10"

   # Create a public network, which generally matched to bridged network.
   # Bridged networks make the machine appear as another physical device on
   # your network.
   # config.vm.network "public_network"

   # If more folders are needed map them here
   # config.vm.synced_folder ".", "/vagrant"


   config.vm.synced_folder "./config", "/config"

   # Libvirt provider with added oomph
   config.vm.provider :libvirt do |prov|
          prov.memory = 4096 
          prov.cpus = 4
   end

   # Basic setup through a shell provisioner
   config.vm.provision "shell", inline: <<-SHELL
        apt-get update
        apt-get upgrade -y
        apt-get install net-tools htop
        sleep 5
  SHELL

  # Deploy the stack
  config.vm.provision "ansible" do |an|
        an.playbook = "./ansible/single_machine.yml"
  end

  # Leave things running permanently post installation
  config.vm.provision "shell", inline: <<-SHELL
    systemctl enable logstash 
    systemctl enable elasticsearch 
    systemctl enable kibana
    service kibana start
    service elasticsearch start
    service logstash start
 SHELL

end

추가 조사 결과 MAC 주소가 다음과 같이 일치하지 않는 것으로 나타났습니다.

  • 부팅된 이미지 내부(virt-manager를 통해 액세스): 52:54:00:a0:46:68
  • Vagrant에서(디버그 출력에서): mac="52:54:00:9e:ad:85"
  • 그리고 오류 메시지에서: DEBUG wait_till_up: Searching IP for MAC address: 52:54:00:b8:88:7d

또한 도메인의 UUID도 다릅니다.

  • Vagrant는 다음을 제공합니다: id="24e1487f-c36f-4cc3-a45e-4d8c6d867a4d"
  • virt-manager 보고서: c4d152fd-6da4-4b09-bb98-96767b367a6c

불일치의 원인은 무엇입니까?

관련 정보