Archive for category Linux

Apabila sudo echo “blah” > /root/blah memberi error permission denied

Kadangkala semasa membuat bash script, kita perlu mengisi sesuatu file dengan perkataan atau ayat. Oleh kerana file itu hanya boleh ditulis oleh superuser, kita pun menjalankan arahan berikut:

sudo echo “blah” > /root/blah

Tetapi kita akan menerima error permission denied bila menjalankan arahan diatas. Kenapa ek?

Jawapannya mudah … sudo hanya boleh digunakan oleh arahan yang pertama sahaja e.g. echo, ianya tidak dibawa oleh redirection untuk menulis kedalam file. Untuk mengatasi masalah diatas kita boleh guna arahan tee seperti berikut:

echo “blah” | sudo tee -a /root/blah

-a bermaksud append ke dalam file dan bukan overwrite data di dalam file.

No Comments

Instalasi Apache dan PHP 4 atas Ubuntu

Pada posting kali ini kita akan lihat bagaimanakah cara untuk menginstal Apache dan PHP 4 di atas Ubuntu Linux. Versi yang digunakan ialah Ubuntu 7.10 tetapi langkah-langkah ini juga boleh digunakan keatas versi Ubuntu yang lain.

Kenapa PHP4? Tidak PHP5?

Bagus soalan tu. Walau pun PHP4 sudah tidak disupport lagi. Tetapi kadangkala masih ada legacy sistem yang cuma boleh beroperasi dengan menggunakan PHP4. Untuk mengubah kod punca (source code) sistem ini mungkin mengambil masa yang lama, jadi nak tak nak, kita guna je lah PHP4, boleh? Contoh salah satu sistem yang cuma boleh run di atas PHP4 adalam sistem i-Learn.

Ok, cukup dengan bebelan, macam mana nak instal ?

Sebelum instal, adalah digalakkan untuk kita mengupdate repository apt dan mengupgrade perisian-perisian yang telah ada didalam Ubuntu. Larikan arahan berikut pada terminal.

sudo apt-get update

sudo apt-get upgrade

Selesai update dan upgrade, kita instal apache dengan melarikan arahan berikut:

sudo apt-get install apache2 libapache2-mod-rpaf libapache2-mod-auth-mysql apache2-threaded-dev

Sedikit penjelasan tentang arahan diatas. Ianya akan menginstal 4 package.

  1. apache2
  2. libapache2-mod-rpaf : Ini adalah modul yang diperlukan untuk menerima IP sebenar daripada nginx ( hanya instal jika anda menggunakan nginx sebagai load balancer)
  3. libapache2-mod-auth-mysql : Modul yang diperlukan oleh apache untuk berkomunikasi dengan MySQL ( juga hanya install jika apache ada perlu membuat connection dengan MySQL Server)
  4. apache2-threaded-dev : Package ini diperlukan untuk kompilasi PHP4

Untuk pastikan samaada Apache telah diinstal, jalankan arahan berikut:

netstat -an | grep :80

Jika tiada masalah, anda sepatutnya mendapat paparan seperti dibawah.

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN

Atau pun, cara yang lebih mudah untuk pastikan Apache telah diinstal adalah dengan membuka pelayan web e.g. Internet Explorer dan layari IP address komputer anda. e.g. http://127.0.0.1 untuk localhost. Jika anda mendapat paparan “index of / page”, itu bermakna Apache telah diinstal dengan jayanya. Yeahoo … !

Jom kompil PHP4!

Selepas instalasi Apache berjaya, barulah kita boleh mula menginstal PHP. Ada beberapa package yang perlu diinstall, tak perlu tanya banyak, jalankan saja arahan dibawah ini.

sudo apt-get install gcc

sudo apt-get install make

sudo apt-get install bison

sudo apt-get install flex

Selepas selesai proses diatas, muat turun versi terbaru PHP4 iaitu versi 4.4.9. Guna la apa2 tools yang korang suka, aku downoad guna wget.

wget http://my.php.net/distributions/php-4.4.9.tar.gz

Untar kan fail yang baru di muat turun dan masuk ke dalam direktori php hasil dari tar.

tar -zxf php-4.4.9.tar.gz

cd php-4.4.9/

Sebelum kompil kita perlu run skrip configure dahulu. Jika tiada masalah, teruskan dengan arahan make dan make install.

./configure –with-apxs2=/usr/bin/apxs2 –with-mysql –with-zlib –enable-fastcgi

make

sudo make install

Arahan terakhir diatas akan berhenti disebabkan satu error berkaitan dengan LoadModule seperti dibawah:

notice: problem with “At least one ‘LoadModule’ directive already has to exist

Cara untuk membuang error ni sangat mudah, edit fail /etc/apache2/httpd.conf:

sudo nano /etc/apache2/httpd.conf

dan tambahkan maklumat berikut:

#LoadModule foo_module /usr/lib/apache2/modules/foo.so

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Jalankan semula arahan make install. Kita sepatutnya berjaya menghabiskan arahan make install tanpa masalah.

sudo make install

Untuk periksa samada PHP telah diinstal dengan betul, edit fail php.ini. Tambahkan path /usr/local/lib/php kepada directive include_path.

Kemudian masuk kedalam folder DocumentRoot (selalunya /var/www) dan buat satu fail bernama info.php.

cd /var/www

sudo nano info.php

Didalam fail tersebut, taipkan kod berikut:

<?php

phpinfo();

?>

Bunuh dan hidupkan semula Apache dengan menjalankan arahan dibawah.

/etc/init.d/apache2 stop

/etc/init.d/apache2 start

Akhir sekali, buka URL http://127.0.0.1/info.php menggunakan pelayar web. Jika anda mendapat laman muka yang mengandungi informasi tetang PHP, tahniah! Kerana anda telah berjaya menginstal Apache dan PHP4.

No Comments

Masalah NFS selepas update terbaru pada Ubuntu Hardy Heron

Seperti biasa setiap hari aku akan run command:

sudo apt-get update
sudo apt-get upgrade

untuk memastikan perisian-perisian didalam server berada dalam keadaan terkini. Tetapi last few weeks aku ada masalah dengan NFS kerana gagal untuk mount folder pada NFS server. Ini adalah masalah yang sangat besar (sebesar masalah parking di parking bertingkat menara ) kerana kebanyakan data-data pelajar adalah disimpan pada NFS server. Berikut adalah error yang dikeluarkan apabila percubaan mount dilakukan.

$ sudo mount -a
mount.nfs: internal error

Setelah mengoogle sana-sini rupanya bukan aku seorang sahaja yang berhadapan dengan masalah yang serupa, sila baca penyelesaian tentang masalah NFS Hardy dan masalah dalaman NFS Client Hardy Heron untuk mengetahu lebih lanjut tentang masalah ini.

Jalan penyelesaiannya, sila ikut langkah-langkah ini:

1. Dapatkan patch di http://launchpadlibrarian.net/14961727/nfs-common_1.1.2-2ubuntu2.1_amd64.deb. Cara mudah adalah menggunakan wget. By the way package diatas adalah untuk sistem AMD64, sila dapatkan package bagi version i386 jika korang guna sistem i386.

wget http://launchpadlibrarian.net/14961727/nfs-common_1.1.2-2ubuntu2.1_amd64.deb

2. Kemudian jalankan perintah berikut:

sudo dpkg -i nfs-common_1.1.2-2ubuntu2.1_amd64.deb

Jika proses diatas berhenti kerana error tentang ketiadaan package portmap dan rpcbind, sila install portmap dengan arahan: sudo apt-get install portmap. Run semula command diatas.

3. Kemudian cuba run semula perintah mount

mount -a

Korang sepatutnya sudah boleh mount dengan jayanya, hurray …

BTW, as of now, 30th August 2008, mungkin korang boleh cuba remove package nfs-common dan reinstall kembali package tersebut, that might also works. May be …

No Comments

Langkah-langkah untuk display foreign character pada Apache

Kejap2 aku nak tanya dulu, foreign character tu apa?

Huhuhu sungguh gelojoh dirimu ini wahai sahabat, tapi takpe, oleh kerana ko dahagakan ilmu aku bagi jawapannya. Katakan kita ada satu website, selalunya website kita akan display character-character roman macam a b c dan adik2nya. Tapi, what if website kita ni perlu pulak display character-character lain macam character jepun ke, cina ke or bahasa Jawi? Itu la namanya foreign character dan kita perlu buat sesuatu sebelum web server kita boleh display aksara-aksara tersebut, contohnya ayat2 ini:

我叫莫哈末阿里,你呢?

اڤ كابر سموا

lǎo shī

Tak guna hurup roman kan? Dan ko pun tak boleh baca ….hahaha … tapi ada orang boleh baca ok? So kita perlu enable kan support ini pada webserver kita.

Kenapa ko ni baik sangat? Kalau aku, aku tak peduli …

Peduli atau tidak … pengguna sistem aku ada yang perlukan ciri ini. Jadi di bawah ini aku sertakan langkah-langkah untuk enablekan foreign character pada pelayan web.

Langkah 1: Setting pada Apache

Edit /etc/apache2/apache2.conf dan tambahkan ayat dibawah dihujung file.

AddDefaultCharset UTF-8

sudo echo “AddDefaultCharset UTF-8” >> /etc/apache2/apache2.conf

Langkah 2: Restart Apache

sudo /etc/init.d/apache2 restart

Langkah 1 dan 2 cuma bagitahu pada apache untuk display semua huruf menggunakan encoding UTF-8. Ini adalah memadai jika korang semua tidak menyimpan data/content di dalam database. Kalau ada database macam MySQL, sila sambung ke langkah seterusnya.

Bila kita menyimpan data di dalam database, kita perlu putuskan data ini disimpan mengunakan encoding apa. Ada banyak jenis encoding, tapi kalau korang nak display foreign character, MySQL perlu simpan data menggunakan encoding UTF-8. Jadi macam mana nak set? Folooo ….

Langkah 3: Setting pada MySQL

Edit file /etc/mysql/my.cnf dan insertkan ayat berikut pada section [client]

default-character-set = utf8

aku letak aku punya betul2 selepas option socket = /var/run/….

Langkah 4: Masih lagi setting pada MySQL

Edit file yang sama (/etc/mysql/my.cnf) dan insertkan ayat yang berikut pula pada section [mysqld]

default-character-set = utf8
default-collation = utf8_general_ci

Langkah 5: Restart MySQL

sudo /etc/init.d/mysql restart

Jadi selepas langkah2 diatas pelayan web korang semua sepatutnya sudah boleh display foreign character, clap! clap! clap!

Hm … macam mana nak test?

Nak test ek, kalau ko ada mekanisma untuk input kan foreign character, ko cuba je lah taip foreign character dan tengok samaada ianya didisplay atau tidak. Aku just visit website cina and arab (macam aljazeera) copy je perkataan arab kat situ, and then paste dekat aplikasi aku. Then aku submit masuk dalam database and try read balik tgk boleh display ke tidak. Kalau boleh bagitahu kawan, kalau tak boleh ko bagitahu aku, kita cuba solve sama2 …. huhuhu …

Takde disclaimer, kira safe la eh langkah-langkah ni?

Safe la sangat, macam biasa aku tak bertanggungjawab atas korupsi data yang mungkin terjadi keatas data dalam database korang semasa mengikuti langkah-langkah diatas. Aku dah cuba buat, so far tak de problem, jadi untuk keselamatan makhluk sejagat, sila backup database anda sebelum mengikuti langkah diatas, terima kasih.

No Comments

Masalah single-sign on(SSO) google apps selepas upgrade ke Ubuntu Hardy

Pada Januari tahun 2008, i-Learn telah mula menyediakan khidmat emel kepada pelajar. Khidmat ini berjalan lancar walaupun ada beberapa kekangan yang terpaksa dihadapi. Tetapi pada bulan 7, kami terpaksa memindahkan sistem i-Learn ke server yang baru kerana server lama sudah tidak mampu lagi menampung peningkatan storan.

Jadi kebetulan pada ketika itu Ubuntu 8.08 juga telah keluar, aku pun tanpa berpikir panjang telah menginstal server yang baru dengan Ubuntu Server 8.08. Secara overall memang tidak ada masalah dengan versi terbaru Ubuntu ini, apache2 dan mysql5 boleh diinstal dengan mudah dengan menggunakan command sudo apt-get install <apache2/mysql5>. As always …

Masalahnya PHP4 is no logger supported by Hardy, in fact versi terakhir yang support PHP4 adalah edgy. Jadi aku ada dua pilihan, downgradekan balik OS ni ke edgy atau pun aku boleh compile PHP4 secara manual, dan aku telah memilih untuk manually compile PHP4.

PHP4 compile so easily on Hardy and i-Learn seems to run smoothly after the server move. Masalahnya ialah coding untuk single-sign on ke Google berhenti berfungsi after the move. Selepas few hours troubleshooting the problem, aku discover yang masalahya terletak pada coding ini di file sam_util.php

function samlEncodeMessage($msg) {
$encmsg = gzdeflate($msg);
$encmsg = base64_encode($encmsg);
$encmsg = urlencode($encmsg);
return $encmsg;
}

Function diatas akan deflatekan message sebelum disend ke google dan masalahnya ialah, PHP perlu dicompile dengan option –with-zlib kalau tidak function gzdeflate() ini tidak available kepada PHP. Jadi selepas recompile code single-sign on anda berfungsi seperti biasa. InshaALLah.

No Comments

Cannot create directory ‘blah’: Too many links

Sabtu lepas aku ada training dekat UiTM Dungun Terengganu, training hands on sistem i-Learn. Mula-mula semuanya berjalan lancar tanpa masalah tapi bila masuk bahagian Course Content ada satu masalah yang memeningkan kepala.

Masalahnya ialah, bila pensyarah nak download nota, dia kata Could not download the file. Yang memeningkan kepala lagi adalah, cuma sesetengah pensyarah sahaja yang mengalami masalah ini. Ada yang ok, ada yang tidak ….. huhuhuhu memang serabut.

Pada awalnya aku syak yang folder download pensyarah ini terlupa dicreate. So aku pun terjah masuk ke dalam server dan check, memang betul pun, folder download dia tak wujud. Aku cuba create folder dengan command mkdir tapi aku dapat error ni:

% sudo mkdir blah
Cannot create directory ‘blah’: Too many links

First time aku tengok error macam ni, bingong kejap jadinya. Google sana google sini baru aku paham. Rupa-rupanya ada limitation pada number of subdirectories yang boleh dicreate dalam sesuatu directory. Untuk filesystem ext3, didalam sesuatu directory cuma boleh ada maximum 32000 subdirectories.

Nombor ni memang telah diukir dan dipahat dalam source code jadi kalau nak ubah boleh, cuma perlu recompile kernel. Since aku rasa ada reason yang berkaitan dengan performance mengapa developer2 filesystem ini set kan maximum, aku mengambil jalan untuk tidak recompile kernel.

Aku set kan je kat cron untuk empty kan subdirectories dalam directory tu bila sampai masanya. Lebih mudah dan turns out that aku save 20% storage …. nice

Rujukan:
http://en.wikipedia.org/wiki/Ext3#cite_note-0

No Comments

Macam mana nak halang user dari execute file .php

Aku ada satu masalah, dalam i-Learn ni ada satu fungsi yang diberi nama myDrawer. MyDrawer ni fungsinya adalah untuk allow user upload apa2 file yang diorang suka ke dalam server. Ini lebih kurang macam daya tarikan untuk user berminat menggunakan i-Learn.

Masalahnya ialah, aku dapat tahu ada student yang upload file .php dalam tu and cuba execute unwanted code dalam server, haxor la kiranya2 ni. Aku tak kisah sangat sebab dalam i-learn ni pun bukan ada data confidential tapi cuma risau, kalau student2 ni bawak cerita dan sampai ke pengetahuan lecturer, maka akan hilanglah kepercayaan lecturer kepada i-learn.

Jalan penyelesaiannya, disablekan php execution pada directory yang allow student untuk upload file. Tapi macam mana …

Ini langkah2 untuk Ubuntu dan PHP4

1. buka file /etc/apache2/apache2.conf

2. pergi kat ujung file atau mana2 korang suka.

3. letakkan entry ni

<Directory “/var/www/html/upload/users”>

php_flag engine off

</Directory>

*of course replace directory path dengan korang punya

4. save dan restart apache

sudo /etc/init.d/apache2 restart

Sekarang cuba test upload file php ke dalam directory di atas, instead of executing the php file, anda akan terima satu pop up bertanya sama ada anda ingin open atau save file php tersebut. This should prevent any unwanted php execution on the server.

No Comments