PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/lib/Acronis/BackupAndRecovery/
Upload File :
Current File : //lib/Acronis/BackupAndRecovery/systeminfo
#!/bin/bash
# This is Acronis Linux Report Utility. It's absolutely harmless for your
# system and security. Please run this utility under privileged user and
# send us resulted sysinfo archive from /var/lib/Acronis/sysinfo directory.

# Copyright (C) Acronis, 2010
# Initially written by Fadeeva Marina
# (marian.fadeeva@acronis.com)

opt_dir=/opt
opt_acronis=$opt_dir/acronis
opt_site_agent=$opt_dir/site-agent
etc_acronis=/etc/Acronis
usr_local_dir=/usr/local
rpm_dist=/bin/rpm
dpkg_dist=/usr/bin/dpkg
libdir=/usr/lib/Acronis
var_dir=/var/lib/Acronis
var_log_dir=/var/log/Acronis
aties=$libdir/Agent/agent
abr=$libdir/BackupAndRecoveryAgent
atiesecho=$libdir/Agent/acronisagent
abrams=$libdir/AMS/ManagementServer
online_backup_dir=$var_dir/BackupAndRecovery/OnlineBackup
psa_mod_acronis_dir=psa/var/modules/acronis-backup/srv/
cpanel_3rdparty_dir=cpanel/base/3rdparty/acronisbackup
direct_admin_dir=directadmin/plugins/acronisbackup
direct_admin_logs_dir=/var/log/directadmin
opt_var_log_dir=$opt_acronis/var/log
opt_var_aakore=$opt_acronis/var/aakore
opt_sa_var_log_dir=$opt_site_agent/var/log
opt_sa_var_aakore=$opt_site_agent/var/core
opt_managment_agent_var=$opt_acronis/management_agent/var
opt_license_manager_db=$opt_managment_agent_var/license-manager
opt_license_manager_log=$opt_managment_agent_var/log/license-manager
opt_var_vcd_ma_dir=$opt_acronis/var/vmware-cloud-director-management-agent
opt_managment_agent_etc=$opt_acronis/management_agent/etc
runvm_agent_log_dir=/var/log/runvm-agent

# collect full contents from
specific_dirs="
	$var_dir/AMS/AccessVault
	$var_dir/BackupAndRecovery/MMS/AccessVault
	$var_dir/BackupAndRecovery/MMS/Activity
	$var_dir/CurlCaCertificates
	$var_dir/NGMP/userdata
	$var_dir/Scheduler/tasks
	$var_dir/vix_disk_lib
	$var_dir/VirtualApplianceCoreDumps
	/var/lib/alsdb
	/var/log/AcronisRemoteInstall/logs
	$opt_acronis/Acroinst2/logs
	$opt_managment_agent_var
	$opt_managment_agent_etc"

specific_dirs_media="/ConfigurationFiles"

# collect all the Acronis databases (-shm and -wal files will be collected as well)
db3_ext_templates="sqlite sqlite3 db db3"
db3_dirs="$var_dir $libdir"

# collect logs from
logs_files_exts="log log.gz output trace stat zst"
logs_dirs="$var_log_dir $var_dir $opt_var_log_dir $opt_sa_var_log_dir $runvm_agent_log_dir"

# collect conf files from
conf_files_exts="config cfg conf meta ini sh csv xml sql yaml yml json"
conf_dirs="$etc_acronis $var_dir $opt_acronis $opt_site_agent $libdir"

procfiles="version cmdline interrupts modules bus/pci/devices bus/usb/devices partitions scsi/scsi
		mounts cpuinfo meminfo mdstat devices bus/input/devices swaps fb slabinfo diskstats"
procdirs="/proc/bus/pci /proc/bus/usb /proc/bus/input /sys/bus/acpi"
slabfiles="objects object_size objs_per_slab order slabs slab_size"
df_options="-hT"

ver=""
ver2=""

export LANG=C

# Parse options

script_name="$0"
silent_mode="0"
is_dir_mode="0"
day_filter="0"
ensure_root="1"
is_progress_mode="0"
optimized_mode="0"
max_file_size="0"

default_tgtdir="/var/lib/Acronis/sysinfo"
syslog_tgtdir="syslog"

default_filename=sysinfo-$(date +%Y.%m.%d-%H.%M.%S).tar.bz2
filename=$default_filename

services_files_usr="/usr/sbin/dkms
/usr/sbin/acropsh
/usr/sbin/acronis_ams
/usr/sbin/acronis_asm
/usr/sbin/acronis_zmqgw
/usr/sbin/acrocmd
/usr/sbin/aakore
/usr/sbin/acronis_rsm
/usr/sbin/acronis_encrypt
/usr/sbin/acronis_mms
/usr/sbin/acronis_schedule
/usr/sbin/schedmgr
/usr/sbin/tibxread
/usr/sbin/mediabuilder
/usr/sbin/trueimagemnt
/usr/sbin/acronis_apply_device_filter
/usr/sbin/acronis_setup_device_filter
/usr/sbin/acronis_monitoring_collector
/usr/sbin/acronis_monitoring_service
/usr/sbin/acronis_patch_management
/usr/sbin/acronis_notification_service
/usr/lib/Acronis/system_libs/config
/usr/lib/Acronis/system_libs/8.2.1/config"

services_files_etc="/etc/systemd/system/acronis_device_filter.service
/etc/systemd/system/acronis_monitoring_service.service
/etc/systemd/system/acronis_ams.service
/etc/systemd/system/acronis_asm.service
/etc/systemd/system/acronis_zmqgw.service
/etc/systemd/system/aakore.service
/etc/systemd/system/acronis_mms.service
/etc/systemd/system/acronis_rsm.service
/etc/systemd/system/acronis_schedule.service"

services_files_dir=services_files

umask 0077

