From 3d5c48d6d0c249d5a51318d3524c2d40e8bf1df9 Mon Sep 17 00:00:00 2001 From: Eudyptula Date: Thu, 13 Aug 2009 17:35:58 -0400 Subject: Wrote a script for automatically keeping cache files (stage3, install ISO, etc.) up to date by ftp, updated frontend and backend to reflect storing stage3 and iso filenames in the 'cache' table instead of 'gentoo_profiles' --- backend/bundlers/cd-head.php | 10 +++--- backend/functions/read_stage3.php | 26 ++++++++++++++++ backend/modules/gentoo_portage/base-system.php | 42 +++++++++++++++----------- backend/modules/gentoo_portage/portage.php | 9 +++--- 4 files changed, 60 insertions(+), 27 deletions(-) create mode 100644 backend/functions/read_stage3.php (limited to 'backend') diff --git a/backend/bundlers/cd-head.php b/backend/bundlers/cd-head.php index 2e96bba..385b261 100644 --- a/backend/bundlers/cd-head.php +++ b/backend/bundlers/cd-head.php @@ -1,8 +1,8 @@ get_headers(); -if (strpos($headers['chost'], 'x86_64') === false) - $minimaliso=CACHE.'/cd/install-x86-minimal-20090623.iso'; -else - $minimaliso=CACHE.'/cd/install-amd64-minimal-20090625.iso'; +$r=query('SELECT * FROM `cache` WHERE `type`="cd" AND `key`="'.$profile->get_arch().'"'); +if ($r->rowCount() == 0) + throw_exception('No CD in cache for arch '.$profile->get_arch()); +$entry=new sql_cache_entry($r->fetch(PDO::FETCH_ASSOC)); +$minimaliso=CACHE."/$entry->file"; ?> diff --git a/backend/functions/read_stage3.php b/backend/functions/read_stage3.php new file mode 100644 index 0000000..21cfd01 --- /dev/null +++ b/backend/functions/read_stage3.php @@ -0,0 +1,26 @@ +key.'"'); + query('DELETE FROM `gentoo_baseinit` WHERE `key`="'.$entry->key.'"'); + } + $file=CACHE."/$entry->file"; + if (!is_readable($file)) return false; + $opt='-tv'.(substr($file, -3) == 'bz2'?'j':'z').'f'; + $prefix='./var/db/pkg/'; + $files=explode("\n", is_readable("$file.CONTENTS")?file_get_contents("$file.CONTENTS"):shell_exec('tar '.$opt.' '.escapeshellarg($file))); + if (!is_file("$file.CONTENTS")) + file_put_contents("$file.CONTENTS", implode("\n", $files)); + foreach ($files as $file) { + if (preg_match('#^[^.]+\./var/db/pkg/(.*/.*)/$#', $file, $match)) { + $pkg=new sql_gentoo_basepkg($entry->key, $match[1]); + $pkg->write(); + } elseif (preg_match('#^[^.]+\./etc/runlevels/([^/]+)/([^/]+) -> /etc/init\.d/#', $file, $match)) { + $init=new sql_gentoo_baseinit($entry->key, $match[2], $match[1]); + $init->write(); + } + } + return true; +} +?> diff --git a/backend/modules/gentoo_portage/base-system.php b/backend/modules/gentoo_portage/base-system.php index 0c730e9..c578ce5 100644 --- a/backend/modules/gentoo_portage/base-system.php +++ b/backend/modules/gentoo_portage/base-system.php @@ -1,22 +1,28 @@ stage3; -execute_command('Unpack base system', "tar -xvjpf '$file' -C '$imagedir'"); -if ($opts['basesystem'] == 'user_prune' && $opts['prunepkgs']) { - emerge($opts['prunepkgs'], 'Prune base system packages', '-C'); -} elseif ($opts['basesystem'] == 'auto_prune') { - throw_exception('Base system auto-prune not implemented - need package list'); - $keep=explode(' ', $keep_pkgs); - $remove=array(); - $r=query('SELECT * FROM `gentoo_basepkgs` WHERE `profile`='.$profile->id); - while ($pkg=$r->fetch(PDO::FETCH_ASSOC)) { - $pkg=$pkg['pkg']; - if (($i=array_search($pkg, $keep)) === false) - $remove[]=$pkg; - else - unset($keep[$i]); - } - emerge($remove, 'Automatically prune base system packages', '-C'); -} elseif ($opts['basesystem'] == 'emerge') { +if ($opts['basesystem'] == 'emerge') { emerge('system', 'Emerge base system'); +} else { + $r=query('SELECT * FROM `cache` WHERE `type`="stage3" AND `key`="'.$profile->get_identifier().'"'); + if ($r->rowCount() == 0) + throw_exception('No stage3 in cache for '.$profile->get_identifier()); + $entry=new sql_cache_entry($r->fetch(PDO::FETCH_ASSOC)); + $file=CACHE."/$entry->file"; + execute_command('Unpack base system', "tar -xvjpf '$file' -C '$imagedir'"); + if ($opts['basesystem'] == 'user_prune' && $opts['prunepkgs']) { + emerge($opts['prunepkgs'], 'Prune base system packages', '-C'); + } elseif ($opts['basesystem'] == 'auto_prune') { + throw_exception('Base system auto-prune not implemented - need package list'); + $keep=explode(' ', $keep_pkgs); + $remove=array(); + $r=query('SELECT * FROM `gentoo_basepkgs` WHERE `profile`='.$profile->id); + while ($pkg=$r->fetch(PDO::FETCH_ASSOC)) { + $pkg=$pkg['pkg']; + if (($i=array_search($pkg, $keep)) === false) + $remove[]=$pkg; + else + unset($keep[$i]); + } + emerge($remove, 'Automatically prune base system packages', '-C'); + } } ?> diff --git a/backend/modules/gentoo_portage/portage.php b/backend/modules/gentoo_portage/portage.php index bcfa7d7..324a370 100644 --- a/backend/modules/gentoo_portage/portage.php +++ b/backend/modules/gentoo_portage/portage.php @@ -1,8 +1,8 @@ rowCount() > 0) { + $entry=new sql_cache_entry($r->fetch(PDO::FETCH_ASSOC)); + $file=CACHE."/$entry->file"; execute_command('Unpack portage snapshot', "tar -xvjpf '$file' -C '$imagedir/usr'"); } else { start_internal_task('Copy local portage tree to image'); @@ -13,6 +13,7 @@ if ($file) { $cmd="cp -av -t '$imagedir/usr/portage/' '$from'"; error_get_last(); @shell_exec($cmd); + // TODO something wrong with this end_internal task being in the foreach end_internal_task((int)(bool)error_get_last()); } end_internal_task(0); -- cgit v1.2.3-65-gdbad