Files
Arch-R/scripts/image
Stephan Raue 2da8b06667 scripts/image: quote variables
Signed-off-by: Stephan Raue <stephan@openelec.tv>
2011-08-16 00:55:21 +02:00

242 lines
7.3 KiB
Bash
Executable File

#!/bin/sh
################################################################################
# This file is part of OpenELEC - http://www.openelec.tv
# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv)
#
# This Program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# 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 OpenELEC.tv; see the file COPYING. If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
# http://www.gnu.org/copyleft/gpl.html
################################################################################
. config/options $1
$SCRIPTS/checkdeps build
$SCRIPTS/build toolchain
$SCRIPTS/build squashfs
$SCRIPTS/build fakeroot
export INSTALL=$BUILD/image/system
BUILD_DATE=`date +%Y%m%d%H%M%S`
if [ "$OPENELEC_VERSION" = devel -o "$OPENELEC_VERSION" = debug ]; then
GIT_BUILD=`git log --pretty=format:'' | wc -l`
GIT_HASH=`git log -n1 --format=%H`
OPENELEC_VERSION=$OPENELEC_VERSION-$BUILD_DATE-r$GIT_BUILD
fi
TARGET_VERSION="$PROJECT.$TARGET_ARCH-$OPENELEC_VERSION"
IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
# setup fakeroot
rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist
touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT
chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable
echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT
# clean old install dirs
rm -rf $INSTALL
rm -rf $STAMPS_INSTALL
mkdir -p $INSTALL
# create baselayout
mkdir -p $INSTALL/bin
mkdir -p $INSTALL/etc
mkdir -p $INSTALL/lib
mkdir -p $INSTALL/sbin
mkdir -p $INSTALL/dev
mkdir -p $INSTALL/proc
mkdir -p $INSTALL/run
mkdir -p $INSTALL/sys
mkdir -p $INSTALL/usr
mkdir -p $INSTALL/var
mkdir -p $INSTALL/flash
mkdir -p $INSTALL/storage
ln -sf /var $INSTALL/usr/var
ln -sf /var/tmp $INSTALL/tmp
ln -sf /var/media $INSTALL/media
if [ "$TARGET_ARCH" = "x86_64" -o "$TARGET_ARCH" = "powerpc64" ]; then
ln -s /lib $INSTALL/lib64
ln -s lib $INSTALL/usr/lib64
fi
echo "$DISTRONAME" > $INSTALL/etc/distribution
echo "$PROJECT.$TARGET_ARCH" > $INSTALL/etc/arch
echo "$OPENELEC_VERSION" > $INSTALL/etc/version
echo "$TARGET_VERSION" > $INSTALL/etc/release
echo "$DISTRONAME - Version: $OPENELEC_VERSION" > $INSTALL/etc/openelec-release
if [ -n "$GIT_HASH" ]; then
echo "$GIT_HASH" >> $INSTALL/etc/gitrev
fi
# create /etc/issue
echo $GREATING0 > $INSTALL/etc/issue
echo $GREATING1 >> $INSTALL/etc/issue
echo $GREATING2 >> $INSTALL/etc/issue
echo $GREATING3 >> $INSTALL/etc/issue
echo $GREATING4 >> $INSTALL/etc/issue
echo "$DISTRONAME Version: $OPENELEC_VERSION" >> $INSTALL/etc/issue
if [ -n "$GIT_HASH" ]; then
echo "$DISTRONAME git: $GIT_HASH" >> $INSTALL/etc/issue
fi
# copy project related files to filesystem
if [ -d "$PROJECT_DIR/$PROJECT/filesystem" ]; then
cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL
fi
# Basissystem...
$SCRIPTS/install eglibc
$SCRIPTS/install gcc-final
$SCRIPTS/install linux system
$SCRIPTS/install busybox
$SCRIPTS/install util-linux
# Network support
[ "$NETWORK" = "yes" ] && $SCRIPTS/install network
# Graphic support
[ ! "$DISPLAYSERVER" = "no" ] && $SCRIPTS/install $DISPLAYSERVER
# Multimedia support
[ ! "$MEDIACENTER" = "no" ] && $SCRIPTS/install mediacenter
# Automounter support
[ "$UDISKS" = "yes" ] && $SCRIPTS/install udisks
# Powermanagement support
[ "$UPOWER" = "yes" ] && $SCRIPTS/install upower
[ "$UPOWER" = "yes" ] && $SCRIPTS/install ConsoleKit
# NTFS 3G support
[ "$NTFS3G" = "yes" ] && $SCRIPTS/install ntfs-3g_ntfsprogs
# Apple mount (ifuse) support
[ "$APPLEMOUNT" = "yes" ] && $SCRIPTS/install ifuse
# Remote support
[ "$REMOTE_SUPPORT" = "yes" ] && $SCRIPTS/install remote
# LCD support
[ ! "$LCD_DRIVER" = "none" ] && $SCRIPTS/install lcdproc
# Sensors support
[ "$SENSOR_SUPPORT" = "yes" ] && $SCRIPTS/install lm_sensors
# Update support
[ "$UPDATE_SUPPORT" = "yes" ] && $SCRIPTS/install autoupdate
# Update support
[ "$INSTALLER_SUPPORT" = "yes" ] && $SCRIPTS/install installer
# Devtools... (not for Release)
[ "$TESTING" = "yes" ] && $SCRIPTS/install testing
[ "$DEVTOOLS" = "yes" ] && $SCRIPTS/install debug
# OEM packages
[ "$OEM_SUPPORT" = "yes" ] && $SCRIPTS/install oem
# strip kernel modules
for MOD in `find $INSTALL/lib/modules/ -name *.ko`; do
$STRIP --strip-debug $MOD
done
# make target dir
mkdir -p $TARGET_IMG
rm -rf $TARGET_IMG/$IMAGE_NAME.kernel
rm -rf $TARGET_IMG/$IMAGE_NAME.mach_kernel
# copy kernel to target dir
if [ "$BOOTLOADER" = "u-boot" ]; then
KERNEL_IMAGE="uImage"
else
KERNEL_IMAGE="bzImage"
fi
if [ "$TARGET_ARCH" = i386 -o "$TARGET_ARCH" = x86_64 ]; then
KERNEL_ARCH="x86"
elif [ "$TARGET_ARCH" = arm ]; then
KERNEL_ARCH="arm"
fi
cp -PR $BUILD/linux-*/arch/$KERNEL_ARCH/boot/$KERNEL_IMAGE $TARGET_IMG/$IMAGE_NAME.kernel
if [ "$BOOTLOADER" = "atv-bootloader" ]; then
cp -PR $BUILD/atv-bootloader-*/mach_kernel $TARGET_IMG/$IMAGE_NAME.mach_kernel
chmod 0644 $TARGET_IMG/$IMAGE_NAME.mach_kernel
fi
# create squashfs file
echo "rm -rf $TARGET_IMG/$IMAGE_NAME.system" >> $FAKEROOT_SCRIPT
# echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $BUILD/image/system $TARGET_IMG/$IMAGE_NAME.system -noappend -comp xz" >> $FAKEROOT_SCRIPT
echo "$ROOT/$TOOLCHAIN/bin/mksquashfs $BUILD/image/system $TARGET_IMG/$IMAGE_NAME.system -noappend" >> $FAKEROOT_SCRIPT
# run fakeroot
$ROOT/$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT
rm -rf $FAKEROOT_SCRIPT
# set permissions
chmod 0644 $TARGET_IMG/$IMAGE_NAME.system
chmod 0644 $TARGET_IMG/$IMAGE_NAME.kernel
if [ "$1" = "release" ]; then
RELEASE_DIR="target/$IMAGE_NAME"
# cleanup
rm -rf $RELEASE_DIR
# create release dir
mkdir -p $RELEASE_DIR
cp $ROOT/README $RELEASE_DIR
cp $ROOT/CHANGELOG $RELEASE_DIR
# cp -R $CONFIG/image/* $RELEASE_DIR
cp -R $CONFIG/release/* $RELEASE_DIR
echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE
mkdir -p $RELEASE_DIR/licenses
cp $ROOT/licenses/* $RELEASE_DIR/licenses
mkdir -p $RELEASE_DIR/target
cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/target/SYSTEM
cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/target/KERNEL
if [ -f $TARGET_IMG/$IMAGE_NAME.mach_kernel ]; then
cp $TARGET_IMG/$IMAGE_NAME.mach_kernel $RELEASE_DIR/target/MACH_KERNEL
fi
# create md5sum's
( cd $RELEASE_DIR;
md5sum -t target/SYSTEM > target/SYSTEM.md5;
md5sum -t target/KERNEL > target/KERNEL.md5;
if [ -f target/MACH_KERNEL ]; then
md5sum -t target/MACH_KERNEL > target/MACH_KERNEL.md5;
fi
)
# create target directory
mkdir -p $TARGET_IMG
# remove an previous created release tarball
rm -rf $TARGET_IMG/$IMAGE_NAME.tar.bz2
# create release tarball
tar cjf $TARGET_IMG/$IMAGE_NAME.tar.bz2 -C target $IMAGE_NAME
# cleanup release dir
rm -rf $RELEASE_DIR
fi