09 April 2022

Pengembangan Sistem Informasi

Nurhidayat 211511001


Pengembangan sistem adalah penyusunan suatu sistem yang baru atau penggantian secara keseluruhan atau sebagian berdasarkan sistem yang sudah berjalan dengan suatu sistem yan lebih baik secara sistematik.

## Alasan, Tujuan dan Prinsip


Beberapa alasan mengapa suatu sistem perlu dikembangkan sbb:

  • Sistem lama mengalami permasalahan, hal ini biasanya karena beberapa hal sbb:
    • Sistem berjalan lambat, atau muncul pesan error secara acak.
    • Sistem tidak dapat memenuhi harapan pengguna atau ogranisasi. Ada output yang diharapkan, tetapi tidak dapat dihasilkan oleh sistem. Atau ada input yang ingin dimasukkan, tetapi tidak tersedia pada sistem yang ada.
    • Sistem tidak berjalan pada device atau OS terbaru. Perkembangan IT yang cepat, menyebabkan banyak sistem yang menjadi usang karena hal ini.
  • Adanya kebijakan baru. Tentu saja sistem yang ada harus mendukung dan menyesuaikan dengan kebijakan tersebut, baik kebijakan pemerintah maupun kebijakan organisasi.
  • Menciptakan inovasi dan peluang untuk masa mendatang. Seringkali sistem dibuat sebagai lompatan besar yang menjadi inovasi dan direncakan dan diharapkan meraih peluang pasar di masa mendatang.


Tujuan pengembangan sistem adalah manfaat yang dapat dirasakan oleh pengguna bilamana sistem tersebut digunakan, yaitu sbb:

  • Kinerja semakin meningkat dengan semakin cepatnya respon sumber daya dan semakin besarnya volume permintaan layanan.
  • Informasi yang dihasilkan semakin berkualitas.
  • Efisiensi biaya, karena kinerja sumber daya semakin meningkat.
  • Pengendalian melalui monitoring dan evaluasi menjadi lebih mudah dan cepat dilakukan


Prinsip dalam pengembangan sistem adalah prinsip-prinsip yang dapat digunakan oleh tim pengembang saat mengembangkan suatu sistem informasi, adalah sbb:

  1. Melibatkan pengguna.
  2. Sistem merupakan suatu pemecahan terhadap masalah yang ada.
  3. Ada tahapan dan timeline yang jelas.
  4. Mendokumentasi setiap kegiatan dengan baik.
  5. Menerapkan standar, baik standar pekerjaan, output, tampilan, framework dll.
  6. Mengatur dan mengendalikan _project_.
  7. Menanamkan nilai bahwa sistem adalah investasi kepada setiap anggota tim.
  8. Jangan takut untuk menolak atau merevisi cakupan pekerjaan.
  9. Menggunakan algorithm _devide and conquer_, yaitu:
    1. _Devide_: Membagi suatu masalah menjadi beberapa sub-masalah sejenis
    2. _Conquer_: Memecahkan setiap sub-masalah
    3. _Combine_: Gabungkan hasil pemecahan masalah tersebut
  10. Rancang sistem agar dapat tumbuh dan berubah



## Tahapan Pengembangan Sistem


Tahapan pengembangan sistem mengikuti alur SDLC (_System Development Life Cycle_), yaitu:

  1. _Planning_, termasuk perencanaan dan kapasitas yang dibutuhkan (biaya, pembentukan Tim (SDM), peralatan, tempat, *timeline*, dll)
  2. _Analisys_ atau ada yang menyebut tahap _Requirements_, yaitu tahapan tim pengembang melakukan analisis kebutuhan (_user_requirments analisys_) dan bersepakat dengan pengguna apa-apa saja yang harus dipenuhi dari hasil pengembangan sistem tersebut.
  3. _Design and prototyping_. Pada tahap ini perangkat lunak mulai dirancang. Biasanya aspek aksesbilitas (tampilan dan alur *UI/UX*) menjadi perhatian utama, sehingga dapat dipakai oleh berbagai kalangan, termauk juga yang peyandang disabilitas
  4. _Implementation_ atau ada yang menyebut tahap _Development_, pada tahapan ini mulai penyusunan program (*coding* dan *debugging*)
  5. _Testing_, yaitu tahap ujicoba, dengan melakukan pengujian untuk mengevaluasi apakah sistem memenuhi *requirements* yang sudah disepakai pada tahap 2.
  6. _Deployment_, yaitu tahap siap pakai sehingga dapat diterapkan oleh pengguna, serta menyediakan dokumentasi _user manual_.
  7. _Operations and maintenance_, yaitu tahapan pengawasan dan perawatan.


Disini siklus biasanya tidak pernah selesai, akan selalu ada penambahan fitur dan perbaikan *bug* yang menunggu.


## Pendekatan Pengembangan Sistem


Pendekatan pengambangan sistem adalah cara pandang pengembang dalam merancang sebuah sistem untuk memenuhi kebutuhan pemakai (_user_). Secara garis besar terdiri dari dua, yaitu klasik dan terstruktur. Selain itu juga ada beberapa pendekatan lain yang dapat dibandingkan.

### Klasik vs Terstruktur


Pendekatan klasik ini disebut juga pendekatan tradisional. Meskipun mengikuti tahapan siklus pengembangan (SDLC), pendakatan ini tidak menggunakan alat-alat dan teknik yang memadai. Sehingga cocok untuk sistem yang tingkat kerumitannya rendah.

Permasalahan yang dapat ditimbulkan adalah sbb:

  • Pengembangan perangkat lunak menjadi sulit, karena tidak terarah.
  • Perawatan sistem menjadi mahal, karena dokumentasi tidak lengkap.
  • Kemungkinan terjadi kesalahan besar, karena tidak meyediakan cara untuk menguji sistem.
  • Keberhasilan dan penerapan sistem menjadi kurang terjamin, karena pendekatan ini tidak melibatkan user sebagai pengguna.


Beebeda dengan klasik, pendekatan terstruktur selain mengikuti tahapan diklus pengembangan (LCD), pendekatan ini menggunakan alat-alat dan teknik yang memadai, sehingga cocok untuk sistem yang tingkat kerumitannya tinggi.

### _Bottom-Up_ vs _Top-Down_


Pendekatan _bottom-up_ dimulai dari analisis ketersediaan data atau biasa disebut _data analysis_. Kemudian dilakukan perumusan informasi yang dapat disajikan berdasarkan ketersediaan data.

Permasalahan yang sering timbul pada pendekatan ini adalah informasi yang disajikan tidak dapat dimanfaatkan, karena tidak sesuai dengan kebutuhan pengguna.

Berbeda dengan _bottom-up_, pendekatan _top-down_ dimulai dari penggalian dan perumusan informasi apa saja yang dibutuhkan oleh pengguna, kemudian turun hingga data apa saja yang diperlukan untuk memenuhi kebutuhan tersebut. Dengan kata lain, cara ini dimulai dari perumusan output dan diakhiri dengan penentuan input.

