Friday, 21 August 2015

Vagrant, những bước chân lang thang...

Mình luôn là fan cuồng của những dòng lệnh, và lý do mà mình không đến với vagrant sớm hơn cũng vì điều này. Nhưng muộn còn hơn không, nhỉ?!!!
 
Trước kia dùng linux, sử dụng KVM để chạy máy ảo, chỉ cần vài câu lệnh là đủ để 1 cái máy chạy ngon lành, ssh vào ầm ầm, và chẳng có lý do gì để mình phải cài lên máy 1 phần mềm viết bằng Ruby, chỉ để phục vụ mục đích tương tự - lại còn phải chạy với Virtualbox (ngày xưa thế, giờ chắc đã hỗ trợ KVM).

Nhưng giờ đã khác, mình không còn dùng Linux nữa, Virtualbox là giải pháp duy nhất trên hệ điều hành này, cách để bật một máy ảo lên không gì khác ngoài sử dụng giao diện GUI. Sống tạm bợ được hơn một năm, và một ngày cuối tuần, mình bất ngờ tìm lại với Vagrant.

Từ khoá
vagrant: /ˈveɪɡr(ə)nt/ Vietsub: vâygrờnt :  có nghĩa là người lang thang

Vagrant đơn giản đến bất ngờ, cái doc đọc xong trong vòng 20 phút, và cuộc đời sang trang.


Cài đặt
xem chi tiết tại: http://www.vagrantup.com/downloads

Từ giờ cần bật máy, chỉ cần cd vào thư mục tương ứng, gõ
$ vagrant up && vagrant ssh
Tất nhiên bài viết này không viết lại hay dịch cái document rất ngắn gọn và dễ hiểu của vagrant, nên đừng gõ dòng lệnh trên nếu bạn chưa đọc doc.



Trong ví dụ này sẽ tạo một workspace để có một máy ảo ubuntu 14.04:
$ mkdir -p ~/vagrant/trustyhihi
$ cd !$ # bash
$ vagrant init
vagrant sẽ tạo 1 file có tên ``Vagrantfile`` trong thư mục  này.

Chỉnh sửa file Vagrantfile
Có thể mở file này ra và chỉnh sửa theo ý muốn, mọi option đều đã có comment chi tiết nên không phải tìm đâu cả. Vài option đáng chú ý:
config.vm.box = CODE_CUA_BOX 
Vagrant gọi image là "box", giá trị mặc định là "base", bạn có thể chỉ định một trong vài giá trị sau:
config.vm.box = "ubuntu/precise64"
hay
config.vm.box = "ubuntu/trusty64"
Tất cả các box xem ở đây https://atlas.hashicorp.com/boxes/search

Thay đổi giá trị
config.vm.synced_folder
để chọn thư mục trên máy host sẽ được "sync" vào máy ảo này. Chi tiết xem comment đi kèm.

Đổi kích thước bộ nhớ trong (RAM)
config.vm.provider "virtualbox" do |vb|
  vb.memory = "1024"
end
để cài đặt bộ nhớ lên 1024 MB (mặc định ban đầu là 512 MB).

Chỉnh sửa file ``Vagrantfile`` chán chê rồi, đến lúc bật máy và ssh vào:
$ vagrant up && vagrant ssh 
Nếu máy bạn chưa cài đặt ssh, xem tài liệu tại https://help.github.com/articles/generating-ssh-keys/

Chờ một lúc cho lệnh chạy xong - nếu không có lỗi gì xảy ra là máy ảo đã được bật và mình đã ssh vào máy này, sudo -sH để chuyển sang user root.

Troubleshooting
Về cơ bản chỉ có thế là đủ dùng. Có vài nhu cầu hay vấn đề đặc biệt có thể xảy ra:
- CPU của Vboxheadless thường ở 100% - nóng máy =>  giải pháp là cài plugin ``vagrant-vbguest``

Lý do là phải có cái này máy ảo mới hoạt động trơn chu được:
Guest Additions are designed to be installed inside a virtual machine after the guest operating system has been installed. They consist of device drivers and system applications that optimize the guest operating system for better performance and usability
100% CPU: http://stackoverflow.com/questions/28293238/why-does-virtual-box-vboxheadless-process-using-vagrant-use-100-of-my-cpu

Cài đặt plugin
$ vagrant plugin install vagrant-vbguest
Cài thêm ``vagrant-vbox-snapshot`` nếu bạn cần thực hiện snapshot.

Danh sách các plugin
https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins

Các process lạ
Các Vagrant box thường đi kèm các chương trình tự động cấu hình như "chef-client" hay "puppet". Nên gỡ chúng nếu không dùng để tiết kiệm tài nguyên.

Cho người khác SSH vào máy ảo của mình
$ vagrant login
rồi nhập user/password
$ vagrant share 
https://docs.vagrantup.com/v2/getting-started/share.html

Bài viết thực hiện với:
$ vagrant --version
Vagrant 1.7.2
$ bash --version
GNU bash, version 4.3
Tạm hết.
hvn at familug.org