while [ "$#" -gt 0 ]; do
	case "$1" in
		-h|--help)
			echo "Acronis Report Utility"
			echo ""
			echo "EXAMPLES"
			echo "    Save sysinfo into $default_tgtdir/$default_filename:"
			echo "    $script_name"
			echo ""
			echo "    Save sysinfo into specified directory:"
			echo "    $script_name --target_dir path/to/report/dir"
			echo ""
			echo "    Save compressed sysinfo into specified file:"
			echo "    $script_name --target_file path/to/report/archive.tar.bz2"
			echo "        (path can be absolute or relative to $default_tgtdir)"
			echo ""
			echo "    Optimization mode (some files were skipped):"
			echo "    $script_name --optimized"
			echo ""
			echo "    Set max file size in the report (in Mb):"
			echo "    $script_name --max_size <Size_Mb>"
			echo ""
			echo "    Collect data for the last several days prior to current date:"
			echo "    $script_name --days <Days>"
			echo "    $script_name -d <Days>"
			echo ""
			echo "    Print this help and exit:"
			echo "    $script_name --help"
			echo ""
			exit 0
			;;
		--silent)
			silent_mode="1"
			shift
			;;
		--optimized)
			optimized_mode="1"
			if [[ $day_filter -eq 0 ]]; then
				day_filter=1
			fi
			if [[ $max_file_size -eq 0 ]]; then
				max_file_size=100
			fi
			specific_dirs="
				$var_dir/CurlCaCertificates
				$var_dir/NGMP/userdata
				$var_dir/Scheduler/tasks
				$var_dir/vix_disk_lib
				$var_dir/VirtualApplianceCoreDumps
				$opt_managment_agent_var
				$opt_managment_agent_etc"
			shift
			;;
		--max_size)
			if [ "$#" -lt 2 ]; then
				>&2 echo "ERROR: value of $1 option is not specified"
				>&2 echo ""
				exit 1
			fi
			max_file_size=$2
			shift 2
			;;	
		--skip_root_check)
			ensure_root="0"
			shift
			;;
		--progress)
			is_progress_mode="1"
			shift
			;;
		--target_file)
			is_dir_mode="0"
			if [ "$#" -lt 2 ]; then
				>&2 echo "ERROR: value of $1 option is not specified"
				>&2 echo ""
				exit 1
			fi
			filename=$2
			shift 2
			;;
		--target_dir)
			is_dir_mode="1"
			if [ "$#" -lt 2 ]; then
				>&2 echo "ERROR: value of $1 option is not specified"
				>&2 echo ""
				exit 1
			fi
			filename=$2
			shift 2
			;;
		-d|--days)
			if [ "$#" -lt 2 ]; then
				>&2 echo "ERROR: value of $1 option is not specified"
				>&2 echo ""
				exit 1
			fi
			day_filter=$2
			shift 2
			;;
		*)
			>&2 echo "Unexpected argument $1"
			>&2 echo "Run $0 --help to get usage examples"
			exit 1
			;;
	esac
done