Permasalahan yang mungkin timbul dari pendekatan ini adalah kesulitan menyajikan informasi yang diinginkan pengguna karena ternyata input atau data yang dibutuhkan tidak tersedia, akibatnya dibutuhkan proses pengumpulan data.

### Total vs Modular


Pendekatan total adalah pengembangan dimana sistem dirancang secara serentak menyeluruh dalam satu kesatuan yang utuh. Untuk sistem yang sederhana pendekatan ini sangat cocok, terutama untuk programmer tunggal. Namun permasalahan yang timbul adalah sistem sulit dikembangkan.

Berbeda dengan pendekatan di atas, modular atau bisa juga disebut pendekatan dekomposisi dilakukan dengan memecah sistem yang rumit menjadi bagian-bagian yang disebut modul-modul yang lebih kecil dan sederhana. Modul-modul itu kemudian dirangkai menjadi satu kesatuan sistem yang utuh.

Permasalahan yang mungkin timbul adalah perancangan disain yang lebih rumit diawal, karena harus disediakan antar-muka antara sistem utama dengan modul dan terdokumentasi dengan baik.

## Metode Pengembangan


Metode pengembangan sistem adalah kesatuan metode, cara yang sistematik untuk mengembangkan suatu sistem informasi dengan menerapkan prosedur, konsep, aturan yang berlaku di dalamnya.

Pada tahan disain dan analisis, metodologi yang biasa dipakai adalah sbb:

### Metodologi Pemecahan Fungsional


Metodologi ini memberi penekanan pada pemecahan sistem ke dalam subsistem-subsistem yang lebih kecil, sehingga lebih mudah untuk difahami, dikembangkan dan diterapkan. Contoh:

  • HIPO, _Hierarchy of Input Plus Output_
  • SR, _Stepwise Refinement_ atau ISR, _Iterative Stepwise Refinement_
  • _Information Hiding_


### Metodologi Beriontasi Data


Metodologi ini memberi penekanan pada karakteristik data yang akan diproses. Jenis-jenisnya sbb:

#### _Data-Flow Oriented_


Metodologi ini menekankan pada arus data antar dan hubungan antar fungsinya di dalam modul-modul sistem. Contoh:

  • SADT, _Structured and Analisys Design Techniques_
  • _Composite Design_
  • SSAD, _Structured System and Analisys Design_


#### _Data-Structured Oriented_


Metodologi ini menenkankan pada struktur dari input output sistem. Struktur ini kemudian menjadi dasar dari pengembangan sistem keseluruhan. Contoh:

  • JSD, _Jackson System Development_
  • W/O, _Warnier / Orr_


### _Prescriptive Methodologies_


Metodologi ini sering dipakai oleh _software house_ dan perusahaan-perusahaan perangkat lunak komersial.


## Alat Pengembangan Sistem


Alat bantu pengembangan sistem dapat berupa kode, gambar, atau bagan sbb:

  • HIPO _diagram_, digunakan pada metodologi HIPO
  • FD (_Data Flow Diagram_), digunakan pada metodologi SSAD
  • _Strucrure Chart_, digunakan pada metodologi SSAD
  • SADT _diagram_, digunakan pada metodologi SADT
  • Warnierr/Orr _diagram_, digunakan pada metologi Warnierr /Orr
  • Jackson's _diagram_, digunakan pada metodologi JSD
  • Kode terstuktur (_pseudocode_)
  • Bagan Alir Sistem (_system flowchart_)
  • Bagan Alir Program (_program flowchart_)
  • Bagan Alir Dokumen (_document flowchart_)
  • Bagan Alir Proses (_process flowchart_)
  • Bagan Organisasi (_organization chart_)
  • Kamus Data (_data dictionary_)
  • Tabel Keputusam (_decision table_)



Sistem Informasi

Nurhidayat 211511001


 ## Konsep Dasar Sistem


Menurut Tata Sutabri bahwa sistem didefinisikan sebagai suatu kumpulan atau himpunan dari unsur, komponen atau variabel yang terorganisir, saling berinteraksi, saling tergantung satu sama lain dan terpadu.

Maksud dari komponen atau subsistem di dalam pengertian ini tidak hanya komponen fisik semata, tetapi termasuk di dalamnya adalah komponen yang bersifat abstrak atau komponen secara konseptual, seperti visi, misi, kebijakan, prosedur, dan kegiatan informal lainnya.

Sehingga sistem dapat dimakmani berdasarkan pendekatan komponen dan prosedur.





## Konsep Dasar Informasi


Informasi adalah hasil dari pengolahan data dalam bentuk yang lebih berguna dan lebih berarti bagi penggunanya, yang menggambarkan suatu kejadian-kejadian yang nyata yang dapat digunakan untuk pengambilan keputusan.

Semenatar data adalah fakta, atau kenyataan yang menggambarkan suatu kejadian yang terjadi pada waktu dan wilayah tertentu.

Contoh pada gambar di atas, data dari kartu persediaan diolah menjadi berbagai informasi yang lebih bermakna.


## Konsep Dasar Sistem Informasi


Kenneth C. Laudon, mendefinisikan sistem informasi secara teknis
sebagai satuan komponen yang saling berhubungan yang mengumpulkan (atau mendapatkan kembali), memproses, menyimpan, serta mendistribusikan informasi untuk mendukung pengambilan keputusan dan kendali dalam suatu organisasi.

Pada dasarnya, di dalam sistem informasi mengandung 3 kegiatan, yakni:

* kegiatan input (masukan)
* proses (_process_)
* kegiatan output (keluaran)

 


Cakupan sistem informasi bahwa pengendalian itu harus sesuai dengan maksud dan tujuan suatu sistem.  Bila sesuai, berati output sudah sesua. Namun bila belum, maka mulai lagi memproses input menjadi output.

25 Agustus 2021

Menampilkan Bendera Berkibar di Terminal Python

Masih dalam suasana Agustusan, iseng-iseng ngoprek Python supaya dapat menampilkan bendera merah putih yang berkibar pada layar barbasis text. Bisakah?

Jawabnya bisa! 

Untuk mewarnai huruf, dapat digunakan ANSI yang berupa Escape Control. Sedangkan untuk bendera digunakan fungsi sinus()

Tampilan Output



Source Code


<code>

    import math
    import time
    import random

    def sin_translate(x, **kwarg):
        xtrans=kwarg.get('xtrans', 1)
        ytrans=kwarg.get('ytrans', 1)
        x1 = x * xtrans
        sin = math.sin(math.radians(x1)) * ytrans
        return x1, sin

    def flag(x,w):
        grid = []
        ytrans = random.randint(10,20)/10
        for x in range(x, x+w):
            d, y = sin_translate(x, xtrans=10, ytrans=ytrans) #math.radians(x))
            #print(f'x={x}, d={d:0.2f}, y={y:0.2f}')
            y = round(y)
            grid.append((y-6, y, y+7))

        #print(grid)
        print('\033[2J')
        ymin = round(-ytrans-6)
        ymax = round(ytrans +7)

        for y in range(ymin, ymax
+1):

            for g in grid:
                a, m, b = g
                if a <= y <= m:
                    print('\033[31;41mM', end='')
                elif m < y <= b:
                    print('\033[37;47m:', end='')
                else:
                    print('\033[39;49m ', end='')
            print('\033[39;49m')


    x = 0
    while True:
        flag(x, 60)
        print('INDONESIA TANGGUH, INDONESIA TUMBUH')
        x += 1
        time.sleep(0.1)

