diff options
112 files changed, 5 insertions, 26264 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 300dbd1..5772e1d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -123,8 +123,6 @@ usr.sbin/zic edwin Heads-up appreciated, since this code is maintained by a third party source. lib/libc/stdtime edwin Heads-up appreciated, since parts of this code is maintained by a third party source. -sysinstall randi Please contact about any major changes so that - they can be co-ordinated. sbin/routed bms Pre-commit review; notify vendor at rhyolite.com Following are the entries from the Makefiles, and a few other sources. diff --git a/Makefile.inc1 b/Makefile.inc1 index a594050..2518d7d 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -1106,7 +1106,6 @@ build-tools: ${_aicasm} \ usr.bin/awk \ lib/libmagic \ - usr.sbin/sysinstall \ usr.bin/mkesdb_static \ usr.bin/mkcsmapper_static ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \ diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index b0670f3..547edbb 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -38,6 +38,8 @@ # xargs -n1 | sort | uniq -d; # done +# 20110930: sysinstall removed +OLD_FILES+=usr/sbin/sysinstall usr/share/man/man8/sysinstall.8.gz # 20110915: rename congestion control manpages OLD_FILES+=usr/share/man/man4/cc.4.gz OLD_FILES+=usr/share/man/man9/cc.9.gz @@ -22,6 +22,9 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10.x IS SLOW: machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20110930: + sysinstall has been removed + 20110923: The stable/9 branch created in subversion. This corresponds to the RELENG_9 branch in CVS. diff --git a/release/Makefile.inc.docports b/release/Makefile.inc.docports deleted file mode 100644 index f4b238a..0000000 --- a/release/Makefile.inc.docports +++ /dev/null @@ -1,89 +0,0 @@ -# $FreeBSD$ -# -# List of (dependent) ports that are minimally required to be -# checked out from CVS in order to get ${DOCPORTS} built and -# installed. It should follow the dependency list in -# ports/textproc/docproj/Makefile as much as feasible. -# -# Note that these names are /not/ CVS module names but path -# names, so the required part of the ports infrastructure will -# be cvs co'ed accordingly. -# -# This list of ports should be checked with the output of : -# make all-depends-list | sed -e 's|^/usr/||' | sed -e 's|$| \\|' -# - -# Get __FreeBSD_version -.if !defined(OSVERSION) -OSVERSION!= /sbin/sysctl -n kern.osreldate -.endif - -MINIMALDOCPORTS= \ - ports/Mk \ - ports/Templates \ - ports/Tools - -MINIMALDOCPORTS+= \ - ports/archivers/unzip \ - ports/converters/libiconv \ - ports/devel/autoconf267 \ - ports/devel/autoconf-wrapper \ - ports/devel/gettext \ - ports/devel/gmake \ - ports/devel/libtool22 \ - ports/devel/m4 \ - ports/devel/pkg-config \ - ports/graphics/gd \ - ports/graphics/jbigkit \ - ports/graphics/jpeg \ - ports/graphics/netpbm \ - ports/graphics/png \ - ports/graphics/scr2png \ - ports/graphics/tiff \ - ports/misc/help2man \ - ports/print/freetype2 \ - ports/print/ghostscript8 \ - ports/print/ghostscript8-nox11 \ - ports/print/gsfonts \ - ports/textproc/docbook-410 \ - ports/textproc/docbook-xml \ - ports/textproc/docbook-xsl \ - ports/textproc/docproj \ - ports/textproc/dsssl-docbook-modular \ - ports/textproc/expat2 \ - ports/textproc/fixrtf \ - ports/textproc/html \ - ports/textproc/html2text \ - ports/textproc/iso8879 \ - ports/textproc/libxml2 \ - ports/textproc/libxslt \ - ports/textproc/linuxdoc \ - ports/textproc/scr2txt \ - ports/textproc/sdocbook-xml \ - ports/textproc/xhtml \ - ports/textproc/xmlcatmgr \ - ports/textproc/xmlcharent \ - ports/www/links1 \ - ports/www/tidy - -.if ${MACHINE_ARCH} != "i386" -MINIMALDOCPORTS+= ports/textproc/openjade \ - ports/textproc/opensp -.else -MINIMALDOCPORTS+= ports/textproc/jade -.endif - -.if ${OSVERSION} < 500000 -MINIMALDOCPORTS+= \ - ports/converters/p5-MIME-Base64 \ - ports/devel/p5-File-Spec \ - ports/devel/p5-File-Temp \ - ports/devel/p5-Test-Harness \ - ports/devel/p5-Test-Simple \ - ports/security/p5-Digest \ - ports/security/p5-Digest-MD5 \ - ports/textproc/p5-PodParser -.else -MINIMALDOCPORTS+= \ - ports/lang/perl5.10 -.endif diff --git a/release/Makefile.sysinstall b/release/Makefile.sysinstall deleted file mode 100644 index 6f78a2a..0000000 --- a/release/Makefile.sysinstall +++ /dev/null @@ -1,1444 +0,0 @@ -# $FreeBSD$ -# -# make release [BUILDNAME=somename] CHROOTDIR=/some/dir CVSROOT=/cvs/dir \ -# [RELEASETAG=tag] [SVNROOT=svn://svn.freebsd.org/base] \ -# [SVNBRANCH=some/branch] -# -# Where "/some/dir" is the pathname of a directory on a some filesystem with -# at least 1000MB of free space, "somename" is what you want the release to -# call itself, "/cvs/dir" is where our source repo resides and, optionally, -# which CVS "tag" name should be used when checking out the sources to build -# the release (default is HEAD). -# -# Please note the support for building from SVN is preliminary and there -# are still questions about things like how to handle updates of -# /usr/src on production systems (csup(1) replacement). It is a work -# in progress and may change as the other issues get worked out. -# -# Please note: the md(4) driver must be present in the kernel -# (either by being compiled in or available as a kld(4) module), -# otherwise the target 'release.8' and possibly others will fail. -# -# Note: If you add options to this file, please keep release(7) updated! -# -# Set these, release builder! -# -# Fixed version: -#BUILDNAME=10.0-CURRENT -# -# Automatic SNAP versioning: -DATE != date +%Y%m%d -BASE = 10.0 -BUILDNAME?=${BASE}-${DATE}-SNAP -# -#CHROOTDIR=/junk/release -# If this is a -stable snapshot, then set -#RELEASETAG=RELENG_9 -# -# To test a release with a source tree containing patches and -# other work. This tree will get copied instead of getting the -# src/ tree from a CVS checkout. For "rerelease", this will NOT -# be copied; cvs update will be used instead. -#EXTSRCDIR=/usr/src -# -# To use a checked-out ports collection directory instead of -# checking out from a local CVS repository, set this option. -#EXTPORTSDIR=/usr/ports -# -# To use a checked-out doc/ directory instead of -# checking out from a local CVS repository, set this option. -#EXTDOCDIR=/usr/doc -# -# To add other options to the CVS subcommands (co,up), set -#CVSCMDARGS="-D '01/01/2002 00:00:00 UTC'" -# -# To add other options to the CVS command, set -#CVSARGS="-lfq" -# -# To prefix the CVS command -#CVSPREFIX="/usr/bin/time" -# -# Where the CVS repository is -#CVSROOT="/home/ncvs" -# -# To add other options to the Subversion subcommands (co,up), set -#SVNCMDARGS="-r '{ 01/01/2002 00:00:00 UTC }'" -# -# To prefix the Subversion command -#SVNPREFIX="/usr/bin/time" -# -# Where the Subversion repository is -#SVNROOT=svn://svn.freebsd.org/base -# -# Subversion branch to build for src. If this is not set then it is -# automatically computed from RELEASETAG. -#SVNBRANCH=stable/9 -# -# Non-zero if ${RELEASETAG} is in the form "RELENG_ver_RELEASE"; we -# are building an official release. Otherwise, we are building for -# a branch. -.if defined(RELEASETAG) -ISRELEASE!= expr "${RELEASETAG}" : '^RELENG_.*_RELEASE$$' || true -.if ${ISRELEASE} != 0 -# Convert "RELENG_ver_RELEASE" to "RELEASE_ver" for ports and doc trees. -AUXRELEASETAG!= echo ${RELEASETAG} | sed -e 's/^RELENG_/RELEASE_/' -e 's/_RELEASE$$//' -DOCRELEASETAG?= ${AUXRELEASETAG} -PORTSRELEASETAG?= ${AUXRELEASETAG} -.endif -.endif - -# Determine the Subversion source branch that corresponds to the requested -# RELEASETAG. -.if !defined(SVNBRANCH) -.if defined(RELEASETAG) -SVNBRANCH!= echo "${RELEASETAG}" | awk -f ${.CURDIR}/svnbranch.awk -.else -SVNBRANCH= head -.endif -.endif - -# If you want to pass flags to the world build such as -j X, use -# WORLD_FLAGS. Similarly, you can specify make flags for kernel -# builds via KERNEL_FLAGS. -#WORLD_FLAGS=-j4 -#KERNEL_FLAGS=-j4 - -TARGET_ARCH?= ${MACHINE_ARCH} -.if ${TARGET_ARCH} == ${MACHINE_ARCH} -TARGET?= ${MACHINE} -TARGET_CPUARCH?= ${MACHINE_CPUARCH} -.else -TARGET?= ${TARGET_ARCH} -TARGET_CPUARCH?= ${TARGET_ARCH} -.endif -CROSSENV= TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} -CROSSMAKE= ${MAKE} ${CROSSENV} -NATIVEMAKE= ${MAKE} TARGET_ARCH=${MACHINE_ARCH} TARGET=${MACHINE} - -# If you are using a local CVS repository with components stored in -# non-standard modules, override these on the make commandline or -# in the environment. -RELEASESRCMODULE?= src -RELEASEDOCMODULE?= doc -RELEASEPORTSMODULE?= ports - -# Uncomment this to disable the doc.1 target. Docs normally require -# the ports tree, so NOPORTS can be set together with NODOC in order -# to have neither ports or docs. If only NOPORTS is set to YES, but -# docs are still desired, the DOMINIMALDOCPORTS logic below will only -# install the ports that are minimally required for the release note documentation. This is -# intended as a compromise, less disk space is required than for using -# the entire ports collection (and much less time due to the huge number -# of directories it would create), but still quite a bit as well as some -# CPU cycles (some of the programs are C++, and things like ghostscript -# belong to the required ports nevertheless). -# -#NODOC= YES -#NOPORTS= YES - -# When retrieving ports using the pkg_add -r method, set your proxies to these. -# src/release/${arch}/mkisoimages.sh can use these. -#HTTP_PROXY?= www.example.com -#FTP_PROXY?= ftp.example.com - -# When creating ISO images, point ${CD_PACKAGE_TREE} to a directory containing -# the package split by an earlier invocation of the 'package-split' target. -#CD_PACKAGE_TREE= /path/to/pkg - -# Extra source tarballs; each argument is a pair of source dir and -# distribution name. The dist name should not exceed 7 characters -# (another "s" for "source" will be prepended). -#EXTRA_SRC= games/fortune fortune - -# Modify this definition if you want the release notes -# and other release documentation in a language other than English. -RELNOTES_LANG?= en_US.ISO8859-1 - -# As an alternative to installing the entire ports collection (which -# can take a huge amount of time, in particular on slower disks), -# setting ${MINIMALDOCPORTS} allows to install and build just those -# ports that are really required for getting the docs up & running. -.if defined(NOPORTS) && !defined(NODOC) -DOMINIMALDOCPORTS= YES -.include "Makefile.inc.docports" -RELEASEPORTSMODULE= ${MINIMALDOCPORTS} ports/sysutils/cdrtools -.endif - -# Helper variable -.if defined(NOPORTS) -.if !defined(DOMINIMALDOCPORTS) || ${DOMINIMALDOCPORTS} != "YES" -NOPORTSATALL= YES -.endif -.endif - -# -# Doing 'make index' in /usr/ports requires Perl. -MAKEINDEXPORTS= lang/perl5.10 -DOCPORTS= textproc/docproj -# Set this to wherever the distfiles required by release procedures. -.if defined(DOCDISTFILES) -# Respect DOCDISTFILES which is used before. -RELEASEDISTFILES?= ${DOCDISTFILES} -.else -RELEASEDISTFILES?= ${.CURDIR}/../../ports/distfiles -.endif -# Set this to 1 if you want -P to be used for automatic keyboard detection -# on the boot floppy. WARNING: Breaks on some Athlon (K7) motherboards. -AUTO_KEYBOARD_DETECT?= 0 - -.if !defined(NODOC) -DIST_DOCS_ARCH_INDEP= hardware readme relnotes errata -DIST_DOCS_ARCH_DEP= -.endif - -# Things which without too much trouble can be considered variables -# BASE_DISTS are special in that they get full /etc installation sets. -# -OTHER_DISTS?= catpages manpages proflibs dict info -BASE_DISTS?= base doc games ${ARCH_DISTS} -.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "powerpc64" -ARCH_DISTS?= lib32 -.endif -DISTRIBUTIONS?= ${BASE_DISTS} ${OTHER_DISTS} - -# -# Build and package both GENERIC and SMP kernels if the target -# has both configuration files. Otherwise only GENERIC is done. -# -.if ${TARGET_ARCH} == "powerpc64" -KERN_GENERIC?= GENERIC64 -.else -KERN_GENERIC?= GENERIC -.endif - -.if exists(${.CURDIR}/../sys/${TARGET}/conf/SMP) -KERNELS_BASE?= ${KERN_GENERIC} SMP -.else -KERNELS_BASE?= ${KERN_GENERIC} -.endif - -# mountpoint for filesystems. -MNT= /mnt - -# Various floppy image parameters. -# - -.undef MAKE_FLOPPIES -.if ${TARGET_ARCH} == "i386" -MAKE_DVD= -SEPARATE_LIVEFS= -SPLIT_MFSROOT= -.if ${TARGET} == "pc98" -MAKE_FLOPPIES= true -SMALLFLOPPYSIZE= 1200 -SMALLFLOPPYSPLITSIZE= 1152 -SMALLFLOPPYLABEL= fd1200 -SPLIT_MFSROOT= -.endif -FLOPPYSIZE= 1440 -FLOPPYSPLITSIZE= 1392 -FLOPPYINODE= 40000 -FLOPPYLABEL= fd1440 -BOOTINODE= 80000 -MFSSIZE= 4320 -MFSINODE= 8000 -MFSLABEL= minimum3 -.elif ${TARGET_ARCH} == "sparc64" -DISKLABEL= sunlabel -MAKE_DVD= -MFSSIZE= 4096 -MFSINODE= 8192 -MFSLABEL= auto -MINIROOT= -SEPARATE_LIVEFS= -.elif ${TARGET_ARCH} == "ia64" -DISKLABEL= "" -MAKE_DVD= -MFSSIZE= 8192 -MFSINODE= 8192 -MFSLABEL= auto -SEPARATE_LIVEFS= -.elif ${TARGET_ARCH} == "amd64" -MAKE_DVD= -FLOPPYSIZE= 1440 -FLOPPYSPLITSIZE= 1392 -FLOPPYINODE= 40000 -FLOPPYLABEL= fd1440 -BOOTINODE= 80000 -MFSSIZE= 4096 -MFSINODE= 8192 -MFSLABEL= auto -SEPARATE_LIVEFS= -SPLIT_MFSROOT= -.elif ${TARGET_ARCH} == "powerpc" -DISKLABEL= "" -MFSSIZE= 4096 -MFSINODE= 8192 -MFSLABEL= auto -SEPARATE_LIVEFS= -.elif ${TARGET_ARCH} == "powerpc64" -DISKLABEL= "" -MFSSIZE= 8192 -MFSINODE= 8192 -MFSLABEL= auto -SEPARATE_LIVEFS= -.endif -.if defined(NO_FLOPPIES) -.undef MAKE_FLOPPIES -.endif - -.if exists(/sbin/bsdlabel) -DISKLABEL?= bsdlabel -.else -DISKLABEL?= disklabel -.endif - -ZIPPER= gzip -9 --no-name -ZIPNSPLIT= ${ZIPPER} -c | split -b 1392k - - -# Things which may get you into trouble if you change them -MTREEFILES= ${.CURDIR}/../etc/mtree -_R?= /R -RD= ${_R}/stage -RND= ${RD}/release.doc -FD= ${_R}/ftp -CD= ${_R}/cdrom -CD_BOOT= ${CD}/bootonly -CD_DISC1= ${CD}/disc1 -CD_DISC2= ${CD}/disc2 -.if defined(MAKE_DVD) -CD_DVD1= ${CD}/dvd1 -.endif -.if !defined(NODOC) -CD_DOCS= ${CD}/docs -.endif -.if defined(SEPARATE_LIVEFS) -CD_LIVEFS= ${CD}/livefs -.else -CD_LIVEFS= ${CD_DISC1} -.endif -_MK?= ${CHROOTDIR}/mk - -# Where the bootstrap ports (see DOCPORTS) get installed. -LOCALDIR= /usr/local/bin - -.if ${TARGET} != ${MACHINE} && ${DISKLABEL} == "bsdlabel" -DOFS_SH= ${.CURDIR}/scripts/doFS.sh ${DISKLABEL} ${TARGET} -.else -DOFS_SH= ${.CURDIR}/scripts/doFS.sh ${DISKLABEL} "" -.endif - -CRUNCH_TARGETS= boot -.if ${TARGET_ARCH} == "i386" -CRUNCH_TARGETS+=fixit -.if ${TARGET} == "pc98" -CRUNCH_TARGETS+=fixit-small -.endif -.endif - -.if defined(MAKE_FLOPPIES) -EXTRAS= floppies.1 -.if ${TARGET_ARCH} == "i386" -EXTRAS+= floppies.2 -.endif -EXTRAS+= floppies.3 -.endif -EXTRAS+= ftp.1 -.if !defined(NOCDROM) -EXTRAS+= cdrom.1 cdrom.2 cdrom.3 -.if defined(MAKE_ISOS) -EXTRAS+= iso.1 -.endif -BOOTABLE="-b" -.endif - -.if !defined(NODOC) -DOCREL= doc.1 doc.2 -.endif - -.if !make(release) && !make(rerelease) && !make(package-split) -BINMAKE!= cd ${.CURDIR}/..; ${MAKE} -V BINMAKE -WMAKEENV!= cd ${.CURDIR}/..; \ - ${BINMAKE} ${CROSSENV} -f Makefile.inc1 -V WMAKEENV -WMAKE= ${WMAKEENV} ${BINMAKE} -.endif - -SMAKE= ${MAKE} -f ${MAKEFILE} - -CVS_SRCARGS= -P -.if defined(RELEASETAG) -CVS_SRCARGS+= -r ${RELEASETAG} -.endif - -CVS_DOCARGS= -P -.if defined(DOCRELEASETAG) -CVS_DOCARGS+= -r ${DOCRELEASETAG} -.endif - -CVS_PORTSARGS= -P -.if defined(PORTSRELEASETAG) -CVS_PORTSARGS+= -r ${PORTSRELEASETAG} -.endif - -WORLDDIR?= ${.CURDIR}/.. - -release rerelease: -.if !defined(CHROOTDIR) || !defined(BUILDNAME) - @echo "To make a release you must set CHROOTDIR and BUILDNAME" && false -.endif -.if !defined(NOPORTSATALL) && !defined(EXTPORTSDIR) && !defined(CVSROOT) - @echo "Building ports requires CVSROOT or EXTPORTSDIR" && false -.endif -.if !defined(NODOC) && !defined(EXTDOCDIR) && !defined(CVSROOT) - @echo "Building docs requires CVSROOT or EXTDOCDIR" && false -.endif -.if !defined(EXTSRCDIR) && !defined(CVSROOT) && !defined(SVNROOT) - @echo "The source tree requires SVNROOT, CVSROOT, or EXTSRCDIR" && false -.endif -.if defined(NOPORTSATALL) && !defined(NODOC) - @echo "Ports are required for building the release docs. Either set NODOC or" - @echo "unset NOPORTS, or set at least DOMINIMALDOCPORTS to YES!" - @exit 1 -.endif -.if defined(LOCAL_PATCHES) && !empty(LOCAL_PATCHES) -.for p in ${LOCAL_PATCHES} -.if !exists(${p}) - @echo "The patch file ${p} does not exist!" - @exit 1 -.endif -.endfor -.endif -.if defined(LOCAL_SCRIPT) && !exists(${LOCAL_SCRIPT}) - @echo "The local script ${LOCAL_SCRIPT} does not exist!" - @exit 1 -.endif -.if make(release) -.if exists(${CHROOTDIR}) -# The first command will fail on a handful of files that have their schg -# flags set. But it greatly speeds up the next two commands. - # NB: clear any vestigial devfs mount, just in case - -umount ${CHROOTDIR}/dev > /dev/null 2>&1 - -rm -rf ${CHROOTDIR} 2>/dev/null - -chflags -R 0 ${CHROOTDIR}/. - -rm -rf ${CHROOTDIR} -.endif - mkdir -p ${CHROOTDIR} - @echo ">>> make release for ${TARGET} started on `LC_ALL=C TZ=GMT date`" - cd ${WORLDDIR} && ${NATIVEMAKE} -DWITHOUT_GAMES -DWITHOUT_HTML -DWITHOUT_LIB32 \ - -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE installworld DESTDIR=${CHROOTDIR} - cd ${WORLDDIR} && ${NATIVEMAKE} distribution DESTDIR=${CHROOTDIR} - if [ -f /etc/resolv.conf ]; then \ - cp -p /etc/resolv.conf ${CHROOTDIR}/etc; \ - fi -.if defined(EXTLOCALDIR) - rm -rf ${CHROOTDIR}/usr/local - cd ${CHROOTDIR}/usr && cp -R -H ${EXTLOCALDIR} local -.endif - rm -rf ${CHROOTDIR}/usr/src -.if defined(EXTSRCDIR) - cd ${CHROOTDIR}/usr && \ - cp -R -H ${EXTSRCDIR} src -.elif defined(SVNROOT) - cd ${CHROOTDIR}/usr && \ - ${SVNPREFIX} svn co ${SVNCMDARGS} ${SVNROOT}/${SVNBRANCH} \ - ${RELEASESRCMODULE} -.else - cd ${CHROOTDIR}/usr && \ - ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \ - co ${CVSCMDARGS} ${CVS_SRCARGS} ${RELEASESRCMODULE} -.endif -.if defined(LOCAL_PATCHES) && !empty(LOCAL_PATCHES) -.for p in ${LOCAL_PATCHES} - patch -d ${CHROOTDIR}/usr/${RELEASESRCMODULE} ${PATCH_FLAGS} < ${p} -.endfor -.endif -.if defined(LOCAL_SCRIPT) - cd ${CHROOTDIR} && env CHROOTDIR=${CHROOTDIR} BUILDNAME=${BUILDNAME} \ - RELEASETAG=${RELEASETAG} ${LOCAL_SCRIPT} -.endif - rm -rf ${CHROOTDIR}/usr/ports -.if !defined(NOPORTSATALL) -.if defined(EXTPORTSDIR) - cd ${CHROOTDIR}/usr && cp -R -H ${EXTPORTSDIR} ports - # If there are distfiles downloaded removing them - rm -rf ports/distfiles/* -.else - cd ${CHROOTDIR}/usr && ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \ - co ${CVSCMDARGS} ${CVS_PORTSARGS} ${RELEASEPORTSMODULE} -.endif -.endif -.if !defined(NODOC) - rm -rf ${CHROOTDIR}/usr/doc -.if defined(EXTDOCDIR) - cd ${CHROOTDIR}/usr && cp -R -H ${EXTDOCDIR} doc -.else - cd ${CHROOTDIR}/usr && ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \ - co ${CVSCMDARGS} ${CVS_DOCARGS} ${RELEASEDOCMODULE} -.endif - if [ -d ${RELEASEDISTFILES}/ ]; then \ - cp -rp ${RELEASEDISTFILES} ${CHROOTDIR}/usr/ports/distfiles; \ - else \ - mkdir -p ${CHROOTDIR}/usr/ports/distfiles; \ - fi -.if !defined(NO_PREFETCHDISTFILES) - @cd ${.CURDIR} && ${SMAKE} fetch-distfiles -.endif -.endif -.endif -.if make(rerelease) -.if !defined(RELEASENOUPDATE) && !defined(EXTSRCDIR) -.if defined(SVNROOT) - cd ${CHROOTDIR}/usr/src && ${SVNPREFIX} svn switch ${SVNCMDARGS} \ - ${SVNROOT}/${SVNBRANCH} -.elif !defined(RELEASETAG) - cd ${CHROOTDIR}/usr/src && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ - update ${CVSCMDARGS} -P -d -A -.else - cd ${CHROOTDIR}/usr/src && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ - update ${CVSCMDARGS} -P -d -r ${RELEASETAG} -.endif - rm -f ${CHROOTDIR}/tmp/.world_done -.if !defined(NOPORTS) && !defined(EXTPORTSDIR) - cd ${CHROOTDIR}/usr/ports && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ - update ${CVSCMDARGS} -P -d - rm -f ${CHROOTDIR}/tmp/.skip_ports_index -.endif -.if defined(DOMINIMALDOCPORTS) && ${DOMINIMALDOCPORTS} == "YES" - for i in ${MINIMALDOCPORTS}; do \ - ( cd ${CHROOTDIR}/usr/$$i && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ - update ${CVSCMDARGS} -P -d ) ; \ - done -.endif -.if !defined(NODOC) - cd ${CHROOTDIR}/usr/doc && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ - update ${CVSCMDARGS} -P -d -.endif -.endif -.endif - # Add version information to those things that need it. - if [ ! -f ${CHROOTDIR}/tmp/.world_done ]; then \ - cd ${CHROOTDIR}/usr/src/sys/conf && \ - mv newvers.sh foo && \ - sed "s/^RELEASE=.*/RELEASE=${BUILDNAME}/" foo > newvers.sh && \ - rm foo; \ - fi - -test -f install.cfg && cp install.cfg ${CHROOTDIR}/usr/src/release - echo "#!/bin/sh" > ${_MK} - echo "set -ex" >> ${_MK} - echo "trap 'umount /dev || true' 0" >> ${_MK} - echo "_RELTARGET=\$${1:-doRELEASE}" >> ${_MK} -.for var in \ - AUTO_KEYBOARD_DETECT \ - BUILDNAME \ - CD_PACKAGE_TREE \ - DISTRIBUTIONS \ - DOMINIMALDOCPORTS \ - EXTRA_SRC \ - FTP_PASSIVE_MODE \ - FTP_PROXY \ - HTTP_PROXY \ - KERNELS \ - KERNELS_BASE \ - KERNEL_FLAGS \ - MAKE_DVD \ - MAKE_FLOPPIES \ - MAKE_ISOS \ - NOCDROM \ - NODOC \ - NOPORTS \ - NO_SHARED \ - NOSRC \ - NO_CPU_CFLAGS \ - NO_CPU_COPTFLAGS \ - NO_FLOPPIES \ - RELEASETAG \ - RELNOTES_LANG \ - SEPARATE_LIVEFS \ - TARGET \ - TARGET_ARCH \ - TARGET_CPUARCH \ - WORLD_FLAGS -.if defined(${var}) - echo "export ${var}=\"${${var}}\"" >> ${_MK} -.endif -.endfor - # Don't remove this, or the build will fall over! - echo "export RELEASEDIR=${_R}" >> ${_MK} - echo "export PATH=/bin:/usr/bin:/sbin:/usr/sbin:${LOCALDIR}" >> ${_MK} - echo "export MANBUILDCAT=YES" >> ${_MK} - # NB: these may fail if the host is running w/o devfs - echo "umount /dev >/dev/null 2>&1 || true" >> ${_MK} - echo "mount -t devfs devfs /dev >/dev/null 2>&1 || true" >> ${_MK} - echo "if [ ! -c /dev/null ]; then" >> ${_MK} - echo " echo /dev/null is not a device!" >> ${_MK} - echo " exit 1" >> ${_MK} - echo "fi" >> ${_MK} - echo "if [ -x /etc/rc.d/ldconfig ]; then" >> ${_MK} - echo " /etc/rc.d/ldconfig start" >> ${_MK} - echo "else" >> ${_MK} - echo " ldconfig /lib /usr/lib /usr/local/lib || true" >> ${_MK} - echo "fi" >> ${_MK} - echo "if [ ! -f /tmp/.world_done ]; then" >> ${_MK} - echo " cd /usr/src" >> ${_MK} - echo " ${CROSSMAKE} ${WORLD_FLAGS} -DNO_CLEAN buildworld && \\" >> ${_MK} - echo " touch /tmp/.world_done || exit 1" >> ${_MK} - echo "fi" >> ${_MK} - echo "if [ ! -f /tmp/.skip_ports_index ]; then" >> ${_MK} - echo " echo \">>> make index started on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK} - echo " for i in ${MAKEINDEXPORTS}" >> ${_MK} - echo " do" >> ${_MK} - echo " cd /usr/ports/\$${i}" >> ${_MK} - echo " env -i HTTP_PROXY=$${HTTP_PROXY} FTP_PROXY=$${FTP_PROXY} FTP_PASSIVE_MODE=$${FTP_PASSIVE_MODE:-yes} PATH=$${PATH} \\" >> ${_MK} - echo " make all install clean BATCH=yes FORCE_PKG_REGISTER=yes" >> ${_MK} - echo " done" >> ${_MK} - echo " cd /usr/ports" >> ${_MK} - echo " rm -f INDEX*" >> ${_MK} - echo " make index -DINDEX_PRISTINE" >> ${_MK} - echo " rm -f INDEX*.tmp" >> ${_MK} - echo " touch /tmp/.skip_ports_index" >> ${_MK} - echo " echo \">>> make index finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK} - echo "fi" >> ${_MK} - echo "cd /usr/src/release" >> ${_MK} - echo "make obj" >> ${_MK} - echo "if [ -f Makefile.sysinstall ]; then" >> ${_MK} - echo " make -f Makefile.sysinstall \$${_RELTARGET}" >> ${_MK} - echo "else" >> ${_MK} - echo " make \$${_RELTARGET}" >> ${_MK} - echo "fi" >> ${_MK} - echo "echo \">>> make ${.TARGET} for ${TARGET} finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK} - chmod 755 ${_MK} -.if defined(NOPORTS) - touch ${CHROOTDIR}/tmp/.skip_ports_index -.endif - # Ensure md.ko is loaded if md(4) is not statically compiled into - # the kernel - -mdconfig 2>/dev/null - env -i /usr/sbin/chroot `dirname ${_MK}` /`basename ${_MK}` - -clean: - rm -rf ${CRUNCH_TARGETS:S/$/_crunch/} release.[0-8] ${EXTRAS} - -fetch-distfiles: - @for i in ${MAKEINDEXPORTS}; do \ - cd ${CHROOTDIR}/usr/ports/$$i && \ - make PORTSDIR=${CHROOTDIR}/usr/ports BATCH=yes \ - checksum-recursive ; \ - done - @for i in ${DOCPORTS}; do \ - cd ${CHROOTDIR}/usr/ports/$$i && \ - make PORTSDIR=${CHROOTDIR}/usr/ports BATCH=yes \ - WITHOUT_X11=yes JADETEX=no WITHOUT_PYTHON=yes \ - checksum-recursive ; \ - done - -# Clean out ${_R} and make the directory structure. -release.1: - mkdir -p ${_R} - -rm -rf ${_R}/* 2> /dev/null - -chflags -R noschg ${_R}/. - rm -rf ${_R}/* - mkdir ${RD} -.if defined(MAKE_FLOPPIES) - mkdir ${RD}/floppies -.endif - mkdir ${RD}/trees - for i in ${DISTRIBUTIONS}; do \ - mkdir ${RD}/trees/$$i && \ - mtree -deU -f ${MTREEFILES}/BSD.root.dist \ - -p ${RD}/trees/$$i > /dev/null && \ - mtree -deU -f ${MTREEFILES}/BSD.usr.dist \ - -p ${RD}/trees/$$i/usr > /dev/null && \ - mtree -deU -f ${MTREEFILES}/BSD.include.dist \ - -p ${RD}/trees/$$i/usr/include > /dev/null; \ - done - mkdir ${RD}/kernels - for i in ${KERNELS_BASE} ${KERNELS}; do \ - mkdir -p ${RD}/kernels/$${i}; \ - done - touch ${.TARGET} - -# Install the system into the various distributions. -release.2: - cd ${.CURDIR}/.. && ${CROSSMAKE} distrib-dirs DESTDIR=${RD}/trees/base - cd ${.CURDIR}/.. && ${CROSSMAKE} ${WORLD_FLAGS} distributeworld \ - DISTDIR=${RD}/trees - sh ${.CURDIR}/scripts/mm-mtree.sh -F "${CROSSENV}" -D "${RD}/trees/base" - touch ${.TARGET} - -# Make and install the generic kernel(s). -release.3: -.for kernel in ${KERNELS_BASE} ${KERNELS} - cd ${.CURDIR}/..; \ - ${CROSSMAKE} ${KERNEL_FLAGS} \ - KERNCONF=${kernel} kernel \ - DESTDIR=${RD}/kernels KODIR=/${kernel} -.endfor - touch ${.TARGET} - -# Make and install the three crunched binaries which live on the floppies. -# You are not supposed to like this :-) -release.4: - rm -rf ${RD}/crunch - mkdir -p ${RD}/crunch -.for j in ${CRUNCH_TARGETS} -.if exists(${.CURDIR}/${TARGET}/${j}_crunch.conf) - rm -rf ${j}_crunch - mkdir ${j}_crunch - cd ${j}_crunch; ${WMAKEENV} MAKEFLAGS="-m ${.CURDIR}/../share/mk" \ - NO_WERROR= crunchgen -o \ - ${.CURDIR}/${TARGET}/${j}_crunch.conf - cd ${j}_crunch; ${WMAKE} -f ${j}_crunch.mk subclean - cd ${.CURDIR}/..; ${BINMAKE} -f Makefile.inc1 _build-tools - cd ${j}_crunch; CFLAGS="-Os -pipe" ${WMAKE} -f ${j}_crunch.mk \ - -DNO_CPU_CFLAGS all - ${WMAKEENV} strip -R .comment ${j}_crunch/${j}_crunch - mv ${j}_crunch/${j}_crunch ${RD}/crunch/${j} -.endif -.endfor - touch ${.TARGET} - -# -# --==## Fix up the distributions. ##==-- -# -release.5: - # Create any "synthetic dists" now. - @for i in ${DISTRIBUTIONS}; do \ - if [ -f ${.CURDIR}/scripts/$${i}-make.sh ]; then \ - echo -n "Running $$i dist creation script... "; \ - env RD=${RD} sh ${.CURDIR}/scripts/$${i}-make.sh || echo "$$i distribution script returned bad status."; \ - echo "Done."; \ - fi \ - done \ - - # Remove all the directories we don't need. - -cd ${RD}/trees && \ - (find ${OTHER_DISTS} -path '*/var/empty' | xargs chflags noschg; \ - find ${OTHER_DISTS} -depth -type d -empty -delete) - touch ${.TARGET} - -# -# --==## Package up the tarballs from assembled trees ##==-- -# -release.6: - rm -rf ${RD}/dists - mkdir -p ${RD}/dists - @for i in ${DISTRIBUTIONS} ; \ - do \ - if [ -d ${RD}/trees/$${i} ] ; then \ - cd ${.CURDIR} && $(SMAKE) doTARBALL \ - SD=${RD}/trees/$${i} \ - TN=$$i TD=$$i ARG="." && \ - echo "$${i} distribution is finished."; \ - fi ; \ - done - @for i in ${KERNELS_BASE} ${KERNELS} ; \ - do \ - if [ -d ${RD}/kernels/$${i} ] ; then \ - cd ${.CURDIR} && $(SMAKE) doTARBALL \ - SD=${RD}/kernels \ - TN=$$i TD=kernels ARG="$$i" && \ - echo "$${i} distribution is finished."; \ - fi ; \ - done -.if !defined(NOPORTS) - # XXX: Inline stripped version of doTARBALL - @rm -rf ${RD}/dists/ports/ports* - @mkdir -p ${RD}/dists/ports - @echo rolling ports/ports tarball - @tar --exclude CVS --exclude .svn --exclude 'ports/distfiles/*' \ - -czf ${RD}/dists/ports/ports.tgz -C /usr ports - @cp ${.CURDIR}/scripts/ports-install.sh ${RD}/dists/ports/install.sh - @(cd ${RD}/dists/ports; \ - rm -f CHECKSUM.MD5 CHECKSUM.SHA256; \ - md5 * > .CHECKSUM.MD5; \ - sha256 * > .CHECKSUM.SHA256; \ - mv .CHECKSUM.MD5 CHECKSUM.MD5; \ - mv .CHECKSUM.SHA256 CHECKSUM.SHA256) - @echo "ports distribution is finished." -.endif - touch ${.TARGET} - - -# -# --==## Make source dists ##==-- -# -release.7: -.if !defined(NOSRC) - @cd ${.CURDIR} && $(SMAKE) doTARBALL SD=/usr/src \ - TD=src TN=sbase ARG="[A-Z]*" - @for i in `cd /usr/src && echo [a-z]*` ; do \ - if [ -d /usr/src/$$i ] ; then \ - cd ${.CURDIR} && $(SMAKE) doTARBALL \ - TN=`echo s$$i | tr -d '.' | \ - sed -e 's/usr/u/' \ - -e 's/kerberos5/krb5/'` \ - SD=/usr/src TD=src ARG="$$i" ; \ - fi ; \ - done -.if defined(EXTRA_SRC) - @set ${EXTRA_SRC} && \ - while [ $$# -ge 2 ] ; do \ - if [ -d /usr/src/$$1 ] ; then \ - cd ${.CURDIR} && $(SMAKE) doTARBALL \ - SD=/usr/src TN="s$$2" TD=src ARG="$$1" ; \ - fi && shift && shift ; \ - done -.endif - (cd ${RD}/dists/src; \ - rm -f CHECKSUM.MD5 CHECKSUM.SHA256; \ - md5 * > .CHECKSUM.MD5; \ - sha256 * > .CHECKSUM.SHA256; \ - mv .CHECKSUM.MD5 CHECKSUM.MD5; \ - mv .CHECKSUM.SHA256 CHECKSUM.SHA256) - @echo "src distribution is finished." -.endif - touch ${.TARGET} - -# Build the memory root filesystem. -release.8: - cp ${RD}/trees/base/etc/disktab /etc - rm -rf ${RD}/mfsfd - mkdir ${RD}/mfsfd - cd ${RD}/mfsfd && \ - mkdir -p etc/defaults dev mnt stand/etc/defaults stand/help \ - var/empty - @cd ${.CURDIR} && $(SMAKE) installCRUNCH CRUNCH=boot \ - DIR=${RD}/mfsfd/stand ZIP=false - ( cd ${RD}/mfsfd && \ - for dir in bin sbin ; do \ - ln -sf /stand $$dir; \ - done ) - cp ${RD}/trees/base/sbin/dhclient-script ${RD}/mfsfd/stand - cp ${.CURDIR}/../etc/master.passwd ${RD}/mfsfd/etc/master.passwd - cp ${RD}/trees/base/etc/*pwd.db ${RD}/mfsfd/etc/ - ( for F in defaults/rc.conf netconfig protocols ; do \ - sed -e '/^#.*$$/d' -e 's/[:space:]*#.*$$//g' \ - ${RD}/trees/base/etc/$$F > ${RD}/mfsfd/stand/etc/$$F ; \ - done ) - grep -E '^(ftp|nameserver|domain|sunrpc|cmd|nfsd)[^-\w]' \ - ${RD}/trees/base/etc/services | \ - sed -e '/^#.*$$/d' -e 's/[:space:]*#.*$$//g' \ - > ${RD}/mfsfd/stand/etc/services - grep 'operator' ${RD}/trees/base/etc/group \ - > ${RD}/mfsfd/stand/etc/group - ln ${RD}/mfsfd/stand/etc/services ${RD}/mfsfd/etc/services - ln ${RD}/mfsfd/stand/etc/group ${RD}/mfsfd/etc/group - ln ${RD}/mfsfd/stand/etc/netconfig ${RD}/mfsfd/etc/netconfig - cp ${RD}/trees/base/COPYRIGHT ${RD}/mfsfd/stand/help/COPYRIGHT.hlp -.if !defined(NODOC) - @for i in ${DIST_DOCS_ARCH_INDEP}; do \ - cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \ - ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ - done - @for i in ${DIST_DOCS_ARCH_DEP}; do \ - cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \ - ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ - done -.endif - -test -f ${.CURDIR}/install.cfg \ - && cp ${.CURDIR}/install.cfg ${RD}/mfsfd - @mkdir -p ${RD}/mfsfd/boot -.if ${TARGET_ARCH} != "ia64" && ${TARGET_CPUARCH} != "powerpc" - @cp ${RD}/trees/base/boot/boot* ${RD}/mfsfd/boot -.endif -.if ${TARGET} == "i386" || ${TARGET_ARCH} == "amd64" - @cp ${RD}/trees/base/boot/mbr ${RD}/mfsfd/boot -.endif - @tar --exclude CVS --exclude .svn -cf - \ - -C ${.CURDIR}/../usr.sbin/sysinstall help | \ - tar xf - -C ${RD}/mfsfd/stand - @mkdir -p ${RD}/mfsroot - sh -e ${DOFS_SH} ${RD}/mfsroot/mfsroot ${RD} ${MNT} \ - ${MFSSIZE} ${RD}/mfsfd ${MFSINODE} ${MFSLABEL} - @${ZIPPER} -fv ${RD}/mfsroot/mfsroot - touch ${.TARGET} - -KERNFLOPPYSET= ${RD}/floppyset/kern/kernel.gz -.if defined(SMALLFLOPPYSIZE) -SMALLKERNFLOPPYSET= ${RD}/floppyset/kern-small/kernel.gz -.endif -.if defined(SPLIT_MFSROOT) -MFSROOTFLOPPYSET= ${RD}/floppyset/mfsroot/mfsroot.gz -.if defined(SMALLFLOPPYSIZE) -SMALLMFSROOTFLOPPYSET= ${RD}/floppyset/mfsroot-small/mfsroot.gz -.endif -.endif - -# Build boot and install floppies. -floppies.1: - @${ZIPPER} -c ${RD}/kernels/${KERN_GENERIC}/kernel > ${RD}/kernels/kernel.gz - @echo "Making the kernel boot floppies..." - @cd ${.CURDIR} && ${SMAKE} makeFloppySet FLOPPYBASE=kern \ - FLOPPYDESC="Kernel" SPLITFILE=${RD}/kernels/kernel.gz -.if defined(SMALLFLOPPYSIZE) - @echo "Making the small kernel boot floppies..." - @cd ${.CURDIR} && ${SMAKE} makeFloppySet FLOPPYBASE=kern-small \ - FLOPPYDESC="Kernel" SPLITFILE=${RD}/kernels/kernel.gz \ - FDSIZE="SMALL" -.endif -.if defined(SPLIT_MFSROOT) - @echo "Making the mfsroot boot floppies..." - @cd ${.CURDIR} && ${SMAKE} makeFloppySet FLOPPYBASE=mfsroot \ - FLOPPYDESC="Memory Filesystem" SPLITFILE=${RD}/mfsroot/mfsroot.gz -.if defined(SMALLFLOPPYSIZE) - @echo "Making the small mfsroot boot floppies..." - @cd ${.CURDIR} && ${SMAKE} makeFloppySet FLOPPYBASE=mfsroot-small \ - FLOPPYDESC="Memory Filesystem" SPLITFILE=${RD}/mfsroot/mfsroot.gz \ - FDSIZE="SMALL" -.endif - @cd ${.CURDIR} && ${SMAKE} buildBootFloppy FSIMAGE="boot" \ - KERNFILE="${KERNFLOPPYSET}.split ${KERNFLOPPYSET}.boot" \ - MFSROOTFILE="${MFSROOTFLOPPYSET}.split ${MFSROOTFLOPPYSET}.boot" -.if defined(SMALLFLOPPYSIZE) - @cd ${.CURDIR} && ${SMAKE} buildBootFloppy FSIMAGE="boot-small" \ - KERNFILE="${SMALLKERNFLOPPYSET}.split ${SMALLKERNFLOPPYSET}.boot" \ - MFSROOTFILE="${SMALLMFSROOTFLOPPYSET}.split ${SMALLMFSROOTFLOPPYSET}.boot" \ - FDSIZE="SMALL" -.endif -.else # !SPLIT_MFSROOT - @cd ${.CURDIR} && ${SMAKE} buildBootFloppy FSIMAGE="boot" \ - KERNFILE="${KERNFLOPPYSET}.split ${KERNFLOPPYSET}.boot" \ - MFSROOTFILE=${RD}/mfsroot/mfsroot.gz -.if defined(SMALLFLOPPYSIZE) - @cd ${.CURDIR} && ${SMAKE} buildBootFloppy FSIMAGE="boot-small" \ - KERNFILE="${SMALLKERNFLOPPYSET}.split ${SMALLKERNFLOPPYSET}.boot" \ - MFSROOTFILE=${RD}/mfsroot/mfsroot.gz \ - FDSIZE="SMALL" -.endif -.endif # SPLIT_MFSROOT - touch ${.TARGET} - -# Build fixit floppy. -floppies.2: - @echo "Making fixit floppy." - @rm -rf ${RD}/fixitfd - @mkdir ${RD}/fixitfd - @cd ${RD}/fixitfd && \ - mkdir -p dev stand bin sbin etc mnt mnt1 mnt2 mnt3 mnt4 tmp \ - usr/share/misc - @cp ${RD}/trees/base/etc/spwd.db ${RD}/trees/base/etc/group \ - ${RD}/fixitfd/etc - @sed -e 's/#.*//' ${RD}/trees/base/etc/protocols \ - > ${RD}/fixitfd/etc/protocols - @sed -e 's/#.*//' ${RD}/trees/base/usr/share/misc/scsi_modes \ - > ${RD}/fixitfd/usr/share/misc/scsi_modes - @cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile - @cp ${.CURDIR}/fixit.services ${RD}/fixitfd/etc/services - @cp ${.CURDIR}/scripts/tar.sh ${RD}/fixitfd/stand/tar - @chmod 555 ${RD}/fixitfd/stand/tar -.if defined(SMALLFLOPPYSIZE) - @cd ${.CURDIR} && ${SMAKE} installCRUNCH CRUNCH=fixit-small \ - DIR=${RD}/fixitfd/stand ZIP=false - @sh -e ${DOFS_SH} ${RD}/floppies/fixit-small.flp ${RD} ${MNT} \ - ${SMALLFLOPPYSIZE} ${RD}/fixitfd ${FLOPPYINODE} ${SMALLFLOPPYLABEL} - @rm -rf ${RD}/fixitfd/stand - @mkdir ${RD}/fixitfd/stand -.endif - @cd ${.CURDIR} && ${SMAKE} installCRUNCH CRUNCH=fixit \ - DIR=${RD}/fixitfd/stand ZIP=false - @sh -e ${DOFS_SH} ${RD}/floppies/fixit.flp ${RD} ${MNT} \ - ${FLOPPYSIZE} ${RD}/fixitfd ${FLOPPYINODE} ${FLOPPYLABEL} - touch ${.TARGET} - -# Do our last minute floppies directory setup -floppies.3: - @(cd ${RD}/floppies; md5 *.flp > CHECKSUM.MD5) - @(cd ${RD}/floppies; sha256 *.flp > CHECKSUM.SHA256) - touch ${.TARGET} - -# -# --==## Setup a suitable ftp-area ##==-- -# -ftp.1: - @echo "Setting up FTP distribution area" - @mkdir -p ${FD} - -@ln -s . ${FD}/${BUILDNAME} -.if defined(MAKE_FLOPPIES) - @cd ${RD} && find floppies -print | cpio -dumpl ${FD} -.endif - @cd ${RD}/dists && find . -print | cpio -dumpl ${FD} -.if !defined(NODOC) - @for i in ${DIST_DOCS_ARCH_INDEP}; do \ - cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \ - ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ - cp ${RND}/${RELNOTES_LANG}/$$i/article.html \ - ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ - done - @for i in ${DIST_DOCS_ARCH_DEP}; do \ - cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \ - ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ - cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.html \ - ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ - done - @cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${FD} -.endif - @echo "CD_VERSION = ${BUILDNAME}" > ${FD}/cdrom.inf - touch ${.TARGET} - -# Build a live filesystem cdrom image -cdrom.1: - @echo "Building CDROM live filesystem image" - @mkdir -p ${CD_LIVEFS} - @for i in ${DISTRIBUTIONS} ; \ - do \ - if [ -d ${RD}/trees/$${i} ] ; then \ - chflags -R noschg ${RD}/trees/$${i} || true ; \ - ( cd ${RD}/trees/$${i} && \ - find . -depth -print | cpio -dumpl ${CD_LIVEFS} ) ; \ - fi \ - done -.if defined(MAKE_DVD) - @echo "Building DVD filesystem image as well as CDROM" - @mkdir -p ${CD_DVD1}/${BUILDNAME} - @for i in ${DISTRIBUTIONS} ; \ - do \ - if [ -d ${RD}/trees/$${i} ] ; then \ - chflags -R noschg ${RD}/trees/$${i} || true ; \ - ( cd ${RD}/trees/$${i} && \ - find . -depth -print | cpio -dumpl ${CD_DVD1} ) ; \ - fi \ - done -.endif - @echo "Copy GENERIC kernel to boot area" - @cp -Rp ${RD}/kernels/${KERN_GENERIC}/ ${CD_LIVEFS}/boot/kernel - @rm -f ${CD_LIVEFS}/boot/kernel/*.symbols - @rm -f ${CD_LIVEFS}/.profile - @cp ${.CURDIR}/fixit.profile ${CD_LIVEFS}/.profile - @ln -sf /rescue ${CD_LIVEFS}/stand - @echo "Setting up CDROM boot area" - @rm -f ${CD_LIVEFS}/boot/loader.conf - @cp ${RD}/mfsroot/mfsroot.gz ${CD_LIVEFS}/boot/mfsroot.gz - @echo 'mfsroot_load="YES"' > ${CD_LIVEFS}/boot/loader.conf - @echo 'mfsroot_type="mfs_root"' >> ${CD_LIVEFS}/boot/loader.conf - @echo 'mfsroot_name="/boot/mfsroot"' >> ${CD_LIVEFS}/boot/loader.conf -.if exists(${RD}/trees/base/boot/device.hints) - # Break the link to device.hints so we can modify it - @rm -f ${CD_LIVEFS}/boot/device.hints - @cp ${RD}/trees/base/boot/device.hints ${CD_LIVEFS}/boot/device.hints -.endif - @echo "CD_VERSION = ${BUILDNAME}" > ${CD_LIVEFS}/cdrom.inf -.if defined(MAKE_DVD) - @cp -Rp ${RD}/kernels/${KERN_GENERIC}/ ${CD_DVD1}/boot/kernel - @rm -f ${CD_DVD1}/boot/kernel/*.symbols - @rm -f ${CD_DVD1}/.profile - @cp ${.CURDIR}/fixit.profile ${CD_DVD1}/.profile - @ln -sf /rescue ${CD_DVD1}/stand - @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DVD1}/cdrom.inf - @rm -f ${CD_DVD1}/boot/loader.conf - @cp ${RD}/mfsroot/mfsroot.gz ${CD_DVD1}/boot/mfsroot.gz - @echo 'mfsroot_load="YES"' > ${CD_DVD1}/boot/loader.conf - @echo 'mfsroot_type="mfs_root"' >> ${CD_DVD1}/boot/loader.conf - @echo 'mfsroot_name="/boot/mfsroot"' >> ${CD_DVD1}/boot/loader.conf -.if exists(${RD}/trees/base/boot/device.hints) - @rm -f ${CD_DVD1}/boot/device.hints - @cp ${RD}/trees/base/boot/device.hints ${CD_DVD1}/boot/device.hints -.endif -.endif - touch ${.TARGET} - -# Build disc1 and disc2 cdrom images -cdrom.2: - @echo "Building CDROM disc1 filesystem image" - @mkdir -p ${CD_DISC1}/${BUILDNAME} -.if defined(MAKE_FLOPPIES) - @cd ${RD} && find floppies -print | cpio -dumpl ${CD_DISC1} -.endif - @cd ${RD}/dists && find . -print | cpio -dumpl ${CD_DISC1}/${BUILDNAME} -.if !defined(NODOC) - @for i in ${DIST_DOCS_ARCH_INDEP}; do \ - cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \ - ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ - cp ${RND}/${RELNOTES_LANG}/$$i/article.html \ - ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ - done - @for i in ${DIST_DOCS_ARCH_DEP}; do \ - cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \ - ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ - cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.html \ - ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ - done - @cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${CD_DISC1} -.endif -.if defined(SEPARATE_LIVEFS) - @cp -Rp ${CD_LIVEFS}/boot ${CD_DISC1} - @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC1}/cdrom.inf -.endif - @echo "CD_VOLUME = 1" >> ${CD_DISC1}/cdrom.inf - @echo "Building CDROM disc2 filesystem image" - @mkdir -p ${CD_DISC2} - @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC2}/cdrom.inf - @echo "CD_VOLUME = 2" >> ${CD_DISC2}/cdrom.inf -.if defined(MAKE_DVD) -.if defined(MAKE_FLOPPIES) - @cd ${RD} && find floppies -print | cpio -dumpl ${CD_DVD1} -.endif - @cd ${RD}/dists && find . -print | cpio -dumpl ${CD_DVD1}/${BUILDNAME} -.if !defined(NODOC) - @for i in ${DIST_DOCS_ARCH_INDEP}; do \ - cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \ - ${CD_DVD1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ - cp ${RND}/${RELNOTES_LANG}/$$i/article.html \ - ${CD_DVD1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ - done - @for i in ${DIST_DOCS_ARCH_DEP}; do \ - cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \ - ${CD_DVD1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ - cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.html \ - ${CD_DVD1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ - done - @cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${CD_DVD1} -.endif - @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DVD1}/cdrom.inf - @echo "CD_VOLUME = 1" >> ${CD_DVD1}/cdrom.inf -.endif -.if !defined(NODOC) - @echo "Building CDROM docs filesystem image" - @mkdir -p ${CD_DOCS} - @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DOCS}/cdrom.inf - @echo "CD_VOLUME = 3" >> ${CD_DOCS}/cdrom.inf -.endif - touch ${.TARGET} - -# -# --==## Setup a suitable cdrom-area ##==-- -# -cdrom.3: -.if defined(CD_BOOT) - @echo "Building bootonly CDROM filesystem image" - @mkdir -p ${CD_BOOT} - @cp -Rp ${CD_LIVEFS}/boot ${CD_BOOT} - @echo "CD_VERSION = ${BUILDNAME}" > ${CD_BOOT}/cdrom.inf -.if defined(MINIROOT) - @echo "Building bootonly UFS filesystem image" - @mkdir -p ${FD}/miniroot - @sh -e ${DOFS_SH} ${FD}/miniroot/miniroot.ufs \ - ${RD} ${MNT} 0 ${CD_BOOT} 8192 auto - @${ZIPPER} -v ${FD}/miniroot/miniroot.ufs -.endif -.endif - touch ${.TARGET} - -.if make(iso.1) -.if defined(CD_PACKAGE_TREE) -.if exists(${CD_PACKAGE_TREE}/disc1) -CD_DISC1_PKGS= ${CD_PACKAGE_TREE}/disc1 -.endif -.if exists(${CD_PACKAGE_TREE}/disc2) -CD_DISC2_PKGS= ${CD_PACKAGE_TREE}/disc2 -.endif -# scripts/package-trees.sh names all discs according to the "discX" -# scheme where X is the number of the disc -.if exists(${CD_PACKAGE_TREE}/disc3) -CD_DOCS_PKGS= ${CD_PACKAGE_TREE}/disc3 -.endif -.if exists(${CD_PACKAGE_TREE}/dvd1) -CD_DVD1_PKGS= ${CD_PACKAGE_TREE}/dvd1 -.endif -.endif -.endif - -iso.1: -.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh) - @echo "Creating ISO images..." -.if defined(CD_BOOT) - @sh ${.CURDIR}/${TARGET}/mkisoimages.sh ${BOOTABLE} \ - FreeBSD_bootonly \ - ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-bootonly.iso ${CD_BOOT} -.endif - @sh ${.CURDIR}/${TARGET}/mkisoimages.sh ${BOOTABLE} \ - FreeBSD_Install \ - ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-disc1.iso ${CD_DISC1} \ - ${CD_DISC1_PKGS} - @sh ${.CURDIR}/${TARGET}/mkisoimages.sh \ - FreeBSD_Packages \ - ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-disc2.iso ${CD_DISC2} \ - ${CD_DISC2_PKGS} -.if defined(MAKE_DVD) - @sh ${.CURDIR}/${TARGET}/mkisoimages.sh ${BOOTABLE} \ - FreeBSD_Install \ - ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-dvd1.iso ${CD_DVD1} \ - ${CD_DVD1_PKGS} -.endif -.if !defined(NODOC) - @sh ${.CURDIR}/${TARGET}/mkisoimages.sh \ - FreeBSD_Documentation \ - ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-disc3.iso ${CD_DOCS} \ - ${CD_DOCS_PKGS} -.endif -.if defined(SEPARATE_LIVEFS) - @sh ${.CURDIR}/${TARGET}/mkisoimages.sh ${BOOTABLE} \ - FreeBSD_LiveFS \ - ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-livefs.iso ${CD_LIVEFS} -.endif - @echo "Generating MD5 and SHA256 sums..." - @(cd ${CD} && md5 *.iso > FreeBSD-${BUILDNAME}-${TARGET}-iso.CHECKSUM.MD5) - @(cd ${CD} && sha256 *.iso > FreeBSD-${BUILDNAME}-${TARGET}-iso.CHECKSUM.SHA256) - touch ${.TARGET} -.else - @echo "Do not know how to create an ISO for ${TARGET}." -.endif - -# -# --==## Documentation Project tools required to build the release notes ##==-- -# -doc.1: - @echo "Making docproj tools..." - @for i in ${DOCPORTS}; do \ - cd /usr/ports/$$i && \ - env -i FTP_PASSIVE_MODE=$${FTP_PASSIVE_MODE:-no} PATH=$${PATH} \ - make all install clean BATCH=yes WITHOUT_X11=yes JADETEX=no \ - WITHOUT_PYTHON=yes FORCE_PKG_REGISTER=yes; \ - done - touch ${.TARGET} - -# -# --==## RELNOTESng: Next-generation replacements for *.TXT files ##==-- -# -doc.2: - @echo "Making release documentation..." - @cd ${.CURDIR}/doc && make all install clean 'FORMATS=html txt' \ - INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${RND} - touch ${.TARGET} - -# Various "subroutine" and other supporting targets. - -# RD= -# SD= -# TD= -# ARG= -doTARBALL: -.if !defined(SD) - @echo "SD undefined in doTARBALL" && exit 1 -.endif -.if !defined(TD) - @echo "TD undefined in doTARBALL" && exit 1 -.endif -.if !defined(ARG) - @echo "ARG undefined in doTARBALL" && exit 1 -.endif - @rm -rf ${RD}/dists/${TD}/${TN}* - @mkdir -p ${RD}/dists/${TD} - @( cd ${SD} && \ - tn=`echo ${TN} | tr 'A-Z' 'a-z'` && \ - echo rolling ${TD}/$$tn tarball &&\ - tar --exclude CVS --exclude .svn --exclude obj --exclude BOOTMFS -cf - ${ARG} | \ - ${ZIPNSPLIT} ${RD}/dists/${TD}/$$tn. && \ - sh ${.CURDIR}/scripts/info.sh ${RD}/dists/${TD}/$$tn \ - > ${RD}/dists/${TD}/$$tn.inf && \ - if [ -f ${.CURDIR}/scripts/$${TD}-install.sh ]; then \ - cp -p ${.CURDIR}/scripts/$${TD}-install.sh \ - ${RD}/dists/${TD}/install.sh && \ - chmod +x ${RD}/dists/${TD}/install.sh; \ - fi && \ - if [ "${SD}" != "/usr/src" ]; then \ - mtree -c -i -p ${SD}/${ARG} \ - -k gname,md5digest,mode,nlink,uname,size,link,type \ - > ${RD}/dists/${TD}/$$tn.mtree ; \ - else \ - true; \ - fi; \ - ( cd ${RD}/dists/${TD}; \ - rm -f CHECKSUM.MD5 CHECKSUM.SHA256; \ - md5 * > .CHECKSUM.MD5; \ - sha256 * > .CHECKSUM.SHA256; \ - mv .CHECKSUM.MD5 CHECKSUM.MD5; \ - mv .CHECKSUM.SHA256 CHECKSUM.SHA256) \ - ) - -doRELEASE: release.1 release.2 ${DOCREL} release.3 release.4 \ - release.5 release.6 release.7 release.8 ${EXTRAS} - @echo "Release done" - -floppies: - @rm -f release.4 release.8 floppies.[123] - @cd ${.CURDIR} && ${SMAKE} release.4 release.8 floppies.1 floppies.2 \ - floppies.3 - @cd ${RD} && find floppies -print | cpio -dumpl ${FD} - -installCRUNCH: -.if !defined(CRUNCH) - @echo "CRUNCH undefined in installCRUNCH" && exit 1 -.endif -.if !defined(DIR) - @echo "DIR undefined in installCRUNCH" && exit 1 -.endif -.if !defined(ZIP) - @echo "ZIP undefined in installCRUNCH" && exit 1 -.endif - @if ${ZIP} ; then \ - ${ZIPPER} < ${RD}/crunch/${CRUNCH} > ${DIR}/${CRUNCH}_crunch ; \ - else \ - ln -f ${RD}/crunch/${CRUNCH} ${DIR}/${CRUNCH}_crunch ; \ - fi - @chmod 555 ${DIR}/${CRUNCH}_crunch - @if [ -f ${.CURDIR}/${TARGET}/${CRUNCH}_crunch.conf ] ; then \ - for i in `crunchgen -l ${.CURDIR}/${TARGET}/${CRUNCH}_crunch.conf` ; do \ - ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \ - done \ - else \ - for i in `crunchgen -l ${.CURDIR}/${CRUNCH}_crunch.conf` ; do \ - ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \ - done \ - fi - -# -# --==## Build a floppy set for a splitfs file ##==-- -# -# FLOPPYBASE - basename of floppy image files -# FLOPPYDESC - description of floppy set -# SPLITFILE - filename of the file to split -# FDSIZE - if specified and "small", small floppy is created - -.if make(makeFloppySet) -SPLITDIR= ${RD}/floppyset/${FLOPPYBASE} -.if defined(FDSIZE) && ${FDSIZE} == "SMALL" -FLPSPLITSIZE= ${SMALLFLOPPYSPLITSIZE} -FLPSIZE= ${SMALLFLOPPYSIZE} -FLPLABEL= ${SMALLFLOPPYLABEL} -.else -FLPSPLITSIZE= ${FLOPPYSPLITSIZE} -FLPSIZE= ${FLOPPYSIZE} -FLPLABEL= ${FLOPPYLABEL} -.endif -.endif - -makeFloppySet: -.if !defined(FLOPPYBASE) - @echo "FLOPPYBASE undefined in ${.TARGET}" && exit 1 -.endif -.if !defined(FLOPPYDESC) - @echo "FLOPPYDESC undefined in ${.TARGET}" && exit 1 -.endif -.if !defined(SPLITFILE) - @echo "SPLITFILE undefined in ${.TARGET}" && exit 1 -.endif - sh ${.CURDIR}/scripts/split-file.sh ${SPLITFILE} \ - ${RD}/floppyset/${FLOPPYBASE} ${FLPSPLITSIZE} "${FLOPPYDESC}" - ( splitfile=${SPLITDIR}/`basename ${SPLITFILE}`.split ; \ - lines=`cat $${splitfile} | wc -l`; \ - lines=$$(($$lines - 1)) ; \ - for line in `jot $$lines`; do \ - file=`head -n $$(($${line} + 1)) $${splitfile} | tail -1 | cut -f 1 -d ' '` ; \ - sh -e ${DOFS_SH} ${RD}/floppies/${FLOPPYBASE}$${line}.flp \ - ${RD} ${MNT} ${FLPSIZE} ${SPLITDIR}/$${file} \ - ${BOOTINODE} ${FLPLABEL}; \ - done ) - -# -# --==## Build a boot floppy ##==-- -# -# FSIMAGE - base floppy image name -# FDSIZE - if specified and "small", small floppy is created -# KERNFILE - path to kernel split file -# MFSROOTFILE - path to mfsroot split file - -.if make(buildBootFloppy) -IMAGEDIR= ${RD}/image.${FSIMAGE} -BOOTDIR= ${RD}/trees/base/boot -HINTSFILE= ${BOOTDIR}/device.hints -ACPI_KO= ${RD}/kernels/${KERN_GENERIC}/acpi.ko -IMAGEFILE= ${RD}/floppies/${FSIMAGE}.flp -.if defined(FDSIZE) && ${FDSIZE} == "SMALL" -FLPSIZE= ${SMALLFLOPPYSIZE} -FLPLABEL= ${SMALLFLOPPYLABEL} -.else -FLPSIZE= ${FLOPPYSIZE} -FLPLABEL= ${FLOPPYLABEL} -.endif -.endif - -buildBootFloppy: -.if !defined(FSIMAGE) - @echo "FSIMAGE undefined in ${.TARGET}" && exit 1 -.endif -.if !defined(KERNFILE) - @echo "KERNFILE undefined in ${.TARGET}" && exit 1 -.endif -.if !defined(MFSROOTFILE) - @echo "MFSROOTFILE undefined in ${.TARGET}" && exit 1 -.endif - @echo "Running ${.TARGET} for ${FSIMAGE}" - @rm -rf ${IMAGEDIR} - @mkdir ${IMAGEDIR} - @echo "Setting up /boot directory for ${FSIMAGE} floppy" - @mkdir -p ${IMAGEDIR}/boot -.if ${TARGET_ARCH} == "i386" - @${WMAKEENV} kgzip -v -l ${RD}/trees/base/usr/lib/kgzldr.o -o \ - ${IMAGEDIR}/boot/loader ${BOOTDIR}/loader -.else - @cp ${BOOTDIR}/loader ${IMAGEDIR}/boot -.endif - @cp -Rp ${BOOTDIR}/*.4th ${BOOTDIR}/defaults ${BOOTDIR}/loader.help \ - ${BOOTDIR}/loader.rc ${IMAGEDIR}/boot -.if exists(${HINTSFILE}) - @cp ${HINTSFILE} ${IMAGEDIR}/boot/device.hints - @${ZIPPER} ${IMAGEDIR}/boot/device.hints -.endif - @${ZIPPER} ${IMAGEDIR}/boot/*.4th ${IMAGEDIR}/boot/loader.help \ - ${IMAGEDIR}/boot/defaults/loader.conf - @echo 'bootfile="/kernel"' > ${IMAGEDIR}/boot/loader.conf -.if exists(${ACPI_KO}) - @${ZIPPER} -c ${ACPI_KO} > ${IMAGEDIR}/acpi.ko.gz - @echo 'acpi_load="YES"' >> ${IMAGEDIR}/boot/loader.conf - @echo 'acpi_name="/acpi.ko"' >> ${IMAGEDIR}/boot/loader.conf - @echo 'acpi_before="read -p \"Insert boot floppy and press Enter\""' >> ${IMAGEDIR}/boot/loader.conf -.endif - @echo 'mfsroot_load="YES"' >> ${IMAGEDIR}/boot/loader.conf - @echo 'mfsroot_type="mfs_root"' >> ${IMAGEDIR}/boot/loader.conf - @echo 'mfsroot_name="/mfsroot"' >> ${IMAGEDIR}/boot/loader.conf -.if !exists(${ACPI_KO}) - @echo 'mfsroot_before="read -p \"Insert boot floppy and press Enter\""' >> ${IMAGEDIR}/boot/loader.conf -.endif -.if defined(SPLIT_MFSROOT) - @echo 'mfsroot_after="read -p \"Insert boot floppy and press Enter\""' >> ${IMAGEDIR}/boot/loader.conf -.endif -.if ${TARGET_ARCH} == "i386" || ${TARGET_ARCH} == "amd64" -.if ${AUTO_KEYBOARD_DETECT} - @echo "-P" >> ${IMAGEDIR}/boot.config -.endif -.endif - @rm -f ${IMAGEFILE} - @cp ${KERNFILE} ${MFSROOTFILE} ${IMAGEDIR} - sh -e ${DOFS_SH} ${IMAGEFILE} ${RD} ${MNT} ${FLPSIZE} ${IMAGEDIR} \ - ${BOOTINODE} ${FLPLABEL} - @echo "Created ${RD}/floppies/${FSIMAGE}.flp" - -.if make(package-split) -# Targets related to making a package split -# -# PKG_COPY instructs the script to copy the actual package files rather than -# make hard links -# PKG_TREE is the path to the package tree to be split -# PKG_DEST is the path to the destination tree to create the split in -# PKG_VERBOSE asks for verbose output of the layout process -# PKG_INDEX is the path to the INDEX file. By default ${PKG_TREE}/INDEX. - -.if defined(PKG_COPY) -PKG_DO_COPY= cp -.else -PKG_DO_COPY= ln -.endif -PKG_WRKIDX= ${PKG_DEST}/INDEX.master -PKG_ENV?= -.if defined(TARGET_ARCH) -PKG_ENV+= PKG_ARCH=${TARGET_ARCH} -.endif -.if defined(PKG_VERBOSE) -PKG_ENV+= PKG_VERBOSE=1 -.endif -PKG_INDEX?= ${PKG_TREE}/INDEX - -package-split: -.if !defined(PKG_TREE) - @echo "PKG_TREE must be defined" && exit 1 -.endif -.if !defined(PKG_DEST) - @echo "PKG_DEST must be defined" && exit 1 -.endif - @env ${PKG_ENV} python ${.CURDIR}/scripts/package-split.py \ - ${PKG_INDEX} ${PKG_WRKIDX} - @env ${PKG_ENV} sh ${.CURDIR}/scripts/package-trees.sh ${PKG_DO_COPY} \ - ${PKG_WRKIDX} ${PKG_TREE} ${PKG_DEST} -.endif - -.include <bsd.obj.mk> diff --git a/release/amd64/boot_crunch.conf b/release/amd64/boot_crunch.conf deleted file mode 100644 index 3330c93..0000000 --- a/release/amd64/boot_crunch.conf +++ /dev/null @@ -1,44 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH -Dlint - -srcdirs /usr/src/bin -progs hostname -progs pwd -progs rm -progs sh -progs test -ln sh -sh -ln test [ - -srcdirs /usr/src/sbin -progs camcontrol -progs dhclient -progs fsck_ffs -progs ifconfig -progs mount_nfs -progs newfs -progs route -progs rtsol -progs tunefs -ln fsck_ffs fsck_4.2bsd -ln fsck_ffs fsck_ufs - -srcdirs /usr/src/usr.bin -progs cpio -progs find -progs minigzip -progs sed -ln minigzip gzip -ln minigzip gunzip -ln minigzip zcat - -srcdirs /usr/src/usr.sbin -progs arp -progs ppp -progs sysinstall -progs usbconfig - -libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -ldevinfo -libs -lbsdxml -larchive -lcrypto -lbz2 -llzma -lusb -ljail diff --git a/release/fixit.profile b/release/fixit.profile deleted file mode 100644 index 337b68b..0000000 --- a/release/fixit.profile +++ /dev/null @@ -1,42 +0,0 @@ -: -# $FreeBSD$ - -export BLOCKSIZE=K -export PS1="Fixit# " -export EDITOR="/mnt2/rescue/vi" -export PAGER="/mnt2/usr/bin/more" -export SCSI_MODES="/mnt2/usr/share/misc/scsi_modes" -# the root MFS doesn't have /dev/nrsa0, pick a better default for mt(1) -export TAPE=/mnt2/dev/nrsa0 -# make geom(8) utilities find their modules -export GEOM_LIBRARY_PATH="/mnt2/lib/geom:/lib/geom" - -alias ls="ls -F" -alias ll="ls -l" -alias m="more -e" - -echo '+---------------------------------------------------------------+' -echo '| You are now running from FreeBSD "fixit" media. |' -echo '| ------------------------------------------------------------- |' -echo "| When you're finished with this shell, please type exit. |" -echo '| The fixit media is mounted as /mnt2. |' -echo '| |' -echo '| You might want to symlink /mnt/etc/*pwd.db and /mnt/etc/group |' -echo '| to /etc after mounting a root filesystem from your disk. |' -echo '| tar(1) will not restore all permissions correctly otherwise! |' -echo '| |' -echo '| In order to load kernel modules you might want to add the |' -echo '| fixit media to the kern.module_path sysctl variable so that |' -echo '| the kernel knows where to find them. |' -echo '| |' -echo '| Note: you can use the arrow keys to browse through the |' -echo '| command history of this shell. |' -echo '+---------------------------------------------------------------+' -echo -echo 'Good Luck!' -echo - -# Make the arrow keys work; everybody will love this. -set -o emacs 2>/dev/null - -cd / diff --git a/release/fixit.services b/release/fixit.services deleted file mode 100644 index ff776b2..0000000 --- a/release/fixit.services +++ /dev/null @@ -1,108 +0,0 @@ -# -# Network services, Internet style -# -# Stripped-down version. -# -# $FreeBSD$ -# -# WELL KNOWN PORT NUMBERS -# -echo 7/tcp -echo 7/udp -discard 9/tcp sink null -discard 9/udp sink null -systat 11/tcp users #Active Users -systat 11/udp users #Active Users -daytime 13/tcp -daytime 13/udp -chargen 19/tcp ttytst source #Character Generator -chargen 19/udp ttytst source #Character Generator -ftp-data 20/tcp #File Transfer [Default Data] -ftp-data 20/udp #File Transfer [Default Data] -ftp 21/tcp #File Transfer [Control] -ftp 21/udp #File Transfer [Control] -ssh 22/tcp #Secure Shell Login -ssh 22/udp #Secure Shell Login -telnet 23/tcp -telnet 23/udp -# 24/tcp any private mail system -# 24/udp any private mail system -smtp 25/tcp mail #Simple Mail Transfer -smtp 25/udp mail #Simple Mail Transfer -time 37/tcp timserver -time 37/udp timserver -domain 53/tcp #Domain Name Server -domain 53/udp #Domain Name Server -bootps 67/tcp dhcps #Bootstrap Protocol Server -bootps 67/udp dhcps #Bootstrap Protocol Server -bootpc 68/tcp dhcpc #Bootstrap Protocol Client -bootpc 68/udp dhcpc #Bootstrap Protocol Client -tftp 69/tcp #Trivial File Transfer -tftp 69/udp #Trivial File Transfer -gopher 70/tcp -gopher 70/udp -finger 79/tcp -finger 79/udp -http 80/tcp www www-http #World Wide Web HTTP -http 80/udp www www-http #World Wide Web HTTP -sunrpc 111/tcp rpcbind #SUN Remote Procedure Call -sunrpc 111/udp rpcbind #SUN Remote Procedure Call -auth 113/tcp ident tap #Authentication Service -auth 113/udp ident tap #Authentication Service -nntp 119/tcp usenet #Network News Transfer Protocol -nntp 119/udp usenet #Network News Transfer Protocol -rmt 411/tcp #Remote MT Protocol -rmt 411/udp #Remote MT Protocol -https 443/tcp -https 443/udp -# -# Berkeley-specific services -# -exec 512/tcp #remote process execution; -# authentication performed using -# passwords and UNIX loppgin names -biff 512/udp comsat #used by mail system to notify users -# of new mail received; currently -# receives messages only from -# processes on the same machine -login 513/tcp #remote login a la telnet; -# automatic authentication performed -# based on priviledged port numbers -# and distributed data bases which -# identify "authentication domains" -who 513/udp whod #maintains data bases showing who's -# logged in to machines on a local -# net and the load average of the -# machine -cmd 514/tcp shell #like exec, but automatic -# authentication is performed as for -# login server -syslog 514/udp -printer 515/tcp spooler -printer 515/udp spooler -talk 517/tcp #like tenex link, but across -# machine - unfortunately, doesn't -# use link protocol (this is actually -# just a rendezvous port from which a -# tcp connection is established) -talk 517/udp #like tenex link, but across -# machine - unfortunately, doesn't -# use link protocol (this is actually -# just a rendezvous port from which a -# tcp connection is established) -ntalk 518/tcp -ntalk 518/udp -utime 519/tcp unixtime -utime 519/udp unixtime -efs 520/tcp #extended file name server -router 520/udp route routed #local routing process (on site); -# uses variant of Xerox NS routing -# information protocol -uucp 540/tcp uucpd -uucp 540/udp uucpd -uucp-rlogin 541/tcp -uucp-rlogin 541/udp -klogin 543/tcp # Kerberos (v4/v5) -klogin 543/udp # Kerberos (v4/v5) -kshell 544/tcp krcmd # Kerberos (v4/v5) -kshell 544/udp krcmd # Kerberos (v4/v5) diff --git a/release/i386/boot_crunch.conf b/release/i386/boot_crunch.conf deleted file mode 100644 index 3330c93..0000000 --- a/release/i386/boot_crunch.conf +++ /dev/null @@ -1,44 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH -Dlint - -srcdirs /usr/src/bin -progs hostname -progs pwd -progs rm -progs sh -progs test -ln sh -sh -ln test [ - -srcdirs /usr/src/sbin -progs camcontrol -progs dhclient -progs fsck_ffs -progs ifconfig -progs mount_nfs -progs newfs -progs route -progs rtsol -progs tunefs -ln fsck_ffs fsck_4.2bsd -ln fsck_ffs fsck_ufs - -srcdirs /usr/src/usr.bin -progs cpio -progs find -progs minigzip -progs sed -ln minigzip gzip -ln minigzip gunzip -ln minigzip zcat - -srcdirs /usr/src/usr.sbin -progs arp -progs ppp -progs sysinstall -progs usbconfig - -libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -ldevinfo -libs -lbsdxml -larchive -lcrypto -lbz2 -llzma -lusb -ljail diff --git a/release/i386/fixit_crunch.conf b/release/i386/fixit_crunch.conf deleted file mode 100644 index 703ae84..0000000 --- a/release/i386/fixit_crunch.conf +++ /dev/null @@ -1,49 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH - -srcdirs /usr/src/bin -progs cat -progs chmod -progs cp -progs dd -progs df -progs echo -progs ed -progs expr -progs kill -progs ln -progs ls -progs mkdir -progs mv -progs rm -progs rmdir -progs sleep -progs sync - -srcdirs /usr/src/sbin -progs bsdlabel -progs clri -progs dmesg -progs fdisk -progs mknod -progs mount -progs mount_cd9660 -progs mount_msdosfs -progs reboot -progs restore -progs swapon -progs umount -ln bsdlabel disklabel -ln restore rrestore - -srcdirs /usr/src/usr.bin -progs ftp -progs telnet - -srcdirs /usr/src/usr.sbin -progs chown -progs chroot -ln chown chgrp - -libs -ledit -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lutil diff --git a/release/ia64/boot_crunch.conf b/release/ia64/boot_crunch.conf deleted file mode 100644 index 9ab4f71..0000000 --- a/release/ia64/boot_crunch.conf +++ /dev/null @@ -1,49 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH -Dlint - -srcdirs /usr/src/bin -progs hostname -progs pwd -progs rm -progs sh -progs test -ln sh -sh -ln test [ - -srcdirs /usr/src/sbin -progs camcontrol -progs dhclient -progs fsck_ffs -progs geom -progs ifconfig -progs mount_msdosfs -progs mount_nfs -progs newfs -progs newfs_msdos -progs route -progs rtsol -progs tunefs -ln fsck_ffs fsck_4.2bsd -ln fsck_ffs fsck_ufs -ln geom glabel -ln geom gpart - -srcdirs /usr/src/usr.bin -progs cpio -progs find -progs minigzip -progs sed -ln minigzip gzip -ln minigzip gunzip -ln minigzip zcat - -srcdirs /usr/src/usr.sbin -progs arp -progs ppp -progs sysinstall -progs usbconfig - -libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -lodialog -lncurses -ldisk -lcam -lkiconv -lsbuf -lufs -ldevinfo -libs -lgeom -lbsdxml -larchive -lcrypto -lbz2 -llzma -lusb -ljail diff --git a/release/pc98/boot_crunch.conf b/release/pc98/boot_crunch.conf deleted file mode 100644 index cce4553..0000000 --- a/release/pc98/boot_crunch.conf +++ /dev/null @@ -1,43 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH -Dlint - -srcdirs /usr/src/bin -progs hostname -progs pwd -progs rm -progs sh -progs test -ln sh -sh -ln test [ - -srcdirs /usr/src/sbin -progs camcontrol -progs dhclient -progs fsck_ffs -progs ifconfig -progs mount_nfs -progs newfs -progs route -progs rtsol -progs tunefs -ln fsck_ffs fsck_4.2bsd -ln fsck_ffs fsck_ufs - -srcdirs /usr/src/usr.bin -progs cpio -progs find -progs minigzip -progs sed -ln minigzip gzip -ln minigzip gunzip -ln minigzip zcat - -srcdirs /usr/src/usr.sbin -progs arp -progs ppp -progs sysinstall - -libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -lbsdxml -libs -larchive -lcrypto -lbz2 -llzma -ljail diff --git a/release/pc98/fixit-small_crunch.conf b/release/pc98/fixit-small_crunch.conf deleted file mode 100644 index 111f1cd..0000000 --- a/release/pc98/fixit-small_crunch.conf +++ /dev/null @@ -1,43 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH - -srcdirs /usr/src/bin -progs cat -progs chmod -progs cp -progs dd -progs df -progs echo -progs ed -progs expr -progs kill -progs ln -progs ls -progs mkdir -progs mv -progs rm -progs rmdir -progs sleep -progs sync - -srcdirs /usr/src/sbin -progs bsdlabel -progs clri -progs dmesg -progs fdisk -progs mount -progs mount_cd9660 -progs mount_msdosfs -progs reboot -progs swapon -progs umount -ln bsdlabel disklabel - -special fdisk srcdir /usr/src/sbin/fdisk_pc98 - -srcdirs /usr/src/usr.sbin -progs chown -ln chown chgrp - -libs -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lutil diff --git a/release/pc98/fixit_crunch.conf b/release/pc98/fixit_crunch.conf deleted file mode 100644 index c03db1c..0000000 --- a/release/pc98/fixit_crunch.conf +++ /dev/null @@ -1,47 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH - -srcdirs /usr/src/bin -progs cat -progs chmod -progs cp -progs dd -progs df -progs echo -progs ed -progs expr -progs kill -progs ln -progs ls -progs mkdir -progs mv -progs rm -progs rmdir -progs sleep -progs sync - -srcdirs /usr/src/sbin -progs bsdlabel -progs clri -progs dmesg -progs fdisk -progs mount -progs mount_cd9660 -progs mount_msdosfs -progs reboot -progs swapon -progs umount -ln bsdlabel disklabel - -special fdisk srcdir /usr/src/sbin/fdisk_pc98 - -srcdirs /usr/src/usr.bin -progs ftp -progs telnet - -srcdirs /usr/src/usr.sbin -progs chown -ln chown chgrp - -libs -ledit -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lutil diff --git a/release/powerpc/boot_crunch.conf b/release/powerpc/boot_crunch.conf deleted file mode 100644 index 4a2f580..0000000 --- a/release/powerpc/boot_crunch.conf +++ /dev/null @@ -1,49 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH -Dlint - -srcdirs /usr/src/bin -progs hostname -progs pwd -progs rm -progs sh -progs test -ln sh -sh -ln test [ - -srcdirs /usr/src/sbin -progs camcontrol -progs dhclient -progs fsck_ffs -progs geom -progs ifconfig -progs mount_msdosfs -progs mount_nfs -progs newfs -progs newfs_msdos -progs route -progs rtsol -progs tunefs -ln fsck_ffs fsck_4.2bsd -ln fsck_ffs fsck_ufs -ln geom glabel -ln geom gpart - -srcdirs /usr/src/usr.bin -progs cpio -progs find -progs minigzip -progs sed -ln minigzip gzip -ln minigzip gunzip -ln minigzip zcat - -srcdirs /usr/src/usr.sbin -progs arp -progs ppp -progs sysinstall -progs usbconfig - -libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -lodialog -lncurses -ldisk -lcam -lkiconv -lsbuf -lufs -libs -lgeom -lbsdxml -larchive -lcrypto -lbz2 -llzma -lusb -ljail diff --git a/release/scripts/base-install.sh b/release/scripts/base-install.sh deleted file mode 100755 index c87a38b..0000000 --- a/release/scripts/base-install.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi - -echo "You are about to extract the base distribution into ${DESTDIR:-/} - are you SURE" -echo -n "you want to do this over your installed system (y/n)? " -read ans -if [ "$ans" = "y" ]; then - cat base.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -fi diff --git a/release/scripts/catpages-install.sh b/release/scripts/catpages-install.sh deleted file mode 100755 index 2e618ca..0000000 --- a/release/scripts/catpages-install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -cat catpages.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -exit 0 diff --git a/release/scripts/catpages-make.sh b/release/scripts/catpages-make.sh deleted file mode 100755 index 755057d..0000000 --- a/release/scripts/catpages-make.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# Move all the catpages out to their own dist, using the base dist as a -# starting point. This must precede the manpages dist script. -if [ -d ${RD}/trees/base/usr/share/man ]; then - ( cd ${RD}/trees/base/usr/share/man; - find cat* whatis | cpio -dumpl ${RD}/trees/catpages/usr/share/man > /dev/null 2>&1) && - rm -rf ${RD}/trees/base/usr/share/man/cat*; -fi diff --git a/release/scripts/checkindex.pl b/release/scripts/checkindex.pl deleted file mode 100644 index 44612dc..0000000 --- a/release/scripts/checkindex.pl +++ /dev/null @@ -1,192 +0,0 @@ -#!/usr/bin/perl -# ----------------------------------------------------------------- -# FreeBSD Release Checking Utility - Package Index Check -# -# This program checks the packages/INDEX file to verify that -# the index is in the correct format and that every package -# needed by a release is included on the CD. -# -# Copyright(c) 2000 BSDi -# Murray Stokely -# ----------------------------------------------------------------- -# 08 Apr 2000 -# -# $FreeBSD$ -# - -use Getopt::Long; - -# -# Display the usage instructions -# - -sub printHelp { - print<<end; -usage : checkindex -s <sysinstall src dir> <INDEX> - - This program checks the packages INDEX file to verify that the -index is correct and that every package needed by sysinstall is -included in the index. - - Options - - -help Display usage instructions - -s <src dir> Specify the sysinstall source directory. Use - this so to make sure every package referenced - in the code is in your INDEX - -newindex Generate a new index consisting of only those - packages that actually exist in pkgdir/All - -depends <pkg> Lists all packages in the index that depend - on <pkg>. - -end -} - -## -## Attempts to find the value of a variable in C code by backtracking -## up the source looking for a previous declaration. -## -## This is a bit overkill for the purpose of this script, -## stick with grepping for likely packages for now. - -sub findAssignment($$) { - ## This code deals with the small (5%) number of matches - ## in which package_add refers to a variable rather than - ## a inline string, so we have to find the value of that - ## variable so that we can push it onto the list -# my($fileName,$code) = split(/:/,$match); -# open(FILE,$fileName) || die "Could not open $fileName : $!\n"; -# my(@lines) = <FILE>; -# my($cnt) = 1; -# my($lineMatch) = 0; -# chomp(@lines); -# foreach $line (@lines) { -# $lineMatch = $cnt if ($line eq $code); -# $cnt++; -# } -# $code =~ /package_add\((\S+)\)/; -# my($varName) = $1; -# print STDERR "$lineMatch of $fileName is wierd\n"; -# print STDERR "Trying to find '$varName'\n"; -# while ($cnt > 0) { -# $cnt--; -# } - - -} - -## -## Returns a list of all the packages referenced in the sysinstall source -## code -## - -sub getPackages($) { - my($srcDir) = $_[0]; - my(@matches) = `grep package_add $opt_s/*.c`; - my(@packages); - foreach $match (@matches) { - chomp $match; - next if ($match =~ m|$opt_s/package.c|); - if ($match =~ /package_add\(\"(\S+)\"\)/) { - push(@packages,$1); - } elsif ($match =~ /package_add\(char/) { - # function definition or prototype - next; - } else { - # package_add(variable or DEFINE) - my(@varMatches) = `grep variable_set2 $opt_s/*.c`; - chomp @varMatches; - foreach $varMatch (@varMatches) { - if ($varMatch =~ /variable_set2\(\S+_PACKAGE,\s+\"(\S+)\"/) { - push(@packages,$1); - } - } - } - } - @packages; -} - - -&GetOptions("help","s=s","newindex","depends=s"); -if ($opt_help) { - &printHelp; -} else{ - my ($indexName) = $ARGV[0]; - my ($mistakes) = 0; - my ($counter) = 0; - print STDERR "Packages Referenced :\n---------------------\n"; - open(INDEX,$indexName) || die "Could not open $indexName : $!"; - @index = <INDEX>; - close(INDEX); - - ## Check to ensure that every file in the index exists physically. - print STDERR "Check to ensure that every file in the index exists physically\n"; - foreach $line (@index) { - chomp $line; - ($file,$pathto,$prefix,$comment,$descr,$maint,$cats,$junk,$rdeps,$junk) = split(/\|/,$line,10); - $DEPENDS{$file} = $rdeps if (-e "All/$file.tgz"); - } - - if ($opt_newindex) { - foreach $pkg (keys %DEPENDS) { - $new = quotemeta $pkg; - @lines = grep(/^$new\|/,@index); - chomp $lines; - ($#lines == 0) || die "Multiple lines for '$pkg' in index!"; - printf "%s\n",$lines[0]; - } - } elsif ($opt_depends) { - foreach $key (keys %DEPENDS) { - foreach $dependency (split ' ',$DEPENDS{$key}) { - if ($opt_depends eq $dependency) { - print "$opt_depends is needed by $key\n"; - $counter++; - } - } - } - print "$opt_depends is not needed by any packages in the index!\n" - unless ($counter); - } else { - - ## Check to ensure that all the dependencies are there. - print "Check to make sure that every dependency of every file exists\n", - "in the Index and physically.\n"; - foreach $file (keys %DEPENDS) { -# print "Checking $file\n"; - foreach $depend (split(' ',$DEPENDS{$file})) { - unless (-e "All/$depend.tgz") { - # instead of a hash counter, make it a hash of arrays - # where the arrays are the files depended on. - push @{ $MISSING{$depend} }, $file; - $mistakes++; - } - } - } - - ## This makes sure that the index file contains everything - ## that sysinstall uses. - if ($opt_s) { - @packages = getPackages($opt_s); - foreach $pkg (@packages) { - unless (grep(/^$pkg/,@index)) { - push @{ $MISSING{$pkg} }, "sysinstall"; - $mistakes++; - } - } - } - - - ## If there were mistakes, print out the missing packages. - if ($mistakes) { - print "--------------------------------------------------------\n", - " Packages Missing : \n", - "--------------------------------------------------------\n"; - foreach $pkg (keys %MISSING) { - @files = @{ $MISSING{$pkg} }; - print "$pkg (@files)\n"; - } - } else { - print "Everything looks good!\n"; - } -} -} diff --git a/release/scripts/chkINDEX b/release/scripts/chkINDEX deleted file mode 100755 index d2b9e0e..0000000 --- a/release/scripts/chkINDEX +++ /dev/null @@ -1,20 +0,0 @@ -#! /bin/sh -# -# $FreeBSD$ - -usage() -{ - echo "$*" >&2 - echo "This script must be run from the top level package directory" >&2 - exit 1 -} - -[ $# -ge 1 ] && usage "usage: chkINDEX" -[ -f INDEX ] || usage "INDEX file not found" - -echo Checking for missing files -sed 's,^\([^|]*\)|.*,All/\1.tbz,' INDEX | xargs ls -l >/dev/null - -echo Checking for missing dependents -awk -F'|' '{print $9}' INDEX | sed 's/ /\ -/g' | sort -u | sed -e /^$/d -e 's/\(.*\)/All\/\1.tbz/' | xargs ls -l >/dev/null diff --git a/release/scripts/commerce-install.sh b/release/scripts/commerce-install.sh deleted file mode 100755 index 9bf67a3..0000000 --- a/release/scripts/commerce-install.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -echo "Extracting commerce tarball into ${DESTDIR}/usr/local" -tar --unlink -xpzf commerce.tgz -C ${DESTDIR}/usr/local -exit 0 diff --git a/release/scripts/dict-install.sh b/release/scripts/dict-install.sh deleted file mode 100755 index 4f57aaa..0000000 --- a/release/scripts/dict-install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -cat dict.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -exit 0 diff --git a/release/scripts/dict-make.sh b/release/scripts/dict-make.sh deleted file mode 100755 index c0ca6a5..0000000 --- a/release/scripts/dict-make.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# Move the dict stuff out to its own dist -if [ -d ${RD}/trees/base/usr/share/dict ]; then - tar -cf - -C ${RD}/trees/base/usr/share/dict . | - tar -xpf - -C ${RD}/trees/dict/usr/share/dict && - rm -rf ${RD}/trees/base/usr/share/dict; -fi - -for i in birthtoken flowers; do - if [ -f ${RD}/trees/base/usr/share/misc/$i ]; then - mv ${RD}/trees/base/usr/share/misc/$i \ - ${RD}/trees/dict/usr/share/misc; - fi; -done diff --git a/release/scripts/doFS.sh b/release/scripts/doFS.sh deleted file mode 100644 index ec64c95..0000000 --- a/release/scripts/doFS.sh +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -set -ex - -export BLOCKSIZE=512 - -DISKLABEL=$1; shift -MACHINE=${1:+"-m $1"}; shift -FSIMG=$1; shift -RD=$1 ; shift -MNT=$1 ; shift -FSSIZE=$1 ; shift -FSPROTO=$1 ; shift -FSINODE=$1 ; shift -FSLABEL=$1 ; shift - -# -# If we've been told to, compute the required file system size -# and average inode size automatically. -# -if [ ${FSSIZE} -eq 0 -a ${FSLABEL} = "auto" ]; then - roundup() echo $((($1+$2-1)-($1+$2-1)%$2)) - nf=$(find ${FSPROTO} |wc -l) - sk=$(du -sk ${FSPROTO} |cut -f1) - FSINODE=$(roundup $(($sk*1024/$nf)) ${FSINODE}) - FSSIZE=$(roundup $(($sk*12/10)) 1024) -fi - -dofs_vn () { - if [ "x$VNDEVICE" = "x" ] ; then - VNDEVICE=vn0 - fi - u=`expr $VNDEVICE : 'vn\([0-9]*\)' || true` - VNDEVICE=vnn$u - - rm -f /dev/*vnn* - mknod /dev/rvnn${u} c 43 `expr 65538 + $u '*' 8` - mknod /dev/rvnn${u}c c 43 `expr 2 + $u '*' 8` - mknod /dev/vnn${u} b 15 `expr 65538 + $u '*' 8` - mknod /dev/vnn${u}c b 15 `expr 2 + $u '*' 8` - - umount /dev/${VNDEVICE} 2>/dev/null || true - umount ${MNT} 2>/dev/null || true - vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true - - vnconfig -s labels -c /dev/r${VNDEVICE} ${FSIMG} - - trap "umount ${MNT}; vnconfig -u /dev/r${VNDEVICE}; rm -f /dev/*vnn*" EXIT - - disklabel -w ${BOOT} ${VNDEVICE} ${FSLABEL} - newfs -i ${FSINODE} -o space -m 0 /dev/r${VNDEVICE}c - - mount /dev/${VNDEVICE}c ${MNT} -} - -dofs_md () { - if [ "x${MDDEVICE}" != "x" ] ; then - umount /dev/${MDDEVICE} 2>/dev/null || true - umount ${MNT} 2>/dev/null || true - mdconfig -d -u ${MDDEVICE} 2>/dev/null || true - fi - - MDDEVICE=`mdconfig -a -t vnode -f ${FSIMG}` - if [ ! -c /dev/${MDDEVICE} ] ; then - echo "No /dev/$MDDEVICE" 1>&2 - exit 1 - fi - - trap "umount ${MNT}; mdconfig -d -u ${MDDEVICE}" EXIT - - if [ "x${DISKLABEL}" != "x" ] ; then - ${DISKLABEL} ${MACHINE} -w ${BOOT} ${MDDEVICE} ${FSLABEL} - fi - newfs -O1 -b 4096 -f 512 -i ${FSINODE} -o space -m 0 /dev/${MDDEVICE} - mount /dev/${MDDEVICE} ${MNT} -} - -rm -f ${FSIMG} -dd of=${FSIMG} if=/dev/zero count=${FSSIZE} bs=1k 2>/dev/null - -# -# We don't have any bootblocks on ia64. Note that -B implies -r, -# so we have to specifically specify -r when we don't have -B. -# bsdlabel fails otherwise. -# -case `uname -r` in -4.*) - if [ -f "${RD}/trees/base/boot/boot1" ]; then - BOOT="-B -b ${RD}/trees/base/boot/boot1" - if [ -f "${RD}/trees/base/boot/boot2" ]; then - BOOT="${BOOT} -s ${RD}/trees/base/boot/boot2" - fi - else - BOOT="-r" - fi - dofs_vn - ;; -*) - if [ -f "${RD}/trees/base/boot/boot" ]; then - BOOT="-B -b ${RD}/trees/base/boot/boot" - else - BOOT="-r" - fi - dofs_md - ;; -esac - -if [ -d ${FSPROTO} ]; then - (set -e && cd ${FSPROTO} && find . -print | cpio -dump ${MNT}) -else - cp -p ${FSPROTO} ${MNT} -fi - -df -ki ${MNT} - -set `df -ki ${MNT} | tail -1` - -echo "*** File system is ${FSSIZE} K, $4 left" -echo "*** ${FSINODE} bytes/inode, $7 left" diff --git a/release/scripts/doc-install.sh b/release/scripts/doc-install.sh deleted file mode 100755 index 5609720..0000000 --- a/release/scripts/doc-install.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -echo "You are about to extract the doc distribution into ${DESTDIR:-/} - are you SURE" -echo -n "you want to do this over your installed system (y/n)? " -read ans -if [ "$ans" = "y" ]; then - cat doc.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -fi diff --git a/release/scripts/doc-make.sh b/release/scripts/doc-make.sh deleted file mode 100755 index 0335540..0000000 --- a/release/scripts/doc-make.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# Create the doc dist. -if [ -d ${RD}/trees/base/usr/share/doc ]; then - ( cd ${RD}/trees/base/usr/share/doc; - find . | cpio -dumpl ${RD}/trees/doc/usr/share/doc ) && - rm -rf ${RD}/trees/base/usr/share/doc -fi diff --git a/release/scripts/games-install.sh b/release/scripts/games-install.sh deleted file mode 100755 index 6c94077..0000000 --- a/release/scripts/games-install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -cat games.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -exit 0 diff --git a/release/scripts/info-install.sh b/release/scripts/info-install.sh deleted file mode 100755 index 30c12bf..0000000 --- a/release/scripts/info-install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -cat info.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -exit 0 diff --git a/release/scripts/info-make.sh b/release/scripts/info-make.sh deleted file mode 100755 index 12fd29d..0000000 --- a/release/scripts/info-make.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# Move the info files out to their own dist -if [ -d ${RD}/trees/base/usr/share/info ]; then - tar -cf - -C ${RD}/trees/base/usr/share/info . | - tar -xpf - -C ${RD}/trees/info/usr/share/info && - rm -rf ${RD}/trees/base/usr/share/info; -fi diff --git a/release/scripts/info.sh b/release/scripts/info.sh deleted file mode 100644 index e25ceb7..0000000 --- a/release/scripts/info.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# $ANA: info.sh,v 1.3 1996/06/04 16:25:30 wollman Exp $ -# $FreeBSD$ -# - -ls $1.[a-z][a-z] | wc | awk '{ print "Pieces = ",$1 }' -for FILE in $1.[a-z][a-z]; do - PIECE=`echo $FILE | cut -d . -f 2` - echo -n "cksum.$PIECE = " - cksum $FILE | awk ' { print $1,$2 } ' -done diff --git a/release/scripts/kernels-install.sh b/release/scripts/kernels-install.sh deleted file mode 100644 index 0bf9619..0000000 --- a/release/scripts/kernels-install.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -if [ $# -lt 1 ]; then - echo "You must specify which kernel to extract." - exit 1 -fi - -CONFIG=$1 -BOOT=${DESTDIR}/boot -KERNEL=$BOOT/$CONFIG - -if [ -d $KERNEL ]; then - echo "You are about to extract the $CONFIG kernel distribution into $KERNEL - are you SURE" - echo -n "you want to do this over your installed system (y/n)? " - read ans -else - # new installation; do not prompt - ans=y -fi -if [ "$ans" = "y" ]; then - if [ -d $KERNEL ]; then - sav=$KERNEL.sav - if [ -d $sav ]; then - # XXX remove stuff w/o a prompt - echo "Removing existing $sav" - rm -rf $sav - fi - echo "Saving existing $KERNEL as $sav" - mv $KERNEL $sav - fi - # translate per Makefile:doTARBALL XXX are we sure to have tr? - tn=`echo ${CONFIG} | tr 'A-Z' 'a-z'` - cat $tn.?? | tar --unlink -xpzf - -C $BOOT -else - echo "Installation of $CONFIG kernel distribution not done." -fi diff --git a/release/scripts/lib32-install.sh b/release/scripts/lib32-install.sh deleted file mode 100644 index c6f732d..0000000 --- a/release/scripts/lib32-install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -cat lib32.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -exit 0 diff --git a/release/scripts/manpages-install.sh b/release/scripts/manpages-install.sh deleted file mode 100755 index 35eb4b7..0000000 --- a/release/scripts/manpages-install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -cat manpages.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -exit 0 diff --git a/release/scripts/manpages-make.sh b/release/scripts/manpages-make.sh deleted file mode 100755 index bb1326f..0000000 --- a/release/scripts/manpages-make.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# Move all the manpages out to their own dist, using the base dist as a -# starting point. -if [ -d ${RD}/trees/base/usr/share/man ]; then - ( cd ${RD}/trees/base/usr/share/man; - find . | cpio -dumpl ${RD}/trees/manpages/usr/share/man > /dev/null 2>&1) && - rm -rf ${RD}/trees/base/usr/share/man; -fi diff --git a/release/scripts/mkpkghier b/release/scripts/mkpkghier deleted file mode 100755 index c14b628..0000000 --- a/release/scripts/mkpkghier +++ /dev/null @@ -1,33 +0,0 @@ -#! /bin/sh -# -# $FreeBSD$ - -usage() -{ - echo "$*" >&2 - echo "This script must be run from the top level package directory" >&2 - exit 1 -} - -[ $# -ge 1 ] && usage "usage: mkpkghier" -[ -f INDEX ] || usage "INDEX file not found" -[ -d All ] || usage "All directory not found" - -old=$(ls | egrep -v "^INDEX$|^All$|^Latest$") - -[ -n "$old" ] && { echo Removing old hierarchy; rm -fr $old; } - -echo Creating new hierarchy -awk -F'|' '{ print $1 " " $7; }' INDEX | while read pkg dirs -do - [ -f All/$pkg.tbz ] || { - echo "All/$pkg.tbz: Non-existent" >&2 - continue - } - for dir in $dirs - do - mkdir -p $dir - [ -e $dir/$pkg.tbz ] && continue - ln -s ../All/$pkg.tbz $dir/$pkg.tbz - done -done diff --git a/release/scripts/mkpkgindex.sh b/release/scripts/mkpkgindex.sh deleted file mode 100644 index b70a258..0000000 --- a/release/scripts/mkpkgindex.sh +++ /dev/null @@ -1,57 +0,0 @@ -#! /bin/sh -# ex:ts=8 - -# Copyright (c) 2003 David E. O'Brien -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. -# -# $FreeBSD$ - -# Creates an INDEX file suitable for an ISO distribution image from a master -# INDEX file. The generated INDEX file contains only the packages in the -# supplied directory. - -case $# in - 3) PKG_EXT="tbz" ;; - 4) PKG_EXT=$4 ;; - *) - echo `basename $0` "<master index file> <output index file> <pkg dir> [pkg ext]" - exit 1 - ;; -esac - -PKG_LIST=$(basename `ls $3/*.${PKG_EXT}` | sed -e "s/\.${PKG_EXT}$//") -REGEX=$(echo ${PKG_LIST} | sed \ - -e 's/ /|/g' \ - -e 's/\./\\\./g' \ - -e 's/\+/\\\+/g' \ - -e 's/\^/\\\^/g') - -egrep "^(${REGEX})" $1 > $2 - -if [ $(echo ${PKG_LIST} | wc -w) != $(wc -l < $2) ]; then - echo "ERROR: some packages not found in $1" - exit 1 -else - exit 0 -fi diff --git a/release/scripts/package-split.py b/release/scripts/package-split.py deleted file mode 100644 index 727262b..0000000 --- a/release/scripts/package-split.py +++ /dev/null @@ -1,187 +0,0 @@ -#!/usr/local/bin/python -# -# This script generates a master INDEX file for the CD images built by the -# FreeBSD release engineers. Each disc is given a list of desired packages. -# Dependencies of these packages are placed on either the same disc or an -# earlier disc. The resulting master INDEX file is then written out. -# -# Usage: package-split.py <INDEX> <master INDEX> -# -# $FreeBSD$ - -import os -import sys - -try: - arch = os.environ["PKG_ARCH"] -except: - arch = os.uname()[4] -print "Using arch %s" % (arch) - -if 'PKG_VERBOSE' in os.environ: - verbose = 1 -else: - verbose = 0 - -if 'PKG_DVD' in os.environ: - doing_dvd = 1 -else: - doing_dvd = 0 - -# List of packages for disc1. -def disc1_packages(): - pkgs = ['misc/freebsd-doc-bn', - 'misc/freebsd-doc-da', - 'misc/freebsd-doc-de', - 'misc/freebsd-doc-el', - 'misc/freebsd-doc-en', - 'misc/freebsd-doc-es', - 'misc/freebsd-doc-fr', - 'misc/freebsd-doc-hu', - 'misc/freebsd-doc-it', - 'misc/freebsd-doc-ja', - 'misc/freebsd-doc-mn', - 'misc/freebsd-doc-nl', - 'misc/freebsd-doc-pl', - 'misc/freebsd-doc-pt', - 'misc/freebsd-doc-ru', - 'misc/freebsd-doc-sr', - 'misc/freebsd-doc-tr', - 'misc/freebsd-doc-zh_cn', - 'misc/freebsd-doc-zh_tw'] - - if doing_dvd: - pkgs.extend(['archivers/unzip', - 'astro/xearth', - 'devel/gmake', - 'devel/imake', - 'editors/emacs', - 'editors/vim-lite', - 'emulators/linux_base-f10', - 'emulators/mtools', - 'graphics/png', - 'graphics/xv', - 'irc/xchat', - 'lang/perl5.8', - 'mail/alpine', - 'mail/exim', - 'mail/fetchmail', - 'mail/mutt', - 'mail/popd', - 'mail/postfix', - 'mail/xfmail', - 'net/cvsup-without-gui', - 'net/rsync', - 'net/samba3', - 'news/slrn', - 'news/tin', - 'ports-mgmt/p5-FreeBSD-Portindex', - 'ports-mgmt/portaudit', - 'ports-mgmt/portmaster', - 'ports-mgmt/portupgrade', - 'print/a2ps-letter', - 'print/apsfilter', - 'print/ghostscript7-nox11', - 'print/psutils-letter', - 'print/gv', - 'shells/bash', - 'shells/pdksh', - 'shells/zsh', - 'security/sudo', - 'sysutils/screen', - 'www/links', - 'www/lynx', - 'x11/gnome2', - 'x11/kde4', - 'x11/rxvt', - 'x11/xorg', - 'x11-wm/afterstep', - 'x11-wm/fvwm2', - 'x11-wm/windowmaker']) - return pkgs - -# The list of desired packages -def desired_packages(): - disc1 = disc1_packages() - return [disc1] - -# Suck the entire INDEX file into a two different dictionaries. The first -# dictionary maps port names (origins) to package names. The second -# dictionary maps a package name to a list of its dependent packages. -PACKAGE_COL=0 -ORIGIN_COL=1 -DEPENDS_COL=8 - -def load_index(index): - deps = {} - pkgs = {} - line_num = 1 - for line in index: - fields = line.split('|') - name = fields[PACKAGE_COL] - if name in deps: - sys.stderr.write('%d: Duplicate package %s\n' % (line_num, name)) - sys.exit(1) - origin = fields[ORIGIN_COL].replace('/usr/ports/', '', 1) - if origin in pkgs: - sys.stderr.write('%d: Duplicate port %s\n' % (line_num, origin)) - sys.exit(1) - deps[name] = fields[DEPENDS_COL].split() - pkgs[origin] = name - line_num = line_num + 1 - return (deps, pkgs) - -# Layout the packages on the various CD images. Here's how it works. We walk -# each disc in the list of discs. Within each disc we walk the list of ports. -# For each port, we add the package name to a dictionary with the value being -# the current disc number. We also add all of the dependent packages. If -# a package is already in the dictionary when we go to add it, we just leave -# the dictionary as it is. This means that each package ends up on the first -# disc that either lists it or contains it as a dependency. -def layout_discs(discs, pkgs, deps): - disc_num = 1 - layout = {} - for disc in discs: - for port in disc: - if port not in pkgs: - sys.stderr.write('Disc %d: Unable to find package for %s\n' % - (disc_num, port)) - continue - pkg = pkgs[port] - pkg_list = [pkg] + deps[pkg] - for pkg in pkg_list: - if pkg not in layout: - if verbose: - print "--> Adding %s to Disc %d" % (pkg, disc_num) - layout[pkg] = disc_num - disc_num = disc_num + 1 - return layout - -# Generate a master INDEX file based on the generated layout. The way this -# works is that for each INDEX line, we check to see if the package is in the -# layout. If it is, we put that INDEX line into the master INDEX and append -# a new field with the disc number to the line. -def generate_index(index, layout, master_index): - for line in index: - pkg = line.split('|')[PACKAGE_COL] - if pkg in layout: - new_line = '%s|%d\n' % (line.splitlines()[0], layout[pkg]) - master_index.write(new_line) - -# Verify the command line arguments -if len(sys.argv) != 3: - sys.stderr.write('Invalid number of arguments\n') - sys.stderr.write('Usage: package-split.py <source INDEX> <master INDEX>\n') - sys.exit(1) - -print "Loading %s..." % (sys.argv[1]) -index = file(sys.argv[1]) -(deps, pkgs) = load_index(index) -discs = desired_packages() -layout = layout_discs(discs, pkgs, deps) -index.seek(0) -print "Generating %s..." % (sys.argv[2]) -master_index = file(sys.argv[2], 'w') -generate_index(index, layout, master_index) -index.close() -master_index.close() diff --git a/release/scripts/package-trees.sh b/release/scripts/package-trees.sh deleted file mode 100644 index 9a81dac..0000000 --- a/release/scripts/package-trees.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh -# -# This script generates the disk layout for the CD images built by the FreeBSD -# release engineers as dictated by a specified master INDEX file. Each disc -# contains the master INDEX, it's assigned list of packages, and the -# appropriate tree of category symlinks. -# -# Usage: package-trees.sh <copy method> <INDEX> <package tree> <destination> -# -# $FreeBSD$ - -# Verify the command line -if [ $# -ne 4 ]; then - echo "Invalid number of arguments" - echo "Usage: package-trees.sh <copy method> <INDEX> <tree> <destination>" - exit 1 -fi - -COPY=$1 ; shift -INDEX=$1 ; shift -TREE=$1 ; shift -DESTDIR=$1 ; shift - -# First, determine the highest disc number. -high_disc=`cut -d '|' -f 14 ${INDEX} | sort -n | tail -1` -echo "Generating trees for ${high_disc} discs" - -# Second, initialize the trees for each disc -for disc in `jot $high_disc`; do - rm -rf ${DESTDIR}/disc${disc}/packages - mkdir -p ${DESTDIR}/disc${disc}/packages/All - cp ${INDEX} ${DESTDIR}/disc${disc}/packages/INDEX -done - -# Third, run through the INDEX copying each package to its appropriate CD and -# making the appropriate category symlinks -while read line; do - disc=`echo $line | cut -d '|' -f 14` - package=`echo $line | cut -d '|' -f 1` - categories=`echo $line | cut -d '|' -f 7` - discdir=${DESTDIR}/disc${disc} - if [ -n "$PKG_VERBOSE" ]; then - echo "--> Copying $package to Disc $disc" - fi - ${COPY} ${TREE}/All/${package}.tbz ${discdir}/packages/All - for cat in ${categories}; do - catdir=${discdir}/packages/${cat} - mkdir -p ${catdir} - ln -s ../All/${package}.tbz ${catdir} - done -done < ${INDEX} - -# Fourth, output du info for the relative size of the trees. -discs="" -for disc in `jot $high_disc`; do - discs="${discs} disc${disc}" -done -(cd ${DESTDIR}; du -sh ${discs}) diff --git a/release/scripts/ports-install.sh b/release/scripts/ports-install.sh deleted file mode 100755 index 0933e71..0000000 --- a/release/scripts/ports-install.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -echo "Extracting ports tarball into ${DESTDIR}/usr" -tar --unlink -xpzf ports.tgz -C ${DESTDIR}/usr -exit 0 diff --git a/release/scripts/proflibs-install.sh b/release/scripts/proflibs-install.sh deleted file mode 100755 index 8e35ae3..0000000 --- a/release/scripts/proflibs-install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -cat proflibs.?? | tar --unlink -xpzf - -C ${DESTDIR:-/} -exit 0 diff --git a/release/scripts/proflibs-make.sh b/release/scripts/proflibs-make.sh deleted file mode 100755 index 5ff447a..0000000 --- a/release/scripts/proflibs-make.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# Move the profiled libraries out to their own dist -for i in ${RD}/trees/base/usr/lib/*_p.a; do - mv $i ${RD}/trees/proflibs/usr/lib -done diff --git a/release/scripts/split-file.sh b/release/scripts/split-file.sh deleted file mode 100755 index 40b8eaa..0000000 --- a/release/scripts/split-file.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# Bail if things fail and be verbose about what we are doing -set -ex - -# Arguments are as follows: file destdir chunksize description -FILE=$1; shift -DEST=$1; shift -CHUNK_SIZE=$1; shift -DESCR=$1; shift - -# Make sure we can read the file. -[ -r ${FILE} ] - -# Create clean working area to stick file chunks and list in -rm -rf ${DEST} || true -mkdir -p ${DEST} - -# Split the file into pieces -prefix=`basename $FILE` -dd if=${FILE} bs=16k iseek=1 | split -b ${CHUNK_SIZE}k - ${DEST}/${prefix}. - -# Create a special file for the first 16k that gets stuck on the boot -# floppy -files=`ls ${DEST}/${prefix}.*` -first=`echo "${files}" | head -1` -bootchunk="${DEST}/${prefix}.boot" -dd if=${FILE} of=${bootchunk} bs=16k count=1 - -# Create the split index file -echo `basename ${bootchunk}` "\"Boot floppy\"" > ${DEST}/${prefix}.split -i=1 -for file in ${files}; do - echo `basename ${file}` "\"${DESCR} floppy ${i}\"" >> ${DEST}/${prefix}.split - i=$(($i + 1)) -done diff --git a/release/scripts/src-install.sh b/release/scripts/src-install.sh deleted file mode 100755 index 90583c2..0000000 --- a/release/scripts/src-install.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -if [ $# -lt 1 ]; then - echo "You must specify which components of src to extract" - echo "possible subcomponents are:" - echo - echo "base bin cddl contrib crypto etc games gnu include krb5" - echo "lib libexec release rescue sbin secure share sys tools ubin" - echo "usbin" - echo - echo "You may also specify all to extract all subcomponents." - exit 1 -fi - -if [ "$1" = "all" ]; then - dists="base bin cddl contrib crypto etc games gnu include krb5 lib libexec release rescue sbin secure share sys tools ubin usbin" -else - dists="$*" -fi - -echo "Extracting sources into ${DESTDIR}/usr/src..." -for i in $dists; do - echo " Extracting source component: $i" - cat s${i}.?? | tar --unlink -xpzf - -C ${DESTDIR}/usr/src -done -echo "Done extracting sources." -exit 0 diff --git a/release/scripts/tar.sh b/release/scripts/tar.sh deleted file mode 100644 index e0933f2..0000000 --- a/release/scripts/tar.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh -p -# -# Simple replacement for tar(1), using cpio(1). -# -# Copyright (c) 1996 Joerg Wunsch -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# $FreeBSD$ -# - -# -# For use on the fixit floppy. External programs required: -# cpio(1), find(1), test(1) -# - - -archive=${TAPE:-/dev/rsa0} -blocksize="20" -device="" -mode="none" -verbose="" - -usage() -{ - echo "usage: tar -{c|t|x} [-v] [-b blocksize] [-f archive] [files...]" 1>&2 - exit 64 # EX_USAGE -} - -# -# Prepend a hyphen to the first arg if necessary, so the traditional form -# ``tar xvf /dev/foobar'' will work, too. More kludgy legacy forms are not -# supported however. -# - -if [ $# -lt 1 ] ; then - usage -fi - -case "$1" in - -*) break - ;; - *) tmp="$1" - shift - set -- -$tmp "$@" - ;; -esac - -while getopts "ctxvb:f:" option -do - case $option in - [ctx]) - if [ $mode = "none" ] ; then - mode=$option - else - usage - fi - ;; - v) - verbose="-v" - ;; - b) - blocksize="${OPTARG}" - ;; - f) - archive="${OPTARG## }" - ;; - *) - usage - ;; - esac -done - -shift $(($OPTIND - 1)) - -if [ "X${archive}" != "X-" ] ; then - device="-F ${archive}" -# else: use stdin or stdout, which is the default for cpio -fi - -case $mode in - none) - usage - ;; - t) - exec cpio -it $verbose $device --block-size="$blocksize" "$@" - ;; - x) - exec cpio -idmu $verbose $device --block-size="$blocksize" "$@" - ;; - c) - if [ $# -eq 0 ] ; then - # use current dir -- slightly bogus - set -- "." - fi - find "$@" -print |\ - cpio -o -H ustar $verbose $device --block-size="$blocksize" - exit $? - ;; -esac diff --git a/release/scripts/xperimnt-install.sh b/release/scripts/xperimnt-install.sh deleted file mode 100755 index 3942658..0000000 --- a/release/scripts/xperimnt-install.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -if [ "`id -u`" != "0" ]; then - echo "Sorry, this must be done as root." - exit 1 -fi -echo "Extracting xperimnt tarball into ${DESTDIR}/usr/local" -tar --unlink -xpzf xperimnt.tgz -C ${DESTDIR}/usr/local -exit 0 diff --git a/release/sparc64/boot_crunch.conf b/release/sparc64/boot_crunch.conf deleted file mode 100644 index c392fe9..0000000 --- a/release/sparc64/boot_crunch.conf +++ /dev/null @@ -1,47 +0,0 @@ -# $FreeBSD$ - -buildopts -DRELEASE_CRUNCH -Dlint - -srcdirs /usr/src/bin -progs hostname -progs pwd -progs rm -progs sh -progs test -ln sh -sh -ln test [ - -srcdirs /usr/src/sbin -progs camcontrol -progs dhclient -progs fsck_ffs -progs geom -progs ifconfig -progs mount_nfs -progs newfs -progs route -progs rtsol -progs tunefs -ln fsck_ffs fsck_4.2bsd -ln fsck_ffs fsck_ufs -ln geom glabel -ln geom gpart - -srcdirs /usr/src/usr.bin -progs cpio -progs find -progs minigzip -progs sed -ln minigzip gzip -ln minigzip gunzip -ln minigzip zcat - -srcdirs /usr/src/usr.sbin -progs arp -progs ppp -progs sysinstall -progs usbconfig - -libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -lgeom -lbsdxml -libs -larchive -lcrypto -lbz2 -llzma -lusb -ljail diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile index fa1936c..2063ea6 100644 --- a/usr.sbin/Makefile +++ b/usr.sbin/Makefile @@ -290,8 +290,6 @@ SUBDIR+= praliases SUBDIR+= sendmail .endif -SUBDIR+= sysinstall - .if ${MK_TOOLCHAIN} != "no" SUBDIR+= config SUBDIR+= crunch diff --git a/usr.sbin/sysinstall/Makefile b/usr.sbin/sysinstall/Makefile deleted file mode 100644 index 9eb09e2..0000000 --- a/usr.sbin/sysinstall/Makefile +++ /dev/null @@ -1,126 +0,0 @@ -# $FreeBSD$ - -.if ${MACHINE_CPUARCH} != "ia64" -_wizard= wizard.c -.endif - -PROG= sysinstall -MAN= sysinstall.8 -SRCS= anonFTP.c cdrom.c command.c config.c devices.c dhcp.c \ - disks.c dispatch.c dist.c dmenu.c doc.c dos.c floppy.c \ - ftp.c globals.c http.c index.c install.c installUpgrade.c keymap.c \ - label.c main.c makedevs.c media.c menus.c misc.c modules.c \ - mouse.c msg.c network.c nfs.c options.c package.c \ - system.c tcpip.c termcap.c ttys.c ufs.c usb.c user.c \ - variable.c ${_wizard} keymap.h countries.h - -CFLAGS+= -DUSE_GZIP=1 -.if ${MACHINE} == "pc98" -CFLAGS+= -DPC98 -.endif -CFLAGS+= -I${.CURDIR}/../../gnu/lib/libodialog -I. - -WARNS?= 2 - -DPADD= ${LIBODIALOG} ${LIBNCURSES} ${LIBUTIL} ${LIBDISK} ${LIBFTPIO} -LDADD= -lodialog -lncurses -lutil -ldisk -lftpio - -CLEANFILES= makedevs.c rtermcap -CLEANFILES+= keymap.tmp keymap.h countries.tmp countries.h - -.if exists(${.CURDIR}/../../share/termcap/termcap.src) -RTERMCAP= TERMCAP=${.CURDIR}/../../share/termcap/termcap.src ./rtermcap -.else -RTERMCAP= ./rtermcap -.endif - -makedevs.c: Makefile rtermcap - echo '#include <sys/types.h>' > makedevs.c - ${RTERMCAP} ansi | \ - file2c 'const char termcap_ansi[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} cons25w | \ - file2c 'const char termcap_cons25w[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} cons25 | \ - file2c 'const char termcap_cons25[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} cons25-m | \ - file2c 'const char termcap_cons25_m[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} cons25r | \ - file2c 'const char termcap_cons25r[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} cons25r-m | \ - file2c 'const char termcap_cons25r_m[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} cons25l1 | \ - file2c 'const char termcap_cons25l1[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} cons25l1-m | \ - file2c 'const char termcap_cons25l1_m[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} vt100 | \ - file2c 'const char termcap_vt100[] = {' ',0};' \ - >> makedevs.c - ${RTERMCAP} xterm | \ - file2c 'const char termcap_xterm[] = {' ',0};' \ - >> makedevs.c - -build-tools: rtermcap - -rtermcap: rtermcap.c - ${CC} -o ${.TARGET} ${.ALLSRC} -ltermcap - -.if ${MACHINE} == "pc98" -KEYMAPS= jp.pc98 jp.pc98.iso -.else -KEYMAPS= be.iso bg.bds.ctrlcaps bg.phonetic.ctrlcaps br275.iso \ - ce.iso2 cs.latin2.qwertz danish.iso el.iso07 \ - estonian.cp850 estonian.iso estonian.iso15 finnish.iso fr.iso \ - german.iso gr.elot.acc gr.us101.acc hr.iso hu.iso2.101keys \ - it.iso icelandic.iso jp.106 latinamerican latinamerican.iso.acc \ - norwegian.iso pl_PL.ISO8859-2 \ - pt.iso ru.koi8-r si.iso sk.iso2 spanish.iso spanish.iso.acc swedish.iso \ - swissfrench.iso \ - swissgerman.iso ua.koi8-u ua.koi8-u.shift.alt uk.iso us.dvorak \ - us.iso us.pc-ctrl us.unix -.endif - -keymap.h: - rm -f keymap.tmp - for map in ${KEYMAPS} ; do \ - KEYMAP_PATH=${.CURDIR}/../../share/syscons/keymaps \ - kbdcontrol -L $$map | \ - sed -e '/^static accentmap_t/,$$d' >> keymap.tmp ; \ - done - echo "static struct keymapInfo keymapInfos[] = {" >> keymap.tmp - for map in ${KEYMAPS} ; do \ - echo -n ' { "'$$map'", ' >> keymap.tmp ; \ - echo "&keymap_$$map }," | tr '[-.]' '_' >> keymap.tmp ; \ - done - ( echo " { NULL, NULL }"; echo "};" ; echo "" ) >> keymap.tmp - mv keymap.tmp keymap.h - -countries.h: ${.CURDIR}/../../share/misc/iso3166 - rm -f countries.tmp - awk 'BEGIN { \ - FS = "\t"; \ - num = 1; \ - print "DMenu MenuCountry = {"; \ - print " DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS,"; \ - print " \"Country Selection\","; \ - print " \"Please choose a country, region, or group.\\n\""; \ - print " \"Select an item using [SPACE] or [ENTER].\","; \ - printf " NULL,\n NULL,\n { "; \ - } \ - /^[[:space:]]*#/ {next;} \ - {if (num > 1) {printf " ";} \ - print "{ \"" num "\", \"" $$4 "\"" \ - ", dmenuVarCheck, dmenuSetCountryVariable" \ - ", NULL, VAR_COUNTRY \"=" tolower($$1) "\" },"; \ - ++num;} \ - END {print " { NULL } }\n};\n";}' < ${.ALLSRC} > countries.tmp - mv countries.tmp ${.TARGET} - -.include <bsd.prog.mk> diff --git a/usr.sbin/sysinstall/anonFTP.c b/usr.sbin/sysinstall/anonFTP.c deleted file mode 100644 index 2eaf636..0000000 --- a/usr.sbin/sysinstall/anonFTP.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Coranth Gryphon. All rights reserved. - * Copyright (c) 1996 - * Jordan K. Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR THEIR PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/param.h> -#include <pwd.h> -#include <grp.h> - -/* This doesn't change until FTP itself changes */ - -#define FTP_NAME "ftp" -#define MOTD_FILE "ftpmotd" - -/* These change if we want to use different defaults */ - -#define FTP_UID 14 -#define FTP_GID 14 -#define FTP_GROUP "ftp" -#define FTP_UPLOAD "incoming" -#define FTP_COMMENT "Anonymous FTP Admin" -#define FTP_HOMEDIR "/var/ftp" - -#define ANONFTP_HELPFILE "anonftp" - -/* Set up the structure to hold configuration information */ -/* Note that this is only what we could fit onto the one screen */ - -typedef struct -{ - char homedir[64]; /* Home Dir for Anon FTP */ - char group[32]; /* Group */ - char uid[8]; /* UID */ - char comment[64]; /* PWD Comment */ - char upload[32]; /* Upload Dir */ -} FTPConf; - -static FTPConf tconf; - -#define ANONFTP_HOMEDIR_LEN 64 -#define ANONFTP_COMMENT_LEN 64 -#define ANONFTP_UPLOAD_LEN 32 -#define ANONFTP_GROUP_LEN 32 -#define ANONFTP_UID_LEN 8 - -static int okbutton, cancelbutton; - -/* What the screen size is meant to be */ -#define ANONFTP_DIALOG_Y 0 -#define ANONFTP_DIALOG_X 8 -#define ANONFTP_DIALOG_WIDTH COLS - 16 -#define ANONFTP_DIALOG_HEIGHT LINES - 2 - -static Layout layout[] = { -#define LAYOUT_UID 0 - { 2, 3, 8, ANONFTP_UID_LEN - 1, - "UID:", "What user ID to assign to FTP Admin", - tconf.uid, STRINGOBJ, NULL }, -#define LAYOUT_GROUP 1 - { 2, 15, 15, ANONFTP_GROUP_LEN - 1, - "Group:", "Group name that ftp process belongs to", - tconf.group, STRINGOBJ, NULL }, -#define LAYOUT_COMMENT 2 - { 2, 35, 24, ANONFTP_COMMENT_LEN - 1, - "Comment:", "Password file comment for FTP Admin", - tconf.comment, STRINGOBJ, NULL }, -#define LAYOUT_HOMEDIR 3 - { 9, 10, 43, ANONFTP_HOMEDIR_LEN - 1, - "FTP Root Directory:", - "The top directory to chroot to when doing anonymous ftp", - tconf.homedir, STRINGOBJ, NULL }, -#define LAYOUT_UPLOAD 4 - { 14, 20, 22, ANONFTP_UPLOAD_LEN - 1, - "Upload Subdirectory:", "Designated sub-directory that holds uploads (leave empty for none)", - tconf.upload, STRINGOBJ, NULL }, -#define LAYOUT_OKBUTTON 5 - { 19, 15, 0, 0, - "OK", "Select this if you are happy with these settings", - &okbutton, BUTTONOBJ, NULL }, -#define LAYOUT_CANCELBUTTON 6 - { 19, 35, 0, 0, - "CANCEL", "Select this if you wish to cancel this screen", - &cancelbutton, BUTTONOBJ, NULL }, - LAYOUT_END, -}; - -static int -createFtpUser(void) -{ - struct passwd *tpw; - struct group *tgrp; - char pwline[256]; - char *tptr; - int gid; - FILE *fptr; - - if ((gid = atoi(tconf.group)) <= 0) { - if (!(tgrp = getgrnam(tconf.group))) { - /* group does not exist, create it by name */ - - tptr = msgGetInput("14", "What group ID to use for group %s ?", tconf.group); - if (tptr && *tptr && ((gid = atoi(tptr)) > 0)) { - if ((fptr = fopen(_PATH_GROUP,"a"))) { - fprintf(fptr,"%s:*:%d:%s\n",tconf.group,gid,FTP_NAME); - fclose(fptr); - } - } - else - gid = FTP_GID; - } - else - gid = tgrp->gr_gid; - } - else if (!getgrgid(gid)) { - /* group does not exist, create it by number */ - - tptr = msgGetInput("ftp", "What group name to use for gid %d ?", gid); - if (tptr && *tptr) { - SAFE_STRCPY(tconf.group, tptr); - if ((tgrp = getgrnam(tconf.group))) { - gid = tgrp->gr_gid; - } - else if ((fptr = fopen(_PATH_GROUP,"a"))) { - fprintf(fptr,"%s:*:%d:%s\n",tconf.group,gid,FTP_NAME); - fclose(fptr); - } - } - } - - if ((tpw = getpwnam(FTP_NAME))) { - if (tpw->pw_uid != FTP_UID) - msgConfirm("FTP user already exists with a different uid."); - - return DITEM_SUCCESS; /* succeeds if already exists */ - } - - sprintf(pwline, "%s:*:%s:%d::0:0:%s:%s:/nonexistent\n", FTP_NAME, tconf.uid, gid, tconf.comment, tconf.homedir); - - fptr = fopen(_PATH_MASTERPASSWD,"a"); - if (! fptr) { - msgConfirm("Could not open master password file."); - return DITEM_FAILURE; - } - fprintf(fptr, "%s", pwline); - fclose(fptr); - msgNotify("Remaking password file: %s", _PATH_MASTERPASSWD); - vsystem("pwd_mkdb -p %s", _PATH_MASTERPASSWD); - return DITEM_SUCCESS | DITEM_RESTORE; -} - -/* This is it - how to get the setup values */ -static int -anonftpOpenDialog(void) -{ - WINDOW *ds_win; - ComposeObj *obj = NULL; - int n = 0, cancel = FALSE; - int max; - char title[80]; - WINDOW *w = savescr(); - - /* We need a curses window */ - if (!(ds_win = openLayoutDialog(ANONFTP_HELPFILE, " Anonymous FTP Configuration ", - ANONFTP_DIALOG_X, ANONFTP_DIALOG_Y, ANONFTP_DIALOG_WIDTH, ANONFTP_DIALOG_HEIGHT))) { - beep(); - msgConfirm("Cannot open anonymous ftp dialog window!!"); - restorescr(w); - return DITEM_FAILURE; - } - - /* Draw a sub-box for the path configuration */ - draw_box(ds_win, ANONFTP_DIALOG_Y + 7, ANONFTP_DIALOG_X + 8, - ANONFTP_DIALOG_HEIGHT - 11, ANONFTP_DIALOG_WIDTH - 17, - dialog_attr, border_attr); - wattrset(ds_win, dialog_attr); - sprintf(title, " Path Configuration "); - mvwaddstr(ds_win, ANONFTP_DIALOG_Y + 7, ANONFTP_DIALOG_X + 22, title); - - /** Initialize the config Data Structure **/ - bzero(&tconf, sizeof(tconf)); - - SAFE_STRCPY(tconf.group, FTP_GROUP); - SAFE_STRCPY(tconf.upload, FTP_UPLOAD); - SAFE_STRCPY(tconf.comment, FTP_COMMENT); - SAFE_STRCPY(tconf.homedir, FTP_HOMEDIR); - sprintf(tconf.uid, "%d", FTP_UID); - - /* Some more initialisation before we go into the main input loop */ - obj = initLayoutDialog(ds_win, layout, ANONFTP_DIALOG_X, ANONFTP_DIALOG_Y, &max); - - cancelbutton = okbutton = 0; - while (layoutDialogLoop(ds_win, layout, &obj, &n, max, &cancelbutton, &cancel)); - - /* Clear this crap off the screen */ - delwin(ds_win); - use_helpfile(NULL); - restorescr(w); - if (cancel) - return DITEM_FAILURE; - return DITEM_SUCCESS; -} - -int -configAnonFTP(dialogMenuItem *self __unused) -{ - int i; - - - if (msgYesNo("Anonymous FTP permits un-authenticated users to connect to the system\n" - "FTP server, if FTP service is enabled. Anonymous users are\n" - "restricted to a specific subset of the file system, and the default\n" - "configuration provides a drop-box incoming directory to which uploads\n" - "are permitted. You must separately enable both inetd(8), and enable\n" - "ftpd(8) in inetd.conf(5) for FTP services to be available. If you\n" - "did not do so earlier, you will have the opportunity to enable inetd(8)\n" - "again later.\n\n" - "If you want the server to be read-only you should leave the upload\n" - "directory option empty and add the -r command-line option to ftpd(8)\n" - "in inetd.conf(5)\n\n" - "Do you wish to continue configuring anonymous FTP?")) { - return DITEM_FAILURE; - } - - /* Be optimistic */ - i = DITEM_SUCCESS; - - i = anonftpOpenDialog(); - if (DITEM_STATUS(i) != DITEM_SUCCESS) { - msgConfirm("Configuration of Anonymous FTP cancelled per user request."); - return i; - } - - /*** Use defaults for any invalid values ***/ - if (atoi(tconf.uid) <= 0) - sprintf(tconf.uid, "%d", FTP_UID); - - if (!tconf.group[0]) - SAFE_STRCPY(tconf.group, FTP_GROUP); - - /*** If the user did not specify a directory, use default ***/ - - if (tconf.homedir[strlen(tconf.homedir) - 1] == '/') - tconf.homedir[strlen(tconf.homedir) - 1] = '\0'; - - if (!tconf.homedir[0]) - SAFE_STRCPY(tconf.homedir, FTP_HOMEDIR); - - /*** If HomeDir does not exist, create it ***/ - - if (!directory_exists(tconf.homedir)) - vsystem("mkdir -p %s", tconf.homedir); - - if (directory_exists(tconf.homedir)) { - msgNotify("Configuring %s for use by anon FTP.", tconf.homedir); - vsystem("chmod 555 %s && chown root:%s %s", tconf.homedir, tconf.group, tconf.homedir); - vsystem("mkdir %s/etc && chmod 555 %s/etc", tconf.homedir, tconf.homedir); - vsystem("mkdir -p %s/pub", tconf.homedir); - if (tconf.upload[0]) { - vsystem("mkdir -p %s/%s", tconf.homedir, tconf.upload); - vsystem("chmod 1777 %s/%s", tconf.homedir, tconf.upload); - } - - if (DITEM_STATUS(createFtpUser()) == DITEM_SUCCESS) { - msgNotify("Copying password information for anon FTP."); - vsystem("awk -F: '{if ((substr($1, 1, 1) != \"+\") && (substr($1, 1, 1) != \"-\") && ($3 < 10 || $1 == \"ftp\")) print $0}' /etc/master.passwd > %s/etc/master.passwd", tconf.homedir); - vsystem("/usr/sbin/pwd_mkdb -d %s/etc %s/etc/master.passwd && chmod 444 %s/etc/pwd.db", tconf.homedir, tconf.homedir, tconf.homedir); - vsystem("rm -f %s/etc/master.passwd %s/etc/spwd.db", tconf.homedir, tconf.homedir); - vsystem("awk -F: '!/^#/ {if ((substr($1, 1, 1) != \"+\") && (substr($1, 1, 1) != \"-\") && ($3 < 100)) printf \"%%s:*:%%s:\\n\", $1, $3}' /etc/group > %s/etc/group && chmod 444 %s/etc/group", tconf.homedir, tconf.homedir); - vsystem("chown -R root:%s %s/pub", tconf.group, tconf.homedir); - } - else { - msgConfirm("Unable to create FTP user! Anonymous FTP setup failed."); - i = DITEM_FAILURE; - } - - if (!msgYesNo("Create a welcome message file for anonymous FTP users?")) { - char cmd[256]; - vsystem("echo Your welcome message here. > %s/etc/%s", tconf.homedir, MOTD_FILE); - sprintf(cmd, "%s %s/etc/%s", variable_get(VAR_EDITOR), tconf.homedir, MOTD_FILE); - if (!systemExecute(cmd)) - i = DITEM_SUCCESS; - else - i = DITEM_FAILURE; - } - } - else { - msgConfirm("Invalid Directory: %s\n" - "Anonymous FTP will not be set up.", tconf.homedir); - i = DITEM_FAILURE; - } - if (DITEM_STATUS(i) == DITEM_SUCCESS) - variable_set2("anon_ftp", "YES", 0); - return i | DITEM_RESTORE; -} diff --git a/usr.sbin/sysinstall/cdrom.c b/usr.sbin/sysinstall/cdrom.c deleted file mode 100644 index 42ba1a0..0000000 --- a/usr.sbin/sysinstall/cdrom.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * Copyright (c) 1995 - * Gary J Palmer. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* These routines deal with getting things off of CDROM media */ - -#include "sysinstall.h" -#include <sys/stat.h> -#include <sys/errno.h> -#include <sys/param.h> -#include <sys/wait.h> -#include <sys/cdio.h> -#include <unistd.h> -#include <grp.h> -#include <fcntl.h> -#include <libutil.h> - -#define CD9660 -#include <sys/mount.h> -#include <isofs/cd9660/cd9660_mount.h> -#undef CD9660 - -static Boolean cdromMounted; -static Boolean previouslyMounted; /* Was the disc already mounted? */ -static char mountpoint[MAXPATHLEN] = "/dist"; -int CDROMInitQuiet; - -static void mediaEjectCDROM(Device *dev); - -static properties -read_props(char *name) -{ - int fd; - properties n; - - fd = open(name, O_RDONLY); - if (fd == -1) - return NULL; - n = properties_read(fd); - close(fd); - return n; -} - -Boolean -mediaInitCDROM(Device *dev) -{ - struct iso_args args; - properties cd_attr = NULL; - char *cp = NULL; - Boolean readInfo = TRUE; - static Boolean bogusCDOK = FALSE; - int err; - - if (cdromMounted) - return TRUE; - - Mkdir(mountpoint); - bzero(&args, sizeof(args)); - args.fspec = dev->devname; - args.flags = 0; - err = mount("cd9660", mountpoint, MNT_RDONLY, (caddr_t) &args); - /* If disc inserted too recently first access generates EIO, try again */ - if (err == -1 && errno == EIO) - err = mount("cd9660", mountpoint, MNT_RDONLY, (caddr_t) &args); - if (err == -1) { - if (errno == EINVAL) { - msgConfirm("The disc in your drive looks more like an Audio disc than a FreeBSD release."); - return FALSE; - } - if (errno == EBUSY) { - /* Perhaps the CDROM drive is already mounted as /cdrom */ - if (file_readable("/cdrom/cdrom.inf")) { - previouslyMounted = TRUE; - strlcpy(mountpoint, "/cdrom", 7); - errno = 0; - } - } - if (errno) { - if (!CDROMInitQuiet) - msgConfirm("Error mounting %s on %s: %s (%u)", dev->devname, - mountpoint, strerror(errno), errno); - return FALSE; - } - } - cdromMounted = TRUE; - - if (!file_readable(string_concat(mountpoint, "/cdrom.inf")) && !bogusCDOK) { - if (msgYesNo("Warning: The disc currently in the drive is either not a FreeBSD\n" - "disc or it is an older (pre 2.1.5) FreeBSD CD which does not\n" - "have a version number on it. Do you wish to use this disc anyway?") != 0) { - if (!previouslyMounted) - unmount(mountpoint, MNT_FORCE); - cdromMounted = FALSE; - return FALSE; - } - else { - readInfo = FALSE; - bogusCDOK = TRUE; - } - } - - if (readInfo) { - if (!(cd_attr = read_props(string_concat(mountpoint, "/cdrom.inf"))) - || !(cp = property_find(cd_attr, "CD_VERSION"))) { - msgConfirm("Unable to find a %s/cdrom.inf file.\n" - "Either this is not a FreeBSD disc, there is a problem with\n" - "the CDROM driver or something is wrong with your hardware.\n" - "Please fix this problem (check the console logs on VTY2) and\n" - "try again.", mountpoint); - } - else { - if (variable_cmp(VAR_RELNAME, cp) && - variable_cmp(VAR_RELNAME, "any") && - strcmp(cp, "any") && - !bogusCDOK) { - msgConfirm("Warning: The version of the FreeBSD disc currently in the drive\n" - "(%s) does not match the version of the boot floppy\n" - "(%s).\n\n" - "If this is intentional, to avoid this message in the future\n" - "please visit the Options editor to set the boot floppy version\n" - "string to match that of the disc before selecting it as your\n" - "installation media.", cp, variable_get(VAR_RELNAME)); - - if (msgYesNo("Would you like to try and use this disc anyway?") != 0) { - if (!previouslyMounted) - unmount(mountpoint, MNT_FORCE); - cdromMounted = FALSE; - properties_free(cd_attr); - return FALSE; - } - else - bogusCDOK = TRUE; - } - if ((cp = property_find(cd_attr, "CD_MACHINE_ARCH")) != NULL) { - if (strcmp(cp, "any") && -#if defined(PC98) - strcmp(cp, "pc98")) { -#elif defined(__sparc64__) - strcmp(cp, "sparc64")) { -#else - strcmp(cp, "x86")) { -#endif - msgConfirm("Fatal: The FreeBSD install CD/DVD currently in the drive\n" - "is for the %s architecture, not the machine you're using.\n\n" - - "Please use the correct installation CD/DVD for your machine type.", cp); - - if (!previouslyMounted) - unmount(mountpoint, MNT_FORCE); - cdromMounted = FALSE; - properties_free(cd_attr); - return FALSE; - } - } - if ((cp = property_find(cd_attr, "CD_VOLUME")) != NULL) { - dev->volume = atoi(cp); - /* XXX - Sanity check the volume here? */ - msgDebug("CD Volume %d initialized!\n", dev->volume); - } else { - dev->volume = 0; - } - } - } - if (cd_attr) - properties_free(cd_attr); - return TRUE; -} - -FILE * -mediaGetCDROM(Device *dev, char *file, Boolean probe) -{ - return mediaGenericGet(mountpoint, file); -} - -void -mediaShutdownCDROM(Device *dev) -{ - if (!cdromMounted) - return; - - if (previouslyMounted) { - cdromMounted = FALSE; - return; - } - - if (unmount(mountpoint, MNT_FORCE) != 0) - msgConfirm("Could not unmount the CDROM/DVD from %s: %s", mountpoint, strerror(errno)); - else - cdromMounted = FALSE; - - mediaEjectCDROM(dev); -} - -static void -mediaEjectCDROM(Device *dev) -{ - int fd = -1; - - msgDebug("Ejecting CDROM/DVD at %s", dev->devname); - - fd = open(dev->devname, O_RDONLY); - - if (fd < 0) - msgDebug("Could not eject the CDROM/DVD from %s: %s", dev->devname, strerror(errno)); - else { - ioctl(fd, CDIOCALLOW); - ioctl(fd, CDIOCEJECT); - close(fd); - } -} diff --git a/usr.sbin/sysinstall/command.c b/usr.sbin/sysinstall/command.c deleted file mode 100644 index 33ebc35..0000000 --- a/usr.sbin/sysinstall/command.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" - -#define MAX_NUM_COMMANDS 10 - -typedef struct { - char key[FILENAME_MAX]; - struct { - enum { CMD_SHELL, CMD_FUNCTION } type; - void *ptr, *data; - } cmds[MAX_NUM_COMMANDS]; - int ncmds; -} Command; - -#define MAX_CMDS 200 -static Command *commandStack[MAX_CMDS]; -int numCommands; - -/* Nuke the command stack */ -void -command_clear(void) -{ - int i, j; - - for (i = 0; i < numCommands; i++) - for (j = 0; j < commandStack[i]->ncmds; j++) - if (commandStack[i]->cmds[j].type == CMD_SHELL) - free(commandStack[i]->cmds[j].ptr); - free(commandStack[i]); - numCommands = 0; -} - -static void -addit(char *key, int type, void *cmd, void *data) -{ - int i; - - /* First, look for the key already present and add a command to it if found */ - for (i = 0; i < numCommands; i++) { - if (!strcmp(commandStack[i]->key, key)) { - if (commandStack[i]->ncmds == MAX_NUM_COMMANDS) - msgFatal("More than %d commands stacked up behind %s??", MAX_NUM_COMMANDS, key); - commandStack[i]->cmds[commandStack[i]->ncmds].type = type; - commandStack[i]->cmds[commandStack[i]->ncmds].ptr = cmd; - commandStack[i]->cmds[commandStack[i]->ncmds].data = data; - ++(commandStack[i]->ncmds); - return; - } - } - if (numCommands == MAX_CMDS) - msgFatal("More than %d commands accumulated??", MAX_CMDS); - - /* If we fell to here, it's a new key */ - commandStack[numCommands] = safe_malloc(sizeof(Command)); - strcpy(commandStack[numCommands]->key, key); - commandStack[numCommands]->ncmds = 1; - commandStack[numCommands]->cmds[0].type = type; - commandStack[numCommands]->cmds[0].ptr = cmd; - commandStack[numCommands]->cmds[0].data = data; - ++numCommands; -} - -/* Add a shell command under a given key */ -void -command_shell_add(char *key, char *fmt, ...) -{ - va_list args; - char *cmd; - - cmd = (char *)safe_malloc(256); - va_start(args, fmt); - vsnprintf(cmd, 256, fmt, args); - va_end(args); - - addit(key, CMD_SHELL, cmd, NULL); -} - -/* Add a shell command under a given key */ -void -command_func_add(char *key, commandFunc func, void *data) -{ - addit(key, CMD_FUNCTION, func, data); -} - -static int -sort_compare(Command *p1, Command *p2) -{ - if (!p1 && !p2) - return 0; - else if (!p1 && p2) /* NULL has a "greater" value for commands */ - return 1; - else if (p1 && !p2) - return -1; - else - return strcmp(p1->key, p2->key); -} - -void -command_sort(void) -{ - int i, j; - - commandStack[numCommands] = NULL; - /* Just do a crude bubble sort since the list is small */ - for (i = 0; i < numCommands; i++) { - for (j = 0; j < numCommands; j++) { - if (sort_compare(commandStack[j], commandStack[j + 1]) > 0) { - Command *tmp = commandStack[j]; - - commandStack[j] = commandStack[j + 1]; - commandStack[j + 1] = tmp; - } - } - } -} - -/* Run all accumulated commands in sorted order */ -void -command_execute(void) -{ - int i, j, ret; - commandFunc func; - - for (i = 0; i < numCommands; i++) { - for (j = 0; j < commandStack[i]->ncmds; j++) { - /* If it's a shell command, run system on it */ - if (commandStack[i]->cmds[j].type == CMD_SHELL) { - msgNotify("Doing %s", (char *)commandStack[i]->cmds[j].ptr); - ret = vsystem("%s", (char *)commandStack[i]->cmds[j].ptr); - if (isDebug()) - msgDebug("Command `%s' returns status %d\n", - (char *)commandStack[i]->cmds[j].ptr, ret); - } - else { - /* It's a function pointer - call it with the key and - the data */ - func = (commandFunc)commandStack[i]->cmds[j].ptr; - if (isDebug()) - msgDebug("%p: Execute(%s, %s)\n", - func, commandStack[i]->key, - (char *)commandStack[i]->cmds[j].data); - ret = (*func)(commandStack[i]->key, commandStack[i]->cmds[j].data); - if (isDebug()) - msgDebug("Function @ %p returns status %d\n", - commandStack[i]->cmds[j].ptr, ret); - } - } - } -} diff --git a/usr.sbin/sysinstall/config.c b/usr.sbin/sysinstall/config.c deleted file mode 100644 index de838fe..0000000 --- a/usr.sbin/sysinstall/config.c +++ /dev/null @@ -1,1074 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/disklabel.h> -#include <sys/wait.h> -#include <sys/errno.h> -#include <sys/ioctl.h> -#include <sys/fcntl.h> -#include <sys/param.h> -#include <sys/stat.h> -#include <unistd.h> -#include <sys/mount.h> -#include <libdisk.h> -#include <time.h> -#include <kenv.h> - -static Chunk *chunk_list[MAX_CHUNKS]; -static int nchunks; -static int rootdev_is_od; - -/* arg to sort */ -static int -chunk_compare(Chunk *c1, Chunk *c2) -{ - if (!c1 && !c2) - return 0; - else if (!c1 && c2) - return 1; - else if (c1 && !c2) - return -1; - else if (!c1->private_data && !c2->private_data) - return 0; - else if (c1->private_data && !c2->private_data) - return 1; - else if (!c1->private_data && c2->private_data) - return -1; - else - return strcmp(((PartInfo *)(c1->private_data))->mountpoint, ((PartInfo *)(c2->private_data))->mountpoint); -} - -static void -chunk_sort(void) -{ - int i, j; - - for (i = 0; i < nchunks; i++) { - for (j = 0; j < nchunks; j++) { - if (chunk_compare(chunk_list[j], chunk_list[j + 1]) > 0) { - Chunk *tmp = chunk_list[j]; - - chunk_list[j] = chunk_list[j + 1]; - chunk_list[j + 1] = tmp; - } - } - } -} - -static void -check_rootdev(Chunk **list, int n) -{ - int i; - Chunk *c; - - rootdev_is_od = 0; - for (i = 0; i < n; i++) { - c = *list++; - if (c->type == part && (c->flags & CHUNK_IS_ROOT) - && strncmp(c->disk->name, "od", 2) == 0) - rootdev_is_od = 1; - } -} - -static char * -name_of(Chunk *c1) -{ - return c1->name; -} - -static char * -mount_point(Chunk *c1) -{ - if (c1->type == part && c1->subtype == FS_SWAP) - return "none"; - else if (c1->type == part || c1->type == fat || c1->type == efi) - return ((PartInfo *)c1->private_data)->mountpoint; - return "/bogus"; -} - -static char * -fstype(Chunk *c1) -{ - if (c1->type == fat || c1->type == efi) - return "msdosfs"; - else if (c1->type == part) { - if (c1->subtype != FS_SWAP) - return "ufs"; - else - return "swap"; - } - return "bogus"; -} - -static char * -fstype_short(Chunk *c1) -{ - if (c1->type == part) { - if (c1->subtype != FS_SWAP) { - if (rootdev_is_od == 0 && strncmp(c1->name, "od", 2) == 0) - return "rw,noauto"; - else - return "rw"; - } - else - return "sw"; - } - else if (c1->type == fat) { - if (strncmp(c1->name, "od", 2) == 0) - return "ro,noauto"; - else - return "ro"; - } - else if (c1->type == efi) - return "rw"; - - return "bog"; -} - -static int -seq_num(Chunk *c1) -{ - if (c1->type == part && c1->subtype != FS_SWAP) { - if (rootdev_is_od == 0 && strncmp(c1->name, "od", 2) == 0) - return 0; - else if (c1->flags & CHUNK_IS_ROOT) - return 1; - else - return 2; - } - return 0; -} - -int -configFstab(dialogMenuItem *self) -{ - Device **devs; - Disk *disk; - FILE *fstab; - int i, cnt; - Chunk *c1, *c2; - - if (!RunningAsInit) { - if (file_readable("/etc/fstab")) - return DITEM_SUCCESS; - else { - msgConfirm("Attempting to rebuild your /etc/fstab file. Warning: If you had\n" - "any CD devices in use before running %s then they may NOT\n" - "be found by this run!", ProgName); - } - } - - devs = deviceFind(NULL, DEVICE_TYPE_DISK); - if (!devs) { - msgConfirm("No disks found!"); - return DITEM_FAILURE; - } - - /* Record all the chunks */ - nchunks = 0; - for (i = 0; devs[i]; i++) { - if (!devs[i]->enabled) - continue; - disk = (Disk *)devs[i]->private; - if (!disk->chunks) - msgFatal("No chunk list found for %s!", disk->name); - for (c1 = disk->chunks->part; c1; c1 = c1->next) { -#ifdef __powerpc__ - if (c1->type == apple) { -#else - if (c1->type == freebsd) { -#endif - for (c2 = c1->part; c2; c2 = c2->next) { - if (c2->type == part && (c2->subtype == FS_SWAP || c2->private_data)) - chunk_list[nchunks++] = c2; - } - } - else if (((c1->type == fat || c1->type == efi || c1->type == part) && - c1->private_data) || (c1->type == part && c1->subtype == FS_SWAP)) - chunk_list[nchunks++] = c1; - } - } - chunk_list[nchunks] = 0; - chunk_sort(); - - fstab = fopen("/etc/fstab", "w"); - if (!fstab) { - msgConfirm("Unable to create a new /etc/fstab file! Manual intervention\n" - "will be required."); - return DITEM_FAILURE; - } - - check_rootdev(chunk_list, nchunks); - - /* Go for the burn */ - msgDebug("Generating /etc/fstab file\n"); - fprintf(fstab, "# Device\t\tMountpoint\tFStype\tOptions\t\tDump\tPass#\n"); - for (i = 0; i < nchunks; i++) - fprintf(fstab, "/dev/%s\t\t%s\t\t%s\t%s\t\t%d\t%d\n", name_of(chunk_list[i]), mount_point(chunk_list[i]), - fstype(chunk_list[i]), fstype_short(chunk_list[i]), seq_num(chunk_list[i]), seq_num(chunk_list[i])); - - /* Now look for the CDROMs */ - devs = deviceFind(NULL, DEVICE_TYPE_CDROM); - cnt = deviceCount(devs); - - /* Write out the CDROM entries */ - for (i = 0; i < cnt; i++) { - char cdname[10]; - - sprintf(cdname, "/cdrom%s", i ? itoa(i) : ""); - if (Mkdir(cdname)) - msgConfirm("Unable to make mount point for: %s", cdname); - else - fprintf(fstab, "/dev/%s\t\t%s\t\tcd9660\tro,noauto\t0\t0\n", devs[i]->name, cdname); - } - - fclose(fstab); - if (isDebug()) - msgDebug("Wrote out /etc/fstab file\n"); - return DITEM_SUCCESS; -} - -/* Do the work of sucking in a config file. - * config is the filename to read in. - * lines is a fixed (max) sized array of char* - * returns number of lines read. line contents - * are malloc'd and must be freed by the caller. - */ -static int -readConfig(char *config, char **lines, int max) -{ - FILE *fp; - char line[256]; - int i, nlines; - - fp = fopen(config, "r"); - if (!fp) - return -1; - - nlines = 0; - /* Read in the entire file */ - for (i = 0; i < max; i++) { - if (!fgets(line, sizeof line, fp)) - break; - lines[nlines++] = strdup(line); - } - fclose(fp); - if (isDebug()) - msgDebug("readConfig: Read %d lines from %s.\n", nlines, config); - return nlines; -} - -#define MAX_LINES 2000 /* Some big number we're not likely to ever reach - I'm being really lazy here, I know */ - -static void -readConfigFile(char *config, int marked) -{ - char *lines[MAX_LINES], *cp, *cp2; - int i, nlines; - - nlines = readConfig(config, lines, MAX_LINES); - if (nlines == -1) - return; - - for (i = 0; i < nlines; i++) { - /* Skip the comments & non-variable settings */ - if (lines[i][0] == '#' || !(cp = index(lines[i], '='))) { - free(lines[i]); - continue; - } - *cp++ = '\0'; - /* Find quotes */ - if ((cp2 = index(cp, '"')) || (cp2 = index(cp, '\047'))) { - cp = cp2 + 1; - cp2 = index(cp, *cp2); - } - /* If valid quotes, use it */ - if (cp2) { - *cp2 = '\0'; - /* If we have a legit value, set it */ - if (strlen(cp)) - variable_set2(lines[i], cp, marked); - } - free(lines[i]); - } -} - -/* Load the environment from rc.conf file(s) */ -void -configEnvironmentRC_conf(void) -{ - static struct { - char *fname; - int marked; - } configs[] = { - { "/etc/defaults/rc.conf", 0 }, - { "/etc/rc.conf", 0 }, - { "/etc/rc.conf.local", 0 }, - { NULL, 0 }, - }; - int i; - - for (i = 0; configs[i].fname; i++) { - if (file_readable(configs[i].fname)) - readConfigFile(configs[i].fname, configs[i].marked); - } -} - -/* Load the environment from a resolv.conf file */ -void -configEnvironmentResolv(char *config) -{ - char *lines[MAX_LINES]; - int i, nlines; - - nlines = readConfig(config, lines, MAX_LINES); - if (nlines == -1) - return; - for (i = 0; i < nlines; i++) { - Boolean name_set = variable_get(VAR_NAMESERVER) ? 1 : 0; - - if (!strncmp(lines[i], "domain", 6) && !variable_get(VAR_DOMAINNAME)) - variable_set2(VAR_DOMAINNAME, string_skipwhite(string_prune(lines[i] + 6)), 0); - else if (!name_set && !strncmp(lines[i], "nameserver", 10)) { - /* Only take the first nameserver setting - we're lame */ - variable_set2(VAR_NAMESERVER, string_skipwhite(string_prune(lines[i] + 10)), 0); - } - free(lines[i]); - } -} - -/* Version of below for dispatch routines */ -int -configRC(dialogMenuItem *unused) -{ - configRC_conf(); - return DITEM_SUCCESS; -} - -/* - * Write out rc.conf - * - * rc.conf is sorted if running as init and the needed utilities are - * present - * - * If rc.conf is sorted, all variables in rc.conf which conflict with - * the variables in the environment are removed from the original - * rc.conf - */ -void -configRC_conf(void) -{ - char line[256]; - FILE *rcSite, *rcOld; - Variable *v; - int write_header; - time_t t_loc; - char *cp; - static int did_marker = 0; - int do_sort; - int do_merge; - time_t tp; - - configTtys(); - write_header = !file_readable("/etc/rc.conf"); - do_sort = RunningAsInit && file_readable("/usr/bin/sort") && - file_readable("/usr/bin/uniq"); - do_merge = do_sort && file_readable("/etc/rc.conf"); - - if(do_merge) { - rcSite = fopen("/etc/rc.conf.new", "w"); - } else - rcSite = fopen("/etc/rc.conf", "a"); - if (rcSite == NULL) { - msgError("Error opening new rc.conf for writing: %s (%u)", strerror(errno), errno); - return; - } - - if (do_merge) { - /* "Copy" the old rc.conf */ - rcOld = fopen("/etc/rc.conf", "r"); - if(!rcOld) { - msgError("Error opening rc.conf for reading: %s (%u)", strerror(errno), errno); - return; - } - while(fgets(line, sizeof(line), rcOld)) { - if(line[0] == '#' || variable_check2(line) != 0) - fprintf(rcSite, "%s", line); - else { - if (variable_get(VAR_KEEPRCCONF) != NULL) - fprintf(rcSite, "%s", line); - else - fprintf(rcSite, "#REMOVED: %s", line); - } - } - fclose(rcOld); - } else if (write_header) { - fprintf(rcSite, "# This file now contains just the overrides from /etc/defaults/rc.conf.\n"); - fprintf(rcSite, "# Please make all changes to this file, not to /etc/defaults/rc.conf.\n\n"); - fprintf(rcSite, "# Enable network daemons for user convenience.\n"); - if ((t_loc = time(NULL)) != -1 && (cp = ctime(&t_loc))) - fprintf(rcSite, "# Created: %s", cp); - } - - /* Now do variable substitutions */ - for (v = VarHead; v; v = v->next) { - if (v->dirty) { - if (!did_marker) { - time(&tp); - fprintf(rcSite, "# -- sysinstall generated deltas -- # " - "%s", ctime(&tp)); - did_marker = 1; - } - fprintf(rcSite, "%s=\"%s\"\n", v->name, v->value); - v->dirty = 0; - } - } - fclose(rcSite); - - if(do_merge) { - if(rename("/etc/rc.conf.new", "/etc/rc.conf") != 0) { - msgError("Error renaming temporary rc.conf: %s (%u)", strerror(errno), errno); - return; - } - } - - /* Tidy up the resulting file if it's late enough in the installation - for sort and uniq to be available */ - if (do_sort) { - (void)vsystem("sort /etc/rc.conf | uniq > /etc/rc.conf.new && mv /etc/rc.conf.new /etc/rc.conf"); - } -} - -int -configSaver(dialogMenuItem *self) -{ - variable_set((char *)self->data, 1); - if (!variable_get(VAR_BLANKTIME)) - variable_set2(VAR_BLANKTIME, "300", 1); - return DITEM_SUCCESS; -} - -int -configSaverTimeout(dialogMenuItem *self) -{ - return (variable_get_value(VAR_BLANKTIME, - "Enter time-out period in seconds for screen saver", 1) ? - DITEM_SUCCESS : DITEM_FAILURE); -} - -int -configNTP(dialogMenuItem *self) -{ - int status; - - status = variable_get_value(VAR_NTPDATE_HOSTS, - "Enter the name of an NTP server", 1) - ? DITEM_SUCCESS : DITEM_FAILURE; - if (status == DITEM_SUCCESS) { - static char tmp[255]; - - snprintf(tmp, sizeof(tmp), "ntpdate_enable=YES,ntpdate_hosts=%s", - variable_get(VAR_NTPDATE_HOSTS)); - self->data = tmp; - dmenuSetVariables(self); - } - return status; -} - -int -configCountry(dialogMenuItem *self) -{ - int choice, scroll, curr, max; - - WINDOW *w = savescr(); - - dialog_clear_norefresh(); - dmenuSetDefaultItem(&MenuCountry, NULL, NULL, - VAR_COUNTRY "=" DEFAULT_COUNTRY, &choice, &scroll, &curr, &max); - dmenuOpen(&MenuCountry, &choice, &scroll, &curr, &max, FALSE); - restorescr(w); - return DITEM_SUCCESS; -} - -int -configUsers(dialogMenuItem *self) -{ - WINDOW *w = savescr(); - - dialog_clear_norefresh(); - dmenuOpenSimple(&MenuUsermgmt, FALSE); - restorescr(w); - return DITEM_SUCCESS; -} - -int -configSecurelevel(dialogMenuItem *self) -{ - WINDOW *w = savescr(); - - dialog_clear_norefresh(); - dmenuOpenSimple(&MenuSecurelevel, FALSE); - restorescr(w); - return DITEM_SUCCESS; -} - -int -configSecurelevelDisabled(dialogMenuItem *self) -{ - - variable_set2("kern_securelevel_enable", "NO", 1); - return DITEM_SUCCESS; -} - -int -configSecurelevelSecure(dialogMenuItem *self) -{ - - variable_set2("kern_securelevel_enable", "YES", 1); - variable_set2("kern_securelevel", "1", 1); - return DITEM_SUCCESS; -} - -int -configSecurelevelHighlySecure(dialogMenuItem *self) -{ - - variable_set2("kern_securelevel_enable", "YES", 1); - variable_set2("kern_securelevel", "2", 1); - return DITEM_SUCCESS; -} - -int -configSecurelevelNetworkSecure(dialogMenuItem *self) -{ - - variable_set2("kern_securelevel_enable", "YES", 1); - variable_set2("kern_securelevel", "3", 1); - return DITEM_SUCCESS; -} - -int -configResolv(dialogMenuItem *ditem) -{ - FILE *fp; - char *cp, *c6p, *dp, *hp; - - cp = variable_get(VAR_NAMESERVER); - if (!cp || !*cp) - goto skip; - Mkdir("/etc"); - fp = fopen("/etc/resolv.conf", "w"); - if (!fp) - return DITEM_FAILURE; - if (variable_get(VAR_DOMAINNAME)) - fprintf(fp, "domain\t%s\n", variable_get(VAR_DOMAINNAME)); - fprintf(fp, "nameserver\t%s\n", cp); - fclose(fp); - if (isDebug()) - msgDebug("Wrote out /etc/resolv.conf\n"); - -skip: - dp = variable_get(VAR_DOMAINNAME); - cp = variable_get(VAR_IPADDR); - c6p = variable_get(VAR_IPV6ADDR); - hp = variable_get(VAR_HOSTNAME); - /* Tack ourselves into /etc/hosts */ - fp = fopen("/etc/hosts", "w"); - if (!fp) - return DITEM_FAILURE; - /* Add an entry for localhost */ - if (dp) { - fprintf(fp, "::1\t\t\tlocalhost localhost.%s\n", dp); - fprintf(fp, "127.0.0.1\t\tlocalhost localhost.%s\n", dp); - } else { - fprintf(fp, "::1\t\t\tlocalhost\n"); - fprintf(fp, "127.0.0.1\t\tlocalhost\n"); - } - /* Now the host entries, if applicable */ - if (((cp && cp[0] != '0') || (c6p && c6p[0] != '0')) && hp) { - char cp2[255]; - - if (!index(hp, '.')) - cp2[0] = '\0'; - else { - SAFE_STRCPY(cp2, hp); - *(index(cp2, '.')) = '\0'; - } - if (c6p && c6p[0] != '0') { - fprintf(fp, "%s\t%s %s\n", c6p, hp, cp2); - fprintf(fp, "%s\t%s.\n", c6p, hp); - } - if (cp && cp[0] != '0') { - fprintf(fp, "%s\t\t%s %s\n", cp, hp, cp2); - fprintf(fp, "%s\t\t%s.\n", cp, hp); - } - } - fclose(fp); - if (isDebug()) - msgDebug("Wrote out /etc/hosts\n"); - return DITEM_SUCCESS; -} - -int -configRouter(dialogMenuItem *self) -{ - int ret; - - ret = variable_get_value(VAR_ROUTER, - "Please specify the router you wish to use. Routed is\n" - "provided with the stock system and gated is provided\n" - "as an optional package which this installation system\n" - "will attempt to load if you select gated. Any other\n" - "choice of routing daemon will be assumed to be something\n" - "the user intends to install themselves before rebooting\n" - "the system. If you don't want any routing daemon, choose NO", 1) - ? DITEM_SUCCESS : DITEM_FAILURE; - - if (ret == DITEM_SUCCESS) { - char *cp = variable_get(VAR_ROUTER); - - if (cp && strcmp(cp, "NO")) { - variable_set2(VAR_ROUTER_ENABLE, "YES", 1); - if (!strcmp(cp, "gated")) { - if (package_add("gated") != DITEM_SUCCESS) { - msgConfirm("Unable to load gated package. Falling back to no router."); - variable_unset(VAR_ROUTER); - variable_unset(VAR_ROUTERFLAGS); - variable_set2(VAR_ROUTER_ENABLE, "NO", 1); - cp = NULL; - } - } - if (cp) { - /* Now get the flags, if they chose a router */ - ret = variable_get_value(VAR_ROUTERFLAGS, - "Please Specify the routing daemon flags; if you're running routed\n" - "then -q is the right choice for nodes and -s for gateway hosts.\n", 1) - ? DITEM_SUCCESS : DITEM_FAILURE; - if (ret != DITEM_SUCCESS) - variable_unset(VAR_ROUTERFLAGS); - } - } - else { - /* No router case */ - variable_set2(VAR_ROUTER_ENABLE, "NO", 1); - variable_unset(VAR_ROUTERFLAGS); - variable_unset(VAR_ROUTER); - } - } - else { - variable_set2(VAR_ROUTER_ENABLE, "NO", 1); - variable_unset(VAR_ROUTERFLAGS); - variable_unset(VAR_ROUTER); - } - return ret; -} - -/* Shared between us and index_initialize() */ -extern PkgNode Top, Plist; - -int -configPackages(dialogMenuItem *self) -{ - int i, restoreflag = 0; - PkgNodePtr tmp; - - /* Did we get an INDEX? */ - i = index_initialize("packages/INDEX"); - if (DITEM_STATUS(i) == DITEM_FAILURE) - return i; - - while (1) { - int ret, pos, scroll; - int current, low, high; - - /* Bring up the packages menu */ - pos = scroll = 0; - index_menu(&Top, &Top, &Plist, &pos, &scroll); - - if (Plist.kids && Plist.kids->name) { - /* Now show the packing list menu */ - pos = scroll = 0; - ret = index_menu(&Plist, &Plist, NULL, &pos, &scroll); - if (ret & DITEM_LEAVE_MENU) - break; - else if (DITEM_STATUS(ret) != DITEM_FAILURE) { - dialog_clear(); - restoreflag = 1; - if (have_volumes) { - low = low_volume; - high = high_volume; - } else - low = high = 0; - for (current = low; current <= high; current++) - for (tmp = Plist.kids; tmp && tmp->name; tmp = tmp->next) - (void)index_extract(mediaDevice, &Top, tmp, FALSE, current); - break; - } - } - else { - msgConfirm("No packages were selected for extraction."); - break; - } - } - tmp = Plist.kids; - while (tmp) { - PkgNodePtr tmp2 = tmp->next; - - safe_free(tmp); - tmp = tmp2; - } - index_init(NULL, &Plist); - return DITEM_SUCCESS | (restoreflag ? DITEM_RESTORE : 0); -} - -/* Load pcnfsd package */ -int -configPCNFSD(dialogMenuItem *self) -{ - int ret; - - ret = package_add("pcnfsd"); - if (DITEM_STATUS(ret) == DITEM_SUCCESS) { - variable_set2(VAR_PCNFSD, "YES", 0); - variable_set2("mountd_flags", "-n", 1); - } - return ret; -} - -int -configInetd(dialogMenuItem *self) -{ - char cmd[256]; - - WINDOW *w = savescr(); - - if (msgYesNo("The Internet Super Server (inetd) allows a number of simple Internet\n" - "services to be enabled, including finger, ftp, and telnetd. Enabling\n" - "these services may increase risk of security problems by increasing\n" - "the exposure of your system.\n\n" - "With this in mind, do you wish to enable inetd?\n")) { - variable_set2("inetd_enable", "NO", 1); - } else { - /* If inetd is enabled, we'll need an inetd.conf */ - variable_set2("inetd_enable", "YES", 1); - if (!msgYesNo("inetd(8) relies on its configuration file, /etc/inetd.conf, to determine\n" - "which of its Internet services will be available. The default FreeBSD\n" - "inetd.conf(5) leaves all services disabled by default, so they must be\n" - "specifically enabled in the configuration file before they will\n" - "function, even once inetd(8) is enabled. Note that services for\n" - "IPv6 must be separately enabled from IPv4 services.\n\n" - "Select [Yes] now to invoke an editor on /etc/inetd.conf, or [No] to\n" - "use the current settings.\n")) { - sprintf(cmd, "%s /etc/inetd.conf", variable_get(VAR_EDITOR)); - dialog_clear(); - systemExecute(cmd); - } - } - restorescr(w); - return DITEM_SUCCESS; -} - -int -configNFSServer(dialogMenuItem *self) -{ - char cmd[256]; - int retval = 0; - - /* If we're an NFS server, we need an exports file */ - if (!file_readable("/etc/exports")) { - WINDOW *w = savescr(); - - if (file_readable("/etc/exports.disabled")) - vsystem("mv /etc/exports.disabled /etc/exports"); - else { - dialog_clear_norefresh(); - msgConfirm("Operating as an NFS server means that you must first configure\n" - "an /etc/exports file to indicate which hosts are allowed certain\n" - "kinds of access to your local file systems.\n" - "Press [ENTER] now to invoke an editor on /etc/exports\n"); - vsystem("echo '#The following examples export /usr to 3 machines named after ducks,' > /etc/exports"); - vsystem("echo '#/usr/src and /usr/obj read-only to machines named after trouble makers,' >> /etc/exports"); - vsystem("echo '#/home and all directories under it to machines named after dead rock stars' >> /etc/exports"); - vsystem("echo '#and, /a to a network of privileged machines allowed to write on it as root.' >> /etc/exports"); - vsystem("echo '#/usr huey louie dewie' >> /etc/exports"); - vsystem("echo '#/usr/src /usr/obj -ro calvin hobbes' >> /etc/exports"); - vsystem("echo '#/home -alldirs janis jimi frank' >> /etc/exports"); - vsystem("echo '#/a -maproot=0 -network 10.0.1.0 -mask 255.255.248.0' >> /etc/exports"); - vsystem("echo '#' >> /etc/exports"); - vsystem("echo '# You should replace these lines with your actual exported filesystems.' >> /etc/exports"); - vsystem("echo \"# Note that BSD's export syntax is 'host-centric' vs. Sun's 'FS-centric' one.\" >> /etc/exports"); - vsystem("echo >> /etc/exports"); - sprintf(cmd, "%s /etc/exports", variable_get(VAR_EDITOR)); - dialog_clear(); - systemExecute(cmd); - } - variable_set2(VAR_NFS_SERVER, "YES", 1); - retval = configRpcBind(NULL); - restorescr(w); - } - else if (variable_get(VAR_NFS_SERVER)) { /* We want to turn it off again? */ - vsystem("mv -f /etc/exports /etc/exports.disabled"); - variable_unset(VAR_NFS_SERVER); - } - return DITEM_SUCCESS | retval; -} - -/* - * Extend the standard dmenuToggleVariable() method to also check and set - * the rpcbind variable if needed. - */ -int -configRpcBind(dialogMenuItem *self) -{ - char *tmp, *tmp2; - int retval = 0; - int doupdate = 1; - - if (self != NULL) { - retval = dmenuToggleVariable(self); - tmp = strdup(self->data); - if ((tmp2 = index(tmp, '=')) != NULL) - *tmp2 = '\0'; - if (strcmp(variable_get(tmp), "YES") != 0) - doupdate = 0; - free(tmp); - } - - if (doupdate && strcmp(variable_get(VAR_RPCBIND_ENABLE), "YES") != 0) { - variable_set2(VAR_RPCBIND_ENABLE, "YES", 1); - retval |= DITEM_REDRAW; - } - - return retval; -} - -int -configEtcTtys(dialogMenuItem *self) -{ - char cmd[256]; - - WINDOW *w = savescr(); - - /* Simply prompt for confirmation, then edit away. */ - if (msgYesNo("Configuration of system TTYs requires editing the /etc/ttys file.\n" - "Typical configuration activities might include enabling getty(8)\n" - "on the first serial port to allow login via serial console after\n" - "reboot, or to enable xdm. The default ttys file enables normal\n" - "virtual consoles, and most sites will not need to perform manual\n" - "configuration.\n\n" - "To load /etc/ttys in the editor, select [Yes], otherwise, [No].")) { - } else { - configTtys(); - sprintf(cmd, "%s /etc/ttys", variable_get(VAR_EDITOR)); - dialog_clear(); - systemExecute(cmd); - } - - restorescr(w); - return DITEM_SUCCESS; -} - -#ifdef __i386__ -int -checkLoaderACPI(void) -{ - char val[4]; - - if (kenv(KENV_GET, "loader.acpi_disabled_by_user", &val[0], 4) <= 0) { - return (0); - } - - if (strtol(&val[0], NULL, 10) <= 0) { - return (0); - } - - return (1); -} - -int -configLoaderACPI(int disable) -{ - FILE *ldconf; - - ldconf = fopen("/boot/loader.conf", "a"); - if (ldconf == NULL) { - msgConfirm("Unable to open /boot/loader.conf. Please consult the\n" - "FreeBSD Handbook for instructions on disabling ACPI"); - return DITEM_FAILURE; - } - - fprintf(ldconf, "# --- Generated by sysinstall ---\n"); - fprintf(ldconf, "hint.acpi.0.disabled=%d\n", disable); - fclose(ldconf); - - return DITEM_SUCCESS; -} -#endif - -int -configMTAPostfix(dialogMenuItem *self) -{ - int ret; - FILE *perconf; - - if(setenv("POSTFIX_DEFAULT_MTA", "YES", 1) != 0) - msgError("Error setting the enviroment variable POSTFIX_DEFAULT_MTA: %s (%u)", - strerror(errno), errno); - - ret = package_add("postfix-2.4"); - unsetenv("POSTFIX_DEFAULT_MTA"); - - if(DITEM_STATUS(ret) == DITEM_FAILURE) { - msgConfirm("An error occurred while adding the postfix package\n" - "Please change installation media and try again."); - return ret; - } - - variable_set2(VAR_SENDMAIL_ENABLE, "YES", 1); - variable_set2("sendmail_flags", "-bd", 1); - variable_set2("sendmail_outbound_enable", "NO", 1); - variable_set2("sendmail_submit_enable", "NO", 1); - variable_set2("sendmail_msp_queue_enable", "NO", 1); - - perconf = fopen("/etc/periodic.conf", "a"); - if (perconf == NULL) { - msgConfirm("Unable to open /etc/periodic.conf.\n" - "The daily cleanup scripts might generate errors when\n" - "trying to run some sendmail only cleanup scripts.\n" - "Please consult the documentation for the postfix port on how to\n" - "fix this."); - - /* Not really a serious problem, so we return success */ - return DITEM_SUCCESS; - } - - fprintf(perconf, "# --- Generated by sysinstall ---\n"); - fprintf(perconf, "daily_clean_hoststat_enable=\"NO\"\n"); - fprintf(perconf, "daily_status_mail_rejects_enable=\"NO\"\n"); - fprintf(perconf, "daily_status_include_submit_mailq=\"NO\"\n"); - fprintf(perconf, "daily_submit_queuerun=\"NO\"\n"); - fclose(perconf); - - msgConfirm("Postfix is now installed and enabled as the default MTA.\n" - "Please check that the configuration works as expected.\n" - "See the Postfix documentation for more information.\n" - "The documentation can be found in /usr/local/share/doc/postfix/\n" - "or on the Postfix website at http://www.postfix.org/."); - - return DITEM_SUCCESS; -} - -int -configMTAExim(dialogMenuItem *self) -{ - int ret; - FILE *perconf, *mailerconf, *newsyslogconf; - - ret = package_add("exim"); - - if(DITEM_STATUS(ret) == DITEM_FAILURE) { - msgConfirm("An error occurred while adding the exim package\n" - "Please change installation media and try again."); - return ret; - } - - variable_set2(VAR_SENDMAIL_ENABLE, "NONE", 1); - variable_set2("exim_enable", "YES", 1); - - /* Update periodic.conf */ - perconf = fopen("/etc/periodic.conf", "a"); - if (perconf == NULL) { - /* Not really a serious problem, so we do not abort */ - msgConfirm("Unable to open /etc/periodic.conf.\n" - "The daily cleanup scripts might generate errors when\n" - "trying to run some sendmail only cleanup scripts.\n" - "Please consult the documentation for the exim port on how to\n" - "fix this."); - } else { - fprintf(perconf, "# --- Generated by sysinstall ---\n"); - fprintf(perconf, "daily_clean_hoststat_enable=\"NO\"\n"); - fprintf(perconf, "daily_status_include_submit_mailq=\"NO\"\n"); - fprintf(perconf, "daily_status_mail_rejects_enable=\"NO\"\n"); - fprintf(perconf, "daily_submit_queuerun=\"NO\"\n"); - fclose(perconf); - } - - /* Update mailer.conf */ - vsystem("mv -f /etc/mail/mailer.conf /etc/mail/mailer.conf.old"); - mailerconf = fopen("/etc/mail/mailer.conf", "w"); - if (mailerconf == NULL) { - /* Not really a serious problem, so we do not abort */ - msgConfirm("Unable to open /etc/mailer.conf.\n" - "Some programs which use the sendmail wrappers may not work.\n" - "Please consult the documentation for the exim port on how\n" - "to correct this."); - } else { - fprintf(mailerconf, "# --- Generated by sysinstall ---\n"); - fprintf(mailerconf, "# Execute exim instead of sendmail\n"); - fprintf(mailerconf, "#\n"); - fprintf(mailerconf, "sendmail /usr/local/sbin/exim\n"); - fprintf(mailerconf, "send-mail /usr/local/sbin/exim\n"); - fprintf(mailerconf, "mailq /usr/local/sbin/exim\n"); - fprintf(mailerconf, "newaliases /usr/local/sbin/exim\n"); - fprintf(mailerconf, "hoststat /usr/bin/true\n"); - fprintf(mailerconf, "purgestat /usr/bin/true\n"); - fclose(mailerconf); - } - - /* Make newsyslog rotate exim logfiles */ - newsyslogconf = fopen("/etc/newsyslog.conf", "a"); - if (newsyslogconf == NULL) { - /* Not really a serious problem, so we do not abort */ - msgConfirm("Unable to open /etc/newsyslog.conf.\n" - "The exim logfiles will not be rotated.\n" - "Please consult the documentation for the exim port on how to\n" - "rotate the logfiles."); - } else { - fprintf(newsyslogconf, "# --- Generated by sysinstall ---\n"); - fprintf(newsyslogconf, "/var/log/exim/mainlog mailnull:mail 640 7 * @T00 ZN\n"); - fprintf(newsyslogconf, "/var/log/exim/rejectlog mailnull:mail 640 7 * @T00 ZN\n"); - fclose(newsyslogconf); - } - - msgConfirm("Exim is now installed and enabled as the default MTA.\n" - "Please check that the configuration works as expected.\n" - "See the Exim documentation for more information.\n" - "The documentation can be found in /usr/local/share/doc/exim/\n" - "or on the Exim website at http://www.exim.org/."); - - return DITEM_SUCCESS; -} diff --git a/usr.sbin/sysinstall/devices.c b/usr.sbin/sysinstall/devices.c deleted file mode 100644 index 18a33b5..0000000 --- a/usr.sbin/sysinstall/devices.c +++ /dev/null @@ -1,590 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/fcntl.h> -#include <sys/param.h> -#include <sys/socket.h> -#include <sys/ioctl.h> -#include <sys/errno.h> -#include <sys/time.h> -#include <net/if.h> -#include <net/if_var.h> -#include <net/if_dl.h> -#include <netinet/in.h> -#include <netinet/in_var.h> -#include <arpa/inet.h> -#include <ctype.h> -#include <libdisk.h> - -static Device *Devices[DEV_MAX]; -static int numDevs; - -#define DEVICE_ENTRY(type, name, descr, max) { type, name, descr, max } - -#define CDROM(name, descr, max) \ - DEVICE_ENTRY(DEVICE_TYPE_CDROM, name, descr, max) -#define DISK(name, descr, max) \ - DEVICE_ENTRY(DEVICE_TYPE_DISK, name, descr, max) -#define FLOPPY(name, descr, max) \ - DEVICE_ENTRY(DEVICE_TYPE_FLOPPY, name, descr, max) -#define NETWORK(name, descr) \ - DEVICE_ENTRY(DEVICE_TYPE_NETWORK, name, descr, 0) -#define SERIAL(name, descr, max) \ - DEVICE_ENTRY(DEVICE_TYPE_NETWORK, name, descr, max) -#define USB(name, descr, max) \ - DEVICE_ENTRY(DEVICE_TYPE_USB, name, descr, max) - -static struct _devname { - DeviceType type; - char *name; - char *description; - int max; -} device_names[] = { - CDROM("cd%d", "SCSI CDROM drive", 4), - CDROM("mcd%d", "Mitsumi (old model) CDROM drive", 4), - CDROM("scd%d", "Sony CDROM drive - CDU31/33A type", 4), - CDROM("acd%d", "ATAPI/IDE CDROM", 4), - DISK("da%d", "SCSI disk device", 16), - DISK("ad%d", "ATA/IDE disk device", 16), - DISK("ada%d", "SATA disk device", 16), - DISK("ar%d", "ATA/IDE RAID device", 16), - DISK("afd%d", "ATAPI/IDE floppy device", 4), - DISK("mlxd%d", "Mylex RAID disk", 4), - DISK("amrd%d", "AMI MegaRAID drive", 4), - DISK("idad%d", "Compaq RAID array", 4), - DISK("twed%d", "3ware ATA RAID array", 4), - DISK("aacd%d", "Adaptec FSA RAID array", 4), - DISK("ipsd%d", "IBM ServeRAID RAID array", 4), - DISK("mfid%d", "LSI MegaRAID SAS array", 4), - FLOPPY("fd%d", "floppy drive unit A", 4), - SERIAL("cuau%d", "%s on device %s (COM%d)", 16), - USB("da%da", "USB Mass Storage Device", 16), - NETWORK("ae", "Attansic/Atheros L2 Fast Ethernet"), - NETWORK("age", "Attansic/Atheros L1 Gigabit Ethernet"), - NETWORK("alc", "Atheros AR8131/AR8132 PCIe Ethernet"), - NETWORK("ale", "Atheros AR8121/AR8113/AR8114 PCIe Ethernet"), - NETWORK("an", "Aironet 4500/4800 802.11 wireless adapter"), - NETWORK("ath", "Atheros IEEE 802.11 wireless adapter"), - NETWORK("aue", "ADMtek USB Ethernet adapter"), - NETWORK("axe", "ASIX Electronics USB Ethernet adapter"), - NETWORK("bce", "Broadcom NetXtreme II Gigabit Ethernet card"), - NETWORK("bfe", "Broadcom BCM440x PCI Ethernet card"), - NETWORK("bge", "Broadcom BCM570x PCI Gigabit Ethernet card"), - NETWORK("bm", "Apple BMAC Built-in Ethernet"), - NETWORK("bwn", "Broadcom BCM43xx IEEE 802.11 wireless adapter"), - NETWORK("bxe", "Broadcom NetXtreme II 10Gb Ethernet card"), - NETWORK("cas", "Sun Cassini/Cassini+ or NS DP83065 Saturn Ethernet"), - NETWORK("cue", "CATC USB Ethernet adapter"), - NETWORK("cxgb", "Chelsio T3 10Gb Ethernet card"), - NETWORK("cxgbe", "Chelsio T4 10Gb Ethernet card"), - NETWORK("fpa", "DEC DEFPA PCI FDDI card"), - NETWORK("sr", "SDL T1/E1 sync serial PCI card"), - NETWORK("cc3i", "SDL HSSI sync serial PCI card"), - NETWORK("en", "Efficient Networks ATM PCI card"), - NETWORK("dc", "DEC/Intel 21143 (and clones) PCI Fast Ethernet card"), - NETWORK("de", "DEC DE435 PCI NIC or other DC21040-AA based card"), - NETWORK("fxp", "Intel EtherExpress Pro/100B PCI Fast Ethernet card"), - NETWORK("ed", "Novell NE1000/2000; 3C503; NE2000-compatible PCMCIA"), - NETWORK("ep", "3Com 3C509 Ethernet card/3C589 PCMCIA"), - NETWORK("em", "Intel(R) PRO/1000 Ethernet card"), - NETWORK("et", "Agere ET1310 based PCI Express Gigabit Ethernet card"), - NETWORK("ex", "Intel EtherExpress Pro/10 Ethernet card"), - NETWORK("fe", "Fujitsu MB86960A/MB86965A Ethernet card"), - NETWORK("gem", "Apple GMAC or Sun ERI/GEM Ethernet adapter"), - NETWORK("hme", "Sun HME (Happy Meal Ethernet) Ethernet adapter"), - NETWORK("ie", "AT&T StarLAN 10 and EN100; 3Com 3C507; NI5210"), - NETWORK("igb", "Intel(R) PRO/1000 PCI Express Gigabit Ethernet card"), - NETWORK("ipw", "Intel PRO/Wireless 2100 IEEE 802.11 adapter"), - NETWORK("iwi", "Intel PRO/Wireless 2200BG/2225BG/2915ABG adapter"), - NETWORK("iwn", "Intel Wireless WiFi Link 4965AGN IEEE 802.11n adapter"), - NETWORK("ixgb", "Intel(R) PRO/10Gb Ethernet card"), - NETWORK("ixgbe", "Intel(R) PRO/10Gb Ethernet card"), - NETWORK("jme", "JMicron JMC250 Gigabit/JMC260 Fast Ethernet"), - NETWORK("kue", "Kawasaki LSI USB Ethernet adapter"), - NETWORK("le", "AMD Am7900 LANCE or Am79C9xx PCnet Ethernet adapter"), - NETWORK("lge", "Level 1 LXT1001 Gigabit Ethernet card"), - NETWORK("malo", "Marvell Libertas 88W8335 802.11 wireless adapter"), - NETWORK("msk", "Marvell/SysKonnect Yukon II Gigabit Ethernet"), - NETWORK("mxge", "Myricom Myri10GE 10Gb Ethernet card"), - NETWORK("nfe", "NVIDIA nForce MCP Ethernet"), - NETWORK("nge", "NatSemi PCI Gigabit Ethernet card"), - NETWORK("nve", "NVIDIA nForce MCP Ethernet"), - NETWORK("nxge", "Neterion Xframe 10GbE Server/Storage adapter"), - NETWORK("pcn", "AMD Am79c79x PCI Ethernet card"), - NETWORK("ral", "Ralink Technology IEEE 802.11 wireless adapter"), - NETWORK("ray", "Raytheon Raylink 802.11 wireless adapter"), - NETWORK("re", "RealTek 8139C+/8169/8169S/8110S PCI Ethernet card"), - NETWORK("rl", "RealTek 8129/8139 PCI Ethernet card"), - NETWORK("rue", "RealTek USB Ethernet card"), - NETWORK("rum", "Ralink Technology USB IEEE 802.11 wireless adapter"), - NETWORK("sf", "Adaptec AIC-6915 PCI Ethernet card"), - NETWORK("sge", "Silicon Integrated Systems SiS190/191 Ethernet"), - NETWORK("sis", "SiS 900/SiS 7016 PCI Ethernet card"), -#ifdef PC98 - NETWORK("snc", "SONIC Ethernet card"), -#endif - NETWORK("sn", "SMC/Megahertz Ethernet card"), - NETWORK("ste", "Sundance ST201 PCI Ethernet card"), - NETWORK("stge", "Sundance/Tamarack TC9021 Gigabit Ethernet"), - NETWORK("sk", "SysKonnect PCI Gigabit Ethernet card"), - NETWORK("tx", "SMC 9432TX Ethernet card"), - NETWORK("txp", "3Com 3cR990 Ethernet card"), - NETWORK("ti", "Alteon Networks PCI Gigabit Ethernet card"), - NETWORK("tl", "Texas Instruments ThunderLAN PCI Ethernet card"), - NETWORK("uath", "Atheros AR5005UG and AR5005UX USB wireless adapter"), - NETWORK("upgt", "Conexant/Intersil PrismGT USB wireless adapter"), - NETWORK("ural", "Ralink Technology RT2500USB 802.11 wireless adapter"), - NETWORK("urtw", "Realtek 8187L USB wireless adapter"), - NETWORK("vge", "VIA VT612x PCI Gigabit Ethernet card"), - NETWORK("vr", "VIA VT3043/VT86C100A Rhine PCI Ethernet card"), - NETWORK("vte", "DM&P Vortex86 RDC R6040 Fast Ethernet"), - NETWORK("vlan", "IEEE 802.1Q VLAN network interface"), - NETWORK("vx", "3COM 3c590 / 3c595 Ethernet card"), - NETWORK("wb", "Winbond W89C840F PCI Ethernet card"), - NETWORK("wi", "Lucent WaveLAN/IEEE 802.11 wireless adapter"), - NETWORK("wpi", "Intel 3945ABG IEEE 802.11 wireless adapter"), - NETWORK("xe", "Xircom/Intel EtherExpress Pro100/16 Ethernet card"), - NETWORK("xl", "3COM 3c90x / 3c90xB PCI Ethernet card"), - NETWORK("zyd", "ZyDAS ZD1211/ZD1211B USB 802.11 wireless adapter"), - NETWORK("fwe", "FireWire Ethernet emulation"), - NETWORK("fwip", "IP over FireWire"), - NETWORK("plip", "Parallel Port IP (PLIP) peer connection"), - NETWORK("lo", "Loop-back (local) network interface"), - NETWORK("disc", "Software discard network interface"), - { 0, NULL, NULL, 0 } -}; - -Device * -new_device(char *name) -{ - Device *dev; - - dev = safe_malloc(sizeof(Device)); - bzero(dev, sizeof(Device)); - if (name) - SAFE_STRCPY(dev->name, name); - return dev; -} - -/* Stubs for unimplemented strategy routines */ -Boolean -dummyInit(Device *dev) -{ - return TRUE; -} - -FILE * -dummyGet(Device *dev, char *dist, Boolean probe) -{ - return NULL; -} - -void -dummyShutdown(Device *dev) -{ - return; -} - -static int -deviceTry(struct _devname dev, char *try, int i) -{ - int fd; - char unit[80]; - - snprintf(unit, sizeof unit, dev.name, i); - snprintf(try, FILENAME_MAX, "/dev/%s", unit); - if (isDebug()) - msgDebug("deviceTry: attempting to open %s\n", try); - fd = open(try, O_RDONLY); - if (fd >= 0) { - if (isDebug()) - msgDebug("deviceTry: open of %s succeeded on first try.\n", try); - } else { - if (isDebug()) - msgDebug("deviceTry: open of %s failed.\n", try); - } - return fd; -} - -/* Register a new device in the devices array */ -Device * -deviceRegister(char *name, char *desc, char *devname, DeviceType type, Boolean enabled, - Boolean (*init)(Device *), FILE * (*get)(Device *, char *, Boolean), - void (*shutdown)(Device *), void *private) -{ - Device *newdev = NULL; - - if (numDevs == DEV_MAX) - msgFatal("Too many devices found!"); - else { - newdev = new_device(name); - newdev->description = desc; - newdev->devname = devname; - newdev->type = type; - newdev->enabled = enabled; - newdev->init = init ? init : dummyInit; - newdev->get = get ? get : dummyGet; - newdev->shutdown = shutdown ? shutdown : dummyShutdown; - newdev->private = private; - Devices[numDevs] = newdev; - Devices[++numDevs] = NULL; - } - return newdev; -} - -/* Reset the registered device chain */ -void -deviceReset(void) -{ - int i; - - for (i = 0; i < numDevs; i++) { - DEVICE_SHUTDOWN(Devices[i]); - - /* XXX this potentially leaks Devices[i]->private if it's being - * used to point to something dynamic, but you're not supposed - * to call this routine at such times that some open instance - * has its private ptr pointing somewhere anyway. XXX - */ - free(Devices[i]); - } - Devices[numDevs = 0] = NULL; -} - -/* Get all device information for devices we have attached */ -void -deviceGetAll(void) -{ - int i, j, fd, s; - struct ifconf ifc; - struct ifreq *ifptr, *end; - int ifflags; - char buffer[INTERFACE_MAX * sizeof(struct ifreq)]; - char **names; - - msgNotify("Probing devices, please wait (this can take a while)..."); - /* First go for the network interfaces. Stolen shamelessly from ifconfig! */ - memset(&ifc, 0, sizeof(ifc)); - memset(buffer, 0, INTERFACE_MAX * sizeof(struct ifreq)); - ifc.ifc_len = sizeof(buffer); - ifc.ifc_buf = buffer; - - s = socket(AF_INET, SOCK_DGRAM, 0); - if (s < 0) - goto skipif; /* Jump over network iface probing */ - - if (ioctl(s, SIOCGIFCONF, (char *) &ifc) < 0) - goto skipif; /* Jump over network iface probing */ - - close(s); - ifflags = ifc.ifc_req->ifr_flags; - end = (struct ifreq *) (ifc.ifc_buf + ifc.ifc_len); - for (ifptr = ifc.ifc_req; ifptr < end; ifptr++) { - char *descr; - - /* If it's not a link entry, forget it */ - if (ifptr->ifr_ifru.ifru_addr.sa_family != AF_LINK) - goto loopend; - - /* Eliminate network devices that don't make sense */ - if (!strncmp(ifptr->ifr_name, "lo", 2)) - goto loopend; - - /* Try and find its description */ - for (i = 0, descr = NULL; device_names[i].name; i++) { - int len = strlen(device_names[i].name); - - if (!ifptr->ifr_name || !ifptr->ifr_name[0]) - continue; - else if (!strncmp(ifptr->ifr_name, device_names[i].name, len)) { - descr = device_names[i].description; - break; - } - } - if (!descr) - descr = "<unknown network interface type>"; - - deviceRegister(ifptr->ifr_name, descr, strdup(ifptr->ifr_name), DEVICE_TYPE_NETWORK, TRUE, - mediaInitNetwork, NULL, mediaShutdownNetwork, NULL); - if (isDebug()) - msgDebug("Found a network device named %s\n", ifptr->ifr_name); - close(s); - if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) - continue; - -loopend: - if (ifptr->ifr_addr.sa_len) /* I'm not sure why this is here - it's inherited */ - ifptr = (struct ifreq *)((caddr_t)ifptr + ifptr->ifr_addr.sa_len - sizeof(struct sockaddr)); - close(s); - } - -skipif: - /* Next, try to find all the types of devices one might need - * during the second stage of the installation. - */ - for (i = 0; device_names[i].name; i++) { - for (j = 0; j < device_names[i].max; j++) { - char try[FILENAME_MAX]; - - switch(device_names[i].type) { - case DEVICE_TYPE_CDROM: - fd = deviceTry(device_names[i], try, j); - if (fd >= 0 || errno == EBUSY) { /* EBUSY if already mounted */ - char n[BUFSIZ]; - - if (fd >= 0) close(fd); - snprintf(n, sizeof n, device_names[i].name, j); - deviceRegister(n, device_names[i].description, strdup(try), - DEVICE_TYPE_CDROM, TRUE, mediaInitCDROM, mediaGetCDROM, - mediaShutdownCDROM, NULL); - if (isDebug()) - msgDebug("Found a CDROM device for %s\n", try); - } - break; - - case DEVICE_TYPE_DISK: - /* nothing to do */ - break; - - case DEVICE_TYPE_FLOPPY: - fd = deviceTry(device_names[i], try, j); - if (fd >= 0) { - char n[BUFSIZ]; - - close(fd); - snprintf(n, sizeof n, device_names[i].name, j); - deviceRegister(n, device_names[i].description, strdup(try), - DEVICE_TYPE_FLOPPY, TRUE, mediaInitFloppy, mediaGetFloppy, - mediaShutdownFloppy, NULL); - if (isDebug()) - msgDebug("Found a floppy device for %s\n", try); - } - break; - - case DEVICE_TYPE_USB: - fd = deviceTry(device_names[i], try, j); - if (fd >= 0) { - char n[BUFSIZ]; - - close(fd); - snprintf(n, sizeof(n), device_names[i].name, j); - deviceRegister(n, device_names[i].description, - strdup(try), DEVICE_TYPE_USB, TRUE, mediaInitUSB, - mediaGetUSB, mediaShutdownUSB, NULL); - - if (isDebug()) - msgDebug("Found a USB disk for %s\n", try); - } - break; - - default: - break; - } - } - } - - /* Finally, go get the disks and look for partitions to register */ - if ((names = Disk_Names()) != NULL) { - int i; - - for (i = 0; names[i]; i++) { - Chunk *c1; - Disk *d; - - /* Ignore memory disks */ - if (!strncmp(names[i], "md", 2)) - continue; - - /* - * XXX - * Due to unknown reasons, Disk_Names() returns SCSI CDROM as a - * valid disk. This is main reason why sysinstall presents SCSI - * CDROM to available disks in Fdisk/Label menu. In addition, - * adding a blank SCSI CDROM to the menu generates floating point - * exception in sparc64. Disk_Names() just extracts sysctl - * "kern.disks". Why GEOM treats SCSI CDROM as a disk is beyond - * me and that should be investigated. - * For temporary workaround, ignore SCSI CDROM device. - */ - if (!strncmp(names[i], "cd", 2)) - continue; - - d = Open_Disk(names[i]); - if (!d) { - msgDebug("Unable to open disk %s\n", names[i]); - continue; - } - - deviceRegister(names[i], names[i], d->name, DEVICE_TYPE_DISK, FALSE, - dummyInit, dummyGet, dummyShutdown, d); - if (isDebug()) - msgDebug("Found a disk device named %s\n", names[i]); - - /* Look for existing DOS partitions to register as "DOS media devices" - * XXX: libdisks handling of extended partitions is too - * simplistic - it does not handle them containing (for - * example) UFS partitions - */ - for (c1 = d->chunks->part; c1; c1 = c1->next) { - if (c1->type == fat || c1->type == efi || c1->type == extended) { - Device *dev; - char devname[80]; - - /* Got one! */ - snprintf(devname, sizeof devname, "/dev/%s", c1->name); - dev = deviceRegister(c1->name, c1->name, strdup(devname), DEVICE_TYPE_DOS, TRUE, - mediaInitDOS, mediaGetDOS, mediaShutdownDOS, NULL); - dev->private = c1; - if (isDebug()) - msgDebug("Found a DOS partition %s\n", c1->name); - } else if (c1->type == freebsd) { - Device *dev; - char devname[80]; - Chunk *c2; - - for (c2 = c1->part; c2; c2 = c2->next) { - if (c2->type != part || c2->subtype != 7) - continue; - /* Got one! */ - snprintf(devname, sizeof devname, "/dev/%s", c1->name); - dev = deviceRegister(c2->name, c2->name, strdup(devname), DEVICE_TYPE_UFS, TRUE, - mediaInitUFS, mediaGetUFS, mediaShutdownUFS, NULL); - dev->private = c2; - if (isDebug()) - msgDebug("Found a UFS sub-partition %s\n", c2->name); - } - } - - } - } - free(names); - } - dialog_clear_norefresh(); -} - -/* Rescan all devices, after closing previous set - convenience function */ -void -deviceRescan(void) -{ - deviceReset(); - deviceGetAll(); -} - -/* - * Find all devices that match the criteria, allowing "wildcarding" as well - * by allowing NULL or ANY values to match all. The array returned is static - * and may be used until the next invocation of deviceFind(). - */ -Device ** -deviceFind(char *name, DeviceType class) -{ - static Device *found[DEV_MAX]; - int i, j; - - j = 0; - for (i = 0; i < numDevs; i++) { - if ((!name || !strcmp(Devices[i]->name, name)) - && (class == DEVICE_TYPE_ANY || class == Devices[i]->type)) - found[j++] = Devices[i]; - } - found[j] = NULL; - return j ? found : NULL; -} - -Device ** -deviceFindDescr(char *name, char *desc, DeviceType class) -{ - static Device *found[DEV_MAX]; - int i, j; - - j = 0; - for (i = 0; i < numDevs; i++) { - if ((!name || !strcmp(Devices[i]->name, name)) && - (!desc || !strcmp(Devices[i]->description, desc)) && - (class == DEVICE_TYPE_ANY || class == Devices[i]->type)) - found[j++] = Devices[i]; - } - found[j] = NULL; - return j ? found : NULL; -} - -int -deviceCount(Device **devs) -{ - int i; - - if (!devs) - return 0; - for (i = 0; devs[i]; i++); - return i; -} - -/* - * Create a menu listing all the devices of a certain type in the system. - * The passed-in menu is expected to be a "prototype" from which the new - * menu is cloned. - */ -DMenu * -deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)(dialogMenuItem *d), int (*check)(dialogMenuItem *d)) -{ - Device **devs; - int numdevs; - DMenu *tmp = NULL; - int i, j; - - devs = deviceFind(NULL, type); - numdevs = deviceCount(devs); - if (!numdevs) - return NULL; - tmp = (DMenu *)safe_malloc(sizeof(DMenu) + (sizeof(dialogMenuItem) * (numdevs + 1))); - bcopy(menu, tmp, sizeof(DMenu)); - for (i = 0; devs[i]; i++) { - tmp->items[i].prompt = devs[i]->name; - for (j = 0; j < numDevs; j++) { - if (devs[i] == Devices[j]) { - tmp->items[i].title = Devices[j]->description; - break; - } - } - if (j == numDevs) - tmp->items[i].title = "<unknown device type>"; - tmp->items[i].fire = hook; - tmp->items[i].checked = check; - } - tmp->items[i].title = NULL; - return tmp; -} diff --git a/usr.sbin/sysinstall/dhcp.c b/usr.sbin/sysinstall/dhcp.c deleted file mode 100644 index fa35580..0000000 --- a/usr.sbin/sysinstall/dhcp.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * $FreeBSD$ - * - * Copyright (c) 1999 - * C. Stone. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY C. STONE ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL C STONE OR HIS BODILY PARASITES BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE BY THE VOICES IN YOUR HEAD BEFOREHAND. - * - */ - -#include "sysinstall.h" - -#include <ctype.h> - -int -dhcpParseLeases(char *file, char *hostname, char *domain, char *nameserver, - char *ipaddr, char *gateway, char *netmask) -{ - char tempbuf[1024]; - char optbuf[1024], *optname = NULL; - char *tptr; - int endedflag = 0; - int leaseflag = 0; - FILE *fp; - enum { P_NOSTMT, P_NOSTMT1, P_STMT, P_STMTLINE } state; - - if ((fp = fopen(file, "r")) == NULL) { - msgDebug("error opening file %s: %s\n", file, strerror(errno)); - return -1; - } - - state = P_NOSTMT; - while (fscanf(fp, "%1023s", tempbuf) > 0) { - switch (state) { - case P_NOSTMT: - state = P_NOSTMT1; - if (!strncasecmp(tempbuf, "lease", 5)) { - if (!leaseflag) - leaseflag = 1; - else { - fclose(fp); - return 0; - } - } - break; - - case P_NOSTMT1: - if (tempbuf[0] != '{') { - msgWarn("dhcpParseLeases: '{' expected"); - fclose(fp); - return -1; - } - state = P_STMT; - break; - - case P_STMT: - if (!strncasecmp("option", tempbuf, 6)) - continue; - if (tempbuf[0] == '}') { - state = P_NOSTMT; - leaseflag = 0; - continue; - } - if (!leaseflag) - break; - if (tempbuf[0] == ';') { /* play it safe */ - state = P_STMT; - continue; - } - if ((tptr = (char *)strchr(tempbuf, ';')) && (*(tptr + 1) == 0)) { - *tptr = '\0'; - endedflag = 1; - } - if (!isalnum(tempbuf[0])) { - msgWarn("dhcpParseLeases: bad option"); - fclose(fp); - return -1; - } - if (optname) - free(optname); - optname = strdup(tempbuf); - if (endedflag) { - state = P_STMT; - endedflag = 0; - continue; - } - state = P_STMTLINE; - break; - - case P_STMTLINE: - if (tempbuf[0] == ';') { - state = P_STMT; - continue; - } - if ((tptr = (char *)strchr(tempbuf, ';')) && (*(tptr + 1) == 0)) { - *tptr = '\0'; - endedflag = 1; - } - if (tempbuf[0] == '"') { - if (sscanf(tempbuf, "\"%[^\" ]\"", optbuf) < 1) { - msgWarn("dhcpParseLeases: bad option value"); - fclose(fp); - return -1; - } - } - else - strcpy(optbuf, tempbuf); - - if (!strcasecmp("host-name", optname)) { - strcpy(hostname, optbuf); - } else if (!strcasecmp("domain-name", optname)) { - strcpy(domain, optbuf); - } else if (!strcasecmp("fixed-address", optname)) { - strcpy(ipaddr, optbuf); - } else if (!strcasecmp("routers", optname)) { - if((tptr = (char *)strchr(optbuf, ','))) - *tptr = '\0'; - strcpy(gateway, optbuf); - } else if (!strcasecmp("subnet-mask", optname)) { - strcpy(netmask, optbuf); - } else if (!strcasecmp("domain-name-servers", optname)) { - /* <jkh> ...one value per property */ - if((tptr = (char *)strchr(optbuf, ','))) - *tptr = '\0'; - strcpy(nameserver, optbuf); - } - if (endedflag) { - state = P_STMT; - endedflag = 0; - continue; - } - break; - } - } - fclose(fp); - return 0; -} diff --git a/usr.sbin/sysinstall/disks.c b/usr.sbin/sysinstall/disks.c deleted file mode 100644 index 4cc7848..0000000 --- a/usr.sbin/sysinstall/disks.c +++ /dev/null @@ -1,1055 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <ctype.h> -#include <fcntl.h> -#include <inttypes.h> -#include <libdisk.h> -#include <sys/stat.h> -#include <sys/disklabel.h> - -#ifdef WITH_SLICES -enum size_units_t { UNIT_BLOCKS, UNIT_KILO, UNIT_MEG, UNIT_GIG, UNIT_SIZE }; - -#ifdef PC98 -#define SUBTYPE_FREEBSD 50324 -#define SUBTYPE_FAT 37218 -#else -#define SUBTYPE_FREEBSD 165 -#define SUBTYPE_FAT 6 -#endif -#define SUBTYPE_EFI 239 - -#ifdef PC98 -#define OTHER_SLICE_VALUES \ - "Other popular values are 37218 for a\n" \ - "DOS FAT partition.\n\n" -#else -#define OTHER_SLICE_VALUES \ - "Other popular values are 6 for a\n" \ - "DOS FAT partition, 131 for a Linux ext2fs partition, or\n" \ - "130 for a Linux swap partition.\n\n" -#endif -#define NON_FREEBSD_NOTE \ - "Note: If you choose a non-FreeBSD partition type, it will not\n" \ - "be formatted or otherwise prepared, it will simply reserve space\n" \ - "for you to use another tool, such as DOS format, to later format\n" \ - "and actually use the partition." - -/* Where we start displaying chunk information on the screen */ -#define CHUNK_START_ROW 5 - -/* Where we keep track of MBR chunks */ -#define CHUNK_INFO_ENTRIES 16 -static struct chunk *chunk_info[CHUNK_INFO_ENTRIES]; -static int current_chunk; - -static void diskPartitionNonInteractive(Device *dev); - -static void -record_chunks(Disk *d) -{ - struct chunk *c1 = NULL; - int i = 0; - daddr_t last_free = 0; - - if (!d->chunks) - msgFatal("No chunk list found for %s!", d->name); - - for (c1 = d->chunks->part; c1; c1 = c1->next) { - if (c1->type == unused && c1->size > last_free) { - last_free = c1->size; - current_chunk = i; - } - chunk_info[i++] = c1; - } - chunk_info[i] = NULL; - if (current_chunk >= i) - current_chunk = i - 1; -} - -static daddr_t Total; - -static void -check_geometry(Disk *d) -{ - int sg; - -#ifdef PC98 - if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256) -#else - if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) -#endif - { - dialog_clear_norefresh(); - sg = msgYesNo("WARNING: It is safe to use a geometry of %lu/%lu/%lu for %s on\n" - "computers with modern BIOS versions. If this disk is to be used\n" - "on an old machine it is recommended that it does not have more\n" - "than 65535 cylinders, more than 255 heads, or more than\n" -#ifdef PC98 - "255" -#else - "63" -#endif - " sectors per track.\n" - "\n" - "Would you like to keep using the current geometry?\n", - d->bios_cyl, d->bios_hd, d->bios_sect, d->name); - if (sg == 1) { - Sanitize_Bios_Geom(d); - msgConfirm("A geometry of %lu/%lu/%lu was calculated for %s.\n" - "\n" - "If you are not sure about this, please consult the Hardware Guide\n" - "in the Documentation submenu or use the (G)eometry command to\n" - "change it. Remember: you need to enter whatever your BIOS thinks\n" - "the geometry is! For IDE, it's what you were told in the BIOS\n" - "setup. For SCSI, it's the translation mode your controller is\n" - "using. Do NOT use a ``physical geometry''.\n", - d->bios_cyl, d->bios_hd, d->bios_sect, d->name); - } - } -} - -static void -print_chunks(Disk *d, int u) -{ - int row; - int i; - daddr_t sz; - char *szstr; - - szstr = (u == UNIT_GIG ? "GB" : (u == UNIT_MEG ? "MB" : - (u == UNIT_KILO ? "KB" : "ST"))); - - Total = 0; - for (i = 0; chunk_info[i]; i++) - Total += chunk_info[i]->size; - attrset(A_NORMAL); - mvaddstr(0, 0, "Disk name:\t"); - clrtobot(); - attrset(A_REVERSE); addstr(d->name); attrset(A_NORMAL); - attrset(A_REVERSE); mvaddstr(0, 55, "FDISK Partition Editor"); attrset(A_NORMAL); - mvprintw(1, 0, - "DISK Geometry:\t%lu cyls/%lu heads/%lu sectors = %jd sectors (%jdMB)", - d->bios_cyl, d->bios_hd, d->bios_sect, - (intmax_t)d->bios_cyl * d->bios_hd * d->bios_sect, - (intmax_t)d->bios_cyl * d->bios_hd * d->bios_sect / (1024/512) / 1024); - mvprintw(3, 0, "%6s %10s(%s) %10s %8s %6s %10s %8s %8s", - "Offset", "Size", szstr, "End", "Name", "PType", "Desc", - "Subtype", "Flags"); - for (i = 0, row = CHUNK_START_ROW; chunk_info[i]; i++, row++) { - switch(u) { - default: /* fall thru */ - case UNIT_BLOCKS: - sz = chunk_info[i]->size; - break; - case UNIT_KILO: - sz = chunk_info[i]->size / (1024/512); - break; - case UNIT_MEG: - sz = chunk_info[i]->size / (1024/512) / 1024; - break; - case UNIT_GIG: - sz = chunk_info[i]->size / (1024/512) / 1024 / 1024; - break; - } - if (i == current_chunk) - attrset(ATTR_SELECTED); - mvprintw(row, 0, "%10jd %10jd %10jd %8s %6d %10s %8d\t%-6s", - (intmax_t)chunk_info[i]->offset, (intmax_t)sz, - (intmax_t)chunk_info[i]->end, chunk_info[i]->name, - chunk_info[i]->type, - slice_type_name(chunk_info[i]->type, chunk_info[i]->subtype), - chunk_info[i]->subtype, ShowChunkFlags(chunk_info[i])); - if (i == current_chunk) - attrset(A_NORMAL); - } -} - -static void -print_command_summary(void) -{ - mvprintw(14, 0, "The following commands are supported (in upper or lower case):"); - mvprintw(16, 0, "A = Use Entire Disk G = set Drive Geometry C = Create Slice"); - mvprintw(17, 0, "D = Delete Slice Z = Toggle Size Units S = Set Bootable | = Expert m."); - mvprintw(18, 0, "T = Change Type U = Undo All Changes"); - - if (!RunningAsInit) - mvprintw(18, 47, "W = Write Changes Q = Finish"); - else - mvprintw(18, 47, "Q = Finish"); - mvprintw(21, 0, "Use F1 or ? to get more help, arrow keys to select."); - move(0, 0); -} -#endif /* WITH_SLICES */ - -#if !defined(__ia64__) -static u_char * -bootalloc(char *name, size_t *size) -{ - char buf[FILENAME_MAX]; - struct stat sb; - - snprintf(buf, sizeof buf, "/boot/%s", name); - if (stat(buf, &sb) != -1) { - int fd; - - fd = open(buf, O_RDONLY); - if (fd != -1) { - u_char *cp; - - cp = malloc(sb.st_size); - if (read(fd, cp, sb.st_size) != sb.st_size) { - free(cp); - close(fd); - msgDebug("bootalloc: couldn't read %ld bytes from %s\n", (long)sb.st_size, buf); - return NULL; - } - close(fd); - if (size != NULL) - *size = sb.st_size; - return cp; - } - msgDebug("bootalloc: couldn't open %s\n", buf); - } - else - msgDebug("bootalloc: can't stat %s\n", buf); - return NULL; -} -#endif /* !defined(__ia64__) */ - -#ifdef WITH_SLICES -#ifdef PC98 -static void -getBootMgr(char *dname, u_char **bootipl, size_t *bootipl_size, - u_char **bootmenu, size_t *bootmenu_size) -{ - static u_char *boot0; - static size_t boot0_size; - static u_char *boot05; - static size_t boot05_size; - - char str[80]; - char *cp; - int i = 0; - - cp = variable_get(VAR_BOOTMGR); - if (!cp) { - /* Figure out what kind of IPL the user wants */ - sprintf(str, "Install Boot Manager for drive %s?", dname); - MenuIPLType.title = str; - i = dmenuOpenSimple(&MenuIPLType, FALSE); - } else { - if (!strncmp(cp, "boot", 4)) - BootMgr = 0; - else - BootMgr = 1; - } - if (cp || i) { - switch (BootMgr) { - case 0: - if (!boot0) boot0 = bootalloc("boot0", &boot0_size); - *bootipl = boot0; - *bootipl_size = boot0_size; - if (!boot05) boot05 = bootalloc("boot0.5", &boot05_size); - *bootmenu = boot05; - *bootmenu_size = boot05_size; - return; - case 1: - default: - break; - } - } - *bootipl = NULL; - *bootipl_size = 0; - *bootmenu = NULL; - *bootmenu_size = 0; -} -#else -static void -getBootMgr(char *dname, u_char **bootCode, size_t *bootCodeSize) -{ -#if defined(__i386__) || defined(__amd64__) /* only meaningful on x86 */ - static u_char *mbr, *boot0; - static size_t mbr_size, boot0_size; - char str[80]; - char *cp; - int i = 0; - - cp = variable_get(VAR_BOOTMGR); - if (!cp) { - /* Figure out what kind of MBR the user wants */ - sprintf(str, "Install Boot Manager for drive %s?", dname); - MenuMBRType.title = str; - i = dmenuOpenSimple(&MenuMBRType, FALSE); - } - else { - if (!strncmp(cp, "boot", 4)) - BootMgr = 0; - else if (!strcmp(cp, "standard")) - BootMgr = 1; - else - BootMgr = 2; - } - if (cp || i) { - switch (BootMgr) { - case 0: - if (!boot0) boot0 = bootalloc("boot0", &boot0_size); - *bootCode = boot0; - *bootCodeSize = boot0_size; - return; - case 1: - if (!mbr) mbr = bootalloc("mbr", &mbr_size); - *bootCode = mbr; - *bootCodeSize = mbr_size; - return; - case 2: - default: - break; - } - } -#endif - *bootCode = NULL; - *bootCodeSize = 0; -} -#endif -#endif /* WITH_SLICES */ - -int -diskGetSelectCount(Device ***devs) -{ - int i, cnt, enabled; - char *cp; - Device **dp; - - cp = variable_get(VAR_DISK); - dp = *devs = deviceFind(cp, DEVICE_TYPE_DISK); - cnt = deviceCount(dp); - if (!cnt) - return -1; - for (i = 0, enabled = 0; i < cnt; i++) { - if (dp[i]->enabled) - ++enabled; - } - return enabled; -} - -#ifdef WITH_SLICES -void -diskPartition(Device *dev) -{ - char *p; - int rv, key = 0; - int i; - Boolean chunking; - char *msg = NULL; -#ifdef PC98 - u_char *bootipl; - size_t bootipl_size; - u_char *bootmenu; - size_t bootmenu_size; -#else - u_char *mbrContents; - size_t mbrSize; -#endif - WINDOW *w = savescr(); - Disk *d = (Disk *)dev->private; - int size_unit; - - size_unit = UNIT_BLOCKS; - chunking = TRUE; - keypad(stdscr, TRUE); - - /* Flush both the dialog and curses library views of the screen - since we don't always know who called us */ - dialog_clear_norefresh(), clear(); - current_chunk = 0; - - /* Set up the chunk array */ - record_chunks(d); - - /* Give the user a chance to sanitize the disk geometry, if necessary */ - check_geometry(d); - - while (chunking) { - char *val, geometry[80]; - - /* Now print our overall state */ - if (d) - print_chunks(d, size_unit); - print_command_summary(); - if (msg) { - attrset(title_attr); mvprintw(23, 0, msg); attrset(A_NORMAL); - beep(); - msg = NULL; - } - else { - move(23, 0); - clrtoeol(); - } - - /* Get command character */ - key = getch(); - switch (toupper(key)) { - case '\014': /* ^L (redraw) */ - clear(); - msg = NULL; - break; - - case '\020': /* ^P */ - case KEY_UP: - case '-': - if (current_chunk != 0) - --current_chunk; - break; - - case '\016': /* ^N */ - case KEY_DOWN: - case '+': - case '\r': - case '\n': - if (chunk_info[current_chunk + 1]) - ++current_chunk; - break; - - case KEY_HOME: - current_chunk = 0; - break; - - case KEY_END: - while (chunk_info[current_chunk + 1]) - ++current_chunk; - break; - - case KEY_F(1): - case '?': - systemDisplayHelp("slice"); - clear(); - break; - - case 'A': -#if !defined(__i386__) && !defined(__amd64__) - rv = 1; -#else /* The rest is only relevant on x86 */ - rv = 0; -#endif - All_FreeBSD(d, rv); - variable_set2(DISK_PARTITIONED, "yes", 0); - record_chunks(d); - clear(); - break; - - case 'C': - if (chunk_info[current_chunk]->type != unused) - msg = "Slice in use, delete it first or move to an unused one."; - else { - char *val, tmp[20], name[16], *cp; - daddr_t size; - long double dsize; - int subtype; - chunk_e partitiontype; -#ifdef PC98 - snprintf(name, sizeof (name), "%s", "FreeBSD"); - val = msgGetInput(name, - "Please specify the name for new FreeBSD slice."); - if (val) - strncpy(name, val, sizeof (name)); -#else - name[0] = '\0'; -#endif - snprintf(tmp, 20, "%jd", (intmax_t)chunk_info[current_chunk]->size); - val = msgGetInput(tmp, "Please specify the size for new FreeBSD slice in blocks\n" - "or append a trailing `M' for megabytes (e.g. 20M)."); - if (val && (dsize = strtold(val, &cp)) > 0 && dsize < UINT32_MAX) { - if (*cp && toupper(*cp) == 'M') - size = (daddr_t) (dsize * ONE_MEG); - else if (*cp && toupper(*cp) == 'G') - size = (daddr_t) (dsize * ONE_GIG); - else - size = (daddr_t) dsize; - - if (size < ONE_MEG) { - msgConfirm("The minimum slice size is 1MB"); - break; - } - - - sprintf(tmp, "%d", SUBTYPE_FREEBSD); - val = msgGetInput(tmp, "Enter type of partition to create:\n\n" - "Pressing Enter will choose the default, a native FreeBSD\n" - "slice (type %u). " - OTHER_SLICE_VALUES - NON_FREEBSD_NOTE, SUBTYPE_FREEBSD); - if (val && (subtype = strtol(val, NULL, 0)) > 0) { - if (subtype == SUBTYPE_FREEBSD) - partitiontype = freebsd; - else if (subtype == SUBTYPE_FAT) - partitiontype = fat; - else if (subtype == SUBTYPE_EFI) - partitiontype = efi; - else -#ifdef PC98 - partitiontype = pc98; -#else - partitiontype = mbr; -#endif - Create_Chunk(d, chunk_info[current_chunk]->offset, size, partitiontype, subtype, - (chunk_info[current_chunk]->flags & CHUNK_ALIGN), name); - variable_set2(DISK_PARTITIONED, "yes", 0); - record_chunks(d); - } - } - clear(); - } - break; - - case KEY_DC: - case 'D': - if (chunk_info[current_chunk]->type == unused) - msg = "Slice is already unused!"; - else { - Delete_Chunk(d, chunk_info[current_chunk]); - variable_set2(DISK_PARTITIONED, "yes", 0); - record_chunks(d); - } - break; - - case 'T': - if (chunk_info[current_chunk]->type == unused) - msg = "Slice is currently unused (use create instead)"; - else { - char *val, tmp[20]; - int subtype; - chunk_e partitiontype; - - sprintf(tmp, "%d", chunk_info[current_chunk]->subtype); - val = msgGetInput(tmp, "New partition type:\n\n" - "Pressing Enter will use the current type. To choose a native\n" - "FreeBSD slice enter %u. " - OTHER_SLICE_VALUES - NON_FREEBSD_NOTE, SUBTYPE_FREEBSD); - if (val && (subtype = strtol(val, NULL, 0)) > 0) { - if (subtype == SUBTYPE_FREEBSD) - partitiontype = freebsd; - else if (subtype == SUBTYPE_FAT) - partitiontype = fat; - else if (subtype == SUBTYPE_EFI) - partitiontype = efi; - else -#ifdef PC98 - partitiontype = pc98; -#else - partitiontype = mbr; -#endif - chunk_info[current_chunk]->type = partitiontype; - chunk_info[current_chunk]->subtype = subtype; - } - } - break; - - case 'G': - snprintf(geometry, 80, "%lu/%lu/%lu", d->bios_cyl, d->bios_hd, d->bios_sect); - val = msgGetInput(geometry, "Please specify the new geometry in cyl/hd/sect format.\n" - "Don't forget to use the two slash (/) separator characters!\n" - "It's not possible to parse the field without them."); - if (val) { - long nc, nh, ns; - nc = strtol(val, &val, 0); - nh = strtol(val + 1, &val, 0); - ns = strtol(val + 1, 0, 0); - Set_Bios_Geom(d, nc, nh, ns); - } - clear(); - break; - - case 'S': - /* Clear active states so we won't have two */ - for (i = 0; (chunk_info[i] != NULL) && (i < CHUNK_INFO_ENTRIES); i++) - chunk_info[i]->flags &= !CHUNK_ACTIVE; - - /* Set Bootable */ - chunk_info[current_chunk]->flags |= CHUNK_ACTIVE; - break; - - case 'U': - if (!variable_cmp(DISK_LABELLED, "written")) { - msgConfirm("You've already written this information out - you\n" - "can't undo it."); - } - else if (!msgNoYes("Are you SURE you want to Undo everything?")) { - char cp[BUFSIZ]; - - sstrncpy(cp, d->name, sizeof cp); - Free_Disk(dev->private); - d = Open_Disk(cp); - if (!d) - msgConfirm("Can't reopen disk %s! Internal state is probably corrupted", cp); - dev->private = d; - variable_unset(DISK_PARTITIONED); - variable_unset(DISK_LABELLED); - if (d) - record_chunks(d); - } - clear(); - break; - - case 'W': - if (!msgNoYes("WARNING: This should only be used when modifying an EXISTING\n" - "installation. If you are installing FreeBSD for the first time\n" - "then you should simply type Q when you're finished here and your\n" - "changes will be committed in one batch automatically at the end of\n" - "these questions. If you're adding a disk, you should NOT write\n" - "from this screen, you should do it from the label editor.\n\n" - "Are you absolutely sure you want to do this now?")) { - variable_set2(DISK_PARTITIONED, "yes", 0); - -#ifdef PC98 - /* - * Don't trash the IPL if the first (and therefore only) chunk - * is marked for a truly dedicated disk (i.e., the disklabel - * starts at sector 0), even in cases where the user has - * requested a FreeBSD Boot Manager -- both would be fatal in - * this case. - */ - /* - * Don't offer to update the IPL on this disk if the first - * "real" chunk looks like a FreeBSD "all disk" partition, - * or the disk is entirely FreeBSD. - */ - if ((d->chunks->part->type != freebsd) || - (d->chunks->part->offset > 1)) - getBootMgr(d->name, &bootipl, &bootipl_size, - &bootmenu, &bootmenu_size); - else { - bootipl = NULL; - bootipl_size = 0; - bootmenu = NULL; - bootmenu_size = 0; - } - Set_Boot_Mgr(d, bootipl, bootipl_size, bootmenu, bootmenu_size); -#else - /* - * Don't trash the MBR if the first (and therefore only) chunk - * is marked for a truly dedicated disk (i.e., the disklabel - * starts at sector 0), even in cases where the user has - * requested booteasy or a "standard" MBR -- both would be - * fatal in this case. - */ - /* - * Don't offer to update the MBR on this disk if the first - * "real" chunk looks like a FreeBSD "all disk" partition, - * or the disk is entirely FreeBSD. - */ - if ((d->chunks->part->type != freebsd) || - (d->chunks->part->offset > 1)) - getBootMgr(d->name, &mbrContents, &mbrSize); - else { - mbrContents = NULL; - mbrSize = 0; - } - Set_Boot_Mgr(d, mbrContents, mbrSize); -#endif - - if (DITEM_STATUS(diskPartitionWrite(NULL)) != DITEM_SUCCESS) - msgConfirm("Disk partition write returned an error status!"); - else - msgConfirm("Wrote FDISK partition information out successfully."); - } - clear(); - break; - - case '|': - if (!msgNoYes("Are you SURE you want to go into Expert mode?\n" - "No seat belts whatsoever are provided!")) { - clear(); - refresh(); - slice_wizard(d); - variable_set2(DISK_PARTITIONED, "yes", 0); - record_chunks(d); - } - else - msg = "Wise choice!"; - clear(); - break; - - case '\033': /* ESC */ - case 'Q': - chunking = FALSE; -#ifdef PC98 - /* - * Don't trash the IPL if the first (and therefore only) chunk - * is marked for a truly dedicated disk (i.e., the disklabel - * starts at sector 0), even in cases where the user has requested - * a FreeBSD Boot Manager -- both would be fatal in this case. - */ - /* - * Don't offer to update the IPL on this disk if the first "real" - * chunk looks like a FreeBSD "all disk" partition, or the disk is - * entirely FreeBSD. - */ - if ((d->chunks->part->type != freebsd) || - (d->chunks->part->offset > 1)) { - if (variable_cmp(DISK_PARTITIONED, "written")) { - getBootMgr(d->name, &bootipl, &bootipl_size, - &bootmenu, &bootmenu_size); - if (bootipl != NULL && bootmenu != NULL) - Set_Boot_Mgr(d, bootipl, bootipl_size, - bootmenu, bootmenu_size); - } - } -#else - /* - * Don't trash the MBR if the first (and therefore only) chunk - * is marked for a truly dedicated disk (i.e., the disklabel - * starts at sector 0), even in cases where the user has requested - * booteasy or a "standard" MBR -- both would be fatal in this case. - */ - /* - * Don't offer to update the MBR on this disk if the first "real" - * chunk looks like a FreeBSD "all disk" partition, or the disk is - * entirely FreeBSD. - */ - if ((d->chunks->part->type != freebsd) || - (d->chunks->part->offset > 1)) { - if (variable_cmp(DISK_PARTITIONED, "written")) { - getBootMgr(d->name, &mbrContents, &mbrSize); - if (mbrContents != NULL) - Set_Boot_Mgr(d, mbrContents, mbrSize); - } - } -#endif - break; - - case 'Z': - size_unit = (size_unit + 1) % UNIT_SIZE; - break; - - default: - beep(); - msg = "Type F1 or ? for help"; - break; - } - } - p = CheckRules(d); - if (p) { - char buf[FILENAME_MAX]; - - use_helpline("Press F1 to read more about disk slices."); - use_helpfile(systemHelpFile("partition", buf)); - if (!variable_get(VAR_NO_WARN)) - dialog_mesgbox("Disk slicing warning:", p, -1, -1); - free(p); - } - restorescr(w); -} -#endif /* WITH_SLICES */ - -#ifdef WITH_SLICES -static int -partitionHook(dialogMenuItem *selected) -{ - Device **devs = NULL; - - devs = deviceFind(selected->prompt, DEVICE_TYPE_DISK); - if (!devs) { - msgConfirm("Unable to find disk %s!", selected->prompt); - return DITEM_FAILURE; - } - /* Toggle enabled status? */ - if (!devs[0]->enabled) { - devs[0]->enabled = TRUE; - diskPartition(devs[0]); - } - else - devs[0]->enabled = FALSE; - return DITEM_SUCCESS; -} - -static int -partitionCheck(dialogMenuItem *selected) -{ - Device **devs = NULL; - - devs = deviceFind(selected->prompt, DEVICE_TYPE_DISK); - if (!devs || devs[0]->enabled == FALSE) - return FALSE; - return TRUE; -} - -int -diskPartitionEditor(dialogMenuItem *self) -{ - DMenu *menu; - Device **devs; - int i, cnt, devcnt; - - cnt = diskGetSelectCount(&devs); - devcnt = deviceCount(devs); - if (cnt == -1) { - msgConfirm("No disks found! Please verify that your disk controller is being\n" - "properly probed at boot time. See the Hardware Guide on the\n" - "Documentation menu for clues on diagnosing this type of problem."); - return DITEM_FAILURE; - } - else if (cnt) { - /* Some are already selected */ - for (i = 0; i < devcnt; i++) { - if (devs[i]->enabled) { - if (variable_get(VAR_NONINTERACTIVE) && - !variable_get(VAR_DISKINTERACTIVE)) - diskPartitionNonInteractive(devs[i]); - else - diskPartition(devs[i]); - } - } - } - else { - /* No disks are selected, fall-back case now */ - if (devcnt == 1) { - devs[0]->enabled = TRUE; - if (variable_get(VAR_NONINTERACTIVE) && - !variable_get(VAR_DISKINTERACTIVE)) - diskPartitionNonInteractive(devs[0]); - else - diskPartition(devs[0]); - return DITEM_SUCCESS; - } - else { - menu = deviceCreateMenu(&MenuDiskDevices, DEVICE_TYPE_DISK, partitionHook, partitionCheck); - if (!menu) { - msgConfirm("No devices suitable for installation found!\n\n" - "Please verify that your disk controller (and attached drives)\n" - "were detected properly. This can be done by pressing the\n" - "[Scroll Lock] key and using the Arrow keys to move back to\n" - "the boot messages. Press [Scroll Lock] again to return."); - return DITEM_FAILURE; - } - else { - i = dmenuOpenSimple(menu, FALSE) ? DITEM_SUCCESS : DITEM_FAILURE; - free(menu); - } - return i; - } - } - return DITEM_SUCCESS; -} -#endif /* WITH_SLICES */ - -int -diskPartitionWrite(dialogMenuItem *self) -{ - Device **devs; - int i; - - if (!variable_cmp(DISK_PARTITIONED, "written")) - return DITEM_SUCCESS; - - devs = deviceFind(NULL, DEVICE_TYPE_DISK); - if (!devs) { - msgConfirm("Unable to find any disks to write to??"); - return DITEM_FAILURE; - } - if (isDebug()) - msgDebug("diskPartitionWrite: Examining %d devices\n", deviceCount(devs)); - for (i = 0; devs[i]; i++) { - Disk *d = (Disk *)devs[i]->private; -#if !defined(__ia64__) - static u_char *boot1; -#endif -#if defined(__i386__) || defined(__amd64__) - static u_char *boot2; -#endif - - if (!devs[i]->enabled) - continue; - -#if defined(__i386__) || defined(__amd64__) - if (!boot1) boot1 = bootalloc("boot1", NULL); - if (!boot2) boot2 = bootalloc("boot2", NULL); - Set_Boot_Blocks(d, boot1, boot2); -#elif !defined(__ia64__) - if (!boot1) boot1 = bootalloc("boot1", NULL); - Set_Boot_Blocks(d, boot1, NULL); -#endif - - msgNotify("Writing partition information to drive %s", d->name); - if (!Fake && Write_Disk(d)) { - if (RunningAsInit) { - msgConfirm("ERROR: Unable to write data to disk %s!", d->name); - } else { - msgConfirm("ERROR: Unable to write data to disk %s!\n\n" - "To edit the labels on a running system set\n" - "sysctl kern.geom.debugflags=16 and try again.", d->name); - } - return DITEM_FAILURE; - } - } - /* Now it's not "yes", but "written" */ - variable_set2(DISK_PARTITIONED, "written", 0); - return DITEM_SUCCESS | DITEM_RESTORE; -} - -#ifdef WITH_SLICES -/* Partition a disk based wholly on which variables are set */ -static void -diskPartitionNonInteractive(Device *dev) -{ - char *cp; - int i, all_disk = 0; - daddr_t size; - long double dsize; -#ifdef PC98 - u_char *bootipl; - size_t bootipl_size; - u_char *bootmenu; - size_t bootmenu_size; -#else - u_char *mbrContents; - size_t mbrSize; -#endif - Disk *d = (Disk *)dev->private; - - record_chunks(d); - cp = variable_get(VAR_GEOMETRY); - if (cp) { - if (!strcasecmp(cp, "sane")) { -#ifdef PC98 - if (d->bios_cyl >= 65536 || d->bios_hd > 256 || d->bios_sect >= 256) -#else - if (d->bios_cyl > 65536 || d->bios_hd > 256 || d->bios_sect >= 64) -#endif - { - msgDebug("Warning: A geometry of %lu/%lu/%lu for %s is incorrect.\n", - d->bios_cyl, d->bios_hd, d->bios_sect, d->name); - Sanitize_Bios_Geom(d); - msgDebug("Sanitized geometry for %s is %lu/%lu/%lu.\n", - d->name, d->bios_cyl, d->bios_hd, d->bios_sect); - } - } else { - msgDebug("Setting geometry from script to: %s\n", cp); - d->bios_cyl = strtol(cp, &cp, 0); - d->bios_hd = strtol(cp + 1, &cp, 0); - d->bios_sect = strtol(cp + 1, 0, 0); - } - } - - cp = variable_get(VAR_PARTITION); - if (cp) { - if (!strcmp(cp, "free")) { - /* Do free disk space case */ - for (i = 0; chunk_info[i]; i++) { - /* If a chunk is at least 10MB in size, use it. */ - if (chunk_info[i]->type == unused && chunk_info[i]->size > (10 * ONE_MEG)) { - Create_Chunk(d, chunk_info[i]->offset, chunk_info[i]->size, - freebsd, SUBTYPE_FREEBSD, - (chunk_info[i]->flags & CHUNK_ALIGN), - "FreeBSD"); - variable_set2(DISK_PARTITIONED, "yes", 0); - break; - } - } - if (!chunk_info[i]) { - msgConfirm("Unable to find any free space on this disk!"); - return; - } - } - else if (!strcmp(cp, "all")) { - /* Do all disk space case */ - msgDebug("Warning: Devoting all of disk %s to FreeBSD.\n", d->name); - - All_FreeBSD(d, FALSE); - } - else if (!strcmp(cp, "exclusive")) { - /* Do really-all-the-disk-space case */ - msgDebug("Warning: Devoting all of disk %s to FreeBSD.\n", d->name); - - All_FreeBSD(d, all_disk = TRUE); - } - else if ((dsize = strtold(cp, &cp))) { - if (*cp && toupper(*cp) == 'M') - size *= (daddr_t) (dsize * ONE_MEG); - else if (*cp && toupper(*cp) == 'G') - size = (daddr_t) (dsize * ONE_GIG); - else - size = (daddr_t) dsize; - - /* Look for size bytes free */ - for (i = 0; chunk_info[i]; i++) { - /* If a chunk is at least sz MB, use it. */ - if (chunk_info[i]->type == unused && chunk_info[i]->size >= size) { - Create_Chunk(d, chunk_info[i]->offset, size, freebsd, SUBTYPE_FREEBSD, - (chunk_info[i]->flags & CHUNK_ALIGN), - "FreeBSD"); - variable_set2(DISK_PARTITIONED, "yes", 0); - break; - } - } - if (!chunk_info[i]) { - msgConfirm("Unable to find %jd free blocks on this disk!", - (intmax_t)size); - return; - } - } - else if (!strcmp(cp, "existing")) { - /* Do existing FreeBSD case */ - for (i = 0; chunk_info[i]; i++) { - if (chunk_info[i]->type == freebsd) - break; - } - if (!chunk_info[i]) { - msgConfirm("Unable to find any existing FreeBSD partitions on this disk!"); - return; - } - } - else { - msgConfirm("`%s' is an invalid value for %s - is config file valid?", cp, VAR_PARTITION); - return; - } - if (!all_disk) { -#ifdef PC98 - getBootMgr(d->name, &bootipl, &bootipl_size, - &bootmenu, &bootmenu_size); - Set_Boot_Mgr(d, bootipl, bootipl_size, bootmenu, bootmenu_size); -#else - getBootMgr(d->name, &mbrContents, &mbrSize); - Set_Boot_Mgr(d, mbrContents, mbrSize); -#endif - } - variable_set2(DISK_PARTITIONED, "yes", 0); - } -} -#endif /* WITH_SLICES */ diff --git a/usr.sbin/sysinstall/dispatch.c b/usr.sbin/sysinstall/dispatch.c deleted file mode 100644 index 44aa0fa..0000000 --- a/usr.sbin/sysinstall/dispatch.c +++ /dev/null @@ -1,653 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <ctype.h> -#include <errno.h> -#include <sys/signal.h> -#include <sys/fcntl.h> - -#include "list.h" - -static int dispatch_shutdown(dialogMenuItem *unused); -static int dispatch_systemExecute(dialogMenuItem *unused); -static int dispatch_msgConfirm(dialogMenuItem *unused); -static int dispatch_mediaOpen(dialogMenuItem *unused); -static int dispatch_mediaClose(dialogMenuItem *unused); -static int cfgModuleFire(dialogMenuItem *self); - -static struct _word { - char *name; - int (*handler)(dialogMenuItem *self); -} resWords[] = { - { "configAnonFTP", configAnonFTP }, - { "configRouter", configRouter }, - { "configInetd", configInetd }, - { "configNFSServer", configNFSServer }, - { "configNTP", configNTP }, - { "configPCNFSD", configPCNFSD }, - { "configPackages", configPackages }, - { "configUsers", configUsers }, -#ifdef WITH_SLICES - { "diskPartitionEditor", diskPartitionEditor }, -#endif - { "diskPartitionWrite", diskPartitionWrite }, - { "diskLabelEditor", diskLabelEditor }, - { "diskLabelCommit", diskLabelCommit }, - { "distReset", distReset }, - { "distSetCustom", distSetCustom }, - { "distUnsetCustom", distUnsetCustom }, - { "distSetDeveloper", distSetDeveloper }, - { "distSetKernDeveloper", distSetKernDeveloper }, - { "distSetUser", distSetUser }, - { "distSetMinimum", distSetMinimum }, - { "distSetEverything", distSetEverything }, - { "distSetSrc", distSetSrc }, - { "distExtractAll", distExtractAll }, - { "docBrowser", docBrowser }, - { "docShowDocument", docShowDocument }, - { "installCommit", installCommit }, - { "installExpress", installExpress }, - { "installStandard", installStandard }, - { "installUpgrade", installUpgrade }, - { "installFixupBase", installFixupBase }, - { "installFixitHoloShell", installFixitHoloShell }, - { "installFixitCDROM", installFixitCDROM }, - { "installFixitUSB", installFixitUSB }, - { "installFixitFloppy", installFixitFloppy }, - { "installFilesystems", installFilesystems }, - { "installVarDefaults", installVarDefaults }, - { "loadConfig", dispatch_load_file }, - { "loadFloppyConfig", dispatch_load_floppy }, - { "loadCDROMConfig", dispatch_load_cdrom }, - { "mediaOpen", dispatch_mediaOpen }, - { "mediaClose", dispatch_mediaClose }, - { "mediaSetCDROM", mediaSetCDROM }, - { "mediaSetFloppy", mediaSetFloppy }, - { "mediaSetUSB", mediaSetUSB }, - { "mediaSetDOS", mediaSetDOS }, - { "mediaSetFTP", mediaSetFTP }, - { "mediaSetFTPActive", mediaSetFTPActive }, - { "mediaSetFTPPassive", mediaSetFTPPassive }, - { "mediaSetHTTP", mediaSetHTTP }, - { "mediaSetUFS", mediaSetUFS }, - { "mediaSetNFS", mediaSetNFS }, - { "mediaSetFTPUserPass", mediaSetFTPUserPass }, - { "mediaSetCPIOVerbosity", mediaSetCPIOVerbosity }, - { "mediaGetType", mediaGetType }, - { "msgConfirm", dispatch_msgConfirm }, - { "optionsEditor", optionsEditor }, - { "packageAdd", packageAdd }, - { "addGroup", userAddGroup }, - { "addUser", userAddUser }, - { "shutdown", dispatch_shutdown }, - { "system", dispatch_systemExecute }, - { "dumpVariables", dump_variables }, - { "tcpMenuSelect", tcpMenuSelect }, - { NULL, NULL }, -}; - -/* - * Helper routines for buffering data. - * - * We read an entire configuration into memory before executing it - * so that we are truely standalone and can do things like nuke the - * file or disk we're working on. - */ - -typedef struct command_buffer_ { - qelement queue; - char * string; -} command_buffer; - -static void -dispatch_free_command(command_buffer *item) -{ - if (item != NULL) { - REMQUE(item); - free(item->string); - item->string = NULL; - } - - free(item); -} - -static void -dispatch_free_all(qelement *head) -{ - command_buffer *item; - - while (!EMPTYQUE(*head)) { - item = (command_buffer *) head->q_forw; - dispatch_free_command(item); - } -} - -static command_buffer * -dispatch_add_command(qelement *head, char *string) -{ - command_buffer *new = NULL; - - new = malloc(sizeof(command_buffer)); - - if (new != NULL) { - - new->string = strdup(string); - - /* - * We failed to copy `string'; clean up the allocated - * resources. - */ - if (new->string == NULL) { - free(new); - new = NULL; - } else { - INSQUEUE(new, head->q_back); - } - } - - return new; -} - -/* - * Command processing - */ - -/* Just convenience */ -static int -dispatch_shutdown(dialogMenuItem *unused) -{ - systemShutdown(0); - return DITEM_FAILURE; -} - -static int -dispatch_systemExecute(dialogMenuItem *unused) -{ - char *cmd = variable_get(VAR_COMMAND); - - if (cmd) - return systemExecute(cmd) ? DITEM_FAILURE : DITEM_SUCCESS; - else - msgDebug("_systemExecute: No command passed in `command' variable.\n"); - return DITEM_FAILURE; -} - -static int -dispatch_msgConfirm(dialogMenuItem *unused) -{ - char *msg = variable_get(VAR_COMMAND); - - if (msg) { - msgConfirm("%s", msg); - return DITEM_SUCCESS; - } - - msgDebug("_msgConfirm: No message passed in `command' variable.\n"); - return DITEM_FAILURE; -} - -static int -dispatch_mediaOpen(dialogMenuItem *unused) -{ - return mediaOpen(); -} - -static int -dispatch_mediaClose(dialogMenuItem *unused) -{ - mediaClose(); - return DITEM_SUCCESS; -} - -static int -call_possible_resword(char *name, dialogMenuItem *value, int *status) -{ - int i, rval; - - rval = 0; - for (i = 0; resWords[i].name; i++) { - if (!strcmp(name, resWords[i].name)) { - *status = resWords[i].handler(value); - rval = 1; - break; - } - } - return rval; -} - -/* For a given string, call it or spit out an undefined command diagnostic */ -int -dispatchCommand(char *str) -{ - int i; - char *cp; - - if (!str || !*str) { - msgConfirm("Null or zero-length string passed to dispatchCommand"); - return DITEM_FAILURE; - } - - /* Fixup DOS abuse */ - if ((cp = index(str, '\r')) != NULL) - *cp = '\0'; - - /* If it's got a `=' sign in there, assume it's a variable setting */ - if (index(str, '=')) { - if (isDebug()) - msgDebug("dispatch: setting variable `%s'\n", str); - variable_set(str, 0); - i = DITEM_SUCCESS; - } - else { - /* A command might be a pathname if it's encoded in argv[0], which - we also support */ - if ((cp = rindex(str, '/')) != NULL) - str = cp + 1; - if (isDebug()) - msgDebug("dispatch: calling resword `%s'\n", str); - if (!call_possible_resword(str, NULL, &i)) { - msgNotify("Warning: No such command ``%s''", str); - i = DITEM_FAILURE; - } - /* - * Allow a user to prefix a command with "noError" to cause - * us to ignore any errors for that one command. - */ - if (i != DITEM_SUCCESS && variable_get(VAR_NO_ERROR)) - i = DITEM_SUCCESS; - variable_unset(VAR_NO_ERROR); - } - return i; -} - - -/* - * File processing - */ - -static qelement * -dispatch_load_fp(FILE *fp) -{ - qelement *head; - char buf[BUFSIZ], *cp; - - head = malloc(sizeof(qelement)); - - if (!head) - return NULL; - - INITQUE(*head); - - while (fgets(buf, sizeof buf, fp)) { - /* Fix up DOS abuse */ - if ((cp = index(buf, '\r')) != NULL) - *cp = '\0'; - /* If it's got a new line, trim it */ - if ((cp = index(buf, '\n')) != NULL) - *cp = '\0'; - if (*buf == '\0' || *buf == '#') - continue; - - if (!dispatch_add_command(head, buf)) - return NULL; - } - - return head; -} - -static int -dispatch_execute(qelement *head) -{ - int result = DITEM_SUCCESS; - command_buffer *item; - char *old_interactive; - - if (!head) - return result | DITEM_FAILURE; - - old_interactive = variable_get(VAR_NONINTERACTIVE); - if (old_interactive) - old_interactive = strdup(old_interactive); /* save copy */ - - /* Hint to others that we're running from a script, should they care */ - variable_set2(VAR_NONINTERACTIVE, "yes", 0); - - while (!EMPTYQUE(*head)) { - item = (command_buffer *) head->q_forw; - - if (DITEM_STATUS(dispatchCommand(item->string)) != DITEM_SUCCESS) { - msgConfirm("Command `%s' failed - rest of script aborted.\n", - item->string); - result |= DITEM_FAILURE; - break; - } - dispatch_free_command(item); - } - - dispatch_free_all(head); - - if (!old_interactive) - variable_unset(VAR_NONINTERACTIVE); - else { - variable_set2(VAR_NONINTERACTIVE, old_interactive, 0); - free(old_interactive); - } - - return result; -} - -int -dispatch_load_file_int(int quiet) -{ - FILE *fp; - char *cp; - int i; - qelement *list; - - static const char *names[] = { - "install.cfg", - "/stand/install.cfg", - "/tmp/install.cfg", - NULL - }; - - fp = NULL; - cp = variable_get(VAR_CONFIG_FILE); - if (!cp) { - for (i = 0; names[i]; i++) - if ((fp = fopen(names[i], "r")) != NULL) - break; - } else - fp = fopen(cp, "r"); - - if (!fp) { - if (!quiet) - msgConfirm("Unable to open %s: %s", cp, strerror(errno)); - return DITEM_FAILURE; - } - - list = dispatch_load_fp(fp); - fclose(fp); - - return dispatch_execute(list); -} - -int -dispatch_load_file(dialogMenuItem *self) -{ - return dispatch_load_file_int(FALSE); -} - -int -dispatch_load_floppy(dialogMenuItem *self) -{ - int what = DITEM_SUCCESS; - extern char *distWanted; - char *cp; - FILE *fp; - qelement *list; - - mediaClose(); - cp = variable_get_value(VAR_INSTALL_CFG, - "Specify the name of a configuration file", 0); - if (!cp || !*cp) { - variable_unset(VAR_INSTALL_CFG); - what |= DITEM_FAILURE; - return what; - } - - distWanted = cp; - /* Try to open the floppy drive */ - if (DITEM_STATUS(mediaSetFloppy(NULL)) == DITEM_FAILURE) { - msgConfirm("Unable to set media device to floppy."); - what |= DITEM_FAILURE; - mediaClose(); - return what; - } - - if (!DEVICE_INIT(mediaDevice)) { - msgConfirm("Unable to mount floppy filesystem."); - what |= DITEM_FAILURE; - mediaClose(); - return what; - } - - fp = DEVICE_GET(mediaDevice, cp, TRUE); - if (fp) { - list = dispatch_load_fp(fp); - fclose(fp); - mediaClose(); - - what |= dispatch_execute(list); - } - else { - if (!variable_get(VAR_NO_ERROR)) - msgConfirm("Configuration file '%s' not found.", cp); - variable_unset(VAR_INSTALL_CFG); - what |= DITEM_FAILURE; - mediaClose(); - } - return what; -} - -int -dispatch_load_cdrom(dialogMenuItem *self) -{ - int what = DITEM_SUCCESS; - extern char *distWanted; - char *cp; - FILE *fp; - qelement *list; - - mediaClose(); - cp = variable_get_value(VAR_INSTALL_CFG, - "Specify the name of a configuration file\n" - "residing on the CDROM.", 0); - if (!cp || !*cp) { - variable_unset(VAR_INSTALL_CFG); - what |= DITEM_FAILURE; - return what; - } - - distWanted = cp; - /* Try to open the floppy drive */ - if (DITEM_STATUS(mediaSetCDROM(NULL)) == DITEM_FAILURE) { - msgConfirm("Unable to set media device to CDROM."); - what |= DITEM_FAILURE; - mediaClose(); - return what; - } - - if (!DEVICE_INIT(mediaDevice)) { - msgConfirm("Unable to CDROM filesystem."); - what |= DITEM_FAILURE; - mediaClose(); - return what; - } - - fp = DEVICE_GET(mediaDevice, cp, TRUE); - if (fp) { - list = dispatch_load_fp(fp); - fclose(fp); - mediaClose(); - - what |= dispatch_execute(list); - } - else { - if (!variable_get(VAR_NO_ERROR)) - msgConfirm("Configuration file '%s' not found.", cp); - variable_unset(VAR_INSTALL_CFG); - what |= DITEM_FAILURE; - mediaClose(); - } - return what; -} - -/* - * Create a menu based on available disk devices - */ -int -dispatch_load_menu(dialogMenuItem *self) -{ - DMenu *menu; - Device **devlist; - char *err; - int what, i, j, msize, count; - DeviceType dtypes[] = {DEVICE_TYPE_FLOPPY, DEVICE_TYPE_CDROM, - DEVICE_TYPE_DOS, DEVICE_TYPE_UFS, DEVICE_TYPE_USB}; - - fprintf(stderr, "dispatch_load_menu called\n"); - - msize = sizeof(DMenu) + (sizeof(dialogMenuItem) * 2); - count = 0; - err = NULL; - what = DITEM_SUCCESS; - - if ((menu = malloc(msize)) == NULL) { - err = "Failed to allocate memory for menu"; - goto errout; - } - - bcopy(&MenuConfig, menu, sizeof(DMenu)); - - bzero(&menu->items[count], sizeof(menu->items[0])); - menu->items[count].prompt = strdup("X Exit"); - menu->items[count].title = strdup("Exit this menu (returning to previous)"); - menu->items[count].fire = dmenuExit; - count++; - - for (i = 0; i < sizeof(dtypes) / sizeof(dtypes[0]); i++) { - if ((devlist = deviceFind(NULL, dtypes[i])) == NULL) { - fprintf(stderr, "No devices found for type %d\n", dtypes[i]); - continue; - } - - for (j = 0; devlist[j] != NULL; j++) { - fprintf(stderr, "device type %d device name %s\n", dtypes[i], devlist[j]->name); - msize += sizeof(dialogMenuItem); - if ((menu = realloc(menu, msize)) == NULL) { - err = "Failed to allocate memory for menu item"; - goto errout; - } - - bzero(&menu->items[count], sizeof(menu->items[0])); - menu->items[count].fire = cfgModuleFire; - - menu->items[count].prompt = strdup(devlist[j]->name); - menu->items[count].title = strdup(devlist[j]->description); - /* XXX: dialog(3) sucks */ - menu->items[count].aux = (long)devlist[j]; - count++; - } - } - - menu->items[count].prompt = NULL; - menu->items[count].title = NULL; - - dmenuOpenSimple(menu, FALSE); - - errout: - for (i = 0; i < count; i++) { - free(menu->items[i].prompt); - free(menu->items[i].title); - } - - free(menu); - - if (err != NULL) { - what |= DITEM_FAILURE; - if (!variable_get(VAR_NO_ERROR)) - msgConfirm(err); - } - - return (what); - -} - -static int -cfgModuleFire(dialogMenuItem *self) { - Device *d; - FILE *fp; - int what = DITEM_SUCCESS; - extern char *distWanted; - qelement *list; - char *cp; - - d = (Device *)self->aux; - - msgDebug("cfgModuleFire: User selected %s (%s)\n", self->prompt, d->devname); - - mediaClose(); - - cp = variable_get_value(VAR_INSTALL_CFG, - "Specify the name of a configuration file", 0); - if (!cp || !*cp) { - variable_unset(VAR_INSTALL_CFG); - what |= DITEM_FAILURE; - return what; - } - - distWanted = cp; - - mediaDevice = d; - if (!DEVICE_INIT(mediaDevice)) { - msgConfirm("Unable to mount filesystem."); - what |= DITEM_FAILURE; - mediaClose(); - return what; - } - msgDebug("getting fp for %s\n", cp); - - fp = DEVICE_GET(mediaDevice, cp, TRUE); - if (fp) { - msgDebug("opened OK, processing..\n"); - - list = dispatch_load_fp(fp); - fclose(fp); - mediaClose(); - - what |= dispatch_execute(list); - } else { - if (!variable_get(VAR_NO_ERROR)) - msgConfirm("Configuration file '%s' not found.", cp); - variable_unset(VAR_INSTALL_CFG); - what |= DITEM_FAILURE; - mediaClose(); - } - - return(what); - } diff --git a/usr.sbin/sysinstall/dist.c b/usr.sbin/sysinstall/dist.c deleted file mode 100644 index 8ef8544..0000000 --- a/usr.sbin/sysinstall/dist.c +++ /dev/null @@ -1,922 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/param.h> -#include <sys/mount.h> -#include <sys/time.h> -#include <sys/uio.h> -#include <ctype.h> -#include <signal.h> -#include <libutil.h> - -unsigned int Dists; -unsigned int DocDists; -unsigned int SrcDists; -unsigned int KernelDists; - -enum _disttype { DT_TARBALL, DT_SUBDIST, DT_PACKAGE }; - -typedef struct _dist { - char *my_name; - unsigned int *my_mask; - unsigned int my_bit; - enum _disttype my_type; - union { - char *my_string; /* DT_TARBALL & DT_PACKAGE */ - struct _dist *my_dist; /* DT_SUBDIST */ - } my_data; -} Distribution; - -static Distribution DocDistTable[]; -static Distribution KernelDistTable[]; -static Distribution SrcDistTable[]; - -#define DTE_TARBALL(name, mask, flag, directory) \ - { name, mask, DIST_ ## flag, DT_TARBALL, { directory } } -#define DTE_PACKAGE(name, mask, flag, package) \ - { name, mask, DIST_ ## flag, DT_PACKAGE, { package } } -#define DTE_SUBDIST(name, mask, flag, subdist) \ - { name, mask, DIST_ ## flag, DT_SUBDIST, { .my_dist = subdist } } -#define DTE_END { NULL, NULL, 0, 0, { NULL } } - -#define BASE_DIST (&DistTable[0]) - -/* The top-level distribution categories */ -static Distribution DistTable[] = { - DTE_TARBALL("base", &Dists, BASE, "/"), - DTE_SUBDIST("kernels", &Dists, KERNEL, KernelDistTable), - DTE_TARBALL("doc", &Dists, DOCUSERLAND, "/"), - DTE_SUBDIST("docproj", &Dists, DOC, DocDistTable), - DTE_TARBALL("games", &Dists, GAMES, "/"), - DTE_TARBALL("manpages", &Dists, MANPAGES, "/"), - DTE_TARBALL("catpages", &Dists, CATPAGES, "/"), - DTE_TARBALL("proflibs", &Dists, PROFLIBS, "/"), - DTE_TARBALL("dict", &Dists, DICT, "/"), - DTE_TARBALL("info", &Dists, INFO, "/"), -#if defined(__amd64__) || defined(__powerpc64__) - DTE_TARBALL("lib32", &Dists, LIB32, "/"), -#endif - DTE_SUBDIST("src", &Dists, SRC, SrcDistTable), - DTE_TARBALL("ports", &Dists, PORTS, "/usr"), - DTE_TARBALL("local", &Dists, LOCAL, "/"), - DTE_END, -}; - -/* The kernel distributions */ -static Distribution KernelDistTable[] = { - DTE_TARBALL(GENERIC_KERNEL_NAME, &KernelDists, KERNEL_GENERIC, "/boot"), - DTE_END, -}; - -/* The /usr/src distribution */ -static Distribution SrcDistTable[] = { - DTE_TARBALL("sbase", &SrcDists, SRC_BASE, "/usr/src"), - DTE_TARBALL("scddl", &SrcDists, SRC_CDDL, "/usr/src"), - DTE_TARBALL("scontrib", &SrcDists, SRC_CONTRIB, "/usr/src"), - DTE_TARBALL("scrypto", &SrcDists, SRC_SCRYPTO, "/usr/src"), - DTE_TARBALL("sgnu", &SrcDists, SRC_GNU, "/usr/src"), - DTE_TARBALL("setc", &SrcDists, SRC_ETC, "/usr/src"), - DTE_TARBALL("sgames", &SrcDists, SRC_GAMES, "/usr/src"), - DTE_TARBALL("sinclude", &SrcDists, SRC_INCLUDE, "/usr/src"), - DTE_TARBALL("skrb5", &SrcDists, SRC_SKERBEROS5, "/usr/src"), - DTE_TARBALL("slib", &SrcDists, SRC_LIB, "/usr/src"), - DTE_TARBALL("slibexec", &SrcDists, SRC_LIBEXEC, "/usr/src"), - DTE_TARBALL("srelease", &SrcDists, SRC_RELEASE, "/usr/src"), - DTE_TARBALL("sbin", &SrcDists, SRC_BIN, "/usr/src"), - DTE_TARBALL("ssecure", &SrcDists, SRC_SSECURE, "/usr/src"), - DTE_TARBALL("ssbin", &SrcDists, SRC_SBIN, "/usr/src"), - DTE_TARBALL("sshare", &SrcDists, SRC_SHARE, "/usr/src"), - DTE_TARBALL("ssys", &SrcDists, SRC_SYS, "/usr/src"), - DTE_TARBALL("subin", &SrcDists, SRC_UBIN, "/usr/src"), - DTE_TARBALL("susbin", &SrcDists, SRC_USBIN, "/usr/src"), - DTE_TARBALL("stools", &SrcDists, SRC_TOOLS, "/usr/src"), - DTE_TARBALL("srescue", &SrcDists, SRC_RESCUE, "/usr/src"), - DTE_END, -}; - -/* The Documentation distribution */ -static Distribution DocDistTable[] = { - DTE_PACKAGE("Bengali Documentation", &DocDists, DOC_BN, "bn-freebsd-doc"), - DTE_PACKAGE("Danish Documentation", &DocDists, DOC_DA, "da-freebsd-doc"), - DTE_PACKAGE("German Documentation", &DocDists, DOC_DE, "de-freebsd-doc"), - DTE_PACKAGE("Greek Documentation", &DocDists, DOC_EL, "el-freebsd-doc"), - DTE_PACKAGE("English Documentation", &DocDists, DOC_EN, "en-freebsd-doc"), - DTE_PACKAGE("Spanish Documentation", &DocDists, DOC_ES, "es-freebsd-doc"), - DTE_PACKAGE("French Documentation", &DocDists, DOC_FR, "fr-freebsd-doc"), - DTE_PACKAGE("Hungarian Documentation", &DocDists, DOC_HU, "hu-freebsd-doc"), - DTE_PACKAGE("Italian Documentation", &DocDists, DOC_IT, "it-freebsd-doc"), - DTE_PACKAGE("Japanese Documentation", &DocDists, DOC_JA, "ja-freebsd-doc"), - DTE_PACKAGE("Mongolian Documentation", &DocDists, DOC_MN, "mn-freebsd-doc"), - DTE_PACKAGE("Dutch Documentation", &DocDists, DOC_NL, "nl-freebsd-doc"), - DTE_PACKAGE("Polish Documentation", &DocDists, DOC_PL, "pl-freebsd-doc"), - DTE_PACKAGE("Portuguese Documentation", &DocDists, DOC_PT, "pt-freebsd-doc"), - DTE_PACKAGE("Russian Documentation", &DocDists, DOC_RU, "ru-freebsd-doc"), - DTE_PACKAGE("Serbian Documentation", &DocDists, DOC_SR, "sr-freebsd-doc"), - DTE_PACKAGE("Turkish Documentation", &DocDists, DOC_TR, "tr-freebsd-doc"), - DTE_PACKAGE("Simplified Chinese Documentation", &DocDists, DOC_ZH_CN, "zh_cn-freebsd-doc"), - DTE_PACKAGE("Traditional Chinese Documentation", &DocDists, DOC_ZH_TW, "zh_tw-freebsd-doc"), - DTE_END, -}; - -static int distMaybeSetPorts(dialogMenuItem *self); - -static void -distVerifyFlags(void) -{ - if (SrcDists) - Dists |= DIST_SRC; - if (KernelDists) - Dists |= DIST_KERNEL; - if (DocDists) - Dists |= DIST_DOC; - if (isDebug()) - msgDebug("Dist Masks: Dists: %0x, Srcs: %0x Kernels: %0x Docs: %0x\n", Dists, - SrcDists, KernelDists, DocDists); -} - -int -distReset(dialogMenuItem *self) -{ - Dists = 0; - DocDists = 0; - SrcDists = 0; - KernelDists = 0; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -int -distConfig(dialogMenuItem *self) -{ - char *cp; - - distReset(NULL); - - if ((cp = variable_get(VAR_DIST_MAIN)) != NULL) - Dists = atoi(cp); - - if ((cp = variable_get(VAR_DIST_DOC)) != NULL) - DocDists = atoi(cp); - - if ((cp = variable_get(VAR_DIST_SRC)) != NULL) - SrcDists = atoi(cp); - - if ((cp = variable_get(VAR_DIST_KERNEL)) != NULL) - KernelDists = atoi(cp); - - distVerifyFlags(); - return DITEM_SUCCESS | DITEM_REDRAW; -} - -int -selectKernel(void) -{ - return DIST_KERNEL_GENERIC; -} - -int -distSetDeveloper(dialogMenuItem *self) -{ - int i; - - distReset(NULL); - Dists = _DIST_DEVELOPER; - SrcDists = DIST_SRC_ALL; - KernelDists = selectKernel(); - i = distSetDoc(self); - i |= distMaybeSetPorts(self); - distVerifyFlags(); - return i; -} - -int -distSetKernDeveloper(dialogMenuItem *self) -{ - int i; - - distReset(NULL); - Dists = _DIST_DEVELOPER; - SrcDists = DIST_SRC_SYS | DIST_SRC_BASE; - KernelDists = selectKernel(); - i = distSetDoc(self); - i |= distMaybeSetPorts(self); - distVerifyFlags(); - return i; -} - -int -distSetUser(dialogMenuItem *self) -{ - int i; - - distReset(NULL); - Dists = _DIST_USER; - KernelDists = selectKernel(); - i = distSetDoc(self); - i |= distMaybeSetPorts(self); - distVerifyFlags(); - return i; -} - -int -distSetMinimum(dialogMenuItem *self) -{ - distReset(NULL); - Dists = DIST_BASE | DIST_KERNEL; - KernelDists = selectKernel(); - distVerifyFlags(); - return DITEM_SUCCESS | DITEM_REDRAW; -} - -int -distSetEverything(dialogMenuItem *self) -{ - int i; - - Dists = DIST_ALL; - SrcDists = DIST_SRC_ALL; - KernelDists = DIST_KERNEL_ALL; - DocDists = DIST_DOC_ALL; - i = distMaybeSetPorts(self); - distVerifyFlags(); - return i | DITEM_REDRAW; -} - -static int -distMaybeSetPorts(dialogMenuItem *self) -{ - dialog_clear_norefresh(); - if (!msgYesNo("Would you like to install the FreeBSD ports collection?\n\n" - "This will give you ready access to over 19,000 ported software packages,\n" - "at a cost of around 445MB of disk space when \"clean\" and possibly\n" - "much more than that when a lot of the distribution tarballs are loaded\n" - "(unless you have the extra discs available from a FreeBSD CD/DVD distribution\n" - "and can mount them on /cdrom, in which case this is far less of a problem).\n\n" - "The ports collection is a very valuable resource and well worth having\n" - "on your /usr partition, so it is advisable to say Yes to this option.\n\n" - "For more information on the ports collection & the latest ports, visit:\n" - " http://www.freebsd.org/ports\n")) - Dists |= DIST_PORTS; - else - Dists &= ~DIST_PORTS; - return DITEM_SUCCESS | DITEM_RESTORE; -} - -static Boolean -distSetByName(Distribution *dist, char *name) -{ - int i, status = FALSE; - - /* Loop through current set */ - for (i = 0; dist[i].my_name; i++) { - switch (dist[i].my_type) { - case DT_TARBALL: - case DT_PACKAGE: - if (!strcmp(dist[i].my_name, name)) { - *(dist[i].my_mask) |= dist[i].my_bit; - status = TRUE; - } - break; - case DT_SUBDIST: - if (distSetByName(dist[i].my_data.my_dist, name)) { - status = TRUE; - } - break; - } - } - distVerifyFlags(); - return status; -} - -static Boolean -distUnsetByName(Distribution *dist, char *name) -{ - int i, status = FALSE; - - /* Loop through current set */ - for (i = 0; dist[i].my_name; i++) { - switch (dist[i].my_type) { - case DT_TARBALL: - case DT_PACKAGE: - if (!strcmp(dist[i].my_name, name)) { - *(dist[i].my_mask) &= ~(dist[i].my_bit); - status = TRUE; - } - break; - case DT_SUBDIST: - if (distUnsetByName(dist[i].my_data.my_dist, name)) { - status = TRUE; - } - break; - } - } - return status; -} - -/* Just for the dispatch stuff */ -int -distSetCustom(dialogMenuItem *self) -{ - char *cp, *cp2, *tmp; - - if (!(tmp = variable_get(VAR_DISTS))) { - msgDebug("distSetCustom() called without %s variable set.\n", VAR_DISTS); - return DITEM_FAILURE; - } - - cp = alloca(strlen(tmp) + 1); - if (!cp) - msgFatal("Couldn't alloca() %d bytes!\n", (int)(strlen(tmp) + 1)); - strcpy(cp, tmp); - while (cp) { - if ((cp2 = index(cp, ' ')) != NULL) - *(cp2++) = '\0'; - if (!distSetByName(DistTable, cp)) - msgDebug("distSetCustom: Warning, no such release \"%s\"\n", cp); - cp = cp2; - } - distVerifyFlags(); - return DITEM_SUCCESS; -} - -/* Just for the dispatch stuff */ -int -distUnsetCustom(dialogMenuItem *self) -{ - char *cp, *cp2, *tmp; - - if (!(tmp = variable_get(VAR_DISTS))) { - msgDebug("distUnsetCustom() called without %s variable set.\n", VAR_DISTS); - return DITEM_FAILURE; - } - - cp = alloca(strlen(tmp) + 1); - if (!cp) - msgFatal("Couldn't alloca() %d bytes!\n", (int)(strlen(tmp) + 1)); - strcpy(cp, tmp); - while (cp) { - if ((cp2 = index(cp, ' ')) != NULL) - *(cp2++) = '\0'; - if (!distUnsetByName(DistTable, cp)) - msgDebug("distUnsetCustom: Warning, no such release \"%s\"\n", cp); - cp = cp2; - } - return DITEM_SUCCESS; -} - -int -distSetSrc(dialogMenuItem *self) -{ - int i; - - dialog_clear_norefresh(); - if (!dmenuOpenSimple(&MenuSrcDistributions, FALSE)) - i = DITEM_FAILURE; - else - i = DITEM_SUCCESS; - distVerifyFlags(); - return i | DITEM_RESTORE; -} - -int -distSetKernel(dialogMenuItem *self) -{ - int i; - - dialog_clear_norefresh(); - if (!dmenuOpenSimple(&MenuKernelDistributions, FALSE)) - i = DITEM_FAILURE; - else - i = DITEM_SUCCESS; - distVerifyFlags(); - return i | DITEM_RESTORE; -} - -static Boolean got_intr = FALSE; - -/* timeout handler */ -static void -handle_intr(int sig) -{ - msgDebug("User generated interrupt.\n"); - got_intr = TRUE; -} - -static int -check_for_interrupt(void) -{ - if (got_intr) { - got_intr = FALSE; - return TRUE; - } - return FALSE; -} - -/* - * translate distribution filename to lower case - * as doTARBALL does in release/Makefile - */ -static void -translateDist(char trdist[PATH_MAX], const char *dist) -{ - int j; - - /* - * translate distribution filename to lower case - * as doTARBALL does in release/Makefile - */ - for (j = 0; j < PATH_MAX-1 && dist[j] != '\0'; j++) - trdist[j] = tolower(dist[j]); - trdist[j] = '\0'; -} - -/* - * Try to get distribution as multiple pieces, locating and parsing an - * info file which tells us how many we need for this distribution. - */ -static Boolean -distExtractTarball(char *path, char *dist, char *my_dir, int is_base) -{ - char *buf = NULL, trdist[PATH_MAX], fname[PATH_MAX]; - struct timeval start, stop; - int j, status, total, intr; - int cpid, zpid, fd2, chunk, numchunks; - properties dist_attr = NULL; - const char *tmp; - FILE *fp; - - translateDist(trdist, dist); - if (isDebug()) - msgDebug("%s: path \"%s\" dist \"%s\" trdist \"%s\" " - "my_dir \"%s\" %sis_base\n", - __func__, path, dist, trdist, my_dir, is_base ? "" : "!"); - - status = TRUE; - numchunks = 0; - snprintf(fname, sizeof (fname), "%s/%s.inf", path, trdist); - -getinfo: - fp = DEVICE_GET(mediaDevice, fname, TRUE); - intr = check_for_interrupt(); - if (fp == (FILE *)IO_ERROR || intr || !mediaDevice) { - if (isDebug()) - msgDebug("%s: fname %s fp: %p, intr: %d mediaDevice: %p\n", - __func__, fname, fp, intr, mediaDevice); - /* Hard error, can't continue */ - if (!msgYesNo("Unable to open %s: %s.\nReinitialize media?", - fname, !intr ? "I/O error." : "User interrupt.")) { - DEVICE_SHUTDOWN(mediaDevice); - if (!DEVICE_INIT(mediaDevice)) - return (FALSE); - goto getinfo; - } else - return (FALSE); - } else if (fp == NULL) { - /* No attributes file, so try as a single file. */ - snprintf(fname, sizeof(fname), "%s/%s.%s", path, trdist, - USE_GZIP ? "tgz" : "tbz"); - if (isDebug()) - msgDebug("%s: fp is NULL (1) fname: %s\n", __func__, fname); - /* - * Passing TRUE as 3rd parm to get routine makes this a "probing" - * get, for which errors are not considered too significant. - */ - getsingle: - fp = DEVICE_GET(mediaDevice, fname, TRUE); - intr = check_for_interrupt(); - if (fp == (FILE *)IO_ERROR || intr || !mediaDevice) { - if (isDebug()) - msgDebug("%s: fname %s fp: %p, intr: %d mediaDevice: %p\n", - __func__, fname, fp, intr, mediaDevice); - /* Hard error, can't continue */ - msgConfirm("Unable to open %s: %s", fname, - !intr ? "I/O error" : "User interrupt"); - DEVICE_SHUTDOWN(mediaDevice); - if (!DEVICE_INIT(mediaDevice)) - return (FALSE); - goto getsingle; - } else if (fp != NULL) { - char *dir = root_bias(my_dir); - - dialog_clear_norefresh(); - msgNotify("Extracting %s into %s directory...", dist, dir); - status = mediaExtractDist(dir, dist, fp); - fclose(fp); - return (status); - } else { - if (isDebug()) - msgDebug("%s: fp is NULL (2) fname %s\n", __func__, fname); - return (FALSE); - } - } - - if (isDebug()) - msgDebug("Parsing attributes file for distribution %s\n", dist); - - dist_attr = properties_read(fileno(fp)); - intr = check_for_interrupt(); - if (intr || !dist_attr) { - if (isDebug()) - msgDebug("%s: intr %d dist_attr %p\n", __func__, intr, dist_attr); - msgConfirm("Cannot parse information file for the %s distribution: %s\n" - "Please verify that your media is valid and try again.", - dist, !intr ? "I/O error" : "User interrupt"); - } else { - tmp = property_find(dist_attr, "Pieces"); - if (tmp) - numchunks = strtol(tmp, 0, 0); - } - fclose(fp); - if (!numchunks) { - if (isDebug()) - msgDebug("%s: numchunks is zero\n", __func__); - return (TRUE); - } - - if (isDebug()) - msgDebug("Attempting to extract distribution from %u chunks.\n", - numchunks); - - total = 0; - (void)gettimeofday(&start, (struct timezone *)NULL); - - /* We have one or more chunks, initialize unpackers... */ - mediaExtractDistBegin(root_bias(my_dir), &fd2, &zpid, &cpid); - - /* And go for all the chunks */ - dialog_clear_norefresh(); - for (chunk = 0; chunk < numchunks; chunk++) { - int n, retval, last_msg, chunksize, realsize; - char prompt[80]; - - last_msg = 0; - - getchunk: - snprintf(fname, sizeof(fname), "cksum.%c%c", (chunk / 26) + 'a', - (chunk % 26) + 'a'); - tmp = property_find(dist_attr, fname); - chunksize = 0; - if (tmp) { - tmp = index(tmp, ' '); - chunksize = strtol(tmp, 0, 0); - } - snprintf(fname, sizeof(fname), "%s/%s.%c%c", path, trdist, (chunk / 26) + 'a', - (chunk % 26) + 'a'); - if (isDebug()) - msgDebug("trying for piece %d of %d: %s\n", chunk + 1, numchunks, - fname); - fp = DEVICE_GET(mediaDevice, fname, FALSE); - intr = check_for_interrupt(); - /* XXX: this can't work if we get an I/O error */ - if (fp <= (FILE *)NULL || intr) { - if (fp == NULL) - msgConfirm("Failed to find %s on this media. Reinitializing media.", fname); - else - msgConfirm("Failed to retrieve piece file %s.\n" - "%s: Reinitializing media.", - fname, !intr ? "I/O error" : "User interrupt"); - DEVICE_SHUTDOWN(mediaDevice); - if (!DEVICE_INIT(mediaDevice)) - goto punt; - else - goto getchunk; - } - - snprintf(prompt, sizeof(prompt), "Extracting %s into %s directory...", - dist, root_bias(my_dir)); - dialog_gauge("Progress", prompt, 8, 15, 6, 50, - (chunk + 1) * 100 / numchunks); - - buf = safe_realloc(buf, chunksize); - realsize = 0; - while (1) { - int seconds; - - n = fread(buf + realsize, 1, BUFSIZ, fp); - if (check_for_interrupt()) { - msgConfirm("Media read error: User interrupt."); - fclose(fp); - goto punt; - } else if (n <= 0) - break; - total += n; - realsize += n; - - /* Print statistics about how we're doing */ - (void) gettimeofday(&stop, (struct timezone *)0); - stop.tv_sec = stop.tv_sec - start.tv_sec; - stop.tv_usec = stop.tv_usec - start.tv_usec; - if (stop.tv_usec < 0) - stop.tv_sec--, stop.tv_usec += 1000000; - seconds = stop.tv_sec + (stop.tv_usec / 1000000.0); - if (!seconds) - seconds = 1; - - if (seconds != last_msg) { - last_msg = seconds; - msgInfo("%10d bytes read from %s dist, chunk %2d of %2d @ %.1f KBytes/sec.", - total, dist, chunk + 1, numchunks, - (total / seconds) / 1000.0); - } - } - fclose(fp); - - if (!chunksize || (realsize == chunksize)) { - /* No substitution necessary */ - retval = write(fd2, buf, realsize); - if (retval != realsize) { - fclose(fp); - dialog_clear_norefresh(); - msgConfirm("Write failure on transfer! (wrote %d bytes of %d bytes)", retval, realsize); - goto punt; - } - } else { - for (j = 0; j < realsize; j++) { - /* On finding CRLF, skip the CR; don't exceed end of buffer. */ - if ((buf[j] != 0x0d) || (j == total - 1) || (buf[j + 1] != 0x0a)) { - retval = write(fd2, buf + j, 1); - if (retval != 1) { - fclose(fp); - dialog_clear_norefresh(); - msgConfirm("Write failure on transfer! (wrote %d bytes of %d bytes)", j, chunksize); - goto punt; - } - } - } - } - } - goto done; - -punt: - status = FALSE; -done: - properties_free(dist_attr); - close(fd2); - if (status != FALSE) - status = mediaExtractDistEnd(zpid, cpid); - else - (void)mediaExtractDistEnd(zpid, cpid); - - safe_free(buf); - return (status); -} - -static Boolean -distExtract(char *parent, Distribution *me) -{ - int i, status; - char *path, *dist; - WINDOW *w = savescr(); - struct sigaction old, new; - int canceled = 0; - - status = TRUE; - if (isDebug()) - msgDebug("distExtract: parent: %s, me: %s\n", parent ? parent : "(none)", me->my_name); - - /* Make ^C fake a sudden timeout */ - new.sa_handler = handle_intr; - new.sa_flags = 0; - (void)sigemptyset(&new.sa_mask); - dialog_clear_norefresh(); - dialog_msgbox("Please Wait", "Extracting all requested distributions...", -1, -1, 0); - sigaction(SIGINT, &new, &old); - - /* Loop through to see if we're in our parent's plans */ - for (i = 0; me[i].my_name && canceled == 0; i++) { - dist = me[i].my_name; - path = parent ? parent : dist; - - /* If our bit isn't set, go to the next */ - if (!(me[i].my_bit & *(me[i].my_mask))) - continue; - - switch (me[i].my_type) { - case DT_SUBDIST: - /* Recurse if we actually have a sub-distribution */ - status = distExtract(dist, me[i].my_data.my_dist); - if (!status) { - dialog_clear_norefresh(); - msgConfirm("Unable to transfer all components of the %s distribution.\n" - "You may wish to switch media types and try again.\n", - me[i].my_name); - } - break; - case DT_PACKAGE: - dialog_clear_norefresh(); - msgNotify("Installing %s distribution...", dist); - status = (package_add(me[i].my_data.my_string) == DITEM_SUCCESS); - if (!status) - dialog_clear_norefresh(); - break; - case DT_TARBALL: - status = distExtractTarball(path, dist, me[i].my_data.my_string, - &me[i] == BASE_DIST); - if (!status) { - dialog_clear_norefresh(); - if (me[i].my_bit != DIST_LOCAL) { - status = msgYesNo("Unable to transfer the %s distribution from\n%s.\n\n" - "Do you want to try to retrieve it again?", - me[i].my_name, mediaDevice->name); - if (status == 0) - --i; - else - canceled = 1; - - status = FALSE; - } else { - // ignore any failures with DIST_LOCAL - status = TRUE; - } - } - break; - } - - /* - * If extract was successful, remove ourselves from further - * consideration. - */ - if (status) - *(me[i].my_mask) &= ~(me[i].my_bit); - } - - sigaction(SIGINT, &old, NULL); /* Restore signal handler */ - restorescr(w); - return status; -} - -int -distSetDoc(dialogMenuItem *self) -{ - int i; - - /* Assume no docs for non-interactive installs. */ - if (variable_get(VAR_NONINTERACTIVE)) - return DITEM_SUCCESS | DITEM_RESTORE; - - dialog_clear_norefresh(); - if (!dmenuOpenSimple(&MenuDocInstall, FALSE)) - i = DITEM_FAILURE; - else - i = DITEM_SUCCESS; - - distVerifyFlags(); - - return i | DITEM_RESTORE; -} - -int -distSetDocMenu(dialogMenuItem *self) -{ - int i, status; - WINDOW *w; - - if (RunningAsInit && !strstr(variable_get(SYSTEM_STATE), "install")) { - msgConfirm("This option may only be used after the system is installed, sorry!"); - return DITEM_FAILURE; - } - - dialog_clear_norefresh(); - if (!dmenuOpenSimple(&MenuDocInstall, FALSE)) - i = DITEM_FAILURE; - else - i = DITEM_SUCCESS; - - distVerifyFlags(); - - dialog_clear_norefresh(); - w = savescr(); - msgNotify("Attempting to install all selected documentations..."); - - for (i = 0; DocDistTable[i].my_name; i++) { - if (!(DocDistTable[i].my_bit & *(DocDistTable[i].my_mask))) - continue; - dialog_clear_norefresh(); - msgNotify("Installing %s distribution...", DocDistTable[i].my_name); - status = (package_add(DocDistTable[i].my_data.my_string) == DITEM_SUCCESS); - if (!status) - break; - } - - dialog_clear_norefresh(); - - restorescr(w); - return (status ? DITEM_SUCCESS : DITEM_FAILURE); -} - -static void -printSelected(char *buf, int selected, Distribution *me, int *col) -{ - int i; - - /* Loop through to see if we're in our parent's plans */ - for (i = 0; me[i].my_name; i++) { - - /* If our bit isn't set, go to the next */ - if (!(me[i].my_bit & selected)) - continue; - - *col += strlen(me[i].my_name); - if (*col > 50) { - *col = 0; - strcat(buf, "\n"); - } - sprintf(&buf[strlen(buf)], " %s", me[i].my_name); - - /* Recurse if have a sub-distribution */ - if (me[i].my_type == DT_SUBDIST) - printSelected(buf, *(me[i].my_mask), me[i].my_data.my_dist, col); - } -} - -int -distExtractAll(dialogMenuItem *self) -{ - int old_dists, old_kernel, status = DITEM_SUCCESS; - char buf[512]; - int extract_status = TRUE; - WINDOW *w; - - /* paranoia */ - if (!Dists) { - if (!dmenuOpenSimple(&MenuSubDistributions, FALSE) || !Dists) - return DITEM_FAILURE; - } - - if (!mediaVerify() || !DEVICE_INIT(mediaDevice)) - return DITEM_FAILURE; - - old_dists = Dists; - old_kernel = KernelDists; - distVerifyFlags(); - - dialog_clear_norefresh(); - w = savescr(); - msgNotify("Attempting to install all selected distributions.."); - - extract_status = distExtract(NULL, DistTable); - - dialog_clear_norefresh(); - /* Only do base fixup if base dist was successfully extracted */ - if ((old_dists & DIST_BASE) && !(Dists & DIST_BASE)) - status |= installFixupBase(self); - /* Only do kernel fixup if kernel dist was successfully extracted */ - if ((old_dists & DIST_KERNEL) && !(Dists & DIST_KERNEL)) - status |= installFixupKernel(self, old_kernel); - - /* Clear any local dist flags now */ - Dists &= ~DIST_LOCAL; - - if (Dists) { - int col = 0; - - buf[0] = '\0'; - dialog_clear_norefresh(); - printSelected(buf, Dists, DistTable, &col); - dialog_clear_norefresh(); - if (col) { - msgConfirm("Couldn't extract the following distributions. This may\n" - "be because they were not available on the installation\n" - "media you've chosen:\n\n\t%s", buf); - } - } - restorescr(w); - - if (extract_status == FALSE) - status = FALSE; - - return status; -} diff --git a/usr.sbin/sysinstall/dist.h b/usr.sbin/sysinstall/dist.h deleted file mode 100644 index 0fd004f..0000000 --- a/usr.sbin/sysinstall/dist.h +++ /dev/null @@ -1,92 +0,0 @@ -/* $FreeBSD$ */ - -#ifndef _DIST_H_INCLUDE -#define _DIST_H_INCLUDE - -/* Bitfields for distributions - hope we never have more than 32! :-) */ -#define DIST_BASE 0x00001 -#define DIST_GAMES 0x00002 -#define DIST_MANPAGES 0x00004 -#define DIST_PROFLIBS 0x00008 -#define DIST_DICT 0x00010 -#define DIST_SRC 0x00020 -/* Documentation from FreeBSD docproj */ -#define DIST_DOC 0x00040 -#define DIST_INFO 0x00080 -#define DIST_CATPAGES 0x00200 -#define DIST_PORTS 0x00400 -#define DIST_LOCAL 0x00800 -#if defined(__amd64__) || defined(__powerpc64__) -#define DIST_LIB32 0x01000 -#endif -#define DIST_KERNEL 0x02000 -/* Userland documentation */ -#define DIST_DOCUSERLAND 0x04000 -#define DIST_ALL 0xFFFFF - -/* Subtypes for DOC packages */ -#define DIST_DOC_BN 0x00001 -#define DIST_DOC_DA 0x00002 -#define DIST_DOC_DE 0x00004 -#define DIST_DOC_EL 0x00008 -#define DIST_DOC_EN 0x00010 -#define DIST_DOC_ES 0x00020 -#define DIST_DOC_FR 0x00040 -#define DIST_DOC_HU 0x00080 -#define DIST_DOC_IT 0x00100 -#define DIST_DOC_JA 0x00200 -#define DIST_DOC_MN 0x00400 -#define DIST_DOC_NL 0x00800 -#define DIST_DOC_PL 0x01000 -#define DIST_DOC_PT 0x02000 -#define DIST_DOC_RU 0x04000 -#define DIST_DOC_SR 0x08000 -#define DIST_DOC_TR 0x10000 -#define DIST_DOC_ZH_CN 0x20000 -#define DIST_DOC_ZH_TW 0x40000 -#define DIST_DOC_ALL 0xFFFFF - -/* Subtypes for SRC distribution */ -#define DIST_SRC_BASE 0x00001 -#define DIST_SRC_CONTRIB 0x00002 -#define DIST_SRC_GNU 0x00004 -#define DIST_SRC_ETC 0x00008 -#define DIST_SRC_GAMES 0x00010 -#define DIST_SRC_INCLUDE 0x00020 -#define DIST_SRC_LIB 0x00040 -#define DIST_SRC_LIBEXEC 0x00080 -#define DIST_SRC_TOOLS 0x00100 -#define DIST_SRC_RELEASE 0x00200 -#define DIST_SRC_SBIN 0x00400 -#define DIST_SRC_SHARE 0x00800 -#define DIST_SRC_SYS 0x01000 -#define DIST_SRC_UBIN 0x02000 -#define DIST_SRC_USBIN 0x04000 -#define DIST_SRC_BIN 0x08000 -#define DIST_SRC_SCRYPTO 0x10000 -#define DIST_SRC_SSECURE 0x20000 -#define DIST_SRC_SKERBEROS5 0x40000 -#define DIST_SRC_RESCUE 0x80000 -#define DIST_SRC_CDDL 0x100000 -#define DIST_SRC_ALL 0x3FFFFF - -/* Subtypes for KERNEL distribution */ -#define DIST_KERNEL_GENERIC 0x00001 -#define DIST_KERNEL_SMP 0x00002 -#define DIST_KERNEL_ALL 0xFFFFF - -#ifdef __powerpc64__ -#define GENERIC_KERNEL_NAME "GENERIC64" -#else -#define GENERIC_KERNEL_NAME "GENERIC" -#endif - -/* Canned distribution sets */ - -#define _DIST_USER \ - ( DIST_BASE | DIST_KERNEL | DIST_DOC | DIST_DOCUSERLAND | DIST_MANPAGES | DIST_DICT ) - -#define _DIST_DEVELOPER \ - ( _DIST_USER | DIST_PROFLIBS | DIST_INFO | DIST_SRC ) - -#endif /* _DIST_H_INCLUDE */ diff --git a/usr.sbin/sysinstall/dmenu.c b/usr.sbin/sysinstall/dmenu.c deleted file mode 100644 index 1aef667..0000000 --- a/usr.sbin/sysinstall/dmenu.c +++ /dev/null @@ -1,393 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated for what's essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/param.h> -#include <errno.h> - -#define MAX_MENU 15 - -static Boolean exited; - -int -dmenuDisplayFile(dialogMenuItem *tmp) -{ - systemDisplayHelp((char *)tmp->data); - return DITEM_SUCCESS; -} - -int -dmenuSubmenu(dialogMenuItem *tmp) -{ - return (dmenuOpenSimple((DMenu *)(tmp->data), FALSE) ? DITEM_SUCCESS : DITEM_FAILURE); -} - -int -dmenuSystemCommand(dialogMenuItem *self) -{ - WINDOW *w = NULL; /* Keep lint happy */ - - /* If aux is set, the command is known not to produce any screen-spoiling output */ - if (!self->aux) - w = savescr(); - systemExecute((char *)self->data); - if (!self->aux) - restorescr(w); - return DITEM_SUCCESS; -} - -int -dmenuSystemCommandBox(dialogMenuItem *tmp) -{ - WINDOW *w = savescr(); - - use_helpfile(NULL); - use_helpline("Select OK to dismiss this dialog"); - dialog_prgbox(tmp->title, (char *)tmp->data, 22, 76, 1, 1); - restorescr(w); - return DITEM_SUCCESS; -} - -int -dmenuExit(dialogMenuItem *tmp) -{ - exited = TRUE; - return DITEM_LEAVE_MENU; -} - -int -dmenuSetVariable(dialogMenuItem *tmp) -{ - variable_set((char *)tmp->data, *((char *)tmp->data) != '_'); - return DITEM_SUCCESS; -} - -int -dmenuSetVariables(dialogMenuItem *tmp) -{ - char *cp1, *cp2; - char *copy = strdup((char *)tmp->data); - - for (cp1 = copy; cp1 != NULL;) { - cp2 = index(cp1, ','); - if (cp2 != NULL) *cp2++ = '\0'; - variable_set(cp1, *cp1 != '_'); - cp1 = cp2; - } - free(copy); - return DITEM_SUCCESS; -} - -int -dmenuSetCountryVariable(dialogMenuItem *tmp) -{ - variable_set((char *)tmp->data, FALSE); -#ifdef WITH_SYSCONS - /* Don't prompt the user for a keymap if they're using the default locale. */ - if (!strcmp(variable_get(VAR_COUNTRY), DEFAULT_COUNTRY)) - return DITEM_SUCCESS; - - return keymapMenuSelect(tmp); -#else - return DITEM_SUCCESS; -#endif -} - -int -dmenuSetKmapVariable(dialogMenuItem *tmp) -{ - char *lang; - int err; - - variable_set((char *)tmp->data, TRUE); - lang = variable_get(VAR_KEYMAP); - if (lang != NULL) - { - err = loadKeymap(lang); - if (err == -1) - msgConfirm("No appropriate keyboard map found, sorry."); - else if (err == -2) - msgConfirm("Error installing keyboard map, errno = %d.", errno); - } - return DITEM_SUCCESS; -} - -int -dmenuToggleVariable(dialogMenuItem *tmp) -{ - char *var, *cp; - int status; - - if (!(var = strdup((char *)tmp->data))) { - msgConfirm("Incorrect data field for `%s'!", tmp->title); - return DITEM_FAILURE; - } - if (!(cp = index(var, '='))) { - msgConfirm("Data field for %s is not in var=value format!", tmp->title); - return DITEM_FAILURE; - } - status = variable_check(var); - *cp = '\0'; - variable_set2(var, status ? "NO" : "YES", *var != '_'); - free(var); - return DITEM_SUCCESS; -} - -int -dmenuISetVariable(dialogMenuItem *tmp) -{ - char *ans, *p, *var; - - if (!(var = strdup((char *)tmp->data))) { - msgConfirm("Incorrect data field for `%s'!", tmp->title); - return DITEM_FAILURE; - } - if ((p = index(var, '=')) != NULL) - *p = '\0'; - ans = msgGetInput(variable_get(var), tmp->title, 1); - if (!ans) { - free(var); - return DITEM_FAILURE; - } else if (!*ans) - variable_unset(var); - else - variable_set2(var, ans, *var != '_'); - free(var); - return DITEM_SUCCESS; -} - -int -dmenuSetFlag(dialogMenuItem *tmp) -{ - if (*((unsigned int *)tmp->data) & tmp->aux) - *((unsigned int *)tmp->data) &= ~tmp->aux; - else - *((unsigned int *)tmp->data) |= tmp->aux; - return DITEM_SUCCESS; -} - -int -dmenuSetValue(dialogMenuItem *tmp) -{ - *((unsigned int *)tmp->data) = tmp->aux; - return DITEM_SUCCESS; -} - -/* Traverse menu but give user no control over positioning */ -Boolean -dmenuOpenSimple(DMenu *menu, Boolean buttons) -{ - int choice, scroll, curr, max; - - choice = scroll = curr = max = 0; - return dmenuOpen(menu, &choice, &scroll, &curr, &max, buttons); -} - -/* Work functions for the state hook */ -int -dmenuFlagCheck(dialogMenuItem *item) -{ - return (*((unsigned int *)item->data) & item->aux); -} - -int -dmenuVarCheck(dialogMenuItem *item) -{ - char *w; - - w = (char *)item->aux; - if (!w) - w = (char *)item->data; - return variable_check(w); -} - -int -dmenuVarsCheck(dialogMenuItem *item) -{ - int res, init; - char *w, *cp1, *cp2; - char *copy; - - w = (char *)item->aux; - if (!w) - w = (char *)item->data; - if (!w) - return FALSE; - - copy = strdup(w); - res = TRUE; - init = FALSE; - for (cp1 = copy; cp1 != NULL;) { - init = TRUE; - cp2 = index(cp1, ','); - if (cp2 != NULL) - *cp2++ = '\0'; - res = res && variable_check(cp1); - cp1 = cp2; - } - free(copy); - return res && init; -} - -int -dmenuRadioCheck(dialogMenuItem *item) -{ - return (*((int *)item->data) == item->aux); -} - -static int -menu_height(DMenu *menu, int n) -{ - int max; - char *t; - - max = MAX_MENU; - if (StatusLine > 24) - max += StatusLine - 24; - for (t = menu->prompt; *t; t++) { - if (*t == '\n') - --max; - } - return n > max ? max : n; -} - -/* Find a menu item that matches any field. */ -int -dmenuFindItem(DMenu *menu, const char *prompt, const char *title, void *data) -{ - dialogMenuItem *items = menu->items; - int i; - - for (i = 0; items[i].prompt; ++i) - if ((prompt && !strcmp(items[i].prompt, prompt)) || - (title && !strcmp(items[i].title, title)) || - (data && items[i].data == data)) - return i; - - return -1; -} - -/* Set the default item for a menu by index and scroll to it. */ -void -dmenuSetDefaultIndex(DMenu *menu, int *choice, int *scroll, int *curr, int *max) -{ - int nitem; - int height; - - *curr = *max = 0; - - for (nitem = 0; menu->items[nitem].prompt; ++nitem); - - height = menu_height(menu, nitem); - if (*choice > height) - { - *scroll = MIN(nitem - height, *choice); - *choice = *choice - *scroll; - } - else - *scroll = 0; -} - -/* Set the default menu item that matches any field and scroll to it. */ -Boolean -dmenuSetDefaultItem(DMenu *menu, const char *prompt, const char *title, void *data, - int *choice, int *scroll, int *curr, int *max) -{ - if ((*choice = dmenuFindItem(menu, prompt, title, data)) != -1) - { - dmenuSetDefaultIndex(menu, choice, scroll, curr, max); - return TRUE; - } - else - { - *choice = *scroll = *curr = *max = 0; - return FALSE; - } -} - -/* Traverse over an internal menu */ -Boolean -dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max, Boolean buttons) -{ - int n, rval = 0; - dialogMenuItem *items; - - items = menu->items; - if (buttons) - items += 2; - /* Count up all the items */ - for (n = 0; items[n].title; n++); - - while (1) { - char buf[FILENAME_MAX]; - WINDOW *w = savescr(); - - /* Any helpful hints, put 'em up! */ - use_helpline(menu->helpline); - use_helpfile(systemHelpFile(menu->helpfile, buf)); - dialog_clear_norefresh(); - /* Pop up that dialog! */ - if (menu->type & DMENU_NORMAL_TYPE) - rval = dialog_menu((u_char *)menu->title, (u_char *)menu->prompt, - -1, -1, menu_height(menu, n), -n, items, - (char *)(uintptr_t)buttons, choice, scroll); - - else if (menu->type & DMENU_RADIO_TYPE) - rval = dialog_radiolist((u_char *)menu->title, - (u_char *)menu->prompt, -1, -1, menu_height(menu, n), -n, - items, (char *)(uintptr_t)buttons); - - else if (menu->type & DMENU_CHECKLIST_TYPE) - rval = dialog_checklist((u_char *)menu->title, - (u_char *)menu->prompt, -1, -1, menu_height(menu, n), -n, - items, (char *)(uintptr_t)buttons); - else - msgFatal("Menu: `%s' is of an unknown type\n", menu->title); - if (exited) { - exited = FALSE; - restorescr(w); - return TRUE; - } - else if (rval) { - restorescr(w); - return FALSE; - } - else if (menu->type & DMENU_SELECTION_RETURNS) { - restorescr(w); - return TRUE; - } - } -} diff --git a/usr.sbin/sysinstall/doc.c b/usr.sbin/sysinstall/doc.c deleted file mode 100644 index a35a68e..0000000 --- a/usr.sbin/sysinstall/doc.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated for what's essentially a complete rewrite. - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "sysinstall.h" - -/* - * This is called from the main menu. Try to find a copy of Lynx from somewhere - * and fire it up on the first copy of the handbook we can find. - */ -int -docBrowser(dialogMenuItem *self) -{ - int ret; - char *browser = variable_get(VAR_BROWSER_PACKAGE); - - if (RunningAsInit && !strstr(variable_get(SYSTEM_STATE), "install")) { - msgConfirm("This option may only be used after the system is installed, sorry!"); - return DITEM_FAILURE; - } - - /* First, make sure we have whatever browser we've chosen is here */ - if (!package_installed(browser)) { - ret = package_add(browser); - if (DITEM_STATUS(ret) != DITEM_SUCCESS) { - msgConfirm("Unable to install the %s HTML browser package. You may\n" - "wish to verify that your media is configured correctly and\n" - "try again.", browser); - return ret; - } - } - - if (!file_executable(variable_get(VAR_BROWSER_BINARY))) { - if (!msgYesNo("Hmmm. The %s package claims to have installed, but I can't\n" - "find its binary in %s! You may wish to try a different\n" - "location to load the package from (go to Media menu) and see if that\n" - "makes a difference.\n\n" - "I suggest that we remove the version that was extracted since it does\n" - "not appear to be correct. Would you like me to do that now?", - browser, variable_get(VAR_BROWSER_BINARY))) - vsystem("pkg_delete %s %s", !strcmp(variable_get(VAR_CPIO_VERBOSITY), "high") ? "-v" : "", browser); - return DITEM_FAILURE; - } - - /* Run browser on the appropriate doc */ - if (dmenuOpenSimple(&MenuHTMLDoc, FALSE)) - return DITEM_SUCCESS; - else - return DITEM_FAILURE; -} - -/* Try to show one of the documents requested from the HTML doc menu */ -int -docShowDocument(dialogMenuItem *self) -{ - char tmp[512], target[512]; - char *where, *browser = variable_get(VAR_BROWSER_BINARY); - char *str = self->prompt; - - if (!file_executable(browser)) { - msgConfirm("Can't find the browser in %s! Please ensure that it's\n" - "properly set in the Options editor.", browser); - return DITEM_FAILURE; - } - /* Default to Home */ - where = strcpy(target, "http://www.freebsd.org"); - if (strstr(str, "Other")) { - where = msgGetInput("http://www.freebsd.org", "Please enter the URL of the location you wish to visit."); - if (where) - strcpy(target, where); - } - else if (strstr(str, "FAQ")) { - where = strcpy(target, "/usr/local/share/doc/freebsd/faq/index.html"); - if (!file_readable(target)) - where = strcpy(target, "http://www.freebsd.org/doc/en_US.ISO8859-1/books/faq"); - } - else if (strstr(str, "Handbook")) { - where = strcpy(target, "/usr/local/share/doc/freebsd/handbook/index.html"); - if (!file_readable(target)) - where = strcpy(target, "http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook"); - } - if (where) { - sprintf(tmp, "%s %s", browser, target); - systemExecute(tmp); - return DITEM_SUCCESS; - } - else { - msgConfirm("Hmmmmm! I can't seem to access the documentation you selected!\n" - "Have you installed the english documentation? Is your network connected?"); - return DITEM_FAILURE; - } -} diff --git a/usr.sbin/sysinstall/dos.c b/usr.sbin/sysinstall/dos.c deleted file mode 100644 index 564e33f..0000000 --- a/usr.sbin/sysinstall/dos.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * Copyright (c) 1995 - * Gary J Palmer. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/stat.h> -#include <sys/errno.h> -#include <sys/param.h> -#include <sys/wait.h> -#include <unistd.h> -#include <fcntl.h> -#include <grp.h> -#define MSDOSFS -#include <sys/mount.h> -#include <fs/msdosfs/msdosfsmount.h> -#undef MSDOSFS - -static Boolean DOSMounted; -static char mountpoint[] = "/dist"; - -Boolean -mediaInitDOS(Device *dev) -{ - struct msdosfs_args args; - - if (DOSMounted) - return TRUE; - - Mkdir(mountpoint); - memset(&args, 0, sizeof(args)); - args.fspec = dev->devname; - args.uid = args.gid = 0; - args.mask = 0777; - - if (mount("msdosfs", mountpoint, MNT_RDONLY, (caddr_t)&args) == -1) { - msgConfirm("Error mounting %s on %s: %s (%u)", args.fspec, mountpoint, strerror(errno), errno); - return FALSE; - } - DOSMounted = TRUE; - return TRUE; -} - -FILE * -mediaGetDOS(Device *dev, char *file, Boolean probe) -{ - return mediaGenericGet(mountpoint, file); -} - -void -mediaShutdownDOS(Device *dev) -{ - if (!DOSMounted) - return; - if (unmount(mountpoint, MNT_FORCE) != 0) - msgConfirm("Could not unmount the DOS partition from %s: %s", - mountpoint, strerror(errno)); - else - DOSMounted = FALSE; - return; -} diff --git a/usr.sbin/sysinstall/floppy.c b/usr.sbin/sysinstall/floppy.c deleted file mode 100644 index 0101bde..0000000 --- a/usr.sbin/sysinstall/floppy.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * Copyright (c) 1995 - * Gary J Palmer. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* These routines deal with getting things off of floppy media */ - -#include "sysinstall.h" -#include <sys/fcntl.h> -#include <sys/stat.h> -#include <sys/errno.h> -#include <sys/param.h> -#include <sys/wait.h> -#include <unistd.h> -#include <grp.h> - -#define MSDOSFS -#include <sys/mount.h> -#include <fs/msdosfs/msdosfsmount.h> -#undef MSDOSFS - -#include <ufs/ufs/ufsmount.h> -static Boolean floppyMounted; - -char *distWanted; -static char mountpoint[] = "/dist"; - -Boolean -mediaInitFloppy(Device *dev) -{ - struct msdosfs_args dosargs; - struct ufs_args u_args; - char *mp; - - if (floppyMounted) - return TRUE; - - mp = dev->private ? (char *)dev->private : mountpoint; - if (Mkdir(mp)) { - msgConfirm("Unable to make %s directory mountpoint for %s!", mp, dev->devname); - return FALSE; - } - - msgDebug("Init floppy called for %s distribution.\n", distWanted ? distWanted : "some"); - - if (!variable_get(VAR_NONINTERACTIVE)) { - if (!distWanted) - msgConfirm("Please insert floppy in %s", dev->description); - else - msgConfirm("Please insert floppy containing %s in %s", - distWanted, dev->description); - } - - memset(&dosargs, 0, sizeof dosargs); - dosargs.fspec = dev->devname; - dosargs.uid = dosargs.gid = 0; - dosargs.mask = 0777; - - memset(&u_args, 0, sizeof(u_args)); - u_args.fspec = dev->devname; - - if (mount("msdosfs", mp, MNT_RDONLY, (caddr_t)&dosargs) != -1) - goto success; - if (mount("ufs", mp, MNT_RDONLY, (caddr_t)&u_args) != -1) - goto success; - - msgConfirm("Error mounting floppy %s (%s) on %s : %s", - dev->name, dev->devname, mp, strerror(errno)); - return FALSE; - -success: - floppyMounted = TRUE; - distWanted = NULL; - return TRUE; -} - -FILE * -mediaGetFloppy(Device *dev, char *file, Boolean probe) -{ - char buf[PATH_MAX], *mp; - FILE *fp; - int nretries = 5; - - /* - * floppies don't use mediaGenericGet() because it's too expensive - * to speculatively open files on a floppy disk. Make user get it - * right or give up with floppies. - */ - mp = dev->private ? (char *)dev->private : mountpoint; - snprintf(buf, PATH_MAX, "%s/%s", mp, file); - if (!file_readable(buf)) { - if (probe) - return NULL; - else { - while (!file_readable(buf)) { - if (!--nretries) { - msgConfirm("GetFloppy: Failed to get %s after retries;\ngiving up.", buf); - return NULL; - } - distWanted = buf; - mediaShutdownFloppy(dev); - if (!mediaInitFloppy(dev)) - return NULL; - } - } - } - fp = fopen(buf, "r"); - return fp; -} - -void -mediaShutdownFloppy(Device *dev) -{ - if (floppyMounted) { - char *mp = dev->private ? (char *)dev->private : mountpoint; - - if (unmount(mp, MNT_FORCE) != 0) - msgDebug("Umount of floppy on %s failed: %s (%d)\n", mp, strerror(errno), errno); - else { - floppyMounted = FALSE; - if (!variable_get(VAR_NONINTERACTIVE) && variable_cmp(SYSTEM_STATE, "fixit")) - msgConfirm("You may remove the floppy from %s", dev->description); - } - } -} diff --git a/usr.sbin/sysinstall/ftp.c b/usr.sbin/sysinstall/ftp.c deleted file mode 100644 index 14fd74b..0000000 --- a/usr.sbin/sysinstall/ftp.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <sys/param.h> -#include <sys/wait.h> -#include <netdb.h> -#include <pwd.h> -#include <ftpio.h> - -Boolean ftpInitted = FALSE; -static FILE *OpenConn; -int FtpPort; - -/* List of sub directories to look for under a given FTP server. */ -const char *ftp_dirs[] = { ".", "releases/"MACHINE, "snapshots/"MACHINE, - "pub/FreeBSD", "pub/FreeBSD/releases/"MACHINE, - "pub/FreeBSD/snapshots/"MACHINE, NULL }; - -/* Brings up attached network device, if any - takes FTP device as arg */ -static Boolean -netUp(Device *dev) -{ - Device *netdev = (Device *)dev->private; - - if (netdev) - return DEVICE_INIT(netdev); - else - return TRUE; /* No net == happy net */ -} - -/* Brings down attached network device, if any - takes FTP device as arg */ -static void -netDown(Device *dev) -{ - Device *netdev = (Device *)dev->private; - - if (netdev) - DEVICE_SHUTDOWN(netdev); -} - -Boolean -mediaInitFTP(Device *dev) -{ - int i, code, af, fdir; - char *cp, *rel, *hostname, *dir; - char *user, *login_name, password[80]; - - if (ftpInitted) - return TRUE; - - if (OpenConn) { - fclose(OpenConn); - OpenConn = NULL; - } - - /* If we can't initialize the network, bag it! */ - if (!netUp(dev)) - return FALSE; - -try: - cp = variable_get(VAR_FTP_PATH); - if (!cp) { - if (DITEM_STATUS(mediaSetFTP(NULL)) == DITEM_FAILURE || (cp = variable_get(VAR_FTP_PATH)) == NULL) { - msgConfirm("Unable to get proper FTP path. FTP media not initialized."); - netDown(dev); - return FALSE; - } - } - - hostname = variable_get(VAR_FTP_HOST); - dir = variable_get(VAR_FTP_DIR); - if (!hostname || !dir) { - msgConfirm("Missing FTP host or directory specification. FTP media not initialized,"); - netDown(dev); - return FALSE; - } - user = variable_get(VAR_FTP_USER); - login_name = (!user || !*user) ? "anonymous" : user; - - if (variable_get(VAR_FTP_PASS)) - SAFE_STRCPY(password, variable_get(VAR_FTP_PASS)); - else if (RunningAsInit) - sprintf(password, "installer@%s", variable_get(VAR_HOSTNAME)); - else { - struct passwd *pw; - char *user; - - pw = getpwuid(getuid()); - user = pw ? pw->pw_name : "ftp"; - sprintf(password, "%s@%s", user, variable_get(VAR_HOSTNAME)); - } - af = variable_cmp(VAR_IPV6_ENABLE, "YES") ? AF_INET : AF_UNSPEC; - msgNotify("Logging in to %s@%s..", login_name, hostname); - if ((OpenConn = ftpLoginAf(hostname, af, login_name, password, FtpPort, isDebug(), &code)) == NULL) { - msgConfirm("Couldn't open FTP connection to %s:\n %s.", hostname, ftpErrString(code)); - goto punt; - } - - ftpPassive(OpenConn, !strcmp(variable_get(VAR_FTP_STATE), "passive")); - ftpBinary(OpenConn); - if (dir && *dir != '\0') { - if ((i = ftpChdir(OpenConn, dir)) != 0) { - if (i == 550) - msgConfirm("No such directory ftp://%s/%s\n" - "please check your URL and try again.", hostname, dir); - else - msgConfirm("FTP chdir to ftp://%s/%s returned error status:\n %s.", hostname, dir, ftpErrString(i)); - goto punt; - } - } - - /* - * Now that we've verified that the path we're given is ok, let's try to - * be a bit intelligent in locating the release we are looking for. First - * off, if the release is specified as "__RELEASE" or "any", then just - * assume that the current directory is the one we want and give up. - */ - rel = variable_get(VAR_RELNAME); - if (strcmp(rel, "__RELEASE") && strcmp(rel, "any")) { - /* - * Ok, since we have a release variable, let's walk through the list - * of directories looking for a release directory. The first one to - * match wins. For each case, we chdir to ftp_dirs[fdir] first. If - * that fails, we skip to the next one. Otherwise, we try to chdir to - * rel. If it succeeds we break out. If it fails, then we go back to - * the base directory and try again. Lots of chdirs, but oh well. :) - */ - for (fdir = 0; ftp_dirs[fdir]; fdir++) { - /* Avoid sending CWD . commands which confuse some ftp servers */ - if (strcmp(ftp_dirs[fdir], ".") && - (ftpChdir(OpenConn, (char *)ftp_dirs[fdir]) != 0)) - continue; - if (ftpChdir(OpenConn, rel) == 0) { - ftpInitted = TRUE; - return TRUE; - } - else /* reset to "root" dir for a fresh try */ - ftpChdir(OpenConn, "/"); - } - - /* - * If we get here, then all of the directories we tried failed, so - * print out the error message and ask the user if they want to try - * again. - */ - if (!msgYesNo("Warning: Can't find the `%s' distribution on this\n" - "FTP server. You may need to visit a different server for\n" - "the release you are trying to fetch or go to the Options\n" - "menu and to set the release name to explicitly match what's\n" - "available on %s (or set to \"any\").\n\n" - "Would you like to select another FTP server?", - rel, hostname)) { - variable_unset(VAR_FTP_PATH); - if (DITEM_STATUS(mediaSetFTP(NULL)) != DITEM_FAILURE) - goto try; - } - } else { - ftpInitted = TRUE; - return TRUE; - } - -punt: - ftpInitted = FALSE; - if (OpenConn != NULL) { - fclose(OpenConn); - OpenConn = NULL; - } - netDown(dev); - variable_unset(VAR_FTP_PATH); - return FALSE; -} - -FILE * -mediaGetFTP(Device *dev, char *file, Boolean probe) -{ - int nretries = 1; - FILE *fp; - char *try, buf[PATH_MAX]; - - if (!OpenConn) { - msgDebug("No FTP connection open, can't get file %s\n", file); - return NULL; - } - - try = file; - while ((fp = ftpGet(OpenConn, try, 0)) == NULL) { - int ftperr = ftpErrno(OpenConn); - - /* If a hard fail, try to "bounce" the ftp server to clear it */ - if (ftperr != 550) { - if (ftperr != 421) /* Timeout? */ - variable_unset(VAR_FTP_PATH); - /* If we can't re-initialize, just forget it */ - DEVICE_SHUTDOWN(dev); - if (!DEVICE_INIT(dev)) { - netDown(dev); - if (OpenConn) { - fclose(OpenConn); - OpenConn = NULL; - } - variable_unset(VAR_FTP_PATH); - return NULL; - } - } - else if (probe) - return NULL; - else { - /* Try some alternatives */ - switch (nretries++) { - case 1: - sprintf(buf, "releases/%s", file); - try = buf; - break; - - case 2: - sprintf(buf, "%s/%s", variable_get(VAR_RELNAME), file); - try = buf; - break; - - case 3: - sprintf(buf, "%s/releases/%s", variable_get(VAR_RELNAME), file); - try = buf; - break; - - case 4: - try = file; - break; - } - } - } - return fp; -} - -void -mediaShutdownFTP(Device *dev) -{ - if (!ftpInitted) - return; - - if (OpenConn != NULL) { - fclose(OpenConn); - OpenConn = NULL; - } - ftpInitted = FALSE; -} diff --git a/usr.sbin/sysinstall/globals.c b/usr.sbin/sysinstall/globals.c deleted file mode 100644 index 6c98b06..0000000 --- a/usr.sbin/sysinstall/globals.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" - -/* - * Various global variables and an initialization hook to set them to - * whatever values we feel are appropriate. - */ - -int DebugFD; /* Where diagnostic output goes */ -Boolean Fake; /* Only pretend to be useful */ -Boolean RunningAsInit; /* Are we running as init? */ -Boolean DialogActive; /* Is libdialog initialized? */ -Boolean ColorDisplay; /* Are we on a color display? */ -Boolean OnVTY; /* Are we on a VTY? */ -Boolean Restarting; /* Are we restarting sysinstall? */ -Boolean have_volumes; /* Media has more than one volume. */ -Variable *VarHead; /* The head of the variable chain */ -Device *mediaDevice; /* Where we're installing from */ -int BootMgr; /* Which boot manager we're using */ -int StatusLine; /* Where to stick our status messages */ -int low_volume; /* Lowest volume number */ -int high_volume; /* Highest volume number */ -jmp_buf BailOut; /* Beam me up, scotty! The natives are pissed! */ - -Chunk *HomeChunk; -Chunk *RootChunk; -Chunk *SwapChunk; -Chunk *TmpChunk; -Chunk *UsrChunk; -Chunk *VarChunk; -#ifdef __ia64__ -Chunk *EfiChunk; -#endif - -/* - * Yes, I know some of these are already automatically initialized as - * globals. I simply find it clearer to set everything explicitly. - */ -void -globalsInit(void) -{ - DebugFD = -1; - ColorDisplay = FALSE; - OnVTY = FALSE; - DialogActive = FALSE; - VarHead = NULL; - mediaDevice = NULL; - - HomeChunk = NULL; - RootChunk = NULL; - SwapChunk = NULL; - TmpChunk = NULL; - UsrChunk = NULL; - VarChunk = NULL; -#ifdef __ia64__ - EfiChunk = NULL; -#endif -} diff --git a/usr.sbin/sysinstall/help/anonftp.hlp b/usr.sbin/sysinstall/help/anonftp.hlp deleted file mode 100644 index a85b8aa..0000000 --- a/usr.sbin/sysinstall/help/anonftp.hlp +++ /dev/null @@ -1,21 +0,0 @@ -This screen allows you to configure the anonymous FTP user. - -The following configuration values are editable: - -UID: The user ID you wish to assign to the anonymous FTP user. - All files uploaded will be owned by this ID. - -Group: Which group you wish the anonymous FTP user to be in. - -Comment: String describing this user in /etc/passwd - - -FTP Root Directory: - - Where files available for anonymous FTP will be kept. - -Upload subdirectory: - - Where files uploaded by anonymous FTP users will go. - If you do not wish to allow anonymous uploads, then this - field should be blank - note that this is not the default! diff --git a/usr.sbin/sysinstall/help/configure.hlp b/usr.sbin/sysinstall/help/configure.hlp deleted file mode 100644 index 65be877..0000000 --- a/usr.sbin/sysinstall/help/configure.hlp +++ /dev/null @@ -1,10 +0,0 @@ -This menu allows you to configure your system after the installation -process is complete. At the minimum, you should probably set the -system manager's password and the system time zone. - -For extra goodies like bash, emacs, Pascal, etc., you should look at -the Packages item in this menu. - -For setting the timezone after the system is installed, type -``tzsetup''. For more information on the overall general system -configuration, see the ``/etc/defaults/rc.conf'' file. diff --git a/usr.sbin/sysinstall/help/distributions.hlp b/usr.sbin/sysinstall/help/distributions.hlp deleted file mode 100644 index d6fefa6..0000000 --- a/usr.sbin/sysinstall/help/distributions.hlp +++ /dev/null @@ -1,34 +0,0 @@ -DISTRIBUTION INFORMATION ------------------------- - -An ``X-'' prefixed before a distribution set means that the Xorg -base distribution, libraries, manual pages, servers and a set -of default fonts will be selected in addition to the set itself. -If you select such a set, you will also be presented with a set of -menus for customizing the selections to your desired X Window System -setup. - -Any distribution may be further customized by selecting the `Custom' -item before leaving the menu. - -The current "canned" installations are provided: - -All: The base distribution, man pages, dictionary files, - profiling libraries, the FreeBSD compatibility libraries, - the complete source tree, games and your choice of Xorg - distribution components. - -Developer: Base distribution, man pages, dictionary files, - profiling libraries and the complete source tree. - -Kern-Developer: As Developer, but with only kernel sources instead of - the complete source tree. - -User: The base distribution, man pages and dictionary files. - -Minimal: Only the base distribution. - -Custom: Allows you to create or modify your distribution set on - a piece-by-piece basis. - -Reset: Clear all currently selected distributions. diff --git a/usr.sbin/sysinstall/help/drives.hlp b/usr.sbin/sysinstall/help/drives.hlp deleted file mode 100644 index 946a1b2..0000000 --- a/usr.sbin/sysinstall/help/drives.hlp +++ /dev/null @@ -1,92 +0,0 @@ -Boot Manager Selection: ------------------------ - -If you wish to switch between multiple operating systems on your -machine, or if you are trying to install FreeBSD on a drive other than -your 1st drive, then you must install a boot manager. In the case -where you wish to boot off an alternate drive, it should also be noted -that you still need to install a boot manager on the FIRST drive! -Even if you do not intend to create a FreeBSD partition on that drive -(e.g. it's being wholly used by something else), the boot manager -still needs to reside on the first disk in order to function as a -"redirector" for the boot process. - -To do this, simply select your 1st drive in the drive selection menu -and when the partition editor comes up, don't make any changes - just -(Q)uit. At the boot manager menu which follows, select the first -option (install a boot manager) and then proceed to setup the other -drive(s) for FreeBSD as normal. - -It should also be noted that "operating systems" such as Windows 95 -will completely overwrite your boot manager without so much as a -polite "may I please destroy your boot manager?" prompt if you make -the mistake of installing them second. If this happens to you after -FreeBSD is already installed, all is not lost! Simply revisit your -FreeBSD distribution directory and look for a tools/ subdirectory, in -which you'll find "bootinst.exe" and "boot.bin". To reinstall, simply -say "bootinst boot.bin" while in the tools/ subdirectory. - - -If you see the boot manager displaying ``F?'' when you try to come up -for the first time and it refuses to change, no matter how often you -whap on the function key assigned to FreeBSD, then you have a geometry -mismatch problem and you should read the next section for important -information on how to prevent that exact problem from happening! - - -Geometry Translation / Sharing the disk(s) with another OS: ----------------------------------------------------------- - -If you are going to actually install some portion of FreeBSD on a -drive then PLEASE BE VERY CERTAIN that the Geometry reported in the -Partition Editor is the correct one for your drive and controller -combination! - -IDE drives often have a certain geometry set during the PC BIOS setup, -or (in the case of larger IDE drives) have their geometry "translated" -by either the IDE controller or a special boot-sector translation -utility such as that by OnTrack Systems. In these cases, knowing the -correct geometry gets even more complicated as it's not something you -can easily tell by looking at the drive or the PC BIOS setup. The -best way of verifying that your geometry is being correctly calculated -in such situations is to boot DOS (from the hard disk, not a floppy!) -and run the ``pfdisk'' utility provided in the tools/ subdirectory of -the FreeBSD CDROM or FTP site. It will report the geometry that DOS -sees, which is generally the correct one. - -If you have no DOS partition sharing the disk at all, then you may -find that you have better luck with Geometry detection if you create a -very small DOS partition first, before installing FreeBSD. Once -FreeBSD is installed you can always delete it again if you need the -space. - -It's actually not a bad idea (believe it or not) to have a small -bootable DOS partition on your FreeBSD machine anyway: Should the -machine become unstable or exhibit strange behavior at some point in -the future (which is not uncommon behavior for PC hardware!) you can -then at least use DOS for installing and running one of the -commercially available system diagnostic utilities. - -IMPORTANT NOTE: - -Any root partition you try to boot from must also reside below the -1024th cylinder. If you're using a translated geometry then this is -probably not a problem, but if you are using a native disk geometry -which exceeds 1024 cylinders then you could have a failure to boot if -you end up installing a root partition (or even just the kernel file -in a root partition) out past cylinder 1024. If you are trying to -share your first disk with FreeBSD and another OS which was installed -previously, you are particularly susceptible to this problem and should -check your disk addresses very carefully. - -If you find that you have insufficient space below cylinder 1024 to -make a root partition for FreeBSD (and again, this ONLY applies to the -root partition - once FreeBSD's kernel is loaded, it doesn't care -about the geometry issues) then you will probably need to install on a -completely different disk (see the boot manager section above) or -resize your existing partitions so that both operating systems can -have boot partitions below cylinder 1024. - -You may blame IBM for the limitations of a 10 bit cylinder address. -"No one will have a disk with more than 1024 cylinders." I'm sure -someone said. diff --git a/usr.sbin/sysinstall/help/fixit.hlp b/usr.sbin/sysinstall/help/fixit.hlp deleted file mode 100644 index 801f258..0000000 --- a/usr.sbin/sysinstall/help/fixit.hlp +++ /dev/null @@ -1,3 +0,0 @@ -A special shell will be launched by this option with a fixit floppy -or a FreeBSD CD-ROM (or DVD-ROM) mounted as /mnt2. This provides -access to extra commands under /mnt2. diff --git a/usr.sbin/sysinstall/help/html.hlp b/usr.sbin/sysinstall/help/html.hlp deleted file mode 100644 index c12f82c..0000000 --- a/usr.sbin/sysinstall/help/html.hlp +++ /dev/null @@ -1,20 +0,0 @@ -In this screen, you can jump to remote or local HTML -resources such as the FreeBSD Handbook & FreeBSD FAQ -(Frequently Asked Questions) documents located in: - - file:/usr/share/doc/ - -if you've loaded the doc distribution. - -The default browser package used is links (a text based -browser which can render tables), which will be -automatically loaded from the installation media if it -is available. You may change the selection of browser -& browser package to auto-load by visiting the Options -editor. - -In order to visit remote URLs, you naturally must have -some sort of working Internet connection. If you have not -yet brought up any network interfaces, please visit -the ``Networking'' item in the Configuration menu -before attempting to reference any http://.. style URLs. diff --git a/usr.sbin/sysinstall/help/media.hlp b/usr.sbin/sysinstall/help/media.hlp deleted file mode 100644 index 414a2aa..0000000 --- a/usr.sbin/sysinstall/help/media.hlp +++ /dev/null @@ -1,54 +0,0 @@ -You can install from the following types of media: - - CDROM requires one of the following supported CDROM drives: - ATAPI - Any standard ATAPI CDROM drive hooked to - a supported controller (see Hardware Guide). - SCSI - Any standard SCSI CDROM drive hooked to - a supported controller (see Hardware Guide). - - - DOS A DOS primary partition with the required FreeBSD - distribution files copied onto it (e.g. C:\FREEBSD\) - - - FS Assuming a disk or partition with an existing - FreeBSD file system and distribution set on it, - get the distribution files from there. - - - Floppy Get distribution files from one or more DOS or UFS - formatted floppies. Such floppies are assumed to - contain the appropriate distribution pieces - see - ABOUT.TXT for more information about making floppy - distribution media. - - - FTP Get the distribution files from an anonymous ftp server - (you will be presented with a list). Please note that - you may invoke FTP in "Active" mode, "Passive" mode, or - via an HTTP proxy. - - Active mode is the standard way of fetching files and - Passive mode is for use when you're behind a firewall or - some other security mechanism that blocks active FTP - connections. Using an HTTP proxy is sometimes necessary - for firewalls which block all FTP connections. - - If you chose to enter your own URL in the FTP menu, please - note that all paths are *relative* to the home directory - of the user being logged in as. By default, this is the - user "ftp" (anonymous ftp) but you may change this in the - Options screen. - - - NFS Get the distribution files from an NFS server somewhere - (make sure that permissions on the server allow this!). - If this install method hangs on you or refuses to work - properly, you may need to set some special options for - your NFS server. See the Options screen for more details. - - - Tape Extract distribution files from tape into a temporary - directory and install from there. If the tape was created - with blocksize other than 20, you may wish to change this - in the Options screen. diff --git a/usr.sbin/sysinstall/help/network_device.hlp b/usr.sbin/sysinstall/help/network_device.hlp deleted file mode 100644 index affa86a..0000000 --- a/usr.sbin/sysinstall/help/network_device.hlp +++ /dev/null @@ -1,58 +0,0 @@ -You can do network installations over 3 types of communications links: - - Serial port: SLIP / PPP - Parallel port: PLIP (laplink cable) - Ethernet: A standard Ethernet controller (includes some - PCMCIA networking cards). - -SLIP support is rather primitive and limited primarily to directly -connected links, such as a serial cable running between a laptop -computer and another PC. The link must be hard-wired as the SLIP -installation doesn't currently offer a dialing capability (that -facility is offered by the PPP utility, which should be used in -preference to SLIP whenever possible). When you choose the SLIP -option, you'll be given the option of later editing the slattach -command before it's run on the serial line. It is expected that -you'll run slattach (or some equivalent command) on the other end of -the link at that time and bring up the line. FreeBSD will then -install itself at serial speeds of up to 115.2K/baud (the recommended -speed for a hardwired cable). - -If you're using a modem then PPP is almost certainly your only choice. -Make sure that you have your service provider's information handy as -you'll need to know it fairly early in the installation process. You -will need to know your service provider's IP address, the IP address -of your provider's DNS server, and possibly your own IP address unless -your ISP supports dynamic negotiation, most do. If you do not choose -a PAP or CHAP login you will also need to know how to use the various -"AT commands" to dial the ISP with your particular brand of modem as -the PPP dialer provides only a very simple terminal emulator and has no -"modem capabilities database". If you choose a PAP or CHAP login you -can simply enter `dial' (without the quotes) at the ppp prompt if your -modem uses the Hayes compatible AT command set. - -If a hard-wired connection to another FreeBSD (2.0R or later) machine -is available, you might also consider installing over a "laplink" -parallel port cable. The data rate over the parallel port is much -higher than what is typically possible over a serial line, and speeds -of over 50KB/sec are not uncommon. - -Finally, for the fastest possible network installation, an Ethernet -adaptor is always a good choice! FreeBSD supports most common PC -Ethernet cards, a table of which is provided in the FreeBSD Hardware -Guide (see the `Documentation' entry in the main menu). If you are -using one of the supported PCMCIA Ethernet cards, also be sure that -it's plugged in BEFORE the laptop is powered on! Sysinstall does not, -unfortunately, currently support "hot insertion" of PCMCIA cards. - -You will also need to know your IP address on the network, the -"netmask" value for your address class, and the name of your machine. -Your system administrator can tell you which values to use for your -particular network setup. If you will be referring to other hosts by -name rather than IP address, you'll also need a name server and -possibly the address of a gateway (if you're using PPP, it's your -provider's IP address) to use in talking to it. If you do not know -the answers to all or most of these questions then you should really -probably talk to your system administrator FIRST before trying this -type of installation! Choosing the wrong IP address on a busy network -will NOT make you popular with your systems administrator! :-) diff --git a/usr.sbin/sysinstall/help/options.hlp b/usr.sbin/sysinstall/help/options.hlp deleted file mode 100644 index e1371ff..0000000 --- a/usr.sbin/sysinstall/help/options.hlp +++ /dev/null @@ -1,181 +0,0 @@ -The following options may be set from this screen. Use the SPACE key -to toggle an option's value, Q to leave when you're done. - -NFS Secure: NFS server talks only on a secure port - - This is most commonly used when talking to Sun workstations, which - will not talk NFS over "non privileged" ports. - - -NFS Slow: User is using a slow PC or Ethernet card - - Use this option if you have a slow PC (386) or an Ethernet card - with poor performance being "fed" by NFS on a higher-performance - workstation. This will throttle the workstation back to prevent - the PC from becoming swamped with data. - - -NFS TCP: Use TCP for the NFS mount - - This option can be used if your NFS server supports TCP - connections; not all do! This may be useful if your NFS server - is at a remote site in which case it may offer some additional - stability. - - -NFS version 3: Use NFS version 3 - - This option forces the use of NFS version 3 and is on by default. - If your NFS server only supports NFS version 2, disable this option. - - -Debugging: Turn on the extra debugging flag - - This turns on a lot of extra noise over on the second screen - (ALT-F2 to see it, ALT-F1 to switch back). If your installation - should fail for any reason, PLEASE turn this flag on when - attempting to reproduce the problem. It will provide a lot of - extra debugging at the failure point and may be very helpful to - the developers in tracking such problems down! - - -No Warnings: Disable some warnings - - This flag tells sysinstall, and particularly the disk editing - routines, that you consider yourself to know what you are - doing and disables various warning. It is not recommended that - you enable this option. - - -Yes To All: Assume "Yes" answers to all non-critical dialogs - - This flag should be used with caution. It will essentially - decide NOT to ask the user about any "boundary" conditions that - might not constitute actual errors but may be warnings indicative - of other problems. It's most useful to those who are doing unattended - installs. - - -DHCP: Enable DHCP configuration of interfaces - - This option specifies whether DHCP configuration of interfaces - may be attempted. The default setting is to interactively ask - the user. - - -IPv6: Enable IPv6 router solicitation configuration - - This option specifies whether automatic configuration of IPv6 - interfaces may be attempted. This uses the router solicitation - method of automatic configuration. The default setting is to - interactively ask the user. - - -FTP username: Specify username and password instead of anonymous. - - By default, the installation attempts to log in as the - anonymous user. If you wish to log in as someone else, - specify the username and password with this option. - - -Editor: Specify which screen editor to use. - - At various points during the installation it may be necessary - to customize some text file, at which point the user will be - thrown unceremoniously into a screen editor. A relatively - simplistic editor which shows its command set on-screen is - selected by default, but UNIX purists may wish to change this - setting to `/usr/bin/vi'. - - -Tape Blocksize: Specify block size in 512 byte blocks of tape. - - This defaults to 20 blocks, which should work with most - tape drive + tar combinations. It may not allow your particular - drive to win any records for speed, however, and the more - adventurous among you might try experimenting with larger sizes. - - -Extract Detail: How to show filenames on debug screen as they're extracted. - - While a distribution is being extracted, the default detail level - of "high" will show the full file names as they're extracted. - If you would prefer a more terse form for this, namely dots, select - the "medium" detail level. If you want nothing to be printed - on the debugging screen during extraction, select "low". - - -Release Name: Which release to attempt to load from installation media. - - You should only change this option if you're really sure you know - what you are doing! This will change the release name used by - sysinstall when fetching components of any distributions, and - is a useful way of using a more recent installation boot floppy - with an older release (say, on CDROM). - - -Install Root: Specify some directory other than / as your "root". - - This should be left as / unless you have a really good reason to - change it. One good reason might be if you were installing to a - disk other than your own, as might happen if you needed to prepare a - disk for another machine which couldn't load FreeBSD directly - for some reason. - - Note: If you set this option, you will only be able to install - packages if the base distribution is also installed (usually - the case anyway) since /usr/sbin/pkg_add will otherwise not be - found after the chroot() call. - - -Browser Package: Which package to load for an HTML browser. - - By default, this is set to links but may also be set to any other - text capable HTML browser for which a package exists. If you set this - to an X based browser, you will not be able to use it if you're running - in text mode! :) - - -Browser Exec: Which binary to run for the HTML browser. - - The full pathname to the main executable in Browser Package. - - -Media Type: Which media type is being used. - - This is mostly informational and indicates which media type (if any) - was last selected in the Media menu. It's also a convenient short-cut - to the media menu itself. - - -Package Temp: Where package temporary files should go - - Some packages, like emacs, can use a LOT of temporary space - up to - 20 or 30MB. If you are going to configure a small / directory and no - separate /var (and hence a small /var/tmp), then you may wish to set - this to point at another location (say, /usr/tmp). - - -Newfs Args: Specify default arguments to newfs(8) - - The default parameters used to build new filesystems. - If you will be running a service that creates millions of small - files or need to specify different default parameters for any - other reason, you may do so here. - - -Fixit Console: The location of the fixit console - - Specifies where sysinstall should start the fixit shell for - interactive repair. Valid arguments are "serial" for a serial - port, or "standard" for VTY4. - - -Re-scan Devices: - - Reprobe the system for devices. - - -Use Defaults: Use default values. - - Reset all options back to their default values. diff --git a/usr.sbin/sysinstall/help/partition.hlp b/usr.sbin/sysinstall/help/partition.hlp deleted file mode 100644 index 3d13b34..0000000 --- a/usr.sbin/sysinstall/help/partition.hlp +++ /dev/null @@ -1,169 +0,0 @@ -This is the FreeBSD DiskLabel Editor. - -NOTE: If you're entering this editor from the update procedure then -you probably shouldn't (C)reate anything at all but rather use only -the (M)ount command to check and mount existing partitions for -upgrading. - -If you would like the label editor to do most of the following for -you, simply type `A' for automatic partitioning of the disk. - -If you wish to create partitions manually you may do so by moving the -highlighted selection bar with the arrow keys over the FreeBSD -partition(s) displayed at the top of the screen. Typing (C)reate -while a partition with available free space is selected will allow you -to create a BSD partition inside of it using some or all of its -available space. - -Typing (M)ount over an existing partition entry (displayed in the -middle of the screen) will allow you to set a mount point for it -without initializing it. If you want it initialized, use the (T)oggle -command to flip the Newfs flag. When Newfs is set to "Y", the -filesystem in question will be ERASED and rebuilt from scratch! - - -You should use this editor to create at least the following -filesystems: - - Name Purpose Min Size? Optional? - ---- ------- --------- --------- - / Root filesystem 118MB No - swap Swap space 2 * MEM No - /usr System & user files 128MB or more Yes - -Note: If you do not create a /usr filesystem then your / filesystem -will need to be bigger - at least 240MB. This is not recommended as -any media errors that may occur during disk I/O to user files will -corrupt the filesystem containing vital system files as well. It is -for this reason that / is generally kept on its own filesystem, where -it should be considered essentially "read only" in your administration -of it. - -Swap space is a little tricker, and the rule of "2 * MEM" is simply a -best-guess approximation and not necessarily accurate for your -intended usage of the system. If you intend to use the system heavily -in a server or multi-user application, you may be well advised to -increase this size. You may also create swap space on multiple drives -for a larger "total" swap and this is, in fact, recommended if you -have multiple, fast drives for which such load-balancing can only help -overall I/O performance. - -The /usr filesystem should be sized according to what kind of -distributions you're trying to load and how many packages you intend -to install in locations like /usr/local. You can also make /usr/local -a separate filesystem if you don't want to risk filling up your /usr -by mistake. - -Another useful filesystem to create is /var, which contains mail, news -printer spool files and other temporary items. It is a popular -candidate for a separate partition and should be sized according to -your estimates of the amount of mail, news or spooled print jobs that -may be stored there. - -WARNING: If you do not create a separate filesystem for /var, space -for such files will be allocated out of the root (/) filesystem -instead. You may therefore wish to make the / partition bigger if you -expect a lot of mail or news and do not want to make /var its own -partition. - -If you're new to this installation, you might also want to read the -following explanation of how FreeBSD's new "slice" paradigm for -looking at disk storage works: - - -In FreeBSD's new system, a device name can be broken up into up to 3 -parts. Take a typical name like ``/dev/da0s1a'': - - The first three characters represent the drive name. If we had - a system with two SCSI drives on it then we'd see /dev/da0 and - /dev/da1 as the device entries representing the entire drives. - - Next you have the "slice" (or "FDISK Partition") number, - as seen in the Partition Editor. Assuming that our da0 - contained two slices, a FreeBSD slice and a DOS slice, that - would give us /dev/da0s1 and /dev/da0s2 as device entries pointing - to the entire slices. - - Next, if a slice is a FreeBSD slice, you can have a number of - (confusingly named) "partitions" inside of it. - - These partitions are where various filesystems or swap areas live, - and using our hypothetical two-SCSI-disk machine again, we might - have something like the following layout on da0: - - Name Mountpoint - ---- ---------- - da0s1a / - da0s1b <swap space> - da0s1e /usr - -Once you understand all this, then the purpose of the label editor -becomes fairly clear: You're carving up the FreeBSD slices displayed -at the top of the screen into smaller pieces, which are displayed in -the middle of the screen, and then assigning FreeBSD file system names -(mount points) to them. - -You can also use the label editor to mount existing partitions/slices -into your filesystem hierarchy, as is frequently done for DOS FAT -slices. For FreeBSD partitions, you can also toggle the "newfs" state -so that the partitions are either (re)created from scratch or simply -checked and mounted (the contents are preserved). - -If you set (S)oftUpdates on a filesystem, it will cause the -"Soft Updates" policy to be in effect for it. This basically causes -both metadata and data blocks to be written asynchronously to disk, -but with extra state information which causes the metadata and any -related data blocks to be committed in a single transaction. This -results in async metadata update speeds (which are considerably -faster than the default sync) without the potential for data loss -which could occur if you simply mounted the filesystem with purely -"async" update policy and then had a power failure. If you wish -to later turn the softupdates policy back off, use the command -"tunefs -n disable devicename". NOTE: It is probably not wise -to use this on your root filesystem unless you have a large -(e.g. non-standard size) root. The reason is that smaller filesystems -with significant activity can temporarily overflow if the soft updates -policy results in free'd blocks not being "garbage collected" as fast -as they're being requested. - -The UNIX File System (UFS) on FreeBSD supports two different on-disk -layouts: UFS1 and UFS2. UFS1 was the default file system in use -through FreeBSD 5.0-RELEASE; as of FreeBSD 5.1-RELEASE, the default -is now UFS2, with the exception of the PC98 platform. UFS2 provides -sparse inode allocation (faster fsck), 64-bit storage pointers (larger -maximum size), and native extended attributes (required for ACLs, MAC, -and other advanced security and file system services). The selection -of UFS1 or UFS2 must be made when the file system is created--later -conversion is not currently possible. UFS2 is the recommended file -system, but if disks are to be used on older FreeBSD systems, UFS1 -improves portability. When dual-booting between FreeBSD 4.x or -earlier and FreeBSD 5.x, UFS1 file systems will be accessible from -both. To toggle a file system to UFS1, press '1'. To restore it to -UFS2, press '2'. - -WARNING: FreeBSD on i386 is currently unable to boot from root file -systems larger than 1.5TB. - -To add additional flags to the newfs command line for UFS file -systems, press 'N'. These options will be specified before the -device argument of the command line, but after any other options -placed there by sysinstall, such as the UFS version and soft -updates flag; as such, arguments provided may override existing -settings. To completely replace the newfs command used by -sysinstall, press 'Z' to convert a partition to a Custom -partition type. Sysinstall will prompt you with the newfs -command line that it would have used based on existing settings -prior to the change, but allow you to modify any aspect of the -command line. Once a partition has been converted to a custom -partition in the label editor, you will need to restart the -labeling process or delete and recreate the partition to restore -it to a non-custom state. Custom partitions are represented by -the letters "CST" instead of "UFS" or "FAT. - -When you're done, type `Q' to exit. - -No actual changes will be made to the disk until you (C)ommit from the -Install menu or (W)rite directly from this one. You're working with -what is essentially a copy of the disk label(s), both here and in the -FDISK Partition Editor, and the actual on-disk labels won't be -affected by any changes you make until you explicitly say so. diff --git a/usr.sbin/sysinstall/help/securelevel.hlp b/usr.sbin/sysinstall/help/securelevel.hlp deleted file mode 100644 index 27eb1ec..0000000 --- a/usr.sbin/sysinstall/help/securelevel.hlp +++ /dev/null @@ -1,40 +0,0 @@ -This menu allows you to configure the Securelevel mechanism in FreeBSD. - -Securelevels may be used to limit the privileges assigned to the -root user in multi-user mode, which in turn may limit the effects of -a root compromise, at the cost of reducing administrative functions. -Refer to the security(7) and init(8) manual pages for complete details. - - -1 Permanently insecure mode - always run the system in level 0 - mode. This is the default initial value. - - 0 Insecure mode - immutable and append-only flags may be turned - off. All devices may be read or written subject to their - permissions. - - 1 Secure mode - the system immutable and system append-only - flags may not be turned off; disks for mounted file systems, - /dev/mem, /dev/kmem and /dev/io (if your platform has it) - may not be opened for writing; kernel modules (see kld(4)) - may not be loaded or unloaded. - - 2 Highly secure mode - same as secure mode, plus disks may not - be opened for writing (except by mount(2)) whether mounted or - not. This level precludes tampering with file systems by - unmounting them, but also inhibits running newfs(8) while the - system is multi-user. - - In addition, kernel time changes are restricted to less than - or equal to one second. Attempts to change the time by more - than this will log the message ``Time adjustment clamped to +1 - second''. - - 3 Network secure mode - same as highly secure mode, plus IP - packet filter rules (see ipfw(8), ipfirewall(4) and pfctl(8)) - cannot be changed and dummynet(4) or pf(4) configuration - cannot be adjusted. - -Securelevels must be used in combination with careful system design and -application of protective mechanisms to prevent system configuration -files from being modified in a way that compromises the protections of -the securelevel variable upon reboot. diff --git a/usr.sbin/sysinstall/help/shortcuts.hlp b/usr.sbin/sysinstall/help/shortcuts.hlp deleted file mode 100644 index 9ec03d0..0000000 --- a/usr.sbin/sysinstall/help/shortcuts.hlp +++ /dev/null @@ -1,117 +0,0 @@ -sysinstall now supports command-line "shortcuts" which can -often replace outdated commands, like pkg_manage. Multiple commands -can be invoked in sequence, and variables may be set on-the-fly to -customize the installation program's behavior in various ways. - -Syntax: - -/usr/sbin/sysinstall [var=value ..] [command ..] - -Where "var" can be one or more of: - -blanktime Screen blank time setting in seconds -bootManager Select boot manager: booteasy, standard or none -browserBinary Which doc browser to use (default: links) -browserPackage Which package to get browser from (default: links) -cpioVerbose How verbose to be with cpio: high or low -debug Extra debugging? -defaultrouter IP address of default route -disk Which disk to operate on (ad0, da0, etc). -domainname Domain name -editor Which screen editor to use -ftp Which FTP site/dir to use (URL ftp://site/dir/..) -ftpDirectory Root of the FreeBSD distribution tree on FTP server -ftpHost Which FTP hostname to use (overrides ftp variable) -ftpOnError Set to retry or abort -ftpPass Which password to use when logging into FTP server -ftpPort Which FTP port to use (default: 21) -ftpRetryCount How many times to retry a fetch operation -ftpUser Which username to use when logging into FTP server -gated Use gated instead of routed -geometry Geometry to use for selected disk ("cyl/hd/sec") -hostname Fully qualified domain name for host. -ifconfig_<iface> For each <iface> in network_devices -ipaddr IP address for this host's primary interface -nameserver IP address of name server -netmask Netmask for this host's primary interface -network_interfaces Which network interfaces to configure -nfs Full host:/path/ specification to NFS media -nfsHost Host portion of nfs path -nfsSecure Use NFS secure mount (-P flag) -nfs_server Configure this machine as an NFS server -noConfirm Don't ask for confirmation on non-fatal errors -ntpDate Which ntp clock synchronization server to use -pcnfsd Install the PCNFSD package -ports Path to the ports collection -releaseName Which FreeBSD release to install -rootSize Size of the root partition to create for Auto -routedflags Which flags to pass to routed, if enabled -serialSpeed How fast to run a SLIP/PPP connection -slowEthernetCard PC ethernet card is uncommonly slow -swapSize Size of the swap partition to create for Auto -tapeBlocksize Tape size in blocks -ufs Full path to UFS media directory -usrSize Size of the /usr partition to create for Auto -varSize Size of the /var partition to create for Auto - -And "command" can be one or more of: - -addGroup Add a new group to the system -addUser Add a new user to the system -configAnonFTP Configure system for anonymous FTP -configInetd Configure the inetd super-server -configNFSServer Configure host as an NFS server -configNTP Configure host as an NTP client -configPackages Browse / install packages -configRouter Configure a routing daemon -configUsers Add users and/or groups to the system -diskLabelCommit Write out any changed label information -diskLabelEditor Label/Newfs/Mount new or existing filesystems -diskPartitionEditor Partition a new or existing disk -diskPartitionWrite Write out any changed partition information -distExtractAll Extract all selected distributions -distReset Reset distribution information -distSetDeveloper Select developer distribution -distSetEverything Select all distributions -distSetKernDeveloper Select kernel developer distribution -distSetMinimum Select minimal distribution -distSetSrc Select source sub-distributions -distSetUser Select user distribution -distSetXDeveloper Select Xorg developer distribution -distSetXOrg Select Xorg sub-distributions -distSetXUser Select Xorg user distribution -docBrowser Browse documentation -installCommit Commit any pending installation operations -installExpress Express installation -installStandard Standard installation -installUpgrade Upgrade installation -mediaGetType Prompt for media type -mediaSetCDROM Select CDROM media -mediaSetCPIOVerbosity Prompt for CPIO verbosity -mediaSetDOS Select DOS media -mediaSetFTP Select FTP media -mediaSetFTPPassive Select FTP media in passive mode -mediaSetFTPUserPass Prompt for FTP username and password -mediaSetFloppy Select floppy media -mediaSetHTTP Select FTP media via HTTP proxy -mediaSetNFS Select NFS media -mediaSetTape Select tape media -mediaSetUFS Select UFS media -optionsEditor Go to options editor -tcpMenuSelect Configure TCP/IP networking - -Examples: - -/usr/sbin/sysinstall mediaSetFTP configPackages - -Selects an FTP site and then goes to the package configuration menu. - - -/usr/sbin/sysinstall disk=da0 diskPartitionEditor - -Invokes the disk partition editor on disk da0. - - -If /usr/sbin/sysinstall is linked to another filename, say -`/usr/local/bin/configPackages', then the basename will be used -as an implicit command name. diff --git a/usr.sbin/sysinstall/help/slice.hlp b/usr.sbin/sysinstall/help/slice.hlp deleted file mode 100644 index e9f3abb..0000000 --- a/usr.sbin/sysinstall/help/slice.hlp +++ /dev/null @@ -1,57 +0,0 @@ -This is the Main Slice (``FDISK'' or PC-style Partition) Editor. - -Possible commands are printed at the bottom and the Master Boot Record -contents are shown at the top. You can move up and down with the -arrow keys and (C)reate a new slice whenever the highlighted -selection bar is over a slice whose type is marked as "unused." - -You are expected to leave this screen with at least one slice -marked "FreeBSD." Note that unlike Linux, you don't need to create -multiple FreeBSD FDISK partition entries for different things like -swap, file systems, etc. The usual convention is to create ONE -FreeBSD slice (FDISK partition) per drive and then subsection this slice -into swap and file systems with the Label editor. - -No actual changes will be made to the disk until you (C)ommit from the -Install menu or use the (W)rite option here! You're working with what -is essentially a copy of the disk label(s), both here and in the Label -Editor. - -If you want to use the entire disk for FreeBSD, type `A'. Slices will -be aligned to fictitious cylinder boundaries and space will be reserved -in front of the FreeBSD slice for a [future] possible boot manager. - -For the truly dedicated disk case, type `F'. You'll be asked whether or -not you wish to keep the disk (potentially) compatible with other -operating systems, i.e. the information in the FDISK table should be -kept valid. A truly dedicated disk can be achieved by selecting `No'. -In that case, all BIOS geometry considerations will no longer be in -effect and you can safely ignore any ``The detected geometry is -invalid'' warning messages you may later see. It is also not necessary -in this case to set a slice bootable or install an MBR boot manager as -both things are then irrelevant. The FreeBSD slice will start at -absolute sector 0 of the disk (so that FreeBSD's disk label is identical -to the Master Boot Record) and extend to the very last sector of the -disk medium. Needless to say, such a disk cannot have any sort of a -boot manager, `disk manager', or anything else that has to interact with -the BIOS. This option is therefore only considered safe for SCSI disks -and most IDE disks and is primarily intended for people who are going to -set up a dedicated FreeBSD server or workstation, not a typical `home PC'. - -If you select the default of `Yes' at the compatibility, slices will be -aligned to fictitious cylinder boundaries and space will be reserved -in front of the FreeBSD slice for a [future] possible boot manager. -This is pretty much equivalent to having chosen `A' originally. - -The flags field has the following legend: - - '=' -- This slice is properly aligned. - 'A' -- This slice is marked active. - 'R' -- This slice contains the root (/) filesystem - -If no slice is marked Active, you will need to either install -a Boot Manager (the option for which will be presented later in the -installation) or set one Active before leaving this screen. - -To leave the slice editor, type `Q'. - diff --git a/usr.sbin/sysinstall/help/tcp.hlp b/usr.sbin/sysinstall/help/tcp.hlp deleted file mode 100644 index 4c86198..0000000 --- a/usr.sbin/sysinstall/help/tcp.hlp +++ /dev/null @@ -1,42 +0,0 @@ -This screen allows you to set up your general network parameters -(hostname, domain name, DNS server, etc) as well as the settings for a -given interface (which was selected from the menu before this screen). - -PLIP/SLIP users - please read through to the end of this doc! - -You can move through the fields with the TAB, BACK-TAB and ENTER -keys. To edit a field, use DELETE or BACKSPACE. You may also use ^A -(control-A) to go to the beginning of the line, ^E (control-E) to go -to the end, ^F (control-F) to go forward a character, ^B (control-B) -to go backward one character, ^D (control-D) to delete the character -under the cursor and ^K (control-K) to delete to the end of the line. -Basically, the standard EMACS motion sequences. - -The "Extra options to ifconfig" field is kind of special (read: a -hack :-): - -Any valid options to ifconfig can be specified here, so if you need -to do something "special" to get your interface working, then here -is the place to do it. - -If you're running SLIP or PLIP, you also need to use it for specifying -the remote end of the link (simply type the foreign IP address in). -In the specific case where you're running PLIP with a Linux host peer -rather than a FreeBSD one, you also must add the "-link0" flag after the -foreign address. - -If you're dealing with an ethernet adaptor with multiple media -connectors (e.g. AUI, 10BT, 10B2, etc), you can use this field to -specify which one to use. Examples of valid strings include: - - "media 10base5/AUI" - Select the AUI port. - "media 10baseT/UTP" - Select the twisted pair port. - "media 10base2/BNC" - Select the BNC connector. - "media 100baseTX" - Select 100BaseT on a 100/10 dual adaptor. - -If you have a wireless interface and must specify arguments such as a -WEP key here, you may use something like: - - "wepmode on wepkey 0xFEEDFACE" - -When you're done with this form, select OK. diff --git a/usr.sbin/sysinstall/help/usage.hlp b/usr.sbin/sysinstall/help/usage.hlp deleted file mode 100644 index 268a946..0000000 --- a/usr.sbin/sysinstall/help/usage.hlp +++ /dev/null @@ -1,65 +0,0 @@ -HOW TO USE THIS SYSTEM -====================== - -[press the PageDown key to go to the next screen when you finish - reading this one] - -The following keys are recognized in most of the dialogs you'll -encounter during this installation: - -KEY ACTION ---- ------ -SPACE Select or toggle the current item. -ENTER Finish with a menu or item. -UP ARROW Move to previous item (or up, in a text display box). -DOWN ARROW Move to next item (or down, in a text display box). -TAB Move to next item or group. -RIGHT ARROW Move to next item or group (same as TAB). -SHIFT-TAB Move to previous item or group. -LEFT ARROW Move to previous item or group (same as SHIFT-TAB). -PAGE UP In text display boxes, scrolls up one page. -PAGE DOWN In text display boxes, scrolls down one page. -F1 Display associated help text. - -If you see small "^(-)" or "v(+)" symbols at the edges of a menu, it -means that there are more items above or below the current one that -aren't being shown (due to insufficient screen space). In text -display boxes, the amount of text above the current point will be -displayed as a percentage in the lower right corner. Using the -Up/Down arrow keys will cause the object to scroll by line. The -PageUp and PageDown keys will scroll by entire screens. - -Selecting OK in a menu will confirm whatever action it's controlling. -Selecting Cancel will cancel the operation and generally return you to -the previous menu. Use TAB to move the cursor around and select the -buttons. - -Most screens obey the Help key (F1) - USE IT! It generally offers useful -context-specific hints on what to do at each stage of the installation, -and if you're at all unsure about what to do at a given stage in the -installation, hit F1! - - -SPECIAL FEATURES: -================= - -It is possible to select a menu item by typing the first character of -its name, if unique. This will generally be an item number. - -The console driver contains a scroll-back buffer for reviewing things -that may have scrolled off the screen. To use scroll-back, press the -"Scroll Lock" key on your keyboard and use the arrow or Page Up/Page -Down keys to move through the saved text. To leave scroll-back mode, -press the Scroll Lock key again. This feature is most useful for -reading back through your boot messages (go ahead, try it now!) though -it's also useful when dealing with sub-shells or other "expert modes" -that don't use menus and tend to scroll their output off the top of -the screen. - -FreeBSD also supports multiple "virtual consoles" which you can use -in order to have several active sessions at once. Use ALT-F<n> to -switch between screens, where `F<n>' is the function key corresponding -to the screen you wish to see. By default, the system comes with 8 -virtual consoles enabled - you can enable more by editing the -/etc/ttys file and turning the "off" field to "on" in the relevant vty -entries (up to 12). diff --git a/usr.sbin/sysinstall/help/usermgmt.hlp b/usr.sbin/sysinstall/help/usermgmt.hlp deleted file mode 100644 index fbd7cac..0000000 --- a/usr.sbin/sysinstall/help/usermgmt.hlp +++ /dev/null @@ -1,89 +0,0 @@ -These screens allow you to add groups and users to your system. - -You can move through the fields with the TAB, BACK-TAB and ENTER -keys. To edit a field, use DELETE or BACKSPACE. You may also use ^A -(control-A) to go to the beginning of the line, ^E (control-E) to go -to the end, ^F (control-F) to go forward a character, ^B (control-B) -to go backward one character, ^D (control-D) to delete the character -under the cursor and ^K (control-K) to delete to the end of the line. -Basically, the standard EMACS motion sequences. - -When you're done with this form, select OK. - -Many of the settings get reasonable defaults if you leave them blank. -The first time you have entered the name of the new group or user, the -system will show you what it would chose for most of these fields. -You are free to change them, of course. - - -User groups -=========== - -It's certainly almost generally a good idea to first create a new -group for your users. Common names for such a group are "users", or -even simply "other". Group names are used to control file access -permissions for users that belong to the same group. Several group -names are already used for system files. - -The numerical user or group IDs are often nothing you want to care for -explicitly. If you don't fill in these fields, the system will choose -reasonable defaults. However, these numbers (rather than the -associated names) are what the operating system actually uses to -distinguish users and groups -- hence they should normally be unique -to each person or group, respectively. - -(The initial membership list for a new group is currently -unimplemented, sorry.) - - -Users -===== - -The user's login ID is a short (up to 15 characters) alphanumeric ID -that the user must enter when logging into the system. It's often the -initial letters of the user's name, and commonly used in lower case. -It's also the local mail name for this user (though it's possible to -also set up more descriptive mail alias names later). - -The user's login group determines which group access rights the user -will initially get when logging in. If an additional list of groups is -provided which the user will become a member of, (s)he will also be -able to access files of those groups later without providing any -additional password etc. Except for the "wheel" case mentioned below, -the additional group membership list should normally not contain the -login group again. - -The user's password can also be set here, and should be chosen with -care - 6 or more characters, intermixing punctuation and numerics, and -*not* a word from the dictionary or related to the username is a good -password choice. - -Some of the system's groups have a special meaning. In particular, -members of group "wheel" are the only people who are later allowed to -become superuser using the command su(1). So if you're going to add a -new user who should later perform administrative tasks, don't forget -to add him to this group! (Well, ``he'' will most likely be yourself -in the very first place. :) - -Also, members of group "operator" will by default get permissions for -minor administrative operations, like performing system backups, or -shutting down the system -- without first becoming superuser! So, -take care when adding people to this group. - -The ``full name'' field serves as a comment only. It is also used by -mail front ends to determine the real name of the user, hence you -should actually fill in the first and last name of this user. By -convention, this field can be divided into comma-separated subfields, -where the office location, the work phone number, and the home phone -number follow the full name of the user. - -The home directory is the directory in the filesystem where the user -is being logged into, and where his personalized setup files (``dot -files'', since they usually begin with a `.' and are not displayed by -the ls(1) command by default) will be looked up. It is often created -under /usr/home/ or /home/. - -Finally, the shell is the user's initial command interpreter. The -default shell is /bin/sh, some users prefer the more historic -/bin/csh. Other, often more user-friendly and comfortable shells can -be found in the ports and packages collection. diff --git a/usr.sbin/sysinstall/http.c b/usr.sbin/sysinstall/http.c deleted file mode 100644 index 1355f08..0000000 --- a/usr.sbin/sysinstall/http.c +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (c) 1999 - * Philipp Mergenthaler <philipp.mergenthaler@stud.uni-karlsruhe.de> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "sysinstall.h" -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <sys/param.h> -#include <netdb.h> - -extern const char *ftp_dirs[]; /* defined in ftp.c */ - -static Boolean -checkAccess(Boolean proxyCheckOnly) -{ -/* - * Some proxies fetch files with certain extensions in "ascii mode" instead - * of "binary mode" for FTP. The FTP server then translates all LF to CRLF. - * - * You can force Squid to use binary mode by appending ";type=i" to the URL, - * which is what I do here. For other proxies, the LF->CRLF substitution - * is reverted in distExtract(). - */ - - int rv, s, af; - bool el, found=FALSE; /* end of header line */ - char *cp, buf[PATH_MAX], req[BUFSIZ]; - struct addrinfo hints, *res, *res0; - - af = variable_cmp(VAR_IPV6_ENABLE, "YES") ? AF_INET : AF_UNSPEC; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = af; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - if ((rv = getaddrinfo(variable_get(VAR_HTTP_HOST), - variable_get(VAR_HTTP_PORT), &hints, &res0)) != 0) { - msgConfirm("%s", gai_strerror(rv)); - variable_unset(VAR_HTTP_HOST); - return FALSE; - } - s = -1; - for (res = res0; res; res = res->ai_next) { - if ((s = socket(res->ai_family, res->ai_socktype, - res->ai_protocol)) < 0) - continue; - if (connect(s, res->ai_addr, res->ai_addrlen) >= 0) - break; - close(s); - s = -1; - } - freeaddrinfo(res0); - if (s == -1) { - msgConfirm("Couldn't connect to proxy %s:%s", - variable_get(VAR_HTTP_HOST),variable_get(VAR_HTTP_PORT)); - variable_unset(VAR_HTTP_HOST); - return FALSE; - } - if (proxyCheckOnly) { - close(s); - return TRUE; - } - - msgNotify("Checking access to\n %s", variable_get(VAR_HTTP_PATH)); - sprintf(req,"GET %s/ HTTP/1.0\r\n\r\n", variable_get(VAR_HTTP_PATH)); - write(s,req,strlen(req)); -/* - * scan the headers of the response - * this is extremely quick'n dirty - * - */ - bzero(buf, PATH_MAX); - cp=buf; - el=FALSE; - rv=read(s,cp,1); - variable_set2(VAR_HTTP_FTP_MODE,"",0); - while (rv>0) { - if ((*cp == '\012') && el) { - /* reached end of a header line */ - if (!strncmp(buf,"HTTP",4)) { - if (strtol((char *)(buf+9),0,0) == 200) { - found = TRUE; - } - } - - if (!strncmp(buf,"Server: ",8)) { - if (!strncmp(buf,"Server: Squid",13)) { - variable_set2(VAR_HTTP_FTP_MODE,";type=i",0); - } else { - variable_set2(VAR_HTTP_FTP_MODE,"",0); - } - } - /* ignore other headers */ - /* check for "\015\012" at beginning of line, i.e. end of headers */ - if ((cp-buf) == 1) - break; - cp=buf; - rv=read(s,cp,1); - } else { - el=FALSE; - if (*cp == '\015') - el=TRUE; - cp++; - rv=read(s,cp,1); - } - } - close(s); - return found; -} - -Boolean -mediaInitHTTP(Device *dev) -{ - bool found=FALSE; /* end of header line */ - char *rel, req[BUFSIZ]; - int fdir; - - /* - * First verify the proxy access - */ - checkAccess(TRUE); - while (variable_get(VAR_HTTP_HOST) == NULL) { - if (DITEM_STATUS(mediaSetHTTP(NULL)) == DITEM_FAILURE) - return FALSE; - checkAccess(TRUE); - } -again: - /* If the release is specified as "__RELEASE" or "any", then just - * assume that the path the user gave is ok. - */ - rel = variable_get(VAR_RELNAME); - /* - msgConfirm("rel: -%s-", rel); - */ - - if (strcmp(rel, "__RELEASE") && strcmp(rel, "any")) { - for (fdir = 0; ftp_dirs[fdir]; fdir++) { - sprintf(req, "%s/%s/%s", variable_get(VAR_FTP_PATH), - ftp_dirs[fdir], rel); - variable_set2(VAR_HTTP_PATH, req, 0); - if (checkAccess(FALSE)) { - found = TRUE; - break; - } - } - } else { - variable_set2(VAR_HTTP_PATH, variable_get(VAR_FTP_PATH), 0); - found = checkAccess(FALSE); - } - if (!found) { - msgConfirm("No such directory: %s\n" - "please check the URL and try again.", variable_get(VAR_HTTP_PATH)); - variable_unset(VAR_HTTP_PATH); - dialog_clear_norefresh(); - clear(); - if (DITEM_STATUS(mediaSetHTTP(NULL)) != DITEM_FAILURE) goto again; - } - return found; -} - -FILE * -mediaGetHTTP(Device *dev, char *file, Boolean probe) -{ - FILE *fp; - int rv, s, af; - bool el; /* end of header line */ - char *cp, buf[PATH_MAX], req[BUFSIZ]; - struct addrinfo hints, *res, *res0; - - af = variable_cmp(VAR_IPV6_ENABLE, "YES") ? AF_INET : AF_UNSPEC; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = af; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - if ((rv = getaddrinfo(variable_get(VAR_HTTP_HOST), - variable_get(VAR_HTTP_PORT), &hints, &res0)) != 0) { - msgConfirm("%s", gai_strerror(rv)); - return NULL; - } - s = -1; - for (res = res0; res; res = res->ai_next) { - if ((s = socket(res->ai_family, res->ai_socktype, - res->ai_protocol)) < 0) - continue; - if (connect(s, res->ai_addr, res->ai_addrlen) >= 0) - break; - close(s); - s = -1; - } - freeaddrinfo(res0); - if (s == -1) { - msgConfirm("Couldn't connect to proxy %s:%s", - variable_get(VAR_HTTP_HOST),variable_get(VAR_HTTP_PORT)); - return NULL; - } - - sprintf(req,"GET %s/%s%s HTTP/1.0\r\n\r\n", - variable_get(VAR_HTTP_PATH), file, variable_get(VAR_HTTP_FTP_MODE)); - - if (isDebug()) { - msgDebug("sending http request: %s\n",req); - } - write(s,req,strlen(req)); - -/* - * scan the headers of the response - * this is extremely quick'n dirty - * - */ - cp=buf; - el=FALSE; - rv=read(s,cp,1); - while (rv>0) { - if ((*cp == '\012') && el) { - /* reached end of a header line */ - if (!strncmp(buf,"HTTP",4)) { - rv=strtol((char *)(buf+9),0,0); - *(cp-1)='\0'; /* chop the CRLF off */ - if (probe && (rv != 200)) { - return NULL; - } else if (rv >= 500) { - msgConfirm("Server error %s when sending %s, you could try an other server",buf, req); - return NULL; - } else if (rv == 404) { - msgConfirm("%s was not found, maybe directory or release-version are wrong?",req); - return NULL; - } else if (rv >= 400) { - msgConfirm("Client error %s, you could try an other server",buf); - return NULL; - } else if (rv >= 300) { - msgConfirm("Error %s,",buf); - return NULL; - } else if (rv != 200) { - msgConfirm("Error %s when sending %s, you could try an other server",buf, req); - return NULL; - } - } - /* ignore other headers */ - /* check for "\015\012" at beginning of line, i.e. end of headers */ - if ((cp-buf) == 1) - break; - cp=buf; - rv=read(s,cp,1); - } else { - el=FALSE; - if (*cp == '\015') - el=TRUE; - cp++; - rv=read(s,cp,1); - } - } - fp=fdopen(s,"r"); - return fp; -} diff --git a/usr.sbin/sysinstall/index.c b/usr.sbin/sysinstall/index.c deleted file mode 100644 index c591cfe..0000000 --- a/usr.sbin/sysinstall/index.c +++ /dev/null @@ -1,893 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <ncurses.h> -#include <dialog.h> -#include "sysinstall.h" - -/* Macros and magic values */ -#define MAX_MENU 12 -#define _MAX_DESC 55 - -/* A structure holding the root, top and plist pointer at once */ -struct ListPtrs -{ - PkgNodePtr root; /* root of tree */ - PkgNodePtr top; /* part of tree we handle */ - PkgNodePtr plist; /* list of selected packages */ -}; -typedef struct ListPtrs* ListPtrsPtr; - -static void index_recorddeps(Boolean add, PkgNodePtr root, IndexEntryPtr ie); - -/* Shared between index_initialize() and the various clients of it */ -PkgNode Top, Plist; - -/* Smarter strdup */ -static inline char * -_strdup(char *ptr) -{ - return ptr ? strdup(ptr) : NULL; -} - -static char *descrs[] = { - "Package Selection", "To mark a package, move to it and press SPACE. If the package is\n" - "already marked, it will be unmarked or deleted (if installed).\n" - "Items marked with a `D' are dependencies which will be auto-loaded.\n" - "To search for a package by name, press ESC. To select a category,\n" - "press RETURN. NOTE: The All category selection creates a very large\n" - "submenu! If you select it, please be patient while it comes up.", - "Package Targets", "These are the packages you've selected for extraction.\n\n" - "If you're sure of these choices, select OK.\n" - "If not, select Cancel to go back to the package selection menu.\n", - "All", "All available packages in all categories.", - "accessibility", "Ports to help disabled users.", - "afterstep", "Ports to support the AfterStep window manager.", - "arabic", "Ported software for Arab countries.", - "archivers", "Utilities for archiving and unarchiving data.", - "astro", "Applications related to astronomy.", - "audio", "Audio utilities - most require a supported sound card.", - "benchmarks", "Utilities for measuring system performance.", - "biology", "Software related to biology.", - "cad", "Computer Aided Design utilities.", - "chinese", "Ported software for the Chinese market.", - "comms", "Communications utilities.", - "converters", "Format conversion utilities.", - "databases", "Database software.", - "deskutils", "Various Desktop utilities.", - "devel", "Software development utilities and libraries.", - "dns", "Domain Name Service tools.", - "docs", "Meta-ports for FreeBSD documentation.", - "editors", "Editors.", - "elisp", "Things related to Emacs Lisp.", - "emulators", "Utilities for emulating other operating systems.", - "finance", "Monetary, financial and related applications.", - "french", "Ported software for French countries.", - "ftp", "FTP client and server utilities.", - "games", "Various and sundry amusements.", - "german", "Ported software for Germanic countries.", - "geography", "Geography-related software.", - "gnome", "Components of the Gnome Desktop environment.", - "gnustep", "Software for GNUstep desktop environment.", - "graphics", "Graphics libraries and utilities.", - "haskell", "Software related to the Haskell language.", - "hamradio", "Software for amateur radio.", - "hebrew", "Ported software for Hebrew language.", - "hungarian", "Ported software for the Hungarian market.", - "ipv6", "IPv6 related software.", - "irc", "Internet Relay Chat utilities.", - "japanese", "Ported software for the Japanese market.", - "java", "Java language support.", - "kde", "Software for the K Desktop Environment.", - "kld", "Kernel loadable modules", - "korean", "Ported software for the Korean market.", - "lang", "Computer languages.", - "linux", "Linux programs that can run under binary compatibility.", - "lisp", "Software related to the Lisp language.", - "mail", "Electronic mail packages and utilities.", - "math", "Mathematical computation software.", - "mbone", "Applications and utilities for the MBONE.", - "misc", "Miscellaneous utilities.", - "multimedia", "Multimedia software.", - "net", "Networking utilities.", - "net-im", "Instant messaging software.", - "net-mgmt", "Network management tools.", - "net-p2p", "Peer to peer network applications.", - "news", "USENET News support software.", - "palm", "Software support for the Palm(tm) series.", - "parallel", "Applications dealing with parallelism in computing.", - "pear", "Software related to the Pear PHP framework.", - "perl5", "Utilities/modules for the PERL5 language.", - "plan9", "Software from the Plan9 operating system.", - "polish", "Ported software for the Polish market.", - "ports-mgmt", "Utilities for managing ports and packages.", - "portuguese", "Ported software for the Portuguese market.", - "print", "Utilities for dealing with printing.", - "python", "Software related to the Python language.", - "ruby", "Software related to the Ruby language.", - "rubygems", "Ports of RubyGems packages.", - "russian", "Ported software for the Russian market.", - "scheme", "Software related to the Scheme language.", - "science", "Scientific software.", - "security", "System security software.", - "shells", "Various shells (tcsh, bash, etc).", - "spanish", "Ported software for the Spanish market.", - "sysutils", "Various system utilities.", - "tcl", "TCL and packages that depend on it.", - "tcl80", "TCL v8.0 and packages that depend on it.", - "tcl82", "TCL v8.2 and packages that depend on it.", - "tcl83", "TCL v8.3 and packages that depend on it.", - "tcl84", "TCL v8.4 and packages that depend on it.", - "textproc", "Text processing/search utilities.", - "tk", "Tk and packages that depend on it.", - "tk80", "Tk8.0 and packages that depend on it.", - "tk82", "Tk8.2 and packages that depend on it.", - "tk83", "Tk8.3 and packages that depend on it.", - "tk84", "Tk8.4 and packages that depend on it.", - "tkstep80", "Ports to support the TkStep window manager.", - "ukrainian", "Ported software for the Ukrainian market.", - "vietnamese", "Ported software for the Vietnamese market.", - "windowmaker", "Ports to support the WindowMaker window manager.", - "www", "Web utilities (browsers, HTTP servers, etc).", - "x11", "X Window System based utilities.", - "x11-clocks", "X Window System based clocks.", - "x11-drivers", "X Window System drivers.", - "x11-fm", "X Window System based file managers.", - "x11-fonts", "X Window System fonts and font utilities.", - "x11-servers", "X Window System servers.", - "x11-themes", "X Window System themes.", - "x11-toolkits", "X Window System based development toolkits.", - "x11-wm", "X Window System window managers.", - "xfce", "Software related to the Xfce Desktop Environment.", - "zope", "Software related to the Zope platform.", - NULL, NULL, -}; - -static char * -fetch_desc(char *name) -{ - int i; - - for (i = 0; descrs[i]; i += 2) { - if (!strcmp(descrs[i], name)) - return descrs[i + 1]; - } - return "No description provided"; -} - -static PkgNodePtr -new_pkg_node(char *name, node_type type) -{ - PkgNodePtr tmp = safe_malloc(sizeof(PkgNode)); - - tmp->name = _strdup(name); - tmp->type = type; - return tmp; -} - -static char * -strip(char *buf) -{ - int i; - - for (i = 0; buf[i]; i++) - if (buf[i] == '\t' || buf[i] == '\n') - buf[i] = ' '; - return buf; -} - -static IndexEntryPtr -new_index(char *name, char *pathto, char *prefix, char *comment, char *descr, char *maint, char *deps, int volume) -{ - IndexEntryPtr tmp = safe_malloc(sizeof(IndexEntry)); - - tmp->name = _strdup(name); - tmp->path = _strdup(pathto); - tmp->prefix = _strdup(prefix); - tmp->comment = _strdup(comment); - tmp->descrfile = strip(_strdup(descr)); - tmp->maintainer = _strdup(maint); - tmp->deps = _strdup(deps); - tmp->depc = 0; - tmp->installed = package_installed(name); - tmp->vol_checked = 0; - tmp->volume = volume; - if (volume != 0) { - have_volumes = TRUE; - if (low_volume == 0) - low_volume = volume; - else if (low_volume > volume) - low_volume = volume; - if (high_volume < volume) - high_volume = volume; - } - return tmp; -} - -static void -index_register(PkgNodePtr top, char *where, IndexEntryPtr ptr) -{ - PkgNodePtr p, q; - - for (q = NULL, p = top->kids; p; p = p->next) { - if (!strcmp(p->name, where)) { - q = p; - break; - } - } - if (!p) { - /* Add new category */ - q = new_pkg_node(where, PLACE); - q->desc = fetch_desc(where); - q->next = top->kids; - top->kids = q; - } - p = new_pkg_node(ptr->name, PACKAGE); - p->desc = ptr->comment; - p->data = ptr; - p->next = q->kids; - q->kids = p; -} - -static int -copy_to_sep(char *to, char *from, int sep) -{ - char *tok; - - tok = strchr(from, sep); - if (!tok) { - *to = '\0'; - return 0; - } - *tok = '\0'; - strcpy(to, from); - return tok + 1 - from; -} - -static int -skip_to_sep(char *from, int sep) -{ - char *tok; - - tok = strchr(from, sep); - if (!tok) - return 0; - *tok = '\0'; - return tok + 1 - from; -} - -static int -readline(FILE *fp, char *buf, int max) -{ - int rv, i = 0; - char ch; - - while ((rv = fread(&ch, 1, 1, fp)) == 1 && ch != '\n' && i < max) - buf[i++] = ch; - if (i < max) - buf[i] = '\0'; - return rv; -} - -/* - * XXX - this function should do error checking, and skip corrupted INDEX - * lines without a set number of '|' delimited fields. - */ - -static int -index_parse(FILE *fp, char *name, char *pathto, char *prefix, char *comment, char *descr, char *maint, char *cats, char *rdeps, int *volume) -{ - char line[10240 + 2048 * 7]; - char junk[2048]; - char volstr[2048]; - char *cp; - int i; - - i = readline(fp, line, sizeof line); - if (i <= 0) - return EOF; - cp = line; - cp += copy_to_sep(name, cp, '|'); /* package name */ - cp += copy_to_sep(pathto, cp, '|'); /* ports directory */ - cp += copy_to_sep(prefix, cp, '|'); /* prefix */ - cp += copy_to_sep(comment, cp, '|'); /* comment */ - cp += copy_to_sep(descr, cp, '|'); /* path to pkg-descr */ - cp += copy_to_sep(maint, cp, '|'); /* maintainer */ - cp += copy_to_sep(cats, cp, '|'); /* categories */ - cp += skip_to_sep(cp, '|'); /* build deps - not used */ - cp += copy_to_sep(rdeps, cp, '|'); /* run deps */ - if (index(cp, '|')) - cp += skip_to_sep(cp, '|'); /* url - not used */ - else { - strncpy(junk, cp, 1023); - *volume = 0; - return 0; - } - if (index(cp, '|')) - cp += skip_to_sep(cp, '|'); /* extract deps - not used */ - if (index(cp, '|')) - cp += skip_to_sep(cp, '|'); /* patch deps - not used */ - if (index(cp, '|')) - cp += skip_to_sep(cp, '|'); /* fetch deps - not used */ - if (index(cp, '|')) - cp += copy_to_sep(volstr, cp, '|'); /* media volume */ - else { - strncpy(volstr, cp, 1023); - } - *volume = atoi(volstr); - return 0; -} - -int -index_read(FILE *fp, PkgNodePtr papa) -{ - char name[127], pathto[255], prefix[255], comment[255], descr[127], maint[127], cats[511], deps[2048 * 8]; - int volume; - PkgNodePtr i; - - while (index_parse(fp, name, pathto, prefix, comment, descr, maint, cats, deps, &volume) != EOF) { - char *cp, *cp2, tmp[1024]; - IndexEntryPtr idx; - - idx = new_index(name, pathto, prefix, comment, descr, maint, deps, volume); - /* For now, we only add things to menus if they're in categories. Keywords are ignored */ - for (cp = strcpy(tmp, cats); (cp2 = strchr(cp, ' ')) != NULL; cp = cp2 + 1) { - *cp2 = '\0'; - index_register(papa, cp, idx); - } - index_register(papa, cp, idx); - - /* Add to special "All" category */ - index_register(papa, "All", idx); - } - - /* Adjust dependency counts */ - for (i = papa->kids; i != NULL; i = i->next) - if (strcmp(i->name, "All") == 0) - break; - for (i = i->kids; i != NULL; i = i->next) - if (((IndexEntryPtr)i->data)->installed) - index_recorddeps(TRUE, papa, i->data); - - return 0; -} - -void -index_init(PkgNodePtr top, PkgNodePtr plist) -{ - if (top) { - top->next = top->kids = NULL; - top->name = "Package Selection"; - top->type = PLACE; - top->desc = fetch_desc(top->name); - top->data = NULL; - } - if (plist) { - plist->next = plist->kids = NULL; - plist->name = "Package Targets"; - plist->type = PLACE; - plist->desc = fetch_desc(plist->name); - plist->data = NULL; - } -} - -void -index_print(PkgNodePtr top, int level) -{ - int i; - - while (top) { - for (i = 0; i < level; i++) putchar('\t'); - printf("name [%s]: %s\n", top->type == PLACE ? "place" : "package", top->name); - for (i = 0; i < level; i++) putchar('\t'); - printf("desc: %s\n", top->desc); - if (top->kids) - index_print(top->kids, level + 1); - top = top->next; - } -} - -/* Swap one node for another */ -static void -swap_nodes(PkgNodePtr a, PkgNodePtr b) -{ - PkgNode tmp; - - tmp = *a; - *a = *b; - a->next = tmp.next; - tmp.next = b->next; - *b = tmp; -} - -/* Use a disgustingly simplistic bubble sort to put our lists in order */ -void -index_sort(PkgNodePtr top) -{ - PkgNodePtr p, q; - - /* Sort everything at the top level */ - for (p = top->kids; p; p = p->next) { - for (q = top->kids; q; q = q->next) { - if (q->next && strcmp(q->name, q->next->name) > 0) - swap_nodes(q, q->next); - } - } - - /* Now sub-sort everything n levels down */ - for (p = top->kids; p; p = p->next) { - if (p->kids) - index_sort(p); - } -} - -/* Delete an entry out of the list it's in (only the plist, at present) */ -static void -index_delete(PkgNodePtr n) -{ - if (n->next) { - PkgNodePtr p = n->next; - - *n = *(n->next); - safe_free(p); - } - else /* Kludgy end sentinal */ - n->name = NULL; -} - -/* - * Search for a given node by name, returning the category in if - * tp is non-NULL. - */ -PkgNodePtr -index_search(PkgNodePtr top, char *str, PkgNodePtr *tp) -{ - PkgNodePtr p, sp; - - for (p = top->kids; p && p->name; p = p->next) { - if (p->type == PACKAGE) { - /* If tp == NULL, we're looking for an exact package match */ - if (!tp && !strcmp(p->name, str)) - return p; - - /* If tp, we're looking for both a package and a pointer to the place it's in */ - if (tp && !strncmp(p->name, str, strlen(str))) { - *tp = top; - return p; - } - } - else if (p->kids) { - /* The usual recursion-out-of-laziness ploy */ - if ((sp = index_search(p, str, tp)) != NULL) - return sp; - } - } - if (p && !p->name) - p = NULL; - return p; -} - -static int -pkg_checked(dialogMenuItem *self) -{ - ListPtrsPtr lists = (ListPtrsPtr)self->aux; - PkgNodePtr kp = self->data, plist = lists->plist; - int i; - - i = index_search(plist, kp->name, NULL) ? TRUE : FALSE; - if (kp->type == PACKAGE && plist) { - IndexEntryPtr ie = kp->data; - int markD, markX; - - markD = ie->depc > 0; /* needed as dependency */ - markX = i || ie->installed; /* selected or installed */ - self->mark = markX ? 'X' : 'D'; - return markD || markX; - } else - return FALSE; -} - -static int -pkg_fire(dialogMenuItem *self) -{ - int ret; - ListPtrsPtr lists = (ListPtrsPtr)self->aux; - PkgNodePtr sp, kp = self->data, plist = lists->plist; - - if (!plist) - ret = DITEM_FAILURE; - else if (kp->type == PACKAGE) { - IndexEntryPtr ie = kp->data; - - sp = index_search(plist, kp->name, NULL); - /* Not already selected? */ - if (!sp) { - if (!ie->installed) { - PkgNodePtr np = (PkgNodePtr)safe_malloc(sizeof(PkgNode)); - - *np = *kp; - np->next = plist->kids; - plist->kids = np; - index_recorddeps(TRUE, lists->root, ie); - msgInfo("Added %s to selection list", kp->name); - } - else if (ie->depc == 0) { - if (!msgNoYes("Do you really want to delete %s from the system?", kp->name)) { - if (vsystem("pkg_delete %s %s", isDebug() ? "-v" : "", kp->name)) { - msgConfirm("Warning: pkg_delete of %s failed.\n Check debug output for details.", kp->name); - } - else { - ie->installed = 0; - index_recorddeps(FALSE, lists->root, ie); - } - } - } - else - msgConfirm("Warning: Package %s is needed by\n %d other installed package%s.", - kp->name, ie->depc, (ie->depc != 1) ? "s" : ""); - } - else { - index_recorddeps(FALSE, lists->root, ie); - msgInfo("Removed %s from selection list", kp->name); - index_delete(sp); - } - ret = DITEM_SUCCESS; - /* Mark menu for redraw if we had dependencies */ - if (strlen(ie->deps) > 0) - ret |= DITEM_REDRAW; - } - else { /* Not a package, must be a directory */ - int p, s; - - p = s = 0; - index_menu(lists->root, kp, plist, &p, &s); - ret = DITEM_SUCCESS | DITEM_CONTINUE; - } - return ret; -} - -static void -pkg_selected(dialogMenuItem *self, int is_selected) -{ - PkgNodePtr kp = self->data; - - if (!is_selected || kp->type != PACKAGE) - return; - msgInfo("%s", kp->desc); -} - -int -index_menu(PkgNodePtr root, PkgNodePtr top, PkgNodePtr plist, int *pos, int *scroll) -{ - struct ListPtrs lists; - size_t maxname; - int n, rval; - int curr, max; - PkgNodePtr kp; - dialogMenuItem *nitems; - Boolean hasPackages; - WINDOW *w; - - lists.root = root; - lists.top = top; - lists.plist = plist; - - hasPackages = FALSE; - nitems = NULL; - n = maxname = 0; - - /* Figure out if this menu is full of "leaves" or "branches" */ - for (kp = top->kids; kp && kp->name; kp = kp->next) { - size_t len; - - ++n; - if (kp->type == PACKAGE && plist) { - hasPackages = TRUE; - if ((len = strlen(kp->name)) > maxname) - maxname = len; - } - } - if (!n && plist) { - msgConfirm("The %s menu is empty.", top->name); - return DITEM_LEAVE_MENU; - } - - w = savescr(); - while (1) { - n = 0; - curr = max = 0; - use_helpline(NULL); - use_helpfile(NULL); - kp = top->kids; - if (!hasPackages && plist) { - nitems = item_add(nitems, "OK", NULL, NULL, NULL, NULL, NULL, NULL, &curr, &max); - nitems = item_add(nitems, "Install", NULL, NULL, NULL, NULL, NULL, NULL, &curr, &max); - } - while (kp && kp->name) { - char buf[256]; - IndexEntryPtr ie = kp->data; - - /* Brutally adjust description to fit in menu */ - if (kp->type == PACKAGE) - snprintf(buf, sizeof buf, "[%s]", ie->path ? ie->path : "External vendor"); - else - SAFE_STRCPY(buf, kp->desc); - if (strlen(buf) > (_MAX_DESC - maxname)) - buf[_MAX_DESC - maxname] = '\0'; - nitems = item_add(nitems, kp->name, buf, pkg_checked, - pkg_fire, pkg_selected, kp, &lists, - &curr, &max); - ++n; - kp = kp->next; - } - /* NULL delimiter so item_free() knows when to stop later */ - nitems = item_add(nitems, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - &curr, &max); - -recycle: - dialog_clear_norefresh(); - if (hasPackages) - rval = dialog_checklist(top->name, top->desc, -1, -1, n > MAX_MENU ? MAX_MENU : n, -n, nitems, NULL); - else - rval = dialog_menu(top->name, top->desc, -1, -1, n > MAX_MENU ? MAX_MENU : n, -n, nitems + (plist ? 2 : 0), (char *)plist, pos, scroll); - if (rval == -1 && plist) { - static char *cp; - PkgNodePtr menu; - - /* Search */ - if ((cp = msgGetInput(cp, "Search by package name. Please enter search string:")) != NULL) { - PkgNodePtr p = index_search(top, cp, &menu); - - if (p) { - int pos, scroll; - - /* These need to be set to point at the found item, actually. Hmmm! */ - pos = scroll = 0; - index_menu(root, menu, plist, &pos, &scroll); - } - else - msgConfirm("Search string: %s yielded no hits.", cp); - } - goto recycle; - } - items_free(nitems, &curr, &max); - restorescr(w); - return rval ? DITEM_FAILURE : DITEM_SUCCESS; - } -} - -int -index_extract(Device *dev, PkgNodePtr top, PkgNodePtr who, Boolean depended, - int current_volume) -{ - int status = DITEM_SUCCESS; - Boolean notyet = FALSE; - PkgNodePtr tmp2; - IndexEntryPtr id = who->data; - WINDOW *w; - - /* - * Short-circuit the package dependency checks. We're already - * maintaining a data structure of installed packages, so if a - * package is already installed, don't try to check to make sure - * that all of its dependencies are installed. At best this - * wastes a ton of cycles and can cause minor delays between - * package extraction. At worst it can cause an infinite loop with - * a certain faulty INDEX file. - */ - - if (id->installed == 1 || (have_volumes && id->vol_checked == current_volume)) - return DITEM_SUCCESS; - - w = savescr(); - if (id && id->deps && strlen(id->deps)) { - char t[2048 * 8], *cp, *cp2; - - SAFE_STRCPY(t, id->deps); - cp = t; - while (cp && DITEM_STATUS(status) == DITEM_SUCCESS) { - if ((cp2 = index(cp, ' ')) != NULL) - *cp2 = '\0'; - if ((tmp2 = index_search(top, cp, NULL)) != NULL) { - status = index_extract(dev, top, tmp2, TRUE, current_volume); - if (DITEM_STATUS(status) != DITEM_SUCCESS) { - /* package probably on a future disc volume */ - if (status & DITEM_CONTINUE) { - status = DITEM_SUCCESS; - notyet = TRUE; - } else if (variable_get(VAR_NO_CONFIRM)) - msgNotify("Loading of dependent package %s failed", cp); - else - msgConfirm("Loading of dependent package %s failed", cp); - } - } - else if (!package_installed(cp)) { - if (variable_get(VAR_NO_CONFIRM)) - msgNotify("Warning: %s is a required package but was not found.", cp); - else - msgConfirm("Warning: %s is a required package but was not found.", cp); - } - if (cp2) - cp = cp2 + 1; - else - cp = NULL; - } - } - - /* - * If iterating through disc volumes one at a time indicate failure if - * dependency install failed due to package being on a higher volume - * numbered disc, but that we should continue anyway. Note that this - * package has already been processed for this disc volume so we don't - * need to do it again. - */ - - if (notyet) { - restorescr(w); - id->vol_checked = current_volume; - return DITEM_FAILURE | DITEM_CONTINUE; - } - - /* - * Done with the deps? Try to load the real m'coy. If iterating - * through a multi-volume disc set fail the install if the package - * is on a higher numbered volume to cut down on disc switches the - * user needs to do, but indicate caller should continue processing - * despite error return. Note this package was processed for the - * current disc being checked. - */ - - if (DITEM_STATUS(status) == DITEM_SUCCESS) { - /* Prompt user if the package is not available on the current volume. */ - if(mediaDevice->type == DEVICE_TYPE_CDROM) { - if (current_volume != 0 && id->volume > current_volume) { - restorescr(w); - id->vol_checked = current_volume; - return DITEM_FAILURE | DITEM_CONTINUE; - } - while (id->volume != dev->volume) { - if (!msgYesNo("This is disc #%d. Package %s is on disc #%d\n" - "Would you like to switch discs now?\n", dev->volume, - id->name, id->volume)) { - DEVICE_SHUTDOWN(mediaDevice); - msgConfirm("Please remove disc #%d from your drive, and add disc #%d\n", - dev->volume, id->volume); - DEVICE_INIT(mediaDevice); - } else { - restorescr(w); - return DITEM_FAILURE; - } - } - } - status = package_extract(dev, who->name, depended); - if (DITEM_STATUS(status) == DITEM_SUCCESS) - id->installed = 1; - } - restorescr(w); - return status; -} - -static void -index_recorddeps(Boolean add, PkgNodePtr root, IndexEntryPtr ie) -{ - char depends[1024 * 16], *space, *todo; - PkgNodePtr found; - IndexEntryPtr found_ie; - - SAFE_STRCPY(depends, ie->deps); - for (todo = depends; todo != NULL; ) { - space = index(todo, ' '); - if (space != NULL) - *space = '\0'; - - if (strlen(todo) > 0) { /* only non-empty dependencies */ - found = index_search(root, todo, NULL); - if (found != NULL) { - found_ie = found->data; - if (add) - ++found_ie->depc; - else - --found_ie->depc; - } - } - - if (space != NULL) - todo = space + 1; - else - todo = NULL; - } -} - -static Boolean index_initted; - -/* Read and initialize global index */ -int -index_initialize(char *path) -{ - FILE *fp; - WINDOW *w = NULL; - - if (!index_initted) { - w = savescr(); - dialog_clear_norefresh(); - have_volumes = FALSE; - low_volume = high_volume = 0; - - /* Got any media? */ - if (!mediaVerify()) { - restorescr(w); - return DITEM_FAILURE; - } - - /* Does it move when you kick it? */ - if (!DEVICE_INIT(mediaDevice)) { - restorescr(w); - return DITEM_FAILURE; - } - - dialog_clear_norefresh(); - msgNotify("Attempting to fetch %s file from selected media.", path); - fp = DEVICE_GET(mediaDevice, path, TRUE); - if (!fp) { - msgConfirm("Unable to get packages/INDEX file from selected media.\n\n" - "This may be because the packages collection is not available\n" - "on the distribution media you've chosen, most likely an FTP site\n" - "without the packages collection mirrored. Please verify that\n" - "your media, or your path to the media, is correct and try again."); - DEVICE_SHUTDOWN(mediaDevice); - restorescr(w); - return DITEM_FAILURE; - } - dialog_clear_norefresh(); - msgNotify("Located INDEX, now reading package data from it..."); - index_init(&Top, &Plist); - if (index_read(fp, &Top)) { - msgConfirm("I/O or format error on packages/INDEX file.\n" - "Please verify media (or path to media) and try again."); - fclose(fp); - restorescr(w); - return DITEM_FAILURE; - } - fclose(fp); - index_sort(&Top); - index_initted = TRUE; - restorescr(w); - } - return DITEM_SUCCESS; -} diff --git a/usr.sbin/sysinstall/install.c b/usr.sbin/sysinstall/install.c deleted file mode 100644 index d265522..0000000 --- a/usr.sbin/sysinstall/install.c +++ /dev/null @@ -1,1349 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <ctype.h> -#include <sys/consio.h> -#include <sys/disklabel.h> -#include <sys/errno.h> -#include <sys/ioctl.h> -#include <sys/fcntl.h> -#include <sys/wait.h> -#include <sys/uio.h> -#include <sys/param.h> -#define MSDOSFS -#include <sys/mount.h> -#include <ufs/ufs/ufsmount.h> -#include <fs/msdosfs/msdosfsmount.h> -#undef MSDOSFS -#include <sys/stat.h> -#include <sys/sysctl.h> -#include <libdisk.h> -#include <limits.h> -#include <unistd.h> -#include <termios.h> - -/* Hack for rsaref package add, which displays interactive license. - * Used by package.c - */ -int _interactiveHack; -int FixItMode = 0; -int NCpus; - -static void create_termcap(void); -static void fixit_common(void); -int fixit_livefs_common(dialogMenuItem *self); - -#define TERMCAP_FILE "/usr/share/misc/termcap" - -static void installConfigure(void); - -Boolean -checkLabels(Boolean whinge) -{ - Device **devs; - Boolean status; - Disk *disk; - PartInfo *pi; - Chunk *c1, *c2; - int i; - - /* Don't allow whinging if noWarn is set */ - if (variable_get(VAR_NO_WARN)) - whinge = FALSE; - - status = TRUE; - HomeChunk = RootChunk = SwapChunk = NULL; - TmpChunk = UsrChunk = VarChunk = NULL; -#ifdef __ia64__ - EfiChunk = NULL; -#endif - - /* We don't need to worry about root/usr/swap if we're already multiuser */ - if (!RunningAsInit) - return status; - - devs = deviceFind(NULL, DEVICE_TYPE_DISK); - /* First verify that we have a root device */ - for (i = 0; devs[i]; i++) { - if (!devs[i]->enabled) - continue; - disk = (Disk *)devs[i]->private; - msgDebug("Scanning disk %s for root filesystem\n", disk->name); - if (!disk->chunks) - msgFatal("No chunk list found for %s!", disk->name); - for (c1 = disk->chunks->part; c1; c1 = c1->next) { -#ifdef __ia64__ - c2 = c1; -#elif defined(__powerpc__) - if (c1->type == apple) { - for (c2 = c1->part; c2; c2 = c2->next) { -#else - if (c1->type == freebsd) { - for (c2 = c1->part; c2; c2 = c2->next) { -#endif - - pi = (PartInfo *)c2->private_data; - if (c2->type == part && c2->subtype != FS_SWAP && pi != NULL) { - if (!strcmp(pi->mountpoint, "/")) { - if (RootChunk) { - if (whinge) - msgConfirm("WARNING: You have more than one root device set?!\n" - "Using the first one found."); - continue; - } - else { - RootChunk = c2; - if (isDebug()) - msgDebug("Found rootdev at %s!\n", RootChunk->name); - } - } - else if (!strcmp(pi->mountpoint, "/usr")) { - if (UsrChunk) { - if (whinge) - msgConfirm("WARNING: You have more than one /usr filesystem.\n" - "Using the first one found."); - continue; - } - else { - UsrChunk = c2; - if (isDebug()) - msgDebug("Found usrdev at %s!\n", UsrChunk->name); - } - } - else if (!strcmp(pi->mountpoint, "/var")) { - if (VarChunk) { - if (whinge) - msgConfirm("WARNING: You have more than one /var filesystem.\n" - "Using the first one found."); - continue; - } - else { - VarChunk = c2; - if (isDebug()) - msgDebug("Found vardev at %s!\n", VarChunk->name); - } - } else if (!strcmp(pi->mountpoint, "/tmp")) { - if (TmpChunk) { - if (whinge) - msgConfirm("WARNING: You have more than one /tmp filesystem.\n" - "Using the first one found."); - continue; - } - else { - TmpChunk = c2; - if (isDebug()) - msgDebug("Found tmpdev at %s!\n", TmpChunk->name); - } - } else if (!strcmp(pi->mountpoint, "/home")) { - if (HomeChunk) { - if (whinge) - msgConfirm("WARNING: You have more than one /home filesystem.\n" - "Using the first one found."); - continue; - } - else { - HomeChunk = c2; - if (isDebug()) - msgDebug("Found homedev at %s!\n", HomeChunk->name); - } - } - } -#ifndef __ia64__ - } - } -#endif - } - } - - /* Now check for swap devices */ - for (i = 0; devs[i]; i++) { - if (!devs[i]->enabled) - continue; - disk = (Disk *)devs[i]->private; - msgDebug("Scanning disk %s for swap partitions\n", disk->name); - if (!disk->chunks) - msgFatal("No chunk list found for %s!", disk->name); - for (c1 = disk->chunks->part; c1; c1 = c1->next) { - -#ifdef __ia64__ - c2 = c1; -#elif defined(__powerpc__) - if (c1->type == apple) { - for (c2 = c1->part; c2; c2 = c2->next) { -#else - if (c1->type == freebsd) { - for (c2 = c1->part; c2; c2 = c2->next) { -#endif - if (c2->type == part && c2->subtype == FS_SWAP && !SwapChunk) { - SwapChunk = c2; - if (isDebug()) - msgDebug("Found swapdev at %s!\n", SwapChunk->name); - break; - } -#ifndef __ia64__ - } - } -#endif - } - } - -#ifdef __ia64__ - for (i = 0; devs[i] != NULL; i++) { - if (!devs[i]->enabled) - continue; - disk = (Disk *)devs[i]->private; - for (c1 = disk->chunks->part; c1 != NULL; c1 = c1->next) { - pi = (PartInfo *)c1->private_data; - if (c1->type == efi && pi != NULL && pi->mountpoint[0] == '/') - EfiChunk = c1; - } - } -#endif - - if (!RootChunk && whinge) { - msgConfirm("No root device found - you must label a partition as /\n" - "in the label editor."); - status = FALSE; - } - if (!SwapChunk && whinge) { - if (msgYesNo("No swap devices found - you should create at least one\n" - "swap partition. Without swap, the install will fail\n" - "if you do not have enough RAM. Continue anyway?")) - status = FALSE; - } -#ifdef __ia64__ - if (EfiChunk == NULL && whinge) { - if (msgYesNo("No (mounted) EFI system partition found. Is this what you want?")) - status = FALSE; - } -#endif - return status; -} - -static int -installInitial(void) -{ - static Boolean alreadyDone = FALSE; - int status = DITEM_SUCCESS; - - if (alreadyDone) - return DITEM_SUCCESS; - - if (!variable_get(DISK_LABELLED)) { - msgConfirm("You need to assign disk labels before you can proceed with\n" - "the installation."); - return DITEM_FAILURE; - } - /* If it's labelled, assume it's also partitioned */ - if (!variable_get(DISK_PARTITIONED)) - variable_set2(DISK_PARTITIONED, "yes", 0); - - /* If we refuse to proceed, bail. */ - dialog_clear_norefresh(); - if (!variable_get(VAR_NO_WARN)) { - if (msgYesNo( - "Last Chance! Are you SURE you want continue the installation?\n\n" - "If you're running this on a disk with data you wish to save\n" - "then WE STRONGLY ENCOURAGE YOU TO MAKE PROPER BACKUPS before\n" - "proceeding!\n\n" - "We can take no responsibility for lost disk contents!") != 0) - return DITEM_FAILURE; - } - - if (DITEM_STATUS(diskLabelCommit(NULL)) != DITEM_SUCCESS) { - msgConfirm("Couldn't make filesystems properly. Aborting."); - return DITEM_FAILURE; - } - - if (!copySelf()) { - msgConfirm("installInitial: Couldn't clone the boot floppy onto the\n" - "root file system. Aborting!"); - return DITEM_FAILURE; - } - - if (!Restarting && chroot("/mnt") == -1) { - msgConfirm("installInitial: Unable to chroot to %s - this is bad!", - "/mnt"); - return DITEM_FAILURE; - } - - chdir("/"); - variable_set2(RUNNING_ON_ROOT, "yes", 0); - - /* Configure various files in /etc */ - if (DITEM_STATUS(configResolv(NULL)) == DITEM_FAILURE) - status = DITEM_FAILURE; - if (DITEM_STATUS(configFstab(NULL)) == DITEM_FAILURE) - status = DITEM_FAILURE; - - /* stick a helpful shell over on the 4th VTY */ - if (!variable_get(VAR_NO_HOLOSHELL)) - systemCreateHoloshell(); - - alreadyDone = TRUE; - return status; -} - -int -installFixitHoloShell(dialogMenuItem *self) -{ - FixItMode = 1; - systemCreateHoloshell(); - FixItMode = 0; - return DITEM_SUCCESS; -} - -/* - * Load the live filesystem from USB media. - */ -int -installFixitUSB(dialogMenuItem *self) -{ - if (!RunningAsInit) - return (DITEM_SUCCESS); - - variable_set2(SYSTEM_STATE, "fixit", 0); - - if (DITEM_STATUS(mediaSetUSB(NULL)) != DITEM_SUCCESS || - !DEVICE_INIT(mediaDevice)) { - msgConfirm("No USB devices found!"); - return (DITEM_FAILURE); - } else if (!file_readable("/dist/rescue/ldconfig")) { - msgConfirm("Unable to find a FreeBSD live filesystem."); - return (DITEM_FAILURE); - } - - if (DITEM_STATUS(fixit_livefs_common(self)) == DITEM_FAILURE) - return (DITEM_FAILURE); - - mediaClose(); - return (DITEM_SUCCESS); -} - -int -installFixitCDROM(dialogMenuItem *self) -{ - int need_eject; - - if (!RunningAsInit) - return DITEM_SUCCESS; - - variable_set2(SYSTEM_STATE, "fixit", 0); - need_eject = 0; - CDROMInitQuiet = 1; - while (1) { - if (need_eject) - msgConfirm( - "Please insert a FreeBSD live filesystem CD/DVD and press return"); - if (DITEM_STATUS(mediaSetCDROM(NULL)) != DITEM_SUCCESS - || !DEVICE_INIT(mediaDevice)) { - /* If we can't initialize it, it's probably not a FreeBSD CDROM so punt on it */ - mediaClose(); - if (need_eject && msgYesNo("Unable to mount the disc. Do you want to try again?") != 0) - return DITEM_FAILURE; - } else if (!file_readable("/dist/rescue/ldconfig")) { - mediaClose(); - if (need_eject && - msgYesNo("Unable to find a FreeBSD live filesystem. Do you want to try again?") != 0) - return DITEM_FAILURE; - } else - break; - CDROMInitQuiet = 0; - need_eject = 1; - } - CDROMInitQuiet = 0; - - if (DITEM_STATUS(fixit_livefs_common(self)) == DITEM_FAILURE) - return (DITEM_FAILURE); - - mediaClose(); - if (need_eject) - msgConfirm("Please remove the FreeBSD fixit CDROM/DVD now."); - return DITEM_SUCCESS; -} - -int -installFixitFloppy(dialogMenuItem *self) -{ - struct ufs_args args; - extern char *distWanted; - - if (!RunningAsInit) - return DITEM_SUCCESS; - - /* Try to open the floppy drive */ - if (DITEM_STATUS(mediaSetFloppy(NULL)) == DITEM_FAILURE || !mediaDevice) { - msgConfirm("Unable to set media device to floppy."); - mediaClose(); - return DITEM_FAILURE; - } - - memset(&args, 0, sizeof(args)); - args.fspec = mediaDevice->devname; - mediaDevice->private = "/mnt2"; - distWanted = NULL; - Mkdir("/mnt2"); - - variable_set2(SYSTEM_STATE, "fixit", 0); - - while (1) { - if (!DEVICE_INIT(mediaDevice)) { - if (msgYesNo("The attempt to mount the fixit floppy failed, bad floppy\n" - "or unclean filesystem. Do you want to try again?")) - return DITEM_FAILURE; - } - else - break; - } - if (!directory_exists("/tmp")) - (void)symlink("/mnt2/tmp", "/tmp"); - fixit_common(); - mediaClose(); - msgConfirm("Please remove the fixit floppy now."); - return DITEM_SUCCESS; -} - -/* - * The common code for both fixit variants. - */ -static void -fixit_common(void) -{ - pid_t child; - int waitstatus; - - if (!directory_exists("/var/tmp/vi.recover")) { - if (DITEM_STATUS(Mkdir("/var/tmp/vi.recover")) != DITEM_SUCCESS) { - msgConfirm("Warning: Was unable to create a /var/tmp/vi.recover directory.\n" - "vi will kvetch and moan about it as a result but should still\n" - "be essentially usable."); - } - } - if (!directory_exists("/bin")) - (void)Mkdir("/bin"); - (void)symlink("/stand/sh", "/bin/sh"); - /* Link the /etc/ files */ - if (DITEM_STATUS(Mkdir("/etc")) != DITEM_SUCCESS) - msgConfirm("Unable to create an /etc directory! Things are weird on this floppy.."); - else if ((symlink("/mnt2/etc/spwd.db", "/etc/spwd.db") == -1 && errno != EEXIST) || - (symlink("/mnt2/etc/protocols", "/etc/protocols") == -1 && errno != EEXIST) || - (symlink("/mnt2/etc/group", "/etc/group") == -1 && errno != EEXIST) || - (symlink("/mnt2/etc/services", "/etc/services") == -1 && errno != EEXIST)) - msgConfirm("Couldn't symlink the /etc/ files! I'm not sure I like this.."); - if (!file_readable(TERMCAP_FILE)) - create_termcap(); - if (strcmp(variable_get(VAR_FIXIT_TTY), "serial") == 0) - systemSuspendDialog(); /* must be before the fork() */ - if (!(child = fork())) { - int i, fd; - struct termios foo; - extern int login_tty(int); - - ioctl(0, TIOCNOTTY, NULL); - for (i = getdtablesize(); i >= 0; --i) - close(i); - - if (strcmp(variable_get(VAR_FIXIT_TTY), "serial") == 0) - fd = open("/dev/console", O_RDWR); - else - fd = open("/dev/ttyv3", O_RDWR); - ioctl(0, TIOCSCTTY, &fd); - dup2(0, 1); - dup2(0, 2); - DebugFD = 2; - if (login_tty(fd) == -1) - msgDebug("fixit: I can't set the controlling terminal.\n"); - - signal(SIGTTOU, SIG_IGN); - if (tcgetattr(0, &foo) != -1) { - foo.c_cc[VERASE] = '\010'; - if (tcsetattr(0, TCSANOW, &foo) == -1) - msgDebug("fixit shell: Unable to set erase character.\n"); - } - else - msgDebug("fixit shell: Unable to get terminal attributes!\n"); - setenv("PATH", "/bin:/sbin:/usr/bin:/usr/sbin:/stand:" - "/mnt2/stand:/mnt2/bin:/mnt2/sbin:/mnt2/usr/bin:/mnt2/usr/sbin", 1); - if (strcmp(variable_get(VAR_FIXIT_TTY), "serial") == 0) { - printf("Waiting for fixit shell to exit.\n" - "When you are done, type ``exit'' to exit\n" - "the fixit shell and be returned here.\n\n"); - fflush(stdout); - } else { - ioctl(fd, VT_ACTIVATE, 0); - } - - /* use the .profile from the fixit medium */ - setenv("HOME", "/mnt2", 1); - chdir("/mnt2"); - execlp("sh", "-sh", (char *)0); - msgDebug("fixit shell: Failed to execute shell!\n"); - _exit(1);; - } - else { - if (strcmp(variable_get(VAR_FIXIT_TTY), "standard") == 0) { - dialog_clear_norefresh(); - msgNotify("Waiting for fixit shell to exit. Go to VTY4 now by\n" - "typing ALT-F4. When you are done, type ``exit'' to exit\n" - "the fixit shell and be returned here.\n"); - } - (void)waitpid(child, &waitstatus, 0); - if (strcmp(variable_get(VAR_FIXIT_TTY), "serial") == 0) - systemResumeDialog(); - else if (OnVTY) { - ioctl(0, VT_ACTIVATE, 0); - msgInfo(NULL); - } - } - dialog_clear(); -} - -/* - * Some path/lib setup is required for the livefs fixit image. Since there's - * more than one media type for livefs now, this has been broken off into it's - * own function. - */ -int -fixit_livefs_common(dialogMenuItem *self) -{ - struct stat sb; - - /* - * USB and CDROM media get mounted to /dist, but fixit code looks in - * /mnt2. - */ - unlink("/mnt2"); - rmdir("/mnt2"); - - if (symlink("/dist", "/mnt2")) { - msgConfirm("Unable to symlink /mnt2 to the disc mount point."); - return (DITEM_FAILURE); - } - - /* - * If /tmp points to /mnt2/tmp from a previous fixit floppy session, - * recreate it. - */ - if (lstat("/tmp", &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFLNK) - unlink("/tmp"); - Mkdir("/tmp"); - - /* Generate a new ld.so.hints */ - if (!file_readable("/var/run/ld.so.hints")) { - Mkdir("/var/run"); - if (vsystem("/mnt2/rescue/ldconfig -s /mnt2/lib " - "/mnt2/usr/lib")) { - msgConfirm("Warning: ldconfig could not create the " - "ld.so hints file.\nDynamic executables from the " - "disc likely won't work."); - } - } - - /* Create required libexec symlinks. */ - Mkdir("/libexec"); - if (!file_readable("/libexec/ld.so") && - file_readable("/mnt2/libexec/ld.so")) { - if (symlink("/mnt2/libexec/ld.so", "/libexec/ld.so")) - msgDebug("Couldn't link to ld.so\n"); - } - - if (!file_readable("/libexec/ld-elf.so.1")) { - if (symlink("/mnt2/libexec/ld-elf.so.1", - "/libexec/ld-elf.so.1")) { - msgConfirm("Warning: could not create the symlink for " - "ld-elf.so.1\nDynamic executables from the disc " - "likely won't work."); - } - } - - /* $PATH doesn't include /mnt2 by default. Create convenient symlink. */ - if (!file_readable("/usr/bin/vi")) - symlink("/mnt2/usr/bin/vi", "/usr/bin/vi"); - - /* Shared code used by all fixit types. */ - fixit_common(); - - return (DITEM_SUCCESS); -} - -int -installExpress(dialogMenuItem *self) -{ - int i; - - dialog_clear_norefresh(); - variable_set2(SYSTEM_STATE, "express", 0); -#ifdef WITH_SLICES - if (DITEM_STATUS((i = diskPartitionEditor(self))) == DITEM_FAILURE) - return i; -#endif - - if (DITEM_STATUS((i = diskLabelEditor(self))) == DITEM_FAILURE) - return i; - - if (DITEM_STATUS((i = installCommit(self))) == DITEM_SUCCESS) { - i |= DITEM_LEAVE_MENU; - - /* Give user the option of one last configuration spree */ - installConfigure(); - } - return i; -} - -/* Standard mode installation */ -int -installStandard(dialogMenuItem *self) -{ - int i; -#ifdef WITH_SLICES - int tries = 0; - Device **devs; -#endif - - variable_set2(SYSTEM_STATE, "standard", 0); - dialog_clear_norefresh(); -#ifdef WITH_SLICES - msgConfirm("In the next menu, you will need to set up an MBR partitioning\n" - "scheme for your hard disk. If you simply wish to devote all disk space\n" - "to FreeBSD (overwriting anything else that might be on the disk selected)\n" - "then use the (A)ll command to create a single partition followed\n" - "by a (Q)uit. If you wish to allocate only free space to FreeBSD, move to a\n" - "partition marked \"unused\" and use the (C)reate command."); - -nodisks: - if (DITEM_STATUS(diskPartitionEditor(self)) == DITEM_FAILURE) - return DITEM_FAILURE; - - if (diskGetSelectCount(&devs) <= 0 && tries < 3) { - msgConfirm("You need to select some disks to operate on! Be sure to use SPACE\n" - "instead of RETURN in the disk selection menu when selecting a disk."); - ++tries; - goto nodisks; - } - - msgConfirm("Now you need to create BSD partitions inside of the MBR partition(s)\n" - "just created. If you have a reasonable amount of disk space (1GB or more)\n" - "and don't have any special requirements, simply use the (A)uto command to\n" - "allocate space automatically. If you have more specific needs or just don't\n" - "care for the layout chosen by (A)uto, press F1 for more information on\n" - "manual layout."); -#else - msgConfirm("First you need to create BSD partitions on the disk which you are\n" - "installing to. If you have a reasonable amount of disk space (1GB or more)\n" - "and don't have any special requirements, simply use the (A)uto command to\n" - "allocate space automatically. If you have more specific needs or just don't\n" - "care for the layout chosen by (A)uto, press F1 for more information on\n" - "manual layout."); -#endif - - if (DITEM_STATUS(diskLabelEditor(self)) == DITEM_FAILURE) - return DITEM_FAILURE; - - if (DITEM_STATUS((i = installCommit(self))) == DITEM_FAILURE) { - dialog_clear(); - msgConfirm("Installation completed with some errors. You may wish to\n" - "scroll through the debugging messages on VTY1 with the\n" - "scroll-lock feature. You can also choose \"No\" at the next\n" - "prompt and reboot and try the installation again."); - return i; - - } - else { - dialog_clear(); - msgConfirm("Congratulations! You now have FreeBSD installed on your system.\n\n" - "We will now move on to the final configuration questions.\n" - "For any option you do not wish to configure, simply select\n" - "No.\n\n" - "If you wish to re-enter this utility after the system is up, you\n" - "may do so by typing: /usr/sbin/sysinstall."); - } - if (mediaDevice->type != DEVICE_TYPE_FTP && mediaDevice->type != DEVICE_TYPE_NFS) { - if (!msgYesNo("Would you like to configure any Ethernet or PLIP network devices?")) { - Device *tmp = tcpDeviceSelect(); - - if (tmp && !((DevInfo *)tmp->private)->use_dhcp && !msgYesNo("Would you like to bring the %s interface up right now?", tmp->name)) - if (!DEVICE_INIT(tmp)) - msgConfirm("Initialization of %s device failed.", tmp->name); - } - dialog_clear_norefresh(); - } - - if (!msgNoYes("Do you want this machine to function as a network gateway?")) - variable_set2("gateway_enable", "YES", 1); - - dialog_clear_norefresh(); - if (!msgNoYes("Do you want to configure inetd and the network services that it provides?")) - configInetd(self); - - dialog_clear_norefresh(); - if (!msgNoYes("Would you like to enable SSH login?")) - variable_set2("sshd_enable", "YES", 1); - - dialog_clear_norefresh(); - if (!msgNoYes("Do you want to have anonymous FTP access to this machine?")) - configAnonFTP(self); - - dialog_clear_norefresh(); - if (!msgNoYes("Do you want to configure this machine as an NFS server?")) - configNFSServer(self); - - dialog_clear_norefresh(); - if (!msgNoYes("Do you want to configure this machine as an NFS client?")) - variable_set2("nfs_client_enable", "YES", 1); - -#ifdef WITH_SYSCONS - dialog_clear_norefresh(); - if (!msgNoYes("Would you like to customize your system console settings?")) - dmenuOpenSimple(&MenuSyscons, FALSE); -#endif - - dialog_clear_norefresh(); - if (!msgYesNo("Would you like to set this machine's time zone now?")) - systemExecute("tzsetup"); - -#ifdef WITH_MICE - dialog_clear_norefresh(); - if (!msgNoYes("Does this system have a PS/2, serial, or bus mouse?")) - dmenuOpenSimple(&MenuMouse, FALSE); -#endif - -#ifdef __i386__ - if (checkLoaderACPI() != 0) { - dialog_clear_norefresh(); - if (!msgNoYes("ACPI was disabled during boot.\n" - "Would you like to disable it permanently?")) - (void)configLoaderACPI(1 /*disable*/); - } -#endif - - /* Now would be a good time to checkpoint the configuration data */ - configRC_conf(); - sync(); - - dialog_clear_norefresh(); - if (!msgYesNo("The FreeBSD package collection is a collection of thousands of ready-to-run\n" - "applications, from text editors to games to Web servers and more. Would you\n" - "like to browse the collection now?")) { - (void)configPackages(self); - } - - if (!msgYesNo("Would you like to add any initial user accounts to the system?\n" - "Adding at least one account for yourself at this stage is suggested\n" - "since working as the \"root\" user is dangerous (it is easy to do\n" - "things which adversely affect the entire system).")) - (void)configUsers(self); - - msgConfirm("Now you must set the system manager's password.\n" - "This is the password you'll use to log in as \"root\"."); - if (!systemExecute("passwd root")) - variable_set2("root_password", "YES", 0); - - /* XXX Put whatever other nice configuration questions you'd like to ask the user here XXX */ - - /* Give user the option of one last configuration spree */ - dialog_clear_norefresh(); - installConfigure(); - return DITEM_LEAVE_MENU; -} - -/* The version of commit we call from the Install Custom menu */ -int -installCustomCommit(dialogMenuItem *self) -{ - int i; - - i = installCommit(self); - if (DITEM_STATUS(i) == DITEM_SUCCESS) { - /* Give user the option of one last configuration spree */ - installConfigure(); - return i; - } - else - msgConfirm("The commit operation completed with errors. Not\n" - "updating /etc files."); - return i; -} - -/* - * What happens when we finally decide to going ahead with the installation. - * - * This is broken into multiple stages so that the user can do a full - * installation but come back here again to load more distributions, - * perhaps from a different media type. This would allow, for - * example, the user to load the majority of the system from CDROM and - * then use ftp to load a different dist. - */ -int -installCommit(dialogMenuItem *self) -{ - int i; - char *str; - - dialog_clear_norefresh(); - if (!Dists) - distConfig(NULL); - - if (!Dists) { - (void)dmenuOpenSimple(&MenuDistributions, FALSE); - /* select reasonable defaults if necessary */ - if (!Dists) - Dists = _DIST_USER; - if (!KernelDists) - KernelDists = selectKernel(); - } - - if (!mediaVerify()) - return DITEM_FAILURE; - - str = variable_get(SYSTEM_STATE); - if (isDebug()) - msgDebug("installCommit: System state is `%s'\n", str); - - /* Installation stuff we wouldn't do to a running system */ - if (RunningAsInit && DITEM_STATUS((i = installInitial())) == DITEM_FAILURE) - return i; - -try_media: - if (!DEVICE_INIT(mediaDevice)) { - if (!msgYesNo("Unable to initialize selected media. Would you like to\n" - "adjust your media configuration and try again?")) { - mediaDevice = NULL; - if (!mediaVerify()) - return DITEM_FAILURE; - else - goto try_media; - } - else - return DITEM_FAILURE; - } - - /* Now go get it all */ - i = distExtractAll(self); - - if (i == FALSE) - return DITEM_FAILURE; - - /* When running as init, *now* it's safe to grab the rc.foo vars */ - installEnvironment(); - - variable_set2(SYSTEM_STATE, DITEM_STATUS(i) == DITEM_FAILURE ? "error-install" : "full-install", 0); - - return i; -} - -static void -installConfigure(void) -{ - /* Final menu of last resort */ - if (!msgNoYes("Visit the general configuration menu for a chance to set\n" - "any last options?")) - dmenuOpenSimple(&MenuConfigure, FALSE); - else - dmenuExit(NULL); - - configRC_conf(); - sync(); -} - -int -installFixupBase(dialogMenuItem *self) -{ - FILE *orig, *new; - char buf[1024]; - char *pos; -#if defined(__i386__) || defined(__amd64__) - FILE *fp; -#endif -#ifdef __ia64__ - const char *efi_mntpt; -#endif - - /* All of this is done only as init, just to be safe */ - if (RunningAsInit) { -#if defined(__i386__) || defined(__amd64__) - if ((fp = fopen("/boot/loader.conf", "a")) != NULL) { - if (!OnVTY) { - fprintf(fp, "# -- sysinstall generated deltas -- #\n"); - fprintf(fp, "console=\"comconsole\"\n"); - } - fclose(fp); - } -#endif - - /* Fixup /etc/ttys to start a getty on the serial port. - This way after a serial installation you can login via - the serial port */ - - if (!OnVTY){ - if (((orig=fopen("/etc/ttys","r")) != NULL) && - ((new=fopen("/etc/ttys.tmp","w")) != NULL)) { - while (fgets(buf,sizeof(buf),orig)){ - if (strstr(buf,"ttyu0")){ - if ((pos=strstr(buf,"off"))){ - *pos++='o'; - *pos++='n'; - *pos++=' '; - } - } - fputs(buf,new); - } - fclose(orig); - fclose(new); - - rename("/etc/ttys.tmp","/etc/ttys"); - unlink("/etc/ttys.tmp"); - } - } - - - /* BOGON #2: We leave /etc in a bad state */ - chmod("/etc", 0755); - - /* BOGON #3: No /var/db/mountdtab complains */ - Mkdir("/var/db"); - creat("/var/db/mountdtab", 0644); - - /* BOGON #4: /compat created by default in root fs */ - Mkdir("/usr/compat"); - vsystem("ln -s usr/compat /compat"); - - /* BOGON #5: aliases database not built for bin */ - vsystem("newaliases"); - - /* BOGON #6: Remove /stand (finally) */ - vsystem("rm -rf /stand"); - - /* Now run all the mtree stuff to fix things up */ - vsystem("mtree -deU -f /etc/mtree/BSD.root.dist -p /"); - vsystem("mtree -deU -f /etc/mtree/BSD.var.dist -p /var"); - vsystem("mtree -deU -f /etc/mtree/BSD.usr.dist -p /usr"); - -#ifdef __ia64__ - /* Move /boot to the EFI partition and make /boot a link to it. */ - efi_mntpt = (EfiChunk != NULL) ? ((PartInfo *)EfiChunk->private_data)->mountpoint : NULL; - if (efi_mntpt != NULL) { - vsystem("if [ ! -L /boot ]; then mv /boot %s; fi", efi_mntpt); - vsystem("if [ ! -e /boot ]; then ln -sf %s/boot /boot; fi", - efi_mntpt + 1); /* Skip leading '/' */ - /* Make sure the kernel knows which partition is the root file system. */ - vsystem("echo 'vfs.root.mountfrom=\"ufs:/dev/%s\"' >> /boot/loader.conf", RootChunk->name); - } -#endif - - /* Do all the last ugly work-arounds here */ - } - return DITEM_SUCCESS | DITEM_RESTORE; -} - -int -installFixupKernel(dialogMenuItem *self, int dists) -{ - - /* All of this is done only as init, just to be safe */ - if (RunningAsInit) { - /* - * Install something as /boot/kernel. - * - * NB: we assume any existing kernel has been saved - * already and the /boot/kernel we remove is empty. - */ - vsystem("rm -rf /boot/kernel"); - vsystem("mv /boot/" GENERIC_KERNEL_NAME " /boot/kernel"); - } - return DITEM_SUCCESS | DITEM_RESTORE; -} - -#define QUEUE_YES 1 -#define QUEUE_NO 0 -static int -performNewfs(PartInfo *pi, char *dname, int queue) -{ - char buffer[LINE_MAX]; - - if (pi->do_newfs) { - switch(pi->newfs_type) { - case NEWFS_UFS: - snprintf(buffer, LINE_MAX, "%s %s %s %s %s", - NEWFS_UFS_CMD, - pi->newfs_data.newfs_ufs.softupdates ? "-U" : "", - pi->newfs_data.newfs_ufs.ufs1 ? "-O1" : "-O2", - pi->newfs_data.newfs_ufs.user_options, - dname); - break; - - case NEWFS_MSDOS: - snprintf(buffer, LINE_MAX, "%s %s", NEWFS_MSDOS_CMD, - dname); - break; - - case NEWFS_CUSTOM: - snprintf(buffer, LINE_MAX, "%s %s", - pi->newfs_data.newfs_custom.command, dname); - break; - } - - if (queue == QUEUE_YES) { - command_shell_add(pi->mountpoint, buffer); - return (0); - } else - return (vsystem(buffer)); - } - return (0); -} - -/* Go newfs and/or mount all the filesystems we've been asked to */ -int -installFilesystems(dialogMenuItem *self) -{ - int i; - Disk *disk; - Chunk *c1, *c2; - Device **devs; - PartInfo *root; - char dname[80]; - Boolean upgrade = FALSE; - - /* If we've already done this, bail out */ - if (!variable_cmp(DISK_LABELLED, "written")) - return DITEM_SUCCESS; - - upgrade = !variable_cmp(SYSTEM_STATE, "upgrade"); - if (!checkLabels(TRUE)) - return DITEM_FAILURE; - - root = (RootChunk != NULL) ? (PartInfo *)RootChunk->private_data : NULL; - - command_clear(); - if (SwapChunk && RunningAsInit) { - /* As the very first thing, try to get ourselves some swap space */ - sprintf(dname, "/dev/%s", SwapChunk->name); - if (!Fake && !file_readable(dname)) { - msgConfirm("Unable to find device node for %s in /dev!\n" - "The creation of filesystems will be aborted.", dname); - return DITEM_FAILURE; - } - - if (!Fake) { - if (!swapon(dname)) { - dialog_clear_norefresh(); - msgNotify("Added %s as initial swap device", dname); - } - else { - msgConfirm("WARNING! Unable to swap to %s: %s\n" - "This may cause the installation to fail at some point\n" - "if you don't have a lot of memory.", dname, strerror(errno)); - } - } - } - - if (RootChunk && RunningAsInit) { - /* Next, create and/or mount the root device */ - sprintf(dname, "/dev/%s", RootChunk->name); - if (!Fake && !file_readable(dname)) { - msgConfirm("Unable to make device node for %s in /dev!\n" - "The creation of filesystems will be aborted.", dname); - return DITEM_FAILURE | DITEM_RESTORE; - } - if (strcmp(root->mountpoint, "/")) - msgConfirm("Warning: %s is marked as a root partition but is mounted on %s", RootChunk->name, root->mountpoint); - - if (root->do_newfs && (!upgrade || - !msgNoYes("You are upgrading - are you SURE you want to newfs " - "the root partition?"))) { - int i; - - dialog_clear_norefresh(); - msgNotify("Making a new root filesystem on %s", dname); - i = performNewfs(root, dname, QUEUE_NO); - if (i) { - msgConfirm("Unable to make new root filesystem on %s!\n" - "Command returned status %d", dname, i); - return DITEM_FAILURE | DITEM_RESTORE; - } - } - else { - if (!upgrade) { - msgConfirm("Warning: Using existing root partition."); - } - dialog_clear_norefresh(); - msgNotify("Checking integrity of existing %s filesystem.", dname); - i = vsystem("fsck_ffs -y %s", dname); - if (i) - msgConfirm("Warning: fsck returned status of %d for %s.\n" - "This partition may be unsafe to use.", i, dname); - } - - /* - * If soft updates was enabled in the editor but we didn't newfs, - * use tunefs to update the soft updates flag on the file system. - */ - if (!root->do_newfs && root->newfs_type == NEWFS_UFS && - root->newfs_data.newfs_ufs.softupdates) { - i = vsystem("tunefs -n enable %s", dname); - if (i) - msgConfirm("Warning: Unable to enable soft updates" - " for root file system on %s", dname); - } - - /* Switch to block device */ - sprintf(dname, "/dev/%s", RootChunk->name); - if (Mount("/mnt", dname)) { - msgConfirm("Unable to mount the root file system on %s! Giving up.", dname); - return DITEM_FAILURE | DITEM_RESTORE; - } - - /* Mount devfs for other partitions to mount */ - Mkdir("/mnt/dev"); - if (!Fake) { - struct iovec iov[4]; - - iov[0].iov_base = "fstype"; - iov[0].iov_len = strlen(iov[0].iov_base) + 1; - iov[1].iov_base = "devfs"; - iov[1].iov_len = strlen(iov[1].iov_base) + 1; - iov[2].iov_base = "fspath"; - iov[2].iov_len = strlen(iov[2].iov_base) + 1; - iov[3].iov_base = "/mnt/dev"; - iov[3].iov_len = strlen(iov[3].iov_base) + 1; - i = nmount(iov, 4, 0); - - if (i) { - dialog_clear_norefresh(); - msgConfirm("Unable to mount DEVFS (error %d)", errno); - return DITEM_FAILURE | DITEM_RESTORE; - } - } - } - - /* Now buzz through the rest of the partitions and mount them too */ - devs = deviceFind(NULL, DEVICE_TYPE_DISK); - for (i = 0; devs[i]; i++) { - if (!devs[i]->enabled) - continue; - - disk = (Disk *)devs[i]->private; - if (!disk->chunks) { - msgConfirm("No chunk list found for %s!", disk->name); - return DITEM_FAILURE | DITEM_RESTORE; - } - for (c1 = disk->chunks->part; c1; c1 = c1->next) { -#ifdef __ia64__ - if (c1->type == part) { - c2 = c1; - { -#elif defined(__powerpc__) - if (c1->type == apple) { - for (c2 = c1->part; c2; c2 = c2->next) { -#else - if (c1->type == freebsd) { - for (c2 = c1->part; c2; c2 = c2->next) { -#endif - if (c2->type == part && c2->subtype != FS_SWAP && c2->private_data) { - PartInfo *tmp = (PartInfo *)c2->private_data; - - /* Already did root */ - if (c2 == RootChunk) - continue; - - sprintf(dname, "%s/dev/%s", - RunningAsInit ? "/mnt" : "", c2->name); - - if (tmp->do_newfs && (!upgrade || - !msgNoYes("You are upgrading - are you SURE you" - " want to newfs /dev/%s?", c2->name))) - performNewfs(tmp, dname, QUEUE_YES); - else - command_shell_add(tmp->mountpoint, - "fsck_ffs -y %s/dev/%s", RunningAsInit ? - "/mnt" : "", c2->name); -#if 0 - if (tmp->soft) - command_shell_add(tmp->mountpoint, - "tunefs -n enable %s/dev/%s", RunningAsInit ? - "/mnt" : "", c2->name); -#endif - command_func_add(tmp->mountpoint, Mount, c2->name); - } - else if (c2->type == part && c2->subtype == FS_SWAP) { - char fname[80]; - int i; - - if (c2 == SwapChunk) - continue; - sprintf(fname, "%s/dev/%s", RunningAsInit ? "/mnt" : "", c2->name); - i = (Fake || swapon(fname)); - if (!i) { - dialog_clear_norefresh(); - msgNotify("Added %s as an additional swap device", fname); - } - else { - msgConfirm("Unable to add %s as a swap device: %s", fname, strerror(errno)); - } - } - } - } - else if (c1->type == fat && c1->private_data && - (root->do_newfs || upgrade)) { - char name[FILENAME_MAX]; - - sprintf(name, "%s/%s", RunningAsInit ? "/mnt" : "", ((PartInfo *)c1->private_data)->mountpoint); - Mkdir(name); - } -#if defined(__ia64__) - else if (c1->type == efi && c1->private_data) { - PartInfo *pi = (PartInfo *)c1->private_data; - - sprintf(dname, "%s/dev/%s", RunningAsInit ? "/mnt" : "", - c1->name); - - if (pi->do_newfs && (!upgrade || - !msgNoYes("You are upgrading - are you SURE you want to " - "newfs /dev/%s?", c1->name))) - performNewfs(pi, dname, QUEUE_YES); - - command_func_add(pi->mountpoint, Mount_msdosfs, c1->name); - } -#endif - } - } - - command_sort(); - command_execute(); - dialog_clear_norefresh(); - return DITEM_SUCCESS | DITEM_RESTORE; -} - -/* Initialize various user-settable values to their defaults */ -int -installVarDefaults(dialogMenuItem *self) -{ - char *cp, ncpus[10]; - - /* Set default startup options */ - cp = getsysctlbyname("kern.osrelease"); - variable_set2(VAR_RELNAME, cp, 0); - free(cp); - variable_set2(VAR_CPIO_VERBOSITY, "high", 0); - variable_set2(VAR_INSTALL_ROOT, "/", 0); - variable_set2(VAR_INSTALL_CFG, "install.cfg", 0); - cp = getenv("EDITOR"); - if (!cp) - cp = "/usr/bin/ee"; - variable_set2(VAR_EDITOR, cp, 0); - variable_set2(VAR_FTP_USER, "ftp", 0); - variable_set2(VAR_BROWSER_PACKAGE, "links", 0); - variable_set2(VAR_BROWSER_BINARY, "/usr/local/bin/links", 0); - variable_set2(VAR_FTP_STATE, "passive", 0); - variable_set2(VAR_NFS_SECURE, "NO", -1); - variable_set2(VAR_NFS_TCP, "NO", -1); - variable_set2(VAR_NFS_V3, "YES", -1); - if (OnVTY) - variable_set2(VAR_FIXIT_TTY, "standard", 0); - else - variable_set2(VAR_FIXIT_TTY, "serial", 0); - variable_set2(VAR_PKG_TMPDIR, "/var/tmp", 0); - variable_set2(VAR_MEDIA_TIMEOUT, itoa(MEDIA_TIMEOUT), 0); - if (!RunningAsInit) - variable_set2(SYSTEM_STATE, "update", 0); - else - variable_set2(SYSTEM_STATE, "init", 0); - variable_set2(VAR_NEWFS_ARGS, "-b 16384 -f 2048", 0); - variable_set2(VAR_CONSTERM, "NO", 0); - if (NCpus <= 0) - NCpus = 1; - snprintf(ncpus, sizeof(ncpus), "%u", NCpus); - variable_set2(VAR_NCPUS, ncpus, 0); - return DITEM_SUCCESS; -} - -/* Load the environment up from various system configuration files */ -void -installEnvironment(void) -{ - configEnvironmentRC_conf(); - if (file_readable("/etc/resolv.conf")) - configEnvironmentResolv("/etc/resolv.conf"); -} - -/* Copy the boot floppy contents into /stand */ -Boolean -copySelf(void) -{ - int i; - - if (file_readable("/boot.help")) - vsystem("cp /boot.help /mnt"); - msgWeHaveOutput("Copying the boot floppy to /stand on root filesystem"); - i = vsystem("find -x /stand | cpio %s -pdum /mnt", cpioVerbosity()); - if (i) { - msgConfirm("Copy returned error status of %d!", i); - return FALSE; - } - - /* Copy the /etc files into their rightful place */ - if (vsystem("cd /mnt/stand; find etc | cpio %s -pdum /mnt", cpioVerbosity())) { - msgConfirm("Couldn't copy up the /etc files!"); - return TRUE; - } - return TRUE; -} - -static void -create_termcap(void) -{ - FILE *fp; - - const char *caps[] = { - termcap_vt100, termcap_cons25, termcap_cons25_m, termcap_cons25r, - termcap_cons25r_m, termcap_cons25l1, termcap_cons25l1_m, - termcap_xterm, NULL, - }; - const char **cp; - - if (!file_readable(TERMCAP_FILE)) { - Mkdir("/usr/share/misc"); - fp = fopen(TERMCAP_FILE, "w"); - if (!fp) { - msgConfirm("Unable to initialize termcap file. Some screen-oriented\nutilities may not work."); - return; - } - cp = caps; - while (*cp) - fprintf(fp, "%s\n", *(cp++)); - fclose(fp); - } -} diff --git a/usr.sbin/sysinstall/install.cfg b/usr.sbin/sysinstall/install.cfg deleted file mode 100644 index 4de2962..0000000 --- a/usr.sbin/sysinstall/install.cfg +++ /dev/null @@ -1,101 +0,0 @@ -# This is a sample installation configuration file for my test machine, -# crate.cdrom.com. -# It is included here merely as a sort-of-documented example. -# -# $FreeBSD$ - -# Turn on extra debugging. -debug=yes - -################################ -# My host specific data -hostname=crate.cdrom.com -domainname=cdrom.com -nameserver=204.216.27.3 -defaultrouter=204.216.27.228 -ipaddr=204.216.27.230 -netmask=255.255.255.240 -################################ - -# Log to a remote syslogd server -syslogdServer=10.0.1.1 - -################################ -# Which installation device to use - ftp is pointed directly at my local -# machine and the installation device is my WD8013 ethernet interface. -# netDev can be set to ANY or a comma-delimited list of interfaces. -_ftpPath=ftp://time.cdrom.com/pub -netDev=ed0 -mediaSetFTP -################################ - -################################ -# Select which distributions we want. -dists=base doc manpages info src sbase ssys kernels GENERIC -distSetCustom -################################ - -################################ -# Now set the parameters for the partition editor on ad0. Set to use the -# disk exclusively (could also be "all" to use the whole disk but -# respecting the MBR or "free" to use only unallocated space for FreeBSD). -disk=ad0 -partition=exclusive -diskPartitionEditor - -# Uncomment this instead to use only the free space and install boot manager. -#partition=free -#bootManager=booteasy -#diskPartitionEditor -################################ - -################################ - -# Disk partitioning. -# All sizes are expressed in 512 byte blocks! - -# A 512MB root partition -ad0s1-1=ufs 1048576 / -# And a 512MB swap partition -ad0s1-2=swap 1048576 none -# Followed by a /usr partition using all remaining space (size 0 = free space) -# and with softupdates enabled (non-zero arg following mountpoint). -ad0s1-3=ufs 0 /usr 1 -# Let's do it! -diskLabelEditor - -################################ - -################################ -# Now partition the 2nd disk with a 1GB /var and /usr/src using the -# remainder of the disk. -disk=ad1 -partition=exclusive -diskPartitionEditor - -ad1s1-1=ufs 2097152 /var -ad1s1-2=ufs 0 /usr/src -diskLabelEditor -################################ - -################################ -# And the 3rd, adding a second 512MB of swap and the rest of the disk -# for /tmp. -disk=da0 -partition=exclusive -diskPartitionEditor - -da0s1-1=swap 1048576 none -da0s1-2=ufs 0 /tmp -diskLabelEditor -################################ - - -# OK, everything is set. Do it! -installCommit - -# Install some packages at the end. -package=bash-3.1.17 -packageAdd -package=ncftp-3.2.0 -packageAdd diff --git a/usr.sbin/sysinstall/installUpgrade.c b/usr.sbin/sysinstall/installUpgrade.c deleted file mode 100644 index 82569f6..0000000 --- a/usr.sbin/sysinstall/installUpgrade.c +++ /dev/null @@ -1,526 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/disklabel.h> -#include <sys/errno.h> -#include <sys/ioctl.h> -#include <sys/fcntl.h> -#include <sys/wait.h> -#include <sys/param.h> -#include <sys/stat.h> -#include <unistd.h> -#include <sys/mount.h> - -static int installUpgradeNonInteractive(dialogMenuItem *self); - -typedef struct _hitList { - enum { JUST_COPY, CALL_HANDLER } action ; - char *name; - Boolean optional; - void (*handler)(struct _hitList *self); -} HitList; - -/* These are the only meaningful files I know about */ -static HitList etc_files [] = { - { JUST_COPY, "Xaccel.ini", TRUE, NULL }, - { JUST_COPY, "X11", TRUE, NULL }, - { JUST_COPY, "adduser.conf", TRUE, NULL }, - { JUST_COPY, "aliases", TRUE, NULL }, - { JUST_COPY, "aliases.db", TRUE, NULL }, - { JUST_COPY, "amd.map", TRUE, NULL }, - { JUST_COPY, "auth.conf", TRUE, NULL }, - { JUST_COPY, "crontab", TRUE, NULL }, - { JUST_COPY, "csh.cshrc", TRUE, NULL }, - { JUST_COPY, "csh.login", TRUE, NULL }, - { JUST_COPY, "csh.logout", TRUE, NULL }, - { JUST_COPY, "cvsupfile", TRUE, NULL }, - { JUST_COPY, "devfs.conf", TRUE, NULL }, - { JUST_COPY, "dhclient.conf", TRUE, NULL }, - { JUST_COPY, "disktab", TRUE, NULL }, - { JUST_COPY, "dumpdates", TRUE, NULL }, - { JUST_COPY, "exports", TRUE, NULL }, - { JUST_COPY, "fbtab", TRUE, NULL }, - { JUST_COPY, "fstab", FALSE, NULL }, - { JUST_COPY, "ftpusers", TRUE, NULL }, - { JUST_COPY, "gettytab", TRUE, NULL }, - { JUST_COPY, "gnats", TRUE, NULL }, - { JUST_COPY, "group", FALSE, NULL }, - { JUST_COPY, "hosts", TRUE, NULL }, - { JUST_COPY, "hosts.allow", TRUE, NULL }, - { JUST_COPY, "hosts.equiv", TRUE, NULL }, - { JUST_COPY, "hosts.lpd", TRUE, NULL }, - { JUST_COPY, "inetd.conf", TRUE, NULL }, - { JUST_COPY, "localtime", TRUE, NULL }, - { JUST_COPY, "login.access", TRUE, NULL }, - { JUST_COPY, "login.conf", TRUE, NULL }, - { JUST_COPY, "mail", TRUE, NULL }, - { JUST_COPY, "mail.rc", TRUE, NULL }, - { JUST_COPY, "mac.conf", TRUE, NULL }, - { JUST_COPY, "make.conf", TRUE, NULL }, - { JUST_COPY, "manpath.config", TRUE, NULL }, - { JUST_COPY, "master.passwd", FALSE, NULL }, - { JUST_COPY, "mergemaster.rc", TRUE, NULL }, - { JUST_COPY, "motd", TRUE, NULL }, - { JUST_COPY, "namedb", TRUE, NULL }, - { JUST_COPY, "networks", TRUE, NULL }, - { JUST_COPY, "newsyslog.conf", TRUE, NULL }, - { JUST_COPY, "nsmb.conf", TRUE, NULL }, - { JUST_COPY, "nsswitch.conf", TRUE, NULL }, - { JUST_COPY, "ntp.conf", TRUE, NULL }, - { JUST_COPY, "pam.conf", TRUE, NULL }, - { JUST_COPY, "passwd", TRUE, NULL }, - { JUST_COPY, "periodic", TRUE, NULL }, - { JUST_COPY, "pf.conf", TRUE, NULL }, - { JUST_COPY, "portsnap.conf", TRUE, NULL }, - { JUST_COPY, "ppp", TRUE, NULL }, - { JUST_COPY, "printcap", TRUE, NULL }, - { JUST_COPY, "profile", TRUE, NULL }, - { JUST_COPY, "protocols", TRUE, NULL }, - { JUST_COPY, "pwd.db", TRUE, NULL }, - { JUST_COPY, "rc.local", TRUE, NULL }, - { JUST_COPY, "rc.firewall", TRUE, NULL }, - { JUST_COPY, "rc.conf.local", TRUE, NULL }, - { JUST_COPY, "remote", TRUE, NULL }, - { JUST_COPY, "resolv.conf", TRUE, NULL }, - { JUST_COPY, "rmt", TRUE, NULL }, - { JUST_COPY, "sendmail.cf", TRUE, NULL }, - { JUST_COPY, "sendmail.cw", TRUE, NULL }, - { JUST_COPY, "services", TRUE, NULL }, - { JUST_COPY, "shells", TRUE, NULL }, - { JUST_COPY, "skeykeys", TRUE, NULL }, - { JUST_COPY, "snmpd.config", TRUE, NULL }, - { JUST_COPY, "spwd.db", TRUE, NULL }, - { JUST_COPY, "src.conf", TRUE, NULL }, - { JUST_COPY, "ssh", TRUE, NULL }, - { JUST_COPY, "sysctl.conf", TRUE, NULL }, - { JUST_COPY, "syslog.conf", TRUE, NULL }, - { JUST_COPY, "ttys", TRUE, NULL }, - { 0, NULL, FALSE, NULL }, -}; - -static void -traverseHitlist(HitList *h) -{ - system("rm -rf /etc/upgrade"); - Mkdir("/etc/upgrade"); - while (h->name) { - if (!file_readable(h->name)) { - if (!h->optional) - msgConfirm("Unable to find an old /etc/%s file! That is decidedly non-standard and\n" - "your upgraded system may function a little strangely as a result.", h->name); - } - else { - if (h->action == JUST_COPY) { - /* Move the just-loaded copy aside */ - vsystem("mv /etc/%s /etc/upgrade/%s", h->name, h->name); - - /* Copy the old one into its place */ - msgNotify("Resurrecting %s..", h->name); - /* Do this with tar so that symlinks and such are preserved */ - if (vsystem("tar cf - %s | tar xpf - -C /etc", h->name)) - msgConfirm("Unable to resurrect your old /etc/%s! Hmmmm.", h->name); - } - else /* call handler */ - h->handler(h); - } - ++h; - } -} - -int -installUpgrade(dialogMenuItem *self) -{ - char saved_etc[FILENAME_MAX]; - Boolean extractingBin = TRUE; - - if (variable_get(VAR_NONINTERACTIVE)) - return installUpgradeNonInteractive(self); - - variable_set2(SYSTEM_STATE, "upgrade", 0); - dialog_clear(); - - if (msgYesNo("Before beginning a binary upgrade, please review the upgrade instructions,\n" - "which are located in the \"Install\" document under the main documentation\n" - "menu. Given that you have read these instructions and understand the risks\n" - "and precautions involved, are you sure that you want to proceed with\n" - "this upgrade?") != 0) - return DITEM_FAILURE; - - if (!Dists) { - msgConfirm("First, you must select some distribution components. The upgrade procedure\n" - "will only upgrade the distributions you select in the next set of menus."); - if (!dmenuOpenSimple(&MenuDistributions, FALSE) || !Dists) - return DITEM_FAILURE; - } - else if (!(Dists & DIST_BASE)) { /* No base selected? Not much of an upgrade.. */ - if (msgYesNo("You didn't select the base distribution as one of the distributons to load.\n" - "This one is pretty vital to a successful upgrade. Are you SURE you don't\n" - "want to select the base distribution? Chose No to bring up the Distributions\n" - "menu again.") != 0) { - if (!dmenuOpenSimple(&MenuDistributions, FALSE)) - return DITEM_FAILURE; - } - } - - /* Still?! OK! They must know what they're doing.. */ - if (!(Dists & DIST_BASE)) - extractingBin = FALSE; - - if (RunningAsInit) { - Device **devs; - int i, cnt; - char *cp; - - cp = variable_get(VAR_DISK); - devs = deviceFind(cp, DEVICE_TYPE_DISK); - cnt = deviceCount(devs); - if (!cnt) { - msgConfirm("No disks found! Please verify that your disk controller is being\n" - "properly probed at boot time. See the Hardware Guide on the\n" - "Documentation menu for clues on diagnosing this type of problem."); - return DITEM_FAILURE | DITEM_RESTORE; - } - else { - /* Enable all the drives before we start */ - for (i = 0; i < cnt; i++) - devs[i]->enabled = TRUE; - } - - msgConfirm("OK. First, we're going to go to the disk label editor. In this editor\n" - "you will be expected to Mount any partitions you're interested in\n" - "upgrading. DO NOT set the Newfs flag to Y on anything in the label editor\n" - "unless you're absolutely sure you know what you're doing! In this\n" - "instance, you'll be using the label editor as little more than a fancy\n" - "screen-oriented partition mounting tool.\n\n" - "Once you're done in the label editor, press Q to return here for the next\n" - "step."); - - if (DITEM_STATUS(diskLabelEditor(self)) == DITEM_FAILURE) { - msgConfirm("The disk label editor returned an error status. Upgrade operation\n" - "aborted."); - return DITEM_FAILURE | DITEM_RESTORE; - } - - /* Don't write out MBR info */ - variable_set2(DISK_PARTITIONED, "written", 0); - if (DITEM_STATUS(diskLabelCommit(self)) == DITEM_FAILURE) { - msgConfirm("Not all file systems were properly mounted. Upgrade operation\n" - "aborted."); - variable_unset(DISK_PARTITIONED); - return DITEM_FAILURE | DITEM_RESTORE; - } - - msgNotify("Updating /stand on root filesystem"); - (void)vsystem("find -x /stand | cpio %s -pdum /mnt", cpioVerbosity()); - - if (DITEM_STATUS(chroot("/mnt")) == DITEM_FAILURE) { - msgConfirm("Unable to chroot to /mnt - something is wrong with the\n" - "root partition or the way it's mounted if this doesn't work."); - variable_unset(DISK_PARTITIONED); - return DITEM_FAILURE | DITEM_RESTORE; - } - chdir("/"); - installEnvironment(); - systemCreateHoloshell(); - } - - saved_etc[0] = '\0'; - - /* Don't allow sources to be upgraded if we have src already */ - if (directory_exists("/usr/src/") && (Dists & DIST_SRC)) { - Dists &= ~DIST_SRC; - SrcDists = 0; - msgConfirm("Warning: /usr/src exists and sources were selected as upgrade\n" - "targets. Unfortunately, this is not the way to upgrade your\n" - "sources - please use CTM or CVSup or some other method which\n" - "handles ``deletion events'', unlike this particular feature.\n\n" - "Your existing /usr/src will not be affected by this upgrade.\n"); - } - - if (extractingBin) { - while (!*saved_etc) { - char *cp = msgGetInput("/var/tmp/etc", "Under which directory do you wish to save your current /etc?"); - - if (!cp || !*cp || Mkdir(cp)) { - if (msgYesNo("Directory was not specified, was invalid or user selected Cancel.\n\n" - "Doing an upgrade without first backing up your /etc directory is a very\n" - "bad idea! Do you want to go back and specify the save directory again?") != 0) - break; - } - else { - SAFE_STRCPY(saved_etc, cp); - } - } - - if (saved_etc[0]) { - msgNotify("Preserving /etc directory.."); - if (vsystem("tar -cBpf - -C /etc . | tar --unlink -xBpf - -C %s", saved_etc)) - if (msgYesNo("Unable to backup your /etc into %s.\n" - "Do you want to continue anyway?", saved_etc) != 0) - return DITEM_FAILURE; - msgNotify("Preserving /root directory.."); - vsystem("tar -cBpf - -C / root | tar --unlink -xBpf - -C %s", saved_etc); - } - - msgNotify("chflags'ing old binaries - please wait."); - (void)vsystem("chflags -R noschg /bin /sbin /lib /libexec /usr/bin /usr/sbin /usr/lib /usr/libexec /var/empty /boot/kernel*"); - - if (directory_exists("/boot/kernel")) { - if (directory_exists("/boot/kernel.prev")) { - msgNotify("Removing /boot/kernel.prev"); - if (system("rm -fr /boot/kernel.prev")) { - msgConfirm("NOTICE: I'm trying to back up /boot/kernel to\n" - "/boot/kernel.prev, but /boot/kernel.prev exists and I\n" - "can't remove it. This means that the backup will, in\n" - "all probability, fail."); - } - } - msgNotify("Moving old kernel to /boot/kernel.prev"); - if (system("mv /boot/kernel /boot/kernel.prev")) { - if (!msgYesNo("Hmmm! I couldn't move the old kernel over! Do you want to\n" - "treat this as a big problem and abort the upgrade? Due to the\n" - "way that this upgrade process works, you will have to reboot\n" - "and start over from the beginning. Select Yes to reboot now")) - systemShutdown(1); - } - else - msgConfirm("NOTICE: Your old kernel is in /boot/kernel.prev should this\n" - "upgrade fail for any reason and you need to boot your old\n" - "kernel."); - } - } - -media: - /* We do this very late, but we unfortunately need to back up /etc first */ - if (!mediaVerify()) - return DITEM_FAILURE; - - if (!DEVICE_INIT(mediaDevice)) { - if (!msgYesNo("Couldn't initialize the media. Would you like\n" - "to adjust your media selection and try again?")) { - mediaDevice = NULL; - goto media; - } - else - return DITEM_FAILURE | DITEM_REDRAW | DITEM_RESTORE; - } - - msgNotify("Beginning extraction of distributions."); - if (DITEM_STATUS(distExtractAll(self)) == DITEM_FAILURE) { - msgConfirm("Hmmmm. We couldn't even extract the base distribution. This upgrade\n" - "should be considered a failure and started from the beginning, sorry!\n" - "The system will reboot now."); - dialog_clear(); - systemShutdown(1); - } - else if (Dists) { - if (!extractingBin || !(Dists & DIST_BASE)) { - msgNotify("The extraction process seems to have had some problems, but we got most\n" - "of the essentials. We'll treat this as a warning since it may have been\n" - "only non-essential distributions which failed to load."); - } - else { - msgConfirm("Hmmmm. We couldn't even extract the base distribution. This upgrade\n" - "should be considered a failure and started from the beginning, sorry!\n" - "The system will reboot now."); - dialog_clear(); - systemShutdown(1); - } - } - - if (extractingBin) - vsystem("disklabel -B `awk '$2~/\\/$/ {print substr($1, 6, 5)}' /etc/fstab`"); - msgNotify("First stage of upgrade completed successfully!\n\n" - "Next comes stage 2, where we attempt to resurrect your /etc\n" - "directory!"); - - if (chdir(saved_etc)) { - msgConfirm("Unable to go to your saved /etc directory in %s?! Argh!\n" - "Something went seriously wrong! It's quite possible that\n" - "your former /etc is toast. I hope you didn't have any\n" - "important customizations you wanted to keep in there.. :(", saved_etc); - } - else { - /* Now try to resurrect the /etc files */ - traverseHitlist(etc_files); - /* Resurrect the root dotfiles */ - vsystem("tar -cBpf - root | tar -xBpf - -C / && rm -rf root"); - } - - msgConfirm("Upgrade completed! All of your old /etc files have been restored.\n" - "For your reference, the new /etc files are in /etc/upgrade/ in case\n" - "you wish to upgrade these files by hand (though that should not be\n" - "strictly necessary). If your root partition is specified in /etc/fstab\n" - "using the old \"compatibility\" slice, you may also wish to update it to\n" - "use a fully qualified slice name in order to avoid warnings on startup.\n\n" - "When you're ready to reboot into the new system, simply exit the installation."); - return DITEM_SUCCESS | DITEM_REDRAW | DITEM_RESTORE; -} - -static int -installUpgradeNonInteractive(dialogMenuItem *self) -{ - char *saved_etc; - Boolean extractingBin = TRUE; - - variable_set2(SYSTEM_STATE, "upgrade", 0); - - /* Make sure at least BIN is selected */ - Dists |= DIST_BASE; - - if (RunningAsInit) { - Device **devs; - int i, cnt; - char *cp; - - cp = variable_get(VAR_DISK); - devs = deviceFind(cp, DEVICE_TYPE_DISK); - cnt = deviceCount(devs); - if (!cnt) { - msgConfirm("No disks found! Please verify that your disk controller is being\n" - "properly probed at boot time. See the Hardware Guide on the\n" - "Documentation menu for clues on diagnosing this type of problem."); - return DITEM_FAILURE; - } - else { - /* Enable all the drives before we start */ - for (i = 0; i < cnt; i++) - devs[i]->enabled = TRUE; - } - - msgConfirm("OK. First, we're going to go to the disk label editor. In this editor\n" - "you will be expected to Mount any partitions you're interested in\n" - "upgrading. DO NOT set the Newfs flag to Y on anything in the label editor\n" - "unless you're absolutely sure you know what you're doing! In this\n" - "instance, you'll be using the label editor as little more than a fancy\n" - "screen-oriented partition mounting tool.\n\n" - "Once you're done in the label editor, press Q to return here for the next\n" - "step."); - - if (DITEM_STATUS(diskLabelEditor(self)) == DITEM_FAILURE) { - msgConfirm("The disk label editor returned an error status. Upgrade operation\n" - "aborted."); - return DITEM_FAILURE; - } - - /* Don't write out MBR info */ - variable_set2(DISK_PARTITIONED, "written", 0); - if (DITEM_STATUS(diskLabelCommit(self)) == DITEM_FAILURE) { - msgConfirm("Not all file systems were properly mounted. Upgrade operation\n" - "aborted."); - variable_unset(DISK_PARTITIONED); - return DITEM_FAILURE; - } - - if (extractingBin) { - msgNotify("chflags'ing old binaries - please wait."); - (void)vsystem("chflags -R noschg /mnt/"); - } - msgNotify("Updating /stand on root filesystem"); - (void)vsystem("find -x /stand | cpio %s -pdum /mnt", cpioVerbosity()); - - if (DITEM_STATUS(chroot("/mnt")) == DITEM_FAILURE) { - msgConfirm("Unable to chroot to /mnt - something is wrong with the\n" - "root partition or the way it's mounted if this doesn't work."); - variable_unset(DISK_PARTITIONED); - return DITEM_FAILURE; - } - chdir("/"); - systemCreateHoloshell(); - } - - if (!mediaVerify() || !DEVICE_INIT(mediaDevice)) { - msgNotify("Upgrade: Couldn't initialize media."); - return DITEM_FAILURE; - } - - saved_etc = "/var/tmp/etc"; - Mkdir(saved_etc); - msgNotify("Preserving /etc directory.."); - if (vsystem("tar -cpBf - -C /etc . | tar -xpBf - -C %s", saved_etc)) { - msgNotify("Unable to backup your /etc into %s.", saved_etc); - return DITEM_FAILURE; - } - - /* - * Back up the old kernel, leaving it in place in case we - * crash and reboot. - */ - if (directory_exists("/boot/kernel")) { - if (directory_exists("/boot/kernel.prev")) { - msgNotify("Removing /boot/kernel.prev"); - if (system("rm -fr /boot/kernel.prev")) { - msgConfirm("NOTICE: I'm trying to back up /boot/kernel to\n" - "/boot/kernel.prev, but /boot/kernel.prev exists and I\n" - "can't remove it. This means that the backup will, in\n" - "all probability, fail."); - } - } - msgNotify("Copying old kernel to /boot/kernel.prev"); - vsystem("cp -Rp /boot/kernel /boot/kernel.prev"); - } - - msgNotify("Beginning extraction of distributions."); - if (DITEM_STATUS(distExtractAll(self)) == DITEM_FAILURE) { - msgConfirm("Hmmmm. We couldn't even extract the base distribution. This upgrade\n" - "should be considered a failure and started from the beginning, sorry!\n" - "The system will reboot now."); - dialog_clear(); - systemShutdown(1); - } - else if (Dists) { - if (!(Dists & DIST_BASE)) { - msgNotify("The extraction process seems to have had some problems, but we got most\n" - "of the essentials. We'll treat this as a warning since it may have been\n" - "only non-essential distributions which failed to upgrade."); - } - else { - msgConfirm("Hmmmm. We couldn't even extract the base distribution. This upgrade\n" - "should be considered a failure and started from the beginning, sorry!\n" - "The system will reboot now."); - dialog_clear(); - systemShutdown(1); - } - } - - msgNotify("First stage of upgrade completed successfully."); - if (vsystem("tar -cpBf - -C %s . | tar --unlink -xpBf - -C /etc", saved_etc)) { - msgNotify("Unable to resurrect your old /etc!"); - return DITEM_FAILURE; - } - return DITEM_SUCCESS | DITEM_REDRAW; -} diff --git a/usr.sbin/sysinstall/keymap.c b/usr.sbin/sysinstall/keymap.c deleted file mode 100644 index 21b5e09..0000000 --- a/usr.sbin/sysinstall/keymap.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 1996 Joerg Wunsch - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -#include "sysinstall.h" -#include <errno.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/kbio.h> - -struct keymapInfo { - const char *name; - const struct keymap *map; -}; - -#include "keymap.h" - -/* - * keymap.h is being automatically generated by the Makefile. It - * contains definitions for all desired keymaps. Note that since we - * don't support font loading nor screen mapping during installation, - * we simply don't care for any other keys than the ASCII subset. - * - * Therefore, if no keymap with the exact name has been found in the - * first pass, we make a second pass over the table looking just for - * the language name only. - */ - -#ifdef WITH_SYSCONS -static int -keymapSetDefault(const char *prefix) -{ - dialogMenuItem *items = MenuSysconsKeymap.items; - int i; - size_t plen = strlen(prefix); - - for (i = 0; items[i].data; ++i) - if (!strncmp(prefix, items[i].data, plen)) - return i; - - return -1; -} - -int -keymapMenuSelect(dialogMenuItem *self) -{ - static const struct { - const char *country, *lang; - } map[] = { - {"dk", "danish"}, - {"ee", "estonian"}, - {"fi", "finnish"}, - {"de", "german"}, - {"is", "icelandic"}, - {"no", "norwegian"}, - {"pl", "pl_PL"}, - {"es", "spanish"}, - {"se", "swedish"}, - {"ch", "swiss"}, - {"gb", "uk"}, - {"gg", "uk"}, - {"ie", "uk"}, - {"im", "uk"}, - {"je", "uk"}, - {NULL, NULL} - }; - const char *country, *lang; - int i; - int choice, scroll, curr, max; - char prefix[16 + 1]; - - if ((country = variable_get(VAR_COUNTRY)) != NULL) - { - lang = country; - for (i = 0; map[i].country; ++i) - if (!strcmp(country, map[i].country)) - { - lang = map[i].lang; - break; - } - - snprintf(prefix, sizeof(prefix), "keymap=%s.iso", lang); - if ((choice = keymapSetDefault(prefix)) == -1) - { - snprintf(prefix, sizeof(prefix), "keymap=%s", lang); - if ((choice = keymapSetDefault(prefix)) == -1) { -#ifdef PC98 - snprintf(prefix, sizeof(prefix), "keymap=jp.pc98"); -#else - snprintf(prefix, sizeof(prefix), "keymap=us.iso"); -#endif - if ((choice = keymapSetDefault(prefix)) == -1) - choice = 0; - } - } - - dmenuSetDefaultIndex(&MenuSysconsKeymap, &choice, &scroll, &curr, &max); - return dmenuOpen(&MenuSysconsKeymap, &choice, &scroll, &curr, &max, FALSE); - } - else - return dmenuOpenSimple(&MenuSysconsKeymap, FALSE) ? DITEM_SUCCESS : - DITEM_FAILURE; -} -#endif - -/* - * Return values: - * - * 0: OK - * -1: no appropriate keymap found - * -2: error installing map (other than ENXIO which means we're not on syscons) - */ - -int -loadKeymap(const char *lang) -{ - int passno, err; - char *llang; - size_t l; - struct keymapInfo *kip; - - llang = strdup(lang); - if (llang == NULL) - abort(); - - for (passno = 0; passno < 2; passno++) - { - if (passno > 0) - { - /* make the match more fuzzy */ - l = strspn(llang, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); - llang[l] = '\0'; - } - - l = strlen(llang); - - for (kip = keymapInfos; kip->name; kip++) - if (strncmp(kip->name, llang, l) == 0) - { - /* Yep, got it! */ - err = ioctl(0, PIO_KEYMAP, kip->map); - free(llang); - return (err == -1 && errno != ENOTTY)? -2: 0; - } - } - free(llang); - return -1; -} diff --git a/usr.sbin/sysinstall/label.c b/usr.sbin/sysinstall/label.c deleted file mode 100644 index 55132b6..0000000 --- a/usr.sbin/sysinstall/label.c +++ /dev/null @@ -1,1694 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <ctype.h> -#include <inttypes.h> -#include <libdisk.h> -#include <sys/disklabel.h> -#include <sys/param.h> -#include <sys/sysctl.h> - -#define AUTO_HOME 0 /* do not create /home automatically */ - -/* - * Everything to do with editing the contents of disk labels. - */ - -/* A nice message we use a lot in the disklabel editor */ -#define MSG_NOT_APPLICABLE "That option is not applicable here" - -/* Where to start printing the freebsd slices */ -#define CHUNK_SLICE_START_ROW 2 -#define CHUNK_PART_START_ROW 11 - -/* The smallest filesystem we're willing to create */ -#define FS_MIN_SIZE ONE_MEG - -/* - * Minimum partition sizes - */ -#if defined(__ia64__) || defined(__sparc64__) || defined(__amd64__) -#define ROOT_MIN_SIZE 280 -#else -#define ROOT_MIN_SIZE 180 -#endif -#define SWAP_MIN_SIZE 32 -#define USR_MIN_SIZE 160 -#define VAR_MIN_SIZE 20 -#define TMP_MIN_SIZE 20 -#define HOME_MIN_SIZE 20 - -/* - * Swap size limit for auto-partitioning (4G). - */ -#define SWAP_AUTO_LIMIT_SIZE 4096 - -/* - * Default partition sizes. If we do not have sufficient disk space - * for this configuration we scale things relative to the NOM vs DEFAULT - * sizes. If the disk is larger then /home will get any remaining space. - */ -#define ROOT_DEFAULT_SIZE 1024 -#define USR_DEFAULT_SIZE 8192 -#define VAR_DEFAULT_SIZE 4096 -#define TMP_DEFAULT_SIZE 1024 -#define HOME_DEFAULT_SIZE USR_DEFAULT_SIZE - -/* - * Nominal partition sizes. These are used to scale the default sizes down - * when we have insufficient disk space. If this isn't sufficient we scale - * down using the MIN sizes instead. - */ -#define ROOT_NOMINAL_SIZE 512 -#define USR_NOMINAL_SIZE 1536 -#define VAR_NOMINAL_SIZE 512 -#define TMP_NOMINAL_SIZE 128 -#define HOME_NOMINAL_SIZE USR_NOMINAL_SIZE - -/* The bottom-most row we're allowed to scribble on */ -#define CHUNK_ROW_MAX 16 - - -/* All the chunks currently displayed on the screen */ -static struct { - struct chunk *c; - PartType type; -} label_chunk_info[MAX_CHUNKS + 1]; -static int here; - -/*** with this value we try to track the most recently added label ***/ -static int label_focus = 0, pslice_focus = 0; - -static int diskLabel(Device *dev); -static int diskLabelNonInteractive(Device *dev); -static char *try_auto_label(Device **devs, Device *dev, int perc, int *req); - -static int -labelHook(dialogMenuItem *selected) -{ - Device **devs = NULL; - - devs = deviceFind(selected->prompt, DEVICE_TYPE_DISK); - if (!devs) { - msgConfirm("Unable to find disk %s!", selected->prompt); - return DITEM_FAILURE; - } - /* Toggle enabled status? */ - if (!devs[0]->enabled) { - devs[0]->enabled = TRUE; - diskLabel(devs[0]); - } - else - devs[0]->enabled = FALSE; - return DITEM_SUCCESS; -} - -static int -labelCheck(dialogMenuItem *selected) -{ - Device **devs = NULL; - - devs = deviceFind(selected->prompt, DEVICE_TYPE_DISK); - if (!devs || devs[0]->enabled == FALSE) - return FALSE; - return TRUE; -} - -int -diskLabelEditor(dialogMenuItem *self) -{ - DMenu *menu; - Device **devs; - int i, cnt; - - i = 0; - cnt = diskGetSelectCount(&devs); - if (cnt == -1) { - msgConfirm("No disks found! Please verify that your disk controller is being\n" - "properly probed at boot time. See the Hardware Guide on the\n" - "Documentation menu for clues on diagnosing this type of problem."); - return DITEM_FAILURE; - } - else if (cnt) { - /* Some are already selected */ - if (variable_get(VAR_NONINTERACTIVE) && - !variable_get(VAR_DISKINTERACTIVE)) - i = diskLabelNonInteractive(NULL); - else - i = diskLabel(NULL); - } - else { - /* No disks are selected, fall-back case now */ - cnt = deviceCount(devs); - if (cnt == 1) { - devs[0]->enabled = TRUE; - if (variable_get(VAR_NONINTERACTIVE) && - !variable_get(VAR_DISKINTERACTIVE)) - i = diskLabelNonInteractive(devs[0]); - else - i = diskLabel(devs[0]); - } - else { - menu = deviceCreateMenu(&MenuDiskDevices, DEVICE_TYPE_DISK, labelHook, labelCheck); - if (!menu) { - msgConfirm("No devices suitable for installation found!\n\n" - "Please verify that your disk controller (and attached drives)\n" - "were detected properly. This can be done by pressing the\n" - "[Scroll Lock] key and using the Arrow keys to move back to\n" - "the boot messages. Press [Scroll Lock] again to return."); - i = DITEM_FAILURE; - } - else { - i = dmenuOpenSimple(menu, FALSE) ? DITEM_SUCCESS : DITEM_FAILURE; - free(menu); - } - } - } - if (DITEM_STATUS(i) != DITEM_FAILURE) { - if (variable_cmp(DISK_LABELLED, "written")) - variable_set2(DISK_LABELLED, "yes", 0); - } - return i; -} - -int -diskLabelCommit(dialogMenuItem *self) -{ - char *cp; - int i; - - /* Already done? */ - if ((cp = variable_get(DISK_LABELLED)) && strcmp(cp, "yes")) - i = DITEM_SUCCESS; - else if (!cp) { - msgConfirm("You must assign disk labels before this option can be used."); - i = DITEM_FAILURE; - } - /* The routine will guard against redundant writes, just as this one does */ - else if (DITEM_STATUS(diskPartitionWrite(self)) != DITEM_SUCCESS) - i = DITEM_FAILURE; - else if (DITEM_STATUS(installFilesystems(self)) != DITEM_SUCCESS) - i = DITEM_FAILURE; - else { - msgInfo("All filesystem information written successfully."); - variable_set2(DISK_LABELLED, "written", 0); - i = DITEM_SUCCESS; - } - return i; -} - -/* See if we're already using a desired partition name */ -static Boolean -check_conflict(char *name) -{ - int i; - - for (i = 0; label_chunk_info[i].c; i++) - if ((label_chunk_info[i].type == PART_FILESYSTEM || label_chunk_info[i].type == PART_FAT - || label_chunk_info[i].type == PART_EFI) && label_chunk_info[i].c->private_data - && !strcmp(((PartInfo *)label_chunk_info[i].c->private_data)->mountpoint, name)) - return TRUE; - return FALSE; -} - -/* How much space is in this FreeBSD slice? */ -static daddr_t -space_free(struct chunk *c) -{ - struct chunk *c1; - daddr_t sz = c->size; - - for (c1 = c->part; c1; c1 = c1->next) { - if (c1->type != unused) - sz -= c1->size; - } - if (sz < 0) - msgFatal("Partitions are larger than actual chunk??"); - return sz; -} - -/* Snapshot the current situation into the displayed chunks structure */ -static void -record_label_chunks(Device **devs, Device *dev) -{ - int i, j, p; - struct chunk *c1, *c2; - Disk *d; - - j = p = 0; - /* First buzz through and pick up the FreeBSD slices */ - for (i = 0; devs[i]; i++) { - if ((dev && devs[i] != dev) || !devs[i]->enabled) - continue; - d = (Disk *)devs[i]->private; - if (!d->chunks) - msgFatal("No chunk list found for %s!", d->name); - -#ifdef __ia64__ - label_chunk_info[j].type = PART_SLICE; - label_chunk_info[j].c = d->chunks; - j++; -#endif - - /* Put the slice entries first */ - for (c1 = d->chunks->part; c1; c1 = c1->next) { - if (c1->type == freebsd) { - label_chunk_info[j].type = PART_SLICE; - label_chunk_info[j].c = c1; - ++j; - } -#ifdef __powerpc__ - if (c1->type == apple) { - label_chunk_info[j].type = PART_SLICE; - label_chunk_info[j].c = c1; - ++j; - } -#endif - } - } - - /* Now run through again and get the FreeBSD partition entries */ - for (i = 0; devs[i]; i++) { - if (!devs[i]->enabled) - continue; - d = (Disk *)devs[i]->private; - /* Then buzz through and pick up the partitions */ - for (c1 = d->chunks->part; c1; c1 = c1->next) { - if (c1->type == freebsd) { - for (c2 = c1->part; c2; c2 = c2->next) { - if (c2->type == part) { - if (c2->subtype == FS_SWAP) - label_chunk_info[j].type = PART_SWAP; - else - label_chunk_info[j].type = PART_FILESYSTEM; - label_chunk_info[j].c = c2; - ++j; - } - } - } - else if (c1->type == fat) { - label_chunk_info[j].type = PART_FAT; - label_chunk_info[j].c = c1; - ++j; - } -#ifdef __ia64__ - else if (c1->type == efi) { - label_chunk_info[j].type = PART_EFI; - label_chunk_info[j].c = c1; - ++j; - } - else if (c1->type == part) { - if (c1->subtype == FS_SWAP) - label_chunk_info[j].type = PART_SWAP; - else - label_chunk_info[j].type = PART_FILESYSTEM; - label_chunk_info[j].c = c1; - ++j; - } -#endif -#ifdef __powerpc__ - else if (c1->type == apple) { - for (c2 = c1->part; c2; c2 = c2->next) { - if (c2->type == part) { - if (c2->subtype == FS_SWAP) - label_chunk_info[j].type = PART_SWAP; - else - label_chunk_info[j].type = PART_FILESYSTEM; - label_chunk_info[j].c = c2; - ++j; - } - } - } -#endif - } - } - label_chunk_info[j].c = NULL; - if (here >= j) { - here = j ? j - 1 : 0; - } -} - -/* A new partition entry */ -static PartInfo * -new_part(PartType type, char *mpoint, Boolean newfs) -{ - PartInfo *pi; - - if (!mpoint) - mpoint = (type == PART_EFI) ? "/efi" : "/change_me"; - - pi = (PartInfo *)safe_malloc(sizeof(PartInfo)); - sstrncpy(pi->mountpoint, mpoint, FILENAME_MAX); - - pi->do_newfs = newfs; - - if (type == PART_EFI) { - pi->newfs_type = NEWFS_MSDOS; - } else { - pi->newfs_type = NEWFS_UFS; - strcpy(pi->newfs_data.newfs_ufs.user_options, ""); - pi->newfs_data.newfs_ufs.acls = FALSE; - pi->newfs_data.newfs_ufs.multilabel = FALSE; - pi->newfs_data.newfs_ufs.softupdates = strcmp(mpoint, "/"); - pi->newfs_data.newfs_ufs.ufs1 = FALSE; - } - - return pi; -} - -/* Get the mountpoint for a partition and save it away */ -static PartInfo * -get_mountpoint(PartType type, struct chunk *old) -{ - char *val; - PartInfo *tmp; - Boolean newfs; - - if (old && old->private_data) - tmp = old->private_data; - else - tmp = NULL; - val = (tmp != NULL) ? tmp->mountpoint : (type == PART_EFI) ? "/efi" : NULL; - val = msgGetInput(val, "Please specify a mount point for the partition"); - if (!val || !*val) { - if (!old) - return NULL; - else { - free(old->private_data); - old->private_data = NULL; - } - return NULL; - } - - /* Is it just the same value? */ - if (tmp && !strcmp(tmp->mountpoint, val)) - return NULL; - - /* Did we use it already? */ - if (check_conflict(val)) { - msgConfirm("You already have a mount point for %s assigned!", val); - return NULL; - } - - /* Is it bogus? */ - if (*val != '/') { - msgConfirm("Mount point must start with a / character"); - return NULL; - } - - /* Is it going to be mounted on root? */ - if (!strcmp(val, "/")) { - if (old) - old->flags |= CHUNK_IS_ROOT; - } - else if (old) - old->flags &= ~CHUNK_IS_ROOT; - - newfs = TRUE; - if (tmp) { - newfs = tmp->do_newfs; - safe_free(tmp); - } - val = string_skipwhite(string_prune(val)); - tmp = new_part(type, val, newfs); - if (old) { - old->private_data = tmp; - old->private_free = safe_free; - } - return tmp; -} - -/* Get the type of the new partiton */ -static PartType -get_partition_type(void) -{ - char selection[20]; - int i; - static unsigned char *fs_types[] = { -#ifdef __ia64__ - "EFI", "An EFI system partition", -#endif - "FS", "A file system", - "Swap", "A swap partition.", - }; - WINDOW *w = savescr(); - - i = dialog_menu("Please choose a partition type", - "If you want to use this partition for swap space, select Swap.\n" - "If you want to put a filesystem on it, choose FS.", - -1, -1, -#ifdef __ia64__ - 3, 3, -#else - 2, 2, -#endif - fs_types, selection, NULL, NULL); - restorescr(w); - if (!i) { -#ifdef __ia64__ - if (!strcmp(selection, "EFI")) - return PART_EFI; -#endif - if (!strcmp(selection, "FS")) - return PART_FILESYSTEM; - else if (!strcmp(selection, "Swap")) - return PART_SWAP; - } - return PART_NONE; -} - -/* If the user wants a special newfs command for this, set it */ -static void -getNewfsCmd(PartInfo *p) -{ - char buffer[NEWFS_CMD_ARGS_MAX]; - char *val; - - switch (p->newfs_type) { - case NEWFS_UFS: - snprintf(buffer, NEWFS_CMD_ARGS_MAX, "%s %s %s %s", - NEWFS_UFS_CMD, p->newfs_data.newfs_ufs.softupdates ? "-U" : "", - p->newfs_data.newfs_ufs.ufs1 ? "-O1" : "-O2", - p->newfs_data.newfs_ufs.user_options); - break; - case NEWFS_MSDOS: - snprintf(buffer, NEWFS_CMD_ARGS_MAX, "%s", NEWFS_MSDOS_CMD); - break; - case NEWFS_CUSTOM: - strcpy(buffer, p->newfs_data.newfs_custom.command); - break; - } - - val = msgGetInput(buffer, - "Please enter the newfs command and options you'd like to use in\n" - "creating this file system."); - if (val != NULL) { - p->newfs_type = NEWFS_CUSTOM; - strlcpy(p->newfs_data.newfs_custom.command, val, NEWFS_CMD_ARGS_MAX); - } -} - -static void -getNewfsOptionalArguments(PartInfo *p) -{ - char buffer[NEWFS_CMD_ARGS_MAX]; - char *val; - - /* Must be UFS, per argument checking in I/O routines. */ - - strlcpy(buffer, p->newfs_data.newfs_ufs.user_options, - NEWFS_CMD_ARGS_MAX); - val = msgGetInput(buffer, - "Please enter any additional UFS newfs options you'd like to\n" - "use in creating this file system."); - if (val != NULL) - strlcpy(p->newfs_data.newfs_ufs.user_options, val, - NEWFS_CMD_ARGS_MAX); -} - -#define MAX_MOUNT_NAME 9 - -#define PART_PART_COL 0 -#define PART_MOUNT_COL 10 -#define PART_SIZE_COL (PART_MOUNT_COL + MAX_MOUNT_NAME + 3) -#define PART_NEWFS_COL (PART_SIZE_COL + 8) -#define PART_OFF 38 - -#define TOTAL_AVAIL_LINES (10) -#define PSLICE_SHOWABLE (4) - - -/* stick this all up on the screen */ -static void -print_label_chunks(void) -{ - int i, j, srow, prow, pcol; - daddr_t sz; - char clrmsg[80]; - int ChunkPartStartRow; - WINDOW *ChunkWin; - - /********************************************************/ - /*** These values are for controling screen resources ***/ - /*** Each label line holds up to 2 labels, so beware! ***/ - /*** strategy will be to try to always make sure the ***/ - /*** highlighted label is in the active display area. ***/ - /********************************************************/ - int pslice_max, label_max; - int pslice_count, label_count, label_focus_found, pslice_focus_found; - - attrset(A_REVERSE); - mvaddstr(0, 25, "FreeBSD Disklabel Editor"); - attrset(A_NORMAL); - - /*** Count the number of parition slices ***/ - pslice_count = 0; - for (i = 0; label_chunk_info[i].c ; i++) { - if (label_chunk_info[i].type == PART_SLICE) - ++pslice_count; - } - pslice_max = pslice_count; - - /*** 4 line max for partition slices ***/ - if (pslice_max > PSLICE_SHOWABLE) { - pslice_max = PSLICE_SHOWABLE; - } - ChunkPartStartRow = CHUNK_SLICE_START_ROW + 3 + pslice_max; - - /*** View partition slices modulo pslice_max ***/ - label_max = TOTAL_AVAIL_LINES - pslice_max; - - for (i = 0; i < 2; i++) { - mvaddstr(ChunkPartStartRow - 2, PART_PART_COL + (i * PART_OFF), "Part"); - mvaddstr(ChunkPartStartRow - 1, PART_PART_COL + (i * PART_OFF), "----"); - - mvaddstr(ChunkPartStartRow - 2, PART_MOUNT_COL + (i * PART_OFF), "Mount"); - mvaddstr(ChunkPartStartRow - 1, PART_MOUNT_COL + (i * PART_OFF), "-----"); - - mvaddstr(ChunkPartStartRow - 2, PART_SIZE_COL + (i * PART_OFF) + 3, "Size"); - mvaddstr(ChunkPartStartRow - 1, PART_SIZE_COL + (i * PART_OFF) + 3, "----"); - - mvaddstr(ChunkPartStartRow - 2, PART_NEWFS_COL + (i * PART_OFF), "Newfs"); - mvaddstr(ChunkPartStartRow - 1, PART_NEWFS_COL + (i * PART_OFF), "-----"); - } - srow = CHUNK_SLICE_START_ROW; - prow = 0; - pcol = 0; - - /*** these variables indicate that the focused item is shown currently ***/ - label_focus_found = 0; - pslice_focus_found = 0; - - label_count = 0; - pslice_count = 0; - mvprintw(CHUNK_SLICE_START_ROW - 1, 0, " "); - mvprintw(CHUNK_SLICE_START_ROW + pslice_max, 0, " "); - - ChunkWin = newwin(CHUNK_ROW_MAX - ChunkPartStartRow, 76, ChunkPartStartRow, 0); - - wclear(ChunkWin); - /*** wrefresh(ChunkWin); ***/ - - for (i = 0; label_chunk_info[i].c; i++) { - /* Is it a slice entry displayed at the top? */ - if (label_chunk_info[i].type == PART_SLICE) { - /*** This causes the new pslice to replace the previous display ***/ - /*** focus must remain on the most recently active pslice ***/ - if (pslice_count == pslice_max) { - if (pslice_focus_found) { - /*** This is where we can mark the more following ***/ - attrset(A_BOLD); - mvprintw(CHUNK_SLICE_START_ROW + pslice_max, 0, "***MORE***"); - attrset(A_NORMAL); - continue; - } - else { - /*** this is where we set the more previous ***/ - attrset(A_BOLD); - mvprintw(CHUNK_SLICE_START_ROW - 1, 0, "***MORE***"); - attrset(A_NORMAL); - pslice_count = 0; - srow = CHUNK_SLICE_START_ROW; - } - } - - sz = space_free(label_chunk_info[i].c); - if (i == here) - attrset(ATTR_SELECTED); - if (i == pslice_focus) - pslice_focus_found = -1; - - if (label_chunk_info[i].c->type == whole) { - if (sz >= 100 * ONE_GIG) - mvprintw(srow++, 0, - "Disk: %s\t\tFree: %jd blocks (%jdGB)", - label_chunk_info[i].c->disk->name, (intmax_t)sz, - (intmax_t)(sz / ONE_GIG)); - else - mvprintw(srow++, 0, - "Disk: %s\t\tFree: %jd blocks (%jdMB)", - label_chunk_info[i].c->disk->name, (intmax_t)sz, - (intmax_t)(sz / ONE_MEG)); - } else { - if (sz >= 100 * ONE_GIG) - mvprintw(srow++, 0, - "Disk: %s\tPartition name: %s\tFree: %jd blocks (%jdGB)", - label_chunk_info[i].c->disk->name, - label_chunk_info[i].c->name, - (intmax_t)sz, (intmax_t)(sz / ONE_GIG)); - else - mvprintw(srow++, 0, - "Disk: %s\tPartition name: %s\tFree: %jd blocks (%jdMB)", - label_chunk_info[i].c->disk->name, - label_chunk_info[i].c->name, - (intmax_t)sz, (intmax_t)(sz / ONE_MEG)); - } - attrset(A_NORMAL); - clrtoeol(); - move(0, 0); - /*** refresh(); ***/ - ++pslice_count; - } - /* Otherwise it's a DOS, swap or filesystem entry in the Chunk window */ - else { - char onestr[PART_OFF], num[10], *mountpoint, newfs[12]; - - /* - * We copy this into a blank-padded string so that it looks like - * a solid bar in reverse-video - */ - memset(onestr, ' ', PART_OFF - 1); - onestr[PART_OFF - 1] = '\0'; - - /*** Track how many labels have been displayed ***/ - if (label_count == ((label_max - 1 ) * 2)) { - if (label_focus_found) { - continue; - } - else { - label_count = 0; - prow = 0; - pcol = 0; - } - } - - /* Go for two columns if we've written one full columns worth */ - /*** if (prow == (CHUNK_ROW_MAX - ChunkPartStartRow)) ***/ - if (label_count == label_max - 1) { - pcol = PART_OFF; - prow = 0; - } - memcpy(onestr + PART_PART_COL, label_chunk_info[i].c->name, strlen(label_chunk_info[i].c->name)); - /* If it's a filesystem, display the mountpoint */ - if (label_chunk_info[i].c->private_data && (label_chunk_info[i].type == PART_FILESYSTEM - || label_chunk_info[i].type == PART_FAT || label_chunk_info[i].type == PART_EFI)) - mountpoint = ((PartInfo *)label_chunk_info[i].c->private_data)->mountpoint; - else if (label_chunk_info[i].type == PART_SWAP) - mountpoint = "swap"; - else - mountpoint = "<none>"; - - /* Now display the newfs field */ - if (label_chunk_info[i].type == PART_FAT) - strcpy(newfs, "DOS"); -#if defined(__ia64__) - else if (label_chunk_info[i].type == PART_EFI) { - strcpy(newfs, "EFI"); - if (label_chunk_info[i].c->private_data) { - strcat(newfs, " "); - PartInfo *pi = (PartInfo *)label_chunk_info[i].c->private_data; - strcat(newfs, pi->do_newfs ? " Y" : " N"); - } - } -#endif - else if (label_chunk_info[i].c->private_data && label_chunk_info[i].type == PART_FILESYSTEM) { - PartInfo *pi = (PartInfo *)label_chunk_info[i].c->private_data; - - switch (pi->newfs_type) { - case NEWFS_UFS: - strcpy(newfs, NEWFS_UFS_STRING); - if (pi->newfs_data.newfs_ufs.ufs1) - strcat(newfs, "1"); - else - strcat(newfs, "2"); - if (pi->newfs_data.newfs_ufs.softupdates) - strcat(newfs, "+S"); - else - strcat(newfs, " "); - - break; - case NEWFS_MSDOS: - strcpy(newfs, "FAT"); - break; - case NEWFS_CUSTOM: - strcpy(newfs, "CUST"); - break; - } - strcat(newfs, pi->do_newfs ? " Y" : " N "); - } - else if (label_chunk_info[i].type == PART_SWAP) - strcpy(newfs, "SWAP"); - else - strcpy(newfs, "*"); - for (j = 0; j < MAX_MOUNT_NAME && mountpoint[j]; j++) - onestr[PART_MOUNT_COL + j] = mountpoint[j]; - if (label_chunk_info[i].c->size == 0) - snprintf(num, 10, "%5dMB", 0); - else if (label_chunk_info[i].c->size < (100 * ONE_GIG)) - snprintf(num, 10, "%5jdMB", - (intmax_t)label_chunk_info[i].c->size / ONE_MEG); - else - snprintf(num, 10, "%5jdGB", - (intmax_t)label_chunk_info[i].c->size / ONE_GIG); - memcpy(onestr + PART_SIZE_COL, num, strlen(num)); - memcpy(onestr + PART_NEWFS_COL, newfs, strlen(newfs)); - onestr[PART_NEWFS_COL + strlen(newfs)] = '\0'; - if (i == label_focus) { - label_focus_found = -1; - wattrset(ChunkWin, A_BOLD); - } - if (i == here) - wattrset(ChunkWin, ATTR_SELECTED); - - /*** lazy man's way of expensively padding this string ***/ - while (strlen(onestr) < 37) - strcat(onestr, " "); - - mvwaddstr(ChunkWin, prow, pcol, onestr); - wattrset(ChunkWin, A_NORMAL); - move(0, 0); - ++prow; - ++label_count; - } - } - - /*** this will erase all the extra stuff ***/ - memset(clrmsg, ' ', 37); - clrmsg[37] = '\0'; - - while (pslice_count < pslice_max) { - mvprintw(srow++, 0, clrmsg); - clrtoeol(); - ++pslice_count; - } - while (label_count < (2 * (label_max - 1))) { - mvwaddstr(ChunkWin, prow++, pcol, clrmsg); - ++label_count; - if (prow == (label_max - 1)) { - prow = 0; - pcol = PART_OFF; - } - } - refresh(); - wrefresh(ChunkWin); -} - -static void -print_command_summary(void) -{ - mvprintw(17, 0, "The following commands are valid here (upper or lower case):"); - mvprintw(18, 0, "C = Create D = Delete M = Mount pt."); - if (!RunningAsInit) - mvprintw(18, 56, "W = Write"); - mvprintw(19, 0, "N = Newfs Opts Q = Finish S = Toggle SoftUpdates Z = Custom Newfs"); - mvprintw(20, 0, "T = Toggle Newfs U = Undo A = Auto Defaults R = Delete+Merge"); - mvprintw(22, 0, "Use F1 or ? to get more help, arrow keys to select."); - move(0, 0); -} - -static void -clear_wins(void) -{ - clear(); - print_label_chunks(); -} - -static int -diskLabel(Device *dev) -{ - daddr_t sz; - int key = 0; - Boolean labeling; - char *msg = NULL; - PartInfo *p, *oldp; - PartType type; - Device **devs; - WINDOW *w = savescr(); - - label_focus = 0; - pslice_focus = 0; - here = 0; - - devs = deviceFind(NULL, DEVICE_TYPE_DISK); - if (!devs) { - msgConfirm("No disks found!"); - restorescr(w); - return DITEM_FAILURE; - } - labeling = TRUE; - keypad(stdscr, TRUE); - record_label_chunks(devs, dev); - - clear(); - while (labeling) { - char *cp; - int rflags = DELCHUNK_NORMAL; - - print_label_chunks(); - print_command_summary(); - if (msg) { - attrset(title_attr); mvprintw(23, 0, msg); attrset(A_NORMAL); - clrtoeol(); - beep(); - msg = NULL; - } - else { - move(23, 0); - clrtoeol(); - } - - refresh(); - key = getch(); - switch (toupper(key)) { - int i; - static char _msg[40]; - - case '\014': /* ^L */ - clear_wins(); - break; - - case '\020': /* ^P */ - case KEY_UP: - case '-': - if (here != 0) - --here; - else - while (label_chunk_info[here + 1].c) - ++here; - break; - - case '\016': /* ^N */ - case KEY_DOWN: - case '+': - case '\r': - case '\n': - if (label_chunk_info[here + 1].c) - ++here; - else - here = 0; - break; - - case KEY_HOME: - here = 0; - break; - - case KEY_END: - while (label_chunk_info[here + 1].c) - ++here; - break; - - case KEY_F(1): - case '?': - systemDisplayHelp("partition"); - clear_wins(); - break; - - case '1': - if (label_chunk_info[here].type == PART_FILESYSTEM) { - PartInfo *pi = - ((PartInfo *)label_chunk_info[here].c->private_data); - - if ((pi != NULL) && - (pi->newfs_type == NEWFS_UFS)) { - pi->newfs_data.newfs_ufs.ufs1 = true; - } else - msg = MSG_NOT_APPLICABLE; - } else - msg = MSG_NOT_APPLICABLE; - break; - break; - - case '2': - if (label_chunk_info[here].type == PART_FILESYSTEM) { - PartInfo *pi = - ((PartInfo *)label_chunk_info[here].c->private_data); - - if ((pi != NULL) && - (pi->newfs_type == NEWFS_UFS)) { - pi->newfs_data.newfs_ufs.ufs1 = false; - } else - msg = MSG_NOT_APPLICABLE; - } else - msg = MSG_NOT_APPLICABLE; - break; - break; - - case 'A': - if (label_chunk_info[here].type != PART_SLICE) { - msg = "You can only do this in a disk slice (at top of screen)"; - break; - } - /* - * Generate standard partitions automatically. If we do not - * have sufficient space we attempt to scale-down the size - * of the partitions within certain bounds. - */ - { - int perc; - int req = 0; - - for (perc = 100; perc > 0; perc -= 5) { - req = 0; /* reset for each loop */ - if ((msg = try_auto_label(devs, dev, perc, &req)) == NULL) - break; - } - if (msg) { - if (req) { - msgConfirm(msg); - clear_wins(); - msg = NULL; - } - } - } - break; - - case 'C': - if (label_chunk_info[here].type != PART_SLICE) { - msg = "You can only do this in a master partition (see top of screen)"; - break; - } - sz = space_free(label_chunk_info[here].c); - if (sz <= FS_MIN_SIZE) { - msg = "Not enough space to create an additional FreeBSD partition"; - break; - } - else { - char *val; - daddr_t size; - long double dsize; - struct chunk *tmp; - char osize[80]; - u_long flags = 0; - -#ifdef __powerpc__ - /* Always use the maximum size for apple partitions */ - if (label_chunk_info[here].c->type == apple) - size = sz; - else { -#endif - sprintf(osize, "%jd", (intmax_t)sz); - val = msgGetInput(osize, - "Please specify the partition size in blocks or append a trailing G for\n" -#ifdef __ia64__ - "gigabytes, M for megabytes.\n" -#else - "gigabytes, M for megabytes, or C for cylinders.\n" -#endif - "%jd blocks (%jdMB) are free.", - (intmax_t)sz, (intmax_t)sz / ONE_MEG); - if (!val || (dsize = strtold(val, &cp)) <= 0) { - clear_wins(); - break; - } - - if (*cp) { - if (toupper(*cp) == 'M') - size = (daddr_t) (dsize * ONE_MEG); - else if (toupper(*cp) == 'G') - size = (daddr_t) (dsize * ONE_GIG); -#ifndef __ia64__ - else if (toupper(*cp) == 'C') - size = (daddr_t) dsize * (label_chunk_info[here].c->disk->bios_hd * label_chunk_info[here].c->disk->bios_sect); -#endif - else - size = (daddr_t) dsize; - } else { - size = (daddr_t) dsize; - } - - if (size < FS_MIN_SIZE) { - msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG); - clear_wins(); - break; - } -#ifdef __powerpc__ - } -#endif - type = get_partition_type(); - if (type == PART_NONE) { - clear_wins(); - beep(); - break; - } - - if (type == PART_FILESYSTEM || type == PART_EFI) { - if ((p = get_mountpoint(type, NULL)) == NULL) { - clear_wins(); - beep(); - break; - } - else if (!strcmp(p->mountpoint, "/")) { - if (type != PART_FILESYSTEM) { - clear_wins(); - beep(); - break; - } - else - flags |= CHUNK_IS_ROOT; - } - else - flags &= ~CHUNK_IS_ROOT; - } - else - p = NULL; - - if ((flags & CHUNK_IS_ROOT) && (size < (ROOT_MIN_SIZE * ONE_MEG))) { - msgConfirm("Warning: This is smaller than the recommended size for a\n" - "root partition. For a variety of reasons, root\n" - "partitions should usually be at least %dMB in size", ROOT_MIN_SIZE); - } - tmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk, - label_chunk_info[here].c, size, -#ifdef __ia64__ - (type == PART_EFI) ? efi : part, - (type == PART_EFI) ? 0 : (type == PART_SWAP) ? FS_SWAP : FS_BSDFFS, -#else - part, (type == PART_SWAP) ? FS_SWAP : FS_BSDFFS, -#endif - flags); - if (!tmp) { - msgConfirm("Unable to create the partition. Too big?"); - clear_wins(); - break; - } - - tmp->private_data = p; - tmp->private_free = safe_free; - if (variable_cmp(DISK_LABELLED, "written")) - variable_set2(DISK_LABELLED, "yes", 0); - record_label_chunks(devs, dev); - clear_wins(); - /* This is where we assign focus to new label so it shows. */ - { - int i; - label_focus = -1; - for (i = 0; label_chunk_info[i].c; ++i) { - if (label_chunk_info[i].c == tmp) { - label_focus = i; - break; - } - } - if (label_focus == -1) - label_focus = i - 1; - } - } - break; - - case KEY_DC: - case 'R': /* recover space (delete w/ recover) */ - /* - * Delete the partition w/ space recovery. - */ - rflags = DELCHUNK_RECOVER; - /* fall through */ - case 'D': /* delete */ - if (label_chunk_info[here].type == PART_SLICE) { - msg = MSG_NOT_APPLICABLE; - break; - } - else if (label_chunk_info[here].type == PART_FAT) { - msg = "Use the Disk Partition Editor to delete DOS partitions"; - break; - } - Delete_Chunk2(label_chunk_info[here].c->disk, label_chunk_info[here].c, rflags); - if (variable_cmp(DISK_LABELLED, "written")) - variable_set2(DISK_LABELLED, "yes", 0); - record_label_chunks(devs, dev); - break; - - case 'M': /* mount */ - switch(label_chunk_info[here].type) { - case PART_SLICE: - msg = MSG_NOT_APPLICABLE; - break; - - case PART_SWAP: - msg = "You don't need to specify a mountpoint for a swap partition."; - break; - - case PART_FAT: - case PART_EFI: - case PART_FILESYSTEM: - oldp = label_chunk_info[here].c->private_data; - p = get_mountpoint(label_chunk_info[here].type, label_chunk_info[here].c); - if (p) { - if (!oldp) - p->do_newfs = FALSE; - if ((label_chunk_info[here].type == PART_FAT || - label_chunk_info[here].type == PART_EFI) && - (!strcmp(p->mountpoint, "/") || - !strcmp(p->mountpoint, "/usr") || - !strcmp(p->mountpoint, "/var"))) { - msgConfirm("%s is an invalid mount point for a DOS partition!", p->mountpoint); - strcpy(p->mountpoint, "/bogus"); - } - } - if (variable_cmp(DISK_LABELLED, "written")) - variable_set2(DISK_LABELLED, "yes", 0); - record_label_chunks(devs, dev); - clear_wins(); - break; - - default: - msgFatal("Bogus partition under cursor???"); - break; - } - break; - - case 'N': /* Set newfs options */ - if (label_chunk_info[here].c->private_data && - ((PartInfo *)label_chunk_info[here].c->private_data)->do_newfs) - getNewfsOptionalArguments( - label_chunk_info[here].c->private_data); - else - msg = MSG_NOT_APPLICABLE; - clear_wins(); - break; - - case 'S': /* Toggle soft updates flag */ - if (label_chunk_info[here].type == PART_FILESYSTEM) { - PartInfo *pi = ((PartInfo *)label_chunk_info[here].c->private_data); - if (pi != NULL && - pi->newfs_type == NEWFS_UFS) - pi->newfs_data.newfs_ufs.softupdates = - !pi->newfs_data.newfs_ufs.softupdates; - else - msg = MSG_NOT_APPLICABLE; - } - else - msg = MSG_NOT_APPLICABLE; - break; - - case 'T': /* Toggle newfs state */ - if ((label_chunk_info[here].type == PART_FILESYSTEM || - label_chunk_info[here].type == PART_EFI) && - (label_chunk_info[here].c->private_data)) { - PartInfo *pi = ((PartInfo *)label_chunk_info[here].c->private_data); - if (!pi->do_newfs) - label_chunk_info[here].c->flags |= CHUNK_NEWFS; - else - label_chunk_info[here].c->flags &= ~CHUNK_NEWFS; - - label_chunk_info[here].c->private_data = - new_part(label_chunk_info[here].type, pi ? pi->mountpoint : NULL, pi ? !pi->do_newfs - : TRUE); - if (pi != NULL && - pi->newfs_type == NEWFS_UFS) { - PartInfo *pi_new = label_chunk_info[here].c->private_data; - - pi_new->newfs_data.newfs_ufs = pi->newfs_data.newfs_ufs; - } - safe_free(pi); - label_chunk_info[here].c->private_free = safe_free; - if (variable_cmp(DISK_LABELLED, "written")) - variable_set2(DISK_LABELLED, "yes", 0); - } - else - msg = MSG_NOT_APPLICABLE; - break; - - case 'U': - clear(); - if (!variable_cmp(DISK_LABELLED, "written")) { - msgConfirm("You've already written out your changes -\n" - "it's too late to undo!"); - } - else if (!msgNoYes("Are you SURE you want to Undo everything?")) { - variable_unset(DISK_PARTITIONED); - variable_unset(DISK_LABELLED); - for (i = 0; devs[i]; i++) { - Disk *d; - - if (!devs[i]->enabled) - continue; - else if ((d = Open_Disk(devs[i]->name)) != NULL) { - Free_Disk(devs[i]->private); - devs[i]->private = d; -#ifdef WITH_SLICES - diskPartition(devs[i]); -#endif - } - } - record_label_chunks(devs, dev); - } - clear_wins(); - break; - - case 'W': - if (!variable_cmp(DISK_LABELLED, "written")) { - msgConfirm("You've already written out your changes - if you\n" - "wish to overwrite them, you'll have to restart\n" - "%s first.", ProgName); - } - else if (!msgNoYes("WARNING: This should only be used when modifying an EXISTING\n" - "installation. If you are installing FreeBSD for the first time\n" - "then you should simply type Q when you're finished here and your\n" - "changes will be committed in one batch automatically at the end of\n" - "these questions.\n\n" - "Are you absolutely sure you want to do this now?")) { - variable_set2(DISK_LABELLED, "yes", 0); - diskLabelCommit(NULL); - } - clear_wins(); - break; - - case 'Z': /* Set newfs command line */ - if (label_chunk_info[here].c->private_data && - ((PartInfo *)label_chunk_info[here].c->private_data)->do_newfs) - getNewfsCmd(label_chunk_info[here].c->private_data); - else - msg = MSG_NOT_APPLICABLE; - clear_wins(); - break; - -#ifndef __ia64__ - case '|': - if (!msgNoYes("Are you sure you want to go into Expert mode?\n\n" - "This is an entirely undocumented feature which you are not\n" - "expected to understand!")) { - int i; - Device **devs; - - dialog_clear(); - end_dialog(); - DialogActive = FALSE; - devs = deviceFind(NULL, DEVICE_TYPE_DISK); - if (!devs) { - msgConfirm("Can't find any disk devices!"); - break; - } - for (i = 0; devs[i] && ((Disk *)devs[i]->private); i++) { - if (devs[i]->enabled) - slice_wizard(((Disk *)devs[i]->private)); - } - if (variable_cmp(DISK_LABELLED, "written")) - variable_set2(DISK_LABELLED, "yes", 0); - DialogActive = TRUE; - record_label_chunks(devs, dev); - clear_wins(); - } - else - msg = "A most prudent choice!"; - break; -#endif - - case '\033': /* ESC */ - case 'Q': - labeling = FALSE; - break; - - default: - beep(); - sprintf(_msg, "Invalid key %d - Type F1 or ? for help", key); - msg = _msg; - break; - } - if (label_chunk_info[here].type == PART_SLICE) - pslice_focus = here; - else - label_focus = here; - } - restorescr(w); - return DITEM_SUCCESS; -} - -static __inline daddr_t -requested_part_size(char *varName, daddr_t nom, int def, int perc) -{ - char *cp; - daddr_t sz; - - if ((cp = variable_get(varName)) != NULL) - sz = strtoimax(cp, NULL, 0); - else - sz = nom + (def - nom) * perc / 100; - return(sz * ONE_MEG); -} - -/* - * Attempt to auto-label the disk. 'perc' (0-100) scales - * the size of the various partitions within appropriate - * bounds (NOMINAL through DEFAULT sizes). The procedure - * succeeds of NULL is returned. A non-null return message - * is either a failure-status message (*req == 0), or - * a confirmation requestor (*req == 1). *req is 0 on - * entry to this call. - * - * As a special exception to the usual sizing rules, /var is given - * additional space equal to the amount of physical memory present - * if perc == 100 in order to ensure that users with large hard drives - * will have enough space to store a crashdump in /var/crash. - * - * We autolabel the following partitions: /, swap, /var, /tmp, /usr, - * and /home. /home receives any extra left over disk space. - */ -static char * -try_auto_label(Device **devs, Device *dev, int perc, int *req) -{ - daddr_t sz; - Chunk *AutoHome, *AutoRoot, *AutoSwap; - Chunk *AutoTmp, *AutoUsr, *AutoVar; -#ifdef __ia64__ - Chunk *AutoEfi; -#endif - int mib[2]; - unsigned long physmem; - size_t size; - char *msg = NULL; - - sz = space_free(label_chunk_info[here].c); - if (sz <= FS_MIN_SIZE) - return("Not enough free space to create a new partition in the slice"); - - (void)checkLabels(FALSE); - AutoHome = AutoRoot = AutoSwap = NULL; - AutoTmp = AutoUsr = AutoVar = NULL; - -#ifdef __ia64__ - AutoEfi = NULL; - if (EfiChunk == NULL) { - sz = 400 * ONE_MEG; - AutoEfi = Create_Chunk_DWIM(label_chunk_info[here].c->disk, - label_chunk_info[here].c, sz, efi, 0, 0); - if (AutoEfi == NULL) { - *req = 1; - msg = "Unable to create the EFI system partition. Too big?"; - goto done; - } - AutoEfi->private_data = new_part(PART_EFI, "/efi", TRUE); - AutoEfi->private_free = safe_free; - AutoEfi->flags |= CHUNK_NEWFS; - record_label_chunks(devs, dev); - } -#endif - - if (RootChunk == NULL) { - sz = requested_part_size(VAR_ROOT_SIZE, ROOT_NOMINAL_SIZE, ROOT_DEFAULT_SIZE, perc); - - AutoRoot = Create_Chunk_DWIM(label_chunk_info[here].c->disk, - label_chunk_info[here].c, sz, part, - FS_BSDFFS, CHUNK_IS_ROOT | CHUNK_AUTO_SIZE); - if (!AutoRoot) { - *req = 1; - msg = "Unable to create the root partition. Too big?"; - goto done; - } - AutoRoot->private_data = new_part(PART_FILESYSTEM, "/", TRUE); - AutoRoot->private_free = safe_free; - AutoRoot->flags |= CHUNK_NEWFS; - record_label_chunks(devs, dev); - } - if (SwapChunk == NULL) { - sz = requested_part_size(VAR_SWAP_SIZE, 0, 0, perc); - if (sz == 0) { - daddr_t nom; - daddr_t def; - - mib[0] = CTL_HW; - mib[1] = HW_PHYSMEM; - size = sizeof physmem; - sysctl(mib, 2, &physmem, &size, (void *)0, (size_t)0); - def = 2 * (int)(physmem / 512); - if (def < SWAP_MIN_SIZE * ONE_MEG) - def = SWAP_MIN_SIZE * ONE_MEG; - if (def > SWAP_AUTO_LIMIT_SIZE * ONE_MEG) - def = SWAP_AUTO_LIMIT_SIZE * ONE_MEG; - nom = (int)(physmem / 512) / 8; - sz = nom + (def - nom) * perc / 100; - } - AutoSwap = Create_Chunk_DWIM(label_chunk_info[here].c->disk, - label_chunk_info[here].c, sz, part, - FS_SWAP, CHUNK_AUTO_SIZE); - if (!AutoSwap) { - *req = 1; - msg = "Unable to create the swap partition. Too big?"; - goto done; - } - AutoSwap->private_data = 0; - AutoSwap->private_free = safe_free; - record_label_chunks(devs, dev); - } - if (VarChunk == NULL) { - /* Work out how much extra space we want for a crash dump */ - unsigned long crashdumpsz; - - mib[0] = CTL_HW; - mib[1] = HW_PHYSMEM; - size = sizeof(physmem); - sysctl(mib, 2, &physmem, &size, (void *)0, (size_t)0); - - if (perc == 100) - crashdumpsz = physmem / 1048576; - else - crashdumpsz = 0; - - sz = requested_part_size(VAR_VAR_SIZE, VAR_NOMINAL_SIZE, \ - VAR_DEFAULT_SIZE + crashdumpsz, perc); - - AutoVar = Create_Chunk_DWIM(label_chunk_info[here].c->disk, - label_chunk_info[here].c, sz, part, - FS_BSDFFS, CHUNK_AUTO_SIZE); - if (!AutoVar) { - *req = 1; - msg = "Not enough free space for /var - you will need to\n" - "partition your disk manually with a custom install!"; - goto done; - } - AutoVar->private_data = new_part(PART_FILESYSTEM, "/var", TRUE); - AutoVar->private_free = safe_free; - AutoVar->flags |= CHUNK_NEWFS; - record_label_chunks(devs, dev); - } - if (TmpChunk == NULL && !variable_get(VAR_NO_TMP)) { - sz = requested_part_size(VAR_TMP_SIZE, TMP_NOMINAL_SIZE, TMP_DEFAULT_SIZE, perc); - - AutoTmp = Create_Chunk_DWIM(label_chunk_info[here].c->disk, - label_chunk_info[here].c, sz, part, - FS_BSDFFS, CHUNK_AUTO_SIZE); - if (!AutoTmp) { - *req = 1; - msg = "Not enough free space for /tmp - you will need to\n" - "partition your disk manually with a custom install!"; - goto done; - } - AutoTmp->private_data = new_part(PART_FILESYSTEM, "/tmp", TRUE); - AutoTmp->private_free = safe_free; - AutoTmp->flags |= CHUNK_NEWFS; - record_label_chunks(devs, dev); - } - if (UsrChunk == NULL && !variable_get(VAR_NO_USR)) { - sz = requested_part_size(VAR_USR_SIZE, USR_NOMINAL_SIZE, USR_DEFAULT_SIZE, perc); -#if AUTO_HOME == 0 - if (sz < space_free(label_chunk_info[here].c)) - sz = space_free(label_chunk_info[here].c); -#endif - if (sz) { - if (sz < (USR_MIN_SIZE * ONE_MEG)) { - *req = 1; - msg = "Not enough free space for /usr - you will need to\n" - "partition your disk manually with a custom install!"; - } - - AutoUsr = Create_Chunk_DWIM(label_chunk_info[here].c->disk, - label_chunk_info[here].c, sz, part, - FS_BSDFFS, CHUNK_AUTO_SIZE); - if (!AutoUsr) { - msg = "Unable to create the /usr partition. Not enough space?\n" - "You will need to partition your disk manually with a custom install!"; - goto done; - } - AutoUsr->private_data = new_part(PART_FILESYSTEM, "/usr", TRUE); - AutoUsr->private_free = safe_free; - AutoUsr->flags |= CHUNK_NEWFS; - record_label_chunks(devs, dev); - } - } -#if AUTO_HOME == 1 - if (HomeChunk == NULL && !variable_get(VAR_NO_HOME)) { - sz = requested_part_size(VAR_HOME_SIZE, HOME_NOMINAL_SIZE, HOME_DEFAULT_SIZE, perc); - if (sz < space_free(label_chunk_info[here].c)) - sz = space_free(label_chunk_info[here].c); - if (sz) { - if (sz < (HOME_MIN_SIZE * ONE_MEG)) { - *req = 1; - msg = "Not enough free space for /home - you will need to\n" - "partition your disk manually with a custom install!"; - goto done; - } - - AutoHome = Create_Chunk_DWIM(label_chunk_info[here].c->disk, - label_chunk_info[here].c, sz, part, - FS_BSDFFS, CHUNK_AUTO_SIZE); - if (!AutoHome) { - msg = "Unable to create the /home partition. Not enough space?\n" - "You will need to partition your disk manually with a custom install!"; - goto done; - } - AutoHome->private_data = new_part(PART_FILESYSTEM, "/home", TRUE); - AutoHome->private_free = safe_free; - AutoHome->flags |= CHUNK_NEWFS; - record_label_chunks(devs, dev); - } - } -#endif - - /* At this point, we're reasonably "labelled" */ - if (variable_cmp(DISK_LABELLED, "written")) - variable_set2(DISK_LABELLED, "yes", 0); - -done: - if (msg) { - if (AutoRoot != NULL) - Delete_Chunk(AutoRoot->disk, AutoRoot); - if (AutoSwap != NULL) - Delete_Chunk(AutoSwap->disk, AutoSwap); - if (AutoVar != NULL) - Delete_Chunk(AutoVar->disk, AutoVar); - if (AutoTmp != NULL) - Delete_Chunk(AutoTmp->disk, AutoTmp); - if (AutoUsr != NULL) - Delete_Chunk(AutoUsr->disk, AutoUsr); - if (AutoHome != NULL) - Delete_Chunk(AutoHome->disk, AutoHome); - record_label_chunks(devs, dev); - } - return(msg); -} - -static int -diskLabelNonInteractive(Device *dev) -{ - char *cp; - PartType type; - PartInfo *p; - u_long flags; - int i, status; - Device **devs; - Disk *d; - - status = DITEM_SUCCESS; - cp = variable_get(VAR_DISK); - if (!cp) { - msgConfirm("diskLabel: No disk selected - can't label automatically."); - return DITEM_FAILURE; - } - devs = deviceFind(cp, DEVICE_TYPE_DISK); - if (!devs) { - msgConfirm("diskLabel: No disk device %s found!", cp); - return DITEM_FAILURE; - } - if (dev) - d = dev->private; - else - d = devs[0]->private; - record_label_chunks(devs, dev); - for (i = 0; label_chunk_info[i].c; i++) { - Chunk *c1 = label_chunk_info[i].c; - - if (label_chunk_info[i].type == PART_SLICE) { - char name[512]; - char typ[10], mpoint[50]; - int entries; - - for (entries = 1;; entries++) { - intmax_t sz; - int soft = 0; - snprintf(name, sizeof name, "%s-%d", c1->name, entries); - if ((cp = variable_get(name)) == NULL) - break; - if (sscanf(cp, "%s %jd %s %d", typ, &sz, mpoint, &soft) < 3) { - msgConfirm("For slice entry %s, got an invalid detail entry of: %s", c1->name, cp); - status = DITEM_FAILURE; - break; - } else { - Chunk *tmp; - - flags = 0; - if (!strcmp(typ, "swap")) { - type = PART_SWAP; - strcpy(mpoint, "SWAP"); - } else { - type = PART_FILESYSTEM; - if (!strcmp(mpoint, "/")) - flags |= CHUNK_IS_ROOT; - } - if (!sz) - sz = space_free(c1); - if (sz > space_free(c1)) { - msgConfirm("Not enough free space to create partition: %s", mpoint); - status = DITEM_FAILURE; - break; - } - if (!(tmp = Create_Chunk_DWIM(d, c1, sz, part, - (type == PART_SWAP) ? FS_SWAP : FS_BSDFFS, flags))) { - msgConfirm("Unable to create from partition spec: %s. Too big?", cp); - status = DITEM_FAILURE; - break; - } else { - PartInfo *pi; - pi = tmp->private_data = new_part(PART_FILESYSTEM, mpoint, TRUE); - tmp->private_free = safe_free; - pi->newfs_data.newfs_ufs.softupdates = soft; - if (!strcmp(typ, "ufs1")) - pi->newfs_data.newfs_ufs.ufs1 = TRUE; - } - } - } - } else { - /* Must be something we can set a mountpoint for */ - cp = variable_get(c1->name); - if (cp) { - char mpoint[50], do_newfs[8]; - Boolean newfs = FALSE; - - do_newfs[0] = '\0'; - if (sscanf(cp, "%s %s", mpoint, do_newfs) != 2) { - msgConfirm("For slice entry %s, got an invalid detail entry of: %s", c1->name, cp); - status = DITEM_FAILURE; - break; - } - newfs = toupper(do_newfs[0]) == 'Y' ? TRUE : FALSE; - if (c1->private_data) { - p = c1->private_data; - p->do_newfs = newfs; - strcpy(p->mountpoint, mpoint); - } - else { - c1->private_data = new_part(PART_FILESYSTEM, mpoint, newfs); - c1->private_free = safe_free; - } - if (!strcmp(mpoint, "/")) - c1->flags |= CHUNK_IS_ROOT; - else - c1->flags &= ~CHUNK_IS_ROOT; - } - } - } - if (status == DITEM_SUCCESS) - variable_set2(DISK_LABELLED, "yes", 0); - return status; -} diff --git a/usr.sbin/sysinstall/list.h b/usr.sbin/sysinstall/list.h deleted file mode 100644 index 8300173..0000000 --- a/usr.sbin/sysinstall/list.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated for what's essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1997 FreeBSD, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY PAUL TRAINA ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL PAUL TRAINA OR HIS KILLER RATS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* The structure */ -typedef struct _qelement { - struct _qelement *q_forw; - struct _qelement *q_back; -} qelement; - -#define INITQUE(Xhead) { \ - (Xhead).q_forw = &(Xhead); \ - (Xhead).q_back = &(Xhead); \ -} - -#define EMPTYQUE(Xhead) \ - ((Xhead).q_forw == &(Xhead)) - -#define INSQUEUE(elem, pred) { \ - register qelement *Xe = (qelement *) (elem); \ - register qelement *Xp = (qelement *) (pred); \ - Xp->q_forw = (Xe->q_forw = (Xe->q_back = Xp)->q_forw)->q_back = Xe; \ -} - -#define REMQUE(elem) { \ - register qelement *Xe = (qelement *) (elem); \ - (Xe->q_back->q_forw = Xe->q_forw)->q_back = Xe->q_back; \ -} diff --git a/usr.sbin/sysinstall/main.c b/usr.sbin/sysinstall/main.c deleted file mode 100644 index 3f9164a..0000000 --- a/usr.sbin/sysinstall/main.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated for what's essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/signal.h> -#include <sys/fcntl.h> -#include <sys/time.h> -#include <sys/resource.h> - -const char *StartName; /* Initial contents of argv[0] */ -const char *ProgName = "sysinstall"; - -static void -screech(int sig) -{ - msgDebug("\007Signal %d caught! That's bad!\n", sig); - longjmp(BailOut, sig); -} - -int -main(int argc, char **argv) -{ - int choice, scroll, curr, max, status; - char titlestr[80], *arch, *osrel, *ostype; - struct rlimit rlim; - char *arg; - int i; - int optionArgs = 0; - - /* Record name to be able to restart */ - StartName = argv[0]; - - Restarting = FALSE; - RunningAsInit = FALSE; - Fake = FALSE; - - for (i = 1; i < argc; i++) { - arg = argv[i]; - - if (arg[0] != '-') - break; - - optionArgs++; - - if (!strcmp(arg, "-fake")) { - variable_set2(VAR_DEBUG, "YES", 0); - Fake = TRUE; - } else if (!strcmp(arg, "-restart")) { - Restarting = TRUE; - } else if (!strcmp(arg, "-fakeInit")) { - RunningAsInit = TRUE; - } - - arg = argv[optionArgs+1]; - } - - if (getpid() == 1) - RunningAsInit = TRUE; - - /* Catch fatal signals and complain about them if running as init */ - if (RunningAsInit) { - signal(SIGBUS, screech); - signal(SIGSEGV, screech); - } - signal(SIGPIPE, SIG_IGN); - - /* We don't work too well when running as non-root anymore */ - if (geteuid() != 0) { - fprintf(stderr, "Error: This utility should only be run as root.\n"); - return 1; - } - - /* - * Given what it does sysinstall (and stuff sysinstall runs like - * pkg_add) shouldn't be subject to process limits. Better to just - * let them have what they think they need than have them blow - * their brains out during an install (in sometimes strange and - * mysterious ways). - */ - - rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY; - if (setrlimit(RLIMIT_DATA, &rlim) != 0) - fprintf(stderr, "Warning: setrlimit() of datasize failed.\n"); - if (setrlimit(RLIMIT_STACK, &rlim) != 0) - fprintf(stderr, "Warning: setrlimit() of stacksize failed.\n"); - -#ifdef PC98 - { - /* XXX */ - char *p = getenv("TERM"); - if (p && strcmp(p, "cons25") == 0) - setenv("TERM", "cons25w", 1); - } -#endif - - /* Set up whatever things need setting up */ - systemInitialize(argc, argv); - - /* Set default flag and variable values */ - installVarDefaults(NULL); - /* only when multi-user is it reasonable to do this here */ - if (!RunningAsInit) - installEnvironment(); - - if (Fake) - msgConfirm("I'll be just faking it from here on out, OK?"); - - /* Try to preserve our scroll-back buffer */ - if (OnVTY) { - for (curr = 0; curr < 25; curr++) - putchar('\n'); - } - /* Move stderr aside */ - if (DebugFD) - dup2(DebugFD, 2); - - /* Initialize driver modules, if we haven't already done so (ie, - the user hit Ctrl-C -> Restart. */ - if (!pvariable_get("modulesInitialize")) { - moduleInitialize(); - pvariable_set("modulesInitialize=1"); - } - - /* Probe for all relevant devices on the system */ - deviceGetAll(); - - /* Prompt for the driver floppy if appropriate. */ - if (!pvariable_get("driverFloppyCheck")) { - driverFloppyCheck(); - pvariable_set("driverFloppyCheck=1"); - } - - /* First, see if we have any arguments to process (and argv[0] counts if it's not "sysinstall") */ - if (!RunningAsInit) { - for (i = optionArgs+1; i < argc; i++) { - if (DITEM_STATUS(dispatchCommand(argv[i])) != DITEM_SUCCESS) - systemShutdown(1); - } - - /* If we were given commands to process on the command line, just exit - * now */ - if (argc > optionArgs+1) - systemShutdown(0); - } - else - dispatch_load_file_int(TRUE); - - status = setjmp(BailOut); - if (status) { - msgConfirm("A signal %d was caught - I'm saving what I can and shutting\n" - "down. If you can reproduce the problem, please turn Debug on\n" - "in the Options menu for the extra information it provides\n" - "in debugging problems like this.", status); - systemShutdown(status); - } - - /* Get user's country and keymap */ - if (RunningAsInit) - configCountry(NULL); - - /* Add FreeBSD version info to the menu title */ - arch = getsysctlbyname("hw.machine_arch"); - osrel = getsysctlbyname("kern.osrelease"); - ostype = getsysctlbyname("kern.ostype"); - snprintf(titlestr, sizeof(titlestr), "%s/%s %s - %s", ostype, arch, - osrel, MenuInitial.title); - free(arch); - free(osrel); - free(ostype); - MenuInitial.title = titlestr; - - /* Begin user dialog at outer menu */ - dialog_clear(); - while (1) { - choice = scroll = curr = max = 0; - dmenuOpen(&MenuInitial, &choice, &scroll, &curr, &max, TRUE); - if (!RunningAsInit -#if defined(__sparc64__) - || !msgNoYes("Are you sure you wish to exit? The system will halt.") -#else - || !msgNoYes("Are you sure you wish to exit? The system will reboot.") -#endif - ) - break; - } - - /* Say goodnight, Gracie */ - systemShutdown(0); - - return 0; /* We should never get here */ -} diff --git a/usr.sbin/sysinstall/media.c b/usr.sbin/sysinstall/media.c deleted file mode 100644 index 5b80f1d..0000000 --- a/usr.sbin/sysinstall/media.c +++ /dev/null @@ -1,877 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <signal.h> -#include <netdb.h> -#include <sys/socket.h> -#include <sys/param.h> -#include <sys/mount.h> -#include <sys/errno.h> -#include <sys/fcntl.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <sys/mman.h> -#include <sys/wait.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <resolv.h> - -static Boolean got_intr = FALSE; -static Boolean ftp_skip_resolve = FALSE; - -/* timeout handler */ -static void -handle_intr(int sig) -{ - msgDebug("User generated interrupt.\n"); - got_intr = TRUE; -} - -static int -check_for_interrupt(void) -{ - if (got_intr) { - got_intr = FALSE; - return TRUE; - } - return FALSE; -} - -static int -genericHook(dialogMenuItem *self, DeviceType type) -{ - Device **devs; - - devs = deviceFind(self->prompt, type); - if (devs) - mediaDevice = devs[0]; - return (devs ? DITEM_LEAVE_MENU : DITEM_FAILURE); -} - -static int -cdromHook(dialogMenuItem *self) -{ - return genericHook(self, DEVICE_TYPE_CDROM); -} - -static void -kickstart_dns(void) -{ - static Boolean initted = FALSE; - int time; - char *cp; - - cp = variable_get(VAR_MEDIA_TIMEOUT); - if (!cp) - time = MEDIA_TIMEOUT; - else - time = atoi(cp); - if (!time) - time = 100; - if (!initted) { - res_init(); - _res.retry = 2; /* 2 times seems a reasonable number to me */ - _res.retrans = time / 2; /* so spend half our alloted time on each try */ - initted = TRUE; - } -} - -char * -cpioVerbosity() -{ - char *cp = variable_get(VAR_CPIO_VERBOSITY); - - if (cp && !strcmp(cp, "high")) - return "-v"; - return ""; -} - -int -mediaOpen(void) -{ - if (!mediaDevice || !mediaVerify() || !DEVICE_INIT(mediaDevice)) - return DITEM_FAILURE; - return DITEM_SUCCESS; -} - -void -mediaClose(void) -{ - if (mediaDevice) - DEVICE_SHUTDOWN(mediaDevice); - mediaDevice = NULL; -} - -/* - * Return 1 if we successfully found and set the installation type to - * be a CD. - */ -int -mediaSetCDROM(dialogMenuItem *self) -{ - Device **devs; - int cnt; - - mediaClose(); - devs = deviceFind(NULL, DEVICE_TYPE_CDROM); - cnt = deviceCount(devs); - if (!cnt) { - if (self) /* Interactive? */ - msgConfirm("No CD/DVD devices found! Please check that your system's\n" - "configuration is correct and that the CD/DVD drive is of a supported\n" - "type. For more information, consult the hardware guide\n" - "in the Doc menu."); - return DITEM_FAILURE | DITEM_CONTINUE; - } - else if (cnt > 1) { - DMenu *menu; - int status; - - menu = deviceCreateMenu(&MenuMediaCDROM, DEVICE_TYPE_CDROM, cdromHook, NULL); - if (!menu) - msgFatal("Unable to create CDROM menu! Something is seriously wrong."); - status = dmenuOpenSimple(menu, FALSE); - free(menu); - if (!status) - return DITEM_FAILURE; - } - else - mediaDevice = devs[0]; - return (mediaDevice ? DITEM_SUCCESS | DITEM_LEAVE_MENU : DITEM_FAILURE); -} - -static int -floppyHook(dialogMenuItem *self) -{ - return genericHook(self, DEVICE_TYPE_FLOPPY); -} - -/* - * Return 1 if we successfully found and set the installation type to - * be a floppy - */ -int -mediaSetFloppy(dialogMenuItem *self) -{ - Device **devs; - int cnt; - - mediaClose(); - devs = deviceFind(NULL, DEVICE_TYPE_FLOPPY); - cnt = deviceCount(devs); - if (!cnt) { - msgConfirm("No floppy devices found! Please check that your system's configuration\n" - "is correct. For more information, consult the hardware guide in the Doc\n" - "menu."); - return DITEM_FAILURE | DITEM_CONTINUE; - } - else if (cnt > 1) { - DMenu *menu; - int status; - - menu = deviceCreateMenu(&MenuMediaFloppy, DEVICE_TYPE_FLOPPY, floppyHook, NULL); - if (!menu) - msgFatal("Unable to create Floppy menu! Something is seriously wrong."); - status = dmenuOpenSimple(menu, FALSE); - free(menu); - if (!status) - return DITEM_FAILURE; - } - else - mediaDevice = devs[0]; - if (mediaDevice) - mediaDevice->private = NULL; - return (mediaDevice ? DITEM_LEAVE_MENU : DITEM_FAILURE); -} - -static int -USBHook(dialogMenuItem *self) -{ - return genericHook(self, DEVICE_TYPE_USB); -} - - -/* - * Attempt to use USB as the installation media type. - */ -int -mediaSetUSB(dialogMenuItem *self) -{ - Device **devs; - int cnt; - - mediaClose(); - devs = deviceFind(NULL, DEVICE_TYPE_USB); - cnt = deviceCount(devs); - - if (!cnt) { - msgConfirm("No USB devices found (try Options/Re-scan Devices)"); - return DITEM_FAILURE | DITEM_CONTINUE; - } - else if (cnt > 1) { - DMenu *menu; - int status; - - menu = deviceCreateMenu(&MenuMediaUSB, DEVICE_TYPE_USB, USBHook, - NULL); - if (!menu) - msgFatal("Unable to create USB menu! Something is " \ - "seriously wrong."); - status = dmenuOpenSimple(menu, FALSE); - free(menu); - if (!status) - return DITEM_FAILURE; - } - else - mediaDevice = devs[0]; - if (mediaDevice) - mediaDevice->private = NULL; - if (!variable_get(VAR_NONINTERACTIVE)) - msgConfirm("Using USB device: %s", mediaDevice->name); - return (mediaDevice ? DITEM_LEAVE_MENU : DITEM_FAILURE); -} - -static int -DOSHook(dialogMenuItem *self) -{ - return genericHook(self, DEVICE_TYPE_DOS); -} - -/* - * Return 1 if we successfully found and set the installation type to - * be a DOS partition. - */ -int -mediaSetDOS(dialogMenuItem *self) -{ - Device **devs; - int cnt; - - mediaClose(); - devs = deviceFind(NULL, DEVICE_TYPE_DOS); - cnt = deviceCount(devs); - if (!cnt) { - msgConfirm("No DOS primary partitions found! This installation method is unavailable"); - return DITEM_FAILURE | DITEM_CONTINUE; - } - else if (cnt > 1) { - DMenu *menu; - int status; - - menu = deviceCreateMenu(&MenuMediaDOS, DEVICE_TYPE_DOS, DOSHook, NULL); - if (!menu) - msgFatal("Unable to create DOS menu! Something is seriously wrong."); - status = dmenuOpenSimple(menu, FALSE); - free(menu); - if (!status) - return DITEM_FAILURE; - } - else - mediaDevice = devs[0]; - return (mediaDevice ? DITEM_LEAVE_MENU : DITEM_FAILURE); -} - -/* - * Return 0 if we successfully found and set the installation type to - * be an ftp server - */ -int -mediaSetFTP(dialogMenuItem *self) -{ - static Device ftpDevice; - char *cp, hbuf[MAXHOSTNAMELEN], *hostname, *dir; - struct addrinfo hints, *res; - int af; - size_t urllen; - extern int FtpPort; - static Device *networkDev = NULL; - - mediaClose(); - cp = variable_get(VAR_FTP_PATH); - /* If we've been through here before ... */ - if (networkDev && cp && msgYesNo("Re-use old FTP site selection values?")) - cp = NULL; - if (!cp) { - if (!dmenuOpenSimple(&MenuMediaFTP, FALSE)) - return DITEM_FAILURE; - else - cp = variable_get(VAR_FTP_PATH); - } - if (!cp) - return DITEM_FAILURE; - else if (!strcmp(cp, "other")) { - variable_set2(VAR_FTP_PATH, "ftp://", 0); - cp = variable_get_value(VAR_FTP_PATH, "Please specify the URL of a FreeBSD distribution on a\n" - "remote ftp site. This site must accept either anonymous\n" - "ftp or you should have set an ftp username and password\n" - "in the Options screen.\n\n" - "A URL looks like this: ftp://<hostname>/<path>\n" - "Where <path> is relative to the anonymous ftp directory or the\n" - "home directory of the user being logged in as.", 0); - if (!cp || !*cp || !strcmp(cp, "ftp://")) { - variable_unset(VAR_FTP_PATH); - return DITEM_FAILURE; - } - urllen = strlen(cp); - if (urllen >= sizeof(ftpDevice.name)) { - msgConfirm("Length of specified URL is %zu characters. Allowable maximum is %zu.", - urllen,sizeof(ftpDevice.name)-1); - variable_unset(VAR_FTP_PATH); - return DITEM_FAILURE; - } - } - if (strncmp("ftp://", cp, 6)) { - msgConfirm("Sorry, %s is an invalid URL!", cp); - variable_unset(VAR_FTP_PATH); - return DITEM_FAILURE; - } - SAFE_STRCPY(ftpDevice.name, cp); - SAFE_STRCPY(hbuf, cp + 6); - hostname = hbuf; - - if (!networkDev || msgYesNo("You've already done the network configuration once,\n" - "would you like to skip over it now?") != 0) { - if (networkDev) - DEVICE_SHUTDOWN(networkDev); - if (!(networkDev = tcpDeviceSelect())) { - variable_unset(VAR_FTP_PATH); - return DITEM_FAILURE; - } - } - if (!DEVICE_INIT(networkDev)) { - if (isDebug()) - msgDebug("mediaSetFTP: Net device init failed.\n"); - variable_unset(VAR_FTP_PATH); - return DITEM_FAILURE; - } - if (*hostname == '[' && (cp = index(hostname + 1, ']')) != NULL && - (*++cp == '\0' || *cp == '/' || *cp == ':')) { - ++hostname; - *(cp - 1) = '\0'; - } - else - cp = index(hostname, ':'); - if (cp != NULL && *cp == ':') { - *(cp++) = '\0'; - FtpPort = strtol(cp, 0, 0); - } - else - FtpPort = 21; - if ((dir = index(cp ? cp : hostname, '/')) != NULL) - *(dir++) = '\0'; - if (isDebug()) { - msgDebug("hostname = `%s'\n", hostname); - msgDebug("dir = `%s'\n", dir ? dir : "/"); - msgDebug("port # = `%d'\n", FtpPort); - } - if (!ftp_skip_resolve && variable_get(VAR_NAMESERVER)) { - msgNotify("Looking up host %s.", hostname); - if (isDebug()) - msgDebug("Starting DNS.\n"); - kickstart_dns(); - if (isDebug()) - msgDebug("Looking up hostname, %s, using getaddrinfo(AI_NUMERICHOST).\n", hostname); - af = variable_cmp(VAR_IPV6_ENABLE, "YES") ? AF_INET : AF_UNSPEC; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = af; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; - if (getaddrinfo(hostname, NULL, &hints, &res) != 0) { - if (isDebug()) - msgDebug("Looking up hostname, %s, using getaddrinfo().\n", - hostname); - hints.ai_flags = AI_PASSIVE; - if (getaddrinfo(hostname, NULL, &hints, &res) != 0) { - msgConfirm("Cannot resolve hostname `%s'! Are you sure that" - " your\nname server, gateway and network interface are" - " correctly configured?", hostname); - if (networkDev) - DEVICE_SHUTDOWN(networkDev); - networkDev = NULL; - variable_unset(VAR_FTP_PATH); - return DITEM_FAILURE; - } - } - freeaddrinfo(res); - if (isDebug()) - msgDebug("Found DNS entry for %s successfully..\n", hostname); - } - variable_set2(VAR_FTP_HOST, hostname, 0); - variable_set2(VAR_FTP_DIR, dir ? dir : "/", 0); - variable_set2(VAR_FTP_PORT, itoa(FtpPort), 0); - ftpDevice.type = DEVICE_TYPE_FTP; - ftpDevice.init = mediaInitFTP; - ftpDevice.get = mediaGetFTP; - ftpDevice.shutdown = mediaShutdownFTP; - ftpDevice.private = networkDev; - mediaDevice = &ftpDevice; - return DITEM_SUCCESS | DITEM_LEAVE_MENU | DITEM_RESTORE; -} - -int -mediaSetFTPActive(dialogMenuItem *self) -{ - variable_set2(VAR_FTP_STATE, "active", 0); - return mediaSetFTP(self); -} - -int -mediaSetFTPPassive(dialogMenuItem *self) -{ - variable_set2(VAR_FTP_STATE, "passive", 0); - return mediaSetFTP(self); -} - -int mediaSetHTTP(dialogMenuItem *self) -{ - Boolean tmp; - int result; - char *cp, *idx, hbuf[MAXHOSTNAMELEN], *hostname; - int HttpPort; - int what = DITEM_RESTORE; - - - tmp = ftp_skip_resolve; - ftp_skip_resolve = TRUE; - result = mediaSetFTP(self); - ftp_skip_resolve = tmp; - - if (DITEM_STATUS(result) != DITEM_SUCCESS) - return result; - - cp = variable_get_value(VAR_HTTP_PROXY, - "Please enter the address of the HTTP proxy in this format:\n" - " hostname:port (the ':port' is optional, default is 3128)",0); - if (!cp) - return DITEM_FAILURE; - SAFE_STRCPY(hbuf, cp); - hostname = hbuf; - if (*hostname == '[' && (idx = index(hostname + 1, ']')) != NULL && - (*++idx == '\0' || *idx == ':')) { - ++hostname; - *(idx - 1) = '\0'; - } else - idx = index(hostname, ':'); - if (idx == NULL || *idx != ':') - HttpPort = 3128; /* try this as default */ - else { - *(idx++) = '\0'; - HttpPort = strtol(idx, 0, 0); - } - - variable_set2(VAR_HTTP_HOST, hostname, 0); - variable_set2(VAR_HTTP_PORT, itoa(HttpPort), 0); - if (isDebug()) { - msgDebug("VAR_FTP_PATH : %s\n",variable_get(VAR_FTP_PATH)); - msgDebug("VAR_HTTP_HOST, _PORT: %s:%s\n",variable_get(VAR_HTTP_HOST), - variable_get(VAR_HTTP_PORT)); - } - - /* mediaDevice has been set by mediaSetFTP(), overwrite partly: */ - mediaDevice->type = DEVICE_TYPE_HTTP; - mediaDevice->init = mediaInitHTTP; - mediaDevice->get = mediaGetHTTP; - mediaDevice->shutdown = dummyShutdown; - return DITEM_SUCCESS | DITEM_LEAVE_MENU | what; -} - - -int -mediaSetUFS(dialogMenuItem *self) -{ - static Device ufsDevice; - struct statfs st; - char *cp; - - mediaClose(); - cp = variable_get_value(VAR_UFS_PATH, "Enter a fully qualified pathname for the directory\n" - "containing the FreeBSD distribution files:", 0); - if (!cp) - return DITEM_FAILURE; - - /* If they gave us a CDROM or something, try and pick a better name */ - if (statfs(cp, &st)) - strcpy(ufsDevice.name, "ufs"); - else - strcpy(ufsDevice.name, st.f_fstypename); - - ufsDevice.type = DEVICE_TYPE_UFS; - ufsDevice.init = dummyInit; - ufsDevice.get = mediaGetUFS; - ufsDevice.shutdown = dummyShutdown; - ufsDevice.private = strdup(cp); - mediaDevice = &ufsDevice; - return DITEM_LEAVE_MENU; -} - -int -mediaSetNFS(dialogMenuItem *self) -{ - static Device nfsDevice; - static Device *networkDev = NULL; - char *cp, *idx; - char hostname[MAXPATHLEN]; - size_t pathlen; - - mediaClose(); - cp = variable_get_value(VAR_NFS_PATH, "Please enter the full NFS file specification for the remote\n" - "host and directory containing the FreeBSD distribution files.\n" - "This should be in the format: hostname:/some/freebsd/dir", 0); - if (!cp) - return DITEM_FAILURE; - SAFE_STRCPY(hostname, cp); - if (!(idx = index(hostname, ':'))) { - msgConfirm("Invalid NFS path specification. Must be of the form:\n" - "host:/full/pathname/to/FreeBSD/distdir"); - return DITEM_FAILURE; - } - pathlen = strlen(hostname); - if (pathlen >= sizeof(nfsDevice.name)) { - msgConfirm("Length of specified NFS path is %zu characters. Allowable maximum is %zu.", - pathlen,sizeof(nfsDevice.name)-1); - variable_unset(VAR_NFS_PATH); - return DITEM_FAILURE; - } - SAFE_STRCPY(nfsDevice.name, hostname); - *idx = '\0'; - if (!networkDev || msgYesNo("You've already done the network configuration once,\n" - "would you like to skip over it now?") != 0) { - if (networkDev) - DEVICE_SHUTDOWN(networkDev); - if (!(networkDev = tcpDeviceSelect())) - return DITEM_FAILURE; - } - if (!DEVICE_INIT(networkDev)) { - if (isDebug()) - msgDebug("mediaSetNFS: Net device init failed\n"); - } - if (variable_get(VAR_NAMESERVER)) { - kickstart_dns(); - if ((inet_addr(hostname) == INADDR_NONE) && (gethostbyname(hostname) == NULL)) { - msgConfirm("Cannot resolve hostname `%s'! Are you sure that your\n" - "name server, gateway and network interface are correctly configured?", hostname); - if (networkDev) - DEVICE_SHUTDOWN(networkDev); - networkDev = NULL; - variable_unset(VAR_NFS_PATH); - return DITEM_FAILURE; - } - else { - if (isDebug()) - msgDebug("Found DNS entry for %s successfully..\n", hostname); - } - } - variable_set2(VAR_NFS_HOST, hostname, 0); - nfsDevice.type = DEVICE_TYPE_NFS; - nfsDevice.init = mediaInitNFS; - nfsDevice.get = mediaGetNFS; - nfsDevice.shutdown = mediaShutdownNFS; - nfsDevice.private = networkDev; - mediaDevice = &nfsDevice; - return DITEM_LEAVE_MENU; -} - -Boolean -mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpid) -{ - int i, pfd[2],qfd[2]; - - if (!dir) - dir = "/"; - Mkdir(dir); - chdir(dir); - pipe(pfd); - pipe(qfd); - *zpid = fork(); - if (!*zpid) { - char *unzipper = RunningAsInit ? "/stand/" UNZIPPER - : "/usr/bin/" UNZIPPER; - - dup2(qfd[0], 0); close(qfd[0]); - dup2(pfd[1], 1); close(pfd[1]); - if (DebugFD != -1) - dup2(DebugFD, 2); - else { - close(2); - open("/dev/null", O_WRONLY); - } - close(qfd[1]); - close(pfd[0]); - i = execl(unzipper, unzipper, (char *)0); - if (isDebug()) - msgDebug("%s command returns %d status\n", unzipper, i); - exit(i); - } - *fd = qfd[1]; - close(qfd[0]); - *cpid = fork(); - if (!*cpid) { - char *cpio = RunningAsInit ? "/stand/cpio" : "/usr/bin/cpio"; - - dup2(pfd[0], 0); close(pfd[0]); - close(pfd[1]); - close(qfd[1]); - if (DebugFD != -1) { - dup2(DebugFD, 1); - dup2(DebugFD, 2); - } - else { - close(1); open("/dev/null", O_WRONLY); - dup2(1, 2); - } - if (strlen(cpioVerbosity())) - i = execl(cpio, cpio, "-idum", cpioVerbosity(), (char *)0); - else - i = execl(cpio, cpio, "-idum", (char *)0); - if (isDebug()) - msgDebug("%s command returns %d status\n", cpio, i); - exit(i); - } - close(pfd[0]); - close(pfd[1]); - return TRUE; -} - -Boolean -mediaExtractDistEnd(int zpid, int cpid) -{ - int i,j; - - i = waitpid(zpid, &j, 0); - /* Don't check exit status - gunzip seems to return a bogus one! */ - if (i < 0) { - if (isDebug()) - msgDebug("wait for %s returned status of %d!\n", UNZIPPER, i); - return FALSE; - } - i = waitpid(cpid, &j, 0); - if (i < 0 || WEXITSTATUS(j)) { - if (isDebug()) - msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j)); - return FALSE; - } - return TRUE; -} - -Boolean -mediaExtractDist(char *dir, char *dist, FILE *fp) -{ - int i, j, total, seconds, zpid, cpid, pfd[2], qfd[2]; - char buf[BUFSIZ]; - struct timeval start, stop; - struct sigaction new, old; - - if (!dir) - dir = "/"; - - Mkdir(dir); - chdir(dir); - pipe(pfd); /* read end */ - pipe(qfd); /* write end */ - zpid = fork(); - if (!zpid) { - char *unzipper = RunningAsInit ? "/stand/" UNZIPPER - : "/usr/bin/" UNZIPPER; - - fclose(fp); - close(qfd[1]); - dup2(qfd[0], 0); close(qfd[0]); - - close(pfd[0]); - dup2(pfd[1], 1); close(pfd[1]); - - if (DebugFD != -1) - dup2(DebugFD, 2); - else { - close(2); - open("/dev/null", O_WRONLY); - } - i = execl(unzipper, unzipper, (char *)0); - if (isDebug()) - msgDebug("%s command returns %d status\n", unzipper, i); - exit(i); - } - cpid = fork(); - if (!cpid) { - char *cpio = RunningAsInit ? "/stand/cpio" : "/usr/bin/cpio"; - - close(pfd[1]); - dup2(pfd[0], 0); close(pfd[0]); - close (qfd[0]); close(qfd[1]); - fclose(fp); - if (DebugFD != -1) { - dup2(DebugFD, 1); - dup2(DebugFD, 2); - } - else { - dup2(open("/dev/null", O_WRONLY), 1); - dup2(1, 2); - } - if (strlen(cpioVerbosity())) - i = execl(cpio, cpio, "-idum", cpioVerbosity(), (char *)0); - else - i = execl(cpio, cpio, "-idum", "--block-size", (char *)0); - if (isDebug()) - msgDebug("%s command returns %d status\n", cpio, i); - exit(i); - } - close(pfd[0]); close(pfd[1]); - close(qfd[0]); - - total = 0; - (void)gettimeofday(&start, (struct timezone *)0); - - /* Make ^C abort the current transfer rather than the whole show */ - new.sa_handler = handle_intr; - new.sa_flags = 0; - (void)sigemptyset(&new.sa_mask); - sigaction(SIGINT, &new, &old); - - while ((i = fread(buf, 1, BUFSIZ, fp)) > 0) { - if (check_for_interrupt()) { - msgConfirm("Failure to read from media: User interrupt."); - break; - } - if (write(qfd[1], buf, i) != i) { - msgConfirm("Write error on transfer to cpio process, try of %d bytes.", i); - break; - } - else { - (void)gettimeofday(&stop, (struct timezone *)0); - stop.tv_sec = stop.tv_sec - start.tv_sec; - stop.tv_usec = stop.tv_usec - start.tv_usec; - if (stop.tv_usec < 0) - stop.tv_sec--, stop.tv_usec += 1000000; - seconds = stop.tv_sec + (stop.tv_usec / 1000000.0); - if (!seconds) - seconds = 1; - total += i; - msgInfo("%10d bytes read from %s dist @ %.1f KB/sec.", - total, dist, (total / seconds) / 1024.0); - } - } - sigaction(SIGINT, &old, NULL); /* restore sigint */ - close(qfd[1]); - - i = waitpid(zpid, &j, 0); - /* Don't check exit status - gunzip seems to return a bogus one! */ - if (i < 0) { - if (isDebug()) - msgDebug("wait for %s returned status of %d!\n", UNZIPPER, i); - return FALSE; - } - i = waitpid(cpid, &j, 0); - if (i < 0 || WEXITSTATUS(j)) { - if (isDebug()) - msgDebug("cpio returned error status of %d!\n", WEXITSTATUS(j)); - return FALSE; - } - return TRUE; -} - -int -mediaGetType(dialogMenuItem *self) -{ - return ((dmenuOpenSimple(&MenuMedia, FALSE) && mediaDevice) ? DITEM_SUCCESS : DITEM_FAILURE); -} - -/* Return TRUE if all the media variables are set up correctly */ -Boolean -mediaVerify(void) -{ - if (!mediaDevice) - return (DITEM_STATUS(mediaGetType(NULL)) == DITEM_SUCCESS); - return TRUE; -} - -/* Set the FTP username and password fields */ -int -mediaSetFTPUserPass(dialogMenuItem *self) -{ - char *pass; - - if (variable_get_value(VAR_FTP_USER, "Please enter the username you wish to login as:", 0)) { - DialogInputAttrs |= DITEM_NO_ECHO; - pass = variable_get_value(VAR_FTP_PASS, "Please enter the password for this user:", 0); - DialogInputAttrs &= ~DITEM_NO_ECHO; - } - else - pass = NULL; - return (pass ? DITEM_SUCCESS : DITEM_FAILURE); -} - -/* Set CPIO verbosity level */ -int -mediaSetCPIOVerbosity(dialogMenuItem *self) -{ - char *cp = variable_get(VAR_CPIO_VERBOSITY); - - if (!cp) { - msgConfirm("CPIO Verbosity is not set to anything!"); - return DITEM_FAILURE; - } - else { - if (!strcmp(cp, "low")) - variable_set2(VAR_CPIO_VERBOSITY, "high", 0); - else /* must be "high" - wrap around */ - variable_set2(VAR_CPIO_VERBOSITY, "low", 0); - } - return DITEM_SUCCESS; -} - -/* A generic open which follows a well-known "path" of places to look */ -FILE * -mediaGenericGet(char *base, const char *file) -{ - char buf[PATH_MAX]; - - snprintf(buf, PATH_MAX, "%s/%s", base, file); - if (file_readable(buf)) - return fopen(buf, "r"); - snprintf(buf, PATH_MAX, "%s/FreeBSD/%s", base, file); - if (file_readable(buf)) - return fopen(buf, "r"); - snprintf(buf, PATH_MAX, "%s/releases/%s", base, file); - if (file_readable(buf)) - return fopen(buf, "r"); - snprintf(buf, PATH_MAX, "%s/%s/%s", base, variable_get(VAR_RELNAME), file); - if (file_readable(buf)) - return fopen(buf, "r"); - snprintf(buf, PATH_MAX, "%s/releases/%s/%s", base, variable_get(VAR_RELNAME), file); - return fopen(buf, "r"); -} - diff --git a/usr.sbin/sysinstall/menus.c b/usr.sbin/sysinstall/menus.c deleted file mode 100644 index 360b6a9..0000000 --- a/usr.sbin/sysinstall/menus.c +++ /dev/null @@ -1,2164 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif - -#include "sysinstall.h" - -/* Miscellaneous work routines for menus */ -static int -setSrc(dialogMenuItem *self) -{ - Dists |= DIST_SRC; - SrcDists = DIST_SRC_ALL; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -static int -clearSrc(dialogMenuItem *self) -{ - Dists &= ~DIST_SRC; - SrcDists = 0; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -static int -setKernel(dialogMenuItem *self) -{ - Dists |= DIST_KERNEL; - KernelDists = DIST_KERNEL_ALL; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -static int -clearKernel(dialogMenuItem *self) -{ - Dists &= ~DIST_KERNEL; - KernelDists = 0; - return DITEM_SUCCESS | DITEM_REDRAW; -} - -static int -setDocAll(dialogMenuItem *self) -{ - Dists |= DIST_DOC; - DocDists = DIST_DOC_ALL; - return DITEM_SUCCESS | DITEM_REDRAW; -} - - -#define _IS_SET(dist, set) (((dist) & (set)) == (set)) - -#define IS_DEVELOPER(dist, extra) (_IS_SET(dist, _DIST_DEVELOPER | extra) || \ - _IS_SET(dist, _DIST_DEVELOPER | extra)) - -#define IS_USER(dist, extra) (_IS_SET(dist, _DIST_USER | extra) || \ - _IS_SET(dist, _DIST_USER | extra)) - -static int -checkDistDeveloper(dialogMenuItem *self) -{ - return IS_DEVELOPER(Dists, 0) && _IS_SET(SrcDists, DIST_SRC_ALL); -} - -static int -checkDistKernDeveloper(dialogMenuItem *self) -{ - return IS_DEVELOPER(Dists, 0) && _IS_SET(SrcDists, DIST_SRC_SYS); -} - -static int -checkDistUser(dialogMenuItem *self) -{ - return IS_USER(Dists, 0); -} - -static int -checkDistMinimum(dialogMenuItem *self) -{ - return Dists == (DIST_BASE | DIST_KERNEL); -} - -static int -checkDistEverything(dialogMenuItem *self) -{ - return Dists == DIST_ALL && - _IS_SET(DocDists, DIST_DOC_ALL) && - _IS_SET(SrcDists, DIST_SRC_ALL) && - _IS_SET(KernelDists, DIST_KERNEL_ALL); -} - -static int -srcFlagCheck(dialogMenuItem *item) -{ - return SrcDists; -} - -static int -kernelFlagCheck(dialogMenuItem *item) -{ - return KernelDists; -} - -static int -docFlagCheck(dialogMenuItem *item) -{ - return DocDists; -} - -static int -checkTrue(dialogMenuItem *item) -{ - return TRUE; -} - -/* All the system menus go here. - * - * Hardcoded things like version number strings will disappear from - * these menus just as soon as I add the code for doing inline variable - * expansion. - */ - -DMenu MenuIndex = { - DMENU_NORMAL_TYPE, - "Glossary of functions", - "This menu contains an alphabetized index of the top level functions in\n" - "this program (sysinstall). Invoke an option by pressing [SPACE] or\n" - "[ENTER]. To exit, use [TAB] to move to the Cancel button.", - "Use PageUp or PageDown to move through this menu faster!", - NULL, - { { " Anon FTP", "Configure anonymous FTP logins.", dmenuVarCheck, configAnonFTP, NULL, "anon_ftp" }, - { " Commit", "Commit any pending actions (dangerous!)", NULL, installCustomCommit }, - { " Country", "Set the system's country", NULL, configCountry }, -#ifdef WITH_SYSCONS - { " Console settings", "Customize system console behavior.", NULL, dmenuSubmenu, NULL, &MenuSyscons }, -#endif - { " Configure", "The system configuration menu.", NULL, dmenuSubmenu, NULL, &MenuConfigure }, - { " Defaults, Load (FDD)","Load default settings from floppy.", NULL, dispatch_load_floppy }, - { " Defaults, Load (CD)", "Load default settings from CDROM.", NULL, dispatch_load_cdrom }, - { " Defaults, Load", "Load default settings (all devices).", NULL, dispatch_load_menu }, -#ifdef WITH_MICE - { " Device, Mouse", "The mouse configuration menu.", NULL, dmenuSubmenu, NULL, &MenuMouse }, -#endif - { " Disklabel", "The disk label editor", NULL, diskLabelEditor }, - { " Dists, All", "Root of the distribution tree.", NULL, dmenuSubmenu, NULL, &MenuDistributions }, - { " Dists, Basic", "Basic FreeBSD distribution menu.", NULL, dmenuSubmenu, NULL, &MenuSubDistributions }, - { " Dists, Developer", "Select developer's distribution.", checkDistDeveloper, distSetDeveloper }, - { " Dists, Src", "Src distribution menu.", NULL, dmenuSubmenu, NULL, &MenuSrcDistributions }, - { " Dists, Kern Developer", "Select kernel developer's distribution.", checkDistKernDeveloper, distSetKernDeveloper }, - { " Dists, User", "Select average user distribution.", checkDistUser, distSetUser }, - { " Distributions, Adding", "Installing additional distribution sets", NULL, distExtractAll }, - { " Documentation", "Installation instructions, README, etc.", NULL, dmenuSubmenu, NULL, &MenuDocumentation }, - { " Documentation Installation", "Installation of FreeBSD documentation set", NULL, distSetDocMenu }, - { " Doc, README", "The distribution README file.", NULL, dmenuDisplayFile, NULL, "README" }, - { " Doc, Errata", "The distribution errata.", NULL, dmenuDisplayFile, NULL, "ERRATA" }, - { " Doc, Hardware", "The distribution hardware guide.", NULL, dmenuDisplayFile, NULL, "HARDWARE" }, - { " Doc, Copyright", "The distribution copyright notices.", NULL, dmenuDisplayFile, NULL, "COPYRIGHT" }, - { " Doc, Release", "The distribution release notes.", NULL, dmenuDisplayFile, NULL, "RELNOTES" }, - { " Doc, HTML", "The HTML documentation menu.", NULL, docBrowser }, - { " Dump Vars", "(debugging) dump out internal variables.", NULL, dump_variables }, - { " Emergency shell", "Start an Emergency Holographic shell.", NULL, installFixitHoloShell }, -#ifdef WITH_SLICES - { " Fdisk", "The disk Partition Editor", NULL, diskPartitionEditor }, -#endif - { " Fixit", "Repair mode with CDROM or fixit floppy.", NULL, dmenuSubmenu, NULL, &MenuFixit }, - { " FTP sites", "The FTP mirror site listing.", NULL, dmenuSubmenu, NULL, &MenuMediaFTP }, - { " Gateway", "Set flag to route packets between interfaces.", dmenuVarCheck, dmenuToggleVariable, NULL, "gateway=YES" }, - { " HTML Docs", "The HTML documentation menu", NULL, docBrowser }, - { " inetd Configuration", "Configure inetd and simple internet services.", dmenuVarCheck, configInetd, NULL, "inetd_enable=YES" }, - { " Install, Standard", "A standard system installation.", NULL, installStandard }, - { " Install, Express", "An express system installation.", NULL, installExpress }, - { " Install, Custom", "The custom installation menu", NULL, dmenuSubmenu, NULL, &MenuInstallCustom }, - { " Label", "The disk Label editor", NULL, diskLabelEditor }, - { " Media", "Top level media selection menu.", NULL, dmenuSubmenu, NULL, &MenuMedia }, - { " Media, NFS", "Select NFS installation media.", NULL, mediaSetNFS }, - { " Media, Floppy", "Select floppy installation media.", NULL, mediaSetFloppy }, - { " Media, CDROM/DVD", "Select CDROM/DVD installation media.", NULL, mediaSetCDROM }, - { " Media, USB", "Select USB installation media.", NULL, mediaSetUSB }, - { " Media, DOS", "Select DOS installation media.", NULL, mediaSetDOS }, - { " Media, UFS", "Select UFS installation media.", NULL, mediaSetUFS }, - { " Media, FTP", "Select FTP installation media.", NULL, mediaSetFTP }, - { " Media, FTP Passive", "Select passive FTP installation media.", NULL, mediaSetFTPPassive }, - { " Media, HTTP", "Select FTP via HTTP proxy install media.", NULL, mediaSetHTTP }, - { " Network Interfaces", "Configure network interfaces", NULL, tcpMenuSelect }, - { " Networking Services", "The network services menu.", NULL, dmenuSubmenu, NULL, &MenuNetworking }, - { " NFS, client", "Set NFS client flag.", dmenuVarCheck, dmenuToggleVariable, NULL, "nfs_client_enable=YES" }, - { " NFS, server", "Set NFS server flag.", dmenuVarCheck, configNFSServer, NULL, "nfs_server_enable=YES" }, - { " NTP Menu", "The NTP configuration menu.", NULL, dmenuSubmenu, NULL, &MenuNTP }, - { " Options", "The options editor.", NULL, optionsEditor }, - { " Packages", "The packages collection", NULL, configPackages }, -#ifdef WITH_SLICES - { " Partition", "The disk slice (PC-style partition) editor", NULL, diskPartitionEditor }, -#endif - { " PCNFSD", "Run authentication server for PC-NFS.", dmenuVarCheck, configPCNFSD, NULL, "pcnfsd" }, - { " Root Password", "Set the system manager's password.", NULL, dmenuSystemCommand, NULL, "passwd root" }, - { " Router", "Select routing daemon (default: routed)", NULL, configRouter, NULL, "router_enable" }, - { " Security", "Configure system security options", NULL, dmenuSubmenu, NULL, &MenuSecurity }, -#ifdef WITH_SYSCONS - { " Syscons", "The system console configuration menu.", NULL, dmenuSubmenu, NULL, &MenuSyscons }, -#ifndef PC98 - { " Syscons, Font", "The console screen font.", NULL, dmenuSubmenu, NULL, &MenuSysconsFont }, -#endif - { " Syscons, Keymap", "The console keymap configuration menu.", NULL, keymapMenuSelect }, - { " Syscons, Keyrate", "The console key rate configuration menu.", NULL, dmenuSubmenu, NULL, &MenuSysconsKeyrate }, - { " Syscons, Saver", "The console screen saver configuration menu.", NULL, dmenuSubmenu, NULL, &MenuSysconsSaver }, -#ifndef PC98 - { " Syscons, Screenmap", "The console screenmap configuration menu.", NULL, dmenuSubmenu, NULL, &MenuSysconsScrnmap }, - { " Syscons, Ttys", "The console terminal type menu.", NULL, dmenuSubmenu, NULL, &MenuSysconsTtys }, -#endif -#endif /* WITH_SYSCONS */ - { " Time Zone", "Set the system's time zone.", NULL, dmenuSystemCommand, NULL, "tzsetup" }, - { " TTYs", "Configure system ttys.", NULL, configEtcTtys, NULL, "ttys" }, - { " Upgrade", "Upgrade an existing system.", NULL, installUpgrade }, - { " Usage", "Quick start - How to use this menu system.", NULL, dmenuDisplayFile, NULL, "usage" }, - { " User Management", "Add user and group information.", NULL, dmenuSubmenu, NULL, &MenuUsermgmt }, - { NULL } }, -}; - -/* The country menu */ -#include "countries.h" - -/* The initial installation menu */ -DMenu MenuInitial = { - DMENU_NORMAL_TYPE, - "sysinstall Main Menu", /* title */ - "Welcome to the FreeBSD installation and configuration tool. Please\n" /* prompt */ - "select one of the options below by using the arrow keys or typing the\n" - "first character of the option name you're interested in. Invoke an\n" - "option with [SPACE] or [ENTER]. To exit, use [TAB] to move to Exit.", - NULL, - NULL, - { { " Select " }, - { "X Exit Install", NULL, NULL, dmenuExit }, - { " Usage", "Quick start - How to use this menu system", NULL, dmenuDisplayFile, NULL, "usage" }, - { "Standard", "Begin a standard installation (recommended)", NULL, installStandard }, - { "Express", "Begin a quick installation (for experts)", NULL, installExpress }, - { " Custom", "Begin a custom installation (for experts)", NULL, dmenuSubmenu, NULL, &MenuInstallCustom }, - { "Configure", "Do post-install configuration of FreeBSD", NULL, dmenuSubmenu, NULL, &MenuConfigure }, - { "Doc", "Installation instructions, README, etc.", NULL, dmenuSubmenu, NULL, &MenuDocumentation }, -#ifdef WITH_SYSCONS - { "Keymap", "Select keyboard type", NULL, keymapMenuSelect }, -#endif - { "Options", "View/Set various installation options", NULL, optionsEditor }, - { "Fixit", "Repair mode with CDROM/DVD/floppy or start shell", NULL, dmenuSubmenu, NULL, &MenuFixit }, - { "Upgrade", "Upgrade an existing system", NULL, installUpgrade }, - { "Load Config..","Load default install configuration", NULL, dispatch_load_menu }, - { "Index", "Glossary of functions", NULL, dmenuSubmenu, NULL, &MenuIndex }, - { NULL } }, -}; - -/* The main documentation menu */ -DMenu MenuDocumentation = { - DMENU_NORMAL_TYPE, - "FreeBSD Documentation Menu", - "If you are at all unsure about the configuration of your hardware\n" - "or are looking to build a system specifically for FreeBSD, read the\n" - "Hardware guide! New users should also read the Install document for\n" - "a step-by-step tutorial on installing FreeBSD. For general information,\n" - "consult the README file.", - "Confused? Press F1 for help.", - "usage", - { { "X Exit", "Exit this menu (returning to previous)", NULL, dmenuExit }, - { "1 README", "A general description of FreeBSD. Read this!", NULL, dmenuDisplayFile, NULL, "README" }, - { "2 Errata", "Late-breaking, post-release news.", NULL, dmenuDisplayFile, NULL, "ERRATA" }, - { "3 Hardware", "The FreeBSD survival guide for PC hardware.", NULL, dmenuDisplayFile, NULL, "HARDWARE" }, - { "4 Copyright", "The FreeBSD Copyright notices.", NULL, dmenuDisplayFile, NULL, "COPYRIGHT" }, - { "5 Release" ,"The release notes for this version of FreeBSD.", NULL, dmenuDisplayFile, NULL, "RELNOTES" }, - { "6 Shortcuts", "Creating shortcuts to sysinstall.", NULL, dmenuDisplayFile, NULL, "shortcuts" }, - { "7 HTML Docs", "Go to the HTML documentation menu (post-install).", NULL, docBrowser }, - { NULL } }, -}; - -/* The FreeBSD documentation installation menu */ -DMenu MenuDocInstall = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "FreeBSD Documentation Installation Menu", - "This menu will allow you to install the whole documentation set\n" - "from the FreeBSD Documentation Project: Handbook, FAQ and articles.\n\n" - "Please select the language versions you wish to install. At minimum,\n" - "you should install the English version, this is the original version\n" - "of the documentation.", - NULL, - NULL, - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { "All", "Select all below", - NULL, setDocAll, NULL, NULL, ' ', ' ', ' ' }, - { " bn", "Bengali Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_BN }, - { " da", "Danish Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_DA }, - { " de", "German Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_DE }, - { " el", "Greek Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_EL }, - { " en", "English Documentation (recommended)", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_EN }, - { " es", "Spanish Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_ES }, - { " fr", "French Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_FR }, - { " hu", "Hungarian Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_HU }, - { " it", "Italian Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_IT }, - { " ja", "Japanese Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_JA }, - { " mn", "Mongolian Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_MN }, - { " nl", "Dutch Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_NL }, - { " pl", "Polish Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_PL }, - { " pt", "Portuguese Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_PT }, - { " ru", "Russian Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_RU }, - { " sr", "Serbian Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_SR }, - { " tr", "Turkish Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_TR }, - { " zh_cn", "Simplified Chinese Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_ZH_CN }, - { " zh_tw", "Traditional Chinese Documentation", - dmenuFlagCheck, dmenuSetFlag, NULL, &DocDists, '[', 'X', ']', DIST_DOC_ZH_TW }, - { NULL } }, -}; - -#ifdef WITH_MICE -DMenu MenuMouseType = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, -#ifdef PC98 - "Select a protocol type for your mouse", - "If your mouse is attached to the bus mouse port, you should always choose\n" - "\"Auto\", regardless of the model and the brand of the mouse. All other\n" - "protocol types are for serial mice and should not be used with the bus\n" - "mouse. If you have a serial mouse and are not sure about its protocol,\n" - "you should also try \"Auto\". It may not work for the serial mouse if the\n" - "mouse does not support the PnP standard. But, it won't hurt. Many\n" - "2-button serial mice are compatible with \"Microsoft\" or \"MouseMan\".\n" - "3-button serial mice may be compatible with \"MouseSystems\" or \"MouseMan\".\n" - "If the serial mouse has a wheel, it may be compatible with \"IntelliMouse\".", - NULL, - NULL, - { { "1 Auto", "Bus mouse or PnP serial mouse", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=auto" }, -#else - "Select a protocol type for your mouse", - "If your mouse is attached to the PS/2 mouse port or the bus mouse port,\n" - "you should always choose \"Auto\", regardless of the model and the brand\n" - "of the mouse. All other protocol types are for serial mice and should\n" - "not be used with the PS/2 port mouse or the bus mouse. If you have\n" - "a serial mouse and are not sure about its protocol, you should also try\n" - "\"Auto\". It may not work for the serial mouse if the mouse does not\n" - "support the PnP standard. But, it won't hurt. Many 2-button serial mice\n" - "are compatible with \"Microsoft\" or \"MouseMan\". 3-button serial mice\n" - "may be compatible with \"MouseSystems\" or \"MouseMan\". If the serial\n" - "mouse has a wheel, it may be compatible with \"IntelliMouse\".", - NULL, - NULL, - { { "1 Auto", "Bus mouse, PS/2 style mouse or PnP serial mouse", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=auto" }, -#endif /* PC98 */ - { "2 GlidePoint", "ALPS GlidePoint pad (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=glidepoint" }, - { "3 Hitachi","Hitachi tablet (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=mmhittab" }, - { "4 IntelliMouse", "Microsoft IntelliMouse (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=intellimouse" }, - { "5 Logitech", "Logitech protocol (old models) (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=logitech" }, - { "6 Microsoft", "Microsoft protocol (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=microsoft" }, - { "7 MM Series","MM Series protocol (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=mmseries" }, - { "8 MouseMan", "Logitech MouseMan/TrackMan models (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=mouseman" }, - { "9 MouseSystems", "MouseSystems protocol (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=mousesystems" }, - { "A ThinkingMouse","Kensington ThinkingMouse (serial)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_TYPE "=thinkingmouse" }, - { NULL } }, -}; - -#ifdef PC98 -DMenu MenuMousePort = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Select your mouse port from the following menu", - "The built-in pointing device of laptop/notebook computers is usually\n" - "a BusMouse style device.", - NULL, - NULL, - { - { "1 BusMouse", "PC-98x1 bus mouse (/dev/mse0)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/mse0" }, - { "2 COM1", "Serial mouse on COM1 (/dev/cuau0)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau0" }, - { "3 COM2", "Serial mouse on COM2 (/dev/cuau1)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau1" }, - { NULL } }, -}; -#else -DMenu MenuMousePort = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Select your mouse port from the following menu", - "The built-in pointing device of laptop/notebook computers is usually\n" - "a PS/2 style device.", - NULL, - NULL, - { { "1 PS/2", "PS/2 style mouse (/dev/psm0)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/psm0" }, - { "2 COM1", "Serial mouse on COM1 (/dev/cuau0)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau0" }, - { "3 COM2", "Serial mouse on COM2 (/dev/cuau1)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau1" }, - { "4 COM3", "Serial mouse on COM3 (/dev/cuau2)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau2" }, - { "5 COM4", "Serial mouse on COM4 (/dev/cuau3)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/cuau3" }, - { "6 BusMouse", "Logitech, ATI or MS bus mouse (/dev/mse0)", - dmenuVarCheck, dmenuSetVariable, NULL, VAR_MOUSED_PORT "=/dev/mse0" }, - { NULL } }, -}; -#endif /* PC98 */ - -DMenu MenuMouse = { - DMENU_NORMAL_TYPE, - "Please configure your mouse", - "You can cut and paste text in the text console by running the mouse\n" - "daemon. Specify a port and a protocol type of your mouse and enable\n" - "the mouse daemon. If you don't want this feature, select 6 to disable\n" - "the daemon.\n" - "Once you've enabled the mouse daemon, you can specify \"/dev/sysmouse\"\n" - "as your mouse device and \"SysMouse\" or \"MouseSystems\" as mouse\n" - "protocol when running the X configuration utility (see Configuration\n" - "menu).", - NULL, - NULL, - { { "X Exit", "Exit this menu (returning to previous)", NULL, dmenuExit }, - { "2 Enable", "Test and run the mouse daemon", NULL, mousedTest, NULL, NULL }, - { "3 Type", "Select mouse protocol type", NULL, dmenuSubmenu, NULL, &MenuMouseType }, - { "4 Port", "Select mouse port", NULL, dmenuSubmenu, NULL, &MenuMousePort }, - { "5 Flags", "Set additional flags", dmenuVarCheck, setMouseFlags, - NULL, VAR_MOUSED_FLAGS "=" }, - { "6 Disable", "Disable the mouse daemon", NULL, mousedDisable, NULL, NULL }, - { NULL } }, -}; -#endif /* WITH_MICE */ - -DMenu MenuMediaCDROM = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Choose a CD/DVD type", - "FreeBSD can be installed directly from a CD/DVD containing a valid\n" - "FreeBSD distribution. If you are seeing this menu it is because\n" - "more than one CD/DVD drive was found on your system. Please select one\n" - "of the following CD/DVD drives as your installation drive.", - NULL, - NULL, - { { NULL } }, -}; - -DMenu MenuMediaFloppy = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Choose a Floppy drive", - "You have more than one floppy drive. Please choose which drive\n" - "you would like to use.", - NULL, - NULL, - { { NULL } }, -}; - -DMenu MenuMediaUSB = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Choose a USB drive", - "You have more than one USB drive. Please choose which drive\n" - "you would like to use.", - NULL, - NULL, - { { NULL } }, -}; - -DMenu MenuMediaDOS = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Choose a DOS partition", - "FreeBSD can be installed directly from a DOS partition\n" - "assuming, of course, that you have copied the relevant\n" - "distributions into your DOS partition before starting this\n" - "installation. If this is not the case then you should reboot\n" - "DOS at this time and copy the distributions you wish to install\n" - "into a \"FREEBSD\" subdirectory on one of your DOS partitions.\n" - "Otherwise, please select the DOS partition containing the FreeBSD\n" - "distribution files.", - NULL, - NULL, - { { NULL } }, -}; - -DMenu MenuMediaFTP = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Please select a FreeBSD FTP distribution site", - "Please select the site closest to you or \"other\" if you'd like to\n" - "specify a different choice. Also note that not every site listed here\n" - "carries more than the base distribution kits. Only Primary sites are\n" - "guaranteed to carry the full range of possible distributions.", - "Select a site that's close!", - NULL, - { { "Main Site", "ftp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.freebsd.org" }, - { "URL", "Specify some other ftp site by URL", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=other" }, - { "Snapshots Server Japan", "snapshots.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://snapshots.jp.freebsd.org" }, - { "Snapshots Server Sweden", "snapshots.se.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://snapshots.se.freebsd.org" }, - - { "IPv6 Main Site", "ftp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.freebsd.org" }, - { " IPv6 Ireland", "ftp3.ie.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.ie.freebsd.org" }, - { " IPv6 Israel", "ftp.il.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.il.freebsd.org" }, - { " IPv6 Japan", "ftp2.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.jp.freebsd.org" }, - { " IPv6 USA", "ftp4.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.us.freebsd.org" }, - { " IPv6 Turkey", "ftp2.tr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.tr.freebsd.org" }, - - { "Primary", "ftp1.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp1.freebsd.org" }, - { " Primary #2", "ftp2.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.freebsd.org" }, - { " Primary #3", "ftp3.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.freebsd.org" }, - { " Primary #4", "ftp4.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.freebsd.org" }, - { " Primary #5", "ftp5.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.freebsd.org" }, - { " Primary #6", "ftp6.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.freebsd.org" }, - { " Primary #7", "ftp7.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp7.freebsd.org" }, - { " Primary #8", "ftp8.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp8.freebsd.org" }, - { " Primary #9", "ftp9.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp9.freebsd.org" }, - { " Primary #10", "ftp10.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp10.freebsd.org" }, - { " Primary #11", "ftp11.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp11.freebsd.org" }, - { " Primary #12", "ftp12.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp12.freebsd.org" }, - { " Primary #13", "ftp13.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp13.freebsd.org" }, - { " Primary #14", "ftp14.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp14.freebsd.org" }, - - { "Argentina", "ftp.ar.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.ar.freebsd.org" }, - - { "Australia", "ftp.au.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.au.freebsd.org" }, - { " Australia #2","ftp2.au.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.au.freebsd.org" }, - { " Australia #3","ftp3.au.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.au.freebsd.org" }, - - { "Austria","ftp.at.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.at.freebsd.org" }, - { " Austria #2","ftp2.at.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.at.freebsd.org" }, - - { "Brazil", "ftp.br.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.br.freebsd.org" }, - { " Brazil #2", "ftp2.br.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.br.freebsd.org" }, - { " Brazil #3", "ftp3.br.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.br.freebsd.org" }, - { " Brazil #4", "ftp4.br.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.br.freebsd.org" }, - { " Brazil #5", "ftp5.br.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.br.freebsd.org" }, - { " Brazil #6", "ftp6.br.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.br.freebsd.org" }, - { " Brazil #7", "ftp7.br.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp7.br.freebsd.org" }, - - { "Canada", "ftp.ca.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.ca.freebsd.org" }, - - { "China", "ftp.cn.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.cn.freebsd.org" }, - { " China #2", "ftp2.cn.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.cn.freebsd.org" }, - - { "Croatia", "ftp.hr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.hr.freebsd.org" }, - - { "Czech Republic", "ftp.cz.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.cz.freebsd.org" }, - - { "Denmark", "ftp.dk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.dk.freebsd.org" }, - { " Denmark #2", "ftp2.dk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.dk.freebsd.org" }, - - { "Estonia", "ftp.ee.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.ee.freebsd.org" }, - - { "Finland", "ftp.fi.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.fi.freebsd.org" }, - - { "France", "ftp.fr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.fr.freebsd.org" }, - { " France #2", "ftp2.fr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.fr.freebsd.org" }, - { " France #3", "ftp3.fr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.fr.freebsd.org" }, - { " France #5", "ftp5.fr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.fr.freebsd.org" }, - { " France #6", "ftp6.fr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.fr.freebsd.org" }, - { " France #8", "ftp8.fr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp8.fr.freebsd.org" }, - - { "Germany", "ftp.de.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.de.freebsd.org" }, - { " Germany #2", "ftp2.de.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.de.freebsd.org" }, - { " Germany #3", "ftp3.de.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.de.freebsd.org" }, - { " Germany #4", "ftp4.de.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.de.freebsd.org" }, - { " Germany #5", "ftp5.de.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.de.freebsd.org" }, - { " Germany #6", "ftp6.de.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.de.freebsd.org" }, - { " Germany #7", "ftp7.de.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp7.de.freebsd.org" }, - { " Germany #8", "ftp8.de.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp8.de.freebsd.org" }, - - { "Greece", "ftp.gr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.gr.freebsd.org" }, - { " Greece #2", "ftp2.gr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.gr.freebsd.org" }, - - { "Hungary", "ftp.hu.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.hu.freebsd.org" }, - - { "Iceland", "ftp.is.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.is.freebsd.org" }, - - { "Ireland", "ftp.ie.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.ie.freebsd.org" }, - { " Ireland #2", "ftp2.ie.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.ie.freebsd.org" }, - { " Ireland #3", "ftp3.ie.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.ie.freebsd.org" }, - - { "Israel", "ftp.il.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.il.freebsd.org" }, - - { "Italy", "ftp.it.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.it.freebsd.org" }, - - { "Japan", "ftp.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.jp.freebsd.org" }, - { " Japan #2", "ftp2.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.jp.freebsd.org" }, - { " Japan #3", "ftp3.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.jp.freebsd.org" }, - { " Japan #4", "ftp4.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.jp.freebsd.org" }, - { " Japan #5", "ftp5.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.jp.freebsd.org" }, - { " Japan #6", "ftp6.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.jp.freebsd.org" }, - { " Japan #7", "ftp7.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp7.jp.freebsd.org" }, - { " Japan #8", "ftp8.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp8.jp.freebsd.org" }, - { " Japan #9", "ftp9.jp.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp9.jp.freebsd.org" }, - - { "Korea", "ftp.kr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.kr.freebsd.org" }, - { " Korea #2", "ftp2.kr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.kr.freebsd.org" }, - - { "Lithuania", "ftp.lt.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.lt.freebsd.org" }, - - { "Netherlands", "ftp.nl.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.nl.freebsd.org" }, - { " Netherlands #2", "ftp2.nl.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.nl.freebsd.org" }, - - { "Norway", "ftp.no.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.no.freebsd.org" }, - { " Norway #3", "ftp3.no.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.no.freebsd.org" }, - - { "Poland", "ftp.pl.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.pl.freebsd.org" }, - { " Poland #2", "ftp2.pl.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.pl.freebsd.org" }, - { " Poland #5", "ftp5.pl.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.pl.freebsd.org" }, - - { "Portugal", "ftp.pt.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.pt.freebsd.org" }, - { " Portugal #2", "ftp2.pt.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.pt.freebsd.org" }, - { " Portugal #4", "ftp4.pt.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.pt.freebsd.org" }, - - { "Romania", "ftp.ro.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.ro.freebsd.org" }, - - { "Russia", "ftp.ru.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.ru.freebsd.org" }, - { " Russia #2", "ftp2.ru.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.ru.freebsd.org" }, - { " Russia #3", "ftp3.ru.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.ru.freebsd.org" }, - { " Russia #4", "ftp4.ru.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.ru.freebsd.org" }, - - { "Singapore", "ftp.sg.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.sg.freebsd.org" }, - - { "Slovak Republic", "ftp.sk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.sk.freebsd.org" }, - - { "Slovenia", "ftp.si.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.si.freebsd.org" }, - { " Slovenia #2", "ftp2.si.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.si.freebsd.org" }, - - { "South Africa", "ftp.za.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.za.freebsd.org" }, - { " South Africa #2", "ftp2.za.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.za.freebsd.org" }, - { " South Africa #3", "ftp3.za.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.za.freebsd.org" }, - { " South Africa #4", "ftp4.za.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.za.freebsd.org" }, - - { "Spain", "ftp.es.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.es.freebsd.org" }, - { " Spain #2", "ftp2.es.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.es.freebsd.org" }, - { " Spain #3", "ftp3.es.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.es.freebsd.org" }, - - { "Sweden", "ftp.se.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.se.freebsd.org" }, - { " Sweden #2", "ftp2.se.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.se.freebsd.org" }, - { " Sweden #3", "ftp3.se.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.se.freebsd.org" }, - { " Sweden #4", "ftp4.se.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.se.freebsd.org" }, - { " Sweden #5", "ftp5.se.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.se.freebsd.org" }, - - { "Switzerland", "ftp.ch.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.ch.freebsd.org" }, - { " Switzerland #2", "ftp2.ch.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.ch.freebsd.org" }, - - { "Taiwan", "ftp.tw.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.tw.freebsd.org" }, - { " Taiwan #2", "ftp2.tw.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.tw.freebsd.org" }, - { " Taiwan #3", "ftp3.tw.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.tw.freebsd.org" }, - { " Taiwan #4", "ftp4.tw.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.tw.freebsd.org" }, - { " Taiwan #6", "ftp6.tw.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.tw.freebsd.org" }, - { " Taiwan #11", "ftp11.tw.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp11.tw.freebsd.org" }, - - { "Turkey", "ftp.tr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.tr.freebsd.org" }, - { " Turkey #2", "ftp2.tr.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.tr.freebsd.org" }, - - { "UK", "ftp.uk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.uk.freebsd.org" }, - { " UK #2", "ftp2.uk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.uk.freebsd.org" }, - { " UK #3", "ftp3.uk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.uk.freebsd.org" }, - { " UK #4", "ftp4.uk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.uk.freebsd.org" }, - { " UK #5", "ftp5.uk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.uk.freebsd.org" }, - { " UK #6", "ftp6.uk.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.uk.freebsd.org" }, - - { "Ukraine", "ftp.ua.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp.ua.freebsd.org" }, - { " Ukraine #2", "ftp2.ua.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.ua.freebsd.org" }, - { " Ukraine #5", "ftp5.ua.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.ua.freebsd.org" }, - { " Ukraine #6", "ftp6.ua.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.ua.freebsd.org" }, - { " Ukraine #7", "ftp7.ua.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp7.ua.freebsd.org" }, - { " Ukraine #8", "ftp8.ua.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp8.ua.freebsd.org" }, - - { "USA #1", "ftp1.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp1.us.freebsd.org" }, - { " USA #2", "ftp2.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp2.us.freebsd.org" }, - { " USA #3", "ftp3.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp3.us.freebsd.org" }, - { " USA #4", "ftp4.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp4.us.freebsd.org" }, - { " USA #5", "ftp5.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp5.us.freebsd.org" }, - { " USA #6", "ftp6.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp6.us.freebsd.org" }, - { " USA #7", "ftp7.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp7.us.freebsd.org" }, - { " USA #8", "ftp8.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp8.us.freebsd.org" }, - { " USA #9", "ftp9.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp9.us.freebsd.org" }, - { " USA #10", "ftp10.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp10.us.freebsd.org" }, - { " USA #11", "ftp11.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp11.us.freebsd.org" }, - { " USA #12", "ftp12.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp12.us.freebsd.org" }, - { " USA #13", "ftp13.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp13.us.freebsd.org" }, - { " USA #14", "ftp14.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp14.us.freebsd.org" }, - { " USA #15", "ftp15.us.freebsd.org", NULL, dmenuSetVariable, NULL, - VAR_FTP_PATH "=ftp://ftp15.us.freebsd.org" }, - - { NULL } } -}; - -DMenu MenuNetworkDevice = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Network interface information required", - "Please select the ethernet or PLIP device to configure.\n\n" - "", - "Press F1 to read network configuration manual", - "network_device", - { { NULL } }, -}; - -/* Prototype KLD load menu */ -DMenu MenuKLD = { - DMENU_NORMAL_TYPE, - "KLD Menu", - "Load a KLD from a floppy\n", - NULL, - NULL, - { { NULL } }, -}; - -/* Prototype config file load menu */ -DMenu MenuConfig = { - DMENU_NORMAL_TYPE, - "Config Menu", - "Please select the device to load your configuration file from.\n" - "Note that a USB key will show up as daNs1.", - NULL, - NULL, - { { NULL } }, -}; - -/* The media selection menu */ -DMenu MenuMedia = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Choose Installation Media", - "FreeBSD can be installed from a variety of different installation\n" - "media, ranging from floppies to an Internet FTP server. If you're\n" - "installing FreeBSD from a supported CD/DVD drive then this is generally\n" - "the best media to use if you have no overriding reason for using other\n" - "media.", - "Press F1 for more information on the various media types", - "media", - { { "1 CD/DVD", "Install from a FreeBSD CD/DVD", NULL, mediaSetCDROM }, - { "2 FTP", "Install from an FTP server", NULL, mediaSetFTPActive }, - { "3 FTP Passive", "Install from an FTP server through a firewall", NULL, mediaSetFTPPassive }, - { "4 HTTP", "Install from an FTP server through a http proxy", NULL, mediaSetHTTP }, - { "5 DOS", "Install from a DOS partition", NULL, mediaSetDOS }, - { "6 NFS", "Install over NFS", NULL, mediaSetNFS }, - { "7 File System", "Install from an existing filesystem", NULL, mediaSetUFS }, - { "8 Floppy", "Install from a floppy disk set", NULL, mediaSetFloppy }, - { "9 USB", "Install from a USB drive", NULL, mediaSetUSB }, - { "X Options", "Go to the Options screen", NULL, optionsEditor }, - { NULL } }, -}; - -/* The distributions menu */ -DMenu MenuDistributions = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "Choose Distributions", - "As a convenience, we provide several \"canned\" distribution sets.\n" - "These select what we consider to be the most reasonable defaults for the\n" - "type of system in question. If you would prefer to pick and choose the\n" - "list of distributions yourself, simply select \"Custom\". You can also\n" - "pick a canned distribution set and then fine-tune it with the Custom item.\n\n" - "Choose an item by pressing [SPACE] or [ENTER]. When finished, choose the\n" - "Exit item or move to the OK button with [TAB].", - "Press F1 for more information on these options.", - "distributions", - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { "All", "All system sources and binaries", - checkDistEverything, distSetEverything, NULL, NULL, ' ', ' ', ' ' }, - { "Reset", "Reset selected distribution list to nothing", - NULL, distReset, NULL, NULL, ' ', ' ', ' ' }, - { "4 Developer", "Full sources, binaries and doc but no games", - checkDistDeveloper, distSetDeveloper }, - { "5 Kern-Developer", "Full binaries and doc, kernel sources only", - checkDistKernDeveloper, distSetKernDeveloper }, - { "6 User", "Average user - binaries and doc only", - checkDistUser, distSetUser }, - { "7 Minimal", "The smallest configuration possible", - checkDistMinimum, distSetMinimum }, - { "8 Custom", "Specify your own distribution set", - NULL, dmenuSubmenu, NULL, &MenuSubDistributions, '>', '>', '>' }, - { NULL } }, -}; - -DMenu MenuSubDistributions = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "Select the distributions you wish to install.", - "Please check off the distributions you wish to install. At the\n" - "very minimum, this should be \"base\".", - NULL, - NULL, - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { "All", "All system sources and binaries", - NULL, distSetEverything, NULL, NULL, ' ', ' ', ' ' }, - { "Reset", "Reset all of the below", - NULL, distReset, NULL, NULL, ' ', ' ', ' ' }, - { " base", "Binary base distribution (required)", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_BASE }, - { " kernels", "Binary kernel distributions (required)", - kernelFlagCheck,distSetKernel }, - { " dict", "Spelling checker dictionary files", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_DICT }, - { " doc", "FreeBSD Documentation set", - docFlagCheck, distSetDoc }, - { " docuser", "Miscellaneous userland docs", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_DOCUSERLAND }, - { " games", "Games (non-commercial)", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_GAMES }, - { " info", "GNU info files", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_INFO }, -#if defined(__amd64__) || defined(__powerpc64__) - { " lib32", "32-bit runtime compatibility libraries", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_LIB32 }, -#endif - { " man", "System manual pages - recommended", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_MANPAGES }, - { " catman", "Preformatted system manual pages", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_CATPAGES }, - { " proflibs", "Profiled versions of the libraries", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_PROFLIBS }, - { " src", "Sources for everything", - srcFlagCheck, distSetSrc }, - { " ports", "The FreeBSD Ports collection", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_PORTS }, - { " local", "Local additions collection", - dmenuFlagCheck, dmenuSetFlag, NULL, &Dists, '[', 'X', ']', DIST_LOCAL}, - { NULL } }, -}; - -DMenu MenuKernelDistributions = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "Select the operating system kernels you wish to install.", - "Please check off those kernels you wish to install.\n", - NULL, - NULL, - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { "All", "Select all of the below", - NULL, setKernel, NULL, NULL, ' ', ' ', ' ' }, - { "Reset", "Reset all of the below", - NULL, clearKernel, NULL, NULL, ' ', ' ', ' ' }, - { " GENERIC", "GENERIC kernel configuration", - dmenuFlagCheck, dmenuSetFlag, NULL, &KernelDists, '[', 'X', ']', DIST_KERNEL_GENERIC }, - { NULL } }, -}; - -DMenu MenuSrcDistributions = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "Select the sub-components of src you wish to install.", - "Please check off those portions of the FreeBSD source tree\n" - "you wish to install.", - NULL, - NULL, - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { "All", "Select all of the below", - NULL, setSrc, NULL, NULL, ' ', ' ', ' ' }, - { "Reset", "Reset all of the below", - NULL, clearSrc, NULL, NULL, ' ', ' ', ' ' }, - { " base", "top-level files in /usr/src", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_BASE }, - { " cddl", "/usr/src/cddl (software from Sun)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_CDDL }, - { " contrib", "/usr/src/contrib (contributed software)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_CONTRIB }, - { " crypto", "/usr/src/crypto (contrib encryption sources)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SCRYPTO }, - { " gnu", "/usr/src/gnu (software from the GNU Project)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_GNU }, - { " etc", "/usr/src/etc (miscellaneous system files)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_ETC }, - { " games", "/usr/src/games (the obvious!)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_GAMES }, - { " include", "/usr/src/include (header files)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_INCLUDE }, - { " krb5", "/usr/src/kerberos5 (sources for Kerberos5)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SKERBEROS5 }, - { " lib", "/usr/src/lib (system libraries)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_LIB }, - { " libexec", "/usr/src/libexec (system programs)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_LIBEXEC }, - { " release", "/usr/src/release (release-generation tools)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_RELEASE }, - { " rescue", "/usr/src/rescue (static rescue tools)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_RESCUE }, - { " bin", "/usr/src/bin (system binaries)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_BIN }, - { " sbin", "/usr/src/sbin (system binaries)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SBIN }, - { " secure", "/usr/src/secure (BSD encryption sources)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SSECURE }, - { " share", "/usr/src/share (documents and shared files)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SHARE }, - { " sys", "/usr/src/sys (FreeBSD kernel)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_SYS }, - { " tools", "/usr/src/tools (miscellaneous tools)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_TOOLS }, - { " ubin", "/usr/src/usr.bin (user binaries)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_UBIN }, - { " usbin", "/usr/src/usr.sbin (aux system binaries)", - dmenuFlagCheck, dmenuSetFlag, NULL, &SrcDists, '[', 'X', ']', DIST_SRC_USBIN }, - { NULL } }, -}; - -DMenu MenuDiskDevices = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "Select Drive(s)", - "Please select the drive, or drives, on which you wish to perform\n" - "this operation. If you are attempting to install a boot partition\n" - "on a drive other than the first one or have multiple operating\n" - "systems on your machine, you will have the option to install a boot\n" - "manager later. To select a drive, use the arrow keys to move to it\n" - "and press [SPACE] or [ENTER]. To de-select it, press it again.\n\n" - "Use [TAB] to get to the buttons and leave this menu.", - "Press F1 for important information regarding disk geometry!", - "drives", - { { NULL } }, -}; - -DMenu MenuHTMLDoc = { - DMENU_NORMAL_TYPE, - "Select HTML Documentation pointer", - "Please select the body of documentation you're interested in, the main\n" - "ones right now being the FAQ and the Handbook. You can also choose \"other\"\n" - "to enter an arbitrary URL for browsing.", - "Press F1 for more help on what you see here.", - "html", - { { "X Exit", "Exit this menu (returning to previous)", NULL, dmenuExit }, - { "2 Handbook", "The FreeBSD Handbook.", NULL, docShowDocument }, - { "3 FAQ", "The Frequently Asked Questions guide.", NULL, docShowDocument }, - { "4 Home", "The Home Pages for the FreeBSD Project (requires net)", NULL, docShowDocument }, - { "5 Other", "Enter a URL.", NULL, docShowDocument }, - { NULL } }, -}; - -/* The main installation menu */ -DMenu MenuInstallCustom = { - DMENU_NORMAL_TYPE, - "Choose Custom Installation Options", - "This is the custom installation menu. You may use this menu to specify\n" - "details on the type of distribution you wish to have, where you wish\n" - "to install it from and how you wish to allocate disk storage to FreeBSD.", - NULL, - NULL, - { { "X Exit", "Exit this menu (returning to previous)", NULL, dmenuExit }, - { "2 Options", "View/Set various installation options", NULL, optionsEditor }, -#ifndef WITH_SLICES - { "3 Label", "Label disk partitions", NULL, diskLabelEditor }, - { "4 Distributions", "Select distribution(s) to extract", NULL, dmenuSubmenu, NULL, &MenuDistributions }, - { "5 Media", "Choose the installation media type", NULL, dmenuSubmenu, NULL, &MenuMedia }, - { "6 Commit", "Perform any pending Partition/Label/Extract actions", NULL, installCustomCommit }, -#else - { "3 Partition", "Allocate disk space for FreeBSD", NULL, diskPartitionEditor }, - { "4 Label", "Label allocated disk partitions", NULL, diskLabelEditor }, - { "5 Distributions", "Select distribution(s) to extract", NULL, dmenuSubmenu, NULL, &MenuDistributions }, - { "6 Media", "Choose the installation media type", NULL, dmenuSubmenu, NULL, &MenuMedia }, - { "7 Commit", "Perform any pending Partition/Label/Extract actions", NULL, installCustomCommit }, -#endif - { NULL } }, -}; - -#if defined(__i386__) || defined(__amd64__) -#ifdef PC98 -/* IPL type menu */ -DMenu MenuIPLType = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "overwrite me", /* will be disk specific label */ - "If you want a FreeBSD Boot Manager, select \"BootMgr\". If you would\n" - "prefer your Boot Manager to remain untouched then select \"None\".\n\n", - "Press F1 to read about drive setup", - "drives", - { { "BootMgr", "Install the FreeBSD Boot Manager", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr }, - { "None", "Leave the IPL untouched", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 1 }, - { NULL } }, -}; -#else -/* MBR type menu */ -DMenu MenuMBRType = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "overwrite me", /* will be disk specific label */ - "FreeBSD comes with a boot manager that allows you to easily\n" - "select between FreeBSD and any other operating systems on your machine\n" - "at boot time. If you have more than one drive and want to boot\n" - "from the second one, the boot manager will also make it possible\n" - "to do so (limitations in the PC BIOS usually prevent this otherwise).\n" - "If you have other operating systems installed and would like a choice when\n" - "booting, choose \"BootMgr\". If you would prefer to keep your existing\n" - "boot manager, select \"None\".\n\n", - "", - "drives", - { { "Standard", "Install a standard MBR (non-interactive boot manager)", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 1 }, - { "BootMgr", "Install the FreeBSD Boot Manager", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 0 }, - { "None", "Do not install a boot manager", - dmenuRadioCheck, dmenuSetValue, NULL, &BootMgr, '(', '*', ')', 2 }, - { NULL } }, -}; -#endif /* PC98 */ -#endif /* __i386__ */ - -/* Final configuration menu */ -DMenu MenuConfigure = { - DMENU_NORMAL_TYPE, - "FreeBSD Configuration Menu", /* title */ - "If you've already installed FreeBSD, you may use this menu to customize\n" - "it somewhat to suit your particular configuration. Most importantly,\n" - "you can use the Packages utility to load extra \"3rd party\"\n" - "software not provided in the base distributions.", - "Press F1 for more information on these options", - "configure", - { { "X Exit", "Exit this menu (returning to previous)", - NULL, dmenuExit }, - { " Distributions", "Install additional distribution sets", - NULL, distExtractAll }, - { " Documentation installation", "Install FreeBSD Documentation set", - NULL, distSetDocMenu }, - { " Packages", "Install pre-packaged software for FreeBSD", - NULL, configPackages }, - { " Root Password", "Set the system manager's password", - NULL, dmenuSystemCommand, NULL, "passwd root" }, -#ifdef WITH_SLICES - { " Fdisk", "The disk slice (PC-style partition) editor", - NULL, diskPartitionEditor }, -#endif - { " Label", "The disk label editor", - NULL, diskLabelEditor }, - { " User Management", "Add user and group information", - NULL, dmenuSubmenu, NULL, &MenuUsermgmt }, -#ifdef WITH_SYSCONS - { " Console", "Customize system console behavior", - NULL, dmenuSubmenu, NULL, &MenuSyscons }, -#endif - { " Time Zone", "Set which time zone you're in", - NULL, dmenuSystemCommand, NULL, "tzsetup" }, - { " Media", "Change the installation media type", - NULL, dmenuSubmenu, NULL, &MenuMedia }, -#ifdef WITH_MICE - { " Mouse", "Configure your mouse", - NULL, dmenuSubmenu, NULL, &MenuMouse }, -#endif - { " Networking", "Configure additional network services", - NULL, dmenuSubmenu, NULL, &MenuNetworking }, - { " Security", "Configure system security options", - NULL, dmenuSubmenu, NULL, &MenuSecurity }, - { " Startup", "Configure system startup options", - NULL, dmenuSubmenu, NULL, &MenuStartup }, - { " TTYs", "Configure system ttys.", - NULL, configEtcTtys, NULL, "ttys" }, - { " Options", "View/Set various installation options", - NULL, optionsEditor }, - { " HTML Docs", "Go to the HTML documentation menu (post-install)", - NULL, docBrowser }, - { " Load KLD", "Load a KLD from a floppy", - NULL, kldBrowser }, - { NULL } }, -}; - -DMenu MenuStartup = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "Startup Services Menu", - "This menu allows you to configure various aspects of your system's\n" - "startup configuration. Use [SPACE] or [ENTER] to select items, and\n" - "[TAB] to move to the buttons. Select Exit to leave this menu.", - NULL, - NULL, - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, -#ifdef __i386__ - { " APM", "Auto-power management services (typically laptops)", - dmenuVarCheck, dmenuToggleVariable, NULL, "apm_enable=YES" }, -#endif - { " ", " -- ", NULL, NULL, NULL, NULL, ' ', ' ', ' ' }, - { " Startup dirs", "Set the list of dirs to look for startup scripts", - dmenuVarCheck, dmenuISetVariable, NULL, "local_startup" }, - { " named", "Run a local name server on this host", - dmenuVarCheck, dmenuToggleVariable, NULL, "named_enable=YES" }, - { " named flags", "Set default flags to named (if enabled)", - dmenuVarCheck, dmenuISetVariable, NULL, "named_flags" }, - { " NIS client", "This host wishes to be an NIS client.", - dmenuVarCheck, configRpcBind, NULL, "nis_client_enable=YES" }, - { " NIS domainname", "Set NIS domainname (if enabled)", - dmenuVarCheck, dmenuISetVariable, NULL, "nisdomainname" }, - { " NIS server", "This host wishes to be an NIS server.", - dmenuVarCheck, configRpcBind, NULL, "nis_server_enable=YES" }, - { " ", " -- ", NULL, NULL, NULL, NULL, ' ', ' ', ' ' }, - { " Accounting", "This host wishes to run process accounting.", - dmenuVarCheck, dmenuToggleVariable, NULL, "accounting_enable=YES" }, - { " lpd", "This host has a printer and wants to run lpd.", - dmenuVarCheck, dmenuToggleVariable, NULL, "lpd_enable=YES" }, -#ifdef __i386__ - { " SCO", "This host wants to be able to run IBCS2 binaries.", - dmenuVarCheck, dmenuToggleVariable, NULL, "ibcs2_enable=YES" }, - { " SVR4", "This host wants to be able to run SVR4 binaries.", - dmenuVarCheck, dmenuToggleVariable, NULL, "svr4_enable=YES" }, -#endif - { NULL } }, -}; - -DMenu MenuNetworking = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "Network Services Menu", - "You may have already configured one network device (and the other\n" - "various hostname/gateway/name server parameters) in the process\n" - "of installing FreeBSD. This menu allows you to configure other\n" - "aspects of your system's network configuration.", - NULL, - NULL, - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { " Interfaces", "Configure additional network interfaces", - NULL, tcpMenuSelect }, - { " AMD", "This machine wants to run the auto-mounter service", - dmenuVarCheck, configRpcBind, NULL, "amd_enable=YES" }, - { " AMD Flags", "Set flags to AMD service (if enabled)", - dmenuVarCheck, dmenuISetVariable, NULL, "amd_flags" }, - { " Anon FTP", "This machine wishes to allow anonymous FTP.", - dmenuVarCheck, configAnonFTP, NULL, "anon_ftp" }, - { " Gateway", "This machine will route packets between interfaces", - dmenuVarCheck, dmenuToggleVariable, NULL, "gateway_enable=YES" }, - { " inetd", "This machine wants to run the inet daemon", - dmenuVarCheck, configInetd, NULL, "inetd_enable=YES" }, - { " Mail", "This machine wants to run a Mail Transfer Agent", - NULL, dmenuSubmenu, NULL, &MenuMTA }, - { " NFS client", "This machine will be an NFS client", - dmenuVarCheck, dmenuToggleVariable, NULL, "nfs_client_enable=YES" }, - { " NFS server", "This machine will be an NFS server", - dmenuVarCheck, configNFSServer, NULL, "nfs_server_enable=YES" }, - { " Ntpdate", "Select a clock synchronization server", - dmenuVarCheck, dmenuSubmenu, NULL, &MenuNTP, '[', 'X', ']', - (uintptr_t)"ntpdate_enable=YES" }, - { " PCNFSD", "Run authentication server for clients with PC-NFS.", - dmenuVarCheck, configPCNFSD, NULL, "pcnfsd" }, - { " rpcbind", "RPC port mapping daemon (formerly portmapper)", - dmenuVarCheck, dmenuToggleVariable, NULL, "rpcbind_enable=YES" }, - { " rpc.statd", "NFS status monitoring daemon", - dmenuVarCheck, configRpcBind, NULL, "rpc_statd_enable=YES" }, - { " rpc.lockd", "NFS file locking daemon", - dmenuVarCheck, configRpcBind, NULL, "rpc_lockd_enable=YES" }, - { " Routed", "Select routing daemon (default: routed)", - dmenuVarCheck, configRouter, NULL, "router_enable=YES" }, - { " Rwhod", "This machine wants to run the rwho daemon", - dmenuVarCheck, dmenuToggleVariable, NULL, "rwhod_enable=YES" }, - { " sshd", "This machine wants to run the SSH daemon", - dmenuVarCheck, dmenuToggleVariable, NULL, "sshd_enable=YES" }, - { " TCP Extensions", "Allow RFC1323 and RFC1644 TCP extensions?", - dmenuVarCheck, dmenuToggleVariable, NULL, "tcp_extensions=YES" }, - { NULL } }, -}; - -DMenu MenuMTA = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Mail Transfer Agent Selection", - "You can choose which Mail Transfer Agent (MTA) you wish to install and run.\n" - "Selecting Sendmail local disables sendmail's network socket for\n" - "incoming mail, but still enables sendmail for local and outbound mail.\n" - "The Postfix option will install the Postfix MTA from the ports\n" - "collection. The Exim option will install the Exim MTA from the ports\n" - "collection. To return to the previous menu, select Exit.", - NULL, - NULL, - { - { "Sendmail", "Use sendmail", - dmenuVarCheck, dmenuSetVariable, NULL, "sendmail_enable=YES" }, - { "Sendmail local", "Use sendmail, but do not listen on the network", - dmenuVarCheck, dmenuSetVariable, NULL, "sendmail_enable=NO" }, - { "Postfix", "Use the Postfix MTA", - NULL, configMTAPostfix, NULL, NULL }, - { "Exim", "Use the Exim MTA", - NULL, configMTAExim, NULL, NULL }, - { "None", "Do not install an MTA", - dmenuVarCheck, dmenuSetVariable, NULL, "sendmail_enable=NONE" }, - { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { NULL } }, -}; - -DMenu MenuNTP = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "NTPDATE Server Selection", - "There are a number of time synchronization servers available\n" - "for public use around the Internet. Please select one reasonably\n" - "close to you to have your system time synchronized accordingly.", - "These are the primary open-access NTP servers", - NULL, - { { "None", "No NTP server", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=NO,ntpdate_hosts=none" }, - { "Other", "Select a site not on this list", - dmenuVarsCheck, configNTP, NULL, NULL }, - { "Worldwide", "pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=pool.ntp.org" }, - { "Asia", "asia.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=asia.pool.ntp.org" }, - { "Europe", "europe.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=europe.pool.ntp.org" }, - { "Oceania", "oceania.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=oceania.pool.ntp.org" }, - { "North America", "north-america.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=north-america.pool.ntp.org" }, - { "Argentina", "tick.nap.com.ar", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tick.nap.com.ar" }, - { "Argentina #2", "time.sinectis.com.ar", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.sinectis.com.ar" }, - { "Argentina #3", "tock.nap.com.ar", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tock.nap.com.ar" }, - { "Australia", "au.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=au.pool.ntp.org" }, - { "Australia #2", "augean.eleceng.adelaide.edu.au", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=augean.eleceng.adelaide.edu.au" }, - { "Australia #3", "ntp.adelaide.edu.au", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.adelaide.edu.au" }, - { "Australia #4", "ntp.saard.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.saard.net" }, - { "Australia #5", "time.deakin.edu.au", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.deakin.edu.au" }, - { "Belgium", "ntp1.belbone.be", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.belbone.be" }, - { "Belgium #2", "ntp2.belbone.be", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.belbone.be" }, - { "Brazil", "a.ntp.br", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=a.ntp.br" }, - { "Brazil #2", "b.ntp.br", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=b.ntp.br" }, - { "Brazil #3", "c.ntp.br", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=c.ntp.br" }, - { "Brazil #4", "ntp.cais.rnp.br", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.cais.rnp.br" }, - { "Brazil #5", "ntp1.pucpr.br", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.pucpr.br" }, - { "Canada", "ca.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ca.pool.ntp.org" }, - { "Canada #2", "ntp.cpsc.ucalgary.ca", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.cpsc.ucalgary.ca" }, - { "Canada #3", "ntp1.cmc.ec.gc.ca", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.cmc.ec.gc.ca" }, - { "Canada #4", "ntp2.cmc.ec.gc.ca", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.cmc.ec.gc.ca" }, - { "Canada #5", "tick.utoronto.ca", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tick.utoronto.ca" }, - { "Canada #6", "time.chu.nrc.ca", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.chu.nrc.ca" }, - { "Canada #7", "time.nrc.ca", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.nrc.ca" }, - { "Canada #8", "timelord.uregina.ca", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=timelord.uregina.ca" }, - { "Canada #9", "tock.utoronto.ca", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tock.utoronto.ca" }, - { "Czech", "ntp.karpo.cz", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.karpo.cz" }, - { "Czech #2", "ntp.cgi.cz", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.cgi.cz" }, - { "Denmark", "clock.netcetera.dk", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=clock.netcetera.dk" }, - { "Denmark", "clock2.netcetera.dk", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=clock2.netcetera.dk" }, - { "Spain", "slug.ctv.es", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=slug.ctv.es" }, - { "Finland", "tick.keso.fi", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tick.keso.fi" }, - { "Finland #2", "tock.keso.fi", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tock.keso.fi" }, - { "France", "ntp.obspm.fr", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.obspm.fr" }, - { "France #2", "ntp.univ-lyon1.fr", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.univ-lyon1.fr" }, - { "France #3", "ntp.via.ecp.fr", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.via.ecp.fr" }, - { "Croatia", "zg1.ntp.carnet.hr", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=zg1.ntp.carnet.hr" }, - { "Croatia #2", "zg2.ntp.carnet.hr", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=zg2.ntp.carnet.hr" }, - { "Croatia #3", "st.ntp.carnet.hr", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=st.ntp.carnet.hr" }, - { "Croatia #4", "ri.ntp.carnet.hr", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ri.ntp.carnet.hr" }, - { "Croatia #5", "os.ntp.carnet.hr", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=os.ntp.carnet.hr" }, - { "Hungary", "time.kfki.hu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.kfki.hu" }, - { "Indonesia", "ntp.kim.lipi.go.id", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.kim.lipi.go.id" }, - { "Ireland", "ntp.maths.tcd.ie", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.maths.tcd.ie" }, - { "Italy", "it.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=it.pool.ntp.org" }, - { "Japan", "ntp.jst.mfeed.ad.jp", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.jst.mfeed.ad.jp" }, - { "Japan IPv6", "ntp1.v6.mfeed.ad.jp", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.v6.mfeed.ad.jp" }, - { "Korea", "time.nuri.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.nuri.net" }, - { "Mexico", "mx.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=mx.pool.ntp.org" }, - { "Netherlands", "ntp0.nl.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp0.nl.net" }, - { "Netherlands #2", "ntp1.nl.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.nl.net" }, - { "Netherlands #3", "ntp2.nl.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.nl.net" }, - { "Norway", "fartein.ifi.uio.no", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=fartein.ifi.uio.no" }, - { "Norway #2", "time.alcanet.no", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.alcanet.no" }, - { "New Zealand", "ntp.massey.ac.nz", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.massey.ac.nz" }, - { "New Zealand #2", "ntp.public.otago.ac.nz", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.public.otago.ac.nz" }, - { "New Zealand #3", "tk1.ihug.co.nz", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tk1.ihug.co.nz" }, - { "New Zealand #4", "ntp.waikato.ac.nz", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.waikato.ac.nz" }, - { "Poland", "info.cyf-kr.edu.pl", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=info.cyf-kr.edu.pl" }, - { "Romania", "ticks.roedu.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ticks.roedu.net" }, - { "Russia", "ru.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ru.pool.ntp.org" }, - { "Russia #2", "ntp.psn.ru", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.psn.ru" }, - { "Sweden", "se.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=se.pool.ntp.org" }, - { "Sweden #2", "ntp.lth.se", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.lth.se" }, - { "Sweden #3", "ntp1.sp.se", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.sp.se" }, - { "Sweden #4", "ntp2.sp.se", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.sp.se" }, - { "Sweden #5", "ntp.kth.se", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.kth.se" }, - { "Singapore", "sg.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=sg.pool.ntp.org" }, - { "Slovenia", "si.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=si.pool.ntp.org" }, - { "Slovenia #2", "sizif.mf.uni-lj.si", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=sizif.mf.uni-lj.si" }, - { "Slovenia #3", "ntp1.arnes.si", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.arnes.si" }, - { "Slovenia #4", "ntp2.arnes.si", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.arnes.si" }, - { "Slovenia #5", "time.ijs.si", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.ijs.si" }, - { "Scotland", "ntp.cs.strath.ac.uk", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.cs.strath.ac.uk" }, - { "Taiwan", "time.stdtime.gov.tw", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.stdtime.gov.tw" }, - { "Taiwan #2", "clock.stdtime.gov.tw", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=clock.stdtime.gov.tw" }, - { "Taiwan #3", "tick.stdtime.gov.tw", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tick.stdtime.gov.tw" }, - { "Taiwan #4", "tock.stdtime.gov.tw", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tock.stdtime.gov.tw" }, - { "Taiwan #5", "watch.stdtime.gov.tw", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=watch.stdtime.gov.tw" }, - { "United Kingdom", "uk.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=uk.pool.ntp.org" }, - { "United Kingdom #2", "ntp.exnet.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.exnet.com" }, - { "United Kingdom #3", "ntp0.uk.uu.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp0.uk.uu.net" }, - { "United Kingdom #4", "ntp1.uk.uu.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.uk.uu.net" }, - { "United Kingdom #5", "ntp2.uk.uu.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.uk.uu.net" }, - { "United Kingdom #6", "ntp2a.mcc.ac.uk", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2a.mcc.ac.uk" }, - { "United Kingdom #7", "ntp2b.mcc.ac.uk", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2b.mcc.ac.uk" }, - { "United Kingdom #8", "ntp2c.mcc.ac.uk", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2c.mcc.ac.uk" }, - { "United Kingdom #9", "ntp2d.mcc.ac.uk", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2d.mcc.ac.uk" }, - { "U.S.", "us.pool.ntp.org", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=us.pool.ntp.org" }, - { "U.S. AR", "sushi.lyon.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=sushi.compsci.lyon.edu" }, - { "U.S. AZ", "ntp.drydog.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.drydog.com" }, - { "U.S. CA", "ntp.ucsd.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.ucsd.edu" }, - { "U.S. CA #2", "ntp1.mainecoon.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.mainecoon.com" }, - { "U.S. CA #3", "ntp2.mainecoon.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.mainecoon.com" }, - { "U.S. CA #4", "reloj.kjsl.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=reloj.kjsl.com" }, - { "U.S. CA #5", "time.five-ten-sg.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time.five-ten-sg.com" }, - { "U.S. DE", "louie.udel.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=louie.udel.edu" }, - { "U.S. GA", "ntp.shorty.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.shorty.com" }, - { "U.S. GA #2", "rolex.usg.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=rolex.usg.edu" }, - { "U.S. GA #3", "timex.usg.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=timex.usg.edu" }, - { "U.S. IL", "ntp-0.cso.uiuc.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-0.cso.uiuc.edu" }, - { "U.S. IL #2", "ntp-1.cso.uiuc.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-1.cso.uiuc.edu" }, - { "U.S. IL #3", "ntp-1.mcs.anl.gov", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-1.mcs.anl.gov" }, - { "U.S. IL #4", "ntp-2.cso.uiuc.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-2.cso.uiuc.edu" }, - { "U.S. IL #5", "ntp-2.mcs.anl.gov", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-2.mcs.anl.gov" }, - { "U.S. IN", "gilbreth.ecn.purdue.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=gilbreth.ecn.purdue.edu" }, - { "U.S. IN #2", "harbor.ecn.purdue.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=harbor.ecn.purdue.edu" }, - { "U.S. IN #3", "molecule.ecn.purdue.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=molecule.ecn.purdue.edu" }, - { "U.S. KS", "ntp1.kansas.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.kansas.net" }, - { "U.S. KS #2", "ntp2.kansas.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.kansas.net" }, - { "U.S. MA", "ntp.ourconcord.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.ourconcord.net" }, - { "U.S. MA #2", "timeserver.cs.umb.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=timeserver.cs.umb.edu" }, - { "U.S. MN", "ns.nts.umn.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ns.nts.umn.edu" }, - { "U.S. MN #2", "nss.nts.umn.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=nss.nts.umn.edu" }, - { "U.S. MO", "time-ext.missouri.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=time-ext.missouri.edu" }, - { "U.S. MT", "chronos1.umt.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=chronos1.umt.edu" }, - { "U.S. MT #2", "chronos2.umt.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=chronos2.umt.edu" }, - { "U.S. MT #3", "chronos3.umt.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=chronos3.umt.edu" }, - { "U.S. NC", "clock1.unc.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=clock1.unc.edu" }, - { "U.S. NV", "cuckoo.nevada.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=cuckoo.nevada.edu" }, - { "U.S. NV #2", "tick.cs.unlv.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tick.cs.unlv.edu" }, - { "U.S. NV #3", "tock.cs.unlv.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tock.cs.unlv.edu" }, - { "U.S. NY", "ntp0.cornell.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp0.cornell.edu" }, - { "U.S. NY #2", "sundial.columbia.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=sundial.columbia.edu" }, - { "U.S. NY #3", "timex.cs.columbia.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=timex.cs.columbia.edu" }, - { "U.S. PA", "clock-1.cs.cmu.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=clock-1.cs.cmu.edu" }, - { "U.S. PA #2", "clock-2.cs.cmu.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=clock-2.cs.cmu.edu" }, - { "U.S. PA #3", "clock.psu.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=clock.psu.edu" }, - { "U.S. PA #4", "fuzz.psc.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=fuzz.psc.edu" }, - { "U.S. PA #5", "ntp-1.ece.cmu.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-1.ece.cmu.edu" }, - { "U.S. PA #6", "ntp-2.ece.cmu.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-2.ece.cmu.edu" }, - { "U.S. TX", "ntp.fnbhs.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.fnbhs.com" }, - { "U.S. TX #2", "ntp.tmc.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.tmc.edu" }, - { "U.S. TX #3", "ntp5.tamu.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp5.tamu.edu" }, - { "U.S. TX #4", "tick.greyware.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tick.greyware.com" }, - { "U.S. TX #5", "tock.greyware.com", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=tock.greyware.com" }, - { "U.S. VA", "ntp-1.vt.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-1.vt.edu" }, - { "U.S. VA #2", "ntp-2.vt.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp-2.vt.edu" }, - { "U.S. VA #3", "ntp.cmr.gov", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.cmr.gov" }, - { "U.S. VT", "ntp0.state.vt.us", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp0.state.vt.us" }, - { "U.S. VT #2", "ntp1.state.vt.us", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.state.vt.us" }, - { "U.S. VT #3", "ntp2.state.vt.us", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp2.state.vt.us" }, - { "U.S. WA", "ntp.tcp-udp.net", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.tcp-udp.net" }, - { "U.S. WI", "ntp1.cs.wisc.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp1.cs.wisc.edu" }, - { "U.S. WI #2", "ntp3.cs.wisc.edu", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp3.cs.wisc.edu" }, - { "South Africa", "ntp.cs.unp.ac.za", - dmenuVarsCheck, dmenuSetVariables, NULL, - "ntpdate_enable=YES,ntpdate_hosts=ntp.cs.unp.ac.za" }, - { NULL } }, -}; - -#ifdef WITH_SYSCONS -DMenu MenuSyscons = { - DMENU_NORMAL_TYPE, - "System Console Configuration", - "The system console driver for FreeBSD has a number of configuration\n" - "options which may be set according to your preference.\n\n" - "When you are done setting configuration options, select Cancel.", - "Configure your system console settings", - NULL, - { { "X Exit", "Exit this menu (returning to previous)", NULL, dmenuExit }, -#ifdef PC98 - { "2 Keymap", "Choose an alternate keyboard map", NULL, dmenuSubmenu, NULL, &MenuSysconsKeymap }, - { "3 Repeat", "Set the rate at which keys repeat", NULL, dmenuSubmenu, NULL, &MenuSysconsKeyrate }, - { "4 Saver", "Configure the screen saver", NULL, dmenuSubmenu, NULL, &MenuSysconsSaver }, -#else - { "2 Font", "Choose an alternate screen font", NULL, dmenuSubmenu, NULL, &MenuSysconsFont }, - { "3 Keymap", "Choose an alternate keyboard map", NULL, dmenuSubmenu, NULL, &MenuSysconsKeymap }, - { "4 Repeat", "Set the rate at which keys repeat", NULL, dmenuSubmenu, NULL, &MenuSysconsKeyrate }, - { "5 Saver", "Configure the screen saver", NULL, dmenuSubmenu, NULL, &MenuSysconsSaver }, - { "6 Screenmap", "Choose an alternate screenmap", NULL, dmenuSubmenu, NULL, &MenuSysconsScrnmap }, - { "7 Ttys", "Choose console terminal type", NULL, dmenuSubmenu, NULL, &MenuSysconsTtys }, -#endif - { NULL } }, -}; - -#ifdef PC98 -DMenu MenuSysconsKeymap = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "System Console Keymap", - "The system console driver for FreeBSD defaults to a standard\n" - "\"PC-98x1\" keyboard map. Users may wish to choose one of the\n" - "other keymaps below.", - "Choose a keyboard map", - NULL, - { { "Japanese PC-98x1", "Japanese PC-98x1 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=jp.pc98" }, - { " Japanese PC-98x1 (ISO)", "Japanese PC-98x1 (ISO) keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=jp.pc98.iso" }, - { NULL } }, -}; -#else -DMenu MenuSysconsKeymap = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "System Console Keymap", - "The system console driver for FreeBSD defaults to a standard\n" - "\"US\" keyboard map. Users may wish to choose one of the\n" - "other keymaps below.", - "Choose a keyboard map", - NULL, - { { "Belgian", "Belgian ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=be.iso" }, - { " Brazil CP850", "Brazil CP850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=br275.cp850" }, - { " Brazil ISO (accent)", "Brazil ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=br275.iso.acc" }, - { " Brazil ISO", "Brazil ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=br275.iso" }, - { " Bulgarian BDS", "Bulgarian BDS keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=bg.bds.ctrlcaps" }, - { " Bulgarian Phonetic", "Bulgarian Phonetic keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=bg.phonetic.ctrlcaps" }, - { "Central European ISO", "Central European ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=ce.iso2" }, - { " Croatian ISO", "Croatian ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=hr.iso" }, - { " Czech ISO (accent)", "Czech ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=cs.latin2.qwertz" }, - { "Danish CP865", "Danish Code Page 865 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=danish.cp865" }, - { " Danish ISO", "Danish ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=danish.iso" }, - { "Estonian ISO", "Estonian ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=estonian.iso" }, - { " Estonian ISO 15", "Estonian ISO 8859-15 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=estonian.iso15" }, - { " Estonian CP850", "Estonian Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=estonian.cp850" }, - { "Finnish CP850","Finnish Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=finnish.cp850" }, - { " Finnish ISO", "Finnish ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=finnish.iso" }, - { " French ISO (accent)", "French ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=fr.iso.acc" }, - { " French ISO", "French ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=fr.iso" }, - { " French ISO/Macbook", "French ISO keymap on macbook", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=fr.macbook.acc" }, - { "German CP850", "German Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=german.cp850" }, - { " German ISO", "German ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=german.iso" }, - { " Greek 101", "Greek ISO keymap (101 keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=gr.us101.acc" }, - { " Greek 104", "Greek ISO keymap (104 keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=el.iso07" }, - { " Greek ELOT", "Greek ISO keymap (ELOT 1000)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=gr.elot.acc" }, - { "Hungarian 101", "Hungarian ISO keymap (101 key)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=hu.iso2.101keys" }, - { " Hungarian 102", "Hungarian ISO keymap (102 key)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=hu.iso2.102keys" }, - { "Icelandic (accent)", "Icelandic ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=icelandic.iso.acc" }, - { " Icelandic", "Icelandic ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=icelandic.iso" }, - { " Italian", "Italian ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=it.iso" }, - { "Japanese 106", "Japanese 106 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=jp.106" }, - { "Latin American (accent)", "Latin American ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=latinamerican.iso.acc" }, - { " Latin American", "Latin American ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=latinamerican" }, - { "Norway ISO", "Norwegian ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=norwegian.iso" }, - { "Polish ISO", "Polish ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=pl_PL.ISO8859-2" }, - { " Portuguese (accent)", "Portuguese ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=pt.iso.acc" }, - { " Portuguese", "Portuguese ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=pt.iso" }, - { "Russia KOI8-R", "Russian KOI8-R keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=ru.koi8-r" }, - { "Slovak", "Slovak ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=sk.iso2" }, - { "Slovenian", "Slovenian ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=si.iso" }, - { " Spanish (accent)", "Spanish ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=spanish.iso.acc" }, - { " Spanish", "Spanish ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=spanish.iso" }, - { " Swedish CP850", "Swedish Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swedish.cp850" }, - { " Swedish ISO", "Swedish ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swedish.iso" }, - { " Swiss French ISO (accent)", "Swiss French ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissfrench.iso.acc" }, - { " Swiss French ISO", "Swiss French ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissfrench.iso" }, - { " Swiss French CP850", "Swiss French Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissfrench.cp850" }, - { " Swiss German ISO (accent)", "Swiss German ISO keymap (accent keys)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissgerman.iso.acc" }, - { " Swiss German ISO", "Swiss German ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissgerman.iso" }, - { " Swiss German CP850", "Swiss German Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=swissgerman.cp850" }, - { "UK CP850", "UK Code Page 850 keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=uk.cp850" }, - { " UK ISO", "UK ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=uk.iso" }, - { " Ukrainian KOI8-U", "Ukrainian KOI8-U keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=ua.koi8-u" }, - { " Ukrainian KOI8-U+KOI8-R", "Ukrainian KOI8-U+KOI8-R keymap (alter)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=ua.koi8-u.shift.alt" }, - { " USA CapsLock->Ctrl", "US standard (Caps as L-Control)", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.pc-ctrl" }, - { " USA Dvorak", "US Dvorak keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.dvorak" }, - { " USA Dvorak (left)", "US left handed Dvorak keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.dvorakl" }, - { " USA Dvorak (right)", "US right handed Dvorak keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.dvorakr" }, - { " USA Emacs", "US standard optimized for EMACS", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.emacs" }, - { " USA ISO", "US ISO keymap", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.iso" }, - { " USA UNIX", "US traditional UNIX-workstation", dmenuVarCheck, dmenuSetKmapVariable, NULL, "keymap=us.unix" }, - { NULL } }, -}; -#endif /* PC98 */ - -DMenu MenuSysconsKeyrate = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "System Console Keyboard Repeat Rate", - "This menu allows you to set the speed at which keys repeat\n" - "when held down.", - "Choose a keyboard repeat rate", - NULL, - { { "Slow", "Slow keyboard repeat rate", dmenuVarCheck, dmenuSetVariable, NULL, "keyrate=slow" }, - { "Normal", "\"Normal\" keyboard repeat rate", dmenuVarCheck, dmenuSetVariable, NULL, "keyrate=normal" }, - { "Fast", "Fast keyboard repeat rate", dmenuVarCheck, dmenuSetVariable, NULL, "keyrate=fast" }, - { "Default", "Use default keyboard repeat rate", dmenuVarCheck, dmenuSetVariable, NULL, "keyrate=NO" }, - { NULL } } -}; - -DMenu MenuSysconsSaver = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "System Console Screen Saver", - "By default, the console driver will not attempt to do anything\n" - "special with your screen when it's idle. If you expect to leave your\n" - "monitor switched on and idle for long periods of time then you should\n" - "probably enable one of these screen savers to prevent burn-in.", - "Choose a nifty-looking screen saver", - NULL, - { { "1 Blank", "Simply blank the screen", - dmenuVarCheck, configSaver, NULL, "saver=blank" }, - { "2 Beastie", "\"BSD Daemon\" animated screen saver (graphics)", - dmenuVarCheck, configSaver, NULL, "saver=beastie" }, - { "3 Daemon", "\"BSD Daemon\" animated screen saver (text)", - dmenuVarCheck, configSaver, NULL, "saver=daemon" }, - { "4 Dragon", "Dragon screensaver (graphics)", - dmenuVarCheck, configSaver, NULL, "saver=dragon" }, - { "5 Fade", "Fade out effect screen saver", - dmenuVarCheck, configSaver, NULL, "saver=fade" }, - { "6 Fire", "Flames effect screen saver", - dmenuVarCheck, configSaver, NULL, "saver=fire" }, - { "7 Green", "\"Green\" power saving mode (if supported by monitor)", - dmenuVarCheck, configSaver, NULL, "saver=green" }, - { "8 Logo", "FreeBSD \"logo\" animated screen saver (graphics)", - dmenuVarCheck, configSaver, NULL, "saver=logo" }, - { "9 Rain", "Rain drops screen saver", - dmenuVarCheck, configSaver, NULL, "saver=rain" }, - { "a Snake", "Draw a FreeBSD \"snake\" on your screen", - dmenuVarCheck, configSaver, NULL, "saver=snake" }, - { "b Star", "A \"twinkling stars\" effect", - dmenuVarCheck, configSaver, NULL, "saver=star" }, - { "c Warp", "A \"stars warping\" effect", - dmenuVarCheck, configSaver, NULL, "saver=warp" }, - { "d None", "Disable the screensaver", - dmenuVarCheck, configSaver, NULL, "saver=NO" }, - { "Timeout", "Set the screen saver timeout interval", - NULL, configSaverTimeout, NULL, NULL, ' ', ' ', ' ' }, - { NULL } } -}; - -#ifndef PC98 -DMenu MenuSysconsScrnmap = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "System Console Screenmap", - "Unless you load a specific font, most PC hardware defaults to\n" - "displaying characters in the IBM 437 character set. However,\n" - "in the Unix world, this character set is very rarely used. Most\n" - "Western European countries, for example, prefer ISO 8859-1.\n" - "American users won't notice the difference since the bottom half\n" - "of all these character sets is ANSI anyway.\n" - "If your hardware is capable of downloading a new display font,\n" - "you should probably choose that option. However, for hardware\n" - "where this is not possible (e.g. monochrome adapters), a screen\n" - "map will give you the best approximation that your hardware can\n" - "display at all.", - "Choose a screen map", - NULL, - { { "1 None", "No screenmap, don't touch font", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=NO" }, - { "2 ISO 8859-1 to IBM437", "W-Europe ISO 8859-1 to IBM 437 screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=iso-8859-1_to_cp437" }, - { "3 ISO 8859-7 to IBM437", "Greek ISO 8859-7 to IBM 437 screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=iso-8859-7_to_cp437" }, - { "4 US-ASCII to IBM437", "US-ASCII to IBM 437 screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=us-ascii_to_cp437" }, - { "5 KOI8-R to IBM866", "Russian KOI8-R to IBM 866 screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=koi8-r2cp866" }, - { "6 KOI8-U to IBM866u", "Ukrainian KOI8-U to IBM 866u screenmap", dmenuVarCheck, dmenuSetVariable, NULL, "scrnmap=koi8-u2cp866u" }, - { NULL } }, -}; - -DMenu MenuSysconsTtys = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "System Console Terminal Type", - "For various console encodings, a corresponding terminal type\n" - "must be chosen in /etc/ttys.\n\n" - "WARNING: For compatibility reasons, only entries starting with\n" - "ttyv and terminal types starting with cons[0-9] can be changed\n" - "via this menu.\n", - "Choose a terminal type", - NULL, - { { "1 None", "Don't touch anything", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=NO" }, - { "2 IBM437 (VGA default)", "cons25", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25" }, - { "3 ISO 8859-1", "cons25l1", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25l1" }, - { "4 ISO 8859-2", "cons25l2", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25l2" }, - { "5 ISO 8859-7", "cons25l7", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25l7" }, - { "6 KOI8-R", "cons25r", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25r" }, - { "7 KOI8-U", "cons25u", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25u" }, - { "8 US-ASCII", "cons25w", dmenuVarCheck, dmenuSetVariable, NULL, VAR_CONSTERM "=cons25w" }, - { NULL } }, -}; - -DMenu MenuSysconsFont = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "System Console Font", - "Most PC hardware defaults to displaying characters in the\n" - "IBM 437 character set. However, in the Unix world, this\n" - "character set is very rarely used. Most Western European\n" - "countries, for example, prefer ISO 8859-1.\n" - "American users won't notice the difference since the bottom half\n" - "of all these charactersets is ANSI anyway. However, they might\n" - "want to load a font anyway to use the 30- or 50-line displays.\n" - "If your hardware is capable of downloading a new display font,\n" - "you can select the appropriate font below.", - "Choose a font", - NULL, - { { "1 None", "Use hardware default font", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=NO,font8x14=NO,font8x16=NO" }, - { "2 IBM 437", "English and others, VGA default", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=cp437-8x8,font8x14=cp437-8x14,font8x16=cp437-8x16" }, - { "3 IBM 850", "Western Europe, IBM encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=cp850-8x8,font8x14=cp850-8x14,font8x16=cp850-8x16" }, - { "4 IBM 865", "Norwegian, IBM encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=cp865-8x8,font8x14=cp865-8x14,font8x16=cp865-8x16" }, - { "5 IBM 866", "Russian, IBM encoding (use with KOI8-R screenmap)", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=cp866-8x8,font8x14=cp866-8x14,font8x16=cp866b-8x16,mousechar_start=3" }, - { "6 IBM 866u", "Ukrainian, IBM encoding (use with KOI8-U screenmap)", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=cp866u-8x8,font8x14=cp866u-8x14,font8x16=cp866u-8x16,mousechar_start=3" }, - { "7 IBM 1251", "Cyrillic, MS Windows encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=cp1251-8x8,font8x14=cp1251-8x14,font8x16=cp1251-8x16,mousechar_start=3" }, - { "8 ISO 8859-1", "Western Europe, ISO encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=iso-8x8,font8x14=iso-8x14,font8x16=iso-8x16" }, - { "9 ISO 8859-2", "Eastern Europe, ISO encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=iso02-8x8,font8x14=iso02-8x14,font8x16=iso02-8x16" }, - { "a ISO 8859-4", "Baltic, ISO encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=iso04-8x8,font8x14=iso04-8x14,font8x16=iso04-8x16" }, - { "b ISO 8859-7", "Greek, ISO encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=iso07-8x8,font8x14=iso07-8x14,font8x16=iso07-8x16" }, - { "c ISO 8859-8", "Hebrew, ISO encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=iso08-8x8,font8x14=iso08-8x14,font8x16=iso08-8x16" }, - { "d ISO 8859-15", "Europe, ISO encoding", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=iso15-8x8,font8x14=iso15-8x14,font8x16=iso15-8x16" }, - { "e SWISS", "English, better resolution", dmenuVarCheck, dmenuSetVariables, NULL, - "font8x8=swiss-8x8,font8x14=NO,font8x16=swiss-8x16" }, - { NULL } }, -}; -#endif /* PC98 */ -#endif /* WITH_SYSCONS */ - -DMenu MenuUsermgmt = { - DMENU_NORMAL_TYPE, - "User and group management", - "The submenus here allow to manipulate user groups and\n" - "login accounts.\n", - "Configure your user groups and users", - NULL, - { { "X Exit", "Exit this menu (returning to previous)", NULL, dmenuExit }, - { "User", "Add a new user to the system.", NULL, userAddUser }, - { "Group", "Add a new user group to the system.", NULL, userAddGroup }, - { NULL } }, -}; - -DMenu MenuSecurity = { - DMENU_CHECKLIST_TYPE | DMENU_SELECTION_RETURNS, - "System Security Options Menu", - "This menu allows you to configure aspects of the operating system security\n" - "policy. Please read the system documentation carefully before modifying\n" - "these settings, as they may cause service disruption if used improperly.\n" - "\n" - "Most settings will take affect only following a system reboot.", - "Configure system security options", - NULL, - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { " Securelevel", "Configure securelevels for the system", - NULL, configSecurelevel }, -#if 0 - { " LOMAC", "Use Low Watermark Mandatory Access Control at boot", - dmenuVarCheck, dmenuToggleVariable, NULL, "lomac_enable=YES" }, -#endif - { " NFS port", "Require that the NFS clients use reserved ports", - dmenuVarCheck, dmenuToggleVariable, NULL, "nfs_reserved_port_only=YES" }, - { NULL } }, -}; - -DMenu MenuSecurelevel = { - DMENU_NORMAL_TYPE | DMENU_SELECTION_RETURNS, - "Securelevel Configuration Menu", - "This menu allows you to select the securelevel your system runs with.\n" - "When operating at a securelevel, certain root privileges are disabled,\n" - "which may increase resistance to exploits and protect system integrity.\n" - "In secure mode system flags may not be overriden by the root user,\n" - "access to direct kernel memory is limited, and kernel modules may not\n" - "be changed. In highly secure mode, mounted file systems may not be\n" - "modified on-disk, tampering with the system clock is prohibited. In\n" - "network secure mode configuration changes to firewalling are prohibited.\n", - "Select a securelevel to operate at - F1 for help", - "securelevel", - { { "X Exit", "Exit this menu (returning to previous)", - checkTrue, dmenuExit, NULL, NULL, '<', '<', '<' }, - { "Disabled", "Disable securelevels", NULL, configSecurelevelDisabled, }, - { "Secure", "Secure mode", NULL, configSecurelevelSecure }, - { "Highly Secure", "Highly secure mode", NULL, configSecurelevelHighlySecure }, - { "Network Secure", "Network secure mode", NULL, configSecurelevelNetworkSecure }, - { NULL } } -}; - -DMenu MenuFixit = { - DMENU_NORMAL_TYPE, - "Please choose a fixit option", - "There are three ways of going into \"fixit\" mode:\n" - "- you can use the live filesystem CDROM/DVD, in which case there will be\n" - " full access to the complete set of FreeBSD commands and utilities,\n" - "- you can use the more limited (but perhaps customized) fixit floppy,\n" - "- or you can start an Emergency Holographic Shell now, which is\n" - " limited to the subset of commands that is already available right now.", - "Press F1 for more detailed repair instructions", - "fixit", -{ { "X Exit", "Exit this menu (returning to previous)", NULL, dmenuExit }, - { "2 CDROM/DVD", "Use the live filesystem CDROM/DVD", NULL, installFixitCDROM }, - { "3 USB", "Use the live filesystem from a USB drive", NULL, installFixitUSB }, - { "4 Floppy", "Use a floppy generated from the fixit image", NULL, installFixitFloppy }, - { "5 Shell", "Start an Emergency Holographic Shell", NULL, installFixitHoloShell }, - { NULL } }, -}; diff --git a/usr.sbin/sysinstall/misc.c b/usr.sbin/sysinstall/misc.c deleted file mode 100644 index ed4fa2d..0000000 --- a/usr.sbin/sysinstall/misc.c +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Miscellaneous support routines.. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <ctype.h> -#include <unistd.h> -#include <sys/stat.h> -#include <sys/errno.h> -#include <sys/file.h> -#include <sys/types.h> -#include <dirent.h> -#include <sys/wait.h> -#include <sys/param.h> -#include <sys/mount.h> -#include <ufs/ufs/ufsmount.h> -#include <sys/reboot.h> -#include <sys/disklabel.h> -#include <fs/msdosfs/msdosfsmount.h> -#include <sys/sysctl.h> - -/* Quick check to see if a file is readable */ -Boolean -file_readable(char *fname) -{ - if (!access(fname, F_OK)) - return TRUE; - return FALSE; -} - -/* Quick check to see if a file is executable */ -Boolean -file_executable(char *fname) -{ - if (!access(fname, X_OK)) - return TRUE; - return FALSE; -} - -/* Concatenate two strings into static storage */ -char * -string_concat(char *one, char *two) -{ - static char tmp[FILENAME_MAX]; - - /* Yes, we're deliberately cavalier about not checking for overflow */ - strcpy(tmp, one); - strcat(tmp, two); - return tmp; -} - -/* sane strncpy() function */ -char * -sstrncpy(char *dst, const char *src, int size) -{ - dst[size] = '\0'; - return strncpy(dst, src, size); -} - -/* Concatenate three strings into static storage */ -char * -string_concat3(char *one, char *two, char *three) -{ - static char tmp[FILENAME_MAX]; - - /* Yes, we're deliberately cavalier about not checking for overflow */ - strcpy(tmp, one); - strcat(tmp, two); - strcat(tmp, three); - return tmp; -} - -/* Clip the whitespace off the end of a string */ -char * -string_prune(char *str) -{ - int len = str ? strlen(str) : 0; - - while (len && isspace(str[len - 1])) - str[--len] = '\0'; - return str; -} - -/* run the whitespace off the front of a string */ -char * -string_skipwhite(char *str) -{ - while (*str && isspace(*str)) - ++str; - return str; -} - -/* copy optionally and allow second arg to be null */ -char * -string_copy(char *s1, char *s2) -{ - if (!s1) - return NULL; - if (!s2) - s1[0] = '\0'; - else - strcpy(s1, s2); - return s1; -} - -/* convert an integer to a string, using a static buffer */ -char * -itoa(int value) -{ - static char buf[13]; - - snprintf(buf, 12, "%d", value); - return buf; -} - -Boolean -directory_exists(const char *dirname) -{ - DIR *tptr; - - if (!dirname) - return FALSE; - if (!strlen(dirname)) - return FALSE; - - tptr = opendir(dirname); - if (!tptr) - return (FALSE); - - closedir(tptr); - return (TRUE); -} - -char * -pathBaseName(const char *path) -{ - char *pt; - char *ret = (char *)path; - - pt = strrchr(path,(int)'/'); - - if (pt != 0) /* if there is a slash */ - { - ret = ++pt; /* start the file after it */ - } - - return(ret); -} - -/* A free guaranteed to take NULL ptrs */ -void -safe_free(void *ptr) -{ - if (ptr) - free(ptr); -} - -/* A malloc that checks errors */ -void * -safe_malloc(size_t size) -{ - void *ptr; - - if (size <= 0) - msgFatal("Invalid malloc size of %ld!", (long)size); - ptr = malloc(size); - if (!ptr) - msgFatal("Out of memory!"); - bzero(ptr, size); - return ptr; -} - -/* A realloc that checks errors */ -void * -safe_realloc(void *orig, size_t size) -{ - void *ptr; - - if (size <= 0) - msgFatal("Invalid realloc size of %ld!", (long)size); - ptr = reallocf(orig, size); - if (!ptr) - msgFatal("Out of memory!"); - return ptr; -} - -/* Create a path biased from the VAR_INSTALL_ROOT variable (if not /) */ -char * -root_bias(char *path) -{ - static char tmp[FILENAME_MAX]; - char *cp = variable_get(VAR_INSTALL_ROOT); - - if (!strcmp(cp, "/")) - return path; - strcpy(tmp, variable_get(VAR_INSTALL_ROOT)); - strcat(tmp, path); - return tmp; -} - -/* - * These next routines are kind of specialized just for building item lists - * for dialog_menu(). - */ - -/* Add an item to an item list */ -dialogMenuItem * -item_add(dialogMenuItem *list, char *prompt, char *title, - int (*checked)(dialogMenuItem *self), - int (*fire)(dialogMenuItem *self), - void (*selected)(dialogMenuItem *self, int is_selected), - void *data, void *aux, int *curr, int *max) -{ - dialogMenuItem *d; - - if (*curr == *max) { - *max += 20; - list = (dialogMenuItem *)safe_realloc(list, sizeof(dialogMenuItem) * *max); - } - d = &list[(*curr)++]; - bzero(d, sizeof(*d)); - d->prompt = prompt ? strdup(prompt) : NULL; - d->title = title ? strdup(title) : NULL; - d->checked = checked; - d->fire = fire; - d->selected = selected; - d->data = data; - d->aux = (long)aux; - return list; -} - -/* Toss the items out */ -void -items_free(dialogMenuItem *list, int *curr, int *max) -{ - int i; - - for (i = 0; list[i].prompt; i++) { - safe_free(list[i].prompt); - safe_free(list[i].title); - } - safe_free(list); - *curr = *max = 0; -} - -int -Mkdir(char *ipath) -{ - struct stat sb; - int final; - char *p, *path; - - if (file_readable(ipath) || Fake) - return DITEM_SUCCESS; - - path = strcpy(alloca(strlen(ipath) + 1), ipath); - if (isDebug()) - msgDebug("mkdir(%s)\n", path); - p = path; - if (p[0] == '/') /* Skip leading '/'. */ - ++p; - for (final = FALSE; !final; ++p) { - if (p[0] == '\0' || (p[0] == '/' && p[1] == '\0')) - final = TRUE; - else if (p[0] != '/') - continue; - *p = '\0'; - if (stat(path, &sb)) { - if (errno != ENOENT) { - msgConfirm("Couldn't stat directory %s: %s", path, strerror(errno)); - return DITEM_FAILURE; - } - if (isDebug()) - msgDebug("mkdir(%s..)\n", path); - if (mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) < 0) { - msgConfirm("Couldn't create directory %s: %s", path,strerror(errno)); - return DITEM_FAILURE; - } - } - *p = '/'; - } - return DITEM_SUCCESS; -} - -int -Mkdir_command(char *key, void *dir) -{ - return (Mkdir((char*)dir)); -} - -int -Mount(char *mountp, void *dev) -{ - struct ufs_args ufsargs; - char device[80]; - char mountpoint[FILENAME_MAX]; - - if (Fake) - return DITEM_SUCCESS; - - if (*((char *)dev) != '/') { - sprintf(device, "%s/dev/%s", RunningAsInit ? "/mnt" : "", (char *)dev); - sprintf(mountpoint, "%s%s", RunningAsInit ? "/mnt" : "", mountp); - } - else { - strcpy(device, dev); - strcpy(mountpoint, mountp); - } - memset(&ufsargs,0,sizeof ufsargs); - - if (Mkdir(mountpoint)) { - msgConfirm("Unable to make directory mountpoint for %s!", mountpoint); - return DITEM_FAILURE; - } - if (isDebug()) - msgDebug("mount %s %s\n", device, mountpoint); - - ufsargs.fspec = device; - if (mount("ufs", mountpoint, RunningAsInit ? MNT_ASYNC | MNT_NOATIME : 0, - (caddr_t)&ufsargs) == -1) { - msgConfirm("Error mounting %s on %s : %s", device, mountpoint, strerror(errno)); - return DITEM_FAILURE; - } - return DITEM_SUCCESS; -} - -int -Mount_msdosfs(char *mountp, void *dev) -{ - struct msdosfs_args mount_args; - char device[80]; - char mountpoint[FILENAME_MAX]; - - if (Fake) - return DITEM_SUCCESS; - - if (*((char *)dev) != '/') { - sprintf(device, "%s/dev/%s", RunningAsInit ? "/mnt" : "", (char *)dev); - sprintf(mountpoint, "%s%s", RunningAsInit ? "/mnt" : "", mountp); - } - else { - strcpy(device, dev); - strcpy(mountpoint, mountp); - } - - if (Mkdir(mountpoint)) { - msgConfirm("Unable to make directory mountpoint for %s!", mountpoint); - return DITEM_FAILURE; - } - if (isDebug()) - msgDebug("mount %s %s\n", device, mountpoint); - - memset(&mount_args, 0, sizeof(mount_args)); - mount_args.fspec = device; - mount_args.magic = MSDOSFS_ARGSMAGIC; - mount_args.mask = S_IRWXU | S_IRWXG | S_IRWXO; - if (mount("msdosfs", mountpoint, RunningAsInit ? MNT_ASYNC|MNT_NOATIME : 0, - (caddr_t)&mount_args) == -1) { - msgConfirm("Error mounting %s on %s : %s", device, mountpoint, strerror(errno)); - return DITEM_FAILURE; - } - return DITEM_SUCCESS; -} - -WINDOW * -openLayoutDialog(char *helpfile, char *title, int x, int y, int width, int height) -{ - WINDOW *win; - static char help[FILENAME_MAX]; - - /* We need a curses window */ - win = newwin(LINES, COLS, 0, 0); - if (win) { - /* Say where our help comes from */ - if (helpfile) { - use_helpline("Press F1 for more information on this screen."); - use_helpfile(systemHelpFile(helpfile, help)); - } - /* Setup a nice screen for us to splat stuff onto */ - draw_box(win, y, x, height, width, dialog_attr, border_attr); - wattrset(win, dialog_attr); - mvwaddstr(win, y, x + (COLS - strlen(title)) / 2, title); - } - return win; -} - -ComposeObj * -initLayoutDialog(WINDOW *win, Layout *layout, int x, int y, int *max) -{ - ComposeObj *obj = NULL, *first; - int n; - - /* Loop over the layout list, create the objects, and add them - onto the chain of objects that dialog uses for traversal*/ - - n = 0; - while (layout[n].help != NULL) { - int t = TYPE_OF_OBJ(layout[n].type); - - switch (t) { - case STRINGOBJ: - layout[n].obj = NewStringObj(win, layout[n].prompt, layout[n].var, - layout[n].y + y, layout[n].x + x, layout[n].len, layout[n].maxlen); - ((StringObj *)layout[n].obj)->attr_mask = ATTR_OF_OBJ(layout[n].type); - break; - - case BUTTONOBJ: - layout[n].obj = NewButtonObj(win, layout[n].prompt, layout[n].var, layout[n].y + y, layout[n].x + x); - break; - - default: - msgFatal("Don't support this object yet!"); - } - AddObj(&obj, t, (void *) layout[n].obj); - n++; - } - *max = n - 1; - /* Find the first object in the list */ - for (first = obj; first->prev; first = first->prev); - return first; -} - -int -layoutDialogLoop(WINDOW *win, Layout *layout, ComposeObj **obj, int *n, int max, int *cbutton, int *cancel) -{ - char help_line[80]; - int ret, i, len = strlen(layout[*n].help); - - /* Display the help line at the bottom of the screen */ - for (i = 0; i < 79; i++) - help_line[i] = (i < len) ? layout[*n].help[i] : ' '; - help_line[i] = '\0'; - use_helpline(help_line); - display_helpline(win, LINES - 1, COLS - 1); - wrefresh(win); - - /* Ask for libdialog to do its stuff */ - ret = PollObj(obj); - /* Handle special case stuff that libdialog misses. Sigh */ - switch (ret) { - case SEL_ESC: /* Bail out */ - *cancel = TRUE; - return FALSE; - - /* This doesn't work for list dialogs. Oh well. Perhaps - should special case the move from the OK button ``up'' - to make it go to the interface list, but then it gets - awkward for the user to go back and correct screw up's - in the per-interface section */ - case KEY_DOWN: - case SEL_CR: - case SEL_TAB: - if (*n < max) - ++*n; - else - *n = 0; - break; - - /* The user has pressed enter over a button object */ - case SEL_BUTTON: - if (cbutton && *cbutton) - *cancel = TRUE; - else - *cancel = FALSE; - return FALSE; - - case KEY_UP: - case SEL_BACKTAB: - if (*n) - --*n; - else - *n = max; - break; - - case KEY_F(1): - display_helpfile(); - - /* They tried some key combination we don't support - tootle them forcefully! */ - default: - beep(); - } - return TRUE; -} - -WINDOW * -savescr(void) -{ - WINDOW *w; - - w = dupwin(newscr); - return w; -} - -void -restorescr(WINDOW *w) -{ - touchwin(w); - wrefresh(w); - delwin(w); -} - -/* - * Get a sysctl variable as a string or "<unknown>" if sysctl fails. - * Caller must free returned string. - */ -char * -getsysctlbyname(const char *sysctlname) -{ - char *buf; - size_t sz, buf_sz = 0; - const char unk_str[] = "<unknown>"; - - sysctlbyname(sysctlname, NULL, &buf_sz, NULL, 0); - buf_sz = MAX(sizeof(unk_str), buf_sz) + 1; - sz = buf_sz - 1; - buf = (char *)safe_malloc(buf_sz); - - if (sysctlbyname(sysctlname, buf, &sz, NULL, 0) != -1) - buf[sz] = '\0'; - else - strlcpy(buf, unk_str, buf_sz); - - return buf; -} diff --git a/usr.sbin/sysinstall/modules.c b/usr.sbin/sysinstall/modules.c deleted file mode 100644 index 9c9875f..0000000 --- a/usr.sbin/sysinstall/modules.c +++ /dev/null @@ -1,223 +0,0 @@ -/*- - * Copyright (c) 2000 "HOSOKAWA, Tatsumi" <hosokawa@FreeBSD.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "sysinstall.h" -#include <stdio.h> -#include <string.h> -#include <sys/types.h> -#include <sys/param.h> -#include <sys/linker.h> -#include <dirent.h> -#include <fcntl.h> -#include <fnmatch.h> -#include <kenv.h> - -/* Prototypes */ -static int kldModuleFire(dialogMenuItem *self); - -#define MODULESDIR "/modules" -#define DISTMOUNT "/dist" - -void -moduleInitialize(void) -{ - int fd, len; - DIR *dirp; - struct dirent *dp; - char module[MAXPATHLEN], desc[MAXPATHLEN]; - char desc_str[BUFSIZ]; - - if (!RunningAsInit && !Fake) { - /* It's not my job... */ - return; - } - - dirp = opendir(MODULESDIR); - if (dirp) { - while ((dp = readdir(dirp))) { - if (dp->d_namlen < (sizeof(".ko") - 1)) continue; - if (strcmp(dp->d_name + dp->d_namlen - (sizeof(".ko") - 1), ".ko") == 0) { - strcpy(module, MODULESDIR); - strcat(module, "/"); - strcat(module, dp->d_name); - strcpy(desc, module); - len = strlen(desc); - strcpy(desc + (len - (sizeof(".ko") - 1)), ".dsc"); - fd = open(module, O_RDONLY); - if (fd < 0) continue; - close(fd); - fd = open(desc, O_RDONLY); - if (fd < 0) { - desc_str[0] = 0; - } - else { - len = read(fd, desc_str, BUFSIZ); - close(fd); - if (len < BUFSIZ) desc_str[len] = 0; - } - if (desc_str[0]) - msgDebug("Loading module %s (%s)\n", dp->d_name, desc_str); - else - msgDebug("Loading module %s\n", dp->d_name); - if (kldload(module) < 0 && errno != EEXIST) { - if (desc_str[0]) - msgConfirm("Loading module %s failed\n%s", dp->d_name, desc_str); - else - msgConfirm("Loading module %s failed", dp->d_name); - } - } - if (strcmp(dp->d_name + dp->d_namlen - (sizeof(".ko.gz") - 1), ".ko.gz") == 0) { - snprintf(module, sizeof(module), "/tmp/%s", dp->d_name); - module[strlen(module) - sizeof(".gz")] = '\0'; - snprintf(desc, sizeof(desc), "zcat < %s/%s > %s", MODULESDIR, - dp->d_name, module); - system(desc); - if (kldload(module) < 0 && errno != EEXIST) { - if (desc_str[0]) - msgConfirm("Loading module %s failed\n%s", dp->d_name, desc_str); - else - msgConfirm("Loading module %s failed", dp->d_name); - } - unlink(module); - } - } - closedir(dirp); - } -} - -void -driverFloppyCheck(void) -{ - /* Prompt for the driver floppy if requested. */ - if (kenv(KENV_GET, "driver_floppy", NULL, 0) >= 0 && - !msgYesNo("Would you like to load kernel modules from the driver floppy?")) - (void)kldBrowser(NULL); -} - -int -kldBrowser(dialogMenuItem *self) -{ - DMenu *menu = NULL; - int i, what = DITEM_SUCCESS, msize, count; - DIR *dir; - struct dirent *de; - char *err; - - err = NULL; - count = 0; - - if (DITEM_STATUS(mediaSetFloppy(NULL)) == DITEM_FAILURE) { - err = "Unable to set media device to floppy."; - goto errout; - } - - if (!DEVICE_INIT(mediaDevice)) { - err = "Unable to mount floppy filesystem."; - goto errout; - } - - msize = sizeof(DMenu) + (sizeof(dialogMenuItem) * 2); - if ((menu = malloc(msize)) == NULL) { - err = "Failed to allocate memory for menu"; - goto errout; - } - - bcopy(&MenuKLD, menu, sizeof(DMenu)); - - bzero(&menu->items[count], sizeof(menu->items[0])); - menu->items[count].prompt = strdup("X Exit"); - menu->items[count].title = strdup("Exit this menu (returning to previous)"); - menu->items[count].fire = dmenuExit; - count++; - - if ((dir = opendir(DISTMOUNT)) == NULL) { - err = "Couldn't open directory"; - goto errout; - } - - while ((de = readdir(dir)) != NULL) { - if (fnmatch("*.ko", de->d_name, FNM_CASEFOLD)) - continue; - - msize += sizeof(dialogMenuItem); - if ((menu = realloc(menu, msize)) == NULL) { - err = "Failed to allocate memory for menu item"; - goto errout; - } - - bzero(&menu->items[count], sizeof(menu->items[0])); - menu->items[count].fire = kldModuleFire; - - menu->items[count].prompt = strdup(de->d_name); - menu->items[count].title = menu->items[count].prompt; - - count++; - } - - closedir(dir); - - menu->items[count].prompt = NULL; - menu->items[count].title = NULL; - - dmenuOpenSimple(menu, FALSE); - - deviceRescan(); - - errout: - mediaClose(); - for (i = 0; i < count; i++) - free(menu->items[i].prompt); - - free(menu); - - if (err != NULL) { - what |= DITEM_FAILURE; - if (!variable_get(VAR_NO_ERROR)) - msgConfirm(err); - } - - return (what); -} - -static int -kldModuleFire(dialogMenuItem *self) { - char fname[256]; - - bzero(fname, sizeof(fname)); - snprintf(fname, sizeof(fname), "%s/%s", DISTMOUNT, self->prompt); - - if (kldload(fname) < 0 && errno != EEXIST) { - if (!variable_get(VAR_NO_ERROR)) - msgConfirm("Loading module %s failed\n", fname); - } else { - if (!variable_get(VAR_NO_ERROR)) - msgConfirm("Loaded module %s OK", fname); - } - - return(0); - } diff --git a/usr.sbin/sysinstall/mouse.c b/usr.sbin/sysinstall/mouse.c deleted file mode 100644 index 574fd72..0000000 --- a/usr.sbin/sysinstall/mouse.c +++ /dev/null @@ -1,103 +0,0 @@ -/*- - * Copyright (c) 1998 Kazutaka YOKOTA (yokota@zodiac.mech.utsunomiya-u.ac.jp) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHRO AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHRO OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "sysinstall.h" -#include <string.h> - -int -mousedTest(dialogMenuItem *self) -{ - char *type; - char *port; - char *flags; - int ret; - - type = variable_get(VAR_MOUSED_TYPE); - port = variable_get(VAR_MOUSED_PORT); - flags = variable_get(VAR_MOUSED_FLAGS); - if ((type == NULL) || (port == NULL) - || (strlen(type) <= 0) || (strlen(port) <= 0) - || (strcmp(type, "NO") == 0)) { - msgConfirm("Please select a mouse protocol and a port first."); - return DITEM_FAILURE; - } - - msgNotify("Trying to start the mouse daemon..."); - if (file_readable("/var/run/moused.pid")) - vsystem("kill `cat /var/run/moused.pid`"); - systemExecute("vidcontrol -m on"); - if (flags != NULL) - vsystem("moused -t %s -p %s %s", type, port, flags); - else - vsystem("moused -t %s -p %s", type, port); - - ret = msgYesNo("Now move the mouse and see if it works.\n" - "(Note that buttons don't have any effect for now.)\n\n" - " Is the mouse cursor moving?\n"); - systemExecute("vidcontrol -m off"); - if (ret) { - if (file_readable("/var/run/moused.pid")) - vsystem("kill `cat /var/run/moused.pid`"); - variable_set2(VAR_MOUSED, "NO", 1); - } else { - variable_set2(VAR_MOUSED, "YES", 1); - vsystem("ln -fs /dev/sysmouse /dev/mouse"); /* backwards compat */ - } - - return DITEM_SUCCESS | DITEM_RESTORE; -} - -int -mousedDisable(dialogMenuItem *self) -{ - if (file_readable("/var/run/moused.pid")) - vsystem("kill `cat /var/run/moused.pid`"); - variable_set2(VAR_MOUSED, "NO", 1); - variable_set2(VAR_MOUSED_TYPE, "NO", 1); - variable_unset(VAR_MOUSED_PORT); - variable_unset(VAR_MOUSED_FLAGS); - msgConfirm("The mouse daemon is disabled."); - return DITEM_SUCCESS; -} - -int -setMouseFlags(dialogMenuItem *self) -{ - int ret; - ret = variable_get_value(VAR_MOUSED_FLAGS, - "Please Specify the mouse daemon flags. If you would like to\n" - "emulate 3 buttons, use -3 here.\n", 1) - ? DITEM_SUCCESS : DITEM_FAILURE; - if (ret != DITEM_SUCCESS) - variable_unset(VAR_MOUSED_FLAGS); - return ret; -} - diff --git a/usr.sbin/sysinstall/msg.c b/usr.sbin/sysinstall/msg.c deleted file mode 100644 index 6e20c60..0000000 --- a/usr.sbin/sysinstall/msg.c +++ /dev/null @@ -1,428 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include <sys/ioctl.h> -#include <sys/consio.h> -#include <sys/types.h> -#include <sys/socket.h> - -#include <netinet/in.h> -#include <netdb.h> - -#include <stdarg.h> -#include <syslog.h> - -#include "sysinstall.h" - -Boolean -isDebug(void) -{ - char *cp; - - return (cp = variable_get(VAR_DEBUG)) && strcmp(cp, "no"); -} - -static Boolean -isNetworkUp(void) -{ - if (!(RunningAsInit) || - (variable_check("NETWORK_CONFIGURED=NO")) != TRUE) { - return TRUE; - } - - return FALSE; -} - -void -msgSyslog(const char *errstr) -{ - struct sockaddr_in server; - struct hostent *hp; - char *host, *line; - int sock; - - if (!isNetworkUp()) - return; - - if (!(host = variable_get(VAR_SYSLOG_SERVER))) - return; - - if (!(hp = gethostbyname2(host, AF_INET))) - return; - - if (!(sock = socket(AF_INET, SOCK_DGRAM, 0))) - return; - - bzero(&server, sizeof(struct sockaddr_in)); - server.sin_family = AF_INET; - server.sin_port = htons(514); - bcopy((char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length); - - asprintf(&line, "<%d>%s", LOG_NOTICE, errstr); - sendto(sock, line, strlen(line), 0, (struct sockaddr *)&server, - sizeof(struct sockaddr_in)); - - close(sock); - free(line); -} - -/* Whack up an informational message on the status line, in stand-out */ -void -msgYap(char *fmt, ...) -{ - va_list args; - char *errstr; - int attrs; - - errstr = (char *)alloca(FILENAME_MAX); - va_start(args, fmt); - vsnprintf(errstr, FILENAME_MAX, fmt, args); - va_end(args); - attrs = getattrs(stdscr); - attrset(A_REVERSE); - mvaddstr(StatusLine, 0, errstr); - attrset(attrs); - refresh(); -} - -/* Whack up an informational message on the status line */ -void -msgInfo(char *fmt, ...) -{ - va_list args; - char *errstr; - int i, attrs; - char line[81]; - - attrs = getattrs(stdscr); - /* NULL is a special convention meaning "erase the old stuff" */ - if (!fmt) { - move(StatusLine, 0); - clrtoeol(); - return; - } - errstr = (char *)alloca(FILENAME_MAX); - va_start(args, fmt); - vsnprintf(errstr, FILENAME_MAX, fmt, args); - va_end(args); - memset(line, ' ', 80); - for (i = 0; i < 80; i++) { - if (errstr[i]) - line[i] = errstr[i]; - else - break; - } - line[80] = '\0'; - attrset(ATTR_TITLE); - mvaddstr(StatusLine, 0, line); - attrset(attrs); - move(StatusLine, 79); - refresh(); - - msgSyslog(errstr); -} - -/* Whack up a warning on the status line */ -void -msgWarn(char *fmt, ...) -{ - va_list args; - char *errstr; - int attrs; - - errstr = (char *)alloca(FILENAME_MAX); - strcpy(errstr, "Warning: "); - va_start(args, fmt); - vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); - va_end(args); - attrs = getattrs(stdscr); - beep(); - attrset(ATTR_TITLE); - mvaddstr(StatusLine, 0, errstr); - attrset(attrs); - refresh(); - - /* we don't want this hitting syslog twice */ - if (isDebug()) { - if (OnVTY) - msgDebug("Warning message `%s'\n", errstr); - else - msgSyslog(errstr); - } - -} - -/* Whack up an error on the status line */ -void -msgError(char *fmt, ...) -{ - va_list args; - char *errstr; - int attrs; - - errstr = (char *)alloca(FILENAME_MAX); - strcpy(errstr, "Error: "); - va_start(args, fmt); - vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); - va_end(args); - beep(); - attrs = getattrs(stdscr); - attrset(ATTR_TITLE); - mvaddstr(StatusLine, 0, errstr); - attrset(attrs); - refresh(); - - /* we don't want this hitting syslog twice */ - if (isDebug()) { - if (OnVTY) - msgDebug("Error message `%s'\n", errstr); - else - msgSyslog(errstr); - } -} - -/* Whack up a fatal error on the status line */ -void -msgFatal(char *fmt, ...) -{ - va_list args; - char *errstr; - int attrs; - - errstr = (char *)alloca(FILENAME_MAX); - strcpy(errstr, "Fatal Error: "); - va_start(args, fmt); - vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); - va_end(args); - beep(); - attrs = getattrs(stdscr); - attrset(ATTR_TITLE); - mvaddstr(StatusLine, 0, errstr); - addstr(" - "); - addstr("PRESS ANY KEY TO "); - if (RunningAsInit) - addstr("REBOOT"); - else - addstr("QUIT"); - attrset(attrs); - refresh(); - if (OnVTY) - msgDebug("Fatal error `%s'!\n", errstr); - else - msgSyslog(errstr); - getch(); - systemShutdown(1); -} - -/* Put up a message in a popup confirmation box */ -void -msgConfirm(char *fmt, ...) -{ - va_list args; - char *errstr; - WINDOW *w = savescr(); - - errstr = (char *)alloca(FILENAME_MAX); - va_start(args, fmt); - vsnprintf(errstr, FILENAME_MAX, fmt, args); - va_end(args); - use_helpline(NULL); - use_helpfile(NULL); - if (OnVTY) { - ioctl(0, VT_ACTIVATE, 1); - msgInfo(NULL); - } - dialog_notify(errstr); - restorescr(w); -} - -/* Put up a message in a popup information box */ -void -msgNotify(char *fmt, ...) -{ - va_list args; - char *errstr; - - errstr = (char *)alloca(FILENAME_MAX); - va_start(args, fmt); - vsnprintf(errstr, FILENAME_MAX, fmt, args); - va_end(args); - use_helpline(NULL); - use_helpfile(NULL); - if (isDebug()) - msgDebug("Notify: %s\n", errstr); - dialog_msgbox(NULL, errstr, -1, -1, 0); -} - -/* Put up a message in a popup yes/no box and return 0 for YES, 1 for NO */ -int -msgYesNo(char *fmt, ...) -{ - va_list args; - char *errstr; - int ret; - WINDOW *w = savescr(); - - errstr = (char *)alloca(FILENAME_MAX); - va_start(args, fmt); - vsnprintf(errstr, FILENAME_MAX, fmt, args); - va_end(args); - use_helpline(NULL); - use_helpfile(NULL); - if (OnVTY) { - ioctl(0, VT_ACTIVATE, 1); /* Switch back */ - msgInfo(NULL); - } - if (variable_get(VAR_NONINTERACTIVE)) - return 0; /* If non-interactive, return YES all the time */ - ret = dialog_yesno("User Confirmation Requested", errstr, -1, -1); - restorescr(w); - return ret; -} - -/* Put up a message in a popup no/yes box and return 0 for YES, 1 for NO */ -int -msgNoYes(char *fmt, ...) -{ - va_list args; - char *errstr; - int ret; - WINDOW *w = savescr(); - - errstr = (char *)alloca(FILENAME_MAX); - va_start(args, fmt); - vsnprintf(errstr, FILENAME_MAX, fmt, args); - va_end(args); - use_helpline(NULL); - use_helpfile(NULL); - if (OnVTY) { - ioctl(0, VT_ACTIVATE, 1); /* Switch back */ - msgInfo(NULL); - } - if (variable_get(VAR_NONINTERACTIVE)) - return 1; /* If non-interactive, return NO all the time */ - ret = dialog_noyes("User Confirmation Requested", errstr, -1, -1); - restorescr(w); - return ret; -} - -/* Put up a message in an input box and return the value */ -char * -msgGetInput(char *buf, char *fmt, ...) -{ - va_list args; - char *errstr; - static char input_buffer[256]; - int rval; - WINDOW *w = savescr(); - - errstr = (char *)alloca(FILENAME_MAX); - va_start(args, fmt); - vsnprintf(errstr, FILENAME_MAX, fmt, args); - va_end(args); - use_helpline(NULL); - use_helpfile(NULL); - if (buf) - SAFE_STRCPY(input_buffer, buf); - else - input_buffer[0] = '\0'; - if (OnVTY) { - ioctl(0, VT_ACTIVATE, 1); /* Switch back */ - msgInfo(NULL); - } - rval = dialog_inputbox("Value Required", errstr, -1, -1, input_buffer); - restorescr(w); - if (!rval) - return input_buffer; - else - return NULL; -} - -/* Write something to the debugging port */ -void -msgDebug(char *fmt, ...) -{ - va_list args; - char *dbg; - - if (DebugFD == -1) - return; - dbg = (char *)alloca(FILENAME_MAX); - strcpy(dbg, "DEBUG: "); - va_start(args, fmt); - vsnprintf((char *)(dbg + strlen(dbg)), FILENAME_MAX, fmt, args); - va_end(args); - - msgSyslog(dbg); - - write(DebugFD, dbg, strlen(dbg)); -} - -/* Tell the user there's some output to go look at */ -void -msgWeHaveOutput(char *fmt, ...) -{ - va_list args; - char *errstr; - WINDOW *w = savescr(); - - errstr = (char *)alloca(FILENAME_MAX); - va_start(args, fmt); - vsnprintf(errstr, FILENAME_MAX, fmt, args); - va_end(args); - use_helpline(NULL); - use_helpfile(NULL); - msgDebug("Notify: %s\n", errstr); - dialog_clear_norefresh(); - sleep(2); - dialog_msgbox(NULL, errstr, -1, -1, 0); - restorescr(w); -} - -/* Simple versions of msgConfirm() and msgNotify() for calling from scripts */ -int -msgSimpleConfirm(char *str) -{ - msgConfirm("%s", str); - return DITEM_SUCCESS; -} - -int -msgSimpleNotify(char *str) -{ - msgNotify("%s", str); - return DITEM_SUCCESS; -} diff --git a/usr.sbin/sysinstall/network.c b/usr.sbin/sysinstall/network.c deleted file mode 100644 index 35599aa..0000000 --- a/usr.sbin/sysinstall/network.c +++ /dev/null @@ -1,149 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/* These routines deal with getting things off of network media */ - -#include "sysinstall.h" -#include <signal.h> -#include <termios.h> -#include <sys/fcntl.h> -#include <sys/ioctl.h> -#include <sys/stat.h> - -static Boolean networkInitialized; - -Boolean -mediaInitNetwork(Device *dev) -{ - int i; - char *rp; - char *cp, ifconfig[255]; - WINDOW *w; - - if (!RunningAsInit || networkInitialized) - return TRUE; - - if (isDebug()) - msgDebug("Init routine called for network device %s.\n", dev->name); - - if (!file_readable("/etc/resolv.conf")) { - if (DITEM_STATUS(configResolv(NULL)) == DITEM_FAILURE) { - msgConfirm("Can't seem to write out /etc/resolv.conf. Net cannot be used."); - return FALSE; - } - } - - w = savescr(); - dialog_clear_norefresh(); - - snprintf(ifconfig, 255, "%s%s", VAR_IFCONFIG, dev->name); - cp = variable_get(ifconfig); - if (cp) { - /* - * If this interface isn't a DHCP one, bring it up. - * If it is, then it's already up. - */ - if (strstr(cp, "DHCP") == NULL) { - msgDebug("Not a DHCP interface.\n"); - i = vsystem("ifconfig %s %s", dev->name, cp); - if (i) { - msgConfirm("Unable to configure the %s interface!\n" - "This installation method cannot be used.", - dev->name); - return FALSE; - } - rp = variable_get(VAR_GATEWAY); - if (!rp || *rp == '0') { - msgConfirm("No gateway has been set. You will be unable to access hosts\n" - "not on your local network"); - } - else { - /* - * Explicitly flush all routes to get back to a known sane - * state. We don't need to check this exit code because if - * anything fails it will show up in the route add below. - */ - system("route -n flush"); - msgDebug("Adding default route to %s.\n", rp); - if (vsystem("route -n add default %s", rp) != 0) { - msgConfirm("Failed to add a default route; please check " - "your network configuration"); - return FALSE; - } - } - } else { - msgDebug("A DHCP interface. Should already be up.\n"); - } - } else if ((cp = variable_get(VAR_IPV6ADDR)) == NULL || *cp == '\0') { - msgConfirm("The %s device is not configured. You will need to do so\n" - "in the Networking configuration menu before proceeding.", dev->name); - return FALSE; - } - - if (isDebug()) - msgDebug("Network initialized successfully.\n"); - networkInitialized = TRUE; - return TRUE; -} - -void -mediaShutdownNetwork(Device *dev) -{ - char *cp; - - if (!RunningAsInit || !networkInitialized) - return; - - msgDebug("Shutdown called for network device %s\n", dev->name); - int i; - char ifconfig[255]; - - snprintf(ifconfig, 255, "%s%s", VAR_IFCONFIG, dev->name); - cp = variable_get(ifconfig); - if (!cp) - return; - msgDebug("ifconfig %s down\n", dev->name); - i = vsystem("ifconfig %s down", dev->name); - if (i) - msgConfirm("Warning: Unable to down the %s interface properly", dev->name); - cp = variable_get(VAR_GATEWAY); - if (cp) { - msgDebug("Deleting default route.\n"); - vsystem("route -n delete default"); - } -} - diff --git a/usr.sbin/sysinstall/nfs.c b/usr.sbin/sysinstall/nfs.c deleted file mode 100644 index 87788ea..0000000 --- a/usr.sbin/sysinstall/nfs.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/errno.h> -#include <sys/fcntl.h> -#include <sys/param.h> -#include <sys/mount.h> - -#include <limits.h> - -Boolean NFSMounted; -static char mountpoint[] = "/dist"; - -Boolean -mediaInitNFS(Device *dev) -{ - Device *netDevice = (Device *)dev->private; - WINDOW *w = savescr(); - - if (NFSMounted) - return TRUE; - - if (!DEVICE_INIT(netDevice)) - return FALSE; - - if (Mkdir(mountpoint)) - return FALSE; - - msgNotify("Mounting %s over NFS on %s", dev->name, mountpoint); - if (vsystem("mount_nfs %s %s %s %s %s %s", - !variable_cmp(VAR_NFS_TCP, "YES") ? "-T" : "", - !variable_cmp(VAR_NFS_V3, "YES") ? "-3" : "", - !variable_cmp(VAR_SLOW_ETHER, "YES") ? - "-r 1024 -w 1024" : "-r 4096 -w 4096", - !variable_cmp(VAR_NFS_SECURE, "YES") ? "-P" : "", - dev->name, mountpoint)) { - msgConfirm("Error mounting %s on %s: %s.", dev->name, mountpoint, strerror(errno)); - if (netDevice) - DEVICE_SHUTDOWN(netDevice); - restorescr(w); - return FALSE; - } - NFSMounted = TRUE; - if (isDebug()) - msgDebug("Mounted NFS device %s onto %s\n", dev->name, mountpoint); - restorescr(w); - return TRUE; -} - -FILE * -mediaGetNFS(Device *dev, char *file, Boolean probe) -{ - return mediaGenericGet(mountpoint, file); -} - -void -mediaShutdownNFS(Device *dev) -{ - if (!NFSMounted) - return; - - msgDebug("Unmounting NFS partition on %s\n", mountpoint); - if (unmount(mountpoint, MNT_FORCE) != 0) - msgConfirm("Could not unmount the NFS partition: %s", strerror(errno)); - NFSMounted = FALSE; - return; -} diff --git a/usr.sbin/sysinstall/options.c b/usr.sbin/sysinstall/options.c deleted file mode 100644 index 33b5031..0000000 --- a/usr.sbin/sysinstall/options.c +++ /dev/null @@ -1,336 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated for what's essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <ctype.h> -#include <curses.h> -#include <term.h> - -int fixitTtyWhich(dialogMenuItem *); - -static char * -varCheck(Option *opt) -{ - char *cp = NULL; - - if (opt->aux) - cp = variable_get((char *)opt->aux); - if (!cp) - return "NO"; - return cp; -} - -/* Show our little logo */ -static char * -resetLogo(Option *opt) -{ - return "[RESET!]"; -} - -static char * -mediaCheck(Option *opt) -{ - if (mediaDevice) { - switch(mediaDevice->type) { - case DEVICE_TYPE_UFS: - case DEVICE_TYPE_DISK: - return "File system"; - - case DEVICE_TYPE_FLOPPY: - return "Floppy"; - - case DEVICE_TYPE_FTP: - return "FTP"; - - case DEVICE_TYPE_CDROM: - return "CDROM"; - - case DEVICE_TYPE_USB: - return "USB"; - - case DEVICE_TYPE_DOS: - return "DOS"; - - case DEVICE_TYPE_NFS: - return "NFS"; - - case DEVICE_TYPE_NONE: - case DEVICE_TYPE_NETWORK: - case DEVICE_TYPE_ANY: - default: - return "<unknown>"; - } - } - return "<not yet set>"; -} - -#define NEWFS_PROMPT "Please enter newfs(8) parameters:" -#define RELNAME_PROMPT "Please specify the release you wish to load or\n\"any\" for a generic release install:" -#define BPKG_PROMPT "Please specify the name of the HTML browser package:" -#define BBIN_PROMPT "Please specify a full pathname to the HTML browser binary:" -#define EDITOR_PROMPT "Please specify the name of the text editor you wish to use:" -#define PKG_PROMPT "Please specify a temporary directory with lots of free space:" -#define INSTROOT_PROMPT "Please specify a root directory if installing somewhere other than /" -#define TIMEOUT_PROMPT "Please specify the number of seconds to wait for slow media:" - -static Option Options[] = { -{ "NFS Secure", "NFS server talks only on a secure port", - OPT_IS_VAR, NULL, VAR_NFS_SECURE, varCheck }, -{ "NFS Slow", "User is using a slow PC or ethernet card", - OPT_IS_VAR, NULL, VAR_SLOW_ETHER, varCheck }, -{ "NFS TCP", "Use TCP protocol for NFS", - OPT_IS_VAR, NULL, VAR_NFS_TCP, varCheck }, -{ "NFS version 3", "Use NFS version 3", - OPT_IS_VAR, NULL, VAR_NFS_V3, varCheck }, -{ "Debugging", "Emit extra debugging output on VTY2 (ALT-F2)", - OPT_IS_VAR, NULL, VAR_DEBUG, varCheck }, -{ "No Warnings", "Don't Warn the user when a setting seems incorrect", - OPT_IS_VAR, NULL, VAR_NO_WARN, varCheck }, -{ "Yes to All", "Assume \"Yes\" answers to all non-critical dialogs", - OPT_IS_VAR, NULL, VAR_NO_CONFIRM, varCheck }, -{ "DHCP", "Attempt automatic DHCP configuration of interfaces", - OPT_IS_VAR, NULL, VAR_TRY_DHCP, varCheck }, -{ "IPv6", "Attempt IPv6 configuration of interfaces", - OPT_IS_VAR, NULL, VAR_TRY_RTSOL, varCheck }, -{ "FTP username", "Username and password to use instead of anonymous", - OPT_IS_FUNC, mediaSetFTPUserPass, VAR_FTP_USER, varCheck }, -{ "Editor", "Which text editor to use during installation", - OPT_IS_VAR, EDITOR_PROMPT, VAR_EDITOR, varCheck }, -{ "Extract Detail", "How verbosely to display file name information during extractions", - OPT_IS_FUNC, mediaSetCPIOVerbosity, VAR_CPIO_VERBOSITY, varCheck }, -{ "Release Name", "Which release to attempt to load from installation media", - OPT_IS_VAR, RELNAME_PROMPT, VAR_RELNAME, varCheck }, -{ "Install Root", "Which directory to unpack distributions or packages relative to", - OPT_IS_VAR, INSTROOT_PROMPT, VAR_INSTALL_ROOT, varCheck }, -{ "Browser package", "This is the browser package that will be used for viewing HTML docs", - OPT_IS_VAR, BPKG_PROMPT, VAR_BROWSER_PACKAGE, varCheck }, -{ "Browser Exec", "This is the path to the main binary of the browser package", - OPT_IS_VAR, BBIN_PROMPT, VAR_BROWSER_BINARY, varCheck }, -{ "Media Type", "The current installation media type.", - OPT_IS_FUNC, mediaGetType, VAR_MEDIA_TYPE, mediaCheck }, -{ "Media Timeout", "Timeout value in seconds for slow media.", - OPT_IS_VAR, TIMEOUT_PROMPT, VAR_MEDIA_TIMEOUT, varCheck }, -{ "Package Temp", "The directory where package temporary files should go", - OPT_IS_VAR, PKG_PROMPT, VAR_PKG_TMPDIR, varCheck }, -{ "Newfs Args", "Default parameters for newfs(8)", - OPT_IS_VAR, NEWFS_PROMPT, VAR_NEWFS_ARGS, varCheck }, -{ "Fixit Console", "Which tty to use for the Fixit action.", - OPT_IS_FUNC, fixitTtyWhich, VAR_FIXIT_TTY, varCheck }, -{ "Re-scan Devices", "Re-run sysinstall's initial device probe", - OPT_IS_FUNC, deviceRescan, NULL, NULL }, -{ "Use Defaults", "Reset all values to startup defaults", - OPT_IS_FUNC, installVarDefaults, NULL, resetLogo }, -{ NULL, NULL, 0, NULL, NULL, NULL }, -}; - -#define OPT_START_ROW 4 -#define OPT_END_ROW 19 -#define OPT_NAME_COL 0 -#define OPT_VALUE_COL 16 -#define GROUP_OFFSET 40 - -static char * -value_of(Option opt) -{ - static char ival[40]; - - switch (opt.type) { - case OPT_IS_STRING: - return (char *)opt.data; - - case OPT_IS_INT: - sprintf(ival, "%lu", (long)opt.data); - return ival; - - case OPT_IS_FUNC: - case OPT_IS_VAR: - if (opt.check) - return opt.check(&opt); - else - return "<*>"; - } - return "<unknown>"; -} - -static int -fire(Option opt) -{ - int status = 0; - - if (opt.type == OPT_IS_FUNC) { - int (*cp)(char *) = opt.data, rcode; - - rcode = cp(NULL); - status = 1; - } - else if (opt.type == OPT_IS_VAR) { - if (opt.data) { - (void)variable_get_value(opt.aux, opt.data, -1); - status = 1; - } - else if (variable_get(opt.aux)) { - if (!variable_cmp(opt.aux, "YES")) - variable_set2(opt.aux, "NO", -1); - else - variable_set2(opt.aux, "YES", -1); - } - else - variable_set2(opt.aux, "YES", 0); - } - if (opt.check) - opt.check(&opt); - refresh(); - return status; -} - -int -optionsEditor(dialogMenuItem *self) -{ - int i, optcol, optrow, key; - static int currOpt = 0; - WINDOW *w = savescr(); - - dialog_clear(); - clear(); - - while (1) { - /* Whap up the header */ - attrset(A_REVERSE); mvaddstr(0, 0, "Options Editor"); attrset(A_NORMAL); - for (i = 0; i < 2; i++) { - mvaddstr(OPT_START_ROW - 2, OPT_NAME_COL + (i * GROUP_OFFSET), "Name"); - mvaddstr(OPT_START_ROW - 1, OPT_NAME_COL + (i * GROUP_OFFSET), "----"); - - mvaddstr(OPT_START_ROW - 2, OPT_VALUE_COL + (i * GROUP_OFFSET), "Value"); - mvaddstr(OPT_START_ROW - 1, OPT_VALUE_COL + (i * GROUP_OFFSET), "-----"); - } - /* And the footer */ - mvprintw(OPT_END_ROW + 1, 0, "Use SPACE to select/toggle an option, arrow keys to move,"); - mvprintw(OPT_END_ROW + 2, 0, "? or F1 for more help. When you're done, type Q to Quit."); - - optrow = OPT_START_ROW; - optcol = OPT_NAME_COL; - for (i = 0; Options[i].name; i++) { - /* Names are painted somewhat gratuitously each time, but it's easier this way */ - mvprintw(optrow, OPT_NAME_COL + optcol, Options[i].name); - if (currOpt == i) - attrset(ATTR_SELECTED); - mvprintw(optrow++, OPT_VALUE_COL + optcol, value_of(Options[i])); - if (currOpt == i) - attrset(A_NORMAL); - if (optrow == OPT_END_ROW) { - optrow = OPT_START_ROW; - optcol += GROUP_OFFSET; - } - clrtoeol(); - } - attrset(ATTR_TITLE); - mvaddstr(OPT_END_ROW + 4, 0, Options[currOpt].desc); - attrset(A_NORMAL); - clrtoeol(); - move(0, 14); - refresh(); - - /* Start the edit loop */ - key = toupper(getch()); - switch (key) { - case KEY_F(1): - case '?': - systemDisplayHelp("options"); - clear(); - break; - - case '\020': /* ^P */ - case KEY_UP: - if (currOpt) - --currOpt; - else - for (currOpt = 0; Options[currOpt + 1].name; currOpt++); - continue; - - case '\016': /* ^N */ - case KEY_DOWN: - if (Options[currOpt + 1].name) - ++currOpt; - else - currOpt = 0; - continue; - - case KEY_HOME: - currOpt = 0; - continue; - - case KEY_END: - while (Options[currOpt + 1].name) - ++currOpt; - continue; - - case ' ': - if (fire(Options[currOpt])) - clear(); - continue; - - case '\033': /* ESC */ - case 'Q': - clear(); - dialog_clear(); - restorescr(w); - return DITEM_SUCCESS | DITEM_CONTINUE; - - default: - beep(); - } - } - /* NOTREACHED */ - return DITEM_SUCCESS; -} - -int -fixitTtyWhich(dialogMenuItem *self) -{ - char *cp = variable_get(VAR_FIXIT_TTY); - - if (!cp) { - msgConfirm("The Fix-it TTY setting is not set to anything!"); - return DITEM_FAILURE; - } - else { - if (!strcmp(cp, "standard")) - variable_set2(VAR_FIXIT_TTY, "serial", 0); - else /* must be "serial" - wrap around */ - variable_set2(VAR_FIXIT_TTY, "standard", 0); - } - return DITEM_SUCCESS; -} diff --git a/usr.sbin/sysinstall/package.c b/usr.sbin/sysinstall/package.c deleted file mode 100644 index 9aa4589..0000000 --- a/usr.sbin/sysinstall/package.c +++ /dev/null @@ -1,270 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "sysinstall.h" -#include <sys/errno.h> -#include <sys/time.h> -#include <sys/param.h> -#include <sys/mount.h> -#include <sys/stat.h> - -static Boolean sigpipe_caught; - -static void -catch_pipe(int sig) -{ - sigpipe_caught = TRUE; -} - -extern PkgNode Top; - -/* Like package_extract, but assumes current media device and chases deps */ -int -package_add(char *name) -{ - PkgNodePtr tmp; - int i, current, low, high; - - if (!mediaVerify()) - return DITEM_FAILURE; - - if (!DEVICE_INIT(mediaDevice)) - return DITEM_FAILURE; - - i = index_initialize("packages/INDEX"); - if (DITEM_STATUS(i) != DITEM_SUCCESS) - return i; - - tmp = index_search(&Top, name, &tmp); - if (tmp) { - if (have_volumes) { - low = low_volume; - high = high_volume; - } else - low = high = 0; - for (current = low; current <= high; current++) - i = index_extract(mediaDevice, &Top, tmp, FALSE, current); - return i; - } else { - msgConfirm("Sorry, package %s was not found in the INDEX.", name); - return DITEM_FAILURE; - } -} - -/* For use by dispatch */ -int -packageAdd(dialogMenuItem *self) -{ - char *cp; - - cp = variable_get(VAR_PACKAGE); - if (!cp) { - msgDebug("packageAdd: No package name passed in package variable\n"); - return DITEM_FAILURE; - } - else - return package_add(cp); -} - -Boolean -package_installed(char *name) -{ - char fname[FILENAME_MAX]; - int status /* = vsystem("pkg_info -e %s", name) */; - - /* XXX KLUDGE ALERT! This makes evil assumptions about how XXX - * packages register themselves and should *really be done with - * `pkg_info -e <name>' except that this it's too slow for an - * item check routine.. :-( - */ - snprintf(fname, FILENAME_MAX, "/var/db/pkg/%s", name); - status = access(fname, R_OK); - if (isDebug()) - msgDebug("package check for %s returns %s.\n", name, status ? "failure" : "success"); - return !status; -} - -/* Extract a package based on a namespec and a media device */ -int -package_extract(Device *dev, char *name, Boolean depended) -{ - char path[MAXPATHLEN]; - const char *PkgExts[] = { "", ".tbz", ".tbz2", ".tgz" }; - int last_msg, pathend, ret; - size_t ext; - FILE *fp; - - last_msg = 0; - - /* Check to make sure it's not already there */ - if (package_installed(name)) - return DITEM_SUCCESS; - - if (!DEVICE_INIT(dev)) { - msgConfirm("Unable to initialize media type for package extract."); - return DITEM_FAILURE; - } - - /* If necessary, initialize the ldconfig hints */ - if (!file_readable("/var/run/ld-elf.so.hints")) - vsystem("ldconfig /usr/lib /usr/lib/compat /usr/local/lib"); - - /* Be initially optimistic */ - ret = DITEM_SUCCESS; - /* Make a couple of paranoid locations for temp files to live if user specified none */ - if (!variable_get(VAR_PKG_TMPDIR)) { - /* Set it to a location with as much space as possible */ - variable_set2(VAR_PKG_TMPDIR, "/var/tmp", 0); - } - Mkdir(variable_get(VAR_PKG_TMPDIR)); - vsystem("chmod 1777 %s", variable_get(VAR_PKG_TMPDIR)); - - if (!index(name, '/')) { - if (!strpbrk(name, "-_")) - pathend = snprintf(path, sizeof path, "packages/Latest/%s", name); - else - pathend = snprintf(path, sizeof path, "packages/All/%s", name); - } - else - pathend = snprintf(path, sizeof path, "%s", name); - - /* We have a path, call the device strategy routine to get the file */ - for (ext = 0 ; ext < sizeof PkgExts / sizeof PkgExts[0]; ++ext) { - strlcpy(path + pathend, PkgExts[ext], sizeof path - pathend); - if ((fp = DEVICE_GET(dev, path, TRUE))) - break; - } - - if (fp) { - int i = 0, tot, pfd[2]; - pid_t pid; - WINDOW *w = savescr(); - - sigpipe_caught = FALSE; - signal(SIGPIPE, catch_pipe); - - dialog_clear_norefresh(); - msgNotify("Adding %s%s\nfrom %s", path, depended ? " (as a dependency)" : "", dev->name); - pipe(pfd); - pid = fork(); - if (!pid) { - dup2(pfd[0], 0); close(pfd[0]); - dup2(DebugFD, 1); dup2(1, 2); - close(pfd[1]); - - /* Prevent pkg_add from wanting to interact in bad ways */ - setenv("BATCH", "t", 1); - - if (isDebug()) - i = execl("/usr/sbin/pkg_add", "/usr/sbin/pkg_add", "-v", "-", - (char *)0); - else - i = execl("/usr/sbin/pkg_add", "/usr/sbin/pkg_add", "-", - (char *)0); - } - else { - char buf[BUFSIZ]; - struct timeval start, stop; - - close(pfd[0]); - tot = 0; - (void)gettimeofday(&start, (struct timezone *)0); - - while (!sigpipe_caught && (i = fread(buf, 1, BUFSIZ, fp)) > 0) { - int seconds; - - tot += i; - /* Print statistics about how we're doing */ - (void) gettimeofday(&stop, (struct timezone *)0); - stop.tv_sec = stop.tv_sec - start.tv_sec; - stop.tv_usec = stop.tv_usec - start.tv_usec; - if (stop.tv_usec < 0) - stop.tv_sec--, stop.tv_usec += 1000000; - seconds = stop.tv_sec + (stop.tv_usec / 1000000.0); - if (!seconds) - seconds = 1; - if (seconds != last_msg) { - last_msg = seconds; - msgInfo("%10d bytes read from package %s @ %4.1f KBytes/second", tot, name, (tot / seconds) / 1000.0); - } - /* Write it out */ - if (sigpipe_caught || write(pfd[1], buf, i) != i) { - msgInfo("Write failure to pkg_add! Package may be corrupt."); - break; - } - } - close(pfd[1]); - fclose(fp); - if (sigpipe_caught) - msgInfo("pkg_add(1) apparently did not like the %s package.", name); - else if (i == -1) - msgInfo("I/O error while reading in the %s package.", name); - else - msgInfo("Package %s read successfully - waiting for pkg_add(1)", name); - refresh(); - i = waitpid(pid, &tot, 0); - dialog_clear_norefresh(); - if (sigpipe_caught || i < 0 || WEXITSTATUS(tot)) { - ret = DITEM_FAILURE; - if (variable_get(VAR_NO_CONFIRM)) - msgNotify("Add of package %s aborted, error code %d -\n" - "Please check the debug screen for more info.", name, WEXITSTATUS(tot)); - else - msgConfirm("Add of package %s aborted, error code %d -\n" - "Please check the debug screen for more info.", name, WEXITSTATUS(tot)); - } - else - msgNotify("Package %s was added successfully", name); - - /* Now catch any stragglers */ - while (wait3(&tot, WNOHANG, NULL) > 0); - - sleep(1); - restorescr(w); - } - } - else { - dialog_clear_norefresh(); - if (variable_get(VAR_NO_CONFIRM)) - msgNotify("Unable to fetch package %s from selected media.\n" - "No package add will be done.", name); - else - msgConfirm("Unable to fetch package %s from selected media.\n" - "No package add will be done.", name); - ret = DITEM_FAILURE; - } - signal(SIGPIPE, SIG_IGN); - return ret; -} diff --git a/usr.sbin/sysinstall/rtermcap.c b/usr.sbin/sysinstall/rtermcap.c deleted file mode 100644 index 84b3feb..0000000 --- a/usr.sbin/sysinstall/rtermcap.c +++ /dev/null @@ -1,15 +0,0 @@ -#include <stdio.h> -#include <termcap.h> - -int -main(int argc, char **argv) -{ - char buf[4096]; - int i; - - if (argc < 2) - return 1; - i = tgetent(buf, argv[1]); - printf("%s",buf); - return 0; -} diff --git a/usr.sbin/sysinstall/sysinstall.8 b/usr.sbin/sysinstall/sysinstall.8 deleted file mode 100644 index ad6760c..0000000 --- a/usr.sbin/sysinstall/sysinstall.8 +++ /dev/null @@ -1,899 +0,0 @@ -.\" Copyright (c) 1997 -.\" Jordan Hubbard <jkh@FreeBSD.org>. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY Jordan Hubbard AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL Jordan Hubbard OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd February 18, 2007 -.Dt SYSINSTALL 8 -.Os -.Sh NAME -.Nm sysinstall -.Nd system installation and configuration tool -.Sh SYNOPSIS -.Nm -.Op Ar var=value -.Op Ar function -.Op Ar ... -.Sh DESCRIPTION -The -.Nm -utility is used for installing and configuring -.Fx -systems. -It is the first utility invoked by the -.Fx -installation boot -floppy and is also available as -.Pa /usr/sbin/sysinstall -on newly installed -.Fx -systems for use in later configuring the system. -.Pp -The -.Nm -utility is generally invoked without arguments for the default -behavior, where the main installation/configuration menu is presented. -.Pp -On those occasions where it is deemed necessary to invoke a subsystem -of sysinstall directly, however, it is also possible to do so by -naming the appropriate function entry points on the command line. -Since this action is essentially identical to running an installation -script, each command-line argument corresponding to a line of script, -the reader is encouraged to read the section on scripting for more -information on this feature. -.Sh NOTES -The -.Nm -utility is essentially nothing more than a monolithic C program with -the ability to write MBRs and disk labels (through the services -of the -.Xr libdisk 3 -library) and install distributions or packages onto new and -existing -.Fx -systems. -It also contains some extra intelligence -for running as a replacement for -.Xr init 8 -when it is invoked by the -.Fx -installation boot procedure. -It -assumes very little in the way of additional utility support and -performs most file system operations by calling the relevant syscalls -(such as -.Xr mount 2 ) -directly. -.Pp -The -.Nm -utility currently uses the -.Xr dialog 3 -library to do user interaction with simple ANSI line graphics, color -support for which is enabled by either running on a syscons VTY or some -other color-capable terminal emulator (newer versions of xterm will support -color when using the -.Dq xterm-color -termcap entry). -.Pp -This product is currently at the end of its life cycle and will -eventually be replaced. -.Sh RUNNING SCRIPTS -The -.Nm -utility may be either driven interactively through its various internal menus -or run in batch mode, driven by an external script. -Such a script may -be loaded and executed in one of 3 ways: -.Bl -tag -width Ds -.It Sy "LOAD_CONFIG_FILE" -If -.Nm -is compiled with LOAD_CONFIG_FILE set in the environment -(or in the Makefile) to some value, then that value will -be used as the filename to automatically look for and load -when -.Nm -starts up and with no user interaction required. -This option is aimed primarily at large sites who wish to create a -single prototype install for multiple machines with largely identical -configurations and/or installation options. -.It Sy "MAIN MENU" -If -.Nm -is run interactively, that is to say in the default manner, it will -bring up a main menu which contains a "load config file" option. -Selecting this option will prompt for the name of a script file which -it then will attempt to load from a DOS or UFS formatted floppy. -.It Sy "COMMAND LINE" -Each command line argument is treated as a script directive -when -.Nm -is run in multi-user mode. -Execution ends either by explicit request -(e.g.\& calling the -.Ar shutdown -directive), upon reaching the end of the argument list or on error. -.Pp -For example: -.Bd -literal -/usr/sbin/sysinstall _ftpPath=ftp://ziggy/pub/ mediaSetFTP configPackages -.Ed -.Pp -Would initialize -.Nm -for FTP installation media (using the server `ziggy') and then -bring up the package installation editor, exiting when finished. -.El -.Sh SCRIPT SYNTAX -A script is a list of one or more directives, each directive taking -the form of: -.Pp -.Ar var=value -.Pp -.Ar function -.Pp -or -.Ar #somecomment -.Pp -Where -.Ar var=value -is the assignment of some internal -.Nm -variable, e.g.\& "ftpPass=FuNkYChiKn", and -.Ar function -is the name of an internal -.Nm -function, e.g.\& "mediaSetFTP", and -.Ar #comment -is a single-line comment for documentation purposes (ignored by -sysinstall). -Each directive must be by itself on a single line, -functions taking their arguments by examining known variable names. -This requires that you be sure to assign the relevant variables before -calling a function which requires them. -.Pp -The -.Ar noError -variable can be assigned before each directive: this will cause any error -detected while processing the directive itself to be ignored. -The value of -.Ar noError -will automatically reset to the default "unassigned" every time a directive is -processed. -.Pp -When and where a function depends on the settings of one or more variables -will be noted in the following table: -.Pp -.Sy "Function Glossary" : -.Bl -tag -width indent -.It configAnonFTP -Invoke the Anonymous FTP configuration menu. -.Pp -.Sy Variables : -None -.It configRouter -Select which routing daemon you wish to use, potentially -loading any required 3rd-party routing daemons as necessary. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It router -can be set to the name of the desired routing daemon, -e.g.\& -.Dq routed -or -.Dq gated , -otherwise it is prompted for. -.El -.It configNFSServer -Configure host as an NFS server. -.Pp -.Sy Variables : -None -.It configNTP -Configure host as a user of the Network Time Protocol. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It ntpdate_hosts -Whitespace-separated list of -.Xr ntpdate 8 -servers to sync from. -.El -.It configPCNFSD -Configure host to support PC NFS. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It pcnfsd_pkg -The name of the PCNFSD package to load if necessary (defaults to hard coded -version). -.El -.It configPackages -Bring up the interactive package management menu. -.Pp -.Sy Variables : -None -.It configUsers -Add users and/or groups to the system. -.Pp -.Sy Variables : -None -.It diskPartitionEditor -Invokes the disk partition (MBR) editor. -.Pp -.Sy Variables : -.Bl -tag -width findx -.It geometry -The disk geometry, as a cyls/heads/sectors formatted string. -The word "sane" instructs -.Nm -to calculate a safe (not necessarily optimal) geometry if the -current one has more than 65535 cylinders, more than 256 heads or -more than 63 sectors per track (255 sectors on the PC98 -architecture). -Default: no -change to geometry. -.It partition -Set to disk partitioning type or size, its value being -.Ar free -in order to use only remaining free space for -.Fx , -.Ar all -to use the entire disk for -.Fx -but maintain a proper partition -table, -.Ar existing -to use an existing -.Fx -partition (first found), -.Ar exclusive -to use the disk in -.Dq dangerously dedicated -mode or, finally, -.Ar somenumber -to allocate -.Ar somenumber -blocks of available free space to a new -.Fx -partition. -Default: Interactive mode. -.It bootManager -is set to one of -.Ar boot -to signify the installation of a boot manager, -.Ar standard -to signify installation of a "standard" non-boot MGR DOS -MBR or -.Ar none -to indicate that no change to the boot manager is desired. -Default: none. -.It diskInteractive -If set, bring up the interactive disk partition editor. -.El -.Pp -Note: Nothing is actually written to disk by this function, an explicit call to -.Ar diskPartitionWrite -being required for that to happen. -.It diskPartitionWrite -Causes any pending MBR changes (typically from the -.Ar diskPartitionEditor -function) to be written out. -.Pp -.Sy Variables : -None -.It diskLabelEditor -Invokes the disk label editor. -This is a bit trickier from a script -since you need to essentially label everything inside each -.Fx -(type 0xA5) partition created by the -.Ar diskPartitionEditor -function, and that requires knowing a few rules about how things are -laid out. -When creating a script to automatically allocate disk space -and partition it up, it is suggested that you first perform the -installation interactively at least once and take careful notes as to -what the slice names will be, then and only then hardwiring them into -the script. -.Pp -For example, let's say you have a SCSI disk on which you have created a new -.Fx -partition in slice 2 (your DOS partition residing in slice 1). -The slice name would be -.Ar da0s2 -for the whole -.Fx -partition -.Ar ( da0s1 -being your DOS primary -partition). -Now let's further assume that you have 4GB in this -partition and you want to sub-partition that space into root, swap, -var and usr file systems for -.Fx . -Your invocation of the -.Ar diskLabelEditor -function might involve setting the following variables: -.Bl -tag -width findx -.It Li "da0s2-1=ufs 2097152 /" -A 1GB root file system (all sizes are in 512 byte blocks). -.It Li "da0s2-2=swap 1048576 /" -A 512MB swap partition. -.It Li "da0s2-3=ufs 524288 /var" -A 256MB /var file system. -.It Li "da0s2-4=ufs 0 /usr 1" -With the balance of free space (around 2.25GB) going to the /usr -file system and with soft-updates enabled (the argument following -the mount point, if non-zero, means to set the soft updates flag). -.El -.Pp -One can also use the -.Ar diskLabelEditor -for mounting or erasing existing partitions as well as creating new -ones. -Using the previous example again, let's say that we also wanted -to mount our DOS partition and make sure that an -.Pa /etc/fstab -entry is created for it in the new installation. -Before calling the -.Ar diskLabelEditor -function, we simply add an additional line: -.Pp -.Dl "da0s1=/dos_c N" -.Pp -before the call. -This tells the label editor that you want to mount -the first slice on -.Pa /dos_c -and not to attempt to newfs it (not that -.Nm -would attempt this for a DOS partition in any case, but it could just -as easily be an existing UFS partition being named here and the 2nd -field is non-optional). -.Pp -You can also set the -.Ar diskInteractive -variable to request that the disk label editor use an interactive dialog -to partition the disk instead of using variables to explicitly layout the -disk as described above. -.Pp -Note: No file system data is actually written to disk until an -explicit call to -.Ar diskLabelCommit -is made. -.It diskLabelCommit -Writes out all pending disklabel information and creates and/or mounts any -file systems which have requests pending from the -.Ar diskLabelEditor -function. -.Pp -.Sy Variables : -None -.It distReset -Resets all selected distributions to the empty set (no distributions selected). -.Pp -.Sy Variables : -None -.It distSetCustom -Allows the selection of a custom distribution set (e.g.\& not just one of the -existing "canned" sets) with no user interaction. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It dists -List of distributions to load. -Possible distribution values are: -.Bl -tag -width indentxx -.It Li base -The base binary distribution. -.It Li GENERIC -The GENERIC kernel. -.It Li doc -Miscellaneous documentation -.It Li games -Games -.It Li manpages -Manual pages (unformatted) -.It Li catpages -Pre-formatted manual pages -.It Li proflibs -Profiled libraries for developers. -.It Li dict -Dictionary information (for tools like spell). -.It Li info -GNU info files and other extra docs. -.It Li lib32 -(amd64 and powerpc64 only) -32-bit runtime compatibility libraries. -.It Li ports -The ports collection. -.It Li ssecure -/usr/src/secure -.It Li sbase -/usr/src/[top level files] -.It Li scontrib -/usr/src/contrib -.It Li scrypto -/usr/src/crypto -.It Li sgnu -/usr/src/gnu -.It Li setc -/usr/src/etc -.It Li sgames -/usr/src/games -.It Li sinclude -/usr/src/include -.It Li skrb5 -/usr/src/kerberos5 -.It Li slib -/usr/src/lib -.It Li slibexec -/usr/src/libexec -.It Li srelease -/usr/src/release -.It Li srescue -/usr/src/rescue -.It Li stools -/usr/src/tools -.It Li sbin -/usr/src/bin -.It Li ssbin -/usr/src/sbin -.It Li sshare -/usr/src/share -.It Li ssys -/usr/src/sys -.It Li stools -/usr/src/tools -.It Li subin -/usr/src/usr.bin -.It Li susbin -/usr/src/usr.sbin -.It Li local -Local additions collection. -.El -.El -.It distSetDeveloper -Selects the standard Developer's distribution set. -.Pp -.Sy Variables : -None -.It distSetUser -Selects the standard user distribution set. -.Pp -.Sy Variables : -None -.It distSetMinimum -Selects the very minimum distribution set. -.Pp -.Sy Variables : -None -.It distSetEverything -Selects the full whack - all available distributions. -.Pp -.Sy Variables : -None -.It distSetSrc -Interactively select source subcomponents. -.Pp -.Sy Variables : -None -.It distExtractAll -Install all currently selected distributions (requires that -media device also be selected). -.Pp -.Sy Variables : -None -.It docBrowser -Install (if necessary) an HTML documentation browser and go to the -HTML documentation submenu. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It browserPackage -The name of the browser package to try and install as necessary. -Defaults to latest links package. -.It browserBinary -The name of the browser binary itself (if overriding the -.Ar browserPackage -variable). -Defaults to links. -.El -.It installCommit -Commit any and all pending changes to disk. -This function -is essentially shorthand for a number of more granular "commit" -functions. -.Pp -.Sy Variables : -None -.It installConfigure -Commit any rc.conf changes to disk. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It keeprcconf -Preserve existing rc.conf parameters. -This is useful if you have a post-install script which modifies rc.conf. -.El -.It installExpress -Start an "express" installation, asking few questions of -the user. -.Pp -.Sy Variables : -None -.It installStandard -Start a "standard" installation, the most user-friendly -installation type available. -.Pp -.Sy Variables : -None -.It installUpgrade -Start an upgrade installation. -.Pp -.Sy Variables : -None -.It installFixitHoloShell -Start up the "emergency holographic shell" over on VTY4 -if running as init. -This will also happen automatically -as part of the installation process unless -.Ar noHoloShell -is set. -.Pp -.Sy Variables : -None -.It installFixitCDROM -Go into "fixit" mode, assuming a live file system CDROM -currently in the drive. -.Pp -.Sy Variables : -None -.It installFixitFloppy -Go into "fixit" mode, assuming an available fixit floppy -disk (user will be prompted for it). -.Pp -.Sy Variables : -None -.It installFilesystems -Do just the file system initialization part of an install. -.Pp -.Sy Variables : -None -.It installVarDefaults -Initialize all variables to their defaults, overriding any -previous settings. -.Pp -.Sy Variables : -None -.It loadConfig -Sort of like an #include statement, it allows you to load one -configuration file from another. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It configFile -The fully qualified pathname of the file to load. -.El -.It mediaOpen -If a media device is set, mount it. -.Pp -.Sy Variables : -None -.It mediaClose -If a media device is open, close it. -.Pp -.Sy Variables : -None -.It mediaSetCDROM -Select a -.Fx -CDROM as the installation media. -.Pp -.Sy Variables : -None -.It mediaSetFloppy -Select a pre-made floppy installation set as the installation media. -.Pp -.Sy Variables : -None -.It mediaSetDOS -Select an existing DOS primary partition as the installation media. -The first primary partition found is used (e.g.\& C:). -.Pp -.Sy Variables : -None -.It mediaSetFTP -Select an FTP site as the installation media. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It hostname -The name of the host being installed (non-optional). -.It domainname -The domain name of the host being installed (optional). -.It defaultrouter -The default router for this host (non-optional). -.It netDev -Which network interface to use. -Multiple network interfaces may be specified using a comma delimited list. -If netDev is set to ANY, all available network interfaces will be probed and the -first interface found to have a link will be used. (non-optional). -.It netInteractive -If set, bring up the interactive network setup form even -if all relevant configuration variables are already set (optional). -.It ipaddr -The IP address for the selected host interface (non-optional). -.It netmask -The netmask for the selected host interface (non-optional). -.It _ftpPath -The fully qualified URL of the FTP site containing the -.Fx -distribution you are interested in, e.g.\& -.Ar ftp://ftp.FreeBSD.org/pub/FreeBSD/ . -.El -.It mediaSetFTPActive -Alias for -.Ar mediaSetFTP -using "active" FTP transfer mode. -.Pp -.Sy Variables : -Same as for -.Ar mediaSetFTP . -.It mediaSetFTPPassive -Alias for -.Ar mediaSetFTP -using "passive" FTP transfer mode. -.Pp -.Sy Variables : -Same as for -.Ar mediaSetFTP . -.It mediaSetHTTP -Alias for -.Ar mediaSetFTP -using an HTTP proxy. -.Pp -.Sy Variables : -See -.Ar mediaSetFTP , -plus -.Bl -tag -width indent -.It _httpPath -The proxy to use (host:port) (non-optional). -.El -.It mediaSetUFS -Select an existing UFS partition (mounted with the label editor) as -the installation media. -.Pp -.Sy Variables : -.Bl -tag -width indent -.It ufs -full /path to directory containing the -.Fx -distribution you are -interested in. -.El -.It mediaSetNFS -.Pp -.Sy Variables : -.Bl -tag -width indent -.It hostname -The name of the host being installed (non-optional). -.It domainname -The domain name of the host being installed (optional). -.It defaultrouter -The default router for this host (non-optional). -.It netDev -Which host interface to use -.Ar ( ed0 -or -.Ar ep0 , -for example. -Non-optional). -.It netInteractive -If set, bring up the interactive network setup form even -if all relevant configuration variables are already set (optional). -.It ipaddr -The IP address for the selected host interface (non-optional). -.It netmask -The netmask for the selected host interface (non-optional). -.It nfs -full hostname:/path specification for directory containing -the -.Fx -distribution you are interested in. -.El -.It mediaSetFTPUserPass -.Pp -.Sy Variables : -.Bl -tag -width indent -.It ftpUser -The username to log in as on the ftp server site. -Default: ftp -.It ftpPass -The password to use for this username on the ftp -server site. -Default: user@host -.El -.It mediaSetCPIOVerbosity -.Pp -.Sy Variables : -.Bl -tag -width indent -.It cpioVerbose -Can be used to set the verbosity of cpio extractions to low or high. -.El -.It mediaGetType -Interactively get the user to specify some type of media. -.Pp -.Sy Variables : -None -.It optionsEditor -Invoke the interactive options editor. -.Pp -.Sy Variables : -None -.It packageAdd -Try to fetch and add a package to the system (requires -that a media type be set), -.Pp -.Sy Variables : -.Bl -tag -width indent -.It package -The name of the package to add, e.g.\& bash-1.14.7 or ncftp-2.4.2. -.El -.It addGroup -Invoke the interactive group editor. -.Pp -.Sy Variables : -None -.It addUser -Invoke the interactive user editor. -.Pp -.Sy Variables : -None -.It shutdown -Stop the script, terminate sysinstall and reboot the system. -On the sparc64 platform, the system is halted rather than rebooted. -.Pp -.Sy Variables : -None -.It system -Execute an arbitrary command with -.Xr system 3 -.Pp -.Sy Variables : -.Bl -tag -width indent -.It command -The name of the command to execute. -When running -from a boot floppy, very minimal expectations should -be made as to what is available until/unless a relatively -full system installation has just been done. -.El -.It tcpMenuSelect -Configure a network device. -.Pp -.Sy Variables : -Same as for -.Ar mediaSetFTP -except that -.Ar _ftpPath -is not used. -.El -.Sh DISTRIBUTION MEDIA -The following files can be used to affect the operation of -.Nm -when used during initial system installation. -.Bl -tag -width ".Pa packages/INDEX" -.It Pa cdrom.inf -A text file of properties, listed one per line, that describe the -contents of the media in use. -The syntax for each line is simply -.Dq Ar property No = Ar value . -Currently, only the following properties are recognized. -.Bl -tag -width ".Va CD_MACHINE_ARCH" -.It Va CD_VERSION -This property should be set to the -.Fx -version on the current -media volume. -For example, -.Dq Li "CD_VERSION = 5.3" . -.It Va CD_MACHINE_ARCH -This property should be set to the architecture of the contents on -this volume. -This property is normally only used with -.Fx -products that contain -CDs for different architectures, to provide better error messages if -users try to install packages built for the wrong architecture. -For example, -.Dq Li "CD_MACHINE_ARCH = amd64" . -.It Va CD_VOLUME -In a multi-volume collection (such as the -.Fx -4-CD set), the -.Pa ports/INDEX -file on each disc should contain the full package index for the set. -The last field of the -.Pa INDEX -file denotes which volume the package -appears on, and the -.Va CD_VOLUME -property here defines the volume ID of the current disc. -.El -.It Pa packages/INDEX -The package index file. -Each package is listed on a separate line with additional meta-data -such as the required dependencies. -This index is generated by -.Dq Li "make index" -from the -.Xr ports 7 -collection. -When multi-volume support is enabled, an additional field should be -added to each line indicating which media volume contains the given -package. -.El -.Pp -For information about building a full release of -.Fx , -please see -.Xr release 7 . -.Sh FILES -This utility may edit the contents of -.Pa /etc/rc.conf , -.Pa /etc/hosts , -and -.Pa /etc/resolv.conf -as necessary to reflect changes in the network configuration. -.Sh SEE ALSO -If you have a reasonably complete source tree online, take -a look at -.Pa /usr/src/usr.sbin/sysinstall/install.cfg -for a sample installation script. -.Sh HISTORY -This version of -.Nm -first appeared in -.Fx 2.0 . -.Sh AUTHORS -.An Jordan K. Hubbard Aq jkh@FreeBSD.org -.Sh BUGS -Editing slice and partition tables on disks which are currently mounted by -the system is not allowed. -This is generally only a problem when -.Nm -is run on a system that is already installed. -Use -.Xr fdisk 8 -and -.Xr bsdlabel 8 -for these tasks. -.Pp -There are a (great) number of undocumented variables. -UTSL. diff --git a/usr.sbin/sysinstall/sysinstall.h b/usr.sbin/sysinstall/sysinstall.h deleted file mode 100644 index d5f4b32..0000000 --- a/usr.sbin/sysinstall/sysinstall.h +++ /dev/null @@ -1,895 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _SYSINSTALL_H_INCLUDE -#define _SYSINSTALL_H_INCLUDE - -#include <sys/types.h> -#include <sys/wait.h> -#include <errno.h> -#include <setjmp.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <dialog.h> -#include "ui_objects.h" -#include "dir.h" -#include "colors.h" -#include "dist.h" - -/*** Defines ***/ - -#if defined(__i386__) || defined(__amd64__) -#define WITH_SYSCONS -#define WITH_MICE -#endif - -#if defined(__i386__) || defined(__amd64__) -#define WITH_SLICES -#endif - -/* device limits */ -#define DEV_NAME_MAX 128 /* The maximum length of a device name */ -#define DEV_MAX 100 /* The maximum number of devices we'll deal with */ -#define INTERFACE_MAX 50 /* Maximum number of network interfaces we'll deal with */ -#define IO_ERROR -2 /* Status code for I/O error rather than normal EOF */ - -/* Number of seconds to wait for data to come off even the slowest media */ -#define MEDIA_TIMEOUT 300 - -/* - * I make some pretty gross assumptions about having a max of 50 chunks - * total - 8 slices and 42 partitions. I can't easily display many more - * than that on the screen at once! - * - * For 2.1 I'll revisit this and try to make it more dynamic, but since - * this will catch 99.99% of all possible cases, I'm not too worried. - */ -#define MAX_CHUNKS 40 - -/* Internal environment variable names */ -#define DISK_PARTITIONED "_diskPartitioned" -#define DISK_LABELLED "_diskLabelled" -#define DISK_SELECTED "_diskSelected" -#define SYSTEM_STATE "_systemState" -#define RUNNING_ON_ROOT "_runningOnRoot" -#define TCP_CONFIGURED "_tcpConfigured" - -/* Ones that can be tweaked from config files */ -#define VAR_BLANKTIME "blanktime" -#define VAR_BOOTMGR "bootManager" -#define VAR_BROWSER_BINARY "browserBinary" -#define VAR_BROWSER_PACKAGE "browserPackage" -#define VAR_COUNTRY "country" -#define VAR_CPIO_VERBOSITY "cpioVerbose" -#define VAR_DEBUG "debug" -#define VAR_DESKSTYLE "_deskStyle" -#define VAR_DISK "disk" -#define VAR_DISKINTERACTIVE "diskInteractive" -#define VAR_DISTS "dists" -#define VAR_DIST_MAIN "distMain" -#define VAR_DIST_SRC "distSRC" -#define VAR_DIST_KERNEL "distKernel" -#define VAR_DIST_DOC "distDoc" -#define VAR_DEDICATE_DISK "dedicateDisk" -#define VAR_DOMAINNAME "domainname" -#define VAR_EDITOR "editor" -#define VAR_EXTRAS "ifconfig_" -#define VAR_COMMAND "command" -#define VAR_CONFIG_FILE "configFile" -#define VAR_FIXIT_TTY "fixitTty" -#define VAR_FTP_DIR "ftpDirectory" -#define VAR_FTP_PASS "ftpPass" -#define VAR_FTP_PATH "_ftpPath" -#define VAR_FTP_PORT "ftpPort" -#define VAR_FTP_STATE "ftpState" -#define VAR_FTP_USER "ftpUser" -#define VAR_FTP_HOST "ftpHost" -#define VAR_HTTP_PATH "_httpPath" -#define VAR_HTTP_PROXY "httpProxy" -#define VAR_HTTP_PORT "httpPort" -#define VAR_HTTP_HOST "httpHost" -#define VAR_HTTP_FTP_MODE "httpFtpMode" -#define VAR_GATEWAY "defaultrouter" -#define VAR_GEOMETRY "geometry" -#define VAR_HOSTNAME "hostname" -#define VAR_IFCONFIG "ifconfig_" -#define VAR_INSTALL_CFG "installConfig" -#define VAR_INSTALL_ROOT "installRoot" -#define VAR_IPADDR "ipaddr" -#define VAR_IPV6_ENABLE "ipv6_activate_all_interfaces" -#define VAR_IPV6ADDR "ipv6addr" -#define VAR_KERN_SECURELEVEL "kern_securelevel" -#define VAR_KEYMAP "keymap" -#define VAR_LABEL "label" -#define VAR_LABEL_COUNT "labelCount" -#define VAR_LINUX_ENABLE "linux_enable" -#define VAR_MEDIA_TYPE "mediaType" -#define VAR_MEDIA_TIMEOUT "MEDIA_TIMEOUT" -#define VAR_MOUSED "moused_enable" -#define VAR_MOUSED_FLAGS "moused_flags" -#define VAR_MOUSED_PORT "moused_port" -#define VAR_MOUSED_TYPE "moused_type" -#define VAR_NAMESERVER "nameserver" -#define VAR_NCPUS "ncpus" -#define VAR_NETINTERACTIVE "netInteractive" -#define VAR_NETMASK "netmask" -#define VAR_NETWORK_DEVICE "netDev" -#define VAR_NEWFS_ARGS "newfsArgs" -#define VAR_NFS_PATH "nfs" -#define VAR_NFS_HOST "nfsHost" -#define VAR_NFS_V3 "nfs_use_v3" -#define VAR_NFS_TCP "nfs_use_tcp" -#define VAR_NFS_SECURE "nfs_reserved_port_only" -#define VAR_NFS_SERVER "nfs_server_enable" -#define VAR_NO_CONFIRM "noConfirm" -#define VAR_NO_ERROR "noError" -#define VAR_NO_HOLOSHELL "noHoloShell" -#define VAR_NO_INET6 "noInet6" -#define VAR_NO_WARN "noWarn" -#define VAR_NO_USR "noUsr" -#define VAR_NO_TMP "noTmp" -#define VAR_NO_HOME "noHome" -#define VAR_NONINTERACTIVE "nonInteractive" -#define VAR_NOVELL "novell" -#define VAR_RPCBIND_ENABLE "rpcbind_enable" -#define VAR_NTPDATE_HOSTS "ntpdate_hosts" -#define VAR_PACKAGE "package" -#define VAR_PARTITION "partition" -#define VAR_PCNFSD "pcnfsd" -#define VAR_PKG_TMPDIR "PKG_TMPDIR" -#define VAR_PORTS_PATH "ports" -#define VAR_PPP_ENABLE "ppp_enable" -#define VAR_PPP_PROFILE "ppp_profile" -#define VAR_RELNAME "releaseName" -#define VAR_ROOT_SIZE "rootSize" -#define VAR_ROUTER "router" -#define VAR_ROUTER_ENABLE "router_enable" -#define VAR_ROUTERFLAGS "router_flags" -#define VAR_SENDMAIL_ENABLE "sendmail_enable" -#define VAR_SERIAL_SPEED "serialSpeed" -#define VAR_SLOW_ETHER "slowEthernetCard" -#define VAR_SWAP_SIZE "swapSize" -#define VAR_SYSLOG_SERVER "syslogdServer" -#define VAR_TRY_DHCP "tryDHCP" -#define VAR_TRY_RTSOL "tryRTSOL" -#define VAR_UFS_PATH "ufs" -#define VAR_USR_SIZE "usrSize" -#define VAR_VAR_SIZE "varSize" -#define VAR_TMP_SIZE "tmpSize" -#define VAR_HOME_SIZE "homeSize" -#define VAR_TERM "TERM" -#define VAR_CONSTERM "_consterm" -#define VAR_KEEPRCCONF "keeprcconf" - -#ifdef PC98 -#define DEFAULT_COUNTRY "jp" -#else -#define DEFAULT_COUNTRY "us" -#endif - -/* One MB worth of blocks */ -#define ONE_MEG 2048 -#define ONE_GIG (ONE_MEG * 1024) - -/* Which selection attributes to use */ -#define ATTR_SELECTED (ColorDisplay ? item_selected_attr : item_attr) -#define ATTR_TITLE button_active_attr - -/* Handy strncpy() macro */ -#define SAFE_STRCPY(to, from) sstrncpy((to), (from), sizeof (to) - 1) - -/*** Types ***/ -typedef int Boolean; -typedef struct disk Disk; -typedef struct chunk Chunk; - -/* Bitfields for menu options */ -#define DMENU_NORMAL_TYPE 0x1 /* Normal dialog menu */ -#define DMENU_RADIO_TYPE 0x2 /* Radio dialog menu */ -#define DMENU_CHECKLIST_TYPE 0x4 /* Multiple choice menu */ -#define DMENU_SELECTION_RETURNS 0x8 /* Immediate return on item selection */ - -typedef struct _dmenu { - int type; /* What sort of menu we are */ - char *title; /* Our title */ - char *prompt; /* Our prompt */ - char *helpline; /* Line of help at bottom */ - char *helpfile; /* Help file for "F1" */ - dialogMenuItem items[]; /* Array of menu items */ -} DMenu; - -/* An rc.conf variable */ -typedef struct _variable { - struct _variable *next; - char *name; - char *value; - int dirty; -} Variable; - -#define NO_ECHO_OBJ(type) ((type) | (DITEM_NO_ECHO << 16)) -#define TYPE_OF_OBJ(type) ((type) & 0xff) -#define ATTR_OF_OBJ(type) ((type) >> 16) - -/* A screen layout structure */ -typedef struct _layout { - int y; /* x & Y co-ordinates */ - int x; - int len; /* The size of the dialog on the screen */ - int maxlen; /* How much the user can type in ... */ - char *prompt; /* The string for the prompt */ - char *help; /* The display for the help line */ - void *var; /* The var to set when this changes */ - int type; /* The type of the dialog to create */ - void *obj; /* The obj pointer returned by libdialog */ -} Layout; - -/* Layout array terminator. */ -#define LAYOUT_END { 0, 0, 0, 0, NULL, NULL, NULL, 0, NULL } - -typedef enum { - DEVICE_TYPE_NONE, - DEVICE_TYPE_DISK, - DEVICE_TYPE_FLOPPY, - DEVICE_TYPE_FTP, - DEVICE_TYPE_NETWORK, - DEVICE_TYPE_CDROM, - DEVICE_TYPE_USB, - DEVICE_TYPE_DOS, - DEVICE_TYPE_UFS, - DEVICE_TYPE_NFS, - DEVICE_TYPE_ANY, - DEVICE_TYPE_HTTP, -} DeviceType; - -/* CDROM mount codes */ -#define CD_UNMOUNTED 0 -#define CD_ALREADY_MOUNTED 1 -#define CD_WE_MOUNTED_IT 2 - -/* A "device" from sysinstall's point of view */ -typedef struct _device { - char name[DEV_NAME_MAX]; - char *description; - char *devname; - DeviceType type; - Boolean enabled; - Boolean (*init)(struct _device *dev); - FILE * (*get)(struct _device *dev, char *file, Boolean probe); - void (*shutdown)(struct _device *dev); - void *private; - unsigned int flags; - unsigned int volume; -} Device; - -/* Some internal representations of partitions */ -typedef enum { - PART_NONE, - PART_SLICE, - PART_SWAP, - PART_FILESYSTEM, - PART_FAT, - PART_EFI -} PartType; - -#define NEWFS_UFS_CMD "newfs" -#define NEWFS_MSDOS_CMD "newfs_msdos" - -enum newfs_type { NEWFS_UFS, NEWFS_MSDOS, NEWFS_CUSTOM }; -#define NEWFS_UFS_STRING "UFS" -#define NEWFS_MSDOS_STRING "FAT" -#define NEWFS_CUSTOM_STRING "CST" - -/* The longest set of custom command line arguments we'll pass. */ -#define NEWFS_CMD_ARGS_MAX 256 - -typedef struct _part_info { - char mountpoint[FILENAME_MAX]; - - /* Is invocation of newfs desired? */ - Boolean do_newfs; - - enum newfs_type newfs_type; - union { - struct { - char user_options[NEWFS_CMD_ARGS_MAX]; - Boolean acls; /* unused */ - Boolean multilabel; /* unused */ - Boolean softupdates; - Boolean ufs1; - } newfs_ufs; - struct { - /* unused */ - } newfs_msdos; - struct { - char command[NEWFS_CMD_ARGS_MAX]; - } newfs_custom; - } newfs_data; -} PartInfo; - -/* An option */ -typedef struct _opt { - char *name; - char *desc; - enum { OPT_IS_STRING, OPT_IS_INT, OPT_IS_FUNC, OPT_IS_VAR } type; - void *data; - void *aux; - char *(*check)(struct _opt *); -} Option; - -/* Weird index nodey things we use for keeping track of package information */ -typedef enum { PACKAGE, PLACE } node_type; /* Types of nodes */ - -typedef struct _pkgnode { /* A node in the reconstructed hierarchy */ - struct _pkgnode *next; /* My next sibling */ - node_type type; /* What am I? */ - char *name; /* My name */ - char *desc; /* My description (Hook) */ - struct _pkgnode *kids; /* My little children */ - void *data; /* A place to hang my data */ -} PkgNode; -typedef PkgNode *PkgNodePtr; - -/* A single package */ -typedef struct _indexEntry { /* A single entry in an INDEX file */ - char *name; /* name */ - char *path; /* full path to port */ - char *prefix; /* port prefix */ - char *comment; /* one line description */ - char *descrfile; /* path to description file */ - char *deps; /* packages this depends on */ - int depc; /* how many depend on me */ - int installed; /* indicates if it is installed */ - int vol_checked; /* disc volume last checked for */ - char *maintainer; /* maintainer */ - unsigned int volume; /* Volume of package */ -} IndexEntry; -typedef IndexEntry *IndexEntryPtr; - -typedef int (*commandFunc)(char *key, void *data); - -#define HOSTNAME_FIELD_LEN 128 -#define IPADDR_FIELD_LEN 16 -#define EXTRAS_FIELD_LEN 128 - -/* This is the structure that Network devices carry around in their private, erm, structures */ -typedef struct _devPriv { - int use_rtsol; - int use_dhcp; - char ipaddr[IPADDR_FIELD_LEN]; - char netmask[IPADDR_FIELD_LEN]; - char extras[EXTRAS_FIELD_LEN]; -} DevInfo; - - -/*** Externs ***/ -extern jmp_buf BailOut; /* Used to get the heck out */ -extern int CDROMInitQuiet; /* Don't whine if mount(2) fails */ -extern int DebugFD; /* Where diagnostic output goes */ -extern Boolean Fake; /* Don't actually modify anything - testing */ -extern Boolean Restarting; /* Are we restarting sysinstall? */ -extern Boolean SystemWasInstalled; /* Did we install it? */ -extern Boolean RunningAsInit; /* Are we running stand-alone? */ -extern Boolean DialogActive; /* Is the dialog() stuff up? */ -extern Boolean ColorDisplay; /* Are we on a color display? */ -extern Boolean OnVTY; /* On a syscons VTY? */ -extern Boolean have_volumes; /* Media has multiple volumes */ -extern Variable *VarHead; /* The head of the variable chain */ -extern Device *mediaDevice; /* Where we're getting our distribution from */ -extern unsigned int Dists; /* Which distributions we want */ -extern unsigned int DocDists; /* Which Doc dists we want */ -extern unsigned int SrcDists; /* Which src distributions we want */ -extern unsigned int KernelDists; /* Which kernel dists we want */ -extern int BootMgr; /* Which boot manager to use */ -extern int StatusLine; /* Where to print our status messages */ -extern DMenu MenuCountry; /* Country menu */ -extern DMenu MenuInitial; /* Initial installation menu */ -extern DMenu MenuFixit; /* Fixit repair menu */ -#if defined(__i386__) || defined(__amd64__) -#ifdef PC98 -extern DMenu MenuIPLType; /* Type of IPL to write on the disk */ -#else -extern DMenu MenuMBRType; /* Type of MBR to write on the disk */ -#endif -#endif -extern DMenu MenuConfigure; /* Final configuration menu */ -extern DMenu MenuDocInstall; /* Documentation Installation menu */ -extern DMenu MenuDocumentation; /* Documentation menu */ -extern DMenu MenuFTPOptions; /* FTP Installation options */ -extern DMenu MenuIndex; /* Index menu */ -extern DMenu MenuOptions; /* Installation options */ -extern DMenu MenuOptionsLanguage; /* Language options menu */ -extern DMenu MenuKLD; /* Prototype KLD menu */ -extern DMenu MenuConfig; /* Prototype config menu */ -extern DMenu MenuMedia; /* Media type menu */ -#ifdef WITH_MICE -extern DMenu MenuMouse; /* Mouse type menu */ -#endif -extern DMenu MenuMediaCDROM; /* CDROM media menu */ -extern DMenu MenuMediaUSB; /* USB media menu */ -extern DMenu MenuMediaDOS; /* DOS media menu */ -extern DMenu MenuMediaFloppy; /* Floppy media menu */ -extern DMenu MenuMediaFTP; /* FTP media menu */ -extern DMenu MenuNetworkDevice; /* Network device menu */ -extern DMenu MenuNTP; /* NTP time server menu */ -extern DMenu MenuSecurity; /* System security options menu */ -extern DMenu MenuSecurelevel; /* Securelevel menu */ -extern DMenu MenuStartup; /* Startup services menu */ -#ifdef WITH_SYSCONS -extern DMenu MenuSyscons; /* System console configuration menu */ -extern DMenu MenuSysconsFont; /* System console font configuration menu */ -extern DMenu MenuSysconsKeymap; /* System console keymap configuration menu */ -extern DMenu MenuSysconsKeyrate; /* System console keyrate configuration menu */ -extern DMenu MenuSysconsSaver; /* System console saver configuration menu */ -extern DMenu MenuSysconsScrnmap; /* System console screenmap configuration menu */ -extern DMenu MenuSysconsTtys; /* System console terminal type menu */ -#endif -extern DMenu MenuNetworking; /* Network configuration menu */ -extern DMenu MenuMTA; /* MTA selection menu */ -extern DMenu MenuInstallCustom; /* Custom Installation menu */ -extern DMenu MenuDistributions; /* Distribution menu */ -extern DMenu MenuDiskDevices; /* Disk type devices */ -extern DMenu MenuSubDistributions; /* Custom distribution menu */ -extern DMenu MenuSrcDistributions; /* Source distribution menu */ -extern DMenu MenuKernelDistributions;/* Kernel distribution menu */ -extern DMenu MenuHTMLDoc; /* HTML Documentation menu */ -extern DMenu MenuUsermgmt; /* User management menu */ -extern DMenu MenuFixit; /* Fixit floppy/CDROM/shell menu */ -extern int FixItMode; /* FixItMode starts shell on current device (ie Serial port) */ -extern const char * StartName; /* Which name we were started as */ -extern const char * ProgName; /* Program's proper name */ -extern int NCpus; /* # cpus on machine */ -extern int low_volume; /* Lowest volume number */ -extern int high_volume; /* Highest volume number */ - -/* Important chunks. */ -extern Chunk *HomeChunk; -extern Chunk *RootChunk; -extern Chunk *SwapChunk; -extern Chunk *TmpChunk; -extern Chunk *UsrChunk; -extern Chunk *VarChunk; -#ifdef __ia64__ -extern Chunk *EfiChunk; -#endif - -/* Stuff from libdialog which isn't properly declared outside */ -extern void display_helpfile(void); -extern void display_helpline(WINDOW *w, int y, int width); - -/*** Prototypes ***/ - -/* acpi.c */ -extern int acpi_detect(void); - -/* anonFTP.c */ -extern int configAnonFTP(dialogMenuItem *self); - -/* cdrom.c */ -extern Boolean mediaInitCDROM(Device *dev); -extern FILE *mediaGetCDROM(Device *dev, char *file, Boolean probe); -extern void mediaShutdownCDROM(Device *dev); - -/* command.c */ -extern void command_clear(void); -extern void command_sort(void); -extern void command_execute(void); -extern void command_shell_add(char *key, char *fmt, ...) __printflike(2, 3); -extern void command_func_add(char *key, commandFunc func, void *data); - -/* config.c */ -extern void configEnvironmentRC_conf(void); -extern void configEnvironmentResolv(char *config); -extern void configRC_conf(void); -extern int configFstab(dialogMenuItem *self); -extern int configRC(dialogMenuItem *self); -extern int configResolv(dialogMenuItem *self); -extern int configPackages(dialogMenuItem *self); -extern int configSaver(dialogMenuItem *self); -extern int configSaverTimeout(dialogMenuItem *self); -#ifdef WITH_LINUX -extern int configLinux(dialogMenuItem *self); -#endif -extern int configNTP(dialogMenuItem *self); -extern int configCountry(dialogMenuItem *self); -extern int configUsers(dialogMenuItem *self); -extern int configRouter(dialogMenuItem *self); -extern int configPCNFSD(dialogMenuItem *self); -extern int configInetd(dialogMenuItem *self); -extern int configNFSServer(dialogMenuItem *self); -extern int configMTAPostfix(dialogMenuItem *self); -extern int configMTAExim(dialogMenuItem *self); -extern int configRpcBind(dialogMenuItem *self); -extern int configWriteRC_conf(dialogMenuItem *self); -extern int configSecurelevel(dialogMenuItem *self); -extern int configSecurelevelDisabled(dialogMenuItem *self); -extern int configSecurelevelSecure(dialogMenuItem *self); -extern int configSecurelevelHighlySecure(dialogMenuItem *self); -extern int configSecurelevelNetworkSecure(dialogMenuItem *self); -extern int configEtcTtys(dialogMenuItem *self); -#ifdef __i386__ -extern int checkLoaderACPI(void); -extern int configLoaderACPI(int); -#endif - -/* devices.c */ -extern DMenu *deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)(dialogMenuItem *d), - int (*check)(dialogMenuItem *d)); -extern void deviceGetAll(void); -extern void deviceReset(void); -extern void deviceRescan(void); -extern Device **deviceFind(char *name, DeviceType type); -extern Device **deviceFindDescr(char *name, char *desc, DeviceType class); -extern int deviceCount(Device **devs); -extern Device *new_device(char *name); -extern Device *deviceRegister(char *name, char *desc, char *devname, DeviceType type, Boolean enabled, - Boolean (*init)(Device *mediadev), - FILE * (*get)(Device *dev, char *file, Boolean probe), - void (*shutDown)(Device *mediadev), - void *private); -extern Boolean dummyInit(Device *dev); -extern FILE *dummyGet(Device *dev, char *dist, Boolean probe); -extern void dummyShutdown(Device *dev); - -/* dhcp.c */ -extern int dhcpParseLeases(char *file, char *hostname, char *domain, char *nameserver, - char *ipaddr, char *gateway, char *netmask); - -/* disks.c */ -#ifdef WITH_SLICES -extern void diskPartition(Device *dev); -extern int diskPartitionEditor(dialogMenuItem *self); -#endif -extern int diskPartitionWrite(dialogMenuItem *self); -extern int diskGetSelectCount(Device ***devs); - -/* dispatch.c */ -extern int dispatchCommand(char *command); -extern int dispatch_load_floppy(dialogMenuItem *self); -extern int dispatch_load_cdrom(dialogMenuItem *self); -extern int dispatch_load_file_int(int); -extern int dispatch_load_file(dialogMenuItem *self); -extern int dispatch_load_menu(dialogMenuItem *self); - - -/* dist.c */ -extern int distReset(dialogMenuItem *self); -extern int distConfig(dialogMenuItem *self); -extern int distSetCustom(dialogMenuItem *self); -extern int distUnsetCustom(dialogMenuItem *self); -extern int distSetDeveloper(dialogMenuItem *self); -extern int distSetKernDeveloper(dialogMenuItem *self); -extern int distSetUser(dialogMenuItem *self); -extern int distSetMinimum(dialogMenuItem *self); -extern int distSetEverything(dialogMenuItem *self); -extern int distSetSrc(dialogMenuItem *self); -extern int distSetKernel(dialogMenuItem *self); -extern int distSetDoc(dialogMenuItem *self); -extern int distSetDocMenu(dialogMenuItem *self); -extern int distExtractAll(dialogMenuItem *self); -extern int selectKernel(void); - -/* dmenu.c */ -extern int dmenuDisplayFile(dialogMenuItem *tmp); -extern int dmenuSubmenu(dialogMenuItem *tmp); -extern int dmenuSystemCommand(dialogMenuItem *tmp); -extern int dmenuSystemCommandBox(dialogMenuItem *tmp); -extern int dmenuExit(dialogMenuItem *tmp); -extern int dmenuISetVariable(dialogMenuItem *tmp); -extern int dmenuSetVariable(dialogMenuItem *tmp); -extern int dmenuSetCountryVariable(dialogMenuItem *tmp); -extern int dmenuSetKmapVariable(dialogMenuItem *tmp); -extern int dmenuSetVariables(dialogMenuItem *tmp); -extern int dmenuToggleVariable(dialogMenuItem *tmp); -extern int dmenuSetFlag(dialogMenuItem *tmp); -extern int dmenuSetValue(dialogMenuItem *tmp); -extern int dmenuFindItem(DMenu *menu, const char *prompt, const char *title, void *data); -extern void dmenuSetDefaultIndex(DMenu *menu, int *choice, int *scroll, int *curr, int *max); -extern int dmenuSetDefaultItem(DMenu *menu, const char *prompt, const char *title, void *data, - int *choice, int *scroll, int *curr, int *max); -extern Boolean dmenuOpen(DMenu *menu, int *choice, int *scroll, int *curr, int *max, Boolean buttons); -extern Boolean dmenuOpenSimple(DMenu *menu, Boolean buttons); -extern int dmenuVarCheck(dialogMenuItem *item); -extern int dmenuVarsCheck(dialogMenuItem *item); -extern int dmenuFlagCheck(dialogMenuItem *item); -extern int dmenuRadioCheck(dialogMenuItem *item); - -/* doc.c */ -extern int docBrowser(dialogMenuItem *self); -extern int docShowDocument(dialogMenuItem *self); - -/* dos.c */ -extern Boolean mediaCloseDOS(Device *dev, FILE *fp); -extern Boolean mediaInitDOS(Device *dev); -extern FILE *mediaGetDOS(Device *dev, char *file, Boolean probe); -extern void mediaShutdownDOS(Device *dev); - -/* floppy.c */ -extern int getRootFloppy(void); -extern Boolean mediaInitFloppy(Device *dev); -extern FILE *mediaGetFloppy(Device *dev, char *file, Boolean probe); -extern void mediaShutdownFloppy(Device *dev); - -/* ftp_strat.c */ -extern Boolean mediaCloseFTP(Device *dev, FILE *fp); -extern Boolean mediaInitFTP(Device *dev); -extern FILE *mediaGetFTP(Device *dev, char *file, Boolean probe); -extern void mediaShutdownFTP(Device *dev); - -/* http.c */ -extern Boolean mediaInitHTTP(Device *dev); -extern FILE *mediaGetHTTP(Device *dev, char *file, Boolean probe); - -/* globals.c */ -extern void globalsInit(void); - -/* index.c */ -int index_read(FILE *fp, PkgNodePtr papa); -int index_menu(PkgNodePtr root, PkgNodePtr top, PkgNodePtr plist, int *pos, int *scroll); -void index_init(PkgNodePtr top, PkgNodePtr plist); -void index_node_free(PkgNodePtr top, PkgNodePtr plist); -void index_sort(PkgNodePtr top); -void index_print(PkgNodePtr top, int level); -int index_extract(Device *dev, PkgNodePtr top, PkgNodePtr who, Boolean depended, int current_volume); -int index_initialize(char *path); -PkgNodePtr index_search(PkgNodePtr top, char *str, PkgNodePtr *tp); - -/* install.c */ -extern Boolean checkLabels(Boolean whinge); -extern int installCommit(dialogMenuItem *self); -extern int installCustomCommit(dialogMenuItem *self); -extern int installExpress(dialogMenuItem *self); -extern int installStandard(dialogMenuItem *self); -extern int installFixitHoloShell(dialogMenuItem *self); -extern int installFixitCDROM(dialogMenuItem *self); -extern int installFixitUSB(dialogMenuItem *self); -extern int installFixitFloppy(dialogMenuItem *self); -extern int installFixupBase(dialogMenuItem *self); -extern int installFixupKernel(dialogMenuItem *self, int dists); -extern int installUpgrade(dialogMenuItem *self); -extern int installFilesystems(dialogMenuItem *self); -extern int installVarDefaults(dialogMenuItem *self); -extern void installEnvironment(void); -extern Boolean copySelf(void); - -/* kget.c */ -extern int kget(char *out); - -/* keymap.c */ -extern int keymapMenuSelect(dialogMenuItem *self); -extern int loadKeymap(const char *lang); - -/* label.c */ -extern int diskLabelEditor(dialogMenuItem *self); -extern int diskLabelCommit(dialogMenuItem *self); - -/* makedevs.c (auto-generated) */ -extern const char termcap_ansi[]; -extern const char termcap_vt100[]; -extern const char termcap_cons25w[]; -extern const char termcap_cons25[]; -extern const char termcap_cons25_m[]; -extern const char termcap_cons25r[]; -extern const char termcap_cons25r_m[]; -extern const char termcap_cons25l1[]; -extern const char termcap_cons25l1_m[]; -extern const char termcap_xterm[]; -extern const u_char font_iso_8x16[]; -extern const u_char font_cp850_8x16[]; -extern const u_char font_cp866_8x16[]; -extern const u_char koi8_r2cp866[]; -extern u_char default_scrnmap[]; - -/* media.c */ -extern char *cpioVerbosity(void); -extern int mediaOpen(void); -extern void mediaClose(void); -extern int mediaTimeout(void); -extern int mediaSetCDROM(dialogMenuItem *self); -extern int mediaSetFloppy(dialogMenuItem *self); -extern int mediaSetUSB(dialogMenuItem *self); -extern int mediaSetDOS(dialogMenuItem *self); -extern int mediaSetFTP(dialogMenuItem *self); -extern int mediaSetFTPActive(dialogMenuItem *self); -extern int mediaSetFTPPassive(dialogMenuItem *self); -extern int mediaSetHTTP(dialogMenuItem *self); -extern int mediaSetUFS(dialogMenuItem *self); -extern int mediaSetNFS(dialogMenuItem *self); -extern int mediaSetFTPUserPass(dialogMenuItem *self); -extern int mediaSetCPIOVerbosity(dialogMenuItem *self); -extern int mediaGetType(dialogMenuItem *self); -extern Boolean mediaExtractDist(char *dir, char *dist, FILE *fp); -extern Boolean mediaExtractDistBegin(char *dir, int *fd, int *zpid, int *cpic); -extern Boolean mediaExtractDistEnd(int zpid, int cpid); -extern Boolean mediaVerify(void); -extern FILE *mediaGenericGet(char *base, const char *file); - -/* misc.c */ -extern Boolean file_readable(char *fname); -extern Boolean file_executable(char *fname); -extern Boolean directory_exists(const char *dirname); -extern char *root_bias(char *path); -extern char *itoa(int value); -extern char *string_concat(char *p1, char *p2); -extern char *string_concat3(char *p1, char *p2, char *p3); -extern char *string_prune(char *str); -extern char *string_skipwhite(char *str); -extern char *string_copy(char *s1, char *s2); -extern char *pathBaseName(const char *path); -extern void safe_free(void *ptr); -extern void *safe_malloc(size_t size); -extern void *safe_realloc(void *orig, size_t size); -extern dialogMenuItem *item_add(dialogMenuItem *list, char *prompt, char *title, - int (*checked)(dialogMenuItem *self), - int (*fire)(dialogMenuItem *self), - void (*selected)(dialogMenuItem *self, int is_selected), - void *data, void *aux, int *curr, int *max); -extern void items_free(dialogMenuItem *list, int *curr, int *max); -extern int Mkdir(char *); -extern int Mkdir_command(char *key, void *data); -extern int Mount(char *, void *data); -extern int Mount_msdosfs(char *mountp, void *devname); -extern WINDOW *openLayoutDialog(char *helpfile, char *title, int x, int y, int width, int height); -extern ComposeObj *initLayoutDialog(WINDOW *win, Layout *layout, int x, int y, int *max); -extern int layoutDialogLoop(WINDOW *win, Layout *layout, ComposeObj **obj, - int *n, int max, int *cbutton, int *cancel); - -extern WINDOW *savescr(void); -extern void restorescr(WINDOW *w); -extern char *sstrncpy(char *dst, const char *src, int size); -extern char *getsysctlbyname(const char *sysctlname); - -/* modules.c */ -extern void driverFloppyCheck(void); -extern void moduleInitialize(void); -extern int kldBrowser(dialogMenuItem *self); - -/* mouse.c */ -extern int mousedTest(dialogMenuItem *self); -extern int mousedDisable(dialogMenuItem *self); -extern int setMouseFlags(dialogMenuItem *self); - -/* mptable.c */ -extern int biosmptable_detect(void); - -/* msg.c */ -extern Boolean isDebug(void); -extern void msgInfo(char *fmt, ...) __printf0like(1, 2); -extern void msgYap(char *fmt, ...) __printflike(1, 2); -extern void msgWarn(char *fmt, ...) __printflike(1, 2); -extern void msgDebug(char *fmt, ...) __printflike(1, 2); -extern void msgError(char *fmt, ...) __printflike(1, 2); -extern void msgFatal(char *fmt, ...) __printflike(1, 2); -extern void msgConfirm(char *fmt, ...) __printflike(1, 2); -extern void msgNotify(char *fmt, ...) __printflike(1, 2); -extern void msgWeHaveOutput(char *fmt, ...) __printflike(1, 2); -extern int msgYesNo(char *fmt, ...) __printflike(1, 2); -extern int msgNoYes(char *fmt, ...) __printflike(1, 2); -extern char *msgGetInput(char *buf, char *fmt, ...) __printflike(2, 3); -extern int msgSimpleConfirm(char *); -extern int msgSimpleNotify(char *); - -/* network.c */ -extern Boolean mediaInitNetwork(Device *dev); -extern void mediaShutdownNetwork(Device *dev); - -/* nfs.c */ -extern Boolean mediaInitNFS(Device *dev); -extern FILE *mediaGetNFS(Device *dev, char *file, Boolean probe); -extern void mediaShutdownNFS(Device *dev); - -/* options.c */ -extern int optionsEditor(dialogMenuItem *self); - -/* package.c */ -extern int packageAdd(dialogMenuItem *self); -extern int package_add(char *name); -extern int package_extract(Device *dev, char *name, Boolean depended); -extern Boolean package_installed(char *name); - -/* system.c */ -extern void systemInitialize(int argc, char **argv); -extern void systemShutdown(int status); -extern int execExecute(char *cmd, char *name); -extern int systemExecute(char *cmd); -extern void systemSuspendDialog(void); -extern void systemResumeDialog(void); -extern int systemDisplayHelp(char *file); -extern char *systemHelpFile(char *file, char *buf); -extern void systemChangeFont(const u_char font[]); -extern void systemChangeLang(char *lang); -extern void systemChangeTerminal(char *color, const u_char c_termcap[], char *mono, const u_char m_termcap[]); -extern void systemChangeScreenmap(const u_char newmap[]); -extern void systemCreateHoloshell(void); -extern int vsystem(char *fmt, ...) __printflike(1, 2); - -/* tcpip.c */ -extern int tcpOpenDialog(Device *dev); -extern int tcpMenuSelect(dialogMenuItem *self); -extern Device *tcpDeviceSelect(void); - -/* termcap.c */ -extern int set_termcap(void); - -/* ttys.c */ -extern void configTtys(void); - -/* ufs.c */ -extern void mediaShutdownUFS(Device *dev); -extern Boolean mediaInitUFS(Device *dev); -extern FILE *mediaGetUFS(Device *dev, char *file, Boolean probe); - -/* usb.c */ -extern Boolean mediaInitUSB(Device *dev); -extern FILE *mediaGetUSB(Device *dev, char *file, Boolean probe); -extern void mediaShutdownUSB(Device *dev); - -/* user.c */ -extern int userAddGroup(dialogMenuItem *self); -extern int userAddUser(dialogMenuItem *self); - -/* variable.c */ -extern void variable_set(char *var, int dirty); -extern void variable_set2(char *name, char *value, int dirty); -extern char *variable_get(char *var); -extern int variable_cmp(char *var, char *value); -extern void variable_unset(char *var); -extern char *variable_get_value(char *var, char *prompt, int dirty); -extern int variable_check(char *data); -extern int variable_check2(char *data); -extern int dump_variables(dialogMenuItem *self); -extern void free_variables(void); -extern void pvariable_set(char *var); -extern char *pvariable_get(char *var); - -/* wizard.c */ -extern void slice_wizard(Disk *d); - -/* - * Macros. Please find a better place for us! - */ -#define DEVICE_INIT(d) ((d) != NULL ? (d)->init((d)) : (Boolean)0) -#define DEVICE_GET(d, b, f) ((d) != NULL ? (d)->get((d), (b), (f)) : NULL) -#define DEVICE_SHUTDOWN(d) ((d) != NULL ? (d)->shutdown((d)) : (void)0) - -#ifdef USE_GZIP -#define UNZIPPER "gunzip" -#else -#define UNZIPPER "bunzip2" -#endif - -#endif -/* _SYSINSTALL_H_INCLUDE */ diff --git a/usr.sbin/sysinstall/system.c b/usr.sbin/sysinstall/system.c deleted file mode 100644 index 91ea2b2..0000000 --- a/usr.sbin/sysinstall/system.c +++ /dev/null @@ -1,555 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Jordan Hubbard - * - * My contributions are in the public domain. - * - * Parts of this file are also blatantly stolen from Poul-Henning Kamp's - * previous version of sysinstall, and as such fall under his "BEERWARE license" - * so buy him a beer if you like it! Buy him a beer for me, too! - * Heck, get him completely drunk and send me pictures! :-) - */ - -#include "sysinstall.h" -#include <signal.h> -#include <termios.h> -#include <sys/param.h> -#include <sys/reboot.h> -#include <sys/consio.h> -#include <sys/fcntl.h> -#include <sys/ioctl.h> -#include <sys/mount.h> -#include <sys/stat.h> -#include <sys/sysctl.h> -#include <ufs/ufs/ufsmount.h> - - -/* Where we stick our temporary expanded doc file */ -#define DOC_TMP_DIR "/tmp/.doc" -#define DOC_TMP_FILE "/tmp/.doc/doc.tmp" - -static pid_t ehs_pid; - -/* - * Handle interrupt signals - this probably won't work in all cases - * due to our having bogotified the internal state of dialog or curses, - * but we'll give it a try. - */ -static int -intr_continue(dialogMenuItem *self) -{ - return DITEM_LEAVE_MENU; -} - -static int -intr_reboot(dialogMenuItem *self) -{ - systemShutdown(-1); - /* NOTREACHED */ - return 0; -} - -static int -intr_restart(dialogMenuItem *self) -{ - int ret, fd, fdmax; - char *arg; - - mediaClose(); - free_variables(); - fdmax = getdtablesize(); - for (fd = 3; fd < fdmax; fd++) - close(fd); - - if (RunningAsInit) - arg = "-restart -fakeInit"; - else - arg = "-restart"; - - ret = execl(StartName, StartName, arg, NULL); - msgDebug("execl failed (%s)\n", strerror(errno)); - /* NOTREACHED */ - return -1; -} - -static dialogMenuItem intrmenu[] = { - { "Abort", "Abort the installation", NULL, intr_reboot }, - { "Restart", "Restart the installation program", NULL, intr_restart }, - { "Continue", "Continue the installation", NULL, intr_continue }, -}; - - -static void -handle_intr(int sig) -{ - WINDOW *save = savescr(); - - use_helpline(NULL); - use_helpfile(NULL); - if (OnVTY) { - ioctl(0, VT_ACTIVATE, 1); /* Switch back */ - msgInfo(NULL); - } - (void)dialog_menu("Installation interrupt", - "Do you want to abort the installation?", - -1, -1, 3, -3, intrmenu, NULL, NULL, NULL); - restorescr(save); -} - -#if 0 -/* - * Harvest children if we are init. - */ -static void -reap_children(int sig) -{ - int errbak = errno; - - while (waitpid(-1, NULL, WNOHANG) > 0) - ; - errno = errbak; -} -#endif - -/* Expand a file into a convenient location, nuking it each time */ -static char * -expand(char *fname) -{ - char *unzipper = RunningAsInit ? "/stand/" UNZIPPER : "/usr/bin/" UNZIPPER; - - if (!directory_exists(DOC_TMP_DIR)) { - Mkdir(DOC_TMP_DIR); - if (chown(DOC_TMP_DIR, 0, 0) < 0) - return NULL; - if (chmod(DOC_TMP_DIR, S_IRWXU) < 0) - return NULL; - } - else - unlink(DOC_TMP_FILE); - if (!file_readable(fname) || vsystem("%s < %s > %s", unzipper, fname, - DOC_TMP_FILE)) - return NULL; - return DOC_TMP_FILE; -} - -/* Initialize system defaults */ -void -systemInitialize(int argc, char **argv) -{ - size_t i; - int boothowto; - sigset_t signalset; - - signal(SIGINT, SIG_IGN); - globalsInit(); - - i = sizeof(boothowto); - if (!sysctlbyname("debug.boothowto", &boothowto, &i, NULL, 0) && - (i == sizeof(boothowto)) && (boothowto & RB_VERBOSE)) - variable_set2(VAR_DEBUG, "YES", 0); - - /* Are we running as init? */ - if (RunningAsInit) { - struct ufs_args ufs_args; - int fd; - - setsid(); - close(0); - fd = open("/dev/ttyv0", O_RDWR); - if (fd == -1) { - fd = open("/dev/console", O_RDWR); /* fallback */ - variable_set2(VAR_FIXIT_TTY, "serial", 0); /* give fixit a hint */ - } else - OnVTY = TRUE; - /* - * To make _sure_ we're on a VTY and don't have /dev/console switched - * away to a serial port or something, attempt to set the cursor appearance. - */ - if (OnVTY) { - int fd2, type; - - type = 0; /* normal */ - if ((fd2 = open("/dev/console", O_RDWR)) != -1) { - if (ioctl(fd2, CONS_CURSORTYPE, &type) == -1) { - OnVTY = FALSE; - variable_set2(VAR_FIXIT_TTY, "serial", 0); /* Tell Fixit - the console - type */ - close(fd); close(fd2); - open("/dev/console", O_RDWR); - } - else - close(fd2); - } - } - close(1); dup(0); - close(2); dup(0); - printf("%s running as init on %s\n", argv[0], OnVTY ? "vty0" : "serial console"); - ioctl(0, TIOCSCTTY, (char *)NULL); - setlogin("root"); - setenv("PATH", "/stand:/bin:/sbin:/usr/sbin:/usr/bin:/mnt/bin:/mnt/sbin:/mnt/usr/sbin:/mnt/usr/bin", 1); - setbuf(stdin, 0); - setbuf(stderr, 0); -#if 0 - signal(SIGCHLD, reap_children); -#endif - memset(&ufs_args, 0, sizeof(ufs_args)); - mount("ufs", "/", MNT_UPDATE, &ufs_args); - } - else { - char hname[256]; - - /* Initalize various things for a multi-user environment */ - if (!gethostname(hname, sizeof hname)) - variable_set2(VAR_HOSTNAME, hname, 0); - } - - if (set_termcap() == -1) { - printf("Can't find terminal entry\n"); - exit(-1); - } - - /* XXX - libdialog has particularly bad return value checking */ - init_dialog(); - - /* If we haven't crashed I guess dialog is running ! */ - DialogActive = TRUE; - - /* Make sure HOME is set for those utilities that need it */ - if (!getenv("HOME")) - setenv("HOME", "/", 1); - signal(SIGINT, handle_intr); - /* - * Make sure we can be interrupted even if we were re-executed - * from an interrupt. - */ - sigemptyset(&signalset); - sigaddset(&signalset, SIGINT); - sigprocmask(SIG_UNBLOCK, &signalset, NULL); - - (void)vsystem("rm -rf %s", DOC_TMP_DIR); -} - -/* Close down and prepare to exit */ -void -systemShutdown(int status) -{ - /* If some media is open, close it down */ - if (status >=0) { - if (mediaDevice != NULL && mediaDevice->type == DEVICE_TYPE_CDROM) { - mediaClose(); - msgConfirm("Be sure to remove the media from the drive."); - } else - mediaClose(); - } - - /* write out any changes to rc.conf .. */ - configRC_conf(); - - /* Shut down the dialog library */ - if (DialogActive) { - end_dialog(); - DialogActive = FALSE; - } - - /* Shut down curses */ - endwin(); - - /* If we have a temporary doc dir lying around, nuke it */ - (void)vsystem("rm -rf %s", DOC_TMP_DIR); - - /* REALLY exit! */ - if (RunningAsInit) { - /* Put the console back */ - ioctl(0, VT_ACTIVATE, 2); -#if defined(__sparc64__) - reboot(RB_HALT); -#else - reboot(RB_AUTOBOOT); -#endif - } - else - exit(status); -} - -/* Run some general command */ -int -systemExecute(char *command) -{ - int status; - struct termios foo; - WINDOW *w = savescr(); - - dialog_clear(); - dialog_update(); - end_dialog(); - DialogActive = FALSE; - if (tcgetattr(0, &foo) != -1) { - foo.c_cc[VERASE] = '\010'; - tcsetattr(0, TCSANOW, &foo); - } - if (!Fake) - status = system(command); - else { - status = 0; - msgDebug("systemExecute: Faked execution of `%s'\n", command); - } - DialogActive = TRUE; - restorescr(w); - return status; -} - -/* suspend/resume libdialog/curses screen */ -static WINDOW *oldW; - -void -systemSuspendDialog(void) -{ - - oldW = savescr(); - dialog_clear(); - dialog_update(); - end_dialog(); - DialogActive = FALSE; -} - -void -systemResumeDialog(void) -{ - - DialogActive = TRUE; - restorescr(oldW); -} - -/* Display a help file in a filebox */ -int -systemDisplayHelp(char *file) -{ - char *fname = NULL; - char buf[FILENAME_MAX]; - int ret = 0; - WINDOW *w = savescr(); - - fname = systemHelpFile(file, buf); - if (!fname) { - snprintf(buf, FILENAME_MAX, "The %s file is not provided on this particular floppy image.", file); - use_helpfile(NULL); - use_helpline(NULL); - dialog_mesgbox("Sorry!", buf, -1, -1); - ret = 1; - } - else { - use_helpfile(NULL); - use_helpline(NULL); - dialog_textbox(file, fname, LINES, COLS); - } - restorescr(w); - return ret; -} - -char * -systemHelpFile(char *file, char *buf) -{ - if (!file) - return NULL; - if (file[0] == '/') - return file; - snprintf(buf, FILENAME_MAX, "/stand/help/%s.hlp.gz", file); - if (file_readable(buf)) - return expand(buf); - snprintf(buf, FILENAME_MAX, "/stand/help/%s.hlp", file); - if (file_readable(buf)) - return expand(buf); - snprintf(buf, FILENAME_MAX, "/stand/help/%s.TXT.gz", file); - if (file_readable(buf)) - return expand(buf); - snprintf(buf, FILENAME_MAX, "/stand/help/%s.TXT", file); - if (file_readable(buf)) - return expand(buf); - snprintf(buf, FILENAME_MAX, "/usr/src/usr.sbin/%s/help/%s.hlp", ProgName, - file); - if (file_readable(buf)) - return buf; - snprintf(buf, FILENAME_MAX, "/usr/src/usr.sbin/%s/help/%s.TXT", ProgName, - file); - if (file_readable(buf)) - return buf; - return NULL; -} - -void -systemChangeTerminal(char *color, const u_char c_term[], - char *mono, const u_char m_term[]) -{ - if (OnVTY) { - int setupterm(char *color, int, int *); - - if (ColorDisplay) { - setenv("TERM", color, 1); - setenv("TERMCAP", c_term, 1); - reset_shell_mode(); - setterm(color); - cbreak(); noecho(); - } - else { - setenv("TERM", mono, 1); - setenv("TERMCAP", m_term, 1); - reset_shell_mode(); - setterm(mono); - cbreak(); noecho(); - } - } - clear(); - refresh(); - dialog_clear(); -} - -int -vsystem(char *fmt, ...) -{ - va_list args; - int pstat; - pid_t pid; - int omask; - sig_t intsave, quitsave; - char *cmd; - int i; - struct stat sb; - - cmd = (char *)alloca(FILENAME_MAX); - cmd[0] = '\0'; - va_start(args, fmt); - vsnprintf(cmd, FILENAME_MAX, fmt, args); - va_end(args); - - omask = sigblock(sigmask(SIGCHLD)); - if (Fake) { - msgDebug("vsystem: Faked execution of `%s'\n", cmd); - return 0; - } - if (isDebug()) - msgDebug("Executing command `%s'\n", cmd); - pid = fork(); - if (pid == -1) { - (void)sigsetmask(omask); - i = 127; - } - else if (!pid) { /* Junior */ - (void)sigsetmask(omask); - if (DebugFD != -1) { - dup2(DebugFD, 0); - dup2(DebugFD, 1); - dup2(DebugFD, 2); - } - else { - close(1); open("/dev/null", O_WRONLY); - dup2(1, 2); - } - if (stat("/stand/sh", &sb) == 0) - execl("/stand/sh", "/stand/sh", "-c", cmd, (char *)NULL); - else - execl("/bin/sh", "/bin/sh", "-c", cmd, (char *)NULL); - exit(1); - } - else { - intsave = signal(SIGINT, SIG_IGN); - quitsave = signal(SIGQUIT, SIG_IGN); - pid = waitpid(pid, &pstat, 0); - (void)sigsetmask(omask); - (void)signal(SIGINT, intsave); - (void)signal(SIGQUIT, quitsave); - i = (pid == -1) ? -1 : WEXITSTATUS(pstat); - if (isDebug()) - msgDebug("Command `%s' returns status of %d\n", cmd, i); - } - return i; -} - -void -systemCreateHoloshell(void) -{ - int waitstatus; - - if ((FixItMode || OnVTY) && RunningAsInit) { - - if (ehs_pid != 0) { - int pstat; - - if (kill(ehs_pid, 0) == 0) { - - if (msgNoYes("There seems to be an emergency holographic shell\n" - "already running on VTY 4.\n\n" - "Kill it and start a new one?")) - return; - - /* try cleaning up as much as possible */ - (void) kill(ehs_pid, SIGHUP); - sleep(1); - (void) kill(ehs_pid, SIGKILL); - } - - /* avoid too many zombies */ - (void) waitpid(ehs_pid, &pstat, WNOHANG); - } - - if (strcmp(variable_get(VAR_FIXIT_TTY), "serial") == 0) - systemSuspendDialog(); /* must be before the fork() */ - if ((ehs_pid = fork()) == 0) { - int i, fd; - struct termios foo; - extern int login_tty(int); - - ioctl(0, TIOCNOTTY, NULL); - for (i = getdtablesize(); i >= 0; --i) - close(i); - if (strcmp(variable_get(VAR_FIXIT_TTY), "serial") == 0) - fd = open("/dev/console", O_RDWR); - else - fd = open("/dev/ttyv3", O_RDWR); - ioctl(0, TIOCSCTTY, &fd); - dup2(0, 1); - dup2(0, 2); - DebugFD = 2; - if (login_tty(fd) == -1) - msgDebug("Doctor: I can't set the controlling terminal.\n"); - signal(SIGTTOU, SIG_IGN); - if (tcgetattr(fd, &foo) != -1) { - foo.c_cc[VERASE] = '\010'; - if (tcsetattr(fd, TCSANOW, &foo) == -1) - msgDebug("Doctor: I'm unable to set the erase character.\n"); - } - else - msgDebug("Doctor: I'm unable to get the terminal attributes!\n"); - if (strcmp(variable_get(VAR_FIXIT_TTY), "serial") == 0) { - printf("Type ``exit'' in this fixit shell to resume sysinstall.\n\n"); - fflush(stdout); - } - execlp("sh", "-sh", NULL); - msgDebug("Was unable to execute sh for Holographic shell!\n"); - exit(1); - } - else { - if (strcmp(variable_get(VAR_FIXIT_TTY), "standard") == 0) { - WINDOW *w = savescr(); - - msgNotify("Starting an emergency holographic shell on VTY4"); - sleep(2); - restorescr(w); - } - else { - (void)waitpid(ehs_pid, &waitstatus, 0); /* we only wait for - shell to finish - in serial mode - since there is no - virtual console */ - systemResumeDialog(); - } - } - } -} diff --git a/usr.sbin/sysinstall/tcpip.c b/usr.sbin/sysinstall/tcpip.c deleted file mode 100644 index 121a5c5..0000000 --- a/usr.sbin/sysinstall/tcpip.c +++ /dev/null @@ -1,775 +0,0 @@ -/* - * $FreeBSD$ - * - * Copyright (c) 1995 - * Gary J Palmer. All rights reserved. - * Copyright (c) 1996 - * Jordan K. Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* - * All kinds of hacking also performed by jkh on this code. Don't - * blame Gary for every bogosity you see here.. :-) - * - * -jkh - */ - -#include "sysinstall.h" -#include <sys/param.h> -#include <sys/sysctl.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/sockio.h> - -#include <netinet/in.h> -#include <net/if.h> -#include <net/if_media.h> - -#include <netdb.h> -#include <paths.h> -#include <ifaddrs.h> - -/* The help file for the TCP/IP setup screen */ -#define TCP_HELPFILE "tcp" - -/* These are nasty, but they make the layout structure a lot easier ... */ - -static char hostname[HOSTNAME_FIELD_LEN], domainname[HOSTNAME_FIELD_LEN], - gateway[IPADDR_FIELD_LEN], nameserver[INET6_ADDRSTRLEN]; -static int okbutton, cancelbutton; -static char ipaddr[IPADDR_FIELD_LEN], netmask[IPADDR_FIELD_LEN], extras[EXTRAS_FIELD_LEN]; -static char ipv6addr[INET6_ADDRSTRLEN]; - -/* What the screen size is meant to be */ -#define TCP_DIALOG_Y 0 -#define TCP_DIALOG_X 8 -#define TCP_DIALOG_WIDTH COLS - 16 -#define TCP_DIALOG_HEIGHT LINES - 2 - -static Layout layout[] = { -#define LAYOUT_HOSTNAME 0 - { 1, 2, 25, HOSTNAME_FIELD_LEN - 1, - "Host:", "Your fully-qualified hostname, e.g. foo.example.com", - hostname, STRINGOBJ, NULL }, -#define LAYOUT_DOMAINNAME 1 - { 1, 35, 20, HOSTNAME_FIELD_LEN - 1, - "Domain:", - "The name of the domain that your machine is in, e.g. example.com", - domainname, STRINGOBJ, NULL }, -#define LAYOUT_GATEWAY 2 - { 5, 2, 18, IPADDR_FIELD_LEN - 1, - "IPv4 Gateway:", - "IPv4 address of host forwarding packets to non-local destinations", - gateway, STRINGOBJ, NULL }, -#define LAYOUT_NAMESERVER 3 - { 5, 35, 18, INET6_ADDRSTRLEN - 1, - "Name server:", "IPv4 or IPv6 address of your local DNS server", - nameserver, STRINGOBJ, NULL }, -#define LAYOUT_IPADDR 4 - { 10, 10, 18, IPADDR_FIELD_LEN - 1, - "IPv4 Address:", - "The IPv4 address to be used for this interface", - ipaddr, STRINGOBJ, NULL }, -#define LAYOUT_NETMASK 5 - { 10, 35, 18, IPADDR_FIELD_LEN - 1, - "Netmask:", - "The netmask for this interface, e.g. 0xffffff00 for a class C network", - netmask, STRINGOBJ, NULL }, -#define LAYOUT_EXTRAS 6 - { 14, 10, 37, HOSTNAME_FIELD_LEN - 1, - "Extra options to ifconfig (usually empty):", - "Any interface-specific options to ifconfig you would like to add", - extras, STRINGOBJ, NULL }, -#define LAYOUT_OKBUTTON 7 - { 19, 15, 0, 0, - "OK", "Select this if you are happy with these settings", - &okbutton, BUTTONOBJ, NULL }, -#define LAYOUT_CANCELBUTTON 8 - { 19, 35, 0, 0, - "CANCEL", "Select this if you wish to cancel this screen", - &cancelbutton, BUTTONOBJ, NULL }, - LAYOUT_END, -}; - -#define _validByte(b) ((b) >= 0 && (b) <= 255) - -/* whine */ -static void -feepout(char *msg) -{ - beep(); - msgConfirm("%s", msg); -} - -/* Verify IP address integrity */ -static int -verifyIP(char *ip, unsigned long *mask, unsigned long *out) -{ - long a, b, c, d; - char *endptr, *endptr_prev; - - unsigned long parsedip; - unsigned long max_addr = (255 << 24) | (255 << 16) | (255 << 8) | 255; - - if (ip == NULL) - return 0; - a = strtol(ip, &endptr, 10); - if (endptr - ip == 0 || *endptr++ != '.') - return 0; - endptr_prev = endptr; - b = strtol(endptr, &endptr, 10); - if (endptr - endptr_prev == 0 || *endptr++ != '.') - return 0; - endptr_prev = endptr; - c = strtol(endptr, &endptr, 10); - if (endptr - endptr_prev == 0 || *endptr++ != '.') - return 0; - endptr_prev = endptr; - d = strtol(endptr, &endptr, 10); - if (*endptr != '\0' || endptr - endptr_prev == 0) - return 0; - if (!_validByte(a) || !_validByte(b) || !_validByte(c) || !_validByte(d)) - return 0; - parsedip = (a << 24) | (b << 16) | (c << 8) | d; - if (out) - *out = parsedip; - /* - * The ip address must not be network or broadcast address. - */ - if (mask && ((parsedip == (parsedip & *mask)) || - (parsedip == ((parsedip & *mask) + max_addr - *mask)))) - return 0; - return 1; -} - -static int -verifyIP6(char *ip) -{ - struct addrinfo hints, *res; - - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_INET6; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; - if (getaddrinfo(ip, NULL, &hints, &res) == 0) { - freeaddrinfo(res); - return 1; - } - return 0; -} - -/* Verify IPv4 netmask as being well-formed as - a 0x or AAA.BBB.CCC.DDD mask */ -static int -verifyNetmask(const char *netmask, unsigned long *out) -{ - unsigned long mask; - long tmp; - char *endptr; - - if (netmask[0] == '0' && (netmask[1] == 'x' || netmask[1] == 'X')) { - /* Parse out hex mask */ - mask = strtoul(netmask, &endptr, 0); - if (*endptr != '\0') - return 0; - } else { - /* Parse out quad decimal mask */ - tmp = strtoul(netmask, &endptr, 10); - if (!_validByte(tmp) || *endptr++ != '.') - return 0; - mask = tmp; - tmp = strtoul(endptr, &endptr, 10); - if (!_validByte(tmp) || *endptr++ != '.') - return 0; - mask = (mask << 8) + tmp; - tmp = strtoul(endptr, &endptr, 10); - if (!_validByte(tmp) || *endptr++ != '.') - return 0; - mask = (mask << 8) + tmp; - tmp = strtoul(endptr, &endptr, 10); - if (!_validByte(tmp) || *endptr++ != '\0') - return 0; - mask = (mask << 8) + tmp; - } - /* Verify that we have a continous netmask */ - if ((((-mask & mask) - 1) | mask) != 0xffffffff) - return 0; - if (out) - *out = mask; - return 1; -} - -static int -verifyGW(char *gw, unsigned long *ip, unsigned long *mask) -{ - unsigned long parsedgw; - - if (!verifyIP(gw, mask, &parsedgw)) - return 0; - /* Gateway needs to be within the set of IPs reachable through the - interface */ - if (ip && mask && ((parsedgw & *mask) != (*ip & *mask))) - return 0; - return 1; -} - -/* Check for the settings on the screen - the per-interface stuff is - moved to the main handling code now to do it on the fly - sigh */ -static int -verifySettings(void) -{ - unsigned long parsedip; - unsigned long parsednetmask; - - if (!hostname[0]) - feepout("Must specify a host name of some sort!"); - else if (netmask[0] && !verifyNetmask(netmask, &parsednetmask)) - feepout("Invalid netmask value"); - else if (nameserver[0] && !verifyIP(nameserver, NULL, NULL) && - !verifyIP6(nameserver)) - feepout("Invalid name server IP address specified"); - else if (ipaddr[0] && !verifyIP(ipaddr, &parsednetmask, &parsedip)) - feepout("Invalid IPv4 address"); - else if (gateway[0] && strcmp(gateway, "NO") && - !verifyGW(gateway, ipaddr[0] ? &parsedip : NULL, - netmask[0] ? &parsednetmask : NULL)) - feepout("Invalid gateway IPv4 address specified"); - else - return 1; - return 0; -} - -static void -dhcpGetInfo(Device *devp) -{ - char leasefile[PATH_MAX]; - - snprintf(leasefile, sizeof(leasefile), "%sdhclient.leases.%s", - _PATH_VARDB, devp->name); - /* If it fails, do it the old-fashioned way */ - if (dhcpParseLeases(leasefile, hostname, domainname, - nameserver, ipaddr, gateway, netmask) == -1) { - FILE *ifp; - char *cp, cmd[256], data[2048]; - int i, j; - - /* Bah, now we have to kludge getting the information from ifconfig */ - snprintf(cmd, sizeof cmd, "ifconfig %s", devp->name); - ifp = popen(cmd, "r"); - if (ifp) { - j = fread(data, 1, sizeof(data), ifp); - fclose(ifp); - if (j < 0) /* paranoia */ - j = 0; - data[j] = '\0'; - if (isDebug()) - msgDebug("DHCP configured interface returns %s\n", data); - /* XXX This is gross as it assumes a certain ordering to - ifconfig's output! XXX */ - if ((cp = strstr(data, "inet ")) != NULL) { - i = 0; - cp += 5; /* move over keyword */ - while (*cp != ' ') - ipaddr[i++] = *(cp++); - ipaddr[i] = '\0'; - if (!strncmp(++cp, "netmask", 7)) { - i = 0; - cp += 8; - while (*cp != ' ') - netmask[i++] = *(cp++); - netmask[i] = '\0'; - } - } - } - } - - /* If we didn't get a name server value, hunt for it in resolv.conf */ - if (!nameserver[0] && file_readable("/etc/resolv.conf")) - configEnvironmentResolv("/etc/resolv.conf"); - if (hostname[0]) - variable_set2(VAR_HOSTNAME, hostname, 0); -} - -static void -rtsolGetInfo(Device *devp) -{ - FILE *ifp; - char *cp, cmd[256], data[2048]; - int i; - - snprintf(cmd, sizeof cmd, "ifconfig %s", devp->name); - if ((ifp = popen(cmd, "r")) == NULL) - return; - while (fgets(data, sizeof(data), ifp) != NULL) { - if (isDebug()) - msgDebug("RTSOL configured interface returns %s\n", data); - if ((cp = strstr(data, "inet6 ")) != NULL) { - cp += 6; /* move over keyword */ - if (strncmp(cp, "fe80:", 5)) { - i = 0; - while (*cp != ' ') - ipv6addr[i++] = *(cp++); - ipv6addr[i] = '\0'; - } - } - } - fclose(ifp); -} - -/* This is it - how to get TCP setup values */ -int -tcpOpenDialog(Device *devp) -{ - WINDOW *ds_win, *save = NULL; - ComposeObj *obj = NULL; - int n = 0, filled = 0, cancel = FALSE; - int max, ret = DITEM_SUCCESS; - int use_dhcp = FALSE; - int use_rtsol = FALSE; - char *tmp; - char title[80]; - - save = savescr(); - /* Initialise vars from previous device values */ - if (devp->private) { - DevInfo *di = (DevInfo *)devp->private; - - SAFE_STRCPY(ipaddr, di->ipaddr); - SAFE_STRCPY(netmask, di->netmask); - SAFE_STRCPY(extras, di->extras); - use_dhcp = di->use_dhcp; - use_rtsol = di->use_rtsol; - } - else { /* See if there are any defaults */ - char *cp; - char *old_interactive = NULL; - - /* - * This is a hack so that the dialogs below are interactive in a - * script if we have requested interactive behavior. - */ - if (variable_get(VAR_NONINTERACTIVE) && - variable_get(VAR_NETINTERACTIVE)) { - old_interactive = strdup(VAR_NONINTERACTIVE); - variable_unset(VAR_NONINTERACTIVE); - } - - - /* - * Try a RTSOL scan if such behavior is desired. - * If the variable was configured and is YES, do it. - * If it was configured to anything else, treat it as NO. - * Otherwise, ask the question interactively. - */ - if (!variable_get(VAR_NO_INET6) && - (!variable_cmp(VAR_TRY_RTSOL, "YES") || - (variable_get(VAR_TRY_RTSOL)==0 && !msgNoYes("Do you want to try IPv6 configuration of the interface?")))) { - int i; - size_t len; - - i = 0; - sysctlbyname("net.inet6.ip6.forwarding", NULL, 0, &i, sizeof(i)); - i = 1; - sysctlbyname("net.inet6.ip6.accept_rtadv", NULL, 0, &i, sizeof(i)); - vsystem("ifconfig %s up", devp->name); - len = sizeof(i); - sysctlbyname("net.inet6.ip6.dad_count", &i, &len, NULL, 0); - sleep(i + 1); - Mkdir("/var/run"); - msgNotify("Scanning for RA servers..."); - if (0 == vsystem("rtsol %s", devp->name)) { - len = sizeof(i); - sysctlbyname("net.inet6.ip6.dad_count", &i, &len, NULL, 0); - sleep(i + 1); - rtsolGetInfo(devp); - use_rtsol = TRUE; - } else - use_rtsol = FALSE; - } - - - /* - * First try a DHCP scan if such behavior is desired. - * If the variable was configured and is YES, do it. - * If it was configured to anything else, treat it as NO. - * Otherwise, ask the question interactively. - */ - if (!variable_cmp(VAR_TRY_DHCP, "YES") || - (variable_get(VAR_TRY_DHCP)==0 && !msgNoYes("Do you want to try DHCP configuration of the interface?"))) { - Mkdir("/var/db"); - Mkdir("/var/run"); - Mkdir("/tmp"); - msgNotify("Scanning for DHCP servers..."); - /* XXX clear any existing lease */ - /* XXX limit protocol to N tries */ - if (0 == vsystem("dhclient %s", devp->name)) { - dhcpGetInfo(devp); - use_dhcp = TRUE; - } - else - use_dhcp = FALSE; - } - - /* Restore old VAR_NONINTERACTIVE if needed. */ - if (old_interactive != NULL) { - variable_set2(VAR_NONINTERACTIVE, old_interactive, 0); - free(old_interactive); - } - - /* Special hack so it doesn't show up oddly in the tcpip setup menu */ - if (!strcmp(gateway, "NO")) - gateway[0] = '\0'; - - /* Get old IP address from variable space, if available */ - if (!ipaddr[0]) { - if ((cp = variable_get(VAR_IPADDR)) != NULL) - SAFE_STRCPY(ipaddr, cp); - else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_IPADDR))) != NULL) - SAFE_STRCPY(ipaddr, cp); - } - - /* Get old netmask from variable space, if available */ - if (!netmask[0]) { - if ((cp = variable_get(VAR_NETMASK)) != NULL) - SAFE_STRCPY(netmask, cp); - else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_NETMASK))) != NULL) - SAFE_STRCPY(netmask, cp); - } - - /* Get old extras string from variable space, if available */ - if (!extras[0]) { - if ((cp = variable_get(VAR_EXTRAS)) != NULL) - SAFE_STRCPY(extras, cp); - else if ((cp = variable_get(string_concat3(devp->name, "_", VAR_EXTRAS))) != NULL) - SAFE_STRCPY(extras, cp); - } - } - - /* Look up values already recorded with the system, or blank the string variables ready to accept some new data */ - if (!hostname[0]) { - tmp = variable_get(VAR_HOSTNAME); - if (tmp) - SAFE_STRCPY(hostname, tmp); - } - if (!domainname[0]) { - tmp = variable_get(VAR_DOMAINNAME); - if (tmp) - SAFE_STRCPY(domainname, tmp); - } - if (!gateway[0]) { - tmp = variable_get(VAR_GATEWAY); - if (tmp && strcmp(tmp, "NO")) - SAFE_STRCPY(gateway, tmp); - } - if (!nameserver[0]) { - tmp = variable_get(VAR_NAMESERVER); - if (tmp) - SAFE_STRCPY(nameserver, tmp); - } - - /* If non-interactive, jump straight over the dialog crap and into config section */ - if (variable_get(VAR_NONINTERACTIVE) && - !variable_get(VAR_NETINTERACTIVE)) { - if (!hostname[0]) - msgConfirm("WARNING: hostname variable not set and is a non-optional\n" - "parameter. Please add this to your installation script\n" - "or set the netInteractive variable (see sysinstall man page)"); - else - goto netconfig; - } - - /* Now do all the screen I/O */ - dialog_clear_norefresh(); - - /* Modify the help line for PLIP config */ - if (!strncmp(devp->name, "plip", 4)) - layout[LAYOUT_EXTRAS].help = - "For PLIP configuration, you must enter the peer's IP address here."; - - /* We need a curses window */ - tmp = " Network Configuration "; - if (ipv6addr[0]) - tmp = string_concat(tmp, "(IPv6 ready) "); - if (!(ds_win = openLayoutDialog(TCP_HELPFILE, tmp, - TCP_DIALOG_X, TCP_DIALOG_Y, TCP_DIALOG_WIDTH, TCP_DIALOG_HEIGHT))) { - beep(); - msgConfirm("Cannot open TCP/IP dialog window!!"); - restorescr(save); - return DITEM_FAILURE; - } - - /* Draw interface configuration box */ - draw_box(ds_win, TCP_DIALOG_Y + 9, TCP_DIALOG_X + 8, TCP_DIALOG_HEIGHT - 13, TCP_DIALOG_WIDTH - 17, - dialog_attr, border_attr); - wattrset(ds_win, dialog_attr); - sprintf(title, " Configuration for Interface %s ", devp->name); - mvwaddstr(ds_win, TCP_DIALOG_Y + 9, TCP_DIALOG_X + 14, title); - - /* Some more initialisation before we go into the main input loop */ - obj = initLayoutDialog(ds_win, layout, TCP_DIALOG_X, TCP_DIALOG_Y, &max); - -reenter: - cancelbutton = okbutton = 0; - while (layoutDialogLoop(ds_win, layout, &obj, &n, max, &cancelbutton, &cancel)) { - /* Prevent this from being irritating if user really means NO */ - if (filled < 3) { - /* Insert a default value for the netmask, 0xffffff00 is - * the most appropriate one (entire class C, or subnetted - * class A/B network). - */ - if (!netmask[0]) { - strcpy(netmask, "255.255.255.0"); - RefreshStringObj(layout[LAYOUT_NETMASK].obj); - ++filled; - } - if (!index(hostname, '.') && domainname[0]) { - strcat(hostname, "."); - strcat(hostname, domainname); - RefreshStringObj(layout[LAYOUT_HOSTNAME].obj); - ++filled; - } - else if (((tmp = index(hostname, '.')) != NULL) && !domainname[0]) { - SAFE_STRCPY(domainname, tmp + 1); - RefreshStringObj(layout[LAYOUT_DOMAINNAME].obj); - ++filled; - } - } - } - if (!cancel && !verifySettings()) - goto reenter; - - /* Clear this crap off the screen */ - delwin(ds_win); - dialog_clear_norefresh(); - use_helpfile(NULL); - - /* We actually need to inform the rest of sysinstall about this - data now if the user hasn't selected cancel. Save the stuff - out to the environment via the variable_set() mechanism */ - -netconfig: - if (!cancel) { - DevInfo *di; - char temp[512], ifn[255]; - int ipv4_enable = FALSE; - - if (hostname[0]) { - variable_set2(VAR_HOSTNAME, hostname, 1); - sethostname(hostname, strlen(hostname)); - } - if (domainname[0]) - variable_set2(VAR_DOMAINNAME, domainname, 0); - if (gateway[0]) - variable_set2(VAR_GATEWAY, gateway, use_dhcp ? 0 : 1); - if (nameserver[0]) - variable_set2(VAR_NAMESERVER, nameserver, 0); - if (ipaddr[0]) - variable_set2(VAR_IPADDR, ipaddr, 0); - if (ipv6addr[0]) - variable_set2(VAR_IPV6ADDR, ipv6addr, 0); - - if (!devp->private) - devp->private = (DevInfo *)safe_malloc(sizeof(DevInfo)); - di = devp->private; - SAFE_STRCPY(di->ipaddr, ipaddr); - SAFE_STRCPY(di->netmask, netmask); - SAFE_STRCPY(di->extras, extras); - di->use_dhcp = use_dhcp; - di->use_rtsol = use_rtsol; - - if (use_dhcp || ipaddr[0]) - ipv4_enable = TRUE; - if (ipv4_enable) { - sprintf(ifn, "%s%s", VAR_IFCONFIG, devp->name); - if (use_dhcp) { - if (strlen(extras) > 0) - sprintf(temp, "DHCP %s", extras); - else - sprintf(temp, "DHCP"); - } else - sprintf(temp, "inet %s %s netmask %s", - ipaddr, extras, netmask); - variable_set2(ifn, temp, 1); - } - if (use_rtsol) - variable_set2(VAR_IPV6_ENABLE, "YES", 1); - if (!use_dhcp) - configResolv(NULL); /* XXX this will do it on the MFS copy XXX */ - ret = DITEM_SUCCESS; - } - else - ret = DITEM_FAILURE; - restorescr(save); - return ret; -} - -static Device *NetDev; - -static int -netHook(dialogMenuItem *self) -{ - Device **devs; - - devs = deviceFindDescr(self->prompt, self->title, DEVICE_TYPE_NETWORK); - if (devs) { - if (DITEM_STATUS(tcpOpenDialog(devs[0])) != DITEM_FAILURE) - NetDev = devs[0]; - else - NetDev = NULL; - } - return devs ? DITEM_LEAVE_MENU : DITEM_FAILURE; -} - -static char * -tcpDeviceScan(void) -{ - int s; - struct ifmediareq ifmr; - struct ifaddrs *ifap, *ifa; - char *network_dev; - - if ((s = socket(AF_LOCAL, SOCK_DGRAM, 0)) < 0) - return (NULL); - - if (getifaddrs(&ifap) < 0) - return (NULL); - - for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { - memset(&ifmr, 0, sizeof(ifmr)); - strlcpy(ifmr.ifm_name, ifa->ifa_name, sizeof(ifmr.ifm_name)); - - if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) - continue; /* some devices don't support this */ - - if ((ifmr.ifm_status & IFM_AVALID) == 0) - continue; /* not active */ - - if (IFM_TYPE(ifmr.ifm_active) != IFM_ETHER) - continue; /* not an ethernet device */ - - if (ifmr.ifm_status & IFM_ACTIVE) { - network_dev = strdup(ifa->ifa_name); - freeifaddrs(ifap); - - if (!variable_get(VAR_NONINTERACTIVE)) - msgConfirm("Using interface %s", network_dev); - - msgDebug("tcpDeviceScan found %s", network_dev); - return (network_dev); - } - } - - close(s); - - freeifaddrs(ifap); - - return (NULL); -} - -/* Get a network device */ -Device * -tcpDeviceSelect(void) -{ - DMenu *menu; - Device **devs, *rval; - char *dev, *network_dev; - int cnt; - - rval = NULL; - - if (variable_get(VAR_NETWORK_DEVICE)) { - network_dev = variable_get(VAR_NETWORK_DEVICE); - - /* - * netDev can be set to several types of values. - * If netDev is set to ANY, scan all network devices - * looking for a valid link, and go with the first - * device found. netDev can also be specified as a - * comma delimited list, with each network device - * tried in order. netDev can also be set to a single - * network device. - */ - if (!strcmp(network_dev, "ANY")) - network_dev = strdup(tcpDeviceScan()); - - while ((dev = strsep(&network_dev, ",")) != NULL) { - devs = deviceFind(dev, DEVICE_TYPE_NETWORK); - cnt = deviceCount(devs); - - if (cnt) { - if (DITEM_STATUS(tcpOpenDialog(devs[0])) == DITEM_SUCCESS) - return (devs[0]); - } - } - - if (!variable_get(VAR_NONINTERACTIVE)) - msgConfirm("No network devices available!"); - - return (NULL); - } - - devs = deviceFind(NULL, DEVICE_TYPE_NETWORK); - cnt = deviceCount(devs); - - if ((!RunningAsInit) && (variable_check("NETWORK_CONFIGURED=NO") != TRUE)) { - if (!msgYesNo("Running multi-user, assume that the network is already configured?")) - return devs[0]; - } - if (cnt == 1) { - if (DITEM_STATUS(tcpOpenDialog(devs[0]) == DITEM_SUCCESS)) - rval = devs[0]; - } - else { - int status; - - menu = deviceCreateMenu(&MenuNetworkDevice, DEVICE_TYPE_NETWORK, netHook, NULL); - if (!menu) - msgFatal("Unable to create network device menu! Argh!"); - status = dmenuOpenSimple(menu, FALSE); - free(menu); - if (status) - rval = NetDev; - } - return rval; -} - -/* Do it from a menu that doesn't care about status */ -int -tcpMenuSelect(dialogMenuItem *self) -{ - Device *tmp; - WINDOW *save; - - variable_set("NETWORK_CONFIGURED=NO",0); - tmp = tcpDeviceSelect(); - variable_unset("NETWORK_CONFIGURED"); - save = savescr(); - if (tmp && tmp->private && !((DevInfo *)tmp->private)->use_dhcp && !msgYesNo("Would you like to bring the %s interface up right now?", tmp->name)) - if (!DEVICE_INIT(tmp)) - msgConfirm("Initialization of %s device failed.", tmp->name); - restorescr(save); - return DITEM_SUCCESS; -} diff --git a/usr.sbin/sysinstall/termcap.c b/usr.sbin/sysinstall/termcap.c deleted file mode 100644 index 4dc36c2..0000000 --- a/usr.sbin/sysinstall/termcap.c +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 1994, Paul Richards. - * - * All rights reserved. - * - * This software may be used, modified, copied, distributed, and sold, in both - * source and binary form provided that the above copyright and these terms - * are retained, verbatim, as the first lines of this file. Under no - * circumstances is the author responsible for the proper functioning of this - * software, nor does the author assume any responsibility for damages - * incurred with its use. - * - * $FreeBSD$ - */ - -#include "sysinstall.h" -#include <stdarg.h> -#include <fcntl.h> -#include <sys/errno.h> -#include <sys/ioctl.h> -#include <sys/consio.h> - -#define VTY_STATUS_LINE 24 -#define TTY_STATUS_LINE 23 - -static void -prompt_term(char **termp, char **termcapp) -{ - char str[80]; - static struct { - const char *term, *termcap; - } lookup[] = { { "ansi", termcap_ansi }, - { "vt100", termcap_vt100 }, - { "cons25", termcap_cons25 }, - { "cons25-m", termcap_cons25_m }, - { "xterm", termcap_xterm }, - { "cons25w", termcap_cons25w } }; /* must be last */ - - if (RunningAsInit) { - while (1) { - int i; - - printf("\nThese are the predefined terminal types available to\n"); - printf("sysinstall when running stand-alone. Please choose the\n"); - printf("closest match for your particular terminal.\n\n"); - printf("1 ...................... Standard ANSI terminal.\n"); - printf("2 ...................... VT100 or compatible terminal.\n"); - printf("3 ...................... FreeBSD system console (color).\n"); - printf("4 ...................... FreeBSD system console (monochrome).\n\n"); - printf("5 ...................... xterm terminal emulator.\n\n"); - printf("Your choice: (1-5) "); - fflush(stdout); - fgets(str, sizeof(str), stdin); - i = str[0] - '0'; - if (i > 0 && i < 6) { - *termp = (char *)lookup[i - 1].term; - *termcapp = (char *)lookup[i - 1].termcap; - break; - } - else - printf("\007Invalid choice, please try again.\n\n"); - } - } - else { - printf("\nPlease set your TERM variable before running this program.\n"); - printf("Defaulting to an ANSI compatible terminal - please press RETURN\n"); - fgets(str, sizeof(str), stdin); /* Just to make it interactive */ - *termp = (char *)"ansi"; - *termcapp = (char *)termcap_ansi; - } -} - -int -set_termcap(void) -{ - char *term; - int stat; - struct winsize ws; - - term = getenv("TERM"); - stat = ioctl(STDERR_FILENO, GIO_COLOR, &ColorDisplay); - - if (!RunningAsInit) { - if (isDebug()) - DebugFD = open("sysinstall.debug", O_WRONLY|O_CREAT|O_TRUNC, 0644); - else - DebugFD = -1; - if (DebugFD < 0) - DebugFD = open("/dev/null", O_RDWR, 0); - } - - if (!OnVTY || (stat < 0)) { - if (!term) { - char *term, *termcap; - - prompt_term(&term, &termcap); - if (setenv("TERM", term, 1) < 0) - return -1; - if (setenv("TERMCAP", termcap, 1) < 0) - return -1; - } - if (DebugFD < 0) - DebugFD = open("/dev/null", O_RDWR, 0); - } - else { - int i, on; - - if (RunningAsInit) { - DebugFD = open("/dev/ttyv1", O_WRONLY); - if (DebugFD != -1) { - on = 1; - i = ioctl(DebugFD, TIOCCONS, (char *)&on); - msgDebug("ioctl(%d, TIOCCONS, NULL) = %d (%s)\n", - DebugFD, i, !i ? "success" : strerror(errno)); - } - } - -#ifdef PC98 - if (!term) { - if (setenv("TERM", "cons25w", 1) < 0) - return -1; - if (setenv("TERMCAP", termcap_cons25w, 1) < 0) - return -1; - } -#else - if (ColorDisplay) { - if (!term) { - if (setenv("TERM", "xterm", 1) < 0) - return -1; - if (setenv("TERMCAP", termcap_xterm, 1) < 0) - return -1; - } - } - else { - if (!term) { - if (setenv("TERM", "vt100", 1) < 0) - return -1; - if (setenv("TERMCAP", termcap_vt100, 1) < 0) - return -1; - } - } -#endif - } - if (ioctl(0, TIOCGWINSZ, &ws) == -1) { - msgDebug("Unable to get terminal size - errno %d\n", errno); - ws.ws_row = 0; - } - StatusLine = ws.ws_row ? ws.ws_row - 1: (OnVTY ? VTY_STATUS_LINE : TTY_STATUS_LINE); - return 0; -} diff --git a/usr.sbin/sysinstall/ttys.c b/usr.sbin/sysinstall/ttys.c deleted file mode 100644 index 0de954c..0000000 --- a/usr.sbin/sysinstall/ttys.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 2001 - * Andrey A. Chernov. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY ANDREY A. CHERNOV ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL ANDREY A. CHERNOV OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/stat.h> -#include <ctype.h> -#include <ttyent.h> - -#define _X_EXTENSION ".XXXXXX" - -void -configTtys(void) -{ - size_t len; - int t, tlen, changed; - FILE *fp, *np; - char sq, *line, *p, *q, *cp, *tptr; - char templ[sizeof(_PATH_TTYS) + sizeof(_X_EXTENSION) - 1]; - struct ttyent *tnam; - - if ((cp = variable_get(VAR_CONSTERM)) == NULL || - strcmp(cp, "NO") == 0) - return; - if (!file_readable(_PATH_TTYS)) { - msgConfirm("%s not exist or not readable", _PATH_TTYS); - return; - } - if ((fp = fopen(_PATH_TTYS, "r")) == NULL) { - msgConfirm("Can't open %s for read: %s", _PATH_TTYS, - strerror(errno)); - return; - } - strcpy(templ, _PATH_TTYS _X_EXTENSION); - if ((t = mkstemp(templ)) < 0) { - msgConfirm("Can't create %s: %s", templ, strerror(errno)); - (void)fclose(fp); - return; - } - if (fchmod(t, 0644)) { - msgConfirm("Can't fchmod %s: %s", templ, strerror(errno)); - (void)fclose(fp); - return; - } - if ((np = fdopen(t, "w")) == NULL) { - msgConfirm("Can't fdopen %s: %s", templ, strerror(errno)); - (void)close(t); - (void)fclose(fp); - (void)unlink(templ); - return; - } - changed = 0; - while ((line = fgetln(fp, &len)) != NULL) { - p = line; - while (p < (line + len) && isspace((unsigned char)*p)) - ++p; - if (strncmp(p, "ttyv", 4) != 0) { - dump: - if (fwrite(line, len, 1, np) != 1) { - wrerr: - msgConfirm("%s: write error: %s", templ, strerror(errno)); - (void)fclose(fp); - (void)fclose(np); - (void)unlink(templ); - return; - } - } else { - q = p; - while(q < (line + len) && !isspace((unsigned char)*q)) - ++q; - if (!isspace((unsigned char)*q)) - goto dump; - sq = *q; - *q = '\0'; - tnam = getttynam(p); - *q = sq; - if (tnam == NULL || tnam->ty_type == NULL || - strcmp(tnam->ty_type, cp) == 0 || - strncmp(tnam->ty_type, "cons", 4) != 0 || - !isdigit((unsigned char)tnam->ty_type[4]) - ) - goto dump; - tlen = strlen(tnam->ty_type); - tptr = NULL; - p = ++q; - while(p < (line + len)) { - if (strncmp(p, tnam->ty_type, tlen) == 0) { - tptr = p; - break; - } - ++p; - } - if (tptr == NULL) - goto dump; - changed = 1; - if (fwrite(line, tptr - line, 1, np) != 1 || - fputs(cp, np) || - fwrite(tptr + tlen, - len - (tptr + tlen - line), 1, np) != 1) - goto wrerr; - } - } - if (!feof(fp)) { - msgConfirm("%s: read error: %s", _PATH_TTYS, strerror(errno)); - (void)fclose(fp); - (void)fclose(np); - (void)unlink(templ); - return; - } - (void)fclose(fp); - if (fclose(np)) { - if (changed) - msgConfirm("%s: close error: %s", templ, strerror(errno)); - else - variable_set2(VAR_CONSTERM, "NO", 0); - (void)unlink(templ); - return; - } - if (!changed) { - (void)unlink(templ); - variable_set2(VAR_CONSTERM, "NO", 0); - return; - } - if (rename(templ, _PATH_TTYS)) { - msgConfirm("Can't rename %s to %s: %s", templ, _PATH_TTYS, - strerror(errno)); - return; - } - variable_set2(VAR_CONSTERM, "NO", 0); -} diff --git a/usr.sbin/sysinstall/ufs.c b/usr.sbin/sysinstall/ufs.c deleted file mode 100644 index d8a6fcf..0000000 --- a/usr.sbin/sysinstall/ufs.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last attempt in the `sysinstall' line, the next - * generation being slated to essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * Copyright (c) 1995 - * Gary J Palmer. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <sys/fcntl.h> -#include <sys/param.h> -#include <sys/mount.h> -#include <ufs/ufs/ufsmount.h> - -static Boolean UFSMounted; -static char mountpoint[] = "/dist"; - -Boolean -mediaInitUFS(Device *dev) -{ - struct ufs_args args; - - if (UFSMounted) - return TRUE; - - Mkdir(mountpoint); - memset(&args, 0, sizeof(args)); - args.fspec = dev->devname; - - if (mount("ufs", mountpoint, MNT_RDONLY, (caddr_t)&args) == -1) { - msgConfirm("Error mounting %s on %s: %s (%u)", args.fspec, mountpoint, strerror(errno), errno); - return FALSE; - } - UFSMounted = TRUE; - return TRUE; -} - -FILE * -mediaGetUFS(Device *dev, char *file, Boolean probe) -{ - return mediaGenericGet((char *)dev->private, file); -} - -void -mediaShutdownUFS(Device *dev) -{ - if (!UFSMounted) - return; - if (unmount(mountpoint, MNT_FORCE) != 0) - msgConfirm("Could not unmount the UFS partition from %s: %s", - mountpoint, strerror(errno)); - else - UFSMounted = FALSE; - return; -} diff --git a/usr.sbin/sysinstall/usb.c b/usr.sbin/sysinstall/usb.c deleted file mode 100644 index 5be8ac1..0000000 --- a/usr.sbin/sysinstall/usb.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * used floppy.c and cdrom.c as templates, edited as necessary. - * - * $FreeBSD$ - */ - -#include <sys/fcntl.h> -#include <sys/param.h> -#include <sys/mount.h> - -#include <ufs/ufs/ufsmount.h> - -#include "sysinstall.h" - -static Boolean USBMounted; -static char mountpoint[] = "/dist"; - -Boolean -mediaInitUSB(Device *dev) -{ - struct ufs_args ufsargs; - - if (USBMounted) - return TRUE; - - Mkdir(mountpoint); - - memset(&ufsargs, 0, sizeof(ufsargs)); - ufsargs.fspec = dev->devname; - - if (mount("ufs", mountpoint, MNT_RDONLY, (caddr_t)&ufsargs) != -1) { - USBMounted = TRUE; - return TRUE; - } - - msgConfirm("Error mounting USB drive %s (%s) on %s : %s", - dev->name, dev->devname, mountpoint, strerror(errno)); - return FALSE; -} - - -FILE * -mediaGetUSB(Device *dev, char *file, Boolean probe) -{ - return mediaGenericGet(mountpoint, file); -} - - -/* - * When sysinstall terminates, all USB drives handled by deviceRegister will - * be checked and unmounted if necessary. - */ -void -mediaShutdownUSB(Device *dev) -{ - if (!USBMounted) - return; - - if (unmount(mountpoint, MNT_FORCE) != 0) - msgConfirm("Could not unmount the USB drive from %s: %s", - mountpoint, strerror(errno)); - else - USBMounted = FALSE; - -} diff --git a/usr.sbin/sysinstall/user.c b/usr.sbin/sysinstall/user.c deleted file mode 100644 index 72b6716..0000000 --- a/usr.sbin/sysinstall/user.c +++ /dev/null @@ -1,751 +0,0 @@ -/* - * $FreeBSD$ - * - * Copyright (c) 1996 - * Jörg Wunsch. All rights reserved. - * - * The basic structure has been taken from tcpip.c, which is: - * - * Copyright (c) 1995 - * Gary J Palmer. All rights reserved. - * Jordan K Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR - * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include "sysinstall.h" -#include <ctype.h> -#include <sys/param.h> -#include <sysexits.h> - -/* The help file for the user mgmt screen */ -#define USER_HELPFILE "usermgmt" - -/* XXX should they be moved out to sysinstall.h? */ -#define GNAME_FIELD_LEN 32 -#define GID_FIELD_LEN 11 -#define GMEMB_FIELD_LEN 64 -#define UNAME_FIELD_LEN MAXLOGNAME -#define UID_FIELD_LEN 11 -#define UGROUP_FIELD_LEN GNAME_FIELD_LEN -#define GECOS_FIELD_LEN 64 -#define UMEMB_FIELD_LEN GMEMB_FIELD_LEN -#define HOMEDIR_FIELD_LEN 48 -#define SHELL_FIELD_LEN 48 -#define PASSWD_FIELD_LEN 32 - -/* These are nasty, but they make the layout structure a lot easier ... */ - -static char gname[GNAME_FIELD_LEN], - gid[GID_FIELD_LEN], - gmemb[GMEMB_FIELD_LEN], - uname[UNAME_FIELD_LEN], - passwd[PASSWD_FIELD_LEN], - confpasswd[PASSWD_FIELD_LEN], - uid[UID_FIELD_LEN], - ugroup[UGROUP_FIELD_LEN], - gecos[GECOS_FIELD_LEN], - umemb[UMEMB_FIELD_LEN], - homedir[HOMEDIR_FIELD_LEN], - shell[SHELL_FIELD_LEN]; -#define CLEAR(v) memset(v, 0, sizeof v) - -static int okbutton, cancelbutton; - - -/* What the screen size is meant to be */ -#define USER_DIALOG_Y 0 -#define USER_DIALOG_X 8 -#define USER_DIALOG_WIDTH COLS - 16 -#define USER_DIALOG_HEIGHT LINES - 1 - -/* The group configuration menu. */ -static Layout groupLayout[] = { -#define LAYOUT_GNAME 0 - { 4, 10, 20, GNAME_FIELD_LEN - 1, - "Group name:", "The alphanumeric name of the new group (mandatory)", - gname, STRINGOBJ, NULL }, -#define LAYOUT_GID 1 - { 4, 38, 10, GID_FIELD_LEN - 1, - "GID:", "The numerical ID for this group (leave blank for automatic choice)", - gid, STRINGOBJ, NULL }, -#define LAYOUT_GMEMB 2 - { 11, 10, 40, GMEMB_FIELD_LEN - 1, - "Group members:", "Who belongs to this group (i.e., gets access rights for it)", - gmemb, STRINGOBJ, NULL }, -#define LAYOUT_OKBUTTON 3 - { 18, 15, 0, 0, - "OK", "Select this if you are happy with these settings", - &okbutton, BUTTONOBJ, NULL }, -#define LAYOUT_CANCELBUTTON 4 - { 18, 35, 0, 0, - "CANCEL", "Select this if you wish to cancel this screen", - &cancelbutton, BUTTONOBJ, NULL }, - LAYOUT_END, -}; - -/* The user configuration menu. */ -static Layout userLayout[] = { -#define LAYOUT_UNAME 0 - { 2, 6, 16, UNAME_FIELD_LEN - 1, - "Login ID:", "The login name of the new user (mandatory)", - uname, STRINGOBJ, NULL }, -#define LAYOUT_UID 1 - { 2, 23, 8, UID_FIELD_LEN - 1, - "UID:", "The numerical ID for this user (leave blank for automatic choice)", - uid, STRINGOBJ, NULL }, -#define LAYOUT_UGROUP 2 - { 2, 33, 8, UGROUP_FIELD_LEN - 1, - "Group:", "The login group name for this user (leave blank for automatic choice)", - ugroup, STRINGOBJ, NULL }, -#define LAYOUT_PASSWD 3 - { 6, 6, 20, PASSWD_FIELD_LEN - 1, - "Password:", "The password for this user (enter this field with care!)", - passwd, NO_ECHO_OBJ(STRINGOBJ), NULL }, -#define LAYOUT_CONFPASSWD 4 - { 6, 28, 20, PASSWD_FIELD_LEN - 1, - "Confirm Password:", "Confirm what you typed for the password", - confpasswd, NO_ECHO_OBJ(STRINGOBJ), NULL }, -#define LAYOUT_GECOS 5 - { 10, 6, 33, GECOS_FIELD_LEN - 1, - "Full name:", "The user's full name (comment)", - gecos, STRINGOBJ, NULL }, -#define LAYOUT_UMEMB 6 - { 10, 43, 15, UMEMB_FIELD_LEN - 1, - "Member groups:", "The groups this user belongs to (i.e. gets access rights for)", - umemb, STRINGOBJ, NULL }, -#define LAYOUT_HOMEDIR 7 - { 14, 6, 20, HOMEDIR_FIELD_LEN - 1, - "Home directory:", "The user's home directory (leave blank for default)", - homedir, STRINGOBJ, NULL }, -#define LAYOUT_SHELL 8 - { 14, 29, 29, SHELL_FIELD_LEN - 1, - "Login shell:", "The user's login shell (leave blank for default)", - shell, STRINGOBJ, NULL }, -#define LAYOUT_U_OKBUTTON 9 - { 18, 15, 0, 0, - "OK", "Select this if you are happy with these settings", - &okbutton, BUTTONOBJ, NULL }, -#define LAYOUT_U_CANCELBUTTON 10 - { 18, 35, 0, 0, - "CANCEL", "Select this if you wish to cancel this screen", - &cancelbutton, BUTTONOBJ, NULL }, - LAYOUT_END, -}; - -/* whine */ -static void -feepout(char *msg) -{ - beep(); - dialog_notify(msg); -} - -/* Check for the settings on the screen. */ - -static int -verifyGroupSettings(void) -{ - char tmp[256], *cp; - unsigned long lgid; - - if (strlen(gname) == 0) { - feepout("The group name field must not be empty!"); - return 0; - } - snprintf(tmp, 256, "pw group show -q -n %s > /dev/null", gname); - if (vsystem("%s", tmp) == 0) { - feepout("This group name is already in use."); - return 0; - } - if (strlen(gid) > 0) { - lgid = strtoul(gid, &cp, 10); - if (lgid == 0 || lgid > GID_MAX || (*cp != '\0' && !isspace(*cp))) { - feepout("The GID must be a number between 1 and 4294967295."); - return 0; - } - } - if (strlen(gmemb) > 0) { - if (strpbrk(gmemb, " \t") != NULL) { - feepout("The group member list must not contain any whitespace;\n" - "use commas to separate the names."); - return 0; - } -#ifndef notyet /* XXX */ - feepout("Sorry, the group member list feature\n" - "is currently not yet implemented."); - return 0; -#endif - } - - return 1; -} - -/* - * Ask pw(8) to fill in the blanks for us. - * Works solely on the global variables. - */ - -static void -completeGroup(void) -{ - int pfd[2], i; - char tmp[256], *cp; - ssize_t l; - size_t amnt; - pid_t pid; - char *vec[4] = - { - "pw", "group", "next", 0 - }; - - pipe (pfd); - if ((pid = fork()) == 0) - { - /* The kiddy. */ - dup2(pfd[1], 1); - dup2(pfd[1], 2); - for (i = getdtablesize(); i > 2; i--) - close(i); - - execv("/usr/sbin/pw", vec); - msgDebug("Cannot execv() /usr/sbin/pw.\n"); - _exit(99); - } - else - { - /* The oldie. */ - close(pfd[1]); - amnt = sizeof tmp; - i = 0; - while((l = read(pfd[0], &tmp[i], amnt)) > 0) - { - amnt -= l; - i += l; - if (amnt == 0) - { - close(pfd[0]); - break; - } - } - close(pfd[0]); - tmp[i] = '\0'; - waitpid(pid, &i, 0); - if (WIFSIGNALED(i) || WEXITSTATUS(i) != 0) - /* ignore by now */ - return; - if ((cp = strchr(tmp, '\n')) != NULL) - *cp = '\0'; - strncpy(gid, tmp, sizeof gid); - } -} - -static void -addGroup(WINDOW *ds_win) -{ - char tmp[256]; - int pfd[2], i; - ssize_t l; - size_t amnt; - pid_t pid; - char *vec[8] = - { - "pw", "group", "add", "-n", 0, "-g", 0, 0 - }; -#define VEC_GNAME 4 -#define VEC_GID 6 - - msgNotify("Adding group \"%s\"...", gname); - - pipe (pfd); - if ((pid = fork()) == 0) - { - /* The kiddy. */ - dup2(pfd[1], 1); - dup2(pfd[1], 2); - for (i = getdtablesize(); i > 2; i--) - close(i); - - vec[VEC_GNAME] = gname; - - if (strlen(gid) > 0) - vec[VEC_GID] = gid; - else - vec[VEC_GID - 1] = 0; - - execv("/usr/sbin/pw", vec); - msgDebug("Cannot execv() /usr/sbin/pw.\n"); - _exit(99); - } - else - { - /* The oldie. */ - close(pfd[1]); - amnt = sizeof tmp; - i = 0; - while((l = read(pfd[0], &tmp[i], amnt)) > 0) - { - amnt -= l; - i += l; - if (amnt == 0) - { - close(pfd[0]); - break; - } - } - close(pfd[0]); - tmp[i] = '\0'; - waitpid(pid, &i, 0); - if (WIFSIGNALED(i)) - msgDebug("pw(8) exited with signal %d.\n", WTERMSIG(i)); - else if(WEXITSTATUS(i)) - { - i = 0; - if(strncmp(tmp, "pw: ", 4) == 0) - i = 4; - tmp[sizeof tmp - 1] = '\0'; /* sanity */ - msgConfirm("The `pw' command exited with an error status.\n" - "Its error message was:\n\n%s", - &tmp[i]); - } - } -#undef VEC_GNAME -#undef VEC_GID -} - -int -userAddGroup(dialogMenuItem *self) -{ - WINDOW *ds_win, *save; - ComposeObj *obj = NULL; - int n = 0, cancel = FALSE, ret; - int max, firsttime = TRUE; - - if (RunningAsInit && !strstr(variable_get(SYSTEM_STATE), "install")) { - msgConfirm("This option may only be used after the system is installed, sorry!"); - return DITEM_FAILURE; - } - - save = savescr(); - dialog_clear_norefresh(); - /* We need a curses window */ - if (!(ds_win = openLayoutDialog(USER_HELPFILE, " User and Group Management ", - USER_DIALOG_X, USER_DIALOG_Y, USER_DIALOG_WIDTH, USER_DIALOG_HEIGHT))) { - beep(); - msgConfirm("Cannot open addgroup dialog window!!"); - return(DITEM_FAILURE); - } - - /* Draw a group entry box */ - draw_box(ds_win, USER_DIALOG_Y + 2, USER_DIALOG_X + 8, USER_DIALOG_HEIGHT - 8, - USER_DIALOG_WIDTH - 17, dialog_attr, border_attr); - wattrset(ds_win, dialog_attr); - mvwaddstr(ds_win, USER_DIALOG_Y + 2, USER_DIALOG_X + 22, " Add a new group "); - - CLEAR(gname); - CLEAR(gid); - CLEAR(gmemb); - - /* Some more initialisation before we go into the main input loop */ - obj = initLayoutDialog(ds_win, groupLayout, USER_DIALOG_X, USER_DIALOG_Y, &max); - -reenter: - cancelbutton = okbutton = 0; - if (firsttime) { - /* fill in the blanks, well, just the GID */ - completeGroup(); - RefreshStringObj(groupLayout[LAYOUT_GID].obj); - firsttime = FALSE; - } - - while (layoutDialogLoop(ds_win, groupLayout, &obj, &n, max, &cancelbutton, &cancel)); - - if (!cancel && !verifyGroupSettings()) - goto reenter; - - /* Clear this crap off the screen */ - delwin(ds_win); - dialog_clear_norefresh(); - use_helpfile(NULL); - - if (!cancel) { - addGroup(ds_win); - ret = DITEM_SUCCESS; - } - else - ret = DITEM_FAILURE; - restorescr(save); - return ret; -} - -/* Check for the settings on the screen. */ - -static int -verifyUserSettings(WINDOW *ds_win) -{ - char tmp[256], *cp; - unsigned long luid; - WINDOW *save; - int rv; - - if (strlen(uname) == 0) { - feepout("The user name field must not be empty!"); - return 0; - } - snprintf(tmp, 256, "pw user show -q -n %s > /dev/null", uname); - if (vsystem("%s", tmp) == 0) { - feepout("This user name is already in use."); - return 0; - } - if (strlen(uid) > 0) { - luid = strtoul(uid, &cp, 10); - if (luid == 0 || luid > UID_MAX || (*cp != '\0' && !isspace(*cp))) { - feepout("The UID must be a number between 1 and 4294967295."); - return 0; - } - } - if (strcmp(passwd, confpasswd)) { - feepout("Passwords don't match"); - return 0; - } - if ((homedir[0]!=0) && (homedir[0]!='/')) { - feepout("The pathname for home directories must begin with a '/'."); - return 0; - } - if (strlen(shell) > 0) { - setusershell(); - while((cp = getusershell()) != NULL) - if (strcmp(cp, shell) == 0) - break; - endusershell(); - if (cp == NULL) { - save = savescr(); - rv = msgYesNo("Warning:\n\n" - "The requested shell \"%s\" is not\n" - "a valid user shell.\n\n" - "Use it anyway?\n", shell); - restorescr(save); - wrefresh(ds_win); - if (rv != DITEM_SUCCESS) - return 0; - } - - } - - if (strlen(umemb) > 0) { - if (strpbrk(umemb, " \t") != NULL) { - feepout("The member groups list must not contain any whitespace;\n" - "use commas to separate the names."); - return 0; - } - } - - return 1; -} - -/* - * Ask pw(8) to fill in the blanks for us. - * Works solely on the global variables. - */ - -static void -completeUser(void) -{ - int pfd[2], i; - char tmp[256], *cp, *cp2; - ssize_t l; - size_t amnt; - pid_t pid; - char *vec[7] = - { - "pw", "user", "add", "-N", "-n", 0, 0 - }; -#define VEC_UNAME 5 - - pipe (pfd); - if ((pid = fork()) == 0) - { - /* The kiddy. */ - dup2(pfd[1], 1); - dup2(pfd[1], 2); - for (i = getdtablesize(); i > 2; i--) - close(i); - - vec[VEC_UNAME] = uname; - - execv("/usr/sbin/pw", vec); - msgDebug("Cannot execv() /usr/sbin/pw.\n"); - _exit(99); - } - else - { - /* The oldie. */ - close(pfd[1]); - amnt = sizeof tmp; - i = 0; - while((l = read(pfd[0], &tmp[i], amnt)) > 0) - { - amnt -= l; - i += l; - if (amnt == 0) - { - close(pfd[0]); - break; - } - } - close(pfd[0]); - tmp[i] = '\0'; - waitpid(pid, &i, 0); - if (WIFSIGNALED(i) || WEXITSTATUS(i) != 0) - /* ignore by now */ - return; - if ((cp = strchr(tmp, '\n')) != NULL) - *cp = '\0'; - if ((cp = strchr(tmp, ':')) == NULL || (cp = strchr(++cp, ':')) == NULL) - return; - cp++; - if ((cp2 = strchr(cp, ':')) == NULL) - return; - *cp2++ = '\0'; - strncpy(uid, cp, sizeof uid); - cp = cp2; - if ((cp2 = strchr(cp, ':')) == NULL) - return; - *cp2++ = '\0'; -#ifdef notyet /* XXX pw user add -g doesn't accept a numerical GID */ - strncpy(ugroup, cp, sizeof ugroup); -#endif - cp = cp2; - if ((cp2 = strchr(cp, ':')) == NULL || (cp2 = strchr(++cp2, ':')) == NULL || - (cp = cp2 = strchr(++cp2, ':')) == NULL || (cp2 = strchr(++cp2, ':')) == NULL) - return; - *cp2++ = '\0'; - cp++; - strncpy(gecos, cp, sizeof gecos); - cp = cp2; - if ((cp2 = strchr(cp, ':')) == NULL) - return; - *cp2++ = '\0'; - if (*cp2) - strncpy(shell, cp2, sizeof shell); - } -#undef VEC_UNAME -} - -static void -addUser(WINDOW *ds_win) -{ - char tmp[256], *msg; - int pfd[2], ipfd[2], i, j; - ssize_t l; - size_t amnt; - pid_t pid; - /* - * Maximal list: - * pw user add -m -n uname -g grp -u uid -c comment -d homedir -s shell -G grplist -h 0 - */ - char *vec[21] = - { - "pw", "user", "add", "-m", "-n", /* ... */ - }; -#define VEC_UNAME 5 - - msgNotify("Adding user \"%s\"...", uname); - - pipe (pfd); - pipe (ipfd); - if ((pid = fork()) == 0) - { - /* The kiddy. */ - dup2(ipfd[0], 0); - dup2(pfd[1], 1); - dup2(pfd[1], 2); - for (i = getdtablesize(); i > 2; i--) - close(i); - - vec[i = VEC_UNAME] = uname; - i++; -#define ADDVEC(var, option) do { if (strlen(var) > 0) { vec[i++] = option; vec[i++] = var; } } while (0) - ADDVEC(ugroup, "-g"); - ADDVEC(uid, "-u"); - ADDVEC(gecos, "-c"); - ADDVEC(homedir, "-d"); - ADDVEC(shell, "-s"); - ADDVEC(umemb, "-G"); - if (passwd[0]) { - vec[i++] = "-h"; - vec[i++] = "0"; - } - vec[i] = 0; - - execv("/usr/sbin/pw", vec); - msgDebug("Cannot execv() /usr/sbin/pw.\n"); - _exit(99); - } - else - { - /* The oldie. */ - close(pfd[1]); - close(ipfd[0]); - - if (passwd[0]) - write(ipfd[1], passwd, strlen(passwd)); - close(ipfd[1]); - amnt = sizeof tmp; - i = 0; - while((l = read(pfd[0], &tmp[i], amnt)) > 0) - { - amnt -= l; - i += l; - if (amnt == 0) - { - close(pfd[0]); - break; - } - } - close(pfd[0]); - tmp[i] = '\0'; - waitpid(pid, &i, 0); - if (WIFSIGNALED(i)) - { - j = WTERMSIG(i); - msg = "The `pw' command exited with signal %d.\n"; - goto sysfail; - } - else if((j = WEXITSTATUS(i))) - { - i = 0; - if(strncmp(tmp, "pw: ", 4) == 0) - i = 4; - tmp[sizeof tmp - 1] = '\0'; /* sanity */ - if (j == EX_DATAERR || j == EX_NOUSER || j == EX_SOFTWARE) - msgConfirm("The `pw' command exited with an error status.\n" - "Its error message was:\n\n%s", - &tmp[i]); - else - { - msg = "The `pw' command exited with unexpected status %d.\n"; - sysfail: - msgDebug(msg, j); - msgDebug("Command stdout and stderr was:\n\n%s", tmp); - msgConfirm(msg, j); - } - } - else if (!passwd[0]) - msgConfirm("You will need to enter a password for this user\n" - "later, using the passwd(1) command from the shell.\n\n" - "The account for `%s' is currently still disabled.", - uname); - } -#undef VEC_UNAME -#undef ADDVEC -} - -int -userAddUser(dialogMenuItem *self) -{ - WINDOW *ds_win, *save; - ComposeObj *obj = NULL; - int n = 0, cancel = FALSE, ret; - int max, firsttime = TRUE, filled=0; - - if (RunningAsInit && !strstr(variable_get(SYSTEM_STATE), "install")) { - msgConfirm("This option may only be used after the system is installed, sorry!"); - return DITEM_FAILURE; - } - - save = savescr(); - dialog_clear_norefresh(); - - /* We need a curses window */ - if (!(ds_win = openLayoutDialog(USER_HELPFILE, " User and Group Management ", - USER_DIALOG_X, USER_DIALOG_Y, USER_DIALOG_WIDTH, USER_DIALOG_HEIGHT))) { - beep(); - msgConfirm("Cannot open adduser dialog window!!"); - return(DITEM_FAILURE); - } - - /* Draw a user entry box */ - draw_box(ds_win, USER_DIALOG_Y + 1, USER_DIALOG_X + 3, USER_DIALOG_HEIGHT - 6, - USER_DIALOG_WIDTH - 6, dialog_attr, border_attr); - wattrset(ds_win, dialog_attr); - mvwaddstr(ds_win, USER_DIALOG_Y + 1, USER_DIALOG_X + 24, " Add a new user "); - - CLEAR(uname); - CLEAR(uid); - CLEAR(ugroup); - CLEAR(gecos); - CLEAR(passwd); - CLEAR(confpasswd); - CLEAR(umemb); - CLEAR(homedir); - CLEAR(shell); - - /* Some more initialisation before we go into the main input loop */ - obj = initLayoutDialog(ds_win, userLayout, USER_DIALOG_X, USER_DIALOG_Y, &max); - -reenter: - cancelbutton = okbutton = 0; - if (firsttime) { - /* fill in the blanks, well, just the GID */ - completeUser(); - RefreshStringObj(userLayout[LAYOUT_UID].obj); - RefreshStringObj(userLayout[LAYOUT_UGROUP].obj); - RefreshStringObj(userLayout[LAYOUT_GECOS].obj); - RefreshStringObj(userLayout[LAYOUT_UMEMB].obj); - RefreshStringObj(userLayout[LAYOUT_HOMEDIR].obj); - RefreshStringObj(userLayout[LAYOUT_SHELL].obj); - firsttime = FALSE; - } - - while (layoutDialogLoop(ds_win, userLayout, &obj, &n, max, &cancelbutton, &cancel)) { - /* Prevent this from being irritating if user really means NO */ - if (filled < 3) { - if ((uname[0]) && !homedir[0]) { - SAFE_STRCPY(homedir,"/home/"); - strcat(homedir,uname); - RefreshStringObj(userLayout[LAYOUT_HOMEDIR].obj); - ++filled; - } - } - }; - - if (!cancel && !verifyUserSettings(ds_win)) - goto reenter; - - /* Clear this crap off the screen */ - delwin(ds_win); - dialog_clear_norefresh(); - use_helpfile(NULL); - - if (!cancel) { - addUser(ds_win); - ret = DITEM_SUCCESS; - } - else - ret = DITEM_FAILURE; - restorescr(save); - return ret; -} - diff --git a/usr.sbin/sysinstall/variable.c b/usr.sbin/sysinstall/variable.c deleted file mode 100644 index 3bc6aa7..0000000 --- a/usr.sbin/sysinstall/variable.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $FreeBSD$ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * Copyright (c) 2001 - * Murray Stokely. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" - -/* Routines for dealing with variable lists */ - -static void -make_variable(char *var, char *value, int dirty) -{ - Variable *vp; - - /* Trim leading and trailing whitespace */ - var = string_skipwhite(string_prune(var)); - - if (!var || !*var) - return; - - - /* Now search to see if it's already in the list */ - for (vp = VarHead; vp; vp = vp->next) { - if (!strcmp(vp->name, var)) { - if (vp->dirty && !dirty) - return; - setenv(var, value, 1); - free(vp->value); - vp->value = strdup(value); - if (dirty != -1) - vp->dirty = dirty; - return; - } - } - - setenv(var, value, 1); - /* No? Create a new one */ - vp = (Variable *)safe_malloc(sizeof(Variable)); - vp->name = strdup(var); - vp->value = strdup(value); - if (dirty == -1) - dirty = 0; - vp->dirty = dirty; - vp->next = VarHead; - VarHead = vp; -} - -void -variable_set(char *var, int dirty) -{ - char tmp[1024], *cp; - - if (!var) - msgFatal("NULL variable name & value passed."); - else if (!*var) - msgDebug("Warning: Zero length name & value passed to variable_set()\n"); - SAFE_STRCPY(tmp, var); - if ((cp = index(tmp, '=')) == NULL) - msgFatal("Invalid variable format: %s", var); - *(cp++) = '\0'; - make_variable(tmp, string_skipwhite(cp), dirty); -} - -void -variable_set2(char *var, char *value, int dirty) -{ - if (!var || !value) - msgFatal("Null name or value passed to set_variable2(%s) = %s!", - var ? var : "", value ? value : ""); - else if (!*var || !*value) - msgDebug("Warning: Zero length name or value passed to variable_set2(%s) = %s\n", - var, value); - make_variable(var, value, dirty); -} - -char * -variable_get(char *var) -{ - return getenv(var); -} - -int -variable_cmp(char *var, char *value) -{ - char *val; - - if ((val = variable_get(var))) - return strcmp(val, value); - return -1; -} - -void -variable_unset(char *var) -{ - Variable *vp; - char name[512], *cp; - - if ((cp = index(var, '=')) != NULL) - sstrncpy(name, var, cp - var); - else - SAFE_STRCPY(name, var); - unsetenv(name); - /* Now search to see if it's in our list, if we have one.. */ - if (!VarHead) - return; - else if (!VarHead->next && !strcmp(VarHead->name, name)) { - safe_free(VarHead->name); - safe_free(VarHead->value); - free(VarHead); - VarHead = NULL; - } - else { - for (vp = VarHead; vp; vp = vp->next) { - if (!strcmp(vp->name, name)) { - Variable *save = vp->next; - - safe_free(vp->name); - safe_free(vp->value); - *vp = *save; - safe_free(save); - break; - } - } - } -} - -/* Prompt user for the name of a variable */ -char * -variable_get_value(char *var, char *prompt, int dirty) -{ - char *cp; - - cp = variable_get(var); - if (cp && variable_get(VAR_NONINTERACTIVE)) - return cp; - else if ((cp = msgGetInput(cp, "%s", prompt)) != NULL) - variable_set2(var, cp, dirty); - else - cp = NULL; - return cp; -} - -/* Check if value passed in data (in the form "variable=value") is - * valid, and it's status compared to the value of variable stored in - * env - * - * Possible return values : - * -3: Invalid line, the data string is NOT set as an env variable - * -2: Invalid line, the data string is set as an env variable - * -1: Invalid line - * 0: Valid line, is NOT equal to env version - * 1: Valid line, is equal to env version - * 2: Valid line, value empty - e.g. foo="" - * 3: Valid line, does not exist in env -*/ -int -variable_check2(char *data) -{ - char *cp, *cp2, *cp3, tmp[256]; - - if (data == NULL) - return -1; - SAFE_STRCPY(tmp, data); - if ((cp = index(tmp, '=')) != NULL) { - *(cp++) = '\0'; - if (*cp == '"') { /* smash quotes if present */ - ++cp; - if ((cp3 = index(cp, '"')) != NULL) - *cp3 = '\0'; - } - else if ((cp3 = index(cp, ',')) != NULL) - *cp3 = '\0'; - cp2 = variable_get(tmp); - if (cp2 != NULL) { - if (*cp == '\0') - return 2; - else - return strcmp(cp, cp2) == 0 ? 1 : 0; - } - else - return 3; - } - else - return variable_get(tmp) != NULL ? -2 : -3; -} - -/* Check if the value passed in data (in the form "variable=value") is - equal to the value of variable stored in env */ -int -variable_check(char *data) -{ - int ret; - ret = variable_check2(data); - - switch(ret) { - case -2: - case 1: - case 2: - return TRUE; - /* NOT REACHED */ - default: - return FALSE; - } -} - -int -dump_variables(dialogMenuItem *unused) -{ - FILE *fp; - Variable *vp; - - if (isDebug()) - msgDebug("Writing %s variables to file..\n", ProgName); - - fp = fopen("/etc/sysinstall.vars", "w"); - if (!fp) { - msgConfirm("Unable to write to /etc/%s.vars: %s", - ProgName, strerror(errno)); - return DITEM_FAILURE; - } - - for (vp = VarHead; vp; vp = vp->next) - fprintf(fp, "%s=\"%s\" (%d)\n", vp->name, vp->value, vp->dirty); - - fclose(fp); - - return DITEM_SUCCESS; -} - -/* Free all of the variables, useful to really start over as when the - user selects "restart" from the interrupt menu. */ -void -free_variables(void) -{ - Variable *vp; - - /* Free the variables from our list, if we have one.. */ - if (!VarHead) - return; - else if (!VarHead->next) { - unsetenv(VarHead->name); - safe_free(VarHead->name); - safe_free(VarHead->value); - free(VarHead); - VarHead = NULL; - } - else { - for (vp = VarHead; vp; ) { - Variable *save = vp; - unsetenv(vp->name); - safe_free(vp->name); - safe_free(vp->value); - vp = vp->next; - safe_free(save); - } - VarHead = NULL; - } -} - -/* - * Persistent variables. The variables modified by these functions - * are not cleared between invocations of sysinstall. This is useful - * to allow the user to completely restart sysinstall, without having - * it load all of the modules again from the installation media which - * are still in memory. - */ - -void -pvariable_set(char *var) -{ - char *p; - char tmp[1024]; - - if (!var) - msgFatal("NULL variable name & value passed."); - else if (!*var) - msgDebug("Warning: Zero length name & value passed to variable_set()\n"); - /* Add a trivial namespace to whatever name the caller chooses. */ - SAFE_STRCPY(tmp, "SYSINSTALL_PVAR"); - if (index(var, '=') == NULL) - msgFatal("Invalid variable format: %s", var); - strlcat(tmp, var, 1024); - p = strchr(tmp, '='); - *p = '\0'; - setenv(tmp, p + 1, 1); -} - -char * -pvariable_get(char *var) -{ - char tmp[1024]; - - SAFE_STRCPY(tmp, "SYSINSTALL_PVAR"); - strlcat(tmp, var, 1024); - return getenv(tmp); -} diff --git a/usr.sbin/sysinstall/wizard.c b/usr.sbin/sysinstall/wizard.c deleted file mode 100644 index c221e55..0000000 --- a/usr.sbin/sysinstall/wizard.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * ---------------------------------------------------------------------------- - * "THE BEER-WARE LICENSE" (Revision 42): - * <phk@FreeBSD.org> wrote this file. As long as you retain this notice you - * can do whatever you want with this stuff. If we meet some day, and you think - * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp - * ---------------------------------------------------------------------------- - * - * $FreeBSD$ - * - */ - -#include "sysinstall.h" -#include <fcntl.h> -#include <err.h> -#include <libdisk.h> - -static int -scan_block(int fd, daddr_t block) -{ - u_char foo[512]; - - if (-1 == lseek(fd,block * 512,SEEK_SET)) - err(1,"lseek"); - if (512 != read(fd,foo, 512)) - return 1; - return 0; -} - -static void -Scan_Disk(Disk *d) -{ - char device[64]; - u_long l; - int i,j,fd; - - strcpy(device,"/dev/"); - strcat(device,d->name); - - fd = open(device,O_RDWR); - if (fd < 0) { - msgWarn("open(%s) failed", device); - return; - } - for(i=-1,l=0;;l++) { - j = scan_block(fd,l); - if (j != i) { - if (i == -1) { - printf("%c: %lu.",j ? 'B' : 'G', l); - fflush(stdout); - } else if (i == 0) { - printf(".%lu\nB: %lu.",l-1,l); - fflush(stdout); - } else { - printf(".%lu\nG: %lu.",l-1,l); - fflush(stdout); - } - i = j; - } - } - close(fd); -} - -void -slice_wizard(Disk *d) -{ - Disk *db; - char myprompt[BUFSIZ]; - char input[BUFSIZ]; - char *p,*q=0; - char **cp,*cmds[200]; - int ncmd,i; - - systemSuspendDialog(); - sprintf(myprompt,"%s> ", d->name); - while(1) { - printf("--==##==--\n"); - Debug_Disk(d); - p = CheckRules(d); - if (p) { - printf("%s",p); - free(p); - } - printf("%s", myprompt); - fflush(stdout); - q = p = fgets(input,sizeof(input),stdin); - if(!p) - break; - for(cp = cmds; (*cp = strsep(&p, " \t\n")) != NULL;) - if (**cp != '\0') - cp++; - ncmd = cp - cmds; - if(!ncmd) - continue; - if (!strcasecmp(*cmds,"quit")) { break; } - if (!strcasecmp(*cmds,"exit")) { break; } - if (!strcasecmp(*cmds,"q")) { break; } - if (!strcasecmp(*cmds,"x")) { break; } - if (!strcasecmp(*cmds,"delete") && ncmd == 2) { - printf("delete = %d\n", - Delete_Chunk(d, - (struct chunk *)strtol(cmds[1],0,0))); - continue; - } - if (!strcasecmp(*cmds,"allfreebsd")) { - All_FreeBSD(d, 0); - continue; - } - if (!strcasecmp(*cmds,"dedicate")) { - All_FreeBSD(d, 1); - continue; - } - if (!strcasecmp(*cmds,"bios") && ncmd == 4) { - Set_Bios_Geom(d, - strtol(cmds[1],0,0), - strtol(cmds[2],0,0), - strtol(cmds[3],0,0)); - continue; - } - if (!strcasecmp(*cmds,"list")) { - cp = Disk_Names(); - printf("Disks:"); - for(i=0;cp[i];i++) { - printf(" %s",cp[i]); - free(cp[i]); - } - free(cp); - continue; - } -#ifdef PC98 - if (!strcasecmp(*cmds,"create") && ncmd == 7) { - printf("Create=%d\n", - Create_Chunk(d, - strtol(cmds[1],0,0), - strtol(cmds[2],0,0), - strtol(cmds[3],0,0), - strtol(cmds[4],0,0), - strtol(cmds[5],0,0), - cmds[6])); - continue; - } -#else - if (!strcasecmp(*cmds,"create") && ncmd == 6) { - printf("Create=%d\n", - Create_Chunk(d, - strtol(cmds[1],0,0), - strtol(cmds[2],0,0), - strtol(cmds[3],0,0), - strtol(cmds[4],0,0), - strtol(cmds[5],0,0), "")); - continue; - } -#endif - if (!strcasecmp(*cmds,"read")) { - db = d; - if (ncmd > 1) - d = Open_Disk(cmds[1]); - else - d = Open_Disk(d->name); - if (d) - Free_Disk(db); - else - d = db; - continue; - } - if (!strcasecmp(*cmds,"scan")) { - Scan_Disk(d); - continue; - } - if (!strcasecmp(*cmds,"write")) { - printf("Write=%d\n", - Fake ? 0 : Write_Disk(d)); - q = strdup(d->name); - Free_Disk(d); - d = Open_Disk(q); - continue; - } - if (strcasecmp(*cmds,"help")) - printf("\007ERROR\n"); - printf("CMDS:\n"); - printf("allfreebsd\t\t"); - printf("dedicate\t\t"); - printf("bios cyl hd sect\n"); - printf("collapse [pointer]\t\t"); -#ifdef PC98 - printf("create offset size enum subtype flags name\n"); -#else - printf("create offset size enum subtype flags\n"); -#endif - printf("subtype(part): swap=1, ffs=7\t\t"); - printf("delete pointer\n"); - printf("list\t\t"); - printf("quit\n"); - printf("read [disk]\t\t"); - printf("scan\n"); - printf("write\t\t"); - printf("\n"); - - } - systemResumeDialog(); -} |