Problema

Usted detuvo inadvertidamente el Servicio HTTP o la Consola Web y ya no puede acceder al sistema. O bien, su repositorio se calló y la Consola Web simplemente no le permite arreglar fácilmente el repositorio. O, está buscando la Consola CRX de versiones anteriores de CRX.

Resolución

Este documento explica cómo puede instalar un shell de línea de comandos basado en texto que le ayude a recuperarse de estos y otros problemas.

Jugadores Clave

La clave de la solución es usar la interfaz de línea de comandos para el framework OSGi que proporciona el Shell Apache Felix Gogo. Como es costumbre en el mundo OSGi, el Gogo Shell se presenta como una colección de paquetes:

  • Tiempo de ejecución de Apache Felix Gogo -- El tiempo de ejecución del núcleo de la shell. Este paquete proporciona la API principal y la funcionalidad de integración para ejecutar un shell de comandos.
  • Comando Apache Felix Gogo -- Los comandos básicos para el mantenimiento del marco OSGi. Este paquete proporciona comandos para introspección y manipulación y el marco OSGi y sus paquetes.
  • Apache Felix Gogo Shell -- La funcionalidad del shell de texto. Este paquete proporciona un shell local básico (desactivado por defecto en las aplicaciones basadas en Granito) en el que se basan las características remotas.
  • Complemento Gogo Shell de la Consola Web Apache Felix -- Soporte de Text Shell dentro de la Consola Web. Este paquete extiende el paquete de la Consola Gogo exponiendo el intérprete de comandos de texto en la Consola Web.
  • Apache Felix Remote Shell -- Telnet-style Text shell support. Este paquete extiende el paquete del Shell de Gogo exponiendo el shell de texto sobre TCP/IP.

Más información sobre el Gogo Shell está disponible en el sitio web de Apache Felix.

Conceptos básicos requeridos

Los paquetes de núcleo -- Runtime, Command y Shell -- son esenciales y siempre son necesarios.

Acceso a la consola web

Si el acceso a la Consola Web sigue siendo posible, se recomienda utilizar el plugin Gogo Shell de la Consola Web para el acceso remoto al shell.

Acceso Telnet

Si el acceso a la Consola Web ya no es posible, por ejemplo, el Servicio Http está muerto o la Consola Web ya no funciona, puede instalar el paquete Remote Shell.

A diferencia del plugin Gogo Shell de la Consola Web, el paquete Remote Shell no permite el acceso remoto real. Por razones de seguridad, el paquete Remote Shell por defecto solo escucha el puerto 6666 en localhost (127.0.0.1). Eso, el acceso solo es posible desde la misma caja.

Consideraciones de seguridad

Consola Web

El acceso a la Consola Web Gogo Shell Plugin está protegido como todo en la Consola Web, a través de una autenticación simple y un control de acceso básico. Por ejemplo, el proveedor de seguridad de la Consola Web de Sling solo permite que el usuario administrador acceda a la Consola Web.

Como tal, la Consola Web no debe, por supuesto, ser expuesta a través del Dispatcher a la Internet pública.

Telnet

El paquete Remote Shell no implementa ningún control de acceso. La única seguridad básica implementada es que, por defecto, solo es posible el acceso a localhost (127.0.0.1). Esto significa que se requiere un shell remoto al host (por ejemplo, una sesión SSH) antes de poder conectarse por telnet al shell remoto.

Además, el paquete de Remote Shell no está diseñado para estar activo por defecto y con el tiempo. El paquete debe ser instalado en caso de emergencia y debe ser desinstalado después de resolver el problema de emergencia para prevenir problemas potenciales. Ninguna funcionalidad regular debería basarse únicamente en el paquete Remote Shell.

La instalación

Instalación de paquetes de contenido

Si el repositorio JCR sigue siendo operativo y accesible a través de HTTP, lo más fácil es instalar el paquete de contenido de Gogo Shell adjunto. Este paquete de contenido proporciona los paquetes Gogo Runtime, Command y Shell, así como el complemento Gogo Shell de la consola web.

No incluye el Remote Shell por razones de seguridad y porque no es realmente necesario en esta situación.

Instalación de la Consola Web

Si el Repositorio JCR ya no está disponible pero la Consola Web está accesible, puede descargar y desempaquetar el adjunto Paquete de Contenido Gogo Shell y cargar los paquetes contenidos a través de la Consola Web.

