| |
Вот три файла, которые вам нужны кроме тех конфигурационных, что уже показаны выше.
Это скрипт stage_1.sh, который вы не должны модифицировать.
#!/bin/sh
#
# stage_1.sh - FreeBSD From Scratch, Stage 1: System Installation.
# Usage: ./stage_1.sh profile
# will read ./stage_1.conf.profile
# and write ./stage_1.log.profile
#
# Author: Jens Schweikhardt
# $Id: stage_1.sh,v 1.7 2004/01/03 13:50:41 toor Exp toor $
# $FreeBSD: doc/en_US.ISO8859-1/articles/fbsd-from-scratch/stage_1.sh,v 1.4 2004/01/21 19:39:26 schweikh Exp $
PATH=/bin:/usr/bin:/sbin:/usr/sbin
# Prerequisites:
#
# a) Successfully completed "make buildworld" and "make buildkernel"
# b) Unused partitions (at least one for the root fs, probably more for
# the new /usr and /var, to your liking.)
# c) A customized stage_1.conf.profile file.
if test $# -ne 1; then
echo "usage: stage_1.sh profile" 1>&2
exit 1
fi
# ---------------------------------------------------------------------------- #
# Step 1: Create an empty directory tree below $DESTDIR.
# ---------------------------------------------------------------------------- #
step_one () {
create_file_systems
# Now create all the other directories. Mandatory.
cd ${SRC}/etc; make distrib-dirs DESTDIR=${DESTDIR}
}
# ---------------------------------------------------------------------------- #
# Step 2: Fill the empty /etc directory tree and put a few files in /.
# ---------------------------------------------------------------------------- #
step_two () {
copy_files
# Delete mergemaster's temproot, if any.
TEMPROOT=/var/tmp/temproot.stage1
if test -d ${TEMPROOT}; then
chflags -R 0 ${TEMPROOT}
rm -rf ${TEMPROOT}
fi
export MAKEDEVPATH="/bin:/sbin:/usr/bin"
mergemaster -i -m ${SRC}/etc -t ${TEMPROOT} -D ${DESTDIR}
cap_mkdb ${DESTDIR}/etc/login.conf
pwd_mkdb -d ${DESTDIR}/etc -p ${DESTDIR}/etc/master.passwd
# Mergemaster does not create empty files, e.g. in /var/log. Do so now,
# but do not clobber files that may have been copied with copy_files.
cd ${TEMPROOT}
find . -type f | sed 's,^\./,,' |
while read f; do
if test -r ${DESTDIR}/${f}; then
echo "${DESTDIR}/${f} already exists; not copied"
else
echo "Creating empty ${DESTDIR}/${f}"
cp -p ${f} ${DESTDIR}/${f}
fi
done
chflags -R 0 ${TEMPROOT}
rm -rf ${TEMPROOT}
}
# ---------------------------------------------------------------------------- #
# Step 3: Install world.
# ---------------------------------------------------------------------------- #
step_three () {
cd ${SRC}
make installworld DESTDIR=${DESTDIR}
# Install additional compatibility libraries (optional). Use this if you
# have programs dynamically linked against libc.so.4, i.e. if you see
# /usr/libexec/ld-elf.so.1: Shared object "libc.so.4" not found
cd lib/compat/compat4x.i386
make all install DESTDIR=${DESTDIR}
}
# ---------------------------------------------------------------------------- #
# Step 4: Install kernel and modules.
# ---------------------------------------------------------------------------- #
step_four () {
cd ${SRC}
# The loader.conf and device.hints are required by the installkernel target.
# If you have not copied them in Step 2, cp them as shown in the next 2 lines.
# cp sys/boot/forth/loader.conf ${DESTDIR}/boot/defaults
# cp sys/i386/conf/GENERIC.hints ${DESTDIR}/boot/device.hints
make installkernel DESTDIR=${DESTDIR} KERNCONF=${KERNCONF}
}
# ---------------------------------------------------------------------------- #
# Step 5: Install /etc/fstab and time zone info.
# ---------------------------------------------------------------------------- #
step_five () {
create_etc_fstab
# Setup time zone info; pretty much mandatory.
cp ${DESTDIR}/usr/share/zoneinfo/${TIMEZONE} ${DESTDIR}/etc/localtime
if test -r /etc/wall_cmos_clock; then
cp -p /etc/wall_cmos_clock ${DESTDIR}/etc/wall_cmos_clock
fi
}
# ---------------------------------------------------------------------------- #
# Step 6: All remaining customization.
# ---------------------------------------------------------------------------- #
step_six () {
all_remaining_customization
}
do_steps () {
echo "PROFILE=${PROFILE}"
echo "DESTDIR=${DESTDIR}"
echo "SRC=${SRC}"
echo "KERNCONF=${KERNCONF}"
echo "TIMEZONE=${TIMEZONE}"
echo "TYPE=${TYPE}"
echo "REVISION=${REVISION}"
echo "BRANCH=${BRANCH}"
echo "RELDATE=${RELDATE}"
step_one
step_two
step_three
step_four
step_five
step_six
}
# ---------------------------------------------------------------------------- #
# The ball starts rolling here.
# ---------------------------------------------------------------------------- #
PROFILE="$1"
set -x -e -u # Stop for any error or use of an undefined variable.
. ./stage_1.conf.${PROFILE}
# Determine a few variables from the sources that were used to make the
# world. The variables can be used to modify actions, e.g. depending on
# whether we install a 4.x or 5.x system. The __FreeBSD_version numbers
# for RELDATE are documented in the Porter's Handbook,
# doc/en_US.ISO8859-1/books/porters-handbook/freebsd-versions.html.
# Scheme is: <major><two digit minor><0 if release branch, otherwise 1>xx
# The result will be something like
#
# TYPE="FreeBSD"
# REVISION="4.9"
# BRANCH="RC" { "CURRENT", "STABLE", "RELEASE" }
# RELDATE="502101"
#
eval $(awk '/^(TYPE|REVISION|BRANCH)=/' ${SRC}/sys/conf/newvers.sh)
RELDATE=$(awk '/^[ \t]*#[ \t]*define[ \t][ \t]*__FreeBSD_version[ \t]/ {
print $3
}' ${SRC}/sys/sys/param.h)
echo "=> Logging to stage_1.log.${PROFILE}"
do_steps 2>&1 | tee stage_1.log.${PROFILE}
# vim: tabstop=2:expandtab:shiftwidth=2:
# EOF $RCSfile: stage_1.sh,v $
Сгрузите stage_1.sh.
Это скрипт stage_2.sh. Вам может понадобиться изменить переменные в самом начале файла.
#!/bin/sh
#
# stage_2.sh - FreeBSD From Scratch, Stage 2: Ports Installation.
# Usage: ./stage_2.sh [-hnp] configname
#
# Author: Jens Schweikhardt
# $Id: stage_2.sh,v 1.5 2004/01/23 22:09:19 toor Exp toor $
# $FreeBSD: doc/en_US.ISO8859-1/articles/fbsd-from-scratch/stage_2.sh,v 1.4 2004/01/23 22:11:41 schweikh Exp $
DBDIR="/var/db/pkg"
PORTS="/usr/ports"
: ${PACKAGES:=${PORTS}/packages}
LOGDIR="/home/root/setup/ports.log"; mkdir -p ${LOGDIR}
PKG_PATH="/cdrom/packages/All:/dvd/packages/All"
PKG=
MYNAME="$(basename $0)"
usage () {
exec >&2
echo "usage: ${MYNAME} [-hnp] configname"
echo ""
echo " Options:"
echo " -h Print this help text."
echo " -n Dryrun: just show what would be done."
echo " -p Install a precompiled package if one can be found."
echo ""
echo " The config file (stage_2.conf.configname) is a list of"
echo " ports to install with one entry per line. Each line"
echo " consists of two or three space separated fields:"
echo " category, port, and optionally a build command."
echo ""
exit 1
}
# Look for a package in these locations in sequence.
# Returns as soon as the first is found. Result on stdout.
#
# ${PORTS}/${CATEGORY}/${NAME}
# ${PACKAGES}/All
# ${PACKAGES}/${CATEGORY}
# ${PKG_PATH}
#
find_package () {
echo "${PORTS}/${CATEGORY}/${NAME}:${PACKAGES}/All:${PACKAGES}/${CATEGORY}:${PKG_PATH}" |
tr : '\n' |
while read d; do
test -d "${d}" || continue
PKG=$(ls ${d}/${PKGNAME}.* 2>/dev/null)
test $? -eq 0 && echo "${PKG}" && return
done
}
#
# Parse command line arguments.
#
args=`getopt hnp $*`
if test $? != 0; then
usage
fi
set -- $args
DRYRUN=
CHKPKG=
for i; do
case "$i" in
-n) DRYRUN="yes"; shift;;
-p) CHKPKG="yes"; shift;;
--) shift; break;;
*) usage;;
esac
done
if test $# -eq 1; then
DATAFILE="$1"
else
usage
fi
#
# Loop over the ports list.
#
while read CATEGORY NAME CMD; do
case "${CATEGORY}" in
\#*) continue;;
'') continue;;
esac
DIR="${PORTS}/${CATEGORY}/${NAME}"
if ! test -d "${DIR}"; then
echo "$DIR does not exist -- ignored"
continue
fi
cd ${DIR}
PKGNAME=`make -V PKGNAME`
if test -n "${CHKPKG}"; then
PKG=$(find_package)
else
PKG=""
fi
if test -d "${DBDIR}/${PKGNAME}"; then
echo "${CATEGORY}/${NAME} already installed as ${PKGNAME}"
continue
fi
LOG="${LOGDIR}/${CATEGORY}+${NAME}"
echo "===> Installing ${CATEGORY}/${NAME}; logging to ${LOG}"
test -n "${CMD}" || CMD="make install < /dev/null"
if test -n "${DRYRUN}"; then
if test -n "${PKG}"; then
echo pkg_add -v ${PKG}
else
echo "${CMD}"
fi
continue
fi
date "++++ Started %v %T +++" > ${LOG}
STARTED=$(date +%s)
(
if test -n "${PKG}"; then
echo "Found package ${PKG}"
pkg_add -v ${PKG}
else
echo "CMD: ${CMD}"
make clean
eval "${CMD}"
make clean # Uncomment if diskspace is tight under ${PORTS}.
fi
) 2>&1 | tee -a ${LOG}
FINISHED=$(date +%s)
DURATION=$(dc -e "${FINISHED} ${STARTED} - p")
date "++++ Finished %v %T after ${DURATION} secs +++" >> ${LOG}
done < stage_2.conf.${DATAFILE}
# vim: tabstop=4:
# EOF $RCSfile: stage_2.sh,v $
Сгрузите stage_2.sh.
Это мой файл stage_3.mk, который даст вам идею о том, как автоматизировать всю повторную конфигурацию.
# stage_3.mk - FreeBSD From Scratch, Stage 3: Ports Post-Configuration.
# Usage: make -f stage_3.mk all (config everything)
# or make -f stage_3.mk target (to just config target)
#
# Author: Jens Schweikhardt
#
# It is a good idea to make sure any target can be made more than
# once without ill effect.
#
# $Id: stage_3.mk,v 1.6 2004/01/10 19:33:07 toor Exp toor $
# $FreeBSD: doc/en_US.ISO8859-1/articles/fbsd-from-scratch/stage_3.mk,v 1.3 2004/01/21 19:39:26 schweikh Exp $
.POSIX:
message:
@echo "Please use one of the following targets:"
@echo "config_apache"
@echo "config_firebird"
@echo "config_inn"
@echo "config_javaplugin"
@echo "config_nullplugin"
@echo "config_privoxy"
@echo "config_sgml"
@echo "config_smokeping"
@echo "config_sudo"
@echo "config_TeX"
@echo "config_tin"
@echo "config_uucp"
@echo "all -- all of the above"
all: \
config_apache \
config_firebird \
config_inn \
config_javaplugin \
config_nullplugin \
config_privoxy \
config_sgml \
config_smokeping \
config_sudo \
config_TeX \
config_tin \
config_uucp
config_apache:
# 1. Modify httpd.conf.
perl -pi \
-e 's/^\s*ServerAdmin.*/ServerAdmin schweikh\@schweikhardt.net/;' \
-e 's/^\s*Listen.*/Listen 127.0.0.1:80/;' \
-e 's/^\s*StartServers.*/StartServers 2/;' \
-e 's/^\s*MinSpareServers.*/MinSpareServers 2/;' \
-e 's,/usr/local/www/cgi-bin/,/home/opt/www/cgi-bin/,;' \
/usr/local/etc/apache2/httpd.conf
# 2. Restore symlinks to web pages.
cd /usr/local/www/data; \
ln -fs /home/schweikh/prj/homepage schweikhardt.net; \
ln -fs /home/opt/www/test .
# Test if the httpd.conf has changed.
@if ! cmp -s /usr/local/etc/apache2/httpd.conf httpd.conf; then \
echo "ATTENTION: the httpd.conf has changed. Please examine if"; \
echo "the modifications are still correct. Here is the diff:"; \
diff -u /usr/local/etc/apache2/httpd.conf httpd.conf; \
fi
if test -f /var/run/httpd.pid; then \
/usr/local/etc/rc.d/apache2.sh restart; \
else \
/usr/local/etc/rc.d/apache2.sh start; \
fi
config_firebird:
# Make this group wheel writable to allow extensions being installed.
chmod -R g+w /usr/X11R6/lib/firebird/lib/mozilla-1.5/chrome
config_inn:
pw usermod -n news -d /usr/local/news -s /bin/sh
mkdir -p /share/news/spool/outgoing \
/share/news/spool/incoming \
/share/news/spool/articles \
/share/news/spool/overview \
/share/news/spool/tmp \
/share/news/db
chown -R news:news /share/news
# Give the news system its initial configuration.
cd /home/root/setup; \
if test ! -f /share/news/db/active; then \
echo "installing /share/news/db/active"; \
install -C -o news -g news -m 664 active /share/news/db; \
fi; \
if test ! -f /share/news/db/newsgroups; then \
echo "installing /share/news/db/newsgroups"; \
install -C -o news -g news -m 664 newsgroups /share/news/db; \
fi
# The innd.sh that comes with the port is broken, it
# checks for history.pag which does not exist.
cd /home/root/setup; \
install -C -o root -g wheel -m 555 innd.sh /usr/local/etc/rc.d
# Configure storage method.
cd /home/root/setup; \
printf "%s\n%s\n%s\n%s\n" \
"method tradspool {" \
" newsgroups: *" \
" class: 0" \
"}" \
>storage.conf; \
install -C -o news -g news -m 664 storage.conf /usr/local/news/etc
# Configure newsfeeds.
printf "%s\n%s\n" \
"ME:*::" \
"shuttle/news2.shuttle.de:!junk,!control:B32768/512,Tf,Wfb:" \
>/usr/local/news/etc/newsfeeds
# Configure inn.conf.
perl -pi \
-e 's/^#*\s*(organization:\s*).*/$$1"An Open Pod Bay Door"/;' \
-e 's/^#*\s*(pathhost:\s*).*/$$1hal9000.schweikhardt.net/;' \
-e 's/^#*\s*(server:).*/$$1 localhost/;' \
-e 's/^#*\s*(domain:).*/$$1 schweikhardt.net/;' \
-e 's/^#*\s*(fromhost:).*/$$1 schweikhardt.net/;' \
-e 's,^#*\s*(moderatormailer:).*,$$1 \%s\@moderators.isc.org,;' \
-e 's,^#*\s*(pathdb:\s*).*,$$1/share/news/db,;' \
-e 's,/usr/local/news/spool,/share/news/spool,;' \
/usr/local/news/etc/inn.conf
# Create empty history, if none there.
# See post-install in /usr/ports/news/inn-stable/Makefile.
cd /share/news/db; \
if test ! -f history; then \
touch history; \
chmod 644 history; \
chown news:news history; \
su -fm news -c "/usr/local/news/bin/makedbz -i"; \
for s in dir hash index; do \
mv history.n.$${s} history.$${s}; \
done; \
fi
# Configure send-uucp.
echo shuttle:shuttle >/usr/local/news/etc/send-uucp.cf
# Satisfy inncheck:
cd /usr/local/news/etc; \
chown news:news *; \
chmod 640 control.ctl expire.ctl nntpsend.ctl readers.conf
/usr/local/news/bin/inncheck
# Test if the inn.conf has changed.
@if ! cmp -s /usr/local/news/etc/inn.conf inn.conf; then \
echo "ATTENTION: the inn.conf has changed. Please examine if"; \
echo "the modifications are still correct. Here is the diff:"; \
diff -u /usr/local/news/etc/inn.conf inn.conf; \
fi
if ! test -f /usr/local/news/run/innd.pid; then \
/usr/local/etc/rc.d/innd.sh start; \
fi
config_javaplugin:
# Mozilla Firebird:
cd /usr/X11R6/lib/firebird/lib/mozilla-1.5/plugins; \
ln -fs /usr/local/jdk1.4.2/jre/plugin/i386/ns610/libjavaplugin_oji.so
# Plain Mozilla:
cd /usr/X11R6/lib/mozilla/plugins; \
ln -fs /usr/local/jdk1.4.2/jre/plugin/i386/ns610/libjavaplugin_oji.so
# Move the nullplugin out of the way. With a .mozilla/*/*/prefs.js entry of
# user_pref("plugin.display_plugin_downloader_dialog", false);
# this suppresses popup dialogs for unavailable plugins (flash, shockwave, ...)
NULLPLUGINS = /usr/X11R6/lib/mozilla/libnullplugin.so \
/usr/X11R6/lib/mozilla/plugins/libnullplugin.so
config_nullplugin:
for p in $(NULLPLUGINS); do \
if test -r $$p; then \
mv $$p $$p.orig; \
fi; \
done
config_privoxy:
install -C -o root -g wheel -m 644 conf/privoxy/config \
/usr/local/etc/privoxy
install -C -o root -g wheel -m 755 conf/privoxy/privoxy.sh \
/usr/local/etc/rc.d
/usr/local/etc/rc.d/privoxy.sh restart
config_sgml:
cp -p /usr/local/share/gmat/sgml/ISO_8879-1986/entities/* \
/usr/local/share/sgml/docbook/4.1
config_smokeping:
cp conf/smokeping/config conf/smokeping/basepage.html \
/usr/local/etc/smokeping
/usr/local/etc/rc.d/smokeping.sh stop
/usr/local/etc/rc.d/smokeping.sh start
config_sudo:
if ! grep -q schweikh /usr/local/etc/sudoers; then \
echo 'schweikh ALL = (ALL) NOPASSWD: ALL' >> /usr/local/etc/sudoers; \
fi
config_TeX:
# textproc/docproj advises: to typeset the FreeBSD Handbook with JadeTeX,
# change the following settings to the listed values:
perl -pi \
-e 's/^% original texmf.cnf/% texmf.cnf/;' \
-e 's/^(hash_extra\s*=).*/$${1}60000/;' \
-e 's/^(pool_size\s*=).*/$${1}1000000/;' \
-e 's/^(max_strings\s*=).*/$${1}70000/;' \
-e 's/^(save_size\s*=).*/$${1}10000/;' \
/usr/local/share/texmf/web2c/texmf.cnf
# Test if the texmf.cnf has changed.
@if ! cmp -s /usr/local/share/texmf/web2c/texmf.cnf texmf.cnf; then \
echo "ATTENTION: the texmf.cnf has changed. Please examine if"; \
echo "the modifications are still correct. Here is the diff:"; \
diff -u /usr/local/share/texmf/web2c/texmf.cnf texmf.cnf; \
fi
config_tin:
# Point tin to our files.
printf "%s\n%s\n%s\n" \
"activefile=/share/news/db/active" \
"newsgroupsfile=/share/news/db/newsgroups" \
"spooldir=/share/news/spool/articles" \
>/usr/local/etc/tin.defaults
config_uucp:
cd /etc/mail; make install SENDMAIL_MC=/etc/mail/hal9000.mc
# Make the uucp user's shell the correct uucico, so su(1) works.
chpass -s /usr/local/libexec/uucp/uucico uucp
# UUCP expects to find /usr/bin/rnews.
cd /usr/bin; ln -fs ../local/news/bin/rnews .
# Actual UUCP configuration.
echo nodename js2015 > /usr/local/etc/uucp/config
echo shuttle js2015 `cat uucp` > /usr/local/etc/uucp/call
printf 'port tcp\ntype tcp\n' > /usr/local/etc/uucp/port
printf "%s\n%s\n%s\n%s\n%s\n%s\n%s\n" \
"call-login *" \
"call-password *" \
"time any" \
"system shuttle" \
"address mail.s.shuttle.de" \
"commands rmail rnews" \
"port tcp" \
>/usr/local/etc/uucp/sys
cd /usr/local/etc/uucp; chown uucp:uucp *; chmod o-rwx *
# Trigger uucico after booting.
mkdir -p /usr/local/etc/rc.d; cp uucp.sh /usr/local/etc/rc.d
# vim: tabstop=4:
# EOF $RCSfile: stage_3.mk,v $
Сгрузите stage_3.mk.
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в <[email protected]>.
По вопросам связанным с этой документацией, пишите <[email protected]>.
По вопросам связанным с русским переводом документации, пишите <[email protected]>.
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |