#/bin/ksh #default values BITNESS=32 DEFAULT_DIR_PERMS=0755 DEFAULT_OWNER=root DEFAULT_GROUP=root show_usage () { echo echo "Usage: $0 [-32|-64] [-pnavcdVeih?]" echo echo "Use -32 to choose to make a 32-bit package and -64 to make a 64-bit" echo "package. These two flags can be omitted and 32-bit will be assumed." echo echo " -h and -? \"Print this help\"" echo echo "The following flags are mandatory:" echo echo " -p \"Package\"" echo " -n \"Package Name\"" echo " -a \"Architecture: sparc/i386\"" echo " -v \"Package Version\"" echo " -c \"Package Category\"" echo " -d \"Package Description\"" echo " -V \"Package Vendor\"" echo " -e \"Vendor Email\"" echo " -i \"Install Root\"" echo echo "Example: $0 -64 -p BLHbindx -n \"ISC BIND\" -a sparc -v 9.3.1 -c system -d \"ISC BIND DNS Server\" -V \"Brian Hechinger\" -e wonko@4amlunch.net -i /usr/local" echo } # pkginfo file stuff that needs to be set. while getopts 3264?hp:n:a:v:c:d:V:e:i: flags; do case $flags in 6 | 4) BITNESS=64;; 3 | 2) BITNESS=32;; p) PI_PKG="${OPTARG}";; n) PI_NAME="${OPTARG}";; a) PI_ARCH="${OPTARG}";; v) PI_VERSION="${OPTARG}";; c) PI_CATEGORY="${OPTARG}";; d) PI_DESC="${OPTARG}";; V) PI_VENDOR="${OPTARG}";; e) PI_EMAIL="${OPTARG}";; i) INSTALLROOT="${OPTARG}";; ? | h) show_usage; exit 4;; esac done if [ "${PI_NAME}"x = "x" ] || [ "${PI_ARCH}"x = "x" ] || [ "${PI_VERSION}"x = "x" ] || [ "${PI_CATEGORY}"x = "x" ] || [ "${PI_DESC}"x = "x" ] || [ "${PI_VENDOR}"x = "x" ] || [ "${PI_EMAIL}"x = "x" ] || [ "${PI_PKG}"x = "x" ] || [ "${INSTALLROOT}"x = "x" ]; then show_usage exit 3 fi INSTALLROOT=`echo ${INSTALLROOT} | sed -e 's/\/$//g'` TMP=/tmp/${PI_PKG}pkg/ mkdir ${TMP} # make the correct updates for 64-bit packages if [ $BITNESS -eq 64 ]; then PI_NAME="${PI_NAME} (64-bit)" PI_ARCH="${PI_ARCH} (64-bit)" fi # create pkginfo file echo "Creating pkginfo file..." echo "CLASSES=none save restore" > pkginfo echo "BASEDIR=/" >> pkginfo echo "TZ=EST" >> pkginfo echo "PATH=/sbin:/usr/sbin:/usr/bin:/usr/sadm/install/bin" >> pkginfo echo "PKG=${PI_PKG}" >> pkginfo echo "NAME=${PI_NAME}" >> pkginfo echo "ARCH=${PI_ARCH}" >> pkginfo echo "VERSION=${PI_VERSION}" >> pkginfo echo "CATEGORY=${PI_CATEGORY}" >> pkginfo echo "DESC=${PI_DESC}" >> pkginfo echo "VENDOR=${PI_VENDOR}" >> pkginfo echo "HOTLINE=" >> pkginfo echo "EMAIL=${PI_EMAIL}" >> pkginfo echo "VSTOCK=" >> pkginfo echo "PSTAMP=" >> pkginfo echo "PKGINST=${PI_PKG}" >> pkginfo echo "PKGSAV=/var/sadm/pkg/${PI_PKG}/save" >> pkginfo echo "INSTDATE=" >> pkginfo # only if 64-bit if [ $BITNESS -eq 64 ]; then echo "SUNW_ISA=sparcv9" >> pkginfo fi # create prototype file echo "Creating prototypes file..." echo "i pkginfo" > prototype BUILDUP= IFS=/ for DIRS in ${INSTALLROOT}; do if [ ${DIRS}x = "x" ]; then continue fi BUILDUP=${BUILDUP}/${DIRS} echo "d none ${BUILDUP} ${DEFAULT_DIR_PERMS} ${DEFAULT_OWNER} ${DEFAULT_GROUP}" >> prototype done unset IFS for DIRECTORIES in `find root/ -type d`; do FIXED=`echo ${DIRECTORIES} | sed -e 's/^root\///g'` PERMS=`ls -ld ${DIRECTORIES} | awk '{print $1, $3, $4}' | cut -c 2- | sed -e 's/---/0/g' -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' \ -e 's/r--/4/g' -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g'` if [ "${FIXED}"x = "x" ]; then continue fi echo "d none ${INSTALLROOT}/${FIXED} 0${PERMS} ${OWNER}" >> prototype done for FILES in `find root/ -type f`; do FIXED=`echo ${FILES} | sed -e 's/^root\///g'` PERMS=`ls -l ${FILES} | awk '{print $1, $3, $4}' | cut -c 2- | sed -e 's/---/0/g' -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' \ -e 's/r--/4/g' -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g'` echo "f none ${INSTALLROOT}/${FIXED}=root/${FIXED} 0${PERMS} ${OWNER}" >> prototype done echo "Making the Package..." pkgmk -a `echo ${PI_ARCH} | awk '{print $1}'` -o -d ${TMP} echo "Transfering the Package..." pkgtrans -s ${TMP} ${PI_PKG}.pkg ${PI_PKG} echo "Moving the Package..." mv ${TMP}/${PI_PKG}.pkg ./ rm -rf ${TMP} echo "Package Done!!!"