makepackage.sh revision 1ace73711fa06807748eff26632c7273a1f7c2db
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync#!/bin/sh
247efe202344328bffb8de7e47aee60039cd95e0vboxsync# Sun VirtualBox
2d928c5b0e0cc3fd970343e314cd85050c55660evboxsync# VirtualBox Solaris Guest Additions package creation script.
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync#
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# Copyright (C) 2008-2009 Sun Microsystems, Inc.
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync#
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# available from http://www.virtualbox.org. This file is free software;
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# you can redistribute it and/or modify it under the terms of the GNU
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# General Public License (GPL) as published by the Free Software
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync#
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# Clara, CA 95054 USA or visit http://www.sun.com if you need
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# additional information or have any questions.
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync#
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync#
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# Usage:
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# makespackage.sh $(PATH_TARGET)/install packagename svnrev
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncif test -z "$3"; then
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync echo "Usage: $0 installdir packagename svnrev"
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync exit 1
6095269a3237b1ef8bf4edefc11f2d888d8a41ebvboxsyncfi
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
685409983863f02e8295369273d1844dca1f51c5vboxsyncVBOX_BASEPKG_DIR=$1
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncVBOX_INSTALLED_DIR="$VBOX_BASEPKG_DIR"/opt/VirtualBoxAdditions
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncVBOX_PKGFILENAME=$2
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncVBOX_SVN_REV=$3
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncVBOX_PKGNAME=SUNWvboxguest
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncVBOX_AWK=/usr/bin/awk
969643a53adfd6346c00c1a5fbbe64d9cacff0a7vboxsyncVBOX_GGREP=/usr/sfw/bin/ggrep
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncVBOX_AWK=/usr/bin/awk
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# check for GNU grep we use which might not ship with all Solaris
969643a53adfd6346c00c1a5fbbe64d9cacff0a7vboxsyncif test ! -f "$VBOX_GGREP" && test ! -h "$VBOX_GGREP"; then
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync echo "## GNU grep not found in $VBOX_GGREP."
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync exit 1
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncfi
969643a53adfd6346c00c1a5fbbe64d9cacff0a7vboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# bail out on non-zero exit status
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncset -e
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# Fixup filelist using awk, the parameters must be in awk syntax
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# params: filename condition action
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncfilelist_fixup()
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync{
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync "$VBOX_AWK" 'NF == 6 && '"$2"' { '"$3"' } { print }' "$1" > "tmp-$1"
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync mv -f "tmp-$1" "$1"
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync}
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# Create relative hardlinks
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsynccd "$VBOX_INSTALLED_DIR"
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncln -f ./VBoxISAExec $VBOX_INSTALLED_DIR/VBoxService
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncln -f ./VBoxISAExec $VBOX_INSTALLED_DIR/VBoxClient
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncln -f ./VBoxISAExec $VBOX_INSTALLED_DIR/VBoxControl
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsync# prepare file list
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsynccd "$VBOX_BASEPKG_DIR"
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncecho 'i pkginfo=./vboxguest.pkginfo' > prototype
8d4665a316d78d6587fd1c9da948f7aa37d0bfddvboxsyncecho 'i postinstall=./postinstall.sh' >> prototype
52ae37fbf70a7b6b438df35f189cf87d239f2792vboxsyncecho 'i preremove=./preremove.sh' >> prototype
1a04ec99647f9be2f2ba19cf247c0f989aa2e80cvboxsyncecho 'i space=./vboxguest.space' >> prototype
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncecho 'i depend=./vboxguest.depend' >> prototype
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncif test -f "./vboxguest.copyright"; then
969643a53adfd6346c00c1a5fbbe64d9cacff0a7vboxsync echo 'i copyright=./vboxguest.copyright' >> prototype
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncfi
ec9aa1180070b037866f064ce720254cd9f03721vboxsync
8d4665a316d78d6587fd1c9da948f7aa37d0bfddvboxsync# Exclude directory entries to not cause conflicts (owner,group) with existing directories in the system
83bb1f16d193175abf8fc1c3dffea43611efbf67vboxsyncfind . ! -type d | $VBOX_GGREP -v -E 'prototype|makepackage.sh|vboxguest.pkginfo|postinstall.sh|preremove.sh|vboxguest.space|vboxguest.depend|vboxguest.copyright' | pkgproto >> prototype
ec9aa1180070b037866f064ce720254cd9f03721vboxsync
ec9aa1180070b037866f064ce720254cd9f03721vboxsync# Include only opt/VirtualBoxAdditions and subdirectories as we want uninstall to clean up directory structure as well
8d4665a316d78d6587fd1c9da948f7aa37d0bfddvboxsyncfind . -type d | $VBOX_GGREP -E 'opt/VirtualBoxAdditions' | pkgproto >> prototype
efe619f27bff8e4d2124d1f09a327c7a63abe1dcvboxsync
ec9aa1180070b037866f064ce720254cd9f03721vboxsync# don't grok for the class files
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncfilelist_fixup prototype '$2 == "none"' '$5 = "root"; $6 = "bin"'
8d4665a316d78d6587fd1c9da948f7aa37d0bfddvboxsync
efe619f27bff8e4d2124d1f09a327c7a63abe1dcvboxsync# VBoxService requires suid
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncfilelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/VBoxService"' '$4 = "4755"'
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncfilelist_fixup prototype '$3 == "opt/VirtualBoxAdditions/amd64/VBoxService"' '$4 = "4755"'
ec9aa1180070b037866f064ce720254cd9f03721vboxsync
dba1919dac01f490c625e0470b528e469c30651dvboxsync# vboxguest
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncfilelist_fixup prototype '$3 == "usr/kernel/drv/vboxguest"' '$6="sys"'
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncfilelist_fixup prototype '$3 == "usr/kernel/drv/amd64/vboxguest"' '$6="sys"'
ec9aa1180070b037866f064ce720254cd9f03721vboxsync
dba1919dac01f490c625e0470b528e469c30651dvboxsyncecho " --- start of prototype ---"
ec9aa1180070b037866f064ce720254cd9f03721vboxsynccat prototype
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncecho " --- end of prototype --- "
ec9aa1180070b037866f064ce720254cd9f03721vboxsync
dba1919dac01f490c625e0470b528e469c30651dvboxsync# explicitly set timestamp to shutup warning
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncVBOXPKG_TIMESTAMP=vboxguest`date '+%Y%m%d%H%M%S'`_r$VBOX_SVN_REV
ec9aa1180070b037866f064ce720254cd9f03721vboxsync
ec9aa1180070b037866f064ce720254cd9f03721vboxsync# create the package instance
dba1919dac01f490c625e0470b528e469c30651dvboxsyncpkgmk -p $VBOXPKG_TIMESTAMP -o -r .
ec9aa1180070b037866f064ce720254cd9f03721vboxsync
ec9aa1180070b037866f064ce720254cd9f03721vboxsync# translate into package datastream
8d4665a316d78d6587fd1c9da948f7aa37d0bfddvboxsyncpkgtrans -s -o /var/spool/pkg `pwd`/$VBOX_PKGFILENAME "$VBOX_PKGNAME"
dba1919dac01f490c625e0470b528e469c30651dvboxsync
ec9aa1180070b037866f064ce720254cd9f03721vboxsyncrm -rf "/var/spool/pkg/$VBOX_PKGNAME"
969643a53adfd6346c00c1a5fbbe64d9cacff0a7vboxsyncexit $?
969643a53adfd6346c00c1a5fbbe64d9cacff0a7vboxsync
e77749d161a9912b95090202d25c428bc8314dadvboxsync