Saya menemukan masih ada beberapa kantor yang menjalankan aplikasi yang ditulis dengan FoxPro. Seperti yang saya alami di kantor saya, kami bahkan masih men-develop beberapa project baru dengan FoxPro, sambil menunggu project migrasi ke Java selesai.
Saat perusahaan kami memutuskan untuk beralih ke Linux, kami pun ditantang untuk dapat menjalankan FoxPro di Linux. Hal yang cukup mudah dilakukan karena adanya Dosemu. Solusi yang dulu kami gunakan yaitu:
1. Data disimpan di satu komputer Linux yang dipasang Samba Server.
2. Pada client diinstall:
a. Dosemu.
b. Samba Client.
3. Di Dosemu di-install FoxPro.
4. Client me-mount data dari server dengan samba:
mount -t smbfs -o rw,username=blabla,password=blabla,uid=1000,gid=1000 //dbfserver/datadir /mnt/datadbf
5. Di autoexec.bat (/home/user/.dosemu/drive_c/autoexec.bat) di line paling akhir, ditambahkan:
lredir d: linux\fs/mnt/datadbf
Sehingga data di server kita akses di dosemu dan foxpro sebagai drive D:
Dengan 1-2 user, konfigurasi ini berjalan dengan mulus. Sampai pada suatu saat terjadi masalah, yaitu index file tidak terupdate dengan benar saat menambahkan record baru. Selain itu muncul juga masalah lain, yaitu update yang dilakukan di satu komputer, tidak terlihat di komputer lain. Hal ini mengindikasikan bahwa 1 file DBF tidak dapat dibuka, apalagi di-update oleh 2 client secara bersamaan. Sehingga, kami terpaksa bekerja secara bergantian.
FIX-1 : veto oplock
Protokol file-sharing di Window$ menggunakan mekanisme locking terhadap file yang sebetulnya lebih mengarah ke ‘caching’, dan Samba mencoba mengikuti standar ini. Artinya secara default, Samba melakukkan caching terhadap file. Ini bukanlah hal yang kita inginkan, sebab dapat mengacaukan program FoxPro.
Jadi, perbaikannya adalah dengan men-disable fitur ini untuk file-file database dan index FoxPro. Tambahkan settingan global ini di /etc/samba/smb.conf :
veto oplock files = /*.dbf/*.DBF/*.idx/*.IDX/*.cdx/*.CDX/*.fpt/*.FPT/
Dengan setting tersebut, sistem pun pulih, untuk sementara. Kemudian terjadi lagi masalah di mana terkadang update oleh satu User tertimpa oleh update User lain. Hal ini dapat disebut sebagai racing condition, yang kembali mengancam integritas data.
FIX-2 : locking dengan flock()
Setelah membaca dokumentasi di FoxPro, saya menemukan bahwa seharusnya program yang dijalankan secara multi-user menggunakan mekanisme locking agar integritas database dapat terjaga. Penggunaan “set exclusive” saja ternyata tidak cukup, maka program pun dirubah dengan menambahkan locking kapanpun akses kritis terhadap database diperlukan.
Anehnya, ternyata locking tidak bekerja, apabila satu user sedang me-lock suatu file, user lain masih dapat me-locknya juga. Jangankan locking dengan flock(), ternyata “set exclusive’ pun tidak bekerja.
FIX-3 : CIFS
Setelah riset dengan mencari sumber di Internet, saya menemukan bahwa SMBFS sudah mulai ditinggalkan karena beberapa bug, dan disebutkan juga bahwa file-locking tidak bekerja di SMBFS. Disarankan untuk beralih ke CIFS, saya pun kemudian melakukan test dengan CIFS ini. Hasilnya, ternyata benar file locking dapat bekerja dengan sempurna.
Command untuk mounting berubah menjadi:
mount -t cifs -o rw,user=blabla,password=blabla,uid=1000,gid=1000,noperms //dbfserver/datadir /mnt/datadbf
Program pun dijalankan lagi dan untuk beberapa waktu dapat berjalan dengan baik. Tampaknya permasalahan belumlah selesai, beberapa kali terjadi kehilangan data. Data yang sudah di-update oleh user, ternyata tidak tersimpan di database.
FIX-5 : nounix and directio
Ternyata meskipun locking dapat bekerja dengan baik, update oleh satu user, tidak dapat dilihat secara langsung oleh user lain. Apabila satu file DBF dibuka secara bersamaan oleh lebih dari satu user, pada saat satu user melakukan perubahan, user lain tidak dapat melihatnya secara langsung. User lain haruslah menutup file DBF tersebut dan membuka nya kembali, barulah update dapat terlihat.
Cara ini tentu tidak nyaman dan menurunkan produktifitas user. Apalagi kami mengalami lonjakan jumlah pengguna program FoxPro ini, dari semula hanya 2 user, hingga saat ini ada hampir 20 user.
Setelah searching di internet, akhirnya saya menemukan kunci dari permasalahan ini, yaitu dengan menambahkan option pada command untuk mounting data.
mount -t cifs -o rw,user=blabla,password=blabla,uid=1000,gid=1000,noperms,nounix,directio
Options nounix dan directio ternyata memecahkan masalah dengan CIFS.
Kesimpulan:
Agar sebuah program FoxPro dapat dijalankan secara multi-user dengan skema Linux+Dosemu+CIFS, ada beberapa “tuning” yang harus kita lakukan dalam sistem. Di antaranya:
1. Menambahkan option veto oplock files terhadap file-file yang berkaitan dengan FoxPro di konfigurasi server Samba.
2. Menggunakan CIFS untuk mounting direktori data, bukan SMBFS.
3. Options mounting dengan CIFS yang digunakan: noperms,nounix,directio
3. Menyesuaikan program, agar melakukan locking saat mengakses data yang akan dirubah.
Hello, I have used google translate to read you post.
I have a system coded in FOxpro running in multiuser environment in Windows NT4. All clients are windows PCs.
I want to know if it’s possible to use Foxpro DOS in Ubuntu to replace the windows machines. I’m thinking on running Foxpro DOS with Dosemu in Ubuntu 9.04, and files will be accessed with mount.cifs.
So far, all I’ve found with my Linux clients is corrupted databases and missing files.
Do you have any experience on the subject?
thank you for your post
Hi, thanks for your comment,
OK, First, It is possible to run FoxPro DOS with Dosemu in Ubuntu 9.04. There are 3 possible method on doing that:
1. Install Dosemu and FoxPro on the clients, and mount the data from Data Server with CIFS.
2. Install Dosemu and FoxPro on the Data Server, and the clients log in to Server using SSH, thus the users need to be created for each client, and run Dosemu+FoxPro on the Data Server remotely.
3. Mix of 2 methods above, Install Dosemu and FoxPro on a dedicated SSH Server, mount data from Data Server to SSH Server with CIFS, and clients log in and run Dosemu+FoxPro within SSH Server.
If you choose the first method, you have to use extra CIFS mount options: ‘noperms’, ‘nounix’, and ‘directio’. noperms allows you to override default file permissions on the remote filesystem, directio forces kernel to not to cache transactions, while for nounix I still have no idea of what it does
, but it’s commonly used by people whose system using this scheme.
Personally, I prefer the 2nd method as it allow thin client machines to be used and minimal maintenance effort. But that ‘minimal maintenance effort’ becomes so important as the whole system will be down if the Server is down. And of course for that you have to put the data on a Linux machine because you need SSH Server. It’s possible to run SSH Server in NTs but I wouldn’t recommend it.
If you don’t want to screw with your Data Server, you can choose third method. You need one extra machine installed with Linux to be used as an SSH server, then you mount data from Data Server to this SSH server and install Dosemu and FoxPro. The clients are then login to SSH Server and run the application remotely. Oh, and don’t forget to add noperms, nounix, and directio as mount options for CIFS.
Second, you have to make sure that your FoxPro codes using locking mechanism as suggested by FoxPro guide. This is to make sure that if one table is going to be modified by more than one user at a time, the modification is done safely, no unexpected result caused by ‘race-condition’.
Good Luck
hi, di perusahaan gw jg memigrasikan foxpro on linux dah lama banget dari tahun 2007. Tp dari dulu memang databasenya ditaruh pada server linux (awalnya mandrake) skrg mandriva. user client skrg menggunakan ubuntu 7.10 dan blankon 2. adapun conf sambanya \\server\dbshare /home/yo/mis cifs username=fox,password=fox,iocharset=utf8,noperm,nobrl 0 0 dan ini tidak bermasalah untuk digunakan pada ubuntu versi itu, tp skrg munculnya ubuntu 9.04 configurasi samba tidak dapat digunakan kembali karena foxpro tidak mau muncul.
Akhirnya sy lakukan menggunakan share NFS program foxpro dapat berjalan hanya saja sangat lama pada saat menampilkan menu ataupun data. Mungkin bisa share permasalahan yang sy hadapi.
Terimakasih,
RAP
Wah mas sudah bisa foxpro di jaunty, permasalahannya ada di /etc/sysctl.conf ditambahin vm.mmap_min_addr = 0 abis itu restart … and back to bussiness
thx
Hi,
Maaf comment-nya baru nongol, soalnya malah dimasukin sebagai spam sama wordpress-nya :duh:
Hmm, memang semenjak Hardy, Ubuntu harus dirubah dulu mmap_min_addr-nya supaya dosemu bisa jalan.
Thanks udah mampir
Selamat Siang,
Terimakasih atas penjelasan nya, saya menjadi tahu penyebab kenapa index program sering error apabila di operasikan dari 2 komputer.
Namun saya menggunakan server Novel untuk menyimpan program dan ketika saya mencoba dengan memasukkan parameter yang ada nampaknya belum berhasil.
Untuk koneksi saya menggunakan IPX dan NCPFS.
Terimakasih atas perhatian dan kerjasamanya.
Selamat siang,
Terimakasih sudah mengunjungi blog saya.
Kebetulan saya belum pernah bekerja dengan server Novell, jadi saya belum pernah mencoba ncpfs. Tetapi pada prinsipnya, kita harus meminimalisir proses caching yang dilakukan oleh protokol file sharing yang digunakan.
Anda bisa melakukan test dengan membuka suatu dbf di satu komputer (tentunya melalui FoxPro) dan di saat yang sama anda buka juga dbf tersebut di komputer yang lain. Setelah itu coba lock file tersebut di komputer pertama, setelah itu lock file yang sama di komputer kedua. Apabila komputer kedua menampilkan pesan menunggu lock, berarti sistem sudah bekerja dengan baik.
Sebenarnya, FoxPro memiliki fasilitas transaction management untuk digunakan dengan server Novell. Anda bisa membacanya di fasilitas Help yang tersedia di FoxPro. Mungkin anda bisa mencobanya, dan sepertinya kita harus menkonfigurasi jaringan di level Dosemu sehingga akses file langsung dilakukan antara Dosemu dengan server Novell anda.
Hi,
Terima kasih atas posting di blognya,
Saya biasanya menggunakan CLIPPER dan dBase IV, dos/windows untuk workstation dan NOVELL untuk server. Sebulan terakhir ini saya mencoba2 ubuntu ( Desktop & server edition ), dan seminggu ini saya mencoba migrasi dari microsoft ke linux(menggunakan DOSemu tentunya).
Sebelumnya saya sudah pernah mencoba menggunakan samba untuk file sharingnya tetapi kinerja programnya jadi lambat sekali (mungkin ada setting yang belum benar), tapi saya baca di internet bahwa NFS lebih unggul dalam kecepatan, jadi saya coba menggunakan NFS dan memang benar lebih cepat ketimbang menggunakan samba (settingan saya). Tetapi ada masalah yang baru saya temukan beberapa hari ini.
1. ketika saya pakai lebih dari satu DOS emulator untuk menjalankan beberapa aplikasi clipper
yang databasenya saling berkaitan, DOS emulator suka nge-hang jadi saya harus restart
workstation yang bersangkutan
2. pernah sekali saya temukan penyebab hang adalah karena index file nya rusak , jadi saya
hapus cdx filenya dan index ulang, jalan lagi
3. masalah yang terakhir ini mungkin penyebab dari masalah2 diatas, beberapa jam lalu saya
baru tahu dan coba sendiri ternyata fungsi dari file lock dan record lock di CLIPPER tidak
digubris sama sekali di dosemu. sedangkan untuk aplikasi yang menggunakan beberapa database
yang saling berkaitan dan multi workstation, fungsi locking ini sangat penting.
Jadi pertanyaan saya:
1. apa ada cara untuk mentuning NFS seperti contoh samba ada diatas supaya record lock dan
file lock bisa benar2 berfungsi di network saya
2. bagaimana caranya untuk mentune agar samba connectionnya jadi lebih cepat
terima kasih dulu sebelumnya karena telah menyediakan forum ini
Donal
Hi,
Terima kasih sudah mengunjungi blog saya. Masalah index adalah masalah tipikal dari implementasi seperti ini. Penyebabnya adalah:
1. Caching oleh Samba. Perbaiki dengan veto oplock di file konfigurasi samba.
2. Locking yang tidak bekerja. Masalah di SMBFS.
Saya sarankan anda menggunakan CIFS bukan SMBFS.
Saya coba menjawab pertanyaan anda:
) bahwa fitur locking di NFS belum mature.
1. Saya pernah juga mencoba dengan NFS dan sama seperti anda, saya juga mengalami masalah dengan file dan record locking, saya tidak meneruskan riset saya sebab saat itu saya menemukan (lewat googling
2. Menurut pengalaman saya, dengan setting yang tepat, samba malah dapat berjalan lebih cepat daripada NFS. Saya menggunakan filesystem CIFS (bukan SMBFS) dengan parameter noperms dan directio. Detailnya bisa anda baca kembali di artikel ini. Sebagai informasi, program di tempat saya ukuran file DBF-nya ada yang sudah mencapai > 100MB dan program tetap berjalan dengan lancar.
Saat ini, saya mengimplementasikan cara berbeda. Saya menggunakan SSH untuk login ke server tempat menyimpan data dan menjalankan program (Dosemu+FoxPro) di server tersebut. Dengan cara ini kita mendapatkan beberapa keuntungan:
1. Mengurangi traffic jaringan, Samba merupakan protokol yang ‘cerewet’ karena sering mengirim paket broadcast.
2. Bukan data yang di-network-kan, tetapi user interface yang di-network-kan. Ini sangat meningkatkan integritas data. Kita dapat menghindari korupsi data akibat network failures.
3. File locking dan record locking bekerja dengan sempurna karena file diakses secara lokal.
Kebetulan sekali saya juga akan migrasikan aplikasi dari FoxPro ke Clipper dengan compiler Harbour. Kalau anda berkenan saya ingin menanyakan beberapa hal mengenai Clipper.
Salam,
Anezch
Thanks atas balasannya,
Tentu saja saya berkenan bertukar pendapat mengenai Clipper. Tetapi Clipper yang biasa saya gunakan adalah yang dalam environment DOS.
kemarin juga saya sempat googling, dan menemukan ada artikel yang menyebutkan bahwa dosemu 1.4 dan cifs 1.5 the perfect combination, jadi saya mau coba untuk menginstall feature cifs 1.5, tapi waktu saya ketik mount.cifs -V dari terminal ubuntu, yang muncul 1.30. Bagaimana caranya untuk update cifs ke 1.50
Thanks
Donal
Yang dikeluarkan oleh mount.cifs -V adalah versi mount.cifs-nya, bukan versi modul kernel CIFS. Untuk mengetahui versi CIFS yang sesungguhnya ketik: cat /proc/fs/cifs/DebugData. Setahu saya, distro terkini biasanya sudah menggunakan versi 1.5 ke atas.
Boleh nimbrung nich
module cifs dapat di download di http://pserver.samba.org/samba/ftp/cifs-cvs/
Untuk compile di situ juga sudah ada manualnya
cek version cifs module : modinfo cifs
cek module jalan/nggak : lsmod |grep cifs
memasukkan module : insmod cifs
Ada yang pernah nyoba cifs di kernel 2.4 ???
thanks
jaka.purnama@gmail.com
Wah, terima kasih infonya bung Jaka (benar kan namanya?
).
Kalau di kernel 2.4 mungkin harus compile modul CIFS sendiri kalau mau upgrade.
Hi, saya barusan mencoba melakukan mount seperti contoh di artikel ini
tapi keluar message spt berikut :
mount : wrong fs type, bad option, bad superblock on //ubuntu/data,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs,cifs) you might need a
/sbin/mount. helper program)
in some cases useful info is found in syslog – try dmesg | tail or so
line yang saya ketik spt berikut :
sudo mount -t cifs -o rw,user=donal,password=test123,uid=1000,gid=1000,noperms,nounix,directio //ubuntu/data /mnt/sharefiles
kira2 salah dimana ya (garuk2 kepala)
Thx
Donal
apakah modul CIFS sudah di-load? cek dengan:
lsmod | grep cifs
seperti kata bung Jaka.
keliatannya sih sudah
waktu saya cek dgn lsmod | grep cifs
yang keluar :
cifs 266916 0
Apakah //ubuntu/data bisa diakses? cek dengan:
smbclient -L //ubuntu/data
saya sudah berhasil melakukan mount dengan cifs! sesudah saya cek dgn lsmod dan ternyata cifsnya bekerja, saya coba mount lagi dan berhasil! cuma saya tidak menggunakan nama server, tapi diganti degan ip address servernya.
Tapi, file lockingnya keliatannya masih sama dgn nfs, saya coba di satu user membuka satu dbf dengan indexnya (.CDX) terus di workstation lain saya coba menghapus .CDXnya, dan ternyata bisa dihapus, sedangkan waktu di Novell env, kalo saya coba melakukan hal yang sama, pasti akan keluar warning, the file is currently used, dan indexnya tidak akan bisa dihapus.
begitu juga kalo satu workstation sdg menayangkan aplikasi yang menggunakan satu dbf, dan di workstation lain saya use dbf tersebut menggunakan dbase, maka dbase akan menolaknya, tetapi dengan dosemu, ketika saya coba use dgn dbase, masih bisa,
apa ada feature yang belum saya aktifkan?
Thanks
Donal
btw, mengenai speed, ternyata benar! mounting menggunakan cifs sama cepatnya dgn nfs
Thanks alot!
tinggal satu masalah saja : file & record locking, arrghhh
Untuk file & record locking, coba lakukan tuning di /etc/samba/smb.conf di server Samba anda. Coba tambahkan option veto oplock seperti di Fix-1 di artikel ini.