mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
installer: Enable new partitioning code to be run in unattended mode
The first disk of the system will automatically be used and a standard installation will be done. After that is done, the system will reboot into the freshly installed system and execute setup.
This commit is contained in:
@@ -58,7 +58,7 @@ Run an unattended installation.
|
||||
ENDTEXT
|
||||
KERNEL vmlinuz
|
||||
INITRD instroot
|
||||
APPEND unattended
|
||||
APPEND installer.unattended
|
||||
MENU END
|
||||
|
||||
MENU BEGIN tools
|
||||
|
||||
@@ -323,6 +323,27 @@ struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct hw_disk** hw_select_first_disk(const struct hw_disk** disks) {
|
||||
struct hw_disk** ret = hw_create_disks();
|
||||
struct hw_disk** selected_disks = ret;
|
||||
|
||||
unsigned int num_disks = hw_count_disks(disks);
|
||||
assert(num_disks > 0);
|
||||
|
||||
for (unsigned int i = 0; i < num_disks; i++) {
|
||||
struct hw_disk *disk = disks[i];
|
||||
disk->ref++;
|
||||
|
||||
*selected_disks++ = disk;
|
||||
break;
|
||||
}
|
||||
|
||||
// Set sentinel
|
||||
*selected_disks = NULL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static unsigned long long hw_swap_size(struct hw_destination* dest) {
|
||||
unsigned long long memory = hw_memory();
|
||||
|
||||
|
||||
@@ -109,6 +109,7 @@ struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive);
|
||||
void hw_free_disks(struct hw_disk** disks);
|
||||
unsigned int hw_count_disks(struct hw_disk** disks);
|
||||
struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection);
|
||||
struct hw_disk** hw_select_first_disk(const struct hw_disk** disks);
|
||||
|
||||
struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks);
|
||||
|
||||
|
||||
@@ -281,17 +281,16 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
snprintf(title, sizeof(title), "%s - %s", NAME, SLOGAN);
|
||||
|
||||
if (! (cmdfile = fopen("/proc/cmdline", "r")))
|
||||
{
|
||||
if (! (cmdfile = fopen("/proc/cmdline", "r"))) {
|
||||
fprintf(flog, "Couldn't open commandline: /proc/cmdline\n");
|
||||
} else {
|
||||
fgets(line, STRING_SIZE, cmdfile);
|
||||
|
||||
|
||||
// check if we have to make an unattended install
|
||||
if (strstr (line, "unattended") != NULL) {
|
||||
if (strstr(line, "installer.unattended") != NULL) {
|
||||
splashWindow(title, _("Warning: Unattended installation will start in 10 seconds..."), 10);
|
||||
unattended = 1;
|
||||
runcommandwithstatus("/bin/sleep 10", title, "WARNING: Unattended installation will start in 10 seconds...", NULL);
|
||||
}
|
||||
}
|
||||
// check if we have to patch for serial console
|
||||
if (strstr (line, "console=ttyS0") != NULL) {
|
||||
serialconsole = 1;
|
||||
@@ -314,7 +313,7 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
langnames[NUM_LANGS] = NULL;
|
||||
|
||||
rc = newtWinMenu(_("Language selection"), _("Select the language you wish to use for the installation."),
|
||||
rc = newtWinMenu(_("Language selection"), _("Select the language you wish to use for the installation."),
|
||||
50, 5, 5, 8, langnames, &choice, _("OK"), NULL);
|
||||
|
||||
assert(choice <= NUM_LANGS);
|
||||
@@ -406,8 +405,10 @@ int main(int argc, char *argv[]) {
|
||||
goto EXIT;
|
||||
|
||||
// exactly one disk has been found
|
||||
} else if (num_disks == 1) {
|
||||
selected_disks = hw_select_disks(disks, NULL);
|
||||
// or if we are running in unattended mode, we will select
|
||||
// the first disk and go with that one
|
||||
} else if ((num_disks == 1) || (unattended && num_disks >= 1)) {
|
||||
selected_disks = hw_select_first_disk(disks);
|
||||
|
||||
// more than one usable disk has been found and
|
||||
// the user needs to choose what to do with them
|
||||
@@ -442,6 +443,11 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
}
|
||||
|
||||
// Don't print the auto-selected harddisk setup in
|
||||
// unattended mode.
|
||||
if (unattended)
|
||||
break;
|
||||
|
||||
num_selected_disks = hw_count_disks(selected_disks);
|
||||
|
||||
if (num_selected_disks == 1) {
|
||||
|
||||
@@ -52,6 +52,7 @@ int runcommandwithprogress(int width, int height, const char *title, const char
|
||||
int lines, char *text, ...);
|
||||
int runcommandwithstatus(const char *command, const char* title, const char *message, const char* output);
|
||||
int runhiddencommandwithstatus(const char *command, const char* title, const char *message, const char* output);
|
||||
int splashWindow(const char* title, const char* message, unsigned int timeout);
|
||||
int checkformodule(const char *module);
|
||||
int replace(char filename1[], char *from, char *to);
|
||||
char* get_version(void);
|
||||
|
||||
@@ -90,6 +90,16 @@ int runhiddencommandwithstatus(const char *command, const char* title, const cha
|
||||
return rc;
|
||||
}
|
||||
|
||||
int splashWindow(const char* title, const char* message, unsigned int timeout) {
|
||||
statuswindow(60, 4, title, message);
|
||||
|
||||
// Wait so the user can read this message
|
||||
sleep(timeout);
|
||||
newtPopWindow();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* This one borrowed from redhat installer. */
|
||||
int runcommandwithprogress(int width, int height, const char *title, const char *command,
|
||||
int lines, char *text, ...) {
|
||||
|
||||
Reference in New Issue
Block a user