case $filename in
	/*) result_abs_path="$filename" ;;
	*)  result_abs_path="$default_tgtdir/$filename" ;;
esac

function report_progress
{
	if [ "$is_progress_mode" -eq "1" ]; then
		echo "Progress:" $1
	fi
}

function message
{
	if [ "$silent_mode" -eq "0" ]; then
		echo $*
	fi
}

# location of intermediary data
if [ "$is_dir_mode" -eq "1" ]; then
	work_dir="$result_abs_path"
else
	work_dir=$default_tgtdir/logs
	if [ -d "$work_dir" ]; then
		rm -rf $work_dir
	fi
fi

mkdir -p $work_dir
cd $work_dir
mkdir -p $syslog_tgtdir

# make sure script is run by root
if [ -x /bin/asamba ]; then
	# this is media version. No need to check if run by root
	df_options="-h"
	specific_dirs="$specific_dirs $specific_dirs_media"
else
	if [ "$ensure_root" -eq "1" ]; then
		is_root="0"
		test -x /usr/bin/id && is_root="$(/usr/bin/id -u)"

		if [ "$is_root" -ne "0" ] ; then
			>&2 echo You must be root to run this script!
			exit 1
		fi
	fi
fi

# switch into working directory and start collecting sysinfo
message Please wait for a while ...

#initial progress
report_progress 0

# Check ACRONIS_PROC_PARTITIONS_LOCATION environment variable and copy file if it exists
acronis_proc_partitions="acronis_proc_partitions.txt"
if [ -n "$ACRONIS_PROC_PARTITIONS_LOCATION" ]; then
	if [ -f "$ACRONIS_PROC_PARTITIONS_LOCATION" ]; then
		cp "$ACRONIS_PROC_PARTITIONS_LOCATION" ./$acronis_proc_partitions 2>&1
	else
		echo "Warning: ACRONIS_PROC_PARTITIONS_LOCATION doesn't point out on the file" > ./$acronis_proc_partitions 2>&1
	fi
fi

# Collect info about self execution
exec 2> sysinfo_script.log
set -x
unset LD_PRELOAD
unset LD_LIBRARY_PATH
set 1>&2

max_file_size_bytes=$(($max_file_size*1024*1024)) # bytes count
last_lines_count=$(($max_file_size_bytes/300)) # 300 bytes (chars) ~ 1 line
optimization_log="optimization.log"

if [ $optimized_mode -eq "1" ]; then
	msg="Optimization mode is enabled."
	message "$msg"
	echo "$msg" >> ./$optimization_log
fi
if [ $day_filter -gt 0 ]; then
	msg="Collect data for the last $day_filter day(s) prior to current date."
	message "$msg"
	echo "$msg" >> ./$optimization_log
fi
if [ $max_file_size -gt 0 ]; then
	msg="Max size of 1 log file is $max_file_size Mb."
	message "$msg"
	echo "$msg" >> ./$optimization_log
fi

# truncate big log's file $1 - filename $2- output dir (optional)
function truncate_file
{
	if [ -r $1 ]; then
		([ $# -lt 1 ] || [ $# -gt 2 ]) && echo "WARNING. Wrong command: '$FUNCNAME $*'. Arguments: '<LOG_FILE> [OUT_DIR]'" >> ./$optimization_log && return 1
		local out_dir="."
		if [ $# -eq 2 ]; then
			[ ! -d $2 ] && mkdir -p $2 2>&1
			out_dir=$2
		fi
		if [ "$optimized_mode" -eq "1" ]; then
			size=`wc -c < $1` 2>&1
			if [ $size -gt $max_file_size_bytes ]; then
				local f_name="./$out_dir/$(basename $1)_crop"
				tail -$last_lines_count $1 > $f_name 2>&1
				echo "ATTENTION: '$f_name' was truncated. It contains $last_lines_count last lines" >> ./$optimization_log
			else
				cp -r $1 $out_dir 2>&1
			fi
		else
			cp -r $1 $out_dir 2>&1
		fi
	fi
}

# check files before copy $1 - source file, $2 - target file (optional)
function copy_file
{
	if [ -r "$1" ]; then
		local target_name=$(basename "$1")
		if [ $# -eq 2 ]; then
			if [ -d "$2" ]; then
				target_name="$2/$target_name"
			else
				target_name="$2"
			fi
		fi
		cp "$1" "./$target_name" 2>&1
	fi
}

# check files before copy $1 - source file, $2 - target dir (optional)
function copy_file_with_parents
{
	local out_dir="."
	[ $# -eq 2 ] && out_dir="$2" && [ ! -d "$2" ] && mkdir -p "$2" 2>&1
	[ -r "$1" ] && cp --parents "$1" "./$out_dir/" 2>&1
}

# implementation day filter for file: $1 - file, $2 - output file
function day_filter_file
{
	if [ -r "$1" ]; then
		[ $# -ne 2 ] && echo "WARNING. Wrong command: '$FUNCNAME $*'. Arguments: '<IN_FILE> <OUT_FILE>'" >> ./$optimization_log && return 1
		if [ $day_filter -gt 0 ] && [ $# -eq 2 ]; then
			find $1 -type f -mtime -$day_filter -exec cp "{}" "./$2" \; 2>&1
		else
			cp -r "$1" "./$2" 2>&1
		fi
	fi
}

# implement day filter for files starting with pattern: $1 - source dir, $2 - pattern, $3 - output dir
function day_filter_files_by_pattern
{
	if [ -d "$1" ]; then
		[ $# -ne 3 ] && echo "WARNING. Wrong command: '$FUNCNAME $*'. Arguments: '<SEARCH_DIR> <PATTERN> <OUT_DIR>'" >> ./$optimization_log && return 1
		[ ! -d "$3" ] && mkdir -p "$3"
		if [ $day_filter -gt 0 ] && [ $# -eq 3 ]; then
			find "$1" -maxdepth 1 -name "$2" -type f -mtime -$day_filter -exec cp "{}" "./$3/" \; 2>&1
		else
			find "$1" -maxdepth 1 -name "$2" -type f -exec cp "{}" "./$3/" \; 2>&1
		fi
	fi
}

if [ -x /bin/uname ]; then
	ver=/lib/modules/`/bin/uname -r`/kernel/drivers/block/snapapi*
	ver2=/lib/modules/`/bin/uname -r`/kernel/drivers/extra/snapapi*
fi

# Start from checking kernel version and setting
# proprer snapapi module name
report_progress 1
snapapi_ver=snapapi26 # it's 2.6 or upper kernel

find --help |grep -q "\[-L\]"
if [ "$?" -eq "0" ]; then
	symlnk_opt="-L"
fi

# collect the services files of product
mkdir -p $services_files_dir
for f in $services_files_usr
do
	copy_file_with_parents $f $services_files_dir
done

for f in $services_files_etc
do
	copy_file_with_parents $f $services_files_dir
	copy_file_with_parents "$f.rpmnew" $services_files_dir
	copy_file_with_parents "$f.rpmsave" $services_files_dir
done

# ABR-398391. Get systemd services report
if [ -x /usr/bin/systemctl ]; then
	echo "$ systemctl list-units --type=service --all --no-pager" >> summary.txt
	systemctl list-units --type=service --all --no-pager >> summary.txt 2>&1
fi

# get the logs of attempt to compile dkms modules.
for i in $(find /var/lib/dkms -type f \( -name make.log -o -name kernel_config.h \)); do
	curr_dir=$(dirname "$i" | sed -e 's|/var/lib/dkms/||g')
	mkdir -p "dkms_logs/$curr_dir"
	cp "$i" "dkms_logs/$curr_dir"
done

copy_file /etc/config etc_config
copy_file /etc/hosts hosts.txt
copy_file /etc/ProductVersion.conf
copy_file /usr/lib/Acronis/BackupAndRecovery_version.txt
copy_file /var/lib/Acronis/BackupAndRecovery_version.txt
copy_file /etc/lvm/devices/system.devices

# Common for all versions
if [ -x /usr/sbin/acrocmd ]; then
#Live Linux
	/usr/sbin/acrocmd list disks > acrocmd.txt 2>&1
elif [ -x /bin/acrocmd ]; then
	/bin/acrocmd list disks > acrocmd.txt 2>&1
elif [ -x /usr/sbin/trueimagecmd ]; then
#Live Linux
	/usr/sbin/trueimagecmd --list > trueimagecmd.txt 2>&1
elif [ -x /bin/trueimagecmd ]; then
	/bin/trueimagecmd --list > trueimagecmd.txt 2>&1
fi

report_progress 10
# Gather information about dsk_supp state
# should be done before $logs_dirs are gathered because it writes additional debug logs
if [ -x /usr/lib/Acronis/BackupAndRecovery/dsk_supp_test ]; then
	DSK_DSK__LOG=1 /usr/lib/Acronis/BackupAndRecovery/dsk_supp_test > dsk_supp_test.txt 2>&1
elif [ -x /bin/dsk_supp_test ]; then
	DSK_DSK__LOG=1 /bin/dsk_supp_test > dsk_supp_test.txt 2>&1
fi

# save /tmp/asamba.log if exist
# save /var/log/asamba/asamba.log if exist
# save all other logs from /var/log/asamba/asamba.log
copy_file /tmp/asamba.log
copy_file /var/log/asamba/asamba.log
day_filter_files_by_pattern /var/log/asamba/ "*" .


# Schedmgr report on Live Linux
if [ -x /usr/sbin/schedmgr ]; then
	/usr/sbin/schedmgr get report > schedmgr_report.txt 2>&1
# Schedmgr report on VA
elif [ -x /bin/schedmgr ]; then
	/bin/schedmgr get report > schedmgr_report.txt 2>&1
fi

# Now check X-Server logs:
# Do we have xorg?
if [ -r /etc/X11/xorg.conf ]; then
	cp /var/log/Xorg* ./$syslog_tgtdir/ 2>&1
# or is it XFree86?
elif [ -r /etc/X11/XF86Config ]; then
	cp /var/log/XFree86* ./$syslog_tgtdir/ 2>&1
fi

# Common for all agents
if [ -x "$aties" ] || [ -x "$atiesecho" ]; then
	/sbin/iptables -L > iptables.txt 2>&1
	/sbin/lsmod | grep snapapi* > /dev/null
	if [ "$?" -eq 0 ]; then
		/sbin/rmmod $snapapi_ver > rmmod.txt 2>&1
	fi
	if [ -e "$ver" ] || [ -e "$ver2" ]; then
		/sbin/modprobe $snapapi_ver
	fi
fi # agents common

# For ATIES Linux agent 9.1
if [ -x "$aties" ]; then
	/etc/init.d/acronis_trueimage_agent status > agent.txt 2>&1
fi

# For ATIES ECHO Linux agent
if [ -x "$atiesecho" ]; then
	/etc/init.d/acronis_agent status > agent.txt 2>&1
fi

# For ABR Agent
if [ -x "$abr" ]; then
	/etc/init.d/acronis_agent status > agent.txt 2>&1
	/etc/init.d/acronis_mms status > mms.txt 2>&1
	copy_file $etc_acronis/BackupAndRecovery.config
fi

# For ABR AMS
if [ -x "$abrams" ]; then
	/etc/init.d/acronis_ams status > ams.txt 2>&1
	copy_file $etc_acronis/AMS.config
#dump PostgreSQL database
# disabled as most installations use sqlite database and it is collected.
#
#	pg_dump acronis_cms -Fc | gzip > acronis_cms.gz
fi

report_progress 20
copy_file "/tmp/AcronisAMS.log"
copy_file "/tmp/AcronisMMS.log"

# Then gather system information
# Some systems have kernel config in /proc/. Let's save it
if [ -r /proc/config.gz ]; then
	gunzip /proc/config.gz . 2>&1
	mv config proc_config 2>&1
fi

/sbin/fdisk -l > fdisk.txt 2>&1
copy_file /etc/issue issue.txt
copy_file /etc/os-release os-release.txt
copy_file /etc/resolv.conf resolv.txt

if [ -x /usr/sbin/gdisk ]  || [ -x /bin/gdisk ]; then
	for i in `cat /proc/partitions | awk '{print $4}' | grep -v [0-9]`; do
		if [ -e "/dev/$i" ]; then
# Use echo to avoid gdisk questions. Details in ABR-152465
			echo 1 | gdisk -l /dev/$i >> gdisk.txt 2>&1
		fi
	done
fi

if [ -x /bin/uname ]; then
	/bin/uname -a > uname.txt 2>&1
fi

#just in case we're on GPT system
if [ -x /sbin/parted ]; then
	parted -sl > parted.txt 2>&1
fi

if [ -x /bin/lsblk ]; then
	/bin/lsblk > lsblk.txt 2>&1
fi

if [ -x /sbin/lsof ]; then
	echo "$ /sbin/lsof" > lsof.txt
	/sbin/lsof >> lsof.txt 2>&1
fi

if [ -x /usr/bin/stratis ]; then
	echo "$ /usr/bin/stratis pool" > stratis.txt
	/usr/bin/stratis pool >> stratis.txt 2>&1
	echo "$ /usr/bin/stratis blockdev" >> stratis.txt
	/usr/bin/stratis blockdev >> stratis.txt 2>&1
	echo "$ /usr/bin/stratis filesystem" >> stratis.txt
	/usr/bin/stratis filesystem >> stratis.txt 2>&1
fi

if [ -x /sbin/iscsiadm ]; then
	echo "$ /sbin/iscsiadm -m discoverydb" > iscsi.txt
	/sbin/iscsiadm -m discoverydb >> iscsi.txt 2>&1
	echo "$ /sbin/iscsiadm -m node" >> iscsi.txt
	/sbin/iscsiadm -m node >> iscsi.txt 2>&1
	echo "$ /sbin/iscsiadm -m session" >> iscsi.txt
	/sbin/iscsiadm -m session >> iscsi.txt 2>&1
fi

#Creating summary.txt file with general system information
echo `date` >> summary.txt 2>&1
for i in $procfiles
do
	if [ -r /proc/$i ]; then
		echo "$ cat /proc/$i" >> summary.txt
		cat /proc/"$i" >> summary.txt 2>&1
	fi
done
for i in $procdirs
do
# special procedure to copy files from /proc
	if [ -d $i ]; then
		proc_out=`basename $i`
		mkdir $proc_out
		rm -rf $proc_out
		find $i -type f | while read F ; do
	   		D=$proc_out/$(dirname $F)
			test -d $D || mkdir -p $D
			test -f $proc_out/$F || cat $F > $proc_out/$F
		done
		tar -jcf $proc_out.tar.bz2 $proc_out
		rm -rf $proc_out
	fi
done

echo "$ blockdev --report" >> summary.txt
blockdev --report >> summary.txt 2>&1

echo "$ locale -a" >> summary.txt
if command -v locale > /dev/null 2>&1; then
  locale -a >> summary.txt 2>&1
else    
  echo "The 'locale' command is not available on this system."
fi

for sdir in `find /sys/kernel/slab -name snapapi_blk_*` ;
do
	echo $sdir >> snapapi_slabs.txt 2>&1
	for sfile in $slabfiles
	do
		if [ -r "$sdir/$sfile" ]; then
			echo "$ cat $sdir/$sfile" >> snapapi_slabs.txt
			cat "$sdir/$sfile" >> snapapi_slabs.txt 2>&1
		fi
	done
	echo >> snapapi_slabs.txt 2>&1
done

# DO NOT CUT: dmesg has small buffer-size by default
if [ -x /bin/dmesg ]; then
	/bin/dmesg > ./$syslog_tgtdir/dmesg.txt 2>&1
	if [ ! -x /bin/acronis ]; then
		/bin/dmesg -T > ./$syslog_tgtdir/dmesg-datetime.txt 2>&1
	fi
fi
# copy dmesg saved right after system startup
copy_file /var/log/dmesg ./$syslog_tgtdir/dmesg

report_progress 30
# configuration of software RAID
dmraid_cmd=`which dmraid 2>/dev/null`
if [ -n "$dmraid_cmd" ]; then
	$dmraid_cmd -rD > /dev/null 2>&1
	$dmraid_cmd -n > dmraid_n.txt 2>&1
	$dmraid_cmd -r > dmraid.txt 2>&1
fi

if [ -x /usr/sbin/dkms ]; then
	/usr/sbin/dkms status > dkms.txt 2>&1
fi
copy_file /var/log/trueimage-setup.log
copy_file /etc/fstab

day_filter_files_by_pattern /var/log/ "messages*" $syslog_tgtdir
day_filter_files_by_pattern /var/log/ "syslog*" $syslog_tgtdir

# for systemd-based systems collect journal logs for the last month
if which journalctl >/dev/null 2>&1; then
	if [[ $day_filter -gt 0 ]]; then
		journalctl --no-pager -a --since "$day_filter days ago" > ./$syslog_tgtdir/journalctl.txt 2>&1
	else
		journalctl --no-pager -a --since=-1month > ./$syslog_tgtdir/journalctl.txt 2>&1
	fi

	# gather Agent Bootstraper logs in JSON format
	journalctl -u cloud-connection-site-agent-bootstrapper -a -o json > ./$syslog_tgtdir/cloud-connection-site-agent-bootstrapper.txt 2>&1
fi

# Ubuntu saves kernel log to kern.log unstead of messages
truncate_file /var/log/kern.log ./$syslog_tgtdir/

if [ -x /bin/getmeta ]; then
# let's call it first
	/bin/getmeta
	cp /tmp/*.hex .
	cp /tmp/*.dd .
fi

bin_path_prefix="/usr"
# save logs from /tmp when on media
if [ -x /bin/acronis ]; then
	cp /tmp/*.log .
	cp /tmp/*.log.?.gz .
	bin_path_prefix=""
else
	cp /tmp/*_asan.log . 2>/dev/null
fi

report_progress 40

# collect routing information
routing_filename="routing.txt"
echo "routing information:" > $routing_filename
if [ -x $bin_path_prefix/bin/netstat ]; then
	echo -e "\n\n>\$netstat -rn" >> $routing_filename
	$bin_path_prefix/bin/netstat -rn >> $routing_filename
fi
if [ -x $bin_path_prefix/sbin/route ]; then
	echo -e "\n\n>\$route -n" >> $routing_filename
	$bin_path_prefix/sbin/route -n >> $routing_filename
fi
if [ -x $bin_path_prefix/sbin/ip ]; then
	echo -e "\n\n>\$ip route" >> $routing_filename
	$bin_path_prefix/sbin/ip route >> $routing_filename
fi
if [ -x /sbin/lspci ]; then
	/sbin/lspci -m -vvv > lspci.txt 2>&1
elif [ -x /bin/lspci ]; then
	/bin/lspci -m -vvv > lspci.txt 2>&1
fi
if [ -d /boot ]; then
	cp /boot/config* . 2>&1
	ls -lR /boot > boot.txt 2>&1
fi
if [ -x /sbin/ifconfig ]; then
	/sbin/ifconfig -a > ifconfig.txt 2>&1
elif [ -x /bin/ifconfig ]; then
	/bin/ifconfig -a > ifconfig.txt 2>&1
fi
if [ -x /usr/bin/gcc ]; then
	/usr/bin/gcc -v > gcc.txt 2>&1
fi

if [ -x /bin/chronyc ]; then
	chronyc sources > chronyc_sources.txt 2>&1
	chronyc tracking > chronyc_tracking.txt 2>&1
fi

if [ -r /etc/chrony.conf ]; then
	cp /etc/chrony.conf . 2>&1
fi

if [ -x /bin/ntpstat ]; then
	ntpstat > ntpstat.txt 2>&1
fi

if [ -r /etc/TZ ]; then
	(cat /etc/TZ && date -u && date) > timezone.txt 2>&1
else
	( date -u && date) > timezone.txt 2>&1
fi

environments_dir="environments"
mkdir $environments_dir
env >  $environments_dir/env.txt

ps auxfww > ps.txt 2>&1
if [ "X$?" = "X1" ]; then
#ps in Bootable Media supports only "wlT" modes
	ps wl > ps.txt 2>&1
	cat ps.txt|grep -e aakore -e product.bin -e udhcpc -e acronis -e asamba > $environments_dir/progs.txt
	for i in `cat $environments_dir/progs.txt|awk '{print $1}'`; do
		cat /proc/$i/environ |tr '\0' '\n' > $environments_dir/env_$i.txt
	done
else
	cat ps.txt|grep -i acronis > $environments_dir/progs.txt
	for i in `cat ps.txt|grep -i acronis|awk '{print $2}'`; do
		cat /proc/$i/environ |tr '\0' '\n' > $environments_dir/env_$i.txt
	done
fi
if [ -x /usr/bin/crontab ]; then
	/usr/bin/crontab -l > crontab.txt 2>&1
fi

if [ -x /usr/sbin/dmidecode ]; then
	/usr/sbin/dmidecode > dmidecode.txt 2>&1
elif [ -x /bin/dmidecode ]; then
	/bin/dmidecode > dmidecode.txt 2>&1
fi

if [ -d /sys/class/scsi_host ]; then
	find /sys/class/scsi_host -iname 'host*' -print -exec cat {}/proc_name \; > scsi_hosts.txt 2>&1
fi

# df called in background to avoid hang on broken nfs shares
df > df_space.txt 2>&1 &
df $df_options > df_space_human.txt 2>&1 &
df -i > df_inodes.txt 2>&1 &
df -i $df_options > df_inodes_human.txt 2>&1 &

report_progress 50

# Gather full contents of specified directoris
for abs_src_dir in $specific_dirs
do
	if [ -d "$abs_src_dir" ]; then
		tgt_dir=".$abs_src_dir"
		mkdir -p "$tgt_dir"
		for k in `ls -1 "$abs_src_dir"`; do cp -r "$abs_src_dir/$k" "$tgt_dir" ;done
	fi
done

#Gather vCD-MA databse.
vcd_ma_db_name="$opt_var_vcd_ma_dir/db.db"
if [ -r $vcd_ma_db_name ]; then
	tgt_dir=".$opt_var_vcd_ma_dir"
	mkdir -p "$tgt_dir"
	cp $vcd_ma_db_name "$tgt_dir" 2>&1
fi

#Gather MMS and AMS databases
db3_files_exts=""
for ext in $db3_ext_templates
do
	db3_files_exts="$db3_files_exts $ext $ext-shm $ext-wal"
done
for ext in $db3_files_exts
do
	for abs_src_dir in `find $symlnk_opt $db3_dirs -name "*.$ext" -exec dirname {} \; | uniq`
	do
		case $abs_src_dir/ in
			${work_dir}*)
				# do not copy files already located in work_dir
				;;
			*/sysinfo-*)
			# do not copy files from another sysinfo reports
				;;
			${var_dir}/mount*)
				# do not copy files in "mount" dir which has mounted backups
				;;
			${var_dir}/NGMP*)
				# do not copy files in "NGMP" dir
				;;
			*)
				mkdir -p ."$abs_src_dir"
				for j in `ls -1 "$abs_src_dir" | grep "\.$ext$"`
				do
					cp -r "$abs_src_dir/$j" ."$abs_src_dir/$j"
				done
				;;
		esac
	done
done

report_progress 60

#Gather Acronis logs
for ext in $logs_files_exts
do
	for abs_src_dir in `find $symlnk_opt $logs_dirs -name "*.$ext" -exec dirname {} \; | uniq`
	do
		case $abs_src_dir/ in
			${work_dir}*)
				# do not copy files already located in work_dir
				;;
			*/sysinfo-*)
			# do not copy files from another sysinfo reports
				;;
			${var_dir}/mount*)
				# do not copy files in "mount" dir which has mounted backups
				;;
			${var_dir}/NGMP*)
				# do not copy files in "NGMP" dir
				;;
			*)
				mkdir -p ."$abs_src_dir"
				for j in `ls -1 "$abs_src_dir" | grep "\.$ext$"`
				do
					day_filter_file "$abs_src_dir/$j" ./"$abs_src_dir/$j"
				done
				;;
		esac
	done
done

#Gather screenshot validation files
day_filter_files_by_pattern /tmp/screenshot_validation "*.png" ./screenshot_validation_files

report_progress 70

#Gather Acronis conf files
for ext in $conf_files_exts
do
	for abs_src_dir in `find $symlnk_opt $conf_dirs -name "*.$ext" -exec dirname {} \; | uniq`
	do
		case $abs_src_dir/ in
			${work_dir}*)
				# do not copy files already located in work_dir
				;;
			*/sysinfo-*)
			# do not copy files from another sysinfo reports
				;;
			${var_dir}/mount*)
				# do not copy files in "mount" dir which has mounted backups
				;;
			${var_dir}/NGMP*)
				# do not copy files in "NGMP" dir
				;;
			*)
				mkdir -p ."$abs_src_dir"
				for j in `ls -1 "$abs_src_dir" | grep "\.$ext$"`
				do
					cp -r "$abs_src_dir/$j" ."$abs_src_dir/$j"
				done
				;;
		esac
	done
done

report_progress 80

# Collect mms_bundle.config from VA
copy_file /bin/mms_bundle.config

#Gather Virtual Appliance databse. It's not in Acronis dir, but has fixed name
mms_db_name="/var/lib/F4CEEE47-042C-4828-95A0-DE44EC267A28"
if [ -r $mms_db_name.db3 ]; then
	cp $mms_db_name.* ./var/lib/ 2>&1
fi

if [ -d $online_backup_dir ]; then
	ls -lR $online_backup_dir > online_backup.txt

	OPENSSL=/usr/bin/openssl
	if [ -x $OPENSSL ]; then
		for crt in `find $online_backup_dir -name '*.crt'`; do
			echo "[$crt]" >> online_backup.txt
			$OPENSSL x509 -in $crt -text -noout >> online_backup.txt 2>&1
		done
	fi
fi

list_logs="config.ini acronis-backup-srv.db"
if [ -d $usr_local_dir/$psa_mod_acronis_dir ]; then
	mkdir -p ./$psa_mod_acronis_dir
	for var in $list_logs
	do
		cp -r $usr_local_dir/$psa_mod_acronis_dir/$var ./$psa_mod_acronis_dir 2>&1
	done
	day_filter_file $usr_local_dir/$psa_mod_acronis_dir/log /$psa_mod_acronis_dir
