+
    h+  c                   s    ^ RI t ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RI	H
t
 ^RIHt ]! ^^4      w  ttttR	 t ! R
 R4      t ! R R4      tR# )i    N)	urldetect)
urlfetcher)perform_initrd_injections)progress)
DeviceDisk)log)OSDBc                 s    V P                  R 4      ;'       g+    V P                  R4      ;'       g    V P                  R4      # )zhttp://zhttps://zftp://)
startswith)Zurl   &>/usr/share/virt-manager/virtinst/install/installertreemedia.py_is_urlr
      s4    >>)$^^z(B^^cnnU]F^^    c                   s&   a  ] tR t^t o R tRtV tR# )_LocationDatac                s    Wn         W n        W0n        W@n        R V n        V P                   '       d8   \
        P                  ! V P                   4      pVP                  4       V n        R # R # N)osinfokernel_pairsos_mediaos_treekernel_url_argr   	lookup_osget_kernel_url_arg)selfr   r   r   r   osobjs   &&&&& r	   __init__Z_LocationData.__init__   sP    ( ";;;NN4;;/E"'":":"<D r   )r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   __static_attributes____classdictcell__Z__classdict__   @r	   r   r      s     	= 	=r   r   c                   s   a  ] tR t^'t o Rt]R 4       t]R 4       t]R 4       tR t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tRtV tR# )InstallerTreeMediaz
Class representing --location Tree media. Can be one of

  - A network URL: http://dl.fedoraproject.org/...
  - A local directory
  - A local .iso file, which will be accessed with isoinfo
c                s    \        V 4      pVP                  Vn        VP                  V4       VP	                  4        VP                  4       #   \         d   p\        P                  ! R RR7       TP                  R4      '       d   \        P                  ! R4       \        R4      R\        T4      R\        T4      /,          p\        T4      RhRp?ii ; i)	z!Error validating install locationT)Zexc_infoznfs:zNFS URL installs are no longer supported. Access your install media over an alternate transport like HTTP, or manually mount the NFS share and install from the local directory mount point.z6Validating install media '%(media)s' failed: %(error)sZmediaZerrorN)r   ZDEVICE_CDROMZdeviceZset_source_pathZvalidateZget_source_pathZ	Exceptionr   debugr   warning_str
ValueError)connpathZdevZeZmsg   &&   r	   validate_pathZ InstallerTreeMedia.validate_path0   s    	,T"C))CJ%LLN&&(( 	,II9DIv&&< LMTQQ C S/t+	,s   AA CA9CCc                sJ    V P                   P                  4       '       d   R# R# )zC
Return the tmpdir that's accessible by VMs on system libvirt URIs
z/var/lib/xenz/var/lib/libvirt/boot)r&   Zis_xen)guestr   r	   get_system_scratchdirZ(InstallerTreeMedia.get_system_scratchdirH   s    
 ::!&r   c                s   \         P                  P                  V P                  P	                  4       R4      p\
        P                  V 4      pV P                  P                  4       '       gQ   \         P                  P                  V4      '       d,   \         P                  ! V\         P                  4      '       g   \         P                  ! VRRR7       V# V# )zu
Determine the scratchdir for this URI, create it if necessary.
scratchdir is the directory that's accessible by VMs
Zbooti  T)Zexist_ok)osr'   joinr&   Zget_app_cache_dirr    r+   Zis_unprivilegedexistsZaccessZW_OKZmakedirs)r*   Zuser_scratchdirZsystem_scratchdirs   &  r	   make_scratchdirZ"InstallerTreeMedia.make_scratchdirQ   s     '',,uzz'C'C'EvN.DDUK
 JJ&&((77>>"34499.88KK>""  r   c                s   Wn         W n        W0n        W@n        WPn        W`n        Wpn        . V n        . V n        V'       g	   V'       dA   V'       g   \        \        R 4      4      hV'       d	   V'       g   \        \        R4      4      hRV n        RV n        . V n        V P                  '       g   V P
                  '       d   \        V n        MV P                   P!                  4       '       g   \"        P$                  P'                  V P                  4      '       dj   \"        P$                  P)                  V P                  4      '       d;   \"        P$                  P+                  V P                  4      V n        \,        V n        M2\/        V P                  4      '       d   \0        V n        M\2        V n        V P                   P!                  4       '       dP   V P                  \0        8X  g;   V P                  \        8X  g&   \        \        R4      V P                  ,          4      hV P                  \2        8X  d-   \4        P7                  V P                   V P                  4       R# R# )zElocation kernel/initrd may only be specified with a location URL/pathz2location kernel/initrd must be specified as a pairNz3Cannot access install tree on remote connection: %s)r&   location_location_kernel_location_initrd_install_kernel_install_initrd_install_kernel_args_initrd_injections_extra_argsr%   r#   _cached_fetcher_cached_data	_tmpfilesMEDIA_KERNEL_media_typeZ	is_remoter,   r'   r.   ZisdirZabspath	MEDIA_DIRr
   	MEDIA_URL	MEDIA_ISOr    r)   )r   r&   r0   Zlocation_kernelZlocation_initrdZinstall_kernelZinstall_initrdZinstall_kernel_argss   &&&&&&&&r	   r   ZInstallerTreeMedia.__init__f   s    	  / /--$7!"$o ]^  $ #W!XYY# 4#7#7#7+D		##%%t}}--dmm,,GGOODMM:DM(DT]]##(D(D II!!$$	1$$4GH4==X  y(,,TYYF )r   c                sd   \         P                  ! V4      pV P                  '       gn   \        P	                  V4      pV P
                  \        8X  d   \        P                  ! R W24      V n        M&\        P                  ! V P                  W24      V n        W P                  n        V P                  # r   )r   Zensure_meterr8   r    r/   r<   r;   r   ZDirectFetcherZfetcherForURIr0   meter)r   r*   r@   
