result = item->pbt_client->kexec_cb(item->pbt_client, opt_data);
if (!result) {
- //mvaddstr(1, 0, "system is going down now...");
- sleep(60);
+ sleep(item->pbt_client->dry_run ? 1 : 60);
}
pb_log("%s: failed: %s\n", __func__, opt_data->kd->image);
memset(client, 0, sizeof(*client));
}
-struct pbt_client *pbt_client_init(enum pbt_twin_backend backend, unsigned int width,
- unsigned int height,
- int (*kexec_cb)(struct pbt_client *, struct pb_opt_data *))
+struct pbt_client *pbt_client_init(enum pbt_twin_backend backend,
+ unsigned int width, unsigned int height,
+ int (*kexec_cb)(struct pbt_client *, struct pb_opt_data *),
+ int start_deamon, int dry_run)
{
struct pbt_client *pbt_client;
unsigned int i;
pbt_client->sig = "pbt_client";
pbt_client->kexec_cb = kexec_cb;
+ pbt_client->dry_run = dry_run;
pbt_client->frame.scr = pbt_scr_init(pbt_client, backend, width, height,
NULL, NULL);
/* Loop here for scripts that just started the server. */
if (1) {
+start_deamon:
for (i = 10; i; i--) {
pbt_client->discover_client
= discover_client_init(&pbt_client_ops, pbt_client);
-
if (pbt_client->discover_client)
break;
-
pb_log("%s: waiting for server %d\n", __func__, i);
sleep(1);
}
+ if (!pbt_client->discover_client && start_deamon) {
+ int result;
+
+ start_deamon = 0;
+
+ result = pb_start_daemon();
+
+ if (!result)
+ goto start_deamon;
+
+ pb_log("%s: discover_client_init failed.\n", __func__);
+ fprintf(stderr, "%s: error: discover_client_init failed.\n",
+ __func__);
+ fprintf(stderr, "could not start pb-discover, the petitboot "
+ "daemon.\n");
+ goto fail_client_init;
+ }
+
if (!pbt_client->discover_client) {
pb_log("%s: discover_client_init failed.\n", __func__);
fprintf(stderr, "%s: error: discover_client_init failed.\n",