My Little Daemon™

Middle, C ProgrammingJanuary 9, 2008 10:01 pm

Berikut akan dibahas pengendalian command-line dengan menyertakan argumen atau biasa pula disebut dengan switch. Contoh command-line adalah perintah ls yaitu perintah kepada sistem operasi (Unix) untuk menampilkan daftar isi dari suatu direktori aktif. Jika kita tambahkan opsi -l (ls -l) maka ini berarti kita melakukan perintah ls dengan long-listing dimana isi dari direktori yang aktif akan ditampilkan beserta atribut-atribut yang melekat padanya. Penggunaan opsi -l ini yang dalam pembahasan kita ini, kita sebut sebagai argumen command-line atau  switch. Dengan switch kita bisa memodifikasi perilaku dari suatu program, pada contoh di atas : -l merubah perilaku (format penampilan daftar) dari perintah/program ls

Secara konsep, switch berperilaku seperi argumen dari suatu fungsi dalam C. Switch dilewatkan antar program sistem operasi, persis sama dengan pelewatan argumen antar fungsi. Switch dilewatkan sebagai argumen dari fungsi main(). Penulisan argumen adalah sebagai berikut :

main(int argc, char** argv)

Ada dua argumen yang dilewatkan, yang pertama argv adalah sebuah array string karakter. Dan yang kedua adalah sebuah integer, argc, yang menentukan jumlah string dalam array argv. Sintaks deklarasi char** argv menandakan bahwa argv merupakan pointer to pointer to character atau pointer sebuah array karakter atau disebut pula sebagai sebuah array string karakter. Karena berupa array, sehingga kita boleh pula menuliskan deklarasinya seperti berikut :

main(int argc, char** argv[])

Ketika kita menjalankan suatu program, maka array argv memuat semua informasi perihal command-line dan argumen/switch yang disertakan. Pemisah antara command-line dan argumen-argumen yang menyertainya adalah karakter spasi atau spasi kosong (whitespace). Integer argc diberi nilai sebanyak string yang akan dimuatkan. Misalnya kita ingin menjalankan perintah ls -ls, maka kita membutuhkan argc sama dengan 2, dengan perincian sebagai berikut :

argc = 2
argv[0] = “ls”
argv[1] = “-la”

Ok, kita akan menerapkan pengetahuan kita di atas untuk memodifikasi program cpstandar yang telah kita buat pada waktu terdahulu menjadi bisa menggunakan argumen. Argumen yang akan kita gunakan adalah nama file yang akan disalin dan file hasil penyalinnya. Sehingga program penyalin file kita ini menjadi lebih interaktif. Inilah file modifikasi dari cpstandar.c :

File standar2.c

#include <stdio.h>

main(int argc, char** argv)
{
   int c;
   FILE *in, *out;

   in = fopen(argv[1], “r”);
   out = fopen(argv[2], “w”);

   while ((c = fgetc(in)) != EOF)
          fputc(c, out);
}

Runtut proses eksekusinya :

$ ls -l test*
-rw-r–r–  1 handaru  handaru  24 Sep  6 08:37 test
$ ./cpstandar2 test test2
$ ls -l test*
-rw-r–r–  1 handaru  handaru  24 Sep  6 08:37 test
-rw-r–r–  1 handaru  handaru  24 Sep  6 08:38 test2
$

pada contoh ini berlaku :

argc = 3
argv[0] = ./cpstandar2
argv[1] = test
argv[2] = test2

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, FreeBSD, PHP 1:06 pm

Berikut adalah inisialisasi dari langkah panjang kita ke depan untuk mengkolaborasikan bahasa pemrograman C, C++, Perl sebagai engine aplikasi [terutama untuk Administrasi Server FreeBSD] dengan PHP sebagai interface ke usernya. Kali kita hanya membuat script PHP sederhana untuk memerintahkan sistem menampilkan semua proses yang sedang berjalan dengan perintah ps ax :

