(openSolaris en ZFS + Ubuntu + ArchLinux) in my Laptop

Saludos amigos:

Aqui voy a mostrar como le hice para tener mi openSolaris en sobre ZFS. Es una tarea un poco compleja de mantener, sobre todo porque el instalador oficial no soporta ZFS ni es posible actualizar el sistema. Pero para los que queremos un buen rendimiento y tener lo ultimo de lo ultimo, va muy bien.

Paso -1

Tener instalado nuestros otros sistemas operativos en particiones logicas y dejar un espacio minimo al principio de unos 20~30 GBytes. En mi caso tengo, una particion extendida y en ella una particion ext2 para el /boot de mi Ubuntu, una ReiserFS para mi / de Ubuntu, luego una swap, y finalmente otro ReiserFS para ArchLinux. Tambien, para los que quieran intercambiar cosas entre todos los OSs recomiendo crear antes una particion vfat PRIMARIA, ya que Solaris solo lee particiones primarias y solo puede leer y escribir sobre tipos vfat. Luego creen sus particiones de Linux.
OTRA COSA IMPORTANTE: Creen su cargador de arrnaque en las particiones y no en MBR, ya que asi cada OS manejara automaticamente las lineas de Kernel para cada grub. Sin embargo, pueden usar el grub de openSolaris, ya que es plenamente compatible con Linux, pero mas dificil de mantener cuando actualizemos los kernels :-P.

Paso 0

Instalar openSolaris. Os recomiendo los ultimos builds (svn>75) que trane buen soporte para Xen. Cuando instalen, procuren crear una particion lo suficiente mente grande para despues clonar nuestra instalacion a ZFS, y logicamente al definir las slices, solo ocupar la mitad del espacio o menos y solo usar un punto de montaje(solo root, / y swap). Es recomendable crear inmediatamente la slice que sera posteriormente nuestra pool para ZFS, asignandole un punto de montaje no usado por el sistema (/zfsroot, por ejemplo)

Paso 0,9

