checkinstall.initd revision 7c478bd95313f5f23a4c958a745db2134aa03244
#!/bin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License"). You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
#
# checkinstall.initd
#
# Before we begin installing new files, we need to save the existing files
# if the administrator has modified them since their original installation.
# To do this, we find 'e' and 'l' entries in the pkgmap, convert their
# relative "etc/" prefix to /etc, and them pipe them into pkgchk. For
# each file which already exists and whose contents do not match the size or
# checksum saved in the package database, we get (^ = start of line):
#
# ^ERROR: /etc/init.d/somefile
# ^ file size <104780> expected <181> actual
# ^ file cksum <56515> expected <14331> actual
#
# We grep for ERROR: followed by a single non-whitespace token, then strip
# the leading '^ERROR: ', leaving us a name of a modified file that we
# capture in the MODIFIED_AFTER_INSTALLED variable. This variable is written
# to the file provided as an argument to the script, in the form of an
# environment variable setting. Said file later gets sourced by
# the pkgadd command for use in our class action script.
case "$ARCH" in
sparc.sun4m) EXT=.m;;
sparc.sun4u) EXT=.u;;
sparc.sun4v) EXT=.v;;
i386.i86pc) EXT=.i;;
*) EXT="";;
esac
PKGMAP=$INST_DATADIR/$PKG$EXT/pkgmap
MODIFIED_AFTER_INSTALLED=""
if [ "$UPDATE" = yes ]; then
MODIFIED_AFTER_INSTALLED=` \
awk '($2 == "e" || $2 == "l") && $3 == "initd" {print $4}' $PKGMAP | \
sed -e 's:^etc/:/etc/:' -e 's/=.*$//' | \
pkgchk -R ${PKG_INSTALL_ROOT:-/} -q -i /dev/stdin $PKG 2>&1 | \
grep '^ERROR: [^ ]*$' | sed 's/^ERROR: //' `
fi
echo MODIFIED_AFTER_INSTALLED=\"${MODIFIED_AFTER_INSTALLED}\" > $1
exit 0