Posts Tagged query

Polecenie twiddle: jak znaleźć informacje o ziarnach i metodach

Polecenie twiddle.sh udostępnia polecenia, które umożliwiają uzyskanie informacji o istniejących ziarnach, ich metodach oraz parametrach.

List wszystkich wpisów z tej serii:

  1. Polecenie twiddle: jak połączyć się z serwerem aplikacji JBoss AS
  2. Polecenie twiddle: jak znaleźć informacje o ziarnach i metodach
  3. Polecenie twiddle: operacje na na zasobach serwera

Lista dostępnych poleceń

Aby uzyskać listę dostępnych poleceń należy wywołać polecenie twiddle.sh z przełącznikiem --help-commands:

$ twiddle.sh --help-commands
twiddle.sh commands:
    jsr77          Print out JSR77 related information
    xmbean         Print out mbean metadata as an xmbean descriptor
    info           Get the metadata for an MBean
    get            Get the values of one or more MBean attributes
    invoke         Invoke an operation on an MBean
    create         Create an MBean
    setattrs       Set the values of one or more MBean attributes
    unregister     Unregister one or more MBeans
    queryMethod    Query the server for a list of matching methods of MBeans
    listDomains    Query the server for a list of available domains
    query          Query the server for a list of matching MBeans
    set            Set the value of one MBean attribute
    serverinfo     Get information about the MBean server

Polecenie to także udostępnia krótką pomoc do każdej z tych komend:

$ twiddle.sh -H query
Help for command: 'query'

Query the server for a list of matching MBeans

usage: query [options] <query>
options:
    -c, --count    Display the matching MBean count
    --             Stop processing options
Examples:
 query all mbeans: query '*:*'
 query all mbeans in the jboss.j2ee domain: query 'jboss.j2ee:*'

Zerknijmy na jedno z częściej wywoływanych poleceń pobranie danych z drzewa JNDII:

$ twiddle.sh invoke jboss:service=JNDIView list true
<h1> Other components with java:comp namespace</h1>
<h1>java: Namespace</h1>
<pre>
  +- securityManagement (class: org.jboss.security.integration.JNDIBasedSecurityManagement)
  +- comp (class: javax.namingMain.Context)
  +- XAConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
  +- JmsXA (class: org.jboss.resource.adapter.jms.JmsConnectionFactoryImpl)
  +- TransactionPropagationContextImporter (class: com.arjuna.ats.internal.jbossatx.jta.PropagationContextManager)
  +- policyRegistration (class: org.jboss.security.plugins.JBossPolicyRegistration)
  +- ClusteredConnectionFactory (class: org.jboss.jms.client.JBossConnectionFactory)
....

Polecenie to składa się z kilku części:

  • twiddle.sh – wywołanie polecenia twiddle
  • invoke – komenda, jak ma zostać wykonana (w tym przypadku wywołanie metody na wybranym ziarnie)
  • jboss – domena, w której znajduje się wybrane ziarno
  • service=JNDIView – nazwa ziarna, jakie ma zostać wywołane
  • list – akcja na wybranym ziarnie
  • true – parametr przekazany do ziarna

Jak widać, trzeba podać sporo rożnych danych, aby wywołać dowolne zarządzane ziarno. Odpowiednie parametry można poznać używając np. aplikacji WWW JMX Console, ale także można je uzyskać przy użyciu polecenia twiddle.sh.

Lista dostępnych domen: listDomains

Polecenie listDomains pozwala na wyświetlnie listy wszystkich grup, na jakie podzielone są ziarna zarządzane:

$ twiddle.sh -H listDomains
Help for command: 'listDomains'

Query the server for a list of available domains

usage: listDomains [options]
options:
    -c, --count    Display the domain count
    --             Stop processing options

Przykładowe użycie:

$ twiddle.sh listDomains
jboss.security
jboss.jdbc
jboss.remoting
jboss.mq
jboss.classloader
jboss.admin
jboss.j2ee
jboss
...

Jak widać zostały wyświetlone tylko grupy. Ale jest to jednocześnie pierwsza część nazwy ziarna.

Lista dostępnych ziaren: query

Aby uzyskać informacje zarejestrowanych ziarnach należy użyć polecenia query:

$ twiddle.sh -H query
Help for command: 'query'

Query the server for a list of matching MBeans

usage: query [options] <query>
options:
    -c, --count    Display the matching MBean count
    --             Stop processing options
Examples:
 query all mbeans: query '*:*'
 query all mbeans in the jboss.j2ee domain: query 'jboss.j2ee:*'

Aby poznać jakie ziarna należą do domeny jboss należy użyć takiego polecenia:

$ twiddle.sh query 'jboss:*'
...
jboss:type=Service,name=SystemProperties
jboss:service=KeyGeneratorFactory,type=UUID
jboss:service=proxyFactory,target=ClientUserTransactionFactory
jboss:service=invoker,type=http,target=Naming
jboss:service=JNDIView
jboss:service=invoker,type=pooled
...

Jak widać, na liście znalazło się ziarno JNDIView.

Można łatwo także uzyskać informacje o wszystkich ziarnach, jakie znajdują się na serwerze JBoss wstawiając znak * w miejsce domeny:

$ twiddle.sh query '*:*'

Lista dostępnych metod dla wybranego ziarna: info

Posiadamy już nazwę ziarna, należałoby teraz uzyskać informacje o tym jaki akcje możemy na nim wykonać, czyli poznań metody oraz ich argumenty. Służy do tego polecenie info.

$ twiddle.sh -H info
Help for command: 'info'

Get the metadata for an MBean

usage: info <mbean -name>
  Use '*' to query for all attributes

Oto co wyświetli pytanie o ziarno JNDIView:

$ twiddle.sh info jboss:service=JNDIView
Description: JNDIView Service. List deployed application java:comp namespaces,
the java: namespace as well as the global InitialContext JNDI namespace. Also
list HA-JNDI namespace in a cluster environment.
+++ Attributes:
 Name: Name
 Type: java.lang.String
 Access: r-
 Name: State
 Type: int
 Access: r-
 Name: StateString
 Type: java.lang.String
 Access: r-
 Name: HANamingService
 Type: java.lang.String
 Access: rw
+++ Operations:
 java.lang.String list(boolean verbose)
 java.lang.String listXML()
 void create()
 void start()
 void stop()
 void destroy()
 void jbossInternalLifecycle(java.lang.String method)

Jak widać poza informacjami o samym ziarnie można zobaczyć listę metod jakie ono udostępnia. Jedną z nich jest list przyjmująca jeden argument typu boolean.

Tym sposobem właśnie udało się uzyskać informacje o wszystkich składowych, które były użyte w wywołaniu polecenia invoke.

Lista dostępnych metod: queryMethod

Istnieje jeszcze jeden sposób na odszukanie ziarna oraz metody. Komenda queryMethod pozwala na odszukanie wszystkich ziaren oraz metod, które zawierają w sobie podany ciąg znaków.

$ twiddle.sh -H queryMethod
Help for command: 'queryMethod'

Query the server for a list of matching methods of MBeans

usage: queryMethod [options] <query>
options:
    -c, --count    Display the matching method count
    -f, --filter   Filter by domain
    --             Stop processing options
Examples:
 query methods of all MBeans: queryMethod list
 query all methods of all MBeans in the jboss domain: queryMethod -f "jboss:*" list