</code>

12 Agustus 2021

Self Destroyed Application

Just for fun.

Bagaimana seandainya program/ script Python yang kita buat hanya dapat dieksekusi beberapa kali saja. Setelah itu programnya otomatis kehapus. Kalaupun dicopy lagi tetap ga bisa jalan.

Hmm... Kalau user yang ga ngerti Python sih bisa. Tapi kalau yang jago?

Iseng-iseng saya buat script lalu saya sisipkan ke program saya yang lain. Dan lumayan, dia kontak terus menanyakan programnya hilang sendiri. Setelah dicopy ulang kadang bisa jalan dan kadang ga. Tujuan saya jadi tercapai, karena 'dia' jadi ingat saya..

Langsung saja begini scriptnya:


import pickle
import os, sys
import random, time

class UnlinkMe:
'''
class UnlinkMe
Just for fun, limiting an application that can be executed
specified times by self-deleting the application file or 
by exiting randomly.
'''

pickn = '____.db'
finish= False

def __init__(self, lim = 10, **kwarg):
'''
1st argumen is limit: integer: how many trial 
alowed to be executed
verbose: boolean: set True to display message 
progress. default is False
'''
self.verbose = kwarg.get('verbose', False)
self.limit = int(lim)
self.selfn = sys.argv[0]
if os.path.isfile(self.pickn):
with open(self.pickn,'rb') as fd:
self.limit = pickle.load(fd)
self.verbose and print(f'Load limit {self.limit}')
else:
self.save()
self.test()

def save(self):
'''save limit'''
with open(self.pickn,'wb') as fd:
pickle.dump(self.limit,fd)
self.verbose and print(f'Dump limit {self.limit}')

def test(self):
'''evaluate execution times'''
if self.limit < 0 and not self.finish:
self.verbose and print('Warning!')
try:
self.verbose and print('Try to unlink ..')
os.unlink(self.selfn)
self.finish = True
self.verbose and print('Unlink finished')
except:
self.verbose and print('Error unlink')
if self.finish:
#exit on probability one of three for fun
random.randint(1,3)==1 and exit(1)
self.limit -= 1
self.save()
return self.finish
#end of class----

def dummy_process(n):
'''display random progress bar'''
t = random.randint(3, 20)
for i in range(t):
print(f'\r{n:02d} ', end='')
print('='*int((i+1)/t*50), end='')
time.sleep(0.1)
print()

# ----- main program ---------
if __name__ == '__main__':
limit = 10
dm = UnlinkMe(limit) #,verbose=True)
print(f'Demo by limiting about {limit}+random times')
print('Warning, script would be missing after that') 
print('\nPress Ctrl+C to break dummy process any time')
i = 0
while True:
i += 1
dummy_process(i)
dm.test()
time.sleep(2)


Pada baris bagian bawah ada contoh cara penggunaannya. Cukup UnlinkMe(10) misalnya, untuk membatasi aplikasi hanya dapat dieksekusi sekitar 10x. Kalau usernya sedang berutung bisa dieksekusi beberapa kali lagi.

Kalau suatu proses atau suatu fitur dalam aplikasi yang mau kita batasi, pakai method .test() setiap kali proses atau fitur diakses. 

28 Februari 2017

Membangkitkan Angka Random pada PHP

Kata "membangkitkan" adalah padanan kata men-generate.

Angka Random


Angka random adalah angka yang dihasilkan dari suatu prosedur pembangkitan, dimana kemunculannya angka tersebut tidak memiliki pola.

Membangkitkan angka random dengan script PHP, cukup menggunakan fungsi rand(). Menurut referensinya, fungsi tersebut akan mengembalikan nilai integer mulai dari 0 hingga getrandmax() yang bergantung pada spec mesin dan OS. Pada komputer saya, prosesor 64bit dan OS 64bit, getrandmax() mengembalikan nilai 2147483647.

Contoh PHP script untuk membangkitkan 10 angka random fungsi rand() sbb:

<?php
for ($i=1; $i<10; $i++){
  echo rand()." ";
}
//akan menghasilkan output sbb seperti sbb:
//591004376 1922726400 707854443 951539647 123211066 452202029 //1229956111 1102301159 1659840919 1686837145  Catatan: output setiap kali dieksekusi akan berbeda,


Random Terbatas


Untuk mensimulasikan suatu hasil lemparan koin 2 sisi atau dadu 6 sisi misalnya, maka digunakan fungsi rand(minimum, maksimum), seperti contoh sbb:

<?php
echo rand(0,1);
//menghasilkan 0 atau 1

echo rand(1, 6);
//menghasilkan angka 1, 2, 3, 4, 5, atau 6


24 Februari 2017

Melewatkan Parameter pada Script PHP-CLI

Script PHP berbasis web dapat melewatkan parameter dengan cara seperti ini:

namascript.php?param1=value1&param2=value2 

sementara untuk mengeksekusi script php, nilai argument /paramater dapat dilewatkan dengan cara yang mirip jika kita bikin program pakai bahasa C, misal sbb:

$ php namascript.php value1 value2

Untuk menangkap nilai paramater pada script php digunakan variabel global yang sudah tersedia, yaitu:

  • $_SERVER['argc'] untuk mengembalikan banyaknya argument /paramater yang dilewatkan termasuk nama script
  • $_SERVER['argv'][0] nama script
  • $_SERVER['argv'][1] value untuk argument /paramater pertama
  • $_SERVER['argv'][2] value untuk argument /paramater kedua
  • .. 
  • $_SERVER['argv'][n] value untuk argument /paramater ke-n

Contoh Script:
Berikut script untuk menampilkan isi suatu file. Nama file dilewatkan sebagai argument /paramater

<?php

echo "Menampilkan isi file\n";

//check apakah ada argument yang dilewatkan
if ($_SERVER['argc'] != 2) {
  echo "Error Usage: php {$_SERVER['argv'][0]} <namafile>\n";
  die;
}

//ambil namafile
$namafile = $_SERVER['argv'][1];


//periksa keberadaan
if (!file_exists($namafile)){
  echo "Error: File {$namafile} tidak ditemukan\n";
  die;
}

//tampilkan isinya
echo "Isi file:\n";
echo readfile($namafile);

?>





13 Januari 2017

Menghapus Record yang Double di MySql

Tanya:

Bagaimana cara mengapus record yang double dari sebuah tabel dengan perintah SQL? Misal table dengan field sbb:

id
nama
tanggallahir
jeniskelamin
namaibukandung


dimana id sebagai primarykey, dan dikatakan double jika nilai dari field nama, tanggallahir, jeniskelamin dan namaibukandung sama semua.


Jawab:

Jika ingin mneghapus double dengan gabungan 4 field distinct sbb:

