File: wizards.cpython-38.pyc

package info (click to toggle)
live-clone 2.4-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,940 kB
  • sloc: python: 11,790; xml: 338; makefile: 69; sh: 1
file content (284 lines) | stat: -rw-r--r-- 19,591 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
U

+_b@sdZddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZm
Z
mZmZmZddlmZmZddlmZddlmZmZddlmZmZddlmZmZmZddl m Z dd	l!Z!dd	l"Z"dd	l#Z#dddZ$d
dZ%GdddeZ&GdddeZ'GdddeZ(GdddeZ)d	S)z2
Defines wizards related to actions of live-clone
)QWizardQWizardPage	QLineEditQHBoxLayoutQVBoxLayoutQRadioButtonQPlainTextEdit	QTreeViewQWidget	QCheckBoxQMessageBoxQPushButtonQFileDialogQLabelQFrame)QStandardItemModel
QStandardItem)Qt)
MountPointFileTreeSelectorModel)MonitorCloneMonitor)PopenPIPEcall)datetimeN4Gc
Csbd|}t|ttdd}|\}}|d}g}|dD]f}td|}|r|||	dt
d|	ddd	q>td
|}|r>t
d|	ddd	q>|sttd|d}t|	d}	d
|	d|	dd}
td|dtttd}|j
|
d|\}}t
d|dd	|	d}t
d||	dd	t
d||dd	|S)a
    create a VFAT and a EXT4 partition on a device.
    first find the number of the first VFAT partition, and erase any
    partition with this number or a greater number.
    Then create a VFAT partiton with size `size`, and a EXT4 partition
    to use all the space remaining on the device. Finally format both
    partitons according to their types
    @param device a string, like "/dev/sdc"
    @param size a string, defaults to "4G"
    @return the number of the last created partition (i.e. the EXT4 partition's
    number)
    zfdisk -l {}Tstdoutstderrshellutf-8
z^(/dev/\S+)\s.*FATzumount r z^(/dev/\S+)\s.*z
/dev/\D+(\d+)rzd

n
p
z

+4G
t
0c
n
p
z



w

zfdisk )r rrstdinzsleep 6; partprobe zmkfs.vfat -n DATA zmkfs.ext4 -L persistence -F )formatrrcommunicatedecodesplitrematchappendgrouprAssertionErrorintr%writeencode)
devicesizecmdpouterrZFATlineslmZfatNumZinputsmessagepersistenceNumr<O/home/georgesk/developpement/live-clone/collab/live-clone/live_clone/wizards.pycreateVfatExt4Partitionss:

r>c
Csht|dL}t|t|0}dj||d}t|ttdd}|\}}W5QRXW5QRX|dS)a
    Work out a list of newer packages installed in the persistence
    zone of a debian-live Disk
    @param d a disk given as a /dev/sdx string
    @param persistenceNum the number of the persistence partition
    @return a text with on package by line
    1zfind "{pers}/rw/var/lib/dpkg/info" -name "*.list" -newer "{base}/live/filesystem.packages" | sed -e "s%{pers}/rw/var/lib/dpkg/info/%%" -e 's/.list$//' -e 's/:.*//')basepersTrr!)rstrr&rrr'r()dr;r@rAr4r5r6r7r<r<r=new_packagesNs
  rDc@seZdZdZddZdS)
ToolWizardzC
    The wizard associated to the "Tools" button of live-clone
    cst			dt		d	dt}|	d|t
}ifdd}jddD].}t|d	}|j
|||||<q|	t	}	d
}d|	d||	d
t
}t||dd"	fdd	}	|||	|_d#	fdd	}
|
|_	|t	}|	d|	dt
}t|
|
dddd$	
fdd	}d%	fdd	}
||_|
|_||	|t	}|	d|	dd&	fdd	}t
}t	d}t	d}|	d ||	d!|||||||||_	|dS)'V
        the constructor
        @param mw a MyMain (<= QMainWindow) instance
        z(Repair and/or manage a Freeduc USB stickSelect one diskz,Which disk do you want to repair or to save?ztarget*cs&D]}|rd|qdS)Ntarget)	isCheckedsetFieldtext)checkedr)page1radiosr<r=	setTargetpsz&ToolWizard.__init__.<locals>.setTargetudevr&parentrHz!List of additional packages in {}zaHere is the list of packages which you can restore later. You can edit the text before saving it.TNc	sd}|dd}d|}t|ttdd}|\}}|rR|ddnd	dSt|std
}n"dd	|t
|d
}}||
|jdS)NrHz/dev/z2ls -l /dev/disk/by-label| grep persistence | grep Trutf8Fz@There are no new packages installed in the persistence partitionz(ADDITIONAL PACKAGES
===================
z{}
{}
-)fieldreplacerrr'r(striprDtrr&lenZ
textCursorZ
insertTextZ
moveCursorZStartZensureCursorVisible)	foodiskZdisknamer4r5r6r7Zpackagesc)ednewpackagesr;selfr<r=	page2inits,


