Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/dist-packages/DistUpgrade/
Upload File :
Current File : //usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyc


Pc@sddlZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlmZdejkrejjddejjddndefd	YZd
efdYZdS(iN(tFetchFailedException(tStringIOtAPT_CLONE_DEBUG_RESOLVERsDebug::pkgProblemResolvert1sDebug::pkgDepCache::AutoInstalltLowLevelCommandscBs;eZdZdZdZdZddZdZRS(sN calls to the lowlevel operations to install debs
        or repack a deb
    s/usr/bin/dpkg-repackcCsb|s
tSddg}|dkrE|jdd|jd|ntj||}|dkS(Ntdpkgs-it/itchrooti(tTruetinsertt
subprocesstcall(tselftdebfilest	targetdirtinstall_cmdtret((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pytinstall_debs-scCstjj|js+td|jn|jg}tjdksrtjjds_dSddg|}ntj||gd|}|dkS(s$ dpkg-repack pkgname into targetdir s
no '%s' foundis/usr/bin/fakerootNtfakeroots-utcwd(tostpathtexiststdpkg_repacktIOErrortgetuidR
R(RtpkgnameRt
repack_cmdR((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt
repack_deb7scCsM|dkr+ddl}|jd}ntjd||g}|dkS(NitCODENAMEtdebootstrapi(tNonetlsb_releasetget_distro_informationR
R(RRtdistroR R((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRCs
cCs(tjdd|d|g}|dkS(Nsapt-keys	--keyringtaddi(R
R(RtfromkeyfiletintokeyfileR((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt
merge_keysJsN(	t__name__t
__module__t__doc__RRRRRR&(((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyR's	
	tAptClonecBs<eZdZdejdZdZd d d dZe	e	e	dZ
dZdZdZ
d	Zd
ZdZe	dZd
ZdZdZdZdZdZdd e	dZd dZdZdZe	dZdZdZdZddZ ddZ!dZ"RS(!s clone the package selection/installation of a existing system
        using the information that apt provides

        If dpkg-repack is installed, it will be used to generate debs
        for the obsolete ones.
    sapt-clone-state-%s.tar.gzis./cCst|_t|_t|_|r6||_ntjjj	|_|r]||_
ntjjj|_
|r||_
ntj|_
dS(N(tsettnot_downloadabletversion_mismatchRtcommandstfetch_progresstapttprogressttexttAcquireProgresstinstall_progresstbasetInstallProgresst
_cache_clstCache(RR/R4t	cache_cls((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt__init__ZscCsGtjj|r-tjj||j}n|jdsI|d7}n|dkrtjtjj	d|tjj	dtjj|dtj
ntjd|dd	}|j
||j|||j||j|||j||j||r#|j|n|r9|j|n|jd
S(s save the current system state (installed pacakges, enabled
            repositories ...) into the apt-state.tar.gz file in targetdir
        s.tar.gzs.apt-clone.tar.gzRtDirsDir::State::statussvar/lib/dpkg/statustnametmodesw:gzN(RRtisdirtjointCLONE_FILENAMEtendswithtapt_pkgtinit_configtconfigR+tinit_systemttarfiletopent_write_unamet_write_state_installed_pkgst_write_state_auto_installedt_write_state_sources_listt_write_state_apt_preferencest_write_state_apt_keyringt_write_state_dpkg_statust_dpkg_repacktclose(Rt	sourcedirttargettwith_dpkg_repacktwith_dpkg_statust
scrub_sourcesttar((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt
save_stateps,






cCsitjdd6tjdd6tjdd6tjjdd6}tj}d	jg|jD]\}}d
||f^qk}|j	|d	|j
|j|jdddS(
Nithostnameitkernelit
uname_archsAPT::Architecturetarchs
s%s: %starcnames./var/lib/apt-clone/uname(
RtunameRBRDtfindttempfiletNamedTemporaryFileR?t	iteritemstwritetflushR#R<(RRVt	host_infotftkeytvaluetinfo((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRHs	/
cCs|jd|}d}x|D]}|jr|d|j|jjt|jf7}|jsn|jjr|j	j
|jq|jjo|jjs|jj
|jqqqWtj
d}t||_tj|_|j|t|dS(Ntrootdirts	%s %s %s
s"./var/lib/apt-clone/installed.pkgs(R7tis_installedR<t	installedtversiontinttis_auto_installedt	candidatetdownloadableR,R#R-RFtTarInfotlentsizettimetmtimetaddfileR(RRQRVtcachetstpkgttarinfo((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRIs
	#cCs)tjjd}|j|dddS(Nsdir::state::statusR\s./var/lib/apt-clone/dpkg-status(RBRDt	find_fileR#(RRVtdpkg_status((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRNscCs;tjjd}tjj|r7|j|dndS(NsDir::State::extended_statess#./var/lib/apt-clone/extended_states(RBRDR|RRRR#(RRVtextended_states((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRJs		cCs{tjjd}tjj|r:|j|ddntjjdd}tjj|rw|j|ddndS(NsDir::Etc::preferencesR\s./etc/apt/preferencessDir::Etc::preferencespartss/etc/apt/preferences.ds./etc/apt/preferences.d(RBRDR|RRRR#tfind_dir(RRVRetp((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRLs	cCs{tjjd}tjj|r:|j|ddntjjdd}tjj|rw|j|ddndS(NsDir::Etc::trustedR\s./etc/apt/trusted.gpgsDir::Etc::trustedpartss/etc/apt/trusted.gpg.ds./etc/apt/trusted.gpg.d(RBRDR|RRRR#R(RRVReR((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRMs	cCstjjd}|j|||dtjjd}tjj|r|j|dddt	xDtj
|D]0}d||f}|j|||d|quWndS(	NsDir::Etc::sourcelists./etc/apt/sources.listsDir::Etc::sourcepartsR\s./etc/apt/sources.list.dt	recursives%s/%ss./etc/apt/sources.list.d/(RBRDR|t$_add_file_to_tar_with_password_checkRRRRR#tFalsetlistdir(RRVtscrubtsources_listtsource_partstsourcetsources_file_name((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRKs	c	
Cs|rtjdd}t|d}xb|jD]T}tjd|rwtjdd|}|j|n
|j||jq:W|j	|j
d|WdQXWdQXn|j	|d|dS(NR=twtrs/[^/@:]*:[^/@:]*@s/USERNAME:PASSWORD@R\(R_R`RGt	readlinestretsearchtsubRbRcR#R<(	RRVtsourcesRR\tsource_copyRetlinet
scrubbed_line((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRs	
%cCsdS(N((RRV((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt_write_modified_files_from_etcscCsWtj}x$|jD]}|jj||qW|j|ddtj|dS(NR\s./var/lib/apt-clone/debs(R_tmkdtempR,R.RR#tshutiltrmtree(RRVttdirR((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyROs
cCs=|jGH|jdjdr0d|_n	d|_dS(Nis./Rj(tgetnamest
startswitht	TARPREFIX(RRV((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt_detect_tarprefixscCstj|}|j||j|jd}d}x{|jD]m}|jdsE|jdkrrqEn|j	}t
|dkrE|djdrE|d}PqEqEW|S(Nsetc/apt/sources.listt#RjiR(RFRGRtextractfileRRRRtstriptsplitRsRA(Rt	statefileRVReR"Rtl((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt_get_info_distros
!&
cCs|j|pd}tj|}|j|jd}d}}g}xq|jD]c}|jj\}	}
}|d7}t|r|d7}n|	j	drW|j
|	qWqWW|j|jd}|j}
d}d}|jd|j
krT|j|jdj}tj|}|jdd}|jdd}nd	i|d6|d
6dj|d6|d
6|d6tj|
d6|d6S(Ntunknowns var/lib/apt-clone/installed.pkgsiis-desktopsvar/lib/apt-clone/unameRXR[sHostname: %(hostname)s
Arch: %(arch)s
Distro: %(distro)s
Meta: %(meta)s
Installed: %(installed)s pkgs (%(autoinstalled)s automatic)
Date: %(date)s
R"s, tmetaRlt
autoinstalledtdate(RRFRGRRRRRRnRAtappendt	getmemberRvRtreadRBt
TagSectiontgetR?Rutctime(RRR"RVReRlRRRR<RmtautotmRRXR[Rhtsection((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRhs:


	
RcCs|dkr"tjjd|ntj|}|j|tjj|s~d|GH|j	|}|j
j||n|j|||j
|||r|j||n|j||||j||dS(s take a statefile produced via (like apt-state.tar.gz)
            save_state() and restore the packages/repositories
            into targetdir (that is usually "/")
        RsDPkg::Chroot-Directorys0Dir '%s' does not exist, need to bootstrap firstN(RBRDR+RFRGRRRRRR.Rt_restore_sources_listt_restore_apt_keyringt_rewrite_sources_listt_restore_package_selectiont_restore_not_downloadable_debs(RRRt
new_distrotprotect_installedRVR"((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt
restore_state:s
	cCstj}tjjd}tjj|tjj|s`tj	|tjj|nt
j||||j|||r|j
||n|jd|}y|jtjjjWntk
rnX|j|j||}|S(Nsdir::state::statusRi(R_RRBRDR|RRRtdirnametmakedirsRtcopyRRR7tupdateR0R1R5R3RRGt#_restore_package_selection_in_cache(RRRRRR}Rxtmissing((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pytsimulate_restore_stateUs " 

cCstj|}tjj|ddd}tjj|rStj|d|n|j|j	d|y|j|j	d|Wnt
k
rnXdS(NtetcR0ssources.lists%s.apt-clonesetc/apt/sources.listsetc/apt/sources.list.d(RFRGRRR?RRRtextractRtKeyError(RRRRVtexisting((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRms
cCstjj|ddd}d|}tjj|rJtj||ntj|}y|j|j	d|Wnt
k
rnXy|j|j	d|Wnt
k
rnXtjj|r|jj||tj
|ndS(NRR0strusted.gpgs%s.apt-clonesetc/apt/trusted.gpgsetc/apt/trusted.gpg.d(RRR?RRRRFRGRRRR.R&tremove(RRRRtbackupRV((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRxs 


cCsSt}t}tj|j}|rZx-|D]"}|jr1|j|jq1q1Wntj|}|j	|j
d}	|jLxD|	jD]6}
|
j
}
|
jds|
dkrqn|
j\}}}
|j|t|
}|}||kryt|rl||jd|dt|jdkr|j||jsitd|qiqn||jd|Wn7tk
r}tjd||f|j|nX||j|qqWWdQX|jdkr|jnxW|D]O}||kr!|j|qn||jp8||js|j|qqW|S(	Ns var/lib/apt-clone/installed.pkgsRRjt	from_usertauto_fixispkg %s not marked upgradescan't add %s (%s)(R+RBtProblemResolvert	_depcacheRktprotectt_pkgRFRGRRtactiongroupRRRRR#Rntmark_installRtbroken_counttresolvetmarked_installtSystemErrortloggingtwarnt	mark_auto(RRRxRRtpkgstresolverRzRVReRR<RmRtauto_installedRte((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRsP		
	






cCsq|jd|}y|j|jWntk
r9nX|j|j||||j|j|jdS(NRi(R7RR/RRGRtcommitR4(RRRRRx((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRs

c
Cstj|}yLg|jD]%}|jj|jdr|^q}|j||Wntk
rodSXg}tj	j
|d}xHtjtj	j
|dD](}tj	j
||}	|j|	qW|j
j||dS(Nsvar/lib/apt-clone/debs/s./var/lib/apt-clone/debss*.deb(RFRGt
getmembersR<RRt
extractallRRRR?tglobRR.R(
RRRRVR{tdebsdirtdebsRtdebtdebpath((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRs8
%c	Cs+ddlm}m}tjjdtjjtjj	|dddtjjdtjjtjj	|ddd|}x|j
D]z}|js|jrqnd	}x8dD]0}|j
jd
|rd||f}PqqW|r||_
q||_
qWtjj	|ddd}	tjjd}
tjj|	rt|	dX}xN|D]F}|||
}
|
js|
js|
|krh|j
j|
qhqhWWdQXtj|	nxR|j
D]G}|jjdr|j
j||j
jd|t|_qqW|jdS(Ni(tSourcesListtSourceEntrysDir::Etc::sourcelistRR0ssources.listsDir::Etc::sourcepartsssources.list.dRjtupdatestsecurityt	backportss-%ss%s-%sssources.list.apt-cloneRscdrom:i(RRR(taptsources.sourceslistRRRBRDR+RRtabspathR?tlisttinvalidtdisabledtdistRAR|RRGRRturiRR	Rtsave(RRRRRRtentrytreplacementtpocketRt
sourcelisttfpRtsrc((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyRsF	(	(	

	
Rjc
Cs/|rtjj|d}nd}t}tjjtjjd}xetjtjj|ddD]B}x9t	|D]+}|j
dr|j|jqqWqmWt}xltj
|D][\}}	}
xI|
D]A}tjj|t||}||kr|j|qqWqW|S(NRs/etcsDir::State::statusRhs*.lists/etc/(RRR?R+RRBRDRRRGRR#RtwalkRs(
RRQtetcdirtownedtdpkg_basedirReRtunownedtdirpathtdirnamest	filenamesR<tfullname((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt_find_unowned_in_etcs 	(	
cCs|tjjd}t}tjt|}xH|D]@}d|kr;x+|djdD]}d}t|jdkr|j\}}	}n|j\}}	||}
|	j	}	|dkrqant
jj|
s
t
jd|
|j|
qantj}|jt|
j|j|	krat
jd|
|j|	f|j|
qaqaWq;q;W|S(NsDir::State::statust	conffiless
itobsoletesconffile %s removedsconffile %s (%s != %s)(RBRDR^R+tTagFileRGRRRsRRRRRtdebugR#thashlibtmd5RRt	hexdigest(RRQR}tmodifiedttagRRRR<tmd5sumRR((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt_find_modified_conffiless2	


	cCs	dGHdS(Nsnot implemented yet((RRQ((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt_dump_debconf_database:sN(#R'R(R)RR]R@RRR:RRWRHRIRNRJRLRMRKRRRORRRhRRRRRRRRRRR	(((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyR*Os>															(		4			*!(R0t	apt.cacheRRBRRRRRRR
RFR_RuRtenvironRDR+tobjectRR*(((s9/usr/lib/python2.7/dist-packages/DistUpgrade/apt_clone.pyt<module>s$(