Si no definieron la particion con el resto del espacio, como lo hice yo :-(, no se preocupen, ahora vamos a asignar el espacio libre a una slice. Para esto, como root, tecleamos 'format'. Seleccionamos el numero de nuestro disco duro para luego ingresar el comando 'partition'. Dentro de esta seccion podemos definir los slices. Colocamos 'print' para ver los slices ocupados y disponible, asi como las dimensiones en cilindros. Luego, modificamos una slices sin asignar tecleando el nuemro de la slice. Luego ingresamos que va a ser 'alternates', aceptamos lo predeterminado en permisos. Cuando nos pregunte el cilindro de inicio, colocamos ell numero siguiente de cilindro ocupado por nuestra particion y como 'size' el ultimo numero de cilindro menos uno. Luego ponemos 'label', y aceptamos escribir los cambios. Aqui esta lo que hice yo:

partition> p
Current partition table (unnamed):
Total disk cylinders available: 3112 + 2 (reserved cylinders)

Part Tag Flag Cylinders Size Blocks
0 root wm 3 - 1405 10.75GB (1403/0/0) 22539195
1 swap wu 1406 - 1578 1.33GB (173/0/0) 2779245
2 backup wm 0 - 3111 23.84GB (3112/0/0) 49994280
3 alternates wm 1579 - 3014 11.00GB (1436/0/0) 23069340
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 alternates wu 1 - 2 15.69MB (2/0/0) 32130

partition> help
Expecting one of the following: (abbreviations ok):
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
! - execute , then return
quit

partition> modify
Cannot modify disk partitions while it has mounted partitions.

partition> 3
Part Tag Flag Cylinders Size Blocks
3 alternates wm 1579 - 3014 11.00GB (1436/0/0) 23069340

Enter partition id tag[alternates]:
Enter partition permission flags[wm]:
Enter new starting cyl[1579]:
Enter partition size[23069340b, 1436c, 3014e, 11264.33mb, 11.00gb]: 3015c
`3015c' is out of range
Enter partition size[23069340b, 1436c, 3014e, 11264.33mb, 11.00gb]: 3014c
`3014c' is out of range
Enter partition size[23069340b, 1436c, 3014e, 11264.33mb, 11.00gb]: 3112e
End cylinder 3112 is beyond max cylinder 3111
Enter partition size[23069340b, 1436c, 3014e, 11264.33mb, 11.00gb]: 3111e
partition>
partition>
partition> print
Current partition table (unnamed):
Total disk cylinders available: 3112 + 2 (reserved cylinders)

Part Tag Flag Cylinders Size Blocks
0 root wm 3 - 1405 10.75GB (1403/0/0) 22539195
1 swap wu 1406 - 1578 1.33GB (173/0/0) 2779245
2 backup wm 0 - 3111 23.84GB (3112/0/0) 49994280
3 alternates wm 1579 - 3111 11.74GB (1533/0/0) 24627645
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 7.84MB (1/0/0) 16065
9 alternates wu 1 - 2 15.69MB (2/0/0) 32130

partition> help
Expecting one of the following: (abbreviations ok):
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
! - execute , then return
quit

partition> label
Ready to label disk, continue? yes

Luego de esto ya tenemos lista nuestra slice para la picina de ZFS.

Paso 1

Desmontar y eliminar del archivo /etc/vfstab la entrada de punto de montaje para la particion reservada en la instalacion. Si no lo habiamos hecho, solo hay que crear un nuevo conjunto de almacenamoento con el comando:

zpool create rootpool c0d0sX, donde X es la slice definida anteriormente.

Si la slice la definimos en el proceso de instalacion, lo que hay que hacer es desmontarla y añadir el parametro -f para forzar la creacion, a pesar de que exista un sistema de archivos.

Paso 2

Crear el sistema de archivos ZFS para nuestro root con el comando:

zfs create rootpool/rootfs

, asignamos un punto de montaje generico:

zfs set mountpoint=legacy rootpool/rootfs

, lo montamos:

mkdir /zfsroot
mount -F zfs rootpool/rootfs /zfsroot

y lo agregamos a nuestro vfstab:

echo rootpool/rootfs - /zfsroot zfs – yes - >> /etc/vfstab

Paso 3

Hacer un vlocado de nuestro root en UFS a nuestro nuevo ZFS:

# cd /zfsroot/
# ufsdump 0f - / | ufsrestore -rf -
DUMP: Fecha de este volcado de nivel 0: 17 de noviembre de 2007 13:45:38 CLST
DUMP: Fecha del último volcado de nivel 0: el periodo
DUMP: Volcando /dev/rdsk/c0d0s0 (darkmovile:/) en salida estándar.
DUMP: Reasignación (Paso I) [archivos normales]
DUMP: Reasignación (Paso II) [directorios]
DUMP: Escribiendo registros de 32 Kilobytes
DUMP: 9832500 bloques calculados (4801,03MB).
DUMP: Volcando (Paso III) [directorios]
DUMP: Volcando (Paso IV) [archivos normales]
DUMP: 47,07% terminado, realizado en 0:11
DUMP: 98,60% terminado, realizado en 0:00
./export/home/ramoran/.mozilla/firefox/0n404u09.default/prefs.js: no se ha encontrado en el volumen
DUMP: 9833598 bloques (4801,56MB) en 1 volumen a 4020 KB/seg
DUMP: EL VOLCADO HA FINALIZADO

NOTA: Existe otro metodo, ocupando find, pero ese medoto no crea los archivos en /dev ni /devices, por lo que este es mas practico.

Paso 4

Actualizar nuestros zpool.cache en el ramdisk:

echo etc/zfs/zpool.cache >> /zfsroot/boot/solaris/filelist.ramdisk

, ajustar el sistema de archivos de nuestro conjunto de almacenamiento para el cual debe arrancar:

zpool set bootfs=rootpool/rootfs rootpool

NOTA: Este parametro se puede ajustar a nivel de grub tambien.

y actualizar el archivo de arranque:

/usr/sbin/bootadm update-archive -R /zfsroot

Paso 5

Ajustar nuestro nuevo grub y menu.lst y agregarlo al punto de montaje legacy:

mkdir -p /rootpool/boot/grub
cp /zfsroot/boot/grub/menu.lst /rootpool/boot/grub
cd /rootpool/boot/grub/
echo 'title Solaris ZFS' >> menu.lst
# Corregido!!!
echo 'kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS' >> menu.lst
echo 'module$ /platform/i86pc/$ISADIR/boot_archive' >> menu.lst

y ajustamos el nuevo punto de monje de root:

grep -v 'rootpool/rootfs' /etc/vfstab | awk '$3 == "/" { printf "rootpool/rootfs\t-\t/\tzfs\t-\tno\t-\n" } ; $3 != "/" { print $0 }' > /zfsroot/etc/vfstab

Paso 6

Instalar nuestro nuevo grub en el disco:

installgrub /zfsroot/boot/grub/stage1 /zfsroot/boot/grub/stage2 /dev/rdsk/c0d0sX

Donde X es la slice de nuestro ZFS root. Con esto estaríamos listo y deberíamos poder arrancar con ZFS

Pasos a seguir

Posteriormente podemos seguir editando nuestro grub, así como eliminar la slice UFS y agregarla a nuestro conjunto de almacenamiento.

Eso es todo amigos. Espero que os resulte. Mucha suerte. Ahora voy a ver si funciono :-P, si no, voy a tener que corregir este post. Byte!

CONFIRMADO: Funciono, asi que adelante amigos, prueben ZFS ya.




Mi ACER Aspire 5050

Holas!!

Escribo este post porque mucha gente me ha preguntado como lo he hecho con mi notebook. Actualmente cuenta con lo siguientes sistemas operativos:

  • Solaris 11 Nevada b76 en ZFS
  • Ubuntu 7.10 64bits en ReiserFS
  • ArchLinux 32bits en ReiserFS

Una partición de Fat32 para intercambio de datos entre todos los SOs.
Me ha costado echar a andar algunos componentes, de hecho, todavía me cuesta mucho, sobre todo con la red inalámbrica pero en general todo funciona bien en Linux. Ahora describo todos los problemas que tuve y como los soluciones:

Gráficos en ATI Radeon Xpress 1100

Este chipset es una GPU integrada, que ocupa el mismo Turion64 para procesar gráficas. El driver ATI oficial lo soporta sin problemas y el driver "ati" de xorg lo soporta sin aceleración, al igual que el driver gratuito "radeon". Lo que no he logrado hacer andar es la salida de TV o SuperVideo (tengo que buscar mas información sobre eso). En solaris no he tenido problemas, solo que sin aceleración 3D, e igual puedo usar la salida VGA. En Ubuntu mi salvación ha sido Envi, un proyecto de Alberto Milone, que me ha permitido instalar el driver 8.42.3permitiendo sacar 100 frames mas que con el driver anterior y mucha mejor estabilidad. El utilizar el driver propietario inhabilita la posibilidad de suspensión e hibernación del equipo, pero se puede solucionar usando algunos quirks, de lo que comentare mas adelante. En ArchLinux, nada que decir, hasta pude ehchar andar Compiz Fusion con AIGLX, ya que este driver, al igual que el que instale con Envi en Ubuntu, trae incorporada la extensión composite, permitiendo integrar graficas 3D en el escritorio. En general muy buen rendimiento la tarjeta en linux, aprox. 1800 fps con glxgears.

Wireless

Compre este equipo porque tenia integrada una tarjeta Artheros, pero para mi sorpresa, era tan nueva que los chicos de madwifi todavía no le dan soporte. En todo caso están trabajando en ello. Por mientras es posible ocupara usando el driver oficial que proporciona ACER con el famoso ndiswrapper. Para los que no sepan, este programa emula en windows un kernel de WindowsNT permitiendo emular nuestro driver wireless. Se han encontrado muchos problemas justo con este modelo de tarjeta wireless, pero que en la versión actual, la 1.49 han sido solucionados, tanto el problema de la mac 00:00:00:00:00:00 que me pasaba a mi en Ubuntu64, el kernel panic en Fedora y el bloqueo por un BUG CPU0 que sucede en cualquier distribución, pero esto tiene mucho que ver con la BIOS, de lo cual hago un comentario al final.
En Solaris no tengo wireless, ya que el ndiswrapper es muy experimental y se bloquea el sistema. En Ubuntu 64 bits y en ArchLinux no he tenido dramas, ya que estas versiones que tengo instaladas vienen con ndiswrapper 1.49.

Sonido

La Intel HDA funciona sin problemas en ambos linux. En solaris chicharrea un poco, pero igual suena :-P Es mucho pedir para un SO de servidores.

WebCam

Cuando tuve instalado Debian, no pude echar a andar la webcam y tampoco quise martirizarme tratando de investigar tanto, ya que en Ubuntu64 funciona de maravilla, salvo porque solo me funciona con Ekiga, pero este es un gran programa. En ArchLinux todavía estoy tratándose de echarla a andar. Mi lsusb es el siguiente:

Bus 003 Device 002: ID 064e:a100 Suyin Corp. -Webcam
Bus 003 Device 001: ID 0000:0000
Bus 001 Device 003: ID 046d:c50a Logitech, Inc. - Mouse Inalambrico
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000

Los modulos en mi Ubuntu son los siguientes:

ramoran@darkmovile:~$ lsmod | grep video
video 21140 0
uvcvideo 52228 1
compat_ioctl32 11136 1 uvcvideo
videodev 31360 2 uvcvideo
v4l1_compat 15364 2 uvcvideo,videodev
v4l2_common 21888 3 uvcvideo,compat_ioctl32,videodev
usbcore 161584 6 ndiswrapper,uvcvideo,usbhid,ehci_hcd,ohci_hcd

Usando el ekiga de Solaris prende la luz de la WebCam pero ekiga solo muestra un cuadrado verde. Hay que investigar mas sobre ello.

Lector de Tarjetas

El lector de tarjetas se puede ocupar cargando un modulo llamado "yenta", que a partir del kernel 2.6.22 viene integrado, por lo que puedo ocupar mi lector de tarjeta en ambos linux, pero no en Solaris, ya que no hay modulo :-P

Modem

La verdad es que no me he interesado en echarlo a andar. Lo haré cuando tenga un tiempo libre.

ACPI

El PowerNow!, escalado de frecuencia funciona bien en ambos Linux, pero algunas otras características hay que ponerlas a mano. Para acceso via procfs de el control de brillo y encendido de la wireless hay un modulo muy interesante en GoogleCode que permite hacer esto. También me entere que hay paquetes para Ubuntu 32 y 64 bits.

Características

Modelo : Aspire 5050
Procesador : AMD Turion 64bits MK-38 2200 Mhz 512 Kb Cache L2
BIOS : v1.3303
Graficos : ATI Radeon Xpress 1100
Disco Duro : Hitachi "80" Gb XD

Ojala estos datos sirvan de algo. Saludos!!

openSolaris - El SO mas avanzado del planeta!!

Esto no es por que deje mi libertad de lado, solo quiero ser objetivo, pues yo he instalado Solaris 10 y openSolaris, y la verdad, lo que muestran las presentaciones son verdad. Es alucinante crear una maquina virtual con tu mismo SO con solo unas cuantas lineas, u obtener información directa del kernel y poder programar respuestas en un lenguaje parecido a C y con un mínimo de impacto en el sistema, es algo inimaginable para mi, al menos hasta que no lo vi con mis propios ojos.
La instalación, desde versiones, no ha cambiado mucho, considerando que este UNIX es muy diferente a Linux, y nuevo para los entornos de escritorio, por lo que no se le puede pedir mas. Lo que encontré bueno es que ahora ocupa GRUB como gestor de arranque, permitiéndome poner ahí mismo las instalaciones de mis Linuxs.
Lo malo de openSolaris es que no es para un PC de escritorio, asiq ue cuando lo instalen, no se hagan iluciones con que van a tener un super escritorio 3D como con Beryl o Compiz, pero cuando lo cargen con maquinas virtuales verán su real rendimiento, ya que es como lo mismo tener 2, 3 o 4 maquinas virtuales corriendo. Tienen que tener mínimo 400 Mb para instalar openSolaris, aunque se recomienda 512+256Mb (Yo tengo 512 y va bien). También es recomendable una placa madre decente y una tarjeta aceleradora si quieren instalar el escritorio 3D de Java, LookingGlass, que compite a la par con Beryl (Mi NVidia MX-4000 me funciona a la perfeccion, no es muy rapida, pero funciona bien).
Proximamente podre links muy interesante sobre openSolaris, y un PDF en español que encontre muy genial sobre este SO creado por Sun, donde muestra como saborear cada una de las avanzadas características de openSolaris. Por mientras, les dejo el source : www.opensolaris.org
Notese que pueden pedir que les manden los DVDs de Solaris a la casa o bajarlos ;-)
Saludos!!!

