Connecting to ILO with firefox on Ubuntu: the Java issue
İLO nədir? (bax. Wikipedia)
Ubuntu 14.04-də Firefox versiya 34.0-dən İLO-ya qoşulub, Virtual Media-dan İSO image əlavə etmək istədikdə naməlum qara pəncərə gəlir və heç bir əlavə funksionallığı olmur.
Qeyd edək ki,
java-7-openjdk-amd64
icedtea-7-plugin
İnstall olunub.
Mövzunu addım-addım getməliyik ki, problemə mərhələli yanaşmanı da göstərmiş olaq.
IcedTea plugin-inin rəsmi dokumentasiyasına əsasən, IcedTeaPlugin.so faylı mozilla-nın plugin direktoriyasındakı libjavaplugin.so faylına symlink olunmalıdır:
sh@sh--work:~$ cd /usr/lib/mozilla/plugins sh@sh--work:~$ ln -s /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so libjavaplugin.so sh@sh--work:/usr/lib/mozilla/plugins$ ls -l | grep libjavaplugin.so lrwxrwxrwx 1 root root 64 Dec 12 15:52 libjavaplugin.so -> /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so
Verilmiş tələbi yerinə yetirdikdən sonra, Java-nın hansı error-ları verdiyini müəyyən etmək üçün, IcedTea pluginin debug halda aktiv edib Firefox-u start etməliyik.
Əgər hal-hazırda firefox açıqdırsa onu kill edin və terminaldan aşağıdakı qaydada yenidən start edin:
ICEDTEAPLUGIN_DEBUG=true firefox 2>&1 | tee plugin.log
Yuxarıdakı komandaya əsasən plugin.log faylı yaranacaq. Log faylından hansı problemlərin olduğunu müəyyən edə biləcik.
İlk error aşağıdakı kimidir:
java.text.ParseException: Unparseable date: "cüm Dek 12 15:02:15 AZT 2014" at java.text.DateFormat.parse(DateFormat.java:357) at net.sourceforge.jnlp.util.logging.headers.PluginMessage.<init>(PluginMessage.java:73) at net.sourceforge.jnlp.util.logging.JavaConsole.processPluginMessage(JavaConsole.java:523) at net.sourceforge.jnlp.util.logging.JavaConsole.access$1100(JavaConsole.java:87) at net.sourceforge.jnlp.util.logging.JavaConsole$13.run(JavaConsole.java:554) at java.lang.Thread.run(Thread.java:745)
Unparseable date: “cüm Dek 12 15:02:15 AZT 2014” – Məndə Local olaraq ayın tarixinin göstərilməsi Azərbaycan dilinə uyğundur. Görünən budur ki, bunu tanımır.
Dolayısı ilə bunu dəyişməliyik:
Settings — Language Support — Regional Formats-dan dəyişiklik edib English(United States) edirik.
Yenidən aktiv Firefox-u kill edin, yenidən DEBUG mode-da restart edin. Görəcəksiniz ki, yuxarıdakı error aradan qalxdı.
Keçirik log faylda rastlanan 2ci error-a:
java.io.FileNotFoundException: /home/sh/.config/icedtea-web/deployment.properties (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:146) at java.io.FileReader.<init>(FileReader.java:72) at net.sourceforge.jnlp.config.DeploymentConfiguration.parsePropertiesFile(DeploymentConfiguration.java:650) at net.sourceforge.jnlp.config.DeploymentConfiguration.findSystemConfigFile(DeploymentConfiguration.java:474) at net.sourceforge.jnlp.config.DeploymentConfiguration.load(DeploymentConfiguration.java:287) at net.sourceforge.jnlp.config.DeploymentConfiguration.load(DeploymentConfiguration.java:257) at net.sourceforge.jnlp.runtime.JNLPRuntime$DeploymentConfigurationHolder.initConfiguration(JNLPRuntime.java:394) at net.sourceforge.jnlp.runtime.JNLPRuntime$DeploymentConfigurationHolder.<clinit>(JNLPRuntime.java:389) at net.sourceforge.jnlp.runtime.JNLPRuntime.getConfiguration(JNLPRuntime.java:424) at net.sourceforge.jnlp.config.DirectoryValidator.<init>(DirectoryValidator.java:224) at net.sourceforge.jnlp.config.DeploymentConfiguration.move14AndOlderFilesTo15Structure(DeploymentConfiguration.java:824) at net.sourceforge.jnlp.config.DeploymentConfiguration.move14AndOlderFilesTo15StructureCatched(DeploymentConfiguration.java:728) at sun.applet.PluginMain.main(PluginMain.java:139)
Araşdırmama əsasən bu error-un qarşısını İcedTea-ni configləməklə almaq olur.
İcedTea özünün xüsusi config proqramı ilə gəlir aşağıdakı kimi run etmək lazımdır:
sh@sh–work:~$ itweb-settings
Ilk öncə Security hissəsindən default High olan hissəni Low edirik.
(QEYD: ILO ilə işinizi bitirdikdən sonra, mütləq bu göstəricini geri qaytarın)
Daha sonra JVM settings-dən local JRE folder-in path-ını veririk:
Apply edirik, save edirik və yenidən firefox DEBUG halda start edirik.
Yeni error log faylından belə görürük ki, yuxarıdakı error da aradan qalxdı. Lakin hələ də biz Virtual Media-əlavə edə bilmirik.
Daha dəqiq print screen-dəki davam edir:
Error log-a baxmağa davam edirik və daha bir maraqlı erroru görürük:
java.lang.UnsatisfiedLinkError: /tmp/cpqma-1c6dc3fa: /tmp/cpqma-1c6dc3fa: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851) at java.lang.Runtime.load0(Runtime.java:795) at java.lang.System.load(System.java:1062) at com.hp.ilo2.virtdevs.DirectIO.<clinit>(DirectIO.java:87) at com.hp.ilo2.virtdevs.MediaAccess.devices(MediaAccess.java:183) at com.hp.ilo2.virtdevs.virtdevs.ui_init(virtdevs.java:363) at com.hp.ilo2.virtdevs.virtdevs.start(virtdevs.java:142) at sun.applet.AppletPanel.run(AppletPanel.java:476) at java.lang.Thread.run(Thread.java:745)
Bu error Java-nın bit versiyasının problemidir. Yəni, əgər diqqət etdinizsə biz, 64 bit-lik JRE istfadə edirdik. Burdan belə nəticə çıxır ki, 32-bitlik JRE ilə bu error-u aradan qaldıra bilərik. Bunun üçün 32-bitlik Java-nı install edək:
sh@sh–work:~$ sudo apt-get install openjdk-7-jre:i386
Daha sonra İcedTea-nin config-ini dəyişək və yeni 32-bitlik JRE path-i əlavə edək:
Bir daha Firefox-u restart edib yoxlasaq görərik ki, əvvəlki boş screen yenisi ilə əvəzləndi.
İndiki halda biz məqsədimizə çatmış olduq.
İşlədiyim müddətdə əlavə maraqlı həllər olarsa, onları yazıya əlavə edəcəm.
Həmçinin ola bilsin mövzunun daha yeni davamı olsun.
Təşəkkürlər.
Missing Sphinx debug package – building from source
Sphinx-lə əlaqədar olan ilk yazımızda Sphinx crash zamanı core dump-ı ala bilməməkdən danışmışdıq(bax. abrtd: Package ‘sphinx’ isn’t signed with proper key)
Core Dump aldıqdan sonra, GDB ilə debug etməyə çalışdıqda:
[root@xxxx ccpp-2014-12-10-21:53:04-8871]# gdb /usr/bin/searchd coredump GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6) This GDB was configured as "x86_64-redhat-linux-gnu". Reading symbols from /usr/bin/searchd...(no debugging symbols found)...done. [New Thread 8871] [New Thread 8874] [New Thread 8877] [New Thread 8878] [New Thread 8873] [New Thread 8875] [New Thread 8876] Core was generated by `/usr/bin/searchd --config /etc/sphinx/sphinx.conf'. Program terminated with signal 11, Segmentation fault. #0 0x00000000004c790d in CheckFlush() () Missing separate debuginfos, use: debuginfo-install sphinx-2.1.8-1.rhel6.x86_64 (gdb) bt #0 0x00000000004c790d in CheckFlush() () #1 0x000000000050c61f in TickHead(bool) () #2 0x000000000050ed16 in ServiceMain(int, char**) () #3 0x000000000050ffad in main () (gdb) bt full #0 0x00000000004c790d in CheckFlush() () No symbol table info available. #1 0x000000000050c61f in TickHead(bool) () No symbol table info available. #2 0x000000000050ed16 in ServiceMain(int, char**) () No symbol table info available. #3 0x000000000050ffad in main () No symbol table info available.
Bəzi debug paketləri yoxdur – Missing separate debuginfos, use: debuginfo-install sphinx-2.1.8-1.rhel6.x86_64.
Nəzərə alsaq ki, Sphinx 2.1.8 debug paketi repo-larda da yoxdur, o zaman bu paketi özümüz build etməli olacıq. Məqsədimiz coredump-ı daha düzgün şəkildə debug edə bilməmizdi.
Yeni yaratdığımız rpm-lərlə əvvəlkini əvəzləyəcik(replace) və eyni crash baş verdikdən sonra yeni coredump-la araşdırmamızı davam etdirəcik.
Source-dan özümüz debuginfo paketinin rpm-ini yaradaq və bunu install edək.
Bu məqsədlə lazımı paketləri yazaq:
[root@xxxx ~]# yum install rpm-build rpmdevtools
Sphinx builder user-ini tələb edir bu user-i yaradaq:
[root@xxxx ~]# adduser builder [root@xxxx builder]# su - builder
Source faylımızı download edək:
[builder@xxxx ~]$ wget http://sphinxsearch.com/files/sphinx-2.1.8-1.rhel6.src.rpm [builder@xxxx ~]$ ls sphinx-2.1.8-1.rhel6.src.rpm
Source faylı install edək:
[builder@xxxx ~]$ rpmdev-setuptree [builder@xxxx ~]$ ls rpmbuild sphinx-2.1.8-1.rhel6.src.rpm [builder@xxxx ~]$ rpm -ivh sphinx-2.1.8-1.rhel6.src.rpm 1:sphinx ########################################### [100%]
Əgər diqqət etsək .spec faylının yarandığını görərik:
[builder@xxxx rpmbuild]$ ls BUILD RPMS SOURCES SPECS SRPMS [builder@xxxx rpmbuild]$ ls SPECS/ sphinx_rel21.spec
Spec faylından istifadə etməklə rpm-lərimizi yaratmağa çalışaq:
[builder@xxxx rpmbuild]$ rpmbuild -ba SPECS/sphinx_rel21.spec error: Failed build dependencies: mysql-devel is needed by sphinx-2.1.8-1.el6.x86_64 postgresql-devel is needed by sphinx-2.1.8-1.el6.x86_64 expat-devel is needed by sphinx-2.1.8-1.el6.x86_64
Aydın olur ki, mysql-devel , postgresql-devel, expat-devel paketlərini yazmalıyıq.
Nəzərə alsaq ki, bizim Sphinx-imiz MySQL ilə çalışır və postgresql-devel paketi postgresql tələb edir. postgresql bizə lazım olmadığı üçün onu dependency requirement-dən çıxarmaq lazımdır. Bu məqsədlə sphinx_rel21.spec faylında postgresql-devel paketini comment-ləmək lazımdır:
#BuildRequires: postgresql-devel
Bir daha yuxarıdakı komandanı run etsək:
[builder@xxxx rpmbuild]$ rpmbuild -ba SPECS/sphinx_rel21.spec error: Failed build dependencies: mysql-devel is needed by sphinx-2.1.8-1.el6.x86_64 expat-devel is needed by sphinx-2.1.8-1.el6.x86_64
yum install mysql-devel expat-devel – bu dependency problemimiz həll edəcək.
Daha sonra bir daha eyni komandanı işlədək, lakin bir dəyişiklik etmək lazımdır.
Məntiqlə düşündükdə biz, PostgreSQL paketlərini dependency kimi çıxartdıq, lakin configure zamanı bunu göstərməliyik ki, source-dan compile etdikdə PostgreSQL paketlərinə müraciət etməsin.
Yenidən biz .spec faylımızı açırıq orada %build kataloqu altında %configure axtarırıq.
%configure –sysconfdir=/etc/sphinx –with-mysql –with-re2 –with-libstemmer –with-unixodbc –with-iconv –enable-id64 –with-pgsql –with-syslog
Gördüyümüz kimi, –with-pgsql opsiyasını –without-pgsql olaraq dəyişirik. Həmçinin, –enable-debug əlavə edirik.
%build kataloqundan yuxarıda isə %debug_package əlavə edirik.(bu debug paketinin yaradılması üçün lazımdır). .spec faylı save edirik.
Həmçinin bildiyiniz kimi, build və make əməliyyatları üçün aşağıdakı paketlərə də ehtiyac var:
yum install gcc gcc-g++ make cpp
Bütün addımları etdikdən sonra RPM paketlərimizi yaradaq:
[builder@xxxx rpmbuild]$ rpmbuild -ba SPECS/sphinx_rel21.spec . . . Wrote: /home/builder/rpmbuild/SRPMS/sphinx-2.1.8-1.el6.src.rpm Wrote: /home/builder/rpmbuild/RPMS/x86_64/sphinx-2.1.8-1.el6.x86_64.rpm Wrote: /home/builder/rpmbuild/RPMS/x86_64/sphinx-testing-2.1.8-1.el6.x86_64.rpm Wrote: /home/builder/rpmbuild/RPMS/x86_64/sphinx-debug-2.1.8-1.el6.x86_64.rpm
Əməliyyatlar uğurla nəticələnsə RPMS folderində aşağıdakı fayllar olacaq:
[builder@xxxx rpmbuild]$ ls -l RPMS/x86_64/ total 36924 -rw-rw-r-- 1 builder builder 7666291 Dec 11 13:35 sphinx-2.1.8-1.el6.x86_64.rpm -rw-rw-r-- 1 builder builder 28716729 Dec 11 13:35 sphinx-debug-2.1.8-1.el6.x86_64.rpm -rw-rw-r-- 1 builder builder 1422134 Dec 11 13:35 sphinx-testing-2.1.8-1.el6.x86_64.rpm
Gördüyümüz kimi hem sphinx həm də sphinx-debug paketlərini əldə etmiş olduq.
Mövcud Sphinx paketini yenisi ilə əvəz etdikdən və debug paketi install etdikdən sonra, yeni crash-dən sonra yazının əvvəlindəki kimi faydasız GDB analizi yox full analiz etmək mümkün olur:
[root@xxxx ccpp-2014-12-11-14:30:45-59208]# gdb /usr/bin/searchd coredump Reading symbols from /usr/bin/searchd...Reading symbols from /usr/lib/debug/usr/bin/searchd.debug...done. done. [New Thread 59208] [New Thread 59209] [New Thread 59211] [New Thread 59210] [New Thread 59213] [New Thread 59214] [New Thread 59212] Core was generated by `/usr/bin/searchd --config /etc/sphinx/sphinx.conf'. Program terminated with signal 11, Segmentation fault. #0 0x0000000000420c12 in CheckFlush () at searchd.cpp:18828 18828 if ( g_pFlush->m_bFlushing ) (gdb) bt #0 0x0000000000420c12 in CheckFlush () at searchd.cpp:18828 #1 0x000000000046731a in TickHead (bDontListen=false) at searchd.cpp:19825 #2 0x0000000000468cee in ServiceMain (argc=985764272, argv=<value optimized out>) at searchd.cpp:21072 #3 0x000000000046a621 in main (argc=3, argv=0x7fff3ac1a718) at searchd.cpp:21143 (gdb) bt full #0 0x0000000000420c12 in CheckFlush () at searchd.cpp:18828 bDirty = <value optimized out> #1 0x000000000046731a in TickHead (bDontListen=false) at searchd.cpp:19825 iClientSock = <value optimized out> sClientName = "85.132.89.226:35563\000\000" pListener = <value optimized out> #2 0x0000000000468cee in ServiceMain (argc=985764272, argv=<value optimized out>) at searchd.cpp:21072 iBacklog = 5 tQueryTLS = {m_tQuery = {m_pQuery = 0x0, m_iSize = 0, m_uCMD = 0, m_uVer = 0, m_bMySQL = false}, static m_tForkQuery = {m_pQuery = 0x7f75ff26ddc5 "", m_iSize = 202, m_uCMD = 0, m_uVer = 279, m_bMySQL = false}, static m_tLastQueryTLS = 6} bOptStatus = <value optimized out> iOptPort = <value optimized out> uReplayFlags = <value optimized out> hConf = @0x9b27a0 bOptStop = <value optimized out> bWatched = 176 tListener = {m_iSock = 985769744, m_eProto = PROTO_SPHINX} sArenaError = <value optimized out> pAcceptMutex = 0x0 bOptPort = <value optimized out> hIndexes = {<CSphOrderedHash<CSphIndex*, CSphString, CSphStrHashFunc, 256>> = {m_dHash = { 0x0 <repeats 33 times>, 0x2119ad0, 0x0 <repeats 31 times>, 0x2119cb0, 0x0, 0x0, 0x0, 0x0, 0x2119d70, 0x0 <repeats 17 times>, 0x2119b30, 0x0 <repeats 20 times>, 0x2119bf0, 0x0 <repeats 13 times>, 0x2119a10, 0x0 <repeats 46 times>, 0x2119a70, 0x0 <repeats 35 times>, 0x2119b90, 0x0, 0x2119dd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2119d10, 0x0 <repeats 35 times>, 0x2119c50, 0x0, 0x0, 0x0, 0x0}, m_pFirstByOrder = 0x2119a10, m_pLastByOrder = 0x2119dd0, m_iLength = 11, m_pIterator = 0x0}, <No data fields>} bOptStopWait = <value optimized out> i = <value optimized out> hSearchdpre = <value optimized out> bVisualLoad = false conf = {<CSphOrderedHash<SmallStringHash_T<CSphConfigSection>, CSphString, CSphStrHashFunc, 256>> = { m_dHash = {0x0 <repeats 256 times>}, m_pFirstByOrder = 0x0, m_pLastByOrder = 0x0, m_iLength = 0, m_pIterator = 0x0}, <No data fields>} ---Type <return> to continue, or q <return> to quit--- bOptPIDFile = 208 dOptIndexes = {m_iLength = 0, m_iLimit = 0, m_pData = 0x0} sOptListen = {_vptr.CSphString = 0x98b190, m_sValue = 0x0, static SAFETY_GAP = 4} bOptListen = <value optimized out> bTestMode = <value optimized out> iDevNull = 34607408 hSearchd = <value optimized out> #3 0x000000000046a621 in main (argc=3, argv=0x7fff3ac1a718) at searchd.cpp:21143 cTopOfMainStack = 0 '\000'
Artıq müəyyən elədik ki, crash səbəbi,
#0 0x0000000000420c12 in CheckFlush () at searchd.cpp:18828
18828 if ( g_pFlush->m_bFlushing )
searchd.cpp adlı faylın 18828 -ci sətrindəki if statement-dir.
Həmçinin görürük ki,
#0 0x0000000000420c12 in CheckFlush () at searchd.cpp:18828
bDirty =
bDirty – Dirty İndex-i təyin edən boolean dəyişəndir və.s şəkildə source kodu araşdırmaqla kod məntiqini başa düşmək lazımdır.
Daha sonra da, crash səbəbini müəyyən etmək olar, hətta bu əgər BUG-dırsa BUG report edə bilərsiniz.
Crash hər hansı üsulla həll edilsə, onun həlli haqqında da ayrıca danışacıq.
Təşəkkürlər.
abrtd: Package ‘sphinx’ isn’t signed with proper key
Sphinx Search Engine məhşur axtarış motorudur. Database-ə gedən axtarış sorğularını Sphinx-ə yönləndirməklə siz Database-ə düşəcək bu əlavə yükü aradan qaldırmış olursuz.
Bu və digər istifadə yerlərinə görə, Sphinx production səviyyədə geniş tətbiq olunan bir məhsuldur.
Sphinx haqqında rəsmi səhifə Sphinx Search
Mövzumuz Crash zamanı ABRT ilə core dump almaq haqqındadır.
Sphinx 2.1.8 (Sphinx 2.1.8-id64-release (rel21-r4675)) versiyada, DMESG output-dan aldığım məlumatda, Segmentation Fault olduğu görünür. Çox güman ki, BUG-a rast gəlmişəm.
DMESG output:
searchd[63657]: segfault at 7ffb80168000 ip 00000000004c790d sp 00007fffdc699460 error 4 in searchd[400000+40b000] searchd[63902]: segfault at 7ffb80168000 ip 00000000004c790d sp 00007fffdc699460 error 4 in searchd[400000+40b000] searchd[63932]: segfault at 7ffb80168000 ip 00000000004c790d sp 00007fffdc699460 error 4 in searchd[400000+40b000] searchd[63941]: segfault at 7ffb80168000 ip 00000000004c790d sp 00007fffdc699460 error 4 in searchd[400000+40b000] searchd[63986]: segfault at 7ffb80168000 ip 00000000004c790d sp 00007fffdc699460 error 4 in searchd[400000+40b000] searchd[64000]: segfault at 7ffb80168000 ip 00000000004c790d sp 00007fffdc699460 error 4 in searchd[400000+40b000] searchd[3312]: segfault at 7f5e89892000 ip 00000000004c790d sp 00007fffff4b2660 error 4 in searchd[400000+40b000] searchd[3406]: segfault at 7f5e89892000 ip 00000000004c790d sp 00007fffff4b2660 error 4 in searchd[400000+40b000] searchd[3484]: segfault at 7f5e89892000 ip 00000000004c790d sp 00007fffff4b2660 error 4 in searchd[400000+40b000] searchd[16809]: segfault at 7fb0e063b000 ip 00000000004c790d sp 00007fff1129d270 error 4 in searchd[400000+40b000]
Sphinx log faylından da bunu başa düşmək olur:
------- FATAL: CRASH DUMP ------- [Mon Dec 8 16:34:49.031 2014] [11771] --- crashed SphinxAPI request dump --- # --- request dump end --- Sphinx 2.1.8-id64-release (rel21-r4675) Handling signal 11 -------------- backtrace begins here --------------- Program compiled with gcc 4.4.4 Configured with flags: '--host=x86_64-unknown-linux-gnu' '--build=x86_64-unknown-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir=/etc/sphinx' '--with-mysql' '--with-re2' '--with-libstemmer' '--with-unixodbc' '--with-iconv' '--enable-id64' '--with-pgsql' '--with-syslog' 'build_alias=x86_64-unknown-linux-gnu' 'host_alias=x86_64-unknown-linux-gnu' 'CFLAGS=-O2 -g' 'CXXFLAGS=-O2 -g' Host OS is Linux rhel6064 2.6.32-71.40.1.el6.x86_64 #1 SMP Tue Jul 3 14:39:16 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux Stack bottom = 0x7f5d1aadcdbf, thread stack size = 0x10000 Trying manual backtrace: Something wrong with thread stack, manual backtrace may be incorrect (fp=0x7f5d1aadcdbf) Stack looks OK, attempting backtrace. 0x0 Something wrong in frame pointers, manual backtrace failed (fp=0) Trying system backtrace: begin of system symbols: /usr/bin/searchd(_Z12sphBacktraceib+0x9c)[0x619ccc] /usr/bin/searchd(_ZN16SphCrashLogger_c11HandleCrashEi+0x1b4)[0x4c3b54] /lib64/libpthread.so.0[0x3d65e0f710] /usr/bin/searchd(_Z14sphUnzipOffsetRPKh+0x7)[0x526eb7] /usr/bin/searchd(_ZNK9CWordlist7GetWordEPKhmR13CSphDictEntry+0x38)[0x5289d8] /usr/bin/searchd(_ZNK21DiskIndexQwordSetup_c5SetupI16DiskIndexQword_cILb1ELb0ELb0EEEEbP9ISphQword+0x46e)[0x5a363e] /usr/bin/searchd[0x6d3ea3] /usr/bin/searchd(_ZN9ExtNode_i6CreateERK11XQKeyword_tPK8XQNode_tRK14ISphQwordSetup+0x1e)[0x6d48ee] /usr/bin/searchd(_ZN9ExtNode_i6CreateEPK8XQNode_tRK14ISphQwordSetup+0xb2)[0x6d5172] /usr/bin/searchd(_ZN11ExtRanker_cC1ERK9XQQuery_tRK14ISphQwordSetup+0x326)[0x6d6576] /usr/bin/searchd(_Z15sphCreateRankerRK9XQQuery_tPK9CSphQueryP15CSphQueryResultRK14ISphQwordSetupRK16CSphQueryContext+0xa04)[0x6d7a74] /usr/bin/searchd(_ZNK13CSphIndex_VLN16ParsedMultiQueryEPK9CSphQueryP15CSphQueryResultiPP15ISphMatchSorterRK9XQQuery_tP8CSphDictPK10CSphVectorI18CSphFilterSettings16CSphVectorPolicyISE_EEP18CSphQueryNodeCacheib+0x628)[0x55ef18] /usr/bin/searchd(_ZNK13CSphIndex_VLN10MultiQueryEPK9CSphQueryP15CSphQueryResultiPP15ISphMatchSorterPK10CSphVectorI18CSphFilterSettings16CSphVectorPolicyIS9_EEib+0x674)[0x576874] /usr/bin/searchd(_ZNK13CSphIndex_VLN12MultiQueryExEiPK9CSphQueryPP15CSphQueryResultPP15ISphMatchSorterPK10CSphVectorI18CSphFilterSettings16CSphVectorPolicyISA_EEib+0x76d)[0x57718d] /usr/bin/searchd(_ZN15SearchHandler_c16RunLocalSearchesEP15ISphMatchSorterPKcb+0xfc1)[0x4f55e1] /usr/bin/searchd(_ZN15SearchHandler_c9RunSubsetEii+0x2722)[0x4f81f2] /usr/bin/searchd(_ZN15SearchHandler_c10RunQueriesEv+0x1e)[0x50005e] /usr/bin/searchd(_Z19HandleCommandSearchiiR13InputBuffer_c+0x1b8)[0x503d88] /usr/bin/searchd(_Z18HandleClientSphinxiPKcP9ThdDesc_t+0x51a)[0x50c2fa] /usr/bin/searchd(_Z13HandlerThreadPv+0x57)[0x50c4b7] /usr/bin/searchd(_Z20sphThreadProcWrapperPv+0x19)[0x622cd9] /lib64/libpthread.so.0[0x3d65e079d1] /lib64/libc.so.6(clone+0x6d)[0x3d65ae89dd] -------------- backtrace ends here --------------- Backtrace looks OK. Now you have to do following steps: 1. Run the command over the crashed binary (for example, 'searchd'): nm -n searchd > searchd.sym 2. Attach the binary, generated .sym and the text of backtrace (see above) to the bug report. Also you can read the section about resolving backtraces in the documentation. --- BT to source lines (depth 23): --- ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 ??:0 --- BT to source lines finished --- --- 1 active threads --- thd 0, proto sphinxapi, state query, command search ------- CRASH DUMP END -------
Bildiyimiz kimi, Red Hat based linux-larda (indiki halda CentOS 6) default crash toplayıcısı ABRT-dir. default ABRT path, /var/spool/abrt/-dir.
Yəni hər hansı ciddi crash zamanı, crash edən paketin core dump-ı əlavə araşdırmalar məqsədilə verilmiş path-də saxlanılır.
Bu path-ə nəzər yetirdikdə orada heç bir core dump-ın olmadığını görürük.
root# ls /var/spool/abrt/ abrt-db last-ccpp
Səbəbini isə /var/log/messages faylından tapırıq:
kernel: searchd[11746]: segfault at 7f5d24087000 ip 00000000004c790d sp 00007fff87535c50 error 4 in searchd[400000+40b000] Dec 8 16:32:57 abrtd: Directory 'ccpp-2014-12-08-16:32:57-11746' creation detected Dec 8 16:32:57 abrt[11757]: Saved core dump of pid 11746 (/usr/bin/searchd) to /var/spool/abrt/ccpp-2014-12-08-16:32:57-11746 (158187520 bytes) Dec 8 16:32:57 abrtd: Package 'sphinx' isn't signed with proper key Dec 8 16:32:57 abrtd: 'post-create' on '/var/spool/abrt/ccpp-2014-12-08-16:32:57-11746' exited with 1 Dec 8 16:32:57 abrtd: Deleting problem directory '/var/spool/abrt/ccpp-2014-12-08-16:32:57-11746'
Log fayldan gördüyümüzə əsasən, deyirik ki, ilk başlanğıcda, ccpp-2014-12-08-16:32:57-11746 core dump folder-i yaradılır, core dump ora save olunur.
Lakin daha sonra ABRT GPG Key uyğunlunğunu yoxlayır, uyğunluq tapılmadığına görə yenicə save olunmuş core dump-ı onun folder-i ilə birlikdə silir.
Burada belə aydın olur ki, ABRT, 3rd Party (non-Red Hat və yaxud non-native) paketləri qeydə almır.
Sphinx özü düzgün, rəsmi paketlə install olunub. Lakin bu paket Red Hat (CentOS) tərəfindən təqdim olunmadığına görə key check-dən keçmir.
Bunu ABRT-nin config faylından da oxuya bilirik /etc/abrt/abrt-action-save-package-data.conf:
# With this option set to “yes”,
# only crashes in signed packages will be analyzed.
# the list of public keys used to check the signature is
# in the file gpg_keys
#
OpenGPGCheck = yes
Məlumata əsasən nəticə çıxardırıq ki, OpenGPGCheck = yes olduğu halda, GPG key check edir.
Bu yoxlanış isə gpg_keys faylına əsasən baş verir. Öz növbəsində /etc/abrt/gpg_keys faylının daxilində aşağıdakı məlumatlar yerləşir:
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-6
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Security-6
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-6
Ümumiləşdirsək,
OpenGPGCheck = yes -i no edib, ABRT-ni restart etsək, növbəti crash zamanı GPG key check olmayacaq və nəticədə Sphinx üçün core dump yaradılıb saxlanacaq.
Qeyd edim ki, bu üsulla istənilən 3rd Party məhsulun core dump-ı alınacaq. Yəni, mövzu sphinx üzərində izah olunsa da, sistem səviyyədə bütün paketlərə şamil olunur.
Core Dump aldıqdan sonra mövzunu davam etdirəcik.
Təşəkkürlər.
Dealing with PHP Segfault in CentOS 6.5
Bir müddət əvvələ qədər DMESG output-dan aldığımız məlumata əsasən commandline-dan çalışdırılan PHP kod serverde segfult error-lar verir, bir müddətdən sonra isə server-in özünü necə deyərlər “itiririk”:
php[2682]: segfault at ffffffff ip 000000000058b19f sp 00007fff4f51eae0 error 4 in php[400000+2c0000] php[4478]: segfault at ffffffff ip 000000000058b19f sp 00007fffd5b5b3e0 error 4 in php[400000+2c0000] php[5883]: segfault at ffffffff ip 000000000058b19f sp 00007fff6e5ddd70 error 4 in php[400000+2c0000] php[8353]: segfault at ffffffff ip 000000000058b19f sp 00007ffffa83a8a0 error 4 in php[400000+2c0000] php[9629]: segfault at ffffffff ip 000000000058b19f sp 00007fff55e23630 error 4 in php[400000+2c0000] php[11285]: segfault at ffffffff ip 000000000058b19f sp 00007fff2dd525a0 error 4 in php[400000+2c0000] php[13148]: segfault at ffffffff ip 000000000058b19f sp 00007fff375157a0 error 4 in php[400000+2c0000] php[14569]: segfault at ffffffff ip 000000000058b19f sp 00007fff90a58d00 error 4 in php[400000+2c0000] php[15560]: segfault at ffffffff ip 000000000058b19f sp 00007fffa1db0060 error 4 in php[400000+2c0000] php[17825]: segfault at ffffffff ip 000000000058b19f sp 00007fff33d2b490 error 4 in php[400000+2c0000] php[18783]: segfault at ffffffff ip 000000000058b19f sp 00007ffff949dcb0 error 4 in php[400000+2c0000] php[19747]: segfault at ffffffff ip 000000000058b19f sp 00007fff897c3f10 error 4 in php[400000+2c0000] php[20704]: segfault at ffffffff ip 000000000058b19f sp 00007ffff3083eb0 error 4 in php[400000+2c0000] php[21667]: segfault at ffffffff ip 000000000058b19f sp 00007fff93bb9a20 error 4 in php[400000+2c0000] php[22620]: segfault at ffffffff ip 000000000058b19f sp 00007fff28930530 error 4 in php[400000+2c0000] php[24544]: segfault at ffffffff ip 000000000058b19f sp 00007ffff8e08450 error 4 in php[400000+2c0000] php[25654]: segfault at ffffffff ip 000000000058b19f sp 00007fffaf874640 error 4 in php[400000+2c0000] php[26704]: segfault at ffffffff ip 000000000058b19f sp 00007fff7e2283a0 error 4 in php[400000+2c0000] php[27869]: segfault at ffffffff ip 000000000058b19f sp 00007fffc9e5c8e0 error 4 in php[400000+2c0000]
/var/log/messages – output:
Oct 13 11:23:46 linuxsrv2 kernel: php[2439]: segfault at 6b4bac000 ip 00000000005b41d0 sp 00007fff7d0b9568 error 4 in php[400000+2c0000] Oct 13 11:23:48 linuxsrv2 abrtd: Directory 'ccpp-2014-10-13-11:23:46-2439' creation detected Oct 13 11:23:48 linuxsrv2 abrt[2440]: Saved core dump of pid 2439 (/usr/bin/php) to /var/spool/abrt/ccpp-2014-10-13-11:23:46-2439 (85946368 bytes)
Daha dəqiq olaraq test etdikdə:
[root@linuxsrv2 abrt]# /usr/bin/php /usr/share/nginx/html/Grab/index-console.php Test xxxxxxxxxx Segmentation fault (core dumped)
Core Dump GDB output-a nəzər yetirək:
[root@linuxsrv2 ccpp-2014-10-15-14:25:02-10116]# gdb /usr/bin/php coredump . . . Core was generated by `/usr/bin/php /usr/share/nginx/html/Grab/index-console.php Test xxxxxxxx'. Program terminated with signal 11, Segmentation fault. #0 zend_mm_remove_from_free_list (heap=<value optimized out>, mm_block=0x29fe8c8) at /usr/src/debug/php-5.3.3/Zend/zend_alloc.c:826 826 ZEND_MM_CHECK_TREE(mm_block); (gdb) bt #0 zend_mm_remove_from_free_list (heap=<value optimized out>, mm_block=0x29fe8c8) at /usr/src/debug/php-5.3.3/Zend/zend_alloc.c:826 #1 0x000000000058b3b5 in _zend_mm_free_int (heap=0x24372b0, p=0x29fe878) at /usr/src/debug/php-5.3.3/Zend/zend_alloc.c:2019 #2 0x00000000005b4b91 in zend_hash_destroy (ht=0x4e4d1b0) at /usr/src/debug/php-5.3.3/Zend/zend_hash.c:531 #3 0x00000000005a052a in destroy_zend_class (pce=<value optimized out>) at /usr/src/debug/php-5.3.3/Zend/zend_opcode.c:191 #4 0x00000000005b4835 in zend_hash_apply_deleter (ht=0x2437c00, p=0x2aca320) at /usr/src/debug/php-5.3.3/Zend/zend_hash.c:609 #5 0x00000000005b4939 in zend_hash_reverse_apply (ht=0x2437c00, apply_func=0x59b750 <clean_non_persistent_class>) at /usr/src/debug/php-5.3.3/Zend/zend_hash.c:758 #6 0x000000000059c45e in shutdown_executor () at /usr/src/debug/php-5.3.3/Zend/zend_execute_API.c:312 #7 0x00000000005a8c22 in zend_deactivate () at /usr/src/debug/php-5.3.3/Zend/zend.c:890 #8 0x0000000000556805 in php_request_shutdown (dummy=<value optimized out>) at /usr/src/debug/php-5.3.3/main/main.c:1634 #9 0x0000000000631214 in main (argc=4, argv=0x7fff232e2158) at /usr/src/debug/php-5.3.3/sapi/cli/php_cli.c:1373 (gdb) bt full #0 zend_mm_remove_from_free_list (heap=<value optimized out>, mm_block=0x29fe8c8) at /usr/src/debug/php-5.3.3/Zend/zend_alloc.c:826 rp = <value optimized out> cp = <value optimized out> prev = 0x2bf12b0 next = 0x2bf12b0 #1 0x000000000058b3b5 in _zend_mm_free_int (heap=0x24372b0, p=0x29fe878) at /usr/src/debug/php-5.3.3/Zend/zend_alloc.c:2019 mm_block = 0x29fe868 next_block = 0x29fe8c8 size = 96 #2 0x00000000005b4b91 in zend_hash_destroy (ht=0x4e4d1b0) at /usr/src/debug/php-5.3.3/Zend/zend_hash.c:531 p = 0x4e49b98 q = 0x29fe878 #3 0x00000000005a052a in destroy_zend_class (pce=<value optimized out>) at /usr/src/debug/php-5.3.3/Zend/zend_opcode.c:191 ce = 0x4e4d180 #4 0x00000000005b4835 in zend_hash_apply_deleter (ht=0x2437c00, p=0x2aca320) at /usr/src/debug/php-5.3.3/Zend/zend_hash.c:609 retval = <value optimized out> #5 0x00000000005b4939 in zend_hash_reverse_apply (ht=0x2437c00, apply_func=0x59b750 <clean_non_persistent_class>) at /usr/src/debug/php-5.3.3/Zend/zend_hash.c:758 result = 1 p = 0x2aca400 q = 0x2aca320 #6 0x000000000059c45e in shutdown_executor () at /usr/src/debug/php-5.3.3/Zend/zend_execute_API.c:312 __orig_bailout = 0x0 __bailout = {{__jmpbuf = {9618720, 4153135478262045439, 140733783621432, 0, 0, 140733783621432, -4153268429412787457, 4153135458132007679}, __mask_was_saved = 0, __saved_mask = {__val = {44778240, 312, 5813072, 44033256, 81700376, 88, 5813072, 20040, 5813072, 9620224, 9617240, 9618536, 0, 0, 5928661, 9620224}}}} #7 0x00000000005a8c22 in zend_deactivate () at /usr/src/debug/php-5.3.3/Zend/zend.c:890 No locals. #8 0x0000000000556805 in php_request_shutdown (dummy=<value optimized out>) at /usr/src/debug/php-5.3.3/main/main.c:1634 report_memleaks = 1 '\001' #9 0x0000000000631214 in main (argc=4, argv=0x7fff232e2158) at /usr/src/debug/php-5.3.3/sapi/cli/php_cli.c:1373 exit_status = 0 c = <value optimized out> ---Type <return> to continue, or q <return> to quit--- file_handle = {type = ZEND_HANDLE_MAPPED, filename = 0x7fff232e3f38 "/usr/share/nginx/html/Grab/index-console.php", opened_path = 0x0, handle = { fd = 40267816, fp = 0x2667028, stream = {handle = 0x2667028, isatty = 0, mmap = {len = 585, pos = 0, map = 0x7ff7457cf000, buf = 0x7ff7457cf000 <Address 0x7ff7457cf000 out of bounds>, old_handle = 0x26908f0, old_closer = 0x5bd500 <zend_stream_stdio_closer>}, reader = 0x5bdb10 <zend_stream_stdio_reader>, fsizer = 0x5bd5b0 <zend_stream_stdio_fsizer>, closer = 0x5bdaa0 <zend_stream_mmap_closer>}}, free_filename = 0 '\000'} behavior = <value optimized out> reflection_what = <value optimized out> orig_optind = 1 orig_optarg = 0x0 arg_free = <value optimized out> arg_excp = <value optimized out> script_file = <value optimized out> interactive = <value optimized out> module_started = 1 request_started = 1 lineno = 1 exec_direct = <value optimized out> exec_run = <value optimized out> exec_begin = <value optimized out> exec_end = <value optimized out> param_error = <value optimized out> hide_argv = <value optimized out> ini_entries_len = <value optimized out>
zend_mm_heap corrupted -u isə scripti PHP debug-dan birbaşa alırıq
[root@linuxsrv2 ~]# gdb /usr/bin/php . . (gdb) run /usr/share/nginx/html/Grab/index-console.php Test xxxxx Starting program: /usr/bin/php /usr/share/nginx/html/Grab/index-console.php Test xxxxx [Thread debugging using libthread_db enabled] zend_mm_heap corrupted Program exited with code 01.
Araşdırmalardan sonra, ortaya çıxdı ki, bu BUG PHP-nin garbage collector-undan irəli gəlir.
Test məqsədilə Garbage Collector-u söndürüb yoxlayaq./etc/php.ini faylına əlavə edirik:
[PHP] zend.enable_gc = 0
Daha sonra nginx-ə restart veririk və bir daha yoxlayırıq:
(gdb) run /usr/share/nginx/html/Grab/index-console.php Test xxxxxx Starting program: /usr/bin/php /usr/share/nginx/html/Grab/index-console.php Test xxxxx [Thread debugging using libthread_db enabled] Program exited normally.
Ümumiləşdirsək, qarşılaşdığımız BUG üçün workaround: Garbage Collector-u söndürməkdir.
Əgər Global yox məhz müəyyən script üçün söndürmək lazımdırsa o zaman script daxilinə qeyd etmək lazımdır:
ini_set('zend.enable_gc',0);
Təşəkkürlər.
Use Oracle 12c Preinstall RPM with CentOS 6.5
Oracle-ın Linux üzərinə install-ı zamanı, bəzi pre-install addımlar atılmalıdır ki, burda yeni başlayanlara bəzən çətinlik yaradır.
Bu prosesi sadələşdirmək məqsədilə, Oracle 12cR1 üçün preinstall paketini təqdim edir.
Paketin adı: oracle-rdbms-server-12cR1-preinstall
Lakin bu paket yalnız, Oracle Public Yum Repo-da mövcuddur. Sözsüz ki, repo-ni aktivləşdirmək çox sadədir. Problem isə daha ciddidir, bu pre-install paketi dependency error verir (CentOS,Scientific Linux, Red Hat). Daha dəqiq desək Oracle Linux Kernel teleb edir(UEK).
Sınayaq:
Installing: oracle-rdbms-server-12cR1-preinstall x86_64 1.0-8.el6 /oracle-rdbms-server-12cR1-preinstall-1.0-8.el6.x86_64 37 k Installing for dependencies: compat-libcap1 x86_64 1.10-1 base 17 k compat-libstdc++-33 x86_64 3.2.3-69.el6 base 183 k kernel-uek x86_64 2.6.39-400.215.7.el6uek ol6_UEK_latest 28 M kernel-uek-firmware noarch 2.6.39-400.215.7.el6uek ol6_UEK_latest 3.7 M ksh x86_64 20120801-10.el6_5.9 ol6_latest 757 k libaio-devel x86_64 0.3.107-10.el6 base 13 k sysstat x86_64 9.0.4-22.el6_5.1 ol6_latest 230 k
Bəli gördüyümüz kimi, kernel-uek və kernel-uek-firmware
dependency tələb edir.
Sözsüz ki, 1 distro-da müxtəlif fərqli vendor-dan kernel olmamalıdır.
Nəticə etibarı ilə, biz bu pre-install RPM paketi CentOS-a qurmaq üçün, RPM-i yenidən rebuild etməli, bu əsnada isə UEK dependency-ni silməliyik.
Bütün addımlar aşağıdakı kimidir:
1. Install rpmbuild and related packages
[root@linuxsrv1 ~]#yum install rpm-build rpmdevtools
2. Bütün rebuild işlərini görmək üçün, tets user yaradaq
[root@linuxsrv1 ~]# useradd tester -p tester -m -s /bin/bash [root@linuxsrv1 ~]# su - tester
3. Oracle pre-install source paketlərini əldə edirik
[tester@linuxsrv1 ~]$ wget http://public-yum.oracle.com/repo/OracleLinux/OL6/latest/x86_64/getPackageSource/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.src.rpm Saving to: “oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.src.rpm” 100%[====================================================================================================>] 14,075 --.-K/s in 0.06s 2014-09-09 22:37:33 (241 KB/s) - “oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.src.rpm” saved [14075/14075]
4. RPMTREE yaradırıq:
[tester@linuxsrv1 ~]$ rpmdev-setuptree [tester@linuxsrv1 ~]$ ls -l total 20 -rw-rw-r--. 1 tester tester 14075 Nov 21 2013 oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.src.rpm drwxrwxr-x. 8 tester tester 4096 Sep 9 22:40 rpmbuild [tester@linuxsrv1 rpmbuild]$ ls -l total 24 drwxrwxr-x. 3 tester tester 4096 Sep 9 22:40 BUILD drwxr-xr-x. 2 tester tester 4096 Sep 9 22:40 BUILDROOT drwxrwxr-x. 3 tester tester 4096 Sep 9 22:40 RPMS drwxrwxr-x. 2 tester tester 4096 Sep 9 22:38 SOURCES drwxrwxr-x. 2 tester tester 4096 Sep 9 22:38 SPECS drwxrwxr-x. 2 tester tester 4096 Sep 9 22:40 SRPMS
5. src.rpm paketini test user ilə install edirik:
[tester@linuxsrv1 ~]$ rpm -ivh oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.src.rpm warning: oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.src.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY 1:oracle-rdbms-server-12c########################################### [100%]
6. Dependency hissəsində dəyişiklik edirik:
[tester@linuxsrv1 ~]$ nano rpmbuild/SPECS/oracle-rdbms-server-12cR1-preinstall.spec #System requirement Requires:procps module-init-tools ethtool initscripts Requires:bc bind-utils nfs-utils util-linux-ng pam Requires:xorg-x11-utils xorg-x11-xauth #Requires:kernel-uek Requires:smartmontools
7. Yeni SPEC fayldan RPM-i rebuild edirik:
[tester@linuxsrv1 rpmbuild]$ rpmbuild -ba SPECS/oracle-rdbms-server-12cR1-preinstall.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.iYRCvZ + umask 022 + cd /home/tester/rpmbuild/BUILD + LANG=C + export LANG + unset DISPLAY + echo RPM_BUILD_ROOT=/home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 RPM_BUILD_ROOT=/home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 + cd /home/tester/rpmbuild/BUILD + rm -rf oracle-rdbms-server-12cR1-preinstall-1.0 + /bin/tar -xf - + /usr/bin/gzip -dc /home/tester/rpmbuild/SOURCES/oracle-rdbms-server-12cR1-preinstall-1.0.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd oracle-rdbms-server-12cR1-preinstall-1.0 + /bin/chmod -Rf a+rX,u+w,g-w,o-w . + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.kajs7z + umask 022 + cd /home/tester/rpmbuild/BUILD + cd oracle-rdbms-server-12cR1-preinstall-1.0 + LANG=C + export LANG + unset DISPLAY + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.yw8fMa + umask 022 + cd /home/tester/rpmbuild/BUILD + '[' /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 '!=' / ']' + rm -rf /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 ++ dirname /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 + mkdir -p /home/tester/rpmbuild/BUILDROOT + mkdir /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 + cd oracle-rdbms-server-12cR1-preinstall-1.0 + LANG=C + export LANG + unset DISPLAY + rm -rf /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 + mkdir -p -m 755 /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/etc/sysconfig/oracle-rdbms-server-12cR1-preinstall + mkdir -p -m 755 /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/usr/bin + mkdir -p -m 755 /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/etc/rc.d/init.d + mkdir -p -m 755 /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/etc/security/limits.d + mkdir -p -m 700 /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/var/log/oracle-rdbms-server-12cR1-preinstall/results + install -m 700 oracle-rdbms-server-12cR1-preinstall-verify /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/etc/sysconfig/oracle-rdbms-server-12cR1-preinstall + install -m 700 oracle-rdbms-server-12cR1-preinstall-verify /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/usr/bin + install -m 600 oracle-rdbms-server-12cR1-preinstall.param /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/etc/sysconfig/oracle-rdbms-server-12cR1-preinstall + install -m 700 oracle-rdbms-server-12cR1-preinstall-firstboot /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/etc/rc.d/init.d + touch /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/etc/security/limits.d/oracle-rdbms-server-12cR1-preinstall.conf + ln -f -s /etc/sysconfig/oracle-rdbms-server-12cR1-preinstall/oracle-rdbms-server-12cR1-preinstall-verify /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64/usr/bin/oracle-rdbms-server-12cR1-preinstall-verify + /usr/lib/rpm/find-debuginfo.sh --strict-build-id /home/tester/rpmbuild/BUILD/oracle-rdbms-server-12cR1-preinstall-1.0 + /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-compress + /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/brp-python-bytecompile + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/lib/rpm/redhat/brp-java-repack-jars Processing files: oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 warning: File listed twice: /etc/sysconfig/oracle-rdbms-server-12cR1-preinstall/oracle-rdbms-server-12cR1-preinstall-verify warning: File listed twice: /etc/sysconfig/oracle-rdbms-server-12cR1-preinstall/oracle-rdbms-server-12cR1-preinstall.param Provides: config(oracle-rdbms-server-12cR1-preinstall) = 1.0-11.el6 oracle-rdbms-server-12cR1-preinstall = 1.0 Requires(interp): /bin/sh /bin/sh /bin/sh /bin/sh Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(VersionedDependencies) <= 3.0.3-1 Requires(pre): /bin/sh /etc/redhat-release Requires(post): /bin/sh Requires(preun): /bin/sh Requires(postun): /bin/sh Requires: /bin/bash Processing files: oracle-rdbms-server-12cR1-preinstall-debuginfo-1.0-11.el6.x86_64 Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 warning: Could not canonicalize hostname: linuxsrv1 Wrote: /home/tester/rpmbuild/SRPMS/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.src.rpm Wrote: /home/tester/rpmbuild/RPMS/x86_64/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64.rpm Wrote: /home/tester/rpmbuild/RPMS/x86_64/oracle-rdbms-server-12cR1-preinstall-debuginfo-1.0-11.el6.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.7RHWGH + umask 022 + cd /home/tester/rpmbuild/BUILD + cd oracle-rdbms-server-12cR1-preinstall-1.0 + rm -rf /home/tester/rpmbuild/BUILDROOT/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 + exit 0
8. Yeni yaradılmış RPM paketi install edək:
[tester@linuxsrv1 ~]$ cd rpmbuild/RPMS/x86_64/ [tester@linuxsrv1 x86_64]$ ls -l total 20 -rw-rw-r--. 1 tester tester 15220 Sep 9 22:40 oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64.rpm -rw-rw-r--. 1 tester tester 3424 Sep 9 22:40 oracle-rdbms-server-12cR1-preinstall-debuginfo-1.0-11.el6.x86_64.rpm [tester@linuxsrv1 x86_64]$ su - Password: [root@linuxsrv1 ~]# yum localinstall /home/tester/rpmbuild/RPMS/x86_64/oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64.rpm Dependencies Resolved ============================================================================================================================================== Package Arch Version Repository Size ============================================================================================================================================== Installing: oracle-rdbms-server-12cR1-preinstall x86_64 1.0-11.el6 /oracle-rdbms-server-12cR1-preinstall-1.0-11.el6.x86_64 38 k Installing for dependencies: compat-libcap1 x86_64 1.10-1 base 17 k compat-libstdc++-33 x86_64 3.2.3-69.el6 base 183 k ksh x86_64 20120801-10.el6_5.9 updates 757 k libaio-devel x86_64 0.3.107-10.el6 base 13 k sysstat x86_64 9.0.4-22.el6_5.1 updates 230 k
9. Uğurla install edirik
Installed: oracle-rdbms-server-12cR1-preinstall.x86_64 0:1.0-11.el6 Dependency Installed: compat-libcap1.x86_64 0:1.10-1 compat-libstdc++-33.x86_64 0:3.2.3-69.el6 ksh.x86_64 0:20120801-10.el6_5.9 libaio-devel.x86_64 0:0.3.107-10.el6 sysstat.x86_64 0:9.0.4-22.el6_5.1 Complete!
10.Uğurlu installdan sonra görürük ki, əvvəllər manual olaraq etdiyimiz bütün addımlar indi avtomatik olaraq yerinə yetirilmişdir:
[root@linuxsrv1 ~]# cat /etc/group | grep oracle dba:x:54322:oracle [root@linuxsrv1 ~]# cat /etc/group | grep oinstall oinstall:x:54321: [root@linuxsrv1 ~]# cat /etc/sysctl.conf | grep oracle # oracle-rdbms-server-12cR1-preinstall setting for fs.file-max is 6815744 # oracle-rdbms-server-12cR1-preinstall setting for kernel.sem is '250 32000 100 128' # oracle-rdbms-server-12cR1-preinstall setting for kernel.shmmni is 4096 # oracle-rdbms-server-12cR1-preinstall setting for kernel.shmall is 1073741824 on x86_64 # oracle-rdbms-server-12cR1-preinstall setting for kernel.shmmax is 4398046511104 on x86_64 # oracle-rdbms-server-12cR1-preinstall setting for net.core.rmem_default is 262144 # oracle-rdbms-server-12cR1-preinstall setting for net.core.rmem_max is 4194304 # oracle-rdbms-server-12cR1-preinstall setting for net.core.wmem_default is 262144 # oracle-rdbms-server-12cR1-preinstall setting for net.core.wmem_max is 1048576 # oracle-rdbms-server-12cR1-preinstall setting for fs.aio-max-nr is 1048576 # oracle-rdbms-server-12cR1-preinstall setting for net.ipv4.ip_local_port_range is 9000 65500
Artıq hazırladığım paketi aşağıdakı linkdən yükləyə bilərsiniz:
Təşəkkürlər.
Use WireShark as non-root user
Kiçik problem olsa da, mütləq qeyd etmək istədim bəlkə kimsə qarşılaşar nə vaxtsa.
WireShark install etdikdən sonra adi user ilə onu run etdikdə heç bir capture funksiyası işləməyəcək.
Root user-lə run etdikdə isə bunun təhlükəli olduğunu deyir.
Dolayısı ilə, biz regular user ilə bunu işlətməliyik.
Addımları eyni ilə yerinə yetirdikdə işləyəcək:
1. sudo apt-get install libcap2-bin 2. sudo groupadd wireshark 3. sudo usermod -a -G wireshark sh --(sh-ın yerinə sizin regular username-iniz olmalıdır) 4. sudo chmod 750 /usr/bin/dumpcap 5. sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap 6. adi user-lə run etməzdən əvvəl log off və login olun: wireshark
Bu qədər. artıq adi userlə analizlərə başlaya bilərsiniz.
Disk Encryption for Linux LUKS
Bu yazıda VirtualBox-da qurulmuş CentOS 6.5-ə yeni disk-in (hard drive) əlavə olunması və onun encrypt olunmasından danışacıq.
Əgər siz CentOS-u install edəndə diqqət yetirmisinizsə, orada setup zamanı file system-in encrypt olunması opsiyası təklif olunur.
Təbii ki, daha sonra da bunu etmək olur, lakin bir şeyi yadda saxlamaq lazımdır ki, encrypt olunan zaman bütün data disk-dən silinir. Dolayısı ilə yeni drive-ı istifadəyə buraxmazdan əvvəl bunu etməniz məsləhətdir.
İlk öncə VirtualBox-da yeni hard drive-ın əlavə olunmasını kiçik bir video ilə göstərək:
Yuxarıda göstərilən şəkildə disk əlavə edildikdən sonra təbii ki, bu diski partition-lamaq lazımdır necə deyərlər.
Gəlin mövcud disklərə baxaq:
[root@linuxpamtest ~]# parted -l | grep /dev/sd Disk /dev/sda: 53,7GB Disk /dev/sdb: 8590MB Disk /dev/sdc: 8590MB Disk /dev/sdd: 8590MB Error: /dev/sde: unrecognised disk label
Bizim yeni əlavə etdiyimiz disk /dev/sde-dir.
Aşağıdakı qaydada partition yaradırıq:
[root@linuxpamtest ~]# parted /dev/sde GNU Parted 2.1 Using /dev/sde Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) p Error: /dev/sde: unrecognised disk label (parted) mklabel gpt (parted) mkpart Partition name? []? primary File system type? [ext2]? ext4 Start? 0 End? 2GB Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel? Ignore (parted) p Model: ATA VBOX HARDDISK (scsi) Disk /dev/sde: 8590MB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17,4kB 2000MB 2000MB primary
Biz /dev/sde diski daxilində 2 GB həcmli /dev/sde1 partition-nunu yaratmış olduq.
Və indi Error: /dev/sde: unrecognised disk label erroru əvəzinə, artıq bizim diskimiz tanınır:
[root@linuxpamtest ~]# parted -l | grep /dev/sd Disk /dev/sda: 53,7GB Disk /dev/sdb: 8590MB Disk /dev/sdc: 8590MB Disk /dev/sdd: 8590MB Disk /dev/sde: 8590MB
/dev/sde1 yaradıldıqdan sonra biz onu encrypt edə bilərik bu məqsədlə “Single User Mode”-a aşağıdakı qaydada keçirik:
[root@linuxpamtest ~]# telinit 1
Daha sonra,
yenicə yaratdığımız partition-u random data ilə dolduraq. Bu vaxt ala bilər, səbrlə gözləmək lazımdır:
dd if=/dev/urandom of=/dev/sde1
Daha sonra:
cryptsetup --verbose --verify-passphrase luksFormat /dev/sde1
Yeni encrypt olunmuş device-ı açaq və ona yeni ad verək:
cryptsetup luksOpen /dev/sde1 crypted_data
Yoxlayaq:
Daha sonra da encrypt etdiyimiz disk-də file system yaradaq(EXT4):
mkfs.ext4 /dev/mapper/crypted_data
Bu andan etibarən biz öz encrypt olunmuş /dev/sde1 partition-umuzu mount edib istifadə edə bilərik. Lakin bundan əvvəl, /etc/crypttab faylına əlavə etməliyik:
crypted_data /dev/sde1 none
Faylı save edirik.
Daha sonra hər hansı bizə lazım olan yerdə bir qovluq yaradıb ora mount edirik:
Həmçinin /etc/fstab faylına da əlavələr edirik:
/dev/mapper/crypted_data /root/crypted_data ext4 defaults 1 2
Faylı save edirik.
SELinux ilə əlaqəli komanda:
/sbin/restorecon -v -R /root/crypted_data
Və ən sonda da sistemi reboot edirik. Müəyyən bir vaxtdan sonra, sizdən encrypt olunmuş path üçün parolu tələb edəcək. Təqribən aşağıdakına bənzər bir output olacaq:
Bununla da mövzumuz bitmiş hesab olunur.
Təşəkkürlər.
Install MySQL from source with debugging option in Linux
Hörmətli oxucular, bugünkü mövzumuz aşkar edilmiş hər hansı problemi dərinləməsinə araşdırıb tapmaq və yaxud onu debug etməkdən ibarətdir.
Mövzuya biraz teoriya ilə başlamaqda fayda var.
İlk öncə MySQL üçün bəzi anlayişları irəli sürək:
1. MySQL Logging:
MySQL-də log-lamanın növləri aşağıdakılardır:
* General Log – bütün növ RDBMS fəaliyyətlərin hamısı (SQL-lərin hamısı) bu log faylında log-lanır. Production server-lərdə aktiv etmək məsləhət deyil. Səbəbi isə çox sadədir işlək database-də bu log həcmi qısa müddətdə bir neçə GB-yə çata bilər. General Log adətən 1-2 dəqiqəlik lazım olan aktivliyi scan etmək üçün istifadə olunur.
* Slow Quer Log – default olaraq 10 saniyədən daha çox işləyən sorğuların hamısı bu faylda log-lanır. Təbii ki, 10 saniyəni daha aşağı məsələn, 3 saniyə edib sizin database-inizdə 3 saniyədən çox işləyən, həmçinin index-siz çalışdırılan və.s sorğuları aşkarlaya bilərsiniz.
* Error Log – MySQL start olunandan bu yana baş vermiş bütün kritik dəyişikliklər və error-lar bu faylda qeyd olunur. Bizim üçün ən vacib məsələlərdən biri crash və yaxud BUG-la qarşılaşdıqda ilk edəcəyimiz iş bu fayla baxmaqdır. Çox böyük ehtimal ki, bu faylda stack trace qeyd olunub. Nümunə olaraq:
Thread pointer: 0x0 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... stack_bottom = 0 thread_stack 0x40000 /usr/local/mysql/bin/mysqld(my_print_stacktrace+0x35)[0xab6ead] /usr/local/mysql/bin/mysqld(handle_fatal_signal+0x404)[0x736ee0] /lib64/libpthread.so.0[0x35df20f710] /usr/local/mysql/bin/mysqld[0xd27e2e] /usr/local/mysql/bin/mysqld[0xd1cc5e] /usr/local/mysql/bin/mysqld[0xc5d5f6] /usr/local/mysql/bin/mysqld[0xc5dca7] /usr/local/mysql/bin/mysqld[0xc5e152] /lib64/libpthread.so.0[0x35df2079d1] /lib64/libc.so.6(clone+0x6d)[0x35deee8b5d]
Error Log-da verilən faydalı məlumata baxmayaraq, hər hansı BUG-ı report etdikdə MySQL(Oracle) -ın professional developer-lərinə (hansı ki MySQL-i onlar yazırlar) error-un məhz hansı kod faylının hansı funksiyasında baş verdiyi maraqlandırır. Səbəbi isə çox sadədir BUG-ı reproduce edə bilsinlər və də asanlıqla həmin kod hissəsində dəyişiklik edə bilsinlər. Bunun üçün isə sizdən Linux Admin-lərin çox gözəl bildiyi CORE DUMP tələb olunacaq.
Qeyd edək ki, core dump-ı yalnız və yalnız Debug aktivləşdirilmiş MySQL ilə generate edə biləcəksiniz. Debug mode heç bir halda hazır şəkildə, yüklənə bilən şəkildə (downloadable) saxlanılmır.
Burdan belə çıxır ki, biz MySQL-i source-dan özümüz yazmalı olacıq. CMAKE-ə isə DEBUG-ı aktiv etsin deyə, necə deyərlər bir əmr append edəcik.
Dependency-ləri install edirik:
[root@localhost ~]# yum groupinstall "Development Tools" [root@localhost ~]# yum install cmake [root@localhost ~]# yum install ncurses ncurses-devel [root@localhost ~]# yum install wget
Daha sonra arxiv faylımızı download edirik:
mysql-5.6.19.tar.gz
Daha sonra da ardıclıllıqla:
1. [root@localhost ~]# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.19.tar.gz 2. [root@localhost ~]# tar -xvf mysql-5.6.19.tar.gz 3. [root@localhost ~]# groupadd mysql [root@localhost ~]# useradd -r -g mysql mysql 4. [root@localhost ~]# cd mysql-5.6.19 5. [root@localhost mysql-5.6.19]# cmake -DWITH_DEBUG=1 6. [root@localhost mysql-5.6.19]# make 7. [root@localhost mysql-5.6.19]# make install
Install bitdikdən sonra:
8. [root@localhost mysql-5.6.19]# cd /usr/local/mysql 9. [root@localhost mysql]# chown -R mysql . 10. [root@localhost mysql]# chgrp -R mysql . 11. [root@localhost mysql]# scripts/mysql_install_db --user=mysql 2014-07-21 03:52:05 14280 [Note] InnoDB: Using atomics to ref count buffer pool pages 2014-07-21 03:52:05 7f6e8f793720 InnoDB: !!!!!!!! UNIV_DEBUG switched on !!!!!!!!! 2014-07-21 03:52:05 7f6e8f793720 InnoDB: !!!!!!!! UNIV_SYNC_DEBUG switched on !!!!!!!!!
Fərqliliyə diqqət yetirin.
Daha sonra:
12. [root@localhost mysql]# chown -R root . 13. [root@localhost mysql]# chown -R mysql data 14. [root@localhost mysql]# bin/mysqld_safe --user=mysql & [root@localhost mysql]# bin/mysqld_safe --user=mysql & [1] 14525 [root@localhost mysql]# 140721 03:55:41 mysqld_safe Logging to '/var/log/mysqld.log'. 140721 03:55:41 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Gördüyünüz kimi artıq, debug MySQL start olundu və öz testlərinizə başlaya bilərsiniz.
Connect olduqda:
[root@localhost bin]# ./mysql -u root --socket=/usr/local/mysql/data/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.19-debug-log Source distribution
Server versiyasında fərqi dərhal görürük: 5.6.19-debug-log.
Deməli, biz artıq sizlərlə, DEBUG MySQL-i install etdik. İndi isə MySQL CORE DUMP-ın alınmasına baxacıq.
Bu məqsədlə biz, my.cnf (MySQL config faylı) faylında [mysqld] kataloqu altında yazırıq:
[mysqld]
core-file
Həmçinin faylın sonuna qeyd edirik:
[mysqld_safe]
core_file_size=unlimited
Bu şəkildə start olunmuş MySQL-də hər hansı crash baş verərsə aşağıdakına bənzər bir output görə bilərsiniz:
bin/mysqld_safe: line 166: 27247 Segmentation fault (core dumped)
(core dumped) – yəni core file artıq yaradıldı.
Default olaraq core file-ı MySQL datadir-də yaradılır.
Sizlərlə MySQL-in source-dan debug option-la installına baxdıq. Həmçinin Core Dump-ın yaradılmasını da göstərdik.
Təşəkkürlər.
Error: database disk image is malformed in CentOS 6.5
[root@tester1 ~]# yum groupinstall "Desktop Platform" . . Error: database disk image is malformed You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
Belə bir error-u gördükdən sonra, aşağıdakı addımı etməklə həll etdim:
[root@tester1 ~]# yum clean dbcache Loaded plugins: fastestmirror, refresh-packagekit, security Cleaning repos: base extras updates 4 sqlite files removed
Təşəkkürlər.
Linux Install Tutorials
Hörmətli dostlar, artıq bir neçə müddətdir ki Linux (CentOS 5 və 6) haqqında video dərslər hazırlayıram.
Hər bir dərs addım-addım olub, sizlərə faydalı məlumatlar çatdırır.
İnstall üsullarının hamsını sınayıb dərslərə yığmışam.
Buyurun faydalanın:
1. Installing Centos 5.10 in Text Mode
2. Installing Centos 5.10 in GUİ Mode
3. CentOS 6.5 Network Installation with VNC
4. Centos 6.5 Kickstart Installation