[pve-devel] [PATCH][pve-manager] Changes set_userpasswd method

Игорь Шестаков shine at selectel.ru
Fri Oct 25 18:19:42 CEST 2013


Yes, it is. But later we can use ploop_mount for other purposes. Such as:
changing fs type, create partition etc.
And if we use "vzctl mount", we must pass "VE_ROOT" to function.

Of course, we can use "vzctl mount", but then function set_rootpasswd must
be rewrited to use "vzctl mount" for simfs too.


On Fri, Oct 25, 2013 at 7:25 PM, Dietmar Maurer <dietmar at proxmox.com> wrote:

> Sorry if this is a stupid question, but does 'vzctl mount' does not work
> with ploop?
>
> > -----Original Message-----
> > From: Игорь Шестаков [mailto:shine at selectel.ru]
> > Sent: Freitag, 25. Oktober 2013 15:37
> > To: Dietmar Maurer
> > Cc: pve-devel
> > Subject: Re: [pve-devel] [PATCH][pve-manager] Changes set_userpasswd
> > method
> >
> > Done
> >
> > diff --git a/PVE/API2/OpenVZ.pm b/PVE/API2/OpenVZ.pm
> > index 06fe60b..eeba1a2 100644
> > --- a/PVE/API2/OpenVZ.pm
> > +++ b/PVE/API2/OpenVZ.pm
> > @@ -413,7 +413,7 @@ __PACKAGE__->register_method({
> >
> >               # hack: vzctl '--userpasswd' starts the CT, but we want
> >               # to avoid that for create
> > -             PVE::OpenVZ::set_rootpasswd($private, $password)
> > +             PVE::OpenVZ::set_rootpasswd($private, $password, $vmid)
> >                   if defined($password);
> >           }
> >
> >
> >
> > diff --git a/PVE/OpenVZ.pm b/PVE/OpenVZ.pm
> > index a16d4fc..ea0717f 100644
> > --- a/PVE/OpenVZ.pm
> > +++ b/PVE/OpenVZ.pm
> > @@ -1243,24 +1243,55 @@ sub replacepw {
> >      }
> >  }
> >
> > +sub ploop_mount {
> > +    my ($rootdisk, $vmid) = @_;
> > +     my $fstype = "ext4";
> > +     my $tmpdir = "/tmp/$vmid";
> > +    if (-f $rootdisk) {
> > +        #create tmp dir
> > +        mkdir $tmpdir;
> > +             #mount image to tmpdir
> > +        my $cmd = ['/usr/sbin/ploop', 'mount', '-t', $fstype, '-m',
> $tmpdir,
> > $rootdisk];
> > +        eval { PVE::Tools::run_command($cmd); };
> > +        my $err = $?;
> > +        die "cannot mount $rootdisk" if ($err ne 0);
> > +        return $tmpdir;
> > +    }
> > +}
> > +
> > +sub ploop_umount {
> > +        my $ploopdisk = shift;
> > +        my $cmd = ['/usr/sbin/ploop', 'umount', $ploopdisk];
> > +        eval { PVE::Tools::run_command($cmd); };
> > +        my $err = $?;
> > +        die "cannot umount $ploopdisk" if ($err ne 0);
> > +}
> > +
> >  sub set_rootpasswd {
> > -    my ($privatedir, $opt_rootpasswd) = @_;
> > +    my ($privatedir, $opt_rootpasswd, $vmid) = @_;
> > +
> > +    my $rootdisk = "$privatedir/root.hdd/root.hdd";
> > +    my ($pwfile, $shadow, $tmpdir);
> >
> > -    my $pwfile = "$privatedir/etc/passwd";
> > +    $tmpdir = ploop_mount($rootdisk, $vmid) if (-f $rootdisk);
> > +    $privatedir = $tmpdir if defined($tmpdir);
> > +
> > +    $pwfile = "$privatedir/etc/passwd";
> >
> >      return if ! -f $pwfile;
> >
> > -    my $shadow = "$privatedir/etc/shadow";
> > +    $shadow = "$privatedir/etc/shadow";
> >
> >      if ($opt_rootpasswd !~ m/^\$/) {
> > -     my $time = substr (Digest::SHA::sha1_base64 (time), 0, 8);
> > -     $opt_rootpasswd = crypt(encode("utf8", $opt_rootpasswd),
> > "\$1\$$time\$");
> > +                my $time = substr (Digest::SHA::sha1_base64 (time), 0,
> 8);
> > +                $opt_rootpasswd = crypt(encode("utf8", $opt_rootpasswd),
> > "\$1\$$time\$");
> >      };
> >
> >      if (-f $shadow) {
> > -     replacepw ($shadow, $opt_rootpasswd);
> > -     replacepw ($pwfile, 'x');
> > +                replacepw ($shadow, $opt_rootpasswd);
> > +                replacepw ($pwfile, 'x');
> >      } else {
> > -     replacepw ($pwfile, $opt_rootpasswd);
> > +                replacepw ($pwfile, $opt_rootpasswd);
> >      }
> > -}
> > +    ploop_umount($rootdisk) if (-f $rootdisk);
> > +}
> > \ No newline at end of file
> >
> >
> > On Fri, Oct 25, 2013 at 11:44 AM, Dietmar Maurer <dietmar at proxmox.com>
> > wrote:
> > > Previous solution work only with simfs.
> > > If we use ploop, we need to mount VM image and then change password.
> > >
> > > Why we can't solve this with simple, built-in solution?
> > Because that made many troubles. Starting a container at create stage
> > is really unexpected and not what we want to do (for example many
> prebuild
> > appliances do special things a first boot).
> >
> > But maybe you can find another solution, i.e. mount ploop first?
> >
> >
> >
> >
> > --
> > С уважением, Шестаков Игорь
> > Сеть дата-центров "Селектел"
>



-- 
С уважением, Шестаков Игорь
Сеть дата-центров "Селектел"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.proxmox.com/pipermail/pve-devel/attachments/20131025/fe309989/attachment.htm>


More information about the pve-devel mailing list