]> git.proxmox.com Git - pve-container.git/blob - src/lxc-pve-autodev-hook
migrate: also set targetsid for unreferenced disks
[pve-container.git] / src / lxc-pve-autodev-hook
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use File::Path;
7 use File::Basename;
8
9 use PVE::LXC::Tools;
10 use PVE::Tools;
11
12 PVE::LXC::Tools::lxc_hook('autodev', 'lxc', sub {
13 my ($vmid, $vars, undef, undef) = @_;
14
15 my $root = $vars->{ROOTFS_MOUNT};
16
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 });
44 });