* [gentoo-portage-dev] [PATCH] emerge: check for writable /var/db/pkg (490732)
@ 2014-11-18 9:19 Zac Medico
2014-11-18 10:57 ` Brian Dolbec
2014-11-19 4:48 ` [gentoo-portage-dev] [PATCH v2] " Zac Medico
0 siblings, 2 replies; 6+ messages in thread
From: Zac Medico @ 2014-11-18 9:19 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Zac Medico
If there are packages to be merged or unmerge, then bail out early if
/var/db/pkg is not writable.
X-Gentoo-Bug: 490732
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=490732
---
pym/_emerge/actions.py | 21 +++++++++++++++++++++
pym/portage/dbapi/vartree.py | 9 +++++++++
2 files changed, 30 insertions(+)
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 48b0826..4a96a22 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -428,6 +428,21 @@ def action_build(settings, trees, mtimedb,
# least show warnings about missed updates and such.
mydepgraph.display_problems()
+ if not Scheduler._opts_no_self_update.intersection(myopts):
+
+ eroots = set()
+ for x in mydepgraph.altlist():
+ if isinstance(x, Package) and x.operation == "merge":
+ eroots.add(x.root)
+
+ for eroot in eroots:
+ if not trees[eroot]["vartree"].dbapi.writable:
+ writemsg_level("!!! %s\n" %
+ _("Read-only file system: %s") %
+ trees[eroot]["vartree"].dbapi._dbroot,
+ level=logging.ERROR, noiselevel=-1)
+ return 1
+
if ("--resume" in myopts):
favorites=mtimedb["resume"]["favorites"]
@@ -2842,6 +2857,12 @@ def action_uninstall(settings, trees, ldpath_mtimes,
if action == 'deselect':
return action_deselect(settings, trees, opts, valid_atoms)
+ if not vardb.writable:
+ writemsg_level("!!! %s\n" %
+ _("Read-only file system: %s") % vardb._dbroot,
+ level=logging.ERROR, noiselevel=-1)
+ return 1
+
# Use the same logic as the Scheduler class to trigger redirection
# of ebuild pkg_prerm/postrm phase output to logs as appropriate
# for options such as --jobs, --quiet and --quiet-build.
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 0fd1bd9..64b0ff6 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -33,6 +33,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
'portage.util.env_update:env_update',
'portage.util.listdir:dircache,listdir',
'portage.util.movefile:movefile',
+ 'portage.util.path:first_existing',
'portage.util.writeable_check:get_ro_checker',
'portage.util._dyn_libs.PreservedLibsRegistry:PreservedLibsRegistry',
'portage.util._dyn_libs.LinkageMapELF:LinkageMapELF@LinkageMap',
@@ -189,6 +190,14 @@ class vardbapi(dbapi):
self._cached_counter = None
@property
+ def writable(self):
+ """
+ @rtype: bool
+ @return: True if var/db/pkg is writable, False otherwise
+ """
+ return os.access(first_existing(self._dbroot), os.W_OK)
+
+ @property
def root(self):
warnings.warn("The root attribute of "
"portage.dbapi.vartree.vardbapi"
--
2.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [gentoo-portage-dev] [PATCH] emerge: check for writable /var/db/pkg (490732)
2014-11-18 9:19 [gentoo-portage-dev] [PATCH] emerge: check for writable /var/db/pkg (490732) Zac Medico
@ 2014-11-18 10:57 ` Brian Dolbec
2014-11-18 16:42 ` Zac Medico
2014-11-19 4:48 ` [gentoo-portage-dev] [PATCH v2] " Zac Medico
1 sibling, 1 reply; 6+ messages in thread
From: Brian Dolbec @ 2014-11-18 10:57 UTC (permalink / raw
To: gentoo-portage-dev
On Tue, 18 Nov 2014 01:19:01 -0800
Zac Medico <zmedico@gentoo.org> wrote:
> If there are packages to be merged or unmerge, then bail out early if
> /var/db/pkg is not writable.
>
...
> diff --git a/pym/portage/dbapi/vartree.py
> b/pym/portage/dbapi/vartree.py index 0fd1bd9..64b0ff6 100644
> --- a/pym/portage/dbapi/vartree.py
> +++ b/pym/portage/dbapi/vartree.py
> @@ -33,6 +33,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
> 'portage.util.env_update:env_update',
> 'portage.util.listdir:dircache,listdir',
> 'portage.util.movefile:movefile',
> + 'portage.util.path:first_existing',
> 'portage.util.writeable_check:get_ro_checker',
^^^^^^^^^^^^^^^^^^^^^^^^
That's what this was suppose to fix I thought
> 'portage.util._dyn_libs.PreservedLibsRegistry:PreservedLibsRegistry',
> 'portage.util._dyn_libs.LinkageMapELF:LinkageMapELF@LinkageMap',
> @@ -189,6 +190,14 @@ class vardbapi(dbapi):
> self._cached_counter = None
>
> @property
> + def writable(self):
> + """
> + @rtype: bool
> + @return: True if var/db/pkg is writable, False
> otherwise
> + """
> + return os.access(first_existing(self._dbroot),
> os.W_OK) +
> + @property
> def root(self):
> warnings.warn("The root attribute of "
> "portage.dbapi.vartree.vardbapi"
--
Brian Dolbec <dolsen>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [gentoo-portage-dev] [PATCH] emerge: check for writable /var/db/pkg (490732)
2014-11-18 10:57 ` Brian Dolbec
@ 2014-11-18 16:42 ` Zac Medico
0 siblings, 0 replies; 6+ messages in thread
From: Zac Medico @ 2014-11-18 16:42 UTC (permalink / raw
To: gentoo-portage-dev
On 11/18/2014 02:57 AM, Brian Dolbec wrote:
> On Tue, 18 Nov 2014 01:19:01 -0800
> Zac Medico <zmedico@gentoo.org> wrote:
>
>> If there are packages to be merged or unmerge, then bail out early if
>> /var/db/pkg is not writable.
>>
> ...
>
>> diff --git a/pym/portage/dbapi/vartree.py
>> b/pym/portage/dbapi/vartree.py index 0fd1bd9..64b0ff6 100644
>> --- a/pym/portage/dbapi/vartree.py
>> +++ b/pym/portage/dbapi/vartree.py
>> @@ -33,6 +33,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
>> 'portage.util.env_update:env_update',
>> 'portage.util.listdir:dircache,listdir',
>> 'portage.util.movefile:movefile',
>> + 'portage.util.path:first_existing',
>> 'portage.util.writeable_check:get_ro_checker',
>
> ^^^^^^^^^^^^^^^^^^^^^^^^
> That's what this was suppose to fix I thought
The writeable_check module is designed to check write access for the
files to be merged, and it's only used just prior to merge, when the
list of files is known.
The vardbapi.writable check that I have implemented provides a much
earlier warning, before anything has even been built.
--
Thanks,
Zac
^ permalink raw reply [flat|nested] 6+ messages in thread
* [gentoo-portage-dev] [PATCH v2] emerge: check for writable /var/db/pkg (490732)
2014-11-18 9:19 [gentoo-portage-dev] [PATCH] emerge: check for writable /var/db/pkg (490732) Zac Medico
2014-11-18 10:57 ` Brian Dolbec
@ 2014-11-19 4:48 ` Zac Medico
2014-11-19 15:49 ` [gentoo-portage-dev] [PATCH v3] " Zac Medico
1 sibling, 1 reply; 6+ messages in thread
From: Zac Medico @ 2014-11-19 4:48 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Zac Medico
If there are packages to be merged or unmerge, then bail out early
if /var/db/pkg is not writable (in order to avoid a fatal EROFS error
which would otherwise occur later on).
In contrast to the writeable_check module, which operates on files just
before they are merged, the new vardbapi.writable check is performed
before anything has been built (much earlier).
X-Gentoo-Bug: 490732
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=490732
---
PATCH v2 only has an updated commit message which explains the
relationship to the writeable_check module.
pym/_emerge/actions.py | 21 +++++++++++++++++++++
pym/portage/dbapi/vartree.py | 9 +++++++++
2 files changed, 30 insertions(+)
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 48b0826..4a96a22 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -428,6 +428,21 @@ def action_build(settings, trees, mtimedb,
# least show warnings about missed updates and such.
mydepgraph.display_problems()
+ if not Scheduler._opts_no_self_update.intersection(myopts):
+
+ eroots = set()
+ for x in mydepgraph.altlist():
+ if isinstance(x, Package) and x.operation == "merge":
+ eroots.add(x.root)
+
+ for eroot in eroots:
+ if not trees[eroot]["vartree"].dbapi.writable:
+ writemsg_level("!!! %s\n" %
+ _("Read-only file system: %s") %
+ trees[eroot]["vartree"].dbapi._dbroot,
+ level=logging.ERROR, noiselevel=-1)
+ return 1
+
if ("--resume" in myopts):
favorites=mtimedb["resume"]["favorites"]
@@ -2842,6 +2857,12 @@ def action_uninstall(settings, trees, ldpath_mtimes,
if action == 'deselect':
return action_deselect(settings, trees, opts, valid_atoms)
+ if not vardb.writable:
+ writemsg_level("!!! %s\n" %
+ _("Read-only file system: %s") % vardb._dbroot,
+ level=logging.ERROR, noiselevel=-1)
+ return 1
+
# Use the same logic as the Scheduler class to trigger redirection
# of ebuild pkg_prerm/postrm phase output to logs as appropriate
# for options such as --jobs, --quiet and --quiet-build.
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 0fd1bd9..64b0ff6 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -33,6 +33,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
'portage.util.env_update:env_update',
'portage.util.listdir:dircache,listdir',
'portage.util.movefile:movefile',
+ 'portage.util.path:first_existing',
'portage.util.writeable_check:get_ro_checker',
'portage.util._dyn_libs.PreservedLibsRegistry:PreservedLibsRegistry',
'portage.util._dyn_libs.LinkageMapELF:LinkageMapELF@LinkageMap',
@@ -189,6 +190,14 @@ class vardbapi(dbapi):
self._cached_counter = None
@property
+ def writable(self):
+ """
+ @rtype: bool
+ @return: True if var/db/pkg is writable, False otherwise
+ """
+ return os.access(first_existing(self._dbroot), os.W_OK)
+
+ @property
def root(self):
warnings.warn("The root attribute of "
"portage.dbapi.vartree.vardbapi"
--
2.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-portage-dev] [PATCH v3] emerge: check for writable /var/db/pkg (490732)
2014-11-19 4:48 ` [gentoo-portage-dev] [PATCH v2] " Zac Medico
@ 2014-11-19 15:49 ` Zac Medico
2014-11-19 19:12 ` Brian Dolbec
0 siblings, 1 reply; 6+ messages in thread
From: Zac Medico @ 2014-11-19 15:49 UTC (permalink / raw
To: gentoo-portage-dev; +Cc: Zac Medico
If there are packages to be merged or unmerge, then bail out early
if /var/db/pkg is not writable (in order to avoid a fatal EROFS error
which would otherwise occur later on). Behavior remains unchanged for
--pretend mode. For --ask mode, it will bail out just after the last
relevant --ask prompt.
In contrast to the writeable_check module, which operates on files just
before they are merged, the new vardbapi.writable check is performed
before anything has been built (much earlier).
X-Gentoo-Bug: 490732
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=490732
---
PATCH v3 fixes emerge --unmerge --pretend to succeed when /var/db/pkg
is not writable (--pretend actions may still be useful when operating
with a readonly filesystem).
pym/_emerge/actions.py | 15 +++++++++++++++
pym/_emerge/unmerge.py | 9 +++++++++
pym/portage/dbapi/vartree.py | 12 ++++++++++++
3 files changed, 36 insertions(+)
diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 48b0826..6f7dfe0 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -428,6 +428,21 @@ def action_build(settings, trees, mtimedb,
# least show warnings about missed updates and such.
mydepgraph.display_problems()
+ if not Scheduler._opts_no_self_update.intersection(myopts):
+
+ eroots = set()
+ for x in mydepgraph.altlist():
+ if isinstance(x, Package) and x.operation == "merge":
+ eroots.add(x.root)
+
+ for eroot in eroots:
+ if not trees[eroot]["vartree"].dbapi.writable:
+ writemsg_level("!!! %s\n" %
+ _("Read-only file system: %s") %
+ trees[eroot]["vartree"].dbapi._dbroot,
+ level=logging.ERROR, noiselevel=-1)
+ return 1
+
if ("--resume" in myopts):
favorites=mtimedb["resume"]["favorites"]
diff --git a/pym/_emerge/unmerge.py b/pym/_emerge/unmerge.py
index df29000..7f6d82a 100644
--- a/pym/_emerge/unmerge.py
+++ b/pym/_emerge/unmerge.py
@@ -10,6 +10,7 @@ import textwrap
import portage
from portage import os
from portage.dbapi._expand_new_virt import expand_new_virt
+from portage.localization import _
from portage.output import bold, colorize, darkgreen, green
from portage._sets import SETPREFIX
from portage._sets.base import EditablePackageSet
@@ -536,6 +537,7 @@ def unmerge(root_config, myopts, unmerge_action,
if "--pretend" in myopts:
#we're done... return
return os.EX_OK
+
if "--ask" in myopts:
uq = UserQuery(myopts)
if uq.query("Would you like to unmerge these packages?",
@@ -546,6 +548,13 @@ def unmerge(root_config, myopts, unmerge_action,
print("Quitting.")
print()
return 128 + signal.SIGINT
+
+ if not vartree.dbapi.writable:
+ writemsg_level("!!! %s\n" %
+ _("Read-only file system: %s") % vartree.dbapi._dbroot,
+ level=logging.ERROR, noiselevel=-1)
+ return 1
+
#the real unmerging begins, after a short delay unless we're raging....
if not unmerge_action == "rage-clean" and clean_delay and not autoclean:
countdown(int(settings["CLEAN_DELAY"]), ">>> Unmerging")
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 0fd1bd9..df031cd 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -33,6 +33,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
'portage.util.env_update:env_update',
'portage.util.listdir:dircache,listdir',
'portage.util.movefile:movefile',
+ 'portage.util.path:first_existing',
'portage.util.writeable_check:get_ro_checker',
'portage.util._dyn_libs.PreservedLibsRegistry:PreservedLibsRegistry',
'portage.util._dyn_libs.LinkageMapELF:LinkageMapELF@LinkageMap',
@@ -189,6 +190,17 @@ class vardbapi(dbapi):
self._cached_counter = None
@property
+ def writable(self):
+ """
+ Check if var/db/pkg is writable, or permissions are sufficient
+ to create it if it does not exist yet.
+ @rtype: bool
+ @return: True if var/db/pkg is writable or can be created,
+ False otherwise
+ """
+ return os.access(first_existing(self._dbroot), os.W_OK)
+
+ @property
def root(self):
warnings.warn("The root attribute of "
"portage.dbapi.vartree.vardbapi"
--
2.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [gentoo-portage-dev] [PATCH v3] emerge: check for writable /var/db/pkg (490732)
2014-11-19 15:49 ` [gentoo-portage-dev] [PATCH v3] " Zac Medico
@ 2014-11-19 19:12 ` Brian Dolbec
0 siblings, 0 replies; 6+ messages in thread
From: Brian Dolbec @ 2014-11-19 19:12 UTC (permalink / raw
To: gentoo-portage-dev
On Wed, 19 Nov 2014 07:49:00 -0800
Zac Medico <zmedico@gentoo.org> wrote:
> If there are packages to be merged or unmerge, then bail out early
> if /var/db/pkg is not writable (in order to avoid a fatal EROFS error
> which would otherwise occur later on). Behavior remains unchanged for
> --pretend mode. For --ask mode, it will bail out just after the last
> relevant --ask prompt.
>
> In contrast to the writeable_check module, which operates on files
> just before they are merged, the new vardbapi.writable check is
> performed before anything has been built (much earlier).
>
> X-Gentoo-Bug: 490732
> X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=490732
> ---
> PATCH v3 fixes emerge --unmerge --pretend to succeed when /var/db/pkg
> is not writable (--pretend actions may still be useful when operating
> with a readonly filesystem).
>
LGTM
--
Brian Dolbec <dolsen>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-11-19 19:12 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-18 9:19 [gentoo-portage-dev] [PATCH] emerge: check for writable /var/db/pkg (490732) Zac Medico
2014-11-18 10:57 ` Brian Dolbec
2014-11-18 16:42 ` Zac Medico
2014-11-19 4:48 ` [gentoo-portage-dev] [PATCH v2] " Zac Medico
2014-11-19 15:49 ` [gentoo-portage-dev] [PATCH v3] " Zac Medico
2014-11-19 19:12 ` Brian Dolbec
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox