Remove productimg phase
JIRA: COMPOSE-4004 Signed-off-by: Haibo Lin <hlin@redhat.com>
This commit is contained in:
parent
38f6162b46
commit
794d151bef
BIN
doc/_static/phases.png
vendored
BIN
doc/_static/phases.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 22 KiB |
719
doc/_static/phases.svg
vendored
719
doc/_static/phases.svg
vendored
@ -1,6 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
@ -9,58 +7,58 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="771.66455"
|
||||
height="221.50018"
|
||||
viewBox="0 0 771.66458 221.50019"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
sodipodi:docname="phases.svg"
|
||||
inkscape:export-filename="/home/lsedlar/repos/pungi/doc/_static/phases.png"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
inkscape:export-filename="/home/lsedlar/repos/pungi/doc/_static/phases.png"
|
||||
sodipodi:docname="phases.svg"
|
||||
inkscape:version="1.0beta2 (2b71d25, 2019-12-03)"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
viewBox="0 0 771.66458 221.50019"
|
||||
height="221.50018"
|
||||
width="771.66455">
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.169022"
|
||||
inkscape:cx="396.63448"
|
||||
inkscape:cy="97.894202"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
units="px"
|
||||
inkscape:document-rotation="0"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
fit-margin-left="0"
|
||||
fit-margin-top="0"
|
||||
inkscape:guide-bbox="true"
|
||||
showguides="true"
|
||||
inkscape:document-rotation="0"
|
||||
units="px"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="23"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="1035"
|
||||
inkscape:window-width="1920"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:cy="97.894202"
|
||||
inkscape:cx="396.63448"
|
||||
inkscape:zoom="1.169022"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="1"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base" />
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="Arrow1Lend"
|
||||
refX="0"
|
||||
refY="0"
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Lend">
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
id="path4451"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path4451" />
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<metadata
|
||||
@ -71,415 +69,398 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="matrix(1.066667,0,0,1.066667,-2.473231,-910.85239)"
|
||||
id="layer1"
|
||||
inkscape:label="Vrstva 1"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Vrstva 1">
|
||||
id="layer1"
|
||||
transform="matrix(1.066667,0,0,1.066667,-2.473231,-910.85239)">
|
||||
<g
|
||||
transform="translate(-1.131703,-80.47309)"
|
||||
id="g3411">
|
||||
id="g3411"
|
||||
transform="translate(71.99326,-80.817124)">
|
||||
<rect
|
||||
style="fill:#8ae234;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3340"
|
||||
width="26.295755"
|
||||
height="49.214859"
|
||||
x="953.49097"
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="49.250374"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
x="953.49097"
|
||||
height="49.214859"
|
||||
width="26.295755"
|
||||
id="rect3340"
|
||||
style="fill:#8ae234;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="51.554729"
|
||||
id="text3360"
|
||||
y="970.26605"
|
||||
id="text3360"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3362"
|
||||
x="51.554729"
|
||||
x="51.554729"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.1479px;line-height:1.25"
|
||||
y="970.26605"
|
||||
style="font-size:13.14787769px;line-height:1.25">Pkgset</tspan></text>
|
||||
x="51.554729"
|
||||
id="tspan3362"
|
||||
sodipodi:role="line">Pkgset</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(3.704976,-80.47309)"
|
||||
id="g3446">
|
||||
id="g3446"
|
||||
transform="translate(-22.545013,-80.817124)">
|
||||
<rect
|
||||
y="554.10059"
|
||||
x="953.49097"
|
||||
height="115.80065"
|
||||
width="26.295755"
|
||||
id="rect3338-1"
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
style="fill:#e9b96e;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="556.95709"
|
||||
y="971.54041"
|
||||
id="text3384-0"><tspan
|
||||
y="971.54041"
|
||||
x="556.95709"
|
||||
sodipodi:role="line"
|
||||
id="tspan3391"
|
||||
style="font-size:13.14749908px;line-height:1.25">ImageChecksum</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(125.75393,-80.47309)"
|
||||
id="g3398">
|
||||
<rect
|
||||
y="553.98242"
|
||||
x="953.49097"
|
||||
height="46.01757"
|
||||
id="rect3338-1"
|
||||
width="26.295755"
|
||||
id="rect3400"
|
||||
style="fill:#3465a4;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
height="115.80065"
|
||||
x="953.49097"
|
||||
y="554.10059" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="557.61566"
|
||||
y="971.33813"
|
||||
id="text3396"><tspan
|
||||
id="text3384-0"
|
||||
y="971.54041"
|
||||
x="556.95709"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.1475px;line-height:1.25"
|
||||
id="tspan3391"
|
||||
sodipodi:role="line"
|
||||
id="tspan3398"
|
||||
x="557.61566"
|
||||
y="971.33813"
|
||||
style="font-size:13.14787769px;line-height:1.25">Test</tspan></text>
|
||||
x="556.95709"
|
||||
y="971.54041">ImageChecksum</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3398"
|
||||
transform="translate(101.37893,-80.817124)">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
style="fill:#3465a4;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3400"
|
||||
width="26.295755"
|
||||
height="46.01757"
|
||||
x="953.49097"
|
||||
y="553.98242" />
|
||||
<text
|
||||
id="text3396"
|
||||
y="971.33813"
|
||||
x="557.61566"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.1479px;line-height:1.25"
|
||||
y="971.33813"
|
||||
x="557.61566"
|
||||
id="tspan3398"
|
||||
sodipodi:role="line">Test</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(71.249964,-0.34404039)"
|
||||
id="g3720">
|
||||
<rect
|
||||
style="fill:#fce94f;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3336"
|
||||
width="26.295755"
|
||||
height="39.669899"
|
||||
x="873.01788"
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="2.3186533"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
x="873.01788"
|
||||
height="39.669899"
|
||||
width="26.295755"
|
||||
id="rect3336"
|
||||
style="fill:#fce94f;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="6.2600794"
|
||||
id="text3356"
|
||||
y="891.1604"
|
||||
id="text3356"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3358"
|
||||
x="6.2600794"
|
||||
x="6.2600794"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.1479px;line-height:1.25"
|
||||
y="891.1604"
|
||||
style="font-size:13.14787769px;line-height:1.25">Init</tspan></text>
|
||||
x="6.2600794"
|
||||
id="tspan3358"
|
||||
sodipodi:role="line">Init</tspan></text>
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3642"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.17466855px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
|
||||
d="M 100.90864,859.8891 H 654.22706"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.17466855px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
|
||||
<g
|
||||
id="g241"
|
||||
transform="translate(-60.108974,42.1407)">
|
||||
<rect
|
||||
style="fill:#a40000;fill-rule:evenodd;stroke:none;stroke-width:1.10477591px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3350"
|
||||
width="26.295755"
|
||||
height="101.73411"
|
||||
x="830.8772"
|
||||
y="400.8551"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="403.15945"
|
||||
y="847.65234"
|
||||
id="text3380"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3382"
|
||||
x="403.15945"
|
||||
y="847.65234"
|
||||
style="font-size:13.14787769px;line-height:1.25">Productimg</tspan></text>
|
||||
</g>
|
||||
id="path3642"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
transform="translate(75.925692,-0.34404039)"
|
||||
id="g3668">
|
||||
<g
|
||||
id="g3663">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="103.46365"
|
||||
x="873.01788"
|
||||
height="231.47725"
|
||||
width="26.295755"
|
||||
style="fill:#fcaf3e;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3342"
|
||||
style="fill:#fcaf3e;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
width="26.295755"
|
||||
height="231.47725"
|
||||
x="873.01788"
|
||||
y="103.46365"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
id="text3364"
|
||||
y="891.06732"
|
||||
x="105.76799"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
y="891.06732"
|
||||
x="105.76799"
|
||||
x="105.76799"
|
||||
y="891.06732"
|
||||
id="text3364"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3366"
|
||||
sodipodi:role="line">Buildinstall</tspan></text>
|
||||
x="105.76799"
|
||||
y="891.06732"
|
||||
style="font-size:13.1479px;line-height:1.25">Buildinstall</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3639">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="103.28194"
|
||||
x="905.2099"
|
||||
height="54.197887"
|
||||
width="26.295755"
|
||||
style="fill:#729fcf;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3344"
|
||||
style="fill:#729fcf;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
width="26.295755"
|
||||
height="54.197887"
|
||||
x="905.2099"
|
||||
y="103.28194"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
id="text3368"
|
||||
y="923.25934"
|
||||
x="106.1384"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
y="923.25934"
|
||||
x="106.1384"
|
||||
x="106.1384"
|
||||
y="923.25934"
|
||||
id="text3368"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3370"
|
||||
sodipodi:role="line">Gather</tspan></text>
|
||||
x="106.1384"
|
||||
y="923.25934"
|
||||
style="font-size:13.1479px;line-height:1.25">Gather</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3647">
|
||||
<g
|
||||
id="g3644">
|
||||
<rect
|
||||
style="fill:#ad7fa8;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3346"
|
||||
width="26.295755"
|
||||
height="72.729973"
|
||||
x="905.2099"
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="162.92607"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
x="905.2099"
|
||||
height="72.729973"
|
||||
width="26.295755"
|
||||
id="rect3346"
|
||||
style="fill:#ad7fa8;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<text
|
||||
id="text3372"
|
||||
y="923.25934"
|
||||
x="165.23042"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
y="923.25934"
|
||||
x="165.23042"
|
||||
x="165.23042"
|
||||
y="923.25934"
|
||||
id="text3372"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3374"
|
||||
sodipodi:role="line">ExtraFiles</tspan></text>
|
||||
x="165.23042"
|
||||
y="923.25934"
|
||||
style="font-size:13.1479px;line-height:1.25">ExtraFiles</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3658">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="241.10229"
|
||||
x="905.2099"
|
||||
height="78.636055"
|
||||
width="26.295755"
|
||||
style="fill:#e9b96e;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3348"
|
||||
style="fill:#e9b96e;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text3376"
|
||||
y="921.86945"
|
||||
x="243.95874"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
y="921.86945"
|
||||
x="243.95874"
|
||||
id="tspan3378"
|
||||
sodipodi:role="line">Createrepo</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3408"
|
||||
transform="translate(-150.564,114.11662)">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="254.60153"
|
||||
x="823.54675"
|
||||
height="53.653927"
|
||||
width="26.295755"
|
||||
id="rect3350-3"
|
||||
style="fill:#729fcf;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
height="78.636055"
|
||||
x="905.2099"
|
||||
y="241.10229"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
id="text3380-2"
|
||||
y="840.3219"
|
||||
x="256.90588"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
id="tspan3406"
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="243.95874"
|
||||
y="921.86945"
|
||||
id="text3376"><tspan
|
||||
sodipodi:role="line"
|
||||
x="256.90588"
|
||||
y="840.3219">OSTree</tspan></text>
|
||||
id="tspan3378"
|
||||
x="243.95874"
|
||||
y="921.86945"
|
||||
style="font-size:13.1479px;line-height:1.25">Createrepo</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-328.39105,-85.517823)"
|
||||
id="g288">
|
||||
transform="translate(-150.564,114.11662)"
|
||||
id="g3408">
|
||||
<rect
|
||||
style="fill:#729fcf;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3350-3"
|
||||
width="26.295755"
|
||||
height="53.653927"
|
||||
x="823.54675"
|
||||
y="254.60153"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="256.90588"
|
||||
y="840.3219"
|
||||
id="text3380-2"><tspan
|
||||
y="840.3219"
|
||||
x="256.90588"
|
||||
sodipodi:role="line"
|
||||
id="tspan3406"
|
||||
style="font-size:13.1479px;line-height:1.25">OSTree</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g288"
|
||||
transform="translate(-328.39105,-85.517823)">
|
||||
<g
|
||||
transform="translate(0.56706579)"
|
||||
id="g3653">
|
||||
id="g3653"
|
||||
transform="translate(0.56706579)">
|
||||
<rect
|
||||
style="fill:#fcaf3e;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3428"
|
||||
width="26.295755"
|
||||
height="101.85102"
|
||||
x="1022.637"
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="490.33765"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
x="1022.637"
|
||||
height="101.85102"
|
||||
width="26.295755"
|
||||
id="rect3428"
|
||||
style="fill:#fcaf3e;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="492.642"
|
||||
id="text3430"
|
||||
y="1039.4121"
|
||||
id="text3430"><tspan
|
||||
id="tspan283"
|
||||
sodipodi:role="line"
|
||||
x="492.642"
|
||||
x="492.642"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:12px;line-height:0"
|
||||
y="1039.4121"
|
||||
style="font-size:11.99999714px;line-height:0">OSTreeInstaller</tspan></text>
|
||||
x="492.642"
|
||||
sodipodi:role="line"
|
||||
id="tspan283">OSTreeInstaller</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g3458"
|
||||
transform="translate(28.723958,-80.473035)">
|
||||
<rect
|
||||
y="420.13605"
|
||||
x="953.49097"
|
||||
height="102.36562"
|
||||
width="26.295755"
|
||||
id="rect3338"
|
||||
style="fill:#edd400;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="422.99252"
|
||||
y="971.54041"
|
||||
id="text3384"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan3386"
|
||||
transform="translate(-29.683562,-0.34408888)"
|
||||
id="g236">
|
||||
<g
|
||||
id="g3458"
|
||||
transform="translate(28.723958,-80.473035)">
|
||||
<rect
|
||||
y="420.13605"
|
||||
x="953.49097"
|
||||
height="102.36562"
|
||||
width="26.295755"
|
||||
id="rect3338"
|
||||
style="fill:#edd400;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="422.99252"
|
||||
y="971.54041">Createiso</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(28.467511,-84.181232)"
|
||||
id="g3453">
|
||||
<rect
|
||||
style="fill:#73d216;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3352"
|
||||
width="26.295755"
|
||||
height="101.85102"
|
||||
x="989.65247"
|
||||
y="420.39337"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="422.69772"
|
||||
y="1006.4276"
|
||||
id="text3388"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan3390"
|
||||
y="971.54041"
|
||||
id="text3384"><tspan
|
||||
style="font-size:13.1479px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan3386"
|
||||
x="422.99252"
|
||||
y="971.54041">Createiso</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(28.467511,-84.181232)"
|
||||
id="g3453">
|
||||
<rect
|
||||
style="fill:#73d216;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3352"
|
||||
width="26.295755"
|
||||
height="101.85102"
|
||||
x="989.65247"
|
||||
y="420.39337"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="422.69772"
|
||||
y="1006.4276">LiveImages</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(28.467511,-88.141877)"
|
||||
id="g3448">
|
||||
<rect
|
||||
style="fill:#f57900;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3354"
|
||||
width="26.295755"
|
||||
height="101.85102"
|
||||
x="1026.0664"
|
||||
y="420.39337"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="422.69772"
|
||||
y="1042.8416"
|
||||
id="text3392"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan3394"
|
||||
y="1006.4276"
|
||||
id="text3388"><tspan
|
||||
style="font-size:13.1479px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan3390"
|
||||
x="422.69772"
|
||||
y="1006.4276">LiveImages</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(28.467511,-88.141877)"
|
||||
id="g3448">
|
||||
<rect
|
||||
style="fill:#f57900;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect3354"
|
||||
width="26.295755"
|
||||
height="101.85102"
|
||||
x="1026.0664"
|
||||
y="420.39337"
|
||||
transform="matrix(0,1,1,0,0,0)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
x="422.69772"
|
||||
y="1042.8416">ImageBuild</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(27.760419,-92.458101)"
|
||||
id="g3443">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="421.10046"
|
||||
x="1062.8359"
|
||||
height="101.85102"
|
||||
width="26.295755"
|
||||
id="rect3422"
|
||||
style="fill:#edd400;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text3424"
|
||||
y="1079.6111"
|
||||
x="423.40482"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.14787769px;line-height:1.25"
|
||||
y="1042.8416"
|
||||
id="text3392"><tspan
|
||||
style="font-size:13.1479px;line-height:1.25"
|
||||
sodipodi:role="line"
|
||||
id="tspan3394"
|
||||
x="422.69772"
|
||||
y="1042.8416">ImageBuild</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(27.760419,-92.458101)"
|
||||
id="g3443">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="421.10046"
|
||||
x="1062.8359"
|
||||
height="101.85102"
|
||||
width="26.295755"
|
||||
id="rect3422"
|
||||
style="fill:#edd400;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text3424"
|
||||
y="1079.6111"
|
||||
x="423.40482"
|
||||
sodipodi:role="line"
|
||||
id="tspan3434">LiveMedia</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g306"
|
||||
transform="translate(-41.476764,-46.1016)">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="490.33765"
|
||||
x="1048.9327"
|
||||
height="101.85102"
|
||||
width="26.295755"
|
||||
id="rect290"
|
||||
style="fill:#c17d11;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text294"
|
||||
y="1065.7078"
|
||||
x="492.642"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:11.99999714px;line-height:0"
|
||||
id="tspan301"
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:13.1479px;line-height:1.25"
|
||||
y="1079.6111"
|
||||
x="423.40482"
|
||||
sodipodi:role="line"
|
||||
id="tspan3434">LiveMedia</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g306"
|
||||
transform="translate(-41.476764,-46.1016)">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="490.33765"
|
||||
x="1048.9327"
|
||||
height="101.85102"
|
||||
width="26.295755"
|
||||
id="rect290"
|
||||
style="fill:#c17d11;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text294"
|
||||
y="1065.7078"
|
||||
x="492.642"
|
||||
y="1065.7078">OSBS</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3819"
|
||||
transform="translate(0,-16.949078)">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="448.86087"
|
||||
x="1052.2335"
|
||||
height="101.85102"
|
||||
width="26.295755"
|
||||
id="rect3801"
|
||||
style="fill:#73d216;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text3805"
|
||||
y="1069.0087"
|
||||
x="451.16522"
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
id="tspan3812"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:12px;line-height:0"
|
||||
id="tspan301"
|
||||
sodipodi:role="line"
|
||||
x="492.642"
|
||||
y="1065.7078">OSBS</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3819"
|
||||
transform="translate(0,-16.949078)">
|
||||
<rect
|
||||
transform="matrix(0,1,1,0,0,0)"
|
||||
y="448.86087"
|
||||
x="1052.2335"
|
||||
height="101.85102"
|
||||
width="26.295755"
|
||||
id="rect3801"
|
||||
style="fill:#73d216;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text3805"
|
||||
y="1069.0087"
|
||||
x="451.16522"
|
||||
sodipodi:role="line"
|
||||
style="font-size:13.14787769px;line-height:1.25">ExtraIsos</tspan></text>
|
||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
xml:space="preserve"><tspan
|
||||
id="tspan3812"
|
||||
y="1069.0087"
|
||||
x="451.16522"
|
||||
sodipodi:role="line"
|
||||
style="font-size:13.1479px;line-height:1.25">ExtraIsos</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
@ -1046,44 +1046,6 @@ in the ``os/`` directory and media. The checksums generated are determined by
|
||||
}
|
||||
|
||||
|
||||
Productimg Settings
|
||||
===================
|
||||
Product images are placed on installation media and provide additional branding
|
||||
and Anaconda changes specific to product variants.
|
||||
|
||||
Options
|
||||
-------
|
||||
|
||||
**productimg** = False
|
||||
(*bool*) -- create product images; requires buildinstall_method option
|
||||
|
||||
**productimg_install_class**
|
||||
(:ref:`scm_dict <scm_support>`, *str*) -- reference to install class **file**
|
||||
|
||||
**productimg_po_files**
|
||||
(:ref:`scm_dict <scm_support>`, *str*) -- reference to a **directory** with
|
||||
po files for install class translations
|
||||
|
||||
|
||||
Example
|
||||
-------
|
||||
::
|
||||
|
||||
productimg = True
|
||||
productimg_install_class = {
|
||||
"scm": "git",
|
||||
"repo": "http://git.example.com/productimg.git",
|
||||
"branch": None,
|
||||
"file": "fedora23/%(variant_id)s.py",
|
||||
}
|
||||
productimg_po_files = {
|
||||
"scm": "git",
|
||||
"repo": "http://git.example.com/productimg.git",
|
||||
"branch": None,
|
||||
"dir": "po",
|
||||
}
|
||||
|
||||
|
||||
CreateISO Settings
|
||||
==================
|
||||
|
||||
|
@ -78,12 +78,6 @@ compose fails in a later stage, the commit will not be reverted.
|
||||
Implementation wise, this phase runs ``rpm-ostree`` command in Koji runroot (to
|
||||
allow running on different arches).
|
||||
|
||||
Productimg
|
||||
----------
|
||||
|
||||
Creates ``product.img`` files for customizing the bootable media created in
|
||||
``buildinstall`` phase.
|
||||
|
||||
Createiso
|
||||
---------
|
||||
|
||||
|
@ -52,22 +52,18 @@ from productmd.composeinfo import COMPOSE_TYPES
|
||||
from . import util
|
||||
|
||||
|
||||
def _will_productimg_run(conf):
|
||||
return conf.get('productimg', False) and conf.get('buildinstall_method', '')
|
||||
|
||||
|
||||
def is_jigdo_needed(conf):
|
||||
return conf.get('create_jigdo', True)
|
||||
|
||||
|
||||
def is_isohybrid_needed(conf):
|
||||
"""The isohybrid command is needed locally only for productimg phase and
|
||||
"""The isohybrid command is needed locally only for
|
||||
createiso phase without runroot. If that is not going to run, we don't need
|
||||
to check for it. Additionally, the syslinux package is only available on
|
||||
x86_64 and i386.
|
||||
"""
|
||||
runroot_tag = conf.get('runroot_tag', '')
|
||||
if runroot_tag and not _will_productimg_run(conf):
|
||||
if runroot_tag:
|
||||
return False
|
||||
if platform.machine() not in ('x86_64', 'i686', 'i386'):
|
||||
print('Not checking for /usr/bin/isohybrid due to current architecture. '
|
||||
@ -77,10 +73,10 @@ def is_isohybrid_needed(conf):
|
||||
|
||||
|
||||
def is_genisoimage_needed(conf):
|
||||
"""This is only needed locally for productimg and createiso without runroot.
|
||||
"""This is only needed locally for createiso without runroot.
|
||||
"""
|
||||
runroot_tag = conf.get('runroot_tag', '')
|
||||
if runroot_tag and not _will_productimg_run(conf):
|
||||
if runroot_tag:
|
||||
return False
|
||||
return True
|
||||
|
||||
@ -98,7 +94,6 @@ tools = [
|
||||
("isomd5sum", "/usr/bin/checkisomd5", None),
|
||||
("jigdo", "/usr/bin/jigdo-lite", is_jigdo_needed),
|
||||
("genisoimage", "/usr/bin/genisoimage", is_genisoimage_needed),
|
||||
("gettext", "/usr/bin/msgfmt", _will_productimg_run),
|
||||
("syslinux", "/usr/bin/isohybrid", is_isohybrid_needed),
|
||||
# createrepo, modifyrepo and mergerepo are not needed by default, only when
|
||||
# createrepo_c is not configured
|
||||
@ -1269,11 +1264,8 @@ def make_schema():
|
||||
"signing_key_password_file": {"type": "string"},
|
||||
"signing_command": {"type": "string"},
|
||||
"productimg": {
|
||||
"type": "boolean",
|
||||
"default": False
|
||||
"deprecated": "remove it. Productimg phase has been removed"
|
||||
},
|
||||
"productimg_install_class": {"$ref": "#/definitions/str_or_scm_dict"},
|
||||
"productimg_po_files": {"$ref": "#/definitions/str_or_scm_dict"},
|
||||
"iso_size": {
|
||||
"anyOf": [
|
||||
{"type": "string"},
|
||||
@ -1396,13 +1388,6 @@ def get_num_cpus():
|
||||
# encountered and its value satisfies the lambda, an error is reported for each
|
||||
# missing (for requires) option in the list.
|
||||
CONFIG_DEPS = {
|
||||
"productimg": {
|
||||
"requires": (
|
||||
(lambda x: bool(x), ["productimg_install_class"]),
|
||||
(lambda x: bool(x), ["productimg_po_files"]),
|
||||
),
|
||||
},
|
||||
|
||||
"buildinstall_method": {
|
||||
"conflicts": (
|
||||
(lambda val: val == "buildinstall", ["lorax_options"]),
|
||||
|
@ -332,14 +332,6 @@ def write_tree_info(compose, arch, variant, timestamp=None, bi=None):
|
||||
ti.images.images[platform][image] = path
|
||||
ti.checksums.add(path, createrepo_checksum, root_dir=os_tree)
|
||||
|
||||
# add product.img to images-$arch
|
||||
product_img = os.path.join(os_tree, "images", "product.img")
|
||||
product_img_relpath = relative_path(product_img, os_tree.rstrip("/") + "/")
|
||||
if os.path.isfile(product_img):
|
||||
for platform in ti.images.images:
|
||||
ti.images.images[platform]["product.img"] = product_img_relpath
|
||||
ti.checksums.add(product_img_relpath, createrepo_checksum, root_dir=os_tree)
|
||||
|
||||
path = os.path.join(compose.paths.compose.os_tree(arch=arch, variant=variant), ".treeinfo")
|
||||
compose.log_info("Writing treeinfo: %s" % path)
|
||||
ti.dump(path)
|
||||
|
@ -324,16 +324,6 @@ class WorkPaths(object):
|
||||
path = os.path.join(path, file_name)
|
||||
return path
|
||||
|
||||
def product_img(self, variant, create_dir=True):
|
||||
"""
|
||||
Examples:
|
||||
work/global/product-Server.img
|
||||
"""
|
||||
file_name = "product-%s.img" % variant
|
||||
path = self.topdir(arch="global", create_dir=create_dir)
|
||||
path = os.path.join(path, file_name)
|
||||
return path
|
||||
|
||||
def iso_dir(self, arch, filename, create_dir=True):
|
||||
"""
|
||||
Examples:
|
||||
|
@ -21,7 +21,6 @@ from .weaver import WeaverPhase # noqa
|
||||
from .pkgset import PkgsetPhase # noqa
|
||||
from .gather import GatherPhase # noqa
|
||||
from .createrepo import CreaterepoPhase # noqa
|
||||
from .product_img import ProductimgPhase # noqa
|
||||
from .buildinstall import BuildinstallPhase # noqa
|
||||
from .extra_files import ExtraFilesPhase # noqa
|
||||
from .createiso import CreateisoPhase # noqa
|
||||
|
@ -1,276 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, see <https://gnu.org/licenses/>.
|
||||
|
||||
|
||||
"""
|
||||
Expected product.img paths
|
||||
==========================
|
||||
|
||||
RHEL 6
|
||||
------
|
||||
installclasses/$variant.py
|
||||
locale/$lang/LC_MESSAGES/comps.mo
|
||||
|
||||
RHEL 7
|
||||
------
|
||||
run/install/product/installclasses/$variant.py
|
||||
run/install/product/locale/$lang/LC_MESSAGES/comps.mo
|
||||
|
||||
Compatibility symlinks
|
||||
----------------------
|
||||
installclasses -> run/install/product/installclasses
|
||||
locale -> run/install/product/locale
|
||||
run/install/product/pyanaconda/installclasses -> ../installclasses
|
||||
"""
|
||||
|
||||
|
||||
import os
|
||||
import fnmatch
|
||||
import shutil
|
||||
from six.moves import shlex_quote
|
||||
|
||||
from kobo.shortcuts import run
|
||||
|
||||
from pungi.arch import split_name_arch
|
||||
from pungi.util import makedirs, pkg_is_rpm
|
||||
from pungi.phases.base import PhaseBase
|
||||
from pungi.wrappers import iso
|
||||
from pungi.wrappers.scm import get_file_from_scm, get_dir_from_scm
|
||||
|
||||
|
||||
class ProductimgPhase(PhaseBase):
|
||||
"""PRODUCTIMG"""
|
||||
name = "productimg"
|
||||
|
||||
def __init__(self, compose, pkgset_phase):
|
||||
PhaseBase.__init__(self, compose)
|
||||
# pkgset_phase provides package_sets and path_prefix
|
||||
self.pkgset_phase = pkgset_phase
|
||||
|
||||
def skip(self):
|
||||
if PhaseBase.skip(self):
|
||||
return True
|
||||
if not self.compose.conf["productimg"]:
|
||||
msg = "Config option 'productimg' not set. Skipping creating product images."
|
||||
self.compose.log_debug(msg)
|
||||
return True
|
||||
if not self.compose.conf["buildinstall_method"]:
|
||||
msg = "Not a bootable product. Skipping creating product images."
|
||||
self.compose.log_debug(msg)
|
||||
return True
|
||||
return False
|
||||
|
||||
def run(self):
|
||||
# create PRODUCT.IMG
|
||||
for variant in self.compose.get_variants():
|
||||
if variant.type != "variant" or variant.is_empty:
|
||||
continue
|
||||
create_product_img(self.compose, "global", variant)
|
||||
|
||||
# copy PRODUCT.IMG
|
||||
for arch in self.compose.get_arches():
|
||||
for variant in self.compose.get_variants(arch=arch):
|
||||
if variant.type != "variant" or variant.is_empty:
|
||||
continue
|
||||
image = self.compose.paths.work.product_img(variant)
|
||||
os_tree = self.compose.paths.compose.os_tree(arch, variant)
|
||||
target_dir = os.path.join(os_tree, "images")
|
||||
target_path = os.path.join(target_dir, "product.img")
|
||||
if not os.path.isfile(target_path):
|
||||
makedirs(target_dir)
|
||||
shutil.copy2(image, target_path)
|
||||
|
||||
for arch in self.compose.get_arches():
|
||||
for variant in self.compose.get_variants(arch=arch):
|
||||
if variant.type != "variant" or variant.is_empty:
|
||||
continue
|
||||
rebuild_boot_iso(self.compose, arch, variant, self.pkgset_phase.package_sets)
|
||||
|
||||
|
||||
def create_product_img(compose, arch, variant):
|
||||
# product.img is noarch (at least on rhel6 and rhel7)
|
||||
arch = "global"
|
||||
|
||||
msg = "Creating product.img (arch: %s, variant: %s)" % (arch, variant)
|
||||
image = compose.paths.work.product_img(variant)
|
||||
if os.path.exists(image):
|
||||
compose.log_warning("[SKIP ] %s" % msg)
|
||||
return
|
||||
|
||||
compose.log_info("[BEGIN] %s" % msg)
|
||||
|
||||
product_tmp = compose.mkdtemp(prefix="product_img_")
|
||||
install_class = compose.conf["productimg_install_class"].copy()
|
||||
install_class["file"] = install_class["file"] % {"variant_id": variant.id.lower()}
|
||||
install_dir = os.path.join(product_tmp, "installclasses")
|
||||
makedirs(install_dir)
|
||||
get_file_from_scm(install_class, target_path=install_dir)
|
||||
|
||||
po_files = compose.conf["productimg_po_files"]
|
||||
po_tmp = compose.mkdtemp(prefix="pofiles_")
|
||||
get_dir_from_scm(po_files, po_tmp, compose=compose)
|
||||
for po_file in os.listdir(po_tmp):
|
||||
if not po_file.endswith(".po"):
|
||||
continue
|
||||
lang = po_file[:-3]
|
||||
target_dir = os.path.join(product_tmp, "locale", lang, "LC_MESSAGES")
|
||||
makedirs(target_dir)
|
||||
run(["msgfmt", "--output-file", os.path.join(target_dir, "comps.mo"), os.path.join(po_tmp, po_file)])
|
||||
|
||||
shutil.rmtree(po_tmp)
|
||||
|
||||
ret, __ = run(["which", "guestmount"], can_fail=True)
|
||||
guestmount_available = not bool(ret) # return code 0 means that guestmount is available
|
||||
|
||||
mount_tmp = compose.mkdtemp(prefix="product_img_mount_")
|
||||
cmds = [
|
||||
# allocate image
|
||||
"dd if=/dev/zero of=%s bs=1k count=5760" % shlex_quote(image),
|
||||
# create file system
|
||||
"mke2fs -F %s" % shlex_quote(image),
|
||||
# use guestmount to mount the image, which doesn't require root privileges
|
||||
# LIBGUESTFS_BACKEND=direct: running qemu directly without libvirt
|
||||
"LIBGUESTFS_BACKEND=direct guestmount -a %s -m /dev/sda %s" % (shlex_quote(image), shlex_quote(mount_tmp)) if guestmount_available
|
||||
else "mount -o loop %s %s" % (shlex_quote(image), shlex_quote(mount_tmp)),
|
||||
"mkdir -p %s/run/install/product" % shlex_quote(mount_tmp),
|
||||
"cp -rp %s/* %s/run/install/product/" % (shlex_quote(product_tmp), shlex_quote(mount_tmp)),
|
||||
"mkdir -p %s/run/install/product/pyanaconda" % shlex_quote(mount_tmp),
|
||||
# compat symlink: installclasses -> run/install/product/installclasses
|
||||
"ln -s run/install/product/installclasses %s" % shlex_quote(mount_tmp),
|
||||
# compat symlink: locale -> run/install/product/locale
|
||||
"ln -s run/install/product/locale %s" % shlex_quote(mount_tmp),
|
||||
# compat symlink: run/install/product/pyanaconda/installclasses -> ../installclasses
|
||||
"ln -s ../installclasses %s/run/install/product/pyanaconda/installclasses" % shlex_quote(mount_tmp),
|
||||
"fusermount -u %s" % shlex_quote(mount_tmp) if guestmount_available
|
||||
else "umount %s" % shlex_quote(mount_tmp),
|
||||
# tweak last mount path written in the image
|
||||
"tune2fs -M /run/install/product %s" % shlex_quote(image),
|
||||
]
|
||||
run(" && ".join(cmds))
|
||||
shutil.rmtree(mount_tmp)
|
||||
|
||||
shutil.rmtree(product_tmp)
|
||||
|
||||
compose.log_info("[DONE ] %s" % msg)
|
||||
|
||||
|
||||
def rebuild_boot_iso(compose, arch, variant, package_sets):
|
||||
os_tree = compose.paths.compose.os_tree(arch, variant)
|
||||
buildinstall_dir = compose.paths.work.buildinstall_dir(arch)
|
||||
boot_iso = os.path.join(os_tree, "images", "boot.iso")
|
||||
product_img = compose.paths.work.product_img(variant)
|
||||
buildinstall_boot_iso = os.path.join(buildinstall_dir, "images", "boot.iso")
|
||||
buildinstall_method = compose.conf["buildinstall_method"]
|
||||
log_file = compose.paths.log.log_file(arch, "rebuild_boot_iso-%s.%s" % (variant, arch))
|
||||
|
||||
msg = "Rebuilding boot.iso (arch: %s, variant: %s)" % (arch, variant)
|
||||
|
||||
if not os.path.isfile(boot_iso):
|
||||
# nothing to do
|
||||
compose.log_warning("[SKIP ] %s" % msg)
|
||||
return
|
||||
|
||||
compose.log_info("[BEGIN] %s" % msg)
|
||||
|
||||
# read the original volume id
|
||||
volume_id = iso.get_volume_id(boot_iso)
|
||||
|
||||
# remove the original boot.iso (created during buildinstall) from the os dir
|
||||
os.remove(boot_iso)
|
||||
|
||||
tmp_dir = compose.mkdtemp(prefix="boot_iso_")
|
||||
mount_dir = compose.mkdtemp(prefix="boot_iso_mount_")
|
||||
|
||||
cmd = "mount -o loop %s %s" % (shlex_quote(buildinstall_boot_iso), shlex_quote(mount_dir))
|
||||
run(cmd, logfile=log_file, show_cmd=True)
|
||||
|
||||
images_dir = os.path.join(tmp_dir, "images")
|
||||
os.makedirs(images_dir)
|
||||
shutil.copy2(product_img, os.path.join(images_dir, "product.img"))
|
||||
|
||||
if os.path.isfile(os.path.join(mount_dir, "isolinux", "isolinux.bin")):
|
||||
os.makedirs(os.path.join(tmp_dir, "isolinux"))
|
||||
shutil.copy2(os.path.join(mount_dir, "isolinux", "isolinux.bin"), os.path.join(tmp_dir, "isolinux"))
|
||||
|
||||
graft_points = iso.get_graft_points([mount_dir, tmp_dir])
|
||||
graft_points_path = os.path.join(compose.paths.work.topdir(arch=arch), "boot-%s.%s.iso-graft-points" % (variant, arch))
|
||||
iso.write_graft_points(graft_points_path, graft_points, exclude=["*/TRANS.TBL", "*/boot.cat"])
|
||||
|
||||
mkisofs_kwargs = {}
|
||||
boot_files = None
|
||||
if buildinstall_method == "lorax":
|
||||
# TODO: $arch instead of ppc
|
||||
mkisofs_kwargs["boot_args"] = iso.get_boot_options(arch, "/usr/share/lorax/config_files/ppc")
|
||||
elif buildinstall_method == "buildinstall":
|
||||
boot_files = explode_anaconda(compose, arch, variant, package_sets)
|
||||
mkisofs_kwargs["boot_args"] = iso.get_boot_options(arch, boot_files)
|
||||
|
||||
# ppc(64) doesn't seem to support utf-8
|
||||
if arch in ("ppc", "ppc64"):
|
||||
mkisofs_kwargs["input_charset"] = None
|
||||
|
||||
mkisofs_cmd = iso.get_mkisofs_cmd(boot_iso, None, volid=volume_id, exclude=["./lost+found"], graft_points=graft_points_path, **mkisofs_kwargs)
|
||||
run(mkisofs_cmd, logfile=log_file, show_cmd=True)
|
||||
|
||||
cmd = "umount %s" % shlex_quote(mount_dir)
|
||||
run(cmd, logfile=log_file, show_cmd=True)
|
||||
|
||||
if arch == "x86_64":
|
||||
isohybrid_cmd = "isohybrid --uefi %s" % shlex_quote(boot_iso)
|
||||
run(isohybrid_cmd, logfile=log_file, show_cmd=True)
|
||||
elif arch == "i386":
|
||||
isohybrid_cmd = "isohybrid %s" % shlex_quote(boot_iso)
|
||||
run(isohybrid_cmd, logfile=log_file, show_cmd=True)
|
||||
|
||||
# implant MD5SUM to iso
|
||||
isomd5sum_cmd = iso.get_implantisomd5_cmd(boot_iso, compose.supported)
|
||||
isomd5sum_cmd = " ".join([shlex_quote(i) for i in isomd5sum_cmd])
|
||||
run(isomd5sum_cmd, logfile=log_file, show_cmd=True)
|
||||
|
||||
if boot_files:
|
||||
shutil.rmtree(boot_files)
|
||||
shutil.rmtree(tmp_dir)
|
||||
shutil.rmtree(mount_dir)
|
||||
|
||||
compose.log_info("[DONE ] %s" % msg)
|
||||
|
||||
|
||||
def explode_anaconda(compose, arch, variant, package_sets):
|
||||
tmp_dir = compose.mkdtemp(prefix="anaconda_")
|
||||
scm_dict = {
|
||||
"scm": "rpm",
|
||||
"repo": "anaconda.%s" % arch,
|
||||
"file": [
|
||||
"/usr/lib/anaconda-runtime/boot/*",
|
||||
]
|
||||
}
|
||||
# if scm is "rpm" and repo contains a package name, find the package(s) in package set
|
||||
if scm_dict["scm"] == "rpm" and not (scm_dict["repo"].startswith("/") or "://" in scm_dict["repo"]):
|
||||
rpms = []
|
||||
for pkgset in package_sets:
|
||||
for pkgset_file in pkgset[arch]:
|
||||
pkg_obj = pkgset[arch][pkgset_file]
|
||||
if not pkg_is_rpm(pkg_obj):
|
||||
continue
|
||||
pkg_name, pkg_arch = split_name_arch(scm_dict["repo"])
|
||||
if fnmatch.fnmatch(pkg_obj.name, pkg_name) and (pkg_arch is None or pkg_arch == pkg_obj.arch):
|
||||
compose.log_critical("%s %s %s" % (pkg_obj.name, pkg_name, pkg_arch))
|
||||
rpms.append(pkg_obj.file_path)
|
||||
scm_dict["repo"] = rpms
|
||||
|
||||
if not rpms:
|
||||
return None
|
||||
get_file_from_scm(scm_dict, tmp_dir, logger=compose._logger)
|
||||
return tmp_dir
|
@ -115,7 +115,6 @@ def run(config, topdir, has_old, offline, defined_variables):
|
||||
pungi.phases.CreaterepoPhase(compose),
|
||||
pungi.phases.OstreeInstallerPhase(compose, buildinstall_phase),
|
||||
pungi.phases.OSTreePhase(compose),
|
||||
pungi.phases.ProductimgPhase(compose, pkgset_phase),
|
||||
pungi.phases.CreateisoPhase(compose, buildinstall_phase),
|
||||
pungi.phases.ExtraIsosPhase(compose),
|
||||
pungi.phases.LiveImagesPhase(compose),
|
||||
|
@ -35,6 +35,8 @@ COMPOSE = None
|
||||
def main():
|
||||
global COMPOSE
|
||||
|
||||
PHASES_NAMES_MODIFIED = PHASES_NAMES + ['productimg']
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
group = parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument(
|
||||
@ -79,7 +81,7 @@ def main():
|
||||
parser.add_argument(
|
||||
"--skip-phase",
|
||||
metavar="PHASE",
|
||||
choices=PHASES_NAMES,
|
||||
choices=PHASES_NAMES_MODIFIED,
|
||||
action="append",
|
||||
default=[],
|
||||
help="skip a compose phase",
|
||||
@ -87,7 +89,7 @@ def main():
|
||||
parser.add_argument(
|
||||
"--just-phase",
|
||||
metavar="PHASE",
|
||||
choices=PHASES_NAMES,
|
||||
choices=PHASES_NAMES_MODIFIED,
|
||||
action="append",
|
||||
default=[],
|
||||
help="run only a specified compose phase",
|
||||
@ -224,6 +226,16 @@ def main():
|
||||
if not pungi.checks.check_skip_phases(logger, opts.skip_phase):
|
||||
sys.exit(1)
|
||||
errors, warnings = pungi.checks.validate(conf)
|
||||
|
||||
# TODO: workaround for config files containing skip_phase = productimg
|
||||
# Remove when all config files are up to date
|
||||
if 'productimg' in opts.skip_phase or 'productimg' in opts.just_phase:
|
||||
print('WARNING: productimg phase has been removed, please remove it from --skip-phase or --just-phase option', file=sys.stderr)
|
||||
for err in errors[:]:
|
||||
if "'productimg' is not one of" in err:
|
||||
errors.remove(err)
|
||||
print("WARNING: %s" % err, file=sys.stderr)
|
||||
|
||||
if not opts.quiet:
|
||||
for warning in warnings:
|
||||
print(warning, file=sys.stderr)
|
||||
@ -291,7 +303,6 @@ def run_compose(compose, create_latest_link=True, latest_link_status=None):
|
||||
createrepo_phase = pungi.phases.CreaterepoPhase(compose, pkgset_phase)
|
||||
ostree_installer_phase = pungi.phases.OstreeInstallerPhase(compose, buildinstall_phase, pkgset_phase)
|
||||
ostree_phase = pungi.phases.OSTreePhase(compose, pkgset_phase)
|
||||
productimg_phase = pungi.phases.ProductimgPhase(compose, pkgset_phase)
|
||||
createiso_phase = pungi.phases.CreateisoPhase(compose, buildinstall_phase)
|
||||
extra_isos_phase = pungi.phases.ExtraIsosPhase(compose)
|
||||
liveimages_phase = pungi.phases.LiveImagesPhase(compose)
|
||||
@ -303,7 +314,7 @@ def run_compose(compose, create_latest_link=True, latest_link_status=None):
|
||||
|
||||
# check if all config options are set
|
||||
for phase in (init_phase, pkgset_phase, createrepo_phase,
|
||||
buildinstall_phase, productimg_phase, gather_phase,
|
||||
buildinstall_phase, gather_phase,
|
||||
extrafiles_phase, createiso_phase, liveimages_phase,
|
||||
livemedia_phase, image_build_phase, image_checksum_phase,
|
||||
test_phase, ostree_phase, ostree_installer_phase,
|
||||
@ -374,9 +385,6 @@ def run_compose(compose, create_latest_link=True, latest_link_status=None):
|
||||
essentials_phase.start()
|
||||
essentials_phase.stop()
|
||||
|
||||
productimg_phase.start()
|
||||
productimg_phase.stop()
|
||||
|
||||
# write treeinfo before ISOs are created
|
||||
for variant in compose.get_variants():
|
||||
for arch in variant.arches + ["src"]:
|
||||
|
@ -89,8 +89,7 @@ class CheckDependenciesTestCase(unittest.TestCase):
|
||||
def test_isohybrid_not_required_on_arm(self):
|
||||
conf = {
|
||||
'buildinstall_method': 'lorax',
|
||||
'productimg': True,
|
||||
'runroot_tag': 'dummy_tag',
|
||||
'runroot_tag': '',
|
||||
}
|
||||
|
||||
with mock.patch('sys.stdout', new_callable=StringIO) as out:
|
||||
@ -129,21 +128,6 @@ class CheckDependenciesTestCase(unittest.TestCase):
|
||||
self.assertEqual('', out.getvalue())
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_genisoimg_needed_for_productimg(self):
|
||||
conf = {
|
||||
'runroot_tag': 'dummy_tag',
|
||||
'productimg': True,
|
||||
'buildinstall_method': 'lorax',
|
||||
}
|
||||
|
||||
with mock.patch('sys.stdout', new_callable=StringIO) as out:
|
||||
with mock.patch('os.path.exists') as exists:
|
||||
exists.side_effect = self.dont_find(['/usr/bin/genisoimage'])
|
||||
result = checks.check(conf)
|
||||
|
||||
self.assertIn('genisoimage', out.getvalue())
|
||||
self.assertFalse(result)
|
||||
|
||||
def test_requires_modifyrepo(self):
|
||||
with mock.patch('sys.stdout', new_callable=StringIO) as out:
|
||||
with mock.patch('os.path.exists') as exists:
|
||||
|
Loading…
Reference in New Issue
Block a user