94a7228607
Nagged by: kris
323 lines
9.6 KiB
Bash
323 lines
9.6 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Optionally install a supfile and start cvsup on it.
|
|
#
|
|
# Written Jan 8th, 1998. Jordan Hubbard <jkh@FreeBSD.org>
|
|
# Last modification date: March 10th, 2001.
|
|
|
|
# Failsafe - if the environment is spammed somehow, pick a reasonable
|
|
# prefix.
|
|
if [ -z "${PREFIX}" ]; then
|
|
PREFIX=/usr/local
|
|
fi
|
|
|
|
# We get run multiple times, so only run once for the post-install pass.
|
|
if [ "x$2" != "xPOST-INSTALL" ]; then
|
|
exit 0;
|
|
fi
|
|
|
|
CVSUP_CMD=${PREFIX}/bin/cvsup
|
|
CVSUP_ARGS="-g -L 2"
|
|
|
|
SUPFILE=/etc/cvsupfile
|
|
C_HOST=cvsup.FreeBSD.org
|
|
C_BASE=/usr
|
|
C_PREFIX=/usr
|
|
C_RELEASE=cvs
|
|
C_RELEASETAG="."
|
|
C_SRC_TARGETS=src-all
|
|
C_OPTS="delete use-rel-suffix"
|
|
|
|
######################### misc utility functions #######################
|
|
|
|
# Usage: yesno message text ...
|
|
yesno() {
|
|
dialog --yesno "$*" -1 -1
|
|
}
|
|
|
|
# Usage: getval varname message text ...
|
|
getval() {
|
|
var=$1; shift
|
|
if dialog --inputbox "$*" -1 -1 `eval echo \\${$var}` 2> /tmp/input.$$; then
|
|
eval ${var}=\"`cat /tmp/input.$$`\"
|
|
rm -f /tmp/input.$$
|
|
return 0
|
|
else
|
|
rm -f /tmp/input.$$
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Usage: message message text ...
|
|
message() {
|
|
dialog --infobox "$*" -1 -1
|
|
}
|
|
|
|
# Usage: infomsg message text ...
|
|
infomsg() {
|
|
dialog --msgbox "$*" -1 -1
|
|
}
|
|
|
|
# Usage runprog command args ...
|
|
runprog() {
|
|
dialog --prgbox "$*" 20 72
|
|
}
|
|
|
|
############################## end of general functions #######################
|
|
|
|
getsrcs() {
|
|
if dialog --title "Source selection menu" --checklist \
|
|
"
|
|
Please specify which components of /usr/src you are interested in,
|
|
or simply press return for src-all. If you would like to build
|
|
just the kernel, for example, then select src-sys.
|
|
" -1 -1 10 \
|
|
"src-base" "Misc files directly under /usr/src" No \
|
|
"src-bin" "Sources for things in /bin" No \
|
|
"src-contrib" "Sources for contributed packages" No \
|
|
"src-etc" "Sources for things in /etc" No \
|
|
"src-games" "Sources for things in /usr/games" No \
|
|
"src-gnu" "Sources for GNU utils (requires src-contrib)" No \
|
|
"src-include" "Sources for things in /usr/include" No \
|
|
"src-kerberosIV" "Sources for KerberosIV (exportable)" No \
|
|
"src-kerberos5" "Sources for Kerberos5 (exportable)" No \
|
|
"src-lib" "Sources for things in /usr/lib" No \
|
|
"src-libexec" "Sources for things in /usr/libexec" No \
|
|
"src-release" "Sources for release building tools" No \
|
|
"src-sbin" "Sources for things in /sbin" No \
|
|
"src-share" "Sources for things in /usr/share" No \
|
|
"src-sys" "Sources for the kernel (/usr/src/sys)" No \
|
|
"src-tools" "Sources for miscellaneous tools" No \
|
|
"src-usrbin" "Sources for things in /usr/bin" No \
|
|
"src-usrsbin" "Sources for things in /usr/sbin" No \
|
|
2>/tmp/menu.src.$$; then
|
|
C_SRC_TARGETS=`cat /tmp/menu.src.$$`
|
|
rm -f /tmp/menu.src.$$
|
|
_VAL=0
|
|
else
|
|
rm -f /tmp/menu.src.$$
|
|
C_SRC_TARGETS=src-all
|
|
_VAL=1
|
|
fi
|
|
if [ -z "${C_SRC_TARGETS}" ]; then
|
|
C_SRC_TARGETS=src-all
|
|
fi
|
|
return ${_VAL};
|
|
}
|
|
|
|
getsrctag() {
|
|
if dialog --title "Branch selection menu" --menu \
|
|
"
|
|
Please specify which branch of FreeBSD (as designated by branch tag)
|
|
you would like to update your sources to. On a production system, you
|
|
want the patched branch of the release you installed. If you want 3.x
|
|
then this would typically be the RELENG_3 tag. If you're running a
|
|
4.x system then RELENG_4 is the tag you want. To follow -current,
|
|
that being 5.0 right now, you want the HEAD (or .) tag. If you want
|
|
to be able to check out or compare sources from arbitrary branches at
|
|
will, select the CVS repository tag (note: you will still need to use
|
|
CVS in manually checking out and maintaining a /usr/src tree if you
|
|
choose to go this route).
|
|
" -1 -1 5 \
|
|
"RELENG_4_5" "The 4.5 point release / patch branch" \
|
|
"RELENG_4" "The 4.x-stable branch" \
|
|
"RELENG_3" "The 3.x-stable branch" \
|
|
"RELENG_2_2" "The 2.2.x-stable branch" \
|
|
"cvs" "The CVS repository (all branches)" \
|
|
"." "The 5.0-current branch (. = HEAD)" \
|
|
"none" "Skip the updating of /usr/src" 2>/tmp/menu.src.$$; then
|
|
C_RELEASETAG=`cat /tmp/menu.src.$$`
|
|
rm -f /tmp/menu.src.$$
|
|
_VAL=0
|
|
else
|
|
rm -f /tmp/menu.src.$$
|
|
_VAL=1
|
|
fi
|
|
if [ "${C_RELEASETAG}" = "none" ]; then
|
|
C_SRC_TARGETS=""
|
|
return ${_VAL}
|
|
fi
|
|
return ${_VAL}
|
|
}
|
|
|
|
gethost() {
|
|
if dialog --title "Host selection menu" --menu \
|
|
"
|
|
These are the currently known CVSup servers at the time that
|
|
this package was created (in alphabetical order by domain name).
|
|
" -1 -1 11 \
|
|
"other" "Specify your own cvsup server." \
|
|
"cvsup.FreeBSD.org" "WA, U.S. server" \
|
|
"cvsup2.FreeBSD.org" "CA, U.S. server" \
|
|
"cvsup3.FreeBSD.org" "MA, U.S. server." \
|
|
"cvsup5.FreeBSD.org" "AZ, U.S. server." \
|
|
"cvsup6.FreeBSD.org" "IL, U.S. server." \
|
|
"cvsup7.FreeBSD.org" "WA, U.S. server." \
|
|
"cvsup8.FreeBSD.org" "WA, U.S. server." \
|
|
"cvsup9.FreeBSD.org" "MN, U.S. server." \
|
|
"cvsup10.FreeBSD.org" "CA, U.S. server." \
|
|
"cvsup11.FreeBSD.org" "VA, U.S. server." \
|
|
"cvsup12.FreeBSD.org" "IN, U.S. server." \
|
|
"cvsup13.FreeBSD.org" "CA, U.S. server." \
|
|
"cvsup14.FreeBSD.org" "CA, U.S. server." \
|
|
"cvsup15.FreeBSD.org" "IL, U.S. server." \
|
|
"cvsup16.FreeBSD.org" "VA, U.S. server." \
|
|
"cvsup17.FreeBSD.org" "WA, U.S. server." \
|
|
"cvsup.ar.FreeBSD.org" "Argentina server." \
|
|
"cvsup.au.FreeBSD.org" "Australia server." \
|
|
"cvsup.br.FreeBSD.org" "Brazil server." \
|
|
"cvsup.cz.FreeBSD.org" "Czech server." \
|
|
"cvsup.de.FreeBSD.org" "Germany server." \
|
|
"cvsup.dk.FreeBSD.org" "Denmark server." \
|
|
"cvsup.ee.FreeBSD.org" "Estonia server." \
|
|
"cvsup.fi.FreeBSD.org" "Finland server." \
|
|
"cvsup.fr.FreeBSD.org" "France server." \
|
|
"cvsup.jp.FreeBSD.org" "Japan server." \
|
|
"cvsup2.jp.FreeBSD.org" "Japan server." \
|
|
"cvsup.kr.FreeBSD.org" "Korea server." \
|
|
"cvsup.nl.FreeBSD.org" "Holland server." \
|
|
"cvsup.pl.FreeBSD.org" "Poland server." \
|
|
"cvsup.ru.FreeBSD.org" "Russia server." \
|
|
"cvsup.se.FreeBSD.org" "Sweden server." \
|
|
"cvsup.sk.FreeBSD.org" "Slovak Republic server." \
|
|
"cvsup.si.FreeBSD.org" "Slovenia server." \
|
|
"cvsup.tw.FreeBSD.org" "Taiwan server." \
|
|
"cvsup2.tw.FreeBSD.org" "Taiwan server." \
|
|
"cvsup.uk.FreeBSD.org" "UK server." \
|
|
"cvsup2.uk.FreeBSD.org" "UK server." \
|
|
"cvsup3.uk.FreeBSD.org" "UK server." \
|
|
"cvsup.za.FreeBSD.org" "South Africa server." 2>/tmp/menu.src.$$; then
|
|
C_HOST=`cat /tmp/menu.src.$$`;
|
|
rm -f /tmp/menu.src.$$;
|
|
if [ "${C_HOST}" = "other" ]; then
|
|
C_HOST=""
|
|
if ! getval C_HOST "Enter the name of the cvsup server you wish to use."; then
|
|
C_HOST=cvsup.freebsd.org
|
|
fi
|
|
fi
|
|
return 0
|
|
else
|
|
rm -f /tmp/menu.src.$$
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
getbase() {
|
|
getval C_BASE "Base directory for src, ports and docs subdirs?"
|
|
}
|
|
|
|
getopts() {
|
|
getval C_OPTS "These are the options currently set for cvsup.
|
|
|
|
If you are on a slow link, you may wish to add the \"compress\" option,
|
|
otherwise you probably just want to leave these values the way they are."
|
|
}
|
|
|
|
getports() {
|
|
if yesno "Would you like to track the FreeBSD ports collection?"; then
|
|
PORTS=yes
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
getdocs() {
|
|
if yesno "Would you like to track the FreeBSD doc sources?"; then
|
|
DOCS=yes
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
writefile() {
|
|
echo '*default ' "host=${C_HOST}" > ${SUPFILE}
|
|
echo '*default ' "base=${C_BASE}" >> ${SUPFILE}
|
|
echo '*default ' "prefix=${C_BASE}" >> ${SUPFILE}
|
|
echo '*default ' "release=${C_RELEASE}" >> ${SUPFILE}
|
|
if [ "${C_RELEASETAG}" != "cvs" ]; then
|
|
echo '*default ' "tag=${C_RELEASETAG}" >> ${SUPFILE}
|
|
fi
|
|
echo '*default ' "${C_OPTS}" >> ${SUPFILE}
|
|
|
|
# Serious kludge to do this here, but best place for it.
|
|
mkdir -p ${C_BASE}
|
|
|
|
echo >> ${SUPFILE}
|
|
if [ "${C_SRC_TARGETS}" ]; then
|
|
if [ "${C_SRC_TARGETS}" != "src-all" ]; then
|
|
for i in ${C_SRC_TARGETS}; do
|
|
eval echo $i >> ${SUPFILE}
|
|
done
|
|
else
|
|
echo src-all >> ${SUPFILE}
|
|
fi
|
|
fi
|
|
if [ "${C_RELEASETAG}" != "cvs" ]; then
|
|
echo '*default tag=.' >> ${SUPFILE}
|
|
fi
|
|
if [ "${PORTS}" ]; then
|
|
echo ports-all >> ${SUPFILE}
|
|
fi
|
|
if [ "${DOCS}" ]; then
|
|
echo doc-all >> ${SUPFILE}
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
########################################################################
|
|
# OK, here's where we start in on trying to actually do useful things. #
|
|
########################################################################
|
|
|
|
# Use an existing supfile?
|
|
if [ -r "${SUPFILE}" ]; then
|
|
if ! yesno "You already have a cvsup file (${SUPFILE}). \
|
|
Would you like to use it?"; then
|
|
mv ${SUPFILE} ${SUPFILE}.backup
|
|
fi
|
|
fi
|
|
|
|
# They have no supfile or are ignoring it, create one from scratch.
|
|
if [ ! -f "${SUPFILE}" ]; then
|
|
if ! getsrctag; then
|
|
message "Aborting cvsup setup per user request."
|
|
exit 1
|
|
fi
|
|
if [ "${C_RELEASETAG}" != "none" ]; then
|
|
getsrcs
|
|
fi
|
|
getports
|
|
getdocs
|
|
if ! getbase; then
|
|
message "Aborting cvsup setup per user request."
|
|
exit 1
|
|
fi
|
|
if ! gethost; then
|
|
message "Aborting cvsup setup per user request."
|
|
exit 1
|
|
fi
|
|
getopts
|
|
if ! writefile; then
|
|
message "Write failure on ${SUPFILE}, aborting."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -r "${SUPFILE}" -a -x "${CVSUP_CMD}" ]; then
|
|
if ! yesno "Do you wish to run the CVSup update now?"; then
|
|
infomsg "OK, to update your system later simply type:
|
|
\"${CVSUP_CMD} ${CVSUP_ARGS} ${SUPFILE}\"
|
|
or put the command in a file /etc/weekly.local file for automatic updates."
|
|
else
|
|
if yesno "Do you want to use compression (56K or slower, yes)?"; then
|
|
CVSUP_ARGS="${CVSUP_ARGS} -z"
|
|
fi
|
|
message "Now running ${CVSUP_CMD} ${CVSUP_ARGS} ${SUPFILE}."
|
|
runprog "${CVSUP_CMD} ${CVSUP_ARGS} ${SUPFILE}"
|
|
infomsg "All finished! To update your system again, simply type
|
|
\"${CVSUP_CMD} ${CVSUP_ARGS} ${SUPFILE}\"
|
|
or put the command in your /etc/daily.local file for automatic updates."
|
|
fi
|
|
fi
|