summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEudyptula <eitan@mosenkis.net>2009-08-13 17:35:58 -0400
committerEudyptula <eitan@mosenkis.net>2009-08-13 17:35:58 -0400
commit3d5c48d6d0c249d5a51318d3524c2d40e8bf1df9 (patch)
treeb4f5d2c673aadbc786eb54c7f4dc32dba8dcdf46 /backend
parentVarious improvements to HTML forms classes; Updated login to use form object;... (diff)
downloadingenue-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.php10
-rw-r--r--backend/functions/read_stage3.php26
-rw-r--r--backend/modules/gentoo_portage/base-system.php42
-rw-r--r--backend/modules/gentoo_portage/portage.php9
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);