File my_fisrt_shell.php 

<?php
$output = shell_exec(’ps -ax’);
echo "<pre>$output</pre>";
?>

Hasilnya :

 

FreeBSD…apalagi yang kurang ?

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, FreeBSD, Selingan 12:19 am

Langsung aja :

  1. Set IP FreeBSD Anda dengan IP DHCP atau jika mau menggunakan IP lokal statik gunakan range IP 192.168.1.2-192.168.1.254 Netmask 255.255.255.0 Default Gateway 192.168.1.1 begitu pula DNS juga arahkan ke 192.168.1.1 [untuk Speedy personal], namun jika menggunakan Speedy Unlimited [Office ataupun Warnet] set DNS ke DNS telkom.net.id yaitu ke IP 202.134.1.10 dan 202.134.0.15 atau ke IP yang lain karena sebenarnya DNS Telkom ada banyak. Caranya ada DI SINI.
  2. Dengan Firefox/Opera masuk ke URL : 192.168.1.1 lalu login dengan user : admin dan password : adslroot
  3. Klik menu Quick Configuration pada tab Home
  4. Lakukan setting seperti ini :
    ATM Interface : 1
    Encapsulation : PPPoE LLC
    VCI : 35
    Default Route : Enabled

    Username : isikan username dari telkom
    Password : isikan password dari telkom
    Use DNS : Enabled
    Untuk isian lainnya biarkan default kemudian klik Submit
  5. Tunggu hingga indikator DSL dan ACT menyala
  6. Agar ketika modem reboot konfigurasi ini tersimpan, klik tab Admin lalu klik menu Commit & Reboot, selanjutnya klik menu Commit lalu Reboot
  7. Selamat berselancar di dunia maya

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Middle, FreeBSDJanuary 7, 2008 8:17 am

File System Access Control Lists [ACLs] adalah sebuah fitur yang memungkinkan FreeBSD 5.0 ke atas meningkatkan model permisi/hak akses atas file/direktori standar UNIX ke level standar POSIX. OK, terlalu teknis. Gampangnya begini, pernahkah Anda mengalami keribetan sewaktu harus memberikan hak akses tertentu atas suatu file yang Anda buat kepada user lain tapi hanya pada user tersebut saja. Anda bisa saja mengubah kepemilikan file tersebut dari Anda ke dia dengan perintah chown, namun itu berarti kepemilikan Anda terhadap file itu lenyap. Anda bisa pula memasukkan user lain tersebut ke dalam group Anda, namun hal ini juga berarti membuat semua user anggota group Anda juga memiliki hak akses terhadap file itu seperti satu user tadi. Atau paling gampang Anda memberikan hak akses atas file itu ke other, nah kalau yang ini lebih parah karena berarti semua orang memilki hak akses yang sama atas file tersebut. Masalah seperti ini menjadi begitu mudah teratasi jika Anda memberlakukan ACL atas suatu partisi sehingga semua file/direktori di dalamnya bisa kita kelola sistem hak akses terhadapnya dengan lebih simple dan mudah.

Fitur ACLs secara default telah di support oleh kernel GENERIC FreeBSD [options  UFS_ACL]. Jadi Anda tidak perlu melakukan recompile kernel. Karena fitur ACLs harus diberlakukan pada suatu sistem file [baca partisi] yang tidak bisa dirubah flag-nya hanya dengan remount [mount -u] namun harusn dengan umount lalu mount, saya mencobakannya pada sebuah flash disk.

