Mostrando las entradas con la etiqueta gentoo. Mostrar todas las entradas
Mostrando las entradas con la etiqueta gentoo. Mostrar todas las entradas

jueves, 31 de julio de 2014

Como encriptar carpetas en Linux con GPG

En esta ocasión vamos a aprender como encriptar una carpeta en Linux,en mi caso Ubuntu 14.04 pero lo podemos hacer con cualquier distribucion de Linux,solo necesitamos tener instalada la herramienta GnuPG que quiere decir : GNU Privacy Guard.

Bien en muchos sistemas con Linux ya biene instalado pero en otros no asi que lo verificamos:

Abrimos una terminal y escribimos:

 which gpg; if [[ $? -eq 0 ]]; then echo "Instalado"; else echo "No instalado"; fi

 Si no lo tenemos instalado buscamos como instalarlo para nuestra distribución de Linux,de hecho el programa que vamos a usar es gpg-zip,que se instala junto a gpg,en sistemas como Gentoo no se si se instale por las flags usadas al compilar asi que revisar bien a la hora de instalar.

Tutorial


Vamos a ver un ejemplo,tengo un codigo en C importante:


Ahora voy a encriptar esa carpeta,en mi caso estoy usando Dolphin en mi caso este explorador de archivos cuenta con una Terminal empotrada,asi que solo la abro:



En otro caso abren una terminal y van al destino donde tienen la carpeta a encriptar:

Bien ahora encriptamos,nosotros vamos a usar una frase para volver a desencriptar(cifrado simétrico) este usa CAST5, esa opcion la llamamos con el parametro -c:

El programa,así vamos hasta el momento:

gpg-zip -c 
Ahora solo debemos mostrar el nombre de salida,al igual que otros programas usamos el parametro -o,asi:

-o salida.gpg
Y por ultimo el nombre de la carpeta,en mi caso prueba,asi queda la linea entera:

gpg-zip -c -o salida.gpg prueba
Al ejecutar esto nos pide una contraseña en GUI:


La escribimos y la reafirmamos y con eso nos crea el fichero cifrado:



Con esto podemos borrar la carpeta original,y podemos ver que es fichero cifrado:


Ahora como lo desencriptamos, con el parametro -d seguido del nombre del gpg,en este caso:

 gpg-zip -d salida.gpg
Nos pide la contraseña y vuelve a "crear" el directorio,eso es todo en este caso usamos un cifrado muy común ya que solo usamos contraseña y tar lo que seria como un comprimido con contraseña(no es asi),pero gpg va mas haya con cifrado asimétrico,firmas,etc.

Aqui un script para realizar lo que vimos en esta entrada de una manera facil:

Solo usamos,para desencriptar:

Nombre_script.sh -d nombre.gpg

Para encriptar:

Nombre_script.sh -e carpeta
No cancelar en fase de encriptacion,que borra el folder y no deja respaldo gpg.

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash

function decripta()
{
    echo "Desencriptando $1"
    gpg-zip -d $1
    if [[ $! -eq 0 ]];
    then
        echo "Hecho"
    else
        echo "Algo salio mal :("
        exit
    fi
    rm $1
}

function encripta()
{
    echo "Encriptando $1"
    gpg-zip -c -o $1.gpg $1
    if [[ $! -eq 0 ]];
    then
        echo "Hecho"
    else
        echo "Algo salio mal :("
        exit
    fi
    rm -rf $1
}

function help()
{
    echo "Uso : $0 [-e] Encriptar
                   [-d] Desencriptar
                                     Archivo"

}

case $1 in
    -e)
        if [[ $2 == '' ]];
        then
            help;
        else
            encripta $2
        fi
    ;;
    -d)
        if [[ $2 == '' ]];
        then
            help;
        else
            decripta $2
        fi
    ;;
    '')
        help
    ;;
esac

Eso es todo :D
Leer más...

miércoles, 5 de marzo de 2014

Como usar adobe flash en Firefox Nightly Gentoo

Si han descargado firefox en su versión  Nightly sabran que viene listo para usarse,como son conocidos los paquetes tar,bien estos paquetes no linkean los .so de nuestras librerias,asi que no reconoce el flash:

Para hacerlo solo basta copiar el libflashplayer.so a la carpeta de plugins de mozilla:

Primero necesitamos tener instalado adobe-flash(o pueden bajar el tar desde su sitio):

Enlace 
Por emerge:

sudo emerge -av www-plugins/adobe-flash
Ahora solo tecleamos esto:

Creamos el directorio:

mkdir -p ~/.mozilla/plugins/
Linkeamos:

su

ln -S /usr/lib/nsbrowser/plugins/libflashplayer.so ~/.mozilla/plugins/

Y cambiamos los permisos de usuario:

chown tu_usuario  ~/.mozilla/plugins/libflashplayer.so 
Eso es todo:



Leer más...

jueves, 26 de septiembre de 2013

[ Shell ] Buscar archivos desde terminal con find

En esta ocasión aprenderemos como buscar archivos desde la terminal,algo muy básico ya que es de lo mas común que se hace en un sistema,buscar archivos.

Tal vez en el futuro veamos tutoriales de seguridad informática y les aseguro que solo vamos a usar este tipo de comandos.

Para empezar para que queremos usar este buscador si el explorador cuenta con uno propio?

Find es un programa tipo consola un backend para buscar archivos,y no solo encuentra lo que le digamos sino que podemos ejecutar una accion basado en eso,como borrar,reproducir,copiar,mover,etc.

El filtrado es muy poderoso y la respuesta tambien(el tiempo que tarda en buscar).

La sintaxis mas básica del programa es la siguiente:

find ruta -name nombre

En donde ruta es la ruta,como hemos visto en Unix:

. => Directorio actual

../ => Un direcotorio para atras

~ => Nuestro home

/ => Raiz

etc.

-name => Va seguido de un argumento que es el nombre.

Para el nombre podemos hacer algo muy exacto como:

-name "archivo123.txt"

Y busca el archivo123.txt en la ruta que le indicamos,o podemos hacer un filtrado con regex de Unix:

-name 'archivo???.txt'

-name 'arc*.txt'

etc.

En el caso de una regex de comodines como los anteriores podemos usar esta sintaxis:

-name \arc*.txt

Ya que no hay problema de espacios,en otro caso usar la regex entre comillas simples,o incluso el parámetro -regex.

Podemos hacer uso del parámetro -user para encontrar solo archivos pertenecientes a un usuario en especial,por ejemplo buscar archivos de root que esten en nuestro home:

find ~ -name \* -user root

Podemos hacer uso del parámetro -group para buscar un archivo que pertenezca ha ese grupo:

find ~ -name \* -group 100

El parámetro es numérico,100 es el grupo users(para mas info googlear groups id unix)

Tenemos algunas opciones para enlaces simbólicos:

-P => Nunca seguir

-L => Seguir

Podemos buscar ejecutables(archivos con permisos de ejecucion) con el parametro -executable,por ejemplo buscar script's en shell ejecutables en nuestro home:

find ~ -name \*.sh -executable -user $LOGNAME



También podemos listar los detalles de los archivos encontrados,con el parámetro -ls:

find . -name \*.sh -executable -ls

El cual nos muestra: El usuario,el grupo al que pertenece,los permisos,la fecha del ultimo

Puede que halla archivos y directorios con el mismo nombre,así que podemos evitar encontrar archivos y directorios,mostrando solo lo que queramos con el argumento -type{d para directorios,f para archivos}:

find ~ -name \*py* -type d # Directorios de python(por ejemplo)

find ~ -name \*py* -type f # Ficheros de python(por ejemplo)

Otros argumentos,l link,p FIFO,s socket.

Podemos buscar archivos basados en permisos con el parámetro -perm,por ejemplo buscar todos los script's en shell con permisos 775:

find . -name \*.sh -perm \755

Por ultimo tenemos el parametro -exec que nos permite ejecutar un programa y pasale el resultado de la búsqueda como argumentos:

Por ejemplo buscar todas las fotos .png y verlas con feh:

find ~ -name \*.png exec `which feh` {} +

Se recomienda poner toda la ruta del ejecutable,pero si no sabemos donde esta podemos buscarla con el comando which seguido del nombre del programa encerrado en esas comillas que no recuerdo como se llaman :P.

Eso es todo,no es todo,pero es lo que me parece mas importante para uso basico,para mas info,en terminal:

man find

Ultimo ejemplo del poder de find:

Buscar todos los videos,mp4 y reproducirlos con totem:

find ~ -user $LOGNAME -name \*.mp4 -exec `which totem` {} +

Eso es todo :D.
Leer más...

lunes, 10 de junio de 2013

Visor pdf ligero con pcmanfm

Hay un visor de pdf que abre los documentos desde la linea de comandos,a este programa se le pasa un parámetro que es le nombre del fichero y en pcmanfm tenemos la capacidad de configurar los programas de esta manera asi que tendremos un visor de pdf ligero y usable desde pcmanfm.

Tutorial

Instalamos el visor:

 En Gentoo

sudo emerge -av app-text/mupdf

En Ubuntu


sudo add-apt-repository ppa:guilhem-fr/mupdf

sudo apt-get update
sudo apt-get install MuPDF

En Arch

pacman -S mupdf

Bien,ahora vamos a pcmanfm y le damos clic derecho a un PDF

Abrir con...

Y Linea de comandos # O su equivalente en ingles

Y escribimos:

mupdf %f

Y listo


Eso es todo :D
 


Leer más...

sábado, 8 de junio de 2013

Como cambiar el wallpaper automáticamente en openbox

En openbox usamos un programa de linea de comandos que se llama feh,el cual usaremos en este momento,yo he visto que tambien usan nitrogen,asi que si no tienes feh instalalo:

En Debian:

sudo aptitude install feh

En Gentoo:

sudo emerge -av feh

Bien,ahora van a usar este script en Perl que programe:

 Enlace

Lo meten en un archivo de texto,luego le dan permisos de ejecución:

chmod +x archivo_que_cambia_el_wallpaper

 Y luego lo agregan al inicio de openbox:

nano ~/.config/openbox/autostart.sh

Añaden la ruta,por ejemplo:

/home/tu_usuario/archivo_que_cambia_el_wallpaper &

El & es para que se quede ejecutando en segundo plano.



Eso es todo,antes de añadirlo configuren la carpeta de las imagenes y el tiempo entre cada cambio,es en segundos,asi que un minuto son 60,el script busca automáticamente las imágenes que esten en la carpeta que señales y luego las ordena alfabéticamente y las cambia cada x segundos que hayas definido,si algo anda mal avisara:

Como una imagen no se ve como funciona:


Les dejo un vídeo:



Eso es todo :D



Leer más...

Nuevos nombres de red en Gentoo a partir de kernel 3.8

Bien,esto no es un tutorial mas bien es un aviso a otros gentooneros,a partir del kernel 3.8 se cambian los nombres de nuestra interfaz de red a diferentes nombres,esto no es por el kernel 3.8 para arriba, mas bien es por udev,ahora las interfaces se muestran algo como:

wlp1s0

En vez de wlan0,o eth0 muestra algo como lo de arriba.

Bien,lo menciono porque hace poco actualice y me cambiaron los nombres de red en estos momentos estoy usando el kernel 3.9 de la rama inestable de x86, y ese nombre se ve mal,pensé que era por el kernel pero no,esto lo dice en las noticias de eselect:

eselect news read all

Pero como no lo leeo,tuve que ver el error con dmesg,en el cual me apareció algo como:

udev cambio el nombre de wlan0 a wlp1s0 (en ingles)

Bueno,si acaban de instalar gentoo,o actualizaron udev tienen que modificar las configuraciones de udev y openrc(si lo usan):

Primero borramos eth0 y wlan0 de runlevel default.

rc-update del net.eth0 default

rc-update del net.wlan0 default

Ahora cambiamos los enlaces de net.lo a los nuevos nombres,pero primero los vemos con este comando:

udevadm test-builtin net_id /sys/class/net/eth0 2> /dev/null

udevadm test-builtin net_id /sys/class/net/wlan0 2> /dev/null



Es el que dice ID_NET_NAME_PATH=enp3s0 # En mi caso

Y muestra el nuevo nombre,ahora creamos un enlace:

cd /etc/init.d/

ln -s net.lo net.enp3s0

También en wlan0

Ahora

cd ../conf.d

nano  net

Y actualizamos eth0 por el nuevo nombre.

Por ultimo agregamos el nuevo servicio a openrc:

rc-update add net.enp3s0 default

También para wlan0 con nuevo nombre.

Eso es todo,creo mas info en la wiki:

http://wiki.gentoo.org/wiki/Udev/upgrade


Leer más...

jueves, 11 de abril de 2013

Tutorial funciones python 3 parte 2


Seguimos con los tutoriales de python,vamos a acabar con funciones para en otro tutorial comenzar con clases y objetos,pero de momento veremos:

Alcance de variables

Listas y diccionarios como funciones

args* and **kwargs

Alcance de variables

1.Las variables son valores a los que asignamos un valor o otro valor para referirnos a dicho valor y poder usarlas,como por ejemplo:

x = 10

Ahí x ya no es x ya es 10,si lo llamamos como texto crudo(si que este envuelto en comillas)

Estas variables pueden cambiar su valor en cualquier parte del script/programa pero tienen solo un limite de alcance por ejemplo las variables que definamos en una función se consideran locales y no las podemos modificar fuera de esta:

#!/usr/bin/env python3
def localv():
      x = 10

print (x)

En este ejemplo estamos llamando una variable local,que solo funciona en la funcion local,para el programa general es invisible,no podemos mutar su valor desde el script principal,podemos hacer practicas como estas:

#!/usr/bin/env python3
def localv():
      x = 10
      return x

x = localv()
print (x)

Lo que acabamos de hacer es usar la función como un solo valor de regreso,asignarlo a una variable  global y imprimirla,esto se puede hacer en ciertos casos,pero no es necesario ya que para usar solo un valor podemos definirlo directamente desde el script principal,osea las llamadas variables globales,que pueden ser vistas y modificadas en todo el script así como desde una función solo que en la función tenemos que indicar que es una variable global o sera tratada como local:

#!/usr/bin/env python3
def localv():
      x = 10
      return x
x = 5 # Variable global
print (x)
# Intentamos Cambiar el valor desde la funcion,solo con llamarla:
print (localv)
# Llamamos nuevamente la variable global
print (x) 

No pasa nada,sin embargo usamos la función de python global y podemos trabajar con variables globales desde python:

La sintaxis :

global variable

Ejemplo:

#!/usr/bin/env python3
def localv():
      global x
 # Le decimos a python que usaremos la variable global x
      x = 10
      return x

x = 5 # Variable global
 con valor de 5
print (x)
# Cambiamos el valor desde la funcion,solo con llamarla:
print (localv())
# Llamamos nuevamente la variable global
print (x)

Ahora si,x pasa al valor 10 que se le asigna desde la función local :D

Algo que se debe hacer que si no,usamos la variable global en la funcion,para modificar su valor,no debemos definirla,por ejemplo si queremos regresar x desde la funcion no necesitamos definir nada,ya que x ya esta definida en el script principal:

#!/usr/bin/env python3
def localv():
      return x
 # En ningun momento de la funcion definimos x

x = 5 # Variable global
print (x)
# Llamamos x con una funcion

print (localv())
# Llamamos nuevamente la variable global
print (x)

Las variables tambien las podemos definir desde el paso de parametros al cuerpo de la funcion,por ejemplo podemos definir una variable es esta manera dentro de una funcion:

def ejemplo():
      x = 10
      print (x)

O podemos hacerlo de esta manera:

def ejemplo(x):
      print (x)

ejemplo(10)

O de esta manera,la cual es la que menciono:

def manera(y,x = 10):
      print (x)

manera(1)

De esa manera podemos definir una variable,local para nuestra funcion desde el paso de argumentos,si definirla en el cuerpo del script global.


Listas y diccionarios como funciones

Las listas y los diccionarios se pueden usar para llamar funciones y al igual que una variable con return,no hay mucho que decir,sobre los diccionarios aqui un turial:

Enlace

Ahora podemos usar el retorno de una funcion como la llave de un diccionario y llamarla desde print


#!/usr/bin/env python3

def suma(y,x = 10):
    return y + x

diccionario = {
'entero' : 10,
'cadena' : "String",
'real' : 3.23,
'funcion' : suma(2)
}

print ("Mi funcion: %s " % (diccionario['funcion']))



"Muy facil" :D

Ahora a la inversa,usando un diccionario en una adentro de una funcion:

Al igual que las variables podemos definir diccionarios en nuestro paso de argumentos,o adentro de la funcion(en el cuerpo de la funcion), en este caso voy a definir un diccionario vació en el paso de argumentos y lo voy a llenar en el cuerpo de la funcion,usando como valor de nuestras llaves los argumentos que le pasaremos en el diccionario global,para obtener el mismo resultado a la de llamar la llave funcion de nuestro diccionario global:

#!/usr/bin/env python3

def suma(y,x = 10,diccionario = {}):
    diccionario['x'] = x
    diccionario['y'] = y
    return diccionario['y'] + diccionario['x']

diccionario = {
'entero' : 10,
'cadena' : "String",
'real' : 3.23,
'funcion' : suma(2)
}

print ("Mi funcion: %s " % (diccionario['funcion']))

El mismo resultado :D

Ahora igual con listas:

Podemos definir el valor de una lista,con el valor del retorno de una funcion y igual que en los diccionarios podemos definir una lista adentro de una funcion:


#!/usr/bin/env python3

def suma(y,x = 10):
    lista = [y,x]
 # Definimos una lista local
    return lista[0] + lista[1]
 # Regresamos los valores sumados

lista = [ suma(3),2 ]
 # Definimos una lista global con el primer valor como una funcion

print ("Mi funcion: %s " % (lista[0]))

args* and **kwargs

Hemos hablado del alcance de  las variables dentro de nuestro script,y lo hemos visto a la hora de definir nuestras variables,pero tambien debemos aprender a definirlas bien y desde donde,ya que vimos esto:

def ejemplo():
      x = 10
      print (x)

O podemos hacerlo de esta manera:

def ejemplo(x):
      print (x)

ejemplo(10)

O de esta manera:

def manera(y,x = 10):
      print (x)

manera(1)

Otra mas:

def manera(y,x = 10):
      print (x)

numero = 1 # Variable global

manera(numero) # Pasamos valor de variable global a la funcion

Tambien de esta manera que es la que digo ahora

def manera():
      print (x)

manera(x = 1) # Variable local definida en ambito global

Como podemos ver definimos una variable que usaremos desde la llamada de la funcion,esto es muy bueno,porque si lo hacemos como el penúltimo ejemplo mandaremos una variable global a local y podemos cambiar su valor en cualquier momento:

def manera(numero,x = 10):
      print (numero)

numero = 1 # Variable global

manera(numero) # Pasamos valor de variable global a la funcion

numero = 10 # Cambiamos el valor

manera(numero) # Ya no es el mismo valor

Pero si lo hacemos asi:

#!/usr/bin/env python3

def manera(numero,x = 10):
      print (numero)

numero = 1 # Variable global

manera(numero = 2) # Definimos variable local desde ambito global

numero = 10 # Cambiamos el valor

manera(numero = 2) # Ya no pasa nada

Lo malo de esto es que debemos definir el valor cada vez,pero lo bueno es que no dependemos de variables globales,como ven podemos definir variables locales de muchas maneras,y no les digo como se hace realmente,porque no existe una definicion real,si fuera asi no existirían tantas formas,solo que debemos usar la que mas nos convenga,por ejemplo si necesitamos pasarle el regreso de una funcion de un modulo a una funcion,podemos definirla en una variable global primero y despues mandarla a la funcion,asi:

#!/usr/bin/env python3

import os
import time

def whoami(login):
    print ("Tu usario es %s" % (login))

Usuario = os.getlogin()

whoami(Usuario)

Ya que no es necesario hacer esto:

#!/usr/bin/env python3

import os
import time
  
def whoami(Usuario):
    print ("Tu usario es %s" % (Usuario))

whoami(Usuario = os.getlogin()) # Esto 

También funciona pero es muy incomodo,por lo menos en este caso,asi que vean bien cual es la forma de definición que les conviene mas para realizar lo que quieran ralizar.

Bien,como vemos podemos definir muchas cosas desde la llamada de la funcion,pero que tal si queremos definir muchas o definimos muchas :O

Por ejemplo :

llamando_funcion(1,3,4,534,345,23,324,234,23423,4234,23)

En la funcion pondríamos algo como:

def llamando_funcion(a,b,c,d,f,g,h,i,j,k,z):

Para este ejemplo entra perfecto *args,con *args podemos meter todo eso en un solo valor,llamado args y de tipo tupla,las tuplas son como las listas,de hecho son iguales,solo con un cambio que radica en muchos y en mucho su uso,es inmutable :(,no podemos cambiar su valor y se definen con parentesis en vez de corchetes,pero bueno hagan de cuenta que esto:

llamando_funcion(1,3,4,534,345,23,324,234,23423,4234,23)

Es esto:

tupla = (1,3,4,534,345,23,324,234,23423,4234,23)

Al llamar esto en la funcion:

def llamando_funcion(*args):

Se ve mejor y mas limpio que esto:

llamando_funcion(1,3,4,534,345,23,324,234,23423,4234,23)

Esto es automatico,al usar *args como parametro en la funcion nos convierte todos los argumetos que declaramos en la llamada a una tupla de nombre *args,y al igual que las listas llamamos asi:

tupla[numero]

Comenzando por el cero, aquí un ejemplo:

#!/usr/bin/env python3

def ejemplo(*args):
    print (args[0] + args[6])

ejemplo(1,2,3,4,5,6,7,8,9,0)

Como ven es sencillo, también podemos usar variables,listas,diccionarios,etc:

#!/usr/bin/env python3

def ejemplo(*args):
    print (args[0] + args[6])

variable = 6
lista = [2,3,4,5,1]

ejemplo(lista[4],2,3,4,5,6,variable,8,9,0)



Pero si queremos hacer esto:

ejemplo(var1 = 1,var2 = 2,var3 = 4,muchasvar = muchas)

Para eso esta **kwargs,ya que como *args nos devuelve una tupla,adivinen que nos devuelve **kwargs,un diccionario :D,que usa:

var1 como llave

y

1 como valor

En ese ejemplo,o por ejemplo:

#!/usr/bin/env python3

def ejemplo(**kwargs):
    print (kwargs['var1'] + kwargs['var2'])
    print (kwargs['muchasvar'])

muchas = "Muchos argumentos"

ejemplo(var1 = 1,var2 = 2,var3 = 4,muchasvar = muchas)

El hecho es solo tratar kwargs como un simple diccionario,tambien hay una cosa importate y es que no es necesario usar el nombre args y kwargs,aqui lo importante es usar los asteriscos (*)


#!/usr/bin/env python3

def ejemplo(**x):
    print (x['var1'] + x['var2'])
    print (x['muchasvar'])

muchas = "Muchos argumentos"

ejemplo(var1 = 1,var2 = 2,var3 = 4,muchasvar = muchas)


Eso es todo, en otra ocasión hablaremos de funciones lambda.

Leer más...

domingo, 7 de abril de 2013

Tutorial funciones python 3 desde Unix

Este blog trata sobre muchas cosas,muchas desde iOS y Linux hasta programación de scripting,en este caso veremos python ya que últimamente ya no había escrito nada últimamente en esta ocasión veremos las funciones de python, únicamente eso ya que en una entrada pasada mostré como usarlas pero no nos adentramos mucho,en esta ocasión si nos adentraremos mas sobre lo mas importante de usar funciones,de hecho dividiré esta información en dos entradas y esta es la primera parte:

Las funciones son partes de código que usamos varias veces en el mismo,ya que una función la podemos definir una vez pero llamarla todas las que sea necesario,por ejemplo tenemos que hacer lo siguiente:

Tenemos nuestra edad,la fecha de nacimiento, después lo que queremos es saber cuantas horas hemos vivido,esto seria un poco complicado ya que tenemos que definir los dias de los meses,muchas estructuras selectivas y demás cosas, así que solo haremos que calcule nuestra edad sacando el dato de la edad ingresado por nosotros y la fecha actual sacada de un modulo,esta la multiplicara por 365 dias de cada año y 24 horas de cada dia,para saber cuantas horas habrá uno vivido cuanto cumpla dicha edad si no es que ya la cumplio(a eso me refiero con estructuras selectivas),pero también queremos hacerlo para jugar,por ejemplo le hacemos el test a un pariente o a alguien,osea los datos serian distintos:

Ese es el problema,facil el problema porque solo trata de algunas operaciones aritmeticas:

Por ejemplo esta seria la solución pero para una sola fecha de nacimiento:


#!/usr/bin/env python3

from datetime import datetime # Importamos el tiempo actual

nacimiento = numeros # Define el año en que naciste 

fecha = datetime.now()

ahora = fecha.year

vida = ahora - nacimiento

print ("A tus ", vida, "años habas vivido", vida * 365 * 24,"horas")





Bien como vemos es un ejemplo,para saber la fecha exacta debemos definir el mes y dia y hora,luego hacer una operación de resta sobre estructuras selectivas para tener el dato exacto.

El hecho es que para hacer esto de nuevo con una nueva persona o un nuevo dato tendriamos que hacerlo de nuevo,o por lo menos definir la fecha nuevamente, vida y print:

Por ejemplo(les pongo en rojo todo lo que tendríamos que modificar) para añadir otra persona :


#!/usr/bin/env python3

from datetime import datetime # Importamos el tiempo actual

nacimiento1 = numeros # Define el año de la persona 1

nacimiento2 = numeros # Define el año de la persona 2


fecha = datetime.now()

ahora = fecha.year

vida1 = ahora - nacimiento1

vida2 = ahora - nacimiento2


print ("A tus ", vida1, "años habas vivido", vida1 * 365 * 24,"horas") # Imprime la persona 1

print ("A tus ", vida2, "años habas vivido", vida2 * 365 * 24,"horas") # Imprime la persona 2

Esto seria muy malo y muy mala practica porque para eso existen las funciones,asi que vamos a ver como son y como funcionan para reducir ese codigo o algoritmos de ese tipo a un codigo simple,limpio y funcional:



Para empezar las funciones en python se definen con def,de ingles defining tambien llevan parametros y el freno de la sintaxis se define por espacios,ya que en Perl,C o javascript la sintaxis para terminar una linea es punto y coma (;), aquí en python la estructura de funciones y de todo se define por espacios:

En C:

#include <stdio.h>


int main()
{
    printf ( "También escribo en C\n" );
    return 0;
}

En Perl:

#!/usr/bin/env perl

&hola("Hola","Mundo")

sub hola {

my ($h,$m) = @_;

print "Y en Perl :D\n";

print "$h $m\n";

}


Como podemos ver aqui los espacios de reconocimiento de terminacion de linea son definidos por (;),en python como dije son definidos por espacios,pero solo en funciones,clases,estructuras selectivas,bulces u otros operadores de datos de ese tipo,no en todo se deb usar espacios,como en C o Perl se usa (;) en casi todas las lineas:


Vamos a definir nuestra primera funcion:

#!/usr/bin/env python3

# Primera funcion

def primera(n,l): # Le pasamos dos argumentos
      print ("Argumento 1: ", l,"\nArgumento 2: ", n)

# Llamamos la funcion

primera(2,"Texto") # Le pasamos los dos datos


Lo voy a explicar mas detalladamente:

def primera(n,l):
def : # def se usa para comenzar una nueva función,seguida de esta debe ir el nombre de dicha función y termina con dos puntos (:) para indicar que comienza el contenido de nuestra funcion

primera # Es el nombre de nuestra primera funcion,podemos usar el que gustemos

(n,l) # Dentro de estos parentesis definiremos el nombre de los valores que le pasaremos cuando llamemos la funcion,estos valores/variables son locales,solo serán y tendran este valor dentro de la misma funcion.


primera(2,"Texto")
primera # Si escribimos el nombre de la función ya lejos de su alcance(fuera de los espacios) python la llama a escena,si le definimos parámetros estos se los tenemos que pasar o de otra manera tendríamos que definirlos en la misma función,en este caso n es igual a 2 y l es igual a Texto ya dentro de la función.

Bien sabiendo esto podemos realizar el código del principio de nuevo pero con funciones:

#!/usr/bin/env python3

from datetime import datetime

fecha = datetime.now() # Variables
ahora = fecha.year # Globales

def calcula(nacimiento):

    vida = ahora - nacimiento
    print ("A tus ", vida, "años habras vivido", vida * 365 * 24, "horas") 

calcula(numeros) # Numero de primer persona
calcula(numeros) # Numero de segunda persona
calcula(numeros) # Numero de tercer persona
# Etc

Igual que en todos los lenguajes manejo mis datos como salida estándar en la consola desde print,a menos que nesesite usar ese dato para otra cosa,por ejemplo si quiero ese dato pero no lo quiero imprimir no necesariamente tengo que usar print para que devuelva un numero puedo imprimirlo desde la llamada de la funcion o incluso guardar el resultado en una variable:

Todo esto se logra con return que maneja la llamada de la función como el dato que regresa:

Por ejemplo necesitamos saber las horas pero necesitamos también multiplicarlos por los minutos:

#!/usr/bin/env python3

from datetime import datetime

fecha = datetime.now()

ahora = fecha.year    

def calcula(nacimiento):

    vida = ahora - nacimiento

    return vida * 365 * 24 # Ahora estamos regresando un valor al llamar a la funcion

persona1 = calcula(1990) # Convertimos el regreso de la funcion llamada en una variable
persona2 = calcula(1980) # Convertimos el regreso de la función llamada en una variable

print ("Dias vividos de la persona1 : ", persona1, "en minutos: ", persona1 * 60)
print ("Dias vividos de la persona1 : ", persona2, "en minutos: ", persona2 * 60)

De momento eso es todo,en la próxima parte hablaremos del alcance de las variables,usar diccionarios o listas en las funciones,definir variables desde funciones y de *args & **kwargs.
Leer más...

sábado, 6 de abril de 2013

Como crear un livecd de Gentoo con DE a nuestro gusto parte (III/III)

Esta ya es la ultima parte de estas tres entradas para crear nuestro propio sistema basado en Gentoo,y bueno lo que vamos ha hacer en esta entrada no es tan tardado,bueno eso depende de que queramos instalar ya que si solo queremos un sistema con el que viene en el livecd de Gentoo minimal no nos tome mucho tiempo pero si queremos KDE nos tomara días(dependiendo de nuestro hardware) y bueno vamos a comenzar:

Tutorial

Nota : Primero necesitas hacer los pasos de la entrada pasada :

Enlace

1.Compilar el kernel:

El kernel es el corazón del sistema, así que necesitamos configurarlo,en la entrada pasada ya descargamos las sources,pero aun no nos sirven de nada si no están compiladas en el sistema,primero que nada necesitamos entrar en el sistema enjaulado(se muestra como en las partes pasadas) , ahora nos pasamos a donde estan las sources:

cd /usr/src/linux
Aquí entraremos al menu de configuración del nucleo,escribimos

make menuconfig

Y entraremos a la configuración:

Esta es la parte mas "difícil" de instalar Gentoo en nuestro disco duro y en este caso un poco mas difícil al crear una .iso portable, así que mejor aqui le paramos :(



No no es cierto solo estoy ambientando para que no nos estresarmos :P.

Primero que nada no debemos preocuparnos,ya que esto es para aprender y para divertirnos un poco creando algo propio(con mucho apoyo de gentoo,porsupuesto) pero no se va ha hechar a perder nada ya que es un sistema enjaulado y el propio sistema enjaulado le podemos hacer un backup por si no nos sale podemos compilar el kernel del backup:

Para hacer backup:

1.Salimos del entorno enjaulado(se mostro como hacer en las entradas pasadas)

2.Hacemos cd a la carpeta donde tenemos las sources,por ejemplo yo las tengo en /root/live-gentoo

su

cd /root/live-gentoo



3.Creamos una carpeta:

mkdir backup-sources
4.Copiamos:

rsync --archive --hard-links sources /backup-sources
Nota:Se tarda un rato

Y de esta manera tenemos una copia de nuestro sistema antes de compilar el kernel,si no nos queda ahora hacemos la jaula en backup-sources,pero primero borramos la otra y creamos otra,para ir viendo hasta que quede.

Bien continuando, la configuración depende de nuestro hardware por lo cual no les puedo ayudar,solo les puedo dar la configuración que necesita para poder correr en modo live :

Un poco de copy & paste:


Archivo: Configuración básica del Kernel
  General setup  --->
    <*> Initial RAM filesystem and RAM disk (initramfs/initrd) support

  File systems  --->
    <*> Ext3 journalling file system support
    <*> Reiserfs support
    <*> JFS filesystem support
    <*> XFS filesystem support
    <*> Kernel automounter version 4 support (also supports v3)

    Miscellaneous filesystems  --->
      <*> SquashFS 4.0 - Squashed file system support

    CD-ROM/DVD Filesystems  --->
      <*> ISO 9660 CDROM file system support

    Pseudo filesystems  --->
      [*] Virtual memory file system support (former shm fs)

  Device Drivers  --->

    Block devices  --->
      <*> Loopback device support
      <*> RAM disk support

    ATA/ATAPI/MFM/RLL support  --->
      <*> Include IDE/ATAPI CDROM support



También les dejo estos manuales de compilación:


Solo es para que se guíen no compilen el kernel ni instalen nada como se muestra en las guías,solo hagan la configuración del kernel:



gentoo.org

Wrong Shell 

También de una vez les recomiendo que configuren los modulos de su tarjeta para que funcione Xorg:

Enlace 
Y la configuracion de Alsa para que tenga sonido y podamos ver videos escuchar musica,etc

Enlace
Acabando de configurar nos salimos y guardamos las configuraciones,

Nota: Otra cosa que se puede hacer es usar la configuración del kernel de un sistema ya listo,por ejemplo el de ubuntu,asiendo make oldconfig,solo que no lo recomiendo por varias cosas,una de ellas es que trae compilado mucho y para que nosotros compilemos lo que compilo canonical nos vamos a tardar horas.

Ya guardada la configuración compilamos;


make && make modules_install

Copiamos el kernel al /boot

32 bits:
 cp arch/i386/boot/bzImage /boot/vmlinuz

 64 bits:


cp arch/x86_64/boot/bzImage /boot/vmlinuz

Creamos un archivo initrd con genkernel:

genkernel initramfs


Esto nos crea un initramfs en nuestro /boot ahora lo renombrados initrd:

 mv /boot/initramfs-genkernel-*  /boot/initrd

Con eso ya podriamos iniciar nuestro sistema,pero no vamos mas aya vamos a instalar Xorg.

2.Primero que nada yo recomiendo hacer pruebas,asi que si nuestro kernel no esta bien de nada nos sirve así que pasa al paso 4 a menos que estes seguro que el kernel servirá sin ningún problema:

Nos metemos en nuestro make.conf y añadimos esto segun tu tarjeta de video:

nano /etc/portage/make.conf

Para todos:

# Para el soporte del ratón, teclado y touchpad SynapticsINPUT_DEVICES="evdev synaptics"

# Para tarjetas nVIDIAVIDEO_CARDS="nouveau"

# Para tarjetas AMD/ATI)VIDEO_CARDS="radeon"

# Para intelVIDEO_CARDS="intel"

Nos aseguramos que este udev en nuestro USE

echo "x11-base/xorg-server udev" >> /etc/portage/package.use


 Compilamos:

emerge xorg-server
Reiniciamos variables de entorno

env-update 
source /etc/profile

Podemos instalar un entorno mínimo para probar con startx


emerge twm xterm 
 3. Instalar nuestro DE

Como dije y he dicho Linux nos deja prácticamente crear un sistema operativo o por lo menos la interfaz grafica maquillarla de una manera brutal,o si no no habria tanto post en Internet de mi escritorio de enero,febrero,abril,etc así que aquí vamos a usar todo ese conocimiento de configuración para ponerle una interaz a este sistema, lo malo es que vamos a hacerlo a texto, a ciegas ya que no hay un lugar que diga clic derecho poner de fondo de pantalla,primero que nada ya tenemos el sistema operativo,ya tenemos el kernel,ya tenemos las X,ya solo falta nuestra interfaz y aplicacciones:

Yo voy a dejarle openbox,cuando pueda le pongo KDE,pero de momento un entorno mínimo esta bien ya que KDE no se que necesito mover para configurarlo,de hecho creo que se tiene que hacer a nivel sources,o sea modificando el código fuente,pero bueno,vamos con openbox:

Pero también nos falta el sonido de alsa:

Nota: Ya debemos tener el kernel listo para esto haya arriba esta la guia:

emerge alsa-utils
Configuramos

alsaconf

Añadimos al inicio a nivel boot

rc-update add alsasound boot

Como dije no quiero nada de KDE o qt asi que antes de todo añado esto a mi USE:

-qt -qt4

Con eso no existe qt para Gentoo,no es que no me guste,pero no lo uso.


Instalamos:


emerge -av openbox


Ahora unos programas:

Nota : Se tarda en instalar,pero podemos hacerlo en dias no tenemos porque hacer esto en un rato,y mientras mas compilemos menos necesitaremos.

tint2

Tutorial

Para poner fondo de pantalla usaremos feh que lo hace desde linea de comandos:

emerge -av feh

Un administrador de archivos: Pacmanfm

emerge -av pacmanfm

Un Navegador : Firefox-Bin

emerge -av firefox-bin

Una terminal: Lxterminal

emerge -av lxterminal

Un login manager: Slim

emerge -av slim 

Lo que se nos ocurra o lo que queramos,de momento dejo solo eso.

Ahora configuramos eso:

Si lo deseamos podemos crear un usuario alterno a root:


useradd -g users -G lp,wheel,audio,cdrom,portage -m nombre_usuario 

Y configuramos su contraseña

passwd nombre_usuario

También instalamos sudo:

emerge -av sudo

Configuramos:

Añadimos wheel al uso de sudo:

sed -i -e 's/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/' /etc/sudoers

Para iniciar slim:

Cambiamos xdm por slim:

sed -i -e 's/DISPLAYMANAGER="xdm"/DISPLAYMANAGER="slim"/'  /etc/conf.d/xdm

Ahora configuramos

nano /etc/slim.conf

Buscamos:

login_cmd           exec /bin/bash -login /usr/share/slim/Xsession %session

Y lo comentamos,ahora descomentamos:

login_cmd           exec /bin/bash -login ~/.xinitrc %session
Para que ejecute lo de nuestro .xinitrc

También le podemos poner un fondo personalizado:

Metemos una imagen a nuestro sistema enjaulado,o varias imagenes (se puede desde el sistema real en modo root) por ejemplo en una careta que se wallpapers y que este en /usr/share/

Ahora borramos el fondo original

/usr/share/slim/themes/default/background.png

Y copiamos uno de nuestras imagenes:

cp /usr/share/wallapers/imagen.png /usr/share/slim/themes/default/background.png

Ahora configuramos nuestro .xinitrc

Para root en mi caso openbox:


echo "exec openbox-session" >> ~/.xinitrc

Para un usuario creado:

echo "exec openbox-session" >> ~nombre_usurio/.xinitrc

chown nombre_usuario ~nombre_usurio/.xinitrc

Y por ultimo configuramos el inicio de openbox:

Para root:

nano ~/.config/openbox/autostart.sh

Para un usuario creado:


nano ~nombre_usuario/.config/openbox/autostart.sh
Cuando terminemos:

chown nombre_usuario ~nombre_usuario/.config/openbox/autostart.sh

Configuracion:


Definimos nuestro idioma:

En mi caso :


setxkbmap latam &

Iniciamos tint2:

tint2 &
Ponemos un fondo de pantalla:

 feh --bg-scale /usr/share/wallapers/imagen.png


 Eso es todo, también podemos instalar conky,un dock,etc,lo que queramos.

Así dejo mi entorno de escritorio,despues le pongo temas de gtk,obmenu,etc,esto solo es una prueba.

Para otros entornos estan en la pagina de Gentoo:

Gnome

LXDE

KDE 

4.Instalar grub y iniciar:

Primero vamos a hacer limpieza para que pese menos nuestra .iso ya que en este momento el directorio que estamos usando debe pesar mas de 2gb,asi que borramos las locales innecesarias:


nano  /etc/locale.nopurge


Yo recomiendo dejar la locale de ingles y nuestra locale,por ejemplo

la-latin1es_MX.UTF-8 UTF-8enen_US.UTF-8

Ya editado ejecutamos:


localepurge && makewhatis -u

También borramos los archivos de extension .keep

find / -xdev -name ".keep" -print -exec rm {} \;
Ahora si instalamos grub

emerge grub
Editamos el menu de configuracion

nano /boot/grub/menu.lst

Y metemos esta configuración,con el nombre que queramos y el tiempo que queramos por ejemplo:

Enlace 
Borramos el enlace simbolico y renombramos grub.conf

Así se puede:

cd /boot/grub/ && cat menu.lst >  grub.conf ; rm menu.lst
 Listo nuestra distribucion.

Salimos

exit
Desmontamos todo,con el script(se mostró en las entradas pasadas)

Nos cambiamos al directorio donde tenemos las sources,el que mencione arriba,por ejemplo:

cd /root/live-gentoo/
Creamos un directorio target


mkdir -p target/files/source
Y copiamos:

rsync --archive --hard-links --quiet source/boot target/

rsync --archive --hard-links source/ target/files/source
Se tarda un rato.

El nombre source fue el que le pusimos en la primera parte de estos tutoriales,puede que le hayan puesto archivos,sources,etc el otro source es que acabamos de crear,no lo renombramos ni nada.

Borramos archivos,para aligerar un poco esto:


rm -rf target/files/source/var/run/*
rm -rf target/files/source/var/tmp/*
rm -rf target/files/source/var/cache/*
rm -rf target/files/source/var/log/*
rm -rf target/files/source/usr/portage
rm -rf target/files/source/etc/portage
rm -rf target/files/source/usr/src
rm -rf target/files/source/root/*
rm -rf target/files/source/tmp/*

Creamos una imagen  squashfs

mksquashfs target/files/source/ target/livecd.squashfs
 Creamos un archivo vacio para que monte los tmp's


 touch target/livecd
Creamos la .iso
mkisofs -no-emul-boot -boot-load-size 4 -boot-info-table -r -b boot/grub/stage2_eltorito -c boot.catalog -o nombre.iso -x files target/
Eso es todo :D

Una .iso de 270.mb

a
Ahora solo la quemamos:

Con brasero y el quemador de discos de Windows 7 no tube problemas con cd's y dvd's muestra todo como debe ser.

Pero con dd para quemar el .iso a un pendrive o memoria externa no me funciono,puede que este mal mi memoria porque no quema ni una .iso de ubuntu que tengo,pero con unetbootin no tube problema al quemar el .iso a un pedrive,eso si no nos muestra nuestro grub no muestra syslinux :(.



Fuentes y referencias:

Creación del .iso y la mayor parte del tutorial:

wiki.cecalc.ula.ve

Configuración de entorno y núcleo

gentoo.org/doc/es/



Leer más...

tint2 panel ligero para Linux

En Linux existen distintos entornos de escritorio para poder configurar nuestro escritorio como nosotros queramos,hay unos avanzados como gnome-panel hay otros muy avanzados como el de KDE,pero hay muchos paneles minimalistas que estan incluso por debajo(menos consumo de recursos) que lxpanel o xfcepanel,existen varios pero uno de los mas populares es tint2,un panel muy ligero y muy minimalista,tanto que debemos configurarlo en modo texto(tambien hay GUI),pero que nos puede quedar muy bien adaptado a nuestro entorno de escritorio:

Nota: Primero una advertencia, este panel esta hecho para poder funcionar con entornos mínimos LXDE,XFCE,openbox,fluxbox no lo he probado en Tilling Window Manager(Awesome,Notion,i3,etc) y en entornos pesados (gnome shell,kde,unity) va a dar problemas.


Tutorial

1.Instalamos

Ubuntu :

sudo apt-get install tint2
Archlinux:

sudo pacman -S tint2

Gentoo:

Tint2 minimo:

sudo emerge -av tint2
Tint2 con batería y configuración por GUI:

su

echo 'x11-misc/tint2 battery examples tint2conf' >> /etc/portage/package.use

sudo emerge  tint2 


Tint2 total(GUI completa,Bateria,lanzadores)

emerge subversion

mkdir ~/tint2 && cd ~/tint2

svn checkout http://tint2.googlecode.com/svn/trunk/ Tint2-read-only
cd tint2*

mkdir build

cd build

cmake -DCMAKE_INSTALL_PREFIX=/usr ../

make

sudo make install

Configuración:

Abrimos tint2:

En terminal

tint2 & exit

Si nos bajamos tint2 con GUI configurar es muy fácil solo buscamos en el menu tint2conf o en terminal

tint2conf & exit
o

tint2wizard & exit


Desde aquí podemos meter nuestra configuración, es muy facil como si fuera gnome-panel o el panel de KDE,tambien se puede hacer de modo texto pero  no voy a hablar de como configurar ya que es largo de explicar y ya teniendo la GUI no hay porque complicarnos, aquí un tutorial:

Enlace
Ahora ya tenemos panel para administrar las ventanas y ver la hora y bateria, también si implementamos systray nos mostrara la bandeja de aplicaciones(wicd,networkmanager,fusion-icon)

Ahora solo añadiremos un menu,un menu para poder acceder a nuestras app's,esto es opcional ya que por ejemplo openbox trae su propio menu en el escritorio pero,bueno asi es como queda:





Asi es,es un script en Perl + Gtk2 de trizen el programador al que le debemos Alsi,para usar:

Para sistemas no Arch:

Necesitamos usar Gtk2 y tener Perl/Gtk2:

sudo cpan Gtk2

También necesitamos Linux::DesktopFiles

sudo cpan Linux::DesktopFiles
Y descargar el script

Enlace
Para Arch

yaourt -S menutray
Y usamos:


Distros no Arch

perl script.pl --help
Veremos las opcines,por ejemplo para crear un menú con iconos:

perl script.pl -i

Para Arch

menutray

Las configuraciones las podemos están en :

~/.config/menutray/
Asi que en terminal

cd ~/.config/menutray/ && ls

Todo esta en Perl mi lenguaje nativo :P,pero casi no se necesita modificar nada porque todo es automático el único archivo que les recomiendo editar es config.pl

nano config.pl

Aquí cambiamos los valores de la configuración por ejemplo trae geany no editor nativo,yo no uso eso así que pongo gedit por ejemplo:


Ahora solo falta iniciarlos al inicio:

En openbox:

Editamos

nano ~/.config/openbox/autostart.sh
Escribimos:

tint2 &

perl script.pl -i &

En LXDE:

Editamos:

nano /etc/xdg/lxsession/LXDE/autostart
Escribimos:

@tint2 

@perl script.pl -i

Para Fluxbox no se :(

Asi que eso es todo :D
Leer más...