Add sysinstall(8) --system and --ports options.
This commit is contained in:
parent
edd8566155
commit
ab9f2353e5
|
@ -6,7 +6,7 @@
|
||||||
.Nd upgrade current operating system from a sysroot
|
.Nd upgrade current operating system from a sysroot
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm sysmerge
|
.Nm sysmerge
|
||||||
.Op Fl cfw
|
.Op Fl cfpsw
|
||||||
.Op Fl \-booting
|
.Op Fl \-booting
|
||||||
.Op Fl \-hook-finalize
|
.Op Fl \-hook-finalize
|
||||||
.Op Fl \-hook-prepare
|
.Op Fl \-hook-prepare
|
||||||
|
@ -87,6 +87,16 @@ This is meant to be used by the old
|
||||||
when it invokes the new
|
when it invokes the new
|
||||||
.Nm
|
.Nm
|
||||||
during a non-waiting upgrade.
|
during a non-waiting upgrade.
|
||||||
|
.It Fl s , Fl \-system
|
||||||
|
Upgrade the system.
|
||||||
|
This option is implied unless
|
||||||
|
.Fl \-ports
|
||||||
|
is passed.
|
||||||
|
.It Fl p , Fl \-ports
|
||||||
|
Upgrade the ports.
|
||||||
|
This option is implied unless
|
||||||
|
.Fl \-system
|
||||||
|
is passed.
|
||||||
.It Fl w , Fl \-wait
|
.It Fl w , Fl \-wait
|
||||||
Wait until the next boot to complete the upgrade, rather than finishing it now.
|
Wait until the next boot to complete the upgrade, rather than finishing it now.
|
||||||
This installs into the
|
This installs into the
|
||||||
|
|
|
@ -112,6 +112,8 @@ int main(int argc, char* argv[])
|
||||||
bool full = false;
|
bool full = false;
|
||||||
bool hook_finalize = false;
|
bool hook_finalize = false;
|
||||||
bool hook_prepare = false;
|
bool hook_prepare = false;
|
||||||
|
bool ports = false;
|
||||||
|
bool system = false;
|
||||||
bool wait = false;
|
bool wait = false;
|
||||||
|
|
||||||
for ( int i = 1; i < argc; i++ )
|
for ( int i = 1; i < argc; i++ )
|
||||||
|
@ -129,6 +131,8 @@ int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
case 'c': cancel = true; break;
|
case 'c': cancel = true; break;
|
||||||
case 'f': full = true; break;
|
case 'f': full = true; break;
|
||||||
|
case 'p': ports = true; break;
|
||||||
|
case 's': system = true; break;
|
||||||
case 'w': wait = true; break;
|
case 'w': wait = true; break;
|
||||||
default:
|
default:
|
||||||
errx(1, "unknown option -- '%c'", c);
|
errx(1, "unknown option -- '%c'", c);
|
||||||
|
@ -144,6 +148,10 @@ int main(int argc, char* argv[])
|
||||||
hook_finalize = true;
|
hook_finalize = true;
|
||||||
else if ( !strcmp(arg, "--hook-prepare") )
|
else if ( !strcmp(arg, "--hook-prepare") )
|
||||||
hook_prepare = true;
|
hook_prepare = true;
|
||||||
|
else if ( !strcmp(arg, "--system") )
|
||||||
|
system = true;
|
||||||
|
else if ( !strcmp(arg, "--ports") )
|
||||||
|
ports = true;
|
||||||
else if ( !strcmp(arg, "--wait") )
|
else if ( !strcmp(arg, "--wait") )
|
||||||
wait = true;
|
wait = true;
|
||||||
else
|
else
|
||||||
|
@ -171,6 +179,8 @@ int main(int argc, char* argv[])
|
||||||
source = "/sysmerge";
|
source = "/sysmerge";
|
||||||
if ( 1 < argc )
|
if ( 1 < argc )
|
||||||
errx(2, "Unexpected extra operand `%s'", argv[1]);
|
errx(2, "Unexpected extra operand `%s'", argv[1]);
|
||||||
|
system = access_or_die("/sysmerge/tix/sysmerge.system", F_OK) == 0;
|
||||||
|
ports = access_or_die("/sysmerge/tix/sysmerge.ports", F_OK) == 0;
|
||||||
full = access_or_die("/sysmerge/tix/sysmerge.full", F_OK) == 0;
|
full = access_or_die("/sysmerge/tix/sysmerge.full", F_OK) == 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -182,6 +192,11 @@ int main(int argc, char* argv[])
|
||||||
errx(2, "Unexpected extra operand `%s'", argv[2]);
|
errx(2, "Unexpected extra operand `%s'", argv[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !system && !ports )
|
||||||
|
system = ports = true;
|
||||||
|
if ( !ports )
|
||||||
|
full = false;
|
||||||
|
|
||||||
bool did_cancel = false;
|
bool did_cancel = false;
|
||||||
if ( !no_cancel && has_pending_upgrade() )
|
if ( !no_cancel && has_pending_upgrade() )
|
||||||
{
|
{
|
||||||
|
@ -215,9 +230,14 @@ int main(int argc, char* argv[])
|
||||||
struct release new_release;
|
struct release new_release;
|
||||||
if ( !os_release_load(&new_release, new_release_path, new_release_path) )
|
if ( !os_release_load(&new_release, new_release_path, new_release_path) )
|
||||||
{
|
{
|
||||||
if ( errno == ENOENT )
|
if ( !system )
|
||||||
warn("%s", new_release_path);
|
new_release = old_release;
|
||||||
exit(2);
|
else
|
||||||
|
{
|
||||||
|
if ( errno == ENOENT )
|
||||||
|
warn("%s", new_release_path);
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
free(new_release_path);
|
free(new_release_path);
|
||||||
|
|
||||||
|
@ -228,7 +248,8 @@ int main(int argc, char* argv[])
|
||||||
char* new_machine_path;
|
char* new_machine_path;
|
||||||
if ( asprintf(&new_machine_path, "%s/etc/machine", source) < 0 )
|
if ( asprintf(&new_machine_path, "%s/etc/machine", source) < 0 )
|
||||||
err(2, "asprintf");
|
err(2, "asprintf");
|
||||||
char* new_machine = read_string_file(new_machine_path);
|
char* new_machine = !system ? strdup(old_machine) :
|
||||||
|
read_string_file(new_machine_path);
|
||||||
if ( !new_machine )
|
if ( !new_machine )
|
||||||
err(2, "%s", new_machine_path);
|
err(2, "%s", new_machine_path);
|
||||||
if ( strcmp(old_machine, new_machine) != 0 )
|
if ( strcmp(old_machine, new_machine) != 0 )
|
||||||
|
@ -300,6 +321,12 @@ int main(int argc, char* argv[])
|
||||||
my_finalize = false;
|
my_finalize = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !system )
|
||||||
|
{
|
||||||
|
run_prepare = false;
|
||||||
|
run_finalize = false;
|
||||||
|
}
|
||||||
|
|
||||||
if ( header )
|
if ( header )
|
||||||
{
|
{
|
||||||
if ( wait )
|
if ( wait )
|
||||||
|
@ -339,7 +366,7 @@ int main(int argc, char* argv[])
|
||||||
execute((const char*[]) { "tix-collection", "/sysmerge", "create",
|
execute((const char*[]) { "tix-collection", "/sysmerge", "create",
|
||||||
NULL }, "e");
|
NULL }, "e");
|
||||||
}
|
}
|
||||||
install_manifests_detect(source, target, true, true, full);
|
install_manifests_detect(source, target, system, ports, full);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( wait )
|
if ( wait )
|
||||||
|
@ -352,6 +379,20 @@ int main(int argc, char* argv[])
|
||||||
err(1, "/sysmerge/tix/sysmerge.full");
|
err(1, "/sysmerge/tix/sysmerge.full");
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
if ( system && !ports )
|
||||||
|
{
|
||||||
|
int fd = open("/sysmerge/tix/sysmerge.system", O_WRONLY | O_CREAT);
|
||||||
|
if ( fd < 0 )
|
||||||
|
err(1, "/sysmerge/tix/sysmerge.system");
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
if ( ports && !system )
|
||||||
|
{
|
||||||
|
int fd = open("/sysmerge/tix/sysmerge.ports", O_WRONLY | O_CREAT);
|
||||||
|
if ( fd < 0 )
|
||||||
|
err(1, "/sysmerge/tix/sysmerge.ports");
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
execute((const char*[]) { "cp", "/boot/sortix.bin",
|
execute((const char*[]) { "cp", "/boot/sortix.bin",
|
||||||
"/boot/sortix.bin.sysmerge.orig",
|
"/boot/sortix.bin.sysmerge.orig",
|
||||||
NULL }, "e");
|
NULL }, "e");
|
||||||
|
|
Loading…
Reference in New Issue