Baiklah, inilah ekprerimen kita :

  • membuat direktori penampung untuk flash disk : # mkir /usb
  • agar sewaktu booting FreeBSD mengenali USB, tambahkan baris usbd_enable="YES" di /etc/rc.conf lalu reboot
  • memformat flash disk dengan sistem file ufs : # newfs /dev/da0s1
  • memberlakukan fitur ACLs di sitem file /usb : # tunefs -a enable /dev/da0s1
  • mounting flash disk ke direktori /usb : # mount /dev/da0s1 /usb
  • kita lihat hasilnya :
    # mount | grep acl
    /dev/da0s1 on /usb (ufs, local, acls)
  • membuat file yang nanti menjadi bahan percobaan : # edit /usb/coba
  • melakukan setting ACLs, yang ini sekedar contoh :
    # setfacl -m u:handaru:rwx,group:sakti:r–,o::— /usb/coba
    dimana kita memberikan hak akses rwx pada user handaru, r– untuk group sakti
  • Ok, kita lihat hasilnya :
    # getfacl /usb/coba
    #file:/usb/coba
    #owner:0
    #group:0
    user::rw-
    user:handaru:rwx
    group::r–
    group:sakti:r–
    mask::rwx
    other::—

FreeBSD…my cute daemon.

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, C Programming, FreeBSD, PHP, MySQLJanuary 4, 2008 2:05 pm

Karena hendak membuat tutorial PHP dan MySQL [tapi masih demi kepentingan membuat Sistem Administrasi Server], saya mengawalinya dengan instalasi tiga jagoan web base applications : Apache, MySQL dan PHP di mesin FreeBSD. Telah banyak tutorial tentang hal ini, jadi saya akan menyingkatnya saja :

Instalasi MySQL 5.0 : 

  • # cd /usr/ports/databases/mysql50-server/
  • # make install clean
  • # /usr/local/bin/mysql_install_db
  • # chown -R mysql /var/db/mysql/
  • # chgrp -R mysql /var/db/mysql/
  • edit file /etc/rc.conf lalu tambahkan baris : /usr/local/bin/mysqld_safe &

Instalasi Apache 2 :

  • # cd /usr/ports/www/apache2/
  • # make install clean
  • edit file /usr/local/etc/apache2/httpd.conf lalu aktifkan ServerName localhost
  • edit file /etc/hosts :

    ::1 localhost.localdomain localhost
    127.0.0.1 localhost.localdomain localhost
    192.168.1.252 localhost.localdomain localhost

    dimana 192.168.1.252 adalah IP Server FreeBSD

  • edit file /etc/rc.conf lalu tambahkan baris : apache2_enable="YES"

Instalasi PHP 5 : 

  • # cd /usr/ports/lang/php5/
  • # make config install clean ketika ditanyakan opsi, aktifkan opsi APACHE2
  • # cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini
  • # edit /usr/local/etc/apache2/httpd.conf lalu tambahkan baris-baris berikut :

    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    LoadModule php5_module libexec/apache/libphp5.so

    kemudian ubah baris DirectoryIndex index.html menjadi DirectoryIndex index.php index.html

Terakhir reboot. Untuk mencobanya buat file test.php dengan isi <?php phpinfo() ?> di direktori /usr/local/www/data/. Jika tak ada aral melintang, maka ketika Anda membuka URL http://ip_server_FreeBSD/test.php akan muncul segala informasi perihal PHP, yang meliputi opsi kompilasi PHP,  ekstensi kompilasi PHP, versi PHP, indormasi server dan environment [jika di-compile sebagai modul], environment PHP, informasi versi OS, path, nilai global dan nilai lokal dari opsi-opsi konfigurasi, header-header HTTP, dan lisensi PHP. Berikut ascreenshoot-nya :

 

Tutorial PHP dan MySQL juga bertebaran di mana-mana, jadi tak perlu saya lakukan di blog ini. Ke depan kita hanya berkonsentrasi pada hal-hal yang berkenaan dengan sistem operasi UNIX [baca : FreeBSD] yang tidak lebih dari perihal dua hal : file dan proses. Yakin hanya tentang dua hal ini ? Yup, tapi turunannya itu lho yang gak ketulungan banyaknya. Tentu nantinya kita perlu juga melakukan kolaborasi dengan C, C++ dan tentu saja Perl Programming yang merupakan core-nya.  PHP kita gunakan sebagai interface dengan pengguna aplikasi yang akan kita bangun, yaitu si Admin Server. Saya lebih suka menggunakan interface web base daripada X base. Jadi untuk Tk, no teng yu ! Kalau MySQL kita gunakan jika butuh tampungan terutama untuk log dan config. Pada tahap awal kita akan kolaborasikan C [baca : gcc] dengan PHP, karena kita telah melakukan cukup preparasi teknik pemrograman dengan C di sini.     

