&e&6(ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Zddl m Z mZddl mZmZddlmZmZmZddlmZddlmZGdd eZGd d eZGd d eZedk(reZeZeZejAddejBZ"ejFddD]Z$e"e$jKe"jMeeejNdejPdyy)N)NoSectionError NoOptionError)PIPEPopen)DistUpgradeViewInstallProgressAcquireProgress)get)DistUpgradeConfigceZdZdZy)NonInteractiveAcquireProgressc Ztj||||||tjk(rt d||j tj t|jfztjjrtjjyyy)Nzfetched %s (%.2f/100) at %sb/s) r update_statusapt_pkg STAT_DONEprintpercent size_to_strint current_cpssysstdoutisattyflush)selfuridescr shortDescrstatuss K/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeViewNonInteractive.pyrz+NonInteractiveAcquireProgress.update_status,s%%dC FK W&& & 2T\\7#6#6s4;K;K7L#M6OO Pzz  "   "# 'N)__name__ __module__ __qualname__rr"r!rr+s#r"rc@eZdZdZdZdZdZdZdZdZ dZ d Z y ) NonInteractiveInstallProgressz Non-interactive version of the install progress class This ensures that conffile prompts are handled and that hanging scripts are killed after a (long) timeout via ctrl-c c@tj|tjddtj vrdtj d<dtj d<dtj d<t d|_||_d |_ |jjd d d r tjjd dd|_ |jj!d d|_y#ttf$rY;wxYw#t"$rYywxYw)Nz*setting up environ for non-interactive useDEBIAN_FRONTENDnoninteractivenoneAPT_LISTCHANGES_FRONTEND1RELEASE_UPRADER_NO_APPORT.rNonInteractiveForceOverwriteFzDPkg::Options::z--force-overwritei` TerminalTimeout)r __init__loggingdebugosenvironr configlogdirinstall_run_numbergetWithDefaultrsetrrtimeoutgetint Exception)rr:s r!r4z&NonInteractiveInstallProgress.__init__>s  & BC BJJ .,?PQDL .      s$=C<!D<D D DDctjd|d|d|jjdddsyt jt j }d|d<g}d |vrd }d }d }|d |d|}nOd|vrd}d}d}|d |}n=d|vrd }d}d}|d |d|}n(d|vrd }d}d}|d |d|}ntd|d|dyt jj|stjd|zyt|5} | jddjjd} dddd vsd| vrd g} n%d!| vr d"g} d#|d$<ntjd%| zt|5} | j} dddd& vrd'|d(<d)|d*<d+} d,d g} |j!| |j# |j!||j!||d k(r\t%d-|zd.t&d./j)d} | r|j!| jd0d1d1jn|dk(rt jj+|}|jd2d}t%d3|zd.t&d./j)d} | r2|j!| jd0d1d1jtj,d4|d5|d6t/j0||7}tj,|d8|y#1swYxYw#1swYxYw)9Nz got a error from dpkg for pkg: 'z': ''r1DebugBrokenScriptsFr6 PYCENTRALzpost-installationz/var/lib/dpkg/info/postinst configure/r0zpre-installationz/var/lib/dpkg/tmp.ci/preinstinstallz pre-removalprermremovez post-removalpostrmz+UNKNOWN (trigger?) dpkg/script failure for  (z) z+can not find failed maintainer script '%s' rbashz/bin/shz-experlz-dzAutoTrace NonStop PERLDB_OPTSzunknown interpreter: '%s'z. /usr/share/debconf/confmodule developer DEBCONF_DEBUGr.DEBIAN_HAS_FRONTENDz/usr/share/debconf/frontendshz%dpkg-query -s %s|grep ^Config-VersionT)shellruniversal_newlines:r_zdpkg-query -s %s|grep ^Versionz re-running 'z' ())envz script returned: )r5errorr9r<copyr7r8rpathexistsopenreadlinestripsplitwarningreadappendextendrr communicatebasenamer6 subprocesscall)rpkgerrormsgr8cmdprefixnameargumentmaintainer_scriptfinterp debug_optsmaintainer_script_textversionrets r!r\z#NonInteractiveInstallProgress.errorWsE S(ST{{)) 15: ))BJJ'&  ( **FD"H.4c4 @  8 +,FD H+14 8  h &*FDH.4c4 @  x '*FDH.4c4 @  3PXY Z ww~~/0 MMGJ[[ \  # $ 9ZZ\!"%++-335a8F 9 f )v"5JJ%8GM " OO7&@ A# $ .%&VVX " . ,0F F'2GO $-0G) *2FuJ 6 : $% 8 : CcI"&t/355@[]1FG 7==Q/288:; Y ''""3'C))C.#Coocw/ $s;>6 * //L!" # M --I!K L L Ms8A(( B1BBctj|tj|_|jj ddd}|rat jj|jd|jz}tjd|zt|d|_ntt jd|_|jj!dtjzy)Nr1DpkgProgressLogFzdpkg-progress.%s.logz!writing dpkg progress log to '%s'wz %s: Start )r start_updater{ last_activityr9r<r7r^joinr:r;r5r6r`dpkg_progress_logdevnullr})r progress_logfullpaths r!rz*NonInteractiveInstallProgress.start_updates$$T*!YY[{{112BCTV[\ ww||DKK1G$JaJa1abH MM=H I%)(C%8D "%)"**c%:D " $$]TYY[%@Ar"ctj||jjdt jz|jj |xj dz c_y)Nz %s: Finished r)r finish_updaterr}r{closer;rs r!rz+NonInteractiveInstallProgress.finish_updatesS%%d+ $$%5 %CD $$& 1$r"c v|jjtjd|d|d|dy)NrX )rr}r{)rrlr status_strs r! status_changez+NonInteractiveInstallProgress.status_changes. $$ 8?8;8B&D Er"ctj||jdk(ry|j|jzt j krYt jd|jd|jdtj|jtdtj|jgggd}t|ddkDrt j |_ tj|jd}t j"jd|j%t'j(d ztj|jgggd}t|ddkDrt j"j-y#t*$rYywxYw) Nz no activity z seconds (z) - sending ctrl-cg?rrz%signore)errors)r update_interfacestatusfdrr>r{r5rdr r7r}r~chrselectlenrerrdecodelocalegetpreferredencodingOSErrorr)rresss r!rz.NonInteractiveInstallProgress.update_interfacesS((. ==D     - < OOLL$++/ 0 HHT^^CF +mmT^^,R37#a&kAo $ 4  774>>1-qzzqxx//1((0(D!DE /2c:3#a&kAo    s;A%F44 G?Gc4tjddtjd<dtjd<t j \|_|_|j dk7r"tjd|j z|j S)Nzdoing a pty.fork()dumbTERMtruePAGERrz pid is: %s)r5r6r7r8ptyforkpidr~rs r!rz"NonInteractiveInstallProgress.forksh *+# 6$ 7%(XXZ"4> 88q= MM,1 2xxr"N) r#r$r%__doc__r4r\rrrrrrr&r"r!r(r(6s42^=@ M B% E 2 r"r(cxeZdZdZddZdZdZdZddZdZ fdZ dd Z dd Z dd Z d Zdd ZdZxZS)DistUpgradeViewNonInteractivez- non-interactive version of the upgrade view cBtj|tjdt d|_t |_t||_ tjjj|_|jt _y)Nr1r0)rr4 get_telemetryset_updater_typer r9r_acquireProgressr(_installProgressaptprogressbase OpProgress _opProgress excepthookr__excepthook__)rdatadirr:s r!r4z&DistUpgradeViewNonInteractive.__init__sl  &(()9:', = ? =f E<<,,779!__r"cddl}tjd|d|d|j|||}tjddj |z|j y)z2 on uncaught exceptions -> print error and reboot rNzgot exception 'z':  znot handled exception: %s) tracebackr5 exceptionformat_exceptionr\rconfirmRestart)rtypevaluetbrliness r!rz(DistUpgradeViewNonInteractive.excepthooksRtUCD**4; 2RWWU^CD r"c|jS)z5 return a OpProgress() subclass for the given graphic)rrs r!getOpCacheProgressz0DistUpgradeViewNonInteractive.getOpCacheProgresssr"c|jS)z# return an acquire progress object )rrs r!getAcquireProgressz0DistUpgradeViewNonInteractive.getAcquireProgress$$$r"c|jS)z" return a install progress object )r)rcaches r!getInstallProgressz0DistUpgradeViewNonInteractive.getInstallProgressrr"cy)z\ update the current status of the distUpgrade based on the current view Nr&)rmsgs r! updateStatusz*DistUpgradeViewNonInteractive.updateStatuss r"c,tt| |y)z we have 5 steps current for a upgrade: 1. Analyzing the system 2. Updating repository information 3. Performing the upgrade 4. Post upgrade stuff 5. Complete N)superrsetStep)rstep __class__s r!rz%DistUpgradeViewNonInteractive.setSteps +T:4@ r"ctj||||||tjd|jDcgc]}|j c}ztjd|j Dcgc]}|j c}ztjd|jDcgc]}|j c}zycc}wcc}wcc}w)Nztoinstall: '%s'ztoupgrade: '%s'ztoremove: '%s'T)rconfirmChangesr5r6 toInstallrp toUpgradetoRemove)rsummarychanges demotions downloadSizeactions removal_boldps r!rz,DistUpgradeViewNonInteractive.confirmChanges(s&&tWgy'3W > '4>>*Ja166*JJK '4>>*Ja166*JJK &$--)HQ!&&)HHI+K*J)HsC 3C -C cy)z0 ask a Yes/No question and return True on 'Yes' Tr&rrrdefaults r!askYesNoQuestionz.DistUpgradeViewNonInteractive.askYesNoQuestion0s r"cyNTr&rs r!askCancelContinueQuestionz7DistUpgradeViewNonInteractive.askCancelContinueQuestion7sr"cftjd|jjdddS)z2 generic ask about the restart, can be overridden zconfirmRestart() calledr1 RealRebootF)r5r6r9r<rs r!rz,DistUpgradeViewNonInteractive.confirmRestart9s) /0{{))*:<OOr"c@tj|d|d|dy)z display a error rrMrZNr5r\)rrr extended_msgs r!r\z#DistUpgradeViewNonInteractive.error>s gsLABr"c.tjdy)Nzview.abort calledrrs r!abortz#DistUpgradeViewNonInteractive.abortAs )*r")NN)Nr)No)Cancel)r#r$r%rr4rrrrrrrrrrr\r __classcell__)rs@r!rrsN3- %%  37P C+r"r__main__z xserver-xorgzpre-installation script failedrN))rrr5rr{rr7rrrjr] apt.progress configparserrrrrrr r telemetryr rDistUpgradeConfigParserr rr(rr#viewapipr\Cacherargvrl mark_installcommitr|exitr&r"r!rs,   6"NN+6#O#EOEPD+OD+N z & ($$&"$&"((>:; #))+% XXab\c #J  ,,r2 $**Q- #((1+#r"