# Ihsan - Bab 3
## 3.1.2
1. Apa hubungan DevOps dengan server?
`Seluruh kegiatan DevOps berlangsung di dalam server`
2. Sebutkan layanan-layanan server yang anda ketahui?
`AWS, GCP, dan Azure menyediakan layanan untuk menggunakan server mereka, sehingga perusahaan tidak perlu membeli dan maintain server sendiri`
## 3.2.9
1. Jelaskan kembali perbedaan Linux, GNU, sistem operasi, dan Distro?
`Linux: Kernel`
`GNU: Software pelengkap untuk sistem operasi`
`Sistem operasi: Perantara untuk membuat hardware pada komputer bekerja`
`Distro: Sistem operasi GNU/Linux yang sudah dimodifikasi untuk tujuan tertentu`
2. Kenapa Linux lebih cocok untuk server dibandingkan sistem operasi lain?
`Source code Linux bebas untuk diakses dan dimodifikasi, sehingga bisa lebih stabil, tersedia banyak tools untuk kebutuhan server, dan dokumentasi yang tersebar di internet`
## 3.3
### 3.3.1 & 3.3.2 Instalasi Virtualbox dan Vagrant pada Ubuntu

Hasil instalasi Virtualbox dan Vagrant
### 3.3.3 Instalasi box Vagrant
Command `vagrant box add user/box` akan mengunduh box terkait ke lokal user dan siap digunakan oleh Vagrant. Di sini saya akan menggunakan box ubuntu/xenial64

### 3.3.4 Membuat project
Inisiasi project dengan membuat direktori khusus untuk project tersebut

Masuk ke dalam direktori yang sudah dibuat, lalu inisiasi vagrant menggunakan command `vagrant init`

Buka vagrantfile menggunakan command `nano Vagrantfile` lalu ubah box-nya agar menggunakan box ubuntu/xenial64 serta ubah ram dari virtual box

Jalankan vagrant dengan menggunakan command `vagrant up` lalu akan muncul log dari langkah-langkah yang sudah dijalankan oleh vagrant

Box sudah berjalan, selanjutnya login ke dalam box menggunakan command `vagrant ssh` dan akan muncul output seperti ini. Hasil ini menandakan bahwa user sudah berhasil masuk ke box yang sudah dibuat

## 3.4.4
Kenapa kita perlu belajar struktur direktori Linux?
`Untuk mengetahui sistem operasi serta cara mengelola file`
1. `/home/yxz/Mail`
2. `doc/howto`
3. `/usr/share/doc/packages`
## 3.5.8
Kenapa kita perlu mempelajari perintah dasar command line?
`Agar dapat mengelola server Linux, dimana server biasanya tidak ada GUI`
Pindah ke direktori /tmp

Buat file bernama test1.txt yang berisi "Sekolah DevOps Cilsy" di dalam folder sekarang

Buat 1 folder bernama latihan di dalam folder sekarang, copy test1.txt ke dalam folder latihan dengan nama test2.txt

Lakukan cut-paste test2.txt ke folder /home dengan nama baru test3.txt. Pindah ke home directory

Di sini saya menggunakan sudo karena user yang sedang saya gunakan bukan root sehingga tidak bisa menulis file di dalam direktori /home
Hapus file test1.txt dan folder latihan yang ada di /tmp

## 3.6.4
Kenapa kita perlu mempelajari manipulasi teks dan file?
`Agar mahir dalam proses scripting`
Buat file latihan1.txt

Buat file hasil1.txt yang hanya berisi baris yang mengandung kata 'cilsy' dan 'mp3' dengan pengecualian baris yang mengandung '#'

## 3.6.6
Kenapa kita perlu mempelajari manipulasi teks dan file?
`Agar mahir dalam proses scripting`
Buat file latihan2.txt

Buat file hasil2-1.txt yang berisi baris yang berawal angka apapun 1 digit kemudian diikuti tulisan cilsy

Buat file hasil2-2.txt yang berisi baris yang berawal angka apapun 1 digit atau lebih yang diikuti oleh tulisan cilsy

Buat file hasil2-3.txt yang berisi baris yang berawal angka apapun 1 digit yang diikuti oleh tulisan cilsy dan harus diakhiri oleh tanda @

## 3.6.10
Buat file latihan3.txt

Filter isi file sehingga hasil akhirnya menjadi seperti ini