FreeBSD…just integrated in simplify. 

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, FreeBSDJanuary 3, 2008 3:58 pm

Di sini kita akan menggunakan NAT untuk keperluan sharing akses internet. Pada posting kali ini, saya sengaja tidak memberlakukan/melibatkan pengaturan firewall alias firewall terbuka. Semata-mata hanya sharing akses internet. Untuk keperluan ini kita gunakan FreeBSD sebagai NAT-nya. Pada komputer FreeBSD ini terdapat dua NIC. Satu dengan IP publik yang merupakan jalan akses ke internet, dan satunya lagi ber-IP lokal yang di-colok-an ke HUB lokal sehingga bisa diakses oleh komputer-komputer yang terhubung ke jaringan lokal agar bisa sama-sama menikmati akses internet. Katakanlah IP publiknya adalah 202.91.12.61 pada NIC fxp0 dan IP lokalnya adalah 192.68.0.1 pada NIC fxp1 di netmask 255.255.255.0

Langsung aja, langkah-langkah yang perlu dilakukan di komputer FreeBSD :

  1. Compile ulang kernel dengan opsi : options IPFIREWALL dan options IPDIVERT

  2. Tambahkan baris-baris berikut di /etc/rc.conf :

    gateway_enable="YES"
    firewall_enable="YES"
    firewall_type="OPEN"
    natd_enable="YES"
    natd_interface="fxp0"
    natd_flags=""

  3. Lalu reboot

Sedangkan yang perlu dilakukan di komputer client [dengan sistem operasi apa pun] yang ingin menumpang akses internet di komputer FreeBSD adalah men-setting gateway-nya ke 192.168.0.1 yang merupakan IP lokal komputer FreeBSD. Untuk DNS, di arahkan ke DNS ISP [Internet Service Provider] di mana kita daoatkan IP publik kita [202.91.12.61]. Bisa saja kita memfungsinya komputer FreeBSD sebagai DNS Server, tapi kalau hanya untuk sharing akses internet, langkah ini sungguh tidak perlu dilakukan, kecuali jika IP publik yang kita dapatkan adalah IP publik static yang kita gunakan sebagai web server, mail server atau yang semacamnya.

FreeBSD…nikmatnya berbagi.

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Middle, FreeBSDJanuary 2, 2008 2:37 pm

Quota merupakan fitur yang memungkinkan FreeBSD membatasi penggunaan ruang hard disk dan atau file oleh user dan atau group. Hal ini penting dilakukan terutama dalam sistem jaringan komputer yang menerapkan sharing file/direktori.

