示例#1
0
文件: vbts2lnfs.py 项目: sh01/liasis
def _main():
   import optparse
   import sys
   from gonium import _debugging; _debugging.streamlogger_setup()
   
   op = optparse.OptionParser(usage='%prog [options] <lnfs_volume> <torrent meta file>...')
   op.add_option('-b', '--basepath', dest='basepath', default='.', metavar='PATH', help='Basepath to use for reading BT data')
   op.add_option('-r', '--reverse', default=False, action='store_true', help='Copy from LNFS to FS instead of the opposite direction')
   
   (options, args) = op.parse_args()
   basepath = options.basepath.encode()
   
   fn_vol = args[0]
   fns_bt = args[1:]
   
   sa = ServiceAggregate()
   sa.aio = None
   
   _log(20, 'Opening LNFS volume {0!a}.'.format(fn_vol))
   vol = LNFSVolume(open(fn_vol,'r+b'))
   
   for fn_bt in fns_bt:
      _log(20, 'Reading metainfo from {0!a} and opening data files.'.format(fn_bt))
      mi = BTMetaInfo.build_from_benc_stream(open(fn_bt,'rb'))
      btdiskio_v = btdiskio_v_build(sa, mi, basepath, mkdirs=options.reverse, mkfiles=options.reverse)
      btdiskio_lnfs = vol.btdiskio_build(sa, mi, basepath)
      
      _log(20, 'Copying data.')
      if (options.reverse):
         btdata_copy_b(sa, btdiskio_v, btdiskio_lnfs, mi.length_total)
      else:
         btdata_copy_b(sa, btdiskio_lnfs, btdiskio_v, mi.length_total)
      _log(20, 'Data copy finished.')
   
   _log(20, 'All done.')
示例#2
0
文件: lnfs_fuse.py 项目: sh01/liasis
def main():
   import sys
   import logging
   import optparse
   from fcntl import LOCK_SH, LOCK_NB
   
   logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s',
      stream=sys.stderr, level=logging.DEBUG)
   
   logger = logging.getLogger()
   log = logger.log
   
   op = optparse.OptionParser()
   op.add_option('--allow-other', dest='allow_other', action='store_true', default=False, help='Allow FS access for other users than the mounting one.')
   op.add_option('--fg', dest='foreground', action='store_true', default=False, help="Don't background after initialization.")
   
   (opts, args) = op.parse_args()
   
   (volfn, mountpoint, *mifns) = args
   
   lf = LNFSFuse()
   
   log(20, 'Opening and parsing LNFS volume.')
   volf = open(volfn, 'rb')
   vol = LNFSVolume(volf, LOCK_SH | LOCK_NB)
   lf.add_lnfs_vol(vol)
   log(20, 'Done.')
   
   log(20, 'Reading and parsing MI files ...')
   for fn in mifns:
      f = open(fn, 'rb')
      mi = BTMetaInfo.build_from_benc_stream(f)
      lf.add_mi(mi)
   
   log(20, 'Done.')
   
   lf.finish_setup()
   
   log(20, 'Init finished.')
   
   fuse_kwargs = {}
   if (opts.foreground):
      fuse_kwargs['foreground'] = True
   if (opts.allow_other):
      fuse_kwargs['allow_other'] = True
   
   fuse.FUSE(lf, mountpoint, nothreads=True, **fuse_kwargs)
示例#3
0
文件: daemon.py 项目: sh01/liasis
 def _data_prepare(self):
    if not (self.mi is None):
       raise Exception()
    
    self.log(20, 'Preparing data to transfer and generating metainfo.')
    rf = open('/dev/urandom','rb')
    hb = HashBuilder(self.piece_length)
    
    for cas in self.config_argsets:
       datadir = cas[1]
       if not (os.path.isdir(datadir)):
          os.mkdir(datadir)
       dd_intermediate = os.path.join(datadir, self.intermediate_ddname)
       if not (os.path.isdir(dd_intermediate)):
          os.mkdir(dd_intermediate)
    
    src_dd = self.config_argsets[0][1]
    
    i = 0
    file_dicts = deque()
    dfns = deque()
    for dfl in self.dfile_lens:
       dfn = str(i).encode('ascii')
       pn = os.path.join(src_dd, self.intermediate_ddname, dfn)
       df = open(pn, 'w+b')
       _copyfile(rf, df, dfl)
       hb.add_file(df)
       df.close()
       dfns.append(pn)
       file_dicts.append({b'length':dfl, b'path':[dfn]})
       i += 1
    
    hb.finish()
    rf.close()
    
    mi = BTMetaInfo.build_from_dict({
       b'announce':self._get_tracker_url(),
       b'info':{
          b'name':self.intermediate_ddname,
          b'piece length':self.piece_length,
          b'pieces':b''.join(hb.digests),
          b'files':list(file_dicts)
       }
    })
    self.mi = mi