1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# This utility extracts an SDK image tarball using pseudo, and stores 4*4882a593Smuzhiyun# the pseudo database in var/pseudo within the rootfs. If you want to 5*4882a593Smuzhiyun# boot QEMU using an nfsroot, you *must* use this script to create the 6*4882a593Smuzhiyun# rootfs to ensure it is done correctly with pseudo. 7*4882a593Smuzhiyun# 8*4882a593Smuzhiyun# Copyright (c) 2010 Intel Corp. 9*4882a593Smuzhiyun# 10*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 11*4882a593Smuzhiyun# 12*4882a593Smuzhiyun 13*4882a593Smuzhiyunfunction usage() { 14*4882a593Smuzhiyun echo "Usage: $0 <image-tarball> <extract-dir>" 15*4882a593Smuzhiyun} 16*4882a593Smuzhiyun 17*4882a593Smuzhiyunif [ $# -ne 2 ]; then 18*4882a593Smuzhiyun usage 19*4882a593Smuzhiyun exit 1 20*4882a593Smuzhiyunfi 21*4882a593Smuzhiyun 22*4882a593SmuzhiyunSYSROOT_SETUP_SCRIPT=`which oe-find-native-sysroot 2> /dev/null` 23*4882a593Smuzhiyunif [ -z "$SYSROOT_SETUP_SCRIPT" ]; then 24*4882a593Smuzhiyun echo "Error: Unable to find the oe-find-native-sysroot script" 25*4882a593Smuzhiyun echo "Did you forget to source your build system environment setup script?" 26*4882a593Smuzhiyun exit 1 27*4882a593Smuzhiyunfi 28*4882a593Smuzhiyun. $SYSROOT_SETUP_SCRIPT meta-ide-support 29*4882a593SmuzhiyunPSEUDO_OPTS="-P $OECORE_NATIVE_SYSROOT/usr" 30*4882a593Smuzhiyun 31*4882a593SmuzhiyunROOTFS_TARBALL=$1 32*4882a593SmuzhiyunSDK_ROOTFS_DIR=$2 33*4882a593Smuzhiyun 34*4882a593Smuzhiyunif [ ! -e "$ROOTFS_TARBALL" ]; then 35*4882a593Smuzhiyun echo "Error: sdk tarball '$ROOTFS_TARBALL' does not exist" 36*4882a593Smuzhiyun usage 37*4882a593Smuzhiyun exit 1 38*4882a593Smuzhiyunfi 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun# Convert SDK_ROOTFS_DIR to a full pathname 41*4882a593Smuzhiyunif [[ ${SDK_ROOTFS_DIR:0:1} != "/" ]]; then 42*4882a593Smuzhiyun SDK_ROOTFS_DIR=$(readlink -f $(pwd)/$SDK_ROOTFS_DIR) 43*4882a593Smuzhiyunfi 44*4882a593Smuzhiyun 45*4882a593SmuzhiyunTAR_OPTS="" 46*4882a593Smuzhiyunif [[ "$ROOTFS_TARBALL" =~ tar\.xz$ ]]; then 47*4882a593Smuzhiyun TAR_OPTS="--numeric-owner -xJf" 48*4882a593Smuzhiyunfi 49*4882a593Smuzhiyunif [[ "$ROOTFS_TARBALL" =~ tar\.bz2$ ]]; then 50*4882a593Smuzhiyun TAR_OPTS="--numeric-owner -xjf" 51*4882a593Smuzhiyunfi 52*4882a593Smuzhiyunif [[ "$ROOTFS_TARBALL" =~ tar\.gz$ ]]; then 53*4882a593Smuzhiyun TAR_OPTS="--numeric-owner -xzf" 54*4882a593Smuzhiyunfi 55*4882a593Smuzhiyunif [[ "$ROOTFS_TARBALL" =~ \.tar$ ]]; then 56*4882a593Smuzhiyun TAR_OPTS="--numeric-owner -xf" 57*4882a593Smuzhiyunfi 58*4882a593Smuzhiyunif [ -z "$TAR_OPTS" ]; then 59*4882a593Smuzhiyun echo "Error: Unable to determine sdk tarball format" 60*4882a593Smuzhiyun echo "Accepted types: .tar / .tar.gz / .tar.bz2 / .tar.xz" 61*4882a593Smuzhiyun exit 1 62*4882a593Smuzhiyunfi 63*4882a593Smuzhiyun 64*4882a593Smuzhiyunif [ ! -d "$SDK_ROOTFS_DIR" ]; then 65*4882a593Smuzhiyun echo "Creating directory $SDK_ROOTFS_DIR" 66*4882a593Smuzhiyun mkdir -p "$SDK_ROOTFS_DIR" 67*4882a593Smuzhiyunfi 68*4882a593Smuzhiyun 69*4882a593Smuzhiyunpseudo_state_dir="$SDK_ROOTFS_DIR/../$(basename "$SDK_ROOTFS_DIR").pseudo_state" 70*4882a593Smuzhiyunpseudo_state_dir="$(readlink -f $pseudo_state_dir)" 71*4882a593Smuzhiyun 72*4882a593Smuzhiyundebug_image="`echo $ROOTFS_TARBALL | grep '\-dbg\.rootfs\.tar'`" 73*4882a593Smuzhiyun 74*4882a593Smuzhiyunif [ -e "$pseudo_state_dir" -a -z "$debug_image" ]; then 75*4882a593Smuzhiyun echo "Error: $pseudo_state_dir already exists!" 76*4882a593Smuzhiyun echo "Please delete the rootfs tree and pseudo directory manually" 77*4882a593Smuzhiyun echo "if this is really what you want." 78*4882a593Smuzhiyun exit 1 79*4882a593Smuzhiyunfi 80*4882a593Smuzhiyun 81*4882a593Smuzhiyunmkdir -p "$pseudo_state_dir" 82*4882a593Smuzhiyuntouch "$pseudo_state_dir/pseudo.pid" 83*4882a593SmuzhiyunPSEUDO_LOCALSTATEDIR="$pseudo_state_dir" 84*4882a593Smuzhiyunexport PSEUDO_LOCALSTATEDIR 85*4882a593Smuzhiyun 86*4882a593Smuzhiyunecho "Extracting rootfs tarball using pseudo..." 87*4882a593Smuzhiyunecho "$PSEUDO $PSEUDO_OPTS tar -C \"$SDK_ROOTFS_DIR\" $TAR_OPTS \"$ROOTFS_TARBALL\"" 88*4882a593Smuzhiyun$PSEUDO $PSEUDO_OPTS tar -C "$SDK_ROOTFS_DIR" $TAR_OPTS "$ROOTFS_TARBALL" 89*4882a593Smuzhiyun 90*4882a593SmuzhiyunDIRCHECK=`ls -l "$SDK_ROOTFS_DIR" | wc -l` 91*4882a593Smuzhiyunif [ "$DIRCHECK" -lt 5 ]; then 92*4882a593Smuzhiyun echo "Warning: I don't see many files in $SDK_ROOTFS_DIR" 93*4882a593Smuzhiyun echo "Please double-check the extraction worked as intended" 94*4882a593Smuzhiyun exit 0 95*4882a593Smuzhiyunfi 96*4882a593Smuzhiyun 97*4882a593Smuzhiyunecho "SDK image successfully extracted to $SDK_ROOTFS_DIR" 98*4882a593Smuzhiyun 99*4882a593Smuzhiyunexit 0 100