Langkah-langkahnya :

  1. Karena fitur quota bukan konfigurasi default kernel GENERIC, maka Anda perlu meng-compile ulang kernel Anda dengan opsi : options QUOTA

  2. Edit file /etc/fstab pada partisi yang akan diberlakukan sistem quota. Misalnya jika semula : /dev/ad6    /hd2  ufs  rw  1  1 ubah menjadi /dev/ad6    /hd2  ufs  rw,userquota,groupquota  1  1. Di sini sistem quota diberlakukan pada mounting / untuk user dan group.

  3. Membuat fitur quota dan check quota dijalankan ketika FreeBSD booting bisa dilakukan dengan mengedit file /etc/rc.conf dengan tambahan record : quota_enable="YES" dan check_quotas="YES" lalu reboot

  4. Begitu masuk setelah login, jalankan perintah berikut :

    # quotacheck -a lalu # quotaon -a

  5. Melakukan setting quota untuk user handaru :

    # edquota -u handaru

    maka Anda akan dihantarkan pada konfigurasi quota ke vi editor. Berikut adalah contoh setting quota untuk user handaru yang telah saya lakukan :

    Quotas for user handaru:
    /hd2: kbytes in use: 54, limits (soft = 50, hard = 75)
            inodes in use: 26, limits (soft = 50, hard = 60)

    dimana :

    pembatasan ruang hard disk bisa kita lakukan pada baris kedua :  /hd2: kbytes in use: 54, limits (soft = 50, hard = 75) dalam satuan kilobytes adapun limit soft mengandung pengertian bahwa sistem masih bisa menampung data melebihi soft limit ini asal tidak melebihi hard limit-nya hingga periode grace-nya. Defaultnya adalah 1 minggu. Jika over soft limit telah berlangsung seminggu, sistem akan secara otomatis menjadikan soft limit ini menjadi hard limit sehingga tidak akan ada toleransi lagi. Jika user menurunkan pemakaian disknya di bawah soft limit, maka periode grace-nya akan di-reset kembali. Pada contoh di atas, Anda bisa melihat bahwa sistem masih bisa mentolerir peggunaan disk space oleh user handaru (54 kb) yang melewati soft limitnya (50 kb). Sementara itu untuk hard limit, sistem tidak akan memberi kelonggaran over quota. Adapun pada baris ke tiga : inodes in use: 26, limits (soft = 50, hard = 60) kita bisa menentukan jumlah file maksimum yang bisa digunakan oleh user handaru ini. Di sini juga bisa diberlakukan soft maupun hard limit.

  6. Untuk memastikan sistem quota telah berjalan dengan baik, lakukan perintah berikut :

    $ quota -v
    Disk quotas for user handaru (uid 1001):
         Filesystem   usage   quota   limit   grace   files   quota   limit   grace
                /hd2      54*      50      75    7days    26      50      60

    tanda * pada 54* menandakan bahwa penggunaan disk telah melampau soft limitnya.

FreeBSD…mantap man !

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, FreeBSDJanuary 1, 2008 12:35 pm
  1. Secara fisik hard disk [IDE termasuk SATA] yang akan ditambahkan sudah terpasang dengan benar di komputer FreeBSD yang diinginkan yang sebelumnya hanya menggunakan satu hard disk IDE [ad0].

  2. # edit /var/run/dmesg.boot Langkah ini untuk melihat apakah hard disk baru yang ditambahkan bisa dikenali oleh sistem FreeBSD kita. Pada langkah-langkah selanjutnya, di sini diasumsikan bahwa hard disk baru dikenali sebagai ad1

  3. # dd if=/dev/zero of=/dev/rad1 bs=1k count=1 Langkah ini men-clear-kan hard disk baru

  4. # fdisk  -BI ad1  Langkah ini untuk menginisialisasi hard disk baru yang ditambahkan

  5. # bsdlabel -B -w -r ad1s1 auto lalu # bsdlabel -e ad1s1 Langkah ini untuk melabeli

  6. # mkdir -p /hd2 Langkah ini membuat direktori /hd2 untuk menampung mounting dari  partisi hard disk baru nantinya

  7. # newfs /dev/ad1s1e Langkah ini memformat partisi baru

  8. # mount -t ufs /dev/ad1s1e /hd2 Langkah ini untuk melakukan mounting partisi /dev/ad1s1e yang telah dibuat pada point 7 ke direktori /hd2 yang dibuat pada point 6

  9. # edit /etc/fstab Tambahkan baris berikut :

    /dev/ad1s1e    /hd2   ufs     rw     1    1

    agar pada booting berikutnya FreeBSD Anda bisa mengenali penambahan hard disk baru ini dan kita tinggal menggunakannya di /hd2

  10. Untuk hard disk tipe SCSI ganti ad dengan da

FreeBSD…masihkah perlu diragukan ?

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa