On Sat, Nov 16, 2019 at 04:03:45PM +0000, Olivier Cherrier wrote: > > Hi, > > Here is an update to version 1.7 for sysutils/p5-Rex. > All the patches have to be dropped since I managed to integrate them > upstream. > > Thanks for tests / comments / import.
Nice to see upstream picking up the patches! I do see that it *thinks* it is missing some dependencies, although tests pass anyway so I'm not quite sure, maybe they just weren't removed from the Makefile.PL. Warning: prerequisite AWS::Signature4 0 not found. Warning: prerequisite IO::Pty 0 not found. Warning: prerequisite Parallel::ForkManager 0 not found. Warning: prerequisite String::Escape 0 not found. But, since it seems to work without, I won't dig into it too far. OK afresh1@ > > Best > > -- > Olivier Cherrier > mailto:o...@symacx.com > Index: sysutils/p5-Rex/Makefile > =================================================================== > RCS file: /data/clients/OpenBSD_cvsync/ports/sysutils/p5-Rex/Makefile,v > retrieving revision 1.2 > diff -u -r1.2 Makefile > --- sysutils/p5-Rex/Makefile 12 Jul 2019 21:02:26 -0000 1.2 > +++ sysutils/p5-Rex/Makefile 16 Nov 2019 15:59:11 -0000 > @@ -1,9 +1,9 @@ > # $OpenBSD: Makefile,v 1.2 2019/07/12 21:02:26 sthen Exp $ > > -COMMENT= perl-based deployment and configuration management > +COMMENT= the friendly automation framework > > -CPAN_AUTHOR= JFRIED > -DISTNAME= Rex-1.6.0 > +CPAN_AUTHOR= FERKI > +DISTNAME= Rex-1.7.0 > > CATEGORIES= sysutils > > Index: sysutils/p5-Rex/distinfo > =================================================================== > RCS file: /data/clients/OpenBSD_cvsync/ports/sysutils/p5-Rex/distinfo,v > retrieving revision 1.1.1.1 > diff -u -r1.1.1.1 distinfo > --- sysutils/p5-Rex/distinfo 21 Feb 2019 04:54:50 -0000 1.1.1.1 > +++ sysutils/p5-Rex/distinfo 16 Nov 2019 15:59:11 -0000 > @@ -1,2 +1,2 @@ > -SHA256 (Rex-1.6.0.tar.gz) = HDXFpIAYIFvFQNDMHRH8KkdXmxMZJilAQSuiuDckWdY= > -SIZE (Rex-1.6.0.tar.gz) = 331330 > +SHA256 (Rex-1.7.0.tar.gz) = vKD9KNkVd5iP9ScELtDk5hvsJsHJAGLjw8O/PoV7GDQ= > +SIZE (Rex-1.7.0.tar.gz) = 315479 > Index: sysutils/p5-Rex/patches/patch-lib_Rex_Commands_User_pm > =================================================================== > RCS file: > /data/clients/OpenBSD_cvsync/ports/sysutils/p5-Rex/patches/patch-lib_Rex_Commands_User_pm,v > retrieving revision 1.1.1.1 > diff -u -r1.1.1.1 patch-lib_Rex_Commands_User_pm > --- sysutils/p5-Rex/patches/patch-lib_Rex_Commands_User_pm 21 Feb 2019 > 04:54:50 -0000 1.1.1.1 > +++ sysutils/p5-Rex/patches/patch-lib_Rex_Commands_User_pm 16 Nov 2019 > 15:59:11 -0000 > @@ -1,31 +0,0 @@ > -$OpenBSD: patch-lib_Rex_Commands_User_pm,v 1.1.1.1 2019/02/21 04:54:50 > afresh1 Exp $ > - > -Index: lib/Rex/Commands/User.pm > ---- lib/Rex/Commands/User.pm.orig > -+++ lib/Rex/Commands/User.pm > -@@ -67,6 +67,7 @@ Manage user account. > - comment => 'User Account', > - expire => '2011-05-30', > - groups => [ 'root', '...' ], > -+ login_class => 'staff', # on OpenBSD > - password => 'blahblah', > - crypt_password => '*', # on Linux, OpenBSD and NetBSD > - system => 1, > -@@ -273,7 +274,7 @@ sub delete_user { > - =head2 lock_password($user) > - > - Lock the password of a user account. Currently this is only > --available on Linux (see passwd --lock). > -+available on Linux (see passwd --lock) and OpenBSD. > - > - =cut > - > -@@ -284,7 +285,7 @@ sub lock_password { > - =head2 unlock_password($user) > - > - Unlock the password of a user account. Currently this is only > --available on Linux (see passwd --unlock). > -+available on Linux (see passwd --unlock) and OpenBSD. > - > - =cut > - > Index: sysutils/p5-Rex/patches/patch-lib_Rex_Interface_Shell_pm > =================================================================== > RCS file: > /data/clients/OpenBSD_cvsync/ports/sysutils/p5-Rex/patches/patch-lib_Rex_Interface_Shell_pm,v > retrieving revision 1.1.1.1 > diff -u -r1.1.1.1 patch-lib_Rex_Interface_Shell_pm > --- sysutils/p5-Rex/patches/patch-lib_Rex_Interface_Shell_pm 21 Feb 2019 > 04:54:50 -0000 1.1.1.1 > +++ sysutils/p5-Rex/patches/patch-lib_Rex_Interface_Shell_pm 16 Nov 2019 > 15:59:11 -0000 > @@ -1,15 +0,0 @@ > -$OpenBSD: patch-lib_Rex_Interface_Shell_pm,v 1.1.1.1 2019/02/21 04:54:50 > afresh1 Exp $ > - > -Index: lib/Rex/Interface/Shell.pm > ---- lib/Rex/Interface/Shell.pm.orig > -+++ lib/Rex/Interface/Shell.pm > -@@ -17,7 +17,8 @@ my %SHELL_PROVIDER = ( > - ash => "Rex::Interface::Shell::Ash", > - bash => "Rex::Interface::Shell::Bash", > - csh => "Rex::Interface::Shell::Csh", > -- idrac => "Rex::Interface::Shell::Idrac", > -+ # idrac triggers a weird "version: not found" command. > -+ # idrac => "Rex::Interface::Shell::Idrac", > - ksh => "Rex::Interface::Shell::Ksh", > - sh => "Rex::Interface::Shell::Sh", > - tcsh => "Rex::Interface::Shell::Tcsh", > Index: sysutils/p5-Rex/patches/patch-lib_Rex_Pkg_Base_pm > =================================================================== > RCS file: > /data/clients/OpenBSD_cvsync/ports/sysutils/p5-Rex/patches/patch-lib_Rex_Pkg_Base_pm,v > retrieving revision 1.1.1.1 > diff -u -r1.1.1.1 patch-lib_Rex_Pkg_Base_pm > --- sysutils/p5-Rex/patches/patch-lib_Rex_Pkg_Base_pm 21 Feb 2019 04:54:50 > -0000 1.1.1.1 > +++ sysutils/p5-Rex/patches/patch-lib_Rex_Pkg_Base_pm 16 Nov 2019 15:59:11 > -0000 > @@ -1,22 +0,0 @@ > -$OpenBSD: patch-lib_Rex_Pkg_Base_pm,v 1.1.1.1 2019/02/21 04:54:50 afresh1 > Exp $ > - > -Index: lib/Rex/Pkg/Base.pm > ---- lib/Rex/Pkg/Base.pm.orig > -+++ lib/Rex/Pkg/Base.pm > -@@ -63,6 +63,7 @@ sub update { > - my ( $self, $pkg, $option ) = @_; > - > - my $version = $option->{'version'} || ''; > -+ my $env = $option->{'env'} || (); > - > - Rex::Logger::debug( "Installing $pkg" . ( $version ? "-$version" : "" ) ); > - my $cmd = sprintf $self->{commands}->{install}, $pkg; > -@@ -72,7 +73,7 @@ sub update { > - $option->{version}; > - } > - > -- my $f = i_run $cmd, fail_ok => 1; > -+ my $f = i_run $cmd, fail_ok => 1, env => $env; > - > - unless ( $? == 0 ) { > - Rex::Logger::info( "Error installing $pkg.", "warn" ); > Index: sysutils/p5-Rex/patches/patch-lib_Rex_Pkg_OpenBSD_pm > =================================================================== > RCS file: > /data/clients/OpenBSD_cvsync/ports/sysutils/p5-Rex/patches/patch-lib_Rex_Pkg_OpenBSD_pm,v > retrieving revision 1.1.1.1 > diff -u -r1.1.1.1 patch-lib_Rex_Pkg_OpenBSD_pm > --- sysutils/p5-Rex/patches/patch-lib_Rex_Pkg_OpenBSD_pm 21 Feb 2019 > 04:54:50 -0000 1.1.1.1 > +++ sysutils/p5-Rex/patches/patch-lib_Rex_Pkg_OpenBSD_pm 16 Nov 2019 > 15:59:11 -0000 > @@ -1,68 +0,0 @@ > -$OpenBSD: patch-lib_Rex_Pkg_OpenBSD_pm,v 1.1.1.1 2019/02/21 04:54:50 afresh1 > Exp $ > - > -Index: lib/Rex/Pkg/OpenBSD.pm > ---- lib/Rex/Pkg/OpenBSD.pm.orig > -+++ lib/Rex/Pkg/OpenBSD.pm > -@@ -11,18 +11,58 @@ use warnings; > - > - our $VERSION = '1.6.0'; # VERSION > - > --use Rex::Pkg::NetBSD; > -+use Rex::Helper::Run; > -+use Rex::Commands::File; > -+use Rex::Pkg::Base; > -+use base qw(Rex::Pkg::Base); > - > --use base qw(Rex::Pkg::NetBSD); > -- > - sub new { > - my $that = shift; > - my $proto = ref($that) || $that; > -- my $self = $that->SUPER::new(@_); > -+ my $self = $proto->SUPER::new(@_); > - > - bless( $self, $proto ); > - > -+ $self->{commands} = { > -+ install => '/usr/sbin/pkg_add %s', > -+ install_version => '/usr/sbin/pkg_add %s-%s', > -+ remove => '/usr/sbin/pkg_delete %s', > -+ }; > -+ > - return $self; > -+} > -+ > -+sub remove { > -+ my ( $self, $pkg ) = @_; > -+ > -+ my ($pkg_found) = grep { $_->{"name"} eq "$pkg" } $self->get_installed(); > -+ my $pkg_version = $pkg_found->{"version"}; > -+ > -+ return $self->SUPER::remove("$pkg-$pkg_version"); > -+} > -+ > -+sub get_installed { > -+ my ($self) = @_; > -+ > -+ my @lines = i_run "/usr/sbin/pkg_info"; > -+ > -+ my @pkg; > -+ > -+ for my $line (@lines) { > -+ my ( $pkg_name_v, $descr ) = split( /\s/, $line, 2 ); > -+ > -+ my ( $pkg_name, $pkg_version ) = ( $pkg_name_v =~ m/^(.*)-(.*?)$/ ); > -+ > -+ push( > -+ @pkg, > -+ { > -+ name => $pkg_name, > -+ version => $pkg_version, > -+ } > -+ ); > -+ } > -+ > -+ return @pkg; > - } > - > - 1; > Index: sysutils/p5-Rex/patches/patch-lib_Rex_User_OpenBSD_pm > =================================================================== > RCS file: > /data/clients/OpenBSD_cvsync/ports/sysutils/p5-Rex/patches/patch-lib_Rex_User_OpenBSD_pm,v > retrieving revision 1.1.1.1 > diff -u -r1.1.1.1 patch-lib_Rex_User_OpenBSD_pm > --- sysutils/p5-Rex/patches/patch-lib_Rex_User_OpenBSD_pm 21 Feb 2019 > 04:54:50 -0000 1.1.1.1 > +++ sysutils/p5-Rex/patches/patch-lib_Rex_User_OpenBSD_pm 16 Nov 2019 > 15:59:11 -0000 > @@ -1,186 +0,0 @@ > -$OpenBSD: patch-lib_Rex_User_OpenBSD_pm,v 1.1.1.1 2019/02/21 04:54:50 > afresh1 Exp $ > - > -Index: lib/Rex/User/OpenBSD.pm > ---- lib/Rex/User/OpenBSD.pm.orig > -+++ lib/Rex/User/OpenBSD.pm > -@@ -14,14 +14,16 @@ our $VERSION = '1.6.0'; # VERSION > - use Rex::Logger; > - use Rex::Commands::MD5; > - use Rex::Helper::Run; > -+use Rex::Helper::Encode; > - use Rex::Commands::Fs; > --use Rex::User::NetBSD; > - use Rex::Interface::File; > - use Rex::Interface::Fs; > - use Rex::Interface::Exec; > -+use Rex::User::Linux; > - use Rex::Helper::Path; > -+use JSON::MaybeXS; > - > --use base qw(Rex::User::NetBSD); > -+use base qw(Rex::User::Linux); > - > - sub new { > - my $that = shift; > -@@ -40,7 +42,8 @@ sub create_user { > - > - my $old_pw_md5 = md5("/etc/passwd"); > - > -- my $uid = $self->get_uid($user); > -+ my $uid = $self->get_uid($user); > -+ my %user_info = $self->get_user($user); > - my $should_create_home; > - > - if ( $data->{'create_home'} || $data->{'create-home'} ) { > -@@ -70,7 +73,11 @@ sub create_user { > - } > - > - if ( exists $data->{uid} ) { > -- $cmd .= " -u " . $data->{uid}; > -+ > -+ # On OpenBSD, "usermod -u n login" fails when the user login > -+ # has already n as userid. So skip it from the command arg > -+ # when the uid is already correct. > -+ $cmd .= " -u " . $data->{uid} unless $data->{uid} == $user_info{uid}; > - } > - > - if ( exists $data->{home} ) { > -@@ -93,6 +100,10 @@ sub create_user { > - $cmd .= " -e '" . $data->{expire} . "'"; > - } > - > -+ if ( exists $data->{login_class} ) { > -+ $cmd .= " -L '" . $data->{login_class} . "'"; > -+ } > -+ > - if ( exists $data->{groups} ) { > - my @groups = @{ $data->{groups} }; > - my $pri_group = shift @groups; > -@@ -170,6 +181,127 @@ sub create_user { > - ret => $self->get_uid($user), > - }, > - ; > -+ } > -+ > -+} > -+ > -+sub get_user { > -+ my ( $self, $user ) = @_; > -+ > -+ Rex::Logger::debug("Getting information for $user"); > -+ my $rnd_file = get_tmp_file; > -+ my $fh = Rex::Interface::File->create; > -+ my $script = q| > -+ unlink $0; > -+ print to_json([ getpwnam($ARGV[0]) ]); > -+ |; > -+ $fh->open( ">", $rnd_file ); > -+ $fh->write($script); > -+ $fh->write( func_to_json() ); > -+ $fh->close; > -+ > -+ my $data_str = i_run "perl $rnd_file $user", fail_ok => 1; > -+ if ( $? != 0 ) { > -+ die("Error getting user information for $user"); > -+ } > -+ > -+ my $data = decode_json($data_str); > -+ > -+ return ( > -+ name => $data->[0], > -+ password => $data->[1], > -+ uid => $data->[2], > -+ gid => $data->[3], > -+ pwchange => $data->[4], > -+ class => $data->[5], > -+ comment => $data->[6], > -+ home => $data->[7], > -+ shell => $data->[8], > -+ expire => $data->[9], > -+ ); > -+} > -+ > -+sub lock_password { > -+ my ( $self, $user ) = @_; > -+ > -+ # Is the password already locked? > -+ my $result = i_run "getent passwd $user", fail_ok => 1; > -+ > -+ if ( $result !~ /^$user.*$/ ) { > -+ die "Unexpected result from getent: $result"; > -+ } > -+ elsif ( $result =~ /^$user.*-$/ ) { > -+ > -+ # Already locked > -+ return { changed => 0 }; > -+ } > -+ else { > -+ my $ret = i_run "usermod -Z $user", fail_ok => 1; > -+ if ( $? != 0 ) { > -+ die("Error locking account $user: $ret"); > -+ } > -+ return { > -+ changed => 1, > -+ ret => $ret, > -+ }; > -+ } > -+} > -+ > -+sub unlock_password { > -+ my ( $self, $user ) = @_; > -+ > -+ # Is the password already unlocked? > -+ my $result = i_run "getent passwd $user", fail_ok => 1; > -+ > -+ if ( $result !~ /^$user.*$/ ) { > -+ die "Unexpected result from getent: $result"; > -+ } > -+ elsif ( $result !~ /^$user.*-$/ ) { > -+ > -+ # Already unlocked > -+ return { changed => 0 }; > -+ } > -+ else { > -+ my $ret = i_run "usermod -U $user", sub { @_ }, fail_ok => 1; > -+ if ( $? != 0 ) { > -+ die("Error unlocking account $user: $ret"); > -+ } > -+ return { > -+ changed => 1, > -+ ret => $ret, > -+ }; > -+ } > -+} > -+ > -+sub rm_user { > -+ my ( $self, $user, $data ) = @_; > -+ > -+ Rex::Logger::debug("Removing user $user"); > -+ > -+ my %user_info = $self->get_user($user); > -+ > -+ my $cmd = "userdel"; > -+ > -+ if ( exists $data->{delete_home} ) { > -+ $cmd .= " -r"; > -+ } > -+ > -+ my $output = i_run $cmd . " " . $user, fail_ok => 1; > -+ if ( $? == 67 ) { > -+ Rex::Logger::info( "Cannot delete user $user (no such user)", "warn" ); > -+ } > -+ elsif ( $? != 0 ) { > -+ die("Error deleting user $user ($output)"); > -+ } > -+ > -+ if ( exists $data->{delete_home} && is_dir( $user_info{home} ) ) { > -+ Rex::Logger::debug( > -+ "userdel doesn't delete home directory. removing it now by hand..."); > -+ rmdir $user_info{home}; > -+ } > -+ > -+ if ( $? != 0 ) { > -+ die( "Error removing " . $user_info{home} ); > - } > - > - } -- andrew - http://afresh1.com Hey, I think I see a barn up ahead. -- The American Astronaut