MYDan

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

2019-02-06T18:18:33+08:00 : 修复上一次提交的问题,MYDan::Agent::Load 需要传递pcb
2019-02-06T17:47:39+08:00 : tools/grsync 添加immediately 参数,支持不隔离网络的Load进度显示
2019-02-03T22:46:20+08:00 : tools/rtail 输出日志前面添加机器名
2019-02-03T22:41:32+08:00 : tools/rcall 添加实时显示命令输出功能
2019-02-03T22:38:35+08:00 : add  agent/argv/scriptsx,agent/code/scriptsx
2019-02-03T22:19:50+08:00 : tcpserver 把本地和远程端口传递给插件
2019-02-03T22:08:15+08:00 : tcpserver 添加TCPSERVERINDEX环境变量
2019-02-02T23:42:15+08:00 : agent 限速,默认20M
2019-02-01T11:58:24+08:00 : merge release-0.0.1
2019-02-01T11:55:40+08:00 : 发布0.1.59到cpan.org
2019-02-01T11:50:37+08:00 : grsync 同步目录优化,先经过压缩。空目录、软链接,chmod、chown等的处理
2019-01-25T21:58:15+08:00 : 修复通过代理load文件的问题
2019-01-25T18:15:01+08:00 : fastmd5 默认大文件为5G
2019-01-25T16:32:54+08:00 : 修改etc/agent/proxy 避免和真实使用的ip相撞
2019-01-25T16:18:45+08:00 : fix 通过代理load文件时候没有filecache报错
2019-01-25T13:29:57+08:00 : 发布0.1.58到cpan.org
2019-01-25T13:24:44+08:00 : agent/code/scripts pkill所有scripts插件启动的所有进程
2019-01-25T09:54:44+08:00 : 发布0.1.57到cpan.org
2019-01-25T09:54:03+08:00 : Util::FastMD5添加read 和seek失败判断
2019-01-24T22:00:18+08:00 : 同步文件使用fastmd5
2019-01-24T21:02:02+08:00 : 添加fastmd5工具,用于快速计算文件md5

Changes  view on Meta::CPAN

2017-11-21T18:01:14+00:00 : - Added MANIFEST to the .gitignore
2017-11-21T17:59:09+00:00 : - Added MANIFEST.SKIP to help in creating nice MANIFEST file.
2017-11-21T17:58:27+00:00 : - Removed auto generated META.json from source.
2017-11-21T22:25:49+08:00 : 发布0.1.10版本到cpan.org
2017-11-21T22:03:47+08:00 : argv/code/{download,load} 首选使用argv,没有argv情况下使用data
2017-11-21T21:57:39+08:00 : argv/code/download, Agent::Mrsync download 插件argv使用hash
2017-11-21T21:49:42+08:00 : 把MYDan::Agent::Grsync默认的方式改成V1
2017-11-21T21:42:21+08:00 : MYDan::Agent::Grsync new函数保留proxy信息
2017-11-21T21:36:18+08:00 : .config,Util::Tcpserver 添加传输buf限制
2017-11-21T21:28:10+08:00 : MYDan::Agent::Client 代理返空的情况处理
2017-11-21T21:23:22+08:00 : tools/grsync MYDan::Agent::Grsync 添加--chown --chmod --cc参数
2017-11-21T13:02:28+08:00 : tools/rcall,agent/code/version,MYDan::Agent::Client 添加查看版本参数和插件
2017-11-21T12:54:37+08:00 : Agent::Mrsync 使用Agent::Client ,可以匹配上代理,而不是直接建立tcp到目标机
2017-11-21T12:50:45+08:00 : fix 传递chown chmod cc参数位置错误
2017-11-20T23:02:47+08:00 : 发布0.1.9版本到cpan.org
2017-11-20T23:00:40+08:00 : 把协议中的keepalive 改成 MYDan_$version
2017-11-20T22:48:51+08:00 : tools/mrsync MYDan::Agent::Mrsync 添加--chown --chmod --cc参数
2017-11-20T22:45:12+08:00 : tools/load MYDan::Agent::Load 添加--chown --chmod --cc参数
2017-11-20T22:39:47+08:00 : tools/{load,mrsync,grsync} 默认用户改成id -un,不使用logname
2017-11-20T22:37:05+08:00 : 添加--cc参数,默认情况下不dump文件的属性,添加-—cc继承文件属性,或单独--chown --chmod 控制
2017-11-20T22:33:22+08:00 : agent/code/{dump,sdump} 修改,先chmod和chown 后 rename,失败的情况不保留文件。同时失败的时候把信息返回给 客户端
2017-11-20T22:28:03+08:00 : fix 在todo的任务中,sp改成dp
2017-11-20T22:26:03+08:00 : 修改mydan安装路径
2017-11-20T22:24:03+08:00 : MYDan::VSSH::Comp  Bareword "Term::Completion" not allowed while "strict subs" in use
2017-11-20T13:06:25+08:00 : 发布0.1.8版本到cpan.org
2017-11-20T13:04:06+08:00 : 携带的data数据进行压缩传输,同时允许data是数组或者hash等
2017-11-20T12:59:51+08:00 : 通过api请求权限时,不提交data数据,请求结束后拼接回来
2017-11-19T16:04:56+08:00 : agent dump插件使用不加密数据,原来的dump改名成sdump
2017-11-19T15:59:02+08:00 : 修复升级agent协议时引入的bug
2017-11-19T14:27:04+08:00 : 升级agent协议,在头部可以携带不用加密的数据
2017-11-18T23:24:30+08:00 : 发布0.1.7版本到cpan.org

