]>
git.proxmox.com Git - pve-container.git/blob - src/lxc-pve-mount-hook
12 use PVE
:: RPCEnvironment
;
13 use PVE
:: JSONSchema
qw(get_standard_option) ;
20 use base
qw(PVE::CLIHandler) ;
22 $ENV { 'PATH' } = '/sbin:/bin:/usr/sbin:/usr/bin' ;
24 initlog
( 'lxc-pve-mount-hook' );
26 die "please run as root \n " if $> != 0 ;
28 PVE
:: INotify
:: inotify_init
();
30 my $rpcenv = PVE
:: RPCEnvironment-
> init ( 'cli' );
31 $rpcenv -> set_language ( $ENV { LANG
});
32 $rpcenv -> set_user ( 'root @pam ' );
34 # we cannot use cfs_read here (permission problem)
35 #$rpcenv->init_request();
37 my $nodename = PVE
:: INotify
:: nodename
();
39 __PACKAGE__-
> register_method ({
40 name
=> 'lxc-pve-mount-hook' ,
41 path
=> 'lxc-pve-mount-hook' ,
43 description
=> "Create a new container root directory." ,
45 additionalProperties
=> 0 ,
48 description
=> "The container name. This hook is only active for containers using numeric IDs, where configuration is stored on /etc/pve/lxc/<name>/config (else it is just a NOP)." ,
54 description
=> "The path to the container configuration directory (LXC internal argument - do not pass manually!)." ,
58 description
=> "The path to the container's rootfs (LXC internal argument - do not pass manually!)" ,
63 returns
=> { type
=> 'null' },
68 my $private = $param ->{ rootfs
};
70 return undef if $param ->{ name
} !~ m/^\d+$/ ;
72 # Note: PVE::INotify::nodename() returns wrong value when run
73 # inside container mount hook, so we cannot simply
74 # use PVE::LXC::load_conf().
76 my $config_filename = "/etc/pve/lxc/ $param ->{name}.conf" ;
78 return undef if ! - f
$config_filename ;
80 my $raw = PVE
:: Tools
:: file_get_contents
( $config_filename );
81 my $conf = PVE
:: LXC
:: parse_pct_config
( $config_filename, $raw );
83 my $mountpoint = $ENV { LXC_ROOTFS_MOUNT
};
85 my $lxc_setup = PVE
:: LXCSetup-
> new ( $conf, $mountpoint );
86 $lxc_setup -> pre_start_hook ();
92 push @ARGV, 'help' if ! scalar ( @ARGV );
96 if (( scalar ( @ARGV ) == 1 ) && ( $ARGV [ 0 ] eq 'printmanpod' ) ||
97 ( $ARGV [ 0 ] eq 'verifyapi' )) {
99 } elsif (( scalar ( @ARGV ) == 3 ) && ( $ARGV [ 1 ] eq 'lxc' ) && ( $ARGV [ 2 ] eq 'mount' )) {
100 $param ->{ name
} = $ENV { 'LXC_NAME' };
101 die "got wrong name" if $param ->{ name
} ne $ARGV [ 0 ];
103 $param ->{ path
} = $ENV { 'LXC_CONFIG_FILE' };
104 $param ->{ rootfs
} = $ENV { 'LXC_ROOTFS_PATH' };
110 my $cmddef = [ __PACKAGE__
, 'lxc-pve-mount-hook' , [], $param ];
112 PVE
:: CLIHandler
:: handle_simple_cmd
( $cmddef, \
@ARGV, undef , $0 );
120 lxc-pve - LXC mount hook for Proxmox VE
128 This mount hook sets the network and hostname for pve container.
134 =include pve_copyright