scratchdir   &&& r	   _get_fetcherZInstallerTreeMedia._get_fetcher   s    %%e,###+;;EBJ</'1'?'?j'X$'1'?'?z'a$%*"###r   c                s>   V P                   '       d   V P                   # R pR pR pR p. p\        V P                  ;'       d    V P                  4      pV P                  \
        8X  d   V P                  V P                  3.pM\        P                  ! WVR7      pV'       dA   VP                  4       pVP                  4       pVP                  4       pVP                  4       pV'       d   V P                  V P                  3.p\        WGWV4      V n         V P                   # )N)Z
skip_error)r9   Zboolr1   r2   r<   r;   r3   r4   r    ZgetDistroStoreZget_kernel_pathsZget_osdict_infoget_os_mediaget_os_treer   )	r   r*   fetcherZstorer   r   r   Zkernel_pathsZhas_location_kernels	   &&&      r	   _get_cached_dataZ#InstallerTreeMedia._get_cached_data   s    $$$"4#8#8#R#RT=R=RS|+!1143G3GHIL,,UH[\E 113L**,F))+H'')G!22D4I4IJKL)&R   r   c                s   aa TpVV3R  lpV! 4       w  rgSP                  V4      pV P                  P                  V4       SP                  V4      p	V P                  P                  V	4       \        WP                  SP
                  4       W3# )c                  s   < SP                    F:  w  rSP                  V 4      '       g   K  SP                  V4      '       g   K7  W3u # 	  \        \        R 4      4      h)z&Couldn't find kernel for install tree.)r   ZhasFileZRuntimeErrorr#   )ZkpathZipathcacherF   s     r	   _check_kernel_pairsZCInstallerTreeMedia._prepare_kernel_url.<locals>._check_kernel_pairs   sM     % 2 2??5))gooe.D.D <' !3 q!IJKKr   )ZacquireFiler:   appendr   r6   rA   )
r   r*   rH   rF   ignorerI   Z
kernelpathZ
initrdpathkernelinitrds
   &&ff      r	   _prepare_kernel_urlZ&InstallerTreeMedia._prepare_kernel_url   s}    	L "5!6
