mirror of
https://github.com/fspc/gbootroot.git
synced 2025-02-23 09:03:23 -05:00
This adds boot making capabilities for non-root users, right now mknod
privileges are needed, but this will be replaced with devfs if possible.
This commit is contained in:
parent
4a0b30c3f5
commit
2374f01fa2
86
gbootroot
86
gbootroot
@ -129,6 +129,7 @@ my $home = "$ENV{HOME}/.gbootroot";
|
||||
my $uml_xterm = "xterm -e";
|
||||
$main::editor = "emacs --font 6x13";
|
||||
$main::makefs = "mke2fs -F -m0 -i8192"; # Root Disk
|
||||
my $sudo = "sudo";
|
||||
|
||||
# CHANGES
|
||||
#
|
||||
@ -505,7 +506,7 @@ my $time = sprintf("%02d:%02d:%02d-%02d-%02d-%04d",
|
||||
$hour, $min, $sec, $month+1, $day, $year+1900);
|
||||
|
||||
# Here's where stuff gets intersting, non-root users can create root_fs,
|
||||
# which is great for UML.
|
||||
# which is great for UML, and a boot disk.
|
||||
|
||||
if ( $> == 0 ) {
|
||||
|
||||
@ -528,12 +529,29 @@ else {
|
||||
|
||||
# The Administrator just needs to add a line like the one below to the
|
||||
# fstab for each non-root user who wants to be able to create root_fs.
|
||||
# Ofcourse, the user is locked into the ext2 fs in this example, and
|
||||
# `id -u` has to be the actual effective numeric user id.
|
||||
# In this example, `id -u` has to be the actual effective numeric user
|
||||
# id, and the root_fs has to always be named root_fs when it is being
|
||||
# made, but it can be renamed afterwards.
|
||||
#
|
||||
# /tmp/gboot_non_root_`id -u`/root_fs \
|
||||
# /tmp/gboot_non_root_`id -u`/loopback \
|
||||
# ext2 defaults,noauto,user,loop 0 0
|
||||
# auto defaults,noauto,user,loop 0 0
|
||||
#
|
||||
# For the boot/root disks the administrator will have to give the user
|
||||
# special su privileges (mknod) to make special devices. The $sudo
|
||||
# variable can be set to sudo or super, fakeroot won't work.
|
||||
# These include: /dev/{console,null,ram0,ram1,tty0}
|
||||
# These two lines need to be added to create the boot_fs and the boot/root
|
||||
# disk. In this example the user is locked into using one type of device
|
||||
# for the boot/root
|
||||
#
|
||||
# /tmp/gboot_not_root_`id -u`/initrd_image \
|
||||
# /tmp/gboot_not_root_'id -u1`/initrd_mnt \
|
||||
# auto defaults,noauto,user,loop 0 0
|
||||
#
|
||||
# /dev/fd0 /tmp/gboot_not_root_mnt_`id -u` auto defaults,noauto,user 0 0
|
||||
|
||||
|
||||
|
||||
my $user = $>;
|
||||
|
||||
@ -544,9 +562,9 @@ else {
|
||||
}
|
||||
$tmp = "$tmp1/gboot_non_root_" . $user;
|
||||
|
||||
if (!-d "$tmp1/gbootroot_mnt$time") {
|
||||
$mnt = "$tmp1/gbootroot_mnt$time" if err_custom_perl(
|
||||
"mkdir $tmp1/gbootroot_mnt$time",
|
||||
if (!-d "$tmp1/gboot_non_root_mnt_" . $user) {
|
||||
$mnt = "$tmp1/gboot_non_root_mnt_" . $user if err_custom_perl(
|
||||
"mkdir $tmp1/gboot_non_root_mnt_" . $user,
|
||||
"gBootRoot: ERROR: Could not make mount directory") != 2;
|
||||
}
|
||||
|
||||
@ -2615,7 +2633,15 @@ sub lilo_put_it_together {
|
||||
info(0, "Umount device\n");
|
||||
info(0, "Remount device\n");
|
||||
pb($B,6);
|
||||
return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2;
|
||||
|
||||
# Real device
|
||||
if ( $> == 0 ) {
|
||||
return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2;
|
||||
}
|
||||
else {
|
||||
return if errm(sys("mount $mnt")) == 2;
|
||||
}
|
||||
|
||||
info(0, "Configuring lilo\n");
|
||||
pb($B,7);
|
||||
chdir("$mnt"); #"boot_root: ERROR: Could not change directories\n";
|
||||
@ -3046,9 +3072,15 @@ sub initrd {
|
||||
if (!-d "$tmp/initrd_mnt") {
|
||||
return if errmk(sys("mkdir $tmp/initrd_mnt")) == 2;
|
||||
}
|
||||
return if errm(sys("mount -o loop -t ext2 $tmp/$initrd $tmp/initrd_mnt"))
|
||||
== 2;
|
||||
|
||||
# Here the loop device is made on tmp, not mnt
|
||||
if ( $> == 0 ) {
|
||||
return if errm(sys("mount -o loop -t ext2 $tmp/$initrd $tmp/initrd_mnt"))
|
||||
== 2;
|
||||
}
|
||||
else {
|
||||
return if errm(sys("mount $tmp/initrd_mnt"))
|
||||
}
|
||||
pb($I,4);
|
||||
|
||||
info(0, "Putting everything together\n");
|
||||
@ -3070,10 +3102,21 @@ sub initrd {
|
||||
return if err(sys("cp -a $container[BOOT_DEVICE] $mnt/dev")) == 2;
|
||||
}
|
||||
|
||||
return if errcp(
|
||||
sys("cp -a /dev/{console,null,ram0,ram1,tty0} $tmp/initrd_mnt/dev")) == 2;
|
||||
return if errcp(sys("cp -a $container[BOOT_DEVICE] $tmp/initrd_mnt/dev"))
|
||||
if ( $> == 0 ) {
|
||||
return if errcp(
|
||||
sys("cp -a /dev/{console,null,ram0,ram1,tty0} $tmp/initrd_mnt/dev")) == 2;
|
||||
return if errcp(sys("cp -a $container[BOOT_DEVICE] $tmp/initrd_mnt/dev"))
|
||||
== 2;
|
||||
}
|
||||
else {
|
||||
# This could be replaced by a devfs.
|
||||
sys("$sudo mknod c 5 1 $tmp/initrd_mnt/dev/console");
|
||||
sys("$sudo mknod c 1 3 $tmp/initrd_mnt/dev/null");
|
||||
sys("$sudo mknod b 1 0 $tmp/initrd_mnt/dev/ram0");
|
||||
sys("$sudo mknod b 1 1 $tmp/initrd_mnt/dev/ram1");
|
||||
sys("$sudo mknod c 4 0 $tmp/initrd_mnt/dev/tty0");
|
||||
sys("$sudo mknod b 2 0 $tmp/initrd_mnt/dev/fd0");
|
||||
}
|
||||
pb($I,7);
|
||||
|
||||
# This and libs should be user accessible
|
||||
@ -3451,8 +3494,9 @@ sub mtab_check {
|
||||
sys("mke2fs -F -m0 -i8192 $entry_advanced[3] $root_device_size");
|
||||
}
|
||||
|
||||
|
||||
# BOOT_DEVICE
|
||||
elsif ($count == 0) {
|
||||
elsif ($count == 0) {
|
||||
sys("mke2fs -F -m0 -i8192 $entry_advanced[0] $container[SIZE]");
|
||||
}
|
||||
|
||||
@ -3464,12 +3508,22 @@ sub mtab_check {
|
||||
|
||||
# ROOT_DEVICE
|
||||
if ($count == 1) {
|
||||
return if errm(sys("mount -t ext2 $entry_advanced[3] $mnt")) == 2;
|
||||
if ( $> == 0 ) {
|
||||
return if errm(sys("mount -t ext2 $entry_advanced[3] $mnt")) == 2;
|
||||
}
|
||||
else {
|
||||
return if errm(sys("mount $mnt")) == 2;
|
||||
}
|
||||
}
|
||||
|
||||
# BOOT_DEVICE
|
||||
elsif ($count == 0) {
|
||||
return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2;
|
||||
if ( $> == 0 ) {
|
||||
return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2;
|
||||
}
|
||||
else {
|
||||
return if errm(sys("mount $mnt")) == 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user