26/4/09

Reinstalar Debian con los paquetes elegidos anteriormente

Muchas veces, después que tenemos ya montado todo nuestro sistema, con todos los paquetes necesarios, se nos ocurre reinstalar de nuevo y por lo general, se nos olvidan paquetes que necesitamos y que teníamos instalado antes.
Pues existe una forma muy facil de recordar estos paquetes:

Con esta simple linea exportamos los paquetes:
dpkg –get-selections “*” > /home/user/Desktop/paquetes.txt
Luego de reinstalar ejecutamos esto:
dpkg –set-selections “*” < /home/user/Desktop/paquetes.txt
Y luego ejecutamos:
apt-get -u dselect-upgrade
Y listo, todo como antes =-.)

25/4/09

Instalar Linux en la misma partición de Windows

Muchos usuarios no se animan a particionar su disco duro para poder instalar otro sistema operativo diferente al que tienen. Pero siempre han existido opciones menos traumáticas para poder instalarse Linux en la PC sin necesidad de entrar en detalles de particiones lógicas y primarias o qué particionador usar, para que al final todos los datos se pierdan. Hay varios proyectos que permiten instalar Linux en la misma partición de Windows (ya sea fat32 o ntfs), de los más conocidos son:
  1. Wubi: es quizá de los más conocidos proyectos destinados a compartir la misma partición para Windows y Linux, sin embargo a muchos a desencantado. Wubi es un instalador no-oficial de Ubuntu que instala Linux como si se tratase de una aplicación .exe más.
  2. Goodbye-Microsoft: otro basado en Debian y sólo requiere la ejecución de un programa .exe y posteriormente se encargará de descargar una imagen de Debian para instalar el sistema básico de este sistema operativo.
  3. Topologilinux: Topologilinux es una distribución Linux diseñada para correr en cualquier computadora con DOS/Windows instalado sin necesidad de particionar el disco duro, y además pueda correrse desde el mismo Windows. Topologilinux no necesita particionar el disco duro.
    Se ejecuta en la partición de Windows activa en un directorio llamado /tlinux6. Funciona en particiones NTFS y FAT. Desde la versión 5 se puede ejecutar dentro de Windows a traves de coLinux, y desde la versión 6 se puede instalar en modo real sin necesidad de crear una imagen que se monte en el disco duro, se puede instalar cualquier distro, ya sea Slackware, Red Hat, Fedora, Suse o la que quieras. Es posible también instalar programas de Windows en Topologilinux a través del emulador Wine.
  4. InstLux es un proyecto similar a todos, al igual que el resto toca descargar un archivo ejecutable, y bajar el Linux que deseemos intalar; está traducido a 20 idiomas y soporta openSuse, Ubuntu, etc.
  5. CoLinux: este sistema difiere del resto, ya que no instala imágenes como los anteriores métodos, sino que utiliza un kernel de linux que corre junto a Windows. Cooperative Linux (coLinux) es el primer método libre para correr Linux en Windows nativamente; coLinux es un port del kernel de Linux que le permite correr cooperativamente junto a otro sistema operativo en la misma máquina. Por ejemplo, permite correr Linux en una PC con Windows 200/XP sin usar software de virtualización comercial como VMWare.
Y si bien es algo dostinto pueden jugar con la "alternativa a wine" para windows, el enlace, AQUI!

24/4/09

Mantener acentos y eñes al montar FAT, NTFS, SMBFS y al compartir directorios con Samba

En el pasado a menudo he tenido problemas con los acentos y las eñes al montar particiones FAT o NTFS o al montar o compartir directorios usando Samba. Esto ocurre porque GNU/Linux usa distintos juegos de caracteres que Windows y DOS.
En esta entrada vamos a tratar de aclarar todos los aspectos que pueden impedirnos disfrutar de nuestra apreciadas eñes cuando nos enfrentamos con ficheros cuyo origen o destino sea un sistema operativo de Microsoft.

Existe una multitud de juegos de caracteres. Podemos ver muchos de ellos en popular character encodings . Allí vemos el Windows-1252, el CP850, el ISO 8859-1 (Latin 1), el ISO 8859-15 (Latin 9) o el Unicode (con su sistema de codificación de longitud variable más típico, el UTF-8) , que son los que más nos interesan para el asunto que nos ocupa. En el artí*** de la WikiPedia Western Latin character sets tenemos una tabla mostrándonos las diferencias entre estos juegos de caracteres.

