o >Ic$@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddlmZ gdZ ddlmZdd Zd d Zd d ZddZddZddZdS)N)datetime) OptionParser)gettext) z/binz/bootz/etcz/initrdz/libz/lib32z/lib64z/sbinz/usrz/var)DistUpgradeConfigcCst}|jddddd|jdddd|jd dd d|jd d d tdd|jdddtdd|jddddtdd|jdddtdd|jdddtdd|jddd dtd!d"|S)#z/ setup option parser and parse the commandline z--have-prerequistshavePrerequists store_trueF)destactiondefaultz--with-network withNetwork)r r z--without-network store_falsez --frontendfrontendNz_Use frontend. Currently available: DistUpgradeViewText, DistUpgradeViewGtk, DistUpgradeViewKDE)r r helpz--modemodedesktopz(*DEPRECATED* this option will be ignoredz --partialpartialz:Perform a partial upgrade only (no sources.list rewriting))r r r rz--disable-gnu-screenzDisable GNU screen support)r r rz --datadirdatadir.z Set datadirz--devel-release devel_releasez"Upgrade to the development release)r r r r)r add_option_ parse_args)parserr=/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeMain.pydo_commandline6s8    rc Cs^|ddd}tj|st|t|drQt}|d|j|j |j |j |j f}tj|s8t|t|dD]}t |tj|tj|q?tj|d}|jr_|d7}t|dWd n1sowYtjtj|d d d td |jtddttjd }|djj}td|tdtj|S)z setup the logging FilesLogDirz/var/log/dist-upgrade/z/*.logz/%04i%02i%02i-%02i%02izmain.logz.partialaNz%%(asctime)s %(levelname)s %(message)sw)levelfilenameformatfilemodezUsing config files '%s'zuname information: '%s' aptzapt version: '%s'zpython version: '%s') getWithDefaultospathexistsmkdirglobrnowyearmonthdayhourminuteshutilmovejoinbasenameropenlogging basicConfigDEBUGinfo config_filesunamer&apt_pkgCache current_verver_strsysversion) optionsconfiglogdirr- backup_dirffnamecache apt_versionrrr setup_loggingOs8         rLc Cszddlm}WntytdYdSwtj|d}td|t d}|}|j d|ddd t |z3t j d d gt j dd d }ttj|dd}||WdWdS1shwYWdSty}ztd|WYd}~dSd}~ww)Nr)AptClonezfailed to import AptClonezapt-clone_system_state.tar.gzzcreating statefile: '%s'6/T) sourcedirtargetwith_dpkg_status scrub_sourceslspciz-nnstdoutuniversal_newlinesrz lspci.txtr zlspci failed: %s) apt_clonerM ImportErrorr8errorr(r)r5debugumask save_state subprocessPopenPIPE communicater7writeOSError)rFrMrQ old_umaskclonesrHerrrsave_system_stateps6      &rhc Cs|jg|ddD]E}|sq zddlm}|d|d}t||}|||jd}W|StyO}ztd||ft d||fWYd }~q d }~wwt d t d t d |S) z0 setup view based on the config and commandline Viewr) import_moduler DistUpgrade)rFrzcan't import view '%s' (%s)zcan't load %s (%s)Nz!No view can be imported, abortingr) rgetlist importlibrjgetattrr Exceptionr8warningprintrZrBexit) rDrErFrequested_viewrj view_modul view_classinstancergrrr setup_views&    rwcCsd}ztjddgtjddd}td|Wnty)tdYd Sw||vr>td t d dd d d|gdtj d<dddddd|gt j }td|t d |d S)z check if there is a upgrade already running inside gnu screen, if so, reattach if not, create new screen window z$ubuntu-release-upgrade-screen-windowscreenz-lsTrUrzscreen returned: '%s'zscreen could not be runNz)found active screen session, re-attachingz/usr/bin/screenz-dz-rz-p1RELEASE_UPGRADER_NO_SCREENz-ez\0\0z-cscreenrcz-Szre-exec inside screen: '%s') r^r_r`rar8r[rcr;r(execvenvironrBargv) SCREENNAMEoutcmdrrr%run_new_gnu_screen_window_or_reattachs4     rc Cst\}}t|j}t||}ddlm}td|t d|jdus+|jdkr:t j t d}td|t|||}|jrNdt jvrN|jsNtt d sXd t jd <dd lm}||||jd }t|j|jr}|sxtdtd t||rd SdS)z main method r)VERSIONz%release-upgrader version '%s' startedzubuntu-release-upgraderNrmorzNEEDRESTART_SUSPENDy)DistUpgradeController)rr)rrrrLDistUpgradeVersionrr8r;r textdomainr(r)r5getcwdbindtextdomainrw needs_screenr}disable_gnu_screenrgetenvratexitregister_enableAptCronJobrdoPartialUpgraderBrrrhrun) rDargsrErFr localedirviewrapprrrmains8              r)r&rrr,r8r(r3r^rBroptparserr SYSTEM_DIRSDistUpgradeConfigParserrrrLrhrwrrrrrrs(    ! !