Hace algo más de dos años que la gente de KDE anunció un proyecto llamado ownCloud, un sistema de copia y sincronización de archivos «en la nube» basado en un servicio LAMP en la parte del servidor y el uso de csync en la parte del cliente. El resultado es que cualquiera pueda montarse su propio servicio de sincronización de ficheros similar a Dropbox o SugarSync, pero sin restricciones de espacio y/o tráfico (más allá de lo que le permita su propio servidor o su servicio de hosting) y sin plantearse dilemas de privacidad. El desarrollo ha sido muy rápido (hace dos meses que vió la luz la versión 3 del servidor y la 1 del principal cliente) y realmente, merece la pena probarlo y echarle un vistazo.
El aspecto realmente «potente» de ownCloud es montar tu propio servicio, pero si no tienes medios o prefieres empezar por evaluar si te gusta de forma sencilla, puedes hacerlo a través de algún proveedor externo, que ya los hay. Existen servicios de pago y otros que, al igual que Dropbox y similares, ofrecen una modalidad de entrada gratuita y opciones adicionales por las que hay que pagar (freemiun que lo llaman por ahÃ). Owncube ofrece cinco Gbytes de espacio gratuito y GetFreeCloud, ofrece seis. Yo te aconsejo que empieces por Owncube puesto que ha actualizado ya su versión a la 3.0.2 y hasta la anterior, la 3.0.1 que es la usada en GetFreeCloud, existen un par de vulnerabilidades que pueden aprovecharse fácilmente a través de Metasploit. (Ver ACTUALIZACIÃ?N (y II))
Crear una cuenta en cualquiera de ambos servicios es fácil: nombre, contraseña, correo electrónico y listo. Sólo con eso ya tienes un servicio de almacenamiento con un cómodo interfaz web.
Pero si realmente le quieres sacar partido a la sincronización automática de archivos entre tu equipo y el servidor y/o entre distintos equipos, necesitas instalarte un software cliente. En el anterior enlace tienes los binarios disponibles para Windows y las principales distribuciones de Linux. Los de Mac y Android (Ver ACTUALIZACIÃ?N) aún están en fase de desarrollo y no están disponibles. Para distribuciones «marginales» de Linux tienes los fuentes y detalladas instrucciones de compilación, aunque imagino que la mayorÃa de ellas tendrán ya listos paquetes más o menos oficiales. Yo estoy usando Chakra en estos momentos (y muy contento, ya os hablaré de ello en otra ocasión) y el pkgbuild correspondiente está disponible aquÃ.
Una vez instalado tenemos un icono disponible en la bandeja del sistema con un menú contextual bien sencillo: La opción de Configurar nos permite cambiar los datos de conexión con el servidor de sincronización y la opción de Add Folder nos permite añadir un nuevo directorio al servicio. Luego tenemos una entrada por cada directorio que se está sincronizando que nos abre directamente el administrador de archivos por defecto en dicho directorio local y la opción de cerrar el servicio (Quit). Si pulsamos con el botón izquierdo sobre el icono, en lugar de este menú se nos abrirá una ventana con información sobre el estado de sincronización de los directorios y la posibilidad de elmininarlos (del servicio, no de borrarlos), añadir nuevos, parar temporalmente el servicio en uno de ellos o volver a reanudarlo, etc.
En la funcionalidad de «añadir directorios» es donde, quizás, se aprecia mejor la diferencia en la filosofÃa de uso frente a Dropbox que, tal vez, es su competidor más popular. Aquà no existe un único directorio de sincronización sino que los añadimos de forma individual aunque estos se encuentre en diferentes sitios de nuestro sistema de archivos. En Dropbox solemos resolver este asunto (al menos desde Linux) mediante enlaces simbólicos pero este método es bastante más flexible y cómodo. Además, podemos realizar la sincronización de un directorio en particular no sólo contra el servidor que hemos configurado «en la nube» sino contra otro directorio local o contra cualquier otra URL donde, lógicamente, debemos de tener acceso de escritura. Esto nos abre 1001 posibilidades de salvaguarda de nuestros datos.
Volviendo al interfaz web, este tiene algunos «complementos» bastante útiles que podemos apreciar en el menú de enlaces a la izquierda: bookmarks, calendarios, contactos y dos entradas llamadas Música y GalerÃa donde, automáticamente y de forma similar a como hace Android, se recopilan entradas a este tipo de archivos independientemente del directorio donde se encuentren. Ah, y en la opción de música tenemos un reproductor y todo 😉
No he encontrado forma de sincronizar el calendario o los bookmarks con otros servicios externos y los contactos deberÃan de poder sincronizarse con los de GMail a través de una opción existente en el menú de Ajustes (la rueda dentada que aparece en la parte inferior izquierda) pero no he logrado hacer que funcione.
Para los amigos de la lÃnea de comando, existe un cliente de administración opcional para la consola llamado owncloud-admin. Los ficheros de configuración, al menos en mi distribución, se guardan en el directorio $HOME/.local/share/data/ownCloud/ Allà nos llevaremos la desagradable sorpresa de que el usuario y la contraseña de nuestro servidor de sincronización se guardan en claro dentro del fichero owncloud.cfg. En la instalación del cliente se nos pregunta si queremos que esta no se guarde y se nos pregunte en cada arranque pero, vaya, serÃa deseable una mayor integración con kwallet, el servicio de gestión de contraseñas propio de KDE.
Está claro que el desarrollo tiene aún muchos detalles por pulir y mejorar. He tenido problemas durante las pruebas con supuestos desajustes horarios entre cliente y servidor (que se han solucionado eliminando el servicio de sincronización y volviéndolo a crear, luego se trata de otra cosa…) y echo de menos que sincronice el contenido de enlaces simbólicos en el equipo local (cosa que no hace). Se echan de menos, además, opciones disponibles en Dropbox desde hace tiempo (como, por ejemplo, la recuperación de versiones anteriores de un archivo). También serÃa deseable que, ya puestos, pudiéramos sincronizar distintas carpetas contra diferentes servidores de owncloud. Y, desde luego, los clientes móviles deberÃan de estar disponibles pronto si quieren que el servicio entre a competir con los grandes. Pero de entrada, y a mi juicio, tiene muchas posibilidades y se trata del primer servicio de este tipo verdaderamente libre (y no como Ubuntu One). OpenSuse está particularmente involucrado en sacarlo adelante, asi que esperemos que seguirá evolucionando de forma rápida.
Pronto y en otra entrada, contaremos como puedes montarte tu propio servicio servidor de owncloud.
ACTUALIZACI�N (y II): En getfreecloud.com han actualizado ya a la versión 3.03 de la versión servidor de owncloud, asà que ya no hay problemas de vulnerabilidades conocidas.
Pastor: no me he debido de explicar bien en el comentario. Te digo que yo no cuento en ningún lado que tengas que escribir «http://localhost/owncloud» en el navegador. Y repito: creo que estás mezclando la instalación de un servidor de owncloud (cosa de la que yo no hablo aquÃ) con la instalación y configuración inicial del cliente contra un servidor público ya instalado, que es lo que trato de explicar.
No es que haya que escribir eso. Es que ese código php es lo que me sale en el navegador cuando escribo http://localhost/owncloud
y me deberÃa salir la pantalla de inicio de owncloud.
Paganini: y… ¿dónde digo que haya que escribir eso? Me parece que lo que tu te has instalado es la versión de servidor y lo que yo trato aquà es la de cliente (y usar un servidor ya instalado como owncube o getfreecloud)
Muy buen post, he seguido todos los pasos al pie de la letra y no he tenido errores, pero al escribir en el navegador http://localhost/owncloud me aparece esto escrito, quisiera saber que ocurrio mal, ya que he buscado mucho y no he conseguido. Gracias!
?php
/**
* ownCloud
*
* @author Frank Karlitschek
* @copyright 2010 Frank Karlitschek karlitschek@kde.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see .
*
*/
$RUNTIME_NOAPPS = TRUE; //no apps, yet
require_once(‘lib/base.php’);
// Setup required :
$not_installed = !OC_Config::getValue(‘installed’, false);
if($not_installed) {
// Check for autosetup:
$autosetup_file = OC::$SERVERROOT.»/config/autoconfig.php»;
if( file_exists( $autosetup_file )){
OC_Log::write(‘core’,’Autoconfig file found, setting up owncloud…’,OC_Log::INFO);
include( $autosetup_file );
$_POST[‘install’] = ‘true’;
$_POST = array_merge ($_POST, $AUTOCONFIG);
unlink($autosetup_file);
}
OC_Util::addScript(‘setup’);
require_once(‘setup.php’);
exit();
}
// Handle WebDAV
if($_SERVER[‘REQUEST_METHOD’]==’PROPFIND’){
header(‘location: ‘.OC_Helper::linkToRemote(‘webdav’));
exit();
}
elseif(!OC_User::isLoggedIn() && substr(OC::$REQUESTEDFILE,-3) == ‘css’){
OC_App::loadApps();
OC::loadfile();
}
// Someone is logged in :
elseif(OC_User::isLoggedIn()) {
OC_App::loadApps();
if(isset($_GET[«logout»]) and ($_GET[«logout»])) {
OC_User::logout();
header(«Location: «.OC::$WEBROOT.’/’);
exit();
}else{
if(is_null(OC::$REQUESTEDFILE)){
OC::loadapp();
}else{
OC::loadfile();
}
}
// For all others cases, we display the guest page :
} else {
OC_App::loadApps();
$error = false;
// remember was checked after last login
if(isset($_COOKIE[«oc_remember_login»]) && isset($_COOKIE[«oc_token»]) && isset($_COOKIE[«oc_username»]) && $_COOKIE[«oc_remember_login»]) {
if(defined(«DEBUG») && DEBUG) {
OC_Log::write(‘core’,’Trying to login from cookie’,OC_Log::DEBUG);
}
// confirm credentials in cookie
if(isset($_COOKIE[‘oc_token’]) && OC_User::userExists($_COOKIE[‘oc_username’]) &&
OC_Preferences::getValue($_COOKIE[‘oc_username’], «login», «token») == $_COOKIE[‘oc_token’]) {
OC_User::setUserId($_COOKIE[‘oc_username’]);
OC_Util::redirectToDefaultPage();
}
else {
OC_User::unsetMagicInCookie();
}
// Someone wants to log in :
} elseif(isset($_POST[«user»]) and isset($_POST[‘password’]) and isset($_SESSION[‘sectoken’]) and isset($_POST[‘sectoken’]) and ($_SESSION[‘sectoken’]==$_POST[‘sectoken’]) ) {
if(OC_User::login($_POST[«user»], $_POST[«password»])) {
if(!empty($_POST[«remember_login»])){
if(defined(«DEBUG») && DEBUG) {
OC_Log::write(‘core’,’Setting remember login to cookie’,OC_Log::DEBUG);
}
$token = md5($_POST[«user»].time().$_POST[‘password’]);
OC_Preferences::setValue($_POST[‘user’], ‘login’, ‘token’, $token);
OC_User::setMagicInCookie($_POST[«user»], $token);
}
else {
OC_User::unsetMagicInCookie();
}
OC_Util::redirectToDefaultPage();
} else {
$error = true;
}
// The user is already authenticated using Apaches AuthType Basic… very usable in combination with LDAP
} elseif(isset($_SERVER[«PHP_AUTH_USER»]) && isset($_SERVER[«PHP_AUTH_PW»])){
if (OC_User::login($_SERVER[«PHP_AUTH_USER»],$_SERVER[«PHP_AUTH_PW»])) {
//OC_Log::write(‘core’,»Logged in with HTTP Authentication»,OC_Log::DEBUG);
OC_User::unsetMagicInCookie();
OC_Util::redirectToDefaultPage();
}else{
$error = true;
}
}
if(!array_key_exists(‘sectoken’, $_SESSION) || (array_key_exists(‘sectoken’, $_SESSION) && is_null(OC::$REQUESTEDFILE)) || substr(OC::$REQUESTEDFILE, -3) == ‘php’){
$sectoken=rand(1000000,9999999);
$_SESSION[‘sectoken’]=$sectoken;
$redirect_url = (isset($_REQUEST[‘redirect_url’])) ? $_REQUEST[‘redirect_url’] : $_SERVER[‘REQUEST_URI’];
OC_Template::printGuestPage(», ‘login’, array(‘error’ => $error, ‘sectoken’ => $sectoken, ‘redirect’ => $redirect_url));
}
}
RT @fcorubioreales: Probando ownCloud, el Dropbox libre http://t.co/5x4SoLqi
Mmm, esa es buena, no me sabÃa yo esos parámetros de configuración 🙂
Imagino que lo mÃo es más matar moscas a cañonazos, pero cuando hay muchas moscas funciona 🙂
Gracias por el truco.
Hace unas semanas escribà una entrada en la que comentaba algunas de estas cosas. La verdad es que un servidor web con poca RAM y muchos accesos es difÃcil de gobernar. Después de escribir la entrada que te enlazo estuve haciendo pruebas con memcached y varnish pero, claro, para que funcionen tienes que dedicarles RAM al cacheado y eso hace que puedas disponer de aún menos procesos de Apache, asà que no siempre resulta una estrategia rentable… Estos problemas, cuando estás con el servidor web de tu empresa con 4 gigas de RAM no te los tropiezas… 🙂
Aloriel: yo tengo limitado el número de clientes que Apache admite en 40 con la directiva MaxClients y un Timeout bajo, en 10 segundos, para que las conexiones se renueven rápidamente, pero, aún asÃ, ante una avalancha como la de Meneame el servidor cayó. Lo que sospecho es que lo que saturó la memoria del servidor fue la estructura que genera Apache para mantener clientes en espera de ser atendididos y eso podrÃa controlarse con la directiva ListenBacklog. Como me pica la curiosidad montaré una maqueta pequeña y haré pruebas, pero tendrá que esperar a Julio que ahora estoy saturado de trabajo… Ya te cuento.
Probando #ownCloud el dropbox libre! http://t.co/jB3RmiC8
JosemarÃa: el mÃo es algo más grande, 2GB de RAM y 4 procesadores a 2GHz (2 núcleos 4 hilos), pero la conexión no da, asà que tengo un pequeño script que cada 5 minutos me comprueba el número de conexiones que hay, si son más de 150 me manda un correo y comprueba cuántas hay un minuto después. Si son más de 180 mata el Apache y lo relanza, también mandándome un correo. Con eso conseguà que no se cayese la página cuando me menearon (a lo mejor a ti te tocarÃa poner más conexiones o menos).
¡Saludos!
@cristiangauma Con el cliente de Owncloud sin problemas, por ahora. Aunque funciona algo distinto de Dropbox. Mira http://t.co/2148Zkw5
Probando #ownCloud, el #Dropbox libre: http://t.co/k7y7Lb3V
Aloriel: Lo tengo en un VPS pequeñito con sólo 512Mbytes de RAM. He estado ajustando parámetros durante estos dos dÃas y he conseguido que de tiempos de respuesta aceptables (de entre 1 y 3 segundos) con cargas de 3000 o 3500 páginas por hora, pero ha llegado a tener picos de cinco mil y pico y eso es ingobernable con estos recursos. De hecho, no ha estado nunca realmente caido, pero el pobre indio no daba para más… Tengo pendiente desde hace meses ver algún acelerador para php (eaccelerator o xcache, seguramente) pero con las 500 visitas a la hora que suelo tener de máximo no me hace realmente falta. Digo yo que de aquà a dos años que me toque otro meneo habré sacado tiempo de hacerlo 😉
Ayer te dieron bien por este articulo, eh!?
El blog estuvo caido un buen rato. Lo tienes hospedado en casa?
RT @Kukudrulu: Probando ownCloud, el Dropbox libre http://t.co/4fcGNuFR gracias a @bermejo_alv por darnos a conocer esta herramienta. Nuestra propia nube
Probando ownCloud, el Dropbox libre – http://t.co/rpawGvaD #in
RT @Kukudrulu: Probando ownCloud, el Dropbox libre http://t.co/4fcGNuFR gracias a @bermejo_alv por darnos a conocer esta herramienta. Nuestra propia nube
Probando ownCloud, el Dropbox libre http://t.co/9jaSg7dF
Realmente interesante.. http://t.co/IzvJhUET @caxcan70 si tenemos acceso ssh lo montamos en la plataforma 😀
Información sobre #ownCloud, #Dropbox libre http://t.co/JKo4pE8l
Probando ownCloud, el Dropbox libre – http://t.co/olGDINhr #cacharreando