Abajo MSN Messenger!!! Arriba Pidgin!! aMSN!!!

Bueno, el protocolo de MSN Messenger, y hay que reconocerlo, muy poco practico para la gente de Windows, a menos que te guste andar mandando imágenes entre medio de los textos, y es mas, mandar imágenes, en ves de texto.
Pero en vista de la necesidad social, y de que la mayoría ocupa MSN Messenger, hay que innovar, y el software libre no se queda atrás, ni yo tampoco. Pidgin y Alvaro's Messenger son alternativas practicas para los amantes del buen software y de un mundo libre. El primero, corresponde al ex-mensajero multiprotocolo conocido como GAIM, pero sigue siendo múltiprotocolo, es decir, puedes tener más de una cuenta abierta al mismo tiempo, y no solo de MSN Messeger, sino también de Yahoo! Messenger, ICQ, IRC, GTalk, y muchos otros protocolos. En lo personal, lo encuentro muy bueno y sencillo, ideal para la casa, estudio y oficina. Si quieres monear con cámaras web, textos animados y otras tonteritas, puedes ocupar Alvaro's Messenger, que trae un soporte muy completo para el protocolo de MSN Messenger.
Pidgin me ha dejado muy sorprendido al usarlo en Linux y en Windows, y no solo yo, sino también a la gente a la que es lo he mostrado. Pero para mi desgracia, todavía no consigo compilarlo para Solaris x86 :-(
Otra cosa a recomendar de GTalk( Ahora con un revolucionario Google Talk Gadget) y Yahoo! Messenger, como alternativas más libres que Windows Live Messenger ;-)
Saludos!!!