Antes de poner manos a la obra, es conveniente que verifiquemos que el bash nos muestra correctamente acentos, eñes y si acaso, el símbolo del euro € (aunque por estos lares el € no lo usamos...) escribiendo en un terminal á é í ó ú Á É Í Ó Ú ñ Ñ €. Si no salen bien, puede ser por dos motivos principalmente:
  1. El bash no está correctamente configurado para mostrar acentos. Esto ocurría bastante hace unos años, y era necesario hacer todo tipo de ajustes. Sin embargo, en las distribuciones actuales normalmente no es necesario hacer nada.
  2. La fuente usada en el terminal que estamos usando (Consola de Linux, Putty, Konsole, GNOME Terminal, etc.) no lleva acentos o no están correctamente mapeados.
Lo primero que tenemos que tener en mente es que el juego de caracteres que vamos a usar en Linux es el que especificamos en la variable LANG. Yo normalmente la tengo en inglés (ya he comentado alguna vez que es muy útil tener los errores y mensajes en inglés para poder buscarlos) y con el juego de caracteres de alfabetos latinos con el símbolo del Euro, el ISO 8859-15. Podemos ver en el siguiente ejemplo que si especificáramos un LANG no apropiado para nuestro entorno, como C, no veríamos ninguno de los caracteres especiales:
$ echo $LANG
en_US.ISO-8859-15
$ ls 0áéíóúñ€
0áéíóúñ€
$ export LANG=C
$ ls 0áéíóúñ€
0???????
Por tanto, la clave de este juego es siempre traducir de o desde el juego de caracteres ISO 8859-15.

Si necesitáramos reconfigurar qué juegos de caracteres queremos tener disponibles en Linux, podemos usar el comando:
dpkg-reconfigure locales
que nos hará las siguientes preguntas:




NTFS
:
El NTFS tiene las siguientes opciones de mount en relación a los juegos de caracteres:

iocharset=name Character set to use when returning file names. Unlike VFAT, NTFS suppresses names that contain unconvertible characters. Deprecated.
nls=name New name for the option earlier called iocharset.
utf8 Use UTF-8 for converting file names.
uni_xlate=[0|1|2] For 0 (or `no’ or `false’), do not use escape sequences for unknown Unicode characters. For 1 (or `yes’ or `true’) or 2, use vfat-style 4-byte escape sequences starting with “:”. Here 2 give a little-endian encoding and 1 a byteswapped bigendian encoding.

Para que el driver traduzca el juego de caracteres a nuestro ISO 8859-15 pondremos:
mount -t ntfs -o nls=iso8859-15 /dev/XXX /mnt/puntodemontaje

NTFS-3G
:
El NTFS-3G tiene la siguiente opción para que le especifiquemos qué juego de caracteres usar:

locale= You can set locale with this option which is often required to make visible files with national charaters. It’s useful if locale environment variables are not set before partitions had been mounted from /etc/fstab.

Por tanto el NTFS-3G usará lo que tengamos en el locale a menos que le especifiquemos lo contrario. En la siguiente secuencia de comandos podemos ver que si la variable LANG no soporta nuestros caracteres, los ficheros con dichos caracteres directamente ni aparecerán (en el root del filesystem hay un fichero llamado 0áéíóúñÑ€.txt). Si forzamos un locale en el comando ntfs-3g, el fichero ya aparecerá, aunque el bash no nos lo mostrará bien (pondrá símbolos de interrogación) por culpa precisamente de la variable LANG:
# export LANG=C
# ntfs-3g /dev/XXX /mnt/test
# ll /mnt/test/0*
ls: /mnt/test/0*: No such file or directory
# umount /mnt/test/
# ntfs-3g /dev/XXX /mnt/test/ -o locale=en_US.iso8859-15
# ll /mnt/test/0*
-rwxrwxrwx 1 root root 0 Apr 3 23:33 /mnt/test/0????????.txt*
# umount /mnt/test/
# export LANG=en_US.iso8859-15
# ntfs-3g /dev/XXX /mnt/test/
# ll /mnt/test/0*
-rwxrwxrwx 1 root root 0 2009-04-03 20:33 /mnt/test/0áéíóúñÑ€.txt*

