User Tools

Site Tools


технология_vagrant

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
технология_vagrant [2022/08/17 14:45]
val
технология_vagrant [2024/04/09 11:16]
val [Multi-Machine Vagrant Environments]
Line 1: Line 1:
 ====== Технология Vagrant ====== ====== Технология Vagrant ======
 +
 +  * [[https://​ru.wikipedia.org/​wiki/​Vagrant|HashiCorp Vagrant]]
  
   * [[https://​www.vagrantup.com/​|Vagrant - Development Environments Made Easy]]   * [[https://​www.vagrantup.com/​|Vagrant - Development Environments Made Easy]]
Line 7: Line 9:
   * [[https://​oracle-base.com/​articles/​vm/​create-a-vagrant-base-box-virtualbox|Create a Vagrant Base Box (VirtualBox)]]   * [[https://​oracle-base.com/​articles/​vm/​create-a-vagrant-base-box-virtualbox|Create a Vagrant Base Box (VirtualBox)]]
  
-  * [[https://​www.vultr.com/​docs/​stop-dhcp-from-changing-resolve-conf/​|Stop DHCP From Changing resolv.conf]] 
  
 ===== Установка ===== ===== Установка =====
  
-  * [[https://​val.bmstu.ru/​unix/​HashiCorp/​vagrant_2.2.10_x86_64.msi]]+  ​* [[https://​hashicorp-releases.yandexcloud.net/​vagrant/​]] 
 + 
 +  ​* [[https://​val.bmstu.ru/​unix/​HashiCorp/​vagrant_2.2.10_x86_64.msi]] ​ 
 +  * [[http://​gate.isp.un/​unix/​HashiCorp/​vagrant_2.2.10_x86_64.msi]]  
 +  * Можно не перезагружать систему,​ но нужно перезапустить Cmder
  
 ===== Подготовка командной строки ===== ===== Подготовка командной строки =====
  
-==== win cmd === 
  
-<​code>​ 
-C:​\Users\Administrator>​ C:​\HashiCorp\Vagrant\bin\vagrant.exe 
-</​code>​ 
  
 ==== Cmder ==== ==== Cmder ====
  
   * [[Cmder]]   * [[Cmder]]
- 
 <​code>​ <​code>​
-λ alias vagrant=C:​\HashiCorp\Vagrant\bin\vagrant.exe $* 
- 
 λ bash λ bash
  
-$ alias vagrant=C:/​\HashiCorp/​\Vagrant/​\bin/​\vagrant.exe $* +λ cd
-или +
-$ alias vagrant=/​c/​HashiCorp/​Vagrant/​bin/​vagrant.exe+
 </​code>​ </​code>​
  
-==== mobaxterm ==== +
-<​code>​ +
-mobaxterm>​ alias vagrant=/​drives/​c/​HashiCorp/​Vagrant/​bin/​vagrant.exe $* +
-</​code>​+
  
  
Line 45: Line 38:
   * [[https://​oracle-base.com/​articles/​vm/​create-a-vagrant-base-box-virtualbox|Create a Vagrant Base Box (VirtualBox)]] + [[https://​bbs.archlinux.org/​viewtopic.php?​id=270005|[SOLVED] Latest sshd not accepting key algorithms]]   * [[https://​oracle-base.com/​articles/​vm/​create-a-vagrant-base-box-virtualbox|Create a Vagrant Base Box (VirtualBox)]] + [[https://​bbs.archlinux.org/​viewtopic.php?​id=270005|[SOLVED] Latest sshd not accepting key algorithms]]
   * [[https://​vagrantcloud.com/​debian/​bullseye64]]   * [[https://​vagrantcloud.com/​debian/​bullseye64]]
 +
 +  * [[https://​val.bmstu.ru/​unix/​HashiCorp/​ubuntu_20.04.box]]
 +  * [[http://​gate.isp.un/​unix/​HashiCorp/​ubuntu_20.04.box]]
 +
 +  * [[Переменные окружения]]
 +  * [[https://​stackoverflow.com/​questions/​19872591/​how-to-use-vagrant-in-a-proxy-environment|How to use vagrant in a proxy environment?​]]
  
 <​code>​ <​code>​
Line 53: Line 52:
 $ vagrant box list $ vagrant box list
  
-$ vagrant package --base ubuntu_20.04_03 --output /​c/​distrs/​ubuntu_20.04.box+### vagrant package --base ubuntu_20.04_03 --output /​c/​distrs/​ubuntu_20.04.box
  
 $ vagrant box add /​c/​distrs/​ubuntu_20.04.box --name specialist/​ubuntu20 $ vagrant box add /​c/​distrs/​ubuntu_20.04.box --name specialist/​ubuntu20
  
 $ vagrant box list $ vagrant box list
 +
 +$ ### vagrant box remove specialist/​ubuntu20
 </​code>​ </​code>​
  
Line 75: Line 76:
  
 $ vagrant up $ vagrant up
 +
 +$ ssh -p 2222 student@localhost
  
 $ vagrant ssh $ vagrant ssh
  
 $ vagrant global-status $ vagrant global-status
 +
 +$ vagrant global-status --prune
  
 $ vagrant halt $ vagrant halt
Line 95: Line 100:
   * [[https://​stackoverflow.com/​questions/​30820949/​print-message-after-booting-vagrant-machine-with-vagrant-up|Print message after booting vagrant machine with "​vagrant up"]]   * [[https://​stackoverflow.com/​questions/​30820949/​print-message-after-booting-vagrant-machine-with-vagrant-up|Print message after booting vagrant machine with "​vagrant up"]]
   * [[https://​stackoverflow.com/​questions/​19648088/​pass-environment-variables-to-vagrant-shell-provisioner|Pass environment variables to vagrant shell provisioner]]   * [[https://​stackoverflow.com/​questions/​19648088/​pass-environment-variables-to-vagrant-shell-provisioner|Pass environment variables to vagrant shell provisioner]]
 +  * !!! Зрелищнее - по очереди,​ config и provision ​
 <​code>​ <​code>​
-λ npp Vagrantfile ​&+λ cat Vagrantfile
 </​code><​code>​ </​code><​code>​
 ... ...
Line 109: Line 114:
  
   config.vm.hostname = "​node1.corp"​ + X + "​.un"​   config.vm.hostname = "​node1.corp"​ + X + "​.un"​
-  config.vm.network "​private_network",​ ip: "​192.168."​ + X + "​.201"​ +  config.vm.network "​private_network", ​ 
- +    adapter: 2,  
- ​config.vm.provider "​virtualbox"​ do |vb| +    name: "​VirtualBox Host-Only Ethernet Adapter",​ 
-   ​vb.memory = "​2048"​ +    ​ip: "​192.168."​ + X + "​.201"​ 
-   ​vb.cpus = "​2"​+  config.vm.provider "​virtualbox"​ do |vb| 
 +    vb.memory = "​2048"​ 
 +    vb.cpus = "​2"​
  
 #    file_to_disk = config.vm.hostname + '​_disk2.vdi'​ #    file_to_disk = config.vm.hostname + '​_disk2.vdi'​
Line 120: Line 127:
 #    end #    end
 #    vb.customize ['​storageattach',​ :id, '​--storagectl',​ '​SATA',​ '​--port',​ 2, '​--device',​ 0, '​--type',​ '​hdd',​ '​--medium',​ file_to_disk] #    vb.customize ['​storageattach',​ :id, '​--storagectl',​ '​SATA',​ '​--port',​ 2, '​--device',​ 0, '​--type',​ '​hdd',​ '​--medium',​ file_to_disk]
- end+ 
 +  end
   ​   ​
 ### /My config ### ### /My config ###
Line 154: Line 162:
  
 end end
-</​code>​ +</​code><​code>​ 
-<​code>​+λ vagrant validate 
 + 
 +λ vagrant up 
 +... 
 +==> default: Machine already provisioned ... 
 +... 
 +λ vagrant ssh 
 +$ date 
 λ vagrant reload --provision λ vagrant reload --provision
 +
 +λ vagrant ssh
 +$ date
 </​code>​ </​code>​
  
Line 164: Line 183:
  
 <​code>​ <​code>​
-λ npp provision_once.sh ​&+λ touch provision_once.sh
 </​code><​code>​ </​code><​code>​
-#sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /​etc/​ssh/​sshd_config+#!/bin/sh 
 #echo '​root:​strongpassword'​ | chpasswd #echo '​root:​strongpassword'​ | chpasswd
 +#sed -i '​s/​PasswordAuthentication no/​PasswordAuthentication yes/g' /​etc/​ssh/​sshd_config
 +#service ssh restart
  
 echo '​vagrant:​strongpassword'​ | chpasswd echo '​vagrant:​strongpassword'​ | chpasswd
 +
 +(echo '"​\e[A":​ history-search-backward';​ echo '"​\e[B":​ history-search-forward'​) >> /​etc/​inputrc
  
 timedatectl set-timezone Europe/​Moscow timedatectl set-timezone Europe/​Moscow
  
-apt-get update +apt update 
-#apt-get install -y net-tools+#apt install -y docker.io
 </​code><​code>​ </​code><​code>​
-λ npp provision_onstart.sh ​&+λ touch provision_onstart.sh
 </​code><​code>​ </​code><​code>​
 +#!/bin/bash
 +
 X=$1 X=$1
  
-echo $X+echo "$X"
  
-route add default gw 192.168.$X.1+route add default gw 192.168."$X".1
  
-eval `route -n | awk '{ if ($8 =="​eth0"​ && $2 != "​0.0.0.0"​) print "route del default gw " $2; }'`+eval "$(route -n | awk '{ if ($8 =="​eth0"​ && $2 != "​0.0.0.0"​) print "route del default gw " $2; }')"
  
 chattr -i /​etc/​resolv.conf chattr -i /​etc/​resolv.conf
Line 192: Line 218:
 echo "​net.ipv4.ip_forward=1"​ > /​etc/​sysctl.d/​20-my-forward.conf && sysctl -p --system echo "​net.ipv4.ip_forward=1"​ > /​etc/​sysctl.d/​20-my-forward.conf && sysctl -p --system
 </​code><​code>​ </​code><​code>​
-λ npp Vagrantfile+λ cat Vagrantfile
 </​code><​code>​ </​code><​code>​
 ... ...
Line 198: Line 224:
  
   config.vm.provision "​provision_once",​ type: "​shell",​ run: "​once",​ path: "​provision_once.sh"​   config.vm.provision "​provision_once",​ type: "​shell",​ run: "​once",​ path: "​provision_once.sh"​
 +
   config.vm.provision "​provision_onstart",​ type: "​shell",​ run: "​always", ​   config.vm.provision "​provision_onstart",​ type: "​shell",​ run: "​always", ​
     args: X + " 2_arg 3_arg", ​     args: X + " 2_arg 3_arg", ​
Line 205: Line 232:
 ... ...
 </​code><​code>​ </​code><​code>​
 +vagrant@node1:​~$ ls /vagrant/
 +
 +vagrant@node1:​~$ shellcheck /​vagrant/​provision_once.sh
 +vagrant@node1:​~$ shellcheck /​vagrant/​provision_onstart.sh
 +
 λ vagrant provision --provision-with provision_once,​provision_onstart λ vagrant provision --provision-with provision_once,​provision_onstart
  
-vagrant@node1:~$ ls /vagrant/+server# ssh vagrant@node1
 </​code>​ </​code>​
  
Line 217: Line 249:
 λ cat Vagrantfile λ cat Vagrantfile
 ... ...
-  config.vm.provision "​provision_docker",​ type: "​ansible_local",​ run: "always" do |ansible|+  config.vm.provision "​provision_docker",​ type: "​ansible_local",​ run: "once" do |ansible|
     ansible.playbook = "​provision_docker.yml"​     ansible.playbook = "​provision_docker.yml"​
   end   end
 ... ...
 </​code><​code>​ </​code><​code>​
-$ vagrant provision --provision-with provision_docker+time vagrant provision --provision-with provision_docker 
 +real    11m2,127s
 </​code>​ </​code>​
  
Line 231: Line 264:
  
 <​code>​ <​code>​
-λ mkdir ~/nodes+λ vagrant destroy
  
-λ cd ~/nodes +λ touch nodes.yaml
- +
-λ npp nodes.yaml ​&+
 </​code><​code>​ </​code><​code>​
 - name: "​node1"​ - name: "​node1"​
Line 255: Line 286:
   nodes.each do |opts| ​   nodes.each do |opts| ​
     config.vm.define opts["​name"​] do |config|     config.vm.define opts["​name"​] do |config|
-      config.vm.network "​private_network",​ ip: "​192.168."​ + X + "​."​ + opts["​ip"​]+      config.vm.network "​private_network", ​ 
 +        adapter: 2,  
 +        name: "​VirtualBox Host-Only Ethernet Adapter",​ 
 +        ​ip: "​192.168."​ + X + "​."​ + opts["​ip"​]
       config.vm.hostname = opts["​name"​]       config.vm.hostname = opts["​name"​]
    ​    ​
Line 278: Line 312:
  
 λ vagrant up λ vagrant up
 +
 +λ vagrant status
  
 λ vagrant ssh node2 λ vagrant ssh node2
  
-λ vagrant destroy ​node3+λ vagrant halt node2 
 + 
 +λ vagrant destroy ​node1
  
 λ vagrant destroy -f λ vagrant destroy -f
-</​code>​ 
  
-===== Дополнительные возможности =====+λ cd ~/​conf/​vagrant/​nodes
  
 +λ nano Vagrantfile ​  #!!! set X and mem 1024
  
 +λ cat provision_once.sh ​  # look passwords
  
-==== Использование синхронизируемых каталогов ====+λ time vagrant up --parallel 
 +</​code>​
  
-<​code>​ +===== Дополнительные возможности =====
-λ cat Vagrantfile +
-</​code><​code>​ +
-... +
-#  config.vm.synced_folder "​.",​ "/​vagrant",​ type: "​rsync",​ rsync__exclude:​ "​.git/"​ +
-... +
-</​code><​code>​ +
-λ npp SomeFile +
-...+
  
-λ vagrant rsync 
  
-λ vagrant ssh 
  
-vagrant@node3:​~$ ls /vagrant/ +==== Еще варианты Multi-Machine Vagrant Environments ====
-</​code><​code>​ +
-... +
-Vagrantfile +
-... +
-SomeFile +
-... +
-</​code>​+
  
-===== Multi-Machine Vagrant Environments ===== +=== Внутри Vagrantfile ===
- +
-==== Внутри Vagrantfile ​====+
  
   * [[https://​www.vagrantup.com/​docs/​multi-machine|Multi-Machine]]   * [[https://​www.vagrantup.com/​docs/​multi-machine|Multi-Machine]]
Line 345: Line 366:
 </​code>​ </​code>​
  
-==== С использованием структур данных ruby ====+=== С использованием структур данных ruby ===
  
   * [[https://​github.com/​hashicorp/​vagrant/​issues/​9200|Vagrant is assigning the same MAC to two different VMs?]]   * [[https://​github.com/​hashicorp/​vagrant/​issues/​9200|Vagrant is assigning the same MAC to two different VMs?]]
Line 410: Line 431:
 </​code>​ </​code>​
  
-==== С использованием json ====+=== С использованием json ===
  
   * [[Формат JSON]]   * [[Формат JSON]]
Line 459: Line 480:
       config.vm.network "​private_network",​ ip: opts["​ip"​]       config.vm.network "​private_network",​ ip: opts["​ip"​]
       config.vm.hostname = opts["​name"​]       config.vm.hostname = opts["​name"​]
- 
-#      config.vm.provider "​virtualbox"​ do | vb | 
-#        file_to_disk = opts["​name"​] + '​_2.vdi'​ 
-#        unless File.exist?​(file_to_disk) 
-#          vb.customize ['​createhd',​ '​--filename',​ file_to_disk,​ '​--size',​ 4 * 1024] 
-#        end 
-#        vb.customize ['​storageattach',​ :id, '​--storagectl',​ '​SATA',​ '​--port',​ 2, '​--device',​ 0, '​--type',​ '​hdd',​ '​--medium',​ file_to_disk] 
-#      end 
  
       opts["​vbox_config"​].each do |hash|       opts["​vbox_config"​].each do |hash|
технология_vagrant.txt · Last modified: 2024/04/09 16:59 by val