101 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # This utility extracts an SDK image tarball using pseudo, and stores
 | |
| # the pseudo database in var/pseudo within the rootfs. If you want to
 | |
| # boot QEMU using an nfsroot, you *must* use this script to create the
 | |
| # rootfs to ensure it is done correctly with pseudo.
 | |
| #
 | |
| # Copyright (c) 2010 Intel Corp.
 | |
| #
 | |
| # This program is free software; you can redistribute it and/or modify
 | |
| # it under the terms of the GNU General Public License version 2 as
 | |
| # published by the Free Software Foundation.
 | |
| #
 | |
| # This program is distributed in the hope that it will be useful,
 | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | |
| # See the GNU General Public License for more details.
 | |
| #
 | |
| # You should have received a copy of the GNU General Public License
 | |
| # along with this program; if not, write to the Free Software
 | |
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | |
| 
 | |
| function usage() {
 | |
| 	echo "Usage: $0 <image-tarball> <extract-dir>"
 | |
| }
 | |
| 
 | |
| if [ $# -ne 2 ]; then
 | |
| 	usage
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| SYSROOT_SETUP_SCRIPT=`which oe-find-native-sysroot 2> /dev/null`
 | |
| if [ -z "$SYSROOT_SETUP_SCRIPT" ]; then
 | |
|     echo "Error: Unable to find the oe-find-native-sysroot script"
 | |
|     echo "Did you forget to source your build system environment setup script?"
 | |
|     exit 1
 | |
| fi
 | |
| . $SYSROOT_SETUP_SCRIPT
 | |
| PSEUDO_OPTS="-P $OECORE_NATIVE_SYSROOT/usr"
 | |
| 
 | |
| ROOTFS_TARBALL=$1
 | |
| SDK_ROOTFS_DIR=$2
 | |
| 
 | |
| if [ ! -e "$ROOTFS_TARBALL" ]; then
 | |
|    	echo "Error: sdk tarball '$ROOTFS_TARBALL' does not exist"
 | |
|    	usage
 | |
|    	exit 1
 | |
| fi
 | |
| 
 | |
| # Convert SDK_ROOTFS_DIR to a full pathname
 | |
| if [[ ${SDK_ROOTFS_DIR:0:1} != "/" ]]; then
 | |
| 	SDK_ROOTFS_DIR=$(pwd)/$SDK_ROOTFS_DIR
 | |
| fi
 | |
| 
 | |
| TAR_OPTS=""
 | |
| if [[ "$ROOTFS_TARBALL" =~ tar\.bz2$ ]]; then
 | |
| 	TAR_OPTS="-xjf"
 | |
| fi
 | |
| if [[ "$ROOTFS_TARBALL" =~ tar\.gz$ ]]; then
 | |
| 	TAR_OPTS="-xzf"
 | |
| fi
 | |
| if [[ "$ROOTFS_TARBALL" =~ \.tar$ ]]; then
 | |
| 	TAR_OPTS="-xf"
 | |
| fi
 | |
| if [ -z "$TAR_OPTS" ]; then
 | |
| 	echo "Error: Unable to determine sdk tarball format"
 | |
| 	echo "Accepted types: .tar / .tar.gz / .tar.bz2"
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| if [ ! -d "$SDK_ROOTFS_DIR" ]; then
 | |
| 	echo "Creating directory $SDK_ROOTFS_DIR"
 | |
| 	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"
 | |
| 	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"
 | |
| export PSEUDO_LOCALSTATEDIR
 | |
| 
 | |
| echo "Extracting rootfs tarball using pseudo..."
 | |
| echo "$PSEUDO $PSEUDO_OPTS tar -C \"$SDK_ROOTFS_DIR\" $TAR_OPTS \"$ROOTFS_TARBALL\""
 | |
| $PSEUDO $PSEUDO_OPTS tar -C "$SDK_ROOTFS_DIR" $TAR_OPTS "$ROOTFS_TARBALL"
 | |
| 
 | |
| DIRCHECK=`ls -l "$SDK_ROOTFS_DIR" | wc -l`
 | |
| if [ "$DIRCHECK" -lt 5 ]; then
 | |
| 	echo "Warning: I don't see many files in $SDK_ROOTFS_DIR"
 | |
| 	echo "Please double-check the extraction worked as intended"
 | |
| 	exit 0
 | |
| fi
 | |
| 
 | |
| echo "SDK image successfully extracted to $SDK_ROOTFS_DIR"
 | |
| 
 | |
| exit 0
 | 