Una vez más, el paquete de Remote Shell no debería instalarse en este caso por motivos de seguridad y porque no es realmente necesario.

Instalación de emergencia

En caso de resolver problemas de emergencia donde ni el Repositorio JCR ni la Consola Web son operables y accesibles, tendrá que recurrir a la instalación local de la Shell de Gogo. Esta instalación requiere acceso al sistema de archivos y acceso al shell.

Los pasos básicos de instalación son los siguientes:

  1. Obtener una sesión basada en texto para el sistema que ejecuta la aplicación Granite
  2. Cree una carpeta de instalación en la carpeta de la aplicación Granito (generalmente debajo de crx-quickstart
  3. Descargue y desempaquete el adjunto Paquete de Contenido de la Concha de Gogo
  4. Copiar los paquetes Gogo Runtime, Command y Shell en la carpeta crx-quickstart/install
  5. Descargue el adjunto Paquete Remote Shell y cópielo en la carpeta crx-quickstart/install

El instalador OSGi que se ejecuta en la aplicación basada en Granito recogerá automáticamente los paquetes de la carpeta crx-quickstart/install y los instalará e iniciará. Es posible que tenga que esperar unos segundos para que esto suceda.

Después de la instalación, puede conectarse al Shell de Gogo que escucha en el puerto 6666 por defecto:

$ telnet localhost 6666
Trying 127.0.0.1....
Connected to localhost.
Escape character is '^]'.
____________________________
Welcome to Apache Felix Gogo

g!

Si todo va bien, obtendrá el símbolo del sistema -- g! -- desde la shell de Gogo donde puedes empezar a ejecutar comandos como help (para obtener una lista de comandos disponibles) y lb (para listar paquetes en ejecución).

Consulte el sitio de Apache Felix para obtener más información sobre el Gogo Shell.

Recuperación de un paquete de servicio Http detenido

Para recuperarse de la parada involuntaria del paquete de servicios Http, siga estos pasos:

  1. Instale los paquetes de Gogo Shell como se explicó anteriormente en la sección Instalación de emergencia
  2. Inicie la sesión shell utilizando el comando telnet:
    $ telnet localhost 6666
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    ____________________________
    Welcome to Apache Felix Gogo

    g!
  3. Utilice el comando lb para listar el paquete de servicios Http. Asumimos que este paquete tiene el servicio http en su nombre, así que usamos esto (citado) como argumento para el comando lb command:
    g! lb "http service"
    START LEVEL 30
       ID|State      |Level|Name
       21|Resolved   |    5|Day CQSE HTTP Service (4.1.32)
    g!

  4. De la salida vemos que de hecho el paquete de servicios HTTP de CQSE no está activo. Así que usamos el comando Inicio usando el ID del paquete de 21 como argumento:
    g! empieza 21
    g!
  5. Hasta ahora todo bien. Comprobemos el resultado:
    g! lb "http service"
    START LEVEL 30
       ID|State     |Level|Name
       21|Active    |    5|Day CQSE HTTP Service (4.1.32)
    g!
  6. Utilice el comando lb para comprobar que otros paquetes también se han iniciado. En particular, querrá verificar que la consola de administración de Web y los plugins estén activos:
    g! lb console
    START LEVEL 30
       State ID      Name Level 
       Active 24          5Apache  Felix Web Management Console (3.4.1.R1334005)
       Active 25          5Apache  Felix Web Console Service Component Runtime/Declarative Services Plugin (1.0.0.R1201749)
       Active 26          5Apache  Felix Web Console Event Plugin (1.0.2)
       Active 27          5Apache  Felix Web Console Memory Usage Plugin (1.0.2)
       Active 28          5Apache  Felix Web Console Package Admin Service Plugin (0.0.1.R1233342)
       Active 55         Apache 15 Sling Web Console Security Provider (1.0.0)
       Active 74         Adobe 20 Granite Workflow Console (0.0.4)
      Active 138         20Apache  Felix Web Gogo Shell Plugin (0.0.1.R1238480)
    g!
    Todo parece estar bien aquí. Así que nada más que hacer.
  7. Ahora puede salir del intérprete de órdenes escribiendo Ctrl-D
  8. Ahora debería desinstalar el paquete de Remote Shell quitándolo de la carpeta crx-quickstart/install (todavía puede reinstalarlo de nuevo si es necesario).

Ahora debería poder acceder a la aplicación con su navegador.

Acceder al Repositorio

Comenzando con CRX 2.3.18 (incluido en CQ 5.5 Update 1) se puede acceder al repositorio usando la shell de gogo. Esto se puede hacer usando el comando telnet descrito anteriormente o usando un navegador web (http://localhost:4502/system/console/gogo). Todos los comandos relacionados con CRX tienen un prefijo crx: Puede listarlas escribiendo crx:help

Available commands:
add         Adds a new node or child node entry.
bundlecheck Checks node bundles
cd          Changes the current work node.
check       Checks the repository
checkin     Does a checkin on a node.
checkout    Does a checkout on a node.
clone       Clones a node.
connect     Connects to a CRXRepository.
cp          Copies a node.
echo        Prints the arguments to the console
help        Prints this help
login       Perform a login on the repository.
logout      Perform a logout on the repository.
ls          Prints the list of nodes of properties.
mixin       Manipulates the set of mixin nodetypes of a node.
mv          Moves a node.
patch       Patch lowlevel data of an item state.
print       Prints the definition of a node or a property.
pwd         Prints the current path.
refresh     Refreshs a node, property or session
rm          Removes a node or property.
save        Saves a node, property or session
spool       Spools (copies) a workspace.
stat        Prints the lowlevel (persistence) information of a node or a property.
workspace   Manages workspaces

Paths:
Paths can be specified either
- relative to the cwd (i.e. './foo/bar')
- absolute (i.e. '/foo/bar')
- or uuid-relative (i.e. '[cafebabe-cafe-babe-cafe-babecafebabe]/foo/bar')

Use 'help -d' to list the details for all commands or
use 'help <cmd>' for a specific command.

Si quiere arreglar inconsistencias en el repositorio puede intentarlo:

  1. Iniciar la consola
    $ telnet localhost 6666
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    ____________________________
    Welcome to Apache Felix Gogo
  2. inicie sesión en el espacio de trabajo predeterminado utilizando las credenciales de administrador
    g! crx:login admin admin
    ha iniciado sesión como administrador en el espacio de trabajo crx.default
  3. mostrar la descripción del método bundlecheck
    g! crx:help bundlecheck
    Synopsis:
    bundlecheck [options] [path   uuid]

    Description:
    Checks either the current node's bundle, the bundle for a given node path, the bundle
    for a node UUID or all stored bundles (regardless of hierarchy information). This command
    only works with bundle persistence managers (eg. DB bundle y TarPM).

    Options:
    -a check all bundles in the PM storage (-r does not apply)
    -r recursively check subnodes
    -f try to fix missing child node errors
    -p print node paths and verify parent relations (slower)
    -x check node references (slower)
    -X check node references and remove invalid (slower)
    -e only print errors (faster)
    -o <file> dump output to file.
    -l <path> move orphaned nodes to this lost+found parent node
  4. muestra el directorio raíz
    g! crx:ls
    + /
    + bin
    + rep:repoPolicy
    + rep:policy
    + jcr:system
    + var
    + libs
    + etc
    + apps
    + home
    + tmp
    + content
    - sling:resourceType
    - jcr:mixinTypes
    - sling:target
    - jcr:primaryType
  5. crear una carpeta lost+found
    g! crx:add lost+found
  6. guardar la sesión
    g! crx:save
  7. volver a comprobar la estructura del directorio raíz (verificar la carpeta lost+found)
    g! crx:ls

    + /
    + bin
    + rep:repoPolicy
    + rep:policy
    + jcr:system
    + var
    + libs
    + etc
    + apps
    + home
    + tmp
    + content
    + lost+found
    - sling:resourceType
    - jcr:mixinTypes
    - sling:target
    - jcr:primaryType

  8. realizar el bundlecheck:
    g! crx:bundlecheck -rfel lost+found
    Using node b006af08-d78c-44b3-b847-58472e7962cc as parent for orphaned nodes.
    checked 1000 nodes with 0 error(s) so far.
    ...
    checked 66000 nodes with 0 error(s) so far.
    Consistency check of 66717 nodes finished in 110015 milliseconds.
    No errors found.

Descargar

* org.apache.felix.shell.remote-1.1.2.jar
Paquete Remote Shell (telnetd). Solo se instala si la Consola Web no es accesible. Desinstale cuando no sea necesario.

Esta obra está autorizada con arreglo a la licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons.  Los términos de Creative Commons no cubren las publicaciones en Twitter™ y Facebook.

Avisos legales   |   Política de privacidad en línea