def test_(self):
     content = dedent("""\
             # Latest as of Mon, 05 Oct 2015 18:30:01 +0000
             # ts=1444069801
             20151001/stage3-amd64-20151001.tar.bz2 224211865
             20151001/hardened/stage3-amd64-hardened-20151001.tar.bz2 220165244
             20151001/hardened/stage3-amd64-hardened+nomultilib-20151001.tar.bz2 211952954
             20151001/stage3-amd64-nomultilib-20151001.tar.bz2 214753131
             20150905/uclibc/stage3-amd64-uclibc-hardened-20150905.tar.bz2 138274772
             20150905/uclibc/stage3-amd64-uclibc-vanilla-20150905.tar.bz2 135760218
             20150819/stage3-x32-20150819.tar.bz2 241353307
             """)
     year, month, day = find_latest_stage3_date(content, 'http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-stage3.txt', 'amd64')
     self.assertEquals((year, month, day), (2015, 10, 1))
 def test_(self):
     content = dedent("""\
             # Latest as of Mon, 05 Oct 2015 18:30:01 +0000
             # ts=1444069801
             20151001/stage3-amd64-20151001.tar.bz2 224211865
             20151001/hardened/stage3-amd64-hardened-20151001.tar.bz2 220165244
             20151001/hardened/stage3-amd64-hardened+nomultilib-20151001.tar.bz2 211952954
             20151001/stage3-amd64-nomultilib-20151001.tar.bz2 214753131
             20150905/uclibc/stage3-amd64-uclibc-hardened-20150905.tar.bz2 138274772
             20150905/uclibc/stage3-amd64-uclibc-vanilla-20150905.tar.bz2 135760218
             20150819/stage3-x32-20150819.tar.bz2 241353307
             """)
     (year, month, day), _ = find_latest_stage3_date(content, 'http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-stage3.txt', 'amd64')
     self.assertEquals((year, month, day), (2015, 10, 1))
Пример #3
0
    def run(self):
        self.ensure_directories_writable()

        abs_temp_dir = os.path.abspath(tempfile.mkdtemp())
        try:
            abs_gpg_home_dir = self._initialize_gpg_home(abs_temp_dir)

            if self._stage3_date_triple_or_none is None:
                self._messenger.info('Searching for available stage3 tarballs...')
                stage3_latest_file_url = self._get_stage3_latest_file_url()
                stage3_latest_file_content = self.get_url_content(stage3_latest_file_url)
                stage3_date_triple = find_latest_stage3_date(stage3_latest_file_content, stage3_latest_file_url, self._architecture)
                stage3_date_str = self._format_date_stage3_tarball_filename(stage3_date_triple)
                self._messenger.info('Found "%s" to be latest.' % stage3_date_str)
                self._require_fresh_enough(stage3_date_triple)
            else:
                stage3_date_str = self._format_date_stage3_tarball_filename(self._stage3_date_triple_or_none)

            if self._repository_date_triple_or_none is None:
                self._messenger.info('Searching for available portage repository snapshots...')
                snapshot_listing = self.get_url_content(self._get_portage_snapshot_listing_url())
                snapshot_date_str = self._find_latest_snapshot_date(snapshot_listing)
                self._messenger.info('Found "%s" to be latest.' % snapshot_date_str)
                self._require_fresh_enough(self._parse_snapshot_listing_date(snapshot_date_str))
            else:
                snapshot_date_str = '%04d%02d%02d' % self._repository_date_triple_or_none

            self._messenger.info('Downloading portage repository snapshot...')
            snapshot_tarball, snapshot_gpgsig, snapshot_md5sum, snapshot_uncompressed_md5sum \
                    = self._download_snapshot(snapshot_date_str)
            self._verify_detachted_gpg_signature(snapshot_tarball, snapshot_gpgsig, abs_gpg_home_dir)
            self._verify_md5_sum(snapshot_tarball, snapshot_md5sum)

            self._messenger.info('Downloading stage3 tarball...')
            stage3_tarball, stage3_digests_asc \
                    = self._download_stage3(stage3_date_str)
            stage3_digests = os.path.join(abs_temp_dir, os.path.basename(stage3_digests_asc)[:-len('.asc')])
            self._verify_clearsigned_gpg_signature(stage3_digests_asc, stage3_digests, abs_gpg_home_dir)
            self._verify_sha512_sum(stage3_tarball, stage3_digests)

            snapshot_tarball_uncompressed = self._uncompress_tarball(snapshot_tarball)
            self._verify_md5_sum(snapshot_tarball_uncompressed, snapshot_uncompressed_md5sum)

            self._extract_tarball(stage3_tarball, self._abs_target_dir)
            self._extract_tarball(snapshot_tarball_uncompressed, os.path.join(self._abs_target_dir, 'usr'))
        finally:
            self._messenger.info('Cleaning up "%s"...' % abs_temp_dir)
            shutil.rmtree(abs_temp_dir)
