Korn Shell Settings
2008-08-12 20:53:07-05
Hacks
He aquí el archivo de configuración del Korn Shell:
#~/.kshrc: Korn Shell Settings
# Enviroment vars
export EDITOR=vi
export FCEDIT=$EDITOR
export HISTEDIT=$EDITOR
export HISTFILE=$HOME/.ksh_hist
export HISTSIZE=2048
export VISUAL=$EDITOR
# 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 style
if [ $USER != "root" ]; then
alias ls='ls -AF'
fi
# Let's set the prompt
case $KSH_VERSION in
*PD\ KSH*) # pdksh
PS1='
$(whoami)@$(hostname)
$(date)
$(pwd)
[$(tty):!]'
;;
*) # All the rest variants
PS1='[${USER:=$(id -un)}'"@${HOSTNAME:=$(hostname -s)}:!]"
;;
esac
PS1=$PS1'$(if (( $(id -u) )); then print \$; else print \#; fi) '
# Enviroment vars
export EDITOR=vi
export FCEDIT=$EDITOR
export HISTEDIT=$EDITOR
export HISTFILE=$HOME/.ksh_hist
export HISTSIZE=2048
export VISUAL=$EDITOR
# 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 style
if [ $USER != "root" ]; then
alias ls='ls -AF'
fi
# Let's set the prompt
case $KSH_VERSION in
*PD\ KSH*) # pdksh
PS1='
$(whoami)@$(hostname)
$(date)
$(pwd)
[$(tty):!]'
;;
*) # All the rest variants
PS1='[${USER:=$(id -un)}'"@${HOSTNAME:=$(hostname -s)}:!]"
;;
esac
PS1=$PS1'$(if (( $(id -u) )); then print \$; else print \#; fi) '
La configuración para que en cada login se apliquen los cambios:
#~/.profile
# Korn Shell Settings
export ENV=$HOME/.kshrc
fortune -a
# Korn Shell Settings
export ENV=$HOME/.kshrc
fortune -a
Y listo.
Permalink: http://www.mononeurona.org/users/entry/asarch/1492
Hardcore “Got Milk?”
2008-07-20 18:55:04-05
Mujeres
Permalink: http://www.mononeurona.org/users/entry/asarch/1446
LyX
2008-07-20 18:52:44-05
Instalacion
LyX 1.4.5.1 del directorio /usr/pkgsrc/editors/lyx-qt:
LyX 1.4.5.1 del directorio /usr/pkgsrc/editors/lyx-qt:
LyX 1.4.5.1 del directorio /usr/pkgsrc/editors/lyx-qt:
Permalink: http://www.mononeurona.org/users/entry/asarch/1445
Kernel “combinado” de NetBSD (reloaded)
2008-07-20 18:06:57-05
Hacks
Introducción
La laptop que tengo tiene una tarjeta de red inalámbrica Intel PRO/Wireless 3945ABG así como tambien un procesador Intel Duo, que a según dicen tiene doble núcleo y que tambien es bueno para la virtualización “por hardware” del Xen.
El detalle es que con los kernels que trae por default el disco de instalación del NetBSD no puedo ambas cosas:
- GENERIC.MP <- Solamente puedo usar los dos procesadores sin conexión inalámbrica.
- GENERIC_LAPTOP <- Aquí si tengo conexión pero nada más puedo usar un sólo CPU.
El siguiente es un script para reducir los pasos de la compilación del kernel “combinado”.
En lugar de hacer:
- Tomamos una copia del kernel de SMP para el nuevo kernel:
[#] cp GENERIC.MP wanda
- Le agregamos las bondades del kernel para laptops:
[#] cat GENERIC_LAPTOP >> wanda
- Comentamos la siguiente directiva
[#] vi wanda
#include "arch/i386/conf/std.i386"
#include "arch/i386/conf/std.i386"
- Obtenemos las líneas de los errores:
[#] config wanda > wanda-errors.log 2>&1
...
wanda:25: already have options `INCLUDE_CONFIG_FILE=1'
wanda:29: duplicate maxusers parameter
wanda:33: already have options `I486_CPU=1'
wanda:34: already have options `I586_CPU=1'
wanda:35: already have options `I686_CPU=1'
wanda:37: already have makeoptions `CPUFLAGS=-march=i486 -mtune=pentiumpro'
wanda:42: already have options `VM86=1'
wanda:43: already have options `USER_LDT=1'
wanda:46: already have options `ENHANCED_SPEEDSTEP=1'
...
...
wanda:25: already have options `INCLUDE_CONFIG_FILE=1'
wanda:29: duplicate maxusers parameter
wanda:33: already have options `I486_CPU=1'
wanda:34: already have options `I586_CPU=1'
wanda:35: already have options `I686_CPU=1'
wanda:37: already have makeoptions `CPUFLAGS=-march=i486 -mtune=pentiumpro'
wanda:42: already have options `VM86=1'
wanda:43: already have options `USER_LDT=1'
wanda:46: already have options `ENHANCED_SPEEDSTEP=1'
...
- Aislamos el número de línea solamente:
[#] cat wanda-errors.log | sed 's/wanda://' | sed 's/: .*//' > wanda-lines.log
...
25
29
33
34
35
37
42
43
46
...
...
25
29
33
34
35
37
42
43
46
...
- Y comentamos todas esas líneas una por una a mano.
- Mezclamos ambos kernels:
[#] cat GENERIC.MP GENERIC_LAPTOP > wanda
- Corregimos los errores:
[#] preparar_kernel.sh wanda
- Creamos el directorio de compilación:
[#] config wanda
- Nos situamos dentro y compilamos:
[#] cd ../compile/urara
Si es que estamos en
/usr/src/sys/arch/i386/conf
[#] make depend && make
Y listo. Ahora Solamente:
- Renombramos el otro kernel:
[#] mv /netbsd /netbsd.old
- Y situamos nuestro nuevo kernel recien horneadito:
[#] mv netbsd /
- Y reiniciamos para probarlo.
Código fuente
Este es el pedazo de “maravilla”:
#!/bin/ksh
#-------------------------------------------------------------------------------
#
# preparar_kernel.sh: Script para comentar las lineas
# cuando se combinan dos kernels.
#
# Copyright (c) 2008, asarch.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of copyright holders nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#-------------------------------------------------------------------------------
#-----------------------------------------------------------
# Validacion de los argumentos del script
#-----------------------------------------------------------
#
if (( $# == 0 )); then
echo Forma de uso: $0 nombre_del_nuevo_kernel
exit 1
fi
#-----------------------------------------------------------
# Validacion del usuario
#-----------------------------------------------------------
#
if [[ $USER != "root" ]]; then
echo Necesitas ser el root.
exit 1
fi
#-----------------------------------------------------------
# Inicializacion de variables
#-----------------------------------------------------------
#
BASE_DIR="/tmp"
KERN_FILE=$1
ERR_LOG=$BASE_DIR"/"$KERN_FILE".log"
ERR_LINES=$BASE_DIR"/"$KERN_FILE"-err-lines.log"
#-----------------------------------------------------------
#
# Comentamos la siguiente linea
#
# include "arch/i386/conf/std.i386"
#
#-----------------------------------------------------------
#
ex - $KERN_FILE << EOS
/std.i386
s/include/#include/
p
w
EOS
#-----------------------------------------------------------
# Obtenemos los errores
#-----------------------------------------------------------
#
config $KERN_FILE > $ERR_LOG 2>&1
#-----------------------------------------------------------
# Verificamos que se haya podido crear el registro de errores
#-----------------------------------------------------------
#
if [[ ! -e $ERR_LOG ]]; then
echo No se pudo crear el registro de los errores: $ERR_LOG
exit 1
fi
#-----------------------------------------------------------
# Obtenemos las lineas de los errores
#-----------------------------------------------------------
#
SED_CMD="s/${KERN_FILE}://"
cat $ERR_LOG | sed $SED_CMD | sed 's/: .*//' > $ERR_LINES
#-----------------------------------------------------------
# Verificamos que se haya podido crear el registro de las lineas
#-----------------------------------------------------------
#
if [[ ! -e $ERR_LINES ]]; then
echo No se pudo crear el registro de las lineas: $ERR_LINES
exit 1
fi
#-----------------------------------------------------------
# Contamos el total de lineas a procesar
#-----------------------------------------------------------
#
TOTAL=$( wc -l < $ERR_LINES )
#-----------------------------------------------------------
# Verificamos que se hayan encontrado las lineas
#-----------------------------------------------------------
#
if (( $TOTAL == 0 )); then
echo No hay lineas por corregir
exit 1
fi
#-----------------------------------------------------------
# Un hack para que funcione
#-----------------------------------------------------------
#
let "TOTAL--"
I=1
#-----------------------------------------------------------
# Proceso principal
#-----------------------------------------------------------
#
while (( $I <= $TOTAL )); do
LINE=$( head -n $I < $ERR_LINES | tail -n 1 )
echo Editando la linea $LINE
ex - $KERN_FILE << EOS
$LINE
i
#
.
j
p
w
EOS
echo
let "I++"
done
#-------------------------------------------------------------------------------
#
# preparar_kernel.sh: Script para comentar las lineas
# cuando se combinan dos kernels.
#
# Copyright (c) 2008, asarch.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of copyright holders nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#-------------------------------------------------------------------------------
#-----------------------------------------------------------
# Validacion de los argumentos del script
#-----------------------------------------------------------
#
if (( $# == 0 )); then
echo Forma de uso: $0 nombre_del_nuevo_kernel
exit 1
fi
#-----------------------------------------------------------
# Validacion del usuario
#-----------------------------------------------------------
#
if [[ $USER != "root" ]]; then
echo Necesitas ser el root.
exit 1
fi
#-----------------------------------------------------------
# Inicializacion de variables
#-----------------------------------------------------------
#
BASE_DIR="/tmp"
KERN_FILE=$1
ERR_LOG=$BASE_DIR"/"$KERN_FILE".log"
ERR_LINES=$BASE_DIR"/"$KERN_FILE"-err-lines.log"
#-----------------------------------------------------------
#
# Comentamos la siguiente linea
#
# include "arch/i386/conf/std.i386"
#
#-----------------------------------------------------------
#
ex - $KERN_FILE << EOS
/std.i386
s/include/#include/
p
w
EOS
#-----------------------------------------------------------
# Obtenemos los errores
#-----------------------------------------------------------
#
config $KERN_FILE > $ERR_LOG 2>&1
#-----------------------------------------------------------
# Verificamos que se haya podido crear el registro de errores
#-----------------------------------------------------------
#
if [[ ! -e $ERR_LOG ]]; then
echo No se pudo crear el registro de los errores: $ERR_LOG
exit 1
fi
#-----------------------------------------------------------
# Obtenemos las lineas de los errores
#-----------------------------------------------------------
#
SED_CMD="s/${KERN_FILE}://"
cat $ERR_LOG | sed $SED_CMD | sed 's/: .*//' > $ERR_LINES
#-----------------------------------------------------------
# Verificamos que se haya podido crear el registro de las lineas
#-----------------------------------------------------------
#
if [[ ! -e $ERR_LINES ]]; then
echo No se pudo crear el registro de las lineas: $ERR_LINES
exit 1
fi
#-----------------------------------------------------------
# Contamos el total de lineas a procesar
#-----------------------------------------------------------
#
TOTAL=$( wc -l < $ERR_LINES )
#-----------------------------------------------------------
# Verificamos que se hayan encontrado las lineas
#-----------------------------------------------------------
#
if (( $TOTAL == 0 )); then
echo No hay lineas por corregir
exit 1
fi
#-----------------------------------------------------------
# Un hack para que funcione
#-----------------------------------------------------------
#
let "TOTAL--"
I=1
#-----------------------------------------------------------
# Proceso principal
#-----------------------------------------------------------
#
while (( $I <= $TOTAL )); do
LINE=$( head -n $I < $ERR_LINES | tail -n 1 )
echo Editando la linea $LINE
ex - $KERN_FILE << EOS
$LINE
i
#
.
j
p
w
EOS
echo
let "I++"
done
Si encuentras un error por favor repórtalo. Muchas gracias.
Permalink: http://www.mononeurona.org/users/entry/asarch/1444
Instalar una serie de paquetes en pkgsrc
2008-07-19 11:53:34-05
Hacks
Introducción
Este script lo hice debido a que a veces quería instalar todos los paquetes que conforman una serie de ellos y eran demasiados para hacerlos manualmente.
Por ejemplo, si buscamos todos los paquetes del reproductor de audio “XMMS”:
[#] find /usr/pkgsrc -type d -name 'xmms*'
/usr/pkgsrc/audio/xmms
/usr/pkgsrc/audio/xmms-alarm
/usr/pkgsrc/audio/xmms-arts
/usr/pkgsrc/audio/xmms-bezier
/usr/pkgsrc/audio/xmms-blursk
/usr/pkgsrc/audio/xmms-bump-scope
/usr/pkgsrc/audio/xmms-crossfade
/usr/pkgsrc/audio/xmms-dflowers
/usr/pkgsrc/audio/xmms-dscope
/usr/pkgsrc/audio/xmms-dspectogram
/usr/pkgsrc/audio/xmms-dspectral
/usr/pkgsrc/audio/xmms-esound
/usr/pkgsrc/audio/xmms-faad
/usr/pkgsrc/audio/xmms-flac
/usr/pkgsrc/audio/xmms-fmradio
/usr/pkgsrc/audio/xmms-funtimedancer
/usr/pkgsrc/audio/xmms-gdancer
/usr/pkgsrc/audio/xmms-infinity
/usr/pkgsrc/audio/xmms-iris
/usr/pkgsrc/audio/xmms-jakdaw
/usr/pkgsrc/audio/xmms-jess
/usr/pkgsrc/audio/xmms-liveice
/usr/pkgsrc/audio/xmms-mac
/usr/pkgsrc/audio/xmms-mad
/usr/pkgsrc/audio/xmms-madspin
/usr/pkgsrc/audio/xmms-meta-input
/usr/pkgsrc/audio/xmms-meta-timidity
/usr/pkgsrc/audio/xmms-modplug
/usr/pkgsrc/audio/xmms-musepack
/usr/pkgsrc/audio/xmms-neato
/usr/pkgsrc/audio/xmms-nebulus
/usr/pkgsrc/audio/xmms-osx
/usr/pkgsrc/audio/xmms-paranormal
/usr/pkgsrc/audio/xmms-sid
/usr/pkgsrc/audio/xmms-synaesthesia
/usr/pkgsrc/audio/xmms-tv-scope
/usr/pkgsrc/audio/xmms-vismsa
/usr/pkgsrc/audio/xmms-wma
/usr/pkgsrc/audio/xmmsctrl
/usr/pkgsrc/x11/xmms-osd
/usr/pkgsrc/audio/xmms
/usr/pkgsrc/audio/xmms-alarm
/usr/pkgsrc/audio/xmms-arts
/usr/pkgsrc/audio/xmms-bezier
/usr/pkgsrc/audio/xmms-blursk
/usr/pkgsrc/audio/xmms-bump-scope
/usr/pkgsrc/audio/xmms-crossfade
/usr/pkgsrc/audio/xmms-dflowers
/usr/pkgsrc/audio/xmms-dscope
/usr/pkgsrc/audio/xmms-dspectogram
/usr/pkgsrc/audio/xmms-dspectral
/usr/pkgsrc/audio/xmms-esound
/usr/pkgsrc/audio/xmms-faad
/usr/pkgsrc/audio/xmms-flac
/usr/pkgsrc/audio/xmms-fmradio
/usr/pkgsrc/audio/xmms-funtimedancer
/usr/pkgsrc/audio/xmms-gdancer
/usr/pkgsrc/audio/xmms-infinity
/usr/pkgsrc/audio/xmms-iris
/usr/pkgsrc/audio/xmms-jakdaw
/usr/pkgsrc/audio/xmms-jess
/usr/pkgsrc/audio/xmms-liveice
/usr/pkgsrc/audio/xmms-mac
/usr/pkgsrc/audio/xmms-mad
/usr/pkgsrc/audio/xmms-madspin
/usr/pkgsrc/audio/xmms-meta-input
/usr/pkgsrc/audio/xmms-meta-timidity
/usr/pkgsrc/audio/xmms-modplug
/usr/pkgsrc/audio/xmms-musepack
/usr/pkgsrc/audio/xmms-neato
/usr/pkgsrc/audio/xmms-nebulus
/usr/pkgsrc/audio/xmms-osx
/usr/pkgsrc/audio/xmms-paranormal
/usr/pkgsrc/audio/xmms-sid
/usr/pkgsrc/audio/xmms-synaesthesia
/usr/pkgsrc/audio/xmms-tv-scope
/usr/pkgsrc/audio/xmms-vismsa
/usr/pkgsrc/audio/xmms-wma
/usr/pkgsrc/audio/xmmsctrl
/usr/pkgsrc/x11/xmms-osd
Veremos que existen 40 paquetes disponibles.
Explicación del script
Para ejecutar el script, es necesario darle una mini expresión regular del nombre del paquete, en el caso de la serie de paquetes que conforman al XMMS la palabra en común de todos ellos es la palabra “xmms”.
[#] ./instalar_serie xmms
Cabe hacer mención que la expresión regular *DEBE DE ESTAR AL INICIO DEL NOMBRE DEL PAQUETE Y NO EN MEDIO O AL FINAL* ya que el script fallará en la búsqueda.
Por ejemplo, los siguientes paquetes tienen algo que ver con el XMMS pero ellos forman parte de otra serie de paquetes, por lo tanto el script no los encontrará ni mucho menos los instalará:
/usr/pkgsrc/audio/gkrellm-xmms
/usr/pkgsrc/audio/libvisual-xmms
/usr/pkgsrc/audio/py-xmms
/usr/pkgsrc/audio/libvisual-xmms
/usr/pkgsrc/audio/py-xmms
Debes de tomar esto encuenta a la hora de querer instalar una serie de paquetes.
Lo primero hace el script es crear un archivo de registro log con el resultado de la búsqueda en el directorio “/tmp” del sistema. En este caso “/tmp/xmms-packages.log”. La ventaja de esto es que al apagar o reiniciar la máquina el sistema automáticamente los borra y de esta forma no se acumulan los registros. La desventaja es que se crea una serie de archivos con permisos del root para que alguien pueda hacer de las suyas en el sistema. De cualquier forma, recuerda que la seguridad es sólo un estado mental.
Despues, el script lee una por una de las líneas de este archivo, obtiene la ruta de acceso, aisla el nombre del paquete para poder comprobar si el paquete ya ha sido instalada anteriormente por otro paquete como una depedencia de el.
Si el nombre del paquete no se encuentra en la base de datos de los paquetes instalados, se procede con su instalación.
De lo contrario se omite y continua con la otra línea.
Cada uno de los procesos de descarga, compilación, instalación y limpieza del proceso, quedan registrados en un log en el directorio “/tmp”.
Por ejemplo, si se instalar el paquete “/usr/pkgsrc/audio/xmms-alarm” se crea el log del proceso “/tmp/xmms-alarm.log”, de esta forma podrás estudiar la razón por la cual haya fallado el proceso en el caso remoto de un fallo.
El script no valida si el proceso falló o no. Haya fallado o haya salido todo bien la instalación de un determinado paquete, el script se sigue a la siguiente línea.
Es responsabilidad del administrador del sistema revisar cada uno de los logs por si hubo algún fallo.
Aunque esta tarea se puede resumir si al final de cada uno de los logs encuentras líneas parecidas a las siguientes:
...
===> Cleaning for libXi-1.1.3nb1
===> Cleaning for libXinerama-1.0.3
===> Cleaning for libXrandr-1.2.2
===> Cleaning for gtk2+-2.12.10
===> Cleaning for inputproto-1.4.3
===> Cleaning for kbproto-1.0.3
===> Cleaning for randrproto-1.2.1nb1
===> Cleaning for renderproto-0.9.3nb1
===> Cleaning for xextproto-7.0.3
===> Cleaning for xineramaproto-1.1.2
===> Cleaning for xproto-7.0.13
===> Dist cleaning for rhythmbox-0.10.1
...
===> Cleaning for libXi-1.1.3nb1
===> Cleaning for libXinerama-1.0.3
===> Cleaning for libXrandr-1.2.2
===> Cleaning for gtk2+-2.12.10
===> Cleaning for inputproto-1.4.3
===> Cleaning for kbproto-1.0.3
===> Cleaning for randrproto-1.2.1nb1
===> Cleaning for renderproto-0.9.3nb1
===> Cleaning for xextproto-7.0.3
===> Cleaning for xineramaproto-1.1.2
===> Cleaning for xproto-7.0.13
===> Dist cleaning for rhythmbox-0.10.1
...
O tambien volviendo a ejecutar el script y checas cual de todos ellos no se pudo instalar ya que no aparecerá en la base de datos de los paquetes y el script intentará instalarlo de nuevo.
Script
El script es el siguiente:
#!/bin/ksh
#-------------------------------------------------------------------------------
#
# instalar_serie.sh: Instala todos los paquetes de su regexp.
#
# Copyright (c) 2008, asarch.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of copyright holders nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#-------------------------------------------------------------------------------
#-----------------------------------------------------------
# Validacion del argumento del script
#-----------------------------------------------------------
#
if (( $# == 0 )); then
echo Forma de uso: $0 expresion_regular
exit 1
fi
#-----------------------------------------------------------
# Inicializacion de variables
#-----------------------------------------------------------
#
# La expresion regular del nombre de los paquetes
PKG_REGEXP=$1
# Los nombres y rutas de los archivos de apoyo
LOG_PATH="/tmp"
PKG_FOUNDS=$LOG_PATH"/"$PKG_REGEXP"-packages.log"
#-----------------------------------------------------------
# Procedimiento de busqueda
#-----------------------------------------------------------
#
echo Realizando busqueda...
echo
find /usr/pkgsrc -type d -name "$PKG_REGEXP*" > $PKG_FOUNDS 2>&1
#-----------------------------------------------------------
# Verificamos si se pudo guardar la busqueda
#-----------------------------------------------------------
#
if [[ ! -e $PKG_FOUNDS ]]; then
echo No se puede crear el log de la operacion: $PKG_FOUNDS
exit 1
fi
#-----------------------------------------------------------
# Validacion de los resultados
#-----------------------------------------------------------
#
TOTAL=$( wc -l < $PKG_FOUNDS )
if (( $TOTAL == 0 )); then
echo "No se encontraron paquetes."
exit 1
fi
#-----------------------------------------------------------
# Confirmacion de instalacion
#-----------------------------------------------------------
#
TOTAL=$( echo $TOTAL | sed 's/ //g' )
cat $PKG_FOUNDS
echo
echo Hay $TOTAL paquetes para instalar.
echo
echo Si desea cancelar presione Ctrl+C ahora.
echo
COUNTER=10
while (( $COUNTER >= 0 )); do
printf "\033[1A"
echo -n "Si desea continuar espere $COUNTER"
if (( $COUNTER == 1 )); then
echo " segundo. "
else
echo " segundos. "
fi
sleep 1
let "COUNTER--"
done
#-----------------------------------------------------------
# Procedimiento principal de instalacion
#-----------------------------------------------------------
#
I=1
echo
while (( $I <= $TOTAL)); do
PACKAGE=$( head -n $I < $PKG_FOUNDS | tail -n 1 )
PKG_NAME=$( basename $PACKAGE )
PKG_PATH=$( dirname $PACKAGE )
PKG_LOG=$LOG_PATH"/"$PKG_NAME".log"
# Obtenemos el porcentaje del proceso
let "PORCIENTO=(I*100)/TOTAL"
# Checamos si el paquete ya ha sido instalado
INSTALLED=$( pkg_info | grep $PKG_NAME )
if [[ $INSTALLED == "" ]]; then
echo "Instalado el paquete #$I ($PORCIENTO%): '$PACKAGE'..."
cd "$PACKAGE"
make package clean clean-depends distclean > $PKG_LOG 2>&1
else
echo "Omitiendo el paquete #$I ($PORCIENTO%): '$PACKAGE'."
fi
let "I++"
done
#-------------------------------------------------------------------------------
#
# instalar_serie.sh: Instala todos los paquetes de su regexp.
#
# Copyright (c) 2008, asarch.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of copyright holders nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#-------------------------------------------------------------------------------
#-----------------------------------------------------------
# Validacion del argumento del script
#-----------------------------------------------------------
#
if (( $# == 0 )); then
echo Forma de uso: $0 expresion_regular
exit 1
fi
#-----------------------------------------------------------
# Inicializacion de variables
#-----------------------------------------------------------
#
# La expresion regular del nombre de los paquetes
PKG_REGEXP=$1
# Los nombres y rutas de los archivos de apoyo
LOG_PATH="/tmp"
PKG_FOUNDS=$LOG_PATH"/"$PKG_REGEXP"-packages.log"
#-----------------------------------------------------------
# Procedimiento de busqueda
#-----------------------------------------------------------
#
echo Realizando busqueda...
echo
find /usr/pkgsrc -type d -name "$PKG_REGEXP*" > $PKG_FOUNDS 2>&1
#-----------------------------------------------------------
# Verificamos si se pudo guardar la busqueda
#-----------------------------------------------------------
#
if [[ ! -e $PKG_FOUNDS ]]; then
echo No se puede crear el log de la operacion: $PKG_FOUNDS
exit 1
fi
#-----------------------------------------------------------
# Validacion de los resultados
#-----------------------------------------------------------
#
TOTAL=$( wc -l < $PKG_FOUNDS )
if (( $TOTAL == 0 )); then
echo "No se encontraron paquetes."
exit 1
fi
#-----------------------------------------------------------
# Confirmacion de instalacion
#-----------------------------------------------------------
#
TOTAL=$( echo $TOTAL | sed 's/ //g' )
cat $PKG_FOUNDS
echo
echo Hay $TOTAL paquetes para instalar.
echo
echo Si desea cancelar presione Ctrl+C ahora.
echo
COUNTER=10
while (( $COUNTER >= 0 )); do
printf "\033[1A"
echo -n "Si desea continuar espere $COUNTER"
if (( $COUNTER == 1 )); then
echo " segundo. "
else
echo " segundos. "
fi
sleep 1
let "COUNTER--"
done
#-----------------------------------------------------------
# Procedimiento principal de instalacion
#-----------------------------------------------------------
#
I=1
echo
while (( $I <= $TOTAL)); do
PACKAGE=$( head -n $I < $PKG_FOUNDS | tail -n 1 )
PKG_NAME=$( basename $PACKAGE )
PKG_PATH=$( dirname $PACKAGE )
PKG_LOG=$LOG_PATH"/"$PKG_NAME".log"
# Obtenemos el porcentaje del proceso
let "PORCIENTO=(I*100)/TOTAL"
# Checamos si el paquete ya ha sido instalado
INSTALLED=$( pkg_info | grep $PKG_NAME )
if [[ $INSTALLED == "" ]]; then
echo "Instalado el paquete #$I ($PORCIENTO%): '$PACKAGE'..."
cd "$PACKAGE"
make package clean clean-depends distclean > $PKG_LOG 2>&1
else
echo "Omitiendo el paquete #$I ($PORCIENTO%): '$PACKAGE'."
fi
let "I++"
done
Cualquier cosa que llegase a fallar, reportalo inmediatamente.
Ejemplo
Despues de haber instalado el meta-paquete “/usr/pkgsrc/meta-pkgs/xfce4”, le indicamos al script que instale el resto de los paquetes de la serie:
[#] ./instalar_serie.sh xfce
Realizando busqueda...
/usr/pkgsrc/audio/xfce4-mixer
/usr/pkgsrc/audio/xfce4-xmms-plugin
/usr/pkgsrc/devel/xfce4-dev-tools
/usr/pkgsrc/editors/xfce4-mousepad
/usr/pkgsrc/graphics/xfce4-icon-theme
/usr/pkgsrc/meta-pkgs/xfce4
/usr/pkgsrc/meta-pkgs/xfce4-extras
/usr/pkgsrc/misc/xfce4-weather-plugin
/usr/pkgsrc/multimedia/xfce4-mpc-plugin
/usr/pkgsrc/net/xfce4-wavelan-plugin
/usr/pkgsrc/print/xfce4-print
/usr/pkgsrc/sysutils/xfce4-appfinder
/usr/pkgsrc/sysutils/xfce4-battery-plugin
/usr/pkgsrc/sysutils/xfce4-cpugraph-plugin
/usr/pkgsrc/sysutils/xfce4-diskperf-plugin
/usr/pkgsrc/sysutils/xfce4-fsguard-plugin
/usr/pkgsrc/sysutils/xfce4-genmon-plugin
/usr/pkgsrc/sysutils/xfce4-netload-plugin
/usr/pkgsrc/sysutils/xfce4-quicklauncher-plugin
/usr/pkgsrc/sysutils/xfce4-systemload-plugin
/usr/pkgsrc/sysutils/xfce4-thunar
/usr/pkgsrc/sysutils/xfce4-xarchiver
/usr/pkgsrc/sysutils/xfce4-xkb-plugin
/usr/pkgsrc/textproc/xfce4-dict-plugin
/usr/pkgsrc/time/xfce4-datetime-plugin
/usr/pkgsrc/time/xfce4-orage
/usr/pkgsrc/time/xfce4-timer-plugin
/usr/pkgsrc/wm/xfce4-wm
/usr/pkgsrc/wm/xfce4-wm-themes
/usr/pkgsrc/x11/xfce3
/usr/pkgsrc/x11/xfce4-clipman-plugin
/usr/pkgsrc/x11/xfce4-desktop
/usr/pkgsrc/x11/xfce4-exo
/usr/pkgsrc/x11/xfce4-eyes-plugin
/usr/pkgsrc/x11/xfce4-gtk2-engine
/usr/pkgsrc/x11/xfce4-mcs-manager
/usr/pkgsrc/x11/xfce4-mcs-plugins
/usr/pkgsrc/x11/xfce4-notes-plugin
/usr/pkgsrc/x11/xfce4-panel
/usr/pkgsrc/x11/xfce4-places-plugin
/usr/pkgsrc/x11/xfce4-screenshooter-plugin
/usr/pkgsrc/x11/xfce4-session
/usr/pkgsrc/x11/xfce4-terminal
/usr/pkgsrc/x11/xfce4-utils
Hay 44 paquetes para instalar.
Si desea cancelar presione Ctrl+C ahora.
Si desea continuar espere 0 segundos.
Omitiendo el paquete #1 (2%): '/usr/pkgsrc/audio/xfce4-mixer'.
Instalado el paquete #2 (4%): '/usr/pkgsrc/audio/xfce4-xmms-plugin'...
Omitiendo el paquete #3 (6%): '/usr/pkgsrc/devel/xfce4-dev-tools'.
Omitiendo el paquete #4 (9%): '/usr/pkgsrc/editors/xfce4-mousepad'.
Omitiendo el paquete #5 (11%): '/usr/pkgsrc/graphics/xfce4-icon-theme'.
Omitiendo el paquete #6 (13%): '/usr/pkgsrc/meta-pkgs/xfce4'.
Instalado el paquete #7 (15%): '/usr/pkgsrc/meta-pkgs/xfce4-extras'...
Omitiendo el paquete #8 (18%): '/usr/pkgsrc/misc/xfce4-weather-plugin'.
Omitiendo el paquete #9 (20%): '/usr/pkgsrc/multimedia/xfce4-mpc-plugin'.
Omitiendo el paquete #10 (22%): '/usr/pkgsrc/net/xfce4-wavelan-plugin'.
Omitiendo el paquete #11 (25%): '/usr/pkgsrc/print/xfce4-print'.
Omitiendo el paquete #12 (27%): '/usr/pkgsrc/sysutils/xfce4-appfinder'.
Omitiendo el paquete #13 (29%): '/usr/pkgsrc/sysutils/xfce4-battery-plugin'.
Omitiendo el paquete #14 (31%): '/usr/pkgsrc/sysutils/xfce4-cpugraph-plugin'.
Omitiendo el paquete #15 (34%): '/usr/pkgsrc/sysutils/xfce4-diskperf-plugin'.
Omitiendo el paquete #16 (36%): '/usr/pkgsrc/sysutils/xfce4-fsguard-plugin'.
Omitiendo el paquete #17 (38%): '/usr/pkgsrc/sysutils/xfce4-genmon-plugin'.
Omitiendo el paquete #18 (40%): '/usr/pkgsrc/sysutils/xfce4-netload-plugin'.
Omitiendo el paquete #19 (43%): '/usr/pkgsrc/sysutils/xfce4-quicklauncher-plugin'.
Omitiendo el paquete #20 (45%): '/usr/pkgsrc/sysutils/xfce4-systemload-plugin'.
Omitiendo el paquete #21 (47%): '/usr/pkgsrc/sysutils/xfce4-thunar'.
Omitiendo el paquete #22 (50%): '/usr/pkgsrc/sysutils/xfce4-xarchiver'.
Omitiendo el paquete #23 (52%): '/usr/pkgsrc/sysutils/xfce4-xkb-plugin'.
Omitiendo el paquete #24 (54%): '/usr/pkgsrc/textproc/xfce4-dict-plugin'.
Omitiendo el paquete #25 (56%): '/usr/pkgsrc/time/xfce4-datetime-plugin'.
Omitiendo el paquete #26 (59%): '/usr/pkgsrc/time/xfce4-orage'.
Omitiendo el paquete #27 (61%): '/usr/pkgsrc/time/xfce4-timer-plugin'.
Omitiendo el paquete #28 (63%): '/usr/pkgsrc/wm/xfce4-wm'.
Omitiendo el paquete #29 (65%): '/usr/pkgsrc/wm/xfce4-wm-themes'.
Instalado el paquete #30 (68%): '/usr/pkgsrc/x11/xfce3'...
Omitiendo el paquete #31 (70%): '/usr/pkgsrc/x11/xfce4-clipman-plugin'.
Omitiendo el paquete #32 (72%): '/usr/pkgsrc/x11/xfce4-desktop'.
Omitiendo el paquete #33 (75%): '/usr/pkgsrc/x11/xfce4-exo'.
Omitiendo el paquete #34 (77%): '/usr/pkgsrc/x11/xfce4-eyes-plugin'.
Omitiendo el paquete #35 (79%): '/usr/pkgsrc/x11/xfce4-gtk2-engine'.
Omitiendo el paquete #36 (81%): '/usr/pkgsrc/x11/xfce4-mcs-manager'.
Omitiendo el paquete #37 (84%): '/usr/pkgsrc/x11/xfce4-mcs-plugins'.
Omitiendo el paquete #38 (86%): '/usr/pkgsrc/x11/xfce4-notes-plugin'.
Omitiendo el paquete #39 (88%): '/usr/pkgsrc/x11/xfce4-panel'.
Omitiendo el paquete #40 (90%): '/usr/pkgsrc/x11/xfce4-places-plugin'.
Omitiendo el paquete #41 (93%): '/usr/pkgsrc/x11/xfce4-screenshooter-plugin'.
Omitiendo el paquete #42 (95%): '/usr/pkgsrc/x11/xfce4-session'.
Omitiendo el paquete #43 (97%): '/usr/pkgsrc/x11/xfce4-terminal'.
Omitiendo el paquete #44 (100%): '/usr/pkgsrc/x11/xfce4-utils'.
Realizando busqueda...
/usr/pkgsrc/audio/xfce4-mixer
/usr/pkgsrc/audio/xfce4-xmms-plugin
/usr/pkgsrc/devel/xfce4-dev-tools
/usr/pkgsrc/editors/xfce4-mousepad
/usr/pkgsrc/graphics/xfce4-icon-theme
/usr/pkgsrc/meta-pkgs/xfce4
/usr/pkgsrc/meta-pkgs/xfce4-extras
/usr/pkgsrc/misc/xfce4-weather-plugin
/usr/pkgsrc/multimedia/xfce4-mpc-plugin
/usr/pkgsrc/net/xfce4-wavelan-plugin
/usr/pkgsrc/print/xfce4-print
/usr/pkgsrc/sysutils/xfce4-appfinder
/usr/pkgsrc/sysutils/xfce4-battery-plugin
/usr/pkgsrc/sysutils/xfce4-cpugraph-plugin
/usr/pkgsrc/sysutils/xfce4-diskperf-plugin
/usr/pkgsrc/sysutils/xfce4-fsguard-plugin
/usr/pkgsrc/sysutils/xfce4-genmon-plugin
/usr/pkgsrc/sysutils/xfce4-netload-plugin
/usr/pkgsrc/sysutils/xfce4-quicklauncher-plugin
/usr/pkgsrc/sysutils/xfce4-systemload-plugin
/usr/pkgsrc/sysutils/xfce4-thunar
/usr/pkgsrc/sysutils/xfce4-xarchiver
/usr/pkgsrc/sysutils/xfce4-xkb-plugin
/usr/pkgsrc/textproc/xfce4-dict-plugin
/usr/pkgsrc/time/xfce4-datetime-plugin
/usr/pkgsrc/time/xfce4-orage
/usr/pkgsrc/time/xfce4-timer-plugin
/usr/pkgsrc/wm/xfce4-wm
/usr/pkgsrc/wm/xfce4-wm-themes
/usr/pkgsrc/x11/xfce3
/usr/pkgsrc/x11/xfce4-clipman-plugin
/usr/pkgsrc/x11/xfce4-desktop
/usr/pkgsrc/x11/xfce4-exo
/usr/pkgsrc/x11/xfce4-eyes-plugin
/usr/pkgsrc/x11/xfce4-gtk2-engine
/usr/pkgsrc/x11/xfce4-mcs-manager
/usr/pkgsrc/x11/xfce4-mcs-plugins
/usr/pkgsrc/x11/xfce4-notes-plugin
/usr/pkgsrc/x11/xfce4-panel
/usr/pkgsrc/x11/xfce4-places-plugin
/usr/pkgsrc/x11/xfce4-screenshooter-plugin
/usr/pkgsrc/x11/xfce4-session
/usr/pkgsrc/x11/xfce4-terminal
/usr/pkgsrc/x11/xfce4-utils
Hay 44 paquetes para instalar.
Si desea cancelar presione Ctrl+C ahora.
Si desea continuar espere 0 segundos.
Omitiendo el paquete #1 (2%): '/usr/pkgsrc/audio/xfce4-mixer'.
Instalado el paquete #2 (4%): '/usr/pkgsrc/audio/xfce4-xmms-plugin'...
Omitiendo el paquete #3 (6%): '/usr/pkgsrc/devel/xfce4-dev-tools'.
Omitiendo el paquete #4 (9%): '/usr/pkgsrc/editors/xfce4-mousepad'.
Omitiendo el paquete #5 (11%): '/usr/pkgsrc/graphics/xfce4-icon-theme'.
Omitiendo el paquete #6 (13%): '/usr/pkgsrc/meta-pkgs/xfce4'.
Instalado el paquete #7 (15%): '/usr/pkgsrc/meta-pkgs/xfce4-extras'...
Omitiendo el paquete #8 (18%): '/usr/pkgsrc/misc/xfce4-weather-plugin'.
Omitiendo el paquete #9 (20%): '/usr/pkgsrc/multimedia/xfce4-mpc-plugin'.
Omitiendo el paquete #10 (22%): '/usr/pkgsrc/net/xfce4-wavelan-plugin'.
Omitiendo el paquete #11 (25%): '/usr/pkgsrc/print/xfce4-print'.
Omitiendo el paquete #12 (27%): '/usr/pkgsrc/sysutils/xfce4-appfinder'.
Omitiendo el paquete #13 (29%): '/usr/pkgsrc/sysutils/xfce4-battery-plugin'.
Omitiendo el paquete #14 (31%): '/usr/pkgsrc/sysutils/xfce4-cpugraph-plugin'.
Omitiendo el paquete #15 (34%): '/usr/pkgsrc/sysutils/xfce4-diskperf-plugin'.
Omitiendo el paquete #16 (36%): '/usr/pkgsrc/sysutils/xfce4-fsguard-plugin'.
Omitiendo el paquete #17 (38%): '/usr/pkgsrc/sysutils/xfce4-genmon-plugin'.
Omitiendo el paquete #18 (40%): '/usr/pkgsrc/sysutils/xfce4-netload-plugin'.
Omitiendo el paquete #19 (43%): '/usr/pkgsrc/sysutils/xfce4-quicklauncher-plugin'.
Omitiendo el paquete #20 (45%): '/usr/pkgsrc/sysutils/xfce4-systemload-plugin'.
Omitiendo el paquete #21 (47%): '/usr/pkgsrc/sysutils/xfce4-thunar'.
Omitiendo el paquete #22 (50%): '/usr/pkgsrc/sysutils/xfce4-xarchiver'.
Omitiendo el paquete #23 (52%): '/usr/pkgsrc/sysutils/xfce4-xkb-plugin'.
Omitiendo el paquete #24 (54%): '/usr/pkgsrc/textproc/xfce4-dict-plugin'.
Omitiendo el paquete #25 (56%): '/usr/pkgsrc/time/xfce4-datetime-plugin'.
Omitiendo el paquete #26 (59%): '/usr/pkgsrc/time/xfce4-orage'.
Omitiendo el paquete #27 (61%): '/usr/pkgsrc/time/xfce4-timer-plugin'.
Omitiendo el paquete #28 (63%): '/usr/pkgsrc/wm/xfce4-wm'.
Omitiendo el paquete #29 (65%): '/usr/pkgsrc/wm/xfce4-wm-themes'.
Instalado el paquete #30 (68%): '/usr/pkgsrc/x11/xfce3'...
Omitiendo el paquete #31 (70%): '/usr/pkgsrc/x11/xfce4-clipman-plugin'.
Omitiendo el paquete #32 (72%): '/usr/pkgsrc/x11/xfce4-desktop'.
Omitiendo el paquete #33 (75%): '/usr/pkgsrc/x11/xfce4-exo'.
Omitiendo el paquete #34 (77%): '/usr/pkgsrc/x11/xfce4-eyes-plugin'.
Omitiendo el paquete #35 (79%): '/usr/pkgsrc/x11/xfce4-gtk2-engine'.
Omitiendo el paquete #36 (81%): '/usr/pkgsrc/x11/xfce4-mcs-manager'.
Omitiendo el paquete #37 (84%): '/usr/pkgsrc/x11/xfce4-mcs-plugins'.
Omitiendo el paquete #38 (86%): '/usr/pkgsrc/x11/xfce4-notes-plugin'.
Omitiendo el paquete #39 (88%): '/usr/pkgsrc/x11/xfce4-panel'.
Omitiendo el paquete #40 (90%): '/usr/pkgsrc/x11/xfce4-places-plugin'.
Omitiendo el paquete #41 (93%): '/usr/pkgsrc/x11/xfce4-screenshooter-plugin'.
Omitiendo el paquete #42 (95%): '/usr/pkgsrc/x11/xfce4-session'.
Omitiendo el paquete #43 (97%): '/usr/pkgsrc/x11/xfce4-terminal'.
Omitiendo el paquete #44 (100%): '/usr/pkgsrc/x11/xfce4-utils'.
A pesar de que eran muchos los paquetes, no todos ellos fueron procesados, de esta manera no solamente no sobrecargamos al procesador sino tambien reducimos el trabajo del disco duro.
Recuerda, si encuentras un error por favor repórtalo inmediatamente. Muchas gracias.
Permalink: http://www.mononeurona.org/users/entry/asarch/1442
¿Se imaginan cuando sea grande?
2008-07-19 10:47:14-05
General
Si así es de chico ¿cómo será cuando crezca este chamaco?
Mision Impossible:
Besame Mucho:
Más videos:
http://www.youtube.com/watch?v=5IXa2pNGVj8
Mision Impossible:
Besame Mucho:
Más videos:
http://www.youtube.com/watch?v=5IXa2pNGVj8
Permalink: http://www.mononeurona.org/users/entry/asarch/1441
Korn Shell Settings
2008-07-18 20:30:16-05
Hacks
Este es mi ~/.kshrc:
Y esto es lo que tengo en ~/.profile:
Ejemplo de mi prompt:
# ~/.ksrch: Korn Shell Settings
#
# Variables de entorno del shell
export EDITOR=vi
export FCEDIT=$EDITOR
export HISTEDIT=$EDITOR
export HISTFILE=~/.ksh_history
export HISTSIZE=1024
export VISUAL=$EDITOR
# A la cuenta del root no le gusta los locales
if [ $USER != "root" ]; then
#export LANG=en_US.UTF-8
export LANG=en_US.ISO8859-1
export LC_ALL=$LANG
fi
# Usamos el estilo de vi para la linea de comandos
set -o vi
# El estilo del commando ls
if [ $USER != "root" ]; then
alias ls='ls -AF'
fi
# El estilo del prompt
export PS1='
$(whoami)@$(hostname)
$(date)
$(pwd)
[$(tty):!]# '
# Otras rutas de acceso
export PATH=$PATH:
#
# Variables de entorno del shell
export EDITOR=vi
export FCEDIT=$EDITOR
export HISTEDIT=$EDITOR
export HISTFILE=~/.ksh_history
export HISTSIZE=1024
export VISUAL=$EDITOR
# A la cuenta del root no le gusta los locales
if [ $USER != "root" ]; then
#export LANG=en_US.UTF-8
export LANG=en_US.ISO8859-1
export LC_ALL=$LANG
fi
# Usamos el estilo de vi para la linea de comandos
set -o vi
# El estilo del commando ls
if [ $USER != "root" ]; then
alias ls='ls -AF'
fi
# El estilo del prompt
export PS1='
$(whoami)@$(hostname)
$(date)
$(pwd)
[$(tty):!]# '
# Otras rutas de acceso
export PATH=$PATH:
Y esto es lo que tengo en ~/.profile:
export ENV=~/.kshrc
Ejemplo de mi prompt:
asarch@hell
Fri Jul 18 20:28:12 CDT 2008
/usr/pkgsrc/emulators/wine
[/dev/ttyp2:1035]$
Fri Jul 18 20:28:12 CDT 2008
/usr/pkgsrc/emulators/wine
[/dev/ttyp2:1035]$
Permalink: http://www.mononeurona.org/users/entry/asarch/1440
El despertar del Dæmonio
2008-07-18 20:09:53-05
Hacks
Desde que me inicié en esto de Unix (como filosofía y no como la marca registrada UNIX®), el editor vi siempre ha sido para mi uno de los grandes y fascinantes enigmas .
No entendía el por qué de su naturaleza (un tanto chocante para el iniciado), sus modos, sus variantes, sus clones, las diferencias entre ellos, sus licencias, el por qué de tantos de ellos, etc., y sobre todo, la médula en la que se centra su edición y su naturaleza: el editor ex.
Para tratar de comprender mejor esta mantra me compré el libro “Learning the vi editor” junto con su versión de bolsillo de Arnold Robins, me leí de cabo a rabo (más o menos) la ayuda en línea del vim, la ayuda en línea de su otro clón: el Elvis (el vi oficial de los slackers y de donde se inspiró Keith Bostic para hacer el nvi, el "New VI", el vi *OFICIAL* de los *BSD), el man page del nvi de los BSD, el comando “:visuage” del nvi asi como tambien el comando “:exusage” y seguía sin poder comprender.
En fin, todo lo relacionado con vi/ex (y por lo ende, todo lo que sea relacionando con el editor estándar de Unix: el editor ed).
Hubo incluso un tiempo en que decidí engañarme y usar el otro mantra de Unix (que en realidad no nació en Unix sino en una PDP-10 que usaba el sistema operativo TOPS-10 y nació en Unix por la frustación de no poder asimilar el mantra de vi. Por eso me atrevo a decir que un usuario de Emacs es un usuario fracasado de vi en potencia. Si tan solo los usuarios fracasados del editor vi pudieran contarse con las... !momento! !ya se puede: vi vs emacs!), el editor Emacs y olvidarme de vi como aquél cuyo amor imposible hace que se olvide de la mujer que tanto quiso pero que nunca le pudo o hubo manera de entregarle todo el amor que sentía por ella.
Incluso imprimí todo sus manuales porque tenía las esperanzas falsas de que en este mantra finalmente iba a encontrar mi felicidad hasta que una noche cansado de hacer tantas “muecas” con las manos por presionar las teclas del “método abreviado” tan mamones que tiene este editor decidí volver derrotado una vez más para ver si en esta ocasión podía conquistar el amor de vi/ex de una vez por todas.
Todas las noches leía con vehemencia el manual del editor Sam, la versión oficial y gráfica del editor ed para el que iría ser el sucesor de Unix pero por falta de tiempo no lo fue (jubilaron a los desarrolladores): el sistema operativo Plan 9, pero no me cabía en la cabeza cómo es que alguien pudiera siquiera preferir un editor de “líneas” a un editor normal, hice miles de anotaciones, leía y leía sin comprender hasta que un día...
Suponiendo que vas a escribir un sencillo programa en C:
Pero suponiendo que por algún motivo ya no vamos querer la salida estándar (“stdout”) para mostrar el saludo sino la salida estándar de error (“stderr”).
He aqui el meollo de vi/ex y ed:
Con un editor normal habriamos que presionar la tecla flecha abajo unas cinco veces y presionar la tecla flecha derecha unas 10 veces, dependendiendo claro si habriamos ocupado el shortcut de Ctrl+Flecha derecha, para saltarnos palabra por palabra hasta llegar al lugar del reemplazo.
Lo primero que tenemos que hacer con ed es “seleccionar” la linea que vamos a editar y eso lo conseguimos con
Segun Arnold Robins hay básicamente tres formas de poder seleccionar las líneas (digo, despues de todo ex y ed son “editores de líneas”):
Viéndolo gráficamente:
Con el comando “/printf” lo que hacemos es seleccionar la línea número 6, que es básicamente:
Despues de haber seleccionado la línea que buscamos le vamos a indicar que en esa línea realice una sustitución de texto, para eso usamos el siguiente comando:
Que es básiamente:
Si queremos comprobar que se haya realizado dicha sustitución o comprobar que se haya efectuado en el lugar que indicado, imprimimos el contenido de la dirección actual con el comando “p”:
Y vemos que satisfactoriamente el cambio se ha realizado.
Guardamos el archivo:
Compilamos:
Y ejecutamos:
Y ¡listo! Esta es la manera, expresado de la manera más simple, en la que ed/ex o cualquier otro editor de líneas operan.
Lo que hace muy poderoso a un editor de líneas es la posibilidad de poder usar las expresiones regulares (esas todavía me hacen falta por comprender) como por ejemplo, del libro de Arnold Robins:
Tenemos la siguiente base de datos:
Y queremos cambiar el orden de los nombres:
Sólo con teclear el siguiente poderoso comando con la siguiente poderosa expresión regular:
No entendía el por qué de su naturaleza (un tanto chocante para el iniciado), sus modos, sus variantes, sus clones, las diferencias entre ellos, sus licencias, el por qué de tantos de ellos, etc., y sobre todo, la médula en la que se centra su edición y su naturaleza: el editor ex.
Para tratar de comprender mejor esta mantra me compré el libro “Learning the vi editor” junto con su versión de bolsillo de Arnold Robins, me leí de cabo a rabo (más o menos) la ayuda en línea del vim, la ayuda en línea de su otro clón: el Elvis (el vi oficial de los slackers y de donde se inspiró Keith Bostic para hacer el nvi, el "New VI", el vi *OFICIAL* de los *BSD), el man page del nvi de los BSD, el comando “:visuage” del nvi asi como tambien el comando “:exusage” y seguía sin poder comprender.
En fin, todo lo relacionado con vi/ex (y por lo ende, todo lo que sea relacionando con el editor estándar de Unix: el editor ed).
“...y al buscar, en el aliento de otras bocas, el perfume que engañara mis tristezas...”.
— Canción popular, Falsa.
— Canción popular, Falsa.
Hubo incluso un tiempo en que decidí engañarme y usar el otro mantra de Unix (que en realidad no nació en Unix sino en una PDP-10 que usaba el sistema operativo TOPS-10 y nació en Unix por la frustación de no poder asimilar el mantra de vi. Por eso me atrevo a decir que un usuario de Emacs es un usuario fracasado de vi en potencia. Si tan solo los usuarios fracasados del editor vi pudieran contarse con las... !momento! !ya se puede: vi vs emacs!), el editor Emacs y olvidarme de vi como aquél cuyo amor imposible hace que se olvide de la mujer que tanto quiso pero que nunca le pudo o hubo manera de entregarle todo el amor que sentía por ella.
Incluso imprimí todo sus manuales porque tenía las esperanzas falsas de que en este mantra finalmente iba a encontrar mi felicidad hasta que una noche cansado de hacer tantas “muecas” con las manos por presionar las teclas del “método abreviado” tan mamones que tiene este editor decidí volver derrotado una vez más para ver si en esta ocasión podía conquistar el amor de vi/ex de una vez por todas.
Todas las noches leía con vehemencia el manual del editor Sam, la versión oficial y gráfica del editor ed para el que iría ser el sucesor de Unix pero por falta de tiempo no lo fue (jubilaron a los desarrolladores): el sistema operativo Plan 9, pero no me cabía en la cabeza cómo es que alguien pudiera siquiera preferir un editor de “líneas” a un editor normal, hice miles de anotaciones, leía y leía sin comprender hasta que un día...
Suponiendo que vas a escribir un sencillo programa en C:
- Abres una ventana del emulador de terminal y tecleas:
[$] ed
y te aparece lo siguiente:
¡Nada porque aún no hay nada escrito!
- Para empezar a escribir el código fuente es necesario decirle a ed que vamos a agregar texto, para eso usamos el comado “a” (del inglés “append”, ¡d'oh!):
a
- Y empezamos a hackear:
#include
main (int argc, char* argv[])
{
fprintf (stdout, "Hello, world!\n");
return (EXIT_SUCCESS);
}
main (int argc, char* argv[])
{
fprintf (stdout, "Hello, world!\n");
return (EXIT_SUCCESS);
}
- Ahora vamos a detener la inserción de texto para poder guardar el archivo:
.
por cierto, es un sólo punto (“.”).
- Guardamos con el comando “w” (“write”) más el nombre del archivo:
w main.c
116
116
El número que aparece enseguida es el total de bytes que ed guardó en el disco.
- Compilamos:
[$] gcc -o saludo main.c
main.c: In function 'main':
main.c:6: error: 'EXIT_SUCCESS' undeclared (first use in this function)
main.c:6: error: (Each undeclared identifier is reported only once
main.c:6: error: for each function it appears in.)
main.c: In function 'main':
main.c:6: error: 'EXIT_SUCCESS' undeclared (first use in this function)
main.c:6: error: (Each undeclared identifier is reported only once
main.c:6: error: for each function it appears in.)
Y vemos con tristeza que por las prisas nos hemos olvidado de agregar la cabecera estándar “stdlib.h” para el “EXIT_SUCCESS”.
- Ahora editamos el archivo:
[$] ed main.c
- Y le inidicamos que en la línea número 1 le vamos a agregar texto:
1a
- y corregimos:
#include
- Detenemos la inserción de texto:
.
Recuerda, es un sólo punto (“.”).
- Compilamos y probamos:
[$] gcc -o saludo main.c
[$] ./saludo
Hello, world!
[$] ./saludo
Hello, world!
Pero suponiendo que por algún motivo ya no vamos querer la salida estándar (“stdout”) para mostrar el saludo sino la salida estándar de error (“stderr”).
He aqui el meollo de vi/ex y ed:
Con un editor normal habriamos que presionar la tecla flecha abajo unas cinco veces y presionar la tecla flecha derecha unas 10 veces, dependendiendo claro si habriamos ocupado el shortcut de Ctrl+Flecha derecha, para saltarnos palabra por palabra hasta llegar al lugar del reemplazo.
Lo primero que tenemos que hacer con ed es “seleccionar” la linea que vamos a editar y eso lo conseguimos con
/printf
Segun Arnold Robins hay básicamente tres formas de poder seleccionar las líneas (digo, despues de todo ex y ed son “editores de líneas”):
- De manera explícita através del número de línea.
- Con símbolos que te ayuden a especificar el número de línea apartir de la dirección actual.
- Por medio de expresiones regulas (“regexp”), que es el método mas eficaz, poderoso y confuso y es el que usamos con “/printf”).
Viéndolo gráficamente:
| 1 |
#include |
| 2 |
#include |
| 3 |
|
| 4 |
main (int argc, char* argv[]) |
| 5 |
{ |
| 6 |
fprintf (stdout, "Hello, world!\n");
|
| 7 |
return (EXIT_SUCCESS);
|
| 8 |
} |
Con el comando “/printf” lo que hacemos es seleccionar la línea número 6, que es básicamente:
- “/” <- Busca
- “printf”<- La expresión regular indicada.
| 1 |
#include |
| 2 |
#include |
| 3 |
|
| 4 |
main (int argc, char* argv[]) |
| 5 |
{ |
| 6 |
fprintf (stdout, "Hello, world!\n");
|
| 7 |
return (EXIT_SUCCESS);
|
| 8 |
} |
Despues de haber seleccionado la línea que buscamos le vamos a indicar que en esa línea realice una sustitución de texto, para eso usamos el siguiente comando:
s/stdout/stderr/
Que es básiamente:
- “s/” <- Realiza un reemplazo de
- “stdout/” <- La siguiente expresión regular por
- “stderr/” <- La siguiente expresión regular.
| 1 |
#include |
| 2 |
#include |
| 3 |
|
| 4 |
main (int argc, char* argv[]) |
| 5 |
{ |
| 6 |
fprintf (stderr, "Hello, world!\n");
|
| 7 |
return (EXIT_SUCCESS);
|
| 8 |
} |
Si queremos comprobar que se haya realizado dicha sustitución o comprobar que se haya efectuado en el lugar que indicado, imprimimos el contenido de la dirección actual con el comando “p”:
p
fprintf (stderr, "Hello, world!\n");
fprintf (stderr, "Hello, world!\n");
Y vemos que satisfactoriamente el cambio se ha realizado.
Guardamos el archivo:
w
120
120
Compilamos:
[$] gcc -o saludo main.c
Y ejecutamos:
[$] ./saludo
Hello, world!
Hello, world!
Y ¡listo! Esta es la manera, expresado de la manera más simple, en la que ed/ex o cualquier otro editor de líneas operan.
Lo que hace muy poderoso a un editor de líneas es la posibilidad de poder usar las expresiones regulares (esas todavía me hacen falta por comprender) como por ejemplo, del libro de Arnold Robins:
Tenemos la siguiente base de datos:
Name: Feld, Ray; Areas: PC, UNIX; Phone: 123-4567
Name: Joy, Susan S.; Areas: Graphics; Phone: 999-333
...
Name: Joy, Susan S.; Areas: Graphics; Phone: 999-333
...
Y queremos cambiar el orden de los nombres:
Name: Ray Feld; Areas: PC, UNIX; Phone: 123-4567
Name: Susan S. Joy; Areas: Graphics; Phone: 999-333
...
Name: Susan S. Joy; Areas: Graphics; Phone: 999-333
...
Sólo con teclear el siguiente poderoso comando con la siguiente poderosa expresión regular:






