summaryrefslogtreecommitdiff
path: root/pkgtools/pkg_tarup/files/pkg_tarup
blob: a3089b427dc78425fba77a0fbb6ae3dce1241637 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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
#! @SH@
#
# $Id: pkg_tarup,v 1.8 2002/11/23 22:47:03 wiz Exp $
#
# Tar up installed package
#
# (c) Copyright 2000-2002 Hubert Feyrer <hubert@feyrer.de>
#

PREFIX=${PREFIX:-@PREFIX@}

PATH=/sbin:/usr/sbin:/bin:/usr/bin:${PREFIX}/sbin:${PREFIX}/bin:@PKG_TOOLS_BIN@
export PATH

OS=`uname -s`

AWK=${AWK:-@AWK@}
ECHO=${ECHO:-@ECHO@}
ID=${ID:-@ID@}
SU=${SU:-@SU@}

if [ `${ID} -u` != 0 ]; then
	${ECHO} "Becoming root@`/bin/hostname` to create a binary package"
	${ECHO} -n "`${ECHO} ${SU} | ${AWK} '{ print $$1 }'` ";\
	exec ${SU} root -c "$0 $@"
fi

PKG_DBDIR=${PKG_DBDIR:-@PKG_DBDIR@}
PKG_SUFX=${PKG_SUFX:-@PKG_SUFX@}

PKGREPOSITORY=${PKGREPOSITORY:-/tmp}

PKG="$1"
rPKG="`pkg_info -e \"$PKG\"`"

if [ "$PKG" = "" -o "$rPKG" = "" -o -f "${PKG_DBDIR}/${rPKG}" ]
then
     ${ECHO} Usage: $0 installed_pkg
     exit 1
fi

PKG=$rPKG
${ECHO} "Creating binary package: $PKG"


check_and_add() {
	opt="$1"
	file="$2"

	if [ x"$opt" = x"" -o x"$file" = x"" ]; then
	   ${ECHO} Usage: check_and_add -opt +FILE
	   exit 1
	fi

	if [ -f "$file" ]
	then
	    PKG_ARGS="${PKG_ARGS} ${opt} ${file}"
	fi
}

check_and_add -c ${PKG_DBDIR}/${PKG}/+COMMENT
check_and_add -d ${PKG_DBDIR}/${PKG}/+DESC
check_and_add -b ${PKG_DBDIR}/${PKG}/+BUILD_VERSION
check_and_add -B ${PKG_DBDIR}/${PKG}/+BUILD_INFO
check_and_add -s ${PKG_DBDIR}/${PKG}/+SIZE_PKG
check_and_add -S ${PKG_DBDIR}/${PKG}/+SIZE_ALL
check_and_add -i ${PKG_DBDIR}/${PKG}/+INSTALL
check_and_add -k ${PKG_DBDIR}/${PKG}/+DEINSTALL
check_and_add -r ${PKG_DBDIR}/${PKG}/+REQUIRE
check_and_add -D ${PKG_DBDIR}/${PKG}/+DISPLAY
check_and_add -m ${PKG_DBDIR}/${PKG}/+MTREE		#NOTYET#

PLIST=/tmp/+CONTENTS.$$
sed -n \
    -e '/^@comment MD5:/d' \
    -e '/^@cwd \.$/,$d' \
    -e '/\$NetBSD/,$p' \
    <${PKG_DBDIR}/${PKG}/+CONTENTS >$PLIST

# Duplicate first @cwd (work around pkg_create "feature" ...)
grep '^@cwd' $PLIST | head -1 >$PLIST.1
if [ -s ${PLIST}.1 ]
then
    sed \
       -e "/`cat ${PLIST}.1 | sed 's,/,\\\\/,g'`/r${PLIST}.1" \
       <${PLIST} >${PLIST}.2
    mv ${PLIST}.2 ${PLIST}
fi
rm ${PLIST}.1

# ${ECHO} -----
# cat $PLIST
# ${ECHO} -----
# exit 0

# Just for kicks ...
# pkg_admin check "${PKG}"
  
pkg_create \
        ${PKG_ARGS} \
	-v \
	-f ${PLIST} \
	-l \
	-p "`pkg_info -qp ${PKG} | ${AWK} 'NR == 1 { print $2; exit }'`" \
	-P "`pkg_info -qf ${PKG} | ${AWK} '/^@pkgdep/ { print $2 }'`" \
	-C "`pkg_info -qf ${PKG} | ${AWK} '/^@pkgcfl/ { print $2 }'`" \
	${PKGREPOSITORY}/${PKG}${PKG_SUFX}

rm -f ${PLIST}
exit 0


+REQUIRED_BY:

 - maybe the squirelling away of +REQUIRED_BY should be done here
   instead of in the bsd.pkg.mk framework that normally calls this.


mtree file considerations:

 - keeping uncompressed mtree file adds ~10% to the size of /var/db/pkg

 - could gzip file, space saving: 5kb->850b (plus some intelligence to
   uncompress them when needed)

 - not keeping mtree file results in pkgs w/o mtree file (but should work)

integration:

 - how/where?  I'd prefer not to have yet another pkg_* utility flying
   around, integration into pkg_admin would be nice.  But how merge a
   shell script into a C executable?  REWRITE in C of course!  ;-)