VFAT:
El FAT tiene las siguientes opciones de mount en relación a los juegos de caracteres:

codepage=value Sets the codepage for converting to shortname characters on FAT and VFAT filesystems. By default, codepage 437 is used.
iocharset=value Character set to use for converting between 8 bit characters and 16 bit Unicode characters. The default is iso8859-1. Long filenames are stored on disk in Unicode format.
uni_xlate Translate unhandled Unicode characters to special escaped sequences. This lets you backup and restore filenames that are created with any Unicode characters. Without this option, a ‘?’ is used when no translation is possible. The escape character is ‘:’ because it is otherwise illegal on the vfat filesystem. The escape sequence that gets used, where u is the unicode character, is: ‘:’, (u & 0×3f), ((u>>6) & 0×3f), (u>>12).
utf8 UTF8 is the filesystem safe 8-bit encoding of Unicode that is used by the console. It can be be enabled for the filesystem with this option. If `uni_xlate’ gets set, UTF8 gets disabled.

La forma adecuada de usar el mount en este caso sería:
mount -t vfat -o iocharset=iso8859-15,codepage=850 /dev/XXX /mnt/puntodemontaje
Es importante darse cuenta de que codepage es lo que se usa para traducir los nombres cortos (8+3) de MS-DOS que se siguen guardando junto con los largos en un sistema de ficheros FAT, y que el iocharset es lo que usamos para traducir los nombres largos.

Aunque los nombres cortos apenas los usamos hoy en día, podemos ver en Windows cómo se han guardado con la opción /X del comando dir:
3/04/2007 19:04 13 HOF3C6~1 hoááéñÑÁ
Hay que tener en cuenta que el CP850 no contiene el símbolo del Euro (€), y que es el CP858 el que sí lo contiene, pero el CP858 no lo soportan ni MS-DOS ni Linux (bueno, según How to Display the Euro in MS-DOS and Windows DOS el MS-DOS realmente sí, si le ponemos ficheros del YEAR 2000 FIX PAK FOR IBM PC DOS 7)


SAMBA
:
El servidor Samba nos permite compatir nuestros directorios usando el mismo sistema que Windows. Si queremos que los clientes Windows vean bien los caracteres especiales de nuestros ficheros, tenemos que especificar las siguientes opciones en la sección [global] del fichero /etc/samba/smb.conf:
dos charset = 850
unix charset = ISO8859-15
Y a continuación ejecutar un:
/etc/init.d/samba reload

Opciones del Kernel:

Para finalizar, es importante comentar que el kernel de Linux también tiene que estar compilado con opciones adecuadas para nuestro entorno de forma que si no especificamos opciones siempre se escojan las adecuadas para nuestro entorno. Muestro las opciones interesantes en capturas de sesiones de make menuconfig.

En File Systems→Native Languaje Support es importante elegir todos los juegos de caracteres que vamos a necesitar y, sobre todo, especificar que nos interesa que el iocharset por defecto sea siempre iso8859-15:


En File Systems→DOS/FAT/NT Filsesystems especificamos el codepage y el iocharset por defecto para particiones FAT:

En File Systems→Network File Systems especificamos el codepage por defecto para montar shares SMB:


Bueno es todo... Creditos y agradecimientos a http://www.vicente-navarro.com/

21/4/09

Ventajas desventajas de los navegadores multiproceso

Tras la inclusión del concepto de los procesos múltiples en el navegador por parte de Google Chrome le ha seguido Internet Explorer 8. Veremos (via Genbeta) un análisis sobre las ventajas e inconvenientes de los navegadores multiproceso.
Su principal punto débil es que necesitan más recursos para ejecutar lo mismo que los navegadores monoproceso. A cambio obtenemos un navegador más seguro, en el que si una web se cuelga, el resto de las que se estén visualizando pueden seguir adelante, y en el que el uso de memoria será más eficiente si hacemos un uso prolongado del mismo, abriendo y cerrando pestañas. Chrome abre incluso un proceso diferente para los plugins, que son probablemente la parte más inestable y la parte menos segura de los navegadores.


Con la reciente salida de Internet Explorer 8 hemos asistido al nacimiento del segundo gran navegador multiproceso después de Chrome. ¿Qué significa esto? ¿Este tipo de navegadores son el futuro? ¿Qué ventajas e inconvenientes tienen respecto a los navegadores con un único proceso? Y lo más importante: ¿nos beneficia o nos perjudica a los usuarios este cambio de paradigma? Estas preguntas y algunas más las intentaré contestar en esta entrada.

¿Qué son los navegadores multiproceso?
Normalmente, cada aplicación ejecuta un único proceso, desde el cuál controlará todas las acciones que tenga que realizar. Si necesita hacer varias cosas a la vez, creará varios hilos, que no son más que subprocesos ligeros que comparten casi todos los datos o casi todas las instrucciones. De esta manera los recursos se utilizan de manera más eficiente, sobre todo la memoria, ya que al compartirla se evita tener que guardar varias veces lo mismo.

Comenzando una analogía que no sé si me va a gustar, un navegador monoproceso sería una empresa convencional, y los hilos serían sus trabajadores, que efectivamente pueden trabajar en paralelo y tienen aproximadamente la misma información, la que les provee la empresa. Este modelo es el que tradicionalmente han seguido las empresas pequeñas, y no les ha ido mal.


En contraposición, los navegadores multiproceso, como su propio nombre indica, crean varios procesos para realizar esas mismas tareas. En este caso suelen crear un proceso por cada página o pestaña que abramos (luego lo matizaré). En principio esto no tendría demasiado sentido, ya que un montón de memoria se repetirá, como por ejemplo las instrucciones que procesan el HTML o el motor de Javascript. Sin embargo, se obtienen mejores resultados al tratarse de un programa que tiene que estar preparado para ejecutarse durante horas o días seguidos.

Siguiendo y terminando con la analogía anterior, un navegador multiproceso es una gran empresa que trabaja en diferentes regiones. Aunque se dedica a hacer lo mismo en una región que en otra, una rama ciertamente no necesita saber nada sobre los clientes de otra rama. De esta manera necesitamos dirigentes o ingenieros “repetidos” para llevar cada una de las ramas, coste que nos ahorraríamos si solo tuviéramos una gran fábrica. A pesar de todo este modelo funciona bastante bien, y entre otros aspectos resalta uno interesante: si una rama tiene problemas no afecta a las demás.

Qué ventajas/desventajas tienen?
Lo más obvio es que se necesitan más recursos para ejecutar lo mismo que en navegadores monoproceso, ya que como he comentado antes muchos datos se guardan varias veces en memoria. Esto es algo malo de por sí, pero no creo que sea algo excesivamente notable con la cantidad de memoria que tenemos hoy en día.

De hecho, tras un tiempo usando el navegador abriendo y cerrando pestañas, el uso de memoria será incluso más eficiente que un navegador convencional. Esto es debido a que, cuando cerramos una pestaña, automáticamente se destruirá el proceso y los huecos que se liberan se administrarán desde rutinas específicas de nuestro Sistema Operativo. En un navegador monoproceso será el propio navegador el que tenga que ver qué hace con esa memoria, y no el SO. Por muy bueno que sea un navegador, el SO siempre será más eficiente, simplemente porque dispone de más herramientas. Esta es una de la razones por la que por ejemplo Firefox al cabo de un tiempo use más memoria que al principio aunque cerremos todas las pestañas, lo que lo hace bastante degradable.


Dejando de lado la eficiencia, la mayor ventaja de estos navegadores es la seguridad que ofrecen. Al aislar cada web en su propio proceso, es casi imposible que pueda afectar a las demás webs que están visualizando. En realidad incluso están aisladas respecto al navegador. Esto supone una funcionalidad interesantísima: si una de estas webs causa un fallo crítico que obliga a cerrarla, el navegador y las demás pestañas seguirán intactos. Es decir, si una web se cuelga, el navegador puede seguir adelante. Tradicionalmente, si una de las pestañas causa un fallo, todo el navegador se cierra inesperadamente.

Pero evitar que el navegador se rompa solo es un pequeño avance comparado con la seguridad que esta arquitectura puede ofrecer. Que dos webs estén completamente aisladas respecto a sí mismas y respecto al SO significa que es mucho más difícil infectarse con software malicioso. Y no solo en teoría, también se está probando en la práctica: Chrome ha sido el único navegador sobre el que no se ha encontrado ningún exploit en PWN2OWN, un concurso con expertos en seguridad celebrado esta semana. De acuerdo, IE8 ha sucumbido, pero eso es otro tema.

Cuántos procesos se crean?
Aunque las arquitecturas de Chrome e IE8 tienen algunas diferencias, las dos crean un proceso inicial que será el que se ocupe de la interfaz (las ventanas, las barras, etc), de todas las comunicaciones con el sistema (entrada/salida de ficheros, de internet, etc) y con el usuario (teclado, ratón, pantalla). Este es el proceso padre, y si se cierra se cerrarán todos los demás.

A partir de entonces se crean procesos adicionales por una o más webs que abramos. Cada proceso contendrá los motores de renderizado de HTML, CSS, Javascript, imágenes, etc necesarios para leer una página web. Esta es la información que se repetirá tantas veces como procesos tengamos abiertos. Estos procesos están aislados del resto del sistema, y solo se comunican con el proceso padre: si quieren acceso a disco lo tienen que hacer a través del padre, si quieren acceso a la red o a la pantalla también.


Aquí está la diferencia entre IE8 y Chrome, ya que los dos crean procesos de manera distinta. IE8 calculará cuántos procesos debe abrir dependiendo del número de sitios web que abras: si tienes cinco sitios abre 3 procesos, si tienes 15 abre 6, los que sean. Cada proceso se ocupará de varios sitios webs por defecto, y si uno de esos sitios web causa un fallo, los demás sitios que maneje ese proceso se cerrarán también. En cierto modo es como si balanceara la carga de varios sitios web entre varios procesos, tal y como se hace en un servidor web. Una manera rápida de ver los sitios que comparten un mismo proceso es ver qué pestañas comparten el mismo color (aunque si tienen distinto color también pueden compartir proceso).

Chrome sigue una arquitectura que me parece que tiene algo más sentido. En principio crea un proceso por cada sitio web que abras. Si abres otra pestaña con el mismo sitio web (por ejemplo, dos artículos de Genbeta) será lo suficientemente inteligente para reutilizar ese proceso. Este algoritmo seguirá repitiéndose hasta llegar a un tope que actualmente se acerca a los 20 procesos, a partir de este punto varias webs compartirán procesos de manera similar a IE8.


Otro punto fundamental de Chrome es que también aísla en su propio proceso a los plugins, cosa que IE8 no parece hacer. Estos componentes externos a los navegadores son probablemente la parte más inestable y la parte menos segura, así que es una buena idea aislarla también.

Es este el futuro?
. Los navegadores tradicionales tienen sentido en la web tradicional, con sitios simples y recursos muy limitados. Hoy en día tenemos varios factores que nos llevan a preferir una arquitectura multiproceso: las aplicaciones web son tan complejas como las de escritorio (piensa en Gmail, Google Docs, etc), los navegadores se utilizan durante mucho tiempo, gracias a las pestañas cada vez abrimos más webs a la vez y la cantidad de memoria RAM es bastante grande. Y ni siquiera he hablado de los procesadores multinúcleo: un navegador multiproceso puede aprovecharlos más que los actuales multihilo, y si cada vez tenemos más núcleos habrá que explotarlos más.

Por estos motivos creo, espero y quiero que Firefox, Opera y Safari implementen esta arquitectura cuanto antes. Cualquiera que haya probado Chrome (en menor medida IE8) habrá comprobado que la experiencia de usuario es mucho mejor a lo que estamos acostumbrados, y que la estabilidad general del navegador es muy alta aunque visitemos sitios pesados. En general, todo se reduce a que los navegadores multiproceso no se degradan con la misma facilidad que los navegadores tradicionales...

20/4/09

Mensajes de error de grub

Seguimos con la onda GRUB =P ahora le toca el turno de los códigos de error que podemos llegar a ver...

El arranque de grub se divide en dos etapas, Stage 1 y Stage 2 y cada una de ellas tiene sus mensajes de error.
En general, los errores en Stage 1 se limitan a mostrar un error y detener el sistema.
Los errores en Stage 2 interrumpen la operación, muestran un mensaje y si es posible continúa con la operación, por ejemplo solicitando al usuario que lo corrija.

Hard Disk Error
El intento de lectura del disco no permite averiguar su geometría y su tamaño.

Floppy Error
Es el mismo error anterior, pero se indica de forma separada por el orden de comprobación.

Read Error
Error de lectura al intentar leer stage2.

Geom Error
La ubicación en disco de stage2 no está en la parte del disco accesible mediatne llamadas al BIOS. Puede deberse a que hayamos modificado la configuración del disco, o que hayamos cambiado el disco de máquina o que grub no esté bien instalado.

1 : Filename must be either an absolute filename or blocklist
Este error se origina cuando un nombre de fichero solicitado por grub no verifica la sintaxis adecuada.

2 : Bad file or directory type
Este error se origina cuando un fichero solicitado por grub no es un fichero regular sino un enlace simbólico, un directorio o una tubería con nombre.

3 : Bad or corrupt data while decompressing file
Este error se origina cuando el código de descompresión devuelve un error. Normalmente se trata de un fichero dañado.

4 : Bad or incompatible header in compressed file
Este error se origina cuando laa cabecera de un fichero comprimido es incorrecta

5 : Partition table invalid or corrupt
Este error se origina cuando verificación del estado de la tabla de particiones falla. Es un mal síntoma.

6 : Mismatched or corrupt version of stage1/stage2
Este error se origina cuando la orden de instalación apunta a versiones incompatibles o dañadas de stage1 o stage2. En general no puede detectar los daños y en este caso sólo se trata de los números de versión.

7 : Loading below 1MB is not supported
Este error se origina cuando la dirección más baja de un núcleo está por debajo de la cota de 1MB. El formato zImage de Linux es un caso especial y se puede manejar ya que tiene una dirección de carga fija y tamaño máximo.

8 : Kernel must be loaded before booting
Este error se origina si le decimos a GRUB que ejecute una secuencia de arranque sin haber indicado un núcleo.

9 : Unknown boot failure
Este error se origina por razones desconocidas.

10 : Unsupported Multiboot features requested
Este error se origina cuando las características Multiboot requieren una característica que no se reconoce. El núcleo requiere una gestión especial que GRUB probablemente no tiene.

11 : Unrecognized device string
Este error se origina cuando se espera un nombre de dispositivo y el texto encontrado no cumple las reglas de nombres de dispositivos.

12 : Invalid device requested
Este error se origina cuando un nombre dispositivo es válido y tiene un error no contemplado en otro error.

13 : Invalid or unsupported executable format
Este error se origina cuando la imagen del núcleo cargada no se reconoce como Multiboot o alguno de los formatos nativos admitidos : Linux zImage o bzImage, FreeBSD o NetBSD.

14 : Filesystem compatibility error, cannot read whole file
Alguno de los sistema de fichero que tiene que leer GRUB tiene limitado el tamaño de lectura de ficheros. Se corrige eliminado el límite.

15 : File not found
Este error se origina cuando uno se puede encontrar un fichero solicitado, pero la ruta de acceso es correcta.

16 : Inconsistent filesystem structure
Este error lo devuelve el sistemade ficheros para indicar un error interno debido al estado de la estructura del sistema de ficheros que no encaja con lo previsto. Puede deberse a un sistema de ficheros dañado o algún bug de GRUB para manejar ese sistema de ficheros

17 : Cannot mount selected partition
Este error se origina cuando una partición existe pero GRUB no la reconoce.

18 : Selected cylinder exceeds maximum supported by BIOS
Este error se origina cuando una lectura intenta ir más alla del área direccionada por el BIOS. Este error se origina cuando se trata de leer bloques lineales. Este problema lo podemos encontrar en discos (E)IDE mayores 512MB o de 8GB en máquinas antiguas.

19 : Linux kernel must be loaded before initrd
Este error se origina cuando ponemos initrd antes que kernel.

20 : Multiboot kernel must be loaded before modules
Este error se origina cuando la orden de carga de módulos se usa antes que de cargar un núcleo Multiboot. Sólo tiene sentido en este caso ya que GRUB no tiene idea de como comunicar la presencia de tales módulos a un núcleo que no sea Multiboot-aware.

21 : Selected disk does not exist
Este error se origina cuando todo o parte un nombre de dispositivo referido a disco o dispositivo BIOS no está presente o no se reconoce por la BIOS en el sistema.

22 : No such partition
Este error se origina cuando no existe la partición especificada

23 : Error while parsing number
Este error se origina si GRUB espera leer un número y encuentra datos incorrectos.

24 : Attempt to access block outside partition
Este error se origina cuando una dirección lineal de bloque está fuera de la partición. Normalmente se debe daños en el sistema de ficheros o a algún bug detectado por GRUB.

25 : Disk read error
Se ha producido un error de lectura en el disco.

26 : Too many symbolic links
Demasiados enlaces simbólicos. El número máximo es 5.
Es posible que los enlaces tengan un bucle

27 : Unrecognized command
Este error se origina cuando introducimos un nombre de orden no reconocido por grub. Puede tratarse de un error al escribir.

28 : Selected item cannot fit into memory
Este error se origina cuando tratamos da cargar algo en memoria y no cabe.

29 : Disk write error
Error producido cuando grub trataba de escribir en disco. Normalmente sólo puede ocurrir durante la instalación o con la orden makeactive.

30 : Invalid argument

Este error se origina cuando el argumento para alguna orden es incorrecto.

31 : File is not sector aligned

Este error se origina cuando accede a una partición ReiserFS por lista de bloques (v.g. la orden `install'). En este caso debería montar la partición con la opción `notail'.

