Categoría: Uncategorized

  • Ubuntu Oneiric «Waiting for network configuration…»

    Al actualizar a Ubuntu Oneiric el sistema se quedaba en el arranque esperando durante un minuto con el siguiente mensaje:

    Waiting for network configuration...

    Y después un minuto más:

    Waiting up to 60 seconds for network configuration...

    Tras esto mostraba el mensaje:

    Booting system without full network configuration.

    Por lo visto es muy común este problema, aunque con dos variantes con causas y consecuencias completamente distintas. Una, que al parecer provocaba que tras la espera se detuviera el arranque, estaba originada por la ausencia de los enlaces simbólicos a /run y /run/lock dentro de /var. Este problema debe tener su origen en la existencia previa de directorios con los nombres de dichos enlaces dentro de /var. Pero en mi caso los enlaces existían, y el problema era otro, pues después de la larga espera el sistema continuaba arrancando normalmente.

    La solución la encontré gracias a la quinta entrada del hilo [SOLVED] waiting for network configuration de Ubuntu Foums, en la que se aludía a la configuración automática de interfaces de red no existentes durante el inicio en el fichero de configuración /etc/network/interfaces.

    Así era, en dicho fichero, tenía especificado para su configuración automática el interfaz usb0, utilizado para la conexión IP por USB con mi móvil. En las versiones anteriores no suponía un problema, cuando conectaba el móvil, se aplicaba la correspondiente configuración y listo, pero ahora, espera durante dos minutos a que todos los interfaces configurados como automáticos estén presentes.

    La solución es bien sencilla, eliminar el interfaz usb0, o aquel que no exista durante el inicio del sistema, de la línea auto de /etc/network/interfaces.

  • Receta para remontar una partición en lectura/escritura

    A veces te encuentras con una partición montada en modo de sólo lectura y te apetece hacer un cambio en su contenido. Esta es la receta para hacerlo con la partición system de un Android, por ejemplo:

    mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
    

    Para volver a la situación normal una vez realizados los cambios:

    mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system

    Referencias:

    http://www.droidforums.net/forum/droid-hacks/8829-not-needing-mount-o-remount-rw-t-yaffs2-dev-block-mtdblock3-system.html
    http://groups.google.com/group/android-platform/msg/da581f1b398fdf8b?pli=1

  • Configuración manual de interfaz inalámbrico para conectar a puntos de acceso con cifrado WPA-PSK y WEP

    Estas instrucciones se han elaborado para Ubuntu 10.10, aunque serán, en su mayoría, válidas  para otras distribuciones GNU/Linux, particularmente si utilizan el sistema de inicio upstart.

    Con estos pasos se podrá prescindir de NetworkManager, haciendo que el servicio network de Ubuntu/Debian sea el que conecte a los puntos de acceso inalámbricos configurados, utilizando tanto cifrado WPA-PSK como WEP y con configuración IP automática mediante DHCP.

    Para poder realizar la conexión se necesitarán los paquetes ifupdown y wpasupplicant, por lo que lo primero será instalarlos.

    Una vez instalados se debe desactivar NetworkManager. Lo mejor es desinstalar el paquete network-manager, pero si sólo se quiere desactivar se pueden mover los ficheros encargados de configurar su inicio a otro directorio y parar su ejecución.

    sudo mv /etc/init/network-manager.conf disabled-init/
    sudo stop network-manager
    

    Con NetworkManager desactivado es turno para configurar el interfaz inalámbrico y las características de conexión de cada punto de acceso en los ficheros /etc/network/interfaces y /etc/wpa_supplicant/wpa_supplicant.conf respectivamente.

    Las instrucciones para la configuración del fichero /etc/network/interfaces y la conexión al punto de acceso WPA-PSK se obtuvieron del artículo Linux_Wireless_Networking, y la configuración de la conexión al punto de acceso con cifrado WEP se completo utilizando la ayuda del fichero /usr/share/doc/wireless-tools/README.Debian y del manual de wpa_supplicant.conf, ya que se hizo sin acceso a Internet.

    Configuración de /etc/network/interfaces

    La configuración del interfaz, suponiendo que sea eth1 el interfaz inalámbrico,  se hará añadiendo lo siguiente al fichero /etc/network/interfaces (para configuración DHCP):

    auto eth1
    iface eth1 inet dhcp
     wireless-essid WiFi_01
     pre-up wpa_supplicant -B -Dwext -ieth1 -c/etc/wpa_supplicant/wpa_supplicant.conf
     post-down killall -q wpa_supplicant

    Esta configuración hace que cuando se active el interfaz eth1 se lance wpa_supplicant en modo demonio (-B), utilizando el driver wext (-Dwext), gestionando el interfaz eth1 (-ieth1) con la configuración indicada en /etc/wpa_supplicant/wpa_supplicant.conf.

    Hay que hacer notar que en la parada se están matando todas las instancias de wpa_supplicant, por lo que si tenemos más de un interfaz inalámbrico, al detener uno de ellos se desconectarán los demás.

    Configuración de los puntos de acceso

    Una vez configurado el inicio del interfaz se configura su conexión a los puntos de acceso conocidos. Para ello, dado que en este caso se utilizan cifrados WPA-PSK o WEP, hay que proporcionar las correspondientes contraseñas de los puntos de acceso. En el caso de WPA-PSK la contraseña se puede proporcionar tanto en texto claro como cifrado. Si se quiere proporcionar como texto cifrado se debe utilizar el comando wpa_passphrase, proporcionando el ESSID del punto de acceso y la contraseña:

    wpa_passphrase <ESSID> <contraseña de acceso>
    

    El resultado será similar al siguiente:

    network={
     ssid="<ESSID>"
     #psk="<contraseña de acceso>"
     psk=<contraseña cifrada>
    }
    

    Ahora, se utilizará la contraseña cifrada proporcionada para incluirla en el fichero /etc/wpa_supplicant/wpa_supplicant.conf,  junto con algunas opciones más, de modo que el contenido del fichero sea el siguiente:

    # The below line not be changed otherwise we refuse to work
    ctrl_interface=/var/run/wpa_supplicant
    
    # Ensure that only root can read the WPA configuration
    ctrl_interface_group=root
    
    # Let wpa_supplicant take care of scanning and AP selection
    ap_scan=1
    
    network={
     ssid="<ESSID>"
     key_mgmt=WPA-PSK
     psk=<contraseña cifrada>
    }
    

    Para el punto de acceso con cifrado WEP hay que tener cuidado al proporcionar las contraseñas, no ya porque no se pueden proporcionar cifradas (que también debe tenerse en cuenta), sino porque según si las claves se proporcionan en formato ASCII o hexadecimal deberán ponerse entre comillas dobles o no. Es decir, si se va a proporcionar la clave en formato ASCII (13 caracteres para WEP104 o 5 para WEP40) la clave debe escribirse entre comillas, y si se proporciona en formato hexadecimal se hará sin comillas (26 dígitos hexadecimales para WEP104 o 10 para WEP40):

    network={
    ssid=»<ESSID>»
    scan_ssid=1
    key_mgmt=NONE
    wep_key0=»1234567890zxy»
    wep_tx_keyidx=0
    priority=4
    }

    La propiedad scan_ssid a 1 indica que se realice una búsqueda activa de un punto de acceso con el ESSID indicado, para los casos en los que el punto de acceso no difunde esta información.

    La propiedad priority indica la preferencia por uno u otro punto de acceso en el caso de que varios estén al alcance simultáneamente, de lo contrario se ignora.

    Con esto es suficiente, ahora, desactivando y activando de nuevo el interfaz debería conectar con el punto de acceso configurado que se encuentre al alcance.

    sudo ifdown eth1
    sudo ifup eth1
    

    Recuerdo que es fundamental tener NetworkManager desactivado, para comprobarlo:

    ps -elf | grep NetworkManager
    
  • De ext3 a ext2

    Para hacer lo posible por alargar la vida de mi memoria USB, decidí pasar sus particiones ext3 a ext2 para deshacerme del «Journal» y sus numerosas escrituras. No estoy seguro de que esto sea efectivo, pero tampoco veo razón por la que pueda ser perjudicial, así que busqué y encontré este artículo de Enrique Barbeito García donde se describen los principales pasos.

    Básicamente lo único que hay que hacer es desmontar la partición si está montada e indicar que el sistema de ficheros de dicha partición ya no debe tener «Journal», que es la diferencia entre un sistema de ficheros ext3 y uno ext2. Esto se hace con el comando ‘tune2fs’.

    # tune2fs-O ^has_journal /dev/sdc4

    Con esta orden se elimina el «Journal» y se puede montar la partición como ext2, aunque para ello hay que indicarlo explícitamente.

    # mount -t ext2 /dev/sdc4 /media/sdc4

    Para que no haya que indicar explícitamente el tipo de sistema de ficheros hay que actualizar la información del núcleo sobre esta partición, para lo que se utiliza el comando ‘partprobe’, así el «Notificador de dispositivos» será capaz también de montar la partición sin tener que reiniciar ni retirar el dispositivo USB.

    # partprobe /dev/sdc
  • Instalación de APEX 3.1 sobre Oracle XE 10g

    Una vez instalada la base de datos XE tenemos que configurar un parámetro de la misma, tal como se indica en los requisitos:

    Oracle Application Express requires the shared_pool_size of the target database to be at least 100 MB.

    To check the shared_pool_size of the target database:

    1. Start the database:
      $ sqlplus /nolog
      connect sys@xe as sysdba
      SQL> STARTUP
    2. If necessary, enter the following command to determine whether the system uses an initialization parameter file (initsid.ora) or a server parameter file (spfiledbname.ora):
      SQL> SHOW PARAMETER PFILE;

      This command displays the name and location of the server parameter file or the initialization parameter file.

    3. Determine the current values of the shared_pool_size parameter:
      SQL> SHOW PARAMETER SHARED_POOL_SIZE
    4. If the system is using a server parameter file, set the value of the SHARED_POOL_SIZE initialization parameter to at least 100 MB:
      SQL> ALTER SYSTEM SET SHARED_POOL_SIZE='100M' SCOPE=spfile;
    5. If the system uses an initialization parameter file, change the values of the SHARED_POOL_SIZE parameter to at least 100 MB in the initialization parameter file (initsid.ora).
    6. Shut down the database:
      SQL> SHUTDOWN
    7. Restart the database (tuve que hacerlo así porque un STARTUP me devolvía el error «ORA-12514: TNS:listener does not currently know of service requested in connect descriptor»):
      EXIT
      # /etc/init.d/oracle-xe restart

    También se puede hacer un «SHUTDOWN IMMEDIATE» para no esperar media hora a que cierren las sesiones. Este modo cierra todas las operaciones con COMMIT hecho antes de cerrar la base de datos.

    Después, tras comprobar con la siguiente orden que no tenía la versión 10.1.2.0.6 o superior del PL/SQL Web Toolkit sino la 10.1.2.0.4

    select owa_util.get_version from dual;

    tuve que actualizar previamente a la instalación del APEX 3.1 la versión del Web Toolkit que incluye. Como indica el README.TXT incluido en el directorio apex/owa.

    Installing the PL/SQL Web Toolkit 10.1.2.0.6
    ——————————————–
    1) Stop all applications using the database
    2) Navigate to the directory apex/owa
    3) Connect via SQL*Plus as the database user SYS
    4) Run the PL/SQL Web Toolkit installation script by issuing:

      @owainst.sql

    5) Review the output displayed from owainst.sql and ensure no errors were encountered.
    6) Confirm the PL/SQL Web Toolkit version is 10.1.2.0.6 or greater by connecting to the database
    as the SYS user and running the query:

    select owa_util.get_version from dual;

    7) Run the utlrp.sql script from the Oracle Database home to recompile all invalid PL/SQL
    packages now instead of when the packages are accessed for the first time. This step is
    optional but recommended. To run utlrp.sql, issue:

     @?/rdbms/admin/utlrp.sql

    Tendremos que esperar hasta que obtengamos el resultado:

    ERRORS DURING RECOMPILATION
    ---------------------------
                              0
    PL/SQL procedure successfully completed.

    Una vez cumplidos los requisitos reiniciamos la base de datos e instalamos el APEX en modo Full development environment, tal como indica la gúia de instalación:

    1. Descomprimir el archivo de instalación de APEX 3.1, el mismo que contiene el README.TXT mencionado previamente, y desde el directorio apex descomprimido ejecutar:
    2. $ sqlplus /nolog
      connect sys@xe as sysdba
    3. Comenzamos la instalación, esto se llevará un buen rato:
      @apexins tablespace_apex tablespace_files tablespace_temp images
      
      

      Al finalizar obtendremos las direcciones para las distintas secciones del APEX:

       The structure of the link to the Application Express administration services is as follows:
       http://host:port/pls/apex/apex_admin (Oracle HTTP Server with mod_plsql)
       http://host:port/apex/apex_admin     (Oracle XML DB HTTP listener with the embedded PL/SQL gateway)
      The structure of the link to the Application Express development interface is as follows:
       http://host:port/pls/apex (Oracle HTTP Server with mod_plsql)
       http://host:port/apex     (Oracle XML DB HTTP listener with the embedded PL/SQL gateway)
    4. Cambiar la contraseña del usuario admin del APEX:

      @apxchpwd
    5. Configurar APEX:
      # /etc/init.d/oracle-xe restart
      $ sqlplus /nolog
      connect sys@xe as sysdba
      @apex_epg_config /tmp
      
    6. Desbloquear el usuario anónimo:
      ALTER USER ANONYMOUS ACCOUNT UNLOCK;
    7. Especificar el directorio de imágenes (si hemos probado el interfaz web veremos que no están disponibles):
      @apxldimg.sql /tmp
    8. Opcionalmente podemos comprobar el puerto utilizado por Oracle XML DB HTTP Server:
      SELECT DBMS_XDB.GETHTTPPORT FROM DUAL;
    9. Podemos cambiar el puerto o deshabilitar el servicio especificando el puerto 0 con la siguiente orden:
      EXEC DBMS_XDB.SETHTTPPORT(port);
    10. Configurando Oracle HTTP Server
      ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;
      ALTER USER APEX_PUBLIC_USER IDENTIFIED BY new_password;