IMPORTANT: this change has a docs/UPDATING entry! This change is a long overdue switch-over from the old MINIX set of user and group accounts to the NetBSD set. This switch-over is increasingly important now that we are importing more and more utilities from NetBSD, several of which expect various user accounts to exist. By switching over in one go, we save ourselves various headaches in the long run, even if the switch-over itself is a bit painful for existing MINIX users. The newly imported master.passwd and group files have three exceptions compared to their NetBSD originals: 1. There is a custom "service" account for MINIX 3 services. This account is used to limit run-time privileges of various system services, and is not used for any files on disk. Its user ID may be changed later, but should always correspond to whatever the SERVICE_UID definition is set to. 2. The user "bin" has its shell set to /bin/sh, instead of NetBSD's /sbin/nologin. The reason for this is that the test set in /usr/tests/minix-posix will not be able to run otherwise. 3. The group "operator" has been set to group ID 0, to match its old value. This tweak is purely for transitioning purposes: as of writing, pkgsrc packages are still using root:operator as owner and group for most installed files. Sometime later, we can change back "operator" to group ID 5 without breaking anything, because it does not appear that this group name is used for anything important. Change-Id: I689bcfff4cf7ba85c27d1ae579057fa3f8019c68
246 lines
5.5 KiB
Bash
246 lines
5.5 KiB
Bash
#!/bin/sh
|
|
#
|
|
# $NetBSD: maketars,v 1.84 2015/05/27 15:18:29 martin Exp $
|
|
#
|
|
# Make release tar files for some or all lists. Usage:
|
|
# maketars [-b] [-x] [-i installdir] [-a arch] [-m machine] [-s setsdir]
|
|
# [-M metalog] [-N etcdir] [-F setlistsdir] [-d destdir]
|
|
# [-t tardir] [-U] [setname ...]
|
|
#
|
|
# The default sets are "base comp debug etc games man misc tests text"
|
|
# The X sets are "xbase xcomp xdebug xetc xfont xserver"
|
|
# The extsrc sets are "extbase extcomp extetc"
|
|
#
|
|
# If '-i installdir' is given, copy the given sets to installdir
|
|
# (using pax -rw ...) instead of creating tar files.
|
|
# In this case, remove "etc", "xetc", and "extetc" from the list of default sets.
|
|
#
|
|
|
|
prog="${0##*/}"
|
|
rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
|
|
. "${rundir}/sets.subr"
|
|
|
|
# set defaults
|
|
lists=
|
|
tars="${RELEASEDIR}"
|
|
dest="${DESTDIR}"
|
|
metalog=
|
|
installdir=
|
|
etcdir=
|
|
setlistdir=
|
|
setfilesonly=false
|
|
quiet=false
|
|
skipkeys=time,md5,sha1,sha384,sha512,rmd160,cksum
|
|
preserve="-pe"
|
|
|
|
usage()
|
|
{
|
|
cat 1>&2 <<USAGE
|
|
Usage: ${prog} [-L base,x,ext] [-b] [-x] [-y] [-i idir] [-a arch] [-m machine]
|
|
[-s setsdir] [-S] [-M metalog] [-N etcdir] [-F setlistdir]
|
|
[-d dest] [-t targetdir] [setname ...]
|
|
-L base,x,ext Make specified lists
|
|
-b Make both netbsd and x11 lists
|
|
-x Only make x11 lists
|
|
[Default: make netbsd lists]
|
|
-y Only make extsrc lists
|
|
[Default: make netbsd lists]
|
|
-i idir Install sets to idir instead of creating tar files
|
|
-a arch Set arch (e.g, m68k, mipseb, mipsel, powerpc) [${MACHINE_ARCH}]
|
|
-m machine Set machine (e.g, amiga, i386, macppc) [${MACHINE}]
|
|
-q Quiet operation
|
|
-s setsdir Directory to find sets [${setsdir}]
|
|
-F setlistdir output directory for generated set lists [${dest}/etc/mtree/]
|
|
-S Exit after creating set files ${dest}/etc/mtree/set.*
|
|
-M metalog metalog file
|
|
-N etcdir etc dir for metalog use [${dest}/etc]
|
|
-U do not preserve file permissions (with -i ..)
|
|
-d dest \${DESTDIR} [${dest}]
|
|
-t targetdir \${RELEASEDIR} [${tars}]
|
|
[setname ...] Sets to build [${lists}]
|
|
USAGE
|
|
exit 1
|
|
}
|
|
|
|
msg()
|
|
{
|
|
$quiet || echo $*
|
|
}
|
|
|
|
# handle args
|
|
while getopts L:bxyi:a:m:qs:F:SM:N:Ud:t: ch; do
|
|
case ${ch} in
|
|
L)
|
|
save_IFS="${IFS}"
|
|
IFS=,
|
|
for _list in ${OPTARG}; do
|
|
case $_list in
|
|
base) lists="${lists} ${nlists}" ;;
|
|
x) lists="${lists} ${xlists}" ;;
|
|
ext) lists="${lists} ${extlists}" ;;
|
|
esac
|
|
done
|
|
IFS="${save_IFS}"
|
|
;;
|
|
# backward compat
|
|
b)
|
|
lists="${nlists} ${xlists}"
|
|
;;
|
|
x)
|
|
lists="${xlists}"
|
|
;;
|
|
y)
|
|
lists="${extlists}"
|
|
;;
|
|
i)
|
|
installdir="${OPTARG}"
|
|
;;
|
|
a)
|
|
MACHINE_ARCH="${OPTARG}"
|
|
MACHINE_CPU="$(arch_to_cpu "${OPTARG}")"
|
|
;;
|
|
m)
|
|
MACHINE="${OPTARG}"
|
|
;;
|
|
q)
|
|
quiet=true
|
|
;;
|
|
s)
|
|
setsdir="${OPTARG}"
|
|
;;
|
|
F)
|
|
setlistdir="${OPTARG}"
|
|
;;
|
|
S)
|
|
setfilesonly=true
|
|
;;
|
|
M)
|
|
metalog="${OPTARG}"
|
|
;;
|
|
N)
|
|
etcdir="${OPTARG}"
|
|
;;
|
|
U)
|
|
preserve=
|
|
;;
|
|
d)
|
|
dest="${OPTARG}"
|
|
;;
|
|
t)
|
|
tars="${OPTARG}"
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
shift $((${OPTIND} - 1))
|
|
if [ -n "${installdir}" ]; then # if -i, remove etc + xetc + extetc from the default list
|
|
lists="$(echo ${lists} | ${SED} -e 's/ etc / /;s/ xetc / /;s/ extetc / /')"
|
|
fi
|
|
if [ -n "$*" ]; then
|
|
lists="$*"
|
|
fi
|
|
|
|
if [ -z "${tars}" -a -z "${installdir}" ]; then
|
|
echo >&2 "${prog}: \${RELEASEDIR} must be set, or -i must be used"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${dest}" ]; then
|
|
echo >&2 "${prog}: \${DESTDIR} must be set"
|
|
exit 1
|
|
fi
|
|
: ${etcdir:="${dest}/etc"}
|
|
|
|
SDIR="$(${MKTEMP} -d "/tmp/${prog}.XXXXXX")"
|
|
TMPFILES=
|
|
|
|
: ${setlistdir:="${dest}/etc/mtree"}
|
|
|
|
cleanup()
|
|
{
|
|
es=$?
|
|
/bin/rm -rf "${SDIR}" ${TMPFILES}
|
|
trap - 0
|
|
exit ${es}
|
|
}
|
|
trap cleanup 0 2 3 13 # EXIT INT QUIT PIPE
|
|
|
|
#
|
|
# build the setfiles
|
|
#
|
|
|
|
for setname in ${lists}; do
|
|
${HOST_SH} "${setsdir}/makeflist" -a "${MACHINE_ARCH}" -m "${MACHINE}" \
|
|
-s "${setsdir}" "${setname}" > "${SDIR}/flist.${setname}" \
|
|
|| exit 1
|
|
if [ ! -s "${SDIR}/flist.${setname}" ]; then
|
|
echo >&2 "makeflist output is empty for ${setname}"
|
|
exit 1
|
|
fi
|
|
${setfilesonly} && msg "Creating ${setlistdir}/set.${setname}"
|
|
if [ -n "${metalog}" ]; then
|
|
${AWK} -f "${rundir}/getdirs.awk" "${SDIR}/flist.${setname}" \
|
|
> "${SDIR}/flist.${setname}.full" \
|
|
|| exit 1
|
|
(
|
|
echo "/set uname=root gname=wheel"
|
|
${AWK} -f "${rundir}/join.awk" \
|
|
"${SDIR}/flist.${setname}.full" "${metalog}"
|
|
echo "./etc/mtree/set.${setname} type=file mode=0444"
|
|
) | ${MTREE} -CS -k all -R "${skipkeys}" -N "${etcdir}" \
|
|
> "${setlistdir}/set.${setname}" \
|
|
|| exit 1
|
|
# We deliberately do not add set.${setname} to ${metalog},
|
|
# because we depend on it as an input.
|
|
else
|
|
${MTREE} -c -p "${dest}" -k all -R "${skipkeys}" \
|
|
-O "${SDIR}/flist.${setname}" | ${MTREE} -C -k all > \
|
|
"${setlistdir}/set.${setname}"
|
|
fi
|
|
done
|
|
if ${setfilesonly}; then # exit after creating the set lists
|
|
exit 0
|
|
fi
|
|
|
|
runpax() {
|
|
local s="$1"
|
|
shift
|
|
(cd "${dest}" &&
|
|
${PAX} -dOw -N"${etcdir}" -M "$@" < "${setlistdir}/set.${s}")
|
|
}
|
|
|
|
#
|
|
# now build the tarfiles
|
|
#
|
|
|
|
GZIP=-9n # for pax -z
|
|
export GZIP
|
|
es=0
|
|
|
|
for setname in ${lists:-${nlists}}; do
|
|
out="${setname}.tgz"
|
|
if [ -n "${installdir}" ]; then
|
|
msg "Copying set ${setname}"
|
|
runpax "${setname}" -r ${preserve} "${installdir}"
|
|
else
|
|
if [ -n "${metalog}" -a "${tars}/${out}" -nt "${metalog}" ]
|
|
then
|
|
msg "${out} is up to date"
|
|
continue
|
|
fi
|
|
msg "Creating ${out}"
|
|
rm -f "${tars}/${out}"
|
|
TMPFILES="${TMPFILES} ${tars}/${out}.tmp"
|
|
runpax "${setname}" -z --use-compress-program \
|
|
${COMPRESS_PROGRAM} > "${tars}/${out}.tmp" &&
|
|
mv "${tars}/${out}.tmp" "${tars}/${out}"
|
|
fi
|
|
es=$((${es} + $?))
|
|
done
|
|
if [ ${es} -gt 255 ]; then
|
|
es=255
|
|
fi
|
|
exit ${es}
|