+
    hu  c                   s   ^ RI t ^ RIt^ RIt^RIHt ^RIHt  ! R R4      t ! R R4      tR t	 ! R	 R
4      t
 ! R R]
4      t ! R R]
4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]
4      t ! R R]4      t ! R R]
4      t ! R R ]
4      t ! R! R"]
4      tR# tR# )$    N)log)OSDBc                   sf   a  ] tR t^t o R tR t]R 4       tR tR t	R t
R tR tR	 tR
 tRtV tR# )_DistroCachec                s    Wn         / V n        R V n        R V n        R V n        R V n        RV n        R V n        RV n        R V n	        R V n
        R V n        R V n        R V n        R # )NF)_fetcher
_filecache	_treeinfotreeinfo_familytreeinfo_versiontreeinfo_nametreeinfo_matchedsuse_contentchecked_for_suse_contentdebian_media_typemageia_versionlibosinfo_os_variantlibosinfo_mediaobjlibosinfo_treeobj)selffetcher   &&5/usr/share/virt-manager/virtinst/install/urldetect.py__init__Z_DistroCache.__init__   sm    # $! % (-%!%"$(!"&!%    c                s    WP                   9  d+    V P                  P                  V4      pW P                   V&   V P                   V,          #   \         d$   pR p\        P
                  ! RY4        R p?LJR p?ii ; i)NzFailed to acquire file=%s: %s)r   r   ZacquireFileContent
ValueErrorr   debug)r   Zpathcontente   &&  r   acquire_file_contentZ!_DistroCache.acquire_file_content(   sn    &D--::4@ %,OOD!t$$	  D		94CCDs   A A<A77A<c                s   V P                   '       d   V P                   # V P                  R 4      ;'       g    V P                  R4      pVf   R# \        P                  ! 4       pVP	                  V4       VP                  RR4      V n        W n         \        P                  ! RV P                  4       V P                   P                  RR4      '       dC   V P                   P                  RR4      V n
        \        P                  ! RV P                  4       V P                   P                  RR4      '       dC   V P                   P                  RR4      V n        \        P                  ! R	V P                  4       V P                   # )
z	.treeinfotreeinfoNgeneralZfamilyztreeinfo family=%sversionzFound treeinfo version=%snamezFound treeinfo name=%s)r   r   configparserZConfigParserZread_stringgetr   r   r   Z
has_optionr   r	   )r   Ztreeinfostrr      &  r   r   Z_DistroCache.treeinfo2   s,   >>>>>! //< 
 
@Y@YA
 
  ,,.[)'||Ix@!		&(<(<=>>$$Y	::$(NN$6$6y)$LD!II143H3HI>>$$Y77!%!3!3Iv!FDII.0B0BC~~r   c                s    V P                   '       g   R # \        \        P                  ! WP                  4      4      pW n        V'       g   \        P                  ! RV4       V# )Fz%Didn't match treeinfo family regex=%s)r   boolrematchr   r
   r   r   )r   famregexret   && r   treeinfo_family_regexZ"_DistroCache.treeinfo_family_regexX   sD    }}}288H&:&:;< #II=xH
r   c                s    V P                  V4      pVf   R# VP                  4        F"  p\        P                  ! W$4      '       g   K!   R# 	  \        P
                  ! RW4       R# )z@
Fetch 'filename' and return True/False if it matches the regex
FTz+found filename=%s but regex=%s didn't match)r   
splitlinesr&   r'   r   r   )r   Zfilenameregexr   lines   &&&  r   content_regexZ_DistroCache.content_regexb   sU     ++H5?&&(Dxx$$ ) 			?Qr   c                s   a a V V3R lp V! R4      V! R4      3.#   \          d    \        P                  ! RRR7       . u # i ; i)zK
Pull kernel/initrd/boot.iso paths out of the treeinfo for
the passed data
c                 s   < SP                   P                  R R4      pSR8X  d   RpSP                   P                  RV,          V 4      # )r   archxenz	images-%s)r   r#   )Z
media_nameZ
image_typer   typ   & r   _get_treeinfo_pathZ;_DistroCache.get_treeinfo_media.<locals>._get_treeinfo_pathw   sA    **9f=Je|"
==$$[:%=zJJr   Zkernelinitrdz&Failed to parse treeinfo kernel/initrdT)Zexc_info)	Exceptionr   r   )r   r2   r4   s   ff r   get_treeinfo_mediaZ_DistroCache.get_treeinfo_mediaq   sJ    	K	'13Eh3OPQQ 	II>NI	s    %AAc                s   V P                   pR  p^ pV! V4      pVP                  R4      ^8  d=   V! VP                  R4      ^ ,          4      pV! VP                  R4      ^,          4      p\        P                  ! RWV4       WC3# )c                 s>     \        V 4      #   \         d     ^ # i ; i)r    )intr6   )Zc   &r   _safeintZ,_DistroCache.split_version.<locals>._safeint   s"    1v s   
 .z+converted verstr=%s to version=%s update=%s)r   Zcountsplitr   r   )r   verstrr:   updater       &    r   split_versionZ_DistroCache.split_version   s~    &&	 6"<<!v||C034Gfll3/23F		?RXYr   c                s6    V P                   P                  4       # N)r   Zis_isor   r9   r   fetcher_is_isoZ_DistroCache.fetcher_is_iso   s    }}##%%r   c                sR   \         P                  ! V P                  P                  4      pV'       g   R # Vw  V n        V n        V P
                  P                  4       '       d!   V P
                  P                  4       '       g$   \        P                  ! RV P
                  4       R # R# )FzOlibosinfo didn't report any media kernel/initrd path for detected os_variant=%sT)
r   Zguess_os_by_isor   locationr   r   get_kernel_pathget_initrd_pathr   r   r   r)      & r   guess_os_from_isoZ_DistroCache.guess_os_from_iso   s    ""4==#9#9:=@:!4#:''7799**::<< II2''
 r   c                s    \         P                  ! V P                  P                  4      pV'       g   R # Vw  V n        V n        RV n        R# )FT)r   Zguess_os_by_treer   rD   r   r   r
   rG   rH   r   guess_os_from_treeZ_DistroCache.guess_os_from_tree   s=    ##DMM$:$:;<?9!4#9 $r   )r   r   r   r   r   r   r   r   r   r   r   r
   r	   r   N)__name__
__module____qualname____firstlineno__r   r   Zpropertyr   r+   r/   r7   r@   rC   rI   rJ   __static_attributes____classdictcell__Z__classdict__   @r   r   r      sL     &&% # #J$*&( r   r   c                   s<   a  ] tR t^t o RtR tR tR tR tRt	V t
R# )_SUSEContentz0
Helper class tracking the SUSE 'content' files
c                s.   Wn         / V n        V P                   P                  4        FR  pR FI  pVP                  VR,           4      '       g   K#  VP	                  R^4      ^,          V P                  V&   KK  	  KT  	  \
        P                  ! RV P                  4       V P                  4       V n        V P                  4       V n
        V P                  4       V n        \
        P                  ! RV P                  V P                  V P                  4       R# )LABEL zSUSE content dict: %sz<SUSE content product_name=%s product_version=%s tree_arch=%sN)rT   DISTROVERSION	BASEARCHSDEFAULTBASEREPOID)content_strcontent_dictr,   
startswithr<   r   r   _get_tree_arch	tree_arch_get_product_nameproduct_name_get_product_versionproduct_version)r   r[   r.   Zprefixr   r   r   Z_SUSEContent.__init__   s    &$$//1D^??6C<0004

30B10ED%%f- _ 2
 			)4+<+<=,,. 224#88:		J  NN		
r   c                sl   V P                   P                  R 4      ;'       g    V P                   P                  R4      pV'       g<   RV P                   9   d+   V P                   R,          P                  R^4      ^,          pV'       g   R# VP                  4       pVP	                  R4      R8w  d   RpV# )rX   rY   rZ   /Nzi586-x86_64x86_64i)r\   r#   rsplitstripZfind)r   Zdistro_archr_   r$   r   r^   Z_SUSEContent._get_tree_arch   s    
 ''++K8``D<M<M<Q<QR_<`x4+<+<<++H5<<S!DQGK%%'	>>-(B. Ir   c                s   RpRV P                   9   d   V P                   R,          pMKRV P                   P                  RR4      9   d+   V P                   R,          P                  R^4      ^,          p\        P                  ! RV4       V# )zZ
Parse the SUSE product name. Examples:
SUSE Linux Enterprise Server 11 SP4
openSUSE 11.4
NrT   ,rV    zSUSE content product_name=%s)r\   r#   rf   r   r   )r   ra   rH   r   r`   Z_SUSEContent._get_product_name   sy    $ d''',,W5LD%%))(B77,,X6==c1EaHL		0,?r   c                sn   V P                   '       g   R # V P                  P                  RR4      pRV9   d   VP                  R^4      ^ ,          pV'       g}   \        P
                  ! RV P                  R,          4      '       dO   V P                  R,          P                  R^4      ^ ,          P                  4       P                  R4      ^,          pVP                  4       pRV P                   9   g   R	V P                   9   d   V P                   P                  4       P                  R
4      ^,          p\        V P                   P                  4       P                  R
4      4      ^8  dF   VR,           V P                   P                  4       P                  R
4      ^,          ^,          ,           pTpV# )NrW   ri   Z-z^.*:.*,openSUSE*rV   rh   Z:Z
EnterpriseSLESrU   r;   )	ra   r\   r#   r<   r&   r'   rf   rg   len)r   distro_versionZsle_versionr$   r   rb   Z!_SUSEContent._get_product_version   s^       **..y"=. +11#q9!<N "((+=t?P?PQY?Z"["[!..x8??QGJPPRYYZ]^_`aN'--/4,,,$:K:K0K++113::3?BK4$$**,33C89A=)C/$2C2C2I2I2K2R2RSV2WXY2Z[\2]](Nr   )r\   r[   ra   rc   r_   N)rK   rL   rM   rN   __doc__r   r^   r`   rb   rO   rP   rQ   rR   r   rS   rS      s#     
("6 r   rS   c                 s   \         P                  ! R VP                  4       V P                  P                  pV P                  P
                  pV P                  p\        V4      p\        V4      pV Fl  pVP                  V4      '       g   K  V! VP                  W4V4      p	\         P                  ! RV	P                  P                  V	P                  4       4       V	u # 	  V'       d   R# Rp
VP                  4       '       g   R\        R4      ,           p
\        R4      VP                  ,          pW,          pVR,          pV\        R4      ,          p\        V4      h)	z$Finding distro store for location=%szDetected class=%s osvariant=%sNri   z: z2The URL could not be accessed, maybe you mistyped?z6Could not find an installable distribution at URL '%s'z

zrThe location must be the root directory of an install tree.
See virt-install man page for various distro examples.)r   r   rD   osr0   Zos_typeZosinfo_build_distro_listr   is_validZ	__class__rK   get_osdict_infoZ
can_accessZ_r   )Zguestr   Z
skip_errorr0   Z_typeosobjZstorescacheZsclassstoreZextramsgZmsgs   &&&         r   getDistroStoreru     s$   II4g6F6FG88==DHHELLE&F!Eu%%w''e<		,eoo.F.FH]H]H_	
    H!PQQ
D
EHXHX
XCOC6MC1	A C S/r   c                   sf   a  ] tR tRt o RtRt. tR tR tR t	]
R 4       tR tR	 tR
 tR tRtV tR# )_DistroTreeiL  za
Class for determining the kernel/initrd path for an install
tree (URL, ISO, or local directory)
Nc                sN   W0n         W n        Wn        W@n        V P                  P                  '       d   V P                  P                  V n        MV P                  4       V n        V P
                  '       dO   \        P                  ! V P
                  4      '       g)   \        P                  ! R V P
                  4       RV n        . V n        V P                  P                  '       d-   V P                  P                  V P                   4      V n        R# V P                  4        R# )z2Detected os_variant as %s, which is not in osdict.N)typer0   urirs   r   _os_variant_detect_versionr   	lookup_osr   r   _kernel_pathsr
   r7   _set_manual_kernel_paths)r   rD   r0   Zvmtypers   s   &&&&&r   r   Z_DistroTree.__init__U  s    		
::***#zz>>D#335DDNN43C3C$D$DIIJDL\L\]#D::&&&!%!>!>tyy!ID))+r   c                s    R# )z
If kernel/initrd path could not be determined from a source
like treeinfo, subclasses can override this to set a list
of manual paths
N rB   r9   r   r}   Z$_DistroTree._set_manual_kernel_pathsj  s    r   c                s4    \         P                  ! RV 4       R# )z1
Hook for subclasses to detect media os variant.
z*%s does not implement any osdict detectionN)r   r   rB   r9   r   rz   Z_DistroTree._detect_versionq  s     			>Er   c                s    \         hrA   )NotImplementedErrorclsrs   r   r   rp   Z_DistroTree.is_valid|  s    !!r   c                    V P                   # rA   )r|   rB   r9   r   get_kernel_pathsZ_DistroTree.get_kernel_paths  s    !!!r   c                r   )z
Return detected osdict value
)ry   rB   r9   r   rq   Z_DistroTree.get_osdict_info  s     r   c                .    V P                   P                  # )zF
Return an OsMedia wrapper around the detected libosinfo media object
)rs   r   rB   r9   r   get_os_mediaZ_DistroTree.get_os_media  s     zz,,,r   c                r   )zE
Return an OsTree wrapper around the detected libosinfo media object
)rs   r   rB   r9   r   get_os_treeZ_DistroTree.get_os_tree  s     zz+++r   )r|   ry   r0   rs   rw   rx   )rK   rL   rM   rN   rm   PRETTY_NAMEmatching_distrosr   r}   rz   classmethodrp   r   rq   r   r   rO   rP   rQ   rR   r   rv   rv   L  sS     
 K,* " "" -, ,r   rv   c                   s@   a  ] tR tRt o RtR.t]R 4       tR tRt	V t
R# )_FedoraDistroi  ZFedorafedorac                s(    R pVP                  V4      # )z
.*Fedora.*r+   r   rs   r(   r*   r   rp   Z_FedoraDistro.is_valid  s    **844r   c                s8   R pV P                   P                  pV'       g   \        P                  ! RV4       V# VR9   d   \        P                  ! RW!4       V# RV,           p\        P
                  ! V4      '       d   V# \        P                  ! RVVV4       V# )zfedora-unknownz-No treeinfo version? Assume latest_variant=%sz,treeinfo version=%s, using latest_variant=%sr   zFvariant=%s from treeinfo version=%s not found, using latest_variant=%s)ZdevelopmentZrawhideZRawhide)rs   r   r   r   r   r{   )r   Zlatest_variantr=   variant   &   r   rz   Z_FedoraDistro._detect_version  s    ),,IIE~V!! ::IIDf]!! V#>>'""N		T		
 r   r~   N)rK   rL   rM   rN   r   r   r   rp   rz   rO   rP   rQ   rR   r   r   r     s.     K z5 5 r   r   c                   sD   a  ] tR tRt o RtR.tRt]R 4       tR t	Rt
V tR# )_RHELDistroi  zRed Hat Enterprise LinuxZrhelc                s<    R pVP                  V4      '       d   R# R# )z#.*(Red Hat Enterprise Linux|RHEL).*TNr   r   r*   r   rp   Z_RHELDistro.is_valid  s"    
 9&&x00 1r   c                s^   V P                   P                  '       g   \        P                  ! R 4       R# V P                   P	                  4       w  rV P
                  \        V4      ,           pV^ 8  d:   VRV,          ,           p\        P                  ! V4      '       d   V# V^,          pK@  R# )z.No treeinfo version? Not setting an os_variantN.%s)	rs   r   r   r   r@   _variant_prefixstrr   r{   r   r    r>   ZbaseZtryvarr?   r   rz   Z_RHELDistro._detect_version  s    zz***IIFG**224 ##c'l2kEFN*F~~f%%aKF	 r   r~   N)rK   rL   rM   rN   r   r   r   r   rp   rz   rO   rP   rQ   rR   r   r   r     s3     ,KxO  r   r   c                   s>   a  ] tR tRt o RtR.tRt]R 4       tRt	V t
R# )_CentOSDistroi  ZCentOSZcentosc                sj    VP                  R 4      '       d   R# VP                  R4      '       d   R# R# )z
.*CentOS.*Tz.*Scientific.*Nr   r   r   r   rp   Z_CentOSDistro.is_valid  s0    &&|44&&'788 9r   r~   N)rK   rL   rM   rN   r   r   r   r   rp   rO   rP   rQ   rR   r   r   r     s)     K zO r   r   c                   sb   a  ] tR tRt o Rt. t. t]t]t	]
R 4       tR tR tR tR tR tR	tV tR# )
_SuseDistroi  Nc                s   VP                  V P                  4      '       d   R # VP                  '       g0   R Vn        VP                  R4      pVf   R#  \	        V4      Vn        VP
                  '       g   R# V P                   F@  p\        P                  ! YAP
                  P                  ;'       g    R4      '       g   K?   R # 	  R#   \         d,   p\        P                  ! R\        T4      4        Rp?R# Rp?ii ; i)Tr   NFz#Error parsing SUSE content file: %sri   )r+   r(   r   r   rS   r   r6   r   r   r   _suse_regexr&   r'   ra   )r   rs   r[   r   r-   s   &&   r   rp   Z_SuseDistro.is_valid  s    &&s||44----1E*44Y?K"%1+%>"
 !!!__Exx11>>DD"EE %   		?QHs   C D C<<Dc                s   V P                   P                  P                  p\        P                  ! R V4      '       d   RpRpRpVR8X  d   VR,          pVR,          pV P
                  R8X  d,   V P                  P                  RV,          RV,          34       \        V P                  4      P                  R4      '       dE   VR	8X  d   V P                  P                  R4       VR
8X  d   V P                  P                  R4       V P                  P                  RV,          RV,          34       V P                  P                  RV,          RV,          34       V P                  P                  RV,          RV,          34       R# )zi[4-9]86i386linuxr5   re   Z64r1   zboot/%s/vmlinuz-xenzboot/%s/initrd-xens390xZppc64zboot/%s/linuxzboot/%s/initrdzboot/loader/%szboot/%s/loader/linuxzboot/%s/loader/initrdN)Zsles11Zsled11)zboot/s390x/vmrdr.ikrzboot/s390x/initrd)zsuseboot/linux64zsuseboot/initrd64)rs   r   r_   r&   r'   rw   r|   appendr   ry   r]   )r   r_   ZoldkernZoldinitr   r   r}   Z$_SuseDistro._set_manual_kernel_paths  sQ   JJ++55	88K++I tOGtOG99%%&24H94TU t ++,@AAG#""))*WXG#""))*ST 	!!?Y#>@PS\@\"]^!!#3g#=?ORY?Y"Z[!!#i/1H91TU	
r   c                s.   V P                   P                  '       g   R # V P                   P                  P                  pV'       g   R # VP                  R^4      ^ ,          P	                  4       p\        V P                  4      P                  R4      '       dk   Rp\        VP                  R^4      4      ^8X  d/   RVP                  R^4      ^,          P	                  4       ,           pV P                  V,           V,           # V P                  V,           # )Nr;   ri   Zsp)slessled)	rs   r   rc   r<   rg   r   r   r]   rk   )r   rl   r    Z
sp_versionr   r    _detect_osdict_from_suse_contentZ,_SuseDistro._detect_osdict_from_suse_content)  s    zz&&&00@@ &&sA.q1779t##$//0@AAJ>''Q/0A5!N$8$8a$@$C$I$I$KK
'''1J>>##n44r   c                sZ   R p\         P                  ! 4        Uu. uF'  q"P                  P                  V4      '       g   K%  VNK)  	  ppV FW  pVP                  \	        V4      R p\
        P                  ! RV,          V P                  4      '       g   KK  VP                  u # 	  R# u upi )opensuseN/%s/)r   list_osr!   r]   rk   r&   searchrx   )r   Zrootnosesrr   codename   &     r   _detect_osdict_from_urlZ#_SuseDistro._detect_osdict_from_url<  sz    <<>E>aVV->->t-D>EEzz#d)+.Hyy(*DHH55zz!  Fs   "B(B(c                s   V P                   P                  '       g   R # \        P                  ! RV P                   P                  4      '       d   R# V P                   P	                  4       w  rV P
                  \        V4      ,           pV^ 8  dZ   TpV^ 8  g   VP                  R4      '       g   VRV,          ,          p\        P                  ! V4      '       d   V# V^,          pK`  R # )NzopenSUSE TumbleweedZopensusetumbleweedZsler   )
