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

<div><br></div><div>Of course, we can use "vzctl mount", but then functionšset_rootpasswd must be rewrited to use "vzctl mount" for simfs too.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On Fri, Oct 25, 2013 at 7:25 PM, Dietmar Maurer <span dir="ltr"><<a href="mailto:dietmar@proxmox.com" target="_blank">dietmar@proxmox.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

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