Probando ownCloud, el Dropbox libre
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.














[...] información sobre como poner todo esto en marcha podéis mirar este blog donde está muy bien [...]
Csync: falló en encontrar un archivo especifico.
sabes a ke se debe este error.
ownCloud csync failure to find a file
Sabras por que es este error.
ya en la la parte de la sincronizacion con una carpeta.
me marca este error , tu sabras por que es?
Csync: Fallo en encontrar un archivo especifico
ya trate de configurar varias carpetas, resolver permisos y no me deja.
@RoiGlezVilla http://t.co/ZffxbP8O
Pues https://workcloud.com.co/ esta actualizado a la version 4.06 y ofrece 3gb gratuitas. Solo quiero compartir esta info disculpen si es considerado como spam
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 mucha memoria 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…