Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 349757 - Portage fails to un emerge when a directory like /var/run is a tmpfs partition
Summary: Portage fails to un emerge when a directory like /var/run is a tmpfs partition
Status: VERIFIED FIXED
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Core (show other bugs)
Hardware: All Linux
: High minor (vote)
Assignee: Portage team
URL:
Whiteboard:
Keywords: InVCS
Depends on:
Blocks: 349307
  Show dependency tree
 
Reported: 2010-12-26 13:26 UTC by Robert Coffree
Modified: 2010-12-31 21:11 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Robert Coffree 2010-12-26 13:26:50 UTC
I have var/run on tmpfs, and this is backedup and restored from the kernel initscript.
Some packages cannot be removed or those that are emerged produce an error like  below when they attempt to change the permissions of the mount point. (The mount point itself on the root filesystem is immutable (ie. permissions cannot be changed).

>>> Unmerging sys-auth/policykit-0.9-r1...

 * Messages for package sys-auth/polkit-0.99-r1:

 * If you don't use GDM or KDM for logging in,
 * you must start your desktop environment (DE) as follows:
 * 	ck-launch-session $STARTGUI
 * Where $STARTGUI is a DE-starting command such as 'gnome-session'.
 * You should add this to your ~/.xinitrc if you use startx.
Traceback (most recent call last):
  File "/usr/bin/emerge", line 43, in <module>
    retval = emerge_main()
  File "/usr/lib64/portage/pym/_emerge/main.py", line 1700, in emerge_main
    myopts, myaction, myfiles, spinner)
  File "/usr/lib64/portage/pym/_emerge/actions.py", line 443, in action_build
    retval = mergetask.merge()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1158, in merge
    rval = self._merge()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1476, in _merge
    self._main_loop()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1618, in _main_loop
    self._poll_loop()
  File "/usr/lib64/portage/pym/_emerge/PollScheduler.py", line 138, in _poll_loop
    handler(f, event)
  File "/usr/lib64/portage/pym/_emerge/EbuildIpcDaemon.py", line 82, in _input_handler
    reply_hook()
  File "/usr/lib64/portage/pym/_emerge/AbstractEbuildProcess.py", line 149, in _exit_command_callback
    self.scheduler.schedule(self._reg_id, timeout=self._exit_timeout)
  File "/usr/lib64/portage/pym/_emerge/PollScheduler.py", line 232, in _schedule_wait
    handler(f, event)
  File "/usr/lib64/portage/pym/_emerge/SpawnProcess.py", line 203, in _output_handler
    self._unregister_if_appropriate(event)
  File "/usr/lib64/portage/pym/_emerge/AbstractPollTask.py", line 49, in _unregister_if_appropriate
    self.wait()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 41, in wait
    self._wait_hook()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 114, in _wait_hook
    self._exit_listener_stack.pop()(self)
  File "/usr/lib64/portage/pym/_emerge/EbuildPhase.py", line 215, in _post_phase_exit
    self.wait()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 41, in wait
    self._wait_hook()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 114, in _wait_hook
    self._exit_listener_stack.pop()(self)
  File "/usr/lib64/portage/pym/_emerge/TaskSequence.py", line 43, in _task_exit_handler
    self.wait()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 41, in wait
    self._wait_hook()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 114, in _wait_hook
    self._exit_listener_stack.pop()(self)
  File "/usr/lib64/portage/pym/_emerge/CompositeTask.py", line 105, in _default_final_exit
    return self.wait()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 41, in wait
    self._wait_hook()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 114, in _wait_hook
    self._exit_listener_stack.pop()(self)
  File "/usr/lib64/portage/pym/_emerge/EbuildBuild.py", line 240, in _build_exit
    self.wait()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 41, in wait
    self._wait_hook()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 114, in _wait_hook
    self._exit_listener_stack.pop()(self)
  File "/usr/lib64/portage/pym/_emerge/CompositeTask.py", line 105, in _default_final_exit
    return self.wait()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 41, in wait
    self._wait_hook()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 114, in _wait_hook
    self._exit_listener_stack.pop()(self)
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1455, in _build_exit
    self._schedule()
  File "/usr/lib64/portage/pym/_emerge/PollScheduler.py", line 52, in _schedule
    return self._schedule_tasks()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1652, in _schedule_tasks
    if q.schedule():
  File "/usr/lib64/portage/pym/_emerge/SequentialTaskQueue.py", line 55, in schedule
    task.start()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 23, in start
    self._start()
  File "/usr/lib64/portage/pym/_emerge/PackageMerge.py", line 43, in _start
    self.returncode = self.merge.merge()
  File "/usr/lib64/portage/pym/_emerge/MergeListItem.py", line 137, in merge
    uninstall.start()
  File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 23, in start
    self._start()
  File "/usr/lib64/portage/pym/_emerge/PackageUninstall.py", line 21, in _start
    writemsg_level=self._writemsg_level)
  File "/usr/lib64/portage/pym/_emerge/unmerge.py", line 501, in unmerge
    scheduler=scheduler)
  File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 4028, in unmerge
    retval = mylink.unmerge(ldpath_mtimes=ldpath_mtimes)
  File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 1546, in unmerge
    self._unmerge_pkgfiles(pkgfiles, others_in_slot)
  File "/usr/lib64/portage/pym/portage/dbapi/vartree.py", line 1984, in _unmerge_pkgfiles
    os.rmdir(obj)
  File "/usr/lib64/portage/pym/portage/__init__.py", line 226, in __call__
    rval = self._func(*wrapped_args, **wrapped_kwargs)
OSError: [Errno 1] Operation not permitted: '/var/run'


Reproducible: Always

Steps to Reproduce:
1. create a /var/run mount point that is unwritable
2. mount /var/run with a fs that is writable
3. emerge say polkit



Expected Results:  
A bit more graceful error handling when dealing with writable mounted partitions and non-writable mount points.
Comment 1 Jeroen Roovers (RETIRED) gentoo-dev 2010-12-27 17:48:33 UTC
Please paste your `emerge --info' output in a comment.
Comment 2 Robert Coffree 2010-12-27 17:51:30 UTC
As requested, sir:

emerge --info
Portage 2.1.9.26 (unavailable, gcc-4.5.1, glibc-2.12.1-r3, 2.6.36.2 x86_64)
=================================================================
System uname: Linux-2.6.36.2-x86_64-Intel-R-_Atom-TM-_CPU_N450_@_1.66GHz-with-gentoo-2.0.1
Timestamp of tree: Unknown
dev-lang/python:     2.7.1::gentoo, 3.1.3::gentoo
sys-devel/autoconf:  2.13::gentoo, 2.68::gentoo
sys-devel/automake:  1.9.6-r3::gentoo, 1.10.3::gentoo, 1.11.1::gentoo
sys-devel/binutils:  2.21::gentoo
sys-devel/libtool:   2.4-r1::gentoo
virtual/os-headers:  2.6.36.1::gentoo (sys-kernel/linux-headers)
ACCEPT_KEYWORDS="~amd64"
ACCEPT_LICENSE="* -@EULA"
CFLAGS="-O2 -march=atom -mfpmath=sse -mssse3 -msahf -mmovbe  -mtune=atom  --param l1-cache-size=24 --param l1-cache-line-size=32 --param l2-cache-size=512 -ftree-vectorize -fomit-frame-pointer -floop-parallelize-all -fgcse-after-reload -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /var/bind"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O2 -march=atom -mfpmath=sse -mssse3 -msahf -mmovbe  -mtune=atom  --param l1-cache-size=24 --param l1-cache-line-size=32 --param l2-cache-size=512 -ftree-vectorize -fomit-frame-pointer -floop-parallelize-all -fgcse-after-reload -pipe"
DISTDIR="/usr/portage/distfiles"
FEATURES="assume-digests binpkg-logs distlocks fixlafiles fixpackages metadata-transfer news nodoc noinfo notitles parallel-fetch protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch usersync webrsync-gpg"
GENTOO_MIRRORS="http://distfiles.gentoo.org"
PKGDIR="/usr/portage/packages"
PORTAGE_TMPDIR="/usr/portage/distfiles"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="   "
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="amr aqua aspell bluetooth cleartype device-mapper directfb egl enca enchant ffmpeg gnutls gsm gstreamer java mmx mmx2 networkmanager nsplugin opensvg policykit private-headers pulseaudio resolvconf schroedinger sip sqlite sse sse2 sse3 system-sqlite system-v8 systemd threads v4l2 vaapi wav xvmc" 
Unset:  EMERGE_DEFAULT_OPTS, PORTAGE_BUNZIP2_COMMAND
Comment 3 Robert Coffree 2010-12-27 17:55:51 UTC
Just managed to play around with the netbook.

udev                      1024       428       596  42% /dev
/dev/rootdev           4194304   1770968   2423336  43% /
tmpfs                   917504     65888    851616   8% /tmp
tmpfs                   917504     65888    851616   8% /var/tmp
tmpfs                   917504     65888    851616   8% /var/run
tmpfs                   917504     65888    851616   8% /var/log
tmpfs                   917504     65888    851616   8% /media
tmpfs                   917504     65888    851616   8% /home/tmp
rc-svcdir                 1024        72       952   8% /lib64/rc/init.d
shm                    1024788       804   1023984   1% /dev/shm

Everything works fine when I unmount /var/run and chattr -i on /var/run on the root file system. The /var/run/Consolekit and /var/run/polkit-1 dirs already exist on /var/run on tmpfs. These are created before the real init is run. The problem, as far as I can tell was that some cruft was being created on the root file system below the mount points, which the chattr +i fixed. ie should have been created in tmpfs: var/run not rootdev: varrun.

So if I unmount /var/run everything is fine. I didn't check to see if the directories are still created on rootdev:var/run instead of tmpfs:

Comment 5 Zac Medico gentoo-dev 2010-12-31 10:03:36 UTC
This is fixed in 2.1.9.27.
Comment 6 Robert Coffree 2010-12-31 21:11:14 UTC
 (In reply to comment #5)
Thanks. Works fine. 
Comment 7 Robert Coffree 2010-12-31 21:11:22 UTC
 (In reply to comment #5)
Thanks. Works fine.