Add a new spanish article.

Submmitted by: carvay@tikismikis.org
This commit is contained in:
Jesus Rodriguez Cuesta 2004-02-01 18:45:09 +00:00
parent 6988db8a06
commit a69c74b2fb
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=19920
5 changed files with 1290 additions and 0 deletions
es_ES.ISO8859-1/articles/fbsd-from-scratch

View file

@ -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"

View file

@ -0,0 +1,722 @@
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN">
%man;
<!ENTITY % freebsd PUBLIC "-//FreeBSD//ENTITIES DocBook Miscellaneous FreeBSD Entities//EN">
%freebsd;
<!ENTITY scratch.ap "<application>FreeBSD From Scratch</application>">
]>
<article>
<articleinfo>
<title>FreeBSD From Scratch</title>
<author>
<firstname>Jens</firstname>
<surname>Schweikhardt</surname>
<affiliation>
<address><email>schweikh@FreeBSD.org</email></address>
</affiliation>
</author>
<copyright>
<year>2002</year>
<holder>Jens Schweikhardt</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
</articleinfo>
<abstract>
<para>&scratch.ap; explica la instalaci&oacute;n totalmente automatizada
de un sistema &os; hecho a medida y compilado desde las fuentes,
proceso que incluye adem&aacute;s la compilaci&oacute;n de sus
<quote>ports</quote> favoritos y configurado para coincidir con
su idea del sistema perfecto. Si cree que
<command>make world</command> es un concepto fascinante
&scratch.ap; lo ampl&iacute;a hasta ser
<command>make evenmore</command>. 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, <command>make world</command>,
que podr&iacute;a traducirse muy libremente como <quote>hacer, o m&aacute;s bien rehacer el
mundo entero</quote> y <command>make evenmore</command>, osea, <quote>hacer m&aacute;s
a&uacute;n</quote>. </para>
</abstract>
<sect1 id="introduction">
<title>Introducci&oacute;n</title>
<para>&iquest;Ha actualizado alguna vez su sistema mediante
<command>make world</command>?. Si solamente tiene un sistema
en sus discos se encontrar&aacute; con un problema. Si
<maketarget>installworld</maketarget> falla a la mitad
su sistema quedar&aacute; da&ntilde;ado e incluso
puede ser incapaz de arrancar de nuevo. O quiz&aacute;s
<maketarget>installworld</maketarget> se ha ejecutado sin problemas
pero el nuevo kernel no arranca. Se impone buscar el CD de
Rescate y tratar de encontrar algo &uacute;til en aquellos
<quote>backups</quote> que hizo hace seis meses.</para>
<para>Creo en el paradigma de <quote>al actualizar sistemas operativos
instala desde cero</quote>. Haci&eacute;ndolo as&iacute;, esto es,
al borrar sobreescribiendo en los discos o mejor dicho las particiones,
nos aseguraremos de no dejar datos antiguos en ellos, un aspecto
&eacute;ste del que la mayor&iacute;a de los procesos de
actualizaci&oacute;n no se preocupan en absoluto.
Por otra parte borrar las particiones significa
que tendr&aacute; que recompilar/reinstalar todos sus
<quote>ports</quote> y <quote>packages</quote> y despu&eacute;s de eso
rehacer todas y cada una de las configuraciones que con muchos esfuerzos
atesoraba. Si usted tambi&eacute;n piensa que &eacute;sta tarea
deber&iacute;a automatizarse siga leyendo.</para>
</sect1>
<sect1 id="why">
<title>&iquest;Por qu&eacute; (no) deber&iacute;a interesarme
&scratch.ap;?</title>
<para>Esa es una pregunta muy razonable. Tenemos
<application>sysinstall</application>, una compilaci&oacute;n
del kernel que funciona sin sorpresas y tenemos tambi&eacute;n
las herramientas de entorno de usuario.</para>
<para>El problema que tiene <application>sysinstall</application>
es que est&aacute; extremadamente limitado cuando se trata de
qu&eacute;, d&oacute;nde y c&oacute;mo queremos que haga la
instalaci&oacute;n.</para>
<itemizedlist>
<listitem>
<para>Normalmente se usa para instalar distribuciones precompiladas
y <quote>packages</quote> desde diversas fuentes (CD, DVD,
FTP). No puede instalar el resultado de
<literal>make buildworld</literal>.</para>
</listitem>
<listitem>
<para>No puede instalar un segundo sistema en un directorio
de un sistema en funcionamiento.</para>
</listitem>
<listitem>
<para>No puede hacer una instalaci&oacute;n en particiones
<application>Vinum</application>.</para>
</listitem>
<listitem>
<para>No puede compilar <quote>ports</quote>, s&oacute;lo
instala <quote>packages</quote> precompilados.</para>
</listitem>
<listitem>
<para>Es dif&iacute;cil automatizar mediante
<quote>scripts</quote> o incluso hacer de forma manual
los cambios que considere
necesarios despu&eacute;s de la instalaci&oacute;n</para>
</listitem>
<listitem>
<para>Por si todo esto fuera poco
<application>sysinstall</application>
est&aacute; semioficialmente al final de su
<quote>Ciclo de Vida &Uacute;til</quote>.</para>
</listitem>
</itemizedlist>
<para>El archiconocido proceso de <quote>constru&iacute;r/instalar
el mundo</quote> (<quote>build/install world</quote>), explicado en
<ulink url="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html">el
Handbook</ulink>, por defecto realiza la tarea de sustitu&iacute;r el
sistema existente. S&oacute;lo respeta el kernel y los
m&oacute;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&oacute;n falla por alguna
raz&oacute;n puede ser dif&iacute;cil o incluso imposible volver a
dejar el sistema en el estado inicial.</para>
<para>&scratch.ap; resuelve todos esos problemas. La estrategia es
simple: utiliza un sistema en funcionamiento para instalar un nuevo
sistema en un &aacute;rbol de directorios y montar nuevas particiones
limpiamente en ese &aacute;rbol. Muchos ficheros de
configuraci&oacute;n pueden copiarse al sitio que les corresponda y
&man.mergemaster.8; se encargar&aacute; de aquellos a los que
no. Pueden hacerse cambios discrecionales tras la
instalaci&oacute;n del nuevo sistema desde el viejo,
como si el nuevo sistema estuviera dentro de un
<quote>chroot</quote>. El proceso tiene tres fases,
cada una de los cuales consiste en ejecutar un
<quote>script de shell</quote> o invocar
<command>make</command>:</para>
<orderedlist>
<listitem>
<para><filename>fase_1.sh</filename>:
Crea un sistema nuevo y capaz de arrancar en un directorio
vac&iacute;o y combina o copia tantos ficheros como sea
necesario. Una vez acabado esto arranca el nuevo sistema.</para>
</listitem>
<listitem>
<para><filename>fase_2.sh</filename>:
Instala los <quote>ports</quote> que hayamos elegido.</para>
</listitem>
<listitem>
<para><filename>fase_3.mk</filename>:
Remata la configuraci&oacute;n del software instalado en la
fase anterior.</para>
</listitem>
</orderedlist>
<para>Una vez que ha usado &scratch.ap; para constru&iacute;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.</para>
<para>Puede que haya o&iacute;do hablar o incluso haya usado ya
<ulink
url="http://www.linuxfromscratch.org/">Linux From Scratch</ulink>,
LFS para ser m&aacute;s breve. LFS abarca tambi&eacute;n c&oacute;mo
constru&iacute;r e instalar un sistema desde cero en particiones
vac&iacute;as partiendo de un sistema en funcionamiento. El
objetivo de LFS parece ser mostrar la raz&oacute;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&oacute;n de cada
parte. &scratch.ap; no entra en detalles tan exahustivos. Mi
intenci&oacute;n es facilitar una instalaci&oacute;n automatizada y
completa, no explicar cada detalle escabroso del cicl&oacute;peo
proceso que arrancamos cuando hacemos un
<command>make world</command>. Si desea usted explorar &os; de
modo tan profundo comience por leer
<filename>/usr/src/Makefile</filename> y siga cuidadosamente lo
que sucede al teclear
<command>make buildworld</command>.</para>
<para>Hay tambi&eacute;n algunos detalles delicados con los que
me encontr&eacute; durante el desarrollo de &scratch.ap; que
deber&iacute;a tener muy en cuenta.</para>
<!-- XXX: Sería una buena idea escribir el fase_2.sh usando un
"jail" situada en el sistema nuevo instalado en la primera
fase. Si disponemos de una dirección de red bien configurada
como IP primaria de esa "jail" podría ser posible incluso
compilar "ports" en un "chroot" sin desinstalar nada del
sistema anfitrión. No obstante tenga en cuenta que incluso
las "jail" están ejecutando el kernel anfitrión.-->
<itemizedlist>
<listitem>
<para>El sistema no puede ser usado normalmente
durante la compilaci&oacute;n de los <quote>ports</quote>
que tiene lugar en la segunda fase. Si va a ejecutar
el proceso en un servidor en producci&oacute;n tenga en cuenta
el tiempo de parada provocado por la fase dos. Los
<quote>ports</quote> compilados por
<filename>fase_2.sh</filename> necesitan aproximadamente 4 horas
para acabar en un sistema SCSI AMD1800+ con discos de 10.000 rpm
y 1GB de RAM.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="prerequisites">
<title>Requisitos previos</title>
<para>Para poder usar &scratch.ap;
necesitar&aacute; lo siguiente:</para>
<itemizedlist>
<listitem>
<para>Un sistema &os; con el &aacute;rbol de <quote>ports</quote> y
los fuentes instalados.</para>
</listitem>
<listitem>
<para>Al menos una partici&oacute;n vac&iacute;a donde instalaremos
el nuevo sistema.</para>
</listitem>
<listitem>
<para>Experiencia en el uso de &man.mergemaster.8; o al menos no
tener miedo de usarlo.</para>
</listitem>
<listitem>
<para>Si su acceso a Internet es lento o si no dispone del mismo
necesitar&aacute; los <quote>distfiles</quote> de los ports que
vaya a instalar.</para>
</listitem>
<listitem>
<para>Conocimientos b&aacute;sicos de confecci&oacute;n de
<quote>scripts</quote> de shell con la shell Bourne,
&man.sh.1;</para>
</listitem>
<listitem>
<para>Finalmente, deber&iacute;a ser capaz de decirle a su
<quote>boot loader</quote> (cargador de arranque) c&oacute;mo arrancar el nuevo
sistema, en modo interactivo o mediante un fichero de
configuraci&oacute;n.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="stage1">
<title>Primera Fase: Instalaci&oacute;n del Sistema</title>
<para>Lo que vamos a explicar m&aacute;s adelante es mi
<filename>fase_1.sh</filename>. Tendr&aacute; que modificarlo
en varios sitios para que cuadre con su propia idea del
<quote>sistema perfecto</quote>. He intentado inclu&iacute;r
todos los comentarios posibles en los sitios donde deber&iacute;a
usted introducir sus cambios. Los puntos a estudiar son:</para>
<itemizedlist>
<listitem>
<para>Esquema de particiones.</para>
<para>No estoy de acuerdo con la idea de una sola
partici&oacute;n inmensa en la que instalar todo el
sistema. Mis sistemas tienen generalmente al menos
una partici&oacute;n para
<filename>/</filename>,
<filename>/usr</filename> y
<filename>/var</filename> con
<filename>/tmp</filename> enlazado simb&oacute;licamente a
<filename>/var/tmp</filename>.
Adem&aacute;s comparto los sistemas de ficheros en los que
ubico
<filename>/home</filename> (los directorios de los usuarios),
<filename>/home/ncvs</filename> (r&eacute;plica del repositorio
de &os;,
<filename>/usr/ports</filename> (el &aacute;rbol de ports),
<filename>/src</filename> (diversos &aacute;rboles de fuentes de
procedencias varias) y
<filename>/share</filename> (otros datos compartidos que no
necesitan ser guardados, por ejemplo mensajes de
<quote>news</quote>.</para>
</listitem>
<listitem>
<para><quote>Lujos</quote>.</para>
<para>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 <filename
role="package">shells/zsh</filename> puesto
que es la shell que aparece en mi cuenta de usuario en <filename>
/etc/passwd</filename>. De todos modos la tarea puede culminarse
sin esos <quote>lujos</quote> (de ah&iacute; su nombre), todo lo
que necesita es entrar en el sistema como root y pasar a la
siguiente fase.</para>
<para>&iquest;Por qu&eacute; no instalar entonces todos mis ports
en la primera fase?: en teor&iacute;a y en la pr&aacute;ctica
nos encontraremos con problemas de arranque y de consistencia:
durante la primera fase tendr&aacute; funcionando su viejo kernel
mientras el entorno <quote>chroot</quote> 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 <quote>scripts</quote> de configuraci&oacute;n
podr&iacute;an intentar usarla y en concuencia ver <quote>
muertos</quote> sus procesos al tratar de ejecutarse en el viejo
kernel. He tenido problemas de otro tipo al intentar
constru&iacute;r <filename
role="package">lang/perl5</filename>.</para>
</listitem>
</itemizedlist>
<para>Antes de ejecutar <filename>fase_1.sh</filename> aseg&uacute;rese
de haber cumplido con las tareas previas a un
<command>make installworld installkernel</command>, es decir:</para>
<itemizedlist>
<listitem>
<para>haber adaptado el fichero de configuraci&oacute;n de su
kernel</para>
</listitem>
<listitem>
<para>haber completado sin errores <command>
make buildworld</command></para>
</listitem>
<listitem>
<para>haber completado sin errores<command>
KERNCONF=<replaceable>
nombre_de_su_kernel</replaceable></command></para>
</listitem>
</itemizedlist>
<para>Cuando ejecute <filename>fase_1.sh</filename> por primera vez
y copie sus ficheros de configuraci&oacute;n de su sistema en
funcionamiento a su nuevo sistema no est&aacute;n al d&iacute;a
con respecto a lo que hay bajo
<filename>/usr/src</filename>, as&iacute; que <command>
mergemaster</command> le preguntar&aacute; 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&aacute;logos de <command>mergemaster</command> puede
simplemente actualizar sus ficheros una vez en el sistema <emphasis>
original</emphasis> (pero s&oacute;lo si existe esa opci&oacute;:
por ejemplo, si uno de sus sistemas usa <literal>-STABLE</literal> y
el otro <literal>-CURRENT</literal> los cambios tienen bastantes
probabilidades de ser incompatibles). En posteriores usos
de <command>mergemaster</command> detectar&aacute; que los ID de
las versiones RCS de esos ficheros coinciden con los que est&aacute;n
bajo <filename>/usr/src</filename> y no les prestar&aacute; m&aacute;s
atenci&oacute;n.</para>
<para>El <quote>script</quote> <filename>fase_1.sh</filename>
detendr&aacute; su ejecuci&oacute;n si falla alguno de los
comandos que contiene (si alguno da una salida distinta de
cero) por inclu&iacute;r <command>set -e</command>, as&iacute;
que es imposible que pase por alto alg&uacute;n error. Antes
de seguir adelante deber&iacute;a asegurarse de que no hay errores
en su versi&oacute;n de
<filename>fase_1.sh</filename>.</para>
<para>En <filename>fase_1.sh</filename> invocamos
<command>mergemaster</command>. Tanto si alguno de los ficheros
requiere ser combinado como si no, <command>mergemaster</command>
emitir&aacute; el siguiente mensaje</para>
<screen>*** Comparison complete
Do you wish to delete what is left of /var/tmp/temproot.fase1? [no] <userinput>no</userinput></screen>
<para>es decir</para>
<screen>*** Comparaci&oacute;n completada
&iquest;Quiere borrar el contenido de /var/tmp/temproot.fase1? [no] <userinput>no</userinput></screen>
<para>Por favor, responda <literal>no</literal> o simplemente pulse
<keycap>Enter</keycap>. Eso es debido a que <command>
mergemaster</command> habr&aacute; dejado unos cuantos ficheros
de longitud igual a cero en <filename>
/var/tmp/temproot.fase1</filename> y los copiar&aacute; al nuevo
sistema (a menos que ya est&eacute;n ah&iacute;).</para>
<para>Despu&eacute;s mostrar&aacute; los ficheros que ha instalado
mediante &man.more.1; o si lo prefiere mediante &man.less.1;):</para>
<screen>*** 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)</screen>
<para>es decir</para>
<screen>*** Ha elegido la opci&oacute;n de instalar autom&aacute;ticamente
los ficheros que no existen en su sistema. Han sido instalados los
siguientes:
/rootnuevo/etc/defaults/rc.conf
...
/rootnuevo/COPYRIGHT
</screen>
<para>Tecl&eacute;e <keycap>q</keycap> para salir del
paginador. Ahora se le informar&aacute; sobre <filename>
login.conf</filename>:</para>
<screen>*** 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]</screen>
<para>es decir</para>
<screen>*** Ha instalado un fichero login.conf as&iacute; que
aseg&uacute;rese de ejecutar '/usr/bin/cap_mkdb /rootnuevo/etc/login.conf'
para reconstru&iacute;r la base de datos de login.conf
&iquest;Quiere ejecutarlo ahora mismo? (s)i o (n)o [n]</screen>
<para>La respuesta no tiene importancia puesto que ejecutaremos
&man.cap.mkdb.1; en todos los casos.</para>
<para>Todo lo que hace <filename>fase_1.sh</filename> queda registrado
en un fichero <quote>log</quote> para que pueda examinarse con
detalle si es preciso.</para>
<para>&Eacute;ste es el <filename>fase_1.sh</filename> del autor,
as&iacute; que tendr&aacute; que modificarlo a conciencia,
en especial los pasos 1, 2, 5 y 6.</para>
<warning>
<para>Por favor, ponga una atenci&oacute;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 <quote>script</quote> no tendr&aacute;
ning&uacute;n inconveniente en borrar cualquier partici&oacute;n
que no est&eacute; montada y con los nombres que aparezcan en
&eacute;l, en nuestro caso
<filename>/dev/da3s1a</filename>, <filename>/dev/vinum/var_a</filename>
y <filename>/dev/vinum/usr_a</filename>. Puede provocar un desastre,
as&iacute; que aseg&uacute;rese de cambiar los nombres de los
dispositivos como corresponda.</para>
</warning>
<programlisting><inlinegraphic fileref="fase_1.sh" format="linespecific"></programlisting>
<para>Descargue <ulink
url="fase_1.sh"><filename>fase_1.sh</filename></ulink>.</para>
<para>La ejecuci&oacute;n de &eacute;ste <quote>script</quote> instala
un sistema equipado con lo siguiente:</para>
<itemizedlist>
<listitem>
<para>Usuarios y grupos heredados del anterior sistema.</para>
</listitem>
<listitem>
<para>Acceso a Internet mediante Ethernet y PPP protegido por
un cortafuegos.</para>
</listitem>
<listitem>
<para>NTP y zona horaria correctas.</para>
</listitem>
<listitem>
<para>Algunos ficheros secundarios como
<filename>/etc/ttys</filename> e
<command>inetd</command>.</para>
</listitem>
</itemizedlist>
<para>Hay otras &aacute;reas listas para ser configuradas pero
no las tocaremos hasta conclu&iacute;r la segunda fase. Por ejemplo,
hemos copiado unos cuantos ficheros para configurar la impresi&oacute;n
y X11. Sin embargo la impresi&oacute;n suele necesitar de aplicaciones
que no se encuentran en el sistema base, por ejemplo PostScript. X11
no funcionar&aacute; hasta que no compilemos el servidor, las
bibliotecas y los programas.</para>
</sect1>
<sect1 id="stage2">
<title>Segunda Fase: Instalaci&oacute;n de <quote>
ports</quote></title>
<note>
<para>En &eacute;sta fase es posible instalar <quote>packages</quote>
(que vienen precompilados) en lugar de compilar <quote>
ports</quote>. Para poder hacerlo convertiremos <filename>
fase_2.sh</filename> en poco m&aacute;s que una lista de
comandos <command>pkg_add</command>. Conf&iacute;o en que
ser&aacute; usted capaz de escribir un <quote>script</quote>
como ese. Ahora nos concentraremos en el sistema tradicional
y mucho m&aacute;s flexible de funcionamiento de los
<quote>ports</quote>.</para>
</note>
<para>El siguiente <quote>script</quote> <filename>
fase_2.sh</filename> es el que yo uso para instalar mis <quote>
ports</quote> favoritos. Puede ejecutarse tantas veces como sea
preciso y no prestar&aacute; atenci&oacute;n a los <quote>
ports</quote> que ya est&eacute;n instalados. Incluye tambi&eacute;n
soporte para la
opci&oacute;n <option>-n</option> que hace un <emphasis>ensayo
general con todo</emphasis>, es decir, muestra lo que hubiera sucedido
si se hubiera ejecutado. Seguro que tiene que editar la lista de
<quote>ports</quote> y probablemente tenga que cambiar unas cuantas
variables de entorno.</para>
<para>La lista de <quote>ports</quote> consiste en l&iacute;neas
de dos o m&aacute;s palabras separadas por espacios: la categor&iacute;a
y el <quote>port</quote>. Es opcional situar detr&aacute;s
un comando de instalaci&oacute;n que compilar&aacute; e instalar&aacute;
el <quote>port</quote> (por defecto <command>make install</command>).
Se ignoran las l&iacute;neas vac&iacute;s y las que comienzan
por #. La mayor&iacute;a de las veces es suficiente inclu&iacute;r el
nombre del <quote>port</quote> y la categor&iacute;a a que pertenece pero
existen unos pocos <quote>ports</quote> en cuya compilaci&oacute;n
podemos afinar mucho asignando valores a variables de <command>
make</command>; veamos un ejemplo:</para>
<programlisting>www mozilla make WITHOUT_MAILNEWS=yes WITHOUT_CHATZILLA=yes install
mail procmail make BATCH=yes install</programlisting>
<para>De hecho puede usted usar comandos de <quote>shell</quote> a
su criterio, as&iacute; que no tiene que limitarse a simples
invocaciones de <command>make</command>:</para>
<programlisting>java linux-sun-jdk13 yes | make install
news inn-stable CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" make install</programlisting>
<para>Observe que la l&iacute;nea de <filename
role="package">news/inn-stable</filename> es un ejemplo de una
asignaci&oacute;n de entrada a la variable del int&eacute;rprete de
mandatos <literal>CONFIGURE_ARGS</literal>. El fichero <filename>Makefile</filename>
del <quote>port</quote> la usar&aacute; como valor inicial y la
completar&aacute; con otros argumentos esenciales. La diferencia respecto a
a especificar la variable para <filename>make</filename> en la l&iacute;nea de
comandos mediante </para>
<programlisting>news inn-stable make CONFIGURE_ARGS="--enable-uucp-rnews --enable-setgid-inews" install</programlisting>
<para>est&aacute; en que esto &uacute;ltimo sustituye directamente el valor
en lugar de completarlo. El m&eacute;todo m&aacute;s adecuado depende de cada
<quote>port</quote> en particular.</para>
<para>Compruebe cuidadosamente que ninguno de sus <quote>ports</quote>
tenga una instalaci&oacute;n interactiva, es decir, que ninguno
deber&iacute; intentar recibir de stdin nada que no le d&eacute;
usted en stdin. Si alguno lo hace leer&aacute; la siguiente o
siguientes l&iacute;neas de &eacute;ste documento y no entender&aacute;
nada de nada. Si <filename>fase_2.sh</filename> pasa por alto
un <quote>port</quote> o cesa su ejecuci&oacute;n sin raz&oacute;n
aparente es muy posible que esa sea la raz&oacute;n.</para>
<para>He aqu&iacute; <filename>fase_2.sh</filename>. Crea un fichero
<quote>log</quote> por cada port que instala y les da nombres
seg&uacute;n el esquema <filename>
DIRECTORIO_LOG/categor&iacute;a+port</filename>. Si no tiene una
copia de su <filename>fase_2.sh</filename> en una partici&oacute;n
compartida no olvide copiarlo al sistema nuevo antes de
arrancarlo.</para>
<programlisting><inlinegraphic fileref="fase_2.sh" format="linespecific"></programlisting>
<para>Descargue <ulink
url="fase_2.sh"><filename>fase_2.sh</filename></ulink>.</para>
</sect1>
<sect1 id="stage3">
<title>Tercera Fase</title>
<para>Ya hemos conclu&iacute;do la segunda fase y ya est&aacute;n
instalados sus querid&iacute;simos <quote>ports</quote>, pero
algunos de ellos requieren un poco de configuraci&oacute;n. En
eso consistir&aacute; la tercera fase, a&ntilde;adir los
detalles espec&iacute;ficos de las configuraciones. Podr&iacute;a
haberlos integrado en el <quote>script</quote> <filename>
fase_2.sh</filename> pero creo que hay una diferencia conceptual
entre instalar un <quote>port</quote> y en modificar la
configuraci&oacute;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&oacute;n en una fase
propia.</para>
<para>He cre&iacute;do m&aacute;s conveniente implementar la
tercera fase como un <filename>Makefile</filename> porque
admiten la selecci&oacute;n de lo que quiera configurar
tecleando simplemente:
<informalexample>
<screen>&prompt.root; <userinput>make -f fase_3.mk <replaceable>
nombre_del_port</replaceable></userinput></screen>
</informalexample>
<para>Al igual que con <filename>fase_2.sh</filename> aseg&uacute;rese
de que dispone de una copia de su <filename>fase_3.mk</filename> una
vez que arranca el sistema nuevo, bien situ&aacute;ndolo en una
partici&oacute;n compartida bien copi&aacute;ndolo en alg&uacute;n
lugar dentro del nuevo sistema.</para>
<programlisting><inlinegraphic fileref="fase_3.mk" format="linespecific"></programlisting>
<para>Descargue <ulink
url="fase_3.mk"><filename>fase_3.mk</filename></ulink>.</para>
</sect1>
<sect1 id="limitations">
<title>Restricciones</title>
<para>La instalaci&oacute;n automatizada de un <quote>port</quote>
puede resultar dif&iacute;cil si es interactiva y no soporta
<command>make BATCH=YES install</command>. En algunos casos
la interacci&oacute;n se reduce a teclear <literal>yes</literal>
cuando se le pregunta si acepta alguna licencia. Si esa entrada de
datos ha de llegar por la entrada est&aacute;ndar simplemente
redirigiremos las respuestas pertinentes a la orden de
instalaci&oacute;n (que suele ser <command>make install</command>;
ese es el modo en el que hemos procedido con <filename
role="package">java/linux-sun-jdk13</filename> en
<filename>fase_2.sh</filename>).</para>
<para>No obstante &eacute;sta estrategia no funciona con <filename
role="package">editors/staroffice52</filename>, que exige que X11
est&eacute; funcionando. El proceso de instalaci&oacute;n comprende
un buen n&uacute;mero de pulsaciones de rat&oacute;n y de tecleo,
con lo que es imposible automatizarlo tal y como se hace con otros
<quote>ports</quote>. Sin embargo el siguiente atajo workaround
nos soluciona el problema: previamente he creado un <filename>
staroffice</filename> en el sistema original con</para>
<informalexample>
<screen>&prompt.root; <userinput>cd /usr/ports/editors/staroffice52</userinput>
&prompt.root; <userinput>make package</userinput>
===> 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'</screen>
</informalexample>
<para>y durante la segunda fase usamos:</para>
<informalexample>
<screen>&prompt.root; <userinput>pkg_add /usr/ports/editors/staroffice52/staroffice-5.2_1.tbz</userinput></screen>
</informalexample>
<para>Debe usted tambi&eacute;n tener muy en cuenta posibles
problemas con los ficheros de configuraci&oacute;n a la hora de
actualizar. En general no sabemos cu&aacute;ndo van a hacerse cambios
en el formato o el contenido de un fichero de configuraci&oacute;n.
Es posible que haya que a&ntilde;adir un nuevo grupo a <filename>
/etc/group</filename>, o quiz&aacute;s <filename>/etc/passwd</filename>
necesite un nuevo campo en sus entradas. &Eacute;stas cosas han
sucedido en alguna ocasi&oacute;n anteriormente. Si simplemente
copiamos un fichero de configuraci&oacute;n del sistema viejo al nuevo
ser&aacute; suficiente la mayor&iacute;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&iacute;guos)
tendr&aacute; que usar <command>mergemaster</command> para proceder
con los cambios que quiera inclu&iacute;r en
la configuraci&oacute;n de su nuevo sistema, teniendo en cuenta que
entre esos cambios hay o puede haber nuevos ficheros. Por desgracia
<command>mergemaster</command> s&oacute;lo es &uacute;til con ficheros
del sistema base y no para aquellos relacionados con los <quote>
ports</quote>. Adem&aacute;s, ciertas aplicaciones parecen
especialmente dise&ntilde;adas para sacarme de mis casillas por el
procedimiento de cambiar el fichero de configuraci&oacute;n cada quince
d&iacute;as. Lo &uacute;nico que puede hacerse es estar alerta,
sobre todo cuando cambia el n&uacute;mero de versi&oacute;n.
En ocasiones anteriores he tenido que modificar o reescribir
ficheros para servidores web, servidores y clientes de <quote>news</quote>.
Cualquier tipo de software cuyo mantenimiento sea muy activo es un firme
candidato a que sus ficheros de configuraci&oacute;n merezcan nuestro
examen.</para>
<para>He usado &scratch.ap; varias veces para actualizar un sistema
<literal>5-CURRENT</literal> a <literal>5-CURRENT</literal>, esto es,
nunca he intentado instalar <literal>5-CURRENT</literal> desde un
sistema <literal>4-STABLE</literal> o viceversa, pero dada la
cantidad de cambios existentes entre las diferentes <quote>
RELEASE</quote> no ser&iacute;a insensato esperar que esa tarea
sea un tanto compleja. Usar &scratch.ap; para actualizaciones
dentro del campo de <literal>4-STABLE</literal> deber&iacute;a
ser mucho menos penoso (aunque yo a&uacute;n no lo he
intentado). Si quiere hacerlo deber&iacute;a tener en cuenta
lo siguiente:</para>
<itemizedlist>
<listitem>
<para>Si no usa el sistema de ficheros de dispositivo
(<literal>devfs</literal>) puede necesitar crear los
dispositivos necesarios para su hardware con &man.MAKEDEV.8;
en la primera fase, sexto paso.</para>
</listitem>
</itemizedlist>
</sect1>
</article>

View file

@ -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 <<EOF >${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:

View file

@ -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:

View file

@ -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: