Hace poco me consultaron si se podía limitar el espacio de una carpeta Samba (samba share) sin tener control de usuarios es decir hay una carpeta por usuario que esta a su vez es 'mapeada' a su estación de trabajo (que corre windows) pero todos los usuarios usan el mismo usuario y el mismo password para acceder cada una de sus carpetas. La pregunta me dejo cabezón, yo nunca trabaje con Samba pero se que debe de haber forma de hacer esto. Por ahora me dispuse a crear un script que le ayudara.

Limitar el espacio de una carpeta sin usar cuotas en Samba

El script lee un archivo de texto separado por comas el cual tiene dos columnas una para el nombre del usuario y la cantidad de Megabytes que se le va a asignar a cada usuario. Usando el comando dd el script crear archivos que son formateados como EXT3 y seguidamente los monta. El archivo de texto plano luce así:

cat /tmp/usuarios.txt

maria.perez,5
arnaldo.hernandez,5
gustavo.flores,10
jesus.boss,5
marta.hernandez,5
wilkneman.pascoski,5
tatiana.siu,5
alexandra.delarosa,5

Aparte de crear, formatear y montar estos archivos el script también crea la configuración base que se le va a anexar a al smb.conf con el siguiente formato para cada usuario:

[alexandra.delarosa]
   comment = alexandra.delarosa with 5MB
   path = /mnt/smb_discs/alexandra.delarosa
   read only = no
   browseable = yes
   guest ok = yes

[arnaldo.hernandez]
   comment = arnaldo.hernandez with 5MB
   path = /mnt/smb_discs/arnaldo.hernandez
   read only = no
   browseable = yes
   guest ok = yes


[gustavo.flores]
   comment = gustavo.flores with 10MB
   path = /mnt/smb_discs/gustavo.flores
   read only = no
   browseable = yes
   guest ok = yes

Luego seria cuestión de retocar el /etc/Samba/smb.conf y reiniciar el servicio, re-mapear esto Samba share a los usuarios y listo. Aquí esta el script

LISTAUSUARIOS=`cat /tmp/usuarios.txt|sort`
RUTA_DISCOS="/smb_disks/smb_drives"
MOUNT_SMB="/mnt/smb_discs"
TMPSAMBACONF="/tmp/samba.virt.conf"

echo > $TMPSAMBACONF
mkdir -p `echo $RUTA_DISCOS`

for X in $LISTAUSUARIOS
  do echo $X | awk -F , '{print "asignando " $2 "MB a usuario "$1}'
  USUARIO=`echo $X | awk -F , '{print $1}'`
  PRE_ESPACIO=`echo $X | awk -F , '{print $2}'`
  let ESPACIO=`echo $PRE_ESPACIO`*1024
  dd if=/dev/zero of=$RUTA_DISCOS/$USUARIO.img bs=1024
  count=$ESPACIO
  /sbin/mke2fs -L $USUARIO -j $RUTA_DISCOS/$USUARIO.img
  mkdir -p $MOUNT_SMB/$USUARIO
  mount -t ext3 $RUTA_DISCOS/$USUARIO.img -o loop $MOUNT_SMB/$USUARIO
  echo "[$USUARIO]
  comment = `echo $USUARIO" with "$PRE_ESPACIO"MB"`
  path = /mnt/smb_discs/$USUARIO
  read only = no
  browseable = yes
  guest ok = yes    " >> $TMPSAMBACONF
done

echo "espacio usado en $RUTA_DISCOS: "
du -smh $RUTA_DISCOS/*.img
du -smh $RUTA_DISCOS/
mount -l | grep $MOUNT_SMB
echo "CHECK $TMPSAMBACONF AND ADD IT TO YOUR /etc/samba/smb.conf"

Como mencione anteriormente, yo nunca he trabajado con Samba en ambiente de producción yo practique o jugué un poco con Samba hace unos 5 años. este script no incluye configuraciones para estos Samba shares que proporcionen algo de seguridad. Si alguien tiene sugerencias pueden dejarlas en los comentarios.

Si experimentas problemas con el tamaño de estos discos virtuales no dudes en darle un vistazo a este articulo: El limite para 32-bits es de2147483647.

Leer más

La forma mas simple de hacer paginacion de resultados en rails es la siguiente(actualmente estoy usando Ruby on Rails 2.3.8 y RubyGem 1.3.7)

  • Instalar la gema mislav-will_paginate
  • sudo gem source -a http://gems.github.com; sudo gem install mislav-will_paginate
  • Agregar la gema a tu archivo enviroment.rb => /config/enviroment.rb
  • config.gem 'mislav-will_paginate', :lib => 'will_paginate', :source => 'http://gems.github.com'
  • Agregar el metodo para paginar al controlador
  •  def index
       @personas = Persona.paginate(:per_page => 5, :page => params[:page])
      end

    En este caso se esta exigiendo una paginacion cada 5 resultados , ud puede/debe cambiar el numero de resultados que desea por pagina.

  • Agregar la paginacion a nuestra vista.
  •   will_paginate @personas, :prev_label => "« Anterior", :next_label=> "Siguiente »" 

    Si deseas que tu paginacion use ajax agregue lo siguiente .

  • Crear el archivo index.js.erb en la carperta de tus vistas y colocar el siguiente codigo dentro de el:
  • "#personas_url").html("<%= escape_javascript(render("personas")) %>");
  • Crear el archivo pagination.js dentro de /public/javascripts e insertarle este codigo:
  • $(function() {
      $(".pagination a").live("click", function() {
        $(".pagination").html("Cargando pagina...");
        $.get(this.href, null, null, "script");
        return false;
      });
    });
    

    Leer más

    Los directorios mas importantes de NanoBlogger son data templates styles images y plugins. Anoche decidí a automatizar el respaldo de mi blog, como no tengo problemas de espacio decidí solo dejar por fuera el directorio cache. Este es el script para crear un archivo comprimido y subirlo a otro server vía SCP:

    #!/bin/bash BLOG_PATH="/path/to/the/directory/that/contains/your/blog.conf/" BLOG_NAME="orvtech.com" DATE=`date +%d%b%Y-h%Hm%M` NO_BAKUP="cache/*" SCP_SERVER="" SCP_USER="" SCP_PORT="22" cd $BLOG_PATH tar -czpsf ~/$BLOG_NAME-nanoblogger.$DATE.tar.gz --exclude "$NO_BAKUP" * ls -lah  ~/$BLOG_NAME-nanoblogger.$DATE.tar.gz scp -P$SCP_PORT ~/$BLOG_NAME-nanoblogger.$DATE.tar.gz $SCP_USER@$SCP_SERVER:~/

    Leer más

    Tiempo sin postear ! 🙂

    Puedes seguir las instrucciones del script instalable del portal. Pero esto no funciona a la primera, debes hacer lo siguiente:

    #vim /etc/sysctl.d/bindv6only.conf

    Allí cambiar los parámetros:

    net.ipv6.bindv6only = 1

    a

    net.ipv6.bindv6only = 0

    Finalmente ejecutas desde la consola:

    #invoke-rc.d procps restart

    Después de realizados estos pasos debería funcionar todo sin problemas.

    Leer más

    Los archivos swap o particiones swap son archivos que residen en bajo el directorio / (Root Directory) o particiones dedicadas a expandir el espacio para la paginación de memoria (respectivamente). El sistema operativo mantiene el control sobre qué páginas están en memoria principal (RAM) y cuáles no; lleva un registro en la tabla de paginación y le da una prioridad mas alta a el espacio que reside en la RAM. Este espacio permite hacer creer a los programas que tienen más memoria que la disponible realmente.

    Es el sistema operativo el encargado de mover procesos inactivos para la swap liberando espacio de esta forma espacio en RAM. Este procedimiento de intercambio se lleva a cabo en las dos direcciones dependiendo de las necesidades.

    Asignar distintas prioridades a mis archivos SWAP

    En /etc/fstab podemos usar el parámetro 'pri' y un numero entre 0 y 32767 justo después de sw. Entre mas alto sea el valor de pri mas alta sera su prioridad y mas rápido sera usado. Con Kernels nuevos si tenemos varias particiones swap podemos usarlas en paralelo como si fuese un RAID 0 asignándoles la misma prioridad.

    Particiones swap trabajando como RAID 0?

    [caption id="attachment_369" align="aligncenter" width="313" caption="RAID0"]RAID 0 de RAM[/caption]

    El parámetro pri no solo permite paralizar el acceso a swap sino también permite asignar mayor prioridad a discos mas rápidos, sectores de disco que son mas rápidos (los que están al inicio del disco son mas rápidos que los que están al final) y hacer un mejor uso de nuestros recursos como lo podemos ver en este ejemplo:

    /dev/sda2    none  swap  sw,pri=4    0    0
    /dev/sdb2    none  swap  sw,pri=4    0    0
    /dev/sdc2    none  swap  sw,pri=4    0    0
    /dev/sdd2    none  swap  sw,pri=3    0    0
    /swapfile    none  swap  sw,pri=2    0    0
    

    Leer más

    Que me hagas el amor con fuego para sentir llamas recorriéndome la piel… desde los dedos de los pies hasta la -fría- punta de mi nariz.

    Que me desnudes con los ojos y que me muerdas los labios, rojos de sangre y de pasión, llenos de besos y palabras (todos para ti).

    Sentir cómo te estrellas contra mis pechos como una ola que muere en la arena de la playa y anclar mis piernas a tu espalda.

    . . .

    Querer, querer, querer… el problema ahora es ese. ¿Por qué tardas tanto?

    Guarda tus manos en mis bolsillos, yo seguiré cubriéndome los ojos con cintas de colores hasta que decidas despertar.

    Blid by ReEjKa

    Escuchando: Late Night Alumni – Beautiful

    Leer más

    Me considero una persona tolerante y abierta a las críticas y sugerencias. No hay cosa que me guste más que el feedback de las personas sobre las cosas que hago y más aún sobre Turpial. Sin embargo cosa que no tolero es la mediocridad.

    He decidido crear este post para colocar la respuesta que le he dado a @MichelEnLaRed respecto a algunos comentarios que me ha hecho por Twitter sobre Turpial, que en lugar de contribuir al desarrollo del proyecto empañan todo el esfuerzo que duramente se viene haciendo. No pretendo agregar nada a la respuesta que le dí por Twitter, solo la pegaré aquí para unificarla y permitir su mejor lectura.

    El comentario que derramó la gota fue el siguiente (sí, hubo 3 o 4 comentarios previos en el mismo tono que dejé pasar por consideración y tolerancia):


    Mi respuesta fue:

    No había querido responder tus comentarios porque no tenía nada bueno que decirte, pero ya que insistes me tomaré la molestia.

    1.- No sé de dónde sacas información para formar juicios de valor sobre mi incapacidad para solventar el cuelgue de Turpial, no estás suscrito a la lista de desarrollo, no te conectas al canal IRC, ni siquiera te veo involucrado como colaborador. Para tu información actualmente estoy usando la API nueva que he diseñado para resolver los problemas de Turpial, pero
    está en estado experimental. En el desarrollo de software primero se prueban las cosas antes de lanzarlas al público, son controles de calidad y pruebas q debe pasar la aplicación antes de que pueda ser "usada" por el público en general. Pero veo que no conoces mucho al respecto y por eso lanzas esa sarta de comentarios estériles que en lugar de contribuir desmeritan el fuerte trabajo que he estado haciendo estos últimos días para que ustedes puedan disfrutar de un buen cliente.

    2.- Soy una persona con un trabajo de verdad y una vida de verdad, nada me gustaría más que poder dedicarle el 100% de mi tiempo al Turpial, pero lamentablemente eso no me da para comer en estos momentos, así que los pocos instantes libres que me quedan al día son los que invierto en desarrollar el Turpial. Considera eso antes de llamar "incapaz" a otra persona.

    3.- Si no te gusta el desempeño de Turpial o te parece que no programo lo suficientemente rápido pues usa otro cliente y ya. Hay centenares de clientes de twitter allí afuera esperando por tí, que no se cuelgan y con programadores realmente "capaces". Turpial es un hobby para mí y la idea es que la comunidad pueda disfrutar, beneficiarse y sentirse a gusto con mi hobby y pues con eso poner en alto el nombre de nuestra patria, hay mucho talento en éste país y debemos sacarle provecho.

    No tienes ningún compromiso para usar Turpial, eres libre de escoger... así como el software, completamente libre. Si realmente deseas apoyar Turpial entonces razona y analiza las cosas antes de decirlas, involucrate y colabora, así funciona el software libre y es uno de los principios básicos del socialismo, unión, comunidad, participación...

    La mejor forma de cambiar las cosas es formando parte de ellas, no necesitas ser programador para ayudar a Turpial, existen muchas cosas por hacer, eres bienvenido siempre y cuando tus ganas sean de trabajar y de hacer las cosas mejor pero no si lo que tienes es ganas de joder, eso se lo dejamos a los mediocres. Puedes empezar leyendo el archivo de la lista de correos http://smlk.es/6JfSkX, y si gustas únete y aporta tus ideas como un ser racional, pensante e inteligente que eres.

    Saludos y gracias por el apoyo

    Me disculpo de antemano si hiero algunas susceptibilidades pero las cosas son como son. Las críticas, cuando son constructivas, vienen acompañadas de un planteamiento o una solución.

    Mis 2 lochas

    Leer más