blob: 8f57f5d05c92a03dc609844b942604a28dd7fcbb (
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
#!/bin/bash
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id: /var/cvsroot/gentoo-src/portage/bin/quickpkg,v 1.13.2.6 2005/08/10 22:08:48 vapier Exp $
# This script tries to quickly create a Gentoo binary package using the
# VDB_PATH/category/pkg/* files
#
# Resulting tbz2 file will be created in ${PKGDIR} ...
# default is /usr/portage/packages/All/
if [ "`whoami`" != "root" ] ; then
echo "You must run this as root"
exit 1
fi
export PORTAGE_DB=$(portageq vdb_path)
export ROOT=$(portageq envvar ROOT)
export ROOT=${ROOT%/}/
if [ -z "$1" ] || [ $1 == "-h" ] || [ $1 == "--help" ] ; then
echo "QUICKPKG ver 1.2"
echo "USAGE: quickpkg <list of pkgs>"
echo " a pkg can be of the form:"
echo " - ${PORTAGE_DB}/<CATEGORY>/<PKG-VERSION>/"
echo " - single depend-type atom ..."
echo " if portage can emerge it, quickpkg can make a package"
echo " for exact definitions of depend atoms, see ebuild(5)"
echo
echo "EXAMPLE:"
echo " quickpkg ${PORTAGE_DB}/net-www/apache-1.3.27-r1"
echo " package up apache, just version 1.3.27-r1"
echo " quickpkg apache"
echo " package up apache, all versions of apache installed"
echo " quickpkg =apache-1.3.27-r1"
echo " package up apache, just version 1.3.27-r1"
exit 1
fi
export PKGDIR=$(portageq envvar PKGDIR)
export PORTAGE_TMPDIR=$(portageq envvar PORTAGE_TMPDIR)
source /sbin/functions.sh
# here we make a package given a little info
# $1 = package-name w/version
# $2 = category
do_pkg() {
mkdir -p "${PORTAGE_TMPDIR}/portage-pkg" || exit 1
chmod 0750 "${PORTAGE_TMPDIR}/portage-pkg"
MYDIR="${PORTAGE_TMPDIR}/portage-pkg/$1"
SRCDIR="${PORTAGE_DB}/$2/$1"
LOG="${PORTAGE_TMPDIR}/portage-pkg/$1-quickpkglog"
ebegin "Building package for $1"
(
# clean up temp directory
rm -rf "${MYDIR}"
# get pkg info files
mkdir -p "${MYDIR}"/temp
cp "${SRCDIR}"/* "${MYDIR}"/temp/
# create filelist and a basic tbz2
gawk '{
if ($1 != "dir") {
if ($1 == "obj")
NF=NF-2
else if ($1 == "sym")
NF=NF-3
print
}
}' "${SRCDIR}"/CONTENTS | cut -f2- -d" " - | sed -e 's:^/:./:' > "${MYDIR}"/filelist
tar vjcf "${MYDIR}"/bin.tar.bz2 -C "${ROOT}" --files-from="${MYDIR}"/filelist --no-recursion
# join together the basic tbz2 and the pkg info files
xpak "${MYDIR}"/temp "${MYDIR}"/inf.xpak
tbz2tool join "${MYDIR}"/bin.tar.bz2 "${MYDIR}"/inf.xpak "${MYDIR}"/$1.tbz2
# move the final binary package to PKGDIR
[ -d "${PKGDIR}"/All ] || mkdir -p "${PKGDIR}"/All
[ -d "${PKGDIR}/$2" ] || mkdir -p "${PKGDIR}/$2"
mv "${MYDIR}"/$1.tbz2 "${PKGDIR}"/All
( cd "${PKGDIR}/$2" && ln -s ../All/$1.tbz2 )
# cleanup again
rm -rf "${MYDIR}"
) >& "${LOG}"
if [ -e "${PKGDIR}/All/$1.tbz2" ] ; then
rm -f "${LOG}"
PKGSTATS="${PKGSTATS}"$'\n'"$(einfo $1: $(du -h "${PKGDIR}/All/$1.tbz2" | gawk '{print $1}'))"
eend 0
else
cat ${LOG}
PKGSTATS="${PKGSTATS}"$'\n'"$(ewarn $1: not created)"
eend 1
fi
}
# here we parse the parameters given to use on the cmdline
export PKGERROR=""
export PKGSTATS=""
for x in "$@" ; do
# they gave us full path
if [ -e "${x}"/CONTENTS ] ; then
x=$(readlink -f $x)
pkg=$(echo ${x} | cut -d/ -f6)
cat=$(echo ${x} | cut -d/ -f5)
do_pkg "${pkg}" "${cat}"
# lets figure out what they want
else
DIRLIST=$(portageq match "${ROOT}" "${x}")
if [ -z "${DIRLIST}" ] ; then
eerror "Could not find anything to match '${x}'; skipping"
export PKGERROR="${PKGERROR} ${x}"
continue
fi
for d in ${DIRLIST} ; do
pkg=$(echo ${d} | cut -d/ -f2)
cat=$(echo ${d} | cut -d/ -f1)
if [ -f "${PORTAGE_DB}/${cat}/${pkg}/CONTENTS" ] ; then
do_pkg ${pkg} ${cat}
elif [ -d "${PORTAGE_DB}/${cat}/${pkg}" ] ; then
ewarn "Package '${cat}/${pkg}' was injected; skipping"
else
eerror "Unhandled case (${cat}/${pkg}) !"
eerror "Please file a bug at http://bugs.gentoo.org/"
exit 10
fi
done
fi
done
if [ -z "${PKGSTATS}" ] ; then
eerror "No packages found"
exit 1
else
echo $'\n'"$(einfo Packages now in ${PKGDIR}:)${PKGSTATS}"
fi
if [ ! -z "${PKGERROR}" ] ; then
ewarn "The following packages could not be found:"
ewarn "${PKGERROR}"
exit 2
fi
exit 0
|