elif [ -d $opt_dir/$psa_mod_acronis_dir ]; then
	mkdir -p ./$psa_mod_acronis_dir
	for var in $list_logs
	do
		cp -r $opt_dir/$psa_mod_acronis_dir/$var ./$psa_mod_acronis_dir 2>&1
	done
	day_filter_file $opt_dir/$psa_mod_acronis_dir/log /$psa_mod_acronis_dir
fi

if [ -d $usr_local_dir/$cpanel_3rdparty_dir ]; then
	mkdir -p ./$cpanel_3rdparty_dir
	for var in config log update
	do
		cp -r $usr_local_dir/$cpanel_3rdparty_dir/$var ./$cpanel_3rdparty_dir
	done
	if [ -d $usr_local_dir/$cpanel_3rdparty_dir/srv ]; then
		mkdir -p ./$cpanel_3rdparty_dir/srv
		for var in $list_logs
		do
			cp -r $usr_local_dir/$cpanel_3rdparty_dir/srv/$var ./$cpanel_3rdparty_dir/srv 2>&1
		done
		day_filter_file $usr_local_dir/$cpanel_3rdparty_dir/srv/log ./$cpanel_3rdparty_dir/srv
	fi
fi

truncate_file $usr_local_dir/cpanel/logs/error_log ./cpanel/logs 

if [ -d $usr_local_dir/$direct_admin_dir ]; then
	mkdir -p ./$direct_admin_dir
	for var in config log update
	do
		cp -r $usr_local_dir/$direct_admin_dir/$var ./$direct_admin_dir
	done
	if [ -d $usr_local_dir/$direct_admin_dir/srv ]; then
		mkdir -p ./$direct_admin_dir/srv
		for var in $list_logs
		do
			cp -r $usr_local_dir/$direct_admin_dir/srv/$var ./$direct_admin_dir/srv 2>&1
		done
		day_filter_file $usr_local_dir/$direct_admin_dir/srv/log ./$direct_admin_dir/srv
	fi
fi

day_filter_files_by_pattern /var/log/directadmin/ "error*" ./directadmin/logs

truncate_file /var/log/plesk/panel.log ./plesk/logs

report_progress 90

# collect logs from vz containers
test -e /etc/parallels-release
if [ $? -eq 0 ]; then
	list_logs="capture-data-config.sh capture-data.log freeze_mysql.sql"
	for container in /vz/root/*
	do
		if [ -d $container/var/lib/Acronis/AgentCommData ]; then
			mkdir -p ./$container
			for var in $list_logs
			do
				truncate_file $container/var/lib/Acronis/AgentCommData/$var ./$container
			done
		fi
	done
fi

# SELINUX information
if [ -r /etc/selinux/config ]; then
	/usr/sbin/sestatus > sestatus.txt 2>&1
fi

# LVM information
if [ -c /dev/mapper/control ]; then
	dmsetup table > dmsetup_table.txt 2>&1
	type lvm >/dev/null 2>&1
	if [ "$?" -eq "0" ]; then
		lvm pvdisplay -v > pvdisplay.txt 2>&1
		lvm vgdisplay -v > vgdisplay.txt 2>&1
		lvm lvdisplay -v > lvdisplay.txt 2>&1
	fi
fi

# multipath
if [ -r /dev/mpath ]; then
	multipath -v 3 -ll > multipath.txt 2>&1
fi

# Then will gather information about installed pakages.
# Currently only for rpm and dpkg - based.
if [ -x "$rpm_dist" ]; then
	/bin/rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" \
		> rpm_packages.txt 2>&1
fi
if [ -x "$dpkg_dist" ]; then
	dpkg-query -W -f='${Package} ${Version} ${Architecture}\n' \
		> dpkg_packages.txt 2>&1
fi
# Try to find loader's config file:
# Start from grub.conf
copy_file /boot/grub/grub.conf
# Then menu.lst
copy_file /boot/grub/menu.lst
# Then GRUB2 config
copy_file /boot/grub2/grub.cfg
copy_file /boot/grub2/i386-pc/grub.cfg
# And GRUB2 environment
copy_file /boot/grub2/grubenv
copy_file /boot/grub2/i386-pc/grubenv
# and for lilo.conf
copy_file /etc/lilo.conf
# And GRUB's device map
copy_file /boot/grub/device.map
copy_file /boot/grub2/device.map
# gather some files for VZ
copy_file /etc/vz/vz.conf
copy_file /etc/parallels-release
truncate_file /var/log/parallels.log .

# Synology installation logs
synology_dir=Synology
day_filter_files_by_pattern /var/log/ "cyber_protect_*.log" "$synology_dir"
copy_file_with_parents /var/log/packages/CyberProtectAgent.log $synology_dir

# gather aakore units info
if [ -x $opt_acronis/aakore ]; then
	$opt_acronis/aakore units > aakore_units.txt 2>&1
fi

if [ -d $opt_var_aakore ]; then
	mkdir -p ./$opt_var_aakore
	cp -r $opt_var_aakore ./$opt_var_aakore 2>&1
fi

# Gather information about aakore units
if [ -x /usr/sbin/aakore ]; then
	/usr/sbin/aakore units > aakore_units.txt  2>&1
fi

# gather site agent units info
if [ -x $opt_site_agent/cloud-connection-site-agent-aakore ]; then
	$opt_site_agent/cloud-connection-site-agent-aakore units > site_agent_aakore_units.txt 2>&1
fi

# gather site agent var
if [ -d $opt_sa_var_aakore ]; then
	mkdir -p ./$opt_sa_var_aakore
	cp -r $opt_sa_var_aakore ./$opt_sa_var_aakore 2>&1
fi

# Gather information about tape devices
if [ -x /usr/lib/Acronis/ARSM/tapes_info ]; then
	/usr/lib/Acronis/ARSM/tapes_info tapes_info.txt
elif [ -x /bin/tapes_info ]; then
	/bin/tapes_info tapes_info.txt
fi

#Get dumps from specified folders (root for VA and BM)
if [ "$optimized_mode" -eq "0" ]; then
	dump_dirs="/ $var_log_dir/APL"
	for src_dir in $dump_dirs
	do
		mkdir -p ."$src_dir"
		for f in "$src_dir"/*.dmp; do
			if [ -r "$f" ]; then
				tar -czf ".$f.tar.gz" -P "$f"
			fi
		done
	done
fi

disk_report_executable="$libdir/BackupAndRecovery/reportst"
# Gather disk information
if [ -x "$disk_report_executable" ]; then
	"$disk_report_executable" "$work_dir/disk_report.txt" >/dev/null 2>&1
elif [ -x /bin/reportst ]; then
	/bin/reportst "$work_dir/disk_report.txt" >/dev/null 2>&1
fi

if [ -x /bin/test_pci_parse ]; then
	/bin/test_pci_parse > test_pci_parse.txt 2>&1
fi

license_manager_dir=./license-manager
if [ -d $opt_license_manager_db ]; then
	mkdir -p ./$license_manager_dir
	day_filter_file $opt_license_manager_log ./$license_manager_dir
	cp -r $opt_license_manager_db ./$license_manager_dir 2>&1
fi

if [ -x /bin/acronis ]; then #netstat for VA and BM
	/bin/netstat -na > netstat.txt 2>&1
else
	/bin/netstat -nap > netstat.txt 2>&1
fi

if [ -x /usr/bin/vmstat ]; then
	/usr/bin/vmstat 10 6 > vmstat.txt 2>&1
elif [ -x /bin/vmstat ]; then
	/bin/vmstat 10 6 > vmstat.txt 2>&1
fi

if [ -x /bin/mokutil ]; then
	/bin/mokutil --list-enrolled > enrolled_keys.txt 2>&1
fi

copy_file /bin/autostart

find . -type s -print0 | xargs -0 rm -f
find . -name preferred\* -print0 | xargs -0 rm -f
find . -name masterkey.local -print0 | xargs -0 rm -f
find . -name *.sec -print0 | xargs -0 rm -f
find . -name *.prv -print0 | xargs -0 rm -f
find . -name *.pem -print0 | xargs -0 rm -f
find . -name dml_email_configuration.\* -print0 | xargs -0 rm -f
find . -name oauth.yml -print0 | xargs -0 rm -f #ABR-359648 and ABR-365119
find . -name rsa.prv -print0 | xargs -0 rm -f
find . -name shared.prv -print0 | xargs -0 rm -f

mms_user_config="./var/lib/Acronis/BackupAndRecovery/MMS/user.config"
if [ -e "$mms_user_config" ]; then
	rm -f "$mms_user_config" 2>&1
fi

# CyberDesktop Agent logs (per-user)
# xxx-yyy-capture.log, xxx-yyy-capture.log.# (xxx is user id, yyy is display id)
cyberdesktop_agent_dir=cyberdesktop_agent
for i in /home/*/.acronis/cyber-desktop-service/
do
	test -d "$i" || continue
	user_name="${i#/home/}"
	user_name="${user_name%/.acronis/cyber-desktop-service/}"
	mkdir -p "$cyberdesktop_agent_dir/$user_name/"
	cp "$i"*.log* "$cyberdesktop_agent_dir/$user_name/"
