]>
Commit | Line | Data |
---|---|---|
50df544c WB |
1 | #!/usr/bin/perl |
2 | ||
50df544c WB |
3 | use strict; |
4 | use warnings; | |
5 | ||
55d14e39 WB |
6 | use File::Path; |
7 | use File::Basename; | |
8 | ||
0a49c44e | 9 | use PVE::LXC::Tools; |
50df544c WB |
10 | use PVE::Tools; |
11 | ||
0a49c44e WB |
12 | PVE::LXC::Tools::lxc_hook('autodev', 'lxc', sub { |
13 | my ($vmid, $vars, undef, undef) = @_; | |
50df544c | 14 | |
0a49c44e | 15 | my $root = $vars->{ROOTFS_MOUNT}; |
50df544c | 16 | |
e84241f7 WB |
17 | PVE::LXC::Tools::for_current_devices($vmid, sub { |
18 | my ($type, $major, $minor, $dev) = @_; | |
19 | ||
20 | my $rel_devpath = "/dev/$dev"; | |
21 | my $rel_dir = dirname($rel_devpath); | |
22 | File::Path::mkpath("$root/$rel_dir"); | |
23 | ||
24 | PVE::Tools::run_command(['mknod', '-m', '666', "$root/dev/$dev", | |
25 | $type, $major, $minor]); | |
26 | ||
27 | if ($dev =~ /^dm-\d+$/) { | |
28 | File::Path::mkpath("$root/dev/mapper"); | |
29 | my $mapped_name = PVE::Tools::file_get_contents("/sys/block/$dev/dm/name"); | |
30 | chomp $mapped_name; | |
31 | symlink("/dev/$dev", "$root/dev/mapper/$mapped_name"); | |
32 | } | |
33 | ||
34 | my $cgbase = "/sys/fs/cgroup/devices/lxc/$vmid"; | |
35 | my $limitpath = "$cgbase/devices.allow"; | |
36 | my $nspath = "$cgbase/ns/devices.allow"; | |
37 | if (!PVE::LXC::Tools::cgroup_do_write($limitpath, "$type $major:$minor rwm")) { | |
38 | warn "failed to allow access to device $dev ($major:$minor)\n"; | |
39 | } | |
40 | if (!PVE::LXC::Tools::cgroup_do_write($nspath, "$type $major:$minor rwm")) { | |
41 | warn "failed to allow access to device $dev ($major:$minor) inside the namespace\n"; | |
42 | } | |
43 | }); | |
0a49c44e | 44 | }); |