before unmounting /proc, check if /proc/sys/fs/binfmt_misc is mounted
This commit is contained in:
parent
6227bb2580
commit
394731102a
1 changed files with 25 additions and 0 deletions
25
mmdebstrap
25
mmdebstrap
|
@ -137,6 +137,26 @@ sub error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check whether a directory is mounted by comparing the device number of the
|
||||||
|
# directory itself with its parent
|
||||||
|
sub is_mountpoint($) {
|
||||||
|
my $dir = shift;
|
||||||
|
if (! -e $dir) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
my @a = stat "$dir/.";
|
||||||
|
my @b = stat "$dir/..";
|
||||||
|
# if the device number is different, then the directory must be mounted
|
||||||
|
if ($a[0] != $b[0]) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
# if the inode number is the same, then the directory must be mounted
|
||||||
|
if ($a[1] == $b[1]) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
# tar cannot figure out the decompression program when receiving data on
|
# tar cannot figure out the decompression program when receiving data on
|
||||||
# standard input, thus we do it ourselves. This is copied from tar's
|
# standard input, thus we do it ourselves. This is copied from tar's
|
||||||
# src/suffix.c
|
# src/suffix.c
|
||||||
|
@ -850,6 +870,11 @@ sub run_chroot(&$) {
|
||||||
}
|
}
|
||||||
if ($options->{mode} eq 'root') {
|
if ($options->{mode} eq 'root') {
|
||||||
push @cleanup_tasks, sub {
|
push @cleanup_tasks, sub {
|
||||||
|
# some maintainer scripts mount additional stuff into /proc
|
||||||
|
# which we need to unmount beforehand
|
||||||
|
if (is_mountpoint("$options->{root}/proc/sys/fs/binfmt_misc")) {
|
||||||
|
0 == system('umount', "$options->{root}/proc/sys/fs/binfmt_misc") or error "umount /proc/sys/fs/binfmt_misc failed: $?";
|
||||||
|
}
|
||||||
0 == system('umount', "$options->{root}/proc") or error "umount /proc failed: $?";
|
0 == system('umount', "$options->{root}/proc") or error "umount /proc failed: $?";
|
||||||
};
|
};
|
||||||
0 == system('mount', '-t', 'proc', 'proc', "$options->{root}/proc") or error "mount /proc failed: $?";
|
0 == system('mount', '-t', 'proc', 'proc', "$options->{root}/proc") or error "mount /proc failed: $?";
|
||||||
|
|
Loading…
Reference in a new issue