Sekarang saya mau bagi ilmu lagi tentang fuse dan sedikit tentang filesystem
File System terdiri dari kata File dan System.
File : kumpulan informasi yang berhubungan dan tersimpan di dalam secondary storage, secara konsep file mempunyai beberapa tipe ada yang bertipe Data terdiri dari character, numeric, dan binary ada juga file yang bertipe program.
System : Suatu jaringan kerja dari prosedur-prosedur yang saling berhubungan, berkumpul bersama-sama untuk melakukan suatu kegiatan atau untuk menyelesaikan suatu sasaran tertentu
Kalau masih bingung, File system itu seperti kita bisa menghapus direktori, rename file, atau membuat file/folder baru, atau sebagainya. Dan itu semua diatur oleh Komponen yang bernama "Kernel"FUSE adalah kepanjangan dari Filesystem in Userspace. Itu berarti kita dapat membuat File System semau kita.
Gambarannya sebagai berikut
Dengan adanya Fuse kita bisa membuat filesystem kita sendiri tanpa bergantung pada konfigurasi kernel. Keren bukan? :D
Untuk mendapatnkan Komponen FUSE, anda dapat melakukan beberapa langkah berikut:
1. Download FUSE dari http://fuse.sourceforge.net/ pada bagian Download stable release
2. Extract file tar.gz dan masuk ke direktori FUSE. (tar –xvzf fuse-2.9.4.tar.gz)
3. Lakukan installasi FUSE dengan cara :
a. Gunakan hak akses super user (sudo su)
b. Ketikkan perintah ./configure
c. Ketikkan perintah make
d. Ketikkan perintah make install
4. FUSE siap digunakan ^_^
Jika anda telah selesai menginstall FUSE, langkah selanjutnya adalah bermain dengan FUSE milik anda. Berikut ada contoh code FUSE yang dapat anda gunakan
#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <sys/statfs.h>
static const char *dirpath = "/home/ncc/Documents";
static int xmp_getattr(const char *path, struct stat *stbuf)
{
int res;
char fpath[1000];
sprintf(fpath,"%s%s",dirpath,path);
res = lstat(fpath, stbuf);
if(res == -1)
{
return -errno;
}
return 0;
}
static int xmp_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler)
{
char fpath[1000];
if(strcmp(path,"/") == 0)
{
path=dirpath;
sprintf(fpath,"%s",path);
}
else sprintf(fpath, "%s%s",dirpath,path);
int res = 0;
DIR *dp;
struct dirent *de;
dp = opendir(fpath);
if(dp==NULL)
{
return -errno;
}
while((de = readdir(dp))!=NULL)
{
res = filler(h, de->d_name, de->d_type);
if(res!=0) break;
}
System ("notify-send ini masuk fuse");
closedir(dp);
return res;
}
static struct fuse_operations xmp_oper =
{
.getattr = xmp_getattr,
//.readlink = xmp_readlink,
.getdir = xmp_getdir,
//.mknod = xmp_mknod,
//.mkdir = xmp_mkdir,
//.symlink = xmp_symlink,
//.unlink = xmp_unlink,
//.rmdir = xmp_rmdir,
//.rename = xmp_rename,
//.link = xmp_link,
//.chmod = xmp_chmod,
//.chown = xmp_chown,
//.truncate = xmp_truncate,
//.utime = xmp_utime,
//.open = xmp_open,
//.read = xmp_read,
//.write = xmp_write,
//.release = xmp_release,
//.fsync = xmp_fsync,
//.readdir = hello_readdir
};
int main(int argc, char *argv[])
{
return fuse_main(argc, argv, &xmp_oper);
}
Ganti bagian static const char *dirpath = "/home/mhr7/Downloads" dengan
static const char *dirpath = "/home/[nama user kalian]/Downloads"
Simpan kemudian compile dengan menggunakan perintah: gcc -Wall [nama file].c `pkg-config fuse --cflags --libs` -o [nama file]
Kemudian buat sebuah direktori, misalnya: /tmp/fuse
Coba jalankan fuse tadi dengan cara: ./[nama file] /tmp/fuse
Maka semua isi direktori /home/[nama user kalian]/Downloads akan dimount ke direktori /tmp/fuse
Coba masuk ke /tmp/fuse dan jalankan perintah ls, maka semua isi direktori tersebut akan ditampilkan dan akan muncul notifikasi di bagian atas kanan monitor anda.
Jika anda menemui file .txt dalam folder anda, maka anda dapat mengclick file tersebut. Tapi tidak bisa membukanya. Karena fungsi "xmp_open" belum anda tuliskan. Saya sarankan anda untuk mengakses http://fuse.sourceforge.net/doxygen/fusexmp_8c.html untuk melihat dan mencopy fungsi-fungsi yang masih berstatus comment pada code anda.
Agar anda dapat membuka dan melihat file .txt anda, saya anjurkan anda untuk menuliskan fungsi "xmp_wirte", "xmp_open", "xmp_read", sekaligus dan menghapus comment yang ada di situ
Ada kasus lain nih, "Kok fuse di PCmu bisa, tapi di PCku kok ngga bisa?".
Setelah dicompile, kok malah ada "warning undefined pointer type pada .open dan .write". dan yang salah adalah dibagian "void fi"
Jangan khawatir, sebetulnya itu hanya masalah versi saja. Saya sarankan anda mencoba berbagai :
#define FUSE_USE_VERSION 30 [coba 22/26/28]#ifdef HAVE_CONFIG_H#include <config.h>#endif#ifdef linux/* For pread()/pwrite()/utimensat() */#define _XOPEN_SOURCE 700 [kalau di pc saya saya gunakan 500, di teman saya 600]#endif
Sekian yang dapat saya bagi bersama, Sebetulnya ini masih secuplik kecil dari keseluruhan quest yang saat itu saya kerjakan. kalau masih belom faham, Bisa langsung email saja ke saya. Atau jika masih ada waktu, akan saya update postingan ini tergantung dari respond temen2 sekalian.
Terimakasih telah membaca :D

super sekali
BalasHapus