done

report_progress 95

# delete big files from report
if [ "$max_file_size" -gt "0" ]; then
	echo "Files more than $max_file_size Mb were deleted:" >> ./$optimization_log
	find $dir -type f -size +$(($max_file_size))M -print0 | xargs -0 -I {} bash -c "echo {} >> ./$optimization_log; rm -rf {}"
fi

# keep hide_password staff as the last action before tar

function hide_password
{
	local file="$1"
	
	local secure_info_pattern="(Username|Password|passphrase)"
	grep -vwE $secure_info_pattern "$file" > "$file.$$"
	mv -f "$file.$$" "$file"
}

function hide_password_http_proxy_yaml
{
	local file="$1"
	
	sed -e "s| proxy:.*@| proxy:XXXXXX@|" "$file" > "$file.$$"
	mv -f "$file.$$" "$file"
}

function hide_password_ocr
{
	local file="$1"
	# remove password, format "password":"my_password" or empty "password":""
	sed -e "s|\"password\":\"[^\"]*\"|\"password\":\"XXXXXX\"|g" "$file" > "$file.$$"	
	mv -f "$file.$$" "$file"
}

function hide_password_all
{
	local names_list="config etc_config Global.config api_gateway.json"
	for name in $names_list; do
		for i in `find . -type f -name $name`; do
			hide_password "$i"
		done
	done
	for i in `find . -type f -name http-proxy.yaml`; do
		hide_password_http_proxy_yaml "$i"
	done
	for i in `find . -type f -name one_click_recovery.config`; do
		hide_password_ocr "$i"
	done
}

hide_password_all

cd ../

message "Report compression started."

if [ "$is_dir_mode" -eq "1" ]; then
	message "Sysinfo collected into '$work_dir'."
	exit 0
fi

if command -v bzip2 > /dev/null 2>&1; then
  tar -cjf "$result_abs_path" ./logs
else
  result_abs_path=${result_abs_path%.bz2}.gz
  message "Report file name has been changed."
  tar -czf "$result_abs_path" ./logs
fi

rm -rf ./logs
report_progress 100
if [ -f "$result_abs_path" ]; then
	message "Report file $result_abs_path has been created."
	exit 0
fi

exit 1