Пример #4
0
    def run(self):
        self.ensure_directories_writable()

        abs_temp_dir = os.path.abspath(tempfile.mkdtemp())
        try:
            abs_gpg_home_dir = self._initialize_gpg_home(abs_temp_dir)

            if self._stage3_date_triple_or_none is None:
                self._messenger.info(
                    'Searching for available stage3 tarballs...')
                stage3_latest_file_url = self._get_stage3_latest_file_url()
                stage3_latest_file_content = self.get_url_content(
                    stage3_latest_file_url)
                stage3_date_triple = find_latest_stage3_date(
                    stage3_latest_file_content, stage3_latest_file_url,
                    self._architecture)
                stage3_date_str = self._format_date_stage3_tarball_filename(
                    stage3_date_triple)
                self._messenger.info('Found "%s" to be latest.' %
                                     stage3_date_str)
                self._require_fresh_enough(stage3_date_triple)
            else:
                stage3_date_str = self._format_date_stage3_tarball_filename(
                    self._stage3_date_triple_or_none)

            if self._repository_date_triple_or_none is None:
                self._messenger.info(
                    'Searching for available portage repository snapshots...')
                snapshot_listing = self.get_url_content(
                    self._get_portage_snapshot_listing_url())
                snapshot_date_str = self._find_latest_snapshot_date(
                    snapshot_listing)
                self._messenger.info('Found "%s" to be latest.' %
                                     snapshot_date_str)
                self._require_fresh_enough(
                    self._parse_snapshot_listing_date(snapshot_date_str))
            else:
                snapshot_date_str = '%04d%02d%02d' % self._repository_date_triple_or_none

            self._messenger.info('Downloading portage repository snapshot...')
            snapshot_tarball, snapshot_gpgsig, snapshot_md5sum, snapshot_uncompressed_md5sum \
                    = self._download_snapshot(snapshot_date_str)
            self._verify_detachted_gpg_signature(snapshot_tarball,
                                                 snapshot_gpgsig,
                                                 abs_gpg_home_dir)
            self._verify_md5_sum(snapshot_tarball, snapshot_md5sum)

            self._messenger.info('Downloading stage3 tarball...')
            stage3_tarball, stage3_digests_asc \
                    = self._download_stage3(stage3_date_str)
            stage3_digests = os.path.join(
                abs_temp_dir,
                os.path.basename(stage3_digests_asc)[:-len('.asc')])
            self._verify_clearsigned_gpg_signature(stage3_digests_asc,
                                                   stage3_digests,
                                                   abs_gpg_home_dir)
            self._verify_sha512_sum(stage3_tarball, stage3_digests)

            snapshot_tarball_uncompressed = self._uncompress_tarball(
                snapshot_tarball)
            self._verify_md5_sum(snapshot_tarball_uncompressed,
                                 snapshot_uncompressed_md5sum)

            self._extract_tarball(stage3_tarball, self._abs_target_dir)
            self._extract_tarball(snapshot_tarball_uncompressed,
                                  os.path.join(self._abs_target_dir, 'usr'))
        finally:
            self._messenger.info('Cleaning up "%s"...' % abs_temp_dir)
            shutil.rmtree(abs_temp_dir)