From e93eba1c0f23c85074b3f2d5b09c332ea82ee656 Mon Sep 17 00:00:00 2001 From: "qcqcqc@bash-agent-dev" <1220204124@zust.edu.cn> Date: Thu, 24 Apr 2025 20:35:14 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E9=9A=90=E8=97=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client.c b/src/client.c index d4ef014..7dd172a 100644 --- a/src/client.c +++ b/src/client.c @@ -1,4 +1,5 @@ #include "client.h" +#include "debug.h" #include #include @@ -90,7 +91,7 @@ int send_exec_params(const char *filename, char *const argv[], addr.sun_path[sizeof(addr.sun_path) - 1] = '\0'; if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) { - perror("connect"); + DEBUG_LOG("connect error: %s\n", strerror(errno)); close(sock); return -1; } From 231c531553a5baa847e7d74e4e84d0eab8118984 Mon Sep 17 00:00:00 2001 From: "qcqcqc@bash-agent-dev" <1220204124@zust.edu.cn> Date: Fri, 25 Apr 2025 16:29:11 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=BC=96=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/client.o | Bin 5528 -> 5848 bytes build/config.o | Bin 1784 -> 1816 bytes build/debug.o | Bin 936 -> 936 bytes build/execve_interceptor.o | Bin 5200 -> 5928 bytes build/hook_write.o | Bin 6768 -> 8560 bytes build/hook_write.so | Bin 16304 -> 13088 bytes build/init_cleanup.o | Bin 1424 -> 1512 bytes build/intercept.so | Bin 31320 -> 28640 bytes build/logging.o | Bin 3128 -> 3416 bytes build/pty_dup.o | Bin 4688 -> 5384 bytes build/rules.o | Bin 1560 -> 1672 bytes build/signal_handlers.o | Bin 1896 -> 2032 bytes build/terminal_utils.o | Bin 5184 -> 5480 bytes build/utils.o | Bin 2552 -> 2808 bytes go_install.sh | 275 +++++++++++++++++++++++++++++++++++++ test_bash.sh | 3 +- 16 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 go_install.sh diff --git a/build/client.o b/build/client.o index 2bf2d14721f99215c7d6699680a564711e815349..0adfe84b358a356d9a0e9e3c6701783f5770543d 100644 GIT binary patch literal 5848 zcmbuCU2GIp6vxkWRxMJX&}yqicN$Qt;L;Kji@`90T21_Dni`v^Da-EAt=;Y}JJYa; zAJv#>EGAtc#+ayRd_Z6HO*i@gick22A2IPGv&9DzeUQil8(Y_N?w-3no$e5$H*{z2 z@1Fa==bZaBJa^9n_cj>@=wiSpuvpU+;ElG$cU!&MunJmW;qYf4ESOOAw?e7h29>!r zQ1SnS;tMc+wrs+O{#Lt$=EtI~aA7aNFu?R{n*rMWU3SSg;nwmRyRr-5w-mQ+#J1`t zs9cNBa+_W8H`$d905fEddbd*D0yr~=+GW$M>-!sU+zoam3UDFKT5D+>WaV0)86S1) z<07MR&&^kd>kP+3?HSbAq1nRWuTGpaN55~eUO8J$Y&o-V7;5o$Kt;!UZYAojv5R1v zMFUx4fJWHT>-FnL_dcE_6iu*eaXf@*i)&sWR`|;S+m*%EXPIi&6 z!Zzq9m zYWl3f{Yi&%X?+Zbbi0Xju@7yQs|oguXk$bTGL<$=f7{t%wZWfYqX-b+Hm-#k)LdjRdF&XTpXi8ZXo8s$wR^>wS}jrOY;qdL%AijYqOxe`QR zt&er}{ zr*|DMo>dLwh0DZyNyK}J;}tq8-Y$;!;(i7=;N$%LTR&bkVfb?6oN9t$JY$O8=!aT| z_^h8v$fNUkKhXL_PVthj_{V2Fy{q$G?c*P-)sCoTe%FMt(K8V9(86K+1HM~k=$;vK zyu`sIKrZg3EH9h2(%H-yif_d~DtRZKrnXuQz|AHm91q*Q$=p__;3P&<+3bXRi&2}l zyEi_bc9N)Qp+eGfy?EZUCgb@DC$CH%bG?-3<(|;?k2#qnRc>+t2KMZ^!|Hit-&Dq% zvikaB+he`A^-Za2-?Q7c#d^2j!Wf{H1&pVLAX2!|=xT|=dSso<&(rg+)q`(c{q~B& zFF&uQs)c|3^nxXICI0MQJ^h|>*IUQi-+rgveBJo@7iFf}gFgm>2wbQJIn~XEUoyna zM&?NIvpzUQD=R8C<2va!%NUt3vFXp?z5k+2hUEpqM~OT3RUY>qNXN&&VkE zdQM~yJcE_Jwo`dWwk^bdM+mn=_&^9B3E_J~cq)V+2;qeg{#*!uDTKco!jFdVH$(Wl zA^b!LheUeZ$#}5@Y%IXWB<=U)gO2OQ#~k$zE^f?Gwb66&e0*do< z21ZA*n#qo)vx&Gjp3M-?Byxvp&$zdEj_?68=}fwKjwG^~jFZ4;I_o-cFhA}&)CK=R zE*RTyeEaq+al&gCq^J@aU zhdJrU_5Fb0YlZ$u2rme}PT0T9T>I0^ZAX}Ee>A7dib~L*j|Fe5nW*2>f=fSr=6YOx zZvM(#kE{9bLPwqC4IbmY8@2rlzb z2;oNrm;N6Y9RH74FP}5le)e+9N#@#5%})y*>8CGvM_nCX_{z}w{oEE|uJtuI0_#5>(APXEbh?C}?+Y&dKN-+}nfsg$=xhG9(2@GT3oh4rgg8*pKHHi12l#rSbEB~D7hL99k97s=@YYwoc5+|M&uguiduY;& z?}HfLiM3}+zvZ2DJmxtC4`Ru<7l+tB*M(R-!*$~nbqef*p25q?RKzc|3 literal 5528 zcmbtXU2Ggz6~60)B&Bg|N`asNS~Uh5O4oL&1P-BW5+=D1PE&o2TIzrG^Hjv(9b*2A?Y#mvVEgGg?Css!2TQ_B6;ifnnGJKizZpxI^HSAsY zWekbKT9K)h%R(s0l{by+lkMk6#IJijxp+ei!^!O*<7lBR<=K;BG%XiMEqWtFxhItaOf4WZ*=HK4}d@5kjC7% zu4^R*U6ZXTf~{*5f@~}e$ZuiFM@Lj%J7NUcjhnKGDcfy0iFw}d^)B{?2=d=D=hGB)X!f?5Nhap%kF<5jab_0h_}X2v zZ_YTKa8|tu{pK=d<03+O4O{&ZepDWPYqhbk+Dllyy~?BJLolwum>x=Gz&hPgf)r8- z4Xn|{c_`eHyvxm3Nddt@5mf@VjZNL?_UgMMi%D8~qF^Vzw23TQ&0t@KaY;#DPIkOSNW`L-}wh9 zko&5hXg{|E_Q6$h9oCqz|J>+U>x$BAS?fszIz7^F-hD}B0bQ)`fj|*$@AqU`wzl`s0h8<~LY$7^~HWR6kRuoU?aLTg@wAHE;hPA zpoqfg0#9P1>r!-ZYQpM1zDTSnj969(NRIQPFF_sa1GO?G5{_LBjDxc36Ux+D*{N_NPEAeST1QTWL1bYGdI8;XVD)Gd^+pztPoCXa*=zHg7pPnxo{2 z@`$9;zr0bB7vNm*MQhRdioF~j1n(7lz23RC)H%wNDOspod2`103a5&qn)hbYp5vrT zPGv@n3fIn;fQgz@n72JK>Xoab_G!D2n{}LdHOfFF3QnbB7d&w&KUcDgM3E-bV!Gz# zT`yhEyYsdyj@P_d&#Rsg$L&h-g!p1jh{FdD?oHo4b+TUZ>gn9|Md&leQb^M9@ z?#qnbzemGx6NN_~7J;x1KR6`@gjfPb=Z$K2>OS?@F_AhwoZ7X0>$Y>WD4!!758ChX zW9=Aza^T?LmVw`rMj+biy3HvHNar$3N!1pHL`xEeE3HT2Z@RJERK0R@Mx(WE1 z1bi_8|8WA|PQaf@z@JONf0KZt^y1f|@iGO}Q}KvhtL0~GH5N50g`6s=YTnJ4 zYr+(w?YfRDYMxuNDv@El#;} zo(&WF6IFMv;!TU(;mM;1_D|-H9y;`0>*3tP`wvW7InpUQbx%xBm+G}yA@)#QXs9*p z-gP=f&>jOwEs77JFf_iEdZWKf<5ah*W(~fZ>Em8t@CO-w8^iMn_#(qmQ-wlBsxa}IA z!x~42m_A7l+EJ#@<2uD~9@ldT_)84ueqLet4w}#S^Jk5tgFoiXeV6HTe>UrdKpyDc zAM%W7-0-Qf05yw=bZ%n+xim)G1q^D;hg^`4Cne667XvY_=gGj z=kZOZ27mCFJdbMJ?33?6iQ3nhK40Jc4Cm|n{Rqzw6^jr>rjOb(^ZtzC+@BXBJad}o zcTAu2yv=aFpZ^}=aWv0|Odoe0~rc%#TU8ich-Wjq1lRcZ8rthPzJ^BB-G@0XQ*69q%vU+rn&W{o3 zW8Az7+`o|1Y={Jdr?80BuIqh_SJ+|?qU{Vi@g?ek>$2CV5c83FjUYNd?s?$+U+u@q z7My&I={21HQM|AgoqvL4z{Z#khVN?s;U90t-t-4ZXvSP`&?Jh3F}lYH!&FiKhqZm0 zWV}UbA0Z*;kJ^uE#qV)r8b|H13**+miejQ>@`ClpIce<8`p3-;yQj2bRy&3}0OpC> jgEPAJ1c_x_dZ=9ry6`ueYq%L_{|oKE7g`2`sQrHcc%aO` diff --git a/build/config.o b/build/config.o index 0b9839b5ff8d2069e36820f9f4219fbb9916019c..24fa813f7267cca14c6bdeb339983526cc285c2d 100644 GIT binary patch literal 1816 zcmbu8&ubG=5XWb;saBKLUljro6R=1NcFC3=)YEFwUc^JN*h3+_B%7v~WXtXgL<<`H z3k-Nwa@3oiv=)gYZ|}b9r5|3s$#}lT zwi|X8U~P5vc79>K+-~u9-ZYIBqp)PQ{iXSQdD$qeEDDS@eZxL{)1DO}*}1A^(>cf^ z$pjcWxXyBWJFPu1(;J6F5|yR&9IBsK9&`<~z`E zShW-|z&o*Jb8?Ksj_taRdwiZ*97Qmb;O$o6fVg_Ncu9S`gj}8KhTxY&d{c0$b56wM z=zGbgkmKDQnc+Qca#jYz<8I*VGIH$(Gq~O1U{o1rV3a)%4A%)36{p#>Te#P9xNWRG zTwn4yt31I3lG*iA&1Fq{^rHWZ@+imFBPVPjBa`PEtmy8KTNanZtZ@tjF$}4vdq?k) zH!LIauL~ajhkO?MVMjGoyMYU;c~ZTJTB`f<^dwarIZ(9DX$i-?K-=zXzCu55_P9r{oTe@nCN}36{;b=g2pQCn5ii zoNo^fjPVg-W6UU!_1#N=% zavQW>R$E!f%pKyut|3Q@uunh6Qua-%v^bmUV+Ik)pjoHk$0R8_lXw$!mT;7RNY0~o zS;-I2fZQ@J`kpwhBay`4_zMqJr(16|L>1bORojU?nl{cJc5T;n+-UZ)5zm5VN2eW6 zBHWg7oNG8!<_nUi{8?PgKUMgQ!dsH(I`sX7Ra!nb=qh??bFAS#{*!gV62>U27G7h_$=w*|hH4bQi#FQnh-24dHBa58=$HB`xN z?$lkYV^3TEkD;TO-VS}EilTJ(RT6E=Rk4B&&AO&IuK$e{{m(WVmGwDw=BO|W=4Q7D2djJ3c diff --git a/build/debug.o b/build/debug.o index 7699e81b2a3f4531f60e845190ec90f3af7656b3..44675f7d672b098300c31bcad2f05e817efac89f 100644 GIT binary patch delta 158 zcmZ3%zJgt}-qpvAiII^31{fK(GcZn^C@h|V5Myuv%Q`S{GH^_^H=L}-C^2z`BpXnW z8KhQ}nVEqJLNP-qRv^W~%)r7haYNi>B}S*s8H^5$lV31NOg_NG!Mg%#7dwz*P*Gc>tR)8Cw7V delta 208 zcmZ3%zJgt}-qpvAiII^31{fLa7#JrO3X5wX#26gFvJMPf44f0~4JBECTmc|v1!8x< zPzELjh65lm=E;SO@)J8GCrdK=3hCwLm!#^Y=auRe6y+DB7L`;2Wz8oyFbZy7!RWxq z=?c`q4#Z58KQf66Dgar?fMfDaCUwyXP$2^-%>ksDCW|s_GaX=$}w7#k(E#uzZ$>F%`Musgf#&T8>@ zNq7Jykt#7ng=nJjC+dSSYJ(4G^uad-G(M=AZLrp;iKq{50@icxJ$Jdi?T9}&*}3@Pe)^H0J*l~&*|zKn%Nh$ zqh7mQ`v{;PvAy^kqcwn10w-BK{WaX>7pOo zUL-#>`BwBJ=&>s`=^7u-j>vbZuMu;Mev15I&Yvcq%Tb^_Vl8A|)R^Yz z@5vp~u2^qEjC3YgN7kW9)WL#MAFa_ZxE6#Q#oMasQw^yO;?(WJJxru{aeQME`Y6f{4(8NgMPJG(J!c0YEQ}>*p<2NyNf6ez7J7u zpMGD`{O@#sn`c)}Km6HihokW?Gfq04O#t++i*M>%-+Nd0x|>lIz#VlH54Zs9^Z9Jv zN_kc?UD%#!yHes;UbEJ^s&E0ywHFKd_H=5nJ(101951=T%la#ZvPCZ`XrM6Srqi)p zwvfUdj;*jYm81SaC+|_;y!ra;Gn?AVgv@S`y8rIB|sjbY?b-sL3002E*LY)3erUyJxWI`9-UT_|>ec|57fyRRiZhfX9 z`b6a0Z;oBatFt>itML{-IX!y?APTfPyG3zjt`w8EvL$a8={Vt4)+7{VCGu}FQwpSa~lUftv`mXmS3>O=?JZ145LtNhn zud%%1QTNB229LtuWt?~x@R&Lq=hO&qltXdNX}I=@0xxU0EA@YYq^z__xj@Ru1k z^L)hMDRE%O4IYJmrSV*@l7Ri!2G4$83k)8Gp9tZZ((o%Z{yKi8QSlz(wR*-?yb5n% zoZ`jz_G(+K;ft#%*3{si;x)_QSNKwmN9W&Y@YJDwYP|-J!uvHIeLs{8o(AUGY49j~ zm&T*lWv_qt<=wOs^W9M&VoAq$AU0SiKrEk?6Z-IRJzT>tA2+t)&U;oAd?&FL z1xU>ui4WzSjH|i)zlIiSQ;GC<0V1^Nf=#{O${Bq#%xqM9!t9wa;9rQMjqocvecO>8 z^**3#dNt#Gdo95ii%(k zOpoh@DunchM*Ky8pfNFl3I z-j8`_=H2OjwQfz3BoQVOSxH8E3?(FAHqx$kn$=_~nL_^ZJ$}1EOI_8HH)2|9Uze6j zoX}DYo!7@}NwrJT(rTCQG&z{H7xbf+mM)`^<~yI&B>2nw&Jf?3>|7!fawwbV!Er5> zbLp84Lr!1HYbkXQjYbC1=%Dtz+O?avIS6jNY+j%~4`vf3-5AEe_VEx)1|INA{h;M? zLm;lp)VEri4nVAKD@`;AZK+5AI5WkyaS1|pOgo&fF@;WR1cM3mjP$_V9BRD|%%mGS zwe-3Z?%dJVs-gTqcQHhl+}A_Kre=_uR(l``$(s_SdraevR3m+$_=Aa<_%SsWx*8B9 zm3?5EX!ty2r-=lI;jz&_J58;Zf*O)bSm>pO&N<;{l8%(D-^5A39RL!ug4 z$9|>*&kWe^K{v^4v36fm=_wkH(LYR}nHZ^x(Uv8`Y z1U&cJGe>yB?iL0H+DAunFPYhLU(t^ovZUINMWM&t%gfb%U;CZEhlZ|89m#z+?&0** zJK1WW$8UJON1sY(`dUuyg?SRE#Pv#WLOY3F4*q+!%#81G1lpar6P*2@_|+Nurgt1W zBXAD7L93f2#LRYM85+oH%5=RXdNl%tL|gwbCx1=jF8=#shP7N~2r6xkQ?I;HmY^?t5&~A$lBW474m|H zri5uH@!fv_<)L4R_T1@WR^$i3{LKZQoa*oWPZ|TjA zL~1RQ%1b9s>VWM#3vm3QJT?Iy>eRCLifX4!7&mPKP#nC_160B1t)W6=;|kscFcxR& z?^1afdefZfU6^?+hwgOFjuRVTv*E{GDO@FZR(jyidf<@bf_64};Ef)5lLx-j1CM&( zZ+YMu5B!)19`L|F_P|ei;HNzB(;oO&9ylK7LhJRT2Tl*Z9x`pi3K%gvYAFE{wL&dA zEeX0Fu=mCcy-CMY6Su9fVG^f25PfZ3ea)&my?)J_P3mTS^QxLURfjS6@Wt&QG)QyI z0^`l#C}fjx)F0FXQL{PJLPBvJd`3d1Kdd|D1C0kFG2*vc;(Eky2X>Ga1D<}1#1eL# z?6E?&0a3J&U?TQ%Jv+!T=FT!v+m)y38_y&jvpZO^LAG)DL=NB2;XMC5#o>HAXPeo% z$no(EG5i;bKLu~}&G6qm@INSy+!BsI$no*h!R!=aApl|VuzE9{;%KK7evChh!|@8t z@Od0QmBW{DI9$nw`7cpioYzhd{6i1?k_Rr~gh1H5o^-pUl;Suq+}AAr^#cC|%HQh2 z4^mu=|EveUpTnnderM8z<1jWg>UR#s#W*V{F8X~#u(OWZdE3LzDS^L{^1tNx(*a}o z$qM{1xEO;w%r> zU<~CIj{hk1nVmL)&+5fdjz5#*-=Vk|zYH7{^oze?QQ)3u`S4; zQ3S#GcwzCgcMS}(HqSdu^?3~2A{XlyQpNZ?sJ;wiyomAdgh8|^>VHo4pW~IGE$ZVg zEVTaBSX4mRI^+6Jh9A>scp=}Y*H8V&Xkev)p&wBnZHj9T5ZO|KPeNGza(komhu@@v O`ZRua>O!jmrw!%~OM>HJd-%z@}wepMSa=+NBK=L0V}tCKD49GjTGB z+L1a{p=n*J=>~RTH(@E;5@i<_T4)Arn|4bP>Id1ivL965sBQgV!J;1=*ukE2-#IfU zH}m#G`>j`I?zzAFJAdz;d*6$vzVYhIRgnlti@?Mw`cclp33f%oUx}Gd`ZSwgPh0!Uame0Z9f9& zE@LoL?>c`gX8t(8==9tuW-gn$`Yn*l*FoXVnxKZrpLW2*u~*2~c?G}4%k{#}8-9Ix zUhFScK{w5#ucKM?W#kwfjUZn3>*eyu*$FW0Manq&&>Zm>`0@(H%%3^V-vx2jW1Ooo z&W+_fO`IFi{%VY~p5w$^v|Xx$AH~>kz7!|P80TihH8+nq#o6mX_fxFPGXU#l9)0Ef zmTV3locx&lxd7*)n1hW$6l;fjGw(z%`Hn;DGedQOD6BQLM%l-h$08S+9`gweb-*zFsWXN7l)ub$U_dPcr5oU%DQ+4=^8G zclRW`WpY6Kr5x(@ngo025ys|YtP)>@>VY~g#k6yI9G==2byQE}Qp{yvb*5fok7~XJ zvLDfye*2|Zc6zx-n6K=S>TRb#dfM0Y*J1`_uN3m9Vud?rVuiaujuq~mixvKUK34e0 z>#@Q=--s3bRo*mg%6^Udh#T}(4MFcT27R<`!GB&RB>(H@x2qwmdbWZI2-@8jNh-(a|JaGw@Ds$UXyDbD}W zkF5P7t$hW5dBps!k?FfmH&`aYsvZH?f7>&C$v?{DT6s>LUPJrPN-vYI@QJd3iAqb`OLiXTPe4yQf_n}`4w_A`+FZPQ}ch_zWxE*VcVg!p)s6xw`5MB8*~?dPE?*j_x&mZ#~6^ z^KdLRluk%L2{6FGz`)4F_#nX8M0%WfW2vFh^Z>vl3zGwa&@4bp`p8&I;&`I3XE2!@ zZW&1)9yi0uL{D-e-HhXa_i}t_B+>7tlWuY>G3p}j4j=-b52lxYzp`h~SKY?_hbBhT z6K-2ub9-~^^KBDm*!II0UTAJ@|02Uix0WqLey|Us$DfOAtgeSmh;3l}02Tsv)zr>b z%|)uZZ{MoHA+H(86(`jEah|WF@8aB>JWq=z z_IJO&viJ6_k0}Ij@pG93Y*Q5D?wSv_?3(>mbnchYs_);rO{50=`1qmr34QIZ$!^{? zdm%b^KDzt$pGC)R-8ROE7b6?kqJga?ybSXw?^fnD5_wmRI~$#II#pg>Jij5BH+9>~ z^DbgzJm0D2yLg_UutsW8__x`EHpi*>WDDTnze>$POLj9wt-xQ4#E8O0lk$rwJ25sG z*b!FQ%Xa1qPx>!2F8fe$d`>a;O&w7d{9BB>*i#dHKgtwOqe07fobgr*A7#A5!fEKh z3P#Iakk@kjq@nPlmgz=vV5Nls1a_9=M085ol+^;hWLd@o{_3RwjskwQd4RMh9jLY; zGj=MRCZ}*_9adDDIR|j?6a2_p$sG0PLvT7&EAclYPWHv_JdUX~;m7!`GD9%u2a2># zgg;Hw;zo+;VkKn&y-1d8!aq%nsMaIRi;8zr% z?6>mxs^V+>I^(wAn~aNJvEwT{RDZ$mD?Zup;PC_QrOtvsX59AsDdXZ-_;_TQCix0p z%ed6Jll9jtKE)&W2FA&+`coXZ%8q`DX;5}F-W0-@=QWB`^F76LV(zDZY;90^@d^3nBc=A^dBKuj9F{_!_^d_&Oe6@io4l?_b#u zF-~j)YdqepBA^dCz|7-|*Hr z-)EfSY~Wa^d#G?-|HmQrpM=u`W^yAFfOj*kCbWryOFdt_eO(fCbeNB{2bDLXp;`^t{S_wsYKo!0@z?Ys^$ zZs#?k?C88^lpTtH11&nXH z=SheiQKkQKqd%tGjqn``+{E$<#Q8`z$V(P3?}rC1T$D~)xV#^}ZQ=4BxM<<>zIV^U z<-M*N{^n)U$5+m{EbmDj#n)~DF zI5Zy`ABW~tG8mXy^WGItrQ#=Wg6IQ?^f1tuJaQy4irS;ebfWo{Z|{G8JRR>FW@cir zXCM_nk_htqU%y>6Kq>Oitz^z)sa75ccuad=H`?=rc^X7{VNC!m@Si&9?;GSt%*pR+ z8{_)7K$=}lwEfv*+WSPc^$)PVhjY4#f5F;Npt$s2ra967DGgM!^}mjDl$-7UJ`-)e zjHUky>Q<`X7#}85C-OmSBzl5>2QezO?f)SYg^v`|WGwwR5v}BZs)B#g5k2w$J;bPf za{r=e+7l+~vxz2%OHKNIC7TKUYWSQUm1WTr1!0LGB4MGRaL&Ew z_+8)H(h%P`(tGFL-}!sbyZ87e=bf>mJ&}lDiik%=IAc_Zjn9PRq#7p0ZgHphNA$jb zrKEpTRzHEL^xu=KtJ^^9daBX?AK}%@P@T6&cfeA4QLAs_Qq_8WwcJ3x%gyalG*nXZ zODBKZDp0m%pc>ge{G^qpqQqc>7sZbZC3c=wbB zHGJ45%j;Yx>5s3q zYBdfauwGEYzyTF57tEk++O_X&hO2n6yu7KZx7kyQsdS=0cWyw&lu$4ZUN|X`TUAqu z1nMME!0iuxXDjso7{RppJG#}{SMiX^>Mkr^7!qn=Ed9lX7yxN`=YAnyY}A$JwZXq_ zZ%hBm2{>ZXubon?Ity&fuM`xkE&==AiWiH z^=N!~W3@5_n*HE+wK4*uA&gLU2Bcp(1XEe9Od#_sNo0Y}wOT_X8B}y4A3>eB|KL}~ z0Q|4~g++TxR;$`)P5G==hG30vtF`k-tVr-*zJ_mcE*7Y%oL-~P2KK5d{N)0bPM1o; zxs(328@h~Z$Y^CjP0uP?Mk_NvZ&p^vVXIxydVMnZR=@Nk(toO721lW6qXSx@raV+D z^;_2AG|S6PaqeE&T4wsF_;GeYxiJB`U)Q;>C{}wDSnEWnnGC8*7F4w62l`~dPKD2= zAwC;MXK^7jbvBwkC0r<+t1IYR23-~k3N;m{TET*}e=uhgj+$ENrnyj6xz-75-|poG zlyJEzTL-L(d+WpSGlqTE=%e92+M|cGWmZ)ahW)Y)%0l1(wzqiBo%1sKy(qGJmd(zW zinF3n@`|G1&gHzUSY)21!9j1Ka4@r!nVy`@=g%CR&z~-;>0)LwU-A+#7e~``^O>2L zmyhKOnOqE@SQZd*JI1|*o;Y&ktFghNgY;?5MCAG7BC<3Pxo78X{g;oJhq+#qi&K(2a?>Vxo zuXiv4DoXZ|Ayqp+VUH1 z<@YC&E4@~JziQcUk^C=h{_8FIKJ*K8Kfc)hX(iU{C%J0uEFTNy&yf6pX+NXo2z4Sf z*&+U}_M9#6?Rdk&Z^>V?-J%yf*>nd05ksFfa19YdAGL#HLma2QYL}CM*jeDa!GcNcWtf!V;oMn< z9QR@;{9+gUKETmG`&DNFusGpwP-t}q0Q)lGC*U9=sl5-p22ZEBTCe^S{MCk(tm|Ef;uaJ6$pP?wL>A)83AmR@W=aL0Hn?aa9kheIYYQQ z6M+4a@Uw)gvjEstcsi|DV4Iv&{WUQypchVNXGGqeJ3W_6&ud&w^>9&-sUM@-BsFC< zR-IXobbD4~?$LU}je0IO=cyhoX6B1$7Xk4_Vc8n zkFgn_HE=WT`7U^1;HICK4BYhdI|E03e30q}ZtDND3w{U-17z3dal+B>UGVU_o-_1O z#{2&jL;r3=|8+y(%;)_s_#X{FX539fALH_V?n9?QC^r4?Aslt_x0dsdb;8(z67NVhA^tf7jL{g^iw{$h28{DP z>y(A_J?nyn^F8ZT3+MaPiiPvNsczwXKY}ZcBF=~JM==ZM`%%)u`F?cD!uftA5^(wO z(o?`aSMymOxtaNN!pkgqA~BQp(jqZcEQ*Ai*ApdGx0tl+rq6-^)w6(15-^=#SjgnS zI+yn{3HWR9K+#K2pP~8bTq#j-;o9SRY@C^$%)04?4AtU)VKFeqCDV3kxk}RLbxT0y zY3bbqBiz@?7NQ4xcWK^#o94L3(U$*S;J-t@NI11AtqkvVii^HYvgg=W(5G#`LH0@0 zm~>5O7$%sPxwlcy_9dJc#Q8IX_dD#vcKlgdx2?}}=7+(yQ~hGpD7a2oKU@;qG5&SH zP-e$3e9ZXAz_wHTLmlE{Y&$;QOR;`K@R+nj@wxA_jQ0=o84&Q8b&y{sdlSR4t?L1X zs`mH$DcQ$BW)kPm*biZVK5hH!WWQtuwC#TYww>xXLG|k=d;CUtB-oz6U#HlhCX)0A u!Cv~Xc&|qvwmquZ-yR@wVkf@gpGxW-zO3b_J8MUK`a|(Yp{W|#_WuF>w0X diff --git a/build/hook_write.so b/build/hook_write.so index d17bd7cfdd40f693784ce166d880bd5c5346d796..8b1a0c6de8a84cb29688df28f590b37140406076 100755 GIT binary patch literal 13088 zcmeHOeQ;FQbwB%ISOS&=*f9w>dcve8m@ITP9gmxihzENGO@wxs4fky6@Ed?mKm>LZ1q1{JNo{$3@oLZ}j#XJ)uQo zywHfQhQgryoHcwuU1H>fvMi_8tN8@y*UwYMD*Bj)NvP<35qfOr|1{MZ!EL6!>Ed$4 z#6zfYNBPE~4&iCp`Vj40eDS#>SAX`+TUUO0dB@p*egEm`tRgqT{2Dy0$M(fKb9M9x z9b$}KyaP|<+3#Mh8+>xl;aC1(;jP|JUOj!!j@y^7icPHf(<6I6{?^V9zxX#N>bAb} z{crrpeg4xBpEiYP7M-10%?=SPb;NSbKLBDvT%qvgX>g90Qz5Af8$lLNf$s%2RsG3n z@E4}R*=h%mKe+&=s{iq6aGp*M9)EfWz&x5whi7Td!`vX!pW$JA>8+|r2Q{Im48Fh& zpsWVnN4o*$>o#Twk_*YnRK!( z-jPab-qakob0F?^^`zsep06aSC*6~GyEB;`lt|@v_fn=WnWnyEHk--Pu53>}xs$pS zrLLY-GM%Bm{(O#d`78>wGnekm_N4P&v{Pu8$#iw4`g7f?dg@Fi`fWL*uJ1?r#~Ujt_S6g*~dnV*77xzEV+Plj3ARSN|RH$z3?#dhbIPK zI58S>FI)$PwPJYgb1kL1@y`!A!TJj>Oj{GwI9jPkfu9!EL2cC!6npuE^BzlCzME*Ibneb7>h5uJM5^X_0D z#TTaFpQ9KJJqp?Yx|ZnQMv2-`9&WhaQi?Cg+1-v{018!e>{r5h~ka(fel QdJDW;}&}Msc?7molejD`;(|au?&{L`nij|)6 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 q)%Z#Ka{rfzu9QeyxCs@tomPWL8I#c diff --git a/build/init_cleanup.o b/build/init_cleanup.o index 4c27e2fbac59f75d0a67b20e4b570079ec68f66a..6e377a04f6dcfcb4907370bb828a5b178805421c 100644 GIT binary patch literal 1512 zcmbVLQA-;^5T5g5wVG0^QVNPj5E?<3ocJJua3ED5L`2XRAC673lAw1fcN<7VY=4gb zz*ql-KKC#57ql~RHf}Z-9~{`5nQ!LXo0;AH_2X!N%=5sA2M_S-85H1t?9~o?W(c34 z2+Jk^>Cum#`_Y5Fy`56|tlCa=yA%XsOH?+3cFzs&HaA6OYmMO^Wrm5~%_$T*OWs0p z83_Bv_$2F5ifS#u-+y^=KerPAAFO69qK^?*Uh2!62<=mF(_yZM4C4g*Ffk&366S{@ zl%L4~fxYgq-6>GVZ6jHOjagQ!a_K~%F0M5?Z(xWtMgnWnM}qSlIIm0(iR(n=g0 zpKWAX)~+~HHKNN@#>y(=-R1%^=@i|`g}h^bUhKOkxPmzG-5YYq`L3c|TfU=1|9CGy zK!;4aOLqsF3No*?)?4(kRee* delta 510 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 literal 31320 zcmeHwdwf*Ywf~+#AR>@}peTqVg5rY^UJ3{`JO&R6lJcl+DZgPzCdrf}GtPsD*FZGH zG7e+oz2c>+@Z*4lfmv(J8=$v)eC%a-JLJWL$}*f&@Y$5^pU7!y+xgw1AW;`@9y zj>``0N$Pc0e2#z=Wd(w#JaXyOOJ6v={9Dr>O%lAKrXJ6)M9Mqpyg>q2)YPM-Eo(*k zmW_6Lw{#*S^_5-@#0YAXdW}*~(KZ<@Me~GNM&{_Vj|}udy&To+xBR&kYizD)>!&R^mfp+}6p? zz4{kRANa>BrX9#c7Q8fl-{a$7{>j)mzICtO`TWnWIKBO)9g_y#zcT*^&;G6E@!#Cu z-5vP#MOUBu)?3wGwM8G?J7xQti*rui^z!k~V9ND44}lrkN9sSj;JYB(m;8M$_%;_i zbPc@tIFCO9px8Q(r(Eo8aKY!|!t_A)8*s7zTNioD#r}6)@DVO{E_IOy%)IzG zkB0&Db$!3~C|4 z!zdR!pSs9@<{2}hO@QvMWJR2!fxmJ4rj$z3E)hLmxGRE!`aNs1Q3y(`ci4<_%{T8 z4RyRYu9SApp$-y9F?c%0NckVie5sG5<4?T&W0(~YJoVFbWbvVVFP_F(cAm_4g|vU$ zJc0j75O$NqC(RMSI@$5B0ZVqaUMldXrF^q2&yCcH<4|$vly=^f<@`z{v-d#B&M%4t zaGS*c4EYi49G2%Oe=Enwuwsd;@!Q{^H-e2}lO1@4%=da3|2M(&!|$)C4%hf&@jx{0 z_cQ;})yw^5!Dz4|6pII=tCugT3fBZz2R2j%MOxn}{?aW0e|e}TP!+m4$fChO+45j4 z7N`*CEEcRO^9Q#COZ|~RG*BI56~TDv<}wxuMx)^Qe`$PcB!p?4#mYdGMH2BC+Z+wWgD_sf$`X;KD_C`) zigMx(Lanqa7^q1^U@H&}miggVILh6IG%E{5YXa3lRvrxoS)jBOfo0VjfwJ;&1Ys+U zhbXnQDjW;K-3nX>T&&W{P*s^f5-O8txWMs53|AtKe0br*F%}6$f~+!717H2IPz4-h zAn?inODn6&SSVZ?uR?y&jgk0P@?knMtN|3Ok#Uh$LSa_Uon;$C2+QU`D9+1Jj*LUG zNHB=<(0N##$4hZR0&!fm((>xS#$YtCnZ-+y&ap@sCK9o#U@!tyTu;bH$YME8;10qb zi`38s3Dm?w{$Q*$fa@3w-joQ|lp-9V4W)&#aN(8g+GR@@F7i(=oT1OA7tYe>GwA-z z!DwFm^XM~${MV=l^8}}4k5x*sb1EODz~>tBodzzu z2%g$);Khdg&T7GsPpZi!q|w0TCEp z3ZjoD16T7(N^CLkAzGTTRs&akIVB%A@S%o$n}H8A@Qi^EH}Fma&o}UH16OsQC)Wre zinBRh$un?sJXB!dXBqa#82Bgy_Zs+U1D|Z*XB&8tfy*T*o;usW#~AX(27a!ATLylf zftMIKUs#Z7-!|}ZhWvU1Ki|MB4P1?xC>d=kKPaBG=Ae!(20mVapmhd*fr0NdaIb+k z8u&5;-(%nx8u(rVzsSJ%8Ms_R;;H)$e4-(Lz`!RNc$0x&Y~U>heu;s%8n_(d@zmo6 zzQmAkGw{geXbz!{JOiJiK+pmMFEsEm20qom zy#`)n;FAqp4yAc&k%3P) z{SoMoKz{`KBhVj#{s{d47J*Ol$N$Z$Kb2>ta(}x5!@Y*4cuuy}s(&u;S?)@9*2?9K zb!8{50?EICk$fekbhW>i&1M@pPZR5|_E$7d6Y8$^qnf9QbXWVMnx_eLSNr{%r-^e{ z`(2u+g^8~ATQyIE>aO;iG*1)iuJ(ZDX(HX#{!Pu(M7gVdf#zv~+|@o!^E5H;YQIqP z!#F=e^TRps(R@DVKmJPjOA}xCuX&pA!hg-vL>K;Ro+h~PU-LAvh5wqT2`&8BJWXWb zzvgKI3;#7w6Ib}Jd77}of6dcG75;0UCaCaV^E5Gq|C*->X;=FQ&C|rPtKFk{noxGN zfBdEL-^=;;G*1&n_^)|d5Q6`jrwJqc*E~%K;lJi-A_)IAPZL1+uX&pI!GF!u1P=ad zo+fVaU-L9!ga4YRi5mRZJWbHxzvgLT2LClr6EgU(`Kg@$__Xq$CSbV!nx}~u{MS59 zxZuC$X`%)HHBS>P_^)}ISiyhI)5Hn>Yn~=d@L%&ZQG)-PrwJ1L*E}tl!GF!ugb4m? zo)*sFzvgLT1phTp6C(Jpd722}`hTJPFXsGvnx_d7{MYn9sDo{pX=biyw-939sEZQ z{)B^n$HBku;Q!#@pLg(w9Q+dw{$U6IO9y|SgWv7o(+&tD2#Ryubf zkvZM*(HP3Sfn*xWoRMwIzn~7S4|`Tp$e+vQXN@Fs=~q^=(>nT>YpkQ)11!%m>y@wK zqhR0<(m-Cet(=!j=~H`EH=nX+iObhm_4EIUPOapL_)se~{}C{mbJ5Oa$}o61mU{@i zXB~8P{-oc&8HseV26`BL6(?)owvvffE4ik{N-sZ^^1XeKhDcWOrDSvFW;DZAefPll z8CG)>6tf+*Dc`ANlQqZJvRPvxtJ&8L9oA7SQZM&)Tghjv)bdsHHx%&H$c zku96^cH-X&z?jfV9vbs&%Ik>&PIl*Ul4eBG4Xy8Hvxm7Nyj+Z+;ff{B#g(kYc)$Wy zgbw%sdEDNO5u%l9AjSMA*}SRwJHA2og$)vI_#5Tp%Sa)Dq5^8OQfmPF+Tem!-;`s` zrz|&3%>4ZGY_^%vPy|_?1|_9Kh>ggyfwD}esgRVNj)`ifUs07ED^C=dO%o`=~S(>rJYD> zZkPuM`Ld4u6hE(T@+A3*V68n?derkIfa3G}3H3Qetz6<|6rHpwLxfsJWI9>(ohFTr zc*=L$%>cr4EtM_VF!>0N0ug)JKlm$;f=J+ohT2QgVx{u5JHLf=z3;R~lzWcv^ewkG zH_SG?qjT;Zouqh@t#G`VuzAM?ZQiX$CaT4QcinCV;9ZDHpKS2LEd+{)-Mce{cOros z(%y-Z*t~n|GxDw*-ch0E__}Yo6;|oSuv>i`a;Q0!fOKj)MZ2JNwLWhneHHEj{L}9&;taTwtS?ly1|hC2u*K@Bgxi@lg6ZsdR)= znth$5CzJ{0@6NH{$##%)kj%uQ#?aG^!}|Dn22nI>-7*CHgIfdo9A2g>livUniO-(Uh+RPS$sN5N|~2X!)=`lf-1%l+eYTt@b|vK}!Lcj5l#@9^9dOSbQvW+j_ZHo^-Tr0JUoOkb$J{0JIJ; zJ}Nv%_?7t{;x2lvCKyL1$0-xgR-zpnVFguK4Rlln2WbTt1H$9yfrt_KfWJ^s{YNqlaUb&CWRxv%$tMTgT z85-B=X%Wrn&`GqQlW4NiCdn1UrnA?0$JG7l;3cZho3Nt$1L z#6y`uC^IbKh3If8I)aSQoDEXXpMu&dp_Vy}JB%t(<_K~{j5cJRL~@GNcjqLoghuA@ zMmw?l#xfo`TVHKIMgH%*$wua1}CTr>3gEIZcM*0nu{x*-3D93yNkbQ*9QpZ12 zYAq(MBq~pRZ5!hr?~*CkA*Fo}&qKuOM`Q!HatgCys&2_wtYnv!o|O;^qIY>8VNs*o zD;=X-AN991B3*Nu8%WPuW~%-Qs(gHE9}`P0KB9g^WZazjvLl=AxyYE;?xlhz4{bq5 zig|5>liig>(!NFt-%p@{^Hw_l89Zrd+Da|U+has@zlUloT9(IfhU#?@7JK3C5xQoX zzmV&x+^Zx;&lNIn@{sy=qRT#f)@sbU0E*E`CX2kJ{hiYOX*ehBuO$2F{mLB#; zJPTQh#gBCEt2ncgM{(A{&z?EV8{u?r64HqN0g6-RA+nIpO>m65^V|=y`Yw(Ai#FDv zjs4VaY#zT9(wJWuo6Ip^CY5NVh9C2B*dmQn>u<-Uri5NHG1wqxqm+P$M`Tlv>!w}@x=etqrxBD>#1y^rj6 z$m|A+OsaJznL1?s62Gv=akisf)tH-cCTi$@q#8F@{V6Y+%?z5&HoE;%bzY2W5U?Q! z&|0zff5w-*nCa&4Do0bm%WF86 z%H4z~LMiyNjTR?EoH-2VP|q{h>u}tU+NGA(XsXk39)#y{VVF(~O|9t$a3%l@+0(x6 zgH&Q_I*?^HQx7|0BE+^gH#QpC!xZ8QU8u~1if#z@e?S$(*Nv`@`U5&E9*D@v)4cuq zbf~9JpvQ_w3?RW{#Up6|40_gfK}W$g;z!fy6ZC9uX9+qM zUQ+rvnSTCA!H>@u^n!B)^`0&0g<7Vx#Sah zG@MKBW}KwEF{-lC4Wbo4#v9hm_1vJqQoF^?*HDBALv1#Zl&=oAJDTH$Vu4x$Z3Map zXo*0-EzrF{*5edou4IGgC#1FJ439tN&|Cq{7Yy^!2BJbqkpi{xf`UF31sCIu>7YQ#-qS{>f1(OaC4)D1r)F>uZm*ZAG{`7z;L#DBUx3?_~0knZSh!xX72>|KrbCXMU>TVx3F=juCW+sGKNx z2l2-qC_m+NoXjNUYEAx~C&@9nHU-L86FMrb^lqLvUu18^40hg-#AT>V-EyGXeQZZ= z0qhRz0~^wTX={(9EC))C_4?oCKRI&e-CPx;+D^LLIx(tkz2(k>{8moqPQfrjk1)o; zH7Fw22Fgw21A&Xh!*p(rsnGFnN+C@OG>73%|B>Ulx8T`1T`%-?uan;@M56NQ5IsTJ zCNadSuWe%aJL^c4PUE+5vaK0qYC@T8mnTA5s9D6;5vU8*1>{O|=4@Qsj)gSs*^(BT z_6vBWshOXoMj6^mq&8izj)An)WTkQ+$BzMcf6$!ioRpD$=6+EbL z*T`bZ3Lu+}*F=sjaHoZByB39NvBg3J?WgZiFmo%ALyC#^J2h+$<;P=s1lct-wZD!P z^~Uy>>6={KHiVwLG-nnd3z`HFp8-FOvP|W6U9KINDje|kIB-6YBLx^AWFCjpMiUdK zlBlN7Yj1B%{-M$~EFevHV|qlcmcJ6uc`QZ*CB+@^0o62HVxXk-_A z9TiGFZc-~#Z;~F>-*m%%{LDlQ-Qd%GWCFAO9s5W?B*NVO9&>9Ufm?;N41v3P1nz)< zXcxF?Xm9OFtQLuLdrYtINh}eG=l3L9J&7}TVuE@tKI8iHyRxJ2pbm{gw5ZS9Vk3UC z)2XsL$Z!d!nP5Wv=NB6oGXd_Kolc= zqr9*&h>!Ls@rG)=d{2F<-zUWiCsmadQZ~$@_Pn_{F1{-~94I?-15gPigNK9t7?qZFQmw!>$iFa=T8;;E5nxOD2IGF};3lnr4U0@(lNW_-#+_`-i2p0NY2z8jPt?d*Rso24~Y z_DVK;9Hao0R*TMfBb&{`)bKgb$)Gde!K4`UNzh8rR?Mh(g1!a15A+GFhO~f=#1e1@ zv;#B`3uPBzL3twR_vx_(XeHL$D?uOZgg)p8cow@4l#Wq?Fwe~^nP*FZXYA0yd5y3& z5%@TKx__U|mS8!D4KG+Se9U$EXKv1`W7nKF_p%uiCy*-XFUH5)n$2RFMIVHJ51%o> zi%DM|WHXM>=dWe6PZQ=FUT}NPqG5w_9z)I|&$|KN{dzXb_oPzk11biQ0O|h*pZDL& zW^V)S(ch}|Ujw}4?QE9sEv5BGX#G!-UW`Q)dbq6h7jkuOpY|-f9O->F40_UNNZlf527Rzfq_gSK;Zbt$Z7~ zdCIZ>=#M~u1o|V;AA$cy1k`?CdVeozgPLMGXm2q(h6*A&1)SqqCO>xh1jP?q_@VX_ z8!LHqq5Qyah4`WN6{CKE4%J70_Ek1ae5cHho*B_m$2&!__cif*>2Vzn`qNrEhDctD zVaG#pNSH8Im!$tynu`ak!r_6>JhEb&7Zq+UsjBrTS-MAG$=MkKA1v{BN%lJ1wZNzztH z+a&FjRBe`8FhP{VD`}CW#gdjtx?a+Vq;--uO1f9l{gO6G+A3+Aq@9woi=_XOdL=EA zv{=#-N!Lpnk+e?IMoITdx?j>JNn0gtleAM(KA=Vs3TR-B!z*c#q{Wh!NV;B9A^rd0 zJ0fi2zQ|s?Xwh8n`X?22RrM|{+29{LHd%X{e^Q_K2!ah5}(KIptn%|%7mpH zAI+TY>Pp}=%U16*PuN?2azw^MHUPa_(^8z2ytCWn*0Nz*meJ=R7I6j;?_f0NykzauRzAyWmq#frz z)Vo~l{LBS^)CGS5cwhT9zu_X^&hg>QxlgobK;Pvb>4GmF*th(}F7j8q;45744K8@x z1^R1>23KzWC1!po}=f3=_Am3O0ujY1ozdvA` zi~YNRPw3-5ddNlohztI&F8GJQ`|9t$bdhJJ(ReJLC@(L>zVmw9eSf^#kNw zmZ+}Y3KfI%Lo#j?Ev*Vc2PG2w=JTR$NK}A|=U>pk4)UeJ2+9MH>&q?d!Qz<&c9JJ) z>=lm;BRHdH9JGmj;k2I9A{I?l1!G7Rd(QjC7V=R-^zQn2fK^3+-@jz#g5^HH?}o+n zmICsQ9FK*i7V|Iu&J7EeFI@x_?_cu!EU92EUI_^AF;J@4E?cp1!7~4fB}-QMR{K{k zSh&mwgXDwS^1oQ`6+e@2y03ZKG2Z!-0$U>A&p)!YH&z|7VfHQezwVt2;<=AanLl2$ zA@qs?8(`n%pYPOfOYi%A1L73|c0qc#fF0@Cz2A=W_YJ7G4Dc5^*wWp0=%=S}HbJ@3 zzYSAw8L)x!siO@OZ-lTx{Ar*K5zm}$5WjGNxDBI6iZ%chTfAFAzIDKsNRORu0DnP& z4S}mmSD3GeAUlqlL1n{BAZ&W#_OLscmR_%6K?Ovmv}@a5MH2&Kl+ly0l$_)9^4h`@K z@Q3Agh`+|g2C+iCdnF#&02+@9TB*+P>xy7uMNOg*Pr7jx@FJ2z4Q)u^bthBsUJx!& zNl(5D%eL0gi(ELx8%B7_reHKiua+?xKhmPXssIVfvq)8(74klz5T}I|VX$-(3zo9N zcyJ3?-USs#!)1YZfE5NSWtUo625X8FHbmblG}Jk=3RH(+OsH?bJ6#ItS0w0n`xu@4 z-$S$xPixs2*7HL>XIIoKaYfX;O7Vp_G4)%dAw?%DK}j(zw;c<>VK zR(j6->A5ql?JIq?{;y~o6%Gf6iwsK=dYxW92UrCRQ#Gxxo+l`(o*zJjA7sNk)`Fq6 zdX>LgpI3CB6jtR|a*9?Wo!0&puh#z+EtdMu@=KU)#tGS0`s#UvqUw2s%3sA#`G2d_ zUnmW#=NpQu=OLtzKcVauzZ5Wv35KoW@Y<<*&LdG?R&`GFc6>~Iua{7a;k}$N{#y=l z%D)TbxuSQ0H}xYEg@B?;PO9nWNech5L%&YyD_X1qCk-e)MIUhJt94^Vf3F^7IrJsV ze&x_t>xqi0=V(gaQ5;6=x8%RN{;WhwN?J{o+c?zqSI|>9G4<6tq@s5#K}ntYKkv}b zTP*|?ov8~ZacM`9mvKUC>#CUQ`Jj65sNOOdRSu39hI9Dt%g? zrn;;0SL?ItJ-Tfa92|82(V_H|U0R1H5v8x5C*oIx{AhIXU)kw&=<9Xk^+I1iR~4+z zU$X44I3Zgqe{V#j3|%j1u_J%4fc5tmIHU3xX+)eT{mUJ=3faR2}S diff --git a/build/logging.o b/build/logging.o index e4083589e17badd2438203ddb5b2582d786dfa54..0159979fc27b17fde89aca7e6e34bd6fdb640de3 100644 GIT binary patch literal 3416 zcmbuBPiP!<6vy9YQ{6Uclm64d26wQHw9rnnC1@=cwg#=BG$o`cre!nPo&7_0ceXPV z-CF;&H^GaA9&%9(DyVqKK`23m927iw5k-1YHf;|*cxb`P9zuL?=Dp;X-_Bg@FKmAA z_j&Jqe{X&>zxmAvFTM71Pa*-*5^xK)MnVCGc5T_Yz|6sJ=!f;I-+#THgd6Pv=&bcY zr~NtHK=)1jeT=`rZXZH^DA&mVJX`{pR(-Dn93UU%v@;l&3FFqZIEi@`U z)V#df6KLX`xs^-`E?-Z;^wMc1rWdkH$kcg7?>W?q;#s9G^5dG&wQOBe8f#5QU(?f+ z%jb%fcWViFc-;xAjya-Jbyi*%0$D@P@*fJ?B5!_36%@^51{$VIJ2}crQHMi1H^R zcML!h|DswFm7-b_c68ysfOPY)UaG3QCE@Wd80w^ghh29jA*G{WoP@`^_+BLYlWX;v2bPUHm5*dFqhU0#WjDI$UpN`?@VmQ4VqUwJ$hR??EN(=|w9_4DIY!={f z5e~QDZMW*%dD?s7)`O<)x{fOw4@$0W^DcvY9(@f5qYIW_bs7-t#&B;z!LQbBC^g+` z!!JRpP;)%oT=Y_-mc~b9cW4Ix<@w)_Tz#sBIp(0o4d$ey?vZikq9bu9nTw9_7nqX{ zzV|lUD+*WF{~~kIALH>X_o6SH-dWUi{aT0vPS38iciEu$eFCxnP~rO({+YsMZ3%tL zTAa(YZk^w;jW6erc`p(MsP7G*61-WDTETuAjj7c)dA%v(xc0^pNKN&8PE< zG`HP59N*`OeneYsQope0(V);V0o;Gdf>fW{q<-mNM5owl+;4h8?9^lNyF9Y~+nj$= z6-8UGe+pUD{af4_Cdz%H`$xHwFP!R$Ds_-=$Q$gW@0$LIe40kTcZi_E&yPa`rRmpC R@5re9Wv<^+a>>;5{{w|}M=<~Z literal 3128 zcmbtV-)kI29RF?-+t?;)loX0pS&&GJc9Sc$)q-*u&dx(AQauq%IrsMFE@$p`kNu&E zSbaDuo<~4@3iclm1YdmVQ#}xyN?%&^K}0Yw;sq6|eK5#D{C;<5?xw@85Bi1KneS&l z-ybvco!R#aXI~gI43J{Lb1>2*3UGCDG|tDvJj}o}+&%E<-$mB>nYDk*v(BX(tP}Ov zdf|K4+3XXIt=|`SQtcG(u=b@p5Y1^b+aF?B*2U=&wU5+3M5abnS=%oqX8mhp6iwJ( z?uF$zd>7g~W6?>p=wJJtn1ayW*^To5=5~;hyOP}Yk2J3ULtod2Be4OU!WJ%LD`mwS zaSUazI@ejZcmv&TvCeJQ`ID_bg%nEqD)sS-HVc#*{Ccum7_betKKC`LXwzfHE!Lgv z76-9|6w`KLV5D0CyWERDPXZ@tfAbZ&1y~51tp&cyozk-Btt>RWS`e#matp^0gnlJz znN_>q;1#IUeb;VssWw*-kV@hXY{%h2AV9O~`6jwCk;k3T^Vh(Js@LMKPN<@PxG*1F zG?%<)({?MT&G}#-*naK8eC1-Iz?r3`)8>(4Ida3u%;l^T*5a{T6sx&+j~}-dPaG96 zzy#(qi;b%D%()_9_4EiE$3`-jbYQ%F9*osl<>W!mZ;=6N?$$r!xRQPcYh!wHXdUQF6KpIYKNW&k?z@Ny# z7c=lv892+p&t>2*XW*}8;N=V)u*_<8w`Mu;mR}EfX;i(?;=b?svU;KFb1v!>N+q0g zJ!Cs}Sod6rYdWb>aKd_%L$&4C-LMK(r{M)0!^a|PgldXTaj=^R?Jo(vR#a;er~M@% z{vK=+f0jTL$v>Q^P!K)w_hOU$R}`G8QR2%2mwt{4y`}I~Kkq2`{Wz9>K34F33Vubw zsYWIL3k9E2@Gk`}^Lbk6n+jje=UW9=^Z7~hb5`iTD16n=T?JSDOwa{Iq5V|x{Q{SH zHewdQK@FGdeMIpyja-Q@Xna@rIi>K`Jeh*eD1Kho{Cpt%G!^~j|HLatO&j4MpnzmUx6R4p$&QB%cZK1zn5X?|1&Vrn3hU+O_jV*=TwpTOY9jOkUhQss@xRzl%FcZC6WE}$~c}7pTG2k1TO6)_dE{hzUcHF z0hp2~dOiO)5GS9y{UNcT@;#DnbbG48wDUhAi1M82{OLWB_7YEvO|f1S@i)YRrx2q! jx;^>S&mJM@6B(tRbi=Q{e-GeHntfgb3Wt`-K)3$~%1RM^ diff --git a/build/pty_dup.o b/build/pty_dup.o index a4d0a48accb6649e7df217b2b2f42dbf5a22cf24..7ff4a1dcfafbd2937e554189f1908aab0f1c356d 100644 GIT binary patch literal 5384 zcmbuCU2IfU5P)ZQixx#Gl%FaUE`N#%EG;3i5+5#t77_#kB_v9+EW5YthVAaUd#eQ+ zEzoF#7~0T)CQ3rYSa>N!3^egUjSoagBuIQPYPPLy`oM!Gyfl&E%)K*ZINeM9InD0O z`Ocg)!!1A?wDE$1LdBMmEGkV2|5I-wONVrD5n9iop5!;iETz zZ64%r2<-=P{nFxa&u}Dsekc+;AA$~?i}Ccs0IdhO-eA8yfO!s-P(H|?jK{;!M1CaB z(h-|{^_JeX2iE?BxX6y|j{wXPoqUAh(6&P=cZv-^1EF^N1jRZ9>-9V4KzhWlU3VB| z$ntWUs3(o%r>C?XaK4}8|MIg1_whY@U=U**-eQjrZKt^W{gN0LR6xBoRrb}78){%C z)${9!!P_gVp%!MAPGHSX_%+{+HT8T?$Ni|b$4hhlHA=_P=D2TThwk$;K8(-8P({a$ zh5nvS!;`g84ecR{rJCYgfpM0N;S|Pj>fgnn>+Y=!;TaSY)zOpu z%vikNcMg8v_f;hJ(_L)&bl$O=-A=?=1sMi_xW-WOQlK z@6vpyPyiU|?iu~){gI<*Mn3Et>%TmD@$lGZpNzco`RK`k(KB5mXD^Oj`gEc72teby zb!)6;JNC3@-Bzo(;-uYE`su^|Oq<6{>ih(1C4G(KbIcZ`uN|kkv3> zj}JMlef&b`<2k2ihky9(*T;DvK+suL0e{{tHykN@k^w~UuUw0uC$l~3fgm2_2j5zw z`F?_Mq;tx&Y&mfth>LWAj zm`h(OwZ`N3>La`n`AkU$b#K2>zJi~LTv31NgZB-XFlP1n_SH_>Ten=Kv0P*u?OVi6&r45|*?MK+#MFp37BAapJRCC$XIMYUKK@t7AUf;H#OFpE<0PctP>GircI| zhxQU1q4mrg48Dmu`G10S5?fg(KTj&(!Wd>3=mPhRnP%1=A%Qim$;cd(Q?2=8QW z*5R1qx(oDSx)@4`Eo)4EHP|6_{lbAWzCQZwt& z%iOHPP332iKh^slQ+{;(x0D~vnt4?+H}jgt+>F19xf#Eu{OCF?Q(T{W zbpgCVaqUO`H%-C%bLxIV(c=CVH@*j=MYrI~lxPJf6OX!1n+wro+>JwYPq7HmLeB3b zaxE+Gw1U9#`xXIfPCv__US%GKF#@E465$i z6yH|+tH%!IZ(X~w?|Ihoo#E@A^;qG}k>{?S~SFTC8^G^LN%Z{vNS-=kG!=F?+h?j0hq Zc%eb+sAlF*VV0Y}o8ynGxulx&{|5E5599y< literal 4688 zcmb`KZERCj7=TY1!c;y6_=Pj3#0-(h-A6D1jb>wB*2TdD)?kRHmiBh7w7s?WRyX4S zEhChs$w-{R#KaN&Akkom5CP*>FpB=rEXE)E!H-4RQVl;q{XuleeBXQDw>?~Xkr?0P z^qlkD_v@T{K5qA@T^r|kJc7j|o)VQFQz6C|RobmqvsEk-3&kIcANoM$Ss7slpVNq%i+oc%R-RSUJ4CURBrK#sqBF7zJj!2 z``|pdN-CDpypdomu7yQR51DaqPiJ>~$M(+6+jcOI=;>W4v!A=+Osa+3h8fl~CU|c& z6RAe6PYVU2y1uJ1uJ;;N_Z2Mw3JUZ^gP}CU!%Bl8z)DM}t(>NY4o$yXm^yf5>YZby zPd}eN@n-3xqf`4on|}Mu^pOKo@1H20{9uLm4k0?)+aLF?^6$(f&5XCXSy`(zt!d6! z-R9jbElShcM+jSfajDlq!9$>9vtPi5C?czYf^wH#3D0X=g{QC1Q@>z-?GU`@2Y_Qi zc>$HxMRoh0;ZNu#B@X8;UQA6mG!jH`eLRC zbaZuZXzL1eZ``;|?Fsa>ZRk=1A{tDF<66Lo^~RE>fGQb`OE46T)7c~Fq!FRGZfF>? zMMOeLGcJr|Dhef$PtomMb~`SU*iSkjmCKP7QF{~sidXC?ceAdY#WZ|1n}P&lsF>Iv~X)y{dF zk+>Xp37uok@zzWHZm{LJt0j(SA@j$Gb3Tm}?@38to`(*J%lT}PxE%LI7v3-Nd!>B# z5_is9o;c_E1m!vG;7=2O&%t|%AD1|u;(UjFK^*7vJ}5jt=Uw!_C+^I1LefWHFGE53 z*}*x_%MQ+Y{w;AUPwLm=1b{g6TudA*S$~zJzZ{G`1V@^H&|#F^?Q>UC6(6U(lYzO20dxf zKm;z3@|9u7|Bt_3u)`%i&tcz6eg1yp$F%&pYrR8!H?3u2H%90nAF=+`+IJb+^7)Q? z8)YRF8$-Jp3dVP+3AR7x(C7RauP6H^ z22@8WQNGXlF~&mSdV|!q9?;KQ&VdqVJJ#I_jrmZV`5z{GFDp{*%>O0e)y99C?AQH^ zJ+4AjZFT6i;-&%N_l(~%xKBAg^J=lt?h3^}O#{Pk9vr9B9(_9BJs@!ml|ioBRr%LB TfA~#P&Hg#c-z;0&4X6D-tWTG) diff --git a/build/rules.o b/build/rules.o index a8df34eee78b308a4a7bbc5a30612c8226427a93..7782c892f790fea84cc7096674d5d8ce83931387 100644 GIT binary patch literal 1672 zcmbu8&ubG=5XZlpO@C-ge@G8v#BQP3O3fxIMWh#3idIAvOMCECHtA}hO{&=qq!w)y z4?<4`uX@&;yvZH}!GAz3cvCiKFZR}eCC+T$OE;VKq7yc6-e+g#``)~_+t+Sgk0}bI zDfocnnWVr=_1HIj*T4W0INbX9?oh?9H-u&*fu@%*n#dTt(C)fpz#|h_(okEx1dO)Q za8o=^!)4}8!aYNCZ?fj%*OR@*kkQnDofwQ}BVBVnRjK1(dk;`{;BD?H6VJc0-yjW+ zYpAGuYOGGndBs}KgqBD36MkL8MI0ln6V?D}P|p7N@79txZM4@4T9==j7P++M;GP=9 zuK;U5n=OA|hg+ZDeo|MyVPSrLPMccJRZ31p%VzaiJ(J2-{Au>-%#5Cyy&$mPy&xdezF!Q?iO;61D@qJM6zYQE7$9^m7y&8Fjwe zPWXUTx=lrI7aZ_OA4a?0ux?)jW!}@phlrdCtl#eoF}gR9J?uy-SJo|C&tsyBiB*{8 z2lh(Qbn*q*PB~wEC}Up;CrMkP^KRQ&;q?%YwJABey;*e39F0!-Xe>ytY^|HRV^tmK ztEOW@&)GKg{6?{8m57x#97|ugy_~WgGrtDi54Q>{_seF{3QGKsuTe6ePWU7YVr;T+ zM>D=FotC62GousZKr}(#OTGuJ(=XyAKQDOrM&01x2n*wj6vH+DH9t$aTr)#Y(4;=s z51Q1M;~c$|elX67f)TNI1namn#Hu3ya!=fRw&)k3hdSt%jEECoy sg!e*U6XQu@{DkwlZn*b^@I@3I=Sjdsxi%RgFDidZz7mjhdlCivNJ_l~c3tNlXI>r~w{FHX4U}kb z15Qs01^5y>^|QX4g&9b|&*Y_FdEWZQo8NWbYV>%^>+-hIZ9mbI08jV5={-t!_y&JE z#(!bCyG2k!x+wLUa+11YgP!6uWYa7Q1?<77@Fk(HfedKN6tr3e zt)9~66YC^()a_Wr2B$FaLIC$`Ax3>s z-+zhYl`WSQ!F0CV4cipO61c)C+O<(+LlWp4Ne4JN5?$i-Tmnx9fVtbYFbimfGqNS+ zIab+Z!m0~k_f25}E4VJOV%4^-3SyP2uo%vC(G_O#fjnbBWX^x(XJq}fDlDz4Px*tQ>MOg7m&y;u8Bt(F>^fp`)IZ)3p1I`f=m$m3Phkag zC^XD3N&bools3%2hj`Tf?nLa5xQeg#7gd`|y_WUsbU-Hiwu9YQcC>(l!R WicEU~okuTM|X diff --git a/build/signal_handlers.o b/build/signal_handlers.o index 6c87b3d1b72ffb1312e1a54962998304f0644ef6..19d2d71e39100c58e87caaa8a5cf67480a7e464a 100644 GIT binary patch literal 2032 zcmbu9&2G~`5P-*VN(&7o6oiU`h=nSCBx*HP1XVfUsz4D!fT~uMQ{p6sSani}9T5nE zK0+&T;L-|izzd*U0C9#R+(5}2zzq&jnc3_n%hurlW36ZQ+nL$j*|ncsym~33X&^*{ zH_+<|3h+JJvn^&?5QAZ8*WbNr>#%`n9l-j9t&s${_X%K8W-V=P0sBu4=;(I+EsGll zIQWNO(rTOsSb2f*t%TJOW4NY9GY=cbFutY3Yk;*;%GXRH#~7OPV|#lsY3QG+wd)^V zzSlEfV190H#yGi@tCoYRkxH3qb8;e8W!=={sVQ?ZeTrjD2M}j(0PW!dL~BR2L@db` zIL7%j>DiI^W@Jk<(453ZQl!`Hh_M;n(wDz|9ii^uglZgxAKPI*dguuN==g+*j+s3Cgd;kN1W4oLGa*F>RnoOEpi+jnt%$IDjjv2`oKBQy9L566n_&R6uU80aUcf3IzNkshw zqW?r#{j>a_#J;Hh^w$&dqW(0EIyWN7^7)@}y$2aJHJ$FTLP;Z$tX^;jADP{#wy;h--U zR+bhE`bsYMP+Qek7ncf}4&|z4SM-KefpyEa!E9Mvu`5^Yics;m!J8gDH!M!ta02f^ zat#O7yhnY6LiHpG^H=(`-zQXCsXwRiV+yYcKJ4d_!XH!g9l=x29as3I;ISX6Cj+@H zkmP0lfq5G>Zj^B4Zhx&xsDh4-zl{^nvxn8T8m|*7Axyi8iXE9ghb+KP_ znylg08>Y)QfcYNGs{YJ1YG!bk{{cxfre3Fy@{{pU4+ui^G diff --git a/build/terminal_utils.o b/build/terminal_utils.o index e0310c88a0ff79e57853b761016faf956e782953..a4550130ca6dab1a139a978eca07c2c6682827ba 100644 GIT binary patch literal 5480 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 Jd@)S>{|9(uc8dT2 diff --git a/go_install.sh b/go_install.sh new file mode 100644 index 0000000..ae07ef2 --- /dev/null +++ b/go_install.sh @@ -0,0 +1,275 @@ +#!/bin/bash + +# 定义颜色 +readonly RED='\033[0;31m' +readonly GREEN='\033[0;32m' +readonly YELLOW='\033[1;33m' +readonly BLUE='\033[0;34m' +readonly NC='\033[0m' # No Color + +# 定义常量 +readonly GO_VERSION=${1:-"1.23.4"} # 默认版本为 1.23.4 +readonly GO_ROOT="/usr/local/go" +readonly GO_WORKSPACE="/usr/local/go_workspace" +readonly GO_URL="https://dl.google.com/go" +readonly TEMP_DIR="/tmp/go_install_$$" # 使用 PID 创建唯一临时目录 +readonly LOG_FILE="/tmp/go_install_$$.log" + +# 日志函数 +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" + echo "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] $1" >> "$LOG_FILE" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" + echo "[$(date '+%Y-%m-%d %H:%M:%S')] [WARN] $1" >> "$LOG_FILE" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" + echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR] $1" >> "$LOG_FILE" +} + +# 清理函数 +cleanup() { + log_info "清理临时文件..." + rm -rf "$TEMP_DIR" + if [ $? -ne 0 ]; then + log_warn "清理临时文件失败,请手动删除: $TEMP_DIR" + fi +} + +# 错误处理 +handle_error() { + log_error "安装过程中发生错误,请检查日志文件: $LOG_FILE" + cleanup + exit 1 +} + +# 设置错误处理 +trap 'handle_error' ERR + +# 检查是否为 root 用户 +check_root() { + if [ "$EUID" -ne 0 ]; then + log_error "请使用 root 权限运行此脚本" + echo "使用: sudo bash $0 [version]" + exit 1 + fi +} + +# 检查版本格式 +check_version() { + if [ -z "$1" ]; then + log_info "未指定版本,将安装默认版本: $GO_VERSION" + return + fi + + if ! echo "$GO_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then + log_error "无效的版本格式: $GO_VERSION" + echo "正确的格式例如: 1.23.4, 1.22.0" + exit 1 + fi +} + +# 检测操作系统 +detect_os() { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS_NAME=$NAME + OS_VERSION=$VERSION_ID + log_info "检测到系统: $OS_NAME $OS_VERSION" + else + log_error "不支持的系统类型" + exit 1 + fi +} + +# 安装依赖 +install_dependencies() { + log_info "安装必要的依赖..." + case "$OS_NAME" in + *"Ubuntu"*|*"Debian"*) + apt update -qq + apt install -y wget tar curl + ;; + *"CentOS"*|*"Red Hat"*) + yum install -y wget tar curl + ;; + *"Fedora"*) + dnf install -y wget tar curl + ;; + *"openSUSE"*) + zypper install -y wget tar curl + ;; + *"Arch"*) + pacman -Sy --noconfirm wget tar curl + ;; + *) + log_error "不支持的系统类型: $OS_NAME" + exit 1 + ;; + esac +} + +# 下载 Go +download_go() { + log_info "准备下载 Go $GO_VERSION..." + + # 检查版本是否存在 + local check_url="$GO_URL/go$GO_VERSION.linux-amd64.tar.gz" + if ! curl --output /dev/null --silent --head --fail "$check_url"; then + log_error "版本 $GO_VERSION 不存在或无法访问" + echo "请检查版本号是否正确,或访问 https://golang.org/dl/ 查看可用版本" + exit 1 + fi + + mkdir -p "$TEMP_DIR" + cd "$TEMP_DIR" || exit 1 + + local archive="go$GO_VERSION.linux-amd64.tar.gz" + log_info "正在下载 $archive ..." + if ! wget -q "$GO_URL/$archive"; then + log_error "下载失败,请检查网络连接或版本号是否正确" + exit 1 + fi + + # 验证下载文件 + if [ ! -f "$archive" ]; then + log_error "下载文件不存在" + exit 1 + fi + + log_info "下载完成" +} + +# 在主要函数之前添加检测函数 +check_existing_go() { + if command -v go &> /dev/null; then + local current_version + current_version=$(go version | awk '{print $3}' | sed 's/go//') + echo -e "${YELLOW}检测到系统已安装 Go ${current_version}${NC}" + echo -n "是否继续安装 Go ${GO_VERSION}?[y/N] " + read -r answer + if [[ ! "$answer" =~ ^[Yy]$ ]]; then + echo -e "${GREEN}安装已取消${NC}" + exit 0 + fi + + echo -e "${YELLOW}将备份现有安装到: ${GO_ROOT}_backup_$(date '+%Y%m%d_%H%M%S')${NC}" + echo -n "是否继续?[y/N] " + read -r answer + if [[ ! "$answer" =~ ^[Yy]$ ]]; then + echo -e "${GREEN}安装已取消${NC}" + exit 0 + fi + fi +} + +# 修改安装函数 +install_go() { + log_info "安装 Go..." + + # 备份已存在的 Go 安装 + if [ -d "$GO_ROOT" ]; then + local backup_dir="${GO_ROOT}_backup_$(date '+%Y%m%d_%H%M%S')" + log_info "备份现有安装到: $backup_dir" + if ! mv "$GO_ROOT" "$backup_dir"; then + log_error "备份失败,无法继续安装" + exit 1 + fi + log_info "备份完成" + fi + + # 解压安装 + log_info "正在解压安装..." + tar -C /usr/local -xzf "go$GO_VERSION.linux-amd64.tar.gz" + if [ ! -d "$GO_ROOT" ]; then + log_error "安装失败,目录不存在: $GO_ROOT" + exit 1 + fi + + # 创建工作空间 + mkdir -p "$GO_WORKSPACE"/{src,pkg,bin} + chmod -R 777 "$GO_WORKSPACE" +} + +# 配置环境变量 +setup_environment() { + log_info "配置环境变量..." + + # 创建环境变量配置文件 + cat > /etc/profile.d/go.sh << EOF +export GOROOT=$GO_ROOT +export GOPATH=$GO_WORKSPACE +export PATH=\$PATH:\$GOROOT/bin:\$GOPATH/bin +EOF + + chmod 644 /etc/profile.d/go.sh + + # 立即生效 + source /etc/profile.d/go.sh +} + +# 验证安装 +verify_installation() { + log_info "验证安装..." + + if ! command -v go &> /dev/null; then + log_error "Go 命令不可用,安装似乎失败了" + exit 1 + fi + + local installed_version + installed_version=$(go version | awk '{print $3}' | sed 's/go//') + if [ "$installed_version" != "$GO_VERSION" ]; then + log_error "版本不匹配: 预期 $GO_VERSION, 实际 $installed_version" + exit 1 + fi + + log_info "Go $GO_VERSION 安装成功!" +} + +# 显示完成信息 +show_completion() { + echo + echo -e "${GREEN}===============================================${NC}" + echo -e "${BLUE}Go $GO_VERSION 安装完成!${NC}" + echo -e "${GREEN}-----------------------------------------------${NC}" + echo -e "请执行以下步骤完成配置:" + echo + echo -e "1. 重新加载环境变量:" + echo -e " ${YELLOW}source /etc/profile${NC}" + echo + echo -e "2. 配置 Go 模块和代理 (推荐):" + echo -e " ${YELLOW}go env -w GO111MODULE=on${NC}" + echo -e " ${YELLOW}go env -w GOPROXY=https://goproxy.cn,direct${NC}" + echo + echo -e "3. 验证安装:" + echo -e " ${YELLOW}go version${NC}" + echo -e "${GREEN}===============================================${NC}" + + log_info "安装日志已保存至: $LOG_FILE" +} + +# 主函数 +main() { + log_info "开始安装 Go $GO_VERSION..." + + check_root + check_version + check_existing_go + detect_os + install_dependencies + download_go + install_go + setup_environment + verify_installation + cleanup + show_completion +} + +# 执行主函数 +main + diff --git a/test_bash.sh b/test_bash.sh index 2ed47c5..cfd37b6 100755 --- a/test_bash.sh +++ b/test_bash.sh @@ -2,11 +2,12 @@ clear # 清屏,提升体验 -/home/qcqcqc/workspace/bash_go_service/main # 启动go程序 +/root/workspace/bash_go_service/main # 启动go程序 HOOK_EXEC_PATH=/tmp/exec_hook/intercept.so CONFIG_PATH=/tmp/exec_hook/config +mkdir /tmp/exec_hook rm -rf $HOOK_EXEC_PATH rm -rf $CONFIG_PATH cp ./build/intercept.so $HOOK_EXEC_PATH From dbccfb6a57e4999309a5c65a906ee0e8564ee942 Mon Sep 17 00:00:00 2001 From: "qcqcqc@bash-agent-dev" <1220204124@zust.edu.cn> Date: Fri, 25 Apr 2025 16:49:19 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0etc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client.h | 2 +- src/exec_hook.h | 4 ++-- test_bash.sh | 6 +++--- tests/socket-client/client.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/client.h b/src/client.h index 54b06f0..61c7e9a 100644 --- a/src/client.h +++ b/src/client.h @@ -12,7 +12,7 @@ #include // for PATH_MAX #include -#define SOCKET_PATH "/tmp/exec_hook/exec.sock" +#define SOCKET_PATH "/etc/exec_hook/exec.sock" #define MAX_BUF_SIZE 4096 // 函数声明 diff --git a/src/exec_hook.h b/src/exec_hook.h index 02e7a90..a154769 100644 --- a/src/exec_hook.h +++ b/src/exec_hook.h @@ -30,8 +30,8 @@ #else #define CONFIG_FILE "" -#define LOG_FILE "/tmp/exec_hook/logs/execve.log" -#define LOG_OUT_FILE "/tmp/exec_hook/logs/execve_out.log" +#define LOG_FILE "/etc/exec_hook/logs/execve.log" +#define LOG_OUT_FILE "/etc/exec_hook/logs/execve_out.log" #endif diff --git a/test_bash.sh b/test_bash.sh index cfd37b6..dc9a6f6 100755 --- a/test_bash.sh +++ b/test_bash.sh @@ -4,10 +4,10 @@ clear # 清屏,提升体验 /root/workspace/bash_go_service/main # 启动go程序 -HOOK_EXEC_PATH=/tmp/exec_hook/intercept.so -CONFIG_PATH=/tmp/exec_hook/config +HOOK_EXEC_PATH=/etc/exec_hook/intercept.so +CONFIG_PATH=/etc/exec_hook/config -mkdir /tmp/exec_hook +mkdir /etc/exec_hook rm -rf $HOOK_EXEC_PATH rm -rf $CONFIG_PATH cp ./build/intercept.so $HOOK_EXEC_PATH diff --git a/tests/socket-client/client.h b/tests/socket-client/client.h index 54b06f0..61c7e9a 100644 --- a/tests/socket-client/client.h +++ b/tests/socket-client/client.h @@ -12,7 +12,7 @@ #include // for PATH_MAX #include -#define SOCKET_PATH "/tmp/exec_hook/exec.sock" +#define SOCKET_PATH "/etc/exec_hook/exec.sock" #define MAX_BUF_SIZE 4096 // 函数声明