Patchwork [1/1] runqemu-export-rootfs and friends: don't put pseudo db in target fs

login
register
mail settings
Submitter Peter Seebach
Date Aug. 23, 2012, 1:47 a.m.
Message ID <eef91770e809fcde924c197427cf4e1e956a29ae.1345686284.git.peter.seebach@windriver.com>
Download mbox | patch
Permalink /patch/35191/
State New
Headers show

Comments

Peter Seebach - Aug. 23, 2012, 1:47 a.m.
In a few places, we have scripts which use <rootfs>/var/pseudo for
the pseudo state directory controlling a given filesystem. This
seems possibly risky because it means that stuff running under
qemu or whatnot could wipe out the data being used to handle that
rootfs. Move this to:
  <rootfs>/../pseudo_state_$(basename $rootfs)
to avoid problems.

This also solves at least one case (not directly hit by yocto's
tree) wherein you could end up trying to remove a rootfs while
pseudo was using a database inside that rootfs, and thus the
remove would fail.

Signed-off-by: Peter Seebach <peter.seebach@windriver.com>
---
 .../installer/adt-installer/scripts/extract_rootfs |    8 ++++----
 scripts/runqemu-export-rootfs                      |    2 +-
 scripts/runqemu-extract-sdk                        |   15 +++++++++------
 3 files changed, 14 insertions(+), 11 deletions(-)
Scott Garman - Aug. 24, 2012, 7:31 a.m.
On 08/22/2012 06:47 PM, Peter Seebach wrote:
> In a few places, we have scripts which use <rootfs>/var/pseudo for
> the pseudo state directory controlling a given filesystem. This
> seems possibly risky because it means that stuff running under
> qemu or whatnot could wipe out the data being used to handle that
> rootfs. Move this to:
>    <rootfs>/../pseudo_state_$(basename $rootfs)
> to avoid problems.
>
> This also solves at least one case (not directly hit by yocto's
> tree) wherein you could end up trying to remove a rootfs while
> pseudo was using a database inside that rootfs, and thus the
> remove would fail.
>
> Signed-off-by: Peter Seebach <peter.seebach@windriver.com>

I haven't tested this, but it appears to address the concerns I raised 
earlier.

With Jessica on vacation, could anyone else on the SDK team try this out 
and verify it with some sanity tests? e.g, boot some images using unfs 
and from an installed sdk.

Scott

> ---
>   .../installer/adt-installer/scripts/extract_rootfs |    8 ++++----
>   scripts/runqemu-export-rootfs                      |    2 +-
>   scripts/runqemu-extract-sdk                        |   15 +++++++++------
>   3 files changed, 14 insertions(+), 11 deletions(-)
>
> diff --git a/meta/recipes-devtools/installer/adt-installer/scripts/extract_rootfs b/meta/recipes-devtools/installer/adt-installer/scripts/extract_rootfs
> index 62dc170..fee463c 100755
> --- a/meta/recipes-devtools/installer/adt-installer/scripts/extract_rootfs
> +++ b/meta/recipes-devtools/installer/adt-installer/scripts/extract_rootfs
> @@ -28,7 +28,6 @@ extract_rootfs()
>     native_sysroot=$3
>     target_sysroot=$2
>     PSEUDO_COMMAND="$native_sysroot/usr/bin/pseudo"
> -  PSEUDO_OPTS="-P $natvie_sysroot/usr"
>     TAR_OPTS="-xjf"
>     PSEUDO_OPTS="-P $native_sysroot/usr"
>
> @@ -46,9 +45,10 @@ extract_rootfs()
>       mkdir -p "$target_sysroot"
>     fi
>
> -  mkdir -p "$target_sysroot/var/pseudo"
> -  touch "$target_sysroot/var/pseudo/pseudo.pid"
> -  PSEUDO_LOCALSTATEDIR="$target_sysroot/var/pseudo"
> +  pseudo_state_dir="$target_sysroot/../pseudo_state_$(basename "$target_sysroot")"
> +  mkdir -p "$pseudo_state_dir"
> +  touch "$pseudo_state_dir/pseudo.pid"
> +  PSEUDO_LOCALSTATEDIR="$pseudo_state_dir"
>     export PSEUDO_LOCALSTATEDIR
>
>     echo_info "Extracting rootfs: $1, using pseudo..."
> diff --git a/scripts/runqemu-export-rootfs b/scripts/runqemu-export-rootfs
> index f8213ba..0e0d32c 100755
> --- a/scripts/runqemu-export-rootfs
> +++ b/scripts/runqemu-export-rootfs
> @@ -68,7 +68,7 @@ NFSPID=~/.runqemu-sdk/nfs$NFS_INSTANCE.pid
>   MOUNTPID=~/.runqemu-sdk/mount$NFS_INSTANCE.pid
>
>   PSEUDO_OPTS="-P $OECORE_NATIVE_SYSROOT/usr"
> -PSEUDO_LOCALSTATEDIR="$NFS_EXPORT_DIR/var/pseudo"
> +PSEUDO_LOCALSTATEDIR="$NFS_EXPORT_DIR/../pseudo_state/$(basename $NFS_EXPORT_DIR)"
>   export PSEUDO_LOCALSTATEDIR
>
>   if [ ! -d "$PSEUDO_LOCALSTATEDIR" ]; then
> diff --git a/scripts/runqemu-extract-sdk b/scripts/runqemu-extract-sdk
> index 4b52475..88fdf0d 100755
> --- a/scripts/runqemu-extract-sdk
> +++ b/scripts/runqemu-extract-sdk
> @@ -73,15 +73,18 @@ if [ ! -d "$SDK_ROOTFS_DIR" ]; then
>   	mkdir -p "$SDK_ROOTFS_DIR"
>   fi
>
> -if [ -e "$SDK_ROOTFS_DIR/var/pseudo" ]; then
> -	echo "Error: $SDK_ROOTFS_DIR/var/pseudo already exists!"
> -	echo "Please delete the entire rootfs tree manually if this is really what you want"
> +pseudo_state_dir="$SDK_ROOTFS_DIR/../pseudo_state_$(basename "$SDK_ROOTFS_DIR")"
> +
> +if [ -e "$pseudo_state_dir" ]; then
> +	echo "Error: $pseudo_state_dir already exists!"
> +	echo "Please delete the rootfs tree and pseudo directory manually"
> +        echo "if this is really what you want."
>   	exit 1
>   fi
>
> -mkdir -p "$SDK_ROOTFS_DIR/var/pseudo"
> -touch "$SDK_ROOTFS_DIR/var/pseudo/pseudo.pid"
> -PSEUDO_LOCALSTATEDIR="$SDK_ROOTFS_DIR/var/pseudo"
> +mkdir -p "$pseudo_state_dir"
> +touch "$pseudo_state_dir/pseudo.pid"
> +PSEUDO_LOCALSTATEDIR="$pseudo_state_dir
>   export PSEUDO_LOCALSTATEDIR
>
>   echo "Extracting rootfs tarball using pseudo..."
>
Peter Seebach - Aug. 24, 2012, 7:55 p.m.
On Wed, 22 Aug 2012 20:47:23 -0500
Peter Seebach <peter.seebach@windriver.com> wrote:

> +PSEUDO_LOCALSTATEDIR="$pseudo_state_dir

... This quote really IS missing. Something must have gone horribly
wrong with my merge attempt.

-s

Patch

diff --git a/meta/recipes-devtools/installer/adt-installer/scripts/extract_rootfs b/meta/recipes-devtools/installer/adt-installer/scripts/extract_rootfs
index 62dc170..fee463c 100755
--- a/meta/recipes-devtools/installer/adt-installer/scripts/extract_rootfs
+++ b/meta/recipes-devtools/installer/adt-installer/scripts/extract_rootfs
@@ -28,7 +28,6 @@  extract_rootfs()
   native_sysroot=$3
   target_sysroot=$2
   PSEUDO_COMMAND="$native_sysroot/usr/bin/pseudo"
-  PSEUDO_OPTS="-P $natvie_sysroot/usr"
   TAR_OPTS="-xjf"
   PSEUDO_OPTS="-P $native_sysroot/usr"
 
@@ -46,9 +45,10 @@  extract_rootfs()
     mkdir -p "$target_sysroot"
   fi
 
-  mkdir -p "$target_sysroot/var/pseudo"
-  touch "$target_sysroot/var/pseudo/pseudo.pid"
-  PSEUDO_LOCALSTATEDIR="$target_sysroot/var/pseudo"
+  pseudo_state_dir="$target_sysroot/../pseudo_state_$(basename "$target_sysroot")"
+  mkdir -p "$pseudo_state_dir"
+  touch "$pseudo_state_dir/pseudo.pid"
+  PSEUDO_LOCALSTATEDIR="$pseudo_state_dir"
   export PSEUDO_LOCALSTATEDIR
 
   echo_info "Extracting rootfs: $1, using pseudo..."
diff --git a/scripts/runqemu-export-rootfs b/scripts/runqemu-export-rootfs
index f8213ba..0e0d32c 100755
--- a/scripts/runqemu-export-rootfs
+++ b/scripts/runqemu-export-rootfs
@@ -68,7 +68,7 @@  NFSPID=~/.runqemu-sdk/nfs$NFS_INSTANCE.pid
 MOUNTPID=~/.runqemu-sdk/mount$NFS_INSTANCE.pid
 
 PSEUDO_OPTS="-P $OECORE_NATIVE_SYSROOT/usr"
-PSEUDO_LOCALSTATEDIR="$NFS_EXPORT_DIR/var/pseudo"
+PSEUDO_LOCALSTATEDIR="$NFS_EXPORT_DIR/../pseudo_state/$(basename $NFS_EXPORT_DIR)"
 export PSEUDO_LOCALSTATEDIR
 
 if [ ! -d "$PSEUDO_LOCALSTATEDIR" ]; then
diff --git a/scripts/runqemu-extract-sdk b/scripts/runqemu-extract-sdk
index 4b52475..88fdf0d 100755
--- a/scripts/runqemu-extract-sdk
+++ b/scripts/runqemu-extract-sdk
@@ -73,15 +73,18 @@  if [ ! -d "$SDK_ROOTFS_DIR" ]; then
 	mkdir -p "$SDK_ROOTFS_DIR"
 fi
 
-if [ -e "$SDK_ROOTFS_DIR/var/pseudo" ]; then
-	echo "Error: $SDK_ROOTFS_DIR/var/pseudo already exists!"
-	echo "Please delete the entire rootfs tree manually if this is really what you want"
+pseudo_state_dir="$SDK_ROOTFS_DIR/../pseudo_state_$(basename "$SDK_ROOTFS_DIR")"
+
+if [ -e "$pseudo_state_dir" ]; then
+	echo "Error: $pseudo_state_dir already exists!"
+	echo "Please delete the rootfs tree and pseudo directory manually"
+        echo "if this is really what you want."
 	exit 1
 fi
 
-mkdir -p "$SDK_ROOTFS_DIR/var/pseudo"
-touch "$SDK_ROOTFS_DIR/var/pseudo/pseudo.pid"
-PSEUDO_LOCALSTATEDIR="$SDK_ROOTFS_DIR/var/pseudo"
+mkdir -p "$pseudo_state_dir"
+touch "$pseudo_state_dir/pseudo.pid"
+PSEUDO_LOCALSTATEDIR="$pseudo_state_dir
 export PSEUDO_LOCALSTATEDIR
 
 echo "Extracting rootfs tarball using pseudo..."