i will not be here next week, and i don't know if i have to commit this patch before RC1
so i attach the patches for S10lowmem and anna.c file
test it for other arches,
joey will decide to put it or not for RC1
bye sylvain
Index: S10lowmem =================================================================== --- S10lowmem (revision 17618) +++ S10lowmem (working copy) @@ -8,9 +8,13 @@ ram=$(expr "$ram" / 1024) # convert to megabytes # This is the max memory footprint of the installer in non lowmem mode # up to running the partitioner. + # According to memory size, we define different levels ARCH=`udpkg --print-architecture` case $ARCH in - i386) needed=45 ;; + i386) + needed=45 + level1=32 + ;; mips) needed=25 ;; mipsel) needed=25 ;; m68k) needed=25 ;; @@ -23,4 +27,8 @@ trimtemplates /var/lib/dpkg/info || true fi + + if [ "$ram" -lt "$level1" ]; then + touch /var/lib/lowmem-lvl1 + fi fi
Index: anna.c
===================================================================
--- anna.c (revision 17618)
+++ anna.c (working copy)
@@ -6,6 +6,9 @@
#include <sys/utsname.h>
#include "anna.h"
+#define STATUS_FILE "/var/lib/lowmem-lvl1"
+int lowmem=0;
+
struct debconfclient *debconf = NULL;
static char *running_kernel = NULL, *subarchitecture;
@@ -69,8 +72,9 @@
{
char *choices;
int package_count = 0;
- di_package *package, *status_package, **package_array;
- di_slist_node *node, *node1;
+ di_package *package, *status_package, **package_array, *test_package;
+ di_slist_node *node, *node1, *node2;
+ int reverse_depend=0;
config_retriever();
@@ -123,22 +127,48 @@
if (!di_system_package_check_subarchitecture(package, subarchitecture))
continue;
- if (((di_system_package *)package)->kernel_version)
- {
- if (running_kernel && strcmp(running_kernel, ((di_system_package *)package)->kernel_version) == 0)
- {
- package->status_want = di_package_status_want_unknown;
- di_log (DI_LOG_LEVEL_DEBUG, "ask for %s, matches kernel", package->package);
- }
- else
- continue;
- }
+ di_log (DI_LOG_LEVEL_DEBUG, "lowmem: %d, debconf status: %s", lowmem, debconf->value);
+
+ if (((di_system_package *)package)->kernel_version)
+ {
+ if (running_kernel && strcmp(running_kernel, ((di_system_package *)package)->kernel_version) == 0)
+ {
+ package->status_want = di_package_status_want_unknown;
+ di_log (DI_LOG_LEVEL_DEBUG, "ask for %s, matches kernel", package->package);
+ }
+ else
+ continue;
+ }
+
+ if (lowmem) {
+ if (package->priority == di_package_priority_standard
+ && ! ((di_system_package *)package)->installer_menu_item) {
+ /* get only packages which are not dependencies of other packages */
+ reverse_depend=0;
+ for (node1 = (*packages)->list.head; node1; node1 = node1->next) {
+ test_package = node1->data;
+ for (node2 = test_package->depends.head; node2; node2 = node2->next) {
+ di_package_dependency *d = node2->data;
+ if (d->ptr == package) {
+ reverse_depend=1;
+ }
+ }
+ }
+ if (reverse_depend == 0 && ! ((di_system_package *)package)->kernel_version) {
+ package->status_want = di_package_status_want_unknown;
+ }
+ package->priority = di_package_priority_optional;
+ }
+ }
+
if (package->priority >= di_package_priority_standard || is_queued(package))
{
package->status_want = di_package_status_want_install;
di_log (DI_LOG_LEVEL_DEBUG, "install %s, priority >= standard", package->package);
}
- else if (((di_system_package *)package)->installer_menu_item)
+ else if (((di_system_package *)package)->installer_menu_item
+ && package->status != di_package_status_installed) /* we don't want to see installed packages
+ * in choices list*/
{
package->status_want = di_package_status_want_unknown;
di_log (DI_LOG_LEVEL_DEBUG, "ask for %s, is installer item", package->package);
@@ -167,8 +197,12 @@
choices = list_to_choices(package_array);
debconf_fset(debconf, ANNA_CHOOSE_MODULES, "seen", "false");
debconf_subst(debconf, ANNA_CHOOSE_MODULES, "CHOICES", choices);
- debconf_input(debconf, "medium", ANNA_CHOOSE_MODULES);
-
+ if (lowmem) {
+ debconf_input(debconf, "high", ANNA_CHOOSE_MODULES);
+ }
+ else {
+ debconf_input(debconf, "medium", ANNA_CHOOSE_MODULES);
+ }
di_free(choices);
di_free(package_array);
@@ -334,6 +368,11 @@
di_system_init("anna");
+ /* test if lowmem is activated */
+ if( rename(STATUS_FILE, STATUS_FILE) == 0) {
+ lowmem=1;
+ }
+
if (debconf_get(debconf, "debian-installer/kernel/subarchitecture"))
subarchitecture = strdup("generic");
else