Aby odszukać metodę list w ziarnie JNDIView możemy użyć nastepujących poleceń:

  • nie wiemy do jakiej domeny należy ziarno z szukaną metodą
    $ twiddle.sh  queryMethod list
    jboss.deployment:id="SecurityConfig",type=Component  listAttachments boolean
    jboss.deployment:id="WebInfLibFilter",type=Component  listAttachments boolean
    jboss.deployment:id="TopicTemplateInfo",type=Component  listAttachments boolean
    ...

    W moim przypadku polecenie to znalazło ponad 1400 metod zwierających słowo list w swojej nazwie. Nie jest to do końca użyteczna informacja, ale zawsze jakaś :).

  • wiemy w jakiej domenie znajduje się interesujące nas ziarno
    $ twiddle.sh  queryMethod -f "jboss:*" list
    jboss:type=Service,name=SystemProperties  removeListener org.jboss.util.property.PropertyListener
    jboss:type=Service,name=SystemProperties  addListeners [Lorg.jboss.util.property.PropertyListener;
    jboss:type=Service,name=SystemProperties  addListener org.jboss.util.property.PropertyListener
    jboss:type=Service,name=SystemProperties  addListener java.lang.String
    jboss:service=JNDIView  list boolean
    jboss:service=JNDIView  listXML
    jboss:service=AttributePersistenceService  apmListAll
    jboss:service=AttributePersistenceService  apmListAllAsString
    jboss:service=invoker,type=unified  addListener org.jboss.remoting.callback.InvokerCallbackHandler
    jboss:service=invoker,type=unified  removeListener org.jboss.remoting.callback.InvokerCallbackHandler

    Tym raza lista jest krótsza i od razu widać jak nazywa się szukane ziarno łącznie z definicją metody potrzebną do wywołania akcji.

Polecenie queryMethod jako wynik podaje zarówno pełną nazwę ziarna, jak pełną definicję metody (łącznie z parametrami używanymi do jej wywołania).

Źródła

Tags: , , , , , , , , , , , ,

Zadawanie zapytań w aplikacji rpm: wybór informacji do wyświetlenia

Po zapoznaniu się ze sposobami wyboru listy pakietów we wpisie Zadawanie zapytań w aplikacji rpm: wybór pakietów czas na poznanie sposobów wyświetlenia informacji o nich.

Wybór informacji do wyświetlenie

  • brak kryteriów
    Jeżeli zostanie pominięty ten parametr, to po prosty polecenie rpm wyświetli nazwę i wersję pakietu:

    # rpm -q bash
    bash-3.2-24.el5
  • -iwyświetlenie informacji o pakiecie

    Polecenie to pozwala na wyświetlenie szczegółowych informacji o wybranym pakiecie:

    # rpm -q -i bash
    Name        : bash                         Relocations: (not relocatable)
    Version     : 3.2                               Vendor: Red Hat, Inc.
    Release     : 24.el5                        Build Date: Tue 21 Oct 2008 02:15:55 PM CEST
    Install Date: Tue 23 Feb 2010 08:06:34 PM CET      Build Host: hs20-bc1-7.build.redhat.com
    Group       : System Environment/Shells     Source RPM: bash-3.2-24.el5.src.rpm
    Size        : 5349546                          License: GPLv2+
    Signature   : DSA/SHA1, Mon 08 Dec 2008 01:25:44 PM CET, Key ID 5326810137017186
    Packager    : Red Hat, Inc. <http: //bugzilla.redhat.com/bugzilla>
    URL         : http://www.gnu.org/software/bash
    Summary     : The GNU Bourne Again shell (bash) version 3.1.
    Description :
    The GNU Bourne Again shell (Bash) is a shell or command language
    interpreter that is compatible with the Bourne shell (sh). Bash
    incorporates useful features from the Korn shell (ksh) and the C shell
    (csh). Most sh scripts can be run by bash without modification. This
    package (bash) contains bash version 3.1, which improves POSIX
    compliance over previous versions.

    Znaczenie powyższych pól jest następujące:

    • Name – nazwa pakietu, którego dotyczyło pytane. Najczęściej jest powiązane z nazwą aplikacji jaka jest instalowana przez podany pakiet, ale nie zawsze (np. pakiety httpd, coreutils).
    • Version – główna wersja aplikacji, taka na podstawie której został stworzony pakiet instalacyjny.
    • Release – wersja wydania danego pakietu. Jeżeli zmienia się pole Version to powinna mieć wartość 1. Jest zwiększana zawsze w momencie wprowadzenia zmian w stosunku do podstawowej wersji aplikacji.
    • Install date – data instalacji pakietu w systemie.
    • Group – grupa, do której należy pakiet.
    • Size – łączony rozmiar wszystkich plików jakie znajdują się w danym pakiecie.
    • Summary – krótki opis pakietu.
    • Description – dłuższy, dokładniejszy opis pakietu.
    • Packager – kto jest odpowiedzialny za stworzenie pakietu (pakietu, nie samej aplikacji).
    • Build Date – data utworzenia pakietu.
    • Build Host – nazwa komputera, na którym nastąpiło utworzenie pakietu.
    • Source RPM – nazwa źródłowego pliku RPM, na podstawie którego utworzono pakiet.
    • License – licencja na podstawie której jest rozprowadzana dana aplikacji.
    • URL – adres do strony danej aplikacji.

  • -llista plików
    Parametr ten powoduje wyświetlenie listy plików, jakie znajdują się w danym pakiecie:

    # rpm -ql bash                                                          
    /bin/bash                                                                                  
    /bin/sh                                                                                    
    /etc/skel/.bash_logout                                                                    
    /etc/skel/.bash_profile                                                                    
    /etc/skel/.bashrc                                                                          
    /usr/bin/bashbug-32                                                                        
    /usr/share/doc/bash-3.2                                                                    
    /usr/share/doc/bash-3.2/CHANGES                                                            
    /usr/share/doc/bash-3.2/COMPAT                                                            
    ....

    Można także dodatkowo dodać przełącznik -v, który spowoduje wyświetleni dodatkowych informacji o poszczególnych plikach:

    # rpm -qvl bash
    -rwxr-xr-x    1 root    root           729292 Oct 21  2008 /bin/bash
    lrwxrwxrwx    1 root    root                4 Oct 21  2008 /bin/sh -> bash
    -rw-r--r--    1 root    root               33 Oct 21  2008 /etc/skel/.bash_logout
    -rw-r--r--    1 root    root              176 Oct 21  2008 /etc/skel/.bash_profile
    -rw-r--r--    1 root    root              124 Oct 21  2008 /etc/skel/.bashrc
    -rwxr-xr-x    1 root    root             7044 Oct 21  2008 /usr/bin/bashbug-32
    drwxr-xr-x    2 root    root                0 Oct 21  2008 /usr/share/doc/bash-3.2
    -rw-r--r--    1 root    root           221125 Sep 26  2006 /usr/share/doc/bash-3.2/CHANGES
    -rw-r--r--    1 root    root            11659 Aug 29  2006 /usr/share/doc/bash-3.2/COMPAT
    -rw-r--r--    1 root    root            73644 Oct 10  2006 /usr/share/doc/bash-3.2/FAQ
    ....
  • -cwyświetlenie plików konfiguracyjnych
    W pliku RPM pliki z konfiguracją aplikacji są traktowane w specyficzny sposób, w związku z czym muszą być odpowiednio oznaczone. Z tego też powodu możemy w łatwy sposób sprawdzić, jakie pliki konfiguracyjne zwiera dany pakiet:

    # rpm -qc bash
    /etc/skel/.bash_logout
    /etc/skel/.bash_profile
    /etc/skel/.bashrc
  • -dwyświetlenie plików z dokumentacją
    Przełącznik ten pozwala na wyświetlenie wszystkich plików z dokumentacją, jakie znajdują się w danym pakiecie:

    # rpm -qd bash | head
    /usr/share/doc/bash-3.2/CHANGES
    /usr/share/doc/bash-3.2/COMPAT
    /usr/share/doc/bash-3.2/FAQ
    /usr/share/doc/bash-3.2/INTRO
    /usr/share/doc/bash-3.2/NEWS
    /usr/share/doc/bash-3.2/NOTES
    /usr/share/doc/bash-3.2/POSIX
    /usr/share/doc/bash-3.2/article.ms
    /usr/share/doc/bash-3.2/article.ps
    /usr/share/doc/bash-3.2/article.txt
    ....
  • --provideszależności dostarczane przez pakiet

    Można wyświetlić informacje, jakie dodatkowe zależności, możliwości udostępnia wybrany pakiet (są one potem używane przez inne pakiety do określenia co jest wymagane do instalacji danego pakietu):

    # rpm -q --provides -p libicu-3.6-5.11.4.i386.rpm
    libicudata.so.36
    libicui18n.so.36
    libicuio.so.36
    libicule.so.36
    libiculx.so.36
    libicutu.so.36
    libicuuc.so.36
    libicu = 3.6-5.11.4
  • --requiresczego wymaga dany pakiet do instalacji

    W każdym pakiecie może znajdować się informacja o zależnościach, które muszą zostać spełnione zanim zostanie on zainstalowany:

    # rpm -q --requires -p x3270-3.3.4p7-3.el5.4.i386.rpm
    config(x3270) = 3.3.4p7-3.el5.4
    libc.so.6
    libc.so.6(GLIBC_2.0)
    libc.so.6(GLIBC_2.1)
    libc.so.6(GLIBC_2.3)
    libc.so.6(GLIBC_2.3.4)
    libc.so.6(GLIBC_2.4)
    libcrypto.so.6
    libicui18n.so.36
    libicuuc.so.36
    libnsl.so.1
    libssl.so.6
    libutil.so.1
    rpmlib(CompressedFileNames) < = 3.0.4-1
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    rtld(GNU_HASH)
    xorg-x11-font-utils

    Jak widać, pakiet x3270-3.3.4p7-3.el5.4.i386.rpm wymaga spełnienia szeregu różnych zależności w celu jego instalacji. Można zauważyć, że na liście są wymieniane biblioteki ibicui18n.so.36 oraz libicuuc.so.36, które są udostępniane przez pakiet libicu-3.6-5.11.4.i386.rpm.

  • --scriptswyświetlenie skryptów instalacyjnych

    Polecenie to spowoduje wyświetlenie skryptów wykonywanych zarówno przed/po instalacji/odinstalowaniu aplikacji.

    # rpm -q --scripts initscripts
    preinstall scriptlet (using /bin/sh):
    /usr/sbin/groupadd -g 22 -r -f utmp
    postinstall scriptlet (using /bin/sh):
    touch /var/log/wtmp /var/run/utmp /var/log/btmp
    chown root:utmp /var/log/wtmp /var/run/utmp /var/log/btmp
    chmod 664 /var/log/wtmp /var/run/utmp
    chmod 600 /var/log/btmp

    /sbin/chkconfig --add netfs
    /sbin/chkconfig --add network
    /sbin/chkconfig --add netconsole
    /sbin/chkconfig --add rawdevices
    preuninstall scriptlet (using /bin/sh):
    if [ $1 = 0 ]; then
      /sbin/chkconfig --del netfs
      /sbin/chkconfig --del network
      /sbin/chkconfig --del netconsole
      /sbin/chkconfig --del rawdevices
    fi
  • queryformatsamodzielne utworzenie informacji o pakiecie

    Polecenie to pozwala na samodzielne zdefiniowanie listy informacji, jakie zostaną wyświetlone o danym pakiecie. Pełny opis polecenie znajduje się w dokumentacji oraz na stronach podanych na końcu wpisu.

    Wyświetlenie nazwy oraz wersji pakietu:

    # rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}\n' bash
    bash-3.2-24.el5

    Wyświetlenie daty instalacji pakietu:

    # rpm -q --queryformat '%{NAME} was installed on %{INSTALLTIME:date}\n' bash
    bash was installed on Tue 23 Feb 2010 08:06:34 PM CET

    Wyświetlenie listy plików, które znajdują się w pakiecie łącznie z ich rozmiarami:

    # rpm -q --queryformat '%{NAME}: [%{FILENAMES} (%{FILESIZES} bytes)\n]' bash
    bash: /bin/bash (729292 bytes)
    /bin/sh (4 bytes)
    /etc/skel/.bash_logout (33 bytes)
    /etc/skel/.bash_profile (176 bytes)
    /etc/skel/.bashrc (124 bytes)
    /usr/bin/bashbug-32 (7044 bytes)
    /usr/share/doc/bash-3.2 (4096 bytes)
    /usr/share/doc/bash-3.2/CHANGES (221125 bytes)
    /usr/share/doc/bash-3.2/COMPAT (11659 bytes)
    /usr/share/doc/bash-3.2/FAQ (73644 bytes)
    ....

    Można także wyświetlić lisŧę wszystkich tagów, jakie mogą zostać użyte w opcji queryformat:

    # rpm --querytags
    HEADERIMAGE
    HEADERSIGNATURES
    HEADERIMMUTABLE
    HEADERREGIONS
    HEADERI18NTABLE
    SIGSIZE
    SIGPGP
    SIGMD5
    PKGID
    SIGGPG

    Opis częsci z poszczególnych tagów można znaleźć w artykule Available Tags For –queryformat

Źródła

Tags: , ,

Zadawanie zapytań w aplikacji rpm: wybór pakietów

Aplikacja rpm w dystrybucjach opartych o RedHat odpowiada za zarządzeni zainstalowanymi pakietami z oprogramowaniem. Można za jej pomocą m.in. instalować, usuwać, aktualizować oprogramowanie przygotowane przez twórców dystrybucji. Aplikacja rpm gromadzi także informacje o wszystkich zainstalowanych programach, łącznie ich plikami konfiguracyjnymi, z dokumentacją i innymi. Aby móc poznać te informacji, posiada ona rozbudowany mechanizm zadawania zapytań, który zostanie przedstawiony poniżej.

Aby przełączyć polecenie rpm w tryb zadawania zapytań, należy użyć przełącznika -q lub --query łącznie z dodatkowymi parametrami, które dzielą się na dwie grupy:

  • wybór pakietów do pobrania informacji
  • wybór informacji do wyświetlenia

Ogólna definicja polecenia wygląda następująco:

rpm {-q|--query} [select-options] [query-options]

Wybór pakietów do pobrania informacji

  • podanie listy pakietów

    Najprostszym sposobem jest podanie listy pakietów, o których chcemy wyświetlić szczegółowe informacje:

    # rpm -q bash mc
    bash-3.2-24.el5
    package mc is not installed

    Wyświetlone zostaną wersje zainstalowanych pakietów lub też informacje o braku danego pakietu.

    Niestety, za pocą tego polecenia nie można korzystać ze znaku gwiazdki (‚*’) w celu wyboru listy pakietów:

    # rpm -q 'gnome*'
    package gnome* is not installed
  • -awybór wszystkich pakietów

    Przełącznik ten powoduje wybranie wszystkich zainstalowanych pakietów:

    # rpm -q -a | head
    rmt-0.4b41-4.el5
    desktop-backgrounds-basic-2.0-37
    rootfiles-8.1-1.1.1
    ...

    Teraz można dowiedzieć się, jakie pakiety zaczynają się od słów gnome:

    # rpm -q -a | grep '^gnome'
    gnome-menus-2.16.0-2.fc6
    gnome-keyring-0.6.0-1.fc6
    gnome-vfs2-2.16.2-4.el5
    gnome-utils-2.16.0-5.el5
    ....
  • -fpakiet, do którego należy podany plik
    Polecenie to pozwala na poznanie, przy użyciu jakiego pakietu został zainstalowany podany plik. Czasami się zdarza, że nie poznanie nazwy pakietu nie wcale tak intuicyjne jak się wydaje:

    # rpm -qf /etc/sysctl.conf
    initscripts-8.45.30-2.el5

    # rpm -qf /bin/ls
    coreutils-5.97-23.el5

    Oczywiście, nie każdy plik, który znajduje się na dysku jest składnikiem jakiegoś pakietu. Jeżeli rpm nie potrafi odnaleźć właściciela, wyświetli stosowny komunikat:

    # rpm -qf /etc/hosts
    file /etc/hosts is not owned by any package
  • -pwybór pakietu RPM
    Można także zadąć zapytania do wybranego pakietu RPM. Wtedy rpm zamiast sprawdzać informacje w swojej bazie danych, odczyta je po prostu z podanego pakietu:

    # rpm -q -p bash-3.2-24.el5.i386.rpm
    bash-3.2-24.el5

    Można się także zapytać o grupę pakietów:

    # rpm -q -p x3270-*.rpm
    x3270-3.3.4p7-3.el5.4
    x3270-text-3.3.4p7-3.el5.4
    x3270-x11-3.3.4p7-3.el5.4
  • -gpakiety należące do tej samej grupy
    Podczas tworzenia pakietów należy wybrać, do jakiej grupy będzie należał dany pakiet. Pozwala to na łatwe pogrupowanie np. pakietów spełniających podobne funkcje lub należące do jakiejś grupy:

    # rpm -qg "System Environment/Shells"
    bash-3.2-24.el5
    tcsh-6.14-14.el5
    busybox-1.2.0-7.el5
    zsh-4.2.6-3.el5

Źródła

  • Strona MAN: rpm(8)
  • The Parts of an RPM Query

Tags: , ,