$$Z0f%$$Z0f%!&*A*A7CUCUV~r   c                s    V'       g   R # V FZ  pVP                  4       pVP                  4       pV P                  P                  V4       V P                  P                  WC34       K\  	  R # r   )Zget_expected_filenameZwriter:   rJ   r6   )r   ZscriptsZscriptZexpected_filenameZ
scriptpathr(   r	   _prepare_unattended_dataZ+InstallerTreeMedia._prepare_unattended_data   sU    F & < < >JNN!!*-##**J+JK	 r   c                s    VP                   ;'       g    VP                   P                  p\        P                  ! V4      pVP	                  4       # r   )r   Znamer   r   r   )r   r*   rH   r   r      &&&  r	   _prepare_kernel_url_argZ*InstallerTreeMedia._prepare_kernel_url_arg   s:    22!2!2v&''))r   c                s   R pV'       d`   . pV F.  pVP                  4       pV'       g   K  VP                  V4       K0  	  RP                  V4      p\        P                  ! RV4       MBV P                  4       '       d-   V P                  W4      pV'       d   V: RV P                  : 2pV'       d   V P                  P                  V4       V P                  '       d   V P                  p	MRP                  V P                  4      p	V P                  \        8X  d(   V	'       g    \        P                  ! \        R4      4       V	# )NZ z Generated unattended cmdline: %sZ=zDirectory tree installs typically do not work unless extra kernel args are passed to point the installer at a network accessible install tree.)Zgenerate_cmdlinerJ   r-   r   r!   is_network_urlrQ   r0   r7   r5   r<   r=   r"   r#   )
r   r*   rH   unattended_scriptsZinstall_argsZargsZunattended_scriptZcmdliner   Zrets
   &&&&      r	   _prepare_kernel_argsZ'InstallerTreeMedia._prepare_kernel_args   s    D%7!+<<>7KK( &8  ::d+LII8,G  ""!99%GN*8$--H##L1$$$++C((4++,Cy(KKF 
r   c                s    V P                  W4      pV P                  W4      pV P                  V4       V P                  WV4      pV P	                  WV4      w  rxWxV3# r   )rC   rG   rO   rT   rN   )	r   r*   r@   rS   rF   rH   Zkernel_argsrL   rM   s	   &&&&     r	   prepareZInstallerTreeMedia.prepare  sc    ##E1%%e5%%&89//>PQ11%H{**r   c                s    TpV P                    F9  p\        P                  ! R \        V4      4       \        P
                  ! V4       K;  	  . V n         R# )zRemoving %sN)r:   r   r!   r$   r,   Zunlink)r   r*   rK   Zf   &&  r	   cleanupZInstallerTreeMedia.cleanup  s;    AIImSV,IIaL   r   c                    Wn         R # r   )r6   )r   Zinitrd_injections   &&r	   set_initrd_injectionsZ(InstallerTreeMedia.set_initrd_injections'  s    "3r   c                rX   r   )r7   )r   Z
extra_argsrY   r	   set_extra_argsZ!InstallerTreeMedia.set_extra_args*  s    %r   c                J    V P                   \        39   d   V P                  # R # r   )r<   r?   r0   r   r   r	   
cdrom_pathZInstallerTreeMedia.cdrom_path-  !    	{*==  +r   c                r\   r   )r<   r>   r0   r]   r   r	   rR   Z!InstallerTreeMedia.is_network_url1  r_   r   c                s`    V P                  VR 4      pV P                  W4      pVP                  # r   )rC   rG   r   )r   r*   rF   rH   rV   r	   detect_distroZ InstallerTreeMedia.detect_distro5  s.    ##E40%%e5||r   c                ^    V P                  W4      pV P                  W4      pVP                  # r   )rC   rG   r   r   r*   r@   rF   rH   rP   r	   rD   ZInstallerTreeMedia.get_os_media:  s,    ##E1%%e5~~r   c                ra   r   )rC   rG   r   rb   rP   r	   rE   ZInstallerTreeMedia.get_os_tree?  s,    ##E1%%e5}}r   c                s    V P                   \        \        39   d   R # V P                  W4      pV'       d   VP	                  4       # R# )TF)r<   r>   r=   rD   Z
is_netinst)r   r*   r@   r   rB   r	   requires_internetZ$InstallerTreeMedia.requires_internetD  s=    	955$$U2&&((r   )r9   r8   r7   r6   r4   r3   r5   r2   r1   r<   r:   r&   r0   N)r   r   r   r   Z__doc__Zstaticmethodr)   r+   r/   r   rC   rG   rN   rO   rQ   rT   rU   rW   rZ   r[   r^   rR   r`   rD   rE   rc   r   r   r   r   r	   r    r    '   s      , ,. ' ' ! !(9G~$!6.L*
B+4&!!


 r   r    )r,   Z r    r   Zinstallerinjectr   r   Zdevicesr   Zloggerr   Zosdictr   Zranger=   r?   r>   r;   r
   r   r    ) r   r	   <module>rd      sQ    
   6      381+ /Iy,_
= 
=d dr   