StarWars Day!!!

Hola !!!

Un día como hoy, hace 30 años atrás estrenaron la Guerra de las galaxias [yo ni nacia ;-( ], y por este motivo y mi relación con Java, les muestro una pic interesante ;-) Saludos!!!

Copyright de las fotos a sus respectivos autores, así como el logotipo de Java, a Sun Microsystems Inc.
La idea fue mía, y hecha en OpenOffice.org Draw ;-)

Javadocs y Netbeans 5.5

Hola nuevamente!!!


Aqui voy a mostrar las ventajas que tiene usar NetBeans con Javadocs, las cuales son muchas. Pero primero, vamos a explicar lo que es Javadocs.

Javadocs

Es una herramienta que nos provee el SDK de Java para generar la documentacion de nuestras ropias clases, de manera rapide y efectiva. Lo que que hace javadocs es basicamente tomar los comentarios marcados de manera especifica y los enlaza, generando una pagina en formato HTML con todos los comentarios, dependencias y parametros de clases, atributos y metodos que se encuentren en el codigo. Al ejecutar java docs sobre un codigo bien comentado, quedara al mismo estilo que la documentacion de la API de Java.

Comentarios, al puro estilo Javadocs

Los comentario que procesa Javadocs se estructuran así:

/**
* Este comentario sera procesado por Javadocs
* @etiqueta [dato_opcional] Etiqueta procesada por Javadocs
*
*/
// Aqui el codigo que corresponde el comentario de arriba