`grep -o` untuk mendapatkan hanya keyword nya saja
`sort -V` sort version numbers [link](https://stackoverflow.com/questions/13088370/how-to-sort-strings-that-contain-a-common-prefix-and-suffix-numerically-from-bas)
`sed 's/\./-/g'` mengganti tanda '.' dengan '-'. tanda '.' adalah special character sehingga membutuhkan tanda ''\\''
## 3.7.7
Kenapa kita perlu mempelajari Archiving file?
`Untuk memperkecil ukuran file yang tersimpan di dalam server`
Buat 5 file yang bernama test1, test2, test3, test4, dan test5

Buat 1 archive bzip2 bernama latihan4.tar.bz2 yang berisi test1-4

Hapus file test4 yang ada di dalam file archive yang sudah dibuat, ganti dengan test5

Ekstrak archive latihan4.tar.bz2 ke folder /home

## 3.8.6
Kenapa kita perlu mempelajari finding file?
`Akan berguna dalam aktivitas di server Linux serta scripting`
Cari file dengan ekstensi .conf yang memiliki permission 600 dan terakhir diakses 100 hari yang lalu di dalam folder /etc, simpan hasilnya ke dalam hasil5.txt

## 3.9.4
Buat user dan group serta tunjukkan hasilnya

1. Kenapa kita perlu mempelajari manajemen user dan group?
`Untuk menjaga keamanan server serta memastikan setiap user dapat mengakses hal yang dibutuhkan`
2. Pada kasus praktek di atas, apa efek ketika 1 user menjadi anggota 2 grup atau lebih (jono)?
`User yang menjadi anggota dari beberapa grup dapat mengakses file dan direktori yang diperbolehkan ke masing-masing grup. Namun hanya satu grup yang menjadi primary group user tersebut`
## 3.11.8
Kenapa kita perlu mempelajari manajemen paket?
`Agar bisa melakukan manajemen aplikasi/service yang terdapat di dalam server Linux`
Cari aplikasi network mapper, install lalu cek versi berapa


Hapus aplikasi tersebut

## 3.12.7
Kenapa kita perlu mempelajari manajemen layanan?
`Agar bisa mengatur dan mengawasi service yang sedang berjalan di server Linux`
Lakukan instalasi layanan webserver apache
`sudo apt install apache2`
Edit layanan tersebut agar auto-start setiap booting
`systemctl enable apache2`
Restart layanan tersebut dan cek statusnya

## 3.14 Setup Webserver dan aplikasi
Ubah konfigurasi vagrant box agar dapat menerima komunikasi dari host. Komunikasi hanya diperbolehkan dari host, bukan public access

Vagrant box dapat berkomunikasi melalui port 8080 dari localhost
Install webserver dan database server melalui command
`sudo apt-get install apache2 php php-mysql`
`sudo apt-get install mysql-server`
Setelah instalasi selesai, cek apakah webserver sudah berjalan

Cek database dengan mengakses console mysql dan membuat password baru
`sudo mysql -u root -p`
Buat username baru dengan password baru, lalu berikan hak akses pada user tersebut

Buat database dbsosmed menggunakan user baru

Download aplikasi dari repo cilsy dan ekstrak


Pindahkan direktori sosial-media-master ke /var/www/html/ dengan terlebih dahulu menghapus file index.html yang sudah berada di direktori tujuan

Import dump.sql ke dalam mysql dengan command
`cd /var/www/html`
`sudo mysql -u devopscilsy -p dbsosmed < dump.sql`
Ujicoba aplikasi web

*Landing page aplikasi web*

*Pendaftaran akun*

*Login*
Sepertinya masih ada error di script aplikasi web server. User tidak bisa melakukan login. Di bagian atas halaman juga terlihat ada teks yang tidak seharusnya muncul di situ
## 3.15.6
Buat script bernama 'status' yang menampilkan status dari layanan
`nano status`

Ubah permission dari script tersebut agar dapat dieksekusi
`chmod 755 status`
Jalankan script
`./status`
## 3.15.8
Buat script bernama 'shadow' yang akan menghitung pada baris keberapa kata shadow muncul di file /etc/group, lalu melakukan operasi pada hasilnya

Ubah permission dari script, lalu jalankan script
`chmod 755 shadow`

## 3.16.3
Buat script untuk instalasi service yang dibutuhkan untuk menjalankan sebuah webserver

Ubah permission script, lalu jalankan script. Cek apakah service sudah terinstall

note: instalasi mysql masih perlu memasukkan password secara manual
Buat script untuk menghapus semua service webserver

Cek apakah service sudah berhasil dihapus