z&ToolWizard.__init__.<locals>.page2initc	ssdSdtd}td|d\}}|rt|d}|	W5QRXdt
jkrdt
jkrt
|t
t
jdt
t
jddS)	NTzpackages-{}.md%Y-%m-%d--%H-%MzSave Packages Filez<Markdow files (*.md);;Plain text files (*.txt);;Any file (*)wZSUDO_UIDZSUDO_GID)r&rnowstrftimergetSaveFileNamer]openr0ZtoPlainTextosenvironchownr/)r_proposed_fnamefname_Zoutfile)rbrcrdr<r=
page2Validates*z*ToolWizard.__init__.<locals>.page2ValidatezSelect personal data to saveaPlease check the tree of data which you want to backup. If you check the topmost node "user", all and every personal data is chosen, including Mozilla cache and desktop preferences. You may prefer to check subtrees. The subtrees are taken in account only when no node is checked above.Fcstdtrtjtdd}tj|rt|d	|
j
dddnDtdg
dtd	}|dS)
NrHrwhome)rootpathFTzNothing is availablez-No personal data in the persistence partition)rrZrBenter_rlpathjoinexistsrsetRootPathsetModelsetRootIndexparent_indexsetAnimatedsetIndentationsetSortingEnabledrsetHorizontalHeaderLabelsr]ZsetUniformRowHeightsrZ	appendRow)r_ruZnode1)rzmodelmpr;rdtreer<r=	page3Inits0








z&ToolWizard.__init__.<locals>.page3Initc
s@sdSgfdd}j}j||ddtd}d}rjtd|d	\}}|r<d
}d|gfdd
D}j	j
}d|}	t}
j	j

td|d}|dkrdSfdd}t|||||tj|gddd
}
dj|
<|
dS)NTcs:|tjkr6dd||gD}tjj|dS)NcSsg|]}|qSr<)data).0indexr<r<r=
<listcomp>szJToolWizard.__init__.<locals>.page3validate.<locals>.cb.<locals>.<listcomp>)
checkStaterCheckedr,rlrxry)istackpathdata)rto_saver<r=cbsz6ToolWizard.__init__.<locals>.page3validate.<locals>.cbcallbackzDATA-{}.tgzrfrVzSave personal data archivez0TAR-GZIP archives (*.tgz,*.tar.gz);;Any file (*)z/usr/bin/tarZczvfcs g|]}tjtd|qS)rs)rlrxryrB)rr5rr<r=rsz>ToolWizard.__init__.<locals>.page3validate.<locals>.<listcomp>z$Save personal persistence data to {}z
Save to {}rHcsfddS)NcsS)N)exit_r<rr<r=<lambda>
zXToolWizard.__init__.<locals>.page3validate.<locals>.makeFinishCallback.<locals>.<lambda>r<r<rr<r=makeFinishCallbackszFToolWizard.__init__.<locals>.page3validate.<locals>.makeFinishCallbackz	save-datazClose the log of the archive)finishCallbackrmZcreatefiles
actionMessageZ
buttonMessage)r~traverseDirectoryWhileUncheckedr&rrhrirrjr]ui	tabWidgetcountr
addTab
rindexFromDevrZrrlrmmonitorsstart)r_rrrorprqcommandargsntitle	newWidgetrindexrr9)rzrrmwrd)rr=
page3validatesdz*ToolWizard.__init__.<locals>.page3validatezrNow, you have carefully backuped sensistive data, you may erase the persistence; however, you can still cancel it.c
	sdrdrdt}td|ddfdd}d	}d
