Update to last spanish version.
This commit is contained in:
parent
edf555d8d9
commit
eedaf90959
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=14637
9 changed files with 15801 additions and 2787 deletions
|
@ -4,153 +4,581 @@
|
|||
$FreeBSD$
|
||||
-->
|
||||
|
||||
|
||||
<chapter id="basics">
|
||||
<title>Unix básico</title>
|
||||
<title>Conceptos Básicos de Unix</title>
|
||||
|
||||
<sect1>
|
||||
<title>Sinópsis</title>
|
||||
|
||||
<sect1 id="basics-man">
|
||||
<title>El manual en línea</title>
|
||||
|
||||
<para>La documentación más completa en FreeBSD estáa
|
||||
en forma de <emphasis>páginas man</emphasis>. Prácticamente
|
||||
todos los programas del sistema incluyen un pequeño manual de
|
||||
referencia explicando las operaciones básicas y los diferentes
|
||||
argumentos del programa. Estos manuales pueden verse con el comando
|
||||
<command>man</command>. El uso del comando <command>man</command> es
|
||||
simple:</para>
|
||||
<para><emphasis>Reescrito por Chris Shumway
|
||||
<email>cshumway@osd.bsdi.com</email>, 10 Mar 2000.</emphasis></para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>man <replaceable>command</replaceable></userinput>
|
||||
</screen>
|
||||
</informalexample>
|
||||
<para>El siguiente capítulo cubre la funcionalidad y
|
||||
órdenes básicas del sistema operativo FreeBSD. Si se es
|
||||
nuevo en FreeBSD, seguramente querrá leer este capítulo
|
||||
antes de buscar ayuda.</para>
|
||||
|
||||
<para><replaceable>command</replaceable> es el nombre del comando del que
|
||||
queremos aprender. Por ejemplo, para saber más sobre el comando
|
||||
<command>ls</command> teclea:</para>
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>man ls</userinput></screen>
|
||||
</informalexample>
|
||||
|
||||
<para>El manual en línea está dividido en secciones
|
||||
numeradas:</para>
|
||||
|
||||
<orderedlist>
|
||||
|
||||
<listitem>
|
||||
<para>Comandos de usuario</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Llamadas de sistema y números de error</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Funciones en las librerías de C</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Drivers de dispositivos</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Formatos de fichero</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Juegos y otras diversiones</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Información varia</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Mantenimiento del sistema y comandos de sistema</para>
|
||||
</listitem>
|
||||
|
||||
</orderedlist>
|
||||
|
||||
<para>En algunos casos, el mismo concepto aparece en más de una
|
||||
sección del manual en línea. Por ejemplo, hay un comando
|
||||
de usuario <command>chmod</command> y una llamada de sistema
|
||||
<function>chmod()</function>. En este caso, puedes espicificar al comando
|
||||
<command>man</command> cual de ellos quieres ver, especificando la
|
||||
sección:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>man 1 chmod</userinput></screen>
|
||||
</informalexample>
|
||||
|
||||
<para>Esto mostrará la información del comando de usuario
|
||||
<command>chmod</command>. Las referencias a secciones particulares del
|
||||
manual en línea tradicionalmente se incluyen entre paréntesis
|
||||
en la documentación escrita, de manera que <citerefentry>
|
||||
<refentrytitle>chmod</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
se refiere al comando de usuario <command>chmod</command> y <citerefentry>
|
||||
<refentrytitle>chmod</refentrytitle><manvolnum>2</manvolnum>
|
||||
</citerefentry> se refiere a la llamada de sistema.</para>
|
||||
|
||||
<para>Esto es correcto si sabes el nombre del comando y simplemente
|
||||
quieres saber como usarlo, pero ¿qué pasa si no recuerdas
|
||||
el nombre del comando?. Puedes usar <command>man</command> para buscar
|
||||
palabras en las <emphasis>descripciones</emphasis> de los comandos usando
|
||||
el parámetro <option>-k</option>:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>man -k mail</userinput></screen>
|
||||
</informalexample>
|
||||
|
||||
<para>Con este comando obtendrás una lista de todos los comandos
|
||||
que contienen en su descripción la palabra “mail”.
|
||||
Actualmente, este comando realiza la misma función que el comando
|
||||
<command>apropos</command>.</para>
|
||||
|
||||
<para>¿Quieres saber que hacen todos los comandos existentes en
|
||||
<filename>/usr/bin</filename>?. Simplemente haz:
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cd /usr/bin; man -f *</userinput></screen>
|
||||
</informalexample>
|
||||
|
||||
o
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>cd /usr/bin; whatis *</userinput></screen>
|
||||
</informalexample>ya que realizan la misma función .</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="basics-info">
|
||||
<title>Fichero GNU Info</title>
|
||||
<sect1 id="permissions">
|
||||
<title>Permisos</title>
|
||||
|
||||
<para>FreeBSD incluye muchas aplicaciones y utilidades producidas por la
|
||||
Free Software Foundation (FSF). Como complemento a las páginas man,
|
||||
estos programas incluyen unos documentos hipertexto más extensos
|
||||
llamados ficheros “info” los cuales pueden visualizarse con el
|
||||
comando <command>info</command>, o, si tienes instalado
|
||||
<command>emacs</command>, con el modo info de <command>emacs</command>.
|
||||
</para>
|
||||
<para>FreeBSD, cuya raiz histórica es el UNIX BSD, tiene
|
||||
sus fundamentos basados en varios conceptos clave de UNIX. El primero, y
|
||||
más remarcado, es que FreeBSD es un sistema operativo
|
||||
multi-usuario. El sistema puede manejar varios usuarios trabajando
|
||||
todos simultáneamente y en tareas que no guardan relación
|
||||
entre sí. El sistema es el responsable de compartir y administrar
|
||||
peticiones de dispositivos de hardware, periféricos, memoria y
|
||||
tiempo de Unidad Central de Proceso (CPU) de manera equitativa para cada
|
||||
usuario.</para>
|
||||
|
||||
<para>Para usar el comando <citerefentry><refentrytitle>info</refentrytitle><manvolnum>1</manvolnum></citerefentry>, simplemente teclea:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>info</userinput></screen>
|
||||
</informalexample>
|
||||
<para>Debido a que el sistema es capaz de soportar múltiples
|
||||
usuarios, todo lo que el sistema administra tiene un conjunto de
|
||||
permisos que gobiernan quién puede leer, escribir y ejecutar el
|
||||
elemento. Estos permisos se guardan como octetos divididos en tres
|
||||
partes: una para el propietario del archivo, otra para el grupo al que
|
||||
el archivo pertenece, y otra para cualquier otro. Esta
|
||||
representación numérica funciona así:</para>
|
||||
|
||||
<para>Para una breve descripción, teclea <userinput>h</userinput>.
|
||||
Para una referencia rápida de comandos, teclea
|
||||
<userinput>?</userinput>.</para>
|
||||
|
||||
|
||||
|
||||
<informaltable frame="none">
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Valor</entry>
|
||||
<entry>Permiso</entry>
|
||||
<entry>Listado de Directorio</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>0</entry>
|
||||
<entry>No leer, no escribir, no ejecutar</entry>
|
||||
<entry><literal>---</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>1</entry>
|
||||
<entry>No leer, no escribir, ejecutar</entry>
|
||||
<entry><literal>--x</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>2</entry>
|
||||
<entry>No leer, escribir, no ejecutar</entry>
|
||||
<entry><literal>-w-</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>3</entry>
|
||||
<entry>No leer, escribir, ejecutar</entry>
|
||||
<entry><literal>-wx</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>4</entry>
|
||||
<entry>Leer, no escribir, no ejecutar</entry>
|
||||
<entry><literal>r--</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>5</entry>
|
||||
<entry>Leer, no escribir, ejecutar</entry>
|
||||
<entry><literal>r-x</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>6</entry>
|
||||
<entry>Leer, escribir, no ejecutar</entry>
|
||||
<entry><literal>rw-</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>7</entry>
|
||||
<entry>Leer, escribir, ejecutar</entry>
|
||||
<entry><literal>rwx</literal></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
<para>Si se muestra un listado expandido de directorio mediante
|
||||
<command>ls -l</command>, se mostrarán en una columna los
|
||||
permisos de fichero para el propietario, grupo y todos los demás.
|
||||
Veamos como se descompone:</para>
|
||||
|
||||
<screen>-rw-r--r--</screen>
|
||||
|
||||
<para>El primer carácter, de izquierda a derecha, es un
|
||||
carácter especial que indica si se trata de un archivo normal, un
|
||||
directorio, un dispositivo especial de tipo carácter o bloque, un
|
||||
socket, o cualquier otro dispositivo de pseudo-archivo. Los siguientes
|
||||
tres caracteres, expresados como <literal>rw-</literal> muestran los
|
||||
permisos para el propietario del archivo. Los siguientes tres
|
||||
caracteres, <literal>r--</literal> muestran los permisos para el grupo
|
||||
al que el archivo pertenece. Los últimos tres caracteres,
|
||||
<literal>r--</literal>, muestran los permisos para el resto del mundo.
|
||||
Un guión indica que el permiso está desactivado. En el
|
||||
caso de este archivo, los permisos están asignados de tal manera
|
||||
que el propietario puede leer y escribir en el archivo, el grupo puede
|
||||
leer el archivo, y el resto del mundo sólo puede leer el archivo.
|
||||
De acuerdo con la tabla que se muestra más arriba, los permisos
|
||||
para este archivo serían <literal>644</literal>, donde cada cifra
|
||||
representa las tres partes de los permisos del archivo.</para>
|
||||
|
||||
|
||||
<para>Todo ésto está muy bien, pero ¿cómo
|
||||
controla el sistema los permisos de los dispositivos? FreeBSD en
|
||||
realidad trata la mayoría de los dispositivos hardware como un
|
||||
archivo que los programas pueden abrir, leer y en los que pueden
|
||||
escribir datos como si de cualquier otro archivo se tratara. Estos
|
||||
archivos especiales de dispositivos se encuentran en el directorio
|
||||
<filename>/dev</filename>.</para>
|
||||
|
||||
<para>Los directorios también son tratados como archivos. Tienen
|
||||
permisos de lectura, escritura y ejecución. El bit de
|
||||
ejecución en un directorio tiene un significado
|
||||
ligéramente distinto que para los archivos. Cuando un directorio
|
||||
está marcado como ejecutable significa que se puede mirar dentro,
|
||||
por ejemplo, se podría hacer un listado de ese directorio.</para>
|
||||
|
||||
<para>Hay más permisos, pero se usan principalmente en
|
||||
circunstancias especiales como los binarios ejecutables de tipo "setuid"
|
||||
y los los directorios de tipo "sticky". Si desea más
|
||||
información acerca de los permisos de archivos y cómo
|
||||
establecerlos, asegúrese de mirar la página de manual de
|
||||
&man.chmod.1;.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="dirstructure">
|
||||
<title>Estructura de directorios</title>
|
||||
<para>Como FreeBSD utiliza sus sistemas de archivos (file systems) para
|
||||
determinar muchas operaciones fundamentales en el sistema, la
|
||||
jerarquía del sistema de archivos es extremadamente importante.
|
||||
Dado que la página de manual de &man.hier.7; proporciona una
|
||||
descripción completa de la estructura de directorios, no la vamos
|
||||
a repetir aquí. Para más información, puede
|
||||
consultar &man.hier.7;.</para>
|
||||
|
||||
<para>De una especial importancia es el raiz (root) de todos los
|
||||
directorios, el directorio /. Este directorio es el primero en ser
|
||||
montado al arrancar y contiene contiene el sistema básico
|
||||
necesario a la hora de iniciar. El directorio raiz también
|
||||
contiene puntos de montaje para cualquier otro sistema de archivos que
|
||||
se desee montar.</para>
|
||||
|
||||
<para> Un punto de montaje es un directorio donde se pueden injertar al
|
||||
sistema de archivos raiz otros sistemas de ficheros adicionales. Los
|
||||
puntos de montaje convencionales incluyen <filename>/usr</filename>,
|
||||
<filename>/var</filename>, <filename>/mnt</filename> y
|
||||
<filename>/cdrom</filename>. Estos directorios directorios se
|
||||
corresponden habitualmente con entradas en en archivo
|
||||
<filename>/etc/fstab</filename>. <filename>/etc/fstab</filename> es una
|
||||
tabla que sirve como referencias al sistema y contiene los diferentes
|
||||
sistemas de archivos y sus respectivos puntos de montaje. La
|
||||
mayoría de los sistemas de archivos que figuran en
|
||||
<filename>/etc/fstab</filename> son montados automáticamente al
|
||||
arrancar por el guión de órdenes (script) &man.rc.8; a no
|
||||
ser que contengan la opción <option>noauto</option>.
|
||||
Consúltese la página del manual &man.fstab.5; para
|
||||
más información acerca del formato del archivo
|
||||
<filename>/etc/fstab</filename> y de las opciones que se pueden
|
||||
especificar.</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="shells">
|
||||
<title>Intérpretes de órdenes (Shells)</title>
|
||||
|
||||
<para>En FreeBSD, gran parte del trabajo diario se realiza a través
|
||||
de un interfaz de la linea de órdenes llamado "shell". El
|
||||
principal trabajo del shell es recoger órdenes del canal de
|
||||
entrada y ejecutarlas. Muchos shells tienen también integradas
|
||||
funciones para ayudarnos en las tareas cotidianas tales como la
|
||||
manipulación de archivos, edición de líneas de
|
||||
órdenes, macros de órdenes, expansión de
|
||||
expresiones regulares en nombres de archivo y variables del sistema.
|
||||
FreeBSD viene con un conjunto de shells, como sh, el shell Bourne y csh,
|
||||
el shell C. Hay disponibles muchos otros shells en la "FreeBSD Ports
|
||||
Collection" que son mucho más potentes, como bash y tcsh.</para>
|
||||
|
||||
<para>¿Qué shell usar? Es cuestión de gustos. Si se
|
||||
es programador de C se puede sentir más cómodo con tcsh,
|
||||
un shell con una sintaxis similar al C. Si se proviene del mundo Linux o
|
||||
se es nuevo en el interfaz de órdenes de Unix, se puede probar
|
||||
con bash. El asunto es que cada shell posee unas propiedades
|
||||
únicas que pueden o no funcionar con el entorno de trabajo
|
||||
preferido y se ha de efectuar una elección sobre el shell a
|
||||
usar.</para>
|
||||
|
||||
<para>Una de las propiedades comunes de un shell es que completa los
|
||||
nombres de archivo. Dada la introducción de las primeras letras
|
||||
de una orden o del nombre de un archivo, se puede hacer que el shell
|
||||
complete automáticamente el resto de la orden o el nombre del
|
||||
archivo pulsando la tecla TAB. Aquí va un ejemplo. Supongamos
|
||||
que se tienen dos archivos llamados <filename>foobar</filename> y
|
||||
<filename>foo.bar</filename>. Se quiere borrar
|
||||
<filename>foo.bar</filename>. Lo que habría que teclear es:
|
||||
<command>rm fo[TAB].[TAB]</command>.</para>
|
||||
|
||||
<para>El shell nos mostraría <command>rm
|
||||
foo[BEEP].bar</command>.</para>
|
||||
|
||||
|
||||
<para>El [BEEP] es el pitido de consola (<emphasis>console
|
||||
bell</emphasis>): es el shell diciéndonos que fue incapaz de
|
||||
completar totalmente el nombre de archivo porque hay más de una
|
||||
coincidencia. Tanto <filename>foobar</filename> como
|
||||
<filename>foo.bar</filename> comienzan por <literal>fo</literal>, pero
|
||||
solo se pudo completar hasta <literal>foo</literal>. Si se teclea
|
||||
<literal>.</literal>, y de nuevo TAB, el shell será capaz de
|
||||
introducir el resto del nombre por nosotros.</para>
|
||||
|
||||
<para>Otra función del shell son las variables de entorno. Las
|
||||
variables de entorno son parejas de valores clave almacenados en el
|
||||
espacio de entorno del shell. Este espacio puede ser leído por
|
||||
cualquier programa invocado por el shell y, por tanto, en él se
|
||||
encuentra bastante información relativa a la configuración
|
||||
de programas. Lo siguiente es una lista de las variables de entorno
|
||||
más comunes y su significado:</para>
|
||||
|
||||
<informaltable frame="none">
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Variable</entry>
|
||||
<entry>Descripción</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><envar>USER</envar></entry>
|
||||
<entry>Nombre de usuario con el que se ha entrado al sistema.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>PATH</envar></entry>
|
||||
<entry>Lista de directorios, separada por puntos y coma, en los que
|
||||
se busca ejecutables.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>DISPLAY</envar></entry>
|
||||
<entry>Nombre en la red de la pantalla de X11 a la que conectarse, si
|
||||
se encuentra disponible.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>SHELL</envar></entry>
|
||||
<entry>El shell actual.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>TERM</envar></entry>
|
||||
<entry>El nombre del terminal del usuario. Se usa para determinar
|
||||
las posibilidades del terminal de datos.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>TERMCAP</envar></entry>
|
||||
<entry>Base de datos donde encontrar los códigos de
|
||||
escape necesarios para realizar diferentes funciones en el
|
||||
terminal.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>OSTYPE</envar></entry>
|
||||
<entry>Tipo de sistema operativo. Por ejemplo, FreeBSD.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>MACHTYPE</envar></entry>
|
||||
<entry>Arquitectura de la CPU en la que el sistema se
|
||||
está ejecutando.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>EDITOR</envar></entry>
|
||||
<entry>El editor de texto preferido por el usuario.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>PAGER</envar></entry>
|
||||
<entry>El paginador de texto preferido por el usuario.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><envar>MANPATH</envar></entry>
|
||||
<entry>Lista de directorios en los que se busca páginas de
|
||||
manual, separados por puntos y coma.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
<para>Visualizar o establecer una variable de entorno difiere ligeramente
|
||||
de shell a shell. Por ejemplo, en los shells al estilo C como tcsh y
|
||||
csh, se usaría <command>setenv</command> para establecer y
|
||||
visualizar las variables de entorno actuales. Siguiendo el ejemplo, para
|
||||
establecer o modificar el valor de <envar>EDITOR</envar>, bajo csh o
|
||||
tcsh una orden como la siguiente establecería el valor de
|
||||
<envar>EDITOR</envar> a <filename>/usr/local/bin/emacs</filename>:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>setenv EDITOR /usr/local/bin/emacs</userinput></screen>
|
||||
|
||||
<para>Bajo los shells tipo Bourne (Bourne Shells):</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>export EDITOR="/usr/local/bin/emacs"</userinput></screen>
|
||||
|
||||
<para>También se puede hacer que la mayoría de los shells
|
||||
muestren el contenido de una variable de entorno situando el
|
||||
carácter <literal>$</literal> delante del nombre de la variable
|
||||
desde la línea de órdenes. Por ejemplo, <command>echo
|
||||
$TERM</command> mostrará cualquiera que sea el valor que se le
|
||||
haya establecido a <envar>TERM</envar>, porque el shell expande el valor
|
||||
de <envar>TERM</envar> y se lo pasa al programa echo.</para>
|
||||
|
||||
<para>Los shells manejan muchos caracteres especiales, llamados
|
||||
meta-caracteres, como representaciones especiales de datos. El mas
|
||||
común es el carácter <literal>*</literal>, que representa
|
||||
cualquier número de caracteres en un nombre de archivo. Estos
|
||||
meta-caracteres especiales se pueden usar para la expansión de
|
||||
nombres de archivos. Por ejemplo, teclear <command>echo *</command> es
|
||||
casi lo mismo que introducir <command>ls</command> porque el shell
|
||||
recoge todos los archivos que coinciden con <command>*</command> y se
|
||||
los pone en la línea de órdenes a echo para que los
|
||||
vea.</para>
|
||||
|
||||
<para>Para evitar que el shell interprete estos caracteres especiales, se
|
||||
pueden salvar poniendo el carácter contrabarra
|
||||
(<literal>\</literal>) delante de ellos. <command>echo $TERM</command>
|
||||
muestra cualquiera que sea el valor establecido para el terminal que
|
||||
estamos usando. <command>echo \$TERM</command> muestra
|
||||
<envar>$TERM</envar> tal cual.</para>
|
||||
|
||||
<sect2 id="changing-shells">
|
||||
<title>Cambiando de shell</title>
|
||||
|
||||
|
||||
<para>La manera más fácil de cambiar de shell es usando la
|
||||
orden <command>chsh</command>. Al ejecutar <command>chsh</command> se
|
||||
nos situará dentro del editor de texto que figure en la variable
|
||||
de entorno <envar>EDITOR</envar> o, de no estar configurada, se nos
|
||||
abrirá <command>vi</command>. Cámbiese la línea
|
||||
<quote>Shell:</quote> adecuadamente.</para>
|
||||
|
||||
<para>También se le puede suministrar a <command>chsh</command> la
|
||||
opción <option>-s</option>; ésto establecerá el
|
||||
shell por nosotros sin necesidad de entrar en el editor de texto. Por
|
||||
ejemplo, si se desea cambiar el shell a bash, lo siguiente
|
||||
realizará el ajuste:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>chsh -s /usr/local/bin/bash</userinput></screen>
|
||||
|
||||
<para>Ejecutar <command>chsh</command> sin parámetros y cambiar el
|
||||
shell desde allí tambien funcionaría.</para>
|
||||
|
||||
<note>
|
||||
<para>El shell que se desee usar <emphasis>debe</emphasis> figurar en el
|
||||
archivo <filename>/etc/shells</filename>. Si se ha instalado un shell
|
||||
desde la <link linkend="ports">colección de ports</link>,
|
||||
entonces esto ya se habrá realizado. Si se ha instalado
|
||||
manualmente el shell, se debe realizar el cambio pertinente.</para>
|
||||
|
||||
<para>Por ejemplo, si se instaló manualmente
|
||||
<command>bash</command> y se situó en
|
||||
<filename>/usr/local/bin</filename>, debería hacer:
|
||||
|
||||
<screen>&prompt.root; <userinput>echo "/usr/local/bin/bash" >> /etc/shells</userinput></screen>
|
||||
|
||||
<para>Y entonces volver a ejecutar <command>chsh</command>.</para>
|
||||
</note>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="editors">
|
||||
<title>Editores de texto</title>
|
||||
<para>Gran parte de la configuración de FreeBSD se realiza
|
||||
modificando archivos de texto. A causa de esto, es una buena idea
|
||||
familiarizarse con un editor de texto. FreeBSD viene con unos cuantos
|
||||
como parte del sistema base y muchos más se encuentran
|
||||
disponibles en la colección de ports.</para>
|
||||
|
||||
<para>El editor de textos más fácil y rápido de
|
||||
aprender es uno llamado <application>ee</application>, cuyo nombre
|
||||
proviene del inglés "easy editor" (editor fácil). Para
|
||||
iniciar <application>ee</application> se debería teclear en la
|
||||
línea de órdenes <command>ee filename</command>, donde
|
||||
<literal>filename</literal> es el nombre del archivo que deseamos
|
||||
editar. Por ejemplo, para editar <filename>/etc/rc.conf</filename>,
|
||||
tecléese <command>ee /etc/rc.conf</command>. Una vez dentro de
|
||||
ee, todas las posibles órdenes para manipular las funciones del
|
||||
editor se presentan en la parte superior de la pantalla. El
|
||||
carácter acento circunflejo <literal>^</literal> representa a
|
||||
la tecla de control en el teclado, o sea que ^e significa pulsar
|
||||
simultáneamente la tecla control y la letra <literal>e</literal>.
|
||||
Para abandonar <application>ee</application>, se debe pulsar la tecla
|
||||
escape y elegir abandonar (leave) el editor. El editor preguntará
|
||||
entonces si se desean conservar los cambios si el archivo hubiera sido
|
||||
modificado.</para>
|
||||
|
||||
<para>FreeBSD viene también con editores de texto mucho más
|
||||
potentes. Por ejemplo, <application>vi</application> como componente
|
||||
del sistema básico y <application>emacs</application> o
|
||||
<application>vim</application> como parte de la colección de
|
||||
ports. Estos editores ofrecen mucha más funcionalidad y potencia
|
||||
a expensas de un aprendizaje un poco más complicado. De cualquier
|
||||
manera, si se planea editar muchos textos, aprender un editor más
|
||||
potente como <application>vim</application> o
|
||||
<application>emacs</application> le ahorrará mucho tiempo a largo
|
||||
plazo.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Para más información</title>
|
||||
|
||||
<sect2 id="basics-man">
|
||||
<title>Páginas de manual</title>
|
||||
|
||||
<para>La documentación más exhaustiva de FreeBSD se
|
||||
encuentra en la forma de páginas de manual. Casi todos los
|
||||
programas del sistema vienen con un sucinto manual de referencia
|
||||
explicando el funcionamiento básico y los diferentes argumentos.
|
||||
Estos manuales pueden ser revisados con el programa man. El uso del
|
||||
programa man es sencillo:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>man <replaceable>command</replaceable></userinput></screen>
|
||||
|
||||
<para><literal>command</literal> es el nombre del programa del que se
|
||||
quiere saber algo. Por ejemplo, para saber algo acerca del programa
|
||||
<command>ls</command> tecléese:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>man ls</userinput></screen>
|
||||
|
||||
<para>El manual en línea está dividido en secciones
|
||||
numeradas:</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>Órdenes/programas de usuario.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>LLamadas de sistema y códigos numéricos de
|
||||
error.</para> </listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Funciones de las librerías de C.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Manejadores de Dispositivos.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Formatos de Archivos.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Juegos y otros divertimentos.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Información miscelánea.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Programas relativos al mantenimiento y operación del
|
||||
sistema.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Desarrolladores del Kernel.</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
|
||||
<para>En algunos casos, el mismo epígrafe puede aparecer en
|
||||
más de una sección del manual en línea. Hay, por
|
||||
ejemplo, un programa de usuario llamado chmod y una llamada de sistema
|
||||
<literal>chmod()</literal>. En este caso se le puede especificar a man
|
||||
cuál se desea especificando la sección:</para>
|
||||
|
||||
|
||||
<screen>&prompt.user; <userinput>man 1 chmod</userinput></screen>
|
||||
|
||||
<para>Esto nos mostrará la página del manual en línea
|
||||
del programa de usuario <command>chmod</command>. Las referencias a una
|
||||
sección concreta del manual en línea se sitúan
|
||||
tradicionalmente entre paréntesis en la documentación
|
||||
impresa, de tal manera que &man.chmod.1; se refiere al programa de
|
||||
usuario <command>chmod</command> y &man.chmod.2; se refiere a la llamada
|
||||
de sistema.</para>
|
||||
|
||||
<para>Esto está muy bien si se conoce el nombre del programa y
|
||||
simplemente se quiere saber cómo usarlo. Pero, ¿qué
|
||||
si se recuerda el nombre del programa? Se puede usar man para que
|
||||
realice una búsqueda mediante palabras clave en las descripciones
|
||||
de programas usando el argumento <option>-k</option>:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>man -k mail</userinput></screen>
|
||||
|
||||
<para>Con esta orden se nos mostrará una lista de programas que
|
||||
contienen la palabra clave <quote>mail</quote> en sus descripciones.
|
||||
Ésto equivale a usar el programa apropos.</para>
|
||||
|
||||
<para>Si se está mirando todos esos curiosos programas que residen
|
||||
en <filename>/usr/bin</filename> y no se tiene ni puñetera idea
|
||||
de que narices hacen realmente, hágase un sencillo:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>cd /usr/bin</userinput>
|
||||
&prompt.user; <userinput>man -f *</userinput></screen>
|
||||
|
||||
<para>o</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>cd /usr/bin</userinput>
|
||||
&prompt.user; <userinput>whatis *</userinput></screen>
|
||||
|
||||
<para>que hace exactamente lo mismo.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="basics-info">
|
||||
<title>Archivos de información GNU</title>
|
||||
|
||||
<para>FreeBSD incluye muchas aplicaciones y utilidades producidas por la
|
||||
Free Software Foundation (FSF). De manera adicional a las páginas
|
||||
de manual estos programas vienen con documentos de hipertexto más
|
||||
detallados, llamados archivos <literal>info</literal>, que pueden ser
|
||||
revisados con el programa <command>info</command> o, si se ha instalado
|
||||
<application>emacs</application>, el modo "info" de
|
||||
<application>emacs</application>.</para>
|
||||
|
||||
<para>Para usar el programa &man.info.1; simplemente
|
||||
tecléese:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>info</userinput></screen>
|
||||
|
||||
<para>Para una descripción breve, tecléese
|
||||
<literal>h</literal>. Para una referencia rápida de un programa,
|
||||
tecléese <literal>?</literal>.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<!--
|
||||
<!--
|
||||
Local Variables:
|
||||
mode: sgml
|
||||
sgml-declaration: "../chapter.decl"
|
||||
sgml-indent-data: t
|
||||
sgml-omittag: nil
|
||||
sgml-always-quote-attributes: t
|
||||
sgml-parent-document: ("../handbook.sgml" "part" "chapter")
|
||||
sgml-parent-document: ("../book.sgml" "part" "chapter")
|
||||
End:
|
||||
-->
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -5,150 +5,194 @@
|
|||
-->
|
||||
|
||||
<chapter id="kernelopts">
|
||||
<title>Añadir nuevas opciones de configuración al kernel</title>
|
||||
|
||||
<para><emphasis>Contribuci´n de &a.joerg;</emphasis></para>
|
||||
<chapterinfo>
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Jörg</firstname>
|
||||
<surname>Wunsch</surname>
|
||||
<contrib>Contribuido por </contrib>
|
||||
</author>
|
||||
</authorgroup>
|
||||
</chapterinfo>
|
||||
|
||||
<title>Añadiendo Opciones a la Configuración de un Nuevo Kernel</title>
|
||||
|
||||
<note>
|
||||
<para>Antes de leer esta sección se debe estar familiarizado con
|
||||
la sección sobre <link linkend="kernelconfig">configuración
|
||||
del kernel</link>.</para>
|
||||
<para>Es importante que antes de leer este documento, usted este
|
||||
familiarizado con la sección de <link
|
||||
linkend="kernelconfig">configuració del kernel</link>.</para>
|
||||
</note>
|
||||
|
||||
<sect1>
|
||||
<title>Ante todo ¿Qué es una <emphasis>opción del
|
||||
kernel</emphasis>?</title>
|
||||
<title>¿Qué son las <emphasis>Opciones del Kernel</emphasis>?</title>
|
||||
|
||||
<para>El uso de opciones del kernel se describe básicamente en la sección
|
||||
<link linkend="kernelconfig-options">configuración del kernel</link>.
|
||||
También hay una discusión sobre opciones “estilo historico” y
|
||||
“estilo moderno”. El objetivo final es que en algún momento
|
||||
todas las opciones soportadas por el kernel se hayan convertido al estilo
|
||||
moderno, así para la gente que hizo un <command>make depend</command> exitoso
|
||||
en su directorio de compilación del kernel luego de correr &man.config.8;,
|
||||
el proceso de build automaticamente seleccionará las opciones modificadas y
|
||||
solo recompilara los archivos donde se usan. El paso de eliminar el viejo
|
||||
directorio de compilación cada vez que se corre &man.config.8; como aún se
|
||||
hace podrá entonces ser eliminado nuevamente.</para>
|
||||
<para>Básicamente el uso de las opciones del kernel se
|
||||
encuentran descritas en la sección de <link
|
||||
linkend="kernelconfig-options">configuración del kernel</link>.
|
||||
También existe una explicación de opciones
|
||||
<quote>históricas</quote> y de <quote>nuevo-estilo</quote>. La
|
||||
meta final es que eventualmente todas las opciones soportadas por el
|
||||
kernel sean del nuevo-estilo, de tal forma que para las personas que
|
||||
acertadamente ejecutan <command>make depend</command> en el directorio
|
||||
de compilación de su kernel, después de ejecutar
|
||||
&man.config.8;, el proceso de compilación detectará
|
||||
automáticamente las opciones modificadas, y sólo
|
||||
recompilará los ficheros donde sea necesario. Eliminando el
|
||||
anterior directorio de compilación en cada ocasión que
|
||||
se ejecute &man.config.8; como es llevado a cabo ahora.</para>
|
||||
|
||||
<para>Básicamente una opción del kernel no es más que la definición de una
|
||||
macro del preprocesador C para el proceso de compilación del kernel. Para
|
||||
hacer la compilación verdaderamente opcional, la parte correspondiente del
|
||||
código fuente del kernel (o archivo <filename>.h</filename> del kernel) debe estar
|
||||
escrita con el concepto de opción en mente, por ejemplo el default para la opción
|
||||
debe haber sido hecho modificable. Esto se hace generalmente con algo como:</para>
|
||||
<para>Básicamente, una opción del kernel no es otra cosa
|
||||
que la definición de un macro del preprocesador C para el
|
||||
proceso de compilación del kernel. Para efecto de hacer que la
|
||||
compilación sea realmente opcional, la parte que corresponde a
|
||||
la fuente del kernel (o bien el fichero kernel<filename>.h</filename>),
|
||||
debe ser escrita teniendo en mente, el uso de
|
||||
las opciones del kernel, por ejemplo, las opciones por omisión
|
||||
pueden modificarse con la opción config. Esto normalmente se
|
||||
lleva a cabo con algo como esto:</para>
|
||||
|
||||
<programlisting>
|
||||
#ifndef THIS_OPTION
|
||||
#define THIS_OPTION (valor_por_default)
|
||||
#endif /* THIS_OPTION */</programlisting>
|
||||
|
||||
<para>De esta manera, un administrador seleccionando otro valor para la opción
|
||||
en su archivo de configuración dejará sin efecto el default, y lo reemplazará
|
||||
con su nuevo valor. Como es claro, el nuevo valor será sustituido en el código
|
||||
fuente durante la ejecución del preprocesador, por lo que debe ser una
|
||||
expresión C válida en el contexto en el que habría sido usado el default.
|
||||
</para>
|
||||
|
||||
<para>También es posible crear opciones sin valor que simplemente activen o
|
||||
desactiven una parte del código rodeandola con</para>
|
||||
|
||||
<programlisting>
|
||||
#ifdef THAT_OPTION
|
||||
<programlisting>#ifndef ESTA_OPCION
|
||||
#define ESTA_OPCION (algun_valor_por_default)
|
||||
#endif /* ESTA_OPCION */</programlisting>
|
||||
|
||||
[código fuente específico]
|
||||
<para>De esta forma cuando un administrador indica otro valor en su
|
||||
fichero de configuración, deja sin efecto el valor que se
|
||||
tiene originalmente por default, y lo substituye con este nuevo
|
||||
valor. Claramente el nuevo valor será utilizado como
|
||||
substituto en el código fuente, cuando el preprocesador se
|
||||
ejecute, por lo que debe de tratarse de una expresión
|
||||
válida para el lenguaje C, sin importar el contexto en el que
|
||||
se haya estado usando el valor por default.</para>
|
||||
|
||||
<para>También es posible crear opciones de menor valor, que
|
||||
simplemente habilitan o deshabilitan una parte particular del
|
||||
código, al encerrarlo en él</para>
|
||||
|
||||
<programlisting>#ifdef ESTA_OPCION
|
||||
|
||||
[su código aqui]
|
||||
|
||||
#endif</programlisting>
|
||||
|
||||
<para>Con solo mencionar <literal>THAT_OPTION</literal> en el archivo de
|
||||
configuración (con o sin valor) activará la parte del código correspondiente.</para>
|
||||
|
||||
<para>Quien esté familiarizado con el lenguaje C se dará cuenta de que todo
|
||||
podría ser tratado como una “opción de configuración” si hay
|
||||
por lo menos un <literal>#ifdef</literal> referenciandolo...
|
||||
De todos modos, es poco probable que mucha gente ponga</para>
|
||||
|
||||
<programlisting>
|
||||
options notyet,notdef</programlisting>
|
||||
|
||||
<para>en su archivo de configuración, y luego se pregunten por que la kernel
|
||||
compilation les da errores. <!-- smiley -->:-)</para>
|
||||
|
||||
<para>Como es claro, usar nombres arbitrarios para las opciones hace que sea
|
||||
muy difícil rastrear su uso por todo el árbol de código fuente. Esa es la
|
||||
razón que impulsa el esquema de opciones <emphasis>estilo-moderno</emphasis>,
|
||||
donde cada opción va en un archivo <filename>.h</filename> separado en el
|
||||
directorio de compilación del kernel, el cual por convención se llamará
|
||||
<filename>opt_<replaceable>foo</replaceable>.h</filename>. De esta forma
|
||||
las dependencias usuales del Makefile pueden aplicarse, y el <command>make
|
||||
</command> puede determinar que se necesita recompilar cuando una opción fue
|
||||
cambiada.</para>
|
||||
|
||||
<para>El mecanismo de opciones estilo antiguo tiene aún una ventaja para
|
||||
opciones locales o tal vez experimentales que tendrán por anticipado poco
|
||||
tiempo de vida: ya que es facil agregar un nuevo <literal>#ifdef</literal>
|
||||
al código fuente del kernel, esto ya lo ha convertido en una opción de
|
||||
configuración. En este caso el administrador que use tal opción es responsable
|
||||
de conocer sus implicaciones ( y tal vez forzar la recompilación de partes
|
||||
del kernel a mano). Una vez que la tansición de todas las opciones soportadas
|
||||
haya sido hecha, &man.config.8; advertirá cuando aparezca una opción no
|
||||
soportada en el archivo de configuración, pero sin embargo la incluirá en
|
||||
el Makefile del kernel.</para>
|
||||
|
||||
<para>Simplemente al incluir <literal>ESTA_OPCION</literal> en su
|
||||
fichero de configuración (con o sin valor alguno), activará
|
||||
la parte del código que haya ingresado.</para>
|
||||
|
||||
<para>Para la gente que este familiarizada con el lenguaje C, inmediatamente
|
||||
podrá darse cuenta de que todo pudiera ser tratado como una
|
||||
<quote>opción de configuración</quote>, donde cuando menos
|
||||
se tiene una simple referencia del tipo <literal>#ifdef</literal>...
|
||||
Por otro lado, es poco probable que alguien especifique</para>
|
||||
|
||||
<programlisting>options aunno,nodefinida</programlisting>
|
||||
|
||||
<para>en su fichero de configuración, y que posteriormente
|
||||
se pregunten por que fallo la compilación del kernel.</para>
|
||||
|
||||
<para>Es claro que, el uso de nombres arbitrarios para las opciones,
|
||||
hacen muy difícil el poder rastrear su uso en el código
|
||||
del kernel. Lo anterior es el razonamiento detrás del esquema
|
||||
de opciones de <emphasis>nuevo-estilo</emphasis>, donde cada opción
|
||||
se localiza en un fichero <filename>.h</filename> diferente dentro del
|
||||
directorio de compilación del kernel, los cuales por
|
||||
convicción son llamados
|
||||
<filename>opt_</replaceable>foo</replaceable>.h</filename>. De esta
|
||||
manera se pueden crear las dependencias dispuestas por Makefile, y el
|
||||
comando <command>make</command> puede determinar que debe ser
|
||||
recompilado, cuando una opción ha cambiado.</para>
|
||||
|
||||
<para>Aun con esto los mecanismos del estilo-viejo, tienen una ventaja
|
||||
para las opciones locales o quizás para las opciones de
|
||||
experimentación, que cuentan con un periodo de vida corto:
|
||||
en virtud de que es fácil añadir un nuevo
|
||||
<literal>#ifdef</literal> al código fuente del kernel, lo cual
|
||||
ya lo ha hecho una opción de configuración del kernel. En
|
||||
este caso, al utilizar esta opción, el administrador, es
|
||||
responsable por completo, al tener conocimiento de las implicaciones
|
||||
que tiene usarla (y probablemente el forzar la recompilación de
|
||||
ciertas partes del kernel). Una vez que la transición de
|
||||
todas las opciones soportadas por el kernel ha finalizado, &man.config.8;
|
||||
advertirá cuando una opción no soportada aparezca en el
|
||||
fichero de configuración, y no procederá a incluirlo
|
||||
en el fichero Makefile del kernel.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Y ahora ¿Qué debo hacer para eso?</title>
|
||||
<title>Ahora, ¿Qué Debo Hacer?</title>
|
||||
|
||||
<para>Primero, edite <filename>sys/conf/options</filename> (o
|
||||
<filename>sys/i386/conf/options.<replaceable><arq></replaceable></filename>,
|
||||
Ej: <filename>sys/i386/conf/options.i386</filename>), y seleccione un archivo
|
||||
<filename>opt_<replaceable>foo</replaceable>.h</filename> donde
|
||||
su nueva opción cabría mejor.</para>
|
||||
|
||||
<para>Si ya hay algo que se acerque al proposito de la nueva opción, elijalo.
|
||||
Por ejemplo, las opciones que modifican la conducta general del subsistema
|
||||
SCSI pueden ir dentro de <filename>opt_scsi.h</filename>. Por default,
|
||||
con solo mencionar una opción en el archivo de opciones apropiado,
|
||||
digamos <literal>FOO</literal>, implica que su valor irá dentro del
|
||||
archivo correspondiente <filename>opt_foo.h</filename>. Esto puede ser
|
||||
reemplazado en el lado derecho de una regla especificando otro nombre de
|
||||
archivo.</para>
|
||||
|
||||
<para>Si no hay ningún
|
||||
<filename>opt_<replaceable>foo</replaceable>.h</filename> ya
|
||||
disponible para la nueva opción, invente un nuevo nombre. Hágalo
|
||||
significativo, y comente la nueva sección en el archivo
|
||||
<filename>options[<replaceable>.<arq></replaceable>]</filename>.
|
||||
&man.config.8; automaticamente tomará el cambio, y creará el archivo
|
||||
la próxima vez que se corra. La mayoría de las opciones deberían ir en
|
||||
un archivo <filename>.h</filename> individual.</para>
|
||||
|
||||
<para>Meter demasiadas opciones en un solo archivo
|
||||
<filename>opt_<replaceable>foo</replaceable>.h</filename> causará que
|
||||
se tengan que recompilar demasiados archivos del kernel cuando se cambie
|
||||
una de las opciones en el archivo de configuración.</para>
|
||||
|
||||
<para>Por último, averigüe que archivos del kernel dependen de la nueva
|
||||
opción. A menos que usted haya inventado recientemente su opción, y
|
||||
aún no existe en ningún lado <screen>&prompt.user;
|
||||
<userinput>find /usr/src/sys -name
|
||||
type f | xargs fgrep NEW_OPTION</userinput></screen> le será de
|
||||
ayuda para encontrarlos. Edite todos esos archivos y agregue <programlisting>
|
||||
#include "opt_foo.h"</programlisting> <emphasis>al comienzo</emphasis>,
|
||||
antes de todos los <literal>#include <xxx.h></literal>. Este
|
||||
orden es más importante en tanto las opciones podrían reemplazar los
|
||||
defaults de los archivos <filename>.h</filename> regulares, si los defaults
|
||||
son de la forma <programlisting> #ifndef NEW_OPTION #define NEW_OPTION (something)
|
||||
#endif</programlisting> en el <filename>.h</filename> regular.</para>
|
||||
|
||||
<para>Agregar una opción que reemplaza algo en un archivo header del sistema
|
||||
(un archivo ubicado en <filename>/usr/include/sys/</filename>) es
|
||||
casi siempre un error.
|
||||
<filename>opt_<replaceable>foo</replaceable>.h</filename> no puede ser
|
||||
incluido dentro de estos archivos dado que esto dañaría al header
|
||||
muy seriamente, pero si no se incluye entonces otros lugares que lo
|
||||
incluyen podrían tener valores inconsistentes para la opción. Sí, hay
|
||||
precedentes de esto actualmente, pero eso no los hace más correctos.</para>
|
||||
<para>Lo primero es, editar el fichero <filename>sys/conf/options</filename>
|
||||
(o bien <filename>sys/<replaceable><arch></replaceable>/conf/options.
|
||||
<replaceable><arch></replaceable></filename>, por ejemplo;
|
||||
<filename>/sys/i386/conf/options.i386</filename>), y seleccionar un
|
||||
fichero <filename>opt_<replaceable>foo</replaceable>.h</filename> que
|
||||
mejor describa la nueva opción, para su inclusión.</para>
|
||||
|
||||
<para>Si ya existiese alguno, que se acerce al propósito de la
|
||||
nueva opción, debe elegir ese. Por ejemplo, opciones que
|
||||
modifiquen el comportamiento global del subsistema SCSI, pueden
|
||||
incluirse en <filename>opt_scsi.h</filename>. Por default, con el simple
|
||||
hecho de mencionar una opción en el fichero apropiado, digamos
|
||||
<literal>FOO</literal>, implica que el valor correspondiente a esta
|
||||
opción se localiza en el fichero correspondiente
|
||||
<filename>opt_foo.h</filename>. Por otro lado, esto puede modificarse
|
||||
al especificar el nombre de otro fichero.</para>
|
||||
|
||||
<para>Si el fichero
|
||||
<filename>opt_<replaceable>foo</replaceable>.h</filename> para la
|
||||
nueva opción no existiera, invente un nuevo nombre. Creelo de
|
||||
manera que sea intuitivo, con significado, y comente la nueva
|
||||
sección en el fichero
|
||||
<filename>options[<replaceable>.<arch></replaceable>]</filename>.
|
||||
En la ejecución de &man.config.8;, este automágicamente
|
||||
reconocerá los cambios, y creará ese fichero, la
|
||||
próxima vez que se ejecute. La mayoría de las opciones
|
||||
deberán incluirse como encabezados por si mismos..</para>
|
||||
|
||||
<para>El hecho de incluir muchas opciones, dentro de un solo fichero
|
||||
<filename>opt_<replaceable>foo</replaceable>.h</filename>,
|
||||
tendrá como resultado la creación de un buen numero de
|
||||
ficheros del kernel, durante la compilación, cuando sólo
|
||||
se haya realizado un cambio en alguna de las opciones del fichero de
|
||||
configuración del kernel, por esta
|
||||
razón es conveniente conservar cada opción en su
|
||||
propio fichero <filename>opt_</filename>.</para>
|
||||
|
||||
<para>Finalmente, averigue las dependencias que existen para la
|
||||
nueva opción. A menos que la nueva opción sea de
|
||||
nueva creación, y no exista en ninguna parte, la siguiente
|
||||
alternativa es su amiga, para efecto de encontrar dependencias:</para>
|
||||
|
||||
<screen>&prompt.user;
|
||||
<userinput>find /usr/src/sys -type f | xargs fgrep NUEVA_OPCION</userinput>
|
||||
</screen>
|
||||
|
||||
<para>El comando anterior dará como resultado un listado de
|
||||
ficheros que tienen dependecia, dirijase a todos esos ficheros y
|
||||
añada lo siguiente, en la parte <emphasis>superior</emphasis>
|
||||
(como encabezado), antes de todo lo que se refiere a
|
||||
<literal>#include <xxx.h></literal>.</para>
|
||||
|
||||
<programlisting>#include "opt_foo.h"</programlisting>
|
||||
|
||||
<para>El seguir este orden es de suma importancia, en virtud de que las
|
||||
opciones pueden modificar el comportamiento, por omisión, de los
|
||||
ficheros normales del tipo <quote>#include</quote>
|
||||
(N de T: librerís de encabezado), si
|
||||
estos son del tipo:</para>
|
||||
|
||||
<programlisting> #ifndef NUEVA_OPCION #define NUEVA_OPCION (algo)
|
||||
#endif</programlisting>
|
||||
|
||||
<para>El añadir una opción que substituye algún
|
||||
encabezado, en ficheros del sistema (por ejemplo; un fichero que se
|
||||
localiza en <filename>/usr/include/sys/</filename>) da como resultado
|
||||
casi siempre un error. El fichero <filename>opt_<replaceable>foo
|
||||
</replaceable>.h</filename> no puede ser incluido en esos ficheros,
|
||||
en virtud de que generaran un conflicto más serio, con sus
|
||||
propios encabezados, pero si no son incluidos, al momento de que se
|
||||
deseen utilizar, se puede obtener un valor inconsistente para esta
|
||||
opción. Si, existen antecedentes de esto en este momento,
|
||||
pero eso no lo hace más correcto.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue