Saturday, November 28, 2015

Sesi Pintar Bersama Anjing Garing eps 4 (Cara Make FUSE) #BuatLinux

Hai rek!!
Ketemu lagi sama gw, dalam sesi pintar yang ke-empat.

Dalam sesi kali ini udah terpampang jelas di judul, apa yang bakalan kita lakukan.
Yap, FUSE.

Apa itu FUSE?


FUSE itu,

Kalo ga gitu,


Oke.. Mule ngaco..
FUSE itu singkatan dari Filesystem in Userspace (FUSE).

Jadi pertama tama kalian harus paham dulu apa yang dimaksud Filesystem.

Filesystem Filesystem adalah suatu cara bagi OS untuk menata file-file yang ada pada suatu disk atau partisi. Suatu program membutuhkan filesystem untuk beroperasi.

Nah.. Dengan menggunakan FUSE, kita bisa membuat filesystem kita sendiri. Tapi pertama tama kalian harus install FUSE-nya terlebih dahulu.
     Installasi FUSE:
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


Ini cara mengimplementasikanya. Kalian tinggal copy-paste.

#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>



//Masukkan path dari folder yang mau kalian jadiin FUSE

static const char *dirpath = "/home/ncc/Documents";
 

//Kalian bisa memodifikasi fungsi sesuai keinginan
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;
    }
    closedir(dp);
    return res;
}


//Ini list list fungsi yang sudah disediakan sama FUSE
//Kalo kalian mau make salah satu fungsi tinggal kalian hapus commentnya
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);
}


Terus tinggal kalian compile.
gcc -Wall [nama file].c `pkg-config fuse --cflags --libs` -o [nama file]

Terakhir di run.
./[nama file] [path ke folder kosong, yang berfungsi sebagai tempat njalanin FUSE kalian]


Oke. FUSE kalian sudah jadi. Gampang kan??

No comments:

Post a Comment