Changes  view on Meta::CPAN

2017-09-26T21:34:13+08:00 : add alias unalias
2017-09-25T22:21:45+08:00 : 添加mydan/bin 用于放到PATH环境变量中
2017-09-25T13:03:59+08:00 : fix Util::ExpSSH, 通过返回码判断host不准确
2017-09-25T11:11:16+08:00 : tools/rcall 使用vssh的打印结果函数
2017-09-24T12:59:51+08:00 : node/bin/* 改成不必sudo
2017-09-24T02:19:46+08:00 : tools/go 添加解析 etc/hosts
2017-09-24T02:19:01+08:00 : fix Hosts.pm正则错误
2017-09-24T01:57:53+08:00 : add etc/hosts 和 Util::Hosts 用于mydan系统间自定义hosts文件
2017-09-23T12:16:08-05:00 : Merge pull request #10 from g112wdh/wdh_dev
2017-09-23T23:07:01+08:00 : 恢复code/dump 上次提交错误
2017-09-23T23:02:27+08:00 : set dump default chmod and chown
2017-09-17T18:02:28+08:00 : rcall add --port
2017-09-17T00:36:57+08:00 : Revert "修改Proxy.pm 增加default的代理(0.0.0.0/0)"
2017-09-17T00:36:41+08:00 : Revert "add range"
2017-09-17T00:19:06+08:00 : add srsync for rsync single host password come from MYDan::Util::Pass
2017-09-05T21:48:33+08:00 : add range
2017-09-05T21:37:56+08:00 : 修改Proxy.pm 增加default的代理(0.0.0.0/0) 修改etc/agent/proxy 变成yaml的格式 使key 支持正则和range(Node 表达式)
2017-08-29T21:33:04+08:00 : 如果解压三次失败重新下载安装包
2017-08-20T00:56:56+08:00 : add META.json
2017-08-20T00:51:45+08:00 : dan/tools/release 添加$mydan/etc/agent/proxy
2017-08-20T00:47:12+08:00 : tools/release 打包时同时打可执行包

Changes  view on Meta::CPAN

2017-08-12T11:33:08+08:00 : 修改project配置文件的路径到etc下
2017-08-12T10:28:00+08:00 : agent读取proxy文件改成只读
2017-08-12T10:14:16+08:00 : load 添加代理功能,同时改proxy名
2017-08-06T23:42:02-05:00 : Merge pull request #7 from g112wdh/wdh_dev
2017-08-04T18:43:37+08:00 : Merge branch 'wdh_dev' of https://github.com/g112wdh/mayi into wdh_dev
2017-08-04T18:40:41+08:00 : 修改断点续传时候 打开文件的方式,之前的方式我测了有问题
2017-08-02T23:15:21+08:00 : agent添加代理执行功能
2017-07-27T08:20:32-05:00 : Merge pull request #6 from MYDan/release-0.0.1-dev
2017-07-27T08:12:01-05:00 : Merge pull request #5 from g112wdh/wdh_dev
2017-07-27T21:06:55+08:00 : 减少stat次数
2017-07-27T14:10:05+08:00 : 增加load 使下载来的 包含chmod 和chown (通过uid gid 来设定,如果本机没有响应的用户的话,直接就是数字的uid和gid了)
2017-07-19T22:08:53+08:00 : 添加agent代理的默认配置
2017-07-19T22:07:15+08:00 : add agent.porxy to .config
2017-07-19T22:02:29+08:00 : 添加Porxy.pm
2017-07-18T23:44:57-05:00 : Merge pull request #3 from g112wdh/master
2017-07-19T10:07:17+08:00 : fix shell
2017-07-18T00:57:44+08:00 : 修改进度显示相关
2017-07-17T23:59:00+08:00 : agent调用时显示进度
2017-07-17T23:57:59+08:00 : 进度显示模块update
2017-07-16T14:49:45+08:00 : agent调用error信息打在日志的同时返回给调用者
2017-07-16T14:23:10+08:00 : clean

box/tools/mrsync  view on Meta::CPAN

use MYDan::Node;
use MYDan::Util::Mrsync;
use MYDan::Util::OptConf;

$| ++;

@MYDan::Util::OptConf::CONF = qw( pass_through no_ignore_case );

my $option = MYDan::Util::OptConf->load();
my %o = $option->set( retry => 2, timeout => 300, gave => 3, src => hostname() )
    ->get( qw( src=s dst=s sp=s dp=s timeout=i max=i retry=i nice=i user=s sudo=s gave=i chown=s chmod=s cc ) )
    ->dump();

$option->assert( qw( src dst sp ) );

$o{user} = `id -un` and chop $o{user} unless $o{user};

my $range = MYDan::Node->new( $option->dump( 'range' ) );
my $mrsync = MYDan::Util::Mrsync->new
(
    ( map { $_ => delete $o{$_} } qw( sp dp ) ),

dan/agent/argv/dump  view on Meta::CPAN

use MYDan::Util::FastMD5;

return sub
{
    local $/;
    my ( $file, %o ) = shift;
    return [ %o ] unless $file && -f $file;

    %o = ( path => $file =~ /^\// ? $file : Cwd::abs_path( $file ) );

    Getopt::Long::GetOptionsFromArray( \@_, \%o, qw( path=s chmod=s chown=s cc ) );

    if( delete $o{cc} )
    {
        my ( $uid, $mode ) = ( stat $file )[ 4, 2 ];
        $o{chmod} ||= $mode = sprintf( "%04o", $mode & 07777 );
	$o{chown} ||= ( getpwuid($uid) )[0];
    }

    $o{md5} = MYDan::Util::FastMD5->hexdigest( $file );

    $ENV{MYDanExtractFile} = $file;
    $ENV{MYDanExtractFileAim} = $o{path};

    return \%o;
};

dan/agent/argv/edump  view on Meta::CPAN


return sub
{
    local $/;
    my ( $file, %o, $data ) = shift;
    return [ %o ] unless $file && -f $file;

    
    %o = ( path => $file =~ /^\// ? $file : Cwd::abs_path( $file ) );

    Getopt::Long::GetOptionsFromArray( \@_, \%o, qw( path=s chmod=s chown=s cc ) );

    if( delete $o{cc} )
    {
        my ( $uid, $mode ) = ( stat $file )[ 4, 2 ];
        $o{chmod} ||= $mode = sprintf( "%04o", $mode & 07777 );
	$o{chown} ||= ( getpwuid($uid) )[0];
    }

    $o{md5} = Digest::MD5->new()->add( $data = `cat $file` )->hexdigest();
    return ( \%o, data => $data );
};

dan/agent/argv/mrsync  view on Meta::CPAN


return sub
{
    local $/;
    my ( %o, $data );

    unless( defined $_[0] ) { shift; %o = @_; }
    else
    {
        Getopt::Long::GetOptionsFromArray( \@_, \%o, 
            qw( src=s dst=s sp=s dp=s timeout=i max=i retry=i nice=i user=s sudo=s gave=i chown=s chmod=s cc env ) 
        );
    }

    $o{retry} = 2 unless defined $o{retry};
    $o{timeout} = 300 unless defined $o{timeout};
    $o{gave} = 3 unless defined $o{gave};
    $o{user} = `id -un` and chop $o{user} unless $o{user};

    my $option = MYDan::Util::OptConf->load();
    my $range = MYDan::Node->new( $option->dump( 'range' ) );

dan/agent/argv/sdump  view on Meta::CPAN


return sub
{
    local $/;
    my ( $file, %o ) = shift;
    return [ %o ] unless $file && -f $file;

    
    %o = ( path => $file =~ /^\// ? $file : Cwd::abs_path( $file ) );

    Getopt::Long::GetOptionsFromArray( \@_, \%o, qw( path=s chmod=s chown=s cc ) );

    if( delete $o{cc} )
    {
        my ( $uid, $mode ) = ( stat $file )[ 4, 2 ];
        $o{chmod} ||= $mode = sprintf( "%04o", $mode & 07777 );
	$o{chown} ||= ( getpwuid($uid) )[0];
    }

    $o{md5} = Digest::MD5->new()->add( $o{file} = `cat $file` )->hexdigest();
    return [ \%o ];
};

dan/agent/argv/unzipdir  view on Meta::CPAN

use strict;
use warnings;

use Getopt::Long;

return sub
{
    local $/;
    my %o;

    Getopt::Long::GetOptionsFromArray( \@_, \%o, qw( uuid=s chmod=s chown=s delete ) );

    $o{path} = \@_;

    return \%o;
};

dan/agent/code/access  view on Meta::CPAN

        line => $conf->{$_}, lazy => 1 ) } keys %file;
}

map { $_->commit() } values %file;

for my $conf ( @{ $param{argv} } )
{
    next unless my $user = $conf->{user};
    my $home = "/home/$user";
    my $ssh = "$home/.ssh";
    system( "mkdir -m 0700 -p $ssh && chown $user $ssh $home" )
        if $conf->{passwd};
}

print "ok\n";
exit 0;

dan/agent/code/dump  view on Meta::CPAN

if( $filecache->usable() && -f $path )
{
    my $md5 = eval{ MYDan::Util::FastMD5->hexdigest( $path ) };
    &$idie( "fastmd5 fail: $@" ) if $@;

    if( $md5 eq $conf->{md5} )
    {
        $do = 0;
        $do = 1 if $conf->{chmod}
             && ! chmod oct $conf->{chmod}, $path;
        $do = 1 if $conf->{chown} && ! ( my @pw = getpwnam $conf->{chown} );
        $do = 1 if @pw && ! chown @pw[2,3], $path;
    }
}

if( $do )
{
    my $tmp = "$MYDan::PATH/tmp";
    unless( -d $tmp ){ mkdir $tmp;chmod 0777, $tmp; }
    $tmp .= '/dump.data.';
    for my $f ( grep{ -f } glob "$tmp*" )
    {
        my $t = ( stat $f )[9];
        unlink $f if $t && $t < time - 3600;
    }

    my $temp = $tmp. Digest::MD5->new->add( sprintf "$path.%d.%stmp",  time, $$ )->hexdigest;

    &$idie( 'param error' ) unless defined $conf->{md5} && $path;
    &$idie( "get $conf->{chown} uid fail" ) if $conf->{chown} && ! ( my @pw = getpwnam $conf->{chown} );

    &$unlink( $temp, "save fail: $!" ) if system "mv '$MYDanExtractFile' '$temp'";
    my $md5 = eval{ MYDan::Util::FastMD5->hexdigest( $temp ) };
    &$idie( "fastmd5 fail MYDanExtractFile: $@" ) if $@;

    &$unlink( $temp, 'chomd fail' ) if $conf->{chmod}
         && ! chmod oct $conf->{chmod}, $temp;
    &$unlink( $temp, 'chown fail' ) if @pw && ! chown @pw[2,3], $temp;

    &$unlink( $temp, 'md5 nomatch' ) if $md5 ne $conf->{md5};

    my $dir = File::Basename::dirname( $path );
    unless( -d $dir )
    {
        &$unlink( $temp, 'mkdir dir fail' ) if system "mkdir -p '$dir'";
    }
    
    &$unlink( $temp, 'dst path error' )  if -e $path && ! -f $path;

dan/agent/code/edump  view on Meta::CPAN


my $path = delete $conf->{path};
my ( $fh, $temp ) = File::Temp::tempfile();

my $idie = sub{ print shift;exit 1; };
my $unlink = sub { unlink shift; print shift; exit 1 };

&$idie( 'param error' ) unless defined $conf->{md5}
        && $path && $fh && length $param{data};

&$idie( "get $conf->{chown} uid fail" ) if $conf->{chown} && ! ( my @pw = getpwnam $conf->{chown} );

print $fh $param{data};
close $fh;

my $md5 = MYDan::Util::FastMD5->hexdigest( $temp );

&$unlink( $temp, 'chomd fail' ) if $conf->{chmod}
     && ! chmod oct $conf->{chmod}, $temp;
&$unlink( $temp, 'chown fail' ) if @pw && ! chown @pw[2,3], $temp;

&$unlink( $temp, 'md5 nomatch' ) if $md5 ne $conf->{md5};
&$unlink( $temp, 'rename fail' ) if system "mv '$temp' '$path'";

print "ok\n";
exit 0;

dan/agent/code/sdump  view on Meta::CPAN

my $unlink = sub { unlink shift; print shift;exit 1 };

for my $conf ( ref $param{argv}[0] ? @{ $param{argv} } : $param{argv} )
{
    my $path = delete $conf->{path};
    my ( $fh, $temp ) = File::Temp::tempfile();

    &$idie( 'param error' ) unless defined $conf->{md5}
        && $path && $fh && length $conf->{file};

    &$idie( "get $conf->{chown} uid fail" ) if $conf->{chown} && ! ( my @pw = getpwnam $conf->{chown} );

    print $fh $conf->{file};
    close $fh;

    my $md5 =  MYDan::Util::FastMD5->hexdigest( $temp );

    &$unlink( $temp, 'md5 nomatch' ) if $md5 ne $conf->{md5};
    &$unlink( $temp, 'chmod fail' ) if $conf->{chmod}
        && ! chmod oct $conf->{chmod}, $temp;
    &$unlink( $temp, 'chown fail' ) if @pw && ! chown @pw[2,3], $temp;

    &$unlink( $temp, 'rename fail' ) if system "mv '$temp' '$path'";
}

print "ok\n";
exit 0;

dan/agent/code/unzipdir  view on Meta::CPAN

use strict;
use warnings;
use YAML::XS;

local $/ = undef;

my %param = %{ YAML::XS::Load( <> ) };

local $/ = "\n";

my ( $path, $uuid, $chmod, $chown, $delete ) = map{ $param{argv}{$_}}qw( path uuid chmod chown delete );

my $idie = sub{ print shift;exit 1; };
my $call = sub
{
	my $cmd = shift;
	my $pid = open( my $H, "$cmd|" );
	my @list = <$H>;
	chomp @list;
	waitpid( $pid, 0 );
	&$idie( "run $cmd fail" ) if $? >> 8;

dan/agent/code/unzipdir  view on Meta::CPAN

            {
                &$idie( "mkdir $dir fail" ) unless mkdir $dir;
            }

            &$idie( "chmod fail:$!( chmod $mode $dir )" ) if system "chmod $mode '$dir'";

            if( defined $owner )
            {
                &$idie( "getpwnam fail" ) unless my @pw = getpwnam $owner;
                &$idie( "getpwnam fail" ) unless my $gname  = getgrgid($pw[3]);
                &$idie( "chmod fail:$!" ) if system "chown $chown.$gname '$dir'";
            }
            else
            {
                print "[warn]$dir not chown\n";
            }
        }
        else
        {
            unless( -d $d )
            {
                &$idie( "mkdir $d fail" ) unless mkdir $d;
            }
        }
    }

    if( defined $chmod )
    {
        &$idie( "chmod format error: $chmod" ) unless $chmod =~ /^\d+$/;
        &$idie( "chmod fail:$!" ) if system "chmod $chmod . -R";
    }

    if( defined $chown )
    {
        &$idie( "chown format error: $chown" ) unless $chown =~ /^[a-zA-Z0-9_\-\.]+$/;
        &$idie( "getpwnam fail" ) unless my @pw = getpwnam $chown;
        &$idie( "getpwnam fail" ) unless my $gname = getgrgid($pw[3]);
        &$idie( "chmod fail:$!" ) if system "chown $chown.$gname . -R";
    }

    if( $delete )
    {
        my $list = eval{ YAML::XS::LoadFile "$temp.flist" };
        &$idie( "load flist fail: $@" ) if $@;
        my %list = map{ $_ => 1 }@$list;

        my @file = &$call( 'find . -type f && find . -type l' );
        map{ 

dan/tools/grsync  view on Meta::CPAN

=head1 SYNOPSIS

 $0 [--src src-range(default `hostname`)] --dst dst-range --sp src-path [--dp dst-path] \
    [--timeout seconds(default 300)]
    [--max number(default 128)]
    [--retry number(default 2)]
    [--gave number(default 3)]

    [--user username(default `id -un`)] 
    [--sudo user1 ] 
    [--chown root]
    [--chmod 777]
    [--cc]
    [--delete]

     -1      Forces grsync to try protocol version 1
     -2      Forces grsync to try protocol version 2
     -3      Forces grsync to try protocol version 3
     -4      Forces grsync to try protocol version 4

     --sp /path/file --dp /path/foo/newfile

dan/tools/grsync  view on Meta::CPAN


use MYDan::Util::Progress;
use MYDan::Util::Percent;

$| ++;

@MYDan::Util::OptConf::CONF = qw( pass_through no_ignore_case );

my $option = MYDan::Util::OptConf->load();
my %o = $option->set( retry => 2, timeout => 300, gave => 3, addr => 0 )
    ->get( qw( src=s dst=s sp=s dp=s timeout=i max=i retry=i nice=i user=s sudo=s gave=i chown=s chmod=s cc delete 1 2 3 4 immediately addr=s listen=i ) )
    ->dump();

$o{delete $o{ProtocolVersion}} = 1 unless $o{ProtocolVersion} && $o{ProtocolVersion} =~ /^\d$/ && grep{ $o{$_} }1..3;

$option->assert( qw( dst sp ) );

my ( $ptime, $pcb, $p ) = ( 0 );

my %pp:shared;

dan/tools/keys  view on Meta::CPAN

{
    next unless my $dir = ( getpwnam $user )[7];
    next unless -d ( $dir = "$dir/.ssh" );

    for my $file ( @file )
    {
        next unless -f ( $file = "$dir/$file" );
        my $cont = `cat $file`;
        push @conf,
        {
            path => $file, chown => $user, file => $cont,
            md5 => Digest::MD5->new()->add( $cont )->hexdigest(),
            chmod => sprintf "%lo", ( stat $file )[2] & 07777,
        } 
    }
}

die "invalid user or user has no key\n" unless @conf;

my %query = ( code => 'sdump', argv => \@conf, sudo => 'root' );
$query{user} = `id -un`;chop $query{user};

dan/tools/load  view on Meta::CPAN

=head1 SYNOPSIS

 $0 -host host [--sp srcfile] [--verbose]

     [--dp dstfile (default sp )]

     [--sudo sudoer ]
     [--user username (default `id -un`)]
     [--timeout seconds (default 500)]
     [--continue]
     [--chown root]
     [--chmod 777]
     [--cc]

=cut

$MYDan::Util::OptConf::THIS = 'agent';
my $option = MYDan::Util::OptConf->load();
my %o = $option->get( 
    qw( host=s sp=s dp=s verbose user=s sudo=s timeout=i continue chown=s chmod=s cc ) 
)->dump();

$option->assert( 'host', 'sp' );
$o{dp} ||= $o{sp};
$o{verbose} = 1;

$o{user} = `id -un` and chop $o{user} unless $o{user};

MYDan::Agent::Load->new(
    node => $o{host}, 

dan/tools/mrsync  view on Meta::CPAN

=head1 SYNOPSIS

 $0 [--src src-range(default `hostname`)] --dst dst-range --sp src-path [--dp dst-path] \
    [--timeout seconds(default 300)]
    [--max number(default 128)]
    [--retry number(default 2)]
    [--gave number(default 3)]

    [--user username(default `id -un`)] 
    [--sudo user1 ] 
    [--chown root]
    [--chmod 777]
    [--cc]

     -1      Forces mrsync to try protocol version 1
     -2      Forces mrsync to try protocol version 2

=cut
use strict;
use warnings;
use Sys::Hostname;

dan/tools/mrsync  view on Meta::CPAN

use MYDan::Node;
use MYDan::Agent::Mrsync;
use MYDan::Util::OptConf;

$| ++;

@MYDan::Util::OptConf::CONF = qw( pass_through no_ignore_case );

my $option = MYDan::Util::OptConf->load();
my %o = $option->set( retry => 2, timeout => 300, gave => 3, src => hostname() )
    ->get( qw( src=s dst=s sp=s dp=s timeout=i max=i retry=i nice=i user=s sudo=s gave=i chown=s chmod=s cc 1 2 ) )
    ->dump();

$o{delete $o{ProtocolVersion}} = 1 unless $o{ProtocolVersion} && $o{ProtocolVersion} =~ /^\d$/ && grep{ $o{$_} }1..2;

$option->assert( qw( src dst sp ) );

$o{user} = `id -un` and chop $o{user} unless $o{user};

my $range = MYDan::Node->new( $option->dump( 'range' ) );

lib/MYDan/Agent/Grsync/V12.pm  view on Meta::CPAN

            print "$host => localhost: LOAD\n";

            delete $ENV{MYDanExtractFile};
            delete $ENV{MYDanExtractFileAim};
            eval{
                MYDan::Agent::Load->new(
                    node => $host,
                    sp => $path{sp}, dp => $load,
                )->run( %{$this->{agent}}, %o, 
		    ( defined $o{cc} ) ? () 
		        : ( 'chown' => undef, 'chmod' => undef ) 
		);
            };

            my $stat = $@ ? "FAIL $@" : 'OK';
            print "$host <= localhost: $stat\n";
            if( $stat eq 'OK' )
            {
                $loadok = 1;
                last;
            }

lib/MYDan/Agent/Grsync/V12.pm  view on Meta::CPAN

            {
                delete $ENV{MYDanExtractFile};
                delete $ENV{MYDanExtractFileAim};

                my $code = File::Spec->join( $this->{agent}{argv}, shift );
                return -f $code && ( $code = do $code ) && ref $code eq 'CODE'
                    ? &$code( @_ ) : \@_;
            };

	    my @argv;
	    map{ push( @argv, "--$_", $o{$_} ) if defined $o{$_} }qw( chown chmod );
	    push( @argv, "--cc" ) if $o{cc};

            my %query = ( 
                code => 'dump',
                argv => &$argv( 'dump',$load || $path{sp} , '--path', $path{dp}, @argv ),
                 map{ $_ => $o{$_} }qw( user sudo ) 
            );

            map{ print "localhost => $_: DUMP\n" }keys %dump;
            my %result = MYDan::Agent::Client->new(

lib/MYDan/Agent/Grsync/V3.pm  view on Meta::CPAN

            print "$host => localhost: LOAD\n";

            delete $ENV{MYDanExtractFile};
            delete $ENV{MYDanExtractFileAim};
            eval{
                MYDan::Agent::Load->new(
                    node => $host,
                    sp => $path{sp}, dp => $load,
                )->run( %{$this->{agent}}, %o, verbose => $o{pcb} ? 1 : 0,
		    ( defined $o{cc} ) ? () 
		        : ( 'chown' => undef, 'chmod' => undef ) 
		);
 
            };

            my $stat = $@ ? "FAIL $@" : 'OK';
            print "$host <= localhost: $stat\n";
            if( $stat eq 'OK' )
            {
                $loadok = 1;
                last;

lib/MYDan/Agent/Grsync/V3.pm  view on Meta::CPAN

                next if $todo->{ok};

                my @dst = @{$todo->{dst}};
                my $i = int( rand time ) % @dst;
                my $dst = $dst[$i];
                $dump{$dst} = $id;
            }
            last unless keys %dump;

	    my @argv;
	    map{ push( @argv, "--$_", $o{$_} ) if defined $o{$_} }qw( chown chmod );
	    push( @argv, "--cc" ) if $o{cc};

            my %query = ( 
                code => 'dump',
                argv => &$argv( 'dump',$load || $path{sp} , '--path', $path{dp}, @argv ),
                 map{ $_ => $o{$_} }qw( user sudo ) 
            );

            map{ print "localhost => $_: DUMP\n" }keys %dump;
            my %MYDan_rlog = ( MYDan_rlog => $o{env}{MYDan_rlog} ) if $o{env} && $o{env}{MYDan_rlog};

lib/MYDan/Agent/Grsync/V4.pm  view on Meta::CPAN

            print "$host => localhost: LOAD\n";

            delete $ENV{MYDanExtractFile};
            delete $ENV{MYDanExtractFileAim};
            eval{
                MYDan::Agent::Load->new(
                    node => $host,
                    sp => $path{sp}, dp => $load,
                )->run( %{$this->{agent}}, %o, 
                    ( defined $o{cc} ) ? () 
		            : ( 'chown' => undef, 'chmod' => undef ) 
		        );
 
            };

            my $stat = $@ ? "FAIL $@" : 'OK';
            print "$host <= localhost: $stat\n";
            if( $stat eq 'OK' )
            {
                $loadok = 1;
                last;

lib/MYDan/Agent/Grsync/V4.pm  view on Meta::CPAN

    }

    my %dump = %{$task{dst}};
    if( %dump && ( ( !%{$task{src}} ) ||  $loadok  ) )
    {
        for ( 0 .. $o{retry} )
        {
            last unless keys %dump;

	        my @argv;
    	    map{ push( @argv, "--$_", $o{$_} ) if defined $o{$_} }qw( chown chmod );
	        push( @argv, "--cc" ) if $o{cc};

            my %query = ( 
                code => 'dump',
                argv => &$argv( 'dump',$load || $path{sp} , '--path', $path{dp}, @argv ),
                 map{ $_ => $o{$_} }qw( user sudo ) 
            );

            map{ print "localhost => $_: DUMP\n" }keys %dump;
            my %result = MYDan::Agent::Client->new(

lib/MYDan/Agent/GrsyncM.pm  view on Meta::CPAN


    print '=' x 60, "\n";

    if( $this->{spIsDir} )
    {
        delete $ENV{MYDanExtractFile};
        delete $ENV{MYDanExtractFileAim};

    	my %query = ( 
    		code => 'unzipdir', argv => +{ uuid => $this->{uuid}, 
                path => [ $this->{opt}{dp} ], map{ $_ => $opt->{$_} }qw( delete chown chmod ) }, 
    		map{ $_ => $opt->{$_} }qw( user sudo ) );
    	my %result = MYDan::Agent::Client->new( @{$sync->{dst}} )
    	    ->run( %$opt, %{$sync->{agent}}, query => \%query );
    
        print "untar.\n";
        for my $node ( keys %result )
        {
            if( $result{$node} =~ s/--- 0\n$// )
            {
                 print "$node: $result{$node}\n" if $result{$node};

lib/MYDan/Agent/Load.pm  view on Meta::CPAN

			   {
				   undef $hdl;
				   $cv->send;
			   }

                           if( $keepalive{cont} =~ s/\**#\*MYDan_\d+\*#(\d+):([a-z0-9]+):(\w+):(\d+):// )
                           {
                               ( $size, $filemd5, $own, $mode ) = ( $1, $2, $3, $4 );
			       if( $run{cc} )
			       {
                                   $run{chown} ||= $own;
				   $run{chmod} ||= $mode;
			       }

			       if( $filecache->check( $filemd5 ) && ! -e $dp  )
			       {
				       print "get data from filecache\n";
				       eval{ $filecache->get( $dp, $filemd5) };
				       warn "get filecache fail: $@" if $@;
			       }

			       if( -f $dp )
			       {
                       my $x = eval{ MYDan::Util::FastMD5->hexdigest( $dp ) };
                       if( $x && $filemd5 && $x eq $filemd5 )
                       {
                           die "chmod fail\n" if $run{chmod} && ! chmod oct($run{chmod}), $dp;
                           if( $run{chown} )
                           {
                               die "get $run{chown} uid fail\n" unless my @pw = getpwnam $run{chown};
                               die "chown fail\n" unless chown @pw[2,3], $dp;
                           }
                           undef $hdl; $cv->send; $ok = $size;
                       }
			       }

			       $percent->renew( $size )->add( length $keepalive{cont}  );
                               syswrite( $TEMP, delete $keepalive{cont} );
                               $keepalive{save} = 1;
                           }
                       }

lib/MYDan/Agent/Load.pm  view on Meta::CPAN

    truncate $TEMP, $size;

    unless( $filemd5 eq MYDan::Util::FastMD5->hexdigest( $temp ) )
    {
        unlink $temp;
        die "md5 nomatch\n";
    }

   
    die "chmod fail\n" if$run{chmod} && ! chmod oct($run{chmod}), $temp;
    if( $run{chown} )
    {
        die "get $run{chown} uid fail\n" unless my @pw = getpwnam $run{chown};
	die "chown fail\n" unless chown @pw[2,3], $temp;
    }

    my $dir = File::Basename::dirname( $dp );
    unless( -d $dir )
    {
        die "mkdir dir fail\n" if system "mkdir -p '$dir'";
    }
    
    die "dst path error\n"  if -e $dp && ! -f $dp;
 

lib/MYDan/Agent/Mrsync.pm  view on Meta::CPAN


        eval{
	    if( $queryx )
	    {
                my $load = [ $sp ];
                $load = Compress::Zlib::compress( YAML::XS::Dump $load );
                $load = 'data:' . length( $load ) . ':'. $load;
                $load .= $queryx->{load};


                my $dl =  +{ load => $load, src => $src, port => $agent{port}, sp => $sp, dp => $dp, map{ $_ => $param{$_} }qw( chown chmod cc ) };
                my $download = Compress::Zlib::compress( YAML::XS::Dump $dl );
                $download = 'data:' . length( $download ) . ':'. $download;
                $download .= $queryx->{download};

                my %query = ( 
                    argv => $dl,
                    code => 'download', map{ $_ => $param{$_} }qw( user sudo env )
                );

	        %result = MYDan::Agent::Client->new(

lib/MYDan/Agent/Mrsync.pm  view on Meta::CPAN

                    code => 'load', map{ $_ => $param{$_} }qw( user sudo )
                );
                $load{node} = [ $src ] if $isc;

                my $load = MYDan::Agent::Query->dump(\%load);
                eval{ $load = MYDan::API::Agent->new()->encryption( $load ) if $isc };
                die "encryption fail:$@" if $@;


                my %query = ( 
                    argv => +{ load => $load, src => $src, port => $agent{port}, sp => $sp, dp => $dp, map{ $_ => $param{$_} }qw( chown chmod cc ) },
	            code => 'download', map{ $_ => $param{$_} }qw( user sudo env )
                );

	        %result = MYDan::Agent::Client->new(
	                $dst
	            )->run( %agent, query => \%query, timeout => $param{timeout} );

            }

            my $result = $result{$dst}||'';

lib/MYDan/Util/File.pm  view on Meta::CPAN

 backup: back up original file

=cut
sub commit
{
    my ( $self, %param ) = splice @_;
    my $path = $param{path} || $self->{path}; $path = readlink if -l $path;
    my $temp = $self->{temp};
    my $error = "$temp -> $path: failed to";

    confess "$error chown" unless chown @$self{ qw( uid gid ) }, $temp;
    confess "$error chmod" unless chmod $self->{mode}, $temp;

    system "cp $path $path.bk" if $param{backup} && -e $path;
    confess "$error mv" if system "mv $temp $path";
    return $self;
}

sub DESTROY
{
    my $self = shift;



( run in 1.098 second using v1.01-cache-2.11-cpan-71847e10f99 )