Lo anterior, y como es la idea de Javadocs, es que el código fuente este muy enlazado a los comentarios, cosa de que la documentación sea clara y comprensible para quien la lee. TambiénJavadocs procesa etiquetas, y de acuerdo a ellas, y su contenido, genera informacion mas precisa. No es obligatorio ponerlas, pero si se quiere buena documentación, si lo son.

Javadocs con NetBeans

¿Que tiene de bueno? Muchas cosas, es tan simple como 2 clicks para generar toda la documentacion, sin contar los asistentes que nos ayudan a comentar bien nuestro codigo y nos avisan en caso de estar incompletos. Los principales objetos de Javados en NetBenas son:

Auto comment... : Es un asistente que analiza todas las clases, subclases, atributos y metodos, verificando que esten bien comentados, asi como permitirnos agregar comentarios facilmente. Lo encontramos en en menu 'Tools' -> 'Auto comment'. Tambien podemos desplegar esta herramienta haciendo click con el boton secundario en un archivo .java, seleccionando el manu 'Tools' y luego 'Auto comment'.

Generate Javadocs for Proyect : Genera la ayuda javadocs para todas las clases de nuestro proyecto. Podemos hacer que la genere en el menu 'Build'->'Generate Javadocs for [proyecto]' o bien, desplegando el menú contextual en el nombre el proyecto y clickear en 'Generate Javadocs for proyect'.


También, dentro del proyecto, al examinar el código fuente, encontraremos en la ventana de propiedades una clausula que nos permitirá insertar comentarios Javadocs a gusto, así como etiquetas, dependiendo de donde se encuentre el cursos del editor de código.

Así al colocar el cursos en el cuerpo de un método de una clase, con permitirá documentar ese método especifico. Si nos colocamos fuera de un método o atributo, pero dentro de la clase, podremos documentar la clase en si.


Espero, nuevamente sea de su agrado esto y que tenga mucha utilidad. Good Bytes!!