ddd
d|g}jj}d|}t}jj	td|
d}|dkrdSt||||d|d}	dj|	<|	
dS)Nok1ok2rHz	umount {}Tr$csfdd}|S)Nc	sd}tdt}|js&d}W5QRX|rBtdtdt*}tjt|d}td	|ddW5QRXt
dd	dtdS)	NFrHTzpersistence.confzecho '/ union' > {}r$zPersistence erasedz)Persistence data have been erased from {})
rrZrBcapacityr>rlrxryrr&rinformationr])Zmust_formatrconfFiler;rdr<r=r%szXToolWizard.__init__.<locals>.page4validate.<locals>.page4CallBackMaker.<locals>.callbackr<rrr<r=page4CallBackMaker$szFToolWizard.__init__.<locals>.page4validate.<locals>.page4CallBackMakerZmkfsz-Fz-LZpersistencez-tZext4zFormat the partition {}Z	Formating)rr)rZrBrr&rrrr]r
rrrrr)
r_rArrrrrrrr9)rr;rdr<r=
page4validate s:z*ToolWizard.__init__.<locals>.page4validatez4Yes, I am sure that I want to erase the persistence. Yes again, I am completely sure!rr)N)N)N)N)N)r__init__setWindowTitler]rsetTitlesetSubTitlerhide
registerFieldr
not_self_keysrZtoggledconnect	addWidget	setLayoutaddPagerZr&rinitializePagevalidatePager	r)rdrrHlayoutrPrCrbpage2r`rerrZpage3rrZpage4rZ
request1CBZ
request2CBr<)rbrzrrrrcrNr;rOrdrr=ras~








7

4



zToolWizard.__init__N__name__
__module____qualname____doc__rr<r<r<r=rE\srEc@seZdZdZddZdS)CloneWizardzC
    The wizard associated to the "Clone" button of live-clone
    cs`tdtddtd	
didfdd	}td	
d
d fdd	}j|t
}jd
dD]D}j|}td|d|}||<|j|||q||t}t}	|	td|	|	||	|||tdt
dtjdd!fdd	}
|
_drdndt
}|d"fdd	}t d}|j!||||d#fdd	}
|
_"dS)$rFz$Clone a Freeduc system to USB driveszSelect the target diskszPlease check the disks where you want to clone the system. Warning: all data exiting on those disks will be erased, you can still Escape from this process.TzselectedDisks*rXcs>ddD}d|}d||dkr:|dS)z<
            callback for changes in checkboxes
            cSs"g|]\}}|tjkr|qSr<)rrr)rbrCr<r<r=rxszECloneWizard.__init__.<locals>.updateSelectedDisks.<locals>.<listcomp>,
selectedDisksrXN)itemsryrJsetText)rselectedZsel)boxesrNrr<r=updateSelectedDisksts

z1CloneWizard.__init__.<locals>.updateSelectedDisks0vfatcsdd}|D]0}zt||}||}WqYq:YqXq|}|dkrJd}d||dS)zH
            callback for changes VFAT size lineEdit widget
            rVrrN)floatrJr)r3valuecharv)rNvfatLineEditr<r=updateVFATsizes
z,CloneWizard.__init__.<locals>.updateVFATsizerQrRz{} [{}]z, zSize of a VFAT partition (GB):zsource*/usr/lib/live/mount/persistenceNcsrddS)Nz7AUTOCLONE (Freeduc disks can clone themselves natively))r)r_)ownClone
sourceEditr<r=res
z'CloneWizard.__init__.<locals>.page2initzSource of the core systemz6The program is running from a Freeduc GNU-Linux systemz4The program is running from a plain GNU-Linux systemcs.tjddd\}}d|dS)NzChoose an image to clonez!ISO Images (*.iso);;All files (*))Zcaptionfiltersource)rZgetOpenFileNamer]rJ)eventrrq)rrdr<r=	chooseISOs

