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))
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)
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)