rs   r	   r&   r   r@   r   r   r]   r   r{   r   r?   r   _detect_from_treeinfoZ!_SuseDistro._detect_from_treeinfoE  s    zz'''99*DJJ,D,DEE'**224##c'l2kF z!7!7%&.(~~f%%aKF r   c                s    V P                  4       pV'       g   V P                  4       pV'       g   V P                  4       pV# rA   )r   r   r   )r   ZvarrH   r   rz   Z_SuseDistro._detect_versionW  s7    ((*..0C779C
r   r~   )rK   rL   rM   rN   r   r   r   r   r   r(   r   rp   r}   r   r   r   rz   rO   rP   rQ   rR   r   r   r     sP     KK)O"H . 
D5&"$ r   r   c                   s0    ] tR tRtRtR.tRtRR.tRtRt	R# )	_SLESDistroi`  rj   r   z.*SUSE Linux Enterprise Server*z.*SUSE SLES*.*SUSE Linux Enterprise.*r~   N
rK   rL   rM   rN   r   r   r   r   r(   rO   r~   r   r   r   r   `  s#    KxO4nEK*Hr   r   c                   s.    ] tR tRtRtR.tRtR.tRtRt	R# )_SLEDDistroih  ZSLEDr   z .*SUSE Linux Enterprise Desktop*r   r~   Nr   r~   r   r   r   r   h  s!    KxO56K*Hr   r   c                   s.    ] tR tRtRtR.tRtR.tRtRt	R# )_OpensuseDistroip  ZopenSUSEr   z.*openSUSE.*r~   Nr   r~   r   r   r   r   p  s!    K"| O!"KHr   r   c                   s\   a  ] tR tRt o RtR.tRt]R 4       tR t	R t
R tR tR	 tR
tV tR# )_DebianDistroix  ZDebianZdebianc                sV  a a VV 3R  lpRpV! R4      '       d   RpMtV! R4      '       d   RpMcV! R4      '       d   RpMRSP                  RR	S P                  P                  4       ,          4      '       d   SP                  4       '       d   R
pMRpV'       d   VSn        \        V4      # )c                 sz   < SP                   R 8H  pSP                  V R4      '       d   V# SP                  V R4      # )ubuntuz.*[Uu]buntu.*z.*[Dd]ebian.*)_debnamer/   )ZmfileZ	is_ubunturs   r   r3   r   check_manifestZ._DebianDistro.is_valid.<locals>.check_manifest  s=    0I""5/::  &&uo>>r   Nzcurrent/images/MANIFESTZurlzcurrent/legacy-images/MANIFEST
legacy_urlzdaily/MANIFESTdaily
.disk/infoz%s.*diskmounted_iso_url)r/   r   Z
capitalizerC   r   r%   )r   rs   r   Z
media_types   ff  r   rp   Z_DebianDistro.is_valid  s    	? 
344J<==%J,-- J  v8O8O8Q/QRR ##%%#
.
&0E#Jr   c                s    V P                   P                  R 8X  d   V P                  4        R# V P                  4        R# )r   N)rs   r   _set_installcd_paths_set_url_pathsrB   r9   r   r}   Z&_DebianDistro._set_manual_kernel_paths  s,    ::''61%%'!r   c                s"   R FT  p\         P                  ! WP                  4      pV'       g   K-  \        P                  ! RW^ ,          4       V^ ,          u # 	  R F.  pW P                  9   g   K  \        P                  ! RV4       Vu # 	  R# )^.*/installer-(\w+)/?$z#Found pattern=%s treearch=%s in urizFound treearch=%s in uriN)r   z^.*/daily-images/(\w+)/?$)r   amd64arm64Zriscv64r   ppc64el)r&   Zfindallrx   r   r   )r   Zpatternr0   r$   r   _find_treearchZ_DebianDistro._find_treearch  sr    PG::gxx0DII;W1gN7N Q NDxx		4d; N
 r   c                s   R pV P                   P                  R8X  d   RpM;V P                   P                  R8X  d   RpMV P                   P                  R8X  d   RpV P                  4       pV'       g   Rp\        P                  ! RV4       V: RV P
                  : R	V: R
2pRpRpVR9   d   RpVR8X  d0   RV,          pRV P
                  ,          pRV P
                  ,          pV P                  R8X  d5   RV,          pV P                  P                  VR,           VR,           34       V P                  P                  W5,           W4,           34       R# )zcurrent/imagesr   r   Zinstallr   zcurrent/legacy-imagesr   z/No treearch found in uri, defaulting to arch=%sz	/netboot/z-installer/rd   z	initrd.gzr   Zvmlinuxr   z%s/generic/z	kernel.%sz	initrd.%sr1   z%s/netboot/xen/ZvmlinuzN)r   )	rs   r   r   r   r   r   rw   r|   r   )r   Z
url_prefixr_   ZhvmrootZinitrd_basenameZkernel_basenameZxenroots   &      r   r   Z_DebianDistro._set_url_paths  s   %
::''72 JZZ))->>"JZZ))\90J'')	IIIGS3=t}}iX%!#'O#j0G)DMM9O)DMM9O99'*4G%%w':Gk<Q&RS!!7#<g>W"XYr   c                s    V P                  4       pV P                  R 8X  d   VR8X  g   RpM7RpM4VR8X  d   R	pM*VR8X  d   R
pM VR8X  d   RpMVR8X  d   RpMVR8X  d   RpMRpV ;P                  V.,          un        R# )r   r   r   r   r   r   T)zinstall/vmlinuzinstall/initrd.gz)zboot/kernel.ubuntuzboot/initrd.ubuntu)zinstall.amd/vmlinuzzinstall.amd/initrd.gz)zinstall.386/vmlinuzzinstall.386/initrd.gz)zinstall.a64/vmlinuzzinstall.a64/initrd.gz)zinstall/vmlinuxr   )zboot/linux_vmzboot/root.bin)r   r   r|   )r   r_   Zkpairr$   r   r   Z"_DebianDistro._set_installcd_paths  s    '')	==H$'@D'!DE& DE'!DE)#<E'!6E<Eug%r   c                s   \         P                  ! 4        Uu. uF1  qP                  P                  V P                  4      '       g   K/  VNK3  	  ppR pV P
                  P                  R8X  d   \        P                  ! R4       R# V P
                  P                  R8X  d*   V P
                  P                  R4      P                  4       pV F  pVP                  '       d1   VP                  P                  4       ^ ,          P                  4       pMBRVP                  9  d   KX  VP                  P                  4       ^,          P                  4       pRV,          V P                  9   d&   \        P                  ! RV4       VP                  u # V'       g   K  R	V R	2V9   g   K  \        P                  ! R
V4       VP                  u # 	  R # u upi )Nr   z<Appears to be debian 'daily' URL, using latest debiantestingZdebiantestingr   r   rU   r   z#Found codename=%s in the URL stringZ"z'Found codename=%s in the disk/info file)r   r   r!   r]   r   rs   r   r   r   r   Zlowerr   r<   Zlabelrx   )r   r   r   Z	disk_inforr   r   r   r   rz   Z_DebianDistro._detect_version  sF   <<>N>aVV->->t}}-M>N	::''72IITU"ZZ))V3

77EKKMIE~~~ >>//1!4::<ekk) ;;,,.q1779!dhh.		?Jzz!yq
!_	9		CXNzz!!  Os   ,G	Gr~   N)rK   rL   rM   rN   r   r   r   r   rp   r}   r   r   r   rz   rO   rP   rQ   rR   r   r   r   x  sJ      K zH   <""Z<," "r   r   c                   s$    ] tR tRtRtR.tRtRtR# )_UbuntuDistroi  ZUbuntur   r~   N)rK   rL   rM   rN   r   r   r   rO   r~   r   r   r   r     s    K zHr   r   c                   sF   a  ] tR tRt o RtR.t]R 4       tR tR t	Rt
V tR# )	_MageiaDistroi  ZMageiamageiac                s    VP                   '       gS   VP                  R 4      pV'       g   R# \        P                  ! RV4      pV'       g   R# VP	                  ^4      Vn         \        VP                   4      # )rW   Fz^Mageia (\d+) .*)r   r   r&   r'   Zgroupr%   )r   rs   r   Zmr   r   rp   Z_MageiaDistro.is_valid  s\    ###00;G,g6A#$771:E E(())r   c                s    V ;P                   R V P                  ,          RV P                  ,          3.,          un         R# )zisolinux/%s/vmlinuzzisolinux/%s/all.rdzN)r|   r0   rB   r9   r   r}   Z&_MageiaDistro._set_manual_kernel_paths!  s3    "TYY.0E		0QR
 	
r   c                s|    R V P                   P                  ,           p\        P                  ! V4      '       d   V# R# )r   N)rs   r   r   r{   )r   r   rH   r   rz   Z_MageiaDistro._detect_version&  s/    TZZ666>>'""N #r   r~   N)rK   rL   rM   rN   r   r   r   rp   r}   rz   rO   rP   rQ   rR   r   r   r     s3     K z* *

 r   r   c                   s<   a  ] tR tRt o RtRt. t]R 4       tRt	V t
R# )_GenericTreeinfoDistroi-  z4
Generic catchall class for .treeinfo using distros
zGeneric Treeinfoc                s<    VP                   '       d
   R Vn        R # R# )TF)r   r
   r   r   r   rp   Z_GenericTreeinfoDistro.is_valid5  s    >>>%)E"r   r~   N)rK   rL   rM   rN   rm   r   r   r   rp   rO   rP   rQ   rR   r   r   r   -  s)      %K r   r   c                   sB   a  ] tR tRt o RtRt. t]R 4       tR t	Rt
V tR# )_LibosinfoDistroi=  z=
For ISO media detection that was fully handled by libosinfo
zLibosinfo detectedc                sn    VP                  4       '       d   VP                  4       # VP                  4       # rA   )rC   rI   rJ   r   r   r   rp   Z_LibosinfoDistro.is_validE  s/    !!**,,''))r   c                s    V ;P                   V P                  P                  P                  4       V P                  P                  P	                  4       3.,          un         R # rA   )r|   rs   r   rE   rF   rB   r9   r   r}   Z)_LibosinfoDistro._set_manual_kernel_pathsK  sI    

--==?

--==?
 	
r   r~   N)rK   rL   rM   rN   rm   r   r   r   rp   r}   rO   rP   rQ   rR   r   r   r   =  s3      'K* *

 
r   r   c                 s   \         \        \        \        \        \
        \        \        \        \        \        .pV P                  '       d   \        P                  ! R V P                  V P                  4       RpV F"  pV P                  VP                  9   g   K   TpK$  	  V'       d<   \        P                  ! RV4       VP!                  V4       VP#                  ^ V4       M\        P                  ! R4       \$        P&                  P)                  R4      pV'       d9   \+        \-        V4      4      '       d
   \         .pV# VP!                  \         4       V# )zIvariant=%s has distro=%s, looking for matching distro store to prioritizeNzPrioritizing distro store=%sz2No matching store found, not prioritizing anythingZ#VIRTINST_TEST_SUITE_FORCE_LIBOSINFO)r   r   r   r   r   r   r   r   r   r   r   Zdistror   r   r!   r   ZremoveZinsertrn   Zenvironr#   r%   r8   )rr   Z	allstoresZfound_storert   Zforce_libosinfor?   r   ro   ro   T  s    	I$ |||		WJJLL	

 E||u555#  II4kB[)Q,IIJKjjnn%JKOO$%%)*I  -.r   )r"   rn   r&   Zloggerr   Zosdictr   r   rS   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   ro   r~   r   r   <module>r      s     	 	  b bJc cL%ZG, G,T!K !H+ B
K 
u+ up++ +++ +k K"K K"\M K @[  
{ 
.,r   