DELETE FROM namatabel t 
WHERE t.id NOT IN ( 
  SELECT u.id FROM namatabel u
  GROUP BY u.nama, 
           u.tanggallahir, 
           u.jeniskelamin, 
           u.namaibukandung
);

Semoga bermanfaat

02 Desember 2016

Menduga Jumlah Massa Shalat Jumat 2 Desember 2016 di Monas dan Sekitarnya pada Aksi Bela Islam III

Saya sungguh curious dengan angka yang dipublish di medsos bahwa peserta massa Aksi Bela Islam III mencapai 7 juta orang. Angka yang fantastis dan sangat menggembirakan bagi saya sebagai umat Islam. Sungguh, saya berharap angka tersebut benar.

Akuratkah?


Berdasarkan situs BPS, hasil proyeksi Penduduk Tahun 2015 menunjukkan total populasi penduduk DKI + Jawa Barat + Banten sekitar 68,8 juta. Dengan median Tingkat Ketergantungan (Dependency Ratio) sekitar 46%, maka ada sekitar 68,8 juta x (100-46)% = 37,2 juta orang berusia produktif ada di ketiga provinsi tersebut.

Jika diasumsikan bahwa:
  • Peserta aksi berada pada usia produktif
  • Sebagian besar berasal dari DKI + Jawa Barat + Banten, katakanlah ada 75%,
berarti dari 7 juta yang diklaim itu ada 5,2 juta yang berasal dari ketiga provinsi tersrebut. Dengan kata lain, ada 5,2/37,2 = 14% penduduk usia produktf di ketiga provinsi tersebut sedang berada di sekitar Monas saat itu. Yakin? Ah, masih susah kebayang.

Pendekatan Luas Wilayah


Akhirnya saya mencoba menghitung estimasi luas wilayah yang ditempati massa untuk Shalat Jumat, yaitu jalan-jalan dan area yang diduduki peserta diluar taman. Berdasarkan foto-foto dan berita yang masuk ke feed facebook, saya menggunakan bantuan GoogleMap untuk menghitung panjang jalan, dan dikombinasikan situs lain untuk menghitung lebar jalan, berikut ini worksheet hasil perhitungan saya sbb:


Jalan / Area Lebar_m Panjang_m Luas satuan
Monas ke Bundaran BI 40 500 20.000 m2
Monas ke Gambir 40 450 18.000 m2
Monas ke Merdeka Utara 40 150 6.000 m2
Monas keliling 100 1.140 114.000 m2
Jl Merdeka Barat 35 950 33.250 m2
Jl Merdeka Selatan 30 1.000 30.000 m2
Jl Thamrin 35 1.400 49.000 m2
Jl Budi Kemulyaan 15 500 7.500 m2
Jl Merdeka Timur - Tugu Tani 30 1.400 42.000 m2


Total 319.750 m2


Kepadatan 2 orang/m2


Sub Total 639.500 Orang


Istiqlal 200.000 Orang


Total 839.500 Orang



Dengan asumsi kepadatan 2 orang/m2 itu cukup untuk mengelar sajadah atau koran, maka didapatkan total massa yang menempati area tersebut ada sebanyak 839,5 ribu orang. Masih dibawah 1 juta, masih jauh dibawah angka fantastis yang dipublish beberapa fihak.

Masih Yakin Jika 7 Juta itu Benar?


Baiklah, sekarang coba pecahkan soal berikut ini:

Berapa banyak lembar koran dibutuhkan untuk menutupi permukaan jalan Tol Cipali (Cikopo-Palimanan)?
Menurut wikimedia, panjang jalan Tol Cipali itu 116km dengan lebar jalan masing-masing ruas 7m. Ukuran selembar kertas koran katakanlah 75cm x 58cm. Sebenarnya kertas koran untuk dipakai sujud saja tuh tidak nyaman banget, kepala harus ditekuk agar tidak menyundul kaki jemaah di depannya.

Sudah selesai? Kunci jawabannya: Diperlukan 3.7 juta lembar kertas koran. Jadi massa sebanyak 7 juta ngga cukup untuk Shalat Jumat di kedua ruas jalan Tol Cipali. Jika Tol Cipali saja ga cukup, lalu apa mungkin cukup di Monas dan sekitarnya?


Mohon maaf bila perhitungan saya salah.


31 Oktober 2015

Struktur Alternatif Program Web Berbasis Yii2

Web Programmer yang menggunakan Yii2 Framework dapat mengikuti struktur berikut ini agar lebih leluasa menempatkan program web di folder manapun.

Catatan:
Saya menggunakan Ubuntu 14.04 dengan LAMP stack. Jadi folder Document Root ada di /var/www/html . Anda bisa menyesuaikan dengan system sendiri.

1. Letakkan Yii2 dibawah folder /var/www/html, misal nama foldernya yii2-basic. Struktur folder yii yang saya pakai sebagai contoh disini adalah berasal dari yii-basic-app-2.0.6.tar.gz


2. Buat folder di bawah /var/www/html untuk website yang akan didevelop, misal webcoba. Ikuti struktur yang ada pada struktur Yii2 di atas, atau copy saja folder dan isinya dari yii2-basic. Folder yang TIDAK DIBUTUHKAN adalah mail, tests, vendor dan web.

Copy juga file favicon.ico dan index.php dari folder yii2-basic/web. File index.php ini yang nanti akan sedikit dimodif agar lebih fleksible.


3. Pastikan folder assets dan runtime word writeable, beri perintah sbb:

# sudo chmod 777 /var/www/html/webcoba/assets
# sudo chmod 777 /var/www/html/webcoba/runtime


Anda bisa menempatkan file .htaccess yang berisi deny from all, agar folder tersebut aman.

4. Edit file index.php yang berada di /var/wwww/html/webcoba/ menjadi seperti berikut ini:

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');


//

//ada tiga baris berikut yang saya comment out 
//dan nanti disesuaikan
////require(__DIR__ . '/../vendor/autoload.php');
//require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
//$config = require(__DIR__ . '/../config/web.php');



//definisikan YII_PATH dimana yii2 diinstall 

//sebagai contoh di atas /var/www/html/yii2-basic
//bisa dituliskan relatif, bisa juga full
define('YII_PATH', '/var/www/html/yii2-basic');

require(YII_PATH . '/vendor/autoload.php');
require(YII_PATH . '/vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/config/web.php');

(new yii\web\Application($config))->run();



Perhatian, copy-paste dari halaman ini kemungkinan bermasalah pada penulisan aphostrope. Silakan periksa kembali.

5. Edit file config/web.php menjadi sbb:

<?php