32 : Must be authenticated
Este error se origina cuando se trata de acceder a un arranque con "lock". Se debe introducir una contraseña válida.

33 : Serial device not configured

Este error se origina cuando trata de cambiar el terminal a uno serie pero no se ha activado ningún dispositivo serie

34 : No spare sectors on the disk
Este error se origina cuando no queda espacio libre. Sucede intenta introducir Stage 1.5 en los sectores no utilizados tras el MBR, pero la primera partición comienza justo tras el MBR o los está usando EZ-BIOS.

Contraseñas en GRUB

El gestor de arranque GRUB (GRand Unifier Bootloader) viene preinstalado en la mayoría de las distribuciones de GNU/Linux modernas, entre ellas Debian, Ubuntu y sus derivadas. Anteriormente, el gestor de arranque más usado era LILO.

Los errores en las modificaciones de GRUB pueden llevar a problemas con el arranque. Por esto es recomendable hacer una copia de seguridad del archivo menu.lst antes de realizar algún cambio, para eso hacemos:
$ sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.backup
Luego, para restaurar la copia de seguridad, hacemos lo siguiente:
$ sudo cp /boot/grub/menu.lst.backup /boot/grub/menu.lst

Proteger con contraseña:
Para que ningún usuario no autorizado pueda modificar los valores de GRUB en tiempo de ejecución, podemos establecer una contraseña, de esta forma sólo pulsando la tecla 'p' e introduciendo la contraseña se podrán cambiar los parámetros del programa.

