diff --git a/es_ES.ISO8859-1/articles/fbsd-from-scratch/Makefile b/es_ES.ISO8859-1/articles/fbsd-from-scratch/Makefile new file mode 100644 index 0000000000..a7b6990bad --- /dev/null +++ b/es_ES.ISO8859-1/articles/fbsd-from-scratch/Makefile @@ -0,0 +1,27 @@ +# +# $FreeBSD$ +# +# Article: FreeBSD From Scratch + +DOC?= article + +FORMATS?= html + +MAINTAINER= schweikh@FreeBSD.org + +INSTALL_COMPRESSED?= gz +INSTALL_ONLY_COMPRESSED?= + +# +#WITH_ARTICLE_TOC?=YES + +# SGML content +SRCS= article.sgml fase_1.sh fase_2.sh fase_3.mk + +DOC_PREFIX?= ${.CURDIR}/../../.. + +afterinstall: + ${INSTALL_DOCS} ${.CURDIR}/fase_1.sh ${.CURDIR}/fase_2.sh \ + ${.CURDIR}/fase_3.mk ${DESTDIR} + +.include "${DOC_PREFIX}/share/mk/doc.project.mk" diff --git a/es_ES.ISO8859-1/articles/fbsd-from-scratch/article.sgml b/es_ES.ISO8859-1/articles/fbsd-from-scratch/article.sgml new file mode 100644 index 0000000000..68ee29ec1f --- /dev/null +++ b/es_ES.ISO8859-1/articles/fbsd-from-scratch/article.sgml @@ -0,0 +1,722 @@ + +%man; + +%freebsd; +FreeBSD From Scratch"> +]> + +
+ + FreeBSD From Scratch + + + Jens + Schweikhardt + +
schweikh@FreeBSD.org
+
+
+ + 2002 + Jens Schweikhardt + + + $FreeBSD$ +
+ + + &scratch.ap; explica la instalación totalmente automatizada + de un sistema &os; hecho a medida y compilado desde las fuentes, + proceso que incluye además la compilación de sus + ports favoritos y configurado para coincidir con + su idea del sistema perfecto. Si cree que + make world es un concepto fascinante + &scratch.ap; lo amplía hasta ser + make evenmore. N. del T. : Juego de palabras + intraducible basado en el nombre que en &os; se da al proceso de + recompilar todo el sistema desde los fuentes, make world, + que podría traducirse muy libremente como hacer, o más bien rehacer el + mundo entero y make evenmore, osea, hacer más + aún. + + + + Introducción + + ¿Ha actualizado alguna vez su sistema mediante + make world?. Si solamente tiene un sistema + en sus discos se encontrará con un problema. Si + installworld falla a la mitad + su sistema quedará dañado e incluso + puede ser incapaz de arrancar de nuevo. O quizás + installworld se ha ejecutado sin problemas + pero el nuevo kernel no arranca. Se impone buscar el CD de + Rescate y tratar de encontrar algo útil en aquellos + backups que hizo hace seis meses. + + Creo en el paradigma de al actualizar sistemas operativos + instala desde cero. Haciéndolo así, esto es, + al borrar sobreescribiendo en los discos o mejor dicho las particiones, + nos aseguraremos de no dejar datos antiguos en ellos, un aspecto + éste del que la mayoría de los procesos de + actualización no se preocupan en absoluto. + Por otra parte borrar las particiones significa + que tendrá que recompilar/reinstalar todos sus + ports y packages y después de eso + rehacer todas y cada una de las configuraciones que con muchos esfuerzos + atesoraba. Si usted también piensa que ésta tarea + debería automatizarse siga leyendo. + + + + ¿Por qué (no) debería interesarme + &scratch.ap;? + + Esa es una pregunta muy razonable. Tenemos + sysinstall, una compilación + del kernel que funciona sin sorpresas y tenemos también + las herramientas de entorno de usuario. + + El problema que tiene sysinstall + es que está extremadamente limitado cuando se trata de + qué, dónde y cómo queremos que haga la + instalación. + + + + Normalmente se usa para instalar distribuciones precompiladas + y packages desde diversas fuentes (CD, DVD, + FTP). No puede instalar el resultado de + make buildworld. + + + + No puede instalar un segundo sistema en un directorio + de un sistema en funcionamiento. + + + + No puede hacer una instalación en particiones + Vinum. + + + + No puede compilar ports, sólo + instala packages precompilados. + + + + Es difícil automatizar mediante + scripts o incluso hacer de forma manual + los cambios que considere + necesarios después de la instalación + + + + Por si todo esto fuera poco + sysinstall + está semioficialmente al final de su + Ciclo de Vida Útil. + + + + El archiconocido proceso de construír/instalar + el mundo (build/install world), explicado en + el + Handbook, por defecto realiza la tarea de sustituír el + sistema existente. Sólo respeta el kernel y los + módulos. Los binarios del sistema, los ficheros de + cabecera y muchos otros ficheros son sobreescritos; hay ficheros + obsoletos que se quedan donde estaban y pueden causar + sorpresas. Si el proceso de actualización falla por alguna + razón puede ser difícil o incluso imposible volver a + dejar el sistema en el estado inicial. + + &scratch.ap; resuelve todos esos problemas. La estrategia es + simple: utiliza un sistema en funcionamiento para instalar un nuevo + sistema en un árbol de directorios y montar nuevas particiones + limpiamente en ese árbol. Muchos ficheros de + configuración pueden copiarse al sitio que les corresponda y + &man.mergemaster.8; se encargará de aquellos a los que + no. Pueden hacerse cambios discrecionales tras la + instalación del nuevo sistema desde el viejo, + como si el nuevo sistema estuviera dentro de un + chroot. El proceso tiene tres fases, + cada una de los cuales consiste en ejecutar un + script de shell o invocar + make: + + + + fase_1.sh: + Crea un sistema nuevo y capaz de arrancar en un directorio + vacío y combina o copia tantos ficheros como sea + necesario. Una vez acabado esto arranca el nuevo sistema. + + + + fase_2.sh: + Instala los ports que hayamos elegido. + + + + fase_3.mk: + Remata la configuración del software instalado en la + fase anterior. + + + + Una vez que ha usado &scratch.ap; para construír un + segundo sistema y ha comprobado que funciona satisfactoriamente + durante unas cuantas semanas puede usarlo de nuevo para reinstalar + el sistema original. Desde ese momento cada vez que crea que + debe actualizar un sistema simplemente elija las particiones que + hay que borrar y reinstalar. + + Puede que haya oído hablar o incluso haya usado ya + Linux From Scratch, + LFS para ser más breve. LFS abarca también cómo + construír e instalar un sistema desde cero en particiones + vacías partiendo de un sistema en funcionamiento. El + objetivo de LFS parece ser mostrar la razón de ser y de estar + de todas y cada una de las partes del sistema (como el kernel, + el compilador, los dispositivos, la shell, la base de datos de + terminales, etc.) y los detalles de la instalación de cada + parte. &scratch.ap; no entra en detalles tan exahustivos. Mi + intención es facilitar una instalación automatizada y + completa, no explicar cada detalle escabroso del ciclópeo + proceso que arrancamos cuando hacemos un + make world. Si desea usted explorar &os; de + modo tan profundo comience por leer + /usr/src/Makefile y siga cuidadosamente lo + que sucede al teclear + make buildworld. + + Hay también algunos detalles delicados con los que + me encontré durante el desarrollo de &scratch.ap; que + debería tener muy en cuenta. + + + + + + El sistema no puede ser usado normalmente + durante la compilación de los ports + que tiene lugar en la segunda fase. Si va a ejecutar + el proceso en un servidor en producción tenga en cuenta + el tiempo de parada provocado por la fase dos. Los + ports compilados por + fase_2.sh necesitan aproximadamente 4 horas + para acabar en un sistema SCSI AMD1800+ con discos de 10.000 rpm + y 1GB de RAM. + + + + + + + Requisitos previos + + Para poder usar &scratch.ap; + necesitará lo siguiente: + + + + Un sistema &os; con el árbol de ports y + los fuentes instalados. + + + + Al menos una partición vacía donde instalaremos + el nuevo sistema. + + + + Experiencia en el uso de &man.mergemaster.8; o al menos no + tener miedo de usarlo. + + + + Si su acceso a Internet es lento o si no dispone del mismo + necesitará los distfiles de los ports que + vaya a instalar. + + + + Conocimientos básicos de confección de + scripts de shell con la shell Bourne, + &man.sh.1; + + + + Finalmente, debería ser capaz de decirle a su + boot loader (cargador de arranque) cómo arrancar el nuevo + sistema, en modo interactivo o mediante un fichero de + configuración. + + + + + + + Primera Fase: Instalación del Sistema + + Lo que vamos a explicar más adelante es mi + fase_1.sh. Tendrá que modificarlo + en varios sitios para que cuadre con su propia idea del + sistema perfecto. He intentado incluír + todos los comentarios posibles en los sitios donde debería + usted introducir sus cambios. Los puntos a estudiar son: + + + + Esquema de particiones. + + No estoy de acuerdo con la idea de una sola + partición inmensa en la que instalar todo el + sistema. Mis sistemas tienen generalmente al menos + una partición para + /, + /usr y + /var con + /tmp enlazado simbólicamente a + /var/tmp. + Además comparto los sistemas de ficheros en los que + ubico + /home (los directorios de los usuarios), + /home/ncvs (réplica del repositorio + de &os;, + /usr/ports (el árbol de ports), + /src (diversos árboles de fuentes de + procedencias varias) y + /share (otros datos compartidos que no + necesitan ser guardados, por ejemplo mensajes de + news. + + + + Lujos. + + Me refiero a lo que usaremos inmediatamente tras el arranque + del nuevo sistema e incluso antes de la segunda fase. En mi caso + se trata de shells/zsh puesto + que es la shell que aparece en mi cuenta de usuario en + /etc/passwd. De todos modos la tarea puede culminarse + sin esos lujos (de ahí su nombre), todo lo + que necesita es entrar en el sistema como root y pasar a la + siguiente fase. + + ¿Por qué no instalar entonces todos mis ports + en la primera fase?: en teoría y en la práctica + nos encontraremos con problemas de arranque y de consistencia: + durante la primera fase tendrá funcionando su viejo kernel + mientras el entorno chroot dispone de sus propios + binarios y ficheros de cabecera todos nuevos. Si por ejemplo el + sistema nuevo integra una nueva llamada al sistema (conforme a sus + cabeceras) algunos scripts de configuración + podrían intentar usarla y en concuencia ver + muertos sus procesos al tratar de ejecutarse en el viejo + kernel. He tenido problemas de otro tipo al intentar + construír lang/perl5. + + + + Antes de ejecutar fase_1.sh asegúrese + de haber cumplido con las tareas previas a un + make installworld installkernel, es decir: + + + + haber adaptado el fichero de configuración de su + kernel + + + + haber completado sin errores + make buildworld + + + + haber completado sin errores + KERNCONF= + nombre_de_su_kernel + + + + + Cuando ejecute fase_1.sh por primera vez + y copie sus ficheros de configuración de su sistema en + funcionamiento a su nuevo sistema no están al día + con respecto a lo que hay bajo + /usr/src, así que + mergemaster le preguntará por lo que quiere + hacer. Le recomiendo combinar los cambios. (Nota del traductor: + merge (to): unir, fusionar, mezclar). Si se cansa de pelear con + los diálogos de mergemaster puede + simplemente actualizar sus ficheros una vez en el sistema + original (pero sólo si existe esa opció: + por ejemplo, si uno de sus sistemas usa -STABLE y + el otro -CURRENT los cambios tienen bastantes + probabilidades de ser incompatibles). En posteriores usos + de mergemaster detectará que los ID de + las versiones RCS de esos ficheros coinciden con los que están + bajo /usr/src y no les prestará más + atención. + + El script fase_1.sh + detendrá su ejecución si falla alguno de los + comandos que contiene (si alguno da una salida distinta de + cero) por incluír set -e, así + que es imposible que pase por alto algún error. Antes + de seguir adelante debería asegurarse de que no hay errores + en su versión de + fase_1.sh. + + En fase_1.sh invocamos + mergemaster. Tanto si alguno de los ficheros + requiere ser combinado como si no, mergemaster + emitirá el siguiente mensaje + + *** Comparison complete + +Do you wish to delete what is left of /var/tmp/temproot.fase1? [no] no + + es decir + + *** Comparación completada + +¿Quiere borrar el contenido de /var/tmp/temproot.fase1? [no] no + + Por favor, responda no o simplemente pulse + Enter. Eso es debido a que + mergemaster habrá dejado unos cuantos ficheros + de longitud igual a cero en + /var/tmp/temproot.fase1 y los copiará al nuevo + sistema (a menos que ya estén ahí). + + Después mostrará los ficheros que ha instalado + mediante &man.more.1; o si lo prefiere mediante &man.less.1;): + +*** You chose the automatic install option for files that did not + exist on your system. The following were installed for you: + /rootnuevo/etc/defaults/rc.conf + ... + /rootnuevo/COPYRIGHT + +(END) + + es decir + + *** Ha elegido la opción de instalar automáticamente + los ficheros que no existen en su sistema. Han sido instalados los + siguientes: + /rootnuevo/etc/defaults/rc.conf + ... + /rootnuevo/COPYRIGHT + + + + Teclée q para salir del + paginador. Ahora se le informará sobre + login.conf: + + *** You installed a login.conf file, so make sure that you run + '/usr/bin/cap_mkdb /newroot/etc/login.conf' + to rebuild your login.conf database + + Would you like to run it now? y or n [n] + + es decir + + *** Ha instalado un fichero login.conf así que + asegúrese de ejecutar '/usr/bin/cap_mkdb /rootnuevo/etc/login.conf' + para reconstruír la base de datos de login.conf + + ¿Quiere ejecutarlo ahora mismo? (s)i o (n)o [n] + + La respuesta no tiene importancia puesto que ejecutaremos + &man.cap.mkdb.1; en todos los casos. + + Todo lo que hace fase_1.sh queda registrado + en un fichero log para que pueda examinarse con + detalle si es preciso. + + Éste es el fase_1.sh del autor, + así que tendrá que modificarlo a conciencia, + en especial los pasos 1, 2, 5 y 6. + + + Por favor, ponga una atención esmerada a las + entradas en las que aparece &man.newfs.8;. Si bien + es cierto que es imposible crear nuevos sistemas de archivos en + particiones montadas nuestro script no tendrá + ningún inconveniente en borrar cualquier partición + que no esté montada y con los nombres que aparezcan en + él, en nuestro caso + /dev/da3s1a, /dev/vinum/var_a + y /dev/vinum/usr_a. Puede provocar un desastre, + así que asegúrese de cambiar los nombres de los + dispositivos como corresponda. + + + + + Descargue fase_1.sh. + + La ejecución de éste script instala + un sistema equipado con lo siguiente: + + + Usuarios y grupos heredados del anterior sistema. + + + Acceso a Internet mediante Ethernet y PPP protegido por + un cortafuegos. + + + NTP y zona horaria correctas. + + + Algunos ficheros secundarios como + /etc/ttys e + inetd. + + + + Hay otras áreas listas para ser configuradas pero + no las tocaremos hasta concluír la segunda fase. Por ejemplo, + hemos copiado unos cuantos ficheros para configurar la impresión + y X11. Sin embargo la impresión suele necesitar de aplicaciones + que no se encuentran en el sistema base, por ejemplo PostScript. X11 + no funcionará hasta que no compilemos el servidor, las + bibliotecas y los programas. + + + + Segunda Fase: Instalación de <quote> + ports</quote> + + + En ésta fase es posible instalar packages + (que vienen precompilados) en lugar de compilar + ports. Para poder hacerlo convertiremos + fase_2.sh en poco más que una lista de + comandos pkg_add. Confío en que + será usted capaz de escribir un script + como ese. Ahora nos concentraremos en el sistema tradicional + y mucho más flexible de funcionamiento de los + ports. + + + El siguiente script + fase_2.sh es el que yo uso para instalar mis + ports favoritos. Puede ejecutarse tantas veces como sea + preciso y no prestará atención a los + ports que ya estén instalados. Incluye también + soporte para la + opción que hace un ensayo + general con todo, es decir, muestra lo que hubiera sucedido + si se hubiera ejecutado. Seguro que tiene que editar la lista de + ports y probablemente tenga que cambiar unas cuantas + variables de entorno. + + La lista de ports consiste en líneas + de dos o más palabras separadas por espacios: la categoría + y el port. Es opcional situar detrás + un comando de instalación que compilará e instalará + el port (por defecto make install). + Se ignoran las líneas vacís y las que comienzan + por #. La mayoría de las veces es suficiente incluír el + nombre del port y la categoría a que pertenece pero + existen unos pocos ports en cuya compilación + podemos afinar mucho asignando valores a variables de + make; veamos un ejemplo: + + www mozilla make WITHOUT_MAILNEWS=yes WITHOUT_CHATZILLA=yes install +mail procmail make BATCH=yes install + + De hecho puede usted usar comandos de shell a + su criterio, así que no tiene que limitarse a simples + invocaciones de make: + + java linux-sun-jdk13 yes | make install +news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make install + + Observe que la línea de news/inn-stable es un ejemplo de una + asignación de entrada a la variable del intérprete de + mandatos CONFIGURE_ARGS. El fichero Makefile + del port la usará como valor inicial y la + completará con otros argumentos esenciales. La diferencia respecto a + a especificar la variable para make en la línea de + comandos mediante + + news inn-stable make CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" install + + está en que esto último sustituye directamente el valor + en lugar de completarlo. El método más adecuado depende de cada + port en particular. + + Compruebe cuidadosamente que ninguno de sus ports + tenga una instalación interactiva, es decir, que ninguno + deberí intentar recibir de stdin nada que no le dé + usted en stdin. Si alguno lo hace leerá la siguiente o + siguientes líneas de éste documento y no entenderá + nada de nada. Si fase_2.sh pasa por alto + un port o cesa su ejecución sin razón + aparente es muy posible que esa sea la razón. + + He aquí fase_2.sh. Crea un fichero + log por cada port que instala y les da nombres + según el esquema + DIRECTORIO_LOG/categoría+port. Si no tiene una + copia de su fase_2.sh en una partición + compartida no olvide copiarlo al sistema nuevo antes de + arrancarlo. + + + + Descargue fase_2.sh. + + + + Tercera Fase + + Ya hemos concluído la segunda fase y ya están + instalados sus queridísimos ports, pero + algunos de ellos requieren un poco de configuración. En + eso consistirá la tercera fase, añadir los + detalles específicos de las configuraciones. Podría + haberlos integrado en el script + fase_2.sh pero creo que hay una diferencia conceptual + entre instalar un port y en modificar la + configuración con la que viene por defecto para adaptarla + a nuestros gustos o necesidades y creo por lo tanto que esa + diferencia justifica una separación en una fase + propia. + + He creído más conveniente implementar la + tercera fase como un Makefile porque + admiten la selección de lo que quiera configurar + tecleando simplemente: + + + &prompt.root; make -f fase_3.mk + nombre_del_port + + + Al igual que con fase_2.sh asegúrese + de que dispone de una copia de su fase_3.mk una + vez que arranca el sistema nuevo, bien situándolo en una + partición compartida bien copiándolo en algún + lugar dentro del nuevo sistema. + + + + Descargue fase_3.mk. + + + + Restricciones + + La instalación automatizada de un port + puede resultar difícil si es interactiva y no soporta + make BATCH=YES install. En algunos casos + la interacción se reduce a teclear yes + cuando se le pregunta si acepta alguna licencia. Si esa entrada de + datos ha de llegar por la entrada estándar simplemente + redirigiremos las respuestas pertinentes a la orden de + instalación (que suele ser make install; + ese es el modo en el que hemos procedido con java/linux-sun-jdk13 en + fase_2.sh). + + No obstante ésta estrategia no funciona con editors/staroffice52, que exige que X11 + esté funcionando. El proceso de instalación comprende + un buen número de pulsaciones de ratón y de tecleo, + con lo que es imposible automatizarlo tal y como se hace con otros + ports. Sin embargo el siguiente atajo workaround + nos soluciona el problema: previamente he creado un + staroffice en el sistema original con + + + &prompt.root; cd /usr/ports/editors/staroffice52 +&prompt.root; make package +===> Building package for staroffice-5.2_1 +Creating package /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz +Registering depends:. +Creating bzip'd tar ball in '/usr/ports/editors/staroffice52/staroffice-5.2_1.tbz' + + + y durante la segunda fase usamos: + + + &prompt.root; pkg_add /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz + + + Debe usted también tener muy en cuenta posibles + problemas con los ficheros de configuración a la hora de + actualizar. En general no sabemos cuándo van a hacerse cambios + en el formato o el contenido de un fichero de configuración. + Es posible que haya que añadir un nuevo grupo a + /etc/group, o quizás /etc/passwd + necesite un nuevo campo en sus entradas. Éstas cosas han + sucedido en alguna ocasión anteriormente. Si simplemente + copiamos un fichero de configuración del sistema viejo al nuevo + será suficiente la mayoría de la veces pero ya hemos + visto dos casos en los que no lo era. Si actualiza su sistema siguiendo + el sistema ortodoxo (sobreescribiendo los ficheros antíguos) + tendrá que usar mergemaster para proceder + con los cambios que quiera incluír en + la configuración de su nuevo sistema, teniendo en cuenta que + entre esos cambios hay o puede haber nuevos ficheros. Por desgracia + mergemaster sólo es útil con ficheros + del sistema base y no para aquellos relacionados con los + ports. Además, ciertas aplicaciones parecen + especialmente diseñadas para sacarme de mis casillas por el + procedimiento de cambiar el fichero de configuración cada quince + días. Lo único que puede hacerse es estar alerta, + sobre todo cuando cambia el número de versión. + En ocasiones anteriores he tenido que modificar o reescribir + ficheros para servidores web, servidores y clientes de news. + Cualquier tipo de software cuyo mantenimiento sea muy activo es un firme + candidato a que sus ficheros de configuración merezcan nuestro + examen. + + He usado &scratch.ap; varias veces para actualizar un sistema + 5-CURRENT a 5-CURRENT, esto es, + nunca he intentado instalar 5-CURRENT desde un + sistema 4-STABLE o viceversa, pero dada la + cantidad de cambios existentes entre las diferentes + RELEASE no sería insensato esperar que esa tarea + sea un tanto compleja. Usar &scratch.ap; para actualizaciones + dentro del campo de 4-STABLE debería + ser mucho menos penoso (aunque yo aún no lo he + intentado). Si quiere hacerlo debería tener en cuenta + lo siguiente: + + + + Si no usa el sistema de ficheros de dispositivo + (devfs) puede necesitar crear los + dispositivos necesarios para su hardware con &man.MAKEDEV.8; + en la primera fase, sexto paso. + + + + +
diff --git a/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_1.sh b/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_1.sh new file mode 100644 index 0000000000..22d76fc8d0 --- /dev/null +++ b/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_1.sh @@ -0,0 +1,243 @@ +#!/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: diff --git a/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_2.sh b/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_2.sh new file mode 100644 index 0000000000..411e9272eb --- /dev/null +++ b/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_2.sh @@ -0,0 +1,148 @@ +#!/bin/sh +# +# fase_2.sh - FreeBSD From Scratch, Segunda Fase: Instalación de Ports. +# Uso: ./fase_2.sh +# +# $FreeBSD$ + +DBDIR=/var/db/pkg +PORTS=/usr/ports +LOGDIR=/home/root/setup/ports.log; mkdir -p ${LOGDIR} + +# Creamos unas cuantas variables que usa más de un port. +PAPERSIZE=a4; export PAPERSIZE +USA_RESIDENT=NO; export USA_RESIDENT + +MYNAME=$(basename $0) +usage () { + exec >&2 + echo "uso: ${MYNAME} [-hn]" + echo "" + echo " Opciones:" + echo " -h éste mensaje de ayuda." + echo " -n muestra qué pasaría si se hubiera ejecutado." + echo "" + exit 1 +} + +args=`getopt hn $*` +if test $? != 0; then + usage +fi +set -- $args +DRYRUN= +for i; do + case "$i" in + -n) DRYRUN=yes;; + --) break;; + *) usage;; + esac +done + +cat << EOF | +lang perl5 +security sudo +x11-servers XFree86-4-Server +x11 wrapper +x11 XFree86-4-libraries +x11 XFree86-4-clients +x11-fonts XFree86-4-font75dpi +x11-fonts XFree86-4-font100dpi +x11-fonts XFree86-4-fontScalable +x11-fonts urwfonts +x11-fonts webfonts +x11-toolkits open-motif +x11 rxvt +x11-wm ctwm +security openssh-askpass +astro xplanet +astro setiathome make BATCH=yes install +astro xephem +editors vim +print ghostscript-gnu make A4=yes BATCH=yes install +print a2ps-a4 +print psutils-a4 +print gv +print acroread5 +print transfig +archivers zip +archivers unzip +java linux-sun-jdk13 yes | make install +java jdk13 +www apache2 +www weblint +www amaya +www mozilla make WITHOUT_MAILNEWS=yes WITHOUT_CHATZILLA=yes install +www netscape48-navigator +www checkbot +www privoxy +graphics xfig +graphics xv +graphics fxtv +lang expect +news tin +net freebsd-uucp +net cvsup-without-gui +net pathchar make NO_CHECKSUM=yes install +ftp wget +ftp ncftp3 +textproc ispell +german ispell-neu +german ispell-alt +textproc docproj make JADETEX=yes HAVE_MOTIF=yes install +sysutils samefile +sysutils pstree +sysutils mkisofs +sysutils cdrtools +sysutils grub +devel ddd +devel ctags +devel ElectricFence +mail procmail make BATCH=yes install +mail metamail +mail mutt +mail spamoracle +emulators mtools +sysutils portupgrade +news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make install +misc figlet-fonts +textproc gmat +EOF +while read CATEGORY NAME CMD; do + case "${CATEGORY}" in + \#*) continue;; + '') continue;; + esac + DIR="${PORTS}/${CATEGORY}/${NAME}" + if ! test -d "${DIR}"; then + echo "$DIR no existe -- ignorado" + continue + fi + cd ${DIR} + PKGNAME=`make -V PKGNAME` + if test -d "${DBDIR}/${PKGNAME}"; then + echo "${CATEGORY}/${NAME} ya instalado como ${PKGNAME}" + continue + fi + LOG="${LOGDIR}/${CATEGORY}+${NAME}" + echo "==> Instalando ${CATEGORY}/${NAME}; registrando instalación en ${LOG}" + test -n "${CMD}" || CMD="make install" + if test -n "${DRYRUN}"; then + echo "${CMD}" + continue + fi + date "++++++++++ %v %T +++++++++" > ${LOG} + echo "CMD: ${CMD}" >> ${LOG} + ( + make clean + eval "${CMD}" + # make clean # Descoméntelo si no le sobra espacio bajo ${PORTS}. + ) 2>&1 | tee -a ${LOG} +done + +# Instalamos StarOffice como "package", previamente creado en el sistema +# antíguo mediante "make package" porque el "port" usa una instalación +# interactiva en X11. +#pkg_add ${PORTS}/editors/staroffice52/staroffice-*.tbz + +# EOF $RCSfile: fase_2.sh,v $ vim: tabstop=4: diff --git a/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_3.mk b/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_3.mk new file mode 100644 index 0000000000..24d48cdf27 --- /dev/null +++ b/es_ES.ISO8859-1/articles/fbsd-from-scratch/fase_3.mk @@ -0,0 +1,150 @@ +# fase_3.mk - FreeBSD From Scratch, Tercera Fase: Ajustes Personalizados +# de la Configuración de +# los Ports. +# Uso: make -f fase_3.mk all (configurar todos los ports) +# or make -f fase_3.mk target (configurar sólo target) +# +# Es una buena idea asegurarse de que ningún "target" pueda hacerse más de +# una vez sin efectos no deseados. +# +# $FreeBSD$ + +.POSIX: + +message: + @echo "Por favor, use uno de los siguientes \"targets\":" + @echo "config_apache" + @echo "config_inn" + @echo "config_javaplugin" + @echo "config_privoxy" + @echo "config_setiathome" + @echo "config_sgml" + @echo "config_sudo" + @echo "config_TeX" + @echo "config_tin" + @echo "config_uucp" + @echo "all -- todos los anteriores" + +all: config_apache \ + config_inn \ + config_javaplugin \ + config_privoxy \ + config_setiathome \ + config_sgml \ + config_sudo \ + config_TeX \ + config_tin \ + config_uucp + +config_apache: + # 1. Modificación httpd.conf. + perl -pi \ + -e 's/#ServerName new.host.name/ServerName hal9000.s.shuttle.de/;' \ + -e 's/^ServerAdmin.*/ServerAdmin schweikh\@schweikhardt.net/;' \ + -e 's,/usr/local/www/cgi-bin/,/home/opt/www/cgi-bin/,;' \ + /usr/local/etc/apache2/httpd.conf + # 2. Restituír los enlaces simbólicos a los sitios web. + cd /usr/local/www/data; \ + ln -fs /home/schweikh/prj/homepage schweikhardt.net; \ + ln -fs /home/opt/www/test . + +config_inn: + pw usermod -n news -d /usr/local/news -s /bin/sh + # Facilitar al sistema de news su configuración inicial. + cd /home/root/setup; \ + install -C -o news -g news -m 664 active newsgroups /usr/local/news/db + # El innd.sh que viene con el "port" falla: busca + # history.pag, fichero que no existe. + cd /home/root/setup; \ + install -C -o root -g wheel -m 555 innd.sh /usr/local/etc/rc.d + # Configuración del método de almacenamiento. + 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 + # Configuración de newsfeeds. + printf "%s\n%s\n" \ + "ME:*::" \ + "shuttle/news2.shuttle.de:!junk,!control:B32768/512,Tf,Wfb:" \ + >/usr/local/news/etc/newsfeeds + # Configuración de inn.conf + perl -pi \ + -e 's/^(organization:\s*).*/$$1 An Open Pod Bay Door/;' \ + -e 's/^(pathhost:\s*).*/$$1 hal9000.schweikhardt.net/;' \ + -e 's/^(server:).*/$$1 localhost/;' \ + -e 's/^(domain:).*/$$1 schweikhardt.net/;' \ + -e 's/^(fromhost:).*/$$1 schweikhardt.net/;' \ + -e 's,^(moderatormailer:).*,$$1 \%s\@moderators.isc.org,;' \ + -e 's,/usr/local/news/spool,/share/news/spool,;' \ + /usr/local/news/etc/inn.conf + +config_javaplugin: + cd /usr/local/lib/netscape-linux/plugins; \ + if ! test -h javaplugin.so; then \ + ln -s ../../../linux-sun-jdk1.3.1/jre/plugin/i386/ns4/javaplugin.so; \ + fi; \ + ls -l javaplugin.so + +config_privoxy: + install -C -o root -g wheel -m 644 config /usr/local/etc/privoxy + +config_setiathome: + perl -pi \ + -e 's,^.*seti_wrkdir.*#,seti_wrkdir=/home/nobody/setiathome #,;' \ + /usr/local/etc/rc.setiathome.conf + +config_sgml: + cp -p /usr/local/share/gmat/sgml/ISO_8879-1986/entities/* \ + /usr/local/share/sgml/docbook/4.1 + +config_sudo: + if ! grep -q schweikh /usr/local/etc/sudoers; then \ + echo 'schweikh ALL = (ALL) NOPASSWD: ALL' >> /usr/local/etc/sudoers; \ + fi + +config_TeX: + # En el fichero textproc/docproj se especifica: para generar el FreeBSD + # Handbook con JadeTex cambie los siguientes parámetros a los valores que se + # indican a continuación: + # + 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 + +config_tin: + # Dirigimos tin a nuestros archivos. + printf "%s\n%s\n%s\n" \ + "activefile=/usr/local/news/db/active" \ + "newsgroupsfile=/usr/local/news/db/newsgroups" \ + "spooldir=/share/news/spool/articles" \ + >/usr/local/etc/tin.defaults + +config_uucp: + # UUCP cuenta con encontrar /usr/bin/rnews. + cd /usr/bin; ln -fs ../local/news/bin/rnews . + # Configuración de UUCP. + 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 * + # Activar uucico tras el arranque del sistema. + mkdir -p /usr/local/etc/rc.d; cp uucp.sh /usr/local/etc/rc.d + +# EOF $RCSfile: fase_3.mk,v $ vim: tabstop=4: