From 4879a6edb963b021b617d2d4cf833eb36e47b38f Mon Sep 17 00:00:00 2001 From: Richard Su Date: Fri, 13 Jun 2025 17:16:59 -0400 Subject: [PATCH] AGENT-1205: Extract agent-tui during boot for interactive workflow Created agent-extract-tui.service for the interactive-disconnected workflow to extract the agent-tui and nmstate libraries during boot. The files are extracted from the agent-install-utils image. In the interactive-disconnected workflow, the image is available on the local container storage. They need to be extracted before the agent-interactive-console.service starts. --- .../files/usr/local/bin/agent-extract-tui.sh | 19 ++++++++++++++++++ .../usr/local/bin/get-container-images.sh | 1 + .../systemd/units/agent-extract-tui.service | 19 ++++++++++++++++++ .../agent-interactive-console-serial@.service | 2 +- .../units/agent-interactive-console.service | 2 +- docs/user/agent/agent-services.md | 2 ++ .../agent_installer_services-interactive.png | Bin 42764 -> 42915 bytes pkg/asset/agent/image/ignition_test.go | 1 + .../agent/image/unconfigured_ignition.go | 3 +++ .../agent/image/unconfigured_ignition_test.go | 11 +++++++++- 10 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 data/data/agent/files/usr/local/bin/agent-extract-tui.sh create mode 100644 data/data/agent/systemd/units/agent-extract-tui.service diff --git a/data/data/agent/files/usr/local/bin/agent-extract-tui.sh b/data/data/agent/files/usr/local/bin/agent-extract-tui.sh new file mode 100644 index 0000000000..a839728161 --- /dev/null +++ b/data/data/agent/files/usr/local/bin/agent-extract-tui.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +set -xeuo pipefail + +/usr/local/bin/get-container-images.sh +source /usr/local/share/assisted-service/agent-images.env + +echo "Extracting agent-tui and libnmstate from agent-installer-utils image $AGENT_INSTALLER_UTILS_IMAGE" + +container_id=$(podman create $AGENT_INSTALLER_UTILS_IMAGE) +mnt=$(podman mount $container_id) + +cp ${mnt}/usr/bin/agent-tui /usr/local/bin +cp ${mnt}/usr/lib64/libnmstate.so.* /usr/local/bin + +podman unmount $container_id +podman rm $container_id + +restorecon -FRv /usr/local/bin diff --git a/data/data/agent/files/usr/local/bin/get-container-images.sh b/data/data/agent/files/usr/local/bin/get-container-images.sh index e1221c3b1e..899ed2267e 100644 --- a/data/data/agent/files/usr/local/bin/get-container-images.sh +++ b/data/data/agent/files/usr/local/bin/get-container-images.sh @@ -14,5 +14,6 @@ SERVICE_IMAGE=$(image_for agent-installer-api-server) CONTROLLER_IMAGE=$(image_for agent-installer-csr-approver) INSTALLER_IMAGE=$(image_for agent-installer-orchestrator) AGENT_DOCKER_IMAGE=$(image_for agent-installer-node-agent) +AGENT_INSTALLER_UTILS_IMAGE=$(image_for agent-installer-utils) INSTALLER_UI_IMAGE=localhost/agent-installer-ui:latest EOF diff --git a/data/data/agent/systemd/units/agent-extract-tui.service b/data/data/agent/systemd/units/agent-extract-tui.service new file mode 100644 index 0000000000..8d0f02c624 --- /dev/null +++ b/data/data/agent/systemd/units/agent-extract-tui.service @@ -0,0 +1,19 @@ +[Unit] +Description=Extract agent-tui at boot +After=selinux.service +Before=agent-interactive-console.service +ConditionPathExists=/etc/assisted/rendezvous-host.env +ConditionPathExists=/etc/assisted/interactive-ui + +[Service] +Type=oneshot +EnvironmentFile=/etc/assisted/rendezvous-host.env +# Temporarily load assisted-install-ui here. It was previously in agent-extract-tui.service in the +# agent-install-utils repo but that service is being removed. +# TODO: Remove after assisted-install-ui is productized. +ExecStartPre=/bin/bash -c "podman tag $(podman load -q -i /run/media/iso/images/assisted-install-ui/assisted-install-ui.tar | awk '{print $NF}') localhost/agent-installer-ui:latest" +ExecStart=/usr/local/bin/agent-extract-tui.sh +TimeoutStartSec=0 + +[Install] +WantedBy=getty@tty1.service diff --git a/data/data/agent/systemd/units/agent-interactive-console-serial@.service b/data/data/agent/systemd/units/agent-interactive-console-serial@.service index 2e83d97441..aa14be51e0 100644 --- a/data/data/agent/systemd/units/agent-interactive-console-serial@.service +++ b/data/data/agent/systemd/units/agent-interactive-console-serial@.service @@ -1,6 +1,6 @@ [Unit] Description=Get interactive user configuration at boot on %I -After=dev-fb0.device dev-%i.device network-pre.target NetworkManager.service pre-network-manager-config.service selinux.service +After=dev-fb0.device dev-%i.device network-pre.target NetworkManager.service pre-network-manager-config.service selinux.service agent-extract-tui.service Before=serial-getty@%i.service network.target network.service agent.service node-zero.service NetworkManager-wait-online.service ConditionPathExists=/usr/local/bin/agent-tui ConditionPathExists=!/dev/fb0 diff --git a/data/data/agent/systemd/units/agent-interactive-console.service b/data/data/agent/systemd/units/agent-interactive-console.service index 14cde17820..c427b9cc14 100644 --- a/data/data/agent/systemd/units/agent-interactive-console.service +++ b/data/data/agent/systemd/units/agent-interactive-console.service @@ -1,6 +1,6 @@ [Unit] Description=Get interactive user configuration at boot -After=dev-fb0.device network-pre.target NetworkManager.service pre-network-manager-config.service selinux.service +After=dev-fb0.device network-pre.target NetworkManager.service pre-network-manager-config.service selinux.service agent-extract-tui.service Before=getty@tty1.service network.target network.service agent.service node-zero.service NetworkManager-wait-online.service ConditionPathExists=/usr/local/bin/agent-tui ConditionPathExists=/dev/fb0 diff --git a/docs/user/agent/agent-services.md b/docs/user/agent/agent-services.md index d043629015..60b59b7eef 100644 --- a/docs/user/agent/agent-services.md +++ b/docs/user/agent/agent-services.md @@ -60,4 +60,6 @@ so no connectivity checks to the release image is needed. The interactive workflow allows the user to install a cluster by using the assisted UI running on the rendezvous node. In this workflow the agent-tui is also used interactively to configure which node will be the rendezvous host, and to configure accordingly the other nodes. +* agent-extract-tui - extracts agent-tui and nmstate libraries from the agent-installer-utils image during boot * agent-start-ui - runs the assisted UI on the rendezvous node + diff --git a/docs/user/agent/agent_installer_services-interactive.png b/docs/user/agent/agent_installer_services-interactive.png index 1d42b0eee6d19ebafc7cea78e2e2a8b21b93b318..ae986eccc000b3645ea03b98d42f95a3a7d73114 100644 GIT binary patch delta 20585 zcma&N2UJsA^EZs*1q%VaDpf!%fE4MVbVWg=cj?kXZ_@UlOn(T*59#y2JgAF@h&4(P7W%4b#ykrabu)mF2Dmz zOG85=)H8S7Uq;f<@Y9h_ zDLWe)85&|+mf|86pF!v&rb<2D87`0s_+_7t296&NC+EUI-VSG(PSEHA41_Z;hS|o7 z4VL4%L*`>qmJ26xb_xj2HT$y%d(;LyhsAo2?34@7=}*$oB;JxgMWZZM#7D#4#gifH zcZezV1m5gobz8=M2N&$mwCK!v3JA7vZqNm$ehj!uL!+GfNrk5Nug{j0e<*(q2G$oB z6(KR$XYE#;!5@uKI;qAK0PXtdYNGU*CW2=f>kl!lM^Ku5o4SKU=|0y7fmg{o1Nb-y+CUr>g@l`>y!i!O)Gz zU{`*oqkbRu9oEksvEr9erQ5rzo1cEf^+>u1LESTSDzs>Br*jBdU3TD`11yVKVWYiB2Xi@RkWd$XG=9M+umSdH><4{E zp7YZibA{Szr6`*TR>k(M#)%qNNR2!5IwQ zJqPr>0oxUc=2g8_cD81J513)|4t(QvI#<#L zCMS5kV7a$6&}Sr9pMgEfPDVkXqh3!4)f1Cb{k=dfzuKuN2JBd@C~CNa-!3v7U@bA2 z0jFSuY64p;B%&6LI9-Z7{J`#bx1xT3@Nb6aO3Md8EB^7E9K6l$h?u0X46@o(%za`N zQpmnn0a6bK)a7h?fukwVvcjajMsoM;ZN^3YRf8c!J5Ut-cH5PpKu-V9Q$u^CFjGu~ zx3#|6oV4r4|M;J+jl)$gUjgYsDNm}Xu+l``Qy2<;B0jhZgjt=DEIoy0U-_uqb;|76 zW`L@Fp8XSzE(789PJ6Re=cy43JEj!XKd1PK_Xin$wFwk^l zXF4glopkrjK_J21A zoK_9@N&F?JmRF3YC2_s`uma7Rg_C~0ZggjAtg>%!^hB((I9(37dED`PxO z^;H!dVAxj#Jm;A%2@xIO?_8{>pt*=2hRo~|gW+LTr?;WmA=N~`5Z^=gahUlIm1nZn z0ddtx;zSO@&`27<(+ZD0>MjyrP^TOJM>#TZ7b3wXB%c4?$J;q@scn)fvn39Ve_I-v z8Yd$%NSJg;RTcMtzs9w)_N97hDdDaCvTUEZQ%v_IxoZ@R<~`x)q*kos-?E;m0TnhR zYscLe$~Z?Vu4#^2{bCag+5Nma(@X9z7(WFQqvnqCG1dX9b*CW{^ zH4PL#ejc~tMOC!qQPmtq?CB20DO8);`|WGwu#GQ=bJM*RK9F4ewZYslx?r|kgDyjn zs671cfGzEO)cKmkEZ8B6$gxvsXGncy)}Z+St|@>MMZA`lsTLYhCo-fO zvwvfKh%UFOn(R9$@M8qVf(hn4IZ=$4G31BNezJ3JD_20r4CUq|i@#tz! z5@9W8*d74bLy?;9{+}jR(3OH19?0v&`Fa;=E%Z$CneC9B&A%r}vh|Ab{pJcYhl^70 z)U>wJiX)9hJafDYc#4;UQ-iNA48kK_So0ZVAV9dG$eq4LC_I%xF(6L*?SQCxUoWeN z_=4{SD5}xV*R2Y=Qa4g#L?p2OJK|dk>8KbHm5D;0Tzt^Dw3J(Nb~@ zn;urwfJvHE=AynWm_$geE6U|^YzCb<@EQDHPOS=K{JCw6>SKx%_R8_0rlE01ohRXAkgPZ-w~nh(ARhA0XvP(69P)<9b0Pw9bo+xRt9uzBrvCdjs_9z~|}P z@c*Ie>Mv~m+?EdX5St_S`T^xcJHs*I)f4|U>QE&5qSK}_{^Fo(Sm-ZN?D6|-Am+bD z`HN`jxoz)kVkhB zcVUsUR#5(>xs!dGy0}vW;(uPB`OoX)acOjo|LiUR`l3gVvgv=8T(weNaP0enjYo6$ zF5+X>qNCpvqOcqj(p>wGScK9n)*Kil4*oiBesTIg?4!BHTQpU~R~`Or$=72K;+{g) zN{*Goc#Y7W(jP8?N91=#F9Olb1g)L&lqM9f@JR3Rrd_p>JvAjXxOp=6;ripyI6r>0 ztoUGmSn@WF8PnWx%mcF6Ek5h3|L|c)msPvW*y)^P99B7()+liBiU5V_O5o@>joTy` zYBr?p*Ebwn4zk&wczEz4EL_p-d3O$(zSlhX&n!&g0DaoJ0|!&Ih!l42IfZuLQZ*~$ zybDk46iF9Yk8Rj$A+KF@Z`C<7s-!QS^Pt&}*ramAcH%j4ojC>!$1qS>Ih7D>ecjM- zpzW{?2W>kRonR7Yqw?ZlFA};f>3S+;k0e*H`66sC9^?2J%W$u#iamIK zOv$%+ZSN)SP*Z~8&)pNTLU0I9j-9ZlrxtW6#Y!z*xL=+t$Q{V%lI9%9o2XoAW=;z)wU4{?b3#_LcZ%(Q^ylxVnpc7EjP(28 zr6(@jcQ4dy;ex^^^|Vv}itNu2R7%|&UPBIr>Ha;8a`Y$89snLQ$J+4Wec!FH{fr$Y zF<|_u+UdFsf5jgnP-F%n(bTJ`sOX8P&jyQFE^W>YNuSx2&`3s3L+0at*)fBI5FllU zuY-N{$nveqG6DT(C25UQN18>=lo;+C^4B8 zeFnc{rBFWk6v>l#-v%iag+xSqF`kGHes~W-v{~K0p&>T<#|J+1!UnE;_NC1@ zzb)N=_;VgJ7n(wZd9eb~(yY+a`MRvo*lSR)tBHA+?2a~;aI8cxPJIxKUfFTP>~vXe z1{Cz#pV*QV6w0J2V7StrK+8%I^GJ}DC6d749Y zdL#6KP&u+9WE+kB$=4T^pMTFpNnS)A)4Nd|o1YpQu)jFJOzjH=qVkh!LMbhX@{dEXvo z*owXeCB%iN*8nvS3lsUY|XBBIctZhrDcK39987YsrM)&W|-GCyC$-_mK zOr(a{-LI8}!+ko3E%%z?d+v2x_YP6yT|1{ot4K!+vS!Gh5mOs+bB|)M-&c>v%`N}f z+UIaNG|G}*iV!>qiQjj1aw;YxU@snOWuO5jCET1-DZX8`@3E_!g_5r}x_@R1n}2R2 zF#qG57R2pRk2e(qHFJ6_a5OHoX7lG^eejjlte}G$(rPd#tR6F;+yd{i4l36ol6^u* zk))uC#?5lC48<&l6pq4u>u@_KDm_<#^MrwxLR#XcNQ%5!R_M2fOuOcr&t6eW=VT9g zBt1YAvPCx?-$KlqubXshIoO}0u13+dKPKP#t_d7iZ(PZo6L5_$Q&N(P-10~r`nr_` zTeKq~Tx{5ZkGq#gUIw(XcfuLu@SXuriu%1N=(wLUbMwm7K?9F%&yc<7z1o9#E|!_x z-hJ)|;TsyoLTZdI5X96|7Ex-H$P9l3FfC!-* zreI=X^@UO-1sBq~`cua)i2b^y2B)C8DvwHj%QZj)`}I+-w(RoX)Xx%KFID)}xc%Q@ z=02+J1{f*ft`3Cg94bhD@}DKrP|GwbwyZO^g2J~;JzD0dpou-WuFXo^^#1Tsti22h zbHAgxCDXEgk&D>T9B;S$R;MfDnRa7&sX14m?fhXOdX@Xxn)Rmx>TX%|zH<%72DQ;( zfCT6$P|s4kO_n2e{ip1dfPDo6!U&&&G+yZ|lNzOEEhHQ0caYhWSPs1)7cco3HwkIJ zq>^!L6W-9gW`#;8dJeu>+|Q3J&lH1>Pn9Vi46rDD3s@N(+MFn^ne+U59%I*~ZIekG zhrXkkGBi{=K!bU&LXV+l=h#gBt-%D4J>R8?SteTtabkQ@O1!2|gr}SxkqfBU7Rmep z3xRF6MZYArkXF{2uC)3V=|`$@1^45}ub#cRa6PRJ8|AuZS<<{4LVsHi2(=Vw*-O!e z)hMD(=EABLtV8G4L=X1OsT<^#F_~7n0~T{}tc-7y(Lp*FCGU_m94~_8jG-`a_|C{B&10Vd7 zY(#$K+{@w6JaDlKUG;5I`->O2)oyV?fw@_%AIo6l}u7qN>l4k#{LTu5w z5mXE10!AaHCtE0hL}9`vF2t&OEDpRQJ0L@6FU!0ne%d|}y~`=<&ydn5nto^TA;u9k zd+&<>FM8q3Takk0&2XiKi~-x_1Py;plfw8GUQJBPQV>RMzzVX1=^?nvOi(}Eiaoa=&AzSseXr#Ihw}m4+Xa{Q5hOji3dXKFRM0=U11t0d03@Ky-hvNW;sH^ zwXADcWPI0Q;zQ-`XM24o)6Udnheytn3^jf-6s^WGD?>A5rVOWM1~K7MK4dcJ1?uq1 zMcS%}$ICDHQ{NyeT(fID0xRxuN%TKsgPNguqRosi=-d{LKU~Ns1)YU-TlloQ?;~Oy z_)ncJtzbbkItT-ijG&pi@=O(Jt?6dnY-Nw^J|z*ZukbUm!p%~NpX4VG}m(h3u6(P#k=HRKS|Twq9d}Tt1aI8u|WH07l5Eq(_ZV4%*~uw zQ&Jh3vD36zk6?Ec1xCI*$4KsLw$F^u22uvE)L6-~s}}l_TnKVcf9~yzMRN8F4*bI#PW!rz7@o}PF@^4s?i;HAqh6s9bx90>)uWTN{RXFeQyjs1xT8u14@h3 zPqThQHer2Y*il+t$WQA{9}6eh?kiKi=^>va*)*F2_F{H+!B98 zNo&K3Limh!P4o!p=`%B?BuY<<8!(bNeI6W0185kzs<8xT)0H*#RbEF?X6utJI#z~k z4I|IZ%aWcUQVY4B)l;<^ST8S4Q{Utg8laypsF0L0VS-QZMYTzXX&L?z@@O= zh~W6Hm0OMbqn16Vr8<4m=^0|0I$c>A<0;ys{^7$N4w)O(Uc1`#jIHf6T^DD-}JWCCp z8uKu~+_?{;`m!Jfc6)Wtr7<_o0iKGzma4kpua|1Gl%}k=D1p5J`I%Vk(9Tib@DA=q zn6ck!$`YAs*YtVUgqzb8WCJ`@l1*>#*Tw zisfC+k@HV85O8-FQ}i`q6x;ijxVv>9n?OKOvdoxxX<=hIzW?X=6C32>cZxFkuc^_w`UGf;A%F;tlj8rw(1ql)LNdB5Y9eaLThdQsIL6Rv$r zdDG6+i|tztJn6ET6=9I3ncpVC(yvl%;i)hog3t8bQklGADRO4ApS#0vOKUZ>A;966As!3w>r=UHv>nITTH1a!0(9ZXoc7)=vj=PzdL z%m7N7DOGt69M#11Dm6Cl=!7?N2Iz6{5I##iyEG^>CJ>&UE*~3R%b+i&Arcm;;C!#>7donpzO)W2RZHC|Z>;o%MS%yniZ5;0 zFU!}{H)Pw6p{JC~u^u@15>^ojc{vv3GznAg;ZMvd3}z2K{AyK-dl$O)@t`dKYCnHe-QNO8(F0~spYDT?RVpyG$M?wf4~_qV{PrPXOC zm(Dr4U+Qnq2?Z1B?x0B2bs##XAm&?;2BCoaPjE>XRiF)!bpfk%-?txxr5r zM(tahvMhn9S=!Y>gRV$oIiIoNUWYCTJJKcD&HPrC<66%SQBi@CX96k63b)`p@ltcQL(^+0X z=U+Fe|2Ud!fDpld15sP#Wd!!Umg@TDv}@vGqtR;U?y|^B_lt5wvFs1AUzPdQZ*|UO zAIID;9;O?E_w~gtxW;4lie!|`<@;b<`}Q*f2&*L8Vj;4}N9IYb^W}EU;q$V6e)+rg zGuDLrdzZt#A1M6_ogcWdQ#-20o9k0)+=UF;Yi}4PTOaQlA^!%aewNhC;}@;d?U!$F7Sti{fM zh2wjA+xsdtQLvzsef@OKcuLRv9{YN?5)kU?ENfnR)%2%d6Uko*VhNjE!2c_zEX2uO z5K9EsTGF|wlH-9Owv=f|2O2sl39O-X&K)C8IX@V6?@WB?avJApDK#1Gk|8gw$Pse$ zA7Dxcr(8q33!-3sOi1YIx>&;L2^y(;UEXFZvuFwdi>Q&F? z>l&z)J9`||QgB%6t>l@n$Kc|9W?q?7jY}Le09Z&7N3I^L?nmzXyd-POn1xY*>gIRi{vYOa~>|w{i z&o~?tf!TnQt?Ld9H6t0M|1^L#Ew8cStCwYtcl)R@d!}*1+zELwp#CR24mR=2wUODi zZU3ZY!T)vZV}5+Y>`7PNV?63{^njH#vkr(!Umpa~*XDoxZn6u1vJe?rd2pI1LYFdX z!E{Xh_d}*Bn%x?kfV(FU>VbOyhu>x3R^i?{p{KZpTYjf%l4&4KKVVK~tnT7-!?u#* zmgUG>bxen@F8FW+FD3{#?$KI%BdUXM4)*I)m!nRmi3H_vbH+zyF+Z(27?Unb36m+E zYh8{|-_#)xI?sVME$u4Om;U+vLQ>`VN&9S}JS1WAVtocU#Ig>WG#Wp$)C#O)CN1^lUDU1tk?T;$51)rC=x=kqDdV58RNRnt*X=Prd`^k9Goo1a zDi5SzA3)0CfM4s5ZRN!+WJGrjZ~1B`1T1y=-$qU(G^sWkQ#1(B`nSGukQ zAncIM$t~N;YJ?}5qmY{xePN|p*)>ork{G8u&0j2TalwhK9Dgcpvm-vdM@_xM@Z0F9 z_7$o8omo$-OsaR8P1KuGmZjF8Hd^@40PwpFwI{5X`R-sFS?tGjs44W`7Ur#8u9UxV z*d%-*l4elW?V{7{*PF@De-1cWZqIyYfrfl%_Kh$z6B*c@!7RLWRGPJqwnm$e)lF0X z5}Qoi=$!`b8rItXs)KW2XFswwOj570_btx z*}*o^=f`=Xh1))F@nw3?*C4E)AJCHTfH{u0JwNig3IK(@%7vw!mC3E>+eStg(VZ#t z_rfyQCu?wJx!UpzlWNw1c5T5|3>DAXxe#JJLxImfw=NqP8CmiL#l{zZ4uWm;8A;V4 z6yJ#j9O`V`y`HFJK;YVU>Pf!{G(1}Z-*fq>H>1G-b!U zl0a}h=!DE%i8-30FYqh6Ce(`@&W_UXcvqPX0ze}F5Sx>Ob2!EQzRVr|tZ!k8(4D@; z->&3WT(&nXXaz_2TQ<*BEqG8u*EVQ#if(f%{ao%Tsjv>Z`PooI&p@sUI`wWct7#do z%d;9uQ{uXrvEFIm6X>>+TO;`q6D$<*OWpg9-%fj0OVufwRUltra7Lq32f51Z6fykX zb>sP$&Dq?@C27I!7gl3Ac3tEOG-XHxzpgjp2U=8My2`GQ98OH%T&`@F{r;Y~`Fs}7 z%rm;f9&nJM~XqIzzJ_Ar{TVCW{xwp3c{DwD2vT zt21wiNAD}05``v7sbakwRQhnQAkvu}7ISv^bD0iU5aqH<=1H_I$NXFp$NoyP@hoqdX>ldXz;GM#bOacl-ZCj+HEH6&|@|y zsus33qz3f23ME7Wr|@(m$UinQGN5f4<0arJ{Sl8A~OCL;ss+ zngBStzyq5bdB{vPVVLOC_g%K)}WtuVPxxS{~ zs{SshT;(Tt|8glw(3ci?^>FmkO-|6#RPWybb5Kexf3f9A5;lDfb1Sx$8t(}S2naBr zs=6{wCuP0Y(fW1o@VnKPP>D)gK*PP$`Dzb)DskX35shyFmt-hZVD>lSLfXX>wuta- zJ`ozkNhu?Bj?3U?MkU0l&^VdezGTgj)DR=mc_%-yN_^)V0t)SBG7C?lVsTkB;$0>W z!ZnOvUi6l(K~k;WJ)!pn{Hu3Py-2=k{OZEvnoBhv=N(@!KI~S<;m}`AZG$e{Uq$qk zm;qnQWl6WV$IZfRGS3*or=FBf&<^Xs(WjCXfL=6@amQBTao@YK=X!&DY) zqSAf?&^eqic$B1=plmJT3<}XXs-u(e-A9Bp(6rV$u_t*3tTz}|Mr>xW0^h)0iQg}ziiy;>)#X(am}gH{ z?VrAk_|^%@8@~$S?eM$EMFMK36-mutbn_&03)S2~9b;_yP4xVwL4BcgWnF3S69;4% zg(lhnk#igCp8LJlFBL{5TWdbW^fcL@yh`u zvK>_=E-qiN|B@%sy|qb+fWtt5g*$17Ys5_oJ*VG4n4u+eirjh=2AB@lk$RN!y7XXb z2SD$Q)2*`8H51z~WSJQ^4WQwm^Y=v;E2lRVfqSG1%5Th-x^Q6lZi=KRcIOaplXIc; zz_VeCYrZXMbNJ^)jBCd>+GCVfeQWzQoSF4%jG|I-UpZKyIRo=Y?)X% zNC~Rg(B4fuJi@S5+f@b*uh+XL^l&M0SM9Hxy2KPSW`Z%&6ZXg2#|joMiM-@!4MSr- zCur<~H`+N=H~=F)7>U1Q#kt^y3_=<7Xh%}}1n6LdE7`9MLxwM9Mb)$& z&`XLcTpoCgvk2*}5S`f^tjfi7z9O|Z4pWbyd*tC~!A-c>B#QdMi(-WP;s%Un4V(s! z({`J~`NQ0`zuyd=B967h&*fJOT;VF)z9m7}=TZoMS#|Te2?e(UMM9pqRa%>ljakE* zE`K70M>0UR1nY(Ur^Ej>6^&>O-UtC_srxgv+op$5w_gDS}S zfVl{1RoHay#4yJbnerxJI23=i|L@-EsWhScq^3-Ko@*(+gVcL`ZSCW% zu49YYs~#Z#OEYjlq-8hriJ6856B;a-k1JPO9Rl5-y=W#=fmR*De9rFkispkbx*$gC zh_lVE?4F2YN4<`|Ed1EiHq?z)>Q6TRn3@J{hJCCg2}tlBNl1V_T-m?fd|2_stmzSM z;z;qecss27+wQb7f(3(CMlRc>GI7aZp6jjGuV)f;_Pl=Uo=kxQoL0qjqAj@6n&cZ)layU_Q_jNxNyKhaV-0hKQf(>sN^woU2mT$YZOBY zn0t*9we(qbHbsA|Ez5+OwSDjWu{U1WD?hfwoCSjpS07Bgu+`aJrwqhE&5Z}Ngw-H5 zb-1|+42a@ zx-hG4UAE5UJZMwgPyFrSd_qHTJYxgqVBXQzIsdVzD2XVyv3DcS$MyWjbFUZO1y@g) zE+fFC;^>4+&%5jHH$%9{|A4oiFki74%Jr$IwYdQ+bTx(jZB)EgJ?mu+31=jLXhY4+ zYpZK4&nM#ftM=W6Nrpo~#WEG?#+v0eNYnOTU+oUBXb7^bZpkp@j`L{oK2&Vi6!A1t zDs@D{f{MFRtV(WaL4w_{8({HS>OL9|85P*3)AV1n|Y}f0vX-lHI|YotI)>yTasg zj{J_PI|#@tK>*C8`8HaCJe`QZfo)l^qO;Mz+b5%T1as}%j+CKUJiax5-D$s8NZ$TN6(v_b$NZvNqz<<8nz83>KN8GrcWm7=^ zdWAG}5M4kFGbWO}nubeUBP@rc_+FuT#;2|F%?HpRHuK3rLC9$riRfocA!V02usvfx zn7EL|*a)S)HB=Z)(acnTQd@VhZ zbJsw~(o>GKWbWBC_GsMeDf!NB-mc7c!7rUcs?-(Z_s^(c9?bKN8k2uL0MUB2lQ!Bk z-JS`*JP~4)QRp*DWw*+vy7TuWPahT>0uYuF`Kz+^1UWn((10ydv_)5PjmmRs+(x@S zktqr*s4cQ7XugMg9CRsn!_hClpq_sr2LyuQ|+A_!}C8F#E>5Q}! zMQ|4C`H%jii+yk5&x_SED#~}tVUK)<9spZK4H@HtA&X<i0f_1AmJPNlL2w#b@#f9i#&NOpzOeR?@D~c$pg9N_F)~3E9srM2(->5B**Q=s7!P zsji--^tVd6YMN#gsNH#iW4)KgLZT$_8mTL=f=bFakCCU8ue&A+x<=%Z3f#dsIaE>y zv>3xEYk__eXUVz|lbYQqgMi(oa5>xt$W4D&Axo&&bEO^W-x~)`! znTm{>YB-JF3 zot|7KM@A+!as4(7D!o@EDfP}UhhSqItGPHdE$ioMB4e!pI0H=&4pc;1 zDSTHv{53sq&JuFLX$`~9?D9nb#amaq?(o$)qXJP8#?^=&98Oo^^h_GVF>V!k=R4rf zk$sjDu$qg2iHh=cX>?6;x%cf6RbsA>+ls7nMrsu7=?F_+pSkyP?m%bUh=nu8%ELB@ zLr^QN^x#YOAZ=zxF3C&R&XlYTxmjKlq%cDV0|i1CRuRv2>C-kz#^X&Jm?nS|FZ&Ss zZ`*12HZwg=X?pJvY+e{?BkWm+*PgF#ZWF25uLLR?2=^>wm6KR-_D)g0S6T)ct6KAW zdZIL0q$-S(jSAL{nKEet8 zAi(WDv?H0lUk_oioHvlSPTKWlln$$4gSyNRe@~@wsp1DxHN^Q6ts!^W-j-;r^;N}q zEe-{_qPd);sINA{34y^QWmLZd>FH#5~I3&CbS**JoM!n+h%d1I(4E0FHVnXHgn zFAFDaR}(=$!Z$sj10M3_)zC8TU=%%yHV6<9puBcHb&Cu$2dsZ^cUnPQ?dP^GY{he5g#?x~O9ioRiS)n_e<;}A@ zb2BLceMX>rod&wsJr2n3t44TRzqgs@+jvKVS5NTnA};QLQ=V0zv#G-M_VvvS_S?iJ z6Yq*ZTy?6saf(?}<+6pKjti}e>Egp)@QaYaP#81=z<1Q*cXH5 zS(nv7abGtMSGSU|94-r&ON4v4;q@FNid4HM??3s|@0fOY?+ZxYFi`MtvmGhghMF#y z(La&u7s5yZPPvxx4sUK{vAgKk{^Y$(sBnX)a?Ory-AF5lJfBh1%+tF+Ofpb0g@+9% zSx=YPxJ`d)9H~|~ul^El-}A^zspZnTRD$Ot=q-3^ce7!GOuNvYS0OwVl2mP_w0F{^ z8UD@5l<9Amh{jG6#dhosl^dD^cF4)_2(G-kGI~#8fCa3cPPOe za$dN%ag;Wn^rMEyc4$6j7j9poJpz-eclf(|LO&yWq4+|XT}fzSw>{)Eo7cv&iDeEY zwNz080Lwux*JYq{Vjq)|D7z$OS9t1@MPgHh9Y1Er5&g)Be&wAJvmv+h?>F^TcLTsm zDtmESO-OLQdAn8>D}Gj!z5`P~w4AbbIDKOb3flY8bEg!%TzCI*^*A?@E5c()PqdLY z3E}H@d!~fxd!3(hS%7bxW;DEc*l5FW$A}83Lhe%(E4hh-0qJp`UDb5O6{zx&=l9H5 z)>Da(MWkjZ705U0?|lqCh06_0joWsfB3EC&-6{T^^0DZ3-sN^_2FrmHQBvtNmfr98 z!F6}Q?FBaQ!LGPL28kAbStjA>&m+wNQ3^zb=igEnKKT;G+~7&O1iRdwo}m zKB3}9UI@%xnO*a&>qLvbr&E6Vg>2aebELhB1aD_dVkxD_uf%aJlGeU*@^GD^JI6g` zwYxq1S<_CU$6|6TY)oxvoutnL?A=!tff+F->MUoAJB!4WwV9Y!rI?!4?^z2#k*m8C zF`;91Jz1y<58)#?hliO%F#VB|fGedauAap&iX-@h$6U*vhrXvD^I z;d}x--6?}TB{@^WWi-`>S&FTU#kiJU%K#z~{B$6Hg+n3rQpsAKBF?K7{FaRErAJyG zy(lsN>2P{L{wj}Z?@qz(EKzLQZ7JF94=!XA1y6gAC*hXp%eAvf`0EBf5Q%6@1+0sy zLUyf1lnw7{dF?py1aPM~=xueD6wA@A!yw^0I%QuqL{|iUxp~gJA!*wSwO>&dnP?bg z0}Wc&Dv04uy&?W~CPbqoz%3ngRoFkdFuYW-X)%PO{{o96g6d*Blt*cBx(~_?Jg=D- z(wmGG4~3-LBPZ|Pg7$rhEx82NXQ_k5D})pIT+tiL4OVx6RIUyMLc9ao%xxuuL6dT` zv}p9}uu9cod|P%U-FpU!^aZ|@_c%4Njbuy_SQ#k(xK<=Ja6>wwPl0)zr<_N?%#m!y zL?O7ltTrvtx|G-yxaRo{@sJ3&^8D66iW-RMK`xGlUN+yG^t;L3jWhpnR%BOgC*q09VskMPhlmYTLKZ>+0_!z!eMEyFEf>a=%}k&YM-!12y&c zHZUqGShw-`{^UWuth4B??HPgV<3_$7`ci~36%#)UjG7kaJRHzymG~vbM7|00t8n?w zv=v!yuXiDh?z2MuB`H6t=Q49Uyd2W758QE#SseG))#wb>2=B(W)X@Hy5mT5kY67fi zac|bS5@DEh<951q=Zz6fitbF$_W(IYr(nG6^sM{2m6tCVEVU%w{~r9AEAr6cEb*?U zck!x!BBD5n8%P&0Lc$)6s1$_E6SQ8iL8Te-vo9X&wPT0JUM1U{Pl^fGhe$M}Xct#o z!-mYI$iH`(EvjuE?3KANq@~(c%d|BywA_cMwn>hzBz4<*s!P`Pvxke<)t1A@ z7anj|uW4!AZm+o1?dF9lPIOI}de|o_u^MKwwE3mH0XP@$$eYiOHXB!QkW{qrsm=#o z(?*xc&?Mm$n*w;-w@!A=p`d`Y>+8L@YgL3ii=ROxqDr773_8EHe`vPky6%7syW@vTR^QHnL#;+2SQ*jIyQ(m!t> zgP+X;2}G?j?Dd9a7sVu78EBr^fl9xKAZSvYVdjMc#RtR|Rfi`e?^?AQHd|>;^iA-i!)60F7yiO> zR~>k&I@(97b(rB=@b0A@nII+&Ju%Ql*C541L{fGOwh;j-H$Wkx{~A0TwNqY- zpFQ~`Ty53msx#v$g&V~3L@n8Jcej2PDXuZE5!#Yj(1cl1MoVTm9U0Kn< zoR3Y-=Fv}Ev+TmPI?n$Lr)%A@W5TC3XvXsQL2TL^)?#bbV=c>Z>CZT=nGU4Cmx4uO z^gj8;r8QhpQm^a!frmJLdCb?n)f3iCA7z;o_IqLsS*R@1BsSor6k68OsY><=*k$ z&)5r6o!j*qDo{z^uGyGw!_nnBcp^J!bnj+diZrXwJd<`2xZgXTga)gwkb~9ib5Sfr zEoXS@H%$ea%QCWjVCc}=2!|TvElj-hf3+xV1VuXENn~(Mr8SFVth#NFH1&K8p$xY@;#`t;;n}`C#1O`)ukQZ#L$z( zjhl=;ueAVs6+;JuF-# z=5}@Vmxe(h{OQ})1?lK+sp6r$iurtYC;^?VE|g1o<^NXXhLp#Q&3W(}^xs9eckC#a ztES;P?Pc3p5~Lf0g6B&U_gW6EP)ucC7P`M!lfL1Ky?xJ4|sLM4#|yi1&Z3a90# zXl@{1$%B$ccJ9Lft#&mrdl=pVY6nY39r49k%ezXkwR50(@~?#PP#Sc;bD7B*_O&g{ zdLpkA8Sd>B7MU~V%rj6utIge?tc2Bt(&<3qEiq7=T>I1~>pp*k&pWk|6{K}WKny*f zy2NOPCJ27&F(TZGvSt0?OCTfd7N>Y7(mm&k+f=~}wCOS_SBzLqP+~8h`RKwjv5@eG z(|xEe%_!`GEfWwfvEhq`GF5YI?-K=jyFTN%7O4vKy$v-5a2=z#PFN2d+F zI?>@~|1*XE))0ZTJ`{dNd=G5_n}6H69Raf^UUp=`%NNM0JT*!p+^ON4Nmy!EKAZ-9K_qJh>exi`Rg*Ox>uwxV)qc1wfkXD3^eN&P5Hf^QrfSCDxYXdsz;NI)^uVp+q5Ao5B zXTr?tTK%8xP95y2s6>z-JT8rY7W8LkkNIC9Q+EAFB`Nud#s@|d?%|#$6j)VEMZw1j z=heoEmSQ=rAwq7an+g6G7G@eXa)z?w7NkpOn?&LGA-}{4<|O{3984gcB-fBVLx$T;ryzlR#}Eb()ATD7>H0Eqws;R zb2V{{mbi+~Bc88X(X{NYxWe-_1J7PsGl7{Y?z3Kw$J(&co>b+r?1G;b5Hw1N&8dg_ z{(PSFtJDO$oz7^tm80R1?=K`)b#yM*iSW1z*7wIbNmK01j1FAaJ89UPG~-Pg5M!B^ z%qlWSvcC(*R^}buSP^NA*WQ(pXVEs|e`eeNFIvZcHvZ?shh;ODhKi<1%7%#Wtzs<> z&?LS9=7z;{P8M(oRM@)w$eDK48Xt4 zx7b`8(0GbpZV{zmTE#co7WCB#4Qv8x0*ITuEQ9IB&YNG2I5MetYjuvn6|Q@bqB}Lm zYCO6!zowwmAB1$`+Zm13ciD$d?%kGihq#c*K~gc&_s0kaH=04jrOTq&u5G=qV;$f$ z=d)av`N2=(BN(x9@5vsu<(C)wR6^B!qeeML&oNTn7D9OJQ5SsE3rXa^{NB zqVDK*VsKv_f+dWE9GsBN>%(>F-61B9+~53@zwGuyPqJOvM(abJ%&%iaz`hINH9`m|ISLkks7DhzifDGPum^ek`Z0g8xy@tmjStgl{Vmg*#9V(6`@>k zpCBNrigsOcAMWTex%E#k#|k2_1@^0Q3PueeyS)6HuhrT?qonH!1rSRZ_3)_sR1L%j zPF}Rzo4Bm~ytRTh!AkJYHPeDXvs0YdC2kLryL~Wk;T{$-HuP3;LtaLq_C-xo0OIED z2?JI?qA{_WpW5geUDQ=1g}~Qi-}LM{c9HcMjOy?l7+`U>V}UlJ_b`3=b@uw=gsAJ)tPs@L z5qeB+xPWY48D15Re*BQ85hUHr)F0@Iy2SB$xJPe8i-}5mDR#P8HcGF2BmCWWZ#-px z0-SludbNjkt$!nDiVwYCe=u@2PuvN;bTidv*6uW{;&)$hqC9557-a2B){gMF{XTnh zqXObZ2F~l^Ih>E+krYnyx{mnDl17C?&pY2|opTAS?IUb2S8n&iV(}VD0Iv?FDkgjgkyR;$uTV76}&|+l)G1EUQJsoYV zs@9f@IjyM+21<>%aXl9fvR}viuvxwq5j`?$%}07E9dh<>Z?_99_SZgsV{8VBG9j&y z8iP*$_$|goRo`ni>zr#KyHqfj9%Zsg?$GQKBHlRKmHU%{hfevzmW+?>^0JSX?pmhD ze``qS0i|iy>nE;kPUn_`aomY3f6M83=w`3;#Mud?Ah>;~w&eGy={~=gFa00`eALgT zwE^BGVum~qgyC<51MiWm0CLzP~-~@v-Y(u$D|IdZQ8X$cowAF+kdFQQswCF zKUylWE~H5W5MZnt4&!$?ZrY--JRO;d78Lv;<>}XG(*Sj_aki23sQ43 zGL)NWd*}%H_?I~yDGf6LT8yLDGUatm>U@YWhDuHC&fF;N(q7a1sHZtI%%SYLGn|c^ v)~i3xqzD<6^`pWNG({sJAryAEVq|?|z0zw@)7JfDS%TJxVu1**SO@~LDj*=e2pB+EL3&lBO9|3Js)X|CfqI;wV$s%agOS(M^aSfpA%7E(zad(4 zaN|^liuf`xgQfPCjtx#}nrjMAt?k@iySmcr);Q(4;6I&_lEy8?#qP3ZWVu6D{;DXq zaD<78NkLLNJm=<>)$xmyV$TRg@&K7YUTk(ern+J^SJ6Dk+cH#DJ^4)R+!-%ZaI{LG zirS^|qu(k*KG2Q|MoZvDao@Nq#-14jjTTsVR6qK%ex0$z9GvoZz!h+C%11ROCXO(~ z(QN4wAt9j!E1wQE-bN${`@WoB$p&?6WvB7m1Y}q8`I-t7(=*8z5ll>gAT#AR6=D>L zkWcQ2ZCP(0t=Is;8&hh`LT8Q~V@xzwd2`A2<4?961JUo|;5o{aeQD?%Q}kS%s8thv zX1HGYbFgF4l*<9kICOOa!;ni%gq;aE_P+b8B0CdPw$3ac)4v;Vx@}=jhJ1GZTKb&{saNZ+&)%Nj2 zPzhXV%==di^3x7sf(QV%Ooto*JI=Kp!}2=$$Q@$QbpraaKWUk3sc%*59ydsCCIeBo zWjG>%jYv3yzeQZWPb`wHIbs%#S>cVOQG+YvkKRLy9GOn98q@ zPz%KMfc>#x|Jq@Hi0#PRz*2A;Jq?7p^j>aeQ8Tt=;$zt~+ac7Z!}W2uiI91k1h}}> z1;?AI^_yVtUm(o8iy{X%z}6DBsI1LAjq`1~K5!?7hq;MDfuRUSDKe*TsX!y&)nRG8 zk!VO9=V}u0K$tW!kgK(6(+1XUX=yx(cKrsIn~8=u>Z0ue?>n+4UYCOjCEito59!8g zQJ&{itrY+o`G|IdjBf>U38s`(a0*Ew_o4N04wCc$96Q{DB)J{_-9xspOl}ozVeOX` z+jTt!F)fRS|4u#Tz?ZI>sLj-ZOYc|6ZgH=IC_QFU>thBRvP8O}?Y&Nz&=6LT7w{;a z3rtL>@BFWrF$n_9ls~C=VDU+;HTKz4TK#&@N47~j>BqncAp3%xP99T{C=wWFi#(wK z>lc3Rn3!#P40dS=trGe4=MW}#Rkce@ukXMHLLYYE(T`GvN#!boEK6`PDdqTu6@sPe zV+7jq*HAv`@FRzZcO`;ytmn*@ZMM%*cfeF-zcPCCeK#%9x!_c5-@16uufc~a8y>Fg zh{kd|T@>iKi<91|N!~l&VJ^0b4*UI zIP)8n%jso=GxN_;@Y9f=(*7qk=LT{t;JF^F^bmkYJK6-X=t`BhO8?ySv#Kzp_@Nei zOY1jjUH(nXKC0Mstakcireoo8bLq5SpbTXD*_of&8R*yWrrM)9!;V=k!b9&E7mO8y zXpuQOf6=c$Cx?%fsVzIxNm;s0oXXd)`@AlC>6wZTwj1-fOIlIXAQtF$j1wm_lNKs; z&_|v>@HPbx5xAe$|G-1-(G)h{tYnF{mXlj8xqa2nO$>9M+4E~~e@wE(x7P#1_;gp} zhdua%dv~-4VEyST8B^g$-ImYeWFZ?#$;1zf-n!Z6rxJA?$SSDG#K142{mSokSe=!c z+buyX0Z765-` zdBKS*0REBH+mz$Zf?Z;B)t^5&9VMk~yhmgrj98^8SJHW%-YoxEdA@CdJ`_AA1MC0Y z%_+$7p}4vrFu>;0rLO3?A92|O$1y?m+Y zm^5X`h^>(Lya16B^5+}d9eqq_pFmG#0SyOT67rm7;}BVaBhy`M#vNNxt0otqiv3~F ztxs+_W`|Uf{X%@{&=G{iHp6zTCLh!dQb(SnjPA<-#UE zZutMX4W#^KenI$YO5Zi#X~{LqRuZoF$C2k1eRPZuPC1_c2SpsU=K!1aKfPtJ4RFSe zTQ8Pn0uEV-jk(fMo0{Y_WbZheloPrD@z<;J_d3>A0h)~1u7Xb1gZtZz*7q-vV{6Bz z-q3KEt|6J|cmHLo3SNQiur#|+G+}Xo zjT2qWZ?CDQF>J4+ZqzcHTwyCaiQh^v#t2hZy(0>mkSPSe9*+&lEQY9OPUrPG_qAol zNACDy`SI0PA}lGUjxEIzU+Tvga2}pCn#~eG*%}NX)QZ1VlN@ed;RHNw*IIV4Q8~rr zBA-B|e(3X1vMu`1_^5EI{d<_bAX1dS_fg3b80b|_ff0)`j#eFH424z7;Sc92qqCfn z#g?r){Nt0Kt8@g)r5wziU)pm}>JU8^PPaNaBwKZyc+&zo=d@nG<%`!qq@1EpZ%1L!Q ztT+19yh5^8-+v!9%P*z3Siu-p)4lx-jz}kFcJ4~Hx;++?!i>jTFF@1Z^yCI*e=!qo zF0)M`rJVS=>7@VJw8*K~pe}%)@iRqmZfdA8XKhO^yy28bhF(!|Mq#7It~y+vinkK0 z?v4VaDXWA$x@4B+P?+8xe9QUPx0o@CWZu?QCauA^dnrChgg$H)&OcQjI1;YA?+MMa z63f+r)z_@fs&K(axo}$-R`rpnIK!gA!J24G-X)W`o_Dz8N zYp70)ilb)prcG0~S|s8duiLA0NOcc|>B36Qf2V2XBOLvFhvsy4SPsd+G=2&Ck;#CS z^lCfI747_a_Q`Yl=sjoN=#f7_7k8F9*!t_&$wllP(&hsolqtwp2J3#vRGKn$WmJpiWu*F-RL=8A zM|3?8JHcDK^iBKybfG5>^M2P)U9eykh6q)5T91ppU=_Se`|#rd&rdKaNpFDXjzMGX zt#7rX*5xKvnSkU00lskad%6CwAse4ucUmTvdY5a>_$VYQL09k%4-DZs1A-Nkop6~r zet1*Eq*#-2`_rQ*&kt8)aBDMGo9}^-oELYs#p(}6r-HUiSX5n(%e9Xmv7b8sbIpEV zha{R}9Paze`!wSUG(ei!sP|-7Ezh&a+MiTDs7a$K(N2gN$Zts&aKd_^cW_6J#SlT< zcjneoewR{XcPVSPeoA4R5^4r!Yn2CCe~I-KzNVnDOt`E2dn_p4Jee~xkjVD_ zoJ^1O?Q>e$+R368JKW;yxZy#^wkWpn)RIB5_xl~002V={p525V;+D-SeAAFS^Kdb6qI4t*NoVD62U6SR@{rgi{O-oIRfPeIv@c4c!6k~zS%56h`szF=g zpYwG}oIegn+&*#eUG~f2Y{OUi?*z=_?WM6zz+>_! z!YUmL2`Y3wYStw)*LPRL$MqC>cP~nH>-lww+%hpS5kbrEME;zYD!-N(;PsADiMAO${yFj*6Dr$U^u#Y;HU?$r zb&0pX@`JdV;ERvqt{f6!|KH<*|BvxVvp?&VskO@6sRFdLtX+|$2WOgSDVT#wQ)S}J zkMDq;^L!afEbI5AvxCIZ+voA98u4!E-R`e~C#-@-Tj{(puukB6UQIn)S!36duXdj#wXSoZ+4^^S#xv@qVSXIOJA-zqKkJ3MOJK-`tiN5?+OV$`t)Y& zCgi?*RA8Rap6->8TYCdQ zAU7$YMr`kjimP{k*~NV>kH(-cMP|0O(cWr{L*#B)UvSgc7*i6YQIS|hLJ;?FQ@QD|d|Q1Pijz?b&hm$oDD6`u&yV`?d3MGqjwY|>G Hv`DGr4H#8!b*=8K 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 LF30O_&R+Wy=zIBg diff --git a/pkg/asset/agent/image/ignition_test.go b/pkg/asset/agent/image/ignition_test.go index 504e9800d2..aa41508346 100644 --- a/pkg/asset/agent/image/ignition_test.go +++ b/pkg/asset/agent/image/ignition_test.go @@ -379,6 +379,7 @@ func commonFiles() []string { "/root/.docker/config.json", "/root/assisted.te", "/usr/local/bin/agent-config-image-wait.sh", + "/usr/local/bin/agent-extract-tui.sh", "/usr/local/bin/agent-gather", "/usr/local/bin/extract-agent.sh", "/usr/local/bin/get-container-images.sh", diff --git a/pkg/asset/agent/image/unconfigured_ignition.go b/pkg/asset/agent/image/unconfigured_ignition.go index 46cf8517f9..d4a669025d 100644 --- a/pkg/asset/agent/image/unconfigured_ignition.go +++ b/pkg/asset/agent/image/unconfigured_ignition.go @@ -194,6 +194,9 @@ func (a *UnconfiguredIgnition) Generate(_ context.Context, dependencies asset.Pa interactiveUIFile := ignition.FileFromString("/etc/assisted/interactive-ui", "root", 0644, "") config.Storage.Files = append(config.Storage.Files, interactiveUIFile) + // Enable the agent-extract-tui service + enabledServices = append(enabledServices, "agent-extract-tui.service") + // Let's disable the assisted-service authentication. agentTemplateData.AuthType = "none" } diff --git a/pkg/asset/agent/image/unconfigured_ignition_test.go b/pkg/asset/agent/image/unconfigured_ignition_test.go index 78d5998aab..71e2a0aa04 100644 --- a/pkg/asset/agent/image/unconfigured_ignition_test.go +++ b/pkg/asset/agent/image/unconfigured_ignition_test.go @@ -39,7 +39,16 @@ func TestUnconfiguredIgnition_Generate(t *testing.T) { serviceEnabledMap: map[string]bool{ "pre-network-manager-config.service": false, "oci-eval-user-data.service": true, - "agent-check-config-image.service": true}, + "agent-check-config-image.service": true, + "agent-extract-tui.service": false}, + }, + { + name: "interactive-disconnected-workflow-should-have-agent-extract-tui-service-enabled", + overrideDeps: []asset.Asset{ + &workflow.AgentWorkflow{Workflow: workflow.AgentWorkflowTypeInstallInteractiveDisconnected}, + }, + serviceEnabledMap: map[string]bool{ + "agent-extract-tui.service": true}, }, { name: "with-mirror-configs",