Editamos el archivo de configuración del menú de arranque de GRUB:
$ sudo gedit /boot/grub/menu.lst
Buscamos la siguiente línea:
#password topsecret
Borramos el numeral (#) de la línea, haciendo esto la descomentaremos. Debe quedar así:
password topsecret
Ahora la contraseña es topsecret, se puede cambiar e introducir la que se desee, guardamos el archivo y cerramos el editor.


Encriptar la contraseña:
Como no es buena política almacenar las contraseñas en texto limpio, lo mejor es añadir la opción `--md5' y poner una contraseña cifrada md5. Para obtener el valor cifrado de la contraseña podemos usar la orden `md5crypt' en un shell de grub. Para eso ejecutamos:
# grub
y nos aparece:
grub>
Ahora ejecutamos la orden md5crypt e introducimos la contraseña cuando la pida:
grub> md5crypt
Password: ****
Encrypted: $1$VrTfp0$XIHnjm/6MAUPrOzCPHJZ30
grub>
con esto tenemos la contraseña cifrada con md5. En este caso la contraseña es "hola". Ahora sólo tenemos que cortar y pegar:
password --md5 $1$VrTfp0$XIHnjm/6MAUPrOzCPHJZ30
Es posible también indicar un fichero de configuración como argumento de password. Este fichero será el que se cargue como fichero de configuración cuando proporcionemos una contraseña válida. Por ejemplo:
password hola /boot/grub/menu-admin.lst

lock: bloquear arranques
:
En una máquina podemos tener varios sistemas operativos instalados, pero no queremos que todo el mundo pueda utilizarlos todos, queremos que para acceder a cierto sistema haya que introducir una contraseña.
title Boot DOS
lock
rootnoverify (hd0,1)
makeactive
chainload +1
Debemos poner lock justo tras title, ya que un usuario podría ejecutar órdenes de una opción del menú hasta encontrar lock.


Arranque con contraseña:
Cuando poníamos lock estábamos utilizando la contraseña global de grub, pero también existe la posibilidad de agregar "password" a un arranque concreto. En este caso el comportamiento es distinto, se solicita esa contraseña para realizar el arranque. Así podemos tener una contraseña para cada uno de los sistemas operativos que tengamos instalados. Por ejemplo:
title Ubuntu, kernel 2.6.15-26-386 (recovery mode)
password --md5 $1$ddTCc1$8v3fWFR4m5kDfuRG5LUHo/
root (hd1,0)
kernel /boot/vmlinuz-2.6.15-26-386 root=/dev/hdb1 ro single
initrd /boot/initrd.img-2.6.15-26-386
boot

16/4/09

Recuperando GRUB

Para esto necesitamos poder montar la partición raíz ya que en ella se encuentra /boot a menos que hayamos separado en particiones distintas (y en ese caso creo que no deberias serguir leyendo esta entrada!)

Bueno! Insertamos un CD LIVE en nuestra preciada lectora, montamos la particion que contenga /boot y ejecutamos:
# chroot /mnt/lugar-de-la-particion
Luego hacemos:
# grub
Y entraras en el shell de GRUB ahi especificamos la raiz del sistema (ojo que pueden llegar a no coincidir con las que listo aca!):
grub> root (hda0,2)
Los discos y particiones los mostrara presionando tab luego de estcribir root. Ahora solo hay que instalar!
grub> setup (hda0)
Con esto, le indicamos en que disco queremos que se instale el mbr. Listo ahora reiniciamos y deberia funcionar.

13/4/09

Mostrando los argumentos de los comandos

Para los que somos muy olvidadizos, escribir determinados comandos en el terminal, puede llegar a ser tedioso dado el número de argumentos posibles que algunas instrucciones permiten. Sin embargo, los desarrolladores de BASH han pensado también en nosotros. Veamos como poder recordar y mostrar esos argumentos...

Es tan fácil como escribir el comando seguido de un guion o doble guión medio (–) y pulsar dos veces la tecla del tabulador. Seguidamente se nos mostrará la lista de todos los argumentos que podamos mandar al comando!

Por ejemplo pueden probarlo con gcc o grep

Se ven al rato!

10/4/09

Cambiando algunos estilos de forma grafica

Para aquellos que no se animan meter mano en los archivos de configuración de Linux para estilizarlo (juaz! no se si esa palabra existe) un poco mas, existe una herramienta gráfica que nos permite cambiar con facilidad el comportamiento y la apariencia de la Terminal, Nano y Vim, su nombre es BashStyle-NG


Viene algunos estilos pre-definidos que pueden modificar como así también crear otros. Entre algunas cosas con la que podemos hacer es definir hasta 7 Alias, controlar el tipo y la cantidad de ordenes a recordar en el Historial, colocar un mensaje de bienvenida, cambiar el path de inicio y montones de opciones más.

Para aquellos usuarios de Ubuntu (aun no lo probe en debian) lo pueden descargar de aqui...

4/4/09

Limitar el uso de CPU por proceso

Bueno como lo prometi y dije tantas veces, uno mas de los post pedorros que van a ver por este blog. Esta vez vamos a aprender como limitar el uso de la CPU por parte de un proceso...

Cpulimit es la herramienta que nos permite hacer esto, administra el uso máximo que un proceso puede usar del procesador. Esto lo representa por un porcentaje.

Su función es limitar el uso del % que puede usar un proceso del CPU.

Para instalarlo, con un simple:
sudo apt-get install cpulimit
Las formas de limitar un proceso es por:
  1. Nombre del proceso
  2. pid
  3. path
Veamos algunos ejemplos:

Limitar al programa que no pueda usar mas del 50% del procesador:
cpulimit –e NOMBREAPLICACION –limit 50
Limitar al pid (por ej. 1234) que no pueda usar mas del 50% del procesador:
cpulimit -p 1234 -l 50
Limitar al programa representado con el path, que no pueda usar mas del 50% del procesador:
cpulimit -P /usr/bin/programa -l 50
Observacion: Esta herramienta reconoce los procesadores de doble nucleo con 200%