vagrant-libvirtで実行されるパッカーを使用したボックスの構築

vagrant-libvirtで実行されるパッカーを使用したボックスの構築

libvirtプロバイダを介して放浪者で実行するDebian拡張を作成したいと思います。

最初からビルドを試み、パッカーを使ってビルドを試みましたが、最良の結果は、再起動時に「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アドレス:52:54:00:b8:88:7d

また、ドメインのUUIDも異なります。

  • Vagrant は以下を提供します: id="24e1487f-c36f-4cc3-a45e-4d8c6d867a4d"
  • virt-manager レポート: c4d152fd-6da4-4b09-bb98-96767b367a6c

不一致の原因は何ですか?

関連情報