diff options
author | Eudyptula <eitan@mosenkis.net> | 2009-08-13 17:35:58 -0400 |
---|---|---|
committer | Eudyptula <eitan@mosenkis.net> | 2009-08-13 17:35:58 -0400 |
commit | 3d5c48d6d0c249d5a51318d3524c2d40e8bf1df9 (patch) | |
tree | b4f5d2c673aadbc786eb54c7f4dc32dba8dcdf46 /backend | |
parent | Various improvements to HTML forms classes; Updated login to use form object;... (diff) | |
download | ingenue-3d5c48d6d0c249d5a51318d3524c2d40e8bf1df9.tar.gz ingenue-3d5c48d6d0c249d5a51318d3524c2d40e8bf1df9.tar.bz2 ingenue-3d5c48d6d0c249d5a51318d3524c2d40e8bf1df9.zip |
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'
Diffstat (limited to 'backend')
-rw-r--r-- | backend/bundlers/cd-head.php | 10 | ||||
-rw-r--r-- | backend/functions/read_stage3.php | 26 | ||||
-rw-r--r-- | backend/modules/gentoo_portage/base-system.php | 42 | ||||
-rw-r--r-- | backend/modules/gentoo_portage/portage.php | 9 |
4 files changed, 60 insertions, 27 deletions
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 @@ <?php $profile=new sql_gentoo_profile($opts['profile']); -$headers=$profile->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 @@ +<?php +function read_stage3($entry, $update=false) { + global $S; + if ($update) { + query('DELETE FROM `gentoo_basepkgs` WHERE `key`="'.$entry->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 @@ <?php -$file=CACHE.'/stage3/'.$profile->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 @@ <?php -$file=glob(CACHE.'/portage/*.tar.bz2'); -if ($file) { - $file=array_reverse($file); - $file=$file[0]; +$r=query('SELECT * FROM `cache` WHERE `type`="portage"'); +if ($r->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); |