#!/bin/sh # # fase_1.sh - FreeBSD From Scratch, Primera Fase: Instalación del Sistema. # Uso: ./fase_1.sh # # $FreeBSD$ set -x -e PATH=/bin:/usr/bin:/sbin:/usr/sbin # Requisitos: # # a) Haber completado sin errores "make buildworld" y "make buildkernel" # b) Particiones sin usar (al menos una para el sistema de ficheros raíz, # probablemente más para los nuevos /usr y /var, a gusto de cada uno.) # El punto montaje de la raíz bajo la que va usted a crear el sistema nuevo. # Sólo va a usarse como punto de montaje; que no se usará espacio en él # puesto que todos los ficheros serán depositados en el o los sistemas # de ficheros que están efectivamente montados. DESTDIR=/rootnuevo SRC=/usr/src # Aquí está su árbol de fuentes. # ---------------------------------------------------------------------------- # # Primer Paso: Creación de un árbol de directorios vacío bajo $DESTDIR. # ---------------------------------------------------------------------------- # step_one () { # El nuevo raíz del sistema de ficheros. Obligatorio. # Cambie los nombres de dispositivo (DEV_*) para hacerlos acordes con # sus necesidades o el "script" le # estallará en la cara. DEV_ROOT=/dev/da3s1a mkdir -p ${DESTDIR} newfs ${DEV_ROOT} tunefs -n enable ${DEV_ROOT} mount -o noatime ${DEV_ROOT} ${DESTDIR} # Sistemas de ficheros extra y sus correspondientes puntos de montaje. # Opcional. DEV_VAR=/dev/vinum/var_a newfs ${DEV_VAR} tunefs -n enable ${DEV_VAR} mkdir -m 755 ${DESTDIR}/var mount -o noatime ${DEV_VAR} ${DESTDIR}/var DEV_USR=/dev/vinum/usr_a newfs ${DEV_USR} tunefs -n enable ${DEV_USR} mkdir -m 755 ${DESTDIR}/usr mount -o noatime ${DEV_USR} ${DESTDIR}/usr mkdir -m 755 -p ${DESTDIR}/usr/ports mount /dev/vinum/ports ${DESTDIR}/usr/ports # Aquí crearemos los demás directorios. Obligatorio. cd ${SRC}/etc; make distrib-dirs DESTDIR=${DESTDIR} # Personalmente me gusta enlazar tmp a var/tmp. Opcional. cd ${DESTDIR}; rmdir tmp; ln -s var/tmp } # ---------------------------------------------------------------------------- # # Segundo Paso: Poblamos el árbol de directorios /etc que está vacío aún y # ubicamos unos cuantos ficheros en /. # ---------------------------------------------------------------------------- # step_two () { # Añada o borre de ésta lista según su criterio. La mayoría son obligatorios. for f in \ /.profile \ /etc/group \ /etc/hosts \ /etc/inetd.conf \ /etc/ipfw.conf \ /etc/make.conf \ /etc/master.passwd \ /etc/nsswitch.conf \ /etc/ntp.conf \ /etc/printcap \ /etc/profile \ /etc/rc.conf \ /etc/resolv.conf \ /etc/start_if.xl0 \ /etc/ttys \ /etc/ppp/* \ /etc/mail/aliases \ /etc/mail/aliases.db \ /etc/mail/hal9000.mc \ /etc/mail/service.switch \ /etc/ssh/*key* \ /etc/ssh/*_config \ /etc/X11/XF86Config-4 \ /boot/splash.bmp \ /boot/loader.conf \ /boot/device.hints ; do cp -p ${f} ${DESTDIR}${f} done # Borre el temproot que haya creado mergemasger. Si lo ha creado. TEMPROOT=/var/tmp/temproot.fase1 if test -d ${TEMPROOT}; then chflags -R 0 ${TEMPROOT} rm -rf ${TEMPROOT} fi 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 no crea ficheros vacíos por ejemplo en /var/log. Lo haremos # aquí pero sin sobreescribir (y destruír) ficheros copiados en el bucle # de más arriba. cd ${TEMPROOT} find . -type f | sed 's,^\./,,' | while read f; do if test -r ${DESTDIR}/${f}; then echo "${DESTDIR}/${f} ya existe; no copiado" else echo "Creando ${DESTDIR}/${f} vacío" cp -p ${f} ${DESTDIR}/${f} fi done chflags -R 0 ${TEMPROOT} rm -rf ${TEMPROOT} } # ---------------------------------------------------------------------------- # # Tercer Paso: Instalando el mundo (install world). # ---------------------------------------------------------------------------- # step_three () { cd ${SRC} make installworld DESTDIR=${DESTDIR} } # ---------------------------------------------------------------------------- # # Cuarto Paso: Instalación del kernel y los módulos. # ---------------------------------------------------------------------------- # step_four () { cd ${SRC} # loader.conf y device.hints son necesarios para installkernel. # Si en el segundo paso no los ha copiado hágalo tal y como se muestra en # las dos líneas siguientes. # cp sys/boot/forth/loader.conf ${DESTDIR}/boot/defaults # cp sys/i386/conf/GENERIC.hints ${DESTDIR}/boot/device.hints make installkernel DESTDIR=${DESTDIR} KERNCONF=NOMBRE_DE_SU_KERNEL } # ---------------------------------------------------------------------------- # # Quinto Paso: Instalación y modificación de algunos ficheros clave. # ---------------------------------------------------------------------------- # step_five () { # Creamos /etc/fstab; obligatorio. Modifíquelo para que coincida con sus # dispositivos. cat <${DESTDIR}/etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/da3s1b none swap sw 0 0 /dev/da4s2b none swap sw 0 0 /dev/da3s1a / ufs rw 1 1 /dev/da1s2a /src ufs rw 0 2 /dev/da2s2f /share ufs rw 0 2 /dev/vinum/var_a /var ufs rw 0 2 /dev/vinum/usr_a /usr ufs rw 0 2 /dev/vinum/home /home ufs rw 0 2 /dev/vinum/ncvs /home/ncvs ufs rw,noatime 0 2 /dev/vinum/ports /usr/ports ufs rw,noatime 0 2 # /dev/cd0 /dvd cd9660 ro,noauto 0 0 /dev/cd1 /cdrom cd9660 ro,noauto 0 0 proc /proc procfs rw 0 0 EOF # Más directorios; opcional. mkdir -m 755 -p ${DESTDIR}/src; chown root:wheel ${DESTDIR}/src mkdir -m 755 -p ${DESTDIR}/share; chown root:wheel ${DESTDIR}/share mkdir -m 755 -p ${DESTDIR}/dvd; chown root:wheel ${DESTDIR}/dvd mkdir -m 755 -p ${DESTDIR}/home; chown root:wheel ${DESTDIR}/home mkdir -m 755 -p ${DESTDIR}/usr/ports; chown root:wheel ${DESTDIR}/usr/ports # Configuración de la zona horaria; no es obligatorio pero casi. cp ${DESTDIR}/usr/share/zoneinfo/Antarctica/South_Pole ${DESTDIR}/etc/localtime if test -r /etc/wall_cmos_clock; then cp -p /etc/wall_cmos_clock ${DESTDIR}/etc/wall_cmos_clock fi } # ---------------------------------------------------------------------------- # # Sexto Paso: Lo que considero importante tener cuando accedo a un sistema # nuevo por primera vez. # NOTA: No instale demasiados binarios en éste paso. Con el sistema viejo # en funcionamiento y los nuevos binarios y ficheros de cabecera instalados # es casi seguro tener problemas de bootstrap. Los "ports" deberían compilarse # después de haber arrancado el nuevo sistema. # ---------------------------------------------------------------------------- # step_six () { chroot ${DESTDIR} sh -c "cd /usr/ports/shells/zsh; make clean install clean" chroot ${DESTDIR} sh -c "cd /etc/mail; make install" # configuración # de sendmail # Si no enlazamos simbólicamente compat los ficheros de linux_base # irán a parar al sistema de ficheros raíz. cd ${DESTDIR}; mkdir -m 755 usr/compat chown root:wheel usr/compat; ln -s usr/compat mkdir -m 755 usr/compat/linux mkdir -m 755 boot/grub # Creación de los directorios "spool" para las impresoras que hay en # mi /etc/printcap cd ${DESTDIR}/var/spool/output/lpd; mkdir -p as od ev te lp da touch ${DESTDIR}/var/log/lpd-errs # Más ficheros que quiero heredar del sistema antíguo. for f in \ /var/cron/tabs/root \ /var/mail/* \ /boot/grub/*; do cp -p ${f} ${DESTDIR}${f} done # Si no tiene /home en una partición compartida es un buen momento para # copiarlo al sitio correcto. # mkdir -p ${DESTDIR}/home # cd /home; tar cf - . | (cd ${DESTDIR}/home; tar xpvf -) # Como novedad en FreeBSD 5.x perl está en /usr/local/bin pero la # mayoría de "scripts" esperan encontrarlo en /usr/bin/perl y así lo # reflejan en su primera línea; use un enlace simbólico para que funcionen. cd ${DESTDIR}/usr/bin; ln -s ../local/bin/perl cd ${DESTDIR}/usr; rmdir src; ln -s ../src/current src } do_steps () { step_one step_two step_three step_four step_five step_six } do_steps 2>&1 | tee fase_1.log # EOF $RCSfile: fase_1.sh,v $ vim: tabstop=2:expandtab: