* [dizzy][PATCH] base-files: Check for /run and /var/lock softlinks on upgrade @ 2015-04-10 16:44 Bryan Evenson 2015-04-14 15:46 ` Bryan Evenson 0 siblings, 1 reply; 4+ messages in thread From: Bryan Evenson @ 2015-04-10 16:44 UTC (permalink / raw) To: openembedded-core Commit ea647cd9eebdc3e3121b84074519c4bb305adac9 moved the locations of /run and /var/lock to match the FHS 3 draft specifications. However, the install doesn't remove the existing directories. As a result, upgrading a system may result in /run as a softlink to /var/run and /var/run as a softlink to /run, creating a circular link. During pre and post-install, check for the existence of the old softlinks, move the old file contents to a temporary location, remove the softlinks, and restore the directory contents after installation. Signed-off-by: Bryan Evenson <bevenson@melinkcorp.com> --- meta/recipes-core/base-files/base-files_3.0.14.bb | 55 +++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/meta/recipes-core/base-files/base-files_3.0.14.bb b/meta/recipes-core/base-files/base-files_3.0.14.bb index 07f5c54..71cea08 100644 --- a/meta/recipes-core/base-files/base-files_3.0.14.bb +++ b/meta/recipes-core/base-files/base-files_3.0.14.bb @@ -66,6 +66,41 @@ hostname = "openembedded" BASEFILESISSUEINSTALL ?= "do_install_basefilesissue" +# In previous versions of base-files, /run was a softlink to /var/run and the +# directory was located in /var/volatlie/run. Also, /var/lock was a softlink +# to /var/volatile/lock which is where the real directory was located. Now, +# /run and /run/lock are the real directories. If we are upgrading, we may +# need to remove the symbolic links first before we create the directories. +# Otherwise the directory creation will fail and we will have circular symbolic +# links. +# +# If we do need to remove the symbolic links first, we also need to preserve +# all the contents of the directory so running programs can find the files that +# are in use in these directories. Move the contents to a temporary directory +# during pre-install to protect the contents +pkg_preinst_${PN} () { + #!/bin/sh -e + if [ x"$D" = "x" ]; then + if [ -e "/var/volatile/lock" ]; then + # Move the contents of /var/volatile/lock to a temporary directory + mkdir -p /run_lock_tmp + mv /var/volatile/lock/* /run_lock_tmp/ + + # Remove the current directory + rm -rf /var/volatile/lock + fi + + if [ -h "/run" ]; then + # Move the contents of /run to a temporary directory + mkdir -p /run_tmp + mv /run/* /run_tmp/ + + # Remove the current directory + rm -rf /run + fi + fi +} + do_install () { for d in ${dirs755}; do install -m 0755 -d ${D}$d @@ -79,6 +114,7 @@ do_install () { for d in ${volatiles}; do ln -sf volatile/$d ${D}${localstatedir}/$d done + ln -snf ../run ${D}${localstatedir}/run ln -snf ../run/lock ${D}${localstatedir}/lock @@ -144,6 +180,25 @@ do_install_append_linuxstdbase() { done } +# If we are on the actual hardware, check if we had to move /run and /run/lock. +# If so, copy the temporary directory contents to their new locations. +pkg_postinst_${PN} () { + #!/bin/sh -e + if [ x"$D" = "x" ]; then + if [ -e "/run_tmp" ]; then + mv /run_tmp/* /run/ + rmdir /run_tmp + fi + + if [ -e "/run_lock_tmp/" ]; then + mv /run_lock_tmp/* /run/lock + rmdir /run_lock_tmp + fi + else + exit 1 + fi +} + PACKAGES = "${PN}-doc ${PN} ${PN}-dev ${PN}-dbg" FILES_${PN} = "/" FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses" -- 2.1.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [dizzy][PATCH] base-files: Check for /run and /var/lock softlinks on upgrade 2015-04-10 16:44 [dizzy][PATCH] base-files: Check for /run and /var/lock softlinks on upgrade Bryan Evenson @ 2015-04-14 15:46 ` Bryan Evenson 2015-04-14 20:41 ` Bryan Evenson 0 siblings, 1 reply; 4+ messages in thread From: Bryan Evenson @ 2015-04-14 15:46 UTC (permalink / raw) To: Bryan Evenson, openembedded-core@lists.openembedded.org All, > -----Original Message----- > From: Bryan Evenson [mailto:bevenson@melinkcorp.com] > Sent: Friday, April 10, 2015 12:44 PM > To: openembedded-core@lists.openembedded.org > Cc: Bryan Evenson > Subject: [oe-core][dizzy][PATCH] base-files: Check for /run and /var/lock > softlinks on upgrade > > Commit ea647cd9eebdc3e3121b84074519c4bb305adac9 moved the locations > of /run and /var/lock to match the FHS 3 draft specifications. > However, the install doesn't remove the existing directories. > As a result, upgrading a system may result in /run as a softlink > to /var/run and /var/run as a softlink to /run, creating a circular > link. > > During pre and post-install, check for the existence of the old > softlinks, move the old file contents to a temporary location, remove > the softlinks, and restore the directory contents after installation. > I went about this wrong, as I forgot that items may be mounted under /run. I'm working on a different solution in which the preinst step removes the /run and /var/lock softlinks if they exist. However, I still have odd issues. The first reboot works fine, but then on the next reboot there is a link inside /run for "run -> /var/run" and inside /var there is a link for "run -> /var/volatile/run". This doesn't match up with the files listed in the base-files recipe. I can't figure out where these links are coming from. Has anyone else had issues upgrading base-files? Thanks, Bryan > Signed-off-by: Bryan Evenson <bevenson@melinkcorp.com> > --- > meta/recipes-core/base-files/base-files_3.0.14.bb | 55 > +++++++++++++++++++++++ > 1 file changed, 55 insertions(+) > > diff --git a/meta/recipes-core/base-files/base-files_3.0.14.bb > b/meta/recipes-core/base-files/base-files_3.0.14.bb > index 07f5c54..71cea08 100644 > --- a/meta/recipes-core/base-files/base-files_3.0.14.bb > +++ b/meta/recipes-core/base-files/base-files_3.0.14.bb > @@ -66,6 +66,41 @@ hostname = "openembedded" > > BASEFILESISSUEINSTALL ?= "do_install_basefilesissue" > > +# In previous versions of base-files, /run was a softlink to /var/run and the > +# directory was located in /var/volatlie/run. Also, /var/lock was a softlink > +# to /var/volatile/lock which is where the real directory was located. Now, > +# /run and /run/lock are the real directories. If we are upgrading, we may > +# need to remove the symbolic links first before we create the directories. > +# Otherwise the directory creation will fail and we will have circular symbolic > +# links. > +# > +# If we do need to remove the symbolic links first, we also need to preserve > +# all the contents of the directory so running programs can find the files that > +# are in use in these directories. Move the contents to a temporary > directory > +# during pre-install to protect the contents > +pkg_preinst_${PN} () { > + #!/bin/sh -e > + if [ x"$D" = "x" ]; then > + if [ -e "/var/volatile/lock" ]; then > + # Move the contents of /var/volatile/lock to a temporary directory > + mkdir -p /run_lock_tmp > + mv /var/volatile/lock/* /run_lock_tmp/ > + > + # Remove the current directory > + rm -rf /var/volatile/lock > + fi > + > + if [ -h "/run" ]; then > + # Move the contents of /run to a temporary directory > + mkdir -p /run_tmp > + mv /run/* /run_tmp/ > + > + # Remove the current directory > + rm -rf /run > + fi > + fi > +} > + > do_install () { > for d in ${dirs755}; do > install -m 0755 -d ${D}$d > @@ -79,6 +114,7 @@ do_install () { > for d in ${volatiles}; do > ln -sf volatile/$d ${D}${localstatedir}/$d > done > + > ln -snf ../run ${D}${localstatedir}/run > ln -snf ../run/lock ${D}${localstatedir}/lock > > @@ -144,6 +180,25 @@ do_install_append_linuxstdbase() { > done > } > > +# If we are on the actual hardware, check if we had to move /run and > /run/lock. > +# If so, copy the temporary directory contents to their new locations. > +pkg_postinst_${PN} () { > + #!/bin/sh -e > + if [ x"$D" = "x" ]; then > + if [ -e "/run_tmp" ]; then > + mv /run_tmp/* /run/ > + rmdir /run_tmp > + fi > + > + if [ -e "/run_lock_tmp/" ]; then > + mv /run_lock_tmp/* /run/lock > + rmdir /run_lock_tmp > + fi > + else > + exit 1 > + fi > +} > + > PACKAGES = "${PN}-doc ${PN} ${PN}-dev ${PN}-dbg" > FILES_${PN} = "/" > FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses" > -- > 2.1.0 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dizzy][PATCH] base-files: Check for /run and /var/lock softlinks on upgrade 2015-04-14 15:46 ` Bryan Evenson @ 2015-04-14 20:41 ` Bryan Evenson 2015-04-14 20:44 ` akuster808 0 siblings, 1 reply; 4+ messages in thread From: Bryan Evenson @ 2015-04-14 20:41 UTC (permalink / raw) To: openembedded-core@lists.openembedded.org All, > -----Original Message----- > From: Bryan Evenson > Sent: Tuesday, April 14, 2015 11:47 AM > To: Bryan Evenson; openembedded-core@lists.openembedded.org > Subject: RE: [oe-core][dizzy][PATCH] base-files: Check for /run and /var/lock > softlinks on upgrade > > All, > > > -----Original Message----- > > From: Bryan Evenson [mailto:bevenson@melinkcorp.com] > > Sent: Friday, April 10, 2015 12:44 PM > > To: openembedded-core@lists.openembedded.org > > Cc: Bryan Evenson > > Subject: [oe-core][dizzy][PATCH] base-files: Check for /run and > > /var/lock softlinks on upgrade > > > > Commit ea647cd9eebdc3e3121b84074519c4bb305adac9 moved the > locations of > > /run and /var/lock to match the FHS 3 draft specifications. > > However, the install doesn't remove the existing directories. > > As a result, upgrading a system may result in /run as a softlink to > > /var/run and /var/run as a softlink to /run, creating a circular link. > > > > During pre and post-install, check for the existence of the old > > softlinks, move the old file contents to a temporary location, remove > > the softlinks, and restore the directory contents after installation. > > > > I went about this wrong, as I forgot that items may be mounted under /run. > I'm working on a different solution in which the preinst step removes the > /run and /var/lock softlinks if they exist. However, I still have odd issues. > The first reboot works fine, but then on the next reboot there is a link inside > /run for "run -> /var/run" and inside /var there is a link for "run -> > /var/volatile/run". This doesn't match up with the files listed in the base-files > recipe. I can't figure out where these links are coming from. Has anyone else > had issues upgrading base-files? The root cause seems to be the initscripts package. The script /etc/volatile.cache is generated by /etc/init.d/populate-volatile.sh. On upgrade, this file is not removed and may not necessarily be regenerated. As a result, on the next boot the script /etc/volatile.cache repopulates directories as it remembers them which may not be accurate. In my case, after the reboot, the /etc/volatile.cache script deleted everything from a USB flash drive attached to my system when it attempted to remove /run. So to get this portion of the upgrade to work, I had to: 1. Remove the softlinks for /run and /var/lock through a preinst script in the base-files recipe 2. Remove /etc/volatile.cache as a postint script in the initscripts recipe Would someone like for me to submit a patch? Thanks, Bryan > > Thanks, > Bryan > > > Signed-off-by: Bryan Evenson <bevenson@melinkcorp.com> > > --- > > meta/recipes-core/base-files/base-files_3.0.14.bb | 55 > > +++++++++++++++++++++++ > > 1 file changed, 55 insertions(+) > > > > diff --git a/meta/recipes-core/base-files/base-files_3.0.14.bb > > b/meta/recipes-core/base-files/base-files_3.0.14.bb > > index 07f5c54..71cea08 100644 > > --- a/meta/recipes-core/base-files/base-files_3.0.14.bb > > +++ b/meta/recipes-core/base-files/base-files_3.0.14.bb > > @@ -66,6 +66,41 @@ hostname = "openembedded" > > > > BASEFILESISSUEINSTALL ?= "do_install_basefilesissue" > > > > +# In previous versions of base-files, /run was a softlink to /var/run > > +and the # directory was located in /var/volatlie/run. Also, > > +/var/lock was a softlink # to /var/volatile/lock which is where the > > +real directory was located. Now, # /run and /run/lock are the real > > +directories. If we are upgrading, we may # need to remove the symbolic > links first before we create the directories. > > +# Otherwise the directory creation will fail and we will have > > +circular symbolic # links. > > +# > > +# If we do need to remove the symbolic links first, we also need to > > +preserve # all the contents of the directory so running programs can > > +find the files that # are in use in these directories. Move the > > +contents to a temporary > > directory > > +# during pre-install to protect the contents pkg_preinst_${PN} () { > > + #!/bin/sh -e > > + if [ x"$D" = "x" ]; then > > + if [ -e "/var/volatile/lock" ]; then > > + # Move the contents of /var/volatile/lock to a temporary directory > > + mkdir -p /run_lock_tmp > > + mv /var/volatile/lock/* /run_lock_tmp/ > > + > > + # Remove the current directory > > + rm -rf /var/volatile/lock > > + fi > > + > > + if [ -h "/run" ]; then > > + # Move the contents of /run to a temporary directory > > + mkdir -p /run_tmp > > + mv /run/* /run_tmp/ > > + > > + # Remove the current directory > > + rm -rf /run > > + fi > > + fi > > +} > > + > > do_install () { > > for d in ${dirs755}; do > > install -m 0755 -d ${D}$d > > @@ -79,6 +114,7 @@ do_install () { > > for d in ${volatiles}; do > > ln -sf volatile/$d ${D}${localstatedir}/$d > > done > > + > > ln -snf ../run ${D}${localstatedir}/run > > ln -snf ../run/lock ${D}${localstatedir}/lock > > > > @@ -144,6 +180,25 @@ do_install_append_linuxstdbase() { > > done > > } > > > > +# If we are on the actual hardware, check if we had to move /run and > > /run/lock. > > +# If so, copy the temporary directory contents to their new locations. > > +pkg_postinst_${PN} () { > > + #!/bin/sh -e > > + if [ x"$D" = "x" ]; then > > + if [ -e "/run_tmp" ]; then > > + mv /run_tmp/* /run/ > > + rmdir /run_tmp > > + fi > > + > > + if [ -e "/run_lock_tmp/" ]; then > > + mv /run_lock_tmp/* /run/lock > > + rmdir /run_lock_tmp > > + fi > > + else > > + exit 1 > > + fi > > +} > > + > > PACKAGES = "${PN}-doc ${PN} ${PN}-dev ${PN}-dbg" > > FILES_${PN} = "/" > > FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses" > > -- > > 2.1.0 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [dizzy][PATCH] base-files: Check for /run and /var/lock softlinks on upgrade 2015-04-14 20:41 ` Bryan Evenson @ 2015-04-14 20:44 ` akuster808 0 siblings, 0 replies; 4+ messages in thread From: akuster808 @ 2015-04-14 20:44 UTC (permalink / raw) To: openembedded-core On 04/14/2015 01:41 PM, Bryan Evenson wrote: > All, > >> -----Original Message----- >> From: Bryan Evenson >> Sent: Tuesday, April 14, 2015 11:47 AM >> To: Bryan Evenson; openembedded-core@lists.openembedded.org >> Subject: RE: [oe-core][dizzy][PATCH] base-files: Check for /run and /var/lock >> softlinks on upgrade >> >> All, >> >>> -----Original Message----- >>> From: Bryan Evenson [mailto:bevenson@melinkcorp.com] >>> Sent: Friday, April 10, 2015 12:44 PM >>> To: openembedded-core@lists.openembedded.org >>> Cc: Bryan Evenson >>> Subject: [oe-core][dizzy][PATCH] base-files: Check for /run and >>> /var/lock softlinks on upgrade >>> >>> Commit ea647cd9eebdc3e3121b84074519c4bb305adac9 moved the >> locations of >>> /run and /var/lock to match the FHS 3 draft specifications. >>> However, the install doesn't remove the existing directories. >>> As a result, upgrading a system may result in /run as a softlink to >>> /var/run and /var/run as a softlink to /run, creating a circular link. >>> >>> During pre and post-install, check for the existence of the old >>> softlinks, move the old file contents to a temporary location, remove >>> the softlinks, and restore the directory contents after installation. >>> >> >> I went about this wrong, as I forgot that items may be mounted under /run. >> I'm working on a different solution in which the preinst step removes the >> /run and /var/lock softlinks if they exist. However, I still have odd issues. >> The first reboot works fine, but then on the next reboot there is a link inside >> /run for "run -> /var/run" and inside /var there is a link for "run -> >> /var/volatile/run". This doesn't match up with the files listed in the base-files >> recipe. I can't figure out where these links are coming from. Has anyone else >> had issues upgrading base-files? > > The root cause seems to be the initscripts package. The script /etc/volatile.cache is generated by /etc/init.d/populate-volatile.sh. On upgrade, this file is not removed and may not necessarily be regenerated. As a result, on the next boot the script /etc/volatile.cache repopulates directories as it remembers them which may not be accurate. In my case, after the reboot, the /etc/volatile.cache script deleted everything from a USB flash drive attached to my system when it attempted to remove /run. > > So to get this portion of the upgrade to work, I had to: > 1. Remove the softlinks for /run and /var/lock through a preinst script in the base-files recipe > 2. Remove /etc/volatile.cache as a postint script in the initscripts recipe > > Would someone like for me to submit a patch? sure. - armin > > Thanks, > Bryan > >> >> Thanks, >> Bryan >> >>> Signed-off-by: Bryan Evenson <bevenson@melinkcorp.com> >>> --- >>> meta/recipes-core/base-files/base-files_3.0.14.bb | 55 >>> +++++++++++++++++++++++ >>> 1 file changed, 55 insertions(+) >>> >>> diff --git a/meta/recipes-core/base-files/base-files_3.0.14.bb >>> b/meta/recipes-core/base-files/base-files_3.0.14.bb >>> index 07f5c54..71cea08 100644 >>> --- a/meta/recipes-core/base-files/base-files_3.0.14.bb >>> +++ b/meta/recipes-core/base-files/base-files_3.0.14.bb >>> @@ -66,6 +66,41 @@ hostname = "openembedded" >>> >>> BASEFILESISSUEINSTALL ?= "do_install_basefilesissue" >>> >>> +# In previous versions of base-files, /run was a softlink to /var/run >>> +and the # directory was located in /var/volatlie/run. Also, >>> +/var/lock was a softlink # to /var/volatile/lock which is where the >>> +real directory was located. Now, # /run and /run/lock are the real >>> +directories. If we are upgrading, we may # need to remove the symbolic >> links first before we create the directories. >>> +# Otherwise the directory creation will fail and we will have >>> +circular symbolic # links. >>> +# >>> +# If we do need to remove the symbolic links first, we also need to >>> +preserve # all the contents of the directory so running programs can >>> +find the files that # are in use in these directories. Move the >>> +contents to a temporary >>> directory >>> +# during pre-install to protect the contents pkg_preinst_${PN} () { >>> + #!/bin/sh -e >>> + if [ x"$D" = "x" ]; then >>> + if [ -e "/var/volatile/lock" ]; then >>> + # Move the contents of /var/volatile/lock to a temporary directory >>> + mkdir -p /run_lock_tmp >>> + mv /var/volatile/lock/* /run_lock_tmp/ >>> + >>> + # Remove the current directory >>> + rm -rf /var/volatile/lock >>> + fi >>> + >>> + if [ -h "/run" ]; then >>> + # Move the contents of /run to a temporary directory >>> + mkdir -p /run_tmp >>> + mv /run/* /run_tmp/ >>> + >>> + # Remove the current directory >>> + rm -rf /run >>> + fi >>> + fi >>> +} >>> + >>> do_install () { >>> for d in ${dirs755}; do >>> install -m 0755 -d ${D}$d >>> @@ -79,6 +114,7 @@ do_install () { >>> for d in ${volatiles}; do >>> ln -sf volatile/$d ${D}${localstatedir}/$d >>> done >>> + >>> ln -snf ../run ${D}${localstatedir}/run >>> ln -snf ../run/lock ${D}${localstatedir}/lock >>> >>> @@ -144,6 +180,25 @@ do_install_append_linuxstdbase() { >>> done >>> } >>> >>> +# If we are on the actual hardware, check if we had to move /run and >>> /run/lock. >>> +# If so, copy the temporary directory contents to their new locations. >>> +pkg_postinst_${PN} () { >>> + #!/bin/sh -e >>> + if [ x"$D" = "x" ]; then >>> + if [ -e "/run_tmp" ]; then >>> + mv /run_tmp/* /run/ >>> + rmdir /run_tmp >>> + fi >>> + >>> + if [ -e "/run_lock_tmp/" ]; then >>> + mv /run_lock_tmp/* /run/lock >>> + rmdir /run_lock_tmp >>> + fi >>> + else >>> + exit 1 >>> + fi >>> +} >>> + >>> PACKAGES = "${PN}-doc ${PN} ${PN}-dev ${PN}-dbg" >>> FILES_${PN} = "/" >>> FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses" >>> -- >>> 2.1.0 > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-04-14 20:44 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-04-10 16:44 [dizzy][PATCH] base-files: Check for /run and /var/lock softlinks on upgrade Bryan Evenson 2015-04-14 15:46 ` Bryan Evenson 2015-04-14 20:41 ` Bryan Evenson 2015-04-14 20:44 ` akuster808
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox