Windows vagrant chef-solo provision在Linux guest中创建CRLF

时间:2016-01-29 09:49:59

标签: linux vagrant chef-solo

当chef-solo尝试启动AFW防火墙时,我的流浪汉提供失败 - 调查显示/etc/init.d/firewall文件在每行的末尾都有^ M个字符。

提供日志的输出是:

 Compiled Resource:
==> default: ------------------
==> default: # Declared in /tmp/vagrant-chef-solo/65fec65b9f544271ce41fa26d9a1fc6f/cookbooks/afw/recipes/default.rb:85:in `from_file'
==> default:
==> default: service("firewall") do
==> default:   action [:enable, :start]
==> default:   supports {:restart=>false, :reload=>false, :status=>true}
==> default:   retries 0
==> default:   retry_delay 2
==> default:   service_name "firewall"
==> default:   enabled true
==> default:   pattern "firewall"
==> default:   startup_type :automatic
==> default:   cookbook_name :afw
==> default:   recipe_name "default"
==> default: end
==> default:

对于任何其他创建的文件都不会发生这种情况。

AFW从另一个配方加载

Vagrant文​​件:

project_directory = Dir.pwd.split(File::SEPARATOR)[-3]    

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # All Vagrant configuration is done here. The most common configuration
  # options are documented and commented below. For a complete reference,
  # please see the online documentation at vagrantup.com.

  # Every Vagrant virtual environment requires a box to build off of.

  config.vm.box = "CentOS-6.5-x86_64-virtualbox-minimal-0.1.1.box"
  config.vm.box_url = "http://ib-vagrant-vms.s3.amazonaws.com/CentOS-6.5-x86_64-virtualbox-minimal-0.1.1.box"

  # Boot with a GUI so you can see the screen. (Default is headless)
  # config.vm.boot_mode = :gui

  config.vm.host_name = "XXXXX.development.local"
  config.hostsupdater.aliases = [
    "YYYYY.development.local",
  ]

  # Assign this VM to a host-only network IP, allowing you to access it
  # via the IP. Host-only networks can talk to the host machine as well as
  # any other machines on the same network, but cannot be accessed (through this
  # network interface) by any external networks.
  config.vm.network :private_network, ip: "192.168.1.11"

  config.vm.provider :virtualbox do |vb|
    vb.gui = false
    vb.name = "New Server"
    vb.memory = "2048"
  end

  # Assign this VM to a bridged network, allowing you to connect directly to a
  # network using the host's network device. This makes the VM appear as another
  # physical device on your network.
  # config.vm.network :bridged

  # Forward a port from the guest to the host, which allows for outside
  # computers to access the VM, whereas host only networking does not.
  # config.vm.forward_port 80, 8080

  # Share an additional folder to the guest VM. The first argument is
  # an identifier, the second is the path on the guest to mount the
  # folder, and the third is the path on the host to the actual folder.
  # config.vm.share_folder "v-data", "/vagrant_data", "../data"

  # The following configuration supports shared folders with host
  # aware configuration of NFS for performance benefits on unix based hosts
  require 'ffi'
  config.vm.synced_folder "../../", File.join("/mnt/Sites", project_directory), :nfs => ! FFI::Platform::IS_WINDOWS

  # Enable the cachier plugin if available, so we can cache composer dependencies, yum packages, etc.
  if Vagrant.has_plugin?("vagrant-cachier")
    # Configure cached packages to be shared between instances of the same base box.
    # More info on http://fgrehm.viewdocs.io/vagrant-cachier/usage
config.cache.scope = :box

    if ! FFI::Platform::IS_WINDOWS then
      # OPTIONAL: If you are using VirtualBox, you might want to use that to enable
      # NFS for shared folders. This is also very useful for vagrant-libvirt if you
      # want bi-directional sync
      config.cache.synced_folder_opts = {
         type: :nfs,
        # The nolock option can be useful for an NFSv3 client that wants to avoid the
        # NLM sideband protocol. Without this option, apt-get might hang if it tries
        # to lock files needed for /var/cache/* operations. All of this can be avoided
        # by using NFSv4 everywhere. Please note that the tcp option is not the default.
         mount_options: ['rw', 'vers=3', 'tcp', 'nolock']
      }
     end

     config.cache.enable :composer
     config.cache.enable :chef
     config.cache.enable :generic, {
      rbenv: {
        cache_dir: '/usr/local/rbenv'
      }
    }
  end

   # Enable provisioning with chef solo, specifying a cookbooks path, roles
   # path, and data_bags path (all relative to this Vagrantfile), and adding
   # some recipes and/or roles.
   #
  if Vagrant.has_plugin?("vagrant-berkshelf")
    config.berkshelf.enabled = true
    config.berkshelf.berksfile_path = "../chef/Berksfile"
  end

  config.vm.provision :chef_solo do |chef|
    # logging
    chef.log_level = :debug
    chef.arguments = '--force-formatter'


    if ! FFI::Platform::IS_WINDOWS then
      # Mount chef folders via NFS for speed
      chef.synced_folder_type = 'nfs'
    end

    if Vagrant::VERSION.to_f > 1.0
      chef.provisioning_path = "/tmp/vagrant-chef-solo"
      if !Vagrant.has_plugin?("vagrant-cachier") then
        chef.file_cache_path = chef.provisioning_path
      end
    end

    chef.cookbooks_path = ["../chef/cookbooks", "../chef/site-cookbooks"]
    chef.roles_path = "../chef/roles"
    chef.environments_path = "../chef/environments"

    chef.environment = "dev"

    chef.data_bags_path = ["../chef/data_bags/"]

    # Uncomment the following line and copy in the encryption key if you need to work
    # with encrypted data bag data in your local environment
    chef.encrypted_data_bag_secret_key_path = "../chef/.chef/#{chef.environment}_encrypted_data_bag_secret"

    chef.add_recipe "data-bag-merge::environment"
    chef.add_recipe "yum-ius-XXXXX"
    chef.add_role "base"
    chef.add_recipe "resolver"
    chef.add_role "mysql-server-56"
    chef.add_recipe "database-XXXXX"
    chef.add_role "self-signed-ssl"
    chef.add_role "ssl-offloading-server"
    chef.add_role "memcached"
    chef.add_role "redis"
    chef.add_role "varnish"
    chef.add_role "solr-server"
    chef.add_role "admin-server"
    chef.add_role "api-server"
    chef.add_role "developer"
    chef.add_role 'maintenance'

    #add chef attributes that rely on project_directory variable
    chef.json = {
      'resolver' => {
      'nameservers' => ['8.8.8.8', '8.8.4.4']
      },
      'xdebug' => {
        'is_extension_enabled' => true
      },
    }
  end
end

1 个答案:

答案 0 :(得分:0)

因为我最初运行git命令CRLF已将所有cookbook依赖项下载到我的本地驱动器,并已将autocrlf=input放入已下载的文本文件中。

在gitconfig文件中设置c:\users\JonM\Appdata\local\GitHub\portablegit'''''\etc

c:\users\JonM\.berkshelf\cookbooks`

删除所有下载的食谱:

vagrant up --provision

运行

CRLF

再次下载所有食谱 - 这次没有<select name="cars" multiple> <option value="volvo" selected>Volvo</option> <option value="saab">Saab</option> <option value="opel" selected>Opel</option> <option value="audi">Audi</option> </select>