#!/bin/bash # # Copyright (C) 2010-2011 Wind River Systems, Inc. # # 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 red='\E[31;40m' green='\E[32;40m' #Get current owner OWNER=`whoami` #Get group GROUP=`id -gn ${USER}` MACHINE_ARCH=`bitbake -e | sed -n 's/^MACHINE_ARCH=\"\(.*\)\"/\1/p'` DEPLOY_DIR_IMAGE=`bitbake -e | sed -n 's/^DEPLOY_DIR_IMAGE=\"\(.*\)\"/\1/p'` #Get value of varibale MACHINE_INE and DEPLOY_DIR_IMAGE LSB_IMAGE=poky-image-lsb-${MACHINE_ARCH}-test.ext3 ECHO() { echo -e "${green}$@" tput sgr0 } ERROR() { echo -e "${red}$@" tput sgr0 exit 1 } exit_check() { [ $? -ne 0 ] && exit $? } usage() { ECHO "Usage: PC\$ create-lsb-image ARCH ROOTFS_IMAGE" ECHO " ARCH: x86 or x86-64 or ppc32" ECHO " ROOTFS_IMAGE: \ Name of the rootfs image with suffix \"tar.bz2\"" ECHO "" ECHO "Examples:" ECHO " PC\$ creat-lsb-image \ x86 poky-image-lsb-qemux86-20110317030443.rootfs.tar.bz2" exit 1 } #There should be two parameters to get machine type and name of image if [ $# -ne 2 ]; then usage fi #Get list for lsb test suite case ${1} in "x86") T_ARCH=ia32 P_ARCH=i486 COM_PACKAGE_LIST="lsb-dist-testkit-4.1.0-5.${T_ARCH}.tar.gz" ;; "x86-64") T_ARCH=amd64 P_ARCH=x86_64 MACHINE_ARCH=${MACHINE_ARCH/x86_64/x86-64} COM_PACKAGE_LIST="lsb-dist-testkit-4.1.0-5.${P_ARCH}.tar.gz" ;; "ppc32") P_ARCH=ppc T_ARCH=${1} COM_PACKAGE_LIST="lsb-dist-testkit-4.1.0-5.${T_ARCH}.tar.gz" ;; *) usage ;; esac APP_PACKAGE_RPMLIST="lsb-apache-2.2.14-3.lsb4.${P_ARCH}.rpm \ lsb-tcl-8.5.7-6.lsb4.${P_ARCH}.rpm \ lsb-expect-5.43.0-11.lsb4.${P_ARCH}.rpm \ lsb-groff-1.20.1-5.lsb4.${P_ARCH}.rpm \ lsb-raptor-1.4.19-3.lsb4.${P_ARCH}.rpm \ lsb-xpdf-1.01-10.lsb4.${P_ARCH}.rpm \ lsb-samba-3.4.3-5.lsb4.${P_ARCH}.rpm \ lsb-rsync-3.0.6-3.lsb4.${P_ARCH}.rpm" APP_PACKAGE_SOURCELIST="expect-tests.tar \ tcl-tests.tar \ raptor-tests.tar \ test1.pdf \ test2.pdf" PACKAGE_LIST="${COM_PACKAGE_LIST} \ ${APP_PACKAGE_RPMLIST} \ ${APP_PACKAGE_SOURCELIST}" #Version for lsb test suite RELEASE=released-4.1.0 #Tools of download packages WGET="wget -c -t 5" SERVER1="\ http://ftp.linuxfoundation.org/pub/lsb/bundles/${RELEASE}/dist-testkit" SERVER2="\ http://ftp.linux-foundation.org/pub/lsb/app-battery/${RELEASE}/${T_ARCH}" SERVER3="http://ftp.linuxfoundation.org/pub/lsb/snapshots/appbat/tests" #Function for downloading package from URL pointed download() { for i in $@; do ECHO " -->Downloading package \"${i}\"" PACKAGE_NAME=${i} suffix=${PACKAGE_NAME##*.} if [ "$suffix" = "gz" ];then ${WGET} ${SERVER1}/${i} elif [ "$suffix" = "rpm" ];then ${WGET} ${SERVER2}/${i} else ${WGET} ${SERVER3}/${i} fi done } #Check lsb image [ ! -d $DEPLOY_DIR_IMAGE ] && ERROR "\ Image directory does not exist: ${DEPLOY_DIR_IMAGE}" ECHO "Entering directory $DEPLOY_DIR_IMAGE" cd $DEPLOY_DIR_IMAGE if [ ! -f ${2} ]; then ECHO "rootfs image \"${2}\" not found in ${DEPLOY_DIR_IMAGE}" ECHO "Please copy \"${2}\" to \"${DEPLOY_DIR_IMAGE}\"" exit 1 fi #Umount lsbtmp [ ! -d lsbtmp ] && mkdir lsbtmp #Download lsb test suite mkdir -p lsb-test-suite-${MACHINE_ARCH} || \ ERROR "Couldn't find lsb test suite for ${MACHINE_ARCH}" cd lsb-test-suite-${MACHINE_ARCH} ECHO "Downloading lsb test suite, it would take some time..." download ${PACKAGE_LIST} cd .. #Creat lsb image if [ -f ${LSB_IMAGE} ];then sudo umount lsbtmp > /dev/null 2>&1 ECHO "Removing old lsb image..." /bin/rm ${LSB_IMAGE} > /dev/null 2>&1 fi ECHO "Creating a 8GB file for the lsb image" dd if=/dev/zero of=${LSB_IMAGE} bs=1M count=8000 > /dev/null 2>&1 exit_check ECHO "Formatting ext3 image..." mkfs.ext3 -q -F ${LSB_IMAGE} > /dev/null 2>&1 tune2fs -j ${LSB_IMAGE} > /dev/null 2>&1 ECHO "Generating final image" [ ! -d lsbtmp ] && mkdir lsbtmp #Install file system and lsb test suite to lsb image sudo mount -o loop ${LSB_IMAGE} lsbtmp exit_check ECHO " ->Installing rootfs..." sudo tar jpxf ${2} -C lsbtmp exit_check ECHO " ->Installing lsb test suite..." cd lsb-test-suite-${MACHINE_ARCH} if [ "${1}" = "x86-64" ]; then sudo tar zpxf lsb-dist-testkit-4.1.0-5.${P_ARCH}.tar.gz -C ../lsbtmp else sudo tar zpxf lsb-dist-testkit-4.1.0-5.${T_ARCH}.tar.gz -C ../lsbtmp fi exit_check sudo mkdir ../lsbtmp/lsb-Application sudo cp *.rpm *.tar *.pdf ../lsbtmp/lsb-Application exit_check cd .. if [ -f modules-*-${MACHINE_ARCH}.tgz ];then ECHO " ->Installing moudles of driver..." sudo tar zpxf modules-*-${MACHINE_ARCH}.tgz -C lsbtmp/ fi #Unmount lsbtmp sudo umount lsbtmp exit_check sudo rm -rf lsbtmp #Change file attribute sudo chown ${OWNER}:${GROUP} ${LSB_IMAGE} exit_check sudo chmod 755 ${LSB_IMAGE} exit_check #Set up link ln -sf ${LSB_IMAGE} poky-image-lsb-${MACHINE_ARCH}.ext3 ECHO "The LSB test environment has been setup successfully." ECHO "Please run this image on platform ${MACHINE_ARCH}" id='n86' href='#n86'>86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218