My Little Daemon™

Simple, FreeBSD, SelinganMay 4, 2008 12:28 pm

Sebagai Administrator suatu network, terkadang kita membutuhkan tool untuk mengetahui host-host mana saja yang UP atau terkoneksi ke jaringan. Namun jika Anda menggunaan *NIX dengan bash shell, ketikkan saja script di bawah ini lalu enter :

for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done

Contohnya :

handaru@internal19:~$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [ $? -eq 0 ] && echo "192.168.1.$ip UP" || : ; done

192.168.1.3 UP
192.168.1.5 UP
192.168.1.8 UP
192.168.1.10 UP
192.168.1.16 UP
192.168.1.25 UP
192.168.1.28 UP
192.168.1.33 UP
192.168.1.34 UP
192.168.1.35 UP
192.168.1.37 UP
192.168.1.39 UP
192.168.1.43 UP
192.168.1.44 UP
192.168.1.45 UP
192.168.1.74 UP
192.168.1.100 UP
192.168.1.101 UP
192.168.1.150 UP

Sumber http://www.cyberciti.biz

FreeBSD…mudah, itu saja. 

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa
Simple, C Programming, FreeBSDJanuary 22, 2008 10:15 pm

Fungsi execl() bisa digunakan untuk menjalankan dan menghentikan sebuah proses. Fungsi ini berada dalam pustaka unistd.h. Bentuk umum fungsi ini adalah :

execl(char *path, char *arg0,…,char *argn, 0);

Dimana :

  • path adalah path dari sistem UNIX [baca FreeBSD] dari perintah yang akan diberikan.
  • arg0 adalah string yang mengacu pada path
  • arg1 sampai argn adalah argumen perintahnya
  • 0 adalah NULL terminator yang merupakan argumen yang bertugas memberitahukan kepada sistem C Programming bahwa tak ada lagi argumen yang di-list
  • Penggunaan * pada path dan argumen menandakan bahwa string yang diinputkan pada fungsi ini ditampung dalam pointer
  • Low level fungsi ini pernah kita bahas DI SINI

Berikut adalah contoh aplikasi fungsi execl() untuk menampilkan semua isi direktori aktif dalam format panjang :

$edit test_execl.c

#include <stdio.h>
#include <unistd.h>

main()
{ printf("Files in Directory are:\n");
                 execl("/bin/ls","ls", "-la",0);
}

Pada contoh di atas : /bin/ls adalah path, ls adalah arg0 dan 0 adalah Null terminator.

$ gcc -o test_execl test_execl.c
$ ./test_execl
Files in Directory are:
total 92
drwxr-xr-x  4 handaru  1001   1024 Jan 22 22:22 .
drwxr-xr-x  5 root     wheel   512 Dec 26 13:34 ..
-rw——-  1 handaru  1001      0 Nov 12 13:49 .Xauthority
-rw-r–r–  1 handaru  1001    767 Aug 29 13:42 .cshrc
-rw-r–r–  1 handaru  1001    248 Aug 29 13:42 .login
-rw-r–r–  1 handaru  1001    158 Aug 29 13:42 .login_conf
-rw——-  1 handaru  1001    373 Aug 29 13:42 .mail_aliases
-rw-r–r–  1 handaru  1001    331 Aug 29 13:42 .mailrc
drwxr-xr-x  2 handaru  1001    512 Dec 20 15:45 .mc
drwxr-xr-x  2 handaru  1001    512 Dec 27 13:00 .pgp
-rw-r–r–  1 handaru  1001    797 Aug 29 13:42 .profile
-rw——-  1 handaru  1001    276 Aug 29 13:42 .rhosts
-rw-r–r–  1 handaru  1001    975 Aug 29 13:42 .shrc
-rw-r–r–  1 handaru  1001     14 Jan  6 22:34 coba
-rwxr-xr-x  1 root     1001   4917 Jan  9 21:32 cobaread
-rw-r–r–  1 root     1001    343 Jan  9 21:32 cobaread.c
-rwxr-xr-x  1 handaru  1001   4734 Aug 29 14:49 hello
-rw-r–r–  1 handaru  1001     58 Aug 29 14:49 hello.c
-rw-r–r–  1 root     1001    154 Dec 19 15:21 killerror.txt
-rw-r–r–  1 root     1001    154 Dec 19 15:27 killerror2.txt
-rw-r–r–  1 root     1001    166 Dec 20 12:43 psaxgrepsendmail.txt
-rw-r–r–  1 root     1001    166 Dec 20 12:28 psaxgrepsenmail.txt
-rw-r–r–  1 root     1001   2991 Dec 20 12:27 psaxoutput.txt
-rw-r–r–  1 root     1001      5 Dec 18 15:42 psin.txt
-rw-r–r–  1 root     1001   2974 Dec 18 15:44 psoutput.txt
-rw-r–r–  1 root     1001     70 Dec 18 15:13 psoutput1.txt
-rw-r–r–  1 root     1001   2974 Dec 20 12:24 pssort.txt
-rwxr-xr-x  1 root     1001   4890 Jan 20 22:39 sistem
-rw-r–r–  1 root     1001    159 Jan 20 22:30 sistem.c
-rwxr-xr-x  1 root     1001   4915 Jan 20 23:00 sistem2
-rw-r–r–  1 root     1001    180 Jan 20 23:00 sistem2.c
-rw-r–r–  1 handaru  1001     40 Jan 16 09:04 so.txt
-rwxr-xr-x  1 handaru  1001   4865 Jan 22 22:22 test_execl
-rw-r–r–  1 handaru  1001    123 Jan 22 22:21 test_execl.c
$

FreeBSD…jelas, jelas dan jelas.

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, C Programming, FreeBSDJanuary 20, 2008 11:00 pm

Berikut adalah contoh sebuah proses yang menjalankan proses yang lain :

komkecil#edit sistem.c

#include <stdlib.h>
#include <stdio.h>

int main()
{
  printf("Jalankan perintah ps dengan system\n");
  system("ps -ax");
  printf("Selesai.\n");
exit(0);
}

komkecil# gcc -o sistem sistem.c
komkecil# ./sistem
Jalankan perintah ps dengan system
  PID  TT  STAT      TIME COMMAND
    0  ??  WLs    0:00.00 [swapper]
    1  ??  ILs    0:00.02 /sbin/init –
    2  ??  DL     0:00.05 [g_event]
    3  ??  DL     0:00.11 [g_up]
  . . . 
  553  p0  Is     0:00.02 -sh (sh)
  555  p0  I      0:00.02 su
  556  p0  S      0:00.09 _su (csh)
  606  p0  S+     0:00.00 ./sistem
  607  p0  S+     0:00.01 sh -c ps -ax
  608  p0  R+     0:00.00 ps -ax
Selesai.
komkecil#

Pada contoh program di atas, dia membuat satu proses ./sistem yang kita buat dengan bahasa C [PID 606] yang meminta shell [PID 607] yang kemudian shel tersebut meminta sistem FreeBSD menampilkan proses ps -ax [PID 608].

Dalam hal ini program sistem kita memanfaatkan fungsi pustaka system. Karena perintah ps -ax bukanlah sebuah backgroud process, maka progam sistem kita menunggu hingga ps -ax menampilkan otputnya ke layar, baru progam sietem menyatakan Selesai. Sebelum sistem menjalankan perintah ps -ax hingga selesai, program sistem tidak bisa menerima tugas [task] yang lain.

Ceritanya akan lain jika proses yang diminta adalah sebuah backgroud process. Baiklah, ubah sedikit file sistem.c menjadi sistem2.c seperti berikut :

komkecil#edit sistem2.c 

#include <stdlib.h>
#include <stdio.h>

int main()
{
  printf("Jalankan perintah ps dengan system\n");
  system("ps -ax &");
  system("pwd &");
  printf("Selesai.\n");
exit(0);
}

komkecil# gcc -o sistem2 sistem2.c
komkecil# ./sistem2
Jalankan perintah ps dengan system
Selesai.
/usr/home/handaru
komkecil#   PID  TT  STAT      TIME COMMAND
    0  ??  WLs    0:00.00 [swapper]
    1  ??  SLs    0:00.02 /sbin/init –
    2  ??  DL     0:00.11 [g_event]
    3  ??  DL     0:00.16 [g_up]
  . . .  
  553  p0  Is     0:00.02 -sh (sh)
  555  p0  I      0:00.02 su
  556  p0  S+     0:00.12 _su (csh)
  684  p0  R      0:00.00 ps -ax
  686  p0  R      0:00.00 sh -c pwd &

komkecil#

Sekarang bisa Anda lihat bahwa program kita [sistem2] meminta sistem FreeBSD menjalankan perintah ps -ax namun sebagai backgroud process [ps -ax &] sehingga program sistem2 kita tidak perlu menunggu program ps -ax & menyelesaikan penampilannya ke layar, sistem2 sudah bisa menampilkan perintah pwd &. Bahkan sistem2 bisa menganggap tugasnya telah selesai [Selesai.] ketika hasil perintah ps -ax & dan pwd & belum tertampil di layar :

komkecil# ./sistem2
Jalankan perintah ps dengan system
Selesai.
/usr/home/handaru
komkecil#   PID  TT  STAT      TIME COMMAND
    0  ??  WLs    0:00.00 [swapper]
    1  ??  SLs    0:00.02 /sbin/init –
. . . 

FreeBSD…asal-usulnya jelas.

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, FreeBSD, SelinganJanuary 18, 2008 8:14 am

Pada posting terdahulu, saya lupa menjelaskan bagaimana cara setting default gateway dan DNS jika menggunakan FreeBSD sebagai client Telkom Speedy Unlimited. Berikut dua langkah mudahnya :

  1. # edit /etc/rc.conf lalu tambahkan baris : defaultrouter="192.168.1.1" lalu reboot.
  2. # edit /etc/resolv.conf lalu buat menjadi seperti ini :

    search telkom.net.id
    nameserver 202.134.1.10
    nameserver 202.134.0.15

FreeBSD…kalau bisa mudah, mengapa dibuat susah ?

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, FreeBSD, SelinganJanuary 17, 2008 6:52 pm
Ketika login ke sistem FreeBSD, adakalanya kita perlu berganti user untuk melakukan suatu aktivitas yang membutuhkan hak akses lebih tinggi atau sebaliknya, menurunkan hak akses user login karena sudah tidak membutuhkan suatu hak akses tertentu. Untuk hal ini kita bisa menggunakan perintah su [switch user]. Yang perlu diingat ketika berpindah user, hak akses berikutnya yang terbawa adalah user akhir, namun direktori kerja/aktif tetap berada pada direktori kerja user sebelum switch. Tentu saja pastikan dulu paket sudo sudah terinstall di sistem FreeBSD kita.
 
$ pwd
/usr/home/handaru
$ su sakti
otp-md5 496 ko0807 ext
Password:
$ pwd
/usr/home/handaru
 
Untuk keluar dari user login terakhir, kembali ke user login semula, bisa digunakan perintah exit.
 
Dan…jika kita bermaksud naik ke level hak akses root [super user], kita bisa memasukkan user login kita ke group wheel :
 
# edit /etc/group
 
Record teratas berikut yang perlu di-edit :
 
wheel:*:0:root,handaru 
 
Baiklah, untuk memakainya kita bisa bisa dengan perintah su saja atau su root :
 
$ su root
Password:
komkecil# exit
exit
$ su
Password:
komkecil# pwd
/usr/home/handaru
 
Keberadaan su root [super user] ini sangat bermanfaat terutama jika kita me-remote server FreeBSD kita via SSH yang konfigurasi defaultnya di /etc/ssh/sshd_config adalah #PermitRootLogin no. Kita bisa login dengan user standar, lalu su aja, maka hak akses root berada dalam di ujung jari.
 
FreeBSD…tentu saja fleksibel.
 
Dedicated for Light Intermutimedia
Perusahaan Software Pulsa
 
Simple, FreeBSD, PHPJanuary 11, 2008 11:08 am

Baiklah, sekarang kita akan membuat eksekusi shell_exec di PHP lebih interaktif. Misalnya kita gunakan form HTML berikut untuk memasukkan parameter command shell-nya :

my_form_shell.html

<form action="my_first_shell.php" method="POST">
Parameter perintah :
<input type="text" name="x">
<input type="submit" value="send">
</form>

Untuk dikirimkan ke file my_first_shell.php yang sedikit kita modifikasi :

my_first_shell.php

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

Hasilnya akan sama dengan yang di sini.

Catatan :

  1. Jangan lupa mengaktifkan register_globals PHP dengan mengedit file /usr/local/etc/php.ini dengan opsi register_globals = On
  2. Pada argumen untuk shell_exec gunakan petik ganda (") jangan petik tunggal ()

FreeBSD…mengatasi masalah tanpa masalah.

Dedicated for Light Intermutimedia
Perusahaan Software Pulsa

Simple, FreeBSD, PHPJanuary 9, 2008 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

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