&fddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z m Z ddlmZddlmZddlmZGddeZGd d eZGd d eZd Ze\ZZGddeZGddeZGddej<Ze dk(rddl!Z!ddl"m#Z#ddl$m$Z$e%dee#de$dZ&e%e&jOe!jPe&jSe&jUe&jVe&jYdge%e&j[e&j]yy)N)PopenPIPE)gettext)ngettext) inside_chrootc eZdZy)CacheExceptionN__name__ __module__ __qualname__>/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeCache.pyr r (rr c eZdZy)CacheExceptionLockingFailedNr rrrrr,rrrc eZdZy)CacheExceptionDpkgInterruptedNr rrrrr0rrrc0d}d}tjd}tjd|zD]}|d|zk(r#|tjj |z }.|j ddk\s(|j ddk\s|j ddk\rk|tjj |z }|dk(rt jdd }|dk(rt jd d }|d z }d }|d z|kDr|d z}||z }||fS)zjestimate the amount of space used by the kernel and initramfs in /boot, including a safety margin rz /boot/*%s*z/boot/initrd.img-%sz initrd.imgz.bakz.dpkg-z>estimate_kernel_initrd_size_in_boot() returned '0' for kernel?iz>estimate_kernel_initrd_size_in_boot() returned '0' for initrd?i ig?)osunameglobpathgetsizefindloggingwarning)kernelinitrdkverf initrd_buffers r#estimate_kernel_initrd_size_in_bootr&4sF F 88:a=D YY|d* + ) %, , bggooa( (Fff\"a'166&>Q+>!Q&  bggooa( (F ){ L N { L N kFM }}$  mF &=rceZdZdZdZdZy)FreeSpaceRequiredz FreeSpaceRequired object: This exposes: - the total size required (size_total) - the dir that requires the space (dir) - the additional space that is needed (size_needed) c.||_||_||_yN) size_totaldir size_needed)selfr+r,r-s r__init__zFreeSpaceRequired.__init__`s$&rcTd|jd|jd|jS)NzFreeSpaceRequired Object: Dir: z size_total: z size_needed: )r,r+r-r.s r__str__zFreeSpaceRequired.__str__ds1UYU]U]_c_n_nptqAqAB BrN)r r r__doc__r/r2rrrr(r(Xs'Brr(ceZdZdZdZy)NotEnoughFreeSpaceErrorzI Exception if there is not enough free space for this operation c||_yr*)free_space_required_list)r.r7s rr/z NotEnoughFreeSpaceError.__init__ms (@%rNr r rr3r/rrrr5r5hs Arr5ceZdZdZdZd:dZdZedZdZ dZ d Z d Z d Z ed Zed ZedZedZdZdZd;dZdZdd9Z;y)?MyCacherNcg|_g|_||_||_d|_d|_||_|j jdd|_d|_ |r, tj|jd|_t"j$j'|||j)dd|_|jj-|d|_t1dd gt2d j5d j7|_|j;|j=d d dk(r2dt>j@vr tj jCddtj jCddy#t$r(}dt|vr t|t!|d}~wwxYw)NFDistroMetaPkgsTzdpkg --configure -aRemovalDenylistFilerz-r)stdoutuniversal_newlinesrSourcesFromhardyRELEASE_UPGRADE_NO_RECOMMENDSzAPT::Install-Recommendstruez"APT::AutoRemove::SuggestsImportantfalse)" to_install to_removeviewquirkslockpartialUpgradeconfiggetlistmetapkgs _listsLockapt_pkgpkgsystem_locklock_lists_dir SystemErrorstrrraptCacher/getListFromFileremoval_denylist_get_linux_metapackagelinux_metapackagerr communicatestripr _initAptLoggetrenvironset)r.rOrKrLprogressrMes rr/zMyCache.__init__vs|   #  ++HjA   5&&(##%   4* & 6 6xAV W!%!C!CD%!PGT?4.244?KM!EEJUW   JJy& )W 4/2::= NN  8& A ?I+ 5(CF27::1!44  5s+F G#F<<Gc|D]J}|jr|jjtjk(s8|j ddLy)z! honor the dselect install state F) auto_instauto_fixN) is_installed_pkgselected_staterSSELSTATE_INSTALL mark_installr.pkgs r_apply_dselect_upgradezMyCache._apply_dselect_upgradesJ BCxx&&'*B*BB  55 A  Brc2t}|D]}|jr|jjr&|jj|j k(s$|jj|j k(sm|j|j|S)zB return the packages not downloadable packages in reqreinst state ) rc candidate downloadablerj inst_state ReInstReq HoldReInstReqaddname)r. reqreinstros rreq_reinstall_pkgszMyCache.req_reinstall_pkgsssE  (C]]#--*D*D$$6$$(:(:: chh'  ( rcx|j}t|dkDrtddt|}tddt|dj|z}|j ||rP|j gdt |z}|jj||jyy ) z/ check for reqreinst state and offer to fix it rzRemove package in bad statezRemove packages in bad statezThe package '%s' is in an inconsistent state and needs to be reinstalled, but no archive can be found for it. Do you want to remove this package now to continue?zThe packages '%s' are in an inconsistent state and need to be reinstalled, but no archives can be found for them. Do you want to remove these packages now to continue?, )z /usr/bin/dpkgz--removez--force-remove-reinstreqTF) rzlenrjoinaskYesNoQuestion release_locklist getTerminalcallget_lock)r.rKryheadersummarycmds rfix_req_reinstzMyCache.fix_req_reinsts++ y>A ;<!)n.F 2  + #9~ /2691E FG$$VW5!!#ORVW`Raa  "'', rc^|jjddd}tjj |stj |t jjd|t jjddtjtjj|dtjtjztjzd|_ tjj}d |z}tj |j|j#d t jjd d t jjd d t jjdd y)z init logging, create log fileFilesLogDirz/var/log/dist-upgradezDir::LogzDir::Log::Terminalz apt-term.logzapt.logiz Log time: %s zutf-8zDebug::pkgProblemResolverrGzDebug::pkgDepCache::MarkerzDebug::pkgDepCache::AutoInstallN)rOgetWithDefaultrrexistsmakedirsrSrcopenr~O_RDWRO_CREATO_APPENDlogfddatetimenowwriteencode)r.logdirrrs rr`zMyCache._initAptLogs++GX,CEww~~f% KK :v./@WWRWW\\&)<YY3bkkA5J ##%!C' V]]734 6?7@tj|jtj|jtj d|_tj d|_tj |jdtj |jdy)N old_stdoutrr)hasattrrcloser old_stderrdupdup2rr1s r_startAptResolverLogzMyCache._startAptResolverLogsn 4 & HHT__ % HHT__ %&&)&&)  A  Arctjdtjdtj|jdtj|jdy)Nrr)rfsyncrrrr1s r_stopAptResolverLogzMyCache._stopAptResolverLogs<     # #rcfd}|S)z3 decorator to ensure that the apt output is logged cd|dj|i|}|dj|SNr)rr)argskwargsresr$s rwrapperz(MyCache.withResolverLog..wrappers7 G ( ( *T$V$C G ' ' )Jrr)r$rs` rwithResolverLogzMyCache.withResolverLogs  rctj|j}tj}|j ||j |j |jS)z< get the size of the packages that are required to download )rSPackageManager _depcacheAcquire get_archives_list_records fetch_needed)r.pmfetchers rrequired_downloadzMyCache.required_downloadsH # #DNN 3//# T]];###rc.|jjS)z9 get the size of the additional required space on the fs )rusr_sizer1s radditional_required_spacez!MyCache.additional_required_spaces~~&&&rcN |jjS#t$rYywxYw)z< get the extra size needed to install the snap replacements r)rLextra_snap_spaceAttributeErrorr1s r#additional_required_space_for_snapsz+MyCache.additional_required_space_for_snapss+ ;;// /  s  $$c4|jjdkDS)z is the cache broken r)r broken_countr1s r is_brokenzMyCache.is_brokens~~**Q..rctjjddz}tj||_|jdkrd|z}t |y)NzDir::State::ListsrMrzCan not lock '%s' )rSrOfind_dirrrRr)r.rxres rrUzMyCache.lock_lists_dirsT~~&&':;fD!**40 ??Q $t+A-a0 0 rcp|jdkDr'tj|jd|_yy)Nrr?)rRrrr1s runlock_lists_dirzMyCache.unlock_lists_dirs* ??Q  HHT__ % DO rc|jtjj||}|j |r |j rt td|dk(r t dy)zf our own update implementation is required because we keep the lists dir lock zThe server may be overloadedFzAapt.cache.update() returned False, but did not raise exception?!?N)rrXrYupdaterUrelease_file_download_errorIOError_)r. fprogressrs rrzMyCache.update"sh iitY/  >>!:;< < %<]^ ^ rctjd|jr|jtj j |||y)Nzcache.commit())rinforMrrXrYcommit)r.r iprogresss rrzMyCache.commit1s8 %& 99     y)4rc|jr tjd|_yy#t$r"}t j d|zYd}~yd}~wwxYw)NFzfailed to SystemUnLock() (%s) )rMrSpkgsystem_unlockrVrdebugr. pkgSystemOnlyres rrzMyCache.release_lock7sP 99 D((*!   D >BCC D+ AAAc|js tjd|_yy#t$r"}t j d|zYd}~yd}~wwxYw)NTzfailed to SystemLock() (%s) )rMrSrTrVrrrs rrzMyCache.get_lock?sPyy B&&(   B Dt*C   eu  = >rc||jjdd}|D]}||vr)||jrtjd|zyd}|jj|dD]}|||vxr||jz}|sntjd|zytjdy) ac This checks if we run on a desktop or a server install. A server install has more freedoms, for a desktop install we force a desktop meta package to be install on the upgrade. We look for a installed desktop meta pkg and for key dependencies, if none of those are installed we assume server mode r=r>z@need_server_mode(): run in 'desktop' mode, (because of pkg '%s')FTKeyDependencieszIneed_server_mode(): run in 'desktop' mode, (because of key deps for '%s')z[need_server_mode(): can not find a desktop meta package or key deps, running in server mode)rOrPrirr)r.rQkey deps_foundros rneed_server_modezMyCache.need_server_modews;;&&x< Cd{tCy55 `cffgJ{{**30AB EcTkDd3i.D.DD  E iloop   strc|jr' tjd|jyy#t$r'|j t dt dYywxYw)zY check if the cache is ok and if the required metapkgs are installed z$Have broken pkgs, trying to fix themzBroken packageszYour system contains broken packages that couldn't be fixed with this software. Please fix them first using synaptic or apt-get before proceeding.FT)rrrrrVerrorr)r.rKs rcoherence_checkzMyCache.coherence_checksf >>  DE!  1./!"$@"AB  s%5-A%$A%c tjd|d|d||vrL||jdi|||js(||jstj d|zyy)Nz Installing '' (rz Installing/upgrading '%s' failedFTr)rrrmrrrr.roreasonflagss rrmzMyCache.mark_installsb V<= $; "DI " " +U +I,,S 0H0H @3FGrctjd|d|d||vrJ||jr;||j||jstj d|zyy)Nz Upgrading 'rrzUpgrading '%s' failedFT)rrri mark_upgraderrr.rors rrzMyCache.mark_upgrades[ sF;< $;4911 I " " $9++ 5;<rc ptjd|d|d||vr||jdi|yy)Nz Removing 'rrr)rrrrs r mark_removezMyCache.mark_removes6 c6:; $; !DI ! ! *E * rctjd|d|d||vr*|jj||jdyy)Nz Purging 'rrT)rrrrrjrs r mark_purgezMyCache.mark_purges; S&9: $; NN & &tCy~~t < rcr||vr3||jr#||jr|j||yyyyr*)rirrm)r.pkgnamers r_keep_installedzMyCache._keep_installedsB tOW **W ++   gv .,+ rc b|jjddD]}|j|d|jD]\}||vs||js||j s'|jj|dD]}|j|d|z^|jj dddk(rqtjd|jjdd D]s}|D]l}|js|jjs'|js4|jj|k(sN|j|jd |znu|jD]}||vs||js||j s'|jj|d D]u}|D]n}|js|jjs'|js4|jj|k(sN|j|j|d |pwy y ) z[ run after the dist-upgrade to ensure that certain packages are kept installed r=KeepInstalledPkgszDistro KeepInstalledPkgs rulez%s KeepInstalledPkgs ruleOptions withNetworkTruez"Running KeepInstalledSection rulesKeepInstalledSectionz$Distro KeepInstalledSection rule: %sz KeepInstalledSection rule: N)rOrPrrQrirrarrrrrsrsectionrx)r.rrr ros rkeep_installed_rulezMyCache.keep_installed_rules{{**85HI KG  *I J K== UCd{S 6 6 $S 8 8#{{2238KLUG((2MPS2STU U ;;??9m 4 > MM> ?;;..x9OP iiC #--*D*D--MM11W<,,SXX7]`g7gh i i }} t$;DI$:$:$(I$<$<#';;#6#6s? @}} K$;DI$:$:$(I$<$<#{{223$8NOKssD$IJK K K"" KKOO2 3#rctjd ddlm} |d}|jD]*}||vs||js|j|d ntjd y|j}tjd |z||vrtjd |zy||js;||js,||jtjd |zyy#tt f$r"}tj d|zYd}~yd}~wwxYw#t $r"}tj d|zYd}~yd}~wwxYw)zR this checks for nvidia hardware and checks what driver is needed znvidiaUpdate()r)NvidiaDetectionz%NvidiaDetector can not be imported %sNFz./ubuntu-drivers-obsolete.pkgs)obsoletezold nvidia driverz1no old nvidia driver installed, installing no newznv.selectDriver() returned '%s'z no '%s' foundz,installing %s as suggested by NvidiaDetectorTz$NvidiaDetection returned a error: %s)rrNvidiaDetector.nvidiadetectorr ImportError SyntaxErrorr oldPackagesrirr selectDriverr rrrm Exception)r.rrenv oldDriverdrivers rcheckForNvidiazMyCache.checkForNvidiasP  &'  E  F!*JKB ^^  $i)E)E$$Y0CD   PQ__&F MM;fD ET>& 89L//4<3N3NV ))+ KfTU=[)  MMAAE F  8 F MM@1D E E FsGDD:D: *D:6AD:;A D:D7D22D7: E%E  E%cf|D],}|jjds|js,yy)Nzlinux-headers-TF)rx startswithrirns r_has_kernel_headers_installedz%MyCache._has_kernel_headers_installed/s5 C##$45   rc\tjd|jz |jjd\}}}t dgtjd}d |vrtjd y #t$r"}tj d|zYd}~yd}~wwxYw) zd check for the running kernel and try to ensure that we have an updated version zKernel uname: '%s' -z/Can't parse kernel uname: '%s' (self compiled?)NFdmesg)rArsWARNING: NR_CPUS limitzUP kernel on SMP system!?!T) rrrsplitr$r rrr^)r.versionbuildflavourrer.s rcheckForKernelzMyCache.checkForKernel6s  +djj89 (, (8(8(= %WeW wi-99;A> $ - MM6 7  OOMPQQ R sB B+ B&&B+c<d}|jjdd}|D]}|jjj |j }|r2|j dk(r#tjd|jzf|jss|jjs|jr|jr|j|vsd|jvs|jj |vs|j|jd|zy)N)requiredr=RemoveEssentialOkrzPackage %s has no priority set:z;priority in required set '%s' but not scheduled for install)rOrP_pcacherrrjpriorityrrrxrrrsrirrm)r.needremoveEssentialOkrors r checkPriorityzMyCache.checkPriorityFs KK//:MN rC++''99#((CCs||q( >IJ #--"<"<%%););HH 11388O &&$.!!#((,ilp,pq rrcd}|jrS|dzdk(r|j|jtjd|dz }|jrS|jd|jy)Nrg{Gz?rT)finished)locked pulseProgress processEventstimesleep)r.rKrMis r updateGUIzMyCache.updateGUI[sr kkm2v{""$    JJt  FA kkm D) rc tj}|jtj|j|j |f}|j  |j|jd|j|jtrtjdn|j|j|j!|j#||s|j%||j'|j(r-t+t-ddj/d|Dz |j=|j/g} g} |j?D]=} | j@r| jBr| jE| jF| jHjJD]} tMjN| jP| jRjTdks;| jVD]V\} }| jXjZj]| }|s.|j^r;| jE| jF| j`jb}d}|D]}||jdz}|r#| jE| jF@ |j0jgdd}|rtjdy tm| dkDr7| jotj6ddj/| ztm| dkDr| jotj6ddj/| z|j5|j7t-dt-ddj/| |j;yy#t*$r8}t-d}|j0j3dd d k(r|t-d z }nL|j0j3dd d k(r-|j0j3dd d k(r|t-dz }|r|t-dz }n|t-dz }|t-dz }|j5|j7t-d|t9|}tj6d||j;Yd}~|j=|j/yd}~wwxYw#|j=|j/wxYw#thjj$rY`wxYw)N)targetrTz5skipping kernel checks because we run inside a chrootz!Broken packages after upgrade: %sr|c3fK|])}|js |js|j+ywr*)is_inst_broken is_now_brokenrx).0ps r z&MyCache.distUpgrade..s>UR`amnm}m}BCBQBQUVU[U[URs11zBAn unresolvable problem occurred while calculating the upgrade. r  foreignPkgsr zThis was likely caused by: * Unofficial software packages not provided by Ubuntu Please use the tool 'ppa-purge' from the ppa-purge package to remove software from a Launchpad PPA and try the upgrade again. False devReleasezThis was caused by: * Upgrading to a pre-release version of Ubuntu This is most likely a transient problem, please try again later. z@This is most likely a transient problem, please try again later.zIf none of this applies, then please report this bug using the command 'ubuntu-bug ubuntu-release-upgrader-core' in a terminal. zIf you want to investigate this yourself the log files in '/var/log/dist-upgrade' will contain details about the upgrade. Specifically, look at 'main.log' and 'apt.log'.zCould not calculate the upgradezDist-upgrade failed: '%s'Frr=AllowUnauthenticatedzAllowUnauthenticated set!z!Packages to downgrade found: '%s' z$Unauthenticated packages found: '%s'z"Error authenticating some packageszIt was not possible to authenticate some packages. This may be a transient network problem. You may want to try again later. See below for a list of unauthenticated packages. )8 threadingLockacquireThreadrFrKstartrupgrader<rrrr r3r(r_keepBaseMetaPkgsInstalled_installMetaPkgs_verifyChangesrrVrr~rOrarrrWrreleaserrmarked_downgraderrxrj version_listrSversion_comparever_str installedr0 file_listr8r find_index is_trustedrroriginstrusted getboolean configparser NoOptionErrorr}sort)r.rK serverModerNrMtredetails error_msg untrusted downgraderor verFileIterindex indexfilergrhoriginbs r distUpgradezMyCache.distUpgradefs~~    DNN$))T9K L  T   ! ! # LL       $ $ & WX##%    !  " " $  + +D 1%%d+    !~~!!$G"H499UReiURLR#RSSZ LLN FFH  ##% +C  ##  *8800&C.. S]]%:%:<>?@47MM&0[%(+ (9(9(D(D[(QI(1E1E ) 0 0 : % & &mm++GG! *6>>) *  *- +0  &&x1GHA ;< y>A  NN  MM=((9-. / y>A  NN  MM@((9-. /  $ $ & JJq=>=>yy+  -  % % 'G' 9:G{{y-8FB1"## M:gE  <8FBA:;; 17881eff1OPP  $ $ & JJq:;W EAI MM5y A  % % ' LLN FFHW' T LLN FFHD))   s>#C>O-3U- T/7DT*T2*T//T22"UU.-U.ctjjd}|jjdd}|j D]}|j r\|j |jrAtjd|jttd|jz|j sx|jjdk(s|jj|dfvs|j|vstjd|jttd |jz|jjdd }|D]}}|j!d \}}||vs||j"s,||j"j$|k(sI||j&s||j(shttd |zy) zy this function tests if the current changes don't violate our constraints (deny listed removals etc) zAPT::Architecturer=r6zHThe package '%s' is marked for removal but it's in the removal deny listzJThe package '%s' is marked for removal but it is in the removal deny list.TallzDThe package '%s' is marked for removal but it's an ESSENTIAL packagez1The essential package '%s' is marked for removal. BadVersionsrz*Trying to install deny listed version '%s')rSrOrrPrr_inRemovalDenylistrxrrrVrrj essentialrc architecturer/rrr0rr)r. main_archr;ro badVersionsbvrrs rr]zMyCache._verifyChangessNN''(;<  KK//:MN##% eC  T%<% IJ ,,3399$? /??7+!%c'lm!4 ; ;C @/#zz|5=,,./ / /rcj|jjddD]}|j|dy)Nr= BaseMetaPkgsz%base meta package keep installed rule)rOrPr)r.rKros rr[z"MyCache._keepBaseMetaPkgsInstalledVs5;;&&x@ OC  &M N Orc fd}jjddjjddD]}|jD]P} |vrI|jr:|jr+t j d|z|jR|st j d zD]}d }jj|d D]}||vxr|jz}|sAt j d |z |jt j d|d|jdn|sAdjdd}|jtdtd|dfzyy #t$r'}t jd|d|dYd}~d}~wwxYw#ttf$rN}t jd |d|d|jtd|ztdYd}~yd}~wwxYw)NcD]o}|vs|}|jr.|jr"tjd|jz|jr |jr|j soyy)zy internal helper that checks if at least one meta-pkg is installed or marked install z(metapkg '%s' installed but marked_deleteTF)rirrrrxr)rrorQr.s rmetaPkgInstalledz2MyCache._installMetaPkgs..metaPkgInstalled\st   $$;s)C''C,=,= &PSVS[S[&[\))#2C2C933# $rr=r>rzMarking '%s' for upgradez Can't mark 'z' for upgrade (rz$none of the '%s' meta-pkgs installedTrz!guessing '%s' as missing meta-pkgzfailed to mark 'z' for install (zCan't install '%s'zIt was impossible to install a required package. Please report this as a bug using 'ubuntu-bug ubuntu-release-upgrader-core' in a terminal.Fzmarked_install: 'z' -> ''r|rr?zCan't guess meta-packagezYour system does not contain a %s or %s package and it was not possible to detect which version of Ubuntu you are running. Please install one of the packages above first using synaptic or apt-get before proceeding.)rOrPrmri is_upgradablerrrrVr KeyErrorrrrr~) r.rKrrorrer meta_pkgsrQs ` @rr\zMyCache._installMetaPkgsZsA  ;;&&x<;;&&x@ %C I " " $ %  OC O4KI**I++MM"H I{{**85KL G4DM$;$;M++33w> G'QR   $  KK**85EFE))$..9     M % %E % 2 II # # %**'') !HH$55hh,.--chh7hh$"8"88MM`giliqiq"rs))+  !;)) E 2X&  OOU\^bcd^eghi j  ! ! # s=9H3H6;A#H67H6H6H32H36J8JJct}|D]<}|js|j|r"|j|j>|Sz1 get all package names that are not downloadable )rcrianyVersionDownloadablerwrx)r. obsolete_pkgsros r_getObsoletesPkgszMyCache._getObsoletesPkgssK  0C 2237!%%chh/ 0rcV|jjD]}|jsyy)zA helper that checks if any of the version of pkg is downloadable TF)rjr`rs)r.rors rrzMyCache.anyVersionDownloadables,88(( C rct}|D]P}|js|jj|js6|j |j R|Sr)rcrirrrjrwrx)r.unused_dependenciesros r_getUnusedDependencieszMyCache._getUnusedDependenciessQ!e 2CDNN$=$=chh$G#''1 2#"rc(t}|jjdd}tjj |rMt |5}|D]3}|jdr|j|j5 dddt}|D][}||vr||}|jr1|jj|js |jrK|j|]t|S#1swY~xYw)z return list of installed and demoted packages If a demoted package is a automatic install it will be skipped r= Demotions#N)rcrOrarrrrr*rwr_riris_auto_installedrjrr)r. demotionsdemotions_file demotions_frinstalled_demotionsdemoted_pkgnameros rget_installed_demoted_packagesz&MyCache.get_installed_demoted_packagess E ;? 77>>. )n% 4'4D??3/! djjl34 4"e( )Od*'C$$00:!!  # #C ( )'(( 4 4sD)!DDcvt}|D]}|js|j|s"|js/d}|jjD]B}||j vr|j |k(rd}||j vs1|j |k(sAd}D|s|j|j|S)zm get all packages that are installed from a foreign repo (and are actually downloadable) TF) rcrirsrrrgarchivervrwrx)r.allowed_originfromDisttoDistrroforeignrvs r_getForeignPkgszMyCache._getForeignPkgssu  /CD$5$5c$:}}!mm33(F6>>1!==N:"'/!==N:"'( $$SXX.! /"rc . Gddt} fd}g i}i}td5}|D]0} |j\}} } } } } | vs j | 2 ddd jtd tjjd }d }t|d rm|jjdddrP|jjdd}tj j#|stj$|t j d|zdddd||dd fD]}tj j'|}||}tj j#|r/tj(|}|j*|j,z}nt j.d|zd}||vr*t j d|d|||||||<t j d|d||||<||||<~t j d|zd}|D]j}t1j2d|j4s$|j6s |j8s=t j |j4d t:d!|d"z }l|t:z|d"zt<zz}d#}t|d r|jjdddrjt j d$|jjdd}|D]4}|j8s |j6s||j>j@z }6d#}|r^|D]A}|jBs|j8s |jDs)||jFj@z }Ct j d%|z||jHfd|jJfd|jLfd&d|fd'd(||fd|ff D]\}}|dkr tj j'|}t j d)||||||jNfz||xjN|zc_'||xjP|z c_(i}|D]}||jNdkstjRtUtW||jNd"z}tY|tZr#|j]t_j`}tjR||jP}tY|tZr#|j]t_j`}tc|||||||<t|dkDrQt jdd*|Dcgc] }tg|c}ztitk|jmy #t$r'}t j d|d|dYd}~d}~wwxYw#1swYxYwcc}w)+z this checks if we have enough free space on /var, /boot and /usr with the given cache Note: this can not be fully accurate if there are multiple mountpoints for /usr, /var, /boot ceZdZdZdZy))MyCache.checkFreeSpace..FreeSpacez@ helper class that represents the free space on each mounted fs c ||_d|_yr)freer:)r. initialFrees rr/z2MyCache.checkFreeSpace..FreeSpace.__init__?s'  rNr8rrr FreeSpacer=s N rrc>D]}|j|s|cSy)z return 'id' of a directory so that directories on the same filesystem get the same id (simply the mount_point) /)r*)d mount_pointmounteds r make_fs_idz*MyCache.checkFreeSpace..make_fs_idCs+ ' ' << ,&& 'rz /proc/mountszline 'z"' in /proc/mounts not understood (rNT)rreversezDir::Cache::archivesz/tmp/rOAufsEnabledFRWDirzcache aufs_rw_dir: %sr/usrz/varz/bootz/homezdirectory '%s' does not existsrzDir z mounted on zFree space on rzfs_free contains: '%s'z%^linux-(image|image-debug)-[0-9.]*-.*z (new-install) added with z to boot spacergz*taking aufs overlay into space calculationz&additional space for the snapshots: %s)ri )z/tmpiP)riz dir '%s' needs '%s' of '%s' (%f)zNot enough free space: %s)7objectrr/ ValueErrorrrrrlr}rSrOrrrrarrrrrealpathstatvfsf_bavailf_frsizer rrrxrr KERNEL_SIZE INITRD_SIZErrinstalled_sizerirrcrrrrr: size_to_strfloatabs isinstancebytesdecodelocalegetpreferredencodingr(rrWr5rvalues)!r.snapshots_in_userrmnt_mapfs_freemountsrwhatwherefsoptionsarwre archivedir aufs_rw_dirrfs_idstr kernel_countro space_in_bootrequired_for_aufsrequired_for_snapshotsr,size required_list free_at_least free_neededrErs! @rcheckFreeSpacezMyCache.checkFreeSpace4s     . ! *V *7;zz|4T5"gq!'NN5) * *  d +^^,,-CD  D( # KK & &vy% @++//&':K77>>+. K( - ;<vvw KRYZ -A  #AqMEww~~a ZZ]{{R[[0 @1 DE  '%.23$WU^4   $()!"&t_ # -$  .89   &Cxx?J%%););MMTWT\T\^i"jk A%L && 3(1, ;<   D( # KK & &vy% @ MMF G++//&':K F%%););%)E)EE% F "%  K$$''3+<+<*cmm.J.JJ* K MMBE[[ \()?)?@#T%C%CD#T%M%MN2$m41/(*;<#%;<  &KS$ax''""3'C MM<T7SVO>O:PQR:R4S T mU3$1$8$8335%7M%11'#,2C2CD k51"-"4"4335#7K 2C;PZ[^P_an1o jo. p }  ! MM58WAQ8WW X)$}/C/C/E*FG Gs"MMUY[\"]^  * *v9Xs@XWX XX  XW=7X=XXX)NTr*)T))F)<$+ = / tF3 4$'T r* RRh8$6"OJX77r #)00^rr:__main__)DistUpgradeConfig)DistUpgradeViewfoo.zubuntu-desktop)/rXrSrrrrrrCrrUrj subprocessrrDistUpgradeGettextrrrutilsrr$r rrr&rrrr(r5rYr:r sysDistUpgradeConfigParserrrrcrexitrrrrrrrrrrs8,   ",(  Y  .  N  B?@ [ B B AnAaciiaH# z:0 %L!#&(94@A !    CHHJGGINN$%& !--/!r