$params = require(__DIR__ . '/params.php');

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),

 
    //tambahkan baris berikut ini
    'vendorPath'=> YII_PATH.'/vendor',   
    'bootstrap' => ['log'],
    'components' => [
        'request' => [


... dst...

6. Selesai

Sebelum develop program lebih lanjut, system anda sudah dapat diakses pada http://localhost/webcoba.

Catatan:
* Struktur pada webcoba dapat dijadikan skeleton untuk program lainnya.
* Anda bisa membuat berapapun web program dengan skeleton yang sama.
* Bila ada upgrade Yii2 cukup dilakukan di folder yii2-basic basic tsb.

26 Februari 2015

Memecahkan Masalah Grub Rescue dengan Lilo

Banyak pemakai Window yang mencoba melakukan install dual-boot dengan Linux, yang pada akhirnya menghapus partisi Linux. Apa yang terjadi setelah itu?

Saat komputer di-restart, ia tidak dapat lagi masuk ke Windows-nya, melainkan masuk ke terminal grub rescue mode. Tampilannya sebagai berikut:



Nah, bagaimana solusinya?

Cara yang biasa pemakai Windows lakukan adalah dengan booting menggunakan CD Windows baik untuk install maupun recovery. Di sana ada menu untuk repair Windows.

Namun bagi pemakai Window yang tidak memiliki CD tersebut, solusinya adalah menggunakan LiveCD atau LiveUSB Linux yang sebelumnya ia gunakan untuk install Linux. Berikut ini langkah-langkahnya:
  1. Boot dari LiveCD atau LiveUSB Linux. (Pada beberapa komputer menggunakan tombol F12 untuk masuk ke menu pilihan Boot Device pada BIOS)

  2. Pilih "Try Ubuntu"

  3. Masuk ke terminal, lalu install lilo

    Nah apakah itu Lilo? Lilo adalah Linux boot loader yang dulu pernah dipergunakan oleh sebagian besar distro Linux sebelum beralih ke grub. Lilo memiliki fasilitas pemasangan MBR pada partisi harddisk. Untuk itu pastikan komputer anda terhubung ke internet. Ukuran file tidak besar, hanya 276kB.

    > sudo apt-get install lilo




    Pada saat instalasi lilo, akan tampil dialog seperti gambar dibawah ini, tekan saja tombol OK. (dengan mouse atau Tab lalu Enter)


  4. Install MBR pada partisi pertama dengan perintah sbb:

    > sudo lilo -M /dev/sda mbr




  5. Selesai, reboot

Tips di atas adalah hasil ujicoba pada komputer 32bit yang terpasang OS WinXP. Pada komputer 64bit UEFI belum diujicobakan.

Semoga bermanfaat.

21 Februari 2015

Mengatur Timezone di Ubuntu Server

Mengatur setingan waktu sesuai dengan Timezone tertentu pada Ubuntu Server 14.04 LTS dapat dilakukan sebagai berikut:

> sudo dpkg-reconfigure tzdata

selanjutnya akan ditampilkan dialog pemilihan wilayah geografis yang dilanjutkan dengan pemilihan nama kota.


07 Februari 2015

Belajar Mengkonfigurasi PC Router di VirtualBox

Belajar mengkonfigurasi PC Router dengan Mikrotik maupun Ubuntu tentu membutuhkan biaya yang tidak sedikit untuk pengadaan PC dan jaringan. Kerena itu dapat dipergunakan VirtualBox sebagai lab untuk membangun jaringan lengkap dengan PC Router dan PC Client di bawahnya.

Tulisan ini dapat membantu mereka yang ingin mempelajari bagaimana PC Router atau Mikrotik dikonfigurasi sehingga dapat bekerja sesuai keinginan hanya dengan VirtualBox. Tentu saja dibutuhkan komputer yang spesifikasinya cukup untuk dipasangi VirtualBox dan beberapa mesin virtual di dalamnya.

Tujuan:
Melakukan simulasi pembuatan PC Router di VirtualBox sehingga virtual client yang berada di bawah router tersebut dapat mengakses jaringan yang dapat diakses oleh host, misalkan internet dll.

Berikut ini skema jaringan yang akan dibangun:




Gambar 1. Skema Jaringan yang Akan Dibangun


Keterangan:
  • Host adalah komputer fisik yang sedang dipakai, di dalamnya sudah terpasang VirtualBox
  • PC Router adalah komputer virtual yang akan digunakan sebagai router. PC ini memiliki 2 ethernet dan meneruskan semua permintaan dari client di bawahnya ke host.
  • C1 adalah komputer virtual yang akan digunakan sebagai client di bawah router. Komputer ini nantinya harus dapat mengakses jaringan yang dapat diakses oleh host, misalnya internet 
  • C2 seperti halnya C1, tetapi opsional bila memori cukup.
  • Switch jaringan yang menghubungkan mesin-mesin virtual.
  • Pada dasarnya, tipe jaringan yang dibangun disini adalah NAT.

Langkah-langkah yang dilakukan sbb:
  1. Membuat Mesin Virtual PC Router
  2. Mengatur Konfigurasi Jaringan PC Router
  3. Mengatur Tabel Routing PC Router
  4. Membuat Mesin Virtual PC Client
  5. Mengatur Konfigurasi Jaringan PC Client

1. Membuat Mesin Virtual PC Router


Pembaca dapat menggunakan OS Mikrotik atau lainnya. Namun karena penulis tidak memiliki OSnya, dalam artikel ini penulis menggunakan Ubuntu.

Penulis menganggap pembaca sudah mengerti cara membuat mesin virtual di VirtualBox. Bila belum mengerti silahkan mencari referensi di internet, disini penulis menekankan beberapa hal:

  • Semua mesin virtual yang penulis pakai menggunakan Ubuntu Server tanpa menginstall aplikasi server, sehingga dapat menggunakan memori 256M saja. Bila pembaca ingin menggunakan Mikrotik, dipersilakan mencari referensi kebutuhan memori minimal.
  • PC Router membutuhkan 2 Network Adapter
    • Netwotk Adapter 1 terhubung ke "NAT"
    • Network Adapter 2 terhubung ke "Internal Network"



2. Mengatur Konfigurasi Jaringan PC Router


Menurut Gambar 1, PC Router memiliki dua kartu jaringan, masing-masing eth0 dan eth1. Karena eth0 terhubung ke NAT, maka eth0 mendapatkan IP secara DHCP dari VirtualBox device, biasanya 10.0.2.15 untuk PC pertama.

Eth0 ini otomatis memiliki gateway dengan IP 10.0.2.2 yang mewakili IP host. Jadi bila ingin mengakses service yang tersedia di host, cukup mengakses 10.0.2.2.

Sementara eth1 harus dikonfigurasi manual. Misalkan jaringan yang akan dibagun adalah 192.168.2.0/24, maka eth1 akan dipakai sebagai gateway dari jaringan dalam diberi IP 192.168.2.1. Berikut perintah di terminal sbb:

> sudo ifconfig eth1 192.168.2.1 up

3. Mengatur Tabel Routing PC Router


Agar semua permintaan keluar dari jaringan 192.168.2.0/24 diteruskan ke host, maka perlu dibuat tabel routing dan mengaktifkan masquerade.

> sudo -i
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i eth1 -j ACCEPT

# exit

 

4. Membuat Mesin Virtual Client


Sama seperti mesin virtual PC Router, penulis menggunakan Ubuntu Server juga tanpa menginstall aplikasi server, sehingga dapat menggunakan memori 256M saja. Meskipun namanya OSnya Ubuntu Server, tetapi penulis menjadikanya sebagai PC Client.

Karena akan dihubungkan ke mesin virtual PC Router, PC Client membutuhkan Network Adapter yang terhubung ke "Internal Network"


5. Mengatur Konfigurasi Jaringan PC Client


Kartu jaringan eth0 harus dikonfigurasi manual sesuai dengan jaringan yang akan dibangun (192.168.2.0/24), maka eth0 diberi IP 192.168.2.10 misalnya. Berikut perintah di terminal sbb:

> sudo ifconfig eth0 192.168.2.10 up

Berikutnya perlu diatur juga gateway dari jaringan ini yaitu 192.168.2.1, sbb:

> sudo route add default gw 192.168.2.1


Nah, selesai sudah. Kini virtual PC Client seharusnya sudah dapat mengakses semua service di Host, semua PC yang berada pada jaringan yang sama dengan Host, bahkan internet yang dapat diakses Host juga akan dapat diakses oleh Client ini.

> ping 10.0.2.2
> ping 8.8.8.8
> ping google.com

Bila pembaca ingin menggunakan browser dari terminal, silakan install elinks dengan perintah sbb:

> sudo apt-get install elinks
> elinks http://m.facebook.com 


Selamat mencoba.

14 Oktober 2014

Mencetak Dokumen dengan Remote Terminal

Malam ini saya mendapat kabar bahwa dokumen untuk presentasi harus sudah siap besok pagi. Padahal dokumen tersebut akan menghabiskan 1 rim kertas HVS A4 untuk dicetak. Bagaimana dong? Apa bisa besok berangkat kantor pagi-pagi sekali?

Tidak perlu! Saya cukup mengirimkan file PDF tersebut ke kantor, lalu print dari kantor malam ini juga!


Tanpa Berangkat ke Kantor, Bagaimana Caranya?


Gampang! Bila petugas penjaga gedung kantor jago komputer, tinggal minta beliau dengan sopan untuk mencetakkan dokumen penting ini yang dapat di download pada url bla-bla-bla terus diprint bla-bla-bla... :)

Kata penjaga kantor: "Kalo gue jago komputer, pasti sudah cabut dari sini dari dulu!" Haha..

Baiklah, mari kita mulai! Berikut ini adalah diagram skema jaringan antara notebook saya di rumah dengan LAN yang ada di tempat kerja:



Kebetulan tempat kerja saya sudah pasang nama domain (myoffice.org misalnya). Sehingga lebih mudah diingat saat akan mengakses server utama yang berisi WebServer, SSH Server dan Mail Server, yang selalu ON terus 24 jam dan ditanami Ubuntu 14.04 LTS Server.

Sementara PrinterServer dipasangi juga Ubuntu 14.04 LTS Desktop, terhubung dengan dua buah printer Laser dan Deskjet. Selain sudah otomatis terinstall Cups Server, juga sudah ditambahi SSH Server untuk kebutuhan adminitrasi remote. Bagi yang belum install SSH Server, dapat install lewat terminal sbb:

at_printserver$ sudo apt-get install openssh-server



Ok, mari kita lanjutkan! Berikut ini langkah selanjutnya yang mesti dilakukan:
 

1. Pastikan Peralatan di Tempat Kerja Sudah On

Ini penting, mengingat semua PC desktop, printer server dan printer di tempat kerja saya selalu di-shutdown setiap sore, maka mau tidak mau harus meminta penjaga kantor untuk menghidupkan printer server dan printernya. Sekaligus minta dengan sopan agar mengisi tray printer dengan 1 rim kertas HVS. Untungnya beliau mengerti cara melakukannya.


2. Kirim File yang Akan Dicetak ke Cloud Storage

File yang akan dicetak harus sudah dalam format PDF, dapat dikirimkan ke Cloud Storage di DropBox atau Google Drive dll., atau bisa juga dikirim ke email, atau disimpan di webserver sendiri.


3. Lakukan Koneksi ke Server Utama Kantor

Agar dapat masuk ke dalam Server Utama, maka modem/router ADSL harus sudah dikonfigurasi sedemikian rupa agar dapat menerima permintaan SSH dari luar, yang kemudian diforward ke Server Utama. Bila belum, silakan baca artikel saya yang lain tentang Meng-online-kan WebServer.

Untuk mengakses Server Utama di kantor, saya melakukan ssh pada terminal sbb:

at_notebook$ ssh dhenoer@myoffice.org

Setelah mendapatkan autentikasi, saya sekarang sudah berada di Server Utama


4. Lakukan Koneksi ke Printer Server

Dari Server Utama, dengan ssh dilakukan koneksi ke Printer Server pada IP misal 192.168.1.44. Agar koneksi aman dari diskoneksi yang tidak terduga, dapat digunakan tmux atan screen.

Berikut ini cara koneksi ke Printer Server:

at_mainserver$ ssh dhenoer@192.168.1.44

Setelah mendapatkan autentikasi, saya sudah berada di Printer Server, siap untuk mencetak.


5. Ambil File yang Akan Dicetak dari Cloud Storage

File PDF yang akan dicetak dapat didownload dengan perintah wget sbb:

at_printserver$ wget http://<url-file-pdf-di-download>

tunggu hingga selesai.


6. File Siap Dicetak
 
Setelah download selesai, misal namanya adalah naskah.pdf, maka dapat dicetak dengan perintah sbb:

at_printserver$ lp -d MyLaserJet naskah.pdf

Maka printer akan mulai menjalankan tugasnya. Mudah-mudahan tidak paper-jam! :-)