Paquetes (Librerias) en Java y los Jars

Fuentes:

  • http://www.lab.dit.upm.es/~lprg/material/apuntes/packages/packages.htm
  • http://javabasico.osmosislatina.com/curso/progbasico/genpack.htm
  • http://javabasico.osmosislatina.com/curso/progbasico/usopack.htm
  • http://javabasico.osmosislatina.com/curso/progbasico/jars.htm
Saludos!!!

Ahora, vista de las mismas necesidades de conocimiento, voy a mostrar como trabajar con los paquetes de Java o packages.
Un paquete en Java es lo que su nombre lo indica, un paquete o conjunto de clases, lógicamente, que tienen cosas en común. Lógicamente un programado puede agruparlas con o sin criterio, pero lo ideal es que se dediquen a funciones especificas. También los paquetes definen una jerarquía de directorios, que permiten igualmente agrupas las clases, cosa de desplegar los archivos mas ordenadamente.
También, cuando necesitamos librerías de java, igualmente estamos llamando a una clase especifica o a todo un paquete. Por ejemplo, cuando ponemos esto:

import System.io.*;

estamos importando todas las clases del paquete System.io. Ahora, si hacemos esto:

import org.usach.abo.ABO;

Estamos importando la clase ABO del paquete org.usach.abo.

Para definir un paquete solo tenemos que incluir antes que los paquetes a importar, la definición del paquete al que pertenece la clase, de la forma siguiente:

package org.ruta.del.paquete;

lo que implica que el paquete tiene que estar en la ruta:

org/ruta/del/paquete

o en windows, suponiendo que el proyecto fue creado en c:\mi_proyecto\

c:\mi_proyecto\org\ruta\del\paquete\

En ese directorio tenemos que crear nuestra clase con el identificador de package. Si queremos compilar o ejecutar algo, solo tenemos que ubicarnos en el directorio del proyecto y poner:

java org.ruta.del.paquete.MiClase
javac org.ruta.del.paquete.MiClase.java

El asume estomáticamente la ruta hacia la clase o conjunto de clases.

Los famosos JARs

Los JAR o archivos con extensión .jar, corresponden a archivos ZIP, que contienen un conjunto de clases organizadas en paquetes. Esto resulta muy útil cuando tenemos una gran cantidad de clases, lo que implica una gran cantidad de archivos, por lo que empaquetarlas en un JAR resulta practico al momento de la distribución de nuestro software o despliegue.
Para crear un JAR de nuestros paquetes, solo tenemos que ubicarnos en la raiz de los paquetes y llamar al ejecutable jar, que viene includo en el SDK de Java, asi:

jar cvf mipaquete.jar *
y con esto obtendremos todas las clases y paquetes en un solo y practico archivo JAR.Asi mismo, para extraer el contenido de un .jar solo hay que hacer:

jar xvf mipaquete.jar

y recrea la estructura del paquete que teníamos cuando empaquetamos.

JARs y Netbeans 5.5

Al trabajar con NetBeans 5.5 tambien podemos decirle que nos genere un archivo JAR para distribuir nuestro proyecto. Para hacer esto, hacemos click secundario en el proyecto y vamos a "Properties" y luego a la seccion "Packaging". Deberian ver algo como esto:El primer cuadro nos muestra cual ba a ser el nombre del archvo JAR a generar. El segundo muestra que archivos va a excluir al empaquetar, que como predeterminado excluye los fuentes. Tambien, nos da la opcion de comprimir el archivo JAR, usando comprension ZIP.

Extra Bonus!!

Para Windows:

Les recomiendo que al momento de trabajar con estas utilidades, ya sea al trabajar con JARs o compilar y ejecutar usando la liea de comandos, agreguen en su variable de entorno el directorio en donde tienen instalado su SDK, al directoio "bin". Así, si yo tengo instalado mi SDK en:
c:\Archivos de programas\J2SDK_\

Nota: si tienen la ultima(a la fecha de escribir esto), es 1.6.0 y es 1.
En su variable PATH, deberían tener agregado:

c:\Archivos de programas\J2SDK_\bin

Verifiquenlo abrindo la consola(Menu Inicio->Ejecutar->'cmd') y tecleando:

echo %PATH%

y debería estar en su ruta.
Espero que os sea de mucha utilidad. Salu2!!!

Apoyando el Software Libre, a un mundo libre! - Designed by Posicionamiento Web