ec8858014a
the 4.6 release. Goaded by the PR cited but the actual changes are somewhat more in line with my thinking on the subject rather than the PR author's (I don't think anyone else is even capable of making their minds think that way). PR: 40757
323 lines
9.7 KiB
Bash
323 lines
9.7 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-crypto" "Sources for cryptographic utilities" 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-secure" "Sources for security applications" 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_6" "The 4.6 point release / patch branch" \
|
|
"RELENG_4" "The 4.x-stable branch" \
|
|
"RELENG_3" "The 3.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
|