Selasa, 02 Januari 2018

Dokumentasi menjalankan UniK (Go Unikernel)

Salam,
Saya membuat dokumentasi ini bermaksud untuk kembali menulis dan semoga bisa menjadi catatan yang berguna. Dokumentasi ini mengikuti panduan dari :
https://github.com/solo-io/unik/blob/master/docs/getting_started.md
Disini saya menggunakan Laptop dengan Sistem Operasi Linux Fedora Workstation 26.
RAM 4 GB, dan Prosesor AMD A6.
Dilaptop saya telah terinstall virtualbox, docker, Go (Golang) dan git.

Ada beberapa hal yang harus diperhatikan yaitu :
-Pembuatan GOPATH
-

Setiap terjadi error saat mencoba, jangan menyerah begitu saja. Coba dulu untuk mencari error yang sama di Internet (via Google).

Berikut adalah dokumentasinya :
1. Pastikan Go terinstall (juga tools atau aplikasi yang dibutuhkan).


2. Jalankan daemon docker
$ service docker start

3. clone git dari unik di repositori : https://github.com/emc-advanced-dev/unik.git
Clone dengan cara  :
$ git clone https://github.com/emc-advanced-dev/unik.git
akan terebentuk direktori baru dengan nama 'unik'.

Pindah ke direktori tersebut. Setelah masuk ke direktori tersebut, ketikkan perintah : $ make binary.
Selanjutnya, pindahkan hasilnya (dari perintah sebelumnya) ke PATH environment variable : /usr/local/bin.
Dengan perintah : $ mv _build/unik /usr/local/bin.
Maka kita sudah dapat menjalankan perintah 'unik' dari direktori mana saja.

4. Mengkonfigurasi jenis adapter Host-Only Network di Virtualbox.
Jalankan Virtualboxnya, masuk ke Preferences, pilih Network, pilih Host-only Networks.
Klik tombol edit.


Pastikan nama adapternya adalah vboxnet0 dan adapter tersebut mengaktifkan DHCP Servernya.

5. Mengkonfigutasi UniK daemon.

Membuat direktori '.unik' di $HOME direktori jika direktori .unik tersebut belum ada.
Perintahnya bisa dengan : $ mkdir $HOME/.unik

Kemudian membuat file baru di dalam direktori tersebut dengan nama 'daemon-config.yaml'.
Pembuatan file baru tersebut bisa langsung dilakukan dengan mengetikkan nama file setelah perintah untuk menjalankan text editor kesayangan anda.
$ nano daemon-config.yaml

Jalankan perintah tersebut ketika telah berada di direktori .unik yang sebelumnya dibuat.
Memasukkan script berikut :
providers:
  virtualbox:
    - name: my-vbox
      adapter_type: host_only
      adapter_name: "vboxnet0"

6. Menjalankan UniK dan membuat Virtualbox Instance Listener secara otomatis.

        Ada beberapa hal yang perlu saya lakukan saat mencoba menjalankan apa yang ada pada panduan dikarenakan sempat terjadi error.
        Diantaranya adalah membuka halaman-halaman referensi yang sudah saya cantumkan dibagian paling bawah post ini.
Error-error yang terjadi diantaranya :
        ERRO[0000] build failed: [cmd/build.go:105] building image failed:
    ERRO[0054] running daemon failed: [cmd/daemon.go:86] daemon failed to initialize:


Error-error tersebut adalah yang masih tersimpan di history browser yang saya gunakan untuk mencari beberapa waktu yang lalu.
        Dari mencari penyelesaiain dari error-error yang terjadi tersebut, saya akhirnya bisa menyelesaikan panduan yang ada hingga bisa menjalankan instance di Virtualbox dan dapat dipanggil pada browser.
        Halaman-halaman berikut yang sempat saya gunakan untuk mengoreksi apa yang kurang dari apa yang sedang saya lakukan (jika terjadi error) :
        https://github.com/solo-io/unik/issues/102
        https://github.com/solo-io/unik/issues/98
Dan URL berikut yang menurut saya cukup membantu masalah saya :
        https://github.com/solo-io/unik/issues/112
Saya menjalankan perintah :

$ losetup -f 
Output yang diberikan : /dev/loop0 

Kemudian saya menjalankan perintah : 

$ mknod -m 0660 /dev/loop1 b 7 3

Berdasarkan URL tersebut.

