Selasa, 16 Desember 2014

FUSE


FUSE
Apasih FUSE itu?

FUSE adalah singkatan dari Filesystem in Userspace. FUSE sendiri dapat diartikan sebagai kernel yang memungkinkan untuk membuat filesystem sendiri tanpa harus mengakses kode kernel secara langsung.

Filesystem ini mempermudah untuk mengorganisir suatu kumpulan data agar mudah dibaca oleh user dan dipasang atas direktori tertentu

Untuk memasang(MOUNT) FUSE : ./hello.py ~/somedir
Untuk melepas (UNMOUNT) FUSE : fusermount -u ~/somedir

Cara kerja FUSE:

  • Aplikasi membuat syscall file terhubung
  • Kernel menggambarkan file terdapat pada FUSE yang dipasang
  • Kernel FUSE meneruskan permintaan ke userspace aplikasi FUSE
Operasi FUSE

  • Operasi direktori
readdir(path) : menghasilkan entri direktori untuk setiap file dalam direktori
mkdir(path, mode) : membuat direktori
rmdir(path) : menghapus direktori kosong
  • Operasi File
mknod(path, mode, dev) : membuat file
unlink(path) : menghapus file
rename(old, new) : memindah atau menguabah nama file
  • Operasi Metadata
getattr(path) : membaca metadata
chmod(path, mode) : mengubah izin
chown(path, uid, gid) : mengubah kepemilikan
  • Operasi lainnya
statfs(path)
    fsdestroy()
      create(path, flags, mode)
        utimens(path, times)
          readlink(path)
            symlink(target, name)
              link(target, name)
                fsync(path, fdatasync, fh)
                .....


                Contoh penggunaan FUSE pada Phyton :

                • readdir >>

                fuse.fuse_python_api = (0, 2)

                hello_path = '/hello'
                hello_str = 'Hello World!\n'
                class HelloFS(Fuse):

                    def readdir(self, path, offset):
                        for r in  '.', '..', hello_path[1:]:

                            yield fuse.Direntry(r)


                • open >>
                hello_path = '/hello'
                hello_str = 'Hello World!\n'
                class HelloFS(Fuse):
                    # ...

                    def open(self, path, flags):
                        if path != hello_path:
                            return -errno.ENOENT
                        accmode = os.O_RDONLY | os.O_WRONLY \
                                  | os.O_RDWR
                        if (flags & accmode) != os.O_RDONLY:
                            return -errno.EACCES
                • read >>
                def read(self, path, size, offset):
                        if path != hello_path:
                           return -errno.ENOENT
                        slen = len(hello_str)
                        if offset < slen:
                           if offset + size > slen:
                               size = slen - offset
                           buf = hello_str[offset:offset+size]
                        else:
                           buf = ''
                        return buf
                • Helper stat subclass >>
                class MyStat(fuse.Stat):
                    def __init__(self):
                        self.st_mode = 0
                        self.st_ino = 0
                        self.st_dev = 0
                        self.st_nlink = 0
                        self.st_uid = 0
                        self.st_gid = 0
                        self.st_size = 0
                        self.st_atime = 0
                        self.st_mtime = 0
                        self.st_ctime = 0
                • getattr >>
                def getattr(self, path):
                        st = MyStat()
                        if path == '/':
                            st.st_mode = stat.S_IFDIR | 0755
                            st.st_nlink = 2
                        elif path == hello_path:
                            st.st_mode = stat.S_IFREG | 0444
                            st.st_nlink = 1
                            st.st_size = len(hello_str)
                        else:
                            return -errno.ENOENT
                        return st
                • Boilerplate Main
                def main():
                    usage="\nUserspace hello example\n\n" \
                          + Fuse.fusage
                    server = HelloFS(version="%prog "
                                       + fuse.__version__,
                                     usage=usage,
                                     dash_s_do='setsingle')

                    server.parse(errex=1)
                    server.main()

                if __name__ == '__main__':
                    main()



                Selamat mencoba! :D







                Jumat, 07 November 2014

                Simple Chatting Using Socket Programming


                Kali ini kita mau bahas Chatting pake Socket Programming nih. Tapi sebelum itu, buat yang masih asing atau bingung dengan Socket sendiri, bisa mampir ke http://id.wikipedia.org/wiki/Socket_jaringan_komputer

                Intinya, Socket itu adalah sebuah abstraksi software sebagai terminal dari hubungan antara dua mesin atau proses yang saling melakukan interkoneksi. Nah, dengan begitu kita bisa mengembangkannya menjadi seperti sebuah chat antar mesin :D

                Berikut ini salah satu contoh penjelasan dari "Simple Chatting Using Socket Programming" dalam bahasa C++ dengan pengiriman pesan hanya satu arah, yaitu dari client ke server.

                Server

                1. Membuat Socket



                Ket:
                •  AF_INET : keluarga socket untuk komunikasi antara client dan server yang bisa berada di host yang sama atau berbeda. AF_INET hanya mendukung IPv4.
                •  SOCK_STREAM : menggunakan protokol TCP (Transmission Control Protocol)

                2. Membuat struktur sockaddr_in dan membuat nama socket dengan bind 



                3. Menerima koneksi dari client
                4. Jika server dan client sudah terhubung, maka pengiriman pesan (chatting) sudah bisa dilakukan dengan


                Client

                1. Membuat socket terlebih dahulu, seperti yang sudah dilakukan pada kodingan server

                2. Membuat struktur sockaddr_in dan menghubungkan client ke remote server


                3. Melakukan komunikasi dengan server : memasukkan pesan, mengirim pesan atau data, dan memperoleh pesan balasan dari server 



                Sekian penjelasan dari implementasi chatting menggunakan socket programming.
                Selamat mencoba ya! :)


                Minggu, 05 Oktober 2014

                Debian GNU/Linux

                  Debian GNU/Linux

                  Ayo mengenal lebih jauh apa itu Debian GNU/Linux :)

                  Debian GNU/Linux itu apa ya?
                  Sistem operasi Debian yang merupakan gabungan dari perangkat lunak yang dikembangkan dengan lisensi GNU dan utamanya menggunakan kernel Linux.
                  Fitur yang menonjol dari Debian ini adalah APT sistem pengaturan paket, repositori dengan jumlah paket yang banyak, kebijakan paket yang ketat, dan kualitas rilis yang terjaga.
                  Standar instalasi Debian menggunakan GNOME desktop environment.
                  Metode instalasi lainnya adalah CD net install yang ukurannya lebih kecil daripada CD/DVD instalasi normal.

                  Gimana sih cara meng-install Debian GNU/Linux ini?

                  Berikut ini adalah cara meng-install Debian GNU/Linux menggunakan CD net install. Selamat mencobaaa :D
                  1. Setelah CD net install Debian GNU/Linux dimasukkan, tampilan layar akan seperti ini yang terdapat Installer boot menu.

                  1. Pilih 64 bit graphical install untuk PC dengan tipe sistem operasi 64-bit.
                  2. Tampilan berikutnya adalah memilih bahasa Select Language -> Continue. Kemudian, Select your Location -> Continue ; Configure the keyboard (memilih bahasa pada keyboard) -> Continue.
                  3. Setelah itu, terjadi proses Detect and mount CD-ROM, Load Installer components from CD, Detect network hardware, Configure the network.
                  4. Pada proses Configure the network, masukkan hostname untuk sistem -> Continue
                  5. Set up users and paswords, masukkan password yang dikehendaki -> Continue. Kemudian, masukkan nama lengkap untuk new user -> Continue dan username untuk akun pada sistem -> Continue , serta password nya.
                  6. Configure the clock, detect disks, Partition disks. Pada Partition disks, pilih metode partisi, yaitu Guided - use entire disk -> pilih disk untuk partisinya ->  Partioning scheme -> All files in one partition -> Finish partitioning and write changes to disk. Setelah itu, ada informasi mengenai tabel partisi dan partisi apa saja yag akan diformat, pilih "Yes" untuk "Write the changes to disks?"
                  7. Proses Install the base system, kemudian Configure the package manager dan pilih debian.man.ac.uk
                  8. Jika diperlukan akses HTTP proxy information, masukkan alamatnya dengan format "http://[[User][:pass]@]host[:port]/"
                  9. Proses Configue the package manager. Setelah itu, muncul Configuring popularity-contest dan pilih "Yes" untuk "Participate in the package usage survey?"
                  10. Proses Select and install software
                  11. Pada Software selection pilih software yang akan diinstall, seperti Graphical desktop environment, SSH server, dan   Standard system utilities.
                  12. Setelah itu, muncul Configuring man-db. Pilih Yes


                  1. Tampilan berikutnya
                             
                  1. Instalasi selesai setelah muncul tampilan :
                               
                  Selamat mencoba! :D