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/DistUpgradeAufs.pyc


Oc@sddlZddlZddlZddlZddlZddlZdZedZddZ	dZ
dZdZd	Z
d
ZdZdZed
krejdejeddGHndS(iNcCstjd|rR|jrRtjd|jddd|jdddntjdd}|jdd	|}tjd
||tjd<|jdd	|tjdd}tj	|d
|jdd|}tjd||jddt
r7tjd|jddddtjd<n|jddt
r|tjd|jddd|tjd<n|jddt
rtjddtjd<ndS(s setup the environment based on the config and options
    It will use
    config("Aufs","Enabled") - to show if its enabled
    and
    config("Aufs","RWDir") - for the writable overlay dir
    s aufsOptionsAndEnvironmentSetup()s&enabling full overlay from commandlinetAufstEnabledtTruetEnableFullOverlaytprefixsupgrade-rw-tRWDirsusing '%s' as aufs_rw_dirtRELEASE_UPGRADE_AUFS_RWDIRsupgrade-chroot-it	ChrootDirsusing '%s' as aufs chroot dirs(enabling aufs full overlay (from config)t1t%RELEASE_UPGRADE_USE_AUFS_FULL_OVERLAYtEnableChrootOverlaysenabling aufs chroot overlaytRELEASE_UPGRADE_USE_AUFS_CHROOTtEnableChrootRsyncs,enable aufs chroot rsync back to real systemt!RELEASE_UPGRADE_RSYNC_AUFS_CHROOTN(tloggingtdebugtuseAufstsetttempfiletmkdtemptgetWithDefaulttostenvirontchmodtFalse(toptionstconfigttmprwtaufs_rw_dirt	tmpchroottaufs_chroot_dir((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pytaufsOptionsAndEnvironmentSetups2





cCstjj|s"tj|n|r1d}nd}d|||g}tjd|tj|}|dkrtjd||ft	St
S(s4 helper that bind mounts a given dir to a new place s--rbinds--bindtmountscmd: %sis&Failed to bind mount from '%s' to '%s'(RtpathtexiststmakedirsRRt
subprocesstcallterrorRR(tfrom_dirtto_dirtrbindtbindtcmdtres((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pyt
_bindMount/s	t/cCstjj||s*tj||ntjj||sTtj||nt}|rddddd|||fd||g}n-ddddd|||fd||g}tj|}|d	krtjd
|tStj	d||ft
S(sf 
    helper that takes a target dir and mounts a rw dir over it, e.g.
    /var , /tmp/upgrade-rw
    R s-tt	overlayfss-osupperdir=%s,lowerdir=%stnonetaufssbr:%s:%s=rois(Failed to mount rw aufs overlay for '%s'scmd '%s' return '%s' (RR!R"R#RR$R%RR&RR(ttargettrw_dirt
chroot_dirt
use_overlayfsR+R,((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pyt_aufsOverlayMount@s,
cCsaxZtdD]L}|j\}}}}}}|dkr
|dkr
||kr
tSq
WtS(s< test if the given dir is already mounted with aufs overlay s/proc/mountsR0R1(topentsplitRR(tdirtlinetdevicet
mountpointtfstypeRtatb((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pyt
is_aufs_mount_s
$cCs[tjd||fx=|D]5}|jds@|d7}n|j|rtSqWtS(sD helper: check if the given mountpoint is a submount of a systemdir sis_submount: %s %sR.(RRtendswitht
startswithRR(R<t
systemdirstd((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pytis_submountgs

c	Cs'|jdrtS|d
kr#tStS(NtfusetrootfsttmpfstproctfusectrlR1tdevptstbinfmt_misctsysfs(RGRHRIRJsaufsRKRLRM(RBRR(tfs((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pyt
is_real_fsqs	c	Csddlm}x|D]~}tjj|s5qndddddd||fd	|g}tjd
|tj|}tjd||fqWt	S(sW
    helper that rsyncs the changes in the aufs chroot back to the
    real system
    i(tSYSTEM_DIRStrsyncs-aHAXs--dels-vs
--progresss/%s/%s/s/%s/s
running: '%s'srsync back result for %s: %i(
tDistUpgradeMainRPRR!R"RRR$R%R(RRPRDR+tret((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pytdoAufsChrootRsyncys


cCs1t||stStj|tjdtS(s: helper that sets the chroot up and does chroot() into it R.(tsetupAufsChrootRRtchroottchdirR(RR((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pytdoAufsChroots


c
Csvtdj}ddlm}|}xtjdD]}tjjd|}tjj|r8||krt	j
d|t|||stSqt	j
d|t
|||dtstSq8q8Wxttj|jdD]}|sqn|j\}}}	}
}}|	d	krt|	rt||rt	j
d
|t
|||sntSqqWtS(sB setup aufs chroot that is based on / but with a writable overlay s/proc/mountsi(RPR.sbind mounting %ssoverlay mounting %sR)s
R1sfound %s that needs bind mount(R7treadRRRPRtlistdirR!tjointisdirRRR6RR-RtmaptstringtstripR8RORE(
R3R4tmountsRPRCRDR:R;R<R=RR>R?((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pyRUs0	"
cCstjdtjjds0tjdtSddlm}|}t}|j	dxt
dD]}|j\}}}}}	}
t|rt
||rtjd|tS|dkrit|rit
||ritjd	||j	|qiqiWx)|D]!}t||d
|stSqWx0|D](}t|s<t||sdtSq<q<Wx)|D]!}t|d
||sotSqoWtS(s$ setup aufs overlay over the rootfs t	setupAufss/proc/mountss(no /proc/mounts, can not do aufs overlayi(RPs/var/cache/apt/archivess#mountpoint %s submount of systemdirR1sfound %s that needs bind mounts/needs_bind_mount/(RRRR!R"RRRRPRtaddR7R8ROREtwarningR-R@R6R(R3RPRCtneeds_bind_mountR:R;R<R=RR>R?RD((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pyRas6

	
(


t__main__tlevels/tmp/upgrade-chroot-rws/tmp/upgrade-chroot(R^RRtos.pathR$RRRR-R6R@RERORTRXRURat__name__tbasicConfigtDEBUG(((s?/usr/lib/python2.7/dist-packages/DistUpgrade/DistUpgradeAufs.pyt<module>s&	'		
					'	<