Langkah pertama di bagian ke-6 ini adalah membuka Terminal baru, yang akan digunakan untuk menjalankan daemon UniK.

Kemudian, berpindah ke direktori _build yang dibuat saat menjalankan make dilangkah ke-3. Selanjutnya jalankan perintah berikut :

$ unik daemon --debug (bisa tanpa parameter --debug). 

Maka jika perintah berhasil dijalankan, akan terbentuk instance dan akan mendapatkan ip dari DHCP Server dari Virtualbox.

Berikut Output yang ditampilkan dari perintah diatas : 

UniK telah berjalan dan telah siap untuk menerima perintah.
Terakhir, kita membuka jendela Terminal baru dan jalankan perintah :
$ unik target --host localhost 
Perintah tersebut digunakan untuk mengatur agar target CLI ke localhost kita.

7. Membuat HTTP Server (HTTP daemon) dengan Golang.
Pertama, buat file httpd.go. Saya membuat file tersebut di dalam direktori $HOME/.unik.
Isi file tadi dengan script berikut :
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "my first unikernel!")
}
Kemudian jalankan perintah : $ go run httpd.go dan coba masuk ke alamat : http://localhost:8080 dari browser untuk memastikan bahwa server tersebut sudah berjalan.
Jika berhasil maka akan muncul tampilan sebagai berikut :

Langkah selanjutnya adalah membuat file Godeps. File ini digunakan untuk menjabarkan struktur project kita dan dependensi yang dibutuhkan. Karena di project ini kita tidak membutuhkan dependensi, maka di dalam file Godeps hanya berisi sedikit script saja. Juga tidak perlu kita menginstall godep.

Jika nantinya kita mempunyai project yang membutuhkan dependensi, maka file Godeps akan berisi lebih banyak scrpit (seharunya) dan kita membutuhkan tools godep. Tools tersebut akan diinstall di GOROOT dan juga kita harus menjalankan perintah : GO15VENDOREXPERIMENT=1 godep save ./... di project kita.

Di folder yang sama dengan folder httpd.go, buat direktori dengan nama Godeps, kemudian didalamnya kita membuat file dengan nama Godeps.json.

Berikut struktur file yang ada di Laptop saya :

Isi dari file Godeps.json adalah :
{
 "ImportPath": "my_httpd",
 "GoVersion": "go1.6",
 "GodepVersion": "v63",
 "Packages": [
  "./.."
 ],
 "Deps": [
  {
   "ImportPath": "github.com/solo-io/unik/docs/examples",
   "Rev": "f8cc0dd435de36377eac060c93481cc9f3ae9688"
  }
 ]
}

Dengan script tersebut, kita menginstruksikan ke go compiler bahwa project kita akan diinstall dari $GOPATH/src/myhttpd.

8. Mengkompilasi sebuah image dan menjalankannya di Virtualbox.

Menjalankan perintah :
unik build --name myImage --path ./ --base rump --language go --provider virtualbox
Perintah tersebut dijalankan dari direktori dimana dile httpd.go berada yaitu di direktori '.unik'.

Berikut output dari perintah tersebut : 

Log dari proses pembuatan Image bisa dilihat dari jendela Terminal yang digunakan untuk menjalankan daemon UniK.

File Image akan tersimpan di direktori : $HOME/.unik/virtualbox/images/myImage/boot.vmdk

Kemudian, kita bisa menjalankan instance Image tersebut dengan perintah :


    unik run --instanceName myInstance --imageName myImage
    
    Setelah instance berhasil dijalankan, kita bisa mengecek IP Addressnya dan kita bisa melihat apakah aplikasi kita berjalan pada instance tersebut. Untuk melihat IP Address yang ada, kita bisa menjalankan perintah : unik instances.

    Berikut adalah output di Laptop saya :


    IP Address yang telah kita ketahui bisa kita gunakan untuk mengecek melalui browser, sebagai berikut : 192.168.56.102:8080.

    Berikut hasil di browser :

    Demikian, semoga bermanfaat. Terimakasih..


    Referensi dan sumber daya (resources):
    https://github.com/solo-io/unik/blob/master/docs/getting_started.md
    https://github.com/solo-io/unik/blob/master/docs/instance_listener.md
    https://github.com/solo-io/unik/tree/master/instance-listener
    https://github.com/solo-io/unik/blob/master/docs/compilers/rump.md#golang
    https://libraries.io/go/github.com%2Fkaleo211%2Funik%2Finstance-listener%2Fbindata