z'CloneWizard.__init__.<locals>.chooseISOz$Choose the source of the core systemc
sd}d}d}|drd}tdd}|dddd	}d
|d|dj|d
}t|dttd\}}t	d|
}	t|	d}
|
ddd}d
dD]}|}|dkrdS|dkrdjdddtt|dd||g	}
ndjddd||g}
jj}d|}jjtd|t||
|||tjd}	|j|	<|	qdS)Nz/usr/bin/python3rZ	AUTOCLONEown$/usr/lib/live/mount/persistence/sd*1rr/devrX sudo LANG=C /usr/sbin/sfdisk -l 	 | grep '1'sourceDeviceTr rr.* ([.\d]+)G.*r#rrz{}/makeLiveStick.pyz--vfat-sizez--no-persistence-seedz--iso-filesizei@z--source
Cloning to {}iso_filesizerm)rZ
startswithglobr[r&rrr'r*r+r(rr-r)rwdrKrBr/rrrr]rr
rrlrmrr)r_rrr
mountpointrr4replyrqr9r3r2rrrr)rrrdrr<r=
page2validatesZ








z+CloneWizard.__init__.<locals>.page2validate)rX)r)N)N)N)#rrrr]rrrrsetReadOnlyrrZ
textEditedrrrlesCles
parts_summaryrr&ryZstateChangedrZ
addStretchrrrrrrlrxrzrr
clickedr)rdrrrrr`
shortPartsZchbfrZfrLayoutrerZchooseButtonrr<)	rrrrNrrrdrrr=rest










4
zCloneWizard.__init__Nrr<r<r<r=r`src@seZdZdZddZdS)DiskinstallWizardz{
    The wizard associated to the "Clone" button of live-clone
    but only when the --diskinstall option is triggered
    cstdd
fdd	}t}|d|djjddt	}t
d	}t
d
}|d||d||||||
|||_|dS)rFz'Clone a Freeduc system to the hard diskNcsd}d}td}|s4tdddS|d}|dd	dd
}d|d|d
j|d}t|dttd\}}t	
d|}	t|	
d}
|
ddd}d|}jtd|d}
dg}t|
||tjd}	|j|	<|	dS)Nrz/dev/sdarWarningzTYou are not running this application from a live USB key. Aborting the clone action.TrrrrXrrrrrrr#rrz/bin/shz/usr/sbin/cloneToSdar)rrwarningr]r[r&rrr'r*r+r(rr-rrr
rrlrmrr)r_rr2Zmountpointsrrr4rrqr9r3rrrrrrdr<r=
page1validate	s0

z1DiskinstallWizard.__init__.<locals>.page1validatezDANGER ZONEzYour USB disk is /dev/{usb}, its image would be written on the hard disk /dev/{hard}. Are you really sure that you want to erase and loose any data available on the hard disk /dev/{hard}?Zsda)ZusbZhardz2Yes, I am sure that I want to erase the hard disk.rrr)N)rrrr]rrrr&owndiskrrrrrrr)rdrrrNrZcb1Zcb2r<rr=rs"



zDiskinstallWizard.__init__Nrr<r<r<r=rsrc@seZdZdZddZdS)	RunWizardz8
        wizard for the runButton of live-clone
        c
st||tdd|D||dt|}||d||dt}id}D]4}t	||d}|r|
dd}||||<qht|
dd
fd
d	}	|	|_|d||||d	S)z
            the constructor
            @param mw a MyMain (<= QMainWindow) instance
            @param devices a list of paths to USB devices
            @param available an Available instance
            cSsg|]}|qSr<r<)rrCr<r<r=rAsz&RunWizard.__init__.<locals>.<listcomp>zRun a disk in a virtual machinerGz6Which disk do you want to launch in a virtual machine?TrSFNcs<g}D]}|r||qd|t|S)Nr)rIr,rrybool)r_Z
foundDisksrdisksrOr<r=rSsz)RunWizard.__init__.<locals>.page1validater)N)rrsortedrr]rrrrrZ
setCheckedrrrrrrrr)
rdrdevicesZ	availablerNrfirstrCrrr<rr=r9s2





zRunWizard.__init__Nrr<r<r<r=r5sr)r)*rPyQt5.QtWidgetsrrrrrrrr	r
rrr
rrrZPyQt5.QtGuirrPyQt5.QtCorertoolsrrmonitorrr
subprocessrrrrrlr*rr>rDrErrrr<r<r<r=<module>s"D
<9