Problema

Hai inavvertitamente arrestato il Servizio HTTP o la Console Web e non puoi più accedere al sistema. Oppure, il repository si è bloccato e la Web Console non consente di riparare facilmente il repository. Oppure, stai cercando la CRX Console delle versioni precedenti di CRX.

Risoluzione

Questo documento spiega come installare una shell a riga di comando basata su testo, aiutandoti a risolvere questi problemi e forse altri.

Ruoli chiave

La chiave della soluzione è quella di utilizzare l'interfaccia a riga di comando per il framework OSGi fornito dalla Apache Felix Gogo Shell. Come è consuetudine nel mondo OSGi, la Gogo Shell si presenta come una raccolta di bundle:

  • Apache Felix Gogo Runtime -- Il core shell runtime. Questo bundle fornisce il nucleo API e le funzionalità di integrazione per eseguire una shell di comando.
  • Comando Apache Felix Gogo -- I comandi di base per la manutenzione del framework OSGi. Questo bundle fornisce comandi per l'introspezione e la manipolazione del framework OSGi e dei suoi bundle.
  • Apache Felix Gogo Shell -- La funzionalità della shell di testo. Questo bundle fornisce una shell locale di base (disattivata di default nelle applicazioni basate su Granite) su cui si basano le funzionalità di remoting.
  • Apache Felix Web Console Gogo Shell Plugin -- Supporto per le shell di testo all'interno della Web Console. Questo bundle estende il bundle Gogo Shell esponendo la shell di testo nella Web Console.
  • Apache Felix Remote Shell -- Supporto di shell di testo in stile Telnet. Questo bundle estende il bundle Gogo Shell esponendo la shell di testo su TCP/IP.

Maggiori informazioni sulla Gogo Shell sono disponibili sul sito Apache Felix.

Nozioni di base richieste

I pacchetti di base -- Runtime, Command e Shell -- sono essenziali e sono sempre necessari.

Accesso alla Web Console

Se l'accesso alla Web Console è ancora possibile, si consiglia di utilizzare il plugin Web Console Gogo Shell Plugin per l'accesso remoto alla shell.

Accesso Telnet

Se l'accesso alla Web Console non è più possibile -- ad esempio, il Servizio Http è crashato o la Web Console stessa non funziona più -- puoi installare il bundle Remote Shell.

A differenza del plugin Web Console Gogo Shell Plugin, il bundle Remote Shell *non* consente un vero accesso remoto. Per motivi di sicurezza, il bundle Remote Shell di default utilizza la porta 6666 solo su localhost (127.0.0.1). Così l'accesso è possibile solo dallo stesso box.

Considerazioni sulla sicurezza

Web Console

L'accesso alla Web Console Gogo Shell Plugin è limitato come tutto nella Web Console, attraverso una semplice autenticazione e un controllo basilare degli accessi. Ad esempio, il provider Sling Web Console Security out of the box consente all'utente amministratore di accedere alla Web Console.

In quanto tale, la Web Console non dovrebbe, ovviamente, essere esposta a una rete Internet pubblica attraverso il Dispatcher.

Telnet

Il bundle Remote Shell non implementa alcun controllo di accesso. L'unica sicurezza di base implementata è che per impostazione predefinita è possibile solo l'accesso a localhost (127.0.0.1). Questo significa che, prima di potersi telnettare nella Remote Shell, è necessaria una shell remota verso l'host (ad esempio, una sessione SSH).

Inoltre, il bundle Remote Shell non è destinato ad essere attivo per impostazione predefinita e nel tempo. Il pacchetto dovrebbe essere installato in caso di emergenza e dovrebbe essere disinstallato dopo aver risolto il problema di emergenza per evitare potenziali problemi. Nessuna funzionalità regolare dovrebbe essere basata sul solo bundle Remote Shell.

Installazione

Installazione del pacchetto di contenuti

Se il repository JCR è ancora operabile e accessibile via HTTP, la cosa più semplice da fare è installare il Gogo Shell Content Package allegato. Questo pacchetto di contenuti fornisce i pacchetti Gogo Runtime, Command e Shell, nonché il plugin Web Console Gogo Shell.

Non include il Remote Shell per motivi di sicurezza e perché non è realmente necessario in questa situazione.

Installazione della Web Console

Se il Repository JCR non è più disponibile ma la Web Console è accessibile, puoi scaricare e rimuovere dal pacchetto il Gogo Shell Content Package allegato e caricare i bundle contenuti attraverso la Web Console.

Anche in questo caso, il bundle Remote Shell non dovrebbe essere installato per motivi di sicurezza e perché non è realmente necessario.

Installazione di emergenza

In caso di problemi di emergenza in cui né il JCR Repository né la Web Console sono utilizzabili e accessibili, dovrai tornare all'installazione locale della Gogo Shell. Questa installazione richiede l'accesso al filesystem e alla shell.

Le fasi di installazione di base sono le seguenti:

  1. Ottieni una sessione di testo al sistema che esegue l'applicazione Granite
  2. Crea una cartella di installazione nella cartella dell'applicazione Granite (generalmente sotto crx-quickstart
  3. Scarica e disimballa l'allegato Gogo Shell Content Package
  4. Copia i pacchetti Gogo Runtime, Command e Shell nella cartella crx-quickstart/installer
  5. Scarica il pacchetto bundle Remote Shell allegato e copialo nella cartella crx-quickstart/install

Il programma di installazione di OSGi in esecuzione nell'applicazione basata su Granite raccoglierà automaticamente i bundle dalla cartella crx-quickstart/install, li installerà e li avvierà. Potresti dover aspettare qualche secondo perché questo accada.

Dopo l'installazione, è possibile telnettarsi nella Gogo Shell che utilizza la porta 6666 di default:

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

g!

Se tutto va bene, otterrai il prompt dei comandi -- g! -- dalla Gogo Shell dove puoi iniziare ad eseguire comandi come help (per ottenere una lista di comandi disponibili) e lb (per elencare i bundle in esecuzione).

Vedi il sito Apache Felix per maggiori informazioni sulla Gogo Shell.

Recupero da un Service Bundle Http fermo

Per ripristinare dopo un arresto involontario del pacchetto di servizi Http segui questi passaggi:

  1. Installa i pacchetti Gogo Shell come spiegato sopra nella sezione Installazione di emergenza
  2. Avvia la sessione della shell usando il comando telnet:
    $ telnet localhost 6666
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    ____________________________
    Welcome to Apache Felix Gogo

    g!
  3. Usa il comando lb per elencare il pacchetto di servizi Http. Supponiamo che questo bundle abbia il servizio http nel suo nome, quindi usiamo questo (citato) come argomento del comando lb:
    g! lb "http service"
    START LEVEL 30
    ID|State |Level|Name
    21|Resolved | 5|Day CQSE HTTP Service (4.1.32)
    g!

  4. Dall'output vediamo che in realtà il bundle di servizi CQSE HTTP non è attivo. Quindi usiamo il comando start usando l'ID del bundle di 21 come argomento:
    g! start 21
    g!
  5. Per ora tutto bene. Controlliamo il risultato:
    g! lb "http service"
    START LEVEL 30
    ID|State |Level|Name
    21|Active | 5|Day CQSE HTTP Service (4.1.32)
    g!
  6. Usa il comando lb per controllare che anche altri bundle siano avviati. In particolare dovrai verificare che la console di gestione Web e i plugin siano attivi:
    g! lb console
    START LEVEL 30
    ID|State |Level|Name
    24|Active | 5|Apache Felix Web Management Console (3.4.1.R1334005)
    25|Active | 5|Apache Felix Web Console Service Component Runtime/Declarative Services Plugin (1.0.0.R1201749)
    26|Active | 5|Apache Felix Web Console Event Plugin (1.0.2)
    27|Active | 5|Apache Felix Web Console Memory Usage Plugin (1.0.2)
    28|Active | 5|Apache Felix Web Console Package Admin Service Plugin (0.0.1.R1233342)
    55|Active | 15|Apache Sling Web Console Security Provider (1.0.0)
    74|Active | 20|Adobe Granite Workflow Console (0.0.4)
    138|Active | 20|Apache Felix Web Gogo Shell Plugin (0.0.1.R1238480)
    g!
    Va tutto bene qui. Quindi non c'è altro da fare.
  7. È ora possibile uscire dalla shell digitando Ctrl-D
  8. Ora dovresti disinstallare il bundle Remote Shell rimuovendolo dalla cartella crx-quickstart/install (puoi ancora reinstallarlo di nuovo se necessario).

Ora dovresti essere in grado di accedere all'applicazione con il tuo browser.

Accesso al Repository

A partire da CRX 2.3.18 (incluso nell'aggiornamento 1 di CQ 5.5) si può accedere al repository usando la shell gogo. Questo può essere fatto utilizzando il comando telnet sopra descritto o utilizzando un browser Web (http://localhost:4502/system/console/gogo). Tutti i comandi relativi a CRX hanno un prefisso crx:. Puoi elencarli digitando 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.

Se vuoi correggere le incongruenze dei repository puoi provare:

  1. Avvia la console
    $ telnet localhost 6666
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    ____________________________
    Welcome to Apache Felix Gogo
  2. accedi all'area di lavoro predefinita utilizzando le credenziali di amministrazione
    g! crx:login admin admin
    connesso correttamente come admin in workspace crx.default
  3. visualizza la descrizione del metodo di 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 e 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. visualizza la root directory
    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. crea una cartella lost+found
    g! crx:add lost+found
  6. salva la sessione
    g! crx:save
  7. ricontrolla la struttura della directory principale (verifica la cartella 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. esegui il 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.

Scarica

* org.apache.felix.shell.remote-1.1.2.jar
Bundle Remote Shell (telnetd). Installalo solo se Web Console non è accessibile. Disinstallalo quando non è necessario.

Questo prodotto è concesso in licenza in base alla licenza di Attribuzione-Non commerciale-Condividi allo stesso modo 3.0 Unported di Creative Commons.  I post su Twitter™ e Facebook non sono coperti dai termini di Creative Commons.

Note legali   |   Informativa sulla privacy online