FuseFS scripts: Browse | Submit New | Admin

[#3620] drb fs

Date:
2006-02-22 07:41
Priority:
3
Submitted By:
Greg Millam (walker)
Assigned To:
Nobody (None)
Category:
None
State:
Open
Summary:
drb fs

Detailed description
This FS, authored by Kent Sibilev, allows you to mount remote directories, by having a ruby Drb server, and Drb+FuseFS
client.

In other words: Rather than setting up samba, its passwords, etc etc, just run server.rb on your windows box, and client.rb
on your linux box!

Thanks, Kent!

###### server.rb: #####
#!/usr/bin/env ruby

require 'drb'

class RemoteDirectory
  def initialize(dir)
    @dir = dir
    @files = {}
  end

  def contents(path)
    Dir[File.join(@dir, path,'*')].map{|fn| File.basename fn}
  end

  %w|file? directory? executable? size delete|.each do |name|
    define_method(name) do |path|
      File.send name, File.join(@dir, path)
    end
  end

  %w|mkdir rmdir|.each do |name|
    define_method(name) do |path|
      Dir.send name, File.join(@dir, path)
    end
  end

  %w|can_write? can_delete? can_mkdir? can_rmdir?|.each do |name|
    define_method(name) do |path|
      true
    end
  end

  def raw_open(path, mode)
    return true if @files.has_key? path
    @files[path] = File.open(File.join(@dir, path), mode)
    return true
  rescue
    puts $!
    false
  end

  def raw_read(path, off, size)
    file = @files[path]
    return unless file
    file.seek(off, File::SEEK_SET)
    file.read(size)
  rescue
    puts $!
    nil
  end

  def raw_write(path, off, sz, buf)
    file = @files[path]
    return unless file
    file.seek(off, File::SEEK_SET)
    file.write(buf[0, sz])
  rescue
    puts $!
  end

  def raw_close(path)
    file = @files[path]
    return unless file
    file.close
    @files.delete path
  rescue
    puts $!
  end
end

if $0 == __FILE__
  dir = RemoteDirectory.new ARGV.shift || '.'
  uri = ARGV.shift || 'druby://0.0.0.0:7777'
  DRb.start_service uri, dir
  puts DRb.uri
  DRb.thread.join
end

#######    rubyfs.rb: #######
#!/usr/bin/env ruby

require 'drb'
require 'fusefs'

unless (1..2).include? ARGV.size
  puts "Usage: #$0 <directory> <uri>"
  exit(1)
end

dir = ARGV.shift
uri = ARGV.shift || 'druby://0.0.0.0:7777'

DRb.start_service(nil, nil)
root = DRbObject.new_with_uri(uri)

FuseFS.set_root(root)
FuseFS.mount_under(dir)
FuseFS.run

Add A Comment: Notepad

Please login


Followup

No Followups Have Been Posted

Attached Files:

Name Description Download
No Files Currently Attached

Changes:

No Changes Have Been Made to This Item