Ejemplo n.º 1
0
def Unpack(Data_File=None):
    Preinst = '%s/%s' % (TTS.UPSTREAM['update_script_dir'], 'preinst')
    Postinst = '%s/%s' % (TTS.UPSTREAM['update_script_dir'], 'postinst')

    if not Data_File:
        Data_File = __data_file()
    if not Data_File or not os.path.exists(Data_File):
        raise TTE.UnpackException("Can't find Data_File %s" % Data_File)

    # check for control.tar section
    Control_Files = False
    File_List, Errors = TTU.popen_wrapper(['/bin/tar', '-tf', Data_File],
                                          sudo=False)
    if re.search('(?m)^control.tar', File_List):
        Control_Files = True

    if Control_Files:
        __open_control(Data_File)
        __run_control(Preinst)

    # unpack the data.tar into root
    File_List, Errors = TTU.tar_pipeline(
        arglist1=[
            '/bin/tar',
            '--directory',
            '/tmp',
            '-xvOf',
            Data_File,  # O to stdout
            'data.tar'
        ],
        arglist2=[
            '/usr/bin/sudo',
            '-u',
            'root',  # well, this is like handing the user a gun...
            '/bin/tar',
            '--directory',
            '/',
            '--no-overwrite-dir',  # so we don't accidentally hose up directory perms
            '-xvf',
            '-'
        ],
    )
    submit_to_smtpd(
        Destination='root@localhost',
        Payload=File_List,
        Subject='Installed files from update to %s' % Version(Data_File),
        From='Sysop <root>',
    )
    # FIXME: email the file list to the admin?
    if Errors and not re.search('Removing\ leading', Errors):
        raise TTE.UnpackException('data.tar unpacking problem: %s' % Errors)

    if Control_Files:
        __run_control(Postinst)

    return True
Ejemplo n.º 2
0
def __open_control(DF=None):
    """
    unpack control.tar files into update_script_dir
    """
    File_List, Errors = TTU.tar_pipeline(
        arglist1=['/bin/tar',
                  '-xvOf', DF, # O to stdout
                  'control.tar'],
        arglist2=['/bin/tar',
                  '--directory', TTS.UPSTREAM['update_script_dir'],
                  '-xvf', '-'],
        )
    for F in File_List.split('\n'):
        logger.debug(F)
    if Errors and not re.search('Removing\ leading', Errors):
        raise TTE.PreInstException('control.tar unpacking problem: %s' % Errors)
Ejemplo n.º 3
0
def Unpack(Data_File=None):
    Preinst  = '%s/%s' % (TTS.UPSTREAM['update_script_dir'], 'preinst')
    Postinst = '%s/%s' % (TTS.UPSTREAM['update_script_dir'], 'postinst')

    if not Data_File:
        Data_File = __data_file()
    if not Data_File or not os.path.exists(Data_File):
        raise TTE.UnpackException("Can't find Data_File %s" % Data_File)

    # check for control.tar section
    Control_Files = False
    File_List, Errors = TTU.popen_wrapper(['/bin/tar', '-tf', Data_File],
                                          sudo=False)
    if re.search('(?m)^control.tar', File_List):
        Control_Files = True

    if Control_Files:
        __open_control(Data_File)
        __run_control(Preinst)

    # unpack the data.tar into root
    File_List, Errors = TTU.tar_pipeline(
        arglist1=['/bin/tar',
                  '--directory', '/tmp',
                  '-xvOf', Data_File, # O to stdout
                  'data.tar'],
        arglist2=['/usr/bin/sudo', '-u', 'root', # well, this is like handing the user a gun...
                  '/bin/tar',
                  '--directory', '/',
                  '--no-overwrite-dir', # so we don't accidentally hose up directory perms
                  '-xvf', '-'],
        )
    submit_to_smtpd(
        Destination='root@localhost',
        Payload=File_List,
        Subject='Installed files from update to %s' % Version(Data_File),
        From='Sysop <root>',
        )
    # FIXME: email the file list to the admin?
    if Errors and not re.search('Removing\ leading', Errors):
        raise TTE.UnpackException('data.tar unpacking problem: %s' % Errors)

    if Control_Files:
        __run_control(Postinst)

    return True
Ejemplo n.º 4
0
def __open_control(DF=None):
    """
    unpack control.tar files into update_script_dir
    """
    File_List, Errors = TTU.tar_pipeline(
        arglist1=[
            '/bin/tar',
            '-xvOf',
            DF,  # O to stdout
            'control.tar'
        ],
        arglist2=[
            '/bin/tar', '--directory', TTS.UPSTREAM['update_script_dir'],
            '-xvf', '-'
        ],
    )
    for F in File_List.split('\n'):
        logger.debug(F)
    if Errors and not re.search('Removing\ leading', Errors):
        raise TTE.PreInstException('control.tar unpacking problem: %s' %
                                   Errors)