Keterangan
MyLaserJet adalah NAME untuk printer yang akan dituju. Untuk mengetahui NAME printer apa saja, dapat digunakan perintah sbb:

at_printserver$ lpstat -a

MyLaserJet accepting requests since XXXXXX
MyDeskJet accepting requests since XXXXXX

dan untuk mengetahui progress pencetakan, dapat digunakan perintah

at_printserver$ lpstat


tanpa argumen, akan menampilkan progress antrian pencetakan.

File yang dapat dicetak oleh lp adalah file text, PDF, image dan PostScript.



Demikian semoga bermanfaat!

13 Oktober 2014

Meng-online-kan Webserver

Bagi pengguna Linux yang menggunakan koneksi internet lewat Speedy atau ISP lain, baik di rumah, sekolah,maupun kantor, sudahkah webserver Linux Anda online?

Berikut ini skema jaringan yang umum dibawah ISP:


Dengan asumsi bahwa webserver sudah berhasil diakses dari jaringan lokal, maka berikut langkah-langkah untuk mebuatnya dapat diakses secara global.

Langkah 1. Pastikan Webserver sudah Memiliki IP Private Statis

IP private statis adalah IP private yang tidak berubah bila komputer di-restart berulang kali. Bila belum, baca tautan Cara Memasang IP Static pada Ubuntu


Langkah 2. Mengatur Modem/Router ADSL dari ISP

Setiap modem/router ADSL dari ISP dapat dikonfigurasi, bacalah buku manualnya. Masing-masing merek memiliki cara tersendiri.

