Reflexión
Hacks
Dicen que si la mente lo cree lo suficiente, se vuelve realidad. Luego entonces:
¿Por qué los locos no cambian la realidad si ellos sí creen en su locura?
¿Será porque la locura de los "cuerdos" es más fuerte que la de ellos como para ser modificado?
Permalink: http://mononeurona.org/users/entry/asarch/1574
Relax, you are at $HOME now...
Unix
Despues de estar todo el santo dia usando Windows, llego a la casa, prendo la chompu y leo las siguientes líneas:
asarch@hell
Thu Sep 18 19:38:04 CDT 2008
/home/asarch
[/dev/ttyp0:155]$ _
siento que vuelvo a ser yo mismo.
Gracias por existir.
Permalink: http://mononeurona.org/users/entry/asarch/1552
Veintij'inco Pe'jos
Humor
Está con madres esta serie de billetes:

Permalink: http://mononeurona.org/users/entry/asarch/1551
Montar particiones ext[2,3] en OpenBSD
Hacks
Descripción
Teniendo el siguiente esquema de particiones:
|XXX| | OpenBSD
+---+ - +
|XXX| | GNU/Linux
+---+ - +
en donde respectivamente:
||XXX|| | OpenBSD root (/)
++---++ - +
||XXX|| | OpenBSD swap
++---++ - +
||XXX|| | OpenBSD home (/home)
++---++ - +
++---++ - +
||XXX|| | GNU/Linux root (/)
++---++ - +
||XXX|| | GNU/Linux swap
++---++ - +
||XXX|| | GNU/Linux home (/home)
++---++ - +
Expresado en lenguaje cristiano:
Mi disco duro tiene solamente dos particiones, una primaria y una extendida. Dentro de la partición primara están tres particiones de OpenBSD, la partición root (/), su partición de intercambio (swap) y la partición home (/home).
Asímismo dentro de la partición extendida, está la partición root de GNU/Linux (/), su partición de intercambio (swap) y finalmente la partición home (/home).
Yo lo que quiero es que la partición root y la partición de GNU/Linux estén disponibles en OpenBSD para evitar duplicar datos (cof cof porno cof cof).
Procedimiento
Primero checamos que esté actualizada la tabla de las particiones de OpenBSD:
# Inside MBR partition 1: type A6 start 35037765 size 35021700
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: TOSHIBA MK1234GS
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 14593
total sectors: 234441648
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0
16 partitions:
# size offset fstype [fsize bsize cpg]
a: 27663930 42395535 4.2BSD 2048 16384 1
b: 4209030 35037765 swap
c: 234441648 0 unused 0 0
d: 3148740 39246795 4.2BSD 2048 16384 1
Aquí no vemos ninguna partición de Linux.
Checamos con el fdisk:
Disk: wd0 geometry: 14593/255/63 [234441648 Sectors]
Offset: 0 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
*0: A5 0 1 1 - 2180 254 63 [ 63: 35037702 ] FreeBSD
1: A6 2181 0 1 - 4360 254 63 [ 35037765: 35021700 ] OpenBSD
2: A9 4361 0 1 - 6540 254 63 [ 70059465: 35021700 ] NetBSD
3: 05 6541 0 1 - 14592 254 63 [ 105081165: 129355380 ] Extended DOS
Offset: 105081165 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
0: 83 6541 1 1 - 7849 254 63 [ 105081228: 21029022 ] Linux files*
1: 05 7850 0 1 - 8098 254 63 [ 126110250: 4000185 ] Extended DOS
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
Offset: 126110250 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
0: 82 7850 1 1 - 8098 254 63 [ 126110313: 4000122 ] Linux swap
1: 05 8099 0 1 - 14591 254 63 [ 130110435: 104310045 ] Extended DOS
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
Offset: 130110435 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
0: 83 8099 1 1 - 14591 254 63 [ 130110498: 104309982 ] Linux files*
1: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
Aquí si ya aparecen.
Si no sabes cual es el dispositivo de tu disco duro, lo puedes consultar con:
hw.disknames=wd0,cd0
Con esta información actualizamos la tabla de particiones de OpenBSD. Se va a iniciar una sesión del editor vi, ten mucho cuidado si no estás acostumbrado a usar este editor porque puedes borrar información importante de tus particiones
Si crees que la llegaste a “cajetear”, presiona inmediatosamente dijeran los médicos la tecla Esc unas dos o tres veces, dos puntos (“:”), la letra “q”, el símbolo “!” y Enter
para salirte sin guardar los cambios:
~
~
~
~
~
~
~
~
~
~
:q!
Continuando con la edición:
Para poder agregar las particiones de GNU/Linux usamos dos letras siguientes de las que se mostró la primera vez, así, a la letra “d” que representa la partición /home en OpenBSD le agregamos dos letras y por lo tanto “f” sería nuestra partición / de GNU/Linux y “g”sería nuestra partición /home de GNU/Linux.
Además, lo que está de azul y de rojo nos va a servir para poder actualizar la tabla de particiones.
La partición / de GNU/Linux:
-------------------------------------------------------------------------------
0: 83 6541 1 1 - 7849 254 63 [ 105081228: 21029022 ] Linux files*
La partición /home de GNU/Linux
-------------------------------------------------------------------------------
0: 83 8099 1 1 - 14591 254 63 [ 130110498: 104309982 ] Linux files*
Observen bien cómo se inserta la información:
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: TOSHIBA MK1234GS
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 14593
total sectors: 234441648
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0
16 partitions:
# size offset fstype [fsize bsize cpg]
a: 27663930 42395535 4.2BSD 2048 16384 1
b: 4209030 35037765 swap
c: 234441648 0 unused 0 0
d: 3148740 39246795 4.2BSD 2048 16384 1
f: 21029022 105081228 ext2fs
g: 104309982 130110498 ext2fs
# Notes:
# Up to 16 partitions are valid, named from 'a' to 'p'. Partition 'a' is
# your root filesystem, 'b' is your swap, and 'c' should cover your whole
# disk. Any other partition is free for any use. 'size' and 'offset' are
# in 512-byte blocks. fstype should be '4.2BSD', 'swap', or 'none' or some
# other values. fsize/bsize/cpg should typically be '2048 16384 16' for a
# 4.2BSD filesystem (or '512 4096 16' except on alpha, sun4, ...)
Puede tener dos ventanas del XTerm abiertas al mismo tiempo y copiar y pegar la información para evitar cometer errores.
El sistema de archivos que usa GNU/Linux, el ext3, en OpenBSD se le conoce como “ext2fs”, ya que el ext3 ofrece retro-compatibilidad con el ext2. Los demás campos no importan.
Guardamos el archivo y checamos de nuevo:
# Inside MBR partition 1: type A6 start 35037765 size 35021700
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: TOSHIBA MK1234GS
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 14593
total sectors: 234441648
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0
16 partitions:
# size offset fstype [fsize bsize cpg]
a: 27663930 42395535 4.2BSD 2048 16384 1
b: 4209030 35037765 swap
c: 234441648 0 unused 0 0
d: 3148740 39246795 4.2BSD 2048 16384 1
f: 21029022 105081228 ext2fs
g: 104309982 130110498 ext2fs
Ahora si, con toda la confianza del mundo podemos montar las particiones:
root@hell:# mount_ext2fs /dev/wd0g /mnt/linux/home
Checamos que se hayan montado correctamente:
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 13.0G 2.0G 10.3G 16% /
/dev/wd0d 1.5G 59.8M 1.3G 4% /home
/dev/wd0f 9.9G 7.0G 2.4G 74% /mnt/linux/root
/dev/wd0g 49.3G 1.8G 45.0G 4% /mnt/linux/home
Si quieres montarlos automáticamente en cada booteo:
/dev/wd0a / ffs rw,softdep 1 1
/dev/wd0d /home ffs rw,softdep,nodev,nosuid 1 2
/dev/wd0f /mnt/linux/root ext2fs rw,nosuid 0 0
/dev/wd0g /mnt/linux/home ext2fs rw,nosuid 0 0
Preguntas y respuestas
Pregunta: ¿Por qué apesar de que estoy usando una partición con ext3, lo puedo montar correctamente en GNU/Linux, al momento de montarlo en OpenBSD aparece el siguiente mensaje y además falla la operación?
mount_ext2fs: /dev/wd0g on /mnt: incorrect super block
Respuesta: Debido a las mamadas (digo, al final de cuentas terminan chingándoselos y entran al sistema) de SELinux (Security Enhanced Linux) hubo un cambio en la estructura del sistema de archivos ext3. Distribuciones como Fedora, Gentoo, Slackware entre otros, implementan esto.
Si en verdad te gustaría poder acceder a tu información de GNU/Linux desde tu OpenBSD, puedes usar el comando (respaldando previamente tu información) “ mke2fs -j” del disco de instalación de ArchLinux.
Permalink: http://mononeurona.org/users/entry/asarch/1537
Reto
Programacion
Modificar el programa de saidjose:
Superficie de un triangulo rectangulo
de tal manera que quede lo mas profesional posible: validación de datos, validación de entrada, que acepte argumentos a través de la linea de comandos:
# Calcula la superficie de un objeto de altura 10 y de base 3 al estilo BSD:
% calcular -a 10 -b 3
O al estilo GNU:
% calcular --altura=10 --base=3
O usando ambos estilos:
% calcular -a 10 --base=3
*SIN* usar ningún widget (GTK+, Motif, Qt, GNUStep, etc, etc).
Es decir, que no sea para el entorno gráfico sino para la consola.
Tip: En entornos BSD y GNU/Linux pueden usar la funcion getopt(3) incluído en la librería #include <unistd.h> para checar los argumentos de la función main(3).
Permalink: http://mononeurona.org/users/entry/asarch/1523
The Multiple Instances Bug
Hacks
Introducción
Yo lo llamo “The Multiple Instances Bug” a manera de broma, el cual consiste en lo siguiente:
- Usando el pdksh (“Public Domain Korn Shel”) abre tres ventanas del XTerm y teclea “echo Hello from #1” en la primer ventana, “echo Hello from #2” en la segunda y “echo Hello from #3” en la tercer ventana.
- Ahora ciérralos de forma aleatoria.
- Abre una cuarta ventana y trata de llamar todos esos comandos desde el historial y verás que solamente el historial de la última ventana se guardó ya que esta sobreescribió a las otras dos.
Esto no pasa con la versión oficial del Korn Shell, el ksh93 ni tampoco con la versión de MirBSD, el mksh.
COMPLEX_HISTORY e EASY_HISTORY
Esto no es broma para la gente de pdksh ya que en el siguiente archivo:
aparece este bug como una de las prioridades a corregir:
* history
There are two versions of the history code, COMPLEX_HISTORY and
EASY_HISTORY, which need to be merged. COMPLEX does at&t style history
where the history file is written after each command and checked when
ever looking through the history (in case another shell has added
something). EASY simply reads the history file at startup and writes
it before exiting.
* re-write the COMPLEX_HISTORY code so mmap() not needed (currently
can't be used on machines without mmap()).
* Add multiline knowledge to COMPLEX_HISTORY (see EASY_HISTORY
stuff).
* change COMPLEX_HISTORY code so concurrent history files are
controlled by an option (set -o history-concurrent?). Delete
the EASY_HISTORY code.
* bring history code up to POSIX standards (see POSIX description
of fc, etc.).
que explicado en el idioma de Cervantes:
Que es lo que esta ocacionando este “bug”.
La solución propuesta a este problema es modificar el código de COMPLEX_HISTORY de tal manera que prescinda (que no necesite) de la función mmap() ya que ésta no se encuentra disponible en todas las arquitecturas.
O, escribir un mmap() propio que emule esta función en donde no esté disponible.
Asi que si tienes un tiempecito, la comunidad del software libre te estará muy agradecido.
La página oficial del pdksh es la siguiente:
Por cierto, si estás pensando “implementar” código (robar) de otros proyectos, checa muy bien las cláusulas de la licencia por favor.
Permalink: http://mononeurona.org/users/entry/asarch/1514
Korn Shell Settings (actualizado para ksh93)
Hacks
La versión corregida y aumentada, lista para ser usada con el pkgsrc de NetBSD e incluso con GNU/Linux ya que es la misma versión del Korn Shell: el ksh93.
Esto va en ~/.profile:
case $SHELL in
*bash*) # GNU Bourne Shell
. $HOME/.bashrc
;;
*ksh*) # Korn Shell Settings
export ENV=$HOME/.kshrc
;;
esac
# Display the fortune cookie
fortune -a
y esto en ~/.kshrc:
# Enviroment vars
export EDITOR=vi
export FCEDIT=$EDITOR
export HISTEDIT=$EDITOR
export VISUAL=$EDITOR
# Each Korn Shell variant has its own history file
export HISTFILE=$HOME/.$(basename $SHELL)_history
# Locale settings
if [ $USER != "root" ]; then
export LANG=en_US.ISO8859-1
export LC_ALL=${LANG}
fi
# Set the editor command line style
set -o vi
# Notify about background processes
set -o notify
# Set the ls tyle
if [ $USER != "root" ]; then
alias ls='ls -FA'
fi
# Set the prompt
case $KSH_VERSION in
*MIRBSD*) # MirBSD Korn Shell
PS1='[${USER:=$(id -un)}'"@${HOSTNAME:=$(hostname -s)}:!]"
;;
*) # All the rest variants
PS1='
$(whoami)@$(hostname)
$(date)
$(pwd)
[$(tty):!]'
;;
esac
PS1=$PS1'$(if (( $(id -u) )); then print \$; else print \#; fi) '
Permalink: http://mononeurona.org/users/entry/asarch/1508
Reto
Hacks
¿Cómo le haces para cambiar la extensión de un grupo de archivos?
Obviamente no con el siguiente:
% mv *.sh *.txt
ni tampoco con el siguiente:
% find . -maxdepth 1 -type f -name '*.sh' -exec mv {} {}.txt \;
ya que quedarían muy feos al tener ahora la extensión '*.sh.txt'.
Permalink: http://mononeurona.org/users/entry/asarch/1507
Creación del disco de instalación de OpenBSD
Hacks
Estos son los pasos que se necesitan. Para una explicación detallada consulta:
A lo que te truje Chencha:
- Primero creamos el espacio de trabajo y nos situamos dentro:
% cd ./openbsd-installation-disc
- Descargamos el release completo:
- Le hacemos el hack para el proceso de instalación:
- Creamos la imágen de disco:
Y listo.
Permalink: http://mononeurona.org/users/entry/asarch/1506
C Shell Settings
Hacks
He aquí mis preferencias del C Shell:
# Enviroment Shell Vars
set filec
set histfile=$HOME/.csh_hist
set history=2048
set notify
set savehist=204
# Locale settings
setenv LANG en_US.ISO8859-1
setenv LC_ALL ${LANG}
qué contraste con las del Korn Shell, ya que este no cuenta con el editor de líneas de comandos e historial interactivo (poder acceder a el mediante las teclas de dirección), pero si un poderoso mecanismo de sustitución del historial.
O sea, un shell para verdaderos hackers (cof cof
cof cof).
Permalink: http://mononeurona.org/users/entry/asarch/1494










