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.
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:
- Ottieni una sessione di testo al sistema che esegue l'applicazione Granite
- Crea una cartella di installazione nella cartella dell'applicazione Granite (generalmente sotto crx-quickstart
- Scarica e disimballa l'allegato Gogo Shell Content Package
- Copia i pacchetti Gogo Runtime, Command e Shell nella cartella crx-quickstart/installer
- 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:
- Installa i pacchetti Gogo Shell come spiegato sopra nella sezione Installazione di emergenza
- 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! - 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! - 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! - 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! - 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. - È ora possibile uscire dalla shell digitando Ctrl-D
- 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:
- Avvia la console
$ telnet localhost 6666
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
_
Welcome to Apache Felix Gogo
- accedi all'area di lavoro predefinita utilizzando le credenziali di amministrazione
g! crx:login admin admin
connesso correttamente come admin in workspace crx.default
- 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
- 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
- crea una cartella lost+found
g! crx:add lost+found - salva la sessione
g! crx:save - 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 - 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
Scarica