* [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