Biasanya konfigurasi dapat diakses dengan menggunakan browser internet pada alamat gatewaynya, misal http://192.168.1.1. Masukan alamat IP tersebut pada url browser Anda, bila itu benar IP modem/router, maka akan tampil permintaan autentikasi untuk memasukkan username dan password.

Jika belum diubah oleh petugas saat pemasangan ADSL, default username dan password dapat dicari di Google. Misalkan untuk modem TPLink, username dan password default keduanya adalah 'admin'.

Setelah berhasil masuk, cari modul pengaturan advance. Beberapa merek memasukkannya pada modul "Port Forwarding", dan ada juga pada modul "Virtual Server". Hati-hati jangan mengubah konfigurasi pada modul WAN, karena bila salah akan menyebabkan koneksi ke Internet gagal, dan anda harus memanggil petugas ISP untuk melakukan pengaturan ulang.

Secara umum, pada modul Port Forwarding, biasanya berbentuk sbb:

Pada contoh diatas, permintaan service web pada port 80 yang diterima modem/router melalui IP Publik akan diteruskan ke komputer lokal yang ada pada IP 192.168.1.11 port 80.

Untuk service yang lain, misal SSH server pada port 22, atau SMTP pada port 25 dapat diteruskan ke IP lokal juga, dapat didaftarkan pada port-forwarding tersebut.

Bila sudah di-set rule port-forwarding seperti itu, lalu disimpan dan di-apply maka permintaan dari luar ke nomor IP Publik pada ADSL akan diteruskan ke komputer yang ditunjuk pada IP lokal tersebut.



Langkah 3. Pastikan IP Publik ADSL bersifat Static

Untuk memastikan pakah IP modem/router memiliki IP publik yang statis atau dinamis, silakan konfirmasi ke ISP yang bersangkutan. Bila malas kondirmasi, silakan cek lewat Google cari dengan keyword "my ip", dan catat hasilnya. Restart modem/router anda, kemudian periksa lagi IP apakah masih sama dengan yang sebelumnya. Bila masih sama, lakukan beberapa kali untuk meyakinkan.

Tempat saya bekerja, mendaftar Speedy paket 1Mb yang dilakukan sebelum tahun 2014 mendapatkan IP statis. Namun ketika migrasi ke paket 3Mb pada tahun 2014, hanya mendapatkan IP dinamis. Katanya untuk memiliki IP statis harus daftar sebagai akun Gold, yang sudah pasti lebih mahal biaya bulanannya.


Langkah 4. Mendaftar Nama Domain

Nama domain mudah sekali didaftarkan pada perusahaan domain provider yang menawarkan harga antara 10 USD hingga puluhan USD per tahun. Cari saja domain provider yang menerima pembayaran lewat kartu kredit atau PayPal. Mungkin ada juga penyedia jasa dari Indonesia yang dapat dibayar melalui transfer via ATM. Namun saya belum pernah malakukannya.

Nama domain yang didaftarkan untuk TLD .com, .org, .info tidak membutuhkan persyaratan khusus. Siapa saja dapat melakukannya. Sedangkan domain .co.id, .or.id, .sch.id, .ac.id dll, harus melampirkan surat-surat resmi yang berhubungan dengan kelambagaan.

Jika pembayaran sudah diselesaikan, biasanya 24 - 48 jam nama domain sudah siap dan sudah diparkir di server milik domain provider.

Langkah 5. Pencatatan pada DNS

Biasanya domain provider memiliki akses ke DNS. Konsumen dapat mencatatkan IP Publik (hasil dari langkah 3) pada DNS yang bersangkutan, melalui control panel berbasis web yang disediakan. Pada umumnya bentuk formnya sbb:

Pada form di atas, IP modem/router ADSL dicatatkan pada baris www dan @. Misal nama domain yang didaftar adalah domainku.com, maka dapat dipanggil dengan domainku.com atau www.domainku.com. Atau bila anda bisa membuat virtual host di webserver sendiri, sehingga dapat dipanggil data.domainku.com, cctv.domainku.com, internal.domainku.com dll.

Pengaturan DNS biasanya tidak akan lama, paling tidak satu jam pemanggilan nama domain sudah aktifdan diteruskan ke IP yang didaftarkan. Untuk mengeceknya, lakukan perintah sbb pada terminal:

$ dig domainku.com


Demikian catatan saya untuk meng-online-kan webserver linux, yang pada dasarnya dapat diterapkan untuk layanan lain, misal SSH server, mail server, CCTV, dll. Semoga bermanfaat.

Catatan: Untuk modem/router ADSL yang memiliki IP Dinamis, jangan khawatir! Anda tetap dapat meng-online-kan server anda melalui cara yang lain. Tunggu tulisan berikutnya.

09 Oktober 2014

Cara Memasang IP Static pada Ubuntu

Ubuntu biasanya menggunakan IP address dinamis yang diberikan server DHCP yang ditemukan di jaringan tersebut, biasanya ada pada modem/router atau Server DHCP lainnya. Kecuali tidak ditemukan, maka IP address harus diberikan secara manual.

Misalkan ingin memberi IP Address 192.168.1.11 dengan netmask 255.255.255.0, gateway 192.168.1.11, dan dns 8.8.8.8.

Berikut ini cara memberikan IP statis dengan GUI dan dengan terminal.

Cara Memberi IP Address Static dengan GUI


1. Jalankan aplikasi Network, lalu klik Options



2. Klik tab IPv4 Settings

  • Pilih Method: Manual
  • Klik add untuk mengisi IP Address, Netmask dan Gateway
  • Masukkan DNS Servers

3. Klik Save..
4. Restart Network


Cara Memberi IP Static dari Terminal

Masukan ke terminal

$ sudo nano /etc/network/interfaces

masukan baris berikut

auto eth0
iface eth0 inet static
  address 192.168.1.11
  netmask 255.255.255.0
  gateway 192.168.1.1
  dns-nameserver 8.8.8.8


lalu simpan dan restart network


Semoga catatan ini bermanfaat.

08 Oktober 2014

Cara Mengakses Aplikasi (text/GUI) secara Remote dengan SSH

Lagi-lagi tentang SSH yang orang awam pernah menyangka bahwa SSH adalah "internet gratis". Selain secara pribadi saya tidak menyukai phreaking model begituan, toh kan saya masih mampu beli pulsa buat pakai internet secara halal. :-)

Kali ini saya akan mengajak pengguna Linux mengenal apa itu SSH Server dan X server.

Beberapa waktu yang lalu ada member grup yang menanyakan server di Linux apa saja. Ada yang memberi jawaban dengan beberapa aplikasi server yang populer seperti Apache, PHP, MySql, SSH Server dll. Namun sebenarnya ada yang terlewati, justru yang sering kita pakai setiap hari, yaitu X Server.


Apa itu X Server?


Secara sejarah gitu, Linux awalnya dikembangkan untuk aplikasi Client-Server. Sehingga apapun, tidak lepas dari algoritma client-server. Ada aplikasi yang meminta (client), dan ada aplikasi yang listening terus pada port atau socket tertentu sambil menunggu permintaan dan lalu memberi jawaban (server).

Bahkan hingga permintaan bagaimana tampilan grafis (GUI) di layar monitor menggunakan algoritma client-server. Karena bertindak sebagai server itu, berarti bisa dong service X diminta oleh komputer lain?

Tentu saja! Ini yang menarik makanya saya ingin mengajak teman-teman mencobanya.

Apa itu SSH Server?


Sekali lagi, SSH itu BUKAN aplikasi "inject internet gratis". SSH adalah Secure Shell, yaitu aplikasi untuk mengakses komputer secara remote dan terenkripsi. Biasanya banyak dipakai oleh adminstrator jaringan atau web. Secrara remote, user dapat login ke komputer lain dan menjalankan perintah-perintah yang tersedia pada komputer tersebut.

Uji Coba


Skenarionya begini, kita akan menjalankan aplikasi baik GUI maupun text yang ada di komputer lain secara remote.


Misalkan: Komputer remote menjalankan Ubuntu Desktop dan mendapatkan IP 192.168.1.100, serta juga menjalankan SSH-Server. Bagi yang belum pasang SSH Server dapat diinstall dengan

remote$ sudo apt-get install openssh-server


Lalu dari komputer lain, misalkan Lubuntu, masuklah ke terminal, kemudian jalankan

local$ ssh -X username@192.168.1.100

Keterangan:
-X memerintahkan remote agar keluaran GUI dari X Server diforward ke komputer lokal.
username@192.168.1.100 adalah username akun yang ada pada 192.168.1.100

Setelah memasukkan password, lalu komputer remote siap diberi perintah. Coba saja panggil aplikasi yang tersdia pada komputer remote tsb, semisal nautilus, gnome-calculator, evince, gimp, dia dll. dengan mengetikkan di layar terminal:

username@remote$ nautilus

Hasilnya bagaikan komputer remote tersebut ada di depan kita.



Bagaimana Mengakses dari Windows?


Beberapa aplikasi yang dapat dicoba dipakai untuk mengakses Linux dari Windows adalah sbb:
  • PUTTY untuk mengakses SSH server dan menjalankan perintah-peritah Linux berbasis text.
  • MobaXterm is an enhanced terminal for Windows with an X11 server, a tabbed SSH client and several other network tools for remote computing (VNC, RDP, telnet, rlogin). MobaXterm brings all the essential Unix commands to Windows desktop, in a single portable exe file which works out of the box. ---penulis belum pernah mencoba software yang ini--

Selamat mencoba. Salam..

Mengakses Webserver di Bawah Modem GSM dengan SSH Tunneling

Satu jam sebelum presentasi dan demo, tiba-tiba salah seorang anggota tim mengabarkan tidak dapat hadir karena sakit, padahal proyek website yang sedang dikerjakan hanya tersimpan pada notebooknya. Apa yang Anda lakukan sekarang?

Apakah anda akan nekat membuang waktu dengan menjemput teman Anda yang memang sungguh sedang saki? Oh no, jangan! Sebaiknya biarkan ia beristirahat di rumah. Lagipula bila Anda terlambat datang di tempat presentasi, apa kata dunia?

Lalu, bagaimana dengan presentasinya?

Ya, tetap saja dilanjutkan. Minta teman anda yang sakit untuk menghidupkan notebooknya dan minta agar terus terhubung ke internet seperti biasa, baik menggunakan koneksi modem GSM atau tethering Android.

Untuk mengakses webserver yang ada di Notebook teman yang sakit tadi, dapat digunakan dua cara. Cara yang paling mudah adalah dengan TeamViewer, dan cara yang relatif sulit adalah menggunakan teknik SSH Tunneling.

Cara Mudah: TeamViewer


TeamViewer adalah produk yang free for peronal use. Untuk mengakses komputer lain melalui TeamViewer langkahnya cukup mudah. Kedua komputer harus sudah terinstall TeamViewer.

Jalankan TeamViewer, masing-masing akan memiliki ID yang unik yang permanen. Beradasrkan ID tersebut, kita dapat mengakses Desktop lain seperti halnya mengakses secara RDP atau VNC.

Berbeda dengan RDP atau VNC, menggunakan TeamViewer tidak perlu melakukan seting router. Lha, koneksi pakai GSM, router siapa pula yang mau diakses?

Cara (Relatif) Sulit: SSH Tunneling


Cara SSH Tunneling ini cukup menantang, karena dibutuhkan 1 buah server yang memiliki IP publik yang terinstall di dalamnya SSH server. Server mediator ini boleh server sendiri, server kantor, server teman, atau server apapun yang menyediakan akun SSH. Yang penting kita dapat mengaksesnya dari manapun.

Server mediator dapat diakses dengan nomor IP atau nama domain. Misalkan Server mediator tsb memiliki nama domain tunneling.org, dan menyediakan akun username tamu dengan password *******.

Langkah 1:


Minta teman anda yang sakit untuk membuat reverse tunneling antara notebooknya dengan server tunneling.org. Caranya adalah memberi perintah sbb pada terminal:

teman$ ssh -R 8080:localhost:80 tamu@tunneling.org -N

Keterangan:

-R dimaksudkan agar dilakukan reverse tunneling, dengan memforward port 8080 di server tunneling.org ke port 80 di notebook teman. Kita sepakat bahwa port 80 itu adalah port standard untuk webserver.

tamu@tunneling.org  maksudnya login dengan akun username tamu di server dengan nama domain tunneling.org (jika tidak ada nama domain, dapat diganti dengan nomor IP)

-N memberitahu ssh-server bahwa tidak ada perintah lain selain menunggu.


Karena adanya opsi -N perintah ssh tidak menampilkan terminal di server tunneling.org, tetapi dalam kondisi listening saja. Dengan demikian minta teman jangan di-break selama koneksi tunneling sedang dibutuhkan.

Hingga langkah saat itu, sebenarnya webserver di notebook teman sudah bisa diakses oleh server tunneling.org. Dengan browser berbasis text (misal elinks atau lynx) yang tersedia di server tunneling.org, webserver dapat diakses dengan perintah sbb:

tunneling.org$ elinks http://localhost:8080

Maka akan tampil webserver yang tersimpan di notebook teman.

Kita memerlukan satu langkah lagi, agar webserver tsb juga dapat diakses dari komputer demo berbasis GUI.


Langkah ke 2:


Langkah berikutnya adalah membuat tunnel antara komputer demo dengan server tunneling.org. Berikut ini perintah yang diberikan dari komputer demo.

demo$ ssh -L 8080:localhost:8080 tamu@tunneling.org -N

Keterangan:
-L memerintahkan bind port 8080 di komputer demo ke port 8080 di komputer server tunneling.org

Setelah itu buka Mozilla Firefox, lalu akses ke url http://localhost:8080





Mengapa jadi localhost?

Ya, karena komputer demo sudah bind dengan komputer server tunneling.org, dan komputer Server tunneling.org akan forward port 8080 ke 80 di komputer webserver teman.